Version Description
Download this release
Release Info
Developer | nico23 |
Plugin | ARVE Advanced Responsive Video Embedder (YouTube, Vimeo, HTML5 Video …) |
Version | 9.2.0 |
Comparing to | |
See all releases |
Code changes from version 9.1.3 to 9.2.0
- advanced-responsive-video-embedder.php +6 -28
- build/common/settings.asset.php +1 -1
- build/common/settings.css +1 -1
- build/common/settings.js +1 -1
- build/main.asset.php +1 -1
- build/main.js +1 -1
- changelog.md +1201 -0
- php/Admin/functions-admin.php +47 -44
- php/Admin/functions-settings-page.php +12 -68
- php/Admin/partials/debug-info.php +0 -18
- php/Admin/partials/pro-ad.html +7 -4
- php/Admin/partials/pro-ad.md +0 -11
- php/Admin/partials/settings-sidebar-amp.html +2 -4
- php/Admin/partials/settings-sidebar-pro.html +27 -28
- php/Admin/partials/settings-sidebar-pro.md +0 -33
- php/Admin/partials/settings-sidebar-random-video.html +10 -9
- php/Admin/partials/settings-sidebar-rate.html +4 -6
- php/Common/Admin/functions-debug.php +56 -0
- php/Common/Admin/functions-settings.php +9 -11
- php/Common/Admin/partials/debug-info.php +21 -0
- php/Common/Settings.php +175 -60
- php/Common/functions-assets.php +27 -16
- php/Common/functions-compat.php +30 -0
- php/Common/functions-deprecated.php +14 -0
- php/Common/functions-license.php +21 -0
- php/Common/functions-misc.php +6 -6
- php/Common/functions-settings.php +19 -7
- php/Common/functions-string.php +36 -27
- php/Common/init.php +4 -0
- php/EmbedChecker.php +2 -2
- php/ShortcodeArgs.php +427 -0
- php/functions-assets.php +2 -2
- php/functions-host-properties.php +5 -5
- php/functions-html-output.php +3 -1
- php/functions-misc.php +29 -36
- php/functions-oembed.php +8 -8
- php/functions-settings.php +204 -146
- php/functions-shortcode-filters.php +103 -501
- php/functions-shortcodes.php +46 -28
- php/functions-url-handlers.php +0 -2
- php/functions-validation.php +1 -105
- readme.txt +171 -148
advanced-responsive-video-embedder.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: ARVE Advanced Responsive Video Embedder
|
4 |
* Plugin URI: https://nextgenthemes.com/plugins/arve-pro/
|
5 |
* Description: Easy responsive video embeds via URL (like WordPress) or Shortcodes. Supports almost anything you can imagine.
|
6 |
-
* Version: 9.
|
7 |
* Author: Nicolas Jonas
|
8 |
* Author URI: https://nextgenthemes.com
|
9 |
* License: GPL-3.0
|
@@ -21,17 +21,17 @@
|
|
21 |
|
22 |
namespace Nextgenthemes\ARVE;
|
23 |
|
24 |
-
const VERSION = '9.
|
25 |
-
const PRO_VERSION_REQUIRED = '5.
|
26 |
const NUM_TRACKS = 3;
|
27 |
const PLUGIN_FILE = __FILE__;
|
28 |
const PLUGIN_DIR = __DIR__;
|
29 |
const VIDEO_FILE_EXTENSIONS = [ 'av1mp4', 'mp4', 'm4v', 'webm', 'ogv' ];
|
30 |
const DEFAULT_MAXWIDTH = 900;
|
31 |
|
32 |
-
|
33 |
|
34 |
-
function
|
35 |
|
36 |
add_option( 'arve_install_date', time() );
|
37 |
|
@@ -42,6 +42,7 @@ function init() {
|
|
42 |
|
43 |
require_once PLUGIN_DIR . '/php/Common/init.php';
|
44 |
require_once PLUGIN_DIR . '/php/EmbedChecker.php';
|
|
|
45 |
require_once PLUGIN_DIR . '/php/functions-deprecated.php';
|
46 |
require_once PLUGIN_DIR . '/php/functions-assets.php';
|
47 |
require_once PLUGIN_DIR . '/php/functions-html-output.php';
|
@@ -72,30 +73,7 @@ function init() {
|
|
72 |
add_filter( 'oembed_ttl', __NAMESPACE__ . '\trigger_cache_rebuild', 10, 4 );
|
73 |
add_filter( 'embed_oembed_discover', __NAMESPACE__ . '\reenable_oembed_cache' );
|
74 |
|
75 |
-
foreach ( [
|
76 |
-
'missing_attribute_check' => -100,
|
77 |
-
'validate' => -99,
|
78 |
-
'detect_html5' => -35,
|
79 |
-
'detect_provider_and_id_from_url' => -30,
|
80 |
-
'aspect_ratio' => -10,
|
81 |
-
'thumbnail' => 10,
|
82 |
-
'video' => 10,
|
83 |
-
'liveleak_id_fix' => 10,
|
84 |
-
'maxwidth' => 10,
|
85 |
-
'dimensions' => 12,
|
86 |
-
'mode' => 14,
|
87 |
-
'autoplay' => 15,
|
88 |
-
'iframe_src' => 20,
|
89 |
-
// Maybe validate_again ?
|
90 |
-
'set_uid' => 90,
|
91 |
-
] as $filter => $priority ) {
|
92 |
-
add_filter( 'shortcode_atts_arve', __NAMESPACE__ . "\\sc_filter_{$filter}", $priority );
|
93 |
-
};
|
94 |
-
unset( $filter );
|
95 |
-
unset( $priority );
|
96 |
-
|
97 |
// Admin Hooks
|
98 |
-
add_action( 'nextgenthemes/arve/admin/settings_header', __NAMESPACE__ . '\Admin\settings_header' );
|
99 |
add_action( 'nextgenthemes/arve/admin/settings_sidebar', __NAMESPACE__ . '\Admin\settings_sidebar' );
|
100 |
|
101 |
add_action( 'admin_bar_menu', __NAMESPACE__ . '\Admin\action_admin_bar_menu', 100 );
|
3 |
* Plugin Name: ARVE Advanced Responsive Video Embedder
|
4 |
* Plugin URI: https://nextgenthemes.com/plugins/arve-pro/
|
5 |
* Description: Easy responsive video embeds via URL (like WordPress) or Shortcodes. Supports almost anything you can imagine.
|
6 |
+
* Version: 9.2.0
|
7 |
* Author: Nicolas Jonas
|
8 |
* Author URI: https://nextgenthemes.com
|
9 |
* License: GPL-3.0
|
21 |
|
22 |
namespace Nextgenthemes\ARVE;
|
23 |
|
24 |
+
const VERSION = '9.2.0';
|
25 |
+
const PRO_VERSION_REQUIRED = '5.1.5';
|
26 |
const NUM_TRACKS = 3;
|
27 |
const PLUGIN_FILE = __FILE__;
|
28 |
const PLUGIN_DIR = __DIR__;
|
29 |
const VIDEO_FILE_EXTENSIONS = [ 'av1mp4', 'mp4', 'm4v', 'webm', 'ogv' ];
|
30 |
const DEFAULT_MAXWIDTH = 900;
|
31 |
|
32 |
+
init_920();
|
33 |
|
34 |
+
function init_920() {
|
35 |
|
36 |
add_option( 'arve_install_date', time() );
|
37 |
|
42 |
|
43 |
require_once PLUGIN_DIR . '/php/Common/init.php';
|
44 |
require_once PLUGIN_DIR . '/php/EmbedChecker.php';
|
45 |
+
require_once PLUGIN_DIR . '/php/ShortcodeArgs.php';
|
46 |
require_once PLUGIN_DIR . '/php/functions-deprecated.php';
|
47 |
require_once PLUGIN_DIR . '/php/functions-assets.php';
|
48 |
require_once PLUGIN_DIR . '/php/functions-html-output.php';
|
73 |
add_filter( 'oembed_ttl', __NAMESPACE__ . '\trigger_cache_rebuild', 10, 4 );
|
74 |
add_filter( 'embed_oembed_discover', __NAMESPACE__ . '\reenable_oembed_cache' );
|
75 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
76 |
// Admin Hooks
|
|
|
77 |
add_action( 'nextgenthemes/arve/admin/settings_sidebar', __NAMESPACE__ . '\Admin\settings_sidebar' );
|
78 |
|
79 |
add_action( 'admin_bar_menu', __NAMESPACE__ . '\Admin\action_admin_bar_menu', 100 );
|
build/common/settings.asset.php
CHANGED
@@ -1 +1 @@
|
|
1 |
-
<?php return array('dependencies' => array('wp-polyfill'), 'version' => '
|
1 |
+
<?php return array('dependencies' => array('wp-polyfill'), 'version' => 'efb1c945ba2b23ad5d22c0a781fa80c7');
|
build/common/settings.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wrap--nextgenthemes{max-width:1100px;margin-right:auto;margin-left:auto}.wp-core-ui .button-primary--ngt-small{height:18px;padding-right:5px;padding-left:5px;line-height:12px}.nextgenthemes-label-text{display:block;margin-bottom:3px;font-weight:600}[type=checkbox]+.nextgenthemes-label-text{display:inline}.wrap--nextgenthemes__loading-indicator{width:16px;height:16px}.ngt-settings-grid{display:-ms-grid;display:grid;grid-column-gap:1rem;grid-template-areas:"content" "sidebar"}@media(min-width: 750px){.ngt-settings-grid{grid-column-gap:2rem;grid-template-areas:"content sidebar";-ms-grid-columns:1fr 2rem 300px;grid-template-columns:1fr 300px}}@media(min-width: 1200px){.ngt-settings-grid{grid-column-gap:3rem;-ms-grid-columns:1fr 420px;grid-template-columns:1fr 420px}}.ngt-settings-grid__content{-ms-grid-row:1;-ms-grid-column:1;grid-area:content}.ngt-settings-grid__sidebar{-ms-grid-row:2;-ms-grid-column:1;grid-area:sidebar}@media (min-width: 750px){.ngt-settings-grid__content{-ms-grid-row:1;-ms-grid-column:1}.ngt-settings-grid__sidebar{-ms-grid-row:1;-ms-grid-column:3}}.ngt-sidebar-box{background:#fff;border-left:4px solid #46b450;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)
|
1 |
+
.wrap--nextgenthemes{max-width:1100px;margin-right:auto;margin-left:auto}.wrap--nextgenthemes .nav-tab{cursor:pointer}.wrap--nextgenthemes .nav-tab:not(.nav-tab--ngt-highlight){font-weight:400}.wrap--nextgenthemes a{text-decoration:none}.wp-core-ui .button-primary--ngt-small{height:18px;padding-right:5px;padding-left:5px;line-height:12px}.nextgenthemes-label-text{display:block;margin-bottom:3px;font-weight:600}.nextgenthemes-label-text span{opacity:.5}[type=checkbox]+.nextgenthemes-label-text{display:inline}.wrap--nextgenthemes__loading-indicator{width:16px;height:16px}.ngt-settings-grid{display:-ms-grid;display:grid;grid-column-gap:1rem;grid-template-areas:"content" "sidebar"}@media(min-width: 750px){.ngt-settings-grid{grid-column-gap:2rem;grid-template-areas:"content sidebar";-ms-grid-columns:1fr 2rem 300px;grid-template-columns:1fr 300px}}@media(min-width: 1200px){.ngt-settings-grid{grid-column-gap:3rem;-ms-grid-columns:1fr 420px;grid-template-columns:1fr 420px}}.ngt-settings-grid__content{-ms-grid-row:1;-ms-grid-column:1;grid-area:content}.ngt-settings-grid__sidebar{-ms-grid-row:2;-ms-grid-column:1;grid-area:sidebar}@media (min-width: 750px){.ngt-settings-grid__content{-ms-grid-row:1;-ms-grid-column:1}.ngt-settings-grid__sidebar{-ms-grid-row:1;-ms-grid-column:3}}.ngt-sidebar-box{padding:1rem;margin-top:1rem;margin-bottom:1rem;background:#fff;border-left:4px solid #46b450;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.ngt-sidebar-box h3:first-child{margin-top:0}.ngt-sidebar-box ul{padding-left:1em;list-style:square}.ngt-sidebar-box li{padding-left:.7em;margin-bottom:1em}@media(min-width: 1200px){.ngt-sidebar-box{padding:3rem}}
|
build/common/settings.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},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 r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},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=13)}([,,,,function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},,function(e,t,n){(function(t,n){var r;r=function(){"use strict";var e=Object.freeze({});function r(e){return null==e}function o(e){return null!=e}function i(e){return!0===e}function a(e){return"string"==typeof e||"number"==typeof e||"symbol"==typeof e||"boolean"==typeof e}function s(e){return null!==e&&"object"==typeof e}var c=Object.prototype.toString;function l(e){return c.call(e).slice(8,-1)}function u(e){return"[object Object]"===c.call(e)}function f(e){return"[object RegExp]"===c.call(e)}function d(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function p(e){return o(e)&&"function"==typeof e.then&&"function"==typeof e.catch}function v(e){return null==e?"":Array.isArray(e)||u(e)&&e.toString===c?JSON.stringify(e,null,2):String(e)}function h(e){var t=parseFloat(e);return isNaN(t)?e:t}function m(e,t){for(var n=Object.create(null),r=e.split(","),o=0;o<r.length;o++)n[r[o]]=!0;return t?function(e){return n[e.toLowerCase()]}:function(e){return n[e]}}var g=m("slot,component",!0),y=m("key,ref,slot,slot-scope,is");function b(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}var _=Object.prototype.hasOwnProperty;function w(e,t){return _.call(e,t)}function $(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var x=/-(\w)/g,A=$((function(e){return e.replace(x,(function(e,t){return t?t.toUpperCase():""}))})),k=$((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})),C=/\B([A-Z])/g,S=$((function(e){return e.replace(C,"-$1").toLowerCase()})),O=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n};function T(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function M(e,t){for(var n in t)e[n]=t[n];return e}function j(e){for(var t={},n=0;n<e.length;n++)e[n]&&M(t,e[n]);return t}function I(e,t,n){}var E=function(e,t,n){return!1},N=function(e){return e};function D(e,t){if(e===t)return!0;var n=s(e),r=s(t);if(!n||!r)return!n&&!r&&String(e)===String(t);try{var o=Array.isArray(e),i=Array.isArray(t);if(o&&i)return e.length===t.length&&e.every((function(e,n){return D(e,t[n])}));if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(o||i)return!1;var a=Object.keys(e),c=Object.keys(t);return a.length===c.length&&a.every((function(n){return D(e[n],t[n])}))}catch(e){return!1}}function L(e,t){for(var n=0;n<e.length;n++)if(D(e[n],t))return n;return-1}function P(e){var t=!1;return function(){t||(t=!0,e.apply(this,arguments))}}var F=["component","directive","filter"],R=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured","serverPrefetch"],H={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!0,devtools:!0,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:E,isReservedAttr:E,isUnknownElement:E,getTagNamespace:I,parsePlatformTagName:N,mustUseProp:E,async:!0,_lifecycleHooks:R},U=/a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;function V(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}function B(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}var z,q=new RegExp("[^"+U.source+".$_\\d]"),J="__proto__"in{},K="undefined"!=typeof window,W="undefined"!=typeof WXEnvironment&&!!WXEnvironment.platform,Z=W&&WXEnvironment.platform.toLowerCase(),G=K&&window.navigator.userAgent.toLowerCase(),Y=G&&/msie|trident/.test(G),X=G&&G.indexOf("msie 9.0")>0,Q=G&&G.indexOf("edge/")>0,ee=(G&&G.indexOf("android"),G&&/iphone|ipad|ipod|ios/.test(G)||"ios"===Z),te=(G&&/chrome\/\d+/.test(G),G&&/phantomjs/.test(G),G&&G.match(/firefox\/(\d+)/)),ne={}.watch,re=!1;if(K)try{var oe={};Object.defineProperty(oe,"passive",{get:function(){re=!0}}),window.addEventListener("test-passive",null,oe)}catch(e){}var ie=function(){return void 0===z&&(z=!K&&!W&&void 0!==t&&t.process&&"server"===t.process.env.VUE_ENV),z},ae=K&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function se(e){return"function"==typeof e&&/native code/.test(e.toString())}var ce,le="undefined"!=typeof Symbol&&se(Symbol)&&"undefined"!=typeof Reflect&&se(Reflect.ownKeys);ce="undefined"!=typeof Set&&se(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var ue,fe,de,pe=I,ve="undefined"!=typeof console,he=/(?:^|[-_])(\w)/g;ue=function(e,t){var n=t?pe(t):"";H.warnHandler?H.warnHandler.call(null,e,t,n):ve&&!H.silent&&console.error("[Vue warn]: "+e+n)},fe=function(e,t){ve&&!H.silent&&console.warn("[Vue tip]: "+e+(t?pe(t):""))},de=function(e,t){if(e.$root===e)return"<Root>";var n="function"==typeof e&&null!=e.cid?e.options:e._isVue?e.$options||e.constructor.options:e,r=n.name||n._componentTag,o=n.__file;if(!r&&o){var i=o.match(/([^/\\]+)\.vue$/);r=i&&i[1]}return(r?"<"+function(e){return e.replace(he,(function(e){return e.toUpperCase()})).replace(/[-_]/g,"")}(r)+">":"<Anonymous>")+(o&&!1!==t?" at "+o:"")},pe=function(e){if(e._isVue&&e.$parent){for(var t=[],n=0;e;){if(t.length>0){var r=t[t.length-1];if(r.constructor===e.constructor){n++,e=e.$parent;continue}n>0&&(t[t.length-1]=[r,n],n=0)}t.push(e),e=e.$parent}return"\n\nfound in\n\n"+t.map((function(e,t){return""+(0===t?"---\x3e ":function(e,t){for(var n="";t;)t%2==1&&(n+=e),t>1&&(e+=e),t>>=1;return n}(" ",5+2*t))+(Array.isArray(e)?de(e[0])+"... ("+e[1]+" recursive calls)":de(e))})).join("\n")}return"\n\n(found in "+de(e)+")"};var me=0,ge=function(){this.id=me++,this.subs=[]};ge.prototype.addSub=function(e){this.subs.push(e)},ge.prototype.removeSub=function(e){b(this.subs,e)},ge.prototype.depend=function(){ge.target&&ge.target.addDep(this)},ge.prototype.notify=function(){var e=this.subs.slice();H.async||e.sort((function(e,t){return e.id-t.id}));for(var t=0,n=e.length;t<n;t++)e[t].update()},ge.target=null;var ye=[];function be(e){ye.push(e),ge.target=e}function _e(){ye.pop(),ge.target=ye[ye.length-1]}var we=function(e,t,n,r,o,i,a,s){this.tag=e,this.data=t,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=t&&t.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1},$e={child:{configurable:!0}};$e.child.get=function(){return this.componentInstance},Object.defineProperties(we.prototype,$e);var xe=function(e){void 0===e&&(e="");var t=new we;return t.text=e,t.isComment=!0,t};function Ae(e){return new we(void 0,void 0,void 0,String(e))}function ke(e){var t=new we(e.tag,e.data,e.children&&e.children.slice(),e.text,e.elm,e.context,e.componentOptions,e.asyncFactory);return t.ns=e.ns,t.isStatic=e.isStatic,t.key=e.key,t.isComment=e.isComment,t.fnContext=e.fnContext,t.fnOptions=e.fnOptions,t.fnScopeId=e.fnScopeId,t.asyncMeta=e.asyncMeta,t.isCloned=!0,t}var Ce=Array.prototype,Se=Object.create(Ce);["push","pop","shift","unshift","splice","sort","reverse"].forEach((function(e){var t=Ce[e];B(Se,e,(function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];var o,i=t.apply(this,n),a=this.__ob__;switch(e){case"push":case"unshift":o=n;break;case"splice":o=n.slice(2)}return o&&a.observeArray(o),a.dep.notify(),i}))}));var Oe=Object.getOwnPropertyNames(Se),Te=!0;function Me(e){Te=e}var je=function(e){this.value=e,this.dep=new ge,this.vmCount=0,B(e,"__ob__",this),Array.isArray(e)?(J?function(e,t){e.__proto__=t}(e,Se):function(e,t,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];B(e,i,t[i])}}(e,Se,Oe),this.observeArray(e)):this.walk(e)};function Ie(e,t){var n;if(s(e)&&!(e instanceof we))return w(e,"__ob__")&&e.__ob__ instanceof je?n=e.__ob__:Te&&!ie()&&(Array.isArray(e)||u(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new je(e)),t&&n&&n.vmCount++,n}function Ee(e,t,n,r,o){var i=new ge,a=Object.getOwnPropertyDescriptor(e,t);if(!a||!1!==a.configurable){var s=a&&a.get,c=a&&a.set;s&&!c||2!==arguments.length||(n=e[t]);var l=!o&&Ie(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=s?s.call(e):n;return ge.target&&(i.depend(),l&&(l.dep.depend(),Array.isArray(t)&&Le(t))),t},set:function(t){var a=s?s.call(e):n;t===a||t!=t&&a!=a||(r&&r(),s&&!c||(c?c.call(e,t):n=t,l=!o&&Ie(t),i.notify()))}})}}function Ne(e,t,n){if((r(e)||a(e))&&ue("Cannot set reactive property on undefined, null, or primitive value: "+e),Array.isArray(e)&&d(t))return e.length=Math.max(e.length,t),e.splice(t,1,n),n;if(t in e&&!(t in Object.prototype))return e[t]=n,n;var o=e.__ob__;return e._isVue||o&&o.vmCount?(ue("Avoid adding reactive properties to a Vue instance or its root $data at runtime - declare it upfront in the data option."),n):o?(Ee(o.value,t,n),o.dep.notify(),n):(e[t]=n,n)}function De(e,t){if((r(e)||a(e))&&ue("Cannot delete reactive property on undefined, null, or primitive value: "+e),Array.isArray(e)&&d(t))e.splice(t,1);else{var n=e.__ob__;e._isVue||n&&n.vmCount?ue("Avoid deleting properties on a Vue instance or its root $data - just set it to null."):w(e,t)&&(delete e[t],n&&n.dep.notify())}}function Le(e){for(var t=void 0,n=0,r=e.length;n<r;n++)(t=e[n])&&t.__ob__&&t.__ob__.dep.depend(),Array.isArray(t)&&Le(t)}je.prototype.walk=function(e){for(var t=Object.keys(e),n=0;n<t.length;n++)Ee(e,t[n])},je.prototype.observeArray=function(e){for(var t=0,n=e.length;t<n;t++)Ie(e[t])};var Pe=H.optionMergeStrategies;function Fe(e,t){if(!t)return e;for(var n,r,o,i=le?Reflect.ownKeys(t):Object.keys(t),a=0;a<i.length;a++)"__ob__"!==(n=i[a])&&(r=e[n],o=t[n],w(e,n)?r!==o&&u(r)&&u(o)&&Fe(r,o):Ne(e,n,o));return e}function Re(e,t,n){return n?function(){var r="function"==typeof t?t.call(n,n):t,o="function"==typeof e?e.call(n,n):e;return r?Fe(r,o):o}:t?e?function(){return Fe("function"==typeof t?t.call(this,this):t,"function"==typeof e?e.call(this,this):e)}:t:e}function He(e,t){var n=t?e?e.concat(t):Array.isArray(t)?t:[t]:e;return n?function(e){for(var t=[],n=0;n<e.length;n++)-1===t.indexOf(e[n])&&t.push(e[n]);return t}(n):n}function Ue(e,t,n,r){var o=Object.create(e||null);return t?(ze(r,t,n),M(o,t)):o}Pe.el=Pe.propsData=function(e,t,n,r){return n||ue('option "'+r+'" can only be used during instance creation with the `new` keyword.'),Ve(e,t)},Pe.data=function(e,t,n){return n?Re(e,t,n):t&&"function"!=typeof t?(ue('The "data" option should be a function that returns a per-instance value in component definitions.',n),e):Re(e,t)},R.forEach((function(e){Pe[e]=He})),F.forEach((function(e){Pe[e+"s"]=Ue})),Pe.watch=function(e,t,n,r){if(e===ne&&(e=void 0),t===ne&&(t=void 0),!t)return Object.create(e||null);if(ze(r,t,n),!e)return t;var o={};for(var i in M(o,e),t){var a=o[i],s=t[i];a&&!Array.isArray(a)&&(a=[a]),o[i]=a?a.concat(s):Array.isArray(s)?s:[s]}return o},Pe.props=Pe.methods=Pe.inject=Pe.computed=function(e,t,n,r){if(t&&ze(r,t,n),!e)return t;var o=Object.create(null);return M(o,e),t&&M(o,t),o},Pe.provide=Re;var Ve=function(e,t){return void 0===t?e:t};function Be(e){new RegExp("^[a-zA-Z][\\-\\.0-9_"+U.source+"]*$").test(e)||ue('Invalid component name: "'+e+'". Component names should conform to valid custom element name in html5 specification.'),(g(e)||H.isReservedTag(e))&&ue("Do not use built-in or reserved HTML elements as component id: "+e)}function ze(e,t,n){u(t)||ue('Invalid value for option "'+e+'": expected an Object, but got '+l(t)+".",n)}function qe(e,t,n){if(function(e){for(var t in e.components)Be(t)}(t),"function"==typeof t&&(t=t.options),function(e,t){var n=e.props;if(n){var r,o,i={};if(Array.isArray(n))for(r=n.length;r--;)"string"==typeof(o=n[r])?i[A(o)]={type:null}:ue("props must be strings when using array syntax.");else if(u(n))for(var a in n)o=n[a],i[A(a)]=u(o)?o:{type:o};else ue('Invalid value for option "props": expected an Array or an Object, but got '+l(n)+".",t);e.props=i}}(t,n),function(e,t){var n=e.inject;if(n){var r=e.inject={};if(Array.isArray(n))for(var o=0;o<n.length;o++)r[n[o]]={from:n[o]};else if(u(n))for(var i in n){var a=n[i];r[i]=u(a)?M({from:i},a):{from:a}}else ue('Invalid value for option "inject": expected an Array or an Object, but got '+l(n)+".",t)}}(t,n),function(e){var t=e.directives;if(t)for(var n in t){var r=t[n];"function"==typeof r&&(t[n]={bind:r,update:r})}}(t),!t._base&&(t.extends&&(e=qe(e,t.extends,n)),t.mixins))for(var r=0,o=t.mixins.length;r<o;r++)e=qe(e,t.mixins[r],n);var i,a={};for(i in e)s(i);for(i in t)w(e,i)||s(i);function s(r){var o=Pe[r]||Ve;a[r]=o(e[r],t[r],n,r)}return a}function Je(e,t,n,r){if("string"==typeof n){var o=e[t];if(w(o,n))return o[n];var i=A(n);if(w(o,i))return o[i];var a=k(i);if(w(o,a))return o[a];var s=o[n]||o[i]||o[a];return r&&!s&&ue("Failed to resolve "+t.slice(0,-1)+": "+n,e),s}}function Ke(e,t,n,r){var o=t[e],i=!w(n,e),a=n[e],c=Xe(Boolean,o.type);if(c>-1)if(i&&!w(o,"default"))a=!1;else if(""===a||a===S(e)){var u=Xe(String,o.type);(u<0||c<u)&&(a=!0)}if(void 0===a){a=function(e,t,n){if(w(t,"default")){var r=t.default;return s(r)&&ue('Invalid default value for prop "'+n+'": Props with type Object/Array must use a factory function to return the default value.',e),e&&e.$options.propsData&&void 0===e.$options.propsData[n]&&void 0!==e._props[n]?e._props[n]:"function"==typeof r&&"Function"!==Ge(t.type)?r.call(e):r}}(r,o,e);var f=Te;Me(!0),Ie(a),Me(f)}return function(e,t,n,r,o){if(e.required&&o)ue('Missing required prop: "'+t+'"',r);else if(null!=n||e.required){var i=e.type,a=!i||!0===i,s=[];if(i){Array.isArray(i)||(i=[i]);for(var c=0;c<i.length&&!a;c++){var u=Ze(n,i[c]);s.push(u.expectedType||""),a=u.valid}}if(a){var f=e.validator;f&&(f(n)||ue('Invalid prop: custom validator check failed for prop "'+t+'".',r))}else ue(function(e,t,n){var r='Invalid prop: type check failed for prop "'+e+'". Expected '+n.map(k).join(", "),o=n[0],i=l(t),a=Qe(t,o),s=Qe(t,i);return 1===n.length&&et(o)&&!function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];return e.some((function(e){return"boolean"===e.toLowerCase()}))}(o,i)&&(r+=" with value "+a),r+=", got "+i+" ",et(i)&&(r+="with value "+s+"."),r}(t,n,s),r)}}(o,e,a,r,i),a}var We=/^(String|Number|Boolean|Function|Symbol)$/;function Ze(e,t){var n,r=Ge(t);if(We.test(r)){var o=typeof e;(n=o===r.toLowerCase())||"object"!==o||(n=e instanceof t)}else n="Object"===r?u(e):"Array"===r?Array.isArray(e):e instanceof t;return{valid:n,expectedType:r}}function Ge(e){var t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:""}function Ye(e,t){return Ge(e)===Ge(t)}function Xe(e,t){if(!Array.isArray(t))return Ye(t,e)?0:-1;for(var n=0,r=t.length;n<r;n++)if(Ye(t[n],e))return n;return-1}function Qe(e,t){return"String"===t?'"'+e+'"':"Number"===t?""+Number(e):""+e}function et(e){return["string","number","boolean"].some((function(t){return e.toLowerCase()===t}))}function tt(e,t,n){be();try{if(t)for(var r=t;r=r.$parent;){var o=r.$options.errorCaptured;if(o)for(var i=0;i<o.length;i++)try{if(!1===o[i].call(r,e,t,n))return}catch(e){rt(e,r,"errorCaptured hook")}}rt(e,t,n)}finally{_e()}}function nt(e,t,n,r,o){var i;try{(i=n?e.apply(t,n):e.call(t))&&!i._isVue&&p(i)&&!i._handled&&(i.catch((function(e){return tt(e,r,o+" (Promise/async)")})),i._handled=!0)}catch(e){tt(e,r,o)}return i}function rt(e,t,n){if(H.errorHandler)try{return H.errorHandler.call(null,e,t,n)}catch(t){t!==e&&ot(t,null,"config.errorHandler")}ot(e,t,n)}function ot(e,t,n){if(ue("Error in "+n+': "'+e.toString()+'"',t),!K&&!W||"undefined"==typeof console)throw e;console.error(e)}var it,at,st,ct=!1,lt=[],ut=!1;function ft(){ut=!1;var e=lt.slice(0);lt.length=0;for(var t=0;t<e.length;t++)e[t]()}if("undefined"!=typeof Promise&&se(Promise)){var dt=Promise.resolve();it=function(){dt.then(ft),ee&&setTimeout(I)},ct=!0}else if(Y||"undefined"==typeof MutationObserver||!se(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())it=void 0!==n&&se(n)?function(){n(ft)}:function(){setTimeout(ft,0)};else{var pt=1,vt=new MutationObserver(ft),ht=document.createTextNode(String(pt));vt.observe(ht,{characterData:!0}),it=function(){pt=(pt+1)%2,ht.data=String(pt)},ct=!0}function mt(e,t){var n;if(lt.push((function(){if(e)try{e.call(t)}catch(e){tt(e,t,"nextTick")}else n&&n(t)})),ut||(ut=!0,it()),!e&&"undefined"!=typeof Promise)return new Promise((function(e){n=e}))}var gt,yt=K&&window.performance;yt&&yt.mark&&yt.measure&&yt.clearMarks&&yt.clearMeasures&&(at=function(e){return yt.mark(e)},st=function(e,t,n){yt.measure(e,t,n),yt.clearMarks(t),yt.clearMarks(n)});var bt=m("Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,require"),_t=function(e,t){ue('Property or method "'+t+'" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',e)},wt=function(e,t){ue('Property "'+t+'" must be accessed with "$data.'+t+'" because properties starting with "$" or "_" are not proxied in the Vue instance to prevent conflicts with Vue internals. See: https://vuejs.org/v2/api/#data',e)},$t="undefined"!=typeof Proxy&&se(Proxy);if($t){var xt=m("stop,prevent,self,ctrl,shift,alt,meta,exact");H.keyCodes=new Proxy(H.keyCodes,{set:function(e,t,n){return xt(t)?(ue("Avoid overwriting built-in modifier in config.keyCodes: ."+t),!1):(e[t]=n,!0)}})}var At={has:function(e,t){var n=t in e,r=bt(t)||"string"==typeof t&&"_"===t.charAt(0)&&!(t in e.$data);return n||r||(t in e.$data?wt(e,t):_t(e,t)),n||!r}},kt={get:function(e,t){return"string"!=typeof t||t in e||(t in e.$data?wt(e,t):_t(e,t)),e[t]}};gt=function(e){if($t){var t=e.$options,n=t.render&&t.render._withStripped?kt:At;e._renderProxy=new Proxy(e,n)}else e._renderProxy=e};var Ct=new ce;function St(e){!function e(t,n){var r,o,i=Array.isArray(t);if(!(!i&&!s(t)||Object.isFrozen(t)||t instanceof we)){if(t.__ob__){var a=t.__ob__.dep.id;if(n.has(a))return;n.add(a)}if(i)for(r=t.length;r--;)e(t[r],n);else for(r=(o=Object.keys(t)).length;r--;)e(t[o[r]],n)}}(e,Ct),Ct.clear()}var Ot=$((function(e){var t="&"===e.charAt(0),n="~"===(e=t?e.slice(1):e).charAt(0),r="!"===(e=n?e.slice(1):e).charAt(0);return{name:e=r?e.slice(1):e,once:n,capture:r,passive:t}}));function Tt(e,t){function n(){var e=arguments,r=n.fns;if(!Array.isArray(r))return nt(r,null,arguments,t,"v-on handler");for(var o=r.slice(),i=0;i<o.length;i++)nt(o[i],null,e,t,"v-on handler")}return n.fns=e,n}function Mt(e,t,n,o,a,s){var c,l,u,f;for(c in e)l=e[c],u=t[c],f=Ot(c),r(l)?ue('Invalid handler for event "'+f.name+'": got '+String(l),s):r(u)?(r(l.fns)&&(l=e[c]=Tt(l,s)),i(f.once)&&(l=e[c]=a(f.name,l,f.capture)),n(f.name,l,f.capture,f.passive,f.params)):l!==u&&(u.fns=l,e[c]=u);for(c in t)r(e[c])&&o((f=Ot(c)).name,t[c],f.capture)}function jt(e,t,n){var a;e instanceof we&&(e=e.data.hook||(e.data.hook={}));var s=e[t];function c(){n.apply(this,arguments),b(a.fns,c)}r(s)?a=Tt([c]):o(s.fns)&&i(s.merged)?(a=s).fns.push(c):a=Tt([s,c]),a.merged=!0,e[t]=a}function It(e,t,n,r,i){if(o(t)){if(w(t,n))return e[n]=t[n],i||delete t[n],!0;if(w(t,r))return e[n]=t[r],i||delete t[r],!0}return!1}function Et(e){return a(e)?[Ae(e)]:Array.isArray(e)?function e(t,n){var s,c,l,u,f=[];for(s=0;s<t.length;s++)r(c=t[s])||"boolean"==typeof c||(u=f[l=f.length-1],Array.isArray(c)?c.length>0&&(Nt((c=e(c,(n||"")+"_"+s))[0])&&Nt(u)&&(f[l]=Ae(u.text+c[0].text),c.shift()),f.push.apply(f,c)):a(c)?Nt(u)?f[l]=Ae(u.text+c):""!==c&&f.push(Ae(c)):Nt(c)&&Nt(u)?f[l]=Ae(u.text+c.text):(i(t._isVList)&&o(c.tag)&&r(c.key)&&o(n)&&(c.key="__vlist"+n+"_"+s+"__"),f.push(c)));return f}(e):void 0}function Nt(e){return o(e)&&o(e.text)&&!1===e.isComment}function Dt(e,t){if(e){for(var n=Object.create(null),r=le?Reflect.ownKeys(e):Object.keys(e),o=0;o<r.length;o++){var i=r[o];if("__ob__"!==i){for(var a=e[i].from,s=t;s;){if(s._provided&&w(s._provided,a)){n[i]=s._provided[a];break}s=s.$parent}if(!s)if("default"in e[i]){var c=e[i].default;n[i]="function"==typeof c?c.call(t):c}else ue('Injection "'+i+'" not found',t)}}return n}}function Lt(e,t){if(!e||!e.length)return{};for(var n={},r=0,o=e.length;r<o;r++){var i=e[r],a=i.data;if(a&&a.attrs&&a.attrs.slot&&delete a.attrs.slot,i.context!==t&&i.fnContext!==t||!a||null==a.slot)(n.default||(n.default=[])).push(i);else{var s=a.slot,c=n[s]||(n[s]=[]);"template"===i.tag?c.push.apply(c,i.children||[]):c.push(i)}}for(var l in n)n[l].every(Pt)&&delete n[l];return n}function Pt(e){return e.isComment&&!e.asyncFactory||" "===e.text}function Ft(t,n,r){var o,i=Object.keys(n).length>0,a=t?!!t.$stable:!i,s=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&r&&r!==e&&s===r.$key&&!i&&!r.$hasNormal)return r;for(var c in o={},t)t[c]&&"$"!==c[0]&&(o[c]=Rt(n,c,t[c]))}else o={};for(var l in n)l in o||(o[l]=Ht(n,l));return t&&Object.isExtensible(t)&&(t._normalized=o),B(o,"$stable",a),B(o,"$key",s),B(o,"$hasNormal",i),o}function Rt(e,t,n){var r=function(){var e=arguments.length?n.apply(null,arguments):n({});return(e=e&&"object"==typeof e&&!Array.isArray(e)?[e]:Et(e))&&(0===e.length||1===e.length&&e[0].isComment)?void 0:e};return n.proxy&&Object.defineProperty(e,t,{get:r,enumerable:!0,configurable:!0}),r}function Ht(e,t){return function(){return e[t]}}function Ut(e,t){var n,r,i,a,c;if(Array.isArray(e)||"string"==typeof e)for(n=new Array(e.length),r=0,i=e.length;r<i;r++)n[r]=t(e[r],r);else if("number"==typeof e)for(n=new Array(e),r=0;r<e;r++)n[r]=t(r+1,r);else if(s(e))if(le&&e[Symbol.iterator]){n=[];for(var l=e[Symbol.iterator](),u=l.next();!u.done;)n.push(t(u.value,n.length)),u=l.next()}else for(a=Object.keys(e),n=new Array(a.length),r=0,i=a.length;r<i;r++)c=a[r],n[r]=t(e[c],c,r);return o(n)||(n=[]),n._isVList=!0,n}function Vt(e,t,n,r){var o,i=this.$scopedSlots[e];i?(n=n||{},r&&(s(r)||ue("slot v-bind without argument expects an Object",this),n=M(M({},r),n)),o=i(n)||t):o=this.$slots[e]||t;var a=n&&n.slot;return a?this.$createElement("template",{slot:a},o):o}function Bt(e){return Je(this.$options,"filters",e,!0)||N}function zt(e,t){return Array.isArray(e)?-1===e.indexOf(t):e!==t}function qt(e,t,n,r,o){var i=H.keyCodes[t]||n;return o&&r&&!H.keyCodes[t]?zt(o,r):i?zt(i,e):r?S(r)!==t:void 0}function Jt(e,t,n,r,o){if(n)if(s(n)){var i;Array.isArray(n)&&(n=j(n));var a=function(a){if("class"===a||"style"===a||y(a))i=e;else{var s=e.attrs&&e.attrs.type;i=r||H.mustUseProp(t,s,a)?e.domProps||(e.domProps={}):e.attrs||(e.attrs={})}var c=A(a),l=S(a);c in i||l in i||(i[a]=n[a],o&&((e.on||(e.on={}))["update:"+a]=function(e){n[a]=e}))};for(var c in n)a(c)}else ue("v-bind without argument expects an Object or Array value",this);return e}function Kt(e,t){var n=this._staticTrees||(this._staticTrees=[]),r=n[e];return r&&!t||Zt(r=n[e]=this.$options.staticRenderFns[e].call(this._renderProxy,null,this),"__static__"+e,!1),r}function Wt(e,t,n){return Zt(e,"__once__"+t+(n?"_"+n:""),!0),e}function Zt(e,t,n){if(Array.isArray(e))for(var r=0;r<e.length;r++)e[r]&&"string"!=typeof e[r]&&Gt(e[r],t+"_"+r,n);else Gt(e,t,n)}function Gt(e,t,n){e.isStatic=!0,e.key=t,e.isOnce=n}function Yt(e,t){if(t)if(u(t)){var n=e.on=e.on?M({},e.on):{};for(var r in t){var o=n[r],i=t[r];n[r]=o?[].concat(o,i):i}}else ue("v-on without argument expects an Object value",this);return e}function Xt(e,t,n,r){t=t||{$stable:!n};for(var o=0;o<e.length;o++){var i=e[o];Array.isArray(i)?Xt(i,t,n):i&&(i.proxy&&(i.fn.proxy=!0),t[i.key]=i.fn)}return r&&(t.$key=r),t}function Qt(e,t){for(var n=0;n<t.length;n+=2){var r=t[n];"string"==typeof r&&r?e[t[n]]=t[n+1]:""!==r&&null!==r&&ue("Invalid value for dynamic directive argument (expected string or null): "+r,this)}return e}function en(e,t){return"string"==typeof e?t+e:e}function tn(e){e._o=Wt,e._n=h,e._s=v,e._l=Ut,e._t=Vt,e._q=D,e._i=L,e._m=Kt,e._f=Bt,e._k=qt,e._b=Jt,e._v=Ae,e._e=xe,e._u=Xt,e._g=Yt,e._d=Qt,e._p=en}function nn(t,n,r,o,a){var s,c=this,l=a.options;w(o,"_uid")?(s=Object.create(o))._original=o:(s=o,o=o._original);var u=i(l._compiled),f=!u;this.data=t,this.props=n,this.children=r,this.parent=o,this.listeners=t.on||e,this.injections=Dt(l.inject,o),this.slots=function(){return c.$slots||Ft(t.scopedSlots,c.$slots=Lt(r,o)),c.$slots},Object.defineProperty(this,"scopedSlots",{enumerable:!0,get:function(){return Ft(t.scopedSlots,this.slots())}}),u&&(this.$options=l,this.$slots=this.slots(),this.$scopedSlots=Ft(t.scopedSlots,this.$slots)),l._scopeId?this._c=function(e,t,n,r){var i=un(s,e,t,n,r,f);return i&&!Array.isArray(i)&&(i.fnScopeId=l._scopeId,i.fnContext=o),i}:this._c=function(e,t,n,r){return un(s,e,t,n,r,f)}}function rn(e,t,n,r,o){var i=ke(e);return i.fnContext=n,i.fnOptions=r,(i.devtoolsMeta=i.devtoolsMeta||{}).renderContext=o,t.slot&&((i.data||(i.data={})).slot=t.slot),i}function on(e,t){for(var n in t)e[A(n)]=t[n]}tn(nn.prototype);var an={init:function(e,t){if(e.componentInstance&&!e.componentInstance._isDestroyed&&e.data.keepAlive){var n=e;an.prepatch(n,n)}else(e.componentInstance=function(e,t){var n={_isComponent:!0,_parentVnode:e,parent:t},r=e.data.inlineTemplate;return o(r)&&(n.render=r.render,n.staticRenderFns=r.staticRenderFns),new e.componentOptions.Ctor(n)}(e,_n)).$mount(t?e.elm:void 0,t)},prepatch:function(t,n){var r=n.componentOptions;!function(t,n,r,o,i){wn=!0;var a=o.data.scopedSlots,s=t.$scopedSlots,c=!!(a&&!a.$stable||s!==e&&!s.$stable||a&&t.$scopedSlots.$key!==a.$key),l=!!(i||t.$options._renderChildren||c);if(t.$options._parentVnode=o,t.$vnode=o,t._vnode&&(t._vnode.parent=o),t.$options._renderChildren=i,t.$attrs=o.data.attrs||e,t.$listeners=r||e,n&&t.$options.props){Me(!1);for(var u=t._props,f=t.$options._propKeys||[],d=0;d<f.length;d++){var p=f[d],v=t.$options.props;u[p]=Ke(p,v,n,t)}Me(!0),t.$options.propsData=n}r=r||e;var h=t.$options._parentListeners;t.$options._parentListeners=r,bn(t,r,h),l&&(t.$slots=Lt(i,o.context),t.$forceUpdate()),wn=!1}(n.componentInstance=t.componentInstance,r.propsData,r.listeners,n,r.children)},insert:function(e){var t,n=e.context,r=e.componentInstance;r._isMounted||(r._isMounted=!0,kn(r,"mounted")),e.data.keepAlive&&(n._isMounted?((t=r)._inactive=!1,Sn.push(t)):An(r,!0))},destroy:function(e){var t=e.componentInstance;t._isDestroyed||(e.data.keepAlive?function e(t,n){if(!(n&&(t._directInactive=!0,xn(t))||t._inactive)){t._inactive=!0;for(var r=0;r<t.$children.length;r++)e(t.$children[r]);kn(t,"deactivated")}}(t,!0):t.$destroy())}},sn=Object.keys(an);function cn(t,n,a,c,l){if(!r(t)){var u=a.$options._base;if(s(t)&&(t=u.extend(t)),"function"==typeof t){var f;if(r(t.cid)&&void 0===(t=function(e,t){if(i(e.error)&&o(e.errorComp))return e.errorComp;if(o(e.resolved))return e.resolved;var n=dn;if(n&&o(e.owners)&&-1===e.owners.indexOf(n)&&e.owners.push(n),i(e.loading)&&o(e.loadingComp))return e.loadingComp;if(n&&!o(e.owners)){var a=e.owners=[n],c=!0,l=null,u=null;n.$on("hook:destroyed",(function(){return b(a,n)}));var f=function(e){for(var t=0,n=a.length;t<n;t++)a[t].$forceUpdate();e&&(a.length=0,null!==l&&(clearTimeout(l),l=null),null!==u&&(clearTimeout(u),u=null))},d=P((function(n){e.resolved=pn(n,t),c?a.length=0:f(!0)})),v=P((function(t){ue("Failed to resolve async component: "+String(e)+(t?"\nReason: "+t:"")),o(e.errorComp)&&(e.error=!0,f(!0))})),h=e(d,v);return s(h)&&(p(h)?r(e.resolved)&&h.then(d,v):p(h.component)&&(h.component.then(d,v),o(h.error)&&(e.errorComp=pn(h.error,t)),o(h.loading)&&(e.loadingComp=pn(h.loading,t),0===h.delay?e.loading=!0:l=setTimeout((function(){l=null,r(e.resolved)&&r(e.error)&&(e.loading=!0,f(!1))}),h.delay||200)),o(h.timeout)&&(u=setTimeout((function(){u=null,r(e.resolved)&&v("timeout ("+h.timeout+"ms)")}),h.timeout)))),c=!1,e.loading?e.loadingComp:e.resolved}}(f=t,u)))return function(e,t,n,r,o){var i=xe();return i.asyncFactory=e,i.asyncMeta={data:t,context:n,children:r,tag:o},i}(f,n,a,c,l);n=n||{},Kn(t),o(n.model)&&function(e,t){var n=e.model&&e.model.prop||"value",r=e.model&&e.model.event||"input";(t.attrs||(t.attrs={}))[n]=t.model.value;var i=t.on||(t.on={}),a=i[r],s=t.model.callback;o(a)?(Array.isArray(a)?-1===a.indexOf(s):a!==s)&&(i[r]=[s].concat(a)):i[r]=s}(t.options,n);var d=function(e,t,n){var i=t.options.props;if(!r(i)){var a={},s=e.attrs,c=e.props;if(o(s)||o(c))for(var l in i){var u=S(l),f=l.toLowerCase();l!==f&&s&&w(s,f)&&fe('Prop "'+f+'" is passed to component '+de(n||t)+', but the declared prop name is "'+l+'". Note that HTML attributes are case-insensitive and camelCased props need to use their kebab-case equivalents when using in-DOM templates. You should probably use "'+u+'" instead of "'+l+'".'),It(a,c,l,u,!0)||It(a,s,l,u,!1)}return a}}(n,t,l);if(i(t.options.functional))return function(t,n,r,i,a){var s=t.options,c={},l=s.props;if(o(l))for(var u in l)c[u]=Ke(u,l,n||e);else o(r.attrs)&&on(c,r.attrs),o(r.props)&&on(c,r.props);var f=new nn(r,c,a,i,t),d=s.render.call(null,f._c,f);if(d instanceof we)return rn(d,r,f.parent,s,f);if(Array.isArray(d)){for(var p=Et(d)||[],v=new Array(p.length),h=0;h<p.length;h++)v[h]=rn(p[h],r,f.parent,s,f);return v}}(t,d,n,a,c);var v=n.on;if(n.on=n.nativeOn,i(t.options.abstract)){var h=n.slot;n={},h&&(n.slot=h)}!function(e){for(var t=e.hook||(e.hook={}),n=0;n<sn.length;n++){var r=sn[n],o=t[r],i=an[r];o===i||o&&o._merged||(t[r]=o?ln(i,o):i)}}(n);var m=t.options.name||l;return new we("vue-component-"+t.cid+(m?"-"+m:""),n,void 0,void 0,void 0,a,{Ctor:t,propsData:d,listeners:v,tag:l,children:c},f)}ue("Invalid Component definition: "+String(t),a)}}function ln(e,t){var n=function(n,r){e(n,r),t(n,r)};return n._merged=!0,n}function un(e,t,n,c,l,u){return(Array.isArray(n)||a(n))&&(l=c,c=n,n=void 0),i(u)&&(l=2),function(e,t,n,c,l){return o(n)&&o(n.__ob__)?(ue("Avoid using observed data object as vnode data: "+JSON.stringify(n)+"\nAlways create fresh vnode data objects in each render!",e),xe()):(o(n)&&o(n.is)&&(t=n.is),t?(o(n)&&o(n.key)&&!a(n.key)&&ue("Avoid using non-primitive value as key, use string/number value instead.",e),Array.isArray(c)&&"function"==typeof c[0]&&((n=n||{}).scopedSlots={default:c[0]},c.length=0),2===l?c=Et(c):1===l&&(c=function(e){for(var t=0;t<e.length;t++)if(Array.isArray(e[t]))return Array.prototype.concat.apply([],e);return e}(c)),"string"==typeof t?(f=e.$vnode&&e.$vnode.ns||H.getTagNamespace(t),H.isReservedTag(t)?(o(n)&&o(n.nativeOn)&&ue("The .native modifier for v-on is only valid on components but it was used on <"+t+">.",e),u=new we(H.parsePlatformTagName(t),n,c,void 0,void 0,e)):u=n&&n.pre||!o(d=Je(e.$options,"components",t))?new we(t,n,c,void 0,void 0,e):cn(d,n,e,c,t)):u=cn(t,n,e,c),Array.isArray(u)?u:o(u)?(o(f)&&function e(t,n,a){if(t.ns=n,"foreignObject"===t.tag&&(n=void 0,a=!0),o(t.children))for(var s=0,c=t.children.length;s<c;s++){var l=t.children[s];o(l.tag)&&(r(l.ns)||i(a)&&"svg"!==l.tag)&&e(l,n,a)}}(u,f),o(n)&&function(e){s(e.style)&&St(e.style),s(e.class)&&St(e.class)}(n),u):xe()):xe());var u,f,d}(e,t,n,c,l)}var fn,dn=null;function pn(e,t){return(e.__esModule||le&&"Module"===e[Symbol.toStringTag])&&(e=e.default),s(e)?t.extend(e):e}function vn(e){return e.isComment&&e.asyncFactory}function hn(e){if(Array.isArray(e))for(var t=0;t<e.length;t++){var n=e[t];if(o(n)&&(o(n.componentOptions)||vn(n)))return n}}function mn(e,t){fn.$on(e,t)}function gn(e,t){fn.$off(e,t)}function yn(e,t){var n=fn;return function r(){var o=t.apply(null,arguments);null!==o&&n.$off(e,r)}}function bn(e,t,n){fn=e,Mt(t,n||{},mn,gn,yn,e),fn=void 0}var _n=null,wn=!1;function $n(e){var t=_n;return _n=e,function(){_n=t}}function xn(e){for(;e&&(e=e.$parent);)if(e._inactive)return!0;return!1}function An(e,t){if(t){if(e._directInactive=!1,xn(e))return}else if(e._directInactive)return;if(e._inactive||null===e._inactive){e._inactive=!1;for(var n=0;n<e.$children.length;n++)An(e.$children[n]);kn(e,"activated")}}function kn(e,t){be();var n=e.$options[t],r=t+" hook";if(n)for(var o=0,i=n.length;o<i;o++)nt(n[o],e,null,e,r);e._hasHookEvent&&e.$emit("hook:"+t),_e()}var Cn=[],Sn=[],On={},Tn={},Mn=!1,jn=!1,In=0,En=0,Nn=Date.now;if(K&&!Y){var Dn=window.performance;Dn&&"function"==typeof Dn.now&&Nn()>document.createEvent("Event").timeStamp&&(Nn=function(){return Dn.now()})}function Ln(){var e,t;for(En=Nn(),jn=!0,Cn.sort((function(e,t){return e.id-t.id})),In=0;In<Cn.length;In++)if((e=Cn[In]).before&&e.before(),t=e.id,On[t]=null,e.run(),null!=On[t]&&(Tn[t]=(Tn[t]||0)+1,Tn[t]>100)){ue("You may have an infinite update loop "+(e.user?'in watcher with expression "'+e.expression+'"':"in a component render function."),e.vm);break}var n=Sn.slice(),r=Cn.slice();In=Cn.length=Sn.length=0,On={},Tn={},Mn=jn=!1,function(e){for(var t=0;t<e.length;t++)e[t]._inactive=!0,An(e[t],!0)}(n),function(e){for(var t=e.length;t--;){var n=e[t],r=n.vm;r._watcher===n&&r._isMounted&&!r._isDestroyed&&kn(r,"updated")}}(r),ae&&H.devtools&&ae.emit("flush")}var Pn=0,Fn=function(e,t,n,r,o){this.vm=e,o&&(e._watcher=this),e._watchers.push(this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync,this.before=r.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++Pn,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new ce,this.newDepIds=new ce,this.expression=t.toString(),"function"==typeof t?this.getter=t:(this.getter=function(e){if(!q.test(e)){var t=e.split(".");return function(e){for(var n=0;n<t.length;n++){if(!e)return;e=e[t[n]]}return e}}}(t),this.getter||(this.getter=I,ue('Failed watching path: "'+t+'" Watcher only accepts simple dot-delimited paths. For full control, use a function instead.',e))),this.value=this.lazy?void 0:this.get()};Fn.prototype.get=function(){var e;be(this);var t=this.vm;try{e=this.getter.call(t,t)}catch(e){if(!this.user)throw e;tt(e,t,'getter for watcher "'+this.expression+'"')}finally{this.deep&&St(e),_e(),this.cleanupDeps()}return e},Fn.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},Fn.prototype.cleanupDeps=function(){for(var e=this.deps.length;e--;){var t=this.deps[e];this.newDepIds.has(t.id)||t.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},Fn.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():function(e){var t=e.id;if(null==On[t]){if(On[t]=!0,jn){for(var n=Cn.length-1;n>In&&Cn[n].id>e.id;)n--;Cn.splice(n+1,0,e)}else Cn.push(e);if(!Mn){if(Mn=!0,!H.async)return void Ln();mt(Ln)}}}(this)},Fn.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||s(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(e){tt(e,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,e,t)}}},Fn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},Fn.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},Fn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||b(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1}};var Rn={enumerable:!0,configurable:!0,get:I,set:I};function Hn(e,t,n){Rn.get=function(){return this[t][n]},Rn.set=function(e){this[t][n]=e},Object.defineProperty(e,n,Rn)}var Un={lazy:!0};function Vn(e,t,n){var r=!ie();"function"==typeof n?(Rn.get=r?Bn(t):zn(n),Rn.set=I):(Rn.get=n.get?r&&!1!==n.cache?Bn(t):zn(n.get):I,Rn.set=n.set||I),Rn.set===I&&(Rn.set=function(){ue('Computed property "'+t+'" was assigned to but it has no setter.',this)}),Object.defineProperty(e,t,Rn)}function Bn(e){return function(){var t=this._computedWatchers&&this._computedWatchers[e];if(t)return t.dirty&&t.evaluate(),ge.target&&t.depend(),t.value}}function zn(e){return function(){return e.call(this,this)}}function qn(e,t,n,r){return u(n)&&(r=n,n=n.handler),"string"==typeof n&&(n=e[n]),e.$watch(t,n,r)}var Jn=0;function Kn(e){var t=e.options;if(e.super){var n=Kn(e.super);if(n!==e.superOptions){e.superOptions=n;var r=function(e){var t,n=e.options,r=e.sealedOptions;for(var o in n)n[o]!==r[o]&&(t||(t={}),t[o]=n[o]);return t}(e);r&&M(e.extendOptions,r),(t=e.options=qe(n,e.extendOptions)).name&&(t.components[t.name]=e)}}return t}function Wn(e){this instanceof Wn||ue("Vue is a constructor and should be called with the `new` keyword"),this._init(e)}function Zn(e){return e&&(e.Ctor.options.name||e.tag)}function Gn(e,t){return Array.isArray(e)?e.indexOf(t)>-1:"string"==typeof e?e.split(",").indexOf(t)>-1:!!f(e)&&e.test(t)}function Yn(e,t){var n=e.cache,r=e.keys,o=e._vnode;for(var i in n){var a=n[i];if(a){var s=Zn(a.componentOptions);s&&!t(s)&&Xn(n,i,r,o)}}}function Xn(e,t,n,r){var o=e[t];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),e[t]=null,b(n,t)}!function(t){t.prototype._init=function(t){var n,r,o=this;o._uid=Jn++,H.performance&&at&&(n="vue-perf-start:"+o._uid,r="vue-perf-end:"+o._uid,at(n)),o._isVue=!0,t&&t._isComponent?function(e,t){var n=e.$options=Object.create(e.constructor.options),r=t._parentVnode;n.parent=t.parent,n._parentVnode=r;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}(o,t):o.$options=qe(Kn(o.constructor),t||{},o),gt(o),o._self=o,function(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(o),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&bn(e,t)}(o),function(t){t._vnode=null,t._staticTrees=null;var n=t.$options,r=t.$vnode=n._parentVnode,o=r&&r.context;t.$slots=Lt(n._renderChildren,o),t.$scopedSlots=e,t._c=function(e,n,r,o){return un(t,e,n,r,o,!1)},t.$createElement=function(e,n,r,o){return un(t,e,n,r,o,!0)};var i=r&&r.data;Ee(t,"$attrs",i&&i.attrs||e,(function(){!wn&&ue("$attrs is readonly.",t)}),!0),Ee(t,"$listeners",n._parentListeners||e,(function(){!wn&&ue("$listeners is readonly.",t)}),!0)}(o),kn(o,"beforeCreate"),function(e){var t=Dt(e.$options.inject,e);t&&(Me(!1),Object.keys(t).forEach((function(n){Ee(e,n,t[n],(function(){ue('Avoid mutating an injected value directly since the changes will be overwritten whenever the provided component re-renders. injection being mutated: "'+n+'"',e)}))})),Me(!0))}(o),function(e){e._watchers=[];var t=e.$options;t.props&&function(e,t){var n=e.$options.propsData||{},r=e._props={},o=e.$options._propKeys=[],i=!e.$parent;i||Me(!1);var a=function(a){o.push(a);var s=Ke(a,t,n,e),c=S(a);(y(c)||H.isReservedAttr(c))&&ue('"'+c+'" is a reserved attribute and cannot be used as component prop.',e),Ee(r,a,s,(function(){i||wn||ue("Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being mutated: \""+a+'"',e)})),a in e||Hn(e,"_props",a)};for(var s in t)a(s);Me(!0)}(e,t.props),t.methods&&function(e,t){var n=e.$options.props;for(var r in t)"function"!=typeof t[r]&&ue('Method "'+r+'" has type "'+typeof t[r]+'" in the component definition. Did you reference the function correctly?',e),n&&w(n,r)&&ue('Method "'+r+'" has already been defined as a prop.',e),r in e&&V(r)&&ue('Method "'+r+'" conflicts with an existing Vue instance method. Avoid defining component methods that start with _ or $.'),e[r]="function"!=typeof t[r]?I:O(t[r],e)}(e,t.methods),t.data?function(e){var t=e.$options.data;u(t=e._data="function"==typeof t?function(e,t){be();try{return e.call(t,t)}catch(e){return tt(e,t,"data()"),{}}finally{_e()}}(t,e):t||{})||(t={},ue("data functions should return an object:\nhttps://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function",e));for(var n=Object.keys(t),r=e.$options.props,o=e.$options.methods,i=n.length;i--;){var a=n[i];o&&w(o,a)&&ue('Method "'+a+'" has already been defined as a data property.',e),r&&w(r,a)?ue('The data property "'+a+'" is already declared as a prop. Use prop default value instead.',e):V(a)||Hn(e,"_data",a)}Ie(t,!0)}(e):Ie(e._data={},!0),t.computed&&function(e,t){var n=e._computedWatchers=Object.create(null),r=ie();for(var o in t){var i=t[o],a="function"==typeof i?i:i.get;null==a&&ue('Getter is missing for computed property "'+o+'".',e),r||(n[o]=new Fn(e,a||I,I,Un)),o in e?o in e.$data?ue('The computed property "'+o+'" is already defined in data.',e):e.$options.props&&o in e.$options.props&&ue('The computed property "'+o+'" is already defined as a prop.',e):Vn(e,o,i)}}(e,t.computed),t.watch&&t.watch!==ne&&function(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var o=0;o<r.length;o++)qn(e,n,r[o]);else qn(e,n,r)}}(e,t.watch)}(o),function(e){var t=e.$options.provide;t&&(e._provided="function"==typeof t?t.call(e):t)}(o),kn(o,"created"),H.performance&&at&&(o._name=de(o,!1),at(r),st("vue "+o._name+" init",n,r)),o.$options.el&&o.$mount(o.$options.el)}}(Wn),function(e){var t={get:function(){return this._data}},n={get:function(){return this._props}};t.set=function(){ue("Avoid replacing instance root $data. Use nested data properties instead.",this)},n.set=function(){ue("$props is readonly.",this)},Object.defineProperty(e.prototype,"$data",t),Object.defineProperty(e.prototype,"$props",n),e.prototype.$set=Ne,e.prototype.$delete=De,e.prototype.$watch=function(e,t,n){if(u(t))return qn(this,e,t,n);(n=n||{}).user=!0;var r=new Fn(this,e,t,n);if(n.immediate)try{t.call(this,r.value)}catch(e){tt(e,this,'callback for immediate watcher "'+r.expression+'"')}return function(){r.teardown()}}}(Wn),function(e){var t=/^hook:/;e.prototype.$on=function(e,n){var r=this;if(Array.isArray(e))for(var o=0,i=e.length;o<i;o++)r.$on(e[o],n);else(r._events[e]||(r._events[e]=[])).push(n),t.test(e)&&(r._hasHookEvent=!0);return r},e.prototype.$once=function(e,t){var n=this;function r(){n.$off(e,r),t.apply(n,arguments)}return r.fn=t,n.$on(e,r),n},e.prototype.$off=function(e,t){var n=this;if(!arguments.length)return n._events=Object.create(null),n;if(Array.isArray(e)){for(var r=0,o=e.length;r<o;r++)n.$off(e[r],t);return n}var i,a=n._events[e];if(!a)return n;if(!t)return n._events[e]=null,n;for(var s=a.length;s--;)if((i=a[s])===t||i.fn===t){a.splice(s,1);break}return n},e.prototype.$emit=function(e){var t=this,n=e.toLowerCase();n!==e&&t._events[n]&&fe('Event "'+n+'" is emitted in component '+de(t)+' but the handler is registered for "'+e+'". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use "'+S(e)+'" instead of "'+e+'".');var r=t._events[e];if(r){r=r.length>1?T(r):r;for(var o=T(arguments,1),i='event handler for "'+e+'"',a=0,s=r.length;a<s;a++)nt(r[a],t,o,t,i)}return t}}(Wn),function(e){e.prototype._update=function(e,t){var n=this,r=n.$el,o=n._vnode,i=$n(n);n._vnode=e,n.$el=o?n.__patch__(o,e):n.__patch__(n.$el,e,t,!1),i(),r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el)},e.prototype.$forceUpdate=function(){this._watcher&&this._watcher.update()},e.prototype.$destroy=function(){var e=this;if(!e._isBeingDestroyed){kn(e,"beforeDestroy"),e._isBeingDestroyed=!0;var t=e.$parent;!t||t._isBeingDestroyed||e.$options.abstract||b(t.$children,e),e._watcher&&e._watcher.teardown();for(var n=e._watchers.length;n--;)e._watchers[n].teardown();e._data.__ob__&&e._data.__ob__.vmCount--,e._isDestroyed=!0,e.__patch__(e._vnode,null),kn(e,"destroyed"),e.$off(),e.$el&&(e.$el.__vue__=null),e.$vnode&&(e.$vnode.parent=null)}}}(Wn),function(e){tn(e.prototype),e.prototype.$nextTick=function(e){return mt(e,this)},e.prototype._render=function(){var e,t=this,n=t.$options,r=n.render,o=n._parentVnode;o&&(t.$scopedSlots=Ft(o.data.scopedSlots,t.$slots,t.$scopedSlots)),t.$vnode=o;try{dn=t,e=r.call(t._renderProxy,t.$createElement)}catch(n){if(tt(n,t,"render"),t.$options.renderError)try{e=t.$options.renderError.call(t._renderProxy,t.$createElement,n)}catch(n){tt(n,t,"renderError"),e=t._vnode}else e=t._vnode}finally{dn=null}return Array.isArray(e)&&1===e.length&&(e=e[0]),e instanceof we||(Array.isArray(e)&&ue("Multiple root nodes returned from render function. Render function should return a single root node.",t),e=xe()),e.parent=o,e}}(Wn);var Qn=[String,RegExp,Array],er={KeepAlive:{name:"keep-alive",abstract:!0,props:{include:Qn,exclude:Qn,max:[String,Number]},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)Xn(this.cache,e,this.keys)},mounted:function(){var e=this;this.$watch("include",(function(t){Yn(e,(function(e){return Gn(t,e)}))})),this.$watch("exclude",(function(t){Yn(e,(function(e){return!Gn(t,e)}))}))},render:function(){var e=this.$slots.default,t=hn(e),n=t&&t.componentOptions;if(n){var r=Zn(n),o=this.include,i=this.exclude;if(o&&(!r||!Gn(o,r))||i&&r&&Gn(i,r))return t;var a=this.cache,s=this.keys,c=null==t.key?n.Ctor.cid+(n.tag?"::"+n.tag:""):t.key;a[c]?(t.componentInstance=a[c].componentInstance,b(s,c),s.push(c)):(a[c]=t,s.push(c),this.max&&s.length>parseInt(this.max)&&Xn(a,s[0],s,this._vnode)),t.data.keepAlive=!0}return t||e&&e[0]}}};!function(e){var t={get:function(){return H},set:function(){ue("Do not replace the Vue.config object, set individual fields instead.")}};Object.defineProperty(e,"config",t),e.util={warn:ue,extend:M,mergeOptions:qe,defineReactive:Ee},e.set=Ne,e.delete=De,e.nextTick=mt,e.observable=function(e){return Ie(e),e},e.options=Object.create(null),F.forEach((function(t){e.options[t+"s"]=Object.create(null)})),e.options._base=e,M(e.options.components,er),function(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=T(arguments,1);return n.unshift(this),"function"==typeof e.install?e.install.apply(e,n):"function"==typeof e&&e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=qe(this.options,e),this}}(e),function(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,r=n.cid,o=e._Ctor||(e._Ctor={});if(o[r])return o[r];var i=e.name||n.options.name;i&&Be(i);var a=function(e){this._init(e)};return(a.prototype=Object.create(n.prototype)).constructor=a,a.cid=t++,a.options=qe(n.options,e),a.super=n,a.options.props&&function(e){var t=e.options.props;for(var n in t)Hn(e.prototype,"_props",n)}(a),a.options.computed&&function(e){var t=e.options.computed;for(var n in t)Vn(e.prototype,n,t[n])}(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,F.forEach((function(e){a[e]=n[e]})),i&&(a.options.components[i]=a),a.superOptions=n.options,a.extendOptions=e,a.sealedOptions=M({},a.options),o[r]=a,a}}(e),function(e){F.forEach((function(t){e[t]=function(e,n){return n?("component"===t&&Be(e),"component"===t&&u(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"==typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}}))}(e)}(Wn),Object.defineProperty(Wn.prototype,"$isServer",{get:ie}),Object.defineProperty(Wn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Wn,"FunctionalRenderContext",{value:nn}),Wn.version="2.6.12";var tr=m("style,class"),nr=m("input,textarea,option,select,progress"),rr=function(e,t,n){return"value"===n&&nr(e)&&"button"!==t||"selected"===n&&"option"===e||"checked"===n&&"input"===e||"muted"===n&&"video"===e},or=m("contenteditable,draggable,spellcheck"),ir=m("events,caret,typing,plaintext-only"),ar=m("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),sr="http://www.w3.org/1999/xlink",cr=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},lr=function(e){return cr(e)?e.slice(6,e.length):""},ur=function(e){return null==e||!1===e};function fr(e,t){return{staticClass:dr(e.staticClass,t.staticClass),class:o(e.class)?[e.class,t.class]:t.class}}function dr(e,t){return e?t?e+" "+t:e:t||""}function pr(e){return Array.isArray(e)?function(e){for(var t,n="",r=0,i=e.length;r<i;r++)o(t=pr(e[r]))&&""!==t&&(n&&(n+=" "),n+=t);return n}(e):s(e)?function(e){var t="";for(var n in e)e[n]&&(t&&(t+=" "),t+=n);return t}(e):"string"==typeof e?e:""}var vr={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},hr=m("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),mr=m("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),gr=function(e){return hr(e)||mr(e)};function yr(e){return mr(e)?"svg":"math"===e?"math":void 0}var br=Object.create(null),_r=m("text,number,password,search,email,tel,url");function wr(e){return"string"==typeof e?document.querySelector(e)||(ue("Cannot find element: "+e),document.createElement("div")):e}var $r=Object.freeze({createElement:function(e,t){var n=document.createElement(e);return"select"!==e||t.data&&t.data.attrs&&void 0!==t.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n},createElementNS:function(e,t){return document.createElementNS(vr[e],t)},createTextNode:function(e){return document.createTextNode(e)},createComment:function(e){return document.createComment(e)},insertBefore:function(e,t,n){e.insertBefore(t,n)},removeChild:function(e,t){e.removeChild(t)},appendChild:function(e,t){e.appendChild(t)},parentNode:function(e){return e.parentNode},nextSibling:function(e){return e.nextSibling},tagName:function(e){return e.tagName},setTextContent:function(e,t){e.textContent=t},setStyleScope:function(e,t){e.setAttribute(t,"")}}),xr={create:function(e,t){Ar(t)},update:function(e,t){e.data.ref!==t.data.ref&&(Ar(e,!0),Ar(t))},destroy:function(e){Ar(e,!0)}};function Ar(e,t){var n=e.data.ref;if(o(n)){var r=e.context,i=e.componentInstance||e.elm,a=r.$refs;t?Array.isArray(a[n])?b(a[n],i):a[n]===i&&(a[n]=void 0):e.data.refInFor?Array.isArray(a[n])?a[n].indexOf(i)<0&&a[n].push(i):a[n]=[i]:a[n]=i}}var kr=new we("",{},[]),Cr=["create","activate","update","remove","destroy"];function Sr(e,t){return e.key===t.key&&(e.tag===t.tag&&e.isComment===t.isComment&&o(e.data)===o(t.data)&&function(e,t){if("input"!==e.tag)return!0;var n,r=o(n=e.data)&&o(n=n.attrs)&&n.type,i=o(n=t.data)&&o(n=n.attrs)&&n.type;return r===i||_r(r)&&_r(i)}(e,t)||i(e.isAsyncPlaceholder)&&e.asyncFactory===t.asyncFactory&&r(t.asyncFactory.error))}function Or(e,t,n){var r,i,a={};for(r=t;r<=n;++r)o(i=e[r].key)&&(a[i]=r);return a}var Tr={create:Mr,update:Mr,destroy:function(e){Mr(e,kr)}};function Mr(e,t){(e.data.directives||t.data.directives)&&function(e,t){var n,r,o,i=e===kr,a=t===kr,s=Ir(e.data.directives,e.context),c=Ir(t.data.directives,t.context),l=[],u=[];for(n in c)r=s[n],o=c[n],r?(o.oldValue=r.value,o.oldArg=r.arg,Nr(o,"update",t,e),o.def&&o.def.componentUpdated&&u.push(o)):(Nr(o,"bind",t,e),o.def&&o.def.inserted&&l.push(o));if(l.length){var f=function(){for(var n=0;n<l.length;n++)Nr(l[n],"inserted",t,e)};i?jt(t,"insert",f):f()}if(u.length&&jt(t,"postpatch",(function(){for(var n=0;n<u.length;n++)Nr(u[n],"componentUpdated",t,e)})),!i)for(n in s)c[n]||Nr(s[n],"unbind",e,e,a)}(e,t)}var jr=Object.create(null);function Ir(e,t){var n,r,o=Object.create(null);if(!e)return o;for(n=0;n<e.length;n++)(r=e[n]).modifiers||(r.modifiers=jr),o[Er(r)]=r,r.def=Je(t.$options,"directives",r.name,!0);return o}function Er(e){return e.rawName||e.name+"."+Object.keys(e.modifiers||{}).join(".")}function Nr(e,t,n,r,o){var i=e.def&&e.def[t];if(i)try{i(n.elm,e,n,r,o)}catch(r){tt(r,n.context,"directive "+e.name+" "+t+" hook")}}var Dr=[xr,Tr];function Lr(e,t){var n=t.componentOptions;if(!(o(n)&&!1===n.Ctor.options.inheritAttrs||r(e.data.attrs)&&r(t.data.attrs))){var i,a,s=t.elm,c=e.data.attrs||{},l=t.data.attrs||{};for(i in o(l.__ob__)&&(l=t.data.attrs=M({},l)),l)a=l[i],c[i]!==a&&Pr(s,i,a);for(i in(Y||Q)&&l.value!==c.value&&Pr(s,"value",l.value),c)r(l[i])&&(cr(i)?s.removeAttributeNS(sr,lr(i)):or(i)||s.removeAttribute(i))}}function Pr(e,t,n){e.tagName.indexOf("-")>-1?Fr(e,t,n):ar(t)?ur(n)?e.removeAttribute(t):(n="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,n)):or(t)?e.setAttribute(t,function(e,t){return ur(t)||"false"===t?"false":"contenteditable"===e&&ir(t)?t:"true"}(t,n)):cr(t)?ur(n)?e.removeAttributeNS(sr,lr(t)):e.setAttributeNS(sr,t,n):Fr(e,t,n)}function Fr(e,t,n){if(ur(n))e.removeAttribute(t);else{if(Y&&!X&&"TEXTAREA"===e.tagName&&"placeholder"===t&&""!==n&&!e.__ieph){var r=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",r)};e.addEventListener("input",r),e.__ieph=!0}e.setAttribute(t,n)}}var Rr={create:Lr,update:Lr};function Hr(e,t){var n=t.elm,i=t.data,a=e.data;if(!(r(i.staticClass)&&r(i.class)&&(r(a)||r(a.staticClass)&&r(a.class)))){var s=function(e){for(var t=e.data,n=e,r=e;o(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(t=fr(r.data,t));for(;o(n=n.parent);)n&&n.data&&(t=fr(t,n.data));return i=t.staticClass,a=t.class,o(i)||o(a)?dr(i,pr(a)):"";var i,a}(t),c=n._transitionClasses;o(c)&&(s=dr(s,pr(c))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var Ur,Vr,Br,zr,qr,Jr,Kr,Wr,Zr={create:Hr,update:Hr},Gr=/[\w).+\-_$\]]/;function Yr(e){var t,n,r,o,i,a=!1,s=!1,c=!1,l=!1,u=0,f=0,d=0,p=0;for(r=0;r<e.length;r++)if(n=t,t=e.charCodeAt(r),a)39===t&&92!==n&&(a=!1);else if(s)34===t&&92!==n&&(s=!1);else if(c)96===t&&92!==n&&(c=!1);else if(l)47===t&&92!==n&&(l=!1);else if(124!==t||124===e.charCodeAt(r+1)||124===e.charCodeAt(r-1)||u||f||d){switch(t){case 34:s=!0;break;case 39:a=!0;break;case 96:c=!0;break;case 40:d++;break;case 41:d--;break;case 91:f++;break;case 93:f--;break;case 123:u++;break;case 125:u--}if(47===t){for(var v=r-1,h=void 0;v>=0&&" "===(h=e.charAt(v));v--);h&&Gr.test(h)||(l=!0)}}else void 0===o?(p=r+1,o=e.slice(0,r).trim()):m();function m(){(i||(i=[])).push(e.slice(p,r).trim()),p=r+1}if(void 0===o?o=e.slice(0,r).trim():0!==p&&m(),i)for(r=0;r<i.length;r++)o=Xr(o,i[r]);return o}function Xr(e,t){var n=t.indexOf("(");if(n<0)return'_f("'+t+'")('+e+")";var r=t.slice(0,n),o=t.slice(n+1);return'_f("'+r+'")('+e+(")"!==o?","+o:o)}function Qr(e,t){console.error("[Vue compiler]: "+e)}function eo(e,t){return e?e.map((function(e){return e[t]})).filter((function(e){return e})):[]}function to(e,t,n,r,o){(e.props||(e.props=[])).push(fo({name:t,value:n,dynamic:o},r)),e.plain=!1}function no(e,t,n,r,o){(o?e.dynamicAttrs||(e.dynamicAttrs=[]):e.attrs||(e.attrs=[])).push(fo({name:t,value:n,dynamic:o},r)),e.plain=!1}function ro(e,t,n,r){e.attrsMap[t]=n,e.attrsList.push(fo({name:t,value:n},r))}function oo(e,t,n,r,o,i,a,s){(e.directives||(e.directives=[])).push(fo({name:t,rawName:n,value:r,arg:o,isDynamicArg:i,modifiers:a},s)),e.plain=!1}function io(e,t,n){return n?"_p("+t+',"'+e+'")':e+t}function ao(t,n,r,o,i,a,s,c){var l;o=o||e,a&&o.prevent&&o.passive&&a("passive and prevent can't be used together. Passive handler can't prevent default event.",s),o.right?c?n="("+n+")==='click'?'contextmenu':("+n+")":"click"===n&&(n="contextmenu",delete o.right):o.middle&&(c?n="("+n+")==='click'?'mouseup':("+n+")":"click"===n&&(n="mouseup")),o.capture&&(delete o.capture,n=io("!",n,c)),o.once&&(delete o.once,n=io("~",n,c)),o.passive&&(delete o.passive,n=io("&",n,c)),o.native?(delete o.native,l=t.nativeEvents||(t.nativeEvents={})):l=t.events||(t.events={});var u=fo({value:r.trim(),dynamic:c},s);o!==e&&(u.modifiers=o);var f=l[n];Array.isArray(f)?i?f.unshift(u):f.push(u):l[n]=f?i?[u,f]:[f,u]:u,t.plain=!1}function so(e,t){return e.rawAttrsMap[":"+t]||e.rawAttrsMap["v-bind:"+t]||e.rawAttrsMap[t]}function co(e,t,n){var r=lo(e,":"+t)||lo(e,"v-bind:"+t);if(null!=r)return Yr(r);if(!1!==n){var o=lo(e,t);if(null!=o)return JSON.stringify(o)}}function lo(e,t,n){var r;if(null!=(r=e.attrsMap[t]))for(var o=e.attrsList,i=0,a=o.length;i<a;i++)if(o[i].name===t){o.splice(i,1);break}return n&&delete e.attrsMap[t],r}function uo(e,t){for(var n=e.attrsList,r=0,o=n.length;r<o;r++){var i=n[r];if(t.test(i.name))return n.splice(r,1),i}}function fo(e,t){return t&&(null!=t.start&&(e.start=t.start),null!=t.end&&(e.end=t.end)),e}function po(e,t,n){var r=n||{},o=r.number,i="$$v";r.trim&&(i="(typeof $$v === 'string'? $$v.trim(): $$v)"),o&&(i="_n("+i+")");var a=vo(t,i);e.model={value:"("+t+")",expression:JSON.stringify(t),callback:"function ($$v) {"+a+"}"}}function vo(e,t){var n=function(e){if(e=e.trim(),Ur=e.length,e.indexOf("[")<0||e.lastIndexOf("]")<Ur-1)return(zr=e.lastIndexOf("."))>-1?{exp:e.slice(0,zr),key:'"'+e.slice(zr+1)+'"'}:{exp:e,key:null};for(Vr=e,zr=qr=Jr=0;!mo();)go(Br=ho())?bo(Br):91===Br&&yo(Br);return{exp:e.slice(0,qr),key:e.slice(qr+1,Jr)}}(e);return null===n.key?e+"="+t:"$set("+n.exp+", "+n.key+", "+t+")"}function ho(){return Vr.charCodeAt(++zr)}function mo(){return zr>=Ur}function go(e){return 34===e||39===e}function yo(e){var t=1;for(qr=zr;!mo();)if(go(e=ho()))bo(e);else if(91===e&&t++,93===e&&t--,0===t){Jr=zr;break}}function bo(e){for(var t=e;!mo()&&(e=ho())!==t;);}function _o(e,t,n){var r=Wr;return function o(){var i=t.apply(null,arguments);null!==i&&xo(e,o,n,r)}}var wo=ct&&!(te&&Number(te[1])<=53);function $o(e,t,n,r){if(wo){var o=En,i=t;t=i._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=o||e.timeStamp<=0||e.target.ownerDocument!==document)return i.apply(this,arguments)}}Wr.addEventListener(e,t,re?{capture:n,passive:r}:n)}function xo(e,t,n,r){(r||Wr).removeEventListener(e,t._wrapper||t,n)}function Ao(e,t){if(!r(e.data.on)||!r(t.data.on)){var n=t.data.on||{},i=e.data.on||{};Wr=t.elm,function(e){if(o(e.__r)){var t=Y?"change":"input";e[t]=[].concat(e.__r,e[t]||[]),delete e.__r}o(e.__c)&&(e.change=[].concat(e.__c,e.change||[]),delete e.__c)}(n),Mt(n,i,$o,xo,_o,t.context),Wr=void 0}}var ko,Co={create:Ao,update:Ao};function So(e,t){if(!r(e.data.domProps)||!r(t.data.domProps)){var n,i,a=t.elm,s=e.data.domProps||{},c=t.data.domProps||{};for(n in o(c.__ob__)&&(c=t.data.domProps=M({},c)),s)n in c||(a[n]="");for(n in c){if(i=c[n],"textContent"===n||"innerHTML"===n){if(t.children&&(t.children.length=0),i===s[n])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===n&&"PROGRESS"!==a.tagName){a._value=i;var l=r(i)?"":String(i);Oo(a,l)&&(a.value=l)}else if("innerHTML"===n&&mr(a.tagName)&&r(a.innerHTML)){(ko=ko||document.createElement("div")).innerHTML="<svg>"+i+"</svg>";for(var u=ko.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;u.firstChild;)a.appendChild(u.firstChild)}else if(i!==s[n])try{a[n]=i}catch(e){}}}}function Oo(e,t){return!e.composing&&("OPTION"===e.tagName||function(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}(e,t)||function(e,t){var n=e.value,r=e._vModifiers;if(o(r)){if(r.number)return h(n)!==h(t);if(r.trim)return n.trim()!==t.trim()}return n!==t}(e,t))}var To={create:So,update:So},Mo=$((function(e){var t={},n=/:(.+)/;return e.split(/;(?![^(]*\))/g).forEach((function(e){if(e){var r=e.split(n);r.length>1&&(t[r[0].trim()]=r[1].trim())}})),t}));function jo(e){var t=Io(e.style);return e.staticStyle?M(e.staticStyle,t):t}function Io(e){return Array.isArray(e)?j(e):"string"==typeof e?Mo(e):e}var Eo,No=/^--/,Do=/\s*!important$/,Lo=function(e,t,n){if(No.test(t))e.style.setProperty(t,n);else if(Do.test(n))e.style.setProperty(S(t),n.replace(Do,""),"important");else{var r=Fo(t);if(Array.isArray(n))for(var o=0,i=n.length;o<i;o++)e.style[r]=n[o];else e.style[r]=n}},Po=["Webkit","Moz","ms"],Fo=$((function(e){if(Eo=Eo||document.createElement("div").style,"filter"!==(e=A(e))&&e in Eo)return e;for(var t=e.charAt(0).toUpperCase()+e.slice(1),n=0;n<Po.length;n++){var r=Po[n]+t;if(r in Eo)return r}}));function Ro(e,t){var n=t.data,i=e.data;if(!(r(n.staticStyle)&&r(n.style)&&r(i.staticStyle)&&r(i.style))){var a,s,c=t.elm,l=i.staticStyle,u=i.normalizedStyle||i.style||{},f=l||u,d=Io(t.data.style)||{};t.data.normalizedStyle=o(d.__ob__)?M({},d):d;var p=function(e,t){for(var n,r={},o=e;o.componentInstance;)(o=o.componentInstance._vnode)&&o.data&&(n=jo(o.data))&&M(r,n);(n=jo(e.data))&&M(r,n);for(var i=e;i=i.parent;)i.data&&(n=jo(i.data))&&M(r,n);return r}(t);for(s in f)r(p[s])&&Lo(c,s,"");for(s in p)(a=p[s])!==f[s]&&Lo(c,s,null==a?"":a)}}var Ho={create:Ro,update:Ro},Uo=/\s+/;function Vo(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(Uo).forEach((function(t){return e.classList.add(t)})):e.classList.add(t);else{var n=" "+(e.getAttribute("class")||"")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function Bo(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(Uo).forEach((function(t){return e.classList.remove(t)})):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{for(var n=" "+(e.getAttribute("class")||"")+" ",r=" "+t+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?e.setAttribute("class",n):e.removeAttribute("class")}}function zo(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&M(t,qo(e.name||"v")),M(t,e),t}return"string"==typeof e?qo(e):void 0}}var qo=$((function(e){return{enterClass:e+"-enter",enterToClass:e+"-enter-to",enterActiveClass:e+"-enter-active",leaveClass:e+"-leave",leaveToClass:e+"-leave-to",leaveActiveClass:e+"-leave-active"}})),Jo=K&&!X,Ko="transition",Wo="transitionend",Zo="animation",Go="animationend";Jo&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Ko="WebkitTransition",Wo="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Zo="WebkitAnimation",Go="webkitAnimationEnd"));var Yo=K?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function Xo(e){Yo((function(){Yo(e)}))}function Qo(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),Vo(e,t))}function ei(e,t){e._transitionClasses&&b(e._transitionClasses,t),Bo(e,t)}function ti(e,t,n){var r=ri(e,t),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s="transition"===o?Wo:Go,c=0,l=function(){e.removeEventListener(s,u),n()},u=function(t){t.target===e&&++c>=a&&l()};setTimeout((function(){c<a&&l()}),i+1),e.addEventListener(s,u)}var ni=/\b(transform|all)(,|$)/;function ri(e,t){var n,r=window.getComputedStyle(e),o=(r[Ko+"Delay"]||"").split(", "),i=(r[Ko+"Duration"]||"").split(", "),a=oi(o,i),s=(r[Zo+"Delay"]||"").split(", "),c=(r[Zo+"Duration"]||"").split(", "),l=oi(s,c),u=0,f=0;return"transition"===t?a>0&&(n="transition",u=a,f=i.length):"animation"===t?l>0&&(n="animation",u=l,f=c.length):f=(n=(u=Math.max(a,l))>0?a>l?"transition":"animation":null)?"transition"===n?i.length:c.length:0,{type:n,timeout:u,propCount:f,hasTransform:"transition"===n&&ni.test(r[Ko+"Property"])}}function oi(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max.apply(null,t.map((function(t,n){return ii(t)+ii(e[n])})))}function ii(e){return 1e3*Number(e.slice(0,-1).replace(",","."))}function ai(e,t){var n=e.elm;o(n._leaveCb)&&(n._leaveCb.cancelled=!0,n._leaveCb());var i=zo(e.data.transition);if(!r(i)&&!o(n._enterCb)&&1===n.nodeType){for(var a=i.css,c=i.type,l=i.enterClass,u=i.enterToClass,f=i.enterActiveClass,d=i.appearClass,p=i.appearToClass,v=i.appearActiveClass,m=i.beforeEnter,g=i.enter,y=i.afterEnter,b=i.enterCancelled,_=i.beforeAppear,w=i.appear,$=i.afterAppear,x=i.appearCancelled,A=i.duration,k=_n,C=_n.$vnode;C&&C.parent;)k=C.context,C=C.parent;var S=!k._isMounted||!e.isRootInsert;if(!S||w||""===w){var O=S&&d?d:l,T=S&&v?v:f,M=S&&p?p:u,j=S&&_||m,I=S&&"function"==typeof w?w:g,E=S&&$||y,N=S&&x||b,D=h(s(A)?A.enter:A);null!=D&&ci(D,"enter",e);var L=!1!==a&&!X,F=ui(I),R=n._enterCb=P((function(){L&&(ei(n,M),ei(n,T)),R.cancelled?(L&&ei(n,O),N&&N(n)):E&&E(n),n._enterCb=null}));e.data.show||jt(e,"insert",(function(){var t=n.parentNode,r=t&&t._pending&&t._pending[e.key];r&&r.tag===e.tag&&r.elm._leaveCb&&r.elm._leaveCb(),I&&I(n,R)})),j&&j(n),L&&(Qo(n,O),Qo(n,T),Xo((function(){ei(n,O),R.cancelled||(Qo(n,M),F||(li(D)?setTimeout(R,D):ti(n,c,R)))}))),e.data.show&&(t&&t(),I&&I(n,R)),L||F||R()}}}function si(e,t){var n=e.elm;o(n._enterCb)&&(n._enterCb.cancelled=!0,n._enterCb());var i=zo(e.data.transition);if(r(i)||1!==n.nodeType)return t();if(!o(n._leaveCb)){var a=i.css,c=i.type,l=i.leaveClass,u=i.leaveToClass,f=i.leaveActiveClass,d=i.beforeLeave,p=i.leave,v=i.afterLeave,m=i.leaveCancelled,g=i.delayLeave,y=i.duration,b=!1!==a&&!X,_=ui(p),w=h(s(y)?y.leave:y);o(w)&&ci(w,"leave",e);var $=n._leaveCb=P((function(){n.parentNode&&n.parentNode._pending&&(n.parentNode._pending[e.key]=null),b&&(ei(n,u),ei(n,f)),$.cancelled?(b&&ei(n,l),m&&m(n)):(t(),v&&v(n)),n._leaveCb=null}));g?g(x):x()}function x(){$.cancelled||(!e.data.show&&n.parentNode&&((n.parentNode._pending||(n.parentNode._pending={}))[e.key]=e),d&&d(n),b&&(Qo(n,l),Qo(n,f),Xo((function(){ei(n,l),$.cancelled||(Qo(n,u),_||(li(w)?setTimeout($,w):ti(n,c,$)))}))),p&&p(n,$),b||_||$())}}function ci(e,t,n){"number"!=typeof e?ue("<transition> explicit "+t+" duration is not a valid number - got "+JSON.stringify(e)+".",n.context):isNaN(e)&&ue("<transition> explicit "+t+" duration is NaN - the duration expression might be incorrect.",n.context)}function li(e){return"number"==typeof e&&!isNaN(e)}function ui(e){if(r(e))return!1;var t=e.fns;return o(t)?ui(Array.isArray(t)?t[0]:t):(e._length||e.length)>1}function fi(e,t){!0!==t.data.show&&ai(t)}var di=function(e){var t,n,s={},c=e.modules,l=e.nodeOps;for(t=0;t<Cr.length;++t)for(s[Cr[t]]=[],n=0;n<c.length;++n)o(c[n][Cr[t]])&&s[Cr[t]].push(c[n][Cr[t]]);function u(e){var t=l.parentNode(e);o(t)&&l.removeChild(t,e)}function d(e,t){return!t&&!e.ns&&!(H.ignoredElements.length&&H.ignoredElements.some((function(t){return f(t)?t.test(e.tag):t===e.tag})))&&H.isUnknownElement(e.tag)}var p=0;function v(e,t,n,r,a,c,u){if(o(e.elm)&&o(c)&&(e=c[u]=ke(e)),e.isRootInsert=!a,!function(e,t,n,r){var a=e.data;if(o(a)){var c=o(e.componentInstance)&&a.keepAlive;if(o(a=a.hook)&&o(a=a.init)&&a(e,!1),o(e.componentInstance))return h(e,t),g(n,e.elm,r),i(c)&&function(e,t,n,r){for(var i,a=e;a.componentInstance;)if(o(i=(a=a.componentInstance._vnode).data)&&o(i=i.transition)){for(i=0;i<s.activate.length;++i)s.activate[i](kr,a);t.push(a);break}g(n,e.elm,r)}(e,t,n,r),!0}}(e,t,n,r)){var f=e.data,v=e.children,m=e.tag;o(m)?(f&&f.pre&&p++,d(e,p)&&ue("Unknown custom element: <"+m+'> - did you register the component correctly? For recursive components, make sure to provide the "name" option.',e.context),e.elm=e.ns?l.createElementNS(e.ns,m):l.createElement(m,e),w(e),y(e,v,t),o(f)&&_(e,t),g(n,e.elm,r),f&&f.pre&&p--):i(e.isComment)?(e.elm=l.createComment(e.text),g(n,e.elm,r)):(e.elm=l.createTextNode(e.text),g(n,e.elm,r))}}function h(e,t){o(e.data.pendingInsert)&&(t.push.apply(t,e.data.pendingInsert),e.data.pendingInsert=null),e.elm=e.componentInstance.$el,b(e)?(_(e,t),w(e)):(Ar(e),t.push(e))}function g(e,t,n){o(e)&&(o(n)?l.parentNode(n)===e&&l.insertBefore(e,t,n):l.appendChild(e,t))}function y(e,t,n){if(Array.isArray(t)){C(t);for(var r=0;r<t.length;++r)v(t[r],n,e.elm,null,!0,t,r)}else a(e.text)&&l.appendChild(e.elm,l.createTextNode(String(e.text)))}function b(e){for(;e.componentInstance;)e=e.componentInstance._vnode;return o(e.tag)}function _(e,n){for(var r=0;r<s.create.length;++r)s.create[r](kr,e);o(t=e.data.hook)&&(o(t.create)&&t.create(kr,e),o(t.insert)&&n.push(e))}function w(e){var t;if(o(t=e.fnScopeId))l.setStyleScope(e.elm,t);else for(var n=e;n;)o(t=n.context)&&o(t=t.$options._scopeId)&&l.setStyleScope(e.elm,t),n=n.parent;o(t=_n)&&t!==e.context&&t!==e.fnContext&&o(t=t.$options._scopeId)&&l.setStyleScope(e.elm,t)}function $(e,t,n,r,o,i){for(;r<=o;++r)v(n[r],i,e,t,!1,n,r)}function x(e){var t,n,r=e.data;if(o(r))for(o(t=r.hook)&&o(t=t.destroy)&&t(e),t=0;t<s.destroy.length;++t)s.destroy[t](e);if(o(t=e.children))for(n=0;n<e.children.length;++n)x(e.children[n])}function A(e,t,n){for(;t<=n;++t){var r=e[t];o(r)&&(o(r.tag)?(k(r),x(r)):u(r.elm))}}function k(e,t){if(o(t)||o(e.data)){var n,r=s.remove.length+1;for(o(t)?t.listeners+=r:t=function(e,t){function n(){0==--n.listeners&&u(e)}return n.listeners=t,n}(e.elm,r),o(n=e.componentInstance)&&o(n=n._vnode)&&o(n.data)&&k(n,t),n=0;n<s.remove.length;++n)s.remove[n](e,t);o(n=e.data.hook)&&o(n=n.remove)?n(e,t):t()}else u(e.elm)}function C(e){for(var t={},n=0;n<e.length;n++){var r=e[n],i=r.key;o(i)&&(t[i]?ue("Duplicate keys detected: '"+i+"'. This may cause an update error.",r.context):t[i]=!0)}}function S(e,t,n,r){for(var i=n;i<r;i++){var a=t[i];if(o(a)&&Sr(e,a))return i}}function O(e,t,n){if(i(n)&&o(e.parent))e.parent.data.pendingInsert=t;else for(var r=0;r<t.length;++r)t[r].data.hook.insert(t[r])}var T=!1,M=m("attrs,class,staticClass,staticStyle,key");function j(e,t,n,r){var a,s=t.tag,c=t.data,l=t.children;if(r=r||c&&c.pre,t.elm=e,i(t.isComment)&&o(t.asyncFactory))return t.isAsyncPlaceholder=!0,!0;if(!function(e,t,n){return o(t.tag)?0===t.tag.indexOf("vue-component")||!d(t,n)&&t.tag.toLowerCase()===(e.tagName&&e.tagName.toLowerCase()):e.nodeType===(t.isComment?8:3)}(e,t,r))return!1;if(o(c)&&(o(a=c.hook)&&o(a=a.init)&&a(t,!0),o(a=t.componentInstance)))return h(t,n),!0;if(o(s)){if(o(l))if(e.hasChildNodes())if(o(a=c)&&o(a=a.domProps)&&o(a=a.innerHTML)){if(a!==e.innerHTML)return"undefined"==typeof console||T||(T=!0,console.warn("Parent: ",e),console.warn("server innerHTML: ",a),console.warn("client innerHTML: ",e.innerHTML)),!1}else{for(var u=!0,f=e.firstChild,p=0;p<l.length;p++){if(!f||!j(f,l[p],n,r)){u=!1;break}f=f.nextSibling}if(!u||f)return"undefined"==typeof console||T||(T=!0,console.warn("Parent: ",e),console.warn("Mismatching childNodes vs. VNodes: ",e.childNodes,l)),!1}else y(t,l,n);if(o(c)){var v=!1;for(var m in c)if(!M(m)){v=!0,_(t,n);break}!v&&c.class&&St(c.class)}}else e.data!==t.text&&(e.data=t.text);return!0}return function(e,t,n,a){if(!r(t)){var c,u=!1,f=[];if(r(e))u=!0,v(t,f);else{var d=o(e.nodeType);if(!d&&Sr(e,t))!function e(t,n,a,c,u,f){if(t!==n){o(n.elm)&&o(c)&&(n=c[u]=ke(n));var d=n.elm=t.elm;if(i(t.isAsyncPlaceholder))o(n.asyncFactory.resolved)?j(t.elm,n,a):n.isAsyncPlaceholder=!0;else if(i(n.isStatic)&&i(t.isStatic)&&n.key===t.key&&(i(n.isCloned)||i(n.isOnce)))n.componentInstance=t.componentInstance;else{var p,h=n.data;o(h)&&o(p=h.hook)&&o(p=p.prepatch)&&p(t,n);var m=t.children,g=n.children;if(o(h)&&b(n)){for(p=0;p<s.update.length;++p)s.update[p](t,n);o(p=h.hook)&&o(p=p.update)&&p(t,n)}r(n.text)?o(m)&&o(g)?m!==g&&function(t,n,i,a,s){var c,u,f,d=0,p=0,h=n.length-1,m=n[0],g=n[h],y=i.length-1,b=i[0],_=i[y],w=!s;for(C(i);d<=h&&p<=y;)r(m)?m=n[++d]:r(g)?g=n[--h]:Sr(m,b)?(e(m,b,a,i,p),m=n[++d],b=i[++p]):Sr(g,_)?(e(g,_,a,i,y),g=n[--h],_=i[--y]):Sr(m,_)?(e(m,_,a,i,y),w&&l.insertBefore(t,m.elm,l.nextSibling(g.elm)),m=n[++d],_=i[--y]):Sr(g,b)?(e(g,b,a,i,p),w&&l.insertBefore(t,g.elm,m.elm),g=n[--h],b=i[++p]):(r(c)&&(c=Or(n,d,h)),r(u=o(b.key)?c[b.key]:S(b,n,d,h))?v(b,a,t,m.elm,!1,i,p):Sr(f=n[u],b)?(e(f,b,a,i,p),n[u]=void 0,w&&l.insertBefore(t,f.elm,m.elm)):v(b,a,t,m.elm,!1,i,p),b=i[++p]);d>h?$(t,r(i[y+1])?null:i[y+1].elm,i,p,y,a):p>y&&A(n,d,h)}(d,m,g,a,f):o(g)?(C(g),o(t.text)&&l.setTextContent(d,""),$(d,null,g,0,g.length-1,a)):o(m)?A(m,0,m.length-1):o(t.text)&&l.setTextContent(d,""):t.text!==n.text&&l.setTextContent(d,n.text),o(h)&&o(p=h.hook)&&o(p=p.postpatch)&&p(t,n)}}}(e,t,f,null,null,a);else{if(d){if(1===e.nodeType&&e.hasAttribute("data-server-rendered")&&(e.removeAttribute("data-server-rendered"),n=!0),i(n)){if(j(e,t,f))return O(t,f,!0),e;ue("The client-side rendered virtual DOM tree is not matching server-rendered content. This is likely caused by incorrect HTML markup, for example nesting block-level elements inside <p>, or missing <tbody>. Bailing hydration and performing full client-side render.")}c=e,e=new we(l.tagName(c).toLowerCase(),{},[],void 0,c)}var p=e.elm,h=l.parentNode(p);if(v(t,f,p._leaveCb?null:h,l.nextSibling(p)),o(t.parent))for(var m=t.parent,g=b(t);m;){for(var y=0;y<s.destroy.length;++y)s.destroy[y](m);if(m.elm=t.elm,g){for(var _=0;_<s.create.length;++_)s.create[_](kr,m);var w=m.data.hook.insert;if(w.merged)for(var k=1;k<w.fns.length;k++)w.fns[k]()}else Ar(m);m=m.parent}o(h)?A([e],0,0):o(e.tag)&&x(e)}}return O(t,f,u),t.elm}o(e)&&x(e)}}({nodeOps:$r,modules:[Rr,Zr,Co,To,Ho,K?{create:fi,activate:fi,remove:function(e,t){!0!==e.data.show?si(e,t):t()}}:{}].concat(Dr)});X&&document.addEventListener("selectionchange",(function(){var e=document.activeElement;e&&e.vmodel&&_i(e,"input")}));var pi={inserted:function(e,t,n,r){"select"===n.tag?(r.elm&&!r.elm._vOptions?jt(n,"postpatch",(function(){pi.componentUpdated(e,t,n)})):vi(e,t,n.context),e._vOptions=[].map.call(e.options,gi)):("textarea"===n.tag||_r(e.type))&&(e._vModifiers=t.modifiers,t.modifiers.lazy||(e.addEventListener("compositionstart",yi),e.addEventListener("compositionend",bi),e.addEventListener("change",bi),X&&(e.vmodel=!0)))},componentUpdated:function(e,t,n){if("select"===n.tag){vi(e,t,n.context);var r=e._vOptions,o=e._vOptions=[].map.call(e.options,gi);o.some((function(e,t){return!D(e,r[t])}))&&(e.multiple?t.value.some((function(e){return mi(e,o)})):t.value!==t.oldValue&&mi(t.value,o))&&_i(e,"change")}}};function vi(e,t,n){hi(e,t,n),(Y||Q)&&setTimeout((function(){hi(e,t,n)}),0)}function hi(e,t,n){var r=t.value,o=e.multiple;if(!o||Array.isArray(r)){for(var i,a,s=0,c=e.options.length;s<c;s++)if(a=e.options[s],o)i=L(r,gi(a))>-1,a.selected!==i&&(a.selected=i);else if(D(gi(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));o||(e.selectedIndex=-1)}else ue('<select multiple v-model="'+t.expression+'"> expects an Array value for its binding, but got '+Object.prototype.toString.call(r).slice(8,-1),n)}function mi(e,t){return t.every((function(t){return!D(t,e)}))}function gi(e){return"_value"in e?e._value:e.value}function yi(e){e.target.composing=!0}function bi(e){e.target.composing&&(e.target.composing=!1,_i(e.target,"input"))}function _i(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function wi(e){return!e.componentInstance||e.data&&e.data.transition?e:wi(e.componentInstance._vnode)}var $i={model:pi,show:{bind:function(e,t,n){var r=t.value,o=(n=wi(n)).data&&n.data.transition,i=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;r&&o?(n.data.show=!0,ai(n,(function(){e.style.display=i}))):e.style.display=r?i:"none"},update:function(e,t,n){var r=t.value;!r!=!t.oldValue&&((n=wi(n)).data&&n.data.transition?(n.data.show=!0,r?ai(n,(function(){e.style.display=e.__vOriginalDisplay})):si(n,(function(){e.style.display="none"}))):e.style.display=r?e.__vOriginalDisplay:"none")},unbind:function(e,t,n,r,o){o||(e.style.display=e.__vOriginalDisplay)}}},xi={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Ai(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?Ai(hn(t.children)):e}function ki(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var o=n._parentListeners;for(var i in o)t[A(i)]=o[i];return t}function Ci(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}var Si=function(e){return e.tag||vn(e)},Oi=function(e){return"show"===e.name},Ti={name:"transition",props:xi,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(Si)).length){n.length>1&&ue("<transition> can only be used on a single element. Use <transition-group> for lists.",this.$parent);var r=this.mode;r&&"in-out"!==r&&"out-in"!==r&&ue("invalid <transition> mode: "+r,this.$parent);var o=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return o;var i=Ai(o);if(!i)return o;if(this._leaving)return Ci(e,o);var s="__transition-"+this._uid+"-";i.key=null==i.key?i.isComment?s+"comment":s+i.tag:a(i.key)?0===String(i.key).indexOf(s)?i.key:s+i.key:i.key;var c=(i.data||(i.data={})).transition=ki(this),l=this._vnode,u=Ai(l);if(i.data.directives&&i.data.directives.some(Oi)&&(i.data.show=!0),u&&u.data&&!function(e,t){return t.key===e.key&&t.tag===e.tag}(i,u)&&!vn(u)&&(!u.componentInstance||!u.componentInstance._vnode.isComment)){var f=u.data.transition=M({},c);if("out-in"===r)return this._leaving=!0,jt(f,"afterLeave",(function(){t._leaving=!1,t.$forceUpdate()})),Ci(e,o);if("in-out"===r){if(vn(i))return l;var d,p=function(){d()};jt(c,"afterEnter",p),jt(c,"enterCancelled",p),jt(f,"delayLeave",(function(e){d=e}))}}return o}}},Mi=M({tag:String,moveClass:String},xi);function ji(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function Ii(e){e.data.newPos=e.elm.getBoundingClientRect()}function Ei(e){var t=e.data.pos,n=e.data.newPos,r=t.left-n.left,o=t.top-n.top;if(r||o){e.data.moved=!0;var i=e.elm.style;i.transform=i.WebkitTransform="translate("+r+"px,"+o+"px)",i.transitionDuration="0s"}}delete Mi.mode;var Ni={Transition:Ti,TransitionGroup:{props:Mi,beforeMount:function(){var e=this,t=this._update;this._update=function(n,r){var o=$n(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,o(),t.call(e,n,r)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=ki(this),s=0;s<o.length;s++){var c=o[s];if(c.tag)if(null!=c.key&&0!==String(c.key).indexOf("__vlist"))i.push(c),n[c.key]=c,(c.data||(c.data={})).transition=a;else{var l=c.componentOptions,u=l?l.Ctor.options.name||l.tag||"":c.tag;ue("<transition-group> children must be keyed: <"+u+">")}}if(r){for(var f=[],d=[],p=0;p<r.length;p++){var v=r[p];v.data.transition=a,v.data.pos=v.elm.getBoundingClientRect(),n[v.key]?f.push(v):d.push(v)}this.kept=e(t,null,f),this.removed=d}return e(t,null,i)},updated:function(){var e=this.prevChildren,t=this.moveClass||(this.name||"v")+"-move";e.length&&this.hasMove(e[0].elm,t)&&(e.forEach(ji),e.forEach(Ii),e.forEach(Ei),this._reflow=document.body.offsetHeight,e.forEach((function(e){if(e.data.moved){var n=e.elm,r=n.style;Qo(n,t),r.transform=r.WebkitTransform=r.transitionDuration="",n.addEventListener(Wo,n._moveCb=function e(r){r&&r.target!==n||r&&!/transform$/.test(r.propertyName)||(n.removeEventListener(Wo,e),n._moveCb=null,ei(n,t))})}})))},methods:{hasMove:function(e,t){if(!Jo)return!1;if(this._hasMove)return this._hasMove;var n=e.cloneNode();e._transitionClasses&&e._transitionClasses.forEach((function(e){Bo(n,e)})),Vo(n,t),n.style.display="none",this.$el.appendChild(n);var r=ri(n);return this.$el.removeChild(n),this._hasMove=r.hasTransform}}}};Wn.config.mustUseProp=rr,Wn.config.isReservedTag=gr,Wn.config.isReservedAttr=tr,Wn.config.getTagNamespace=yr,Wn.config.isUnknownElement=function(e){if(!K)return!0;if(gr(e))return!1;if(e=e.toLowerCase(),null!=br[e])return br[e];var t=document.createElement(e);return e.indexOf("-")>-1?br[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:br[e]=/HTMLUnknownElement/.test(t.toString())},M(Wn.options.directives,$i),M(Wn.options.components,Ni),Wn.prototype.__patch__=K?di:I,Wn.prototype.$mount=function(e,t){return function(e,t,n){var r;return e.$el=t,e.$options.render||(e.$options.render=xe,e.$options.template&&"#"!==e.$options.template.charAt(0)||e.$options.el||t?ue("You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into render functions, or use the compiler-included build.",e):ue("Failed to mount component: template or render function not defined.",e)),kn(e,"beforeMount"),r=H.performance&&at?function(){var t=e._name,r=e._uid,o="vue-perf-start:"+r,i="vue-perf-end:"+r;at(o);var a=e._render();at(i),st("vue "+t+" render",o,i),at(o),e._update(a,n),at(i),st("vue "+t+" patch",o,i)}:function(){e._update(e._render(),n)},new Fn(e,r,I,{before:function(){e._isMounted&&!e._isDestroyed&&kn(e,"beforeUpdate")}},!0),n=!1,null==e.$vnode&&(e._isMounted=!0,kn(e,"mounted")),e}(this,e=e&&K?wr(e):void 0,t)},K&&setTimeout((function(){H.devtools&&(ae?ae.emit("init",Wn):console[console.info?"info":"log"]("Download the Vue Devtools extension for a better development experience:\nhttps://github.com/vuejs/vue-devtools")),!1!==H.productionTip&&"undefined"!=typeof console&&console[console.info?"info":"log"]("You are running Vue in development mode.\nMake sure to turn on production mode when deploying for production.\nSee more tips at https://vuejs.org/guide/deployment.html")}),0);var Di=/\{\{((?:.|\r?\n)+?)\}\}/g,Li=/[-.*+?^${}()|[\]\/\\]/g,Pi=$((function(e){var t=e[0].replace(Li,"\\$&"),n=e[1].replace(Li,"\\$&");return new RegExp(t+"((?:.|\\n)+?)"+n,"g")}));function Fi(e,t){var n=t?Pi(t):Di;if(n.test(e)){for(var r,o,i,a=[],s=[],c=n.lastIndex=0;r=n.exec(e);){(o=r.index)>c&&(s.push(i=e.slice(c,o)),a.push(JSON.stringify(i)));var l=Yr(r[1].trim());a.push("_s("+l+")"),s.push({"@binding":l}),c=o+r[0].length}return c<e.length&&(s.push(i=e.slice(c)),a.push(JSON.stringify(i))),{expression:a.join("+"),tokens:s}}}var Ri,Hi={staticKeys:["staticClass"],transformNode:function(e,t){var n=t.warn||Qr,r=lo(e,"class");r&&Fi(r,t.delimiters)&&n('class="'+r+'": Interpolation inside attributes has been removed. Use v-bind or the colon shorthand instead. For example, instead of <div class="{{ val }}">, use <div :class="val">.',e.rawAttrsMap.class),r&&(e.staticClass=JSON.stringify(r));var o=co(e,"class",!1);o&&(e.classBinding=o)},genData:function(e){var t="";return e.staticClass&&(t+="staticClass:"+e.staticClass+","),e.classBinding&&(t+="class:"+e.classBinding+","),t}},Ui={staticKeys:["staticStyle"],transformNode:function(e,t){var n=t.warn||Qr,r=lo(e,"style");r&&(Fi(r,t.delimiters)&&n('style="'+r+'": Interpolation inside attributes has been removed. Use v-bind or the colon shorthand instead. For example, instead of <div style="{{ val }}">, use <div :style="val">.',e.rawAttrsMap.style),e.staticStyle=JSON.stringify(Mo(r)));var o=co(e,"style",!1);o&&(e.styleBinding=o)},genData:function(e){var t="";return e.staticStyle&&(t+="staticStyle:"+e.staticStyle+","),e.styleBinding&&(t+="style:("+e.styleBinding+"),"),t}},Vi=m("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),Bi=m("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),zi=m("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),qi=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Ji=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Ki="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+U.source+"]*",Wi="((?:"+Ki+"\\:)?"+Ki+")",Zi=new RegExp("^<"+Wi),Gi=/^\s*(\/?)>/,Yi=new RegExp("^<\\/"+Wi+"[^>]*>"),Xi=/^<!DOCTYPE [^>]+>/i,Qi=/^<!\--/,ea=/^<!\[/,ta=m("script,style,textarea",!0),na={},ra={"<":"<",">":">",""":'"',"&":"&"," ":"\n","	":"\t","'":"'"},oa=/&(?:lt|gt|quot|amp|#39);/g,ia=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,aa=m("pre,textarea",!0),sa=function(e,t){return e&&aa(e)&&"\n"===t[0]};function ca(e,t){var n=t?ia:oa;return e.replace(n,(function(e){return ra[e]}))}var la,ua,fa,da,pa,va,ha,ma,ga,ya=/^@|^v-on:/,ba=/^v-|^@|^:|^#/,_a=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,wa=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,$a=/^\(|\)$/g,xa=/^\[.*\]$/,Aa=/:(.*)$/,ka=/^:|^\.|^v-bind:/,Ca=/\.[^.\]]+(?=[^\]]*$)/g,Sa=/^v-slot(:|$)|^#/,Oa=/[\r\n]/,Ta=/\s+/g,Ma=/[\s"'<>\/=]/,ja=$((function(e){return(Ri=Ri||document.createElement("div")).innerHTML=e,Ri.textContent}));function Ia(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:Fa(t),rawAttrsMap:{},parent:n,children:[]}}function Ea(e,t){var n;!function(e){var t=co(e,"key");if(t){if("template"===e.tag&&la("<template> cannot be keyed. Place the key on real elements instead.",so(e,"key")),e.for){var n=e.iterator2||e.iterator1,r=e.parent;n&&n===t&&r&&"transition-group"===r.tag&&la("Do not use v-for index as key on <transition-group> children, this is the same as not using keys.",so(e,"key"),!0)}e.key=t}}(e),e.plain=!e.key&&!e.scopedSlots&&!e.attrsList.length,function(e){var t=co(e,"ref");t&&(e.ref=t,e.refInFor=function(e){for(var t=e;t;){if(void 0!==t.for)return!0;t=t.parent}return!1}(e))}(e),function(e){var t;"template"===e.tag?((t=lo(e,"scope"))&&la('the "scope" attribute for scoped slots have been deprecated and replaced by "slot-scope" since 2.5. The new "slot-scope" attribute can also be used on plain elements in addition to <template> to denote scoped slots.',e.rawAttrsMap.scope,!0),e.slotScope=t||lo(e,"slot-scope")):(t=lo(e,"slot-scope"))&&(e.attrsMap["v-for"]&&la("Ambiguous combined usage of slot-scope and v-for on <"+e.tag+"> (v-for takes higher priority). Use a wrapper <template> for the scoped slot to make it clearer.",e.rawAttrsMap["slot-scope"],!0),e.slotScope=t);var n=co(e,"slot");if(n&&(e.slotTarget='""'===n?'"default"':n,e.slotTargetDynamic=!(!e.attrsMap[":slot"]&&!e.attrsMap["v-bind:slot"]),"template"===e.tag||e.slotScope||no(e,"slot",n,so(e,"slot"))),"template"===e.tag){var r=uo(e,Sa);if(r){(e.slotTarget||e.slotScope)&&la("Unexpected mixed usage of different slot syntaxes.",e),e.parent&&!ga(e.parent)&&la("<template v-slot> can only appear at the root level inside the receiving component",e);var o=La(r),i=o.name,a=o.dynamic;e.slotTarget=i,e.slotTargetDynamic=a,e.slotScope=r.value||"_empty_"}}else{var s=uo(e,Sa);if(s){ga(e)||la("v-slot can only be used on components or <template>.",s),(e.slotScope||e.slotTarget)&&la("Unexpected mixed usage of different slot syntaxes.",e),e.scopedSlots&&la("To avoid scope ambiguity, the default slot should also use <template> syntax when there are other named slots.",s);var c=e.scopedSlots||(e.scopedSlots={}),l=La(s),u=l.name,f=l.dynamic,d=c[u]=Ia("template",[],e);d.slotTarget=u,d.slotTargetDynamic=f,d.children=e.children.filter((function(e){if(!e.slotScope)return e.parent=d,!0})),d.slotScope=s.value||"_empty_",e.children=[],e.plain=!1}}}(e),"slot"===(n=e).tag&&(n.slotName=co(n,"name"),n.key&&la("`key` does not work on <slot> because slots are abstract outlets and can possibly expand into multiple elements. Use the key on a wrapping element instead.",so(n,"key"))),function(e){var t;(t=co(e,"is"))&&(e.component=t),null!=lo(e,"inline-template")&&(e.inlineTemplate=!0)}(e);for(var r=0;r<fa.length;r++)e=fa[r](e,t)||e;return function(e){var t,n,r,o,i,a,s,c,l=e.attrsList;for(t=0,n=l.length;t<n;t++)if(r=o=l[t].name,i=l[t].value,ba.test(r))if(e.hasBindings=!0,(a=Pa(r.replace(ba,"")))&&(r=r.replace(Ca,"")),ka.test(r))r=r.replace(ka,""),i=Yr(i),(c=xa.test(r))&&(r=r.slice(1,-1)),0===i.trim().length&&la('The value for a v-bind expression cannot be empty. Found in "v-bind:'+r+'"'),a&&(a.prop&&!c&&"innerHtml"===(r=A(r))&&(r="innerHTML"),a.camel&&!c&&(r=A(r)),a.sync&&(s=vo(i,"$event"),c?ao(e,'"update:"+('+r+")",s,null,!1,la,l[t],!0):(ao(e,"update:"+A(r),s,null,!1,la,l[t]),S(r)!==A(r)&&ao(e,"update:"+S(r),s,null,!1,la,l[t])))),a&&a.prop||!e.component&&ha(e.tag,e.attrsMap.type,r)?to(e,r,i,l[t],c):no(e,r,i,l[t],c);else if(ya.test(r))r=r.replace(ya,""),(c=xa.test(r))&&(r=r.slice(1,-1)),ao(e,r,i,a,!1,la,l[t],c);else{var u=(r=r.replace(ba,"")).match(Aa),f=u&&u[1];c=!1,f&&(r=r.slice(0,-(f.length+1)),xa.test(f)&&(f=f.slice(1,-1),c=!0)),oo(e,r,o,i,f,c,a,l[t]),"model"===r&&Ua(e,i)}else Fi(i,ua)&&la(r+'="'+i+'": Interpolation inside attributes has been removed. Use v-bind or the colon shorthand instead. For example, instead of <div id="{{ val }}">, use <div :id="val">.',l[t]),no(e,r,JSON.stringify(i),l[t]),!e.component&&"muted"===r&&ha(e.tag,e.attrsMap.type,r)&&to(e,r,"true",l[t])}(e),e}function Na(e){var t;if(t=lo(e,"v-for")){var n=function(e){var t=e.match(_a);if(t){var n={};n.for=t[2].trim();var r=t[1].trim().replace($a,""),o=r.match(wa);return o?(n.alias=r.replace(wa,"").trim(),n.iterator1=o[1].trim(),o[2]&&(n.iterator2=o[2].trim())):n.alias=r,n}}(t);n?M(e,n):la("Invalid v-for expression: "+t,e.rawAttrsMap["v-for"])}}function Da(e,t){e.ifConditions||(e.ifConditions=[]),e.ifConditions.push(t)}function La(e){var t=e.name.replace(Sa,"");return t||("#"!==e.name[0]?t="default":la("v-slot shorthand syntax requires a slot name.",e)),xa.test(t)?{name:t.slice(1,-1),dynamic:!0}:{name:'"'+t+'"',dynamic:!1}}function Pa(e){var t=e.match(Ca);if(t){var n={};return t.forEach((function(e){n[e.slice(1)]=!0})),n}}function Fa(e){for(var t={},n=0,r=e.length;n<r;n++)!t[e[n].name]||Y||Q||la("duplicate attribute: "+e[n].name,e[n]),t[e[n].name]=e[n].value;return t}var Ra=/^xmlns:NS\d+/,Ha=/^NS\d+:/;function Ua(e,t){for(var n=e;n;)n.for&&n.alias===t&&la("<"+e.tag+' v-model="'+t+'">: You are binding v-model directly to a v-for iteration alias. This will not be able to modify the v-for source array because writing to the alias is like modifying a function local variable. Consider using an array of objects and use v-model on an object property instead.',e.rawAttrsMap["v-model"]),n=n.parent}function Va(e){return Ia(e.tag,e.attrsList.slice(),e.parent)}var Ba,za,qa,Ja=[Hi,Ui,{preTransformNode:function(e,t){if("input"===e.tag){var n,r=e.attrsMap;if(!r["v-model"])return;if((r[":type"]||r["v-bind:type"])&&(n=co(e,"type")),r.type||n||!r["v-bind"]||(n="("+r["v-bind"]+").type"),n){var o=lo(e,"v-if",!0),i=o?"&&("+o+")":"",a=null!=lo(e,"v-else",!0),s=lo(e,"v-else-if",!0),c=Va(e);Na(c),ro(c,"type","checkbox"),Ea(c,t),c.processed=!0,c.if="("+n+")==='checkbox'"+i,Da(c,{exp:c.if,block:c});var l=Va(e);lo(l,"v-for",!0),ro(l,"type","radio"),Ea(l,t),Da(c,{exp:"("+n+")==='radio'"+i,block:l});var u=Va(e);return lo(u,"v-for",!0),ro(u,":type",n),Ea(u,t),Da(c,{exp:o,block:u}),a?c.else=!0:s&&(c.elseif=s),c}}}}],Ka={expectHTML:!0,modules:Ja,directives:{model:function(e,t,n){Kr=n;var r=t.value,o=t.modifiers,i=e.tag,a=e.attrsMap.type;if("input"===i&&"file"===a&&Kr("<"+e.tag+' v-model="'+r+'" type="file">:\nFile inputs are read only. Use a v-on:change listener instead.',e.rawAttrsMap["v-model"]),e.component)return po(e,r,o),!1;if("select"===i)!function(e,t,n){var r='var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;return '+(n&&n.number?"_n(val)":"val")+"});";ao(e,"change",r=r+" "+vo(t,"$event.target.multiple ? $$selectedVal : $$selectedVal[0]"),null,!0)}(e,r,o);else if("input"===i&&"checkbox"===a)!function(e,t,n){var r=n&&n.number,o=co(e,"value")||"null",i=co(e,"true-value")||"true",a=co(e,"false-value")||"false";to(e,"checked","Array.isArray("+t+")?_i("+t+","+o+")>-1"+("true"===i?":("+t+")":":_q("+t+","+i+")")),ao(e,"change","var $$a="+t+",$$el=$event.target,$$c=$$el.checked?("+i+"):("+a+");if(Array.isArray($$a)){var $$v="+(r?"_n("+o+")":o)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+vo(t,"$$a.concat([$$v])")+")}else{$$i>-1&&("+vo(t,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+vo(t,"$$c")+"}",null,!0)}(e,r,o);else if("input"===i&&"radio"===a)!function(e,t,n){var r=n&&n.number,o=co(e,"value")||"null";to(e,"checked","_q("+t+","+(o=r?"_n("+o+")":o)+")"),ao(e,"change",vo(t,o),null,!0)}(e,r,o);else if("input"===i||"textarea"===i)!function(e,t,n){var r=e.attrsMap.type,o=e.attrsMap["v-bind:value"]||e.attrsMap[":value"],i=e.attrsMap["v-bind:type"]||e.attrsMap[":type"];if(o&&!i){var a=e.attrsMap["v-bind:value"]?"v-bind:value":":value";Kr(a+'="'+o+'" conflicts with v-model on the same element because the latter already expands to a value binding internally',e.rawAttrsMap[a])}var s=n||{},c=s.lazy,l=s.number,u=s.trim,f=!c&&"range"!==r,d=c?"change":"range"===r?"__r":"input",p="$event.target.value";u&&(p="$event.target.value.trim()"),l&&(p="_n("+p+")");var v=vo(t,p);f&&(v="if($event.target.composing)return;"+v),to(e,"value","("+t+")"),ao(e,d,v,null,!0),(u||l)&&ao(e,"blur","$forceUpdate()")}(e,r,o);else{if(!H.isReservedTag(i))return po(e,r,o),!1;Kr("<"+e.tag+' v-model="'+r+"\">: v-model is not supported on this element type. If you are working with contenteditable, it's recommended to wrap a library dedicated for that purpose inside a custom component.",e.rawAttrsMap["v-model"])}return!0},text:function(e,t){t.value&&to(e,"textContent","_s("+t.value+")",t)},html:function(e,t){t.value&&to(e,"innerHTML","_s("+t.value+")",t)}},isPreTag:function(e){return"pre"===e},isUnaryTag:Vi,mustUseProp:rr,canBeLeftOpenTag:Bi,isReservedTag:gr,getTagNamespace:yr,staticKeys:(qa=Ja,qa.reduce((function(e,t){return e.concat(t.staticKeys||[])}),[]).join(","))},Wa=$((function(e){return m("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(e?","+e:""))}));var Za=/^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/,Ga=/\([^)]*?\);*$/,Ya=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,Xa={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Qa={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},es=function(e){return"if("+e+")return null;"},ts={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:es("$event.target !== $event.currentTarget"),ctrl:es("!$event.ctrlKey"),shift:es("!$event.shiftKey"),alt:es("!$event.altKey"),meta:es("!$event.metaKey"),left:es("'button' in $event && $event.button !== 0"),middle:es("'button' in $event && $event.button !== 1"),right:es("'button' in $event && $event.button !== 2")};function ns(e,t){var n=t?"nativeOn:":"on:",r="",o="";for(var i in e){var a=rs(e[i]);e[i]&&e[i].dynamic?o+=i+","+a+",":r+='"'+i+'":'+a+","}return r="{"+r.slice(0,-1)+"}",o?n+"_d("+r+",["+o.slice(0,-1)+"])":n+r}function rs(e){if(!e)return"function(){}";if(Array.isArray(e))return"["+e.map((function(e){return rs(e)})).join(",")+"]";var t=Ya.test(e.value),n=Za.test(e.value),r=Ya.test(e.value.replace(Ga,""));if(e.modifiers){var o="",i="",a=[];for(var s in e.modifiers)if(ts[s])i+=ts[s],Xa[s]&&a.push(s);else if("exact"===s){var c=e.modifiers;i+=es(["ctrl","shift","alt","meta"].filter((function(e){return!c[e]})).map((function(e){return"$event."+e+"Key"})).join("||"))}else a.push(s);return a.length&&(o+=function(e){return"if(!$event.type.indexOf('key')&&"+e.map(os).join("&&")+")return null;"}(a)),i&&(o+=i),"function($event){"+o+(t?"return "+e.value+"($event)":n?"return ("+e.value+")($event)":r?"return "+e.value:e.value)+"}"}return t||n?e.value:"function($event){"+(r?"return "+e.value:e.value)+"}"}function os(e){var t=parseInt(e,10);if(t)return"$event.keyCode!=="+t;var n=Xa[e],r=Qa[e];return"_k($event.keyCode,"+JSON.stringify(e)+","+JSON.stringify(n)+",$event.key,"+JSON.stringify(r)+")"}var is={on:function(e,t){t.modifiers&&ue("v-on without argument does not support modifiers."),e.wrapListeners=function(e){return"_g("+e+","+t.value+")"}},bind:function(e,t){e.wrapData=function(n){return"_b("+n+",'"+e.tag+"',"+t.value+","+(t.modifiers&&t.modifiers.prop?"true":"false")+(t.modifiers&&t.modifiers.sync?",true":"")+")"}},cloak:I},as=function(e){this.options=e,this.warn=e.warn||Qr,this.transforms=eo(e.modules,"transformCode"),this.dataGenFns=eo(e.modules,"genData"),this.directives=M(M({},is),e.directives);var t=e.isReservedTag||E;this.maybeComponent=function(e){return!!e.component||!t(e.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function ss(e,t){var n=new as(t);return{render:"with(this){return "+(e?cs(e,n):'_c("div")')+"}",staticRenderFns:n.staticRenderFns}}function cs(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&!e.staticProcessed)return ls(e,t);if(e.once&&!e.onceProcessed)return us(e,t);if(e.for&&!e.forProcessed)return ds(e,t);if(e.if&&!e.ifProcessed)return fs(e,t);if("template"!==e.tag||e.slotTarget||t.pre){if("slot"===e.tag)return function(e,t){var n=e.slotName||'"default"',r=ms(e,t),o="_t("+n+(r?","+r:""),i=e.attrs||e.dynamicAttrs?bs((e.attrs||[]).concat(e.dynamicAttrs||[]).map((function(e){return{name:A(e.name),value:e.value,dynamic:e.dynamic}}))):null,a=e.attrsMap["v-bind"];return!i&&!a||r||(o+=",null"),i&&(o+=","+i),a&&(o+=(i?"":",null")+","+a),o+")"}(e,t);var n;if(e.component)n=function(e,t,n){var r=t.inlineTemplate?null:ms(t,n,!0);return"_c("+e+","+ps(t,n)+(r?","+r:"")+")"}(e.component,e,t);else{var r;(!e.plain||e.pre&&t.maybeComponent(e))&&(r=ps(e,t));var o=e.inlineTemplate?null:ms(e,t,!0);n="_c('"+e.tag+"'"+(r?","+r:"")+(o?","+o:"")+")"}for(var i=0;i<t.transforms.length;i++)n=t.transforms[i](e,n);return n}return ms(e,t)||"void 0"}function ls(e,t){e.staticProcessed=!0;var n=t.pre;return e.pre&&(t.pre=e.pre),t.staticRenderFns.push("with(this){return "+cs(e,t)+"}"),t.pre=n,"_m("+(t.staticRenderFns.length-1)+(e.staticInFor?",true":"")+")"}function us(e,t){if(e.onceProcessed=!0,e.if&&!e.ifProcessed)return fs(e,t);if(e.staticInFor){for(var n="",r=e.parent;r;){if(r.for){n=r.key;break}r=r.parent}return n?"_o("+cs(e,t)+","+t.onceId+++","+n+")":(t.warn("v-once can only be used inside v-for that is keyed. ",e.rawAttrsMap["v-once"]),cs(e,t))}return ls(e,t)}function fs(e,t,n,r){return e.ifProcessed=!0,function e(t,n,r,o){if(!t.length)return o||"_e()";var i=t.shift();return i.exp?"("+i.exp+")?"+a(i.block)+":"+e(t,n,r,o):""+a(i.block);function a(e){return r?r(e,n):e.once?us(e,n):cs(e,n)}}(e.ifConditions.slice(),t,n,r)}function ds(e,t,n,r){var o=e.for,i=e.alias,a=e.iterator1?","+e.iterator1:"",s=e.iterator2?","+e.iterator2:"";return t.maybeComponent(e)&&"slot"!==e.tag&&"template"!==e.tag&&!e.key&&t.warn("<"+e.tag+' v-for="'+i+" in "+o+'">: component lists rendered with v-for should have explicit keys. See https://vuejs.org/guide/list.html#key for more info.',e.rawAttrsMap["v-for"],!0),e.forProcessed=!0,(r||"_l")+"(("+o+"),function("+i+a+s+"){return "+(n||cs)(e,t)+"})"}function ps(e,t){var n="{",r=function(e,t){var n=e.directives;if(n){var r,o,i,a,s="directives:[",c=!1;for(r=0,o=n.length;r<o;r++){i=n[r],a=!0;var l=t.directives[i.name];l&&(a=!!l(e,i,t.warn)),a&&(c=!0,s+='{name:"'+i.name+'",rawName:"'+i.rawName+'"'+(i.value?",value:("+i.value+"),expression:"+JSON.stringify(i.value):"")+(i.arg?",arg:"+(i.isDynamicArg?i.arg:'"'+i.arg+'"'):"")+(i.modifiers?",modifiers:"+JSON.stringify(i.modifiers):"")+"},")}return c?s.slice(0,-1)+"]":void 0}}(e,t);r&&(n+=r+","),e.key&&(n+="key:"+e.key+","),e.ref&&(n+="ref:"+e.ref+","),e.refInFor&&(n+="refInFor:true,"),e.pre&&(n+="pre:true,"),e.component&&(n+='tag:"'+e.tag+'",');for(var o=0;o<t.dataGenFns.length;o++)n+=t.dataGenFns[o](e);if(e.attrs&&(n+="attrs:"+bs(e.attrs)+","),e.props&&(n+="domProps:"+bs(e.props)+","),e.events&&(n+=ns(e.events,!1)+","),e.nativeEvents&&(n+=ns(e.nativeEvents,!0)+","),e.slotTarget&&!e.slotScope&&(n+="slot:"+e.slotTarget+","),e.scopedSlots&&(n+=function(e,t,n){var r=e.for||Object.keys(t).some((function(e){var n=t[e];return n.slotTargetDynamic||n.if||n.for||vs(n)})),o=!!e.if;if(!r)for(var i=e.parent;i;){if(i.slotScope&&"_empty_"!==i.slotScope||i.for){r=!0;break}i.if&&(o=!0),i=i.parent}var a=Object.keys(t).map((function(e){return hs(t[e],n)})).join(",");return"scopedSlots:_u(["+a+"]"+(r?",null,true":"")+(!r&&o?",null,false,"+function(e){for(var t=5381,n=e.length;n;)t=33*t^e.charCodeAt(--n);return t>>>0}(a):"")+")"}(e,e.scopedSlots,t)+","),e.model&&(n+="model:{value:"+e.model.value+",callback:"+e.model.callback+",expression:"+e.model.expression+"},"),e.inlineTemplate){var i=function(e,t){var n=e.children[0];if(1===e.children.length&&1===n.type||t.warn("Inline-template components must have exactly one child element.",{start:e.start}),n&&1===n.type){var r=ss(n,t.options);return"inlineTemplate:{render:function(){"+r.render+"},staticRenderFns:["+r.staticRenderFns.map((function(e){return"function(){"+e+"}"})).join(",")+"]}"}}(e,t);i&&(n+=i+",")}return n=n.replace(/,$/,"")+"}",e.dynamicAttrs&&(n="_b("+n+',"'+e.tag+'",'+bs(e.dynamicAttrs)+")"),e.wrapData&&(n=e.wrapData(n)),e.wrapListeners&&(n=e.wrapListeners(n)),n}function vs(e){return 1===e.type&&("slot"===e.tag||e.children.some(vs))}function hs(e,t){var n=e.attrsMap["slot-scope"];if(e.if&&!e.ifProcessed&&!n)return fs(e,t,hs,"null");if(e.for&&!e.forProcessed)return ds(e,t,hs);var r="_empty_"===e.slotScope?"":String(e.slotScope),o="function("+r+"){return "+("template"===e.tag?e.if&&n?"("+e.if+")?"+(ms(e,t)||"undefined")+":undefined":ms(e,t)||"undefined":cs(e,t))+"}",i=r?"":",proxy:true";return"{key:"+(e.slotTarget||'"default"')+",fn:"+o+i+"}"}function ms(e,t,n,r,o){var i=e.children;if(i.length){var a=i[0];if(1===i.length&&a.for&&"template"!==a.tag&&"slot"!==a.tag){var s=n?t.maybeComponent(a)?",1":",0":"";return""+(r||cs)(a,t)+s}var c=n?function(e,t){for(var n=0,r=0;r<e.length;r++){var o=e[r];if(1===o.type){if(gs(o)||o.ifConditions&&o.ifConditions.some((function(e){return gs(e.block)}))){n=2;break}(t(o)||o.ifConditions&&o.ifConditions.some((function(e){return t(e.block)})))&&(n=1)}}return n}(i,t.maybeComponent):0,l=o||ys;return"["+i.map((function(e){return l(e,t)})).join(",")+"]"+(c?","+c:"")}}function gs(e){return void 0!==e.for||"template"===e.tag||"slot"===e.tag}function ys(e,t){return 1===e.type?cs(e,t):3===e.type&&e.isComment?function(e){return"_e("+JSON.stringify(e.text)+")"}(e):"_v("+(2===(n=e).type?n.expression:_s(JSON.stringify(n.text)))+")";var n}function bs(e){for(var t="",n="",r=0;r<e.length;r++){var o=e[r],i=_s(o.value);o.dynamic?n+=o.name+","+i+",":t+='"'+o.name+'":'+i+","}return t="{"+t.slice(0,-1)+"}",n?"_d("+t+",["+n.slice(0,-1)+"])":t}function _s(e){return e.replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}var ws=new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b")+"\\b"),$s=new RegExp("\\b"+"delete,typeof,void".split(",").join("\\s*\\([^\\)]*\\)|\\b")+"\\s*\\([^\\)]*\\)"),xs=/'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g;function As(e,t,n,r){var o=e.replace(xs,""),i=o.match($s);i&&"$"!==o.charAt(i.index-1)&&n('avoid using JavaScript unary operator as property name: "'+i[0]+'" in expression '+t.trim(),r),Ss(e,t,n,r)}function ks(e,t,n,r){Ss(e.for||"",t,n,r),Cs(e.alias,"v-for alias",t,n,r),Cs(e.iterator1,"v-for iterator",t,n,r),Cs(e.iterator2,"v-for iterator",t,n,r)}function Cs(e,t,n,r,o){if("string"==typeof e)try{new Function("var "+e+"=_")}catch(i){r("invalid "+t+' "'+e+'" in expression: '+n.trim(),o)}}function Ss(e,t,n,r){try{new Function("return "+e)}catch(i){var o=e.replace(xs,"").match(ws);n(o?'avoid using JavaScript keyword as property name: "'+o[0]+'"\n Raw expression: '+t.trim():"invalid expression: "+i.message+" in\n\n "+e+"\n\n Raw expression: "+t.trim()+"\n",r)}}function Os(e,t,n,r){try{new Function(e,"")}catch(o){n("invalid function parameter expression: "+o.message+" in\n\n "+e+"\n\n Raw expression: "+t.trim()+"\n",r)}}function Ts(e,t){var n="";if(t>0)for(;1&t&&(n+=e),!((t>>>=1)<=0);)e+=e;return n}function Ms(e,t){try{return new Function(e)}catch(n){return t.push({err:n,code:e}),I}}function js(e){var t=Object.create(null);return function(n,r,o){var i=(r=M({},r)).warn||ue;delete r.warn;try{new Function("return 1")}catch(e){e.toString().match(/unsafe-eval|CSP/)&&i("It seems you are using the standalone build of Vue.js in an environment with Content Security Policy that prohibits unsafe-eval. The template compiler cannot work in this environment. Consider relaxing the policy to allow unsafe-eval or pre-compiling your templates into render functions.")}var a=r.delimiters?String(r.delimiters)+n:n;if(t[a])return t[a];var s=e(n,r);s.errors&&s.errors.length&&(r.outputSourceRange?s.errors.forEach((function(e){i("Error compiling template:\n\n"+e.msg+"\n\n"+function(e,t,n){void 0===t&&(t=0),void 0===n&&(n=e.length);for(var r=e.split(/\r?\n/),o=0,i=[],a=0;a<r.length;a++)if((o+=r[a].length+1)>=t){for(var s=a-2;s<=a+2||n>o;s++)if(!(s<0||s>=r.length)){i.push(""+(s+1)+Ts(" ",3-String(s+1).length)+"| "+r[s]);var c=r[s].length;if(s===a){var l=t-(o-c)+1,u=n>o?c-l:n-t;i.push(" | "+Ts(" ",l)+Ts("^",u))}else if(s>a){if(n>o){var f=Math.min(n-o,c);i.push(" | "+Ts("^",f))}o+=c+1}}break}return i.join("\n")}(n,e.start,e.end),o)})):i("Error compiling template:\n\n"+n+"\n\n"+s.errors.map((function(e){return"- "+e})).join("\n")+"\n",o)),s.tips&&s.tips.length&&(r.outputSourceRange?s.tips.forEach((function(e){return fe(e.msg,o)})):s.tips.forEach((function(e){return fe(e,o)})));var c={},l=[];return c.render=Ms(s.render,l),c.staticRenderFns=s.staticRenderFns.map((function(e){return Ms(e,l)})),s.errors&&s.errors.length||!l.length||i("Failed to generate render function:\n\n"+l.map((function(e){var t=e.err,n=e.code;return t.toString()+" in\n\n"+n+"\n"})).join("\n"),o),t[a]=c}}var Is,Es,Ns=(Is=function(e,t){var n=function(e,t){la=t.warn||Qr,va=t.isPreTag||E,ha=t.mustUseProp||E,ma=t.getTagNamespace||E;var n=t.isReservedTag||E;ga=function(e){return!!e.component||!n(e.tag)},fa=eo(t.modules,"transformNode"),da=eo(t.modules,"preTransformNode"),pa=eo(t.modules,"postTransformNode"),ua=t.delimiters;var r,o,i=[],a=!1!==t.preserveWhitespace,s=t.whitespace,c=!1,l=!1,u=!1;function f(e,t){u||(u=!0,la(e,t))}function d(e){if(p(e),c||e.processed||(e=Ea(e,t)),i.length||e===r||(r.if&&(e.elseif||e.else)?(v(e),Da(r,{exp:e.elseif,block:e})):f("Component template should contain exactly one root element. If you are using v-if on multiple elements, use v-else-if to chain them instead.",{start:e.start})),o&&!e.forbidden)if(e.elseif||e.else)a=e,(s=function(e){for(var t=e.length;t--;){if(1===e[t].type)return e[t];" "!==e[t].text&&la('text "'+e[t].text.trim()+'" between v-if and v-else(-if) will be ignored.',e[t]),e.pop()}}(o.children))&&s.if?Da(s,{exp:a.elseif,block:a}):la("v-"+(a.elseif?'else-if="'+a.elseif+'"':"else")+" used on element <"+a.tag+"> without corresponding v-if.",a.rawAttrsMap[a.elseif?"v-else-if":"v-else"]);else{if(e.slotScope){var n=e.slotTarget||'"default"';(o.scopedSlots||(o.scopedSlots={}))[n]=e}o.children.push(e),e.parent=o}var a,s;e.children=e.children.filter((function(e){return!e.slotScope})),p(e),e.pre&&(c=!1),va(e.tag)&&(l=!1);for(var u=0;u<pa.length;u++)pa[u](e,t)}function p(e){if(!l)for(var t;(t=e.children[e.children.length-1])&&3===t.type&&" "===t.text;)e.children.pop()}function v(e){"slot"!==e.tag&&"template"!==e.tag||f("Cannot use <"+e.tag+"> as component root element because it may contain multiple nodes.",{start:e.start}),e.attrsMap.hasOwnProperty("v-for")&&f("Cannot use v-for on stateful component root element because it renders multiple elements.",e.rawAttrsMap["v-for"])}return function(e,t){for(var n,r,o=[],i=t.expectHTML,a=t.isUnaryTag||E,s=t.canBeLeftOpenTag||E,c=0;e;){if(n=e,r&&ta(r)){var l=0,u=r.toLowerCase(),f=na[u]||(na[u]=new RegExp("([\\s\\S]*?)(</"+u+"[^>]*>)","i")),d=e.replace(f,(function(e,n,r){return l=r.length,ta(u)||"noscript"===u||(n=n.replace(/<!\--([\s\S]*?)-->/g,"$1").replace(/<!\[CDATA\[([\s\S]*?)]]>/g,"$1")),sa(u,n)&&(n=n.slice(1)),t.chars&&t.chars(n),""}));c+=e.length-d.length,e=d,C(u,c-l,c)}else{var p=e.indexOf("<");if(0===p){if(Qi.test(e)){var v=e.indexOf("--\x3e");if(v>=0){t.shouldKeepComment&&t.comment(e.substring(4,v),c,c+v+3),x(v+3);continue}}if(ea.test(e)){var h=e.indexOf("]>");if(h>=0){x(h+2);continue}}var m=e.match(Xi);if(m){x(m[0].length);continue}var g=e.match(Yi);if(g){var y=c;x(g[0].length),C(g[1],y,c);continue}var b=A();if(b){k(b),sa(b.tagName,e)&&x(1);continue}}var _=void 0,w=void 0,$=void 0;if(p>=0){for(w=e.slice(p);!(Yi.test(w)||Zi.test(w)||Qi.test(w)||ea.test(w)||($=w.indexOf("<",1))<0);)p+=$,w=e.slice(p);_=e.substring(0,p)}p<0&&(_=e),_&&x(_.length),t.chars&&_&&t.chars(_,c-_.length,c)}if(e===n){t.chars&&t.chars(e),!o.length&&t.warn&&t.warn('Mal-formatted tag at end of template: "'+e+'"',{start:c+e.length});break}}function x(t){c+=t,e=e.substring(t)}function A(){var t=e.match(Zi);if(t){var n,r,o={tagName:t[1],attrs:[],start:c};for(x(t[0].length);!(n=e.match(Gi))&&(r=e.match(Ji)||e.match(qi));)r.start=c,x(r[0].length),r.end=c,o.attrs.push(r);if(n)return o.unarySlash=n[1],x(n[0].length),o.end=c,o}}function k(e){var n=e.tagName,c=e.unarySlash;i&&("p"===r&&zi(n)&&C(r),s(n)&&r===n&&C(n));for(var l=a(n)||!!c,u=e.attrs.length,f=new Array(u),d=0;d<u;d++){var p=e.attrs[d],v=p[3]||p[4]||p[5]||"",h="a"===n&&"href"===p[1]?t.shouldDecodeNewlinesForHref:t.shouldDecodeNewlines;f[d]={name:p[1],value:ca(v,h)},t.outputSourceRange&&(f[d].start=p.start+p[0].match(/^\s*/).length,f[d].end=p.end)}l||(o.push({tag:n,lowerCasedTag:n.toLowerCase(),attrs:f,start:e.start,end:e.end}),r=n),t.start&&t.start(n,f,l,e.start,e.end)}function C(e,n,i){var a,s;if(null==n&&(n=c),null==i&&(i=c),e)for(s=e.toLowerCase(),a=o.length-1;a>=0&&o[a].lowerCasedTag!==s;a--);else a=0;if(a>=0){for(var l=o.length-1;l>=a;l--)(l>a||!e&&t.warn)&&t.warn("tag <"+o[l].tag+"> has no matching end tag.",{start:o[l].start,end:o[l].end}),t.end&&t.end(o[l].tag,n,i);o.length=a,r=a&&o[a-1].tag}else"br"===s?t.start&&t.start(e,[],!0,n,i):"p"===s&&(t.start&&t.start(e,[],!1,n,i),t.end&&t.end(e,n,i))}C()}(e,{warn:la,expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,canBeLeftOpenTag:t.canBeLeftOpenTag,shouldDecodeNewlines:t.shouldDecodeNewlines,shouldDecodeNewlinesForHref:t.shouldDecodeNewlinesForHref,shouldKeepComment:t.comments,outputSourceRange:t.outputSourceRange,start:function(e,n,a,s,u){var f=o&&o.ns||ma(e);Y&&"svg"===f&&(n=function(e){for(var t=[],n=0;n<e.length;n++){var r=e[n];Ra.test(r.name)||(r.name=r.name.replace(Ha,""),t.push(r))}return t}(n));var p,h=Ia(e,n,o);f&&(h.ns=f),t.outputSourceRange&&(h.start=s,h.end=u,h.rawAttrsMap=h.attrsList.reduce((function(e,t){return e[t.name]=t,e}),{})),n.forEach((function(e){Ma.test(e.name)&&la("Invalid dynamic argument expression: attribute names cannot contain spaces, quotes, <, >, / or =.",{start:e.start+e.name.indexOf("["),end:e.start+e.name.length})})),"style"!==(p=h).tag&&("script"!==p.tag||p.attrsMap.type&&"text/javascript"!==p.attrsMap.type)||ie()||(h.forbidden=!0,la("Templates should only be responsible for mapping the state to the UI. Avoid placing tags with side-effects in your templates, such as <"+e+">, as they will not be parsed.",{start:h.start}));for(var m=0;m<da.length;m++)h=da[m](h,t)||h;c||(function(e){null!=lo(e,"v-pre")&&(e.pre=!0)}(h),h.pre&&(c=!0)),va(h.tag)&&(l=!0),c?function(e){var t=e.attrsList,n=t.length;if(n)for(var r=e.attrs=new Array(n),o=0;o<n;o++)r[o]={name:t[o].name,value:JSON.stringify(t[o].value)},null!=t[o].start&&(r[o].start=t[o].start,r[o].end=t[o].end);else e.pre||(e.plain=!0)}(h):h.processed||(Na(h),function(e){var t=lo(e,"v-if");if(t)e.if=t,Da(e,{exp:t,block:e});else{null!=lo(e,"v-else")&&(e.else=!0);var n=lo(e,"v-else-if");n&&(e.elseif=n)}}(h),function(e){null!=lo(e,"v-once")&&(e.once=!0)}(h)),r||v(r=h),a?d(h):(o=h,i.push(h))},end:function(e,n,r){var a=i[i.length-1];i.length-=1,o=i[i.length-1],t.outputSourceRange&&(a.end=r),d(a)},chars:function(n,r,i){if(o){if(!Y||"textarea"!==o.tag||o.attrsMap.placeholder!==n){var u,d,p,v=o.children;(n=l||n.trim()?"script"===(u=o).tag||"style"===u.tag?n:ja(n):v.length?s?"condense"===s&&Oa.test(n)?"":" ":a?" ":"":"")&&(l||"condense"!==s||(n=n.replace(Ta," ")),!c&&" "!==n&&(d=Fi(n,ua))?p={type:2,expression:d.expression,tokens:d.tokens,text:n}:" "===n&&v.length&&" "===v[v.length-1].text||(p={type:3,text:n}),p&&(t.outputSourceRange&&(p.start=r,p.end=i),v.push(p)))}}else n===e?f("Component template requires a root element, rather than just text.",{start:r}):(n=n.trim())&&f('text "'+n+'" outside root element will be ignored.',{start:r})},comment:function(e,n,r){if(o){var i={type:3,text:e,isComment:!0};t.outputSourceRange&&(i.start=n,i.end=r),o.children.push(i)}}}),r}(e.trim(),t);!1!==t.optimize&&function(e,t){e&&(Ba=Wa(t.staticKeys||""),za=t.isReservedTag||E,function e(t){if(t.static=function(e){return 2!==e.type&&(3===e.type||!(!e.pre&&(e.hasBindings||e.if||e.for||g(e.tag)||!za(e.tag)||function(e){for(;e.parent;){if("template"!==(e=e.parent).tag)return!1;if(e.for)return!0}return!1}(e)||!Object.keys(e).every(Ba))))}(t),1===t.type){if(!za(t.tag)&&"slot"!==t.tag&&null==t.attrsMap["inline-template"])return;for(var n=0,r=t.children.length;n<r;n++){var o=t.children[n];e(o),o.static||(t.static=!1)}if(t.ifConditions)for(var i=1,a=t.ifConditions.length;i<a;i++){var s=t.ifConditions[i].block;e(s),s.static||(t.static=!1)}}}(e),function e(t,n){if(1===t.type){if((t.static||t.once)&&(t.staticInFor=n),t.static&&t.children.length&&(1!==t.children.length||3!==t.children[0].type))return void(t.staticRoot=!0);if(t.staticRoot=!1,t.children)for(var r=0,o=t.children.length;r<o;r++)e(t.children[r],n||!!t.for);if(t.ifConditions)for(var i=1,a=t.ifConditions.length;i<a;i++)e(t.ifConditions[i].block,n)}}(e,!1))}(n,t);var r=ss(n,t);return{ast:n,render:r.render,staticRenderFns:r.staticRenderFns}},function(e){function t(t,n){var r=Object.create(e),o=[],i=[],a=function(e,t,n){(n?i:o).push(e)};if(n){if(n.outputSourceRange){var s=t.match(/^\s*/)[0].length;a=function(e,t,n){var r={msg:e};t&&(null!=t.start&&(r.start=t.start+s),null!=t.end&&(r.end=t.end+s)),(n?i:o).push(r)}}for(var c in n.modules&&(r.modules=(e.modules||[]).concat(n.modules)),n.directives&&(r.directives=M(Object.create(e.directives||null),n.directives)),n)"modules"!==c&&"directives"!==c&&(r[c]=n[c])}r.warn=a;var l=Is(t.trim(),r);return function(e,t){e&&function e(t,n){if(1===t.type){for(var r in t.attrsMap)if(ba.test(r)){var o=t.attrsMap[r];if(o){var i=t.rawAttrsMap[r];"v-for"===r?ks(t,'v-for="'+o+'"',n,i):"v-slot"===r||"#"===r[0]?Os(o,r+'="'+o+'"',n,i):ya.test(r)?As(o,r+'="'+o+'"',n,i):Ss(o,r+'="'+o+'"',n,i)}}if(t.children)for(var a=0;a<t.children.length;a++)e(t.children[a],n)}else 2===t.type&&Ss(t.expression,t.text,n,t)}(e,t)}(l.ast,a),l.errors=o,l.tips=i,l}return{compile:t,compileToFunctions:js(t)}})(Ka),Ds=(Ns.compile,Ns.compileToFunctions);function Ls(e){return(Es=Es||document.createElement("div")).innerHTML=e?'<a href="\n"/>':'<div a="\n"/>',Es.innerHTML.indexOf(" ")>0}var Ps=!!K&&Ls(!1),Fs=!!K&&Ls(!0),Rs=$((function(e){var t=wr(e);return t&&t.innerHTML})),Hs=Wn.prototype.$mount;return Wn.prototype.$mount=function(e,t){if((e=e&&wr(e))===document.body||e===document.documentElement)return ue("Do not mount Vue to <html> or <body> - mount to normal elements instead."),this;var n=this.$options;if(!n.render){var r=n.template;if(r)if("string"==typeof r)"#"===r.charAt(0)&&((r=Rs(r))||ue("Template element not found or is empty: "+n.template,this));else{if(!r.nodeType)return ue("invalid template option:"+r,this),this;r=r.innerHTML}else e&&(r=function(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement("div");return t.appendChild(e.cloneNode(!0)),t.innerHTML}(e));if(r){H.performance&&at&&at("compile");var o=Ds(r,{outputSourceRange:!0,shouldDecodeNewlines:Ps,shouldDecodeNewlinesForHref:Fs,delimiters:n.delimiters,comments:n.comments},this),i=o.render,a=o.staticRenderFns;n.render=i,n.staticRenderFns=a,H.performance&&at&&(at("compile end"),st("vue "+this._name+" compile","compile","compile end"))}}return Hs.call(this,e,t)},Wn.compile=Ds,Wn},e.exports=r()}).call(this,n(4),n(15).setImmediate)},,,,,,,function(e,t,n){"use strict";n.r(t);var r=n(6),o=n.n(r);n(14);const i=new URL(window.location.href).searchParams.get("page");if(!i)throw"Need page url arg";const a=window[i],s=a.settings;function c(e,t){Object.keys(e).forEach(n=>{e[n]=t})}new o.a({el:"#nextgenthemes-vue",data:{isSaving:!1,refreshAfterSave:!1,sectionsDisplayed:{main:!0,html5:!0,pro:!0,videojs:!0,randomvideo:!0,debug:!1,urlparams:!1},message:"",vm:a.options},methods:{saveOptions(){this.isSaving=!0,window.jQuery.ajax({url:a.rest_url+"/save",method:"POST",data:this.vm,beforeSend(e){e.setRequestHeader("X-WP-Nonce",a.nonce)},success:()=>{this.message="Options saved",setTimeout(()=>this.message="",1e3)},error:e=>{this.message=e.responseText,this.refreshAfterSave=!1},complete:()=>{this.isSaving=!1,this.refreshAfterSave&&(this.refreshAfterSave=!1,window.location.reload())}})},resetOptions(e="all"){"all"===e?Object.entries(s).forEach(([e,t])=>{this.vm[e]=t.default}):Object.entries(s).forEach(([t,n])=>{e===n.tag&&(this.vm[t]=n.default)}),this.saveOptions()},licenseAPI(e,t,n){this.isSaving=!0,window.jQuery.ajax({url:"https://nextgenthemes.com",method:"POST",crossDomain:!0,data:{edd_action:e+"_license",license:this.vm[n],item_id:t,url:a.home_url},success:e=>{this.message="License API call saved",setTimeout(()=>this.message="",1e3)},error:e=>this.message=e.responseText,complete:()=>this.isSaving=!1})},licenseAPI_native(e,t,n){const r=new XMLHttpRequest;r.onreadystatechange=function(){if(console.log("xhttp.readyState",r.readyState),console.log("xhttp.status",r.status),4===r.readyState&&200===r.status){const e=JSON.parse(r.responseText);console.log("slData",e)}};const o={edd_action:e+"_license",license:this.vm[n],item_id:t,url:a.home_url};r.open("POST","https://nextgenthemes.com",!0),r.setRequestHeader("Content-type","application/json; charset=utf-8"),r.setRequestHeader("Access-Control-Allow-Origin",a.home_url);let i="";for(const e in o)i+=e+"="+a[e]+"&";i=i.substring(0,i.length-1),r.send(i)},showSection(e){c(this.sectionsDisplayed,!1),this.sectionsDisplayed[e]=!0},showAllSectionsButDebug(){c(this.sectionsDisplayed,!0),this.sectionsDisplayed.debug=!1},uploadImage(e){const t=this,n=window.wp.media({title:"Upload Image",multiple:!1}).open().on("select",(function(){const r=n.state().get("selection").first().toJSON().id;t.vm[e]=r}))},action(e,t){this.vm.action=JSON.stringify({action:e,product:t}),this.refreshAfterSave=!0,this.saveOptions()}}})},function(e,t,n){},function(e,t,n){(function(e){var r=void 0!==e&&e||"undefined"!=typeof self&&self||window,o=Function.prototype.apply;function i(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new i(o.call(setTimeout,r,arguments),clearTimeout)},t.setInterval=function(){return new i(o.call(setInterval,r,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(r,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n(16),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n(4))},function(e,t,n){(function(e,t){!function(e,n){"use strict";if(!e.setImmediate){var r,o,i,a,s,c=1,l={},u=!1,f=e.document,d=Object.getPrototypeOf&&Object.getPrototypeOf(e);d=d&&d.setTimeout?d:e,"[object process]"==={}.toString.call(e.process)?r=function(e){t.nextTick((function(){v(e)}))}:function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?(a="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(a)&&v(+t.data.slice(a.length))},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),r=function(t){e.postMessage(a+t,"*")}):e.MessageChannel?((i=new MessageChannel).port1.onmessage=function(e){v(e.data)},r=function(e){i.port2.postMessage(e)}):f&&"onreadystatechange"in f.createElement("script")?(o=f.documentElement,r=function(e){var t=f.createElement("script");t.onreadystatechange=function(){v(e),t.onreadystatechange=null,o.removeChild(t),t=null},o.appendChild(t)}):r=function(e){setTimeout(v,0,e)},d.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n<t.length;n++)t[n]=arguments[n+1];var o={callback:e,args:t};return l[c]=o,r(c),c++},d.clearImmediate=p}function p(e){delete l[e]}function v(e){if(u)setTimeout(v,0,e);else{var t=l[e];if(t){u=!0;try{!function(e){var t=e.callback,n=e.args;switch(n.length){case 0:t();break;case 1:t(n[0]);break;case 2:t(n[0],n[1]);break;case 3:t(n[0],n[1],n[2]);break;default:t.apply(void 0,n)}}(t)}finally{p(e),u=!1}}}}}("undefined"==typeof self?void 0===e?this:e:self)}).call(this,n(4),n(17))},function(e,t){var n,r,o=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(e){n=i}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var c,l=[],u=!1,f=-1;function d(){u&&c&&(u=!1,c.length?l=c.concat(l):f=-1,l.length&&p())}function p(){if(!u){var e=s(d);u=!0;for(var t=l.length;t;){for(c=l,l=[];++f<t;)c&&c[f].run();f=-1,t=l.length}c=null,u=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===a||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(e);try{r(e)}catch(t){try{return r.call(null,e)}catch(t){return r.call(this,e)}}}(e)}}function v(e,t){this.fun=e,this.array=t}function h(){}o.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];l.push(new v(e,t)),1!==l.length||u||s(p)},v.prototype.run=function(){this.fun.apply(null,this.array)},o.title="browser",o.browser=!0,o.env={},o.argv=[],o.version="",o.versions={},o.on=h,o.addListener=h,o.once=h,o.off=h,o.removeListener=h,o.removeAllListeners=h,o.emit=h,o.prependListener=h,o.prependOnceListener=h,o.listeners=function(e){return[]},o.binding=function(e){throw new Error("process.binding is not supported")},o.cwd=function(){return"/"},o.chdir=function(e){throw new Error("process.chdir is not supported")},o.umask=function(){return 0}}]);
|
1 |
+
!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},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 r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},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=13)}([,,,,function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},,function(e,t,n){(function(t,n){var r;r=function(){"use strict";var e=Object.freeze({});function r(e){return null==e}function o(e){return null!=e}function i(e){return!0===e}function a(e){return"string"==typeof e||"number"==typeof e||"symbol"==typeof e||"boolean"==typeof e}function s(e){return null!==e&&"object"==typeof e}var c=Object.prototype.toString;function l(e){return c.call(e).slice(8,-1)}function u(e){return"[object Object]"===c.call(e)}function f(e){return"[object RegExp]"===c.call(e)}function d(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function p(e){return o(e)&&"function"==typeof e.then&&"function"==typeof e.catch}function v(e){return null==e?"":Array.isArray(e)||u(e)&&e.toString===c?JSON.stringify(e,null,2):String(e)}function h(e){var t=parseFloat(e);return isNaN(t)?e:t}function m(e,t){for(var n=Object.create(null),r=e.split(","),o=0;o<r.length;o++)n[r[o]]=!0;return t?function(e){return n[e.toLowerCase()]}:function(e){return n[e]}}var g=m("slot,component",!0),y=m("key,ref,slot,slot-scope,is");function b(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}var _=Object.prototype.hasOwnProperty;function w(e,t){return _.call(e,t)}function $(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var x=/-(\w)/g,k=$((function(e){return e.replace(x,(function(e,t){return t?t.toUpperCase():""}))})),A=$((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})),C=/\B([A-Z])/g,S=$((function(e){return e.replace(C,"-$1").toLowerCase()})),O=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n};function T(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function M(e,t){for(var n in t)e[n]=t[n];return e}function j(e){for(var t={},n=0;n<e.length;n++)e[n]&&M(t,e[n]);return t}function I(e,t,n){}var E=function(e,t,n){return!1},N=function(e){return e};function D(e,t){if(e===t)return!0;var n=s(e),r=s(t);if(!n||!r)return!n&&!r&&String(e)===String(t);try{var o=Array.isArray(e),i=Array.isArray(t);if(o&&i)return e.length===t.length&&e.every((function(e,n){return D(e,t[n])}));if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(o||i)return!1;var a=Object.keys(e),c=Object.keys(t);return a.length===c.length&&a.every((function(n){return D(e[n],t[n])}))}catch(e){return!1}}function L(e,t){for(var n=0;n<e.length;n++)if(D(e[n],t))return n;return-1}function P(e){var t=!1;return function(){t||(t=!0,e.apply(this,arguments))}}var F=["component","directive","filter"],R=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured","serverPrefetch"],H={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!0,devtools:!0,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:E,isReservedAttr:E,isUnknownElement:E,getTagNamespace:I,parsePlatformTagName:N,mustUseProp:E,async:!0,_lifecycleHooks:R},U=/a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;function V(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}function B(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}var z,q=new RegExp("[^"+U.source+".$_\\d]"),J="__proto__"in{},K="undefined"!=typeof window,W="undefined"!=typeof WXEnvironment&&!!WXEnvironment.platform,Z=W&&WXEnvironment.platform.toLowerCase(),G=K&&window.navigator.userAgent.toLowerCase(),Y=G&&/msie|trident/.test(G),X=G&&G.indexOf("msie 9.0")>0,Q=G&&G.indexOf("edge/")>0,ee=(G&&G.indexOf("android"),G&&/iphone|ipad|ipod|ios/.test(G)||"ios"===Z),te=(G&&/chrome\/\d+/.test(G),G&&/phantomjs/.test(G),G&&G.match(/firefox\/(\d+)/)),ne={}.watch,re=!1;if(K)try{var oe={};Object.defineProperty(oe,"passive",{get:function(){re=!0}}),window.addEventListener("test-passive",null,oe)}catch(e){}var ie=function(){return void 0===z&&(z=!K&&!W&&void 0!==t&&t.process&&"server"===t.process.env.VUE_ENV),z},ae=K&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function se(e){return"function"==typeof e&&/native code/.test(e.toString())}var ce,le="undefined"!=typeof Symbol&&se(Symbol)&&"undefined"!=typeof Reflect&&se(Reflect.ownKeys);ce="undefined"!=typeof Set&&se(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var ue,fe,de,pe=I,ve="undefined"!=typeof console,he=/(?:^|[-_])(\w)/g;ue=function(e,t){var n=t?pe(t):"";H.warnHandler?H.warnHandler.call(null,e,t,n):ve&&!H.silent&&console.error("[Vue warn]: "+e+n)},fe=function(e,t){ve&&!H.silent&&console.warn("[Vue tip]: "+e+(t?pe(t):""))},de=function(e,t){if(e.$root===e)return"<Root>";var n="function"==typeof e&&null!=e.cid?e.options:e._isVue?e.$options||e.constructor.options:e,r=n.name||n._componentTag,o=n.__file;if(!r&&o){var i=o.match(/([^/\\]+)\.vue$/);r=i&&i[1]}return(r?"<"+function(e){return e.replace(he,(function(e){return e.toUpperCase()})).replace(/[-_]/g,"")}(r)+">":"<Anonymous>")+(o&&!1!==t?" at "+o:"")},pe=function(e){if(e._isVue&&e.$parent){for(var t=[],n=0;e;){if(t.length>0){var r=t[t.length-1];if(r.constructor===e.constructor){n++,e=e.$parent;continue}n>0&&(t[t.length-1]=[r,n],n=0)}t.push(e),e=e.$parent}return"\n\nfound in\n\n"+t.map((function(e,t){return""+(0===t?"---\x3e ":function(e,t){for(var n="";t;)t%2==1&&(n+=e),t>1&&(e+=e),t>>=1;return n}(" ",5+2*t))+(Array.isArray(e)?de(e[0])+"... ("+e[1]+" recursive calls)":de(e))})).join("\n")}return"\n\n(found in "+de(e)+")"};var me=0,ge=function(){this.id=me++,this.subs=[]};ge.prototype.addSub=function(e){this.subs.push(e)},ge.prototype.removeSub=function(e){b(this.subs,e)},ge.prototype.depend=function(){ge.target&&ge.target.addDep(this)},ge.prototype.notify=function(){var e=this.subs.slice();H.async||e.sort((function(e,t){return e.id-t.id}));for(var t=0,n=e.length;t<n;t++)e[t].update()},ge.target=null;var ye=[];function be(e){ye.push(e),ge.target=e}function _e(){ye.pop(),ge.target=ye[ye.length-1]}var we=function(e,t,n,r,o,i,a,s){this.tag=e,this.data=t,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=t&&t.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1},$e={child:{configurable:!0}};$e.child.get=function(){return this.componentInstance},Object.defineProperties(we.prototype,$e);var xe=function(e){void 0===e&&(e="");var t=new we;return t.text=e,t.isComment=!0,t};function ke(e){return new we(void 0,void 0,void 0,String(e))}function Ae(e){var t=new we(e.tag,e.data,e.children&&e.children.slice(),e.text,e.elm,e.context,e.componentOptions,e.asyncFactory);return t.ns=e.ns,t.isStatic=e.isStatic,t.key=e.key,t.isComment=e.isComment,t.fnContext=e.fnContext,t.fnOptions=e.fnOptions,t.fnScopeId=e.fnScopeId,t.asyncMeta=e.asyncMeta,t.isCloned=!0,t}var Ce=Array.prototype,Se=Object.create(Ce);["push","pop","shift","unshift","splice","sort","reverse"].forEach((function(e){var t=Ce[e];B(Se,e,(function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];var o,i=t.apply(this,n),a=this.__ob__;switch(e){case"push":case"unshift":o=n;break;case"splice":o=n.slice(2)}return o&&a.observeArray(o),a.dep.notify(),i}))}));var Oe=Object.getOwnPropertyNames(Se),Te=!0;function Me(e){Te=e}var je=function(e){this.value=e,this.dep=new ge,this.vmCount=0,B(e,"__ob__",this),Array.isArray(e)?(J?function(e,t){e.__proto__=t}(e,Se):function(e,t,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];B(e,i,t[i])}}(e,Se,Oe),this.observeArray(e)):this.walk(e)};function Ie(e,t){var n;if(s(e)&&!(e instanceof we))return w(e,"__ob__")&&e.__ob__ instanceof je?n=e.__ob__:Te&&!ie()&&(Array.isArray(e)||u(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new je(e)),t&&n&&n.vmCount++,n}function Ee(e,t,n,r,o){var i=new ge,a=Object.getOwnPropertyDescriptor(e,t);if(!a||!1!==a.configurable){var s=a&&a.get,c=a&&a.set;s&&!c||2!==arguments.length||(n=e[t]);var l=!o&&Ie(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=s?s.call(e):n;return ge.target&&(i.depend(),l&&(l.dep.depend(),Array.isArray(t)&&Le(t))),t},set:function(t){var a=s?s.call(e):n;t===a||t!=t&&a!=a||(r&&r(),s&&!c||(c?c.call(e,t):n=t,l=!o&&Ie(t),i.notify()))}})}}function Ne(e,t,n){if((r(e)||a(e))&&ue("Cannot set reactive property on undefined, null, or primitive value: "+e),Array.isArray(e)&&d(t))return e.length=Math.max(e.length,t),e.splice(t,1,n),n;if(t in e&&!(t in Object.prototype))return e[t]=n,n;var o=e.__ob__;return e._isVue||o&&o.vmCount?(ue("Avoid adding reactive properties to a Vue instance or its root $data at runtime - declare it upfront in the data option."),n):o?(Ee(o.value,t,n),o.dep.notify(),n):(e[t]=n,n)}function De(e,t){if((r(e)||a(e))&&ue("Cannot delete reactive property on undefined, null, or primitive value: "+e),Array.isArray(e)&&d(t))e.splice(t,1);else{var n=e.__ob__;e._isVue||n&&n.vmCount?ue("Avoid deleting properties on a Vue instance or its root $data - just set it to null."):w(e,t)&&(delete e[t],n&&n.dep.notify())}}function Le(e){for(var t=void 0,n=0,r=e.length;n<r;n++)(t=e[n])&&t.__ob__&&t.__ob__.dep.depend(),Array.isArray(t)&&Le(t)}je.prototype.walk=function(e){for(var t=Object.keys(e),n=0;n<t.length;n++)Ee(e,t[n])},je.prototype.observeArray=function(e){for(var t=0,n=e.length;t<n;t++)Ie(e[t])};var Pe=H.optionMergeStrategies;function Fe(e,t){if(!t)return e;for(var n,r,o,i=le?Reflect.ownKeys(t):Object.keys(t),a=0;a<i.length;a++)"__ob__"!==(n=i[a])&&(r=e[n],o=t[n],w(e,n)?r!==o&&u(r)&&u(o)&&Fe(r,o):Ne(e,n,o));return e}function Re(e,t,n){return n?function(){var r="function"==typeof t?t.call(n,n):t,o="function"==typeof e?e.call(n,n):e;return r?Fe(r,o):o}:t?e?function(){return Fe("function"==typeof t?t.call(this,this):t,"function"==typeof e?e.call(this,this):e)}:t:e}function He(e,t){var n=t?e?e.concat(t):Array.isArray(t)?t:[t]:e;return n?function(e){for(var t=[],n=0;n<e.length;n++)-1===t.indexOf(e[n])&&t.push(e[n]);return t}(n):n}function Ue(e,t,n,r){var o=Object.create(e||null);return t?(ze(r,t,n),M(o,t)):o}Pe.el=Pe.propsData=function(e,t,n,r){return n||ue('option "'+r+'" can only be used during instance creation with the `new` keyword.'),Ve(e,t)},Pe.data=function(e,t,n){return n?Re(e,t,n):t&&"function"!=typeof t?(ue('The "data" option should be a function that returns a per-instance value in component definitions.',n),e):Re(e,t)},R.forEach((function(e){Pe[e]=He})),F.forEach((function(e){Pe[e+"s"]=Ue})),Pe.watch=function(e,t,n,r){if(e===ne&&(e=void 0),t===ne&&(t=void 0),!t)return Object.create(e||null);if(ze(r,t,n),!e)return t;var o={};for(var i in M(o,e),t){var a=o[i],s=t[i];a&&!Array.isArray(a)&&(a=[a]),o[i]=a?a.concat(s):Array.isArray(s)?s:[s]}return o},Pe.props=Pe.methods=Pe.inject=Pe.computed=function(e,t,n,r){if(t&&ze(r,t,n),!e)return t;var o=Object.create(null);return M(o,e),t&&M(o,t),o},Pe.provide=Re;var Ve=function(e,t){return void 0===t?e:t};function Be(e){new RegExp("^[a-zA-Z][\\-\\.0-9_"+U.source+"]*$").test(e)||ue('Invalid component name: "'+e+'". Component names should conform to valid custom element name in html5 specification.'),(g(e)||H.isReservedTag(e))&&ue("Do not use built-in or reserved HTML elements as component id: "+e)}function ze(e,t,n){u(t)||ue('Invalid value for option "'+e+'": expected an Object, but got '+l(t)+".",n)}function qe(e,t,n){if(function(e){for(var t in e.components)Be(t)}(t),"function"==typeof t&&(t=t.options),function(e,t){var n=e.props;if(n){var r,o,i={};if(Array.isArray(n))for(r=n.length;r--;)"string"==typeof(o=n[r])?i[k(o)]={type:null}:ue("props must be strings when using array syntax.");else if(u(n))for(var a in n)o=n[a],i[k(a)]=u(o)?o:{type:o};else ue('Invalid value for option "props": expected an Array or an Object, but got '+l(n)+".",t);e.props=i}}(t,n),function(e,t){var n=e.inject;if(n){var r=e.inject={};if(Array.isArray(n))for(var o=0;o<n.length;o++)r[n[o]]={from:n[o]};else if(u(n))for(var i in n){var a=n[i];r[i]=u(a)?M({from:i},a):{from:a}}else ue('Invalid value for option "inject": expected an Array or an Object, but got '+l(n)+".",t)}}(t,n),function(e){var t=e.directives;if(t)for(var n in t){var r=t[n];"function"==typeof r&&(t[n]={bind:r,update:r})}}(t),!t._base&&(t.extends&&(e=qe(e,t.extends,n)),t.mixins))for(var r=0,o=t.mixins.length;r<o;r++)e=qe(e,t.mixins[r],n);var i,a={};for(i in e)s(i);for(i in t)w(e,i)||s(i);function s(r){var o=Pe[r]||Ve;a[r]=o(e[r],t[r],n,r)}return a}function Je(e,t,n,r){if("string"==typeof n){var o=e[t];if(w(o,n))return o[n];var i=k(n);if(w(o,i))return o[i];var a=A(i);if(w(o,a))return o[a];var s=o[n]||o[i]||o[a];return r&&!s&&ue("Failed to resolve "+t.slice(0,-1)+": "+n,e),s}}function Ke(e,t,n,r){var o=t[e],i=!w(n,e),a=n[e],c=Xe(Boolean,o.type);if(c>-1)if(i&&!w(o,"default"))a=!1;else if(""===a||a===S(e)){var u=Xe(String,o.type);(u<0||c<u)&&(a=!0)}if(void 0===a){a=function(e,t,n){if(w(t,"default")){var r=t.default;return s(r)&&ue('Invalid default value for prop "'+n+'": Props with type Object/Array must use a factory function to return the default value.',e),e&&e.$options.propsData&&void 0===e.$options.propsData[n]&&void 0!==e._props[n]?e._props[n]:"function"==typeof r&&"Function"!==Ge(t.type)?r.call(e):r}}(r,o,e);var f=Te;Me(!0),Ie(a),Me(f)}return function(e,t,n,r,o){if(e.required&&o)ue('Missing required prop: "'+t+'"',r);else if(null!=n||e.required){var i=e.type,a=!i||!0===i,s=[];if(i){Array.isArray(i)||(i=[i]);for(var c=0;c<i.length&&!a;c++){var u=Ze(n,i[c]);s.push(u.expectedType||""),a=u.valid}}if(a){var f=e.validator;f&&(f(n)||ue('Invalid prop: custom validator check failed for prop "'+t+'".',r))}else ue(function(e,t,n){var r='Invalid prop: type check failed for prop "'+e+'". Expected '+n.map(A).join(", "),o=n[0],i=l(t),a=Qe(t,o),s=Qe(t,i);return 1===n.length&&et(o)&&!function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];return e.some((function(e){return"boolean"===e.toLowerCase()}))}(o,i)&&(r+=" with value "+a),r+=", got "+i+" ",et(i)&&(r+="with value "+s+"."),r}(t,n,s),r)}}(o,e,a,r,i),a}var We=/^(String|Number|Boolean|Function|Symbol)$/;function Ze(e,t){var n,r=Ge(t);if(We.test(r)){var o=typeof e;(n=o===r.toLowerCase())||"object"!==o||(n=e instanceof t)}else n="Object"===r?u(e):"Array"===r?Array.isArray(e):e instanceof t;return{valid:n,expectedType:r}}function Ge(e){var t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:""}function Ye(e,t){return Ge(e)===Ge(t)}function Xe(e,t){if(!Array.isArray(t))return Ye(t,e)?0:-1;for(var n=0,r=t.length;n<r;n++)if(Ye(t[n],e))return n;return-1}function Qe(e,t){return"String"===t?'"'+e+'"':"Number"===t?""+Number(e):""+e}function et(e){return["string","number","boolean"].some((function(t){return e.toLowerCase()===t}))}function tt(e,t,n){be();try{if(t)for(var r=t;r=r.$parent;){var o=r.$options.errorCaptured;if(o)for(var i=0;i<o.length;i++)try{if(!1===o[i].call(r,e,t,n))return}catch(e){rt(e,r,"errorCaptured hook")}}rt(e,t,n)}finally{_e()}}function nt(e,t,n,r,o){var i;try{(i=n?e.apply(t,n):e.call(t))&&!i._isVue&&p(i)&&!i._handled&&(i.catch((function(e){return tt(e,r,o+" (Promise/async)")})),i._handled=!0)}catch(e){tt(e,r,o)}return i}function rt(e,t,n){if(H.errorHandler)try{return H.errorHandler.call(null,e,t,n)}catch(t){t!==e&&ot(t,null,"config.errorHandler")}ot(e,t,n)}function ot(e,t,n){if(ue("Error in "+n+': "'+e.toString()+'"',t),!K&&!W||"undefined"==typeof console)throw e;console.error(e)}var it,at,st,ct=!1,lt=[],ut=!1;function ft(){ut=!1;var e=lt.slice(0);lt.length=0;for(var t=0;t<e.length;t++)e[t]()}if("undefined"!=typeof Promise&&se(Promise)){var dt=Promise.resolve();it=function(){dt.then(ft),ee&&setTimeout(I)},ct=!0}else if(Y||"undefined"==typeof MutationObserver||!se(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())it=void 0!==n&&se(n)?function(){n(ft)}:function(){setTimeout(ft,0)};else{var pt=1,vt=new MutationObserver(ft),ht=document.createTextNode(String(pt));vt.observe(ht,{characterData:!0}),it=function(){pt=(pt+1)%2,ht.data=String(pt)},ct=!0}function mt(e,t){var n;if(lt.push((function(){if(e)try{e.call(t)}catch(e){tt(e,t,"nextTick")}else n&&n(t)})),ut||(ut=!0,it()),!e&&"undefined"!=typeof Promise)return new Promise((function(e){n=e}))}var gt,yt=K&&window.performance;yt&&yt.mark&&yt.measure&&yt.clearMarks&&yt.clearMeasures&&(at=function(e){return yt.mark(e)},st=function(e,t,n){yt.measure(e,t,n),yt.clearMarks(t),yt.clearMarks(n)});var bt=m("Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,require"),_t=function(e,t){ue('Property or method "'+t+'" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',e)},wt=function(e,t){ue('Property "'+t+'" must be accessed with "$data.'+t+'" because properties starting with "$" or "_" are not proxied in the Vue instance to prevent conflicts with Vue internals. See: https://vuejs.org/v2/api/#data',e)},$t="undefined"!=typeof Proxy&&se(Proxy);if($t){var xt=m("stop,prevent,self,ctrl,shift,alt,meta,exact");H.keyCodes=new Proxy(H.keyCodes,{set:function(e,t,n){return xt(t)?(ue("Avoid overwriting built-in modifier in config.keyCodes: ."+t),!1):(e[t]=n,!0)}})}var kt={has:function(e,t){var n=t in e,r=bt(t)||"string"==typeof t&&"_"===t.charAt(0)&&!(t in e.$data);return n||r||(t in e.$data?wt(e,t):_t(e,t)),n||!r}},At={get:function(e,t){return"string"!=typeof t||t in e||(t in e.$data?wt(e,t):_t(e,t)),e[t]}};gt=function(e){if($t){var t=e.$options,n=t.render&&t.render._withStripped?At:kt;e._renderProxy=new Proxy(e,n)}else e._renderProxy=e};var Ct=new ce;function St(e){!function e(t,n){var r,o,i=Array.isArray(t);if(!(!i&&!s(t)||Object.isFrozen(t)||t instanceof we)){if(t.__ob__){var a=t.__ob__.dep.id;if(n.has(a))return;n.add(a)}if(i)for(r=t.length;r--;)e(t[r],n);else for(r=(o=Object.keys(t)).length;r--;)e(t[o[r]],n)}}(e,Ct),Ct.clear()}var Ot=$((function(e){var t="&"===e.charAt(0),n="~"===(e=t?e.slice(1):e).charAt(0),r="!"===(e=n?e.slice(1):e).charAt(0);return{name:e=r?e.slice(1):e,once:n,capture:r,passive:t}}));function Tt(e,t){function n(){var e=arguments,r=n.fns;if(!Array.isArray(r))return nt(r,null,arguments,t,"v-on handler");for(var o=r.slice(),i=0;i<o.length;i++)nt(o[i],null,e,t,"v-on handler")}return n.fns=e,n}function Mt(e,t,n,o,a,s){var c,l,u,f;for(c in e)l=e[c],u=t[c],f=Ot(c),r(l)?ue('Invalid handler for event "'+f.name+'": got '+String(l),s):r(u)?(r(l.fns)&&(l=e[c]=Tt(l,s)),i(f.once)&&(l=e[c]=a(f.name,l,f.capture)),n(f.name,l,f.capture,f.passive,f.params)):l!==u&&(u.fns=l,e[c]=u);for(c in t)r(e[c])&&o((f=Ot(c)).name,t[c],f.capture)}function jt(e,t,n){var a;e instanceof we&&(e=e.data.hook||(e.data.hook={}));var s=e[t];function c(){n.apply(this,arguments),b(a.fns,c)}r(s)?a=Tt([c]):o(s.fns)&&i(s.merged)?(a=s).fns.push(c):a=Tt([s,c]),a.merged=!0,e[t]=a}function It(e,t,n,r,i){if(o(t)){if(w(t,n))return e[n]=t[n],i||delete t[n],!0;if(w(t,r))return e[n]=t[r],i||delete t[r],!0}return!1}function Et(e){return a(e)?[ke(e)]:Array.isArray(e)?function e(t,n){var s,c,l,u,f=[];for(s=0;s<t.length;s++)r(c=t[s])||"boolean"==typeof c||(u=f[l=f.length-1],Array.isArray(c)?c.length>0&&(Nt((c=e(c,(n||"")+"_"+s))[0])&&Nt(u)&&(f[l]=ke(u.text+c[0].text),c.shift()),f.push.apply(f,c)):a(c)?Nt(u)?f[l]=ke(u.text+c):""!==c&&f.push(ke(c)):Nt(c)&&Nt(u)?f[l]=ke(u.text+c.text):(i(t._isVList)&&o(c.tag)&&r(c.key)&&o(n)&&(c.key="__vlist"+n+"_"+s+"__"),f.push(c)));return f}(e):void 0}function Nt(e){return o(e)&&o(e.text)&&!1===e.isComment}function Dt(e,t){if(e){for(var n=Object.create(null),r=le?Reflect.ownKeys(e):Object.keys(e),o=0;o<r.length;o++){var i=r[o];if("__ob__"!==i){for(var a=e[i].from,s=t;s;){if(s._provided&&w(s._provided,a)){n[i]=s._provided[a];break}s=s.$parent}if(!s)if("default"in e[i]){var c=e[i].default;n[i]="function"==typeof c?c.call(t):c}else ue('Injection "'+i+'" not found',t)}}return n}}function Lt(e,t){if(!e||!e.length)return{};for(var n={},r=0,o=e.length;r<o;r++){var i=e[r],a=i.data;if(a&&a.attrs&&a.attrs.slot&&delete a.attrs.slot,i.context!==t&&i.fnContext!==t||!a||null==a.slot)(n.default||(n.default=[])).push(i);else{var s=a.slot,c=n[s]||(n[s]=[]);"template"===i.tag?c.push.apply(c,i.children||[]):c.push(i)}}for(var l in n)n[l].every(Pt)&&delete n[l];return n}function Pt(e){return e.isComment&&!e.asyncFactory||" "===e.text}function Ft(t,n,r){var o,i=Object.keys(n).length>0,a=t?!!t.$stable:!i,s=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&r&&r!==e&&s===r.$key&&!i&&!r.$hasNormal)return r;for(var c in o={},t)t[c]&&"$"!==c[0]&&(o[c]=Rt(n,c,t[c]))}else o={};for(var l in n)l in o||(o[l]=Ht(n,l));return t&&Object.isExtensible(t)&&(t._normalized=o),B(o,"$stable",a),B(o,"$key",s),B(o,"$hasNormal",i),o}function Rt(e,t,n){var r=function(){var e=arguments.length?n.apply(null,arguments):n({});return(e=e&&"object"==typeof e&&!Array.isArray(e)?[e]:Et(e))&&(0===e.length||1===e.length&&e[0].isComment)?void 0:e};return n.proxy&&Object.defineProperty(e,t,{get:r,enumerable:!0,configurable:!0}),r}function Ht(e,t){return function(){return e[t]}}function Ut(e,t){var n,r,i,a,c;if(Array.isArray(e)||"string"==typeof e)for(n=new Array(e.length),r=0,i=e.length;r<i;r++)n[r]=t(e[r],r);else if("number"==typeof e)for(n=new Array(e),r=0;r<e;r++)n[r]=t(r+1,r);else if(s(e))if(le&&e[Symbol.iterator]){n=[];for(var l=e[Symbol.iterator](),u=l.next();!u.done;)n.push(t(u.value,n.length)),u=l.next()}else for(a=Object.keys(e),n=new Array(a.length),r=0,i=a.length;r<i;r++)c=a[r],n[r]=t(e[c],c,r);return o(n)||(n=[]),n._isVList=!0,n}function Vt(e,t,n,r){var o,i=this.$scopedSlots[e];i?(n=n||{},r&&(s(r)||ue("slot v-bind without argument expects an Object",this),n=M(M({},r),n)),o=i(n)||t):o=this.$slots[e]||t;var a=n&&n.slot;return a?this.$createElement("template",{slot:a},o):o}function Bt(e){return Je(this.$options,"filters",e,!0)||N}function zt(e,t){return Array.isArray(e)?-1===e.indexOf(t):e!==t}function qt(e,t,n,r,o){var i=H.keyCodes[t]||n;return o&&r&&!H.keyCodes[t]?zt(o,r):i?zt(i,e):r?S(r)!==t:void 0}function Jt(e,t,n,r,o){if(n)if(s(n)){var i;Array.isArray(n)&&(n=j(n));var a=function(a){if("class"===a||"style"===a||y(a))i=e;else{var s=e.attrs&&e.attrs.type;i=r||H.mustUseProp(t,s,a)?e.domProps||(e.domProps={}):e.attrs||(e.attrs={})}var c=k(a),l=S(a);c in i||l in i||(i[a]=n[a],o&&((e.on||(e.on={}))["update:"+a]=function(e){n[a]=e}))};for(var c in n)a(c)}else ue("v-bind without argument expects an Object or Array value",this);return e}function Kt(e,t){var n=this._staticTrees||(this._staticTrees=[]),r=n[e];return r&&!t||Zt(r=n[e]=this.$options.staticRenderFns[e].call(this._renderProxy,null,this),"__static__"+e,!1),r}function Wt(e,t,n){return Zt(e,"__once__"+t+(n?"_"+n:""),!0),e}function Zt(e,t,n){if(Array.isArray(e))for(var r=0;r<e.length;r++)e[r]&&"string"!=typeof e[r]&&Gt(e[r],t+"_"+r,n);else Gt(e,t,n)}function Gt(e,t,n){e.isStatic=!0,e.key=t,e.isOnce=n}function Yt(e,t){if(t)if(u(t)){var n=e.on=e.on?M({},e.on):{};for(var r in t){var o=n[r],i=t[r];n[r]=o?[].concat(o,i):i}}else ue("v-on without argument expects an Object value",this);return e}function Xt(e,t,n,r){t=t||{$stable:!n};for(var o=0;o<e.length;o++){var i=e[o];Array.isArray(i)?Xt(i,t,n):i&&(i.proxy&&(i.fn.proxy=!0),t[i.key]=i.fn)}return r&&(t.$key=r),t}function Qt(e,t){for(var n=0;n<t.length;n+=2){var r=t[n];"string"==typeof r&&r?e[t[n]]=t[n+1]:""!==r&&null!==r&&ue("Invalid value for dynamic directive argument (expected string or null): "+r,this)}return e}function en(e,t){return"string"==typeof e?t+e:e}function tn(e){e._o=Wt,e._n=h,e._s=v,e._l=Ut,e._t=Vt,e._q=D,e._i=L,e._m=Kt,e._f=Bt,e._k=qt,e._b=Jt,e._v=ke,e._e=xe,e._u=Xt,e._g=Yt,e._d=Qt,e._p=en}function nn(t,n,r,o,a){var s,c=this,l=a.options;w(o,"_uid")?(s=Object.create(o))._original=o:(s=o,o=o._original);var u=i(l._compiled),f=!u;this.data=t,this.props=n,this.children=r,this.parent=o,this.listeners=t.on||e,this.injections=Dt(l.inject,o),this.slots=function(){return c.$slots||Ft(t.scopedSlots,c.$slots=Lt(r,o)),c.$slots},Object.defineProperty(this,"scopedSlots",{enumerable:!0,get:function(){return Ft(t.scopedSlots,this.slots())}}),u&&(this.$options=l,this.$slots=this.slots(),this.$scopedSlots=Ft(t.scopedSlots,this.$slots)),l._scopeId?this._c=function(e,t,n,r){var i=un(s,e,t,n,r,f);return i&&!Array.isArray(i)&&(i.fnScopeId=l._scopeId,i.fnContext=o),i}:this._c=function(e,t,n,r){return un(s,e,t,n,r,f)}}function rn(e,t,n,r,o){var i=Ae(e);return i.fnContext=n,i.fnOptions=r,(i.devtoolsMeta=i.devtoolsMeta||{}).renderContext=o,t.slot&&((i.data||(i.data={})).slot=t.slot),i}function on(e,t){for(var n in t)e[k(n)]=t[n]}tn(nn.prototype);var an={init:function(e,t){if(e.componentInstance&&!e.componentInstance._isDestroyed&&e.data.keepAlive){var n=e;an.prepatch(n,n)}else(e.componentInstance=function(e,t){var n={_isComponent:!0,_parentVnode:e,parent:t},r=e.data.inlineTemplate;return o(r)&&(n.render=r.render,n.staticRenderFns=r.staticRenderFns),new e.componentOptions.Ctor(n)}(e,_n)).$mount(t?e.elm:void 0,t)},prepatch:function(t,n){var r=n.componentOptions;!function(t,n,r,o,i){wn=!0;var a=o.data.scopedSlots,s=t.$scopedSlots,c=!!(a&&!a.$stable||s!==e&&!s.$stable||a&&t.$scopedSlots.$key!==a.$key),l=!!(i||t.$options._renderChildren||c);if(t.$options._parentVnode=o,t.$vnode=o,t._vnode&&(t._vnode.parent=o),t.$options._renderChildren=i,t.$attrs=o.data.attrs||e,t.$listeners=r||e,n&&t.$options.props){Me(!1);for(var u=t._props,f=t.$options._propKeys||[],d=0;d<f.length;d++){var p=f[d],v=t.$options.props;u[p]=Ke(p,v,n,t)}Me(!0),t.$options.propsData=n}r=r||e;var h=t.$options._parentListeners;t.$options._parentListeners=r,bn(t,r,h),l&&(t.$slots=Lt(i,o.context),t.$forceUpdate()),wn=!1}(n.componentInstance=t.componentInstance,r.propsData,r.listeners,n,r.children)},insert:function(e){var t,n=e.context,r=e.componentInstance;r._isMounted||(r._isMounted=!0,An(r,"mounted")),e.data.keepAlive&&(n._isMounted?((t=r)._inactive=!1,Sn.push(t)):kn(r,!0))},destroy:function(e){var t=e.componentInstance;t._isDestroyed||(e.data.keepAlive?function e(t,n){if(!(n&&(t._directInactive=!0,xn(t))||t._inactive)){t._inactive=!0;for(var r=0;r<t.$children.length;r++)e(t.$children[r]);An(t,"deactivated")}}(t,!0):t.$destroy())}},sn=Object.keys(an);function cn(t,n,a,c,l){if(!r(t)){var u=a.$options._base;if(s(t)&&(t=u.extend(t)),"function"==typeof t){var f;if(r(t.cid)&&void 0===(t=function(e,t){if(i(e.error)&&o(e.errorComp))return e.errorComp;if(o(e.resolved))return e.resolved;var n=dn;if(n&&o(e.owners)&&-1===e.owners.indexOf(n)&&e.owners.push(n),i(e.loading)&&o(e.loadingComp))return e.loadingComp;if(n&&!o(e.owners)){var a=e.owners=[n],c=!0,l=null,u=null;n.$on("hook:destroyed",(function(){return b(a,n)}));var f=function(e){for(var t=0,n=a.length;t<n;t++)a[t].$forceUpdate();e&&(a.length=0,null!==l&&(clearTimeout(l),l=null),null!==u&&(clearTimeout(u),u=null))},d=P((function(n){e.resolved=pn(n,t),c?a.length=0:f(!0)})),v=P((function(t){ue("Failed to resolve async component: "+String(e)+(t?"\nReason: "+t:"")),o(e.errorComp)&&(e.error=!0,f(!0))})),h=e(d,v);return s(h)&&(p(h)?r(e.resolved)&&h.then(d,v):p(h.component)&&(h.component.then(d,v),o(h.error)&&(e.errorComp=pn(h.error,t)),o(h.loading)&&(e.loadingComp=pn(h.loading,t),0===h.delay?e.loading=!0:l=setTimeout((function(){l=null,r(e.resolved)&&r(e.error)&&(e.loading=!0,f(!1))}),h.delay||200)),o(h.timeout)&&(u=setTimeout((function(){u=null,r(e.resolved)&&v("timeout ("+h.timeout+"ms)")}),h.timeout)))),c=!1,e.loading?e.loadingComp:e.resolved}}(f=t,u)))return function(e,t,n,r,o){var i=xe();return i.asyncFactory=e,i.asyncMeta={data:t,context:n,children:r,tag:o},i}(f,n,a,c,l);n=n||{},Kn(t),o(n.model)&&function(e,t){var n=e.model&&e.model.prop||"value",r=e.model&&e.model.event||"input";(t.attrs||(t.attrs={}))[n]=t.model.value;var i=t.on||(t.on={}),a=i[r],s=t.model.callback;o(a)?(Array.isArray(a)?-1===a.indexOf(s):a!==s)&&(i[r]=[s].concat(a)):i[r]=s}(t.options,n);var d=function(e,t,n){var i=t.options.props;if(!r(i)){var a={},s=e.attrs,c=e.props;if(o(s)||o(c))for(var l in i){var u=S(l),f=l.toLowerCase();l!==f&&s&&w(s,f)&&fe('Prop "'+f+'" is passed to component '+de(n||t)+', but the declared prop name is "'+l+'". Note that HTML attributes are case-insensitive and camelCased props need to use their kebab-case equivalents when using in-DOM templates. You should probably use "'+u+'" instead of "'+l+'".'),It(a,c,l,u,!0)||It(a,s,l,u,!1)}return a}}(n,t,l);if(i(t.options.functional))return function(t,n,r,i,a){var s=t.options,c={},l=s.props;if(o(l))for(var u in l)c[u]=Ke(u,l,n||e);else o(r.attrs)&&on(c,r.attrs),o(r.props)&&on(c,r.props);var f=new nn(r,c,a,i,t),d=s.render.call(null,f._c,f);if(d instanceof we)return rn(d,r,f.parent,s,f);if(Array.isArray(d)){for(var p=Et(d)||[],v=new Array(p.length),h=0;h<p.length;h++)v[h]=rn(p[h],r,f.parent,s,f);return v}}(t,d,n,a,c);var v=n.on;if(n.on=n.nativeOn,i(t.options.abstract)){var h=n.slot;n={},h&&(n.slot=h)}!function(e){for(var t=e.hook||(e.hook={}),n=0;n<sn.length;n++){var r=sn[n],o=t[r],i=an[r];o===i||o&&o._merged||(t[r]=o?ln(i,o):i)}}(n);var m=t.options.name||l;return new we("vue-component-"+t.cid+(m?"-"+m:""),n,void 0,void 0,void 0,a,{Ctor:t,propsData:d,listeners:v,tag:l,children:c},f)}ue("Invalid Component definition: "+String(t),a)}}function ln(e,t){var n=function(n,r){e(n,r),t(n,r)};return n._merged=!0,n}function un(e,t,n,c,l,u){return(Array.isArray(n)||a(n))&&(l=c,c=n,n=void 0),i(u)&&(l=2),function(e,t,n,c,l){return o(n)&&o(n.__ob__)?(ue("Avoid using observed data object as vnode data: "+JSON.stringify(n)+"\nAlways create fresh vnode data objects in each render!",e),xe()):(o(n)&&o(n.is)&&(t=n.is),t?(o(n)&&o(n.key)&&!a(n.key)&&ue("Avoid using non-primitive value as key, use string/number value instead.",e),Array.isArray(c)&&"function"==typeof c[0]&&((n=n||{}).scopedSlots={default:c[0]},c.length=0),2===l?c=Et(c):1===l&&(c=function(e){for(var t=0;t<e.length;t++)if(Array.isArray(e[t]))return Array.prototype.concat.apply([],e);return e}(c)),"string"==typeof t?(f=e.$vnode&&e.$vnode.ns||H.getTagNamespace(t),H.isReservedTag(t)?(o(n)&&o(n.nativeOn)&&ue("The .native modifier for v-on is only valid on components but it was used on <"+t+">.",e),u=new we(H.parsePlatformTagName(t),n,c,void 0,void 0,e)):u=n&&n.pre||!o(d=Je(e.$options,"components",t))?new we(t,n,c,void 0,void 0,e):cn(d,n,e,c,t)):u=cn(t,n,e,c),Array.isArray(u)?u:o(u)?(o(f)&&function e(t,n,a){if(t.ns=n,"foreignObject"===t.tag&&(n=void 0,a=!0),o(t.children))for(var s=0,c=t.children.length;s<c;s++){var l=t.children[s];o(l.tag)&&(r(l.ns)||i(a)&&"svg"!==l.tag)&&e(l,n,a)}}(u,f),o(n)&&function(e){s(e.style)&&St(e.style),s(e.class)&&St(e.class)}(n),u):xe()):xe());var u,f,d}(e,t,n,c,l)}var fn,dn=null;function pn(e,t){return(e.__esModule||le&&"Module"===e[Symbol.toStringTag])&&(e=e.default),s(e)?t.extend(e):e}function vn(e){return e.isComment&&e.asyncFactory}function hn(e){if(Array.isArray(e))for(var t=0;t<e.length;t++){var n=e[t];if(o(n)&&(o(n.componentOptions)||vn(n)))return n}}function mn(e,t){fn.$on(e,t)}function gn(e,t){fn.$off(e,t)}function yn(e,t){var n=fn;return function r(){var o=t.apply(null,arguments);null!==o&&n.$off(e,r)}}function bn(e,t,n){fn=e,Mt(t,n||{},mn,gn,yn,e),fn=void 0}var _n=null,wn=!1;function $n(e){var t=_n;return _n=e,function(){_n=t}}function xn(e){for(;e&&(e=e.$parent);)if(e._inactive)return!0;return!1}function kn(e,t){if(t){if(e._directInactive=!1,xn(e))return}else if(e._directInactive)return;if(e._inactive||null===e._inactive){e._inactive=!1;for(var n=0;n<e.$children.length;n++)kn(e.$children[n]);An(e,"activated")}}function An(e,t){be();var n=e.$options[t],r=t+" hook";if(n)for(var o=0,i=n.length;o<i;o++)nt(n[o],e,null,e,r);e._hasHookEvent&&e.$emit("hook:"+t),_e()}var Cn=[],Sn=[],On={},Tn={},Mn=!1,jn=!1,In=0,En=0,Nn=Date.now;if(K&&!Y){var Dn=window.performance;Dn&&"function"==typeof Dn.now&&Nn()>document.createEvent("Event").timeStamp&&(Nn=function(){return Dn.now()})}function Ln(){var e,t;for(En=Nn(),jn=!0,Cn.sort((function(e,t){return e.id-t.id})),In=0;In<Cn.length;In++)if((e=Cn[In]).before&&e.before(),t=e.id,On[t]=null,e.run(),null!=On[t]&&(Tn[t]=(Tn[t]||0)+1,Tn[t]>100)){ue("You may have an infinite update loop "+(e.user?'in watcher with expression "'+e.expression+'"':"in a component render function."),e.vm);break}var n=Sn.slice(),r=Cn.slice();In=Cn.length=Sn.length=0,On={},Tn={},Mn=jn=!1,function(e){for(var t=0;t<e.length;t++)e[t]._inactive=!0,kn(e[t],!0)}(n),function(e){for(var t=e.length;t--;){var n=e[t],r=n.vm;r._watcher===n&&r._isMounted&&!r._isDestroyed&&An(r,"updated")}}(r),ae&&H.devtools&&ae.emit("flush")}var Pn=0,Fn=function(e,t,n,r,o){this.vm=e,o&&(e._watcher=this),e._watchers.push(this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync,this.before=r.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++Pn,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new ce,this.newDepIds=new ce,this.expression=t.toString(),"function"==typeof t?this.getter=t:(this.getter=function(e){if(!q.test(e)){var t=e.split(".");return function(e){for(var n=0;n<t.length;n++){if(!e)return;e=e[t[n]]}return e}}}(t),this.getter||(this.getter=I,ue('Failed watching path: "'+t+'" Watcher only accepts simple dot-delimited paths. For full control, use a function instead.',e))),this.value=this.lazy?void 0:this.get()};Fn.prototype.get=function(){var e;be(this);var t=this.vm;try{e=this.getter.call(t,t)}catch(e){if(!this.user)throw e;tt(e,t,'getter for watcher "'+this.expression+'"')}finally{this.deep&&St(e),_e(),this.cleanupDeps()}return e},Fn.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},Fn.prototype.cleanupDeps=function(){for(var e=this.deps.length;e--;){var t=this.deps[e];this.newDepIds.has(t.id)||t.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},Fn.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():function(e){var t=e.id;if(null==On[t]){if(On[t]=!0,jn){for(var n=Cn.length-1;n>In&&Cn[n].id>e.id;)n--;Cn.splice(n+1,0,e)}else Cn.push(e);if(!Mn){if(Mn=!0,!H.async)return void Ln();mt(Ln)}}}(this)},Fn.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||s(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(e){tt(e,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,e,t)}}},Fn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},Fn.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},Fn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||b(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1}};var Rn={enumerable:!0,configurable:!0,get:I,set:I};function Hn(e,t,n){Rn.get=function(){return this[t][n]},Rn.set=function(e){this[t][n]=e},Object.defineProperty(e,n,Rn)}var Un={lazy:!0};function Vn(e,t,n){var r=!ie();"function"==typeof n?(Rn.get=r?Bn(t):zn(n),Rn.set=I):(Rn.get=n.get?r&&!1!==n.cache?Bn(t):zn(n.get):I,Rn.set=n.set||I),Rn.set===I&&(Rn.set=function(){ue('Computed property "'+t+'" was assigned to but it has no setter.',this)}),Object.defineProperty(e,t,Rn)}function Bn(e){return function(){var t=this._computedWatchers&&this._computedWatchers[e];if(t)return t.dirty&&t.evaluate(),ge.target&&t.depend(),t.value}}function zn(e){return function(){return e.call(this,this)}}function qn(e,t,n,r){return u(n)&&(r=n,n=n.handler),"string"==typeof n&&(n=e[n]),e.$watch(t,n,r)}var Jn=0;function Kn(e){var t=e.options;if(e.super){var n=Kn(e.super);if(n!==e.superOptions){e.superOptions=n;var r=function(e){var t,n=e.options,r=e.sealedOptions;for(var o in n)n[o]!==r[o]&&(t||(t={}),t[o]=n[o]);return t}(e);r&&M(e.extendOptions,r),(t=e.options=qe(n,e.extendOptions)).name&&(t.components[t.name]=e)}}return t}function Wn(e){this instanceof Wn||ue("Vue is a constructor and should be called with the `new` keyword"),this._init(e)}function Zn(e){return e&&(e.Ctor.options.name||e.tag)}function Gn(e,t){return Array.isArray(e)?e.indexOf(t)>-1:"string"==typeof e?e.split(",").indexOf(t)>-1:!!f(e)&&e.test(t)}function Yn(e,t){var n=e.cache,r=e.keys,o=e._vnode;for(var i in n){var a=n[i];if(a){var s=Zn(a.componentOptions);s&&!t(s)&&Xn(n,i,r,o)}}}function Xn(e,t,n,r){var o=e[t];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),e[t]=null,b(n,t)}!function(t){t.prototype._init=function(t){var n,r,o=this;o._uid=Jn++,H.performance&&at&&(n="vue-perf-start:"+o._uid,r="vue-perf-end:"+o._uid,at(n)),o._isVue=!0,t&&t._isComponent?function(e,t){var n=e.$options=Object.create(e.constructor.options),r=t._parentVnode;n.parent=t.parent,n._parentVnode=r;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}(o,t):o.$options=qe(Kn(o.constructor),t||{},o),gt(o),o._self=o,function(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(o),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&bn(e,t)}(o),function(t){t._vnode=null,t._staticTrees=null;var n=t.$options,r=t.$vnode=n._parentVnode,o=r&&r.context;t.$slots=Lt(n._renderChildren,o),t.$scopedSlots=e,t._c=function(e,n,r,o){return un(t,e,n,r,o,!1)},t.$createElement=function(e,n,r,o){return un(t,e,n,r,o,!0)};var i=r&&r.data;Ee(t,"$attrs",i&&i.attrs||e,(function(){!wn&&ue("$attrs is readonly.",t)}),!0),Ee(t,"$listeners",n._parentListeners||e,(function(){!wn&&ue("$listeners is readonly.",t)}),!0)}(o),An(o,"beforeCreate"),function(e){var t=Dt(e.$options.inject,e);t&&(Me(!1),Object.keys(t).forEach((function(n){Ee(e,n,t[n],(function(){ue('Avoid mutating an injected value directly since the changes will be overwritten whenever the provided component re-renders. injection being mutated: "'+n+'"',e)}))})),Me(!0))}(o),function(e){e._watchers=[];var t=e.$options;t.props&&function(e,t){var n=e.$options.propsData||{},r=e._props={},o=e.$options._propKeys=[],i=!e.$parent;i||Me(!1);var a=function(a){o.push(a);var s=Ke(a,t,n,e),c=S(a);(y(c)||H.isReservedAttr(c))&&ue('"'+c+'" is a reserved attribute and cannot be used as component prop.',e),Ee(r,a,s,(function(){i||wn||ue("Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being mutated: \""+a+'"',e)})),a in e||Hn(e,"_props",a)};for(var s in t)a(s);Me(!0)}(e,t.props),t.methods&&function(e,t){var n=e.$options.props;for(var r in t)"function"!=typeof t[r]&&ue('Method "'+r+'" has type "'+typeof t[r]+'" in the component definition. Did you reference the function correctly?',e),n&&w(n,r)&&ue('Method "'+r+'" has already been defined as a prop.',e),r in e&&V(r)&&ue('Method "'+r+'" conflicts with an existing Vue instance method. Avoid defining component methods that start with _ or $.'),e[r]="function"!=typeof t[r]?I:O(t[r],e)}(e,t.methods),t.data?function(e){var t=e.$options.data;u(t=e._data="function"==typeof t?function(e,t){be();try{return e.call(t,t)}catch(e){return tt(e,t,"data()"),{}}finally{_e()}}(t,e):t||{})||(t={},ue("data functions should return an object:\nhttps://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function",e));for(var n=Object.keys(t),r=e.$options.props,o=e.$options.methods,i=n.length;i--;){var a=n[i];o&&w(o,a)&&ue('Method "'+a+'" has already been defined as a data property.',e),r&&w(r,a)?ue('The data property "'+a+'" is already declared as a prop. Use prop default value instead.',e):V(a)||Hn(e,"_data",a)}Ie(t,!0)}(e):Ie(e._data={},!0),t.computed&&function(e,t){var n=e._computedWatchers=Object.create(null),r=ie();for(var o in t){var i=t[o],a="function"==typeof i?i:i.get;null==a&&ue('Getter is missing for computed property "'+o+'".',e),r||(n[o]=new Fn(e,a||I,I,Un)),o in e?o in e.$data?ue('The computed property "'+o+'" is already defined in data.',e):e.$options.props&&o in e.$options.props&&ue('The computed property "'+o+'" is already defined as a prop.',e):Vn(e,o,i)}}(e,t.computed),t.watch&&t.watch!==ne&&function(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var o=0;o<r.length;o++)qn(e,n,r[o]);else qn(e,n,r)}}(e,t.watch)}(o),function(e){var t=e.$options.provide;t&&(e._provided="function"==typeof t?t.call(e):t)}(o),An(o,"created"),H.performance&&at&&(o._name=de(o,!1),at(r),st("vue "+o._name+" init",n,r)),o.$options.el&&o.$mount(o.$options.el)}}(Wn),function(e){var t={get:function(){return this._data}},n={get:function(){return this._props}};t.set=function(){ue("Avoid replacing instance root $data. Use nested data properties instead.",this)},n.set=function(){ue("$props is readonly.",this)},Object.defineProperty(e.prototype,"$data",t),Object.defineProperty(e.prototype,"$props",n),e.prototype.$set=Ne,e.prototype.$delete=De,e.prototype.$watch=function(e,t,n){if(u(t))return qn(this,e,t,n);(n=n||{}).user=!0;var r=new Fn(this,e,t,n);if(n.immediate)try{t.call(this,r.value)}catch(e){tt(e,this,'callback for immediate watcher "'+r.expression+'"')}return function(){r.teardown()}}}(Wn),function(e){var t=/^hook:/;e.prototype.$on=function(e,n){var r=this;if(Array.isArray(e))for(var o=0,i=e.length;o<i;o++)r.$on(e[o],n);else(r._events[e]||(r._events[e]=[])).push(n),t.test(e)&&(r._hasHookEvent=!0);return r},e.prototype.$once=function(e,t){var n=this;function r(){n.$off(e,r),t.apply(n,arguments)}return r.fn=t,n.$on(e,r),n},e.prototype.$off=function(e,t){var n=this;if(!arguments.length)return n._events=Object.create(null),n;if(Array.isArray(e)){for(var r=0,o=e.length;r<o;r++)n.$off(e[r],t);return n}var i,a=n._events[e];if(!a)return n;if(!t)return n._events[e]=null,n;for(var s=a.length;s--;)if((i=a[s])===t||i.fn===t){a.splice(s,1);break}return n},e.prototype.$emit=function(e){var t=this,n=e.toLowerCase();n!==e&&t._events[n]&&fe('Event "'+n+'" is emitted in component '+de(t)+' but the handler is registered for "'+e+'". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use "'+S(e)+'" instead of "'+e+'".');var r=t._events[e];if(r){r=r.length>1?T(r):r;for(var o=T(arguments,1),i='event handler for "'+e+'"',a=0,s=r.length;a<s;a++)nt(r[a],t,o,t,i)}return t}}(Wn),function(e){e.prototype._update=function(e,t){var n=this,r=n.$el,o=n._vnode,i=$n(n);n._vnode=e,n.$el=o?n.__patch__(o,e):n.__patch__(n.$el,e,t,!1),i(),r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el)},e.prototype.$forceUpdate=function(){this._watcher&&this._watcher.update()},e.prototype.$destroy=function(){var e=this;if(!e._isBeingDestroyed){An(e,"beforeDestroy"),e._isBeingDestroyed=!0;var t=e.$parent;!t||t._isBeingDestroyed||e.$options.abstract||b(t.$children,e),e._watcher&&e._watcher.teardown();for(var n=e._watchers.length;n--;)e._watchers[n].teardown();e._data.__ob__&&e._data.__ob__.vmCount--,e._isDestroyed=!0,e.__patch__(e._vnode,null),An(e,"destroyed"),e.$off(),e.$el&&(e.$el.__vue__=null),e.$vnode&&(e.$vnode.parent=null)}}}(Wn),function(e){tn(e.prototype),e.prototype.$nextTick=function(e){return mt(e,this)},e.prototype._render=function(){var e,t=this,n=t.$options,r=n.render,o=n._parentVnode;o&&(t.$scopedSlots=Ft(o.data.scopedSlots,t.$slots,t.$scopedSlots)),t.$vnode=o;try{dn=t,e=r.call(t._renderProxy,t.$createElement)}catch(n){if(tt(n,t,"render"),t.$options.renderError)try{e=t.$options.renderError.call(t._renderProxy,t.$createElement,n)}catch(n){tt(n,t,"renderError"),e=t._vnode}else e=t._vnode}finally{dn=null}return Array.isArray(e)&&1===e.length&&(e=e[0]),e instanceof we||(Array.isArray(e)&&ue("Multiple root nodes returned from render function. Render function should return a single root node.",t),e=xe()),e.parent=o,e}}(Wn);var Qn=[String,RegExp,Array],er={KeepAlive:{name:"keep-alive",abstract:!0,props:{include:Qn,exclude:Qn,max:[String,Number]},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)Xn(this.cache,e,this.keys)},mounted:function(){var e=this;this.$watch("include",(function(t){Yn(e,(function(e){return Gn(t,e)}))})),this.$watch("exclude",(function(t){Yn(e,(function(e){return!Gn(t,e)}))}))},render:function(){var e=this.$slots.default,t=hn(e),n=t&&t.componentOptions;if(n){var r=Zn(n),o=this.include,i=this.exclude;if(o&&(!r||!Gn(o,r))||i&&r&&Gn(i,r))return t;var a=this.cache,s=this.keys,c=null==t.key?n.Ctor.cid+(n.tag?"::"+n.tag:""):t.key;a[c]?(t.componentInstance=a[c].componentInstance,b(s,c),s.push(c)):(a[c]=t,s.push(c),this.max&&s.length>parseInt(this.max)&&Xn(a,s[0],s,this._vnode)),t.data.keepAlive=!0}return t||e&&e[0]}}};!function(e){var t={get:function(){return H},set:function(){ue("Do not replace the Vue.config object, set individual fields instead.")}};Object.defineProperty(e,"config",t),e.util={warn:ue,extend:M,mergeOptions:qe,defineReactive:Ee},e.set=Ne,e.delete=De,e.nextTick=mt,e.observable=function(e){return Ie(e),e},e.options=Object.create(null),F.forEach((function(t){e.options[t+"s"]=Object.create(null)})),e.options._base=e,M(e.options.components,er),function(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=T(arguments,1);return n.unshift(this),"function"==typeof e.install?e.install.apply(e,n):"function"==typeof e&&e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=qe(this.options,e),this}}(e),function(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,r=n.cid,o=e._Ctor||(e._Ctor={});if(o[r])return o[r];var i=e.name||n.options.name;i&&Be(i);var a=function(e){this._init(e)};return(a.prototype=Object.create(n.prototype)).constructor=a,a.cid=t++,a.options=qe(n.options,e),a.super=n,a.options.props&&function(e){var t=e.options.props;for(var n in t)Hn(e.prototype,"_props",n)}(a),a.options.computed&&function(e){var t=e.options.computed;for(var n in t)Vn(e.prototype,n,t[n])}(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,F.forEach((function(e){a[e]=n[e]})),i&&(a.options.components[i]=a),a.superOptions=n.options,a.extendOptions=e,a.sealedOptions=M({},a.options),o[r]=a,a}}(e),function(e){F.forEach((function(t){e[t]=function(e,n){return n?("component"===t&&Be(e),"component"===t&&u(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"==typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}}))}(e)}(Wn),Object.defineProperty(Wn.prototype,"$isServer",{get:ie}),Object.defineProperty(Wn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Wn,"FunctionalRenderContext",{value:nn}),Wn.version="2.6.12";var tr=m("style,class"),nr=m("input,textarea,option,select,progress"),rr=function(e,t,n){return"value"===n&&nr(e)&&"button"!==t||"selected"===n&&"option"===e||"checked"===n&&"input"===e||"muted"===n&&"video"===e},or=m("contenteditable,draggable,spellcheck"),ir=m("events,caret,typing,plaintext-only"),ar=m("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),sr="http://www.w3.org/1999/xlink",cr=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},lr=function(e){return cr(e)?e.slice(6,e.length):""},ur=function(e){return null==e||!1===e};function fr(e,t){return{staticClass:dr(e.staticClass,t.staticClass),class:o(e.class)?[e.class,t.class]:t.class}}function dr(e,t){return e?t?e+" "+t:e:t||""}function pr(e){return Array.isArray(e)?function(e){for(var t,n="",r=0,i=e.length;r<i;r++)o(t=pr(e[r]))&&""!==t&&(n&&(n+=" "),n+=t);return n}(e):s(e)?function(e){var t="";for(var n in e)e[n]&&(t&&(t+=" "),t+=n);return t}(e):"string"==typeof e?e:""}var vr={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},hr=m("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),mr=m("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),gr=function(e){return hr(e)||mr(e)};function yr(e){return mr(e)?"svg":"math"===e?"math":void 0}var br=Object.create(null),_r=m("text,number,password,search,email,tel,url");function wr(e){return"string"==typeof e?document.querySelector(e)||(ue("Cannot find element: "+e),document.createElement("div")):e}var $r=Object.freeze({createElement:function(e,t){var n=document.createElement(e);return"select"!==e||t.data&&t.data.attrs&&void 0!==t.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n},createElementNS:function(e,t){return document.createElementNS(vr[e],t)},createTextNode:function(e){return document.createTextNode(e)},createComment:function(e){return document.createComment(e)},insertBefore:function(e,t,n){e.insertBefore(t,n)},removeChild:function(e,t){e.removeChild(t)},appendChild:function(e,t){e.appendChild(t)},parentNode:function(e){return e.parentNode},nextSibling:function(e){return e.nextSibling},tagName:function(e){return e.tagName},setTextContent:function(e,t){e.textContent=t},setStyleScope:function(e,t){e.setAttribute(t,"")}}),xr={create:function(e,t){kr(t)},update:function(e,t){e.data.ref!==t.data.ref&&(kr(e,!0),kr(t))},destroy:function(e){kr(e,!0)}};function kr(e,t){var n=e.data.ref;if(o(n)){var r=e.context,i=e.componentInstance||e.elm,a=r.$refs;t?Array.isArray(a[n])?b(a[n],i):a[n]===i&&(a[n]=void 0):e.data.refInFor?Array.isArray(a[n])?a[n].indexOf(i)<0&&a[n].push(i):a[n]=[i]:a[n]=i}}var Ar=new we("",{},[]),Cr=["create","activate","update","remove","destroy"];function Sr(e,t){return e.key===t.key&&(e.tag===t.tag&&e.isComment===t.isComment&&o(e.data)===o(t.data)&&function(e,t){if("input"!==e.tag)return!0;var n,r=o(n=e.data)&&o(n=n.attrs)&&n.type,i=o(n=t.data)&&o(n=n.attrs)&&n.type;return r===i||_r(r)&&_r(i)}(e,t)||i(e.isAsyncPlaceholder)&&e.asyncFactory===t.asyncFactory&&r(t.asyncFactory.error))}function Or(e,t,n){var r,i,a={};for(r=t;r<=n;++r)o(i=e[r].key)&&(a[i]=r);return a}var Tr={create:Mr,update:Mr,destroy:function(e){Mr(e,Ar)}};function Mr(e,t){(e.data.directives||t.data.directives)&&function(e,t){var n,r,o,i=e===Ar,a=t===Ar,s=Ir(e.data.directives,e.context),c=Ir(t.data.directives,t.context),l=[],u=[];for(n in c)r=s[n],o=c[n],r?(o.oldValue=r.value,o.oldArg=r.arg,Nr(o,"update",t,e),o.def&&o.def.componentUpdated&&u.push(o)):(Nr(o,"bind",t,e),o.def&&o.def.inserted&&l.push(o));if(l.length){var f=function(){for(var n=0;n<l.length;n++)Nr(l[n],"inserted",t,e)};i?jt(t,"insert",f):f()}if(u.length&&jt(t,"postpatch",(function(){for(var n=0;n<u.length;n++)Nr(u[n],"componentUpdated",t,e)})),!i)for(n in s)c[n]||Nr(s[n],"unbind",e,e,a)}(e,t)}var jr=Object.create(null);function Ir(e,t){var n,r,o=Object.create(null);if(!e)return o;for(n=0;n<e.length;n++)(r=e[n]).modifiers||(r.modifiers=jr),o[Er(r)]=r,r.def=Je(t.$options,"directives",r.name,!0);return o}function Er(e){return e.rawName||e.name+"."+Object.keys(e.modifiers||{}).join(".")}function Nr(e,t,n,r,o){var i=e.def&&e.def[t];if(i)try{i(n.elm,e,n,r,o)}catch(r){tt(r,n.context,"directive "+e.name+" "+t+" hook")}}var Dr=[xr,Tr];function Lr(e,t){var n=t.componentOptions;if(!(o(n)&&!1===n.Ctor.options.inheritAttrs||r(e.data.attrs)&&r(t.data.attrs))){var i,a,s=t.elm,c=e.data.attrs||{},l=t.data.attrs||{};for(i in o(l.__ob__)&&(l=t.data.attrs=M({},l)),l)a=l[i],c[i]!==a&&Pr(s,i,a);for(i in(Y||Q)&&l.value!==c.value&&Pr(s,"value",l.value),c)r(l[i])&&(cr(i)?s.removeAttributeNS(sr,lr(i)):or(i)||s.removeAttribute(i))}}function Pr(e,t,n){e.tagName.indexOf("-")>-1?Fr(e,t,n):ar(t)?ur(n)?e.removeAttribute(t):(n="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,n)):or(t)?e.setAttribute(t,function(e,t){return ur(t)||"false"===t?"false":"contenteditable"===e&&ir(t)?t:"true"}(t,n)):cr(t)?ur(n)?e.removeAttributeNS(sr,lr(t)):e.setAttributeNS(sr,t,n):Fr(e,t,n)}function Fr(e,t,n){if(ur(n))e.removeAttribute(t);else{if(Y&&!X&&"TEXTAREA"===e.tagName&&"placeholder"===t&&""!==n&&!e.__ieph){var r=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",r)};e.addEventListener("input",r),e.__ieph=!0}e.setAttribute(t,n)}}var Rr={create:Lr,update:Lr};function Hr(e,t){var n=t.elm,i=t.data,a=e.data;if(!(r(i.staticClass)&&r(i.class)&&(r(a)||r(a.staticClass)&&r(a.class)))){var s=function(e){for(var t=e.data,n=e,r=e;o(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(t=fr(r.data,t));for(;o(n=n.parent);)n&&n.data&&(t=fr(t,n.data));return i=t.staticClass,a=t.class,o(i)||o(a)?dr(i,pr(a)):"";var i,a}(t),c=n._transitionClasses;o(c)&&(s=dr(s,pr(c))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var Ur,Vr,Br,zr,qr,Jr,Kr,Wr,Zr={create:Hr,update:Hr},Gr=/[\w).+\-_$\]]/;function Yr(e){var t,n,r,o,i,a=!1,s=!1,c=!1,l=!1,u=0,f=0,d=0,p=0;for(r=0;r<e.length;r++)if(n=t,t=e.charCodeAt(r),a)39===t&&92!==n&&(a=!1);else if(s)34===t&&92!==n&&(s=!1);else if(c)96===t&&92!==n&&(c=!1);else if(l)47===t&&92!==n&&(l=!1);else if(124!==t||124===e.charCodeAt(r+1)||124===e.charCodeAt(r-1)||u||f||d){switch(t){case 34:s=!0;break;case 39:a=!0;break;case 96:c=!0;break;case 40:d++;break;case 41:d--;break;case 91:f++;break;case 93:f--;break;case 123:u++;break;case 125:u--}if(47===t){for(var v=r-1,h=void 0;v>=0&&" "===(h=e.charAt(v));v--);h&&Gr.test(h)||(l=!0)}}else void 0===o?(p=r+1,o=e.slice(0,r).trim()):m();function m(){(i||(i=[])).push(e.slice(p,r).trim()),p=r+1}if(void 0===o?o=e.slice(0,r).trim():0!==p&&m(),i)for(r=0;r<i.length;r++)o=Xr(o,i[r]);return o}function Xr(e,t){var n=t.indexOf("(");if(n<0)return'_f("'+t+'")('+e+")";var r=t.slice(0,n),o=t.slice(n+1);return'_f("'+r+'")('+e+(")"!==o?","+o:o)}function Qr(e,t){console.error("[Vue compiler]: "+e)}function eo(e,t){return e?e.map((function(e){return e[t]})).filter((function(e){return e})):[]}function to(e,t,n,r,o){(e.props||(e.props=[])).push(fo({name:t,value:n,dynamic:o},r)),e.plain=!1}function no(e,t,n,r,o){(o?e.dynamicAttrs||(e.dynamicAttrs=[]):e.attrs||(e.attrs=[])).push(fo({name:t,value:n,dynamic:o},r)),e.plain=!1}function ro(e,t,n,r){e.attrsMap[t]=n,e.attrsList.push(fo({name:t,value:n},r))}function oo(e,t,n,r,o,i,a,s){(e.directives||(e.directives=[])).push(fo({name:t,rawName:n,value:r,arg:o,isDynamicArg:i,modifiers:a},s)),e.plain=!1}function io(e,t,n){return n?"_p("+t+',"'+e+'")':e+t}function ao(t,n,r,o,i,a,s,c){var l;o=o||e,a&&o.prevent&&o.passive&&a("passive and prevent can't be used together. Passive handler can't prevent default event.",s),o.right?c?n="("+n+")==='click'?'contextmenu':("+n+")":"click"===n&&(n="contextmenu",delete o.right):o.middle&&(c?n="("+n+")==='click'?'mouseup':("+n+")":"click"===n&&(n="mouseup")),o.capture&&(delete o.capture,n=io("!",n,c)),o.once&&(delete o.once,n=io("~",n,c)),o.passive&&(delete o.passive,n=io("&",n,c)),o.native?(delete o.native,l=t.nativeEvents||(t.nativeEvents={})):l=t.events||(t.events={});var u=fo({value:r.trim(),dynamic:c},s);o!==e&&(u.modifiers=o);var f=l[n];Array.isArray(f)?i?f.unshift(u):f.push(u):l[n]=f?i?[u,f]:[f,u]:u,t.plain=!1}function so(e,t){return e.rawAttrsMap[":"+t]||e.rawAttrsMap["v-bind:"+t]||e.rawAttrsMap[t]}function co(e,t,n){var r=lo(e,":"+t)||lo(e,"v-bind:"+t);if(null!=r)return Yr(r);if(!1!==n){var o=lo(e,t);if(null!=o)return JSON.stringify(o)}}function lo(e,t,n){var r;if(null!=(r=e.attrsMap[t]))for(var o=e.attrsList,i=0,a=o.length;i<a;i++)if(o[i].name===t){o.splice(i,1);break}return n&&delete e.attrsMap[t],r}function uo(e,t){for(var n=e.attrsList,r=0,o=n.length;r<o;r++){var i=n[r];if(t.test(i.name))return n.splice(r,1),i}}function fo(e,t){return t&&(null!=t.start&&(e.start=t.start),null!=t.end&&(e.end=t.end)),e}function po(e,t,n){var r=n||{},o=r.number,i="$$v";r.trim&&(i="(typeof $$v === 'string'? $$v.trim(): $$v)"),o&&(i="_n("+i+")");var a=vo(t,i);e.model={value:"("+t+")",expression:JSON.stringify(t),callback:"function ($$v) {"+a+"}"}}function vo(e,t){var n=function(e){if(e=e.trim(),Ur=e.length,e.indexOf("[")<0||e.lastIndexOf("]")<Ur-1)return(zr=e.lastIndexOf("."))>-1?{exp:e.slice(0,zr),key:'"'+e.slice(zr+1)+'"'}:{exp:e,key:null};for(Vr=e,zr=qr=Jr=0;!mo();)go(Br=ho())?bo(Br):91===Br&&yo(Br);return{exp:e.slice(0,qr),key:e.slice(qr+1,Jr)}}(e);return null===n.key?e+"="+t:"$set("+n.exp+", "+n.key+", "+t+")"}function ho(){return Vr.charCodeAt(++zr)}function mo(){return zr>=Ur}function go(e){return 34===e||39===e}function yo(e){var t=1;for(qr=zr;!mo();)if(go(e=ho()))bo(e);else if(91===e&&t++,93===e&&t--,0===t){Jr=zr;break}}function bo(e){for(var t=e;!mo()&&(e=ho())!==t;);}function _o(e,t,n){var r=Wr;return function o(){var i=t.apply(null,arguments);null!==i&&xo(e,o,n,r)}}var wo=ct&&!(te&&Number(te[1])<=53);function $o(e,t,n,r){if(wo){var o=En,i=t;t=i._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=o||e.timeStamp<=0||e.target.ownerDocument!==document)return i.apply(this,arguments)}}Wr.addEventListener(e,t,re?{capture:n,passive:r}:n)}function xo(e,t,n,r){(r||Wr).removeEventListener(e,t._wrapper||t,n)}function ko(e,t){if(!r(e.data.on)||!r(t.data.on)){var n=t.data.on||{},i=e.data.on||{};Wr=t.elm,function(e){if(o(e.__r)){var t=Y?"change":"input";e[t]=[].concat(e.__r,e[t]||[]),delete e.__r}o(e.__c)&&(e.change=[].concat(e.__c,e.change||[]),delete e.__c)}(n),Mt(n,i,$o,xo,_o,t.context),Wr=void 0}}var Ao,Co={create:ko,update:ko};function So(e,t){if(!r(e.data.domProps)||!r(t.data.domProps)){var n,i,a=t.elm,s=e.data.domProps||{},c=t.data.domProps||{};for(n in o(c.__ob__)&&(c=t.data.domProps=M({},c)),s)n in c||(a[n]="");for(n in c){if(i=c[n],"textContent"===n||"innerHTML"===n){if(t.children&&(t.children.length=0),i===s[n])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===n&&"PROGRESS"!==a.tagName){a._value=i;var l=r(i)?"":String(i);Oo(a,l)&&(a.value=l)}else if("innerHTML"===n&&mr(a.tagName)&&r(a.innerHTML)){(Ao=Ao||document.createElement("div")).innerHTML="<svg>"+i+"</svg>";for(var u=Ao.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;u.firstChild;)a.appendChild(u.firstChild)}else if(i!==s[n])try{a[n]=i}catch(e){}}}}function Oo(e,t){return!e.composing&&("OPTION"===e.tagName||function(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}(e,t)||function(e,t){var n=e.value,r=e._vModifiers;if(o(r)){if(r.number)return h(n)!==h(t);if(r.trim)return n.trim()!==t.trim()}return n!==t}(e,t))}var To={create:So,update:So},Mo=$((function(e){var t={},n=/:(.+)/;return e.split(/;(?![^(]*\))/g).forEach((function(e){if(e){var r=e.split(n);r.length>1&&(t[r[0].trim()]=r[1].trim())}})),t}));function jo(e){var t=Io(e.style);return e.staticStyle?M(e.staticStyle,t):t}function Io(e){return Array.isArray(e)?j(e):"string"==typeof e?Mo(e):e}var Eo,No=/^--/,Do=/\s*!important$/,Lo=function(e,t,n){if(No.test(t))e.style.setProperty(t,n);else if(Do.test(n))e.style.setProperty(S(t),n.replace(Do,""),"important");else{var r=Fo(t);if(Array.isArray(n))for(var o=0,i=n.length;o<i;o++)e.style[r]=n[o];else e.style[r]=n}},Po=["Webkit","Moz","ms"],Fo=$((function(e){if(Eo=Eo||document.createElement("div").style,"filter"!==(e=k(e))&&e in Eo)return e;for(var t=e.charAt(0).toUpperCase()+e.slice(1),n=0;n<Po.length;n++){var r=Po[n]+t;if(r in Eo)return r}}));function Ro(e,t){var n=t.data,i=e.data;if(!(r(n.staticStyle)&&r(n.style)&&r(i.staticStyle)&&r(i.style))){var a,s,c=t.elm,l=i.staticStyle,u=i.normalizedStyle||i.style||{},f=l||u,d=Io(t.data.style)||{};t.data.normalizedStyle=o(d.__ob__)?M({},d):d;var p=function(e,t){for(var n,r={},o=e;o.componentInstance;)(o=o.componentInstance._vnode)&&o.data&&(n=jo(o.data))&&M(r,n);(n=jo(e.data))&&M(r,n);for(var i=e;i=i.parent;)i.data&&(n=jo(i.data))&&M(r,n);return r}(t);for(s in f)r(p[s])&&Lo(c,s,"");for(s in p)(a=p[s])!==f[s]&&Lo(c,s,null==a?"":a)}}var Ho={create:Ro,update:Ro},Uo=/\s+/;function Vo(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(Uo).forEach((function(t){return e.classList.add(t)})):e.classList.add(t);else{var n=" "+(e.getAttribute("class")||"")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function Bo(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(Uo).forEach((function(t){return e.classList.remove(t)})):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{for(var n=" "+(e.getAttribute("class")||"")+" ",r=" "+t+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?e.setAttribute("class",n):e.removeAttribute("class")}}function zo(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&M(t,qo(e.name||"v")),M(t,e),t}return"string"==typeof e?qo(e):void 0}}var qo=$((function(e){return{enterClass:e+"-enter",enterToClass:e+"-enter-to",enterActiveClass:e+"-enter-active",leaveClass:e+"-leave",leaveToClass:e+"-leave-to",leaveActiveClass:e+"-leave-active"}})),Jo=K&&!X,Ko="transition",Wo="transitionend",Zo="animation",Go="animationend";Jo&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Ko="WebkitTransition",Wo="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Zo="WebkitAnimation",Go="webkitAnimationEnd"));var Yo=K?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function Xo(e){Yo((function(){Yo(e)}))}function Qo(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),Vo(e,t))}function ei(e,t){e._transitionClasses&&b(e._transitionClasses,t),Bo(e,t)}function ti(e,t,n){var r=ri(e,t),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s="transition"===o?Wo:Go,c=0,l=function(){e.removeEventListener(s,u),n()},u=function(t){t.target===e&&++c>=a&&l()};setTimeout((function(){c<a&&l()}),i+1),e.addEventListener(s,u)}var ni=/\b(transform|all)(,|$)/;function ri(e,t){var n,r=window.getComputedStyle(e),o=(r[Ko+"Delay"]||"").split(", "),i=(r[Ko+"Duration"]||"").split(", "),a=oi(o,i),s=(r[Zo+"Delay"]||"").split(", "),c=(r[Zo+"Duration"]||"").split(", "),l=oi(s,c),u=0,f=0;return"transition"===t?a>0&&(n="transition",u=a,f=i.length):"animation"===t?l>0&&(n="animation",u=l,f=c.length):f=(n=(u=Math.max(a,l))>0?a>l?"transition":"animation":null)?"transition"===n?i.length:c.length:0,{type:n,timeout:u,propCount:f,hasTransform:"transition"===n&&ni.test(r[Ko+"Property"])}}function oi(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max.apply(null,t.map((function(t,n){return ii(t)+ii(e[n])})))}function ii(e){return 1e3*Number(e.slice(0,-1).replace(",","."))}function ai(e,t){var n=e.elm;o(n._leaveCb)&&(n._leaveCb.cancelled=!0,n._leaveCb());var i=zo(e.data.transition);if(!r(i)&&!o(n._enterCb)&&1===n.nodeType){for(var a=i.css,c=i.type,l=i.enterClass,u=i.enterToClass,f=i.enterActiveClass,d=i.appearClass,p=i.appearToClass,v=i.appearActiveClass,m=i.beforeEnter,g=i.enter,y=i.afterEnter,b=i.enterCancelled,_=i.beforeAppear,w=i.appear,$=i.afterAppear,x=i.appearCancelled,k=i.duration,A=_n,C=_n.$vnode;C&&C.parent;)A=C.context,C=C.parent;var S=!A._isMounted||!e.isRootInsert;if(!S||w||""===w){var O=S&&d?d:l,T=S&&v?v:f,M=S&&p?p:u,j=S&&_||m,I=S&&"function"==typeof w?w:g,E=S&&$||y,N=S&&x||b,D=h(s(k)?k.enter:k);null!=D&&ci(D,"enter",e);var L=!1!==a&&!X,F=ui(I),R=n._enterCb=P((function(){L&&(ei(n,M),ei(n,T)),R.cancelled?(L&&ei(n,O),N&&N(n)):E&&E(n),n._enterCb=null}));e.data.show||jt(e,"insert",(function(){var t=n.parentNode,r=t&&t._pending&&t._pending[e.key];r&&r.tag===e.tag&&r.elm._leaveCb&&r.elm._leaveCb(),I&&I(n,R)})),j&&j(n),L&&(Qo(n,O),Qo(n,T),Xo((function(){ei(n,O),R.cancelled||(Qo(n,M),F||(li(D)?setTimeout(R,D):ti(n,c,R)))}))),e.data.show&&(t&&t(),I&&I(n,R)),L||F||R()}}}function si(e,t){var n=e.elm;o(n._enterCb)&&(n._enterCb.cancelled=!0,n._enterCb());var i=zo(e.data.transition);if(r(i)||1!==n.nodeType)return t();if(!o(n._leaveCb)){var a=i.css,c=i.type,l=i.leaveClass,u=i.leaveToClass,f=i.leaveActiveClass,d=i.beforeLeave,p=i.leave,v=i.afterLeave,m=i.leaveCancelled,g=i.delayLeave,y=i.duration,b=!1!==a&&!X,_=ui(p),w=h(s(y)?y.leave:y);o(w)&&ci(w,"leave",e);var $=n._leaveCb=P((function(){n.parentNode&&n.parentNode._pending&&(n.parentNode._pending[e.key]=null),b&&(ei(n,u),ei(n,f)),$.cancelled?(b&&ei(n,l),m&&m(n)):(t(),v&&v(n)),n._leaveCb=null}));g?g(x):x()}function x(){$.cancelled||(!e.data.show&&n.parentNode&&((n.parentNode._pending||(n.parentNode._pending={}))[e.key]=e),d&&d(n),b&&(Qo(n,l),Qo(n,f),Xo((function(){ei(n,l),$.cancelled||(Qo(n,u),_||(li(w)?setTimeout($,w):ti(n,c,$)))}))),p&&p(n,$),b||_||$())}}function ci(e,t,n){"number"!=typeof e?ue("<transition> explicit "+t+" duration is not a valid number - got "+JSON.stringify(e)+".",n.context):isNaN(e)&&ue("<transition> explicit "+t+" duration is NaN - the duration expression might be incorrect.",n.context)}function li(e){return"number"==typeof e&&!isNaN(e)}function ui(e){if(r(e))return!1;var t=e.fns;return o(t)?ui(Array.isArray(t)?t[0]:t):(e._length||e.length)>1}function fi(e,t){!0!==t.data.show&&ai(t)}var di=function(e){var t,n,s={},c=e.modules,l=e.nodeOps;for(t=0;t<Cr.length;++t)for(s[Cr[t]]=[],n=0;n<c.length;++n)o(c[n][Cr[t]])&&s[Cr[t]].push(c[n][Cr[t]]);function u(e){var t=l.parentNode(e);o(t)&&l.removeChild(t,e)}function d(e,t){return!t&&!e.ns&&!(H.ignoredElements.length&&H.ignoredElements.some((function(t){return f(t)?t.test(e.tag):t===e.tag})))&&H.isUnknownElement(e.tag)}var p=0;function v(e,t,n,r,a,c,u){if(o(e.elm)&&o(c)&&(e=c[u]=Ae(e)),e.isRootInsert=!a,!function(e,t,n,r){var a=e.data;if(o(a)){var c=o(e.componentInstance)&&a.keepAlive;if(o(a=a.hook)&&o(a=a.init)&&a(e,!1),o(e.componentInstance))return h(e,t),g(n,e.elm,r),i(c)&&function(e,t,n,r){for(var i,a=e;a.componentInstance;)if(o(i=(a=a.componentInstance._vnode).data)&&o(i=i.transition)){for(i=0;i<s.activate.length;++i)s.activate[i](Ar,a);t.push(a);break}g(n,e.elm,r)}(e,t,n,r),!0}}(e,t,n,r)){var f=e.data,v=e.children,m=e.tag;o(m)?(f&&f.pre&&p++,d(e,p)&&ue("Unknown custom element: <"+m+'> - did you register the component correctly? For recursive components, make sure to provide the "name" option.',e.context),e.elm=e.ns?l.createElementNS(e.ns,m):l.createElement(m,e),w(e),y(e,v,t),o(f)&&_(e,t),g(n,e.elm,r),f&&f.pre&&p--):i(e.isComment)?(e.elm=l.createComment(e.text),g(n,e.elm,r)):(e.elm=l.createTextNode(e.text),g(n,e.elm,r))}}function h(e,t){o(e.data.pendingInsert)&&(t.push.apply(t,e.data.pendingInsert),e.data.pendingInsert=null),e.elm=e.componentInstance.$el,b(e)?(_(e,t),w(e)):(kr(e),t.push(e))}function g(e,t,n){o(e)&&(o(n)?l.parentNode(n)===e&&l.insertBefore(e,t,n):l.appendChild(e,t))}function y(e,t,n){if(Array.isArray(t)){C(t);for(var r=0;r<t.length;++r)v(t[r],n,e.elm,null,!0,t,r)}else a(e.text)&&l.appendChild(e.elm,l.createTextNode(String(e.text)))}function b(e){for(;e.componentInstance;)e=e.componentInstance._vnode;return o(e.tag)}function _(e,n){for(var r=0;r<s.create.length;++r)s.create[r](Ar,e);o(t=e.data.hook)&&(o(t.create)&&t.create(Ar,e),o(t.insert)&&n.push(e))}function w(e){var t;if(o(t=e.fnScopeId))l.setStyleScope(e.elm,t);else for(var n=e;n;)o(t=n.context)&&o(t=t.$options._scopeId)&&l.setStyleScope(e.elm,t),n=n.parent;o(t=_n)&&t!==e.context&&t!==e.fnContext&&o(t=t.$options._scopeId)&&l.setStyleScope(e.elm,t)}function $(e,t,n,r,o,i){for(;r<=o;++r)v(n[r],i,e,t,!1,n,r)}function x(e){var t,n,r=e.data;if(o(r))for(o(t=r.hook)&&o(t=t.destroy)&&t(e),t=0;t<s.destroy.length;++t)s.destroy[t](e);if(o(t=e.children))for(n=0;n<e.children.length;++n)x(e.children[n])}function k(e,t,n){for(;t<=n;++t){var r=e[t];o(r)&&(o(r.tag)?(A(r),x(r)):u(r.elm))}}function A(e,t){if(o(t)||o(e.data)){var n,r=s.remove.length+1;for(o(t)?t.listeners+=r:t=function(e,t){function n(){0==--n.listeners&&u(e)}return n.listeners=t,n}(e.elm,r),o(n=e.componentInstance)&&o(n=n._vnode)&&o(n.data)&&A(n,t),n=0;n<s.remove.length;++n)s.remove[n](e,t);o(n=e.data.hook)&&o(n=n.remove)?n(e,t):t()}else u(e.elm)}function C(e){for(var t={},n=0;n<e.length;n++){var r=e[n],i=r.key;o(i)&&(t[i]?ue("Duplicate keys detected: '"+i+"'. This may cause an update error.",r.context):t[i]=!0)}}function S(e,t,n,r){for(var i=n;i<r;i++){var a=t[i];if(o(a)&&Sr(e,a))return i}}function O(e,t,n){if(i(n)&&o(e.parent))e.parent.data.pendingInsert=t;else for(var r=0;r<t.length;++r)t[r].data.hook.insert(t[r])}var T=!1,M=m("attrs,class,staticClass,staticStyle,key");function j(e,t,n,r){var a,s=t.tag,c=t.data,l=t.children;if(r=r||c&&c.pre,t.elm=e,i(t.isComment)&&o(t.asyncFactory))return t.isAsyncPlaceholder=!0,!0;if(!function(e,t,n){return o(t.tag)?0===t.tag.indexOf("vue-component")||!d(t,n)&&t.tag.toLowerCase()===(e.tagName&&e.tagName.toLowerCase()):e.nodeType===(t.isComment?8:3)}(e,t,r))return!1;if(o(c)&&(o(a=c.hook)&&o(a=a.init)&&a(t,!0),o(a=t.componentInstance)))return h(t,n),!0;if(o(s)){if(o(l))if(e.hasChildNodes())if(o(a=c)&&o(a=a.domProps)&&o(a=a.innerHTML)){if(a!==e.innerHTML)return"undefined"==typeof console||T||(T=!0,console.warn("Parent: ",e),console.warn("server innerHTML: ",a),console.warn("client innerHTML: ",e.innerHTML)),!1}else{for(var u=!0,f=e.firstChild,p=0;p<l.length;p++){if(!f||!j(f,l[p],n,r)){u=!1;break}f=f.nextSibling}if(!u||f)return"undefined"==typeof console||T||(T=!0,console.warn("Parent: ",e),console.warn("Mismatching childNodes vs. VNodes: ",e.childNodes,l)),!1}else y(t,l,n);if(o(c)){var v=!1;for(var m in c)if(!M(m)){v=!0,_(t,n);break}!v&&c.class&&St(c.class)}}else e.data!==t.text&&(e.data=t.text);return!0}return function(e,t,n,a){if(!r(t)){var c,u=!1,f=[];if(r(e))u=!0,v(t,f);else{var d=o(e.nodeType);if(!d&&Sr(e,t))!function e(t,n,a,c,u,f){if(t!==n){o(n.elm)&&o(c)&&(n=c[u]=Ae(n));var d=n.elm=t.elm;if(i(t.isAsyncPlaceholder))o(n.asyncFactory.resolved)?j(t.elm,n,a):n.isAsyncPlaceholder=!0;else if(i(n.isStatic)&&i(t.isStatic)&&n.key===t.key&&(i(n.isCloned)||i(n.isOnce)))n.componentInstance=t.componentInstance;else{var p,h=n.data;o(h)&&o(p=h.hook)&&o(p=p.prepatch)&&p(t,n);var m=t.children,g=n.children;if(o(h)&&b(n)){for(p=0;p<s.update.length;++p)s.update[p](t,n);o(p=h.hook)&&o(p=p.update)&&p(t,n)}r(n.text)?o(m)&&o(g)?m!==g&&function(t,n,i,a,s){var c,u,f,d=0,p=0,h=n.length-1,m=n[0],g=n[h],y=i.length-1,b=i[0],_=i[y],w=!s;for(C(i);d<=h&&p<=y;)r(m)?m=n[++d]:r(g)?g=n[--h]:Sr(m,b)?(e(m,b,a,i,p),m=n[++d],b=i[++p]):Sr(g,_)?(e(g,_,a,i,y),g=n[--h],_=i[--y]):Sr(m,_)?(e(m,_,a,i,y),w&&l.insertBefore(t,m.elm,l.nextSibling(g.elm)),m=n[++d],_=i[--y]):Sr(g,b)?(e(g,b,a,i,p),w&&l.insertBefore(t,g.elm,m.elm),g=n[--h],b=i[++p]):(r(c)&&(c=Or(n,d,h)),r(u=o(b.key)?c[b.key]:S(b,n,d,h))?v(b,a,t,m.elm,!1,i,p):Sr(f=n[u],b)?(e(f,b,a,i,p),n[u]=void 0,w&&l.insertBefore(t,f.elm,m.elm)):v(b,a,t,m.elm,!1,i,p),b=i[++p]);d>h?$(t,r(i[y+1])?null:i[y+1].elm,i,p,y,a):p>y&&k(n,d,h)}(d,m,g,a,f):o(g)?(C(g),o(t.text)&&l.setTextContent(d,""),$(d,null,g,0,g.length-1,a)):o(m)?k(m,0,m.length-1):o(t.text)&&l.setTextContent(d,""):t.text!==n.text&&l.setTextContent(d,n.text),o(h)&&o(p=h.hook)&&o(p=p.postpatch)&&p(t,n)}}}(e,t,f,null,null,a);else{if(d){if(1===e.nodeType&&e.hasAttribute("data-server-rendered")&&(e.removeAttribute("data-server-rendered"),n=!0),i(n)){if(j(e,t,f))return O(t,f,!0),e;ue("The client-side rendered virtual DOM tree is not matching server-rendered content. This is likely caused by incorrect HTML markup, for example nesting block-level elements inside <p>, or missing <tbody>. Bailing hydration and performing full client-side render.")}c=e,e=new we(l.tagName(c).toLowerCase(),{},[],void 0,c)}var p=e.elm,h=l.parentNode(p);if(v(t,f,p._leaveCb?null:h,l.nextSibling(p)),o(t.parent))for(var m=t.parent,g=b(t);m;){for(var y=0;y<s.destroy.length;++y)s.destroy[y](m);if(m.elm=t.elm,g){for(var _=0;_<s.create.length;++_)s.create[_](Ar,m);var w=m.data.hook.insert;if(w.merged)for(var A=1;A<w.fns.length;A++)w.fns[A]()}else kr(m);m=m.parent}o(h)?k([e],0,0):o(e.tag)&&x(e)}}return O(t,f,u),t.elm}o(e)&&x(e)}}({nodeOps:$r,modules:[Rr,Zr,Co,To,Ho,K?{create:fi,activate:fi,remove:function(e,t){!0!==e.data.show?si(e,t):t()}}:{}].concat(Dr)});X&&document.addEventListener("selectionchange",(function(){var e=document.activeElement;e&&e.vmodel&&_i(e,"input")}));var pi={inserted:function(e,t,n,r){"select"===n.tag?(r.elm&&!r.elm._vOptions?jt(n,"postpatch",(function(){pi.componentUpdated(e,t,n)})):vi(e,t,n.context),e._vOptions=[].map.call(e.options,gi)):("textarea"===n.tag||_r(e.type))&&(e._vModifiers=t.modifiers,t.modifiers.lazy||(e.addEventListener("compositionstart",yi),e.addEventListener("compositionend",bi),e.addEventListener("change",bi),X&&(e.vmodel=!0)))},componentUpdated:function(e,t,n){if("select"===n.tag){vi(e,t,n.context);var r=e._vOptions,o=e._vOptions=[].map.call(e.options,gi);o.some((function(e,t){return!D(e,r[t])}))&&(e.multiple?t.value.some((function(e){return mi(e,o)})):t.value!==t.oldValue&&mi(t.value,o))&&_i(e,"change")}}};function vi(e,t,n){hi(e,t,n),(Y||Q)&&setTimeout((function(){hi(e,t,n)}),0)}function hi(e,t,n){var r=t.value,o=e.multiple;if(!o||Array.isArray(r)){for(var i,a,s=0,c=e.options.length;s<c;s++)if(a=e.options[s],o)i=L(r,gi(a))>-1,a.selected!==i&&(a.selected=i);else if(D(gi(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));o||(e.selectedIndex=-1)}else ue('<select multiple v-model="'+t.expression+'"> expects an Array value for its binding, but got '+Object.prototype.toString.call(r).slice(8,-1),n)}function mi(e,t){return t.every((function(t){return!D(t,e)}))}function gi(e){return"_value"in e?e._value:e.value}function yi(e){e.target.composing=!0}function bi(e){e.target.composing&&(e.target.composing=!1,_i(e.target,"input"))}function _i(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function wi(e){return!e.componentInstance||e.data&&e.data.transition?e:wi(e.componentInstance._vnode)}var $i={model:pi,show:{bind:function(e,t,n){var r=t.value,o=(n=wi(n)).data&&n.data.transition,i=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;r&&o?(n.data.show=!0,ai(n,(function(){e.style.display=i}))):e.style.display=r?i:"none"},update:function(e,t,n){var r=t.value;!r!=!t.oldValue&&((n=wi(n)).data&&n.data.transition?(n.data.show=!0,r?ai(n,(function(){e.style.display=e.__vOriginalDisplay})):si(n,(function(){e.style.display="none"}))):e.style.display=r?e.__vOriginalDisplay:"none")},unbind:function(e,t,n,r,o){o||(e.style.display=e.__vOriginalDisplay)}}},xi={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function ki(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?ki(hn(t.children)):e}function Ai(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var o=n._parentListeners;for(var i in o)t[k(i)]=o[i];return t}function Ci(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}var Si=function(e){return e.tag||vn(e)},Oi=function(e){return"show"===e.name},Ti={name:"transition",props:xi,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(Si)).length){n.length>1&&ue("<transition> can only be used on a single element. Use <transition-group> for lists.",this.$parent);var r=this.mode;r&&"in-out"!==r&&"out-in"!==r&&ue("invalid <transition> mode: "+r,this.$parent);var o=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return o;var i=ki(o);if(!i)return o;if(this._leaving)return Ci(e,o);var s="__transition-"+this._uid+"-";i.key=null==i.key?i.isComment?s+"comment":s+i.tag:a(i.key)?0===String(i.key).indexOf(s)?i.key:s+i.key:i.key;var c=(i.data||(i.data={})).transition=Ai(this),l=this._vnode,u=ki(l);if(i.data.directives&&i.data.directives.some(Oi)&&(i.data.show=!0),u&&u.data&&!function(e,t){return t.key===e.key&&t.tag===e.tag}(i,u)&&!vn(u)&&(!u.componentInstance||!u.componentInstance._vnode.isComment)){var f=u.data.transition=M({},c);if("out-in"===r)return this._leaving=!0,jt(f,"afterLeave",(function(){t._leaving=!1,t.$forceUpdate()})),Ci(e,o);if("in-out"===r){if(vn(i))return l;var d,p=function(){d()};jt(c,"afterEnter",p),jt(c,"enterCancelled",p),jt(f,"delayLeave",(function(e){d=e}))}}return o}}},Mi=M({tag:String,moveClass:String},xi);function ji(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function Ii(e){e.data.newPos=e.elm.getBoundingClientRect()}function Ei(e){var t=e.data.pos,n=e.data.newPos,r=t.left-n.left,o=t.top-n.top;if(r||o){e.data.moved=!0;var i=e.elm.style;i.transform=i.WebkitTransform="translate("+r+"px,"+o+"px)",i.transitionDuration="0s"}}delete Mi.mode;var Ni={Transition:Ti,TransitionGroup:{props:Mi,beforeMount:function(){var e=this,t=this._update;this._update=function(n,r){var o=$n(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,o(),t.call(e,n,r)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=Ai(this),s=0;s<o.length;s++){var c=o[s];if(c.tag)if(null!=c.key&&0!==String(c.key).indexOf("__vlist"))i.push(c),n[c.key]=c,(c.data||(c.data={})).transition=a;else{var l=c.componentOptions,u=l?l.Ctor.options.name||l.tag||"":c.tag;ue("<transition-group> children must be keyed: <"+u+">")}}if(r){for(var f=[],d=[],p=0;p<r.length;p++){var v=r[p];v.data.transition=a,v.data.pos=v.elm.getBoundingClientRect(),n[v.key]?f.push(v):d.push(v)}this.kept=e(t,null,f),this.removed=d}return e(t,null,i)},updated:function(){var e=this.prevChildren,t=this.moveClass||(this.name||"v")+"-move";e.length&&this.hasMove(e[0].elm,t)&&(e.forEach(ji),e.forEach(Ii),e.forEach(Ei),this._reflow=document.body.offsetHeight,e.forEach((function(e){if(e.data.moved){var n=e.elm,r=n.style;Qo(n,t),r.transform=r.WebkitTransform=r.transitionDuration="",n.addEventListener(Wo,n._moveCb=function e(r){r&&r.target!==n||r&&!/transform$/.test(r.propertyName)||(n.removeEventListener(Wo,e),n._moveCb=null,ei(n,t))})}})))},methods:{hasMove:function(e,t){if(!Jo)return!1;if(this._hasMove)return this._hasMove;var n=e.cloneNode();e._transitionClasses&&e._transitionClasses.forEach((function(e){Bo(n,e)})),Vo(n,t),n.style.display="none",this.$el.appendChild(n);var r=ri(n);return this.$el.removeChild(n),this._hasMove=r.hasTransform}}}};Wn.config.mustUseProp=rr,Wn.config.isReservedTag=gr,Wn.config.isReservedAttr=tr,Wn.config.getTagNamespace=yr,Wn.config.isUnknownElement=function(e){if(!K)return!0;if(gr(e))return!1;if(e=e.toLowerCase(),null!=br[e])return br[e];var t=document.createElement(e);return e.indexOf("-")>-1?br[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:br[e]=/HTMLUnknownElement/.test(t.toString())},M(Wn.options.directives,$i),M(Wn.options.components,Ni),Wn.prototype.__patch__=K?di:I,Wn.prototype.$mount=function(e,t){return function(e,t,n){var r;return e.$el=t,e.$options.render||(e.$options.render=xe,e.$options.template&&"#"!==e.$options.template.charAt(0)||e.$options.el||t?ue("You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into render functions, or use the compiler-included build.",e):ue("Failed to mount component: template or render function not defined.",e)),An(e,"beforeMount"),r=H.performance&&at?function(){var t=e._name,r=e._uid,o="vue-perf-start:"+r,i="vue-perf-end:"+r;at(o);var a=e._render();at(i),st("vue "+t+" render",o,i),at(o),e._update(a,n),at(i),st("vue "+t+" patch",o,i)}:function(){e._update(e._render(),n)},new Fn(e,r,I,{before:function(){e._isMounted&&!e._isDestroyed&&An(e,"beforeUpdate")}},!0),n=!1,null==e.$vnode&&(e._isMounted=!0,An(e,"mounted")),e}(this,e=e&&K?wr(e):void 0,t)},K&&setTimeout((function(){H.devtools&&(ae?ae.emit("init",Wn):console[console.info?"info":"log"]("Download the Vue Devtools extension for a better development experience:\nhttps://github.com/vuejs/vue-devtools")),!1!==H.productionTip&&"undefined"!=typeof console&&console[console.info?"info":"log"]("You are running Vue in development mode.\nMake sure to turn on production mode when deploying for production.\nSee more tips at https://vuejs.org/guide/deployment.html")}),0);var Di=/\{\{((?:.|\r?\n)+?)\}\}/g,Li=/[-.*+?^${}()|[\]\/\\]/g,Pi=$((function(e){var t=e[0].replace(Li,"\\$&"),n=e[1].replace(Li,"\\$&");return new RegExp(t+"((?:.|\\n)+?)"+n,"g")}));function Fi(e,t){var n=t?Pi(t):Di;if(n.test(e)){for(var r,o,i,a=[],s=[],c=n.lastIndex=0;r=n.exec(e);){(o=r.index)>c&&(s.push(i=e.slice(c,o)),a.push(JSON.stringify(i)));var l=Yr(r[1].trim());a.push("_s("+l+")"),s.push({"@binding":l}),c=o+r[0].length}return c<e.length&&(s.push(i=e.slice(c)),a.push(JSON.stringify(i))),{expression:a.join("+"),tokens:s}}}var Ri,Hi={staticKeys:["staticClass"],transformNode:function(e,t){var n=t.warn||Qr,r=lo(e,"class");r&&Fi(r,t.delimiters)&&n('class="'+r+'": Interpolation inside attributes has been removed. Use v-bind or the colon shorthand instead. For example, instead of <div class="{{ val }}">, use <div :class="val">.',e.rawAttrsMap.class),r&&(e.staticClass=JSON.stringify(r));var o=co(e,"class",!1);o&&(e.classBinding=o)},genData:function(e){var t="";return e.staticClass&&(t+="staticClass:"+e.staticClass+","),e.classBinding&&(t+="class:"+e.classBinding+","),t}},Ui={staticKeys:["staticStyle"],transformNode:function(e,t){var n=t.warn||Qr,r=lo(e,"style");r&&(Fi(r,t.delimiters)&&n('style="'+r+'": Interpolation inside attributes has been removed. Use v-bind or the colon shorthand instead. For example, instead of <div style="{{ val }}">, use <div :style="val">.',e.rawAttrsMap.style),e.staticStyle=JSON.stringify(Mo(r)));var o=co(e,"style",!1);o&&(e.styleBinding=o)},genData:function(e){var t="";return e.staticStyle&&(t+="staticStyle:"+e.staticStyle+","),e.styleBinding&&(t+="style:("+e.styleBinding+"),"),t}},Vi=m("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),Bi=m("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),zi=m("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),qi=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Ji=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Ki="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+U.source+"]*",Wi="((?:"+Ki+"\\:)?"+Ki+")",Zi=new RegExp("^<"+Wi),Gi=/^\s*(\/?)>/,Yi=new RegExp("^<\\/"+Wi+"[^>]*>"),Xi=/^<!DOCTYPE [^>]+>/i,Qi=/^<!\--/,ea=/^<!\[/,ta=m("script,style,textarea",!0),na={},ra={"<":"<",">":">",""":'"',"&":"&"," ":"\n","	":"\t","'":"'"},oa=/&(?:lt|gt|quot|amp|#39);/g,ia=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,aa=m("pre,textarea",!0),sa=function(e,t){return e&&aa(e)&&"\n"===t[0]};function ca(e,t){var n=t?ia:oa;return e.replace(n,(function(e){return ra[e]}))}var la,ua,fa,da,pa,va,ha,ma,ga,ya=/^@|^v-on:/,ba=/^v-|^@|^:|^#/,_a=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,wa=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,$a=/^\(|\)$/g,xa=/^\[.*\]$/,ka=/:(.*)$/,Aa=/^:|^\.|^v-bind:/,Ca=/\.[^.\]]+(?=[^\]]*$)/g,Sa=/^v-slot(:|$)|^#/,Oa=/[\r\n]/,Ta=/\s+/g,Ma=/[\s"'<>\/=]/,ja=$((function(e){return(Ri=Ri||document.createElement("div")).innerHTML=e,Ri.textContent}));function Ia(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:Fa(t),rawAttrsMap:{},parent:n,children:[]}}function Ea(e,t){var n;!function(e){var t=co(e,"key");if(t){if("template"===e.tag&&la("<template> cannot be keyed. Place the key on real elements instead.",so(e,"key")),e.for){var n=e.iterator2||e.iterator1,r=e.parent;n&&n===t&&r&&"transition-group"===r.tag&&la("Do not use v-for index as key on <transition-group> children, this is the same as not using keys.",so(e,"key"),!0)}e.key=t}}(e),e.plain=!e.key&&!e.scopedSlots&&!e.attrsList.length,function(e){var t=co(e,"ref");t&&(e.ref=t,e.refInFor=function(e){for(var t=e;t;){if(void 0!==t.for)return!0;t=t.parent}return!1}(e))}(e),function(e){var t;"template"===e.tag?((t=lo(e,"scope"))&&la('the "scope" attribute for scoped slots have been deprecated and replaced by "slot-scope" since 2.5. The new "slot-scope" attribute can also be used on plain elements in addition to <template> to denote scoped slots.',e.rawAttrsMap.scope,!0),e.slotScope=t||lo(e,"slot-scope")):(t=lo(e,"slot-scope"))&&(e.attrsMap["v-for"]&&la("Ambiguous combined usage of slot-scope and v-for on <"+e.tag+"> (v-for takes higher priority). Use a wrapper <template> for the scoped slot to make it clearer.",e.rawAttrsMap["slot-scope"],!0),e.slotScope=t);var n=co(e,"slot");if(n&&(e.slotTarget='""'===n?'"default"':n,e.slotTargetDynamic=!(!e.attrsMap[":slot"]&&!e.attrsMap["v-bind:slot"]),"template"===e.tag||e.slotScope||no(e,"slot",n,so(e,"slot"))),"template"===e.tag){var r=uo(e,Sa);if(r){(e.slotTarget||e.slotScope)&&la("Unexpected mixed usage of different slot syntaxes.",e),e.parent&&!ga(e.parent)&&la("<template v-slot> can only appear at the root level inside the receiving component",e);var o=La(r),i=o.name,a=o.dynamic;e.slotTarget=i,e.slotTargetDynamic=a,e.slotScope=r.value||"_empty_"}}else{var s=uo(e,Sa);if(s){ga(e)||la("v-slot can only be used on components or <template>.",s),(e.slotScope||e.slotTarget)&&la("Unexpected mixed usage of different slot syntaxes.",e),e.scopedSlots&&la("To avoid scope ambiguity, the default slot should also use <template> syntax when there are other named slots.",s);var c=e.scopedSlots||(e.scopedSlots={}),l=La(s),u=l.name,f=l.dynamic,d=c[u]=Ia("template",[],e);d.slotTarget=u,d.slotTargetDynamic=f,d.children=e.children.filter((function(e){if(!e.slotScope)return e.parent=d,!0})),d.slotScope=s.value||"_empty_",e.children=[],e.plain=!1}}}(e),"slot"===(n=e).tag&&(n.slotName=co(n,"name"),n.key&&la("`key` does not work on <slot> because slots are abstract outlets and can possibly expand into multiple elements. Use the key on a wrapping element instead.",so(n,"key"))),function(e){var t;(t=co(e,"is"))&&(e.component=t),null!=lo(e,"inline-template")&&(e.inlineTemplate=!0)}(e);for(var r=0;r<fa.length;r++)e=fa[r](e,t)||e;return function(e){var t,n,r,o,i,a,s,c,l=e.attrsList;for(t=0,n=l.length;t<n;t++)if(r=o=l[t].name,i=l[t].value,ba.test(r))if(e.hasBindings=!0,(a=Pa(r.replace(ba,"")))&&(r=r.replace(Ca,"")),Aa.test(r))r=r.replace(Aa,""),i=Yr(i),(c=xa.test(r))&&(r=r.slice(1,-1)),0===i.trim().length&&la('The value for a v-bind expression cannot be empty. Found in "v-bind:'+r+'"'),a&&(a.prop&&!c&&"innerHtml"===(r=k(r))&&(r="innerHTML"),a.camel&&!c&&(r=k(r)),a.sync&&(s=vo(i,"$event"),c?ao(e,'"update:"+('+r+")",s,null,!1,la,l[t],!0):(ao(e,"update:"+k(r),s,null,!1,la,l[t]),S(r)!==k(r)&&ao(e,"update:"+S(r),s,null,!1,la,l[t])))),a&&a.prop||!e.component&&ha(e.tag,e.attrsMap.type,r)?to(e,r,i,l[t],c):no(e,r,i,l[t],c);else if(ya.test(r))r=r.replace(ya,""),(c=xa.test(r))&&(r=r.slice(1,-1)),ao(e,r,i,a,!1,la,l[t],c);else{var u=(r=r.replace(ba,"")).match(ka),f=u&&u[1];c=!1,f&&(r=r.slice(0,-(f.length+1)),xa.test(f)&&(f=f.slice(1,-1),c=!0)),oo(e,r,o,i,f,c,a,l[t]),"model"===r&&Ua(e,i)}else Fi(i,ua)&&la(r+'="'+i+'": Interpolation inside attributes has been removed. Use v-bind or the colon shorthand instead. For example, instead of <div id="{{ val }}">, use <div :id="val">.',l[t]),no(e,r,JSON.stringify(i),l[t]),!e.component&&"muted"===r&&ha(e.tag,e.attrsMap.type,r)&&to(e,r,"true",l[t])}(e),e}function Na(e){var t;if(t=lo(e,"v-for")){var n=function(e){var t=e.match(_a);if(t){var n={};n.for=t[2].trim();var r=t[1].trim().replace($a,""),o=r.match(wa);return o?(n.alias=r.replace(wa,"").trim(),n.iterator1=o[1].trim(),o[2]&&(n.iterator2=o[2].trim())):n.alias=r,n}}(t);n?M(e,n):la("Invalid v-for expression: "+t,e.rawAttrsMap["v-for"])}}function Da(e,t){e.ifConditions||(e.ifConditions=[]),e.ifConditions.push(t)}function La(e){var t=e.name.replace(Sa,"");return t||("#"!==e.name[0]?t="default":la("v-slot shorthand syntax requires a slot name.",e)),xa.test(t)?{name:t.slice(1,-1),dynamic:!0}:{name:'"'+t+'"',dynamic:!1}}function Pa(e){var t=e.match(Ca);if(t){var n={};return t.forEach((function(e){n[e.slice(1)]=!0})),n}}function Fa(e){for(var t={},n=0,r=e.length;n<r;n++)!t[e[n].name]||Y||Q||la("duplicate attribute: "+e[n].name,e[n]),t[e[n].name]=e[n].value;return t}var Ra=/^xmlns:NS\d+/,Ha=/^NS\d+:/;function Ua(e,t){for(var n=e;n;)n.for&&n.alias===t&&la("<"+e.tag+' v-model="'+t+'">: You are binding v-model directly to a v-for iteration alias. This will not be able to modify the v-for source array because writing to the alias is like modifying a function local variable. Consider using an array of objects and use v-model on an object property instead.',e.rawAttrsMap["v-model"]),n=n.parent}function Va(e){return Ia(e.tag,e.attrsList.slice(),e.parent)}var Ba,za,qa,Ja=[Hi,Ui,{preTransformNode:function(e,t){if("input"===e.tag){var n,r=e.attrsMap;if(!r["v-model"])return;if((r[":type"]||r["v-bind:type"])&&(n=co(e,"type")),r.type||n||!r["v-bind"]||(n="("+r["v-bind"]+").type"),n){var o=lo(e,"v-if",!0),i=o?"&&("+o+")":"",a=null!=lo(e,"v-else",!0),s=lo(e,"v-else-if",!0),c=Va(e);Na(c),ro(c,"type","checkbox"),Ea(c,t),c.processed=!0,c.if="("+n+")==='checkbox'"+i,Da(c,{exp:c.if,block:c});var l=Va(e);lo(l,"v-for",!0),ro(l,"type","radio"),Ea(l,t),Da(c,{exp:"("+n+")==='radio'"+i,block:l});var u=Va(e);return lo(u,"v-for",!0),ro(u,":type",n),Ea(u,t),Da(c,{exp:o,block:u}),a?c.else=!0:s&&(c.elseif=s),c}}}}],Ka={expectHTML:!0,modules:Ja,directives:{model:function(e,t,n){Kr=n;var r=t.value,o=t.modifiers,i=e.tag,a=e.attrsMap.type;if("input"===i&&"file"===a&&Kr("<"+e.tag+' v-model="'+r+'" type="file">:\nFile inputs are read only. Use a v-on:change listener instead.',e.rawAttrsMap["v-model"]),e.component)return po(e,r,o),!1;if("select"===i)!function(e,t,n){var r='var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;return '+(n&&n.number?"_n(val)":"val")+"});";ao(e,"change",r=r+" "+vo(t,"$event.target.multiple ? $$selectedVal : $$selectedVal[0]"),null,!0)}(e,r,o);else if("input"===i&&"checkbox"===a)!function(e,t,n){var r=n&&n.number,o=co(e,"value")||"null",i=co(e,"true-value")||"true",a=co(e,"false-value")||"false";to(e,"checked","Array.isArray("+t+")?_i("+t+","+o+")>-1"+("true"===i?":("+t+")":":_q("+t+","+i+")")),ao(e,"change","var $$a="+t+",$$el=$event.target,$$c=$$el.checked?("+i+"):("+a+");if(Array.isArray($$a)){var $$v="+(r?"_n("+o+")":o)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+vo(t,"$$a.concat([$$v])")+")}else{$$i>-1&&("+vo(t,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+vo(t,"$$c")+"}",null,!0)}(e,r,o);else if("input"===i&&"radio"===a)!function(e,t,n){var r=n&&n.number,o=co(e,"value")||"null";to(e,"checked","_q("+t+","+(o=r?"_n("+o+")":o)+")"),ao(e,"change",vo(t,o),null,!0)}(e,r,o);else if("input"===i||"textarea"===i)!function(e,t,n){var r=e.attrsMap.type,o=e.attrsMap["v-bind:value"]||e.attrsMap[":value"],i=e.attrsMap["v-bind:type"]||e.attrsMap[":type"];if(o&&!i){var a=e.attrsMap["v-bind:value"]?"v-bind:value":":value";Kr(a+'="'+o+'" conflicts with v-model on the same element because the latter already expands to a value binding internally',e.rawAttrsMap[a])}var s=n||{},c=s.lazy,l=s.number,u=s.trim,f=!c&&"range"!==r,d=c?"change":"range"===r?"__r":"input",p="$event.target.value";u&&(p="$event.target.value.trim()"),l&&(p="_n("+p+")");var v=vo(t,p);f&&(v="if($event.target.composing)return;"+v),to(e,"value","("+t+")"),ao(e,d,v,null,!0),(u||l)&&ao(e,"blur","$forceUpdate()")}(e,r,o);else{if(!H.isReservedTag(i))return po(e,r,o),!1;Kr("<"+e.tag+' v-model="'+r+"\">: v-model is not supported on this element type. If you are working with contenteditable, it's recommended to wrap a library dedicated for that purpose inside a custom component.",e.rawAttrsMap["v-model"])}return!0},text:function(e,t){t.value&&to(e,"textContent","_s("+t.value+")",t)},html:function(e,t){t.value&&to(e,"innerHTML","_s("+t.value+")",t)}},isPreTag:function(e){return"pre"===e},isUnaryTag:Vi,mustUseProp:rr,canBeLeftOpenTag:Bi,isReservedTag:gr,getTagNamespace:yr,staticKeys:(qa=Ja,qa.reduce((function(e,t){return e.concat(t.staticKeys||[])}),[]).join(","))},Wa=$((function(e){return m("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(e?","+e:""))}));var Za=/^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/,Ga=/\([^)]*?\);*$/,Ya=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,Xa={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Qa={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},es=function(e){return"if("+e+")return null;"},ts={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:es("$event.target !== $event.currentTarget"),ctrl:es("!$event.ctrlKey"),shift:es("!$event.shiftKey"),alt:es("!$event.altKey"),meta:es("!$event.metaKey"),left:es("'button' in $event && $event.button !== 0"),middle:es("'button' in $event && $event.button !== 1"),right:es("'button' in $event && $event.button !== 2")};function ns(e,t){var n=t?"nativeOn:":"on:",r="",o="";for(var i in e){var a=rs(e[i]);e[i]&&e[i].dynamic?o+=i+","+a+",":r+='"'+i+'":'+a+","}return r="{"+r.slice(0,-1)+"}",o?n+"_d("+r+",["+o.slice(0,-1)+"])":n+r}function rs(e){if(!e)return"function(){}";if(Array.isArray(e))return"["+e.map((function(e){return rs(e)})).join(",")+"]";var t=Ya.test(e.value),n=Za.test(e.value),r=Ya.test(e.value.replace(Ga,""));if(e.modifiers){var o="",i="",a=[];for(var s in e.modifiers)if(ts[s])i+=ts[s],Xa[s]&&a.push(s);else if("exact"===s){var c=e.modifiers;i+=es(["ctrl","shift","alt","meta"].filter((function(e){return!c[e]})).map((function(e){return"$event."+e+"Key"})).join("||"))}else a.push(s);return a.length&&(o+=function(e){return"if(!$event.type.indexOf('key')&&"+e.map(os).join("&&")+")return null;"}(a)),i&&(o+=i),"function($event){"+o+(t?"return "+e.value+"($event)":n?"return ("+e.value+")($event)":r?"return "+e.value:e.value)+"}"}return t||n?e.value:"function($event){"+(r?"return "+e.value:e.value)+"}"}function os(e){var t=parseInt(e,10);if(t)return"$event.keyCode!=="+t;var n=Xa[e],r=Qa[e];return"_k($event.keyCode,"+JSON.stringify(e)+","+JSON.stringify(n)+",$event.key,"+JSON.stringify(r)+")"}var is={on:function(e,t){t.modifiers&&ue("v-on without argument does not support modifiers."),e.wrapListeners=function(e){return"_g("+e+","+t.value+")"}},bind:function(e,t){e.wrapData=function(n){return"_b("+n+",'"+e.tag+"',"+t.value+","+(t.modifiers&&t.modifiers.prop?"true":"false")+(t.modifiers&&t.modifiers.sync?",true":"")+")"}},cloak:I},as=function(e){this.options=e,this.warn=e.warn||Qr,this.transforms=eo(e.modules,"transformCode"),this.dataGenFns=eo(e.modules,"genData"),this.directives=M(M({},is),e.directives);var t=e.isReservedTag||E;this.maybeComponent=function(e){return!!e.component||!t(e.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function ss(e,t){var n=new as(t);return{render:"with(this){return "+(e?cs(e,n):'_c("div")')+"}",staticRenderFns:n.staticRenderFns}}function cs(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&!e.staticProcessed)return ls(e,t);if(e.once&&!e.onceProcessed)return us(e,t);if(e.for&&!e.forProcessed)return ds(e,t);if(e.if&&!e.ifProcessed)return fs(e,t);if("template"!==e.tag||e.slotTarget||t.pre){if("slot"===e.tag)return function(e,t){var n=e.slotName||'"default"',r=ms(e,t),o="_t("+n+(r?","+r:""),i=e.attrs||e.dynamicAttrs?bs((e.attrs||[]).concat(e.dynamicAttrs||[]).map((function(e){return{name:k(e.name),value:e.value,dynamic:e.dynamic}}))):null,a=e.attrsMap["v-bind"];return!i&&!a||r||(o+=",null"),i&&(o+=","+i),a&&(o+=(i?"":",null")+","+a),o+")"}(e,t);var n;if(e.component)n=function(e,t,n){var r=t.inlineTemplate?null:ms(t,n,!0);return"_c("+e+","+ps(t,n)+(r?","+r:"")+")"}(e.component,e,t);else{var r;(!e.plain||e.pre&&t.maybeComponent(e))&&(r=ps(e,t));var o=e.inlineTemplate?null:ms(e,t,!0);n="_c('"+e.tag+"'"+(r?","+r:"")+(o?","+o:"")+")"}for(var i=0;i<t.transforms.length;i++)n=t.transforms[i](e,n);return n}return ms(e,t)||"void 0"}function ls(e,t){e.staticProcessed=!0;var n=t.pre;return e.pre&&(t.pre=e.pre),t.staticRenderFns.push("with(this){return "+cs(e,t)+"}"),t.pre=n,"_m("+(t.staticRenderFns.length-1)+(e.staticInFor?",true":"")+")"}function us(e,t){if(e.onceProcessed=!0,e.if&&!e.ifProcessed)return fs(e,t);if(e.staticInFor){for(var n="",r=e.parent;r;){if(r.for){n=r.key;break}r=r.parent}return n?"_o("+cs(e,t)+","+t.onceId+++","+n+")":(t.warn("v-once can only be used inside v-for that is keyed. ",e.rawAttrsMap["v-once"]),cs(e,t))}return ls(e,t)}function fs(e,t,n,r){return e.ifProcessed=!0,function e(t,n,r,o){if(!t.length)return o||"_e()";var i=t.shift();return i.exp?"("+i.exp+")?"+a(i.block)+":"+e(t,n,r,o):""+a(i.block);function a(e){return r?r(e,n):e.once?us(e,n):cs(e,n)}}(e.ifConditions.slice(),t,n,r)}function ds(e,t,n,r){var o=e.for,i=e.alias,a=e.iterator1?","+e.iterator1:"",s=e.iterator2?","+e.iterator2:"";return t.maybeComponent(e)&&"slot"!==e.tag&&"template"!==e.tag&&!e.key&&t.warn("<"+e.tag+' v-for="'+i+" in "+o+'">: component lists rendered with v-for should have explicit keys. See https://vuejs.org/guide/list.html#key for more info.',e.rawAttrsMap["v-for"],!0),e.forProcessed=!0,(r||"_l")+"(("+o+"),function("+i+a+s+"){return "+(n||cs)(e,t)+"})"}function ps(e,t){var n="{",r=function(e,t){var n=e.directives;if(n){var r,o,i,a,s="directives:[",c=!1;for(r=0,o=n.length;r<o;r++){i=n[r],a=!0;var l=t.directives[i.name];l&&(a=!!l(e,i,t.warn)),a&&(c=!0,s+='{name:"'+i.name+'",rawName:"'+i.rawName+'"'+(i.value?",value:("+i.value+"),expression:"+JSON.stringify(i.value):"")+(i.arg?",arg:"+(i.isDynamicArg?i.arg:'"'+i.arg+'"'):"")+(i.modifiers?",modifiers:"+JSON.stringify(i.modifiers):"")+"},")}return c?s.slice(0,-1)+"]":void 0}}(e,t);r&&(n+=r+","),e.key&&(n+="key:"+e.key+","),e.ref&&(n+="ref:"+e.ref+","),e.refInFor&&(n+="refInFor:true,"),e.pre&&(n+="pre:true,"),e.component&&(n+='tag:"'+e.tag+'",');for(var o=0;o<t.dataGenFns.length;o++)n+=t.dataGenFns[o](e);if(e.attrs&&(n+="attrs:"+bs(e.attrs)+","),e.props&&(n+="domProps:"+bs(e.props)+","),e.events&&(n+=ns(e.events,!1)+","),e.nativeEvents&&(n+=ns(e.nativeEvents,!0)+","),e.slotTarget&&!e.slotScope&&(n+="slot:"+e.slotTarget+","),e.scopedSlots&&(n+=function(e,t,n){var r=e.for||Object.keys(t).some((function(e){var n=t[e];return n.slotTargetDynamic||n.if||n.for||vs(n)})),o=!!e.if;if(!r)for(var i=e.parent;i;){if(i.slotScope&&"_empty_"!==i.slotScope||i.for){r=!0;break}i.if&&(o=!0),i=i.parent}var a=Object.keys(t).map((function(e){return hs(t[e],n)})).join(",");return"scopedSlots:_u(["+a+"]"+(r?",null,true":"")+(!r&&o?",null,false,"+function(e){for(var t=5381,n=e.length;n;)t=33*t^e.charCodeAt(--n);return t>>>0}(a):"")+")"}(e,e.scopedSlots,t)+","),e.model&&(n+="model:{value:"+e.model.value+",callback:"+e.model.callback+",expression:"+e.model.expression+"},"),e.inlineTemplate){var i=function(e,t){var n=e.children[0];if(1===e.children.length&&1===n.type||t.warn("Inline-template components must have exactly one child element.",{start:e.start}),n&&1===n.type){var r=ss(n,t.options);return"inlineTemplate:{render:function(){"+r.render+"},staticRenderFns:["+r.staticRenderFns.map((function(e){return"function(){"+e+"}"})).join(",")+"]}"}}(e,t);i&&(n+=i+",")}return n=n.replace(/,$/,"")+"}",e.dynamicAttrs&&(n="_b("+n+',"'+e.tag+'",'+bs(e.dynamicAttrs)+")"),e.wrapData&&(n=e.wrapData(n)),e.wrapListeners&&(n=e.wrapListeners(n)),n}function vs(e){return 1===e.type&&("slot"===e.tag||e.children.some(vs))}function hs(e,t){var n=e.attrsMap["slot-scope"];if(e.if&&!e.ifProcessed&&!n)return fs(e,t,hs,"null");if(e.for&&!e.forProcessed)return ds(e,t,hs);var r="_empty_"===e.slotScope?"":String(e.slotScope),o="function("+r+"){return "+("template"===e.tag?e.if&&n?"("+e.if+")?"+(ms(e,t)||"undefined")+":undefined":ms(e,t)||"undefined":cs(e,t))+"}",i=r?"":",proxy:true";return"{key:"+(e.slotTarget||'"default"')+",fn:"+o+i+"}"}function ms(e,t,n,r,o){var i=e.children;if(i.length){var a=i[0];if(1===i.length&&a.for&&"template"!==a.tag&&"slot"!==a.tag){var s=n?t.maybeComponent(a)?",1":",0":"";return""+(r||cs)(a,t)+s}var c=n?function(e,t){for(var n=0,r=0;r<e.length;r++){var o=e[r];if(1===o.type){if(gs(o)||o.ifConditions&&o.ifConditions.some((function(e){return gs(e.block)}))){n=2;break}(t(o)||o.ifConditions&&o.ifConditions.some((function(e){return t(e.block)})))&&(n=1)}}return n}(i,t.maybeComponent):0,l=o||ys;return"["+i.map((function(e){return l(e,t)})).join(",")+"]"+(c?","+c:"")}}function gs(e){return void 0!==e.for||"template"===e.tag||"slot"===e.tag}function ys(e,t){return 1===e.type?cs(e,t):3===e.type&&e.isComment?function(e){return"_e("+JSON.stringify(e.text)+")"}(e):"_v("+(2===(n=e).type?n.expression:_s(JSON.stringify(n.text)))+")";var n}function bs(e){for(var t="",n="",r=0;r<e.length;r++){var o=e[r],i=_s(o.value);o.dynamic?n+=o.name+","+i+",":t+='"'+o.name+'":'+i+","}return t="{"+t.slice(0,-1)+"}",n?"_d("+t+",["+n.slice(0,-1)+"])":t}function _s(e){return e.replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}var ws=new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b")+"\\b"),$s=new RegExp("\\b"+"delete,typeof,void".split(",").join("\\s*\\([^\\)]*\\)|\\b")+"\\s*\\([^\\)]*\\)"),xs=/'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g;function ks(e,t,n,r){var o=e.replace(xs,""),i=o.match($s);i&&"$"!==o.charAt(i.index-1)&&n('avoid using JavaScript unary operator as property name: "'+i[0]+'" in expression '+t.trim(),r),Ss(e,t,n,r)}function As(e,t,n,r){Ss(e.for||"",t,n,r),Cs(e.alias,"v-for alias",t,n,r),Cs(e.iterator1,"v-for iterator",t,n,r),Cs(e.iterator2,"v-for iterator",t,n,r)}function Cs(e,t,n,r,o){if("string"==typeof e)try{new Function("var "+e+"=_")}catch(i){r("invalid "+t+' "'+e+'" in expression: '+n.trim(),o)}}function Ss(e,t,n,r){try{new Function("return "+e)}catch(i){var o=e.replace(xs,"").match(ws);n(o?'avoid using JavaScript keyword as property name: "'+o[0]+'"\n Raw expression: '+t.trim():"invalid expression: "+i.message+" in\n\n "+e+"\n\n Raw expression: "+t.trim()+"\n",r)}}function Os(e,t,n,r){try{new Function(e,"")}catch(o){n("invalid function parameter expression: "+o.message+" in\n\n "+e+"\n\n Raw expression: "+t.trim()+"\n",r)}}function Ts(e,t){var n="";if(t>0)for(;1&t&&(n+=e),!((t>>>=1)<=0);)e+=e;return n}function Ms(e,t){try{return new Function(e)}catch(n){return t.push({err:n,code:e}),I}}function js(e){var t=Object.create(null);return function(n,r,o){var i=(r=M({},r)).warn||ue;delete r.warn;try{new Function("return 1")}catch(e){e.toString().match(/unsafe-eval|CSP/)&&i("It seems you are using the standalone build of Vue.js in an environment with Content Security Policy that prohibits unsafe-eval. The template compiler cannot work in this environment. Consider relaxing the policy to allow unsafe-eval or pre-compiling your templates into render functions.")}var a=r.delimiters?String(r.delimiters)+n:n;if(t[a])return t[a];var s=e(n,r);s.errors&&s.errors.length&&(r.outputSourceRange?s.errors.forEach((function(e){i("Error compiling template:\n\n"+e.msg+"\n\n"+function(e,t,n){void 0===t&&(t=0),void 0===n&&(n=e.length);for(var r=e.split(/\r?\n/),o=0,i=[],a=0;a<r.length;a++)if((o+=r[a].length+1)>=t){for(var s=a-2;s<=a+2||n>o;s++)if(!(s<0||s>=r.length)){i.push(""+(s+1)+Ts(" ",3-String(s+1).length)+"| "+r[s]);var c=r[s].length;if(s===a){var l=t-(o-c)+1,u=n>o?c-l:n-t;i.push(" | "+Ts(" ",l)+Ts("^",u))}else if(s>a){if(n>o){var f=Math.min(n-o,c);i.push(" | "+Ts("^",f))}o+=c+1}}break}return i.join("\n")}(n,e.start,e.end),o)})):i("Error compiling template:\n\n"+n+"\n\n"+s.errors.map((function(e){return"- "+e})).join("\n")+"\n",o)),s.tips&&s.tips.length&&(r.outputSourceRange?s.tips.forEach((function(e){return fe(e.msg,o)})):s.tips.forEach((function(e){return fe(e,o)})));var c={},l=[];return c.render=Ms(s.render,l),c.staticRenderFns=s.staticRenderFns.map((function(e){return Ms(e,l)})),s.errors&&s.errors.length||!l.length||i("Failed to generate render function:\n\n"+l.map((function(e){var t=e.err,n=e.code;return t.toString()+" in\n\n"+n+"\n"})).join("\n"),o),t[a]=c}}var Is,Es,Ns=(Is=function(e,t){var n=function(e,t){la=t.warn||Qr,va=t.isPreTag||E,ha=t.mustUseProp||E,ma=t.getTagNamespace||E;var n=t.isReservedTag||E;ga=function(e){return!!e.component||!n(e.tag)},fa=eo(t.modules,"transformNode"),da=eo(t.modules,"preTransformNode"),pa=eo(t.modules,"postTransformNode"),ua=t.delimiters;var r,o,i=[],a=!1!==t.preserveWhitespace,s=t.whitespace,c=!1,l=!1,u=!1;function f(e,t){u||(u=!0,la(e,t))}function d(e){if(p(e),c||e.processed||(e=Ea(e,t)),i.length||e===r||(r.if&&(e.elseif||e.else)?(v(e),Da(r,{exp:e.elseif,block:e})):f("Component template should contain exactly one root element. If you are using v-if on multiple elements, use v-else-if to chain them instead.",{start:e.start})),o&&!e.forbidden)if(e.elseif||e.else)a=e,(s=function(e){for(var t=e.length;t--;){if(1===e[t].type)return e[t];" "!==e[t].text&&la('text "'+e[t].text.trim()+'" between v-if and v-else(-if) will be ignored.',e[t]),e.pop()}}(o.children))&&s.if?Da(s,{exp:a.elseif,block:a}):la("v-"+(a.elseif?'else-if="'+a.elseif+'"':"else")+" used on element <"+a.tag+"> without corresponding v-if.",a.rawAttrsMap[a.elseif?"v-else-if":"v-else"]);else{if(e.slotScope){var n=e.slotTarget||'"default"';(o.scopedSlots||(o.scopedSlots={}))[n]=e}o.children.push(e),e.parent=o}var a,s;e.children=e.children.filter((function(e){return!e.slotScope})),p(e),e.pre&&(c=!1),va(e.tag)&&(l=!1);for(var u=0;u<pa.length;u++)pa[u](e,t)}function p(e){if(!l)for(var t;(t=e.children[e.children.length-1])&&3===t.type&&" "===t.text;)e.children.pop()}function v(e){"slot"!==e.tag&&"template"!==e.tag||f("Cannot use <"+e.tag+"> as component root element because it may contain multiple nodes.",{start:e.start}),e.attrsMap.hasOwnProperty("v-for")&&f("Cannot use v-for on stateful component root element because it renders multiple elements.",e.rawAttrsMap["v-for"])}return function(e,t){for(var n,r,o=[],i=t.expectHTML,a=t.isUnaryTag||E,s=t.canBeLeftOpenTag||E,c=0;e;){if(n=e,r&&ta(r)){var l=0,u=r.toLowerCase(),f=na[u]||(na[u]=new RegExp("([\\s\\S]*?)(</"+u+"[^>]*>)","i")),d=e.replace(f,(function(e,n,r){return l=r.length,ta(u)||"noscript"===u||(n=n.replace(/<!\--([\s\S]*?)-->/g,"$1").replace(/<!\[CDATA\[([\s\S]*?)]]>/g,"$1")),sa(u,n)&&(n=n.slice(1)),t.chars&&t.chars(n),""}));c+=e.length-d.length,e=d,C(u,c-l,c)}else{var p=e.indexOf("<");if(0===p){if(Qi.test(e)){var v=e.indexOf("--\x3e");if(v>=0){t.shouldKeepComment&&t.comment(e.substring(4,v),c,c+v+3),x(v+3);continue}}if(ea.test(e)){var h=e.indexOf("]>");if(h>=0){x(h+2);continue}}var m=e.match(Xi);if(m){x(m[0].length);continue}var g=e.match(Yi);if(g){var y=c;x(g[0].length),C(g[1],y,c);continue}var b=k();if(b){A(b),sa(b.tagName,e)&&x(1);continue}}var _=void 0,w=void 0,$=void 0;if(p>=0){for(w=e.slice(p);!(Yi.test(w)||Zi.test(w)||Qi.test(w)||ea.test(w)||($=w.indexOf("<",1))<0);)p+=$,w=e.slice(p);_=e.substring(0,p)}p<0&&(_=e),_&&x(_.length),t.chars&&_&&t.chars(_,c-_.length,c)}if(e===n){t.chars&&t.chars(e),!o.length&&t.warn&&t.warn('Mal-formatted tag at end of template: "'+e+'"',{start:c+e.length});break}}function x(t){c+=t,e=e.substring(t)}function k(){var t=e.match(Zi);if(t){var n,r,o={tagName:t[1],attrs:[],start:c};for(x(t[0].length);!(n=e.match(Gi))&&(r=e.match(Ji)||e.match(qi));)r.start=c,x(r[0].length),r.end=c,o.attrs.push(r);if(n)return o.unarySlash=n[1],x(n[0].length),o.end=c,o}}function A(e){var n=e.tagName,c=e.unarySlash;i&&("p"===r&&zi(n)&&C(r),s(n)&&r===n&&C(n));for(var l=a(n)||!!c,u=e.attrs.length,f=new Array(u),d=0;d<u;d++){var p=e.attrs[d],v=p[3]||p[4]||p[5]||"",h="a"===n&&"href"===p[1]?t.shouldDecodeNewlinesForHref:t.shouldDecodeNewlines;f[d]={name:p[1],value:ca(v,h)},t.outputSourceRange&&(f[d].start=p.start+p[0].match(/^\s*/).length,f[d].end=p.end)}l||(o.push({tag:n,lowerCasedTag:n.toLowerCase(),attrs:f,start:e.start,end:e.end}),r=n),t.start&&t.start(n,f,l,e.start,e.end)}function C(e,n,i){var a,s;if(null==n&&(n=c),null==i&&(i=c),e)for(s=e.toLowerCase(),a=o.length-1;a>=0&&o[a].lowerCasedTag!==s;a--);else a=0;if(a>=0){for(var l=o.length-1;l>=a;l--)(l>a||!e&&t.warn)&&t.warn("tag <"+o[l].tag+"> has no matching end tag.",{start:o[l].start,end:o[l].end}),t.end&&t.end(o[l].tag,n,i);o.length=a,r=a&&o[a-1].tag}else"br"===s?t.start&&t.start(e,[],!0,n,i):"p"===s&&(t.start&&t.start(e,[],!1,n,i),t.end&&t.end(e,n,i))}C()}(e,{warn:la,expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,canBeLeftOpenTag:t.canBeLeftOpenTag,shouldDecodeNewlines:t.shouldDecodeNewlines,shouldDecodeNewlinesForHref:t.shouldDecodeNewlinesForHref,shouldKeepComment:t.comments,outputSourceRange:t.outputSourceRange,start:function(e,n,a,s,u){var f=o&&o.ns||ma(e);Y&&"svg"===f&&(n=function(e){for(var t=[],n=0;n<e.length;n++){var r=e[n];Ra.test(r.name)||(r.name=r.name.replace(Ha,""),t.push(r))}return t}(n));var p,h=Ia(e,n,o);f&&(h.ns=f),t.outputSourceRange&&(h.start=s,h.end=u,h.rawAttrsMap=h.attrsList.reduce((function(e,t){return e[t.name]=t,e}),{})),n.forEach((function(e){Ma.test(e.name)&&la("Invalid dynamic argument expression: attribute names cannot contain spaces, quotes, <, >, / or =.",{start:e.start+e.name.indexOf("["),end:e.start+e.name.length})})),"style"!==(p=h).tag&&("script"!==p.tag||p.attrsMap.type&&"text/javascript"!==p.attrsMap.type)||ie()||(h.forbidden=!0,la("Templates should only be responsible for mapping the state to the UI. Avoid placing tags with side-effects in your templates, such as <"+e+">, as they will not be parsed.",{start:h.start}));for(var m=0;m<da.length;m++)h=da[m](h,t)||h;c||(function(e){null!=lo(e,"v-pre")&&(e.pre=!0)}(h),h.pre&&(c=!0)),va(h.tag)&&(l=!0),c?function(e){var t=e.attrsList,n=t.length;if(n)for(var r=e.attrs=new Array(n),o=0;o<n;o++)r[o]={name:t[o].name,value:JSON.stringify(t[o].value)},null!=t[o].start&&(r[o].start=t[o].start,r[o].end=t[o].end);else e.pre||(e.plain=!0)}(h):h.processed||(Na(h),function(e){var t=lo(e,"v-if");if(t)e.if=t,Da(e,{exp:t,block:e});else{null!=lo(e,"v-else")&&(e.else=!0);var n=lo(e,"v-else-if");n&&(e.elseif=n)}}(h),function(e){null!=lo(e,"v-once")&&(e.once=!0)}(h)),r||v(r=h),a?d(h):(o=h,i.push(h))},end:function(e,n,r){var a=i[i.length-1];i.length-=1,o=i[i.length-1],t.outputSourceRange&&(a.end=r),d(a)},chars:function(n,r,i){if(o){if(!Y||"textarea"!==o.tag||o.attrsMap.placeholder!==n){var u,d,p,v=o.children;(n=l||n.trim()?"script"===(u=o).tag||"style"===u.tag?n:ja(n):v.length?s?"condense"===s&&Oa.test(n)?"":" ":a?" ":"":"")&&(l||"condense"!==s||(n=n.replace(Ta," ")),!c&&" "!==n&&(d=Fi(n,ua))?p={type:2,expression:d.expression,tokens:d.tokens,text:n}:" "===n&&v.length&&" "===v[v.length-1].text||(p={type:3,text:n}),p&&(t.outputSourceRange&&(p.start=r,p.end=i),v.push(p)))}}else n===e?f("Component template requires a root element, rather than just text.",{start:r}):(n=n.trim())&&f('text "'+n+'" outside root element will be ignored.',{start:r})},comment:function(e,n,r){if(o){var i={type:3,text:e,isComment:!0};t.outputSourceRange&&(i.start=n,i.end=r),o.children.push(i)}}}),r}(e.trim(),t);!1!==t.optimize&&function(e,t){e&&(Ba=Wa(t.staticKeys||""),za=t.isReservedTag||E,function e(t){if(t.static=function(e){return 2!==e.type&&(3===e.type||!(!e.pre&&(e.hasBindings||e.if||e.for||g(e.tag)||!za(e.tag)||function(e){for(;e.parent;){if("template"!==(e=e.parent).tag)return!1;if(e.for)return!0}return!1}(e)||!Object.keys(e).every(Ba))))}(t),1===t.type){if(!za(t.tag)&&"slot"!==t.tag&&null==t.attrsMap["inline-template"])return;for(var n=0,r=t.children.length;n<r;n++){var o=t.children[n];e(o),o.static||(t.static=!1)}if(t.ifConditions)for(var i=1,a=t.ifConditions.length;i<a;i++){var s=t.ifConditions[i].block;e(s),s.static||(t.static=!1)}}}(e),function e(t,n){if(1===t.type){if((t.static||t.once)&&(t.staticInFor=n),t.static&&t.children.length&&(1!==t.children.length||3!==t.children[0].type))return void(t.staticRoot=!0);if(t.staticRoot=!1,t.children)for(var r=0,o=t.children.length;r<o;r++)e(t.children[r],n||!!t.for);if(t.ifConditions)for(var i=1,a=t.ifConditions.length;i<a;i++)e(t.ifConditions[i].block,n)}}(e,!1))}(n,t);var r=ss(n,t);return{ast:n,render:r.render,staticRenderFns:r.staticRenderFns}},function(e){function t(t,n){var r=Object.create(e),o=[],i=[],a=function(e,t,n){(n?i:o).push(e)};if(n){if(n.outputSourceRange){var s=t.match(/^\s*/)[0].length;a=function(e,t,n){var r={msg:e};t&&(null!=t.start&&(r.start=t.start+s),null!=t.end&&(r.end=t.end+s)),(n?i:o).push(r)}}for(var c in n.modules&&(r.modules=(e.modules||[]).concat(n.modules)),n.directives&&(r.directives=M(Object.create(e.directives||null),n.directives)),n)"modules"!==c&&"directives"!==c&&(r[c]=n[c])}r.warn=a;var l=Is(t.trim(),r);return function(e,t){e&&function e(t,n){if(1===t.type){for(var r in t.attrsMap)if(ba.test(r)){var o=t.attrsMap[r];if(o){var i=t.rawAttrsMap[r];"v-for"===r?As(t,'v-for="'+o+'"',n,i):"v-slot"===r||"#"===r[0]?Os(o,r+'="'+o+'"',n,i):ya.test(r)?ks(o,r+'="'+o+'"',n,i):Ss(o,r+'="'+o+'"',n,i)}}if(t.children)for(var a=0;a<t.children.length;a++)e(t.children[a],n)}else 2===t.type&&Ss(t.expression,t.text,n,t)}(e,t)}(l.ast,a),l.errors=o,l.tips=i,l}return{compile:t,compileToFunctions:js(t)}})(Ka),Ds=(Ns.compile,Ns.compileToFunctions);function Ls(e){return(Es=Es||document.createElement("div")).innerHTML=e?'<a href="\n"/>':'<div a="\n"/>',Es.innerHTML.indexOf(" ")>0}var Ps=!!K&&Ls(!1),Fs=!!K&&Ls(!0),Rs=$((function(e){var t=wr(e);return t&&t.innerHTML})),Hs=Wn.prototype.$mount;return Wn.prototype.$mount=function(e,t){if((e=e&&wr(e))===document.body||e===document.documentElement)return ue("Do not mount Vue to <html> or <body> - mount to normal elements instead."),this;var n=this.$options;if(!n.render){var r=n.template;if(r)if("string"==typeof r)"#"===r.charAt(0)&&((r=Rs(r))||ue("Template element not found or is empty: "+n.template,this));else{if(!r.nodeType)return ue("invalid template option:"+r,this),this;r=r.innerHTML}else e&&(r=function(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement("div");return t.appendChild(e.cloneNode(!0)),t.innerHTML}(e));if(r){H.performance&&at&&at("compile");var o=Ds(r,{outputSourceRange:!0,shouldDecodeNewlines:Ps,shouldDecodeNewlinesForHref:Fs,delimiters:n.delimiters,comments:n.comments},this),i=o.render,a=o.staticRenderFns;n.render=i,n.staticRenderFns=a,H.performance&&at&&(at("compile end"),st("vue "+this._name+" compile","compile","compile end"))}}return Hs.call(this,e,t)},Wn.compile=Ds,Wn},e.exports=r()}).call(this,n(4),n(15).setImmediate)},,,,,,,function(e,t,n){"use strict";n.r(t);var r=n(6),o=n.n(r);n(14);const i=new URL(window.location.href).searchParams.get("page");if(!i)throw"Need page url arg";const a=window[i],s=a.settings,c=a.sections;function l(e,t){Object.keys(e).forEach(n=>{e[n]=t})}new o.a({el:"#nextgenthemes-vue",data:{errors:[],isSaving:!1,refreshAfterSave:!1,sectionsDisplayed:function(){const e={};return Object.keys(c).forEach(t=>{e[t]="debug"!==t}),e}(),message:"",vm:a.options},methods:{checkForError(){this.name||this.errors.push("Name required.")},saveOptions(){this.isSaving=!0,window.jQuery.ajax({url:a.rest_url+"/save",method:"POST",data:this.vm,beforeSend(e){e.setRequestHeader("X-WP-Nonce",a.nonce)},success:()=>{this.message="Options saved",setTimeout(()=>this.message="",1e3)},error:e=>{this.message=e.responseText,this.refreshAfterSave=!1},complete:()=>{this.isSaving=!1,this.refreshAfterSave&&(this.refreshAfterSave=!1,window.location.reload())}})},resetOptions(e="all"){"all"===e?Object.entries(s).forEach(([e,t])=>{this.vm[e]=t.default}):Object.entries(s).forEach(([t,n])=>{e===n.tag&&(this.vm[t]=n.default)}),this.saveOptions()},licenseAPI(e,t,n){this.isSaving=!0,window.jQuery.ajax({url:"https://nextgenthemes.com",method:"POST",crossDomain:!0,data:{edd_action:e+"_license",license:this.vm[n],item_id:t,url:a.home_url},success:e=>{this.message="License API call saved",setTimeout(()=>this.message="",1e3)},error:e=>this.message=e.responseText,complete:()=>this.isSaving=!1})},licenseAPI_native(e,t,n){const r=new XMLHttpRequest;r.onreadystatechange=function(){if(console.log("xhttp.readyState",r.readyState),console.log("xhttp.status",r.status),4===r.readyState&&200===r.status){const e=JSON.parse(r.responseText);console.log("slData",e)}};const o={edd_action:e+"_license",license:this.vm[n],item_id:t,url:a.home_url};r.open("POST","https://nextgenthemes.com",!0),r.setRequestHeader("Content-type","application/json; charset=utf-8"),r.setRequestHeader("Access-Control-Allow-Origin",a.home_url);let i="";for(const e in o)i+=e+"="+a[e]+"&";i=i.substring(0,i.length-1),r.send(i)},showSection(e){l(this.sectionsDisplayed,!1),this.sectionsDisplayed[e]=!0},showAllSectionsButDebug(){l(this.sectionsDisplayed,!0),this.sectionsDisplayed.debug=!1},uploadImage(e){const t=this,n=window.wp.media({title:"Upload Image",multiple:!1}).open().on("select",(function(){const r=n.state().get("selection").first().toJSON().id;t.vm[e]=r}))},action(e,t){this.vm.action=JSON.stringify({action:e,product:t}),this.refreshAfterSave=!0,this.saveOptions()}}})},function(e,t,n){},function(e,t,n){(function(e){var r=void 0!==e&&e||"undefined"!=typeof self&&self||window,o=Function.prototype.apply;function i(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new i(o.call(setTimeout,r,arguments),clearTimeout)},t.setInterval=function(){return new i(o.call(setInterval,r,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(r,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n(16),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n(4))},function(e,t,n){(function(e,t){!function(e,n){"use strict";if(!e.setImmediate){var r,o,i,a,s,c=1,l={},u=!1,f=e.document,d=Object.getPrototypeOf&&Object.getPrototypeOf(e);d=d&&d.setTimeout?d:e,"[object process]"==={}.toString.call(e.process)?r=function(e){t.nextTick((function(){v(e)}))}:function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?(a="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(a)&&v(+t.data.slice(a.length))},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),r=function(t){e.postMessage(a+t,"*")}):e.MessageChannel?((i=new MessageChannel).port1.onmessage=function(e){v(e.data)},r=function(e){i.port2.postMessage(e)}):f&&"onreadystatechange"in f.createElement("script")?(o=f.documentElement,r=function(e){var t=f.createElement("script");t.onreadystatechange=function(){v(e),t.onreadystatechange=null,o.removeChild(t),t=null},o.appendChild(t)}):r=function(e){setTimeout(v,0,e)},d.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n<t.length;n++)t[n]=arguments[n+1];var o={callback:e,args:t};return l[c]=o,r(c),c++},d.clearImmediate=p}function p(e){delete l[e]}function v(e){if(u)setTimeout(v,0,e);else{var t=l[e];if(t){u=!0;try{!function(e){var t=e.callback,n=e.args;switch(n.length){case 0:t();break;case 1:t(n[0]);break;case 2:t(n[0],n[1]);break;case 3:t(n[0],n[1],n[2]);break;default:t.apply(void 0,n)}}(t)}finally{p(e),u=!1}}}}}("undefined"==typeof self?void 0===e?this:e:self)}).call(this,n(4),n(17))},function(e,t){var n,r,o=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(e){n=i}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var c,l=[],u=!1,f=-1;function d(){u&&c&&(u=!1,c.length?l=c.concat(l):f=-1,l.length&&p())}function p(){if(!u){var e=s(d);u=!0;for(var t=l.length;t;){for(c=l,l=[];++f<t;)c&&c[f].run();f=-1,t=l.length}c=null,u=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===a||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(e);try{r(e)}catch(t){try{return r.call(null,e)}catch(t){return r.call(this,e)}}}(e)}}function v(e,t){this.fun=e,this.array=t}function h(){}o.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];l.push(new v(e,t)),1!==l.length||u||s(p)},v.prototype.run=function(){this.fun.apply(null,this.array)},o.title="browser",o.browser=!0,o.env={},o.argv=[],o.version="",o.versions={},o.on=h,o.addListener=h,o.once=h,o.off=h,o.removeListener=h,o.removeAllListeners=h,o.emit=h,o.prependListener=h,o.prependOnceListener=h,o.listeners=function(e){return[]},o.binding=function(e){throw new Error("process.binding is not supported")},o.cwd=function(){return"/"},o.chdir=function(e){throw new Error("process.chdir is not supported")},o.umask=function(){return 0}}]);
|
build/main.asset.php
CHANGED
@@ -1 +1 @@
|
|
1 |
-
<?php return array('dependencies' => array('wp-polyfill'), 'version' => '
|
1 |
+
<?php return array('dependencies' => array('wp-polyfill'), 'version' => '7dec01de774aca079a9a8464507f7763');
|
build/main.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
!function(e){var t={};function r(o){if(t[o])return t[o].exports;var n=t[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,r),n.l=!0,n.exports}r.m=e,r.c=t,r.d=function(e,t,o){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(o,n,function(t){return e[t]}.bind(null,n));return o},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=7)}({7:function(e,t,r){"use strict";r.r(t),r(8);const o=document.querySelectorAll.bind(document),n=window.jQuery;function i(){o(".arve p, .arve .video-wrap, .arve .fluid-width-video-wrapper, .arve .fluid-vids").forEach(e=>{u(e)}),o(".arve br").forEach(e=>{e.remove()}),o(".arve-iframe, .arve-video").forEach(e=>{e.removeAttribute("width"),e.removeAttribute("height"),e.removeAttribute("style")}),o(".wp-block-embed").forEach(e=>{if(e.querySelector(".arve")){e.classList.remove("wp-embed-aspect-16-9","wp-has-aspect-ratio");const t=e.querySelector(".wp-block-embed__wrapper");t&&u(t)}})}function u(e){const t=e.parentNode;for(;e.firstChild;)t.insertBefore(e.firstChild,e);t.removeChild(e)}"html"!==document.documentElement.id&&(document.documentElement.id?document.body.id||(document.body.id="html"):document.documentElement.id="html"),i(),document.addEventListener("DOMContentLoaded",()=>{setTimeout(()=>{i()},1)}),n&&void 0!==n.fn.fitVids&&n(document).ready(()=>{setTimeout(()=>{i()},1)})},8:function(e,t,r){}});
|
1 |
+
!function(e){var t={};function r(o){if(t[o])return t[o].exports;var n=t[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,r),n.l=!0,n.exports}r.m=e,r.c=t,r.d=function(e,t,o){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(o,n,function(t){return e[t]}.bind(null,n));return o},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=7)}({7:function(e,t,r){"use strict";r.r(t),r(8);const o=document.querySelectorAll.bind(document),n=window.jQuery;function i(){o(".arve p, .arve .video-wrap, .arve .fluid-width-video-wrapper, .arve .fluid-vids").forEach(e=>{u(e)}),o(".ast-oembed-container").forEach(e=>{e.querySelector(".arve")&&u(e)}),o(".arve br").forEach(e=>{e.remove()}),o(".arve-iframe, .arve-video").forEach(e=>{e.removeAttribute("width"),e.removeAttribute("height"),e.removeAttribute("style")}),o(".wp-block-embed").forEach(e=>{if(e.querySelector(".arve")){e.classList.remove("wp-embed-aspect-16-9","wp-has-aspect-ratio");const t=e.querySelector(".wp-block-embed__wrapper");t&&u(t)}})}function u(e){const t=e.parentNode;for(;e.firstChild;)t.insertBefore(e.firstChild,e);t.removeChild(e)}"html"!==document.documentElement.id&&(document.documentElement.id?document.body.id||(document.body.id="html"):document.documentElement.id="html"),i(),document.addEventListener("DOMContentLoaded",()=>{setTimeout(()=>{i()},1)}),n&&void 0!==n.fn.fitVids&&n(document).ready(()=>{setTimeout(()=>{i()},1)})},8:function(e,t,r){}});
|
changelog.md
ADDED
@@ -0,0 +1,1201 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
## Changelog ##
|
3 |
+
|
4 |
+
* [ARVE Pro changelog](https://nextgenthemes.com/plugins/arve-pro/#changelog)
|
5 |
+
* [ARVE Random Videos changelog](https://nextgenthemes.com/plugins/random-video/#changelog)
|
6 |
+
|
7 |
+
### 2021-01-21 9.2.0 ###
|
8 |
+
|
9 |
+
* Fix: Compatibility with Astor Theme.
|
10 |
+
* Improved: Added notes that Shortcode UI is not maintained to the button and readme.
|
11 |
+
* Improved: Classic Tabs, new settings section for upcoming [ARVE sticky Videos](https://nextgenthemes.com/plugins/arve-sticky-videos/).
|
12 |
+
* Improved: Lots of code restructured and improved.
|
13 |
+
|
14 |
+
### 2021-01-03 9.1.3 ###
|
15 |
+
|
16 |
+
* New: Vimeo play button option for ARVE Pro
|
17 |
+
* Improved: Fitvids conflict mitigation
|
18 |
+
|
19 |
+
### 2020-12-24 9.1.2 ###
|
20 |
+
|
21 |
+
* Fix: Missing attribute errors when using `[embed]https://example.com/vid.mp4[/embed]` like shortcodes.
|
22 |
+
|
23 |
+
### 2020-12-24 9.1.1 ###
|
24 |
+
|
25 |
+
* Marry XMAS, bitches.
|
26 |
+
* Fix: Errors related to video shortcode override.
|
27 |
+
|
28 |
+
### 2020-12-23 9.1.0 ###
|
29 |
+
|
30 |
+
* Fix: Correct backwards compatibility for deprecated mode values.
|
31 |
+
* Fix: Expand on click UI in Gutenberg.
|
32 |
+
* New: Wrapper element `.arve-inner` for more custom control over embeds.
|
33 |
+
* Improved: Asset loading and caching.
|
34 |
+
* Improved: More relevant info about addons in the settings sidebar.
|
35 |
+
|
36 |
+
### 2020-12-17 9.0.1 ###
|
37 |
+
|
38 |
+
* Fix: `contentURL` output for html5 video file embeds.
|
39 |
+
|
40 |
+
### 2020-12-14 9.0.0-beta13 ###
|
41 |
+
|
42 |
+
* Fix: When no oembed data is found or input `src` is invalid url use generated `src` in all cases.
|
43 |
+
* Improved: added check for valid url for `src` input.
|
44 |
+
* Improved: 'src mismach' errors will be hidden as they are not critical and should not clutter peoples sites.
|
45 |
+
|
46 |
+
### 2020-12-14 9.0.0-beta12 ###
|
47 |
+
|
48 |
+
* Fix: When deactivating or uninstalling ARVE, it will delete its embeds from the oembed cache.
|
49 |
+
* Improved: Caching system.
|
50 |
+
* Improved: Removed Twitch oembed handler (not provided anymore, still works without it).
|
51 |
+
|
52 |
+
### 2020-12-12 9.0.0-beta11 ###
|
53 |
+
|
54 |
+
* New: Reset buttons for settings sections.
|
55 |
+
* Fix: Issues with error handling #2.
|
56 |
+
* Fix: Hide non critical errors relating to private Vimeo videos.
|
57 |
+
* Fix: Make sure 8.0 settings are moved over with right datatype. Hopefully fixes issues with not being able to save settings.
|
58 |
+
|
59 |
+
### 2020-12-09 9.0.0-beta8 ###
|
60 |
+
|
61 |
+
* New: Transfer settings from version 8.0 to version 9.0. [Sorry](https://api.ipfsbrowser.com/ipfs/get.php?hash=QmTHuTcq4iYsoHYomBwV7Xp3KSuLVT1pAnoWQP5uH78d3A) this was supposed to work with the first 9.0 beta.
|
62 |
+
* Fix: Issues with error handling.
|
63 |
+
|
64 |
+
### 2020-12-02 9.0.0-beta7 ###
|
65 |
+
|
66 |
+
* Fix: YouTube timestamp urls not working with only seconds `t=1234`.
|
67 |
+
|
68 |
+
### 2020-12-01 9.0.0-beta6 ###
|
69 |
+
|
70 |
+
* Fix: Url parameters from settings page not working.
|
71 |
+
* Improved: Do not delete old license options in case people need to downgrade.
|
72 |
+
|
73 |
+
### 2020-11-28 9.0.0-beta5 ###
|
74 |
+
|
75 |
+
This update is very long in the making and I hope it will pay off somehow, hopefully literally. A lot things happened in the code that will not be visible to the end users directly but made the code more modern and easier to maintain.
|
76 |
+
|
77 |
+
[More details on this **mayor** update](https://nextgenthemes.com/improvements-in-arve-9-0-and-arve-pro-5-0/)
|
78 |
+
|
79 |
+
New:
|
80 |
+
|
81 |
+
* Minimum PHP required is now 5.6.
|
82 |
+
* Finally the ARVE Gutenberg block is here! Its not polished yet and there is still work to be done.
|
83 |
+
* Optional admin bar button to quick access settings.
|
84 |
+
* Added Bitchute
|
85 |
+
* `av1mp4` shortcode parameter so serve [AV1](https://en.wikipedia.org/wiki/AV1) encoded files best named .av1.mp4 (to be used together with `mp4` or `webm`)
|
86 |
+
* Settings page overhaul, using my own little settings framework. All addon options can be seen and set (without effect) before actually having the addons installed.
|
87 |
+
* Option to completely disable all SEO data generation in case you want to use Yoast SEO or another plugin for that. Note that ARVE Pro offers more then just SEO for less.
|
88 |
+
|
89 |
+
Fixes:
|
90 |
+
|
91 |
+
* YouTube live links are now working correctly.
|
92 |
+
* TED embed url.
|
93 |
+
* Facebook embeds.
|
94 |
+
* Twitch embeds.
|
95 |
+
|
96 |
+
Improved:
|
97 |
+
|
98 |
+
* Generated iframe src will match what providers send over oembed.
|
99 |
+
* Lots of code improvements that may not be noticeable to users but took a lot of time and will make the plugin more maintainable and easier to extend.
|
100 |
+
* Removed the `lang` shortcode parameter that was only used for TED talks video subtitle display. This is now taken from the `language=x` url query.
|
101 |
+
* Embeds work though WPs oembed system now that comes with a more stable codebase and better caching system for embeds.
|
102 |
+
* Aspect ratios are now auto detected for all providers WP supports through oEmbed.
|
103 |
+
* Aspect ratio field is now auto filled when pasting a iframe embed code into the shortcode UI or Gutenberg UI.
|
104 |
+
* Removed jQuery dependency for frontend JavaScript.
|
105 |
+
* Prevent autoplay of multiple videos, only the first video on pageload will be autoplayed.
|
106 |
+
|
107 |
+
Removed:
|
108 |
+
|
109 |
+
* Hack to support direct embedding of Dropbox videos because it no longer works.
|
110 |
+
* Vimeo only `start` shortcode attribute. Use vimeo urls with `#t=30` at the end for starting time in seconds instead.
|
111 |
+
|
112 |
+
Probably things I forgot about, working on this for ~1 year
|
113 |
+
|
114 |
+
### 2020-10-10 - 8.10.28 ###
|
115 |
+
|
116 |
+
* Tested and marked as compatible with WP 5.5.1
|
117 |
+
|
118 |
+
### 2020-08-02 - 8.10.27 ###
|
119 |
+
|
120 |
+
* Fix: **SORRY!** message about beta testing was **not intended** to show hourly it was intended to show only once per user.
|
121 |
+
* Fix: Link in that messages was also to a 404 page, can it get worse?
|
122 |
+
|
123 |
+
### 2020-07-25 - 8.10.24 ###
|
124 |
+
|
125 |
+
* Fix: `embedURL` SEO output.
|
126 |
+
|
127 |
+
### 2020-05-14 - 8.10.23 ###
|
128 |
+
|
129 |
+
* Improved: Automatically set HTML5 videos that are set to autoplay to also be muted so they may play as browsers no longer allow unmuted autoplay.
|
130 |
+
|
131 |
+
### 2019-11-05 - 8.10.20 ###
|
132 |
+
|
133 |
+
* Big version update with Gutenberg Block is coming [please help testing](https://nextgenthemes.com/plugins/arve/help-testing-the-beta-version/)
|
134 |
+
|
135 |
+
### 2019-10-18 - 8.10.15 ###
|
136 |
+
|
137 |
+
* Fix: Force shortcode args to be array. To prevent issues.
|
138 |
+
|
139 |
+
### 2019-10-09 - 8.10.13 ###
|
140 |
+
|
141 |
+
* Removed outdated link in widget.
|
142 |
+
|
143 |
+
### 2019-10-01 - 8.10.12 ###
|
144 |
+
|
145 |
+
* Improved: Allow for manually srcset with `img_srcset` with the Pro Addon.
|
146 |
+
|
147 |
+
### 2019-08-29 - 8.10.11 ###
|
148 |
+
|
149 |
+
* Removed vendor dir from Git versioning.
|
150 |
+
|
151 |
+
### 2019-08-29 - 8.10.10 ###
|
152 |
+
|
153 |
+
Just a small readme update and checking new release script, making sure everything works and everyone is on the latest stable version.
|
154 |
+
|
155 |
+
### 2019-08-19 - 8.10.8 ###
|
156 |
+
|
157 |
+
* Improved: Switch Youku embeds to https set to default 16:9 aspect ratio.
|
158 |
+
* Improved: added `allow-popups-to-escape-sandbox` to sandbox attribute. This eliminates the need for `sandbox="false"` for Vimeo action links to work. And just in general I think its a good idea.
|
159 |
+
|
160 |
+
### 2019-07-31 - 8.10.6 ###
|
161 |
+
|
162 |
+
* Fix: Vimeo Action links not working correctly in Chrome when Sandbox is enabled. You can fix this by adding `sandbox="false"` to your shortcodes. But the ARVE Pro "disable links" option will no longer work.
|
163 |
+
* Improved: Deprecated `requires_flash` attribute and `Iframe Flash` option. Replaced is the new `sandbox` shortcode attribute.
|
164 |
+
|
165 |
+
### 2019-01-23 - 8.10.4 ###
|
166 |
+
|
167 |
+
* Fix: PHP compatibility lowered to official 5.3 as there was accidentally 5.4+ code used. Make sure you are on PHP 7.3 or at least 5.6 for the upcoming future as WP itself will require 5.6 this year. Its also insecure to run on those outdated versions: https://secure.php.net/supported-versions.php.
|
168 |
+
|
169 |
+
### 2019-01-16 - 8.10.2 ###
|
170 |
+
|
171 |
+
* Fix: Base code to fix titles not showing over thumbnails in recent Pro Addon version.
|
172 |
+
* Improved: Added `allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"` to iframe as per official YouTube embed code.
|
173 |
+
|
174 |
+
### 2018-11-29 - 8.10.1 ###
|
175 |
+
|
176 |
+
* Improved: Display message to remind customers to update ARVE Pro 4.2.0. Auto updates seem to not work again ...
|
177 |
+
|
178 |
+
### 2018-11-27 - 8.10.0 ###
|
179 |
+
|
180 |
+
* Improved: Video max width setting now defaults (if empty) to your themes `$content_width` variable to optimize thumbnail loading in Pro Addon.
|
181 |
+
* Improved: Removed code what should be in the Pro Addon instead. Make sure to update the Pro Addon as well!
|
182 |
+
|
183 |
+
### 2018-11-16 - 8.9.11 ###
|
184 |
+
|
185 |
+
* Fix: Wistia autoplay (mobile browsers sill prevent it, also effects single click lazyload in Pro)
|
186 |
+
|
187 |
+
### 2018-10-19 - 8.9.10 ###
|
188 |
+
|
189 |
+
* Fix: The Gutenberg fix of the last version was not correct in the minified JS.
|
190 |
+
|
191 |
+
### 2018-10-19 - 8.9.9 ###
|
192 |
+
|
193 |
+
* Fix: White space above video in Gutenberg blocks.
|
194 |
+
|
195 |
+
### 2018-10-02 - 8.9.8 ###
|
196 |
+
|
197 |
+
* Updated EDD Plugin update class, this may fix some people having trouble auto updating ARVE Pro
|
198 |
+
* Fix: Licensing page no longer shows plugins wrongly as not installed.
|
199 |
+
|
200 |
+
### 2018-07-22 - 8.9.6 ###
|
201 |
+
|
202 |
+
* New: Option to enable or disable youtube-nocookie.com embeds. It a privacy enhanced feature but it has at least one bug when setting highlighted video boxes they will open the wrong url so in case you need them you have to disable this.
|
203 |
+
|
204 |
+
### 2018-06-07 - 8.9.5 ###
|
205 |
+
|
206 |
+
* Fixed: When pasting embed codes into the Shortcode UI dialog the `src=` will be extracted even when no quotes are used.
|
207 |
+
* Improved: Use youtube-nocookie.com domain again it is GPRP/Privacy friendly. Note the name is confusing as it sets cookies, but only when the user plays the video rather then just when loading the iframe. So its not "no cookies". But you can mention this into your cookie notices when dealing with GPRP.
|
208 |
+
|
209 |
+
### 2018-06-02 - 8.9.4 ###
|
210 |
+
|
211 |
+
* Improved: Try to make autoplay in Chrome possible again. See [New Chrome Autoplay behavior](https://developers.google.com/web/updates/2017/09/autoplay-policy-changes). At the point of writing its not clear if the new iframe attribute makes them just autoplay no matter what. Please report your experiences.
|
212 |
+
|
213 |
+
### 2018-04-29 - 8.9.3 ###
|
214 |
+
|
215 |
+
* Improved: Make overwrite of shortcode possible. Used in new [Random Video Addon](https://nextgenthemes.com/plugins/arve-random-video/)
|
216 |
+
|
217 |
+
### 2018-04-18 - 8.9.2 ###
|
218 |
+
|
219 |
+
* Fix possible "not a string" errors.
|
220 |
+
|
221 |
+
### 2018-04-12 - 8.9.1 ###
|
222 |
+
|
223 |
+
* New: Option to always load assets. Needed when dealing with AJAX and other special cases.
|
224 |
+
|
225 |
+
### 2018-03-16 - 8.9.0 ###
|
226 |
+
|
227 |
+
* Fixed/improved Ustream url detection. Make sure you remove `wmode=transparent` if present and include `html5ui=1` for ustream on the ARVE URL parameters settings tab.
|
228 |
+
|
229 |
+
### 2018-03-13 - 8.8.9 ###
|
230 |
+
|
231 |
+
* Improved licensing debug code.
|
232 |
+
* Added Vimeo PHP API class for upcoming versions and addons.
|
233 |
+
|
234 |
+
### 2018-03-13 - 8.8.8 ###
|
235 |
+
|
236 |
+
* Added code to debug issues with license activations.
|
237 |
+
|
238 |
+
### 2018-03-05 - 8.8.7 ###
|
239 |
+
|
240 |
+
* Fixed a link on the plugins screen (Thanks Hans).
|
241 |
+
|
242 |
+
### 2018-02-25 - 8.8.6 ###
|
243 |
+
|
244 |
+
* Fix: HTML5 videos not working with lightbox in [ARVE PRO](https://nextgenthemes.com/plugins/arve-pro/)
|
245 |
+
|
246 |
+
### 2018-02-25 - 8.8.5 ###
|
247 |
+
|
248 |
+
* Fix: Add default url parameters to youtube playlists. Note they will effect playlist urls like `https://www.youtube.com/playlist?list=PLXYApifkdCACM_ykvnCHeth-vIB6v1XE3` only and not those who also reference the starting video. There is currently a separate parameters option for this but it will be removed in version 9.0.
|
249 |
+
|
250 |
+
### 2018-02-23 - 8.8.4 ###
|
251 |
+
|
252 |
+
* Fix: YouTube playlists where not correctly detected when having a underscore in the id.
|
253 |
+
* Improved: Better explanation of the new disable flash for general iframe option on the settings page.
|
254 |
+
|
255 |
+
### 2018-02-16 - 8.8.3 ###
|
256 |
+
|
257 |
+
* New: Option to disable flash for not listed providers for more secure embeds and make the 'disable links' Pro Addon feature possible for those. See the description on the options page.
|
258 |
+
* Fix: Licensing deactivation did not work.
|
259 |
+
* Improved: Marked some providers as not requiring flash anymore.
|
260 |
+
* Improved: Fixed some links throughout the plugin and readme.
|
261 |
+
* Improved: Some minor code improvements.
|
262 |
+
|
263 |
+
### 2018-02-12 - 8.8.2 ###
|
264 |
+
|
265 |
+
* Fix: Issue with the new Video API class.
|
266 |
+
|
267 |
+
### 2018-02-12 - 8.8.1 ###
|
268 |
+
|
269 |
+
* Fix: `Can’t use function return value in write context`, white screen of deaths type error from the last update.
|
270 |
+
|
271 |
+
### 2018-02-12 - 8.8.0 ###
|
272 |
+
|
273 |
+
**I could really use some positive reviews. It has been over 7 months without a 5 star review.** The top level menu that was complained about a lot has been removed. I am working on a big update that will make ARVE even better with automatic detection of aspect ratios, better caching and lots of improved code.
|
274 |
+
|
275 |
+
* New: Added options fields for Vimeo API used in upcoming addons.
|
276 |
+
* Improved: Removed NextGenThemes top level menu and ads page because to many complaints.
|
277 |
+
* Improved: Moved licensing settings page to 'settings' menu.
|
278 |
+
|
279 |
+
### 2018-02-02 - 8.7.8 ###
|
280 |
+
|
281 |
+
* No longer try to guess and spam autoplay parameters for general iframe embeds.
|
282 |
+
* Fix: Google drive embeds not working.
|
283 |
+
|
284 |
+
### 2018-01-09 - 8.7.7 ###
|
285 |
+
|
286 |
+
* New: `duration` shortcode attribute and dialog entry.
|
287 |
+
* Fixed: Corrected some dead links inside the plugin.
|
288 |
+
* Improved: Added `muted`, `controls` and `loop` to shortcode UI dialog for HTML5 videos.
|
289 |
+
* Improved: Removed video file extension check so any file can be used `[arve mp4="http://example.com/some-file" webm="http://example.com/some-other-file" /]`. Useful for example to embed files hosted on IPFS that do have a cryptic hash instead of a human readable filename.
|
290 |
+
|
291 |
+
### 2017-12-20 - 8.7.6 ###
|
292 |
+
|
293 |
+
* Fix license activation now working correctly.
|
294 |
+
* Corrected link in readme.
|
295 |
+
|
296 |
+
### 2017-12-19 - 8.7.5 ###
|
297 |
+
|
298 |
+
* Maybe fix license activation in some rare cases.
|
299 |
+
|
300 |
+
### 2017-12-17 - 8.7.4 ###
|
301 |
+
|
302 |
+
* Fix: Removed URL validation because it fails with some weird URLs.
|
303 |
+
|
304 |
+
### 2017-12-13 - 8.7.3 ###
|
305 |
+
|
306 |
+
* Updated EDD Plugin Updater class.
|
307 |
+
* Fixed some links in the readme.
|
308 |
+
|
309 |
+
### 2017-08-16 - 8.7.2 ###
|
310 |
+
|
311 |
+
* Fix: Same Video with different start times in lightboxes.
|
312 |
+
|
313 |
+
### 2017-07-12 - 8.7.1 ###
|
314 |
+
|
315 |
+
* Fix: Throw no PHP notice on admin when WP_DEBUG is enabled.
|
316 |
+
* Fix: Fix related to upcoming Pro Addon update and private vimeo videos.
|
317 |
+
|
318 |
+
### 2017-07-10 - 8.7.0 ###
|
319 |
+
|
320 |
+
* Fix: web.facebook.com/... video urls not getting detected
|
321 |
+
|
322 |
+
### 2017-06-17 - 8.6.6 ###
|
323 |
+
|
324 |
+
* Fix: Message dismissal not working.
|
325 |
+
|
326 |
+
### 2017-06-17 - 8.6.5 ###
|
327 |
+
|
328 |
+
* Fix: Added `allow-presentation` to iframe sandbox to fix Chrome 59 not loading iframes. Thanks njs
|
329 |
+
* Improved: Admin message and dashboard ad size reduced, added links to dashboard widget, settings page ad is now sidebar-like on big screens.
|
330 |
+
|
331 |
+
### 2017-06-15 - 8.6.4 ###
|
332 |
+
|
333 |
+
* Fix: Removes a .video-wrap element from ARVE's HTML that is added by a theme and caused videos to be invisible.
|
334 |
+
* Fix: PHP error in some cases.
|
335 |
+
* Improved: If mode is not supported fall back to normal without error message (for now).
|
336 |
+
* Improved: Changed embed URL for Alugha
|
337 |
+
|
338 |
+
### 2017-05-17 - 8.6.3 ###
|
339 |
+
|
340 |
+
* Fixed issue with width and height attributes
|
341 |
+
|
342 |
+
### 2017-05-17 - 8.6.2 ###
|
343 |
+
|
344 |
+
* Fixed license activation issues.
|
345 |
+
|
346 |
+
### 2017-05-10 - 8.6.1 ###
|
347 |
+
|
348 |
+
* Minor code change.
|
349 |
+
|
350 |
+
### 2017-05-10 - 8.6.0 ###
|
351 |
+
|
352 |
+
* New: `controlslist` shortcode attribute and option to control the Chrome HTML5 player `nodownload` is default, it hides the download button on the player.
|
353 |
+
|
354 |
+
### 2017-05-05 - 8.5.2 ###
|
355 |
+
|
356 |
+
* Improved: Embed Liveleak with https. Remove the default parameter.
|
357 |
+
|
358 |
+
### 2017-05-05 - 8.5.1 ###
|
359 |
+
|
360 |
+
* Improved: Mark Liveleak that it not requires flash anymore. This makes the 'disable links' option of the Pro Addon possible. Becomes very handy as Liveleak annoyingly opens new tabs when clicking outside the play button.
|
361 |
+
|
362 |
+
### 2017-05-04 - 8.5.0 ###
|
363 |
+
|
364 |
+
* New: playsinline, and muted attributes for HTML5 video.
|
365 |
+
* Data attributes are no longer prefixed with -arve and various other code improvements.
|
366 |
+
|
367 |
+
### 2017-05-01 - 8.4.2 ###
|
368 |
+
|
369 |
+
* Code improvements for addons.
|
370 |
+
|
371 |
+
### 2017-04-30 - 8.4.1 ###
|
372 |
+
|
373 |
+
* Fix password protected videos on vimeo (sandbox allow-forms)
|
374 |
+
|
375 |
+
### 2017-04-25 - 8.4.0 ###
|
376 |
+
|
377 |
+
* Improved: The 'Take over [video]' option was renamed to 'Use ARVE for HTML5 video embeds' and is now enabled by default. (It never only was the shortcode but also HTML5 video file URLs on their own lines)
|
378 |
+
* New: Support for embedding Dropbox hosted HTML5 video files (mp4, webm, ogv). Needs the 'Use ARVE for HTML5 video embeds' to be activated. (Beta feature)
|
379 |
+
* Fix: YouTube only playlist URLs embedded without https.
|
380 |
+
|
381 |
+
### 2017-04-11 - 8.3.1 ###
|
382 |
+
|
383 |
+
* Fix: Global CSS id was not correctly added.
|
384 |
+
|
385 |
+
### 2017-04-10 - 8.2.5 ###
|
386 |
+
|
387 |
+
* Fix: Some Brightcove URLs were not correctly detected.
|
388 |
+
* Improved: Better automated tests and some minor code enhancements.
|
389 |
+
* Improved: Some texts, new link to the settings page below parameter field.
|
390 |
+
* Improved: How aspect ratio is handled for HTML 5 video. If not set (default) the browser will detect it based on the video file that is embedded.
|
391 |
+
* Improved: Gives the aligned videos a top margin of `0.4em` to try to align them better with text.
|
392 |
+
* Improved: The 'by ARVE' promotion links do now open in a new tab/window.
|
393 |
+
|
394 |
+
### 2017-03-27 - 8.2.4 ###
|
395 |
+
|
396 |
+
* Fixed: YouTube cards generate a youtube-nocookie.com url to a channel when the -nocookie.url is used to embedding. tltr; This is actually a YouTube bug but this is fixed in ARVE now by using the normal YouTube url for embeds. I like the additional 'privacy' it provides by not setting cookies as long as the user not plays a video. But considering this is not the first time YouTube has bugs related to this feature, I switched this back and forth in the past, I am considering just not using it anymore.
|
397 |
+
|
398 |
+
### 2017-03-25 - 8.2.3 ###
|
399 |
+
|
400 |
+
* Fixed: 'Disable links' feature from the Pro Addon was not working.
|
401 |
+
* Some minor code improvements.
|
402 |
+
|
403 |
+
### 2017-03-20 - 8.2.2 ###
|
404 |
+
|
405 |
+
* Moved the ARVE menu below the settings menu (where most plugins are), sorry xberg. I got complaints about global menus and I like to keep the global Nextgenthemes menu but 2 global menus is a bit to much. I have given the Nextgenthemes menu a video icon now. I hope this is a good compromise.
|
406 |
+
* Improved: Finished the German translation.
|
407 |
+
* Improved: Made the ARVE Pro promotion on the settings menu close-able, hopefully less people get offended.
|
408 |
+
|
409 |
+
### 2017-03-20 - 8.2.0 ###
|
410 |
+
|
411 |
+
* Fixed: Plugin action links on installed plugin screen
|
412 |
+
* Fixed: CSS specificity issues by adding a `id="arve"` to the entire document and based all the CSS on `#arve`. This will end a long time battle with themes styles without using bad practices. If you have custom styles overwriting ARVE CSS you may need to increase specificity (or use `!important`).
|
413 |
+
* Improved: styles and scripts and now served minified unless `WP_DEBUG` is set.
|
414 |
+
* Improved: styles are now only loaded (to the bottom) when there is a video on the page.
|
415 |
+
* Improved: Settings title is now 'Advanced Responsive Video Embedder Settings' again rather then just ARVE.
|
416 |
+
|
417 |
+
### 2017-03-12 - 8.1.1 ###
|
418 |
+
|
419 |
+
* Improved: Added ARVE to menu below plugins so it can be easy found.
|
420 |
+
* Improved: Used `wp_add_inline_style` function for inline styles.
|
421 |
+
* Removed some code that is not needed.
|
422 |
+
|
423 |
+
### 2017-03-03 - 8.0.9 ###
|
424 |
+
|
425 |
+
* Fix: Admin page error for messing file.
|
426 |
+
|
427 |
+
### 2017-03-02 - 8.0.8 ###
|
428 |
+
|
429 |
+
* Improved: Updated EDD Plugin Updater class
|
430 |
+
|
431 |
+
### 2017-02-24 - 8.0.7 ###
|
432 |
+
|
433 |
+
* Fix: Options not correctly put in debug-info.
|
434 |
+
* Improved: Make License input fields a bit wider.
|
435 |
+
* Improved: Some small code improvements.
|
436 |
+
|
437 |
+
### 2017-02-12 - 8.0.5 ###
|
438 |
+
|
439 |
+
* Fix: Small size of lightbox when using the [Pro Addon](https://nextgenthemes.com/plugins/arve-pro/).
|
440 |
+
|
441 |
+
### 2017-02-11 - 8.0.4 ###
|
442 |
+
|
443 |
+
* CSS improved
|
444 |
+
* Updated Addon Updater Class
|
445 |
+
|
446 |
+
### 2017-01-03 - 8.0.2 ###
|
447 |
+
|
448 |
+
* Fix: Errors on settings page when Pro Addon is not installed.
|
449 |
+
|
450 |
+
### 2016-12-17 - 8.0.1 ###
|
451 |
+
|
452 |
+
* Fix: `undefined function is_plugin_active()` error caused by some plugins
|
453 |
+
* Improved: Show actual meaningful message if PHP is lower then the required 5.3. Bluehost (oh proud wp.org recommended host) seems to show customers a **wrong** php version in the config and lets them hang on insecure end of life versions.
|
454 |
+
|
455 |
+
### 2016-12-09 - Pro Addon 3.6.8 ###
|
456 |
+
|
457 |
+
* Fix: Wrongly tagged version.
|
458 |
+
|
459 |
+
### 2016-12-07 - Pro Addon 3.6.7 ###
|
460 |
+
|
461 |
+
* Fix: Some thumbnails not loading.
|
462 |
+
|
463 |
+
### 2016-12-07 - 8.0.0 ###
|
464 |
+
|
465 |
+
* Fix: 'Take over [video] shortcode' option not working. (Always acted as on, default is off)
|
466 |
+
* Fix: [video] override putting out a error for not reason.
|
467 |
+
* Improved code: Dropped 2 micro classes in favor for antonymous functions.
|
468 |
+
|
469 |
+
### 2016-12-07 - Pro Addon 3.6.6 ###
|
470 |
+
|
471 |
+
* Improved: Load the CSS always in the `<head>`, this enables to change its CSS with the new CSS customizer in WP 4.7 and may also fix issues with caching plugins.
|
472 |
+
|
473 |
+
### 2016-11-30 - 7.9.23 ###
|
474 |
+
|
475 |
+
* Fix: Ending up with wrong URLs by disabling auto shortening of URLs when pasting them into the shortcode-ui dialog.
|
476 |
+
* Improved: Enable SSL verify for API calls.
|
477 |
+
* Improved: License action return messages.
|
478 |
+
|
479 |
+
### 2016-11-30 - Pro Addon 3.6.4 ###
|
480 |
+
|
481 |
+
* Fix: Autoplay without setting
|
482 |
+
|
483 |
+
### 2016-11-30 - 7.9.21 ###
|
484 |
+
|
485 |
+
* Fix: Fatal error.
|
486 |
+
|
487 |
+
### 2016-11-29 - Pro Addon 3.6.4 ###
|
488 |
+
|
489 |
+
* Improved: Licensing field removed from the pro options tab (now in main plugin). This enables resetting pro options settings without deleting license key.
|
490 |
+
* Fix: Autoplay not applied property.
|
491 |
+
* Fix: HTML5 not autoplaying in lightbox.
|
492 |
+
* Improved: New default option for inview lazyload is 'On iOS, Android and Desktops when no thumbnail is found'.
|
493 |
+
* Improved: New installations will show a message guiding users to activation screen.
|
494 |
+
|
495 |
+
### 2016-11-29 - 7.9.19 ###
|
496 |
+
|
497 |
+
* Fix: 'Embed Video' Button not working with Advanced Custom Fields (Possibly fixed other 3rd party editor plugins compatibility issues as well) Thanks to David Trenear!
|
498 |
+
* Fix: Facebook URL detection for usernames with dots in them.
|
499 |
+
* Fix: Invisible HTML5 Lazyload-lightbox videos
|
500 |
+
* Fix: Shortcode UI script enqueued to early causing JS erros on admin pages.
|
501 |
+
* Improved: Error messages for missing mandatory attributes.
|
502 |
+
* Improved: Moved some code logic of the pro addon out of the main plugin.
|
503 |
+
* New: `disable_flash` parameter mainly for unlisted providers will be treated as general iframe embeds. With set to true this will enable you to use the 'disable_links' feature of the pro plugin.
|
504 |
+
* New: Filters for new cool things coming up
|
505 |
+
* New: License page, relocated options page
|
506 |
+
* New: YouTube URL detection for playlists without starting video `https://www.youtube.com/playlist?list=PL3Esg-ZzbiUmeSKBAQ3ej1hQxDSsmnp-7`
|
507 |
+
* Possible Fix: Videos displayed to small in some Browsers
|
508 |
+
|
509 |
+
### 2016-10-29 - 7.9.8 and Pro Addon 3.3.4 ###
|
510 |
+
|
511 |
+
* Fix: Fix lightbox thumbnail
|
512 |
+
* Improved: CSS
|
513 |
+
|
514 |
+
### 2016-10-28 - Pro Addon 3.3.1 ###
|
515 |
+
|
516 |
+
* Fix: Fix thumbnails being displayed wrong in IE.
|
517 |
+
|
518 |
+
### 2016-10-28 - Pro Addon 3.3.0 ###
|
519 |
+
|
520 |
+
* Fix: Restored broken update notifications and semi auto updates.
|
521 |
+
|
522 |
+
### 2016-10-28 - 7.9.7 ###
|
523 |
+
|
524 |
+
* New: Wistia Support.
|
525 |
+
* Improved: Allow HTML in title attribute.
|
526 |
+
* Improved: Force more CSS Styles.
|
527 |
+
|
528 |
+
### 2016-10-27 - Pro Addon 3.2.9 ###
|
529 |
+
|
530 |
+
* Fix: Twitch API failing (needs Client-ID now)
|
531 |
+
|
532 |
+
### 2016-10-27 - Pro Addon 3.2.8 ###
|
533 |
+
|
534 |
+
* Improved: oembed error message
|
535 |
+
* Improved: Skip srcset function for PHP 5.3 and lower
|
536 |
+
|
537 |
+
### 2016-10-27 - 7.9.6 ###
|
538 |
+
|
539 |
+
* Fix: Thumbnail not correctly applied to <video> tag for self hosted videos.
|
540 |
+
* Improved: CSS for self hosted videos.
|
541 |
+
* Improved: Enabled detection for rubtube and VK and show them as supported providers, even they where supported as general iframe embeds before.
|
542 |
+
|
543 |
+
### 2016-10-25 - Pro Addon 3.2.7 ###
|
544 |
+
|
545 |
+
* Fix: 2 clicks needed to play lazyloaded video on desktops
|
546 |
+
|
547 |
+
### 2016-10-24 - Pro Addon 3.2.5 ###
|
548 |
+
|
549 |
+
* Fix: JavaScript error related to abandoned Script.
|
550 |
+
* Fix: Custom Thumbnails not applied.
|
551 |
+
|
552 |
+
### 2016-10-24 - 7.9.5 ###
|
553 |
+
|
554 |
+
* Fix: Custom Thumbnails not applied.
|
555 |
+
* Fix: Shortcode UI script only loaded if the plugin is active.
|
556 |
+
|
557 |
+
### 2016-10-23 - 7.9.4 and Pro Addon 3.2.3 ###
|
558 |
+
|
559 |
+
* Fix: Multiple issues about the new HTML5 video embedding (still experimental)
|
560 |
+
|
561 |
+
### 2016-10-23 - Pro Addon 3.2.2 ###
|
562 |
+
|
563 |
+
* Fix: 'Disable Links' not working.
|
564 |
+
|
565 |
+
### 2016-10-23 - Pro Addon 3.2.0 ###
|
566 |
+
|
567 |
+
* Fix: Issue with lazyload and AJAX.
|
568 |
+
* Fix: W3TC issue by using yet another lazyload method. Final this time?
|
569 |
+
* Fix: YouTube Thumbnail detection when there are no HD images.
|
570 |
+
* Improved: Code used to cache thumbnails, this may improve improve performance.
|
571 |
+
* Improved: Lots code restructured and improved.
|
572 |
+
* New: New Lazyload mode setting to prevent "two touched needed to play video on mobiles" issue. Its also
|
573 |
+
* New: Facebook thumbnail detection.
|
574 |
+
|
575 |
+
### 2016-10-23 - 7.9.2 ###
|
576 |
+
|
577 |
+
* Fix: Brightcove Autoplay issue.
|
578 |
+
* Fix: Liveleak thumbnail detection issues.
|
579 |
+
* Fix: Parameters not being added.
|
580 |
+
* Fix: Twitch single videos not using https
|
581 |
+
* Fix: Vevo marked to require flash to make it work again.
|
582 |
+
* Improved: Better dialog with better description and links about the shortcake UI plugin.
|
583 |
+
* Improved: Facebook embed method.
|
584 |
+
* Improved: Lots code restructured and improved.
|
585 |
+
* Improved: Parameters are always possible no matter the provider.
|
586 |
+
* Improved: Restructure of the plugin, abandon OOP mostly.
|
587 |
+
* Improved: Revive saving of last setting page tab.
|
588 |
+
* New: "Image Cache Time" setting on the setting page. Thumbnail URLs form the media gallery can now be cached with transients, that may improve performance.
|
589 |
+
* New: Support for self hosted videos (experimental)
|
590 |
+
|
591 |
+
### 2016-10-03 - Pro Addon 2.5.2 ###
|
592 |
+
|
593 |
+
* Fix: Force button styles to make sure themes styles get overwritten.
|
594 |
+
|
595 |
+
### Pro Addon 2.5.1 beta - 2016-09-21 ###
|
596 |
+
|
597 |
+
* New: Thumbnail support for Liveleak.
|
598 |
+
* Fix: Update loop.
|
599 |
+
|
600 |
+
### Pro Addon 2.5.0 beta - 2016-09-21 ###
|
601 |
+
|
602 |
+
* Improved: Thumbnails detection.
|
603 |
+
* Improved how license keys are handled when set in wp-config.php.
|
604 |
+
|
605 |
+
### 7.5.1 beta - 2016-09-21 ###
|
606 |
+
|
607 |
+
* Fix: Liveleak seems to require flash for some videos.
|
608 |
+
|
609 |
+
### 7.5.0 beta - 2016-09-21 ###
|
610 |
+
|
611 |
+
* Fix: Youku URL detection and aspect ratio.
|
612 |
+
* Improved: `.arve-inner` css class in favor of some more specific classes combining styles.
|
613 |
+
* Improved: removed TGMPA class because it was causing horrible issues.
|
614 |
+
|
615 |
+
### Pro Addon 2.4.5 beta - 2016-09-19 ###
|
616 |
+
|
617 |
+
* New: Adds the ability to define the pro key in your wp-config.php file with `define( 'ARVE_PRO_KEY', 'your_key_here' )`. When activating the plugin it now also tries to activate its license when a key is defined.
|
618 |
+
|
619 |
+
### 7.4.3 beta - 2016-09-19 ###
|
620 |
+
|
621 |
+
* Fix: Deal with fluid-vids script messing with this plugin, making videos invisible.
|
622 |
+
|
623 |
+
### Pro Addon 2.4.0 beta - 2016-09-18 ###
|
624 |
+
|
625 |
+
* New: Adds Yahoo auto thumbnail and title support
|
626 |
+
|
627 |
+
### 7.4.1 beta - 2016-09-18 ###
|
628 |
+
|
629 |
+
* New: Adds Yahoo Video support
|
630 |
+
|
631 |
+
### 7.3.2 beta - 2016-09-17 ###
|
632 |
+
|
633 |
+
* Fix: Remove security="restricted" from iframes to make IE work again.
|
634 |
+
|
635 |
+
### 7.3.1 beta - 2016-09-17 ###
|
636 |
+
|
637 |
+
* Fix: Get rid of undefined index warnings when pro addon is not active.
|
638 |
+
|
639 |
+
### 7.3.0 beta - 2016-09-17 ###
|
640 |
+
|
641 |
+
* Improved: Show admin notices only to users who have the 'activate_plugins' capability.
|
642 |
+
* Improved: Added notice to the readme for the TGMPA cause white screen of death issue.
|
643 |
+
|
644 |
+
### Pro Addon 2.3.2 - 2016-09-17 ###
|
645 |
+
|
646 |
+
* Possible Fix for not centered play button.
|
647 |
+
|
648 |
+
### 7.2.13 beta - 2016-09-16 ###
|
649 |
+
|
650 |
+
* Fix: Set fitvidsignore class and remove the Fitvids container to prevent it from messing with ARVE embeds.
|
651 |
+
* Fix: Remove possible width and height parameters on iframes to prevent scripts from messing with ARVE embeds.
|
652 |
+
|
653 |
+
### 7.2.12 beta - 2016-09-16 ###
|
654 |
+
|
655 |
+
* Improved: replaced static:: with self:: to support older php versions.
|
656 |
+
|
657 |
+
### 7.2.10 beta - 2016-09-15 ###
|
658 |
+
|
659 |
+
* Fix: `[iframe]` shortcode not working.
|
660 |
+
|
661 |
+
### Pro Addon 2.3.1 beta - 2016-09-15 ###
|
662 |
+
|
663 |
+
* New: Added support for displaying title of videos on top of the thumbnail images.
|
664 |
+
* New: Responsive thumbnails using srcset the browser takes the best image resolution for the users device. (HTML5 srcset)
|
665 |
+
* New: Choose between 3 hover styles for the thumbnails: 'zoom image' (new default), 'rectangle move in' (old), or 'none' where only the play button changes.
|
666 |
+
* New: Choose between 2 play button styles.
|
667 |
+
* Fix: Screenfull error.
|
668 |
+
* Fix: License API call.
|
669 |
+
* Improved: Rectangle animation.
|
670 |
+
* Improved: Updated 'lity' lightbox script.
|
671 |
+
* Improved: Thumbnail handling.
|
672 |
+
* Improved: Removed the 'Lazyload Maximal Width' setting to simplify things (there still is 'Maximal Width' and 'Aligned Maximal Width').
|
673 |
+
* Improved: Removed the 'Fake Thumbnail' feature because the entire idea was bad and real thumbnails should be used.
|
674 |
+
* Improved: Updated EDD_SL_Plugin_Updater Class
|
675 |
+
* Dropped PHP Class.
|
676 |
+
|
677 |
+
### 7.2.9 beta - 2016-09-15 ###
|
678 |
+
|
679 |
+
* New: Recommend and guide to users to install [Shortcake (Shortcode UI)](https://de.wordpress.org/plugins/shortcode-ui/) via [TGMPA](http://tgmpluginactivation.com/)
|
680 |
+
* New: Amazing catch-all shortcode [arve url="..."] that can be used for all supported providers and even with any iframe `src` if all unlisted providers that support responsive iframe embeds.
|
681 |
+
* New: Support for kla.tv.
|
682 |
+
* New: Support for youku (fulfilled request)
|
683 |
+
* New: New Advanced Shortcode Dialog with nice UI for choose thumbnails from your WP Media Gallery, very detailed helping texts, display of default settings, hiding of fields based on need ...
|
684 |
+
* New: WYSIWYG Preview of Shortcodes.
|
685 |
+
* New: The two above features need the [Shortcake (Shortcode UI)](https://de.wordpress.org/plugins/shortcode-ui/) Plugin that is maybe moving into WordPress core later.
|
686 |
+
* New: A default alignment can now be set in the Settings page. (fulfilled request)
|
687 |
+
* New: 'iframe_name' shortcode parameter for `<iframe name="xxxxx"`, useful when wanting to target ARVE embeds with links. (fulfilled request)
|
688 |
+
* New: ARVE is now SEO friendly giving you the ability to add some schema.org microdata. Googles tools should not complain anymore if you add title, description and upload date. (fulfilled request)
|
689 |
+
* Deleted Language files in favor of [wordpress.org managed translations](https://translate.wordpress.org/projects/wp-plugins/advanced-responsive-video-embedder/dev) volunteers are welcome ;)
|
690 |
+
* Improved: Got rid of PHP globals.
|
691 |
+
* Improved: Added image upload dialog to settings page and shortcode dialog.
|
692 |
+
* Improved: Better CSS to overwrite unwanted theme styles.
|
693 |
+
* Improved: Lots if code improvements.
|
694 |
+
* Improved: SSL enabled and forced when supported by providers.
|
695 |
+
* Fix: Blury Vimeo thumbnails
|
696 |
+
* Fix: Prevent Dashboard Widget conflicts with WP Helpers plugin (possibly others). Thanks to Steve Bruner.
|
697 |
+
* Fix: Issue with unwanted borders showing on embeds.
|
698 |
+
* Fix: youtu.be URLs now detected correct in shortcode dialog.
|
699 |
+
* Fix: All Vevo URLs are now detected correctly.
|
700 |
+
* Fix: Bool options settings.
|
701 |
+
* Removed blip because the service was shutdown.
|
702 |
+
* Removed myvideo.de because the service was restructured.
|
703 |
+
|
704 |
+
### 6.4.0 ###
|
705 |
+
|
706 |
+
* Fix: Always prevent scrollbars.
|
707 |
+
|
708 |
+
### Pro Addon 1.4.4
|
709 |
+
|
710 |
+
* Fixed: Infinite update loop.
|
711 |
+
* Improved: Updated Updater class.
|
712 |
+
|
713 |
+
### Pro Addon 1.4.3
|
714 |
+
|
715 |
+
* Fixed: rectangle overflow issue.
|
716 |
+
|
717 |
+
### Pro Addon 1.4.2
|
718 |
+
|
719 |
+
* Fixed: license activation problems.
|
720 |
+
|
721 |
+
### Pro Addon 1.4.1
|
722 |
+
|
723 |
+
* Fixed critical bug for auto updates. Please [click here](https://nextgenthemes.com/support/915/add-wont-update-wordpress-says-download-failed-unauthorized?show=1053#a1053) if your update fails.
|
724 |
+
|
725 |
+
### 6.3.9 ###
|
726 |
+
|
727 |
+
* Fix: Facebook (now really, hopefully).
|
728 |
+
|
729 |
+
### 6.3.8 ###
|
730 |
+
|
731 |
+
* Fix: Facebook in lazyload modes.
|
732 |
+
|
733 |
+
### 6.3.7 ###
|
734 |
+
|
735 |
+
* New: Facebook video support.
|
736 |
+
|
737 |
+
### 6.3.4 ###
|
738 |
+
|
739 |
+
* Fix?: Iframes are now created with a fixed 853x480 size in feeds, this probably will fix some feedreaders incorrectly or not displaying videos.
|
740 |
+
|
741 |
+
### 6.3.3 ###
|
742 |
+
|
743 |
+
* Improved: Disabled file URL detection as this solution was bad.
|
744 |
+
|
745 |
+
### 6.3.2 ###
|
746 |
+
|
747 |
+
* Fixed/Improved: [arve_tests] shortcode.
|
748 |
+
|
749 |
+
### Pro Addon 1.4 ###
|
750 |
+
|
751 |
+
* Fix: Fake thumbnails now work for lazyload-lightbox mode.
|
752 |
+
|
753 |
+
### 6.3.1 & Pro Addon 1.4.0 ###
|
754 |
+
|
755 |
+
* Improved: Testing Shortcode.
|
756 |
+
* Improved: When there is no thumbnail lazyload mode will fall back to normal mode.
|
757 |
+
* New: Added support for alugha.com.
|
758 |
+
|
759 |
+
### Pro Addon 1.1.5 ###
|
760 |
+
|
761 |
+
* New: Added setting and parameter grow="yes/no" to control the grow-on-click behaviour that was introduced in 6.0 to your liking.
|
762 |
+
|
763 |
+
### 6.1.2 ###
|
764 |
+
|
765 |
+
* Improved: Added thumbnail and grow parameters to the Shortcode Creator Dialog.
|
766 |
+
* Improved: Updated screenshots.
|
767 |
+
|
768 |
+
### Pro Addon 1.1.3 ###
|
769 |
+
|
770 |
+
* Improved: link-linghtbox mode does not force a newline for the link anymore.
|
771 |
+
* Fix: Autoplaying in Background when navigating back in browser.
|
772 |
+
|
773 |
+
### Pro Addon 1.1.0 ###
|
774 |
+
|
775 |
+
* Fix: Various issues reguarding lightbox mode.
|
776 |
+
|
777 |
+
### 6.1.0 ###
|
778 |
+
|
779 |
+
* Fix: Messages about pro addon removed when it is installed.
|
780 |
+
|
781 |
+
### Pro Addon 1.0.7 ###
|
782 |
+
|
783 |
+
* Fix: Video start playing again invisible when closeing lightbox with ESC.
|
784 |
+
|
785 |
+
### 6.0.6 Beta ###
|
786 |
+
|
787 |
+
* Improved: Adds a "Debug Info" tab to the settings page copy pasting when there is are issue.
|
788 |
+
|
789 |
+
### Pro Addon 1.0.6 ###
|
790 |
+
|
791 |
+
* Remove development functions.
|
792 |
+
|
793 |
+
### Pro Addon 1.0.4 ###
|
794 |
+
|
795 |
+
* Possibly Fixes SSL issues during activation.
|
796 |
+
|
797 |
+
### Pro Addon 1.0.3 ###
|
798 |
+
|
799 |
+
* Fix: Maxwidth issue.
|
800 |
+
|
801 |
+
### 6.0.5 Beta ###
|
802 |
+
|
803 |
+
* Fix: Foreach php error
|
804 |
+
|
805 |
+
### 6.0.4 Beta ###
|
806 |
+
|
807 |
+
* Fix: Youtube URL with starttime.
|
808 |
+
|
809 |
+
### 6.0.3 Beta, Pro Addon 1.0.3 ###
|
810 |
+
|
811 |
+
* Fix: Max-width output issue.
|
812 |
+
|
813 |
+
### 6.0.2 Beta - 2015/07/24 - work time: ~60 days ###
|
814 |
+
|
815 |
+
Please check the [migration guide](https://nextgenthemes.com/?p=1875) about upgrading to this version.
|
816 |
+
|
817 |
+
* Fix: Jackpack Shortcode Embeds module incompatibility.
|
818 |
+
* New: URL parameters are now possible via URLs used for embeds (passed to iframe src).
|
819 |
+
* Changed: URL parameters to controll arve features are now 'arve[mode]=' style instead of 'arve-mode='.
|
820 |
+
* Improved: Enabled HTTPS support for Viddler and MyVideo.
|
821 |
+
* Improved: TED Talks shortcodes now support the 'lang' parameter.
|
822 |
+
* Improved: New embed URLs for MyVideo.
|
823 |
+
* Improved: Better Twitch support.
|
824 |
+
* Improved: Dailymotion HTTPS support.
|
825 |
+
* Improved: To reduce CSS and keep it simpler aspect ratios are now handled with inline styles.
|
826 |
+
* Improved: Moved to complete WP Settings API.
|
827 |
+
* Improved: Tabbed and extendable options page.
|
828 |
+
* Improved: Massive code improvements.
|
829 |
+
* Improved: Replaced all Admin Messages that caused bugs and annoyance for users with a dashboard Widget.
|
830 |
+
|
831 |
+
### Pro Addon 1.0.1 ###
|
832 |
+
|
833 |
+
* New: link-lightbox mode creates a link the triggers a lightbox with a video on click.
|
834 |
+
|
835 |
+
### Pro Addon 0.9.7 ###
|
836 |
+
|
837 |
+
* Fix: Lazyload videos not growing when global maxwidth setting was set.
|
838 |
+
* Improved: Finally got rid of the jQuery Colorbox depency, the Pro Addon now includes lity for lightboxes.
|
839 |
+
|
840 |
+
### Pro Addon 0.9.5 ###
|
841 |
+
|
842 |
+
* Fix: Licensing Activation should now finally work correcty. (Multisite may need some tweaks)
|
843 |
+
* Fix: Pissibility of unwanted margins/paddings on the transparent button.
|
844 |
+
|
845 |
+
### Pro Addon 0.9.0 ###
|
846 |
+
|
847 |
+
* Changed: 'Lazyload' mode now grows the video size after thumbnails are clicked.
|
848 |
+
* Changed: 'Thumbnail' mode is now called 'Lazyload -> Colorbox' and has a sightly different behavior.
|
849 |
+
* New: 'Lazyload -> Fullscreen' mode to instandly go Fullscreen after clicking the Lazyloaded preview image.
|
850 |
+
* New: 'Lazyload -> Fixed' Fullscreen/-window mode (extremly experimental) with ability to resize fixed video on screen while reading the page.
|
851 |
+
* New: 'thumbnail' parameter, take image URL or a ID to a media libray image to be used as thumbnail image.
|
852 |
+
* Improved: Enabled fake thumbnails for USTREAM and myvideo.de.
|
853 |
+
* Depricated: Providers that only support `<object>` are from now only supported in normal mode, will switch automatically. This effects only recorded Twitch videos, flickr and veoh.
|
854 |
+
|
855 |
+
### 5.3.4 Beta - 2015/03/15 ###
|
856 |
+
|
857 |
+
* Fix: ID detection for youtu.be and dai.ly URLs, will now work with https://(www.) as well.
|
858 |
+
* Fix: Myvideo.de videos with 7 and 8 digit IDs.
|
859 |
+
|
860 |
+
### 5.3.3 Beta ###
|
861 |
+
|
862 |
+
* Fix: Workarround for a currently ongoing YouTube issue causing YouTube embeds to fail with erros on mobile devives. This was not a 'bug' caused by this plugin btw.
|
863 |
+
|
864 |
+
### 5.3.2 Beta ###
|
865 |
+
|
866 |
+
* Fix: Die 'Array' errors DIE!
|
867 |
+
|
868 |
+
### 5.3.1 Beta ###
|
869 |
+
|
870 |
+
* Improved: Added shortcode example to youtube starttime examples.
|
871 |
+
* Improved: Clarified from who the admin messages come.
|
872 |
+
|
873 |
+
### 5.3.0 Beta ###
|
874 |
+
|
875 |
+
* **If you get a error '... array ...' please reset your options on the options page and redo the options you had before**
|
876 |
+
* Fix: '... expected array' error when saving options on some cases. If you get a error please reset your
|
877 |
+
* Fix: ttp://youtu.be/... shortlinks are not detected correctly in the shortcode creator dialog.
|
878 |
+
* Improved: Ported code to WordPress Plugin Boilerplate 3.0 style.
|
879 |
+
* Improved: Switched vevo and xtube from object to iframe embeds.
|
880 |
+
* Improved: Lots of minor code enhancements.
|
881 |
+
|
882 |
+
### 5.1.1 ###
|
883 |
+
|
884 |
+
* Fix: Removed mixed content warnungs for youtube and vimeo.
|
885 |
+
* Translation updates.
|
886 |
+
|
887 |
+
### 5.1.0 ###
|
888 |
+
|
889 |
+
* New: Vimeo HTTPS support (works automatically if your site is HTTPS)
|
890 |
+
|
891 |
+
### 5.0.2 Beta ###
|
892 |
+
|
893 |
+
* Improved: Marked as working with WP 4.0
|
894 |
+
|
895 |
+
### 5.0.1 Beta ###
|
896 |
+
|
897 |
+
* Fix: Options var error
|
898 |
+
|
899 |
+
### 5.0.0 Beta ###
|
900 |
+
|
901 |
+
* Fix: Max-width options should now work in all circumstances
|
902 |
+
* Improved: Various CSS improvements
|
903 |
+
* Improved: Changed play overlay image to a Google+ style image
|
904 |
+
|
905 |
+
### 4.9.0 Beta ###
|
906 |
+
|
907 |
+
* Improved: All Javascript is loaded from files now and they are only loaded when there are embeds on the page. This improves page load times on pages with no embeds.
|
908 |
+
* Fix: Removed autohide#1 from default YouTube Parameters since it causes a YouTube bug in the HTML5 player.
|
909 |
+
|
910 |
+
### 4.8.0 ###
|
911 |
+
|
912 |
+
* Updated: Spanish translation now 80% complete. Thanks Xarkitu!
|
913 |
+
* Improved: Do not load admin dialog when doing AJAX
|
914 |
+
|
915 |
+
### 4.7.0 ###
|
916 |
+
|
917 |
+
* Fix: Iframe code detection
|
918 |
+
|
919 |
+
### 4.6.0 ###
|
920 |
+
|
921 |
+
* Improvement: PHP required version lowered to 5.2.4
|
922 |
+
|
923 |
+
### 4.5.4 ###
|
924 |
+
|
925 |
+
* Fix: Save of custom URL parameters
|
926 |
+
* New: CHANGES.md file for github updater
|
927 |
+
|
928 |
+
### 4.5.3 ###
|
929 |
+
|
930 |
+
* Fix: Fatal PHP Error on activation.
|
931 |
+
* Fix: Readme spellings.
|
932 |
+
|
933 |
+
### 4.5.0 ###
|
934 |
+
|
935 |
+
* Fix: Minor options page spelling and field association fixes.
|
936 |
+
* Fix: Added Lazyload to mode select in the shortcode dialog.
|
937 |
+
* New: 4players.de support.
|
938 |
+
* New: Added parameter input to the shortcode dialog.
|
939 |
+
* Improved: Default options are no longer stored in the database.
|
940 |
+
* Improved: Transparency fade animation on thumbnail hover.
|
941 |
+
* Improved: No more ugly URL hash (#arve-load-video) after clicking links.
|
942 |
+
* Improved: Dropped IE 8 support for Lazyload mode.
|
943 |
+
* Improved: Lots of code improvements.
|
944 |
+
|
945 |
+
### 4.3.0 ###
|
946 |
+
|
947 |
+
* New: Added Iframe examples.
|
948 |
+
* Improved: Limited support for self hosted Videos. Dialog will detect URLS that end up with .webm .mp4 .ogg creates a iframe embed code with them. This is probaly not the best way to do this but it works. Real HTML5 video tag embeds may come later.
|
949 |
+
* Improved: Redesigned the button to look like WordPress and move it out of the Tiny MCE Editor. This enables you to embed videos in the code editor as well.
|
950 |
+
* Improved: Redesigned the Shortcode Creator dialog. Less clutter, more compact and it now includes the recently introduced `aspect_ratio`.
|
951 |
+
|
952 |
+
### 4.2.0 ###
|
953 |
+
|
954 |
+
* New: As requested: `aspect_ratio` parameter
|
955 |
+
* Fix: Vimeo playing problems in Firefox.
|
956 |
+
|
957 |
+
### 4.1.1 ###
|
958 |
+
|
959 |
+
* Fix: Play button not showing.
|
960 |
+
|
961 |
+
### 4.1.0 ###
|
962 |
+
|
963 |
+
* New: Vine support
|
964 |
+
* New: Support for starttime from youtube URLs
|
965 |
+
* Improved: Include play image inside CSS, -1 http request may speed things up
|
966 |
+
* Improved: Tests
|
967 |
+
|
968 |
+
### 4.0.0 ###
|
969 |
+
|
970 |
+
* New: Trigger-able debug output.
|
971 |
+
* Improved: The `[arve_tests]` shortcode now includes alignment and maxwidth tests
|
972 |
+
* Fix: Thumbnail image now displayed when using lazyload with `maxwidth` parameter
|
973 |
+
|
974 |
+
### 3.9.9 ###
|
975 |
+
|
976 |
+
* Improved: Allowing `maxwidth` parameter in `lazyload` mode
|
977 |
+
|
978 |
+
### 3.9.8 ###
|
979 |
+
|
980 |
+
* Fix: Thumbnail not opening Colorbox
|
981 |
+
|
982 |
+
### 3.9.7 ALPHA! ###
|
983 |
+
|
984 |
+
* New: I am proud to introduce the new 'lazyload' mode. ARVEs new default mode. Load Images only and load the Video only on click. Like Google+ without the title.
|
985 |
+
* New: Added MPORA support
|
986 |
+
* New: Added (real) thumbnail support for Collegehumor, Twitch, FunnyOrDie, MPORA
|
987 |
+
* New: `[arve_tests]` shortcode that is used to test the plugin and provide examples.
|
988 |
+
* New: `[arve_supported]` shortcode probably of no use for users. It will generate the a list of providers with supported features.
|
989 |
+
* Improved: Enabled fake thumbnails for Comedycentral, Gametrailers and Spike
|
990 |
+
* Improved: Remote API calls and handling their errors.
|
991 |
+
* Improved: Get high resolution thumbnails from YouTube if available.
|
992 |
+
* Improved: The evil admin message is now only shown once to users who can delete plugins (Admins and the like) and if the plugin was activated a week ago or longer.
|
993 |
+
* Improved: Lots of smaller code improvements.
|
994 |
+
|
995 |
+
### 3.6.1 ###
|
996 |
+
|
997 |
+
* Fix: Register link in changelog.
|
998 |
+
|
999 |
+
### 3.6.0 ###
|
1000 |
+
|
1001 |
+
* New: Thanks to [Ilya Grishkov](https://ilyagrishkov.com) thumbnail URLs for Vimeo, Blip and Dailymotion Playlists are now cached (by default 24hours) this drastically reduces page loading times for thumbnail embeds from these providers because it bypasses calling their APIs for that period.
|
1002 |
+
* Fix: Thumbnails for YouTube playlists.
|
1003 |
+
* Fix: Shortcode creator ID detection for iframes (src URL)
|
1004 |
+
* Fix: Updated Dailymoton docs link on Options page
|
1005 |
+
* Improved: Error messages are now all ready to be translated. Current Translation status: German 50%, French 50%, Spanish 84%. Register at [nextgenthemes.com](https://nextgenthemes.com/wp-login.php?action#register) and then login to [translate.nextgenthemes.com](https://translate.nextgenthemes.com) to help translate.
|
1006 |
+
|
1007 |
+
### 3.5.2 ###
|
1008 |
+
|
1009 |
+
* New: Twitch.tv support
|
1010 |
+
* New: Spanish Translation from Andrew Kurtis webhostinghub.com
|
1011 |
+
* Improved: Support for `https://new.ted.com/...` URLs
|
1012 |
+
* Improved: Some code improvements, among them IDs of hidden objects are now generated with a simple `static` counter instead of some random generated string.
|
1013 |
+
|
1014 |
+
### 3.5.1 ###
|
1015 |
+
|
1016 |
+
* Fix: Bug causing the Shortcode Creator not detecting shortcode tags when customized
|
1017 |
+
* Improved how embeds `<object>` embed codes are generated.
|
1018 |
+
* Updated FAQ
|
1019 |
+
* New: Xtube support (On request)
|
1020 |
+
|
1021 |
+
### 3.5.0 ###
|
1022 |
+
|
1023 |
+
* New: Custom parameters!
|
1024 |
+
* Fix: Youtube playlists now work correctly
|
1025 |
+
* Fix: Translations are working again (incomplete German and French)
|
1026 |
+
* Deprecated: `start` and `end` shortcode parametets should not be used anymore with youtube, instead use the new parameters feature like `[youtube id#"123456" parameters#"start#60 end#120"]`
|
1027 |
+
|
1028 |
+
### 3.1.2 ###
|
1029 |
+
|
1030 |
+
* Fix: IE8 JavaScript errors
|
1031 |
+
* Improved: The evil message at the admin.
|
1032 |
+
|
1033 |
+
### 3.1.1 (github only) ###
|
1034 |
+
|
1035 |
+
* Improved: Added `px` suffix to values on options page
|
1036 |
+
|
1037 |
+
### 3.1.0 (beta) ###
|
1038 |
+
|
1039 |
+
* New: Development versions now available via [Github Plugin Updater](https://github.com/afragen/github-updater) please install this to test cutting edge versions
|
1040 |
+
* New: Introducing 'Align Maximal Width' option
|
1041 |
+
* Fix: Invisible normal mode embeds with align
|
1042 |
+
* Fix: Yahoo detection
|
1043 |
+
* Fix: Kickstarter detection
|
1044 |
+
* Fix: Daylimoition Playlist
|
1045 |
+
* Fix: Colleghumor
|
1046 |
+
* Improved: Screenshots updated
|
1047 |
+
* Improved: Beginning process of provider based aspect ratios.
|
1048 |
+
* Improved: Dailymotion playlists/jukeboxes now show Native thumbnails
|
1049 |
+
* Improved: Iframe embed code detection with with single quoted `src#''`
|
1050 |
+
|
1051 |
+
### 3.0.4 (beta) ###
|
1052 |
+
|
1053 |
+
* Javascript Fix
|
1054 |
+
|
1055 |
+
### 3.0.0 (beta) ###
|
1056 |
+
|
1057 |
+
* New: Support for embedding via simply pasting of URLs into posts (need to be on their own line, no button or shortcodes needed)
|
1058 |
+
* New: Thumbnails are now responsive
|
1059 |
+
* New: Vevo support
|
1060 |
+
* New: TED Talks support
|
1061 |
+
* New: IGN support
|
1062 |
+
* New: Kickstarter support
|
1063 |
+
* Improved: request large thumbnail from vimeo instead of medium
|
1064 |
+
* Improved: 'youtubelist' shortcode deprecated YouTube playlists are now handled via the normal youtube shortcode with support for starting video
|
1065 |
+
* Improved: 'bliptv' shortcode deprecated on favor of 'blip' that uses the ids from blip.tv URLs instead of the ones from embed codes
|
1066 |
+
* Improved: Moved code to newest Plugin Boilerplate
|
1067 |
+
* Improved: Massive code improvements
|
1068 |
+
|
1069 |
+
### 2.7.4 ###
|
1070 |
+
|
1071 |
+
* Fix: Dropped mb_detect_encoding now using just preg_match to support rare php setups.
|
1072 |
+
|
1073 |
+
### 2.7.3 ###
|
1074 |
+
|
1075 |
+
* New: Added French Translation from Karel - neo7.fr
|
1076 |
+
|
1077 |
+
### 2.7.2 ###
|
1078 |
+
|
1079 |
+
* Fix: Permissions for the button, now authors who
|
1080 |
+
|
1081 |
+
### 2.7.0 ###
|
1082 |
+
|
1083 |
+
* Fix: Admin page capabilities
|
1084 |
+
* Improved: Reintroduced the manual provider and ID input to be used then not detected correctly.
|
1085 |
+
|
1086 |
+
### 2.6.4 ###
|
1087 |
+
|
1088 |
+
* Fix: Black bar issue. (Dropped IE6 hacks/workarounds)
|
1089 |
+
|
1090 |
+
### 2.6.3 ###
|
1091 |
+
|
1092 |
+
* Fix: Normal embeds not sizing correctly
|
1093 |
+
* New: Added scrolling#"no" to Iframes
|
1094 |
+
* Improved: Init shortcodes at a late stage to dominate conflicts
|
1095 |
+
* Improved: Improved Iframe parameter handling
|
1096 |
+
* Improved: Metacafe, Myspace, Videojug are now handled via Iframe
|
1097 |
+
|
1098 |
+
### 2.6.2 ###
|
1099 |
+
|
1100 |
+
* Fix: Objects open correctly in Colorbox
|
1101 |
+
* Fix: Iframe autoplay parameters startign with '&'
|
1102 |
+
* New: Added screenshot for options page
|
1103 |
+
* Improved: Youtube Videos with now me embedded with the same protocol your website is on, meaning if your website is https youtube embeds will be in https as well.
|
1104 |
+
|
1105 |
+
### 2.6.1 ###
|
1106 |
+
|
1107 |
+
* Fix: Colorbox args script not having colorbox in depenency array
|
1108 |
+
* Fix: Maxwidth shortcode generator field now has default value#""
|
1109 |
+
* Fix: Blip embed code detection
|
1110 |
+
|
1111 |
+
### 2.6.0 ###
|
1112 |
+
|
1113 |
+
* Improved: Move to a class structure with help of the great https://github.com/tommcfarlin/WordPress-Plugin-Boilerplate
|
1114 |
+
* Improved: Some smaller Improvements
|
1115 |
+
* New: Shortcode Dialog now has Autoplay option
|
1116 |
+
* New: Guessing of autoplay parameters for the Iframe shortcodes.
|
1117 |
+
* Hopefully fixed issues with other plugins and some themes, Javascript was messed up and is fine now.
|
1118 |
+
|
1119 |
+
### 2.5 ###
|
1120 |
+
|
1121 |
+
* Fix: Objects in Colorboxes, now always have width and height 100%
|
1122 |
+
* new shortcode attribute 'autoplay' for single videos
|
1123 |
+
* support for start at given time for vimeo
|
1124 |
+
|
1125 |
+
### 2.4 ###
|
1126 |
+
|
1127 |
+
* propper licence
|
1128 |
+
* Class renamed
|
1129 |
+
|
1130 |
+
### 2.3 beta ###
|
1131 |
+
|
1132 |
+
* fix for maxwidth wrapper no maxwidth option is set
|
1133 |
+
|
1134 |
+
### 2.1 beta ###
|
1135 |
+
|
1136 |
+
* Security and general code improvements
|
1137 |
+
* Added autoplay option
|
1138 |
+
|
1139 |
+
### 2.0 beta ###
|
1140 |
+
|
1141 |
+
* added Yahoo!
|
1142 |
+
* spike bugfix
|
1143 |
+
* small improvements to code
|
1144 |
+
* removed the fixed mode
|
1145 |
+
|
1146 |
+
### 1.9 beta ###
|
1147 |
+
|
1148 |
+
* added youtubes modestbranding mode
|
1149 |
+
* added missing veoh id detection
|
1150 |
+
* fixed vimeo id detection
|
1151 |
+
* added now custom thumbnail feature
|
1152 |
+
* fixed the align class creation
|
1153 |
+
* renamed the shortcode dialog
|
1154 |
+
* removed the text field for teh fixed width option (beginning of the removal process)
|
1155 |
+
|
1156 |
+
### 1.8 beta ###
|
1157 |
+
|
1158 |
+
* added new tinymce botton with dialog to detect ids from URL's and embed codes and automatically create shortcodes
|
1159 |
+
* removed the image resizer (Faster and more secure for servers), now uses just CSS. Polyfill for for IE to support 'background-size' included.
|
1160 |
+
* changed the play overlay image to a bigger one
|
1161 |
+
* added comedycentral, spike
|
1162 |
+
* removed google video, it died
|
1163 |
+
* lots of improvements and fixes
|
1164 |
+
|
1165 |
+
### 1.7 ###
|
1166 |
+
|
1167 |
+
* fixed gametrailers and collegehumor
|
1168 |
+
* fixed options handling for updateded options
|
1169 |
+
* added ustream support
|
1170 |
+
* renamed a function to prevent issues with other plugins
|
1171 |
+
|
1172 |
+
### 1.6 ###
|
1173 |
+
|
1174 |
+
* corrected readme errors, typos and added better description to shortcode options
|
1175 |
+
|
1176 |
+
### 1.5 ###
|
1177 |
+
|
1178 |
+
* lots of code improvements, now uses wordpress settings api, and propper sanitising
|
1179 |
+
|
1180 |
+
### 1.4.5 ###
|
1181 |
+
|
1182 |
+
* added flickr video, archive.org
|
1183 |
+
* inproved how flashvars were implemented
|
1184 |
+
|
1185 |
+
### 1.4.4 ###
|
1186 |
+
|
1187 |
+
* fixes
|
1188 |
+
|
1189 |
+
### 1.4.2 ###
|
1190 |
+
|
1191 |
+
* Options dialog overhaul
|
1192 |
+
* replaced Fancybox with Colorbox
|
1193 |
+
|
1194 |
+
### 1.0 ###
|
1195 |
+
|
1196 |
+
* Removed Services that went down over the years
|
1197 |
+
* Changed the way shortcodes were implemented from regexp to wordpress 'add shortcode' function
|
1198 |
+
|
1199 |
+
### 2012-02-03 0.1 ###
|
1200 |
+
|
1201 |
+
* Started by improving the WordPress 'Video Embedder Plugin' but now complete new code `svn log --stop-on-copy --quiet https://plugins.svn.wordpress.org/advanced-responsive-video-embedder/ | tail -2` this plugins was submitted and approved in 2012, seems I have been working on this longer then I thought.
|
php/Admin/functions-admin.php
CHANGED
@@ -10,7 +10,6 @@ function action_admin_init_setup_messages() {
|
|
10 |
|
11 |
if ( defined( 'ARVE_PRO_VERSION' ) ) {
|
12 |
$pro_version = ARVE_PRO_VERSION;
|
13 |
-
|
14 |
} elseif ( defined( '\Nextgenthemes\ARVE\Pro\VERSION' ) ) {
|
15 |
$pro_version = \Nextgenthemes\ARVE\Pro\VERSION;
|
16 |
}
|
@@ -42,7 +41,9 @@ function action_admin_init_setup_messages() {
|
|
42 |
|
43 |
if ( display_pro_ad() ) {
|
44 |
|
45 |
-
$pro_ad_message = __( '
|
|
|
|
|
46 |
|
47 |
// phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents
|
48 |
$pro_ad_message .= file_get_contents( __DIR__ . '/partials/pro-ad.html' );
|
@@ -138,25 +139,30 @@ function add_action_links( $links ) {
|
|
138 |
function add_media_button() {
|
139 |
|
140 |
$options = ARVE\options();
|
141 |
-
|
142 |
add_thickbox();
|
|
|
143 |
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
|
|
|
|
|
|
|
|
|
|
160 |
printf(
|
161 |
'<button id="arve-btn" title="%s" data-mode="%s" class="arve-btn button add_media" type="button"><span class="wp-media-buttons-icon arve-icon"></span> %s</button>',
|
162 |
esc_attr__( 'ARVE Advanced Responsive Video Embedder', 'advanced-responsive-video-embedder' ),
|
@@ -172,18 +178,33 @@ function register_shortcode_ui() {
|
|
172 |
foreach ( $settings as $k => $v ) :
|
173 |
|
174 |
if ( 'boolean' === $v['type'] ) {
|
175 |
-
$v['type']
|
176 |
|
177 |
if ( isset($v['option']) && true === $v['option'] ) {
|
178 |
$v['options'] = [
|
179 |
-
[
|
180 |
-
|
181 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
182 |
];
|
183 |
} else {
|
184 |
$v['options'] = [
|
185 |
-
[
|
186 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
187 |
];
|
188 |
}
|
189 |
}
|
@@ -312,24 +333,6 @@ function params_section_description() {
|
|
312 |
<?php
|
313 |
}
|
314 |
|
315 |
-
function plugin_ver_status( $folder_and_filename ) {
|
316 |
-
|
317 |
-
$file = WP_PLUGIN_DIR . '/' . $folder_and_filename;
|
318 |
-
|
319 |
-
if ( ! is_file( $file ) ) {
|
320 |
-
return 'NOT INSTALLED';
|
321 |
-
}
|
322 |
-
|
323 |
-
$data = get_plugin_data( $file );
|
324 |
-
$out = $data['Version'];
|
325 |
-
|
326 |
-
if ( ! is_plugin_active( $folder_and_filename ) ) {
|
327 |
-
$out .= ' INACTIVE';
|
328 |
-
}
|
329 |
-
|
330 |
-
return $out; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
331 |
-
}
|
332 |
-
|
333 |
function debug_section_description() {
|
334 |
include_once __DIR__ . '/partials/debug-info.php';
|
335 |
}
|
@@ -361,7 +364,7 @@ function admin_enqueue_scripts() {
|
|
361 |
Common\enqueue_asset(
|
362 |
[
|
363 |
'handle' => 'arve-admin-sc-ui',
|
364 |
-
|
365 |
'src' => plugins_url( 'build/shortcode-ui.js', ARVE\PLUGIN_FILE ),
|
366 |
'deps' => [ 'shortcode-ui' ],
|
367 |
]
|
10 |
|
11 |
if ( defined( 'ARVE_PRO_VERSION' ) ) {
|
12 |
$pro_version = ARVE_PRO_VERSION;
|
|
|
13 |
} elseif ( defined( '\Nextgenthemes\ARVE\Pro\VERSION' ) ) {
|
14 |
$pro_version = \Nextgenthemes\ARVE\Pro\VERSION;
|
15 |
}
|
41 |
|
42 |
if ( display_pro_ad() ) {
|
43 |
|
44 |
+
$pro_ad_message = __( 'Hi, this is Nico(las Jonas) the author of the ARVE - Advanced Responsive Video Embedder plugin. If you are interrested in additional features and/or want to support the work I do on this plugin please consider buying the Pro Addon.', 'advanced-responsive-video-embedder' );
|
45 |
+
|
46 |
+
$pro_ad_message = "<p>$pro_ad_message</p>";
|
47 |
|
48 |
// phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents
|
49 |
$pro_ad_message .= file_get_contents( __DIR__ . '/partials/pro-ad.html' );
|
139 |
function add_media_button() {
|
140 |
|
141 |
$options = ARVE\options();
|
|
|
142 |
add_thickbox();
|
143 |
+
?>
|
144 |
|
145 |
+
<div id="arve-thickbox" style="display:none;">
|
146 |
+
<p>
|
147 |
+
<?php
|
148 |
+
printf(
|
149 |
+
// phpcs:ignore
|
150 |
+
Common\kses_basic( __( 'This button can open an optional ARVE a Shortcode creation dialog. ARVE needs the <a href="%s">Shortcode UI plugin</a> active for this fuctionality. It helps creating shortcodes and provides a preview in the Editor. But sadly Shortcode UI is not maintained anymore and there have been some know issues with Shortcode UI.', 'advanced-responsive-video-embedder' ) ),
|
151 |
+
esc_url( network_admin_url( 'plugin-install.php?s=Shortcode+UI&tab=search&type=term' ) )
|
152 |
+
);
|
153 |
+
?>
|
154 |
+
</p>
|
155 |
+
<p>
|
156 |
+
<?php
|
157 |
+
printf(
|
158 |
+
// phpcs:ignore
|
159 |
+
Common\kses_basic( __( 'It is perfectly fine to pass on this and <a href="%s">manually</a> write shortcodes or don\'t use shortcodes at all, but it makes things easier. And if you even switch to Gutenberg there is a ARVE Block all the settings in the sidebar waiting for you..', 'advanced-responsive-video-embedder' ) ),
|
160 |
+
esc_url( 'https://nextgenthemes.com/plugins/arve/documentation/' )
|
161 |
+
);
|
162 |
+
?>
|
163 |
+
</p>
|
164 |
+
</div>
|
165 |
+
<?php
|
166 |
printf(
|
167 |
'<button id="arve-btn" title="%s" data-mode="%s" class="arve-btn button add_media" type="button"><span class="wp-media-buttons-icon arve-icon"></span> %s</button>',
|
168 |
esc_attr__( 'ARVE Advanced Responsive Video Embedder', 'advanced-responsive-video-embedder' ),
|
178 |
foreach ( $settings as $k => $v ) :
|
179 |
|
180 |
if ( 'boolean' === $v['type'] ) {
|
181 |
+
$v['type'] = 'select';
|
182 |
|
183 |
if ( isset($v['option']) && true === $v['option'] ) {
|
184 |
$v['options'] = [
|
185 |
+
[
|
186 |
+
'value' => '',
|
187 |
+
'label' => esc_html__( 'Default (settings page)', 'advanced-responsive-video-embedder' ),
|
188 |
+
],
|
189 |
+
[
|
190 |
+
'value' => 'yes',
|
191 |
+
'label' => esc_html__( 'Yes', 'advanced-responsive-video-embedder' ),
|
192 |
+
],
|
193 |
+
[
|
194 |
+
'value' => 'no',
|
195 |
+
'label' => esc_html__( 'No', 'advanced-responsive-video-embedder' ),
|
196 |
+
],
|
197 |
];
|
198 |
} else {
|
199 |
$v['options'] = [
|
200 |
+
[
|
201 |
+
'value' => 'no',
|
202 |
+
'label' => esc_html__( 'No', 'advanced-responsive-video-embedder' ),
|
203 |
+
],
|
204 |
+
[
|
205 |
+
'value' => 'yes',
|
206 |
+
'label' => esc_html__( 'Yes', 'advanced-responsive-video-embedder' ),
|
207 |
+
],
|
208 |
];
|
209 |
}
|
210 |
}
|
333 |
<?php
|
334 |
}
|
335 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
336 |
function debug_section_description() {
|
337 |
include_once __DIR__ . '/partials/debug-info.php';
|
338 |
}
|
364 |
Common\enqueue_asset(
|
365 |
[
|
366 |
'handle' => 'arve-admin-sc-ui',
|
367 |
+
'path' => ARVE\PLUGIN_DIR . '/build/shortcode-ui.js',
|
368 |
'src' => plugins_url( 'build/shortcode-ui.js', ARVE\PLUGIN_FILE ),
|
369 |
'deps' => [ 'shortcode-ui' ],
|
370 |
]
|
php/Admin/functions-settings-page.php
CHANGED
@@ -2,85 +2,29 @@
|
|
2 |
namespace Nextgenthemes\ARVE\Admin;
|
3 |
|
4 |
use \Nextgenthemes\ARVE;
|
5 |
-
|
6 |
-
function settings_header( $instance ) {
|
7 |
-
|
8 |
-
?>
|
9 |
-
<button @click='showAllSectionsButDebug()' class="button-secondary">All Options</button>
|
10 |
-
<?php
|
11 |
-
foreach ( $instance->sections as $slug => $name ) {
|
12 |
-
|
13 |
-
$btn_type = in_array( $slug, [ 'pro', 'videojs', 'randomvideo' ], true ) ? 'primary' : 'secondary';
|
14 |
-
|
15 |
-
printf(
|
16 |
-
' <button @click=\'showSection("%s")\' class="button-%s">%s</button>',
|
17 |
-
esc_attr( $slug ),
|
18 |
-
esc_attr( $btn_type ),
|
19 |
-
esc_html( $name )
|
20 |
-
);
|
21 |
-
}
|
22 |
-
?>
|
23 |
-
|
24 |
-
<div class="ngt-block" v-show="sectionsDisplayed.pro || sectionsDisplayed.videojs || sectionsDisplayed.randomvideo" >
|
25 |
-
<p><?php esc_html_e( 'You may already set options for addons but they will only take effect if the associated addons are installed.', 'advanced-responsive-video-embedder' ); ?></p>
|
26 |
-
</div>
|
27 |
-
|
28 |
-
<div class="ngt-block" v-show="sectionsDisplayed.debug">
|
29 |
-
<br>
|
30 |
-
<?php require_once __DIR__ . '/partials/debug-info.php'; ?>
|
31 |
-
</div>
|
32 |
-
<?php
|
33 |
-
}
|
34 |
|
35 |
function settings_sidebar() {
|
36 |
-
|
37 |
if ( ! is_plugin_active( 'arve-pro/arve-pro.php' ) ) {
|
38 |
-
|
39 |
}
|
40 |
|
41 |
if ( ! is_plugin_active( 'arve-random-video/arve-random-video.php' ) ) {
|
42 |
-
|
43 |
}
|
44 |
|
45 |
-
if ( ! is_plugin_active( 'arve-amp/arve-amp.php' ) ) {
|
46 |
-
|
47 |
-
}
|
48 |
-
|
49 |
-
readfile( __DIR__ . '/partials/settings-sidebar-rate.html' );
|
50 |
-
}
|
51 |
|
52 |
-
|
53 |
-
$allplugins = get_plugins();
|
54 |
-
$active_plugins = get_option( 'active_plugins', [] );
|
55 |
-
|
56 |
-
echo "ACTIVE PLUGINS:\n";
|
57 |
-
foreach ( $allplugins as $plugin_path => $plugin ) {
|
58 |
-
// If the plugin isn't active, don't show it.
|
59 |
-
if ( ! in_array( $plugin_path, $active_plugins, true ) ) {
|
60 |
-
continue;
|
61 |
-
}
|
62 |
-
echo esc_html( "{$plugin['Name']}: {$plugin['Version']}\n" );
|
63 |
-
}
|
64 |
}
|
65 |
|
66 |
-
function
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
}
|
71 |
-
|
72 |
-
echo "NETWORK ACTIVE PLUGINS: \n";
|
73 |
-
$allplugins = wp_get_active_network_plugins();
|
74 |
-
$active_plugins = get_site_option( 'active_sitewide_plugins', [] );
|
75 |
-
foreach ( $allplugins as $plugin_path ) {
|
76 |
-
$plugin_base = plugin_basename( $plugin_path );
|
77 |
-
// If the plugin isn't active, don't show it.
|
78 |
-
if ( ! array_key_exists( $plugin_base, $active_plugins ) ) {
|
79 |
-
continue;
|
80 |
-
}
|
81 |
-
$plugin = get_plugin_data( $plugin_path );
|
82 |
-
echo esc_html( "{$plugin['Name']}: {$plugin['Version']}\n" );
|
83 |
-
}
|
84 |
}
|
85 |
|
86 |
function filter_save_options( $options ) {
|
2 |
namespace Nextgenthemes\ARVE\Admin;
|
3 |
|
4 |
use \Nextgenthemes\ARVE;
|
5 |
+
use \Nextgenthemes\ARVE\Common;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
7 |
function settings_sidebar() {
|
8 |
+
|
9 |
if ( ! is_plugin_active( 'arve-pro/arve-pro.php' ) ) {
|
10 |
+
print_settings_box_html( '/partials/settings-sidebar-pro.html' );
|
11 |
}
|
12 |
|
13 |
if ( ! is_plugin_active( 'arve-random-video/arve-random-video.php' ) ) {
|
14 |
+
print_settings_box_html( '/partials/settings-sidebar-random-video.html' );
|
15 |
}
|
16 |
|
17 |
+
// if ( ! is_plugin_active( 'arve-amp/arve-amp.php' ) ) {
|
18 |
+
// print_settings_box_html( '/partials/settings-sidebar-amp.html' );
|
19 |
+
// }
|
|
|
|
|
|
|
20 |
|
21 |
+
print_settings_box_html( '/partials/settings-sidebar-rate.html' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
}
|
23 |
|
24 |
+
function print_settings_box_html( $file ) {
|
25 |
+
echo '<div class="ngt-sidebar-box">';
|
26 |
+
readfile( __DIR__ . $file ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_read_readfile
|
27 |
+
echo '</div>';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
}
|
29 |
|
30 |
function filter_save_options( $options ) {
|
php/Admin/partials/debug-info.php
DELETED
@@ -1,18 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
namespace Nextgenthemes\ARVE\Admin;
|
3 |
-
?>
|
4 |
-
<textarea style="font-family: monospace; width: 100%" rows="25">
|
5 |
-
ARVE Version: <?= esc_html( plugin_ver_status( 'advanced-responsive-video-embedder/advanced-responsive-video-embedder.php' ) . "\n" ); ?>
|
6 |
-
ARVE Pro Version: <?= esc_html( plugin_ver_status( 'arve-pro/arve-pro.php' ) . "\n" ); ?>
|
7 |
-
ARVE AMP Version: <?= esc_html( plugin_ver_status( 'arve-amp/arve-amp.php' ) . "\n" ); ?>
|
8 |
-
ARVE Random Video: <?= esc_html( plugin_ver_status( 'arve-random-video/arve-random-video.php' ) . "\n" ); ?>
|
9 |
-
WordPress Version: <?= esc_html( $GLOBALS['wp_version'] . "\n" ); ?>
|
10 |
-
PHP Version: <?= esc_html( phpversion() . "\n" ); ?>
|
11 |
-
|
12 |
-
<?php echo_active_plugins(); ?>
|
13 |
-
|
14 |
-
<?php echo_network_active_plugins(); ?>
|
15 |
-
|
16 |
-
ARVE OPTIONS:
|
17 |
-
<?php var_dump( get_option( 'nextgenthemes_arve' ) ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_var_dump ?>
|
18 |
-
</textarea>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
php/Admin/partials/pro-ad.html
CHANGED
@@ -1,10 +1,13 @@
|
|
1 |
<ul>
|
2 |
<li><strong>Disable links in embeds</strong>
|
3 |
For example: Clicking on a title in a YouTube embed will not open a new popup/tab/window. <strong>Prevent video hosts to lead your visitors away from your site!</strong></li>
|
4 |
-
<li><strong>Lazyload mode</strong><br
|
5 |
-
<
|
6 |
-
<li><strong>
|
|
|
|
|
|
|
7 |
<li>Automatic or custom titles and thumbnails images</li>
|
8 |
<li>'Expand on click' feature</li>
|
9 |
-
<li>And more, for a <strong><a href="https://nextgenthemes.com/plugins/arve-pro/">complete feature list</a></strong> and purchase please visit the <strong><a href="https://nextgenthemes.com/plugins/arve-pro/">official site</a></strong></li>
|
10 |
</ul>
|
1 |
<ul>
|
2 |
<li><strong>Disable links in embeds</strong>
|
3 |
For example: Clicking on a title in a YouTube embed will not open a new popup/tab/window. <strong>Prevent video hosts to lead your visitors away from your site!</strong></li>
|
4 |
+
<li><strong>Lazyload mode</strong><br />
|
5 |
+
Make your site load <strong>faster</strong> by loading only a image instead of the entire video player on pageload.</li>
|
6 |
+
<li><strong>Lazyload -> Lightbox</strong><br />
|
7 |
+
Shows the Video in a Lightbox after clicking a preview image</li>
|
8 |
+
<li><strong>Link -> Lightbox</strong><br />
|
9 |
+
Use simple links as triggers for lightboxed videos</li>
|
10 |
<li>Automatic or custom titles and thumbnails images</li>
|
11 |
<li>'Expand on click' feature</li>
|
12 |
+
<li>And more, for a <strong><a href="https://nextgenthemes.com/plugins/arve-pro/" rel="nofollow">complete feature list</a></strong> and purchase please visit the <strong><a href="https://nextgenthemes.com/plugins/arve-pro/" rel="nofollow">official site</a></strong></li>
|
13 |
</ul>
|
php/Admin/partials/pro-ad.md
DELETED
@@ -1,11 +0,0 @@
|
|
1 |
-
* **Disable links in embeds**
|
2 |
-
For example: Clicking on a title in a YouTube embed will not open a new popup/tab/window. **Prevent video hosts to lead your visitors away from your site!**
|
3 |
-
* **Lazyload mode**
|
4 |
-
Make your site load **faster** by loading only a image instead of the entire video player on pageload.
|
5 |
-
* **Lazyload -> Lightbox**
|
6 |
-
Shows the Video in a Lightbox after clicking a preview image
|
7 |
-
* **Link -> Lightbox**
|
8 |
-
Use simple links as triggers for lightboxed videos
|
9 |
-
* Automatic or custom titles and thumbnails images
|
10 |
-
* 'Expand on click' feature
|
11 |
-
* And more, for a **[complete feature list](https://nextgenthemes.com/plugins/arve-pro/)** and purchase please visit the **[official site](https://nextgenthemes.com/plugins/arve-pro/)**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
php/Admin/partials/settings-sidebar-amp.html
CHANGED
@@ -1,4 +1,2 @@
|
|
1 |
-
<
|
2 |
-
|
3 |
-
<p>If you use AMP you need this.</p>
|
4 |
-
</div>
|
1 |
+
<h3><a href="https://nextgenthemes.com/plugins/arve-amp/">AMP Addon</a></h3>
|
2 |
+
<p>If you use AMP you need this.</p>
|
|
|
|
php/Admin/partials/settings-sidebar-pro.html
CHANGED
@@ -1,28 +1,27 @@
|
|
1 |
-
<
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
</div>
|
1 |
+
<h3><a href="https://nextgenthemes.com/plugins/arve-pro/">Pro Addon</a></h3>
|
2 |
+
|
3 |
+
<p><strong><big>10% off</big></strong> first year with discount code <code>settingspage</code>.</p>
|
4 |
+
|
5 |
+
<p>This plugin is financed by purchases of the <a href="https://nextgenthemes.com/plugins/arve-pro/">Pro Addon</a>. The development and support of this plugins has become a job for me, so I hope you understand that I can not make all features gratis and that you <a href="https://nextgenthemes.com/plugins/arve-pro/">purchase it</a> to get extra features and support the development.</p>
|
6 |
+
|
7 |
+
<ul>
|
8 |
+
<li><strong>Disable links in embeds (killer feature!)</strong><br>
|
9 |
+
For example: Clicking on a title in a YouTube embed will not open a new tab. <strong>Prevent video hosts to lead your visitors away from your site!</strong></li>
|
10 |
+
<li><strong>Lazyload</strong><br>
|
11 |
+
Make your site load <strong>faster</strong> by loading only an image instead of the entire video player on pageload.</li>
|
12 |
+
<li><strong>Lightbox</strong><br>
|
13 |
+
Shows the Video in a Lightbox after clicking a Lazyload preview image</li>
|
14 |
+
<li><strong>Link ⇾ Lightbox</strong><br>
|
15 |
+
Use simple links as triggers for opening Video Lightboxes</li>
|
16 |
+
<li>Auto pause videos when another video is played</li>
|
17 |
+
<li>Automatic or custom thumbnail images</li>
|
18 |
+
<li>Automatic or custom titles on top of your thumbnails</li>
|
19 |
+
<li>‘Expand on click’ feature</li>
|
20 |
+
<li>2 hover & 3 play icon styles</li>
|
21 |
+
<li>Responsive thumbnails (srcset)</li>
|
22 |
+
<li><strong>Feel good about yourself</strong><br>
|
23 |
+
for supporting my 8+ years work on this plugin. Tons of hours, weekends … always worked on improving it</li>
|
24 |
+
<li>Show the latest video of a YouTube channel by using the channel URL (updated/cached hourly)</li>
|
25 |
+
<li><strong><a href="https://nextgenthemes.com/plugins/arve-pro/">Get the ARVE Pro</a></strong></li>
|
26 |
+
</ul>
|
27 |
+
|
|
php/Admin/partials/settings-sidebar-pro.md
DELETED
@@ -1,33 +0,0 @@
|
|
1 |
-
<div class="ngt-sidebar-box">
|
2 |
-
|
3 |
-
### Please rate
|
4 |
-
|
5 |
-
It would really help to get a [5 star rating from you.](https://wordpress.org/support/plugin/advanced-responsive-video-embedder/reviews/#new-post)
|
6 |
-
|
7 |
-
### [Pro Addon][1]
|
8 |
-
|
9 |
-
**<big>10% off</big>** first year with discount code `settingspage`.
|
10 |
-
|
11 |
-
This plugin is financed by purchases of the [Pro Addon][1]. The development and support of this plugins has become a job for me so I hope you understand that I can not make all features gratis and that you [purchase it][1] to get extra features and support the development.
|
12 |
-
|
13 |
-
* **Disable links in embeds (killer feature!)**
|
14 |
-
For example: Clicking on a title in a YouTube embed will not open a new tab. **Prevent video hosts to lead your visitors away from your site!**
|
15 |
-
* **Lazyload**
|
16 |
-
Make your site load **faster** by loading only a image instead of the entire video player on pageload.
|
17 |
-
* **Lightbox**
|
18 |
-
Shows the Video in a Lightbox after clicking a preview image
|
19 |
-
* **Link -> Lightbox**
|
20 |
-
Use simple links as triggers for lightboxed videos
|
21 |
-
* Automatic or custom thumbnail images
|
22 |
-
* Automatic or custom titles on top of your thumbnails
|
23 |
-
* 'Expand on click' feature
|
24 |
-
* 2 hover & 2 icon styles
|
25 |
-
* Responsive thumbnails (srcset)
|
26 |
-
* **Feel good about yourself**
|
27 |
-
for supporting my 5+ years work on this plugin. Tons of hours, weekends … always worked on improving it.
|
28 |
-
* Show the latest video of a YouTube channel by using the channel URL (updated/cached hourly)
|
29 |
-
* **[Get the ARVE Pro Addon][1]**
|
30 |
-
|
31 |
-
</div>
|
32 |
-
|
33 |
-
[1]: https://nextgenthemes.com/plugins/arve-pro/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
php/Admin/partials/settings-sidebar-random-video.html
CHANGED
@@ -1,9 +1,10 @@
|
|
1 |
-
<
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
</
|
|
1 |
+
<h3><a href="https://nextgenthemes.com/plugins/arve-random-video/">Random Video Addon</a></h3>
|
2 |
+
|
3 |
+
<p>Display random video from:</p>
|
4 |
+
|
5 |
+
<ul>
|
6 |
+
<li>YouTube Playlist</li>
|
7 |
+
<li>Vimeo Showcase</li>
|
8 |
+
<li>Comma separated list of video URLs</li>
|
9 |
+
</ul>
|
10 |
+
|
php/Admin/partials/settings-sidebar-rate.html
CHANGED
@@ -1,6 +1,4 @@
|
|
1 |
-
<
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
rating from you.</a></p>
|
6 |
-
</div>
|
1 |
+
<h3 id="please-rate">Please rate</h3>
|
2 |
+
<p>It would really help to get a <a
|
3 |
+
href="https://wordpress.org/support/plugin/advanced-responsive-video-embedder/reviews/#new-post">5 star
|
4 |
+
rating from you.</a></p>
|
|
|
|
php/Common/Admin/functions-debug.php
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace Nextgenthemes\ARVE\Common\Admin;
|
3 |
+
|
4 |
+
use \Nextgenthemes\ARVE\Common;
|
5 |
+
|
6 |
+
function plugin_ver_status( $folder_and_filename ) {
|
7 |
+
|
8 |
+
$file = WP_PLUGIN_DIR . '/' . $folder_and_filename;
|
9 |
+
|
10 |
+
if ( ! is_file( $file ) ) {
|
11 |
+
return 'NOT INSTALLED';
|
12 |
+
}
|
13 |
+
|
14 |
+
$data = get_plugin_data( $file );
|
15 |
+
$out = $data['Version'];
|
16 |
+
|
17 |
+
if ( ! is_plugin_active( $folder_and_filename ) ) {
|
18 |
+
$out .= ' INACTIVE';
|
19 |
+
}
|
20 |
+
|
21 |
+
return $out; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
22 |
+
}
|
23 |
+
|
24 |
+
function print_active_plugins() {
|
25 |
+
$allplugins = get_plugins();
|
26 |
+
$active_plugins = get_option( 'active_plugins', [] );
|
27 |
+
|
28 |
+
echo "ACTIVE PLUGINS:\n";
|
29 |
+
foreach ( $allplugins as $plugin_path => $plugin ) {
|
30 |
+
// If the plugin isn't active, don't show it.
|
31 |
+
if ( ! in_array( $plugin_path, $active_plugins, true ) ) {
|
32 |
+
continue;
|
33 |
+
}
|
34 |
+
echo esc_html( "{$plugin['Name']}: {$plugin['Version']}\n" );
|
35 |
+
}
|
36 |
+
}
|
37 |
+
|
38 |
+
function print_network_active_plugins() {
|
39 |
+
|
40 |
+
if ( ! is_multisite() ) {
|
41 |
+
return;
|
42 |
+
}
|
43 |
+
|
44 |
+
echo "NETWORK ACTIVE PLUGINS: \n";
|
45 |
+
$allplugins = wp_get_active_network_plugins();
|
46 |
+
$active_plugins = get_site_option( 'active_sitewide_plugins', [] );
|
47 |
+
foreach ( $allplugins as $plugin_path ) {
|
48 |
+
$plugin_base = plugin_basename( $plugin_path );
|
49 |
+
// If the plugin isn't active, don't show it.
|
50 |
+
if ( ! array_key_exists( $plugin_base, $active_plugins ) ) {
|
51 |
+
continue;
|
52 |
+
}
|
53 |
+
$plugin = get_plugin_data( $plugin_path );
|
54 |
+
echo esc_html( "{$plugin['Name']}: {$plugin['Version']}\n" );
|
55 |
+
}
|
56 |
+
}
|
php/Common/Admin/functions-settings.php
CHANGED
@@ -9,19 +9,17 @@ function label_text( $option ) {
|
|
9 |
<?php
|
10 |
echo esc_html( $option['label'] );
|
11 |
|
12 |
-
if (
|
13 |
-
Common\contains( __NAMESPACE__, 'ARVE' ) &&
|
14 |
-
! in_array( $option['tag'], [ 'main', 'html5', 'urlparams' ], true )
|
15 |
-
) {
|
16 |
|
17 |
printf(
|
18 |
-
' <a href="https://nextgenthemes.com/plugins/arve-%s"
|
19 |
-
esc_attr(
|
20 |
-
esc_html(
|
21 |
);
|
22 |
}
|
23 |
|
24 |
-
if ( ! empty( $option['tag'] ) && 'not' === $option['tag'] ) :
|
|
|
25 |
|
26 |
<span class="button-primary button-primary--ngt-small">
|
27 |
<?= esc_html( $option['tag'] ); ?>
|
@@ -101,9 +99,9 @@ function print_licensekey_field( $key, $option ) {
|
|
101 |
<?php label_text( $option ); ?>
|
102 |
<input v-model="<?= esc_attr( "vm.$key" ); ?>" type="text" class="medium-text" style="width: 350px;" <?= esc_attr( $readonly ); ?> />
|
103 |
<?php if ( Common\has_valid_key( $key ) ) : ?>
|
104 |
-
<button @click="action( 'deactivate', '<?= esc_attr( $key ); ?>' )">Deactivate</button>
|
105 |
<?php else : ?>
|
106 |
-
<button @click="action( 'activate', '<?= esc_attr( $key ); ?>' )">Activate</button>
|
107 |
<?php endif; ?>
|
108 |
<br>
|
109 |
Status: <?= esc_html( "{{ vm.{$key}_status }}" ); ?>
|
@@ -164,7 +162,7 @@ function block_attr( $key, $option ) {
|
|
164 |
} else {
|
165 |
$block_attr = [
|
166 |
'class' => "ngt-option-block ngt-option-block--$key ngt-option-block--{$option['tag']}",
|
167 |
-
'v-show' =>
|
168 |
];
|
169 |
}
|
170 |
|
9 |
<?php
|
10 |
echo esc_html( $option['label'] );
|
11 |
|
12 |
+
if ( $option['premium'] ) {
|
|
|
|
|
|
|
13 |
|
14 |
printf(
|
15 |
+
' <span>(</span><a href="https://nextgenthemes.com/plugins/arve-%s">%s</a><span>)</span>',
|
16 |
+
esc_attr( $option['tag'] ),
|
17 |
+
esc_html( $option['tag_name'] )
|
18 |
);
|
19 |
}
|
20 |
|
21 |
+
if ( ! empty( $option['tag'] ) && 'not' === $option['tag'] ) : // TODO this seems to be unused
|
22 |
+
?>
|
23 |
|
24 |
<span class="button-primary button-primary--ngt-small">
|
25 |
<?= esc_html( $option['tag'] ); ?>
|
99 |
<?php label_text( $option ); ?>
|
100 |
<input v-model="<?= esc_attr( "vm.$key" ); ?>" type="text" class="medium-text" style="width: 350px;" <?= esc_attr( $readonly ); ?> />
|
101 |
<?php if ( Common\has_valid_key( $key ) ) : ?>
|
102 |
+
<button @click="action( 'deactivate', '<?= esc_attr( $key ); ?>' )" class="button button-secondary">Deactivate</button>
|
103 |
<?php else : ?>
|
104 |
+
<button @click="action( 'activate', '<?= esc_attr( $key ); ?>' )" class="button button-secondary">Activate</button>
|
105 |
<?php endif; ?>
|
106 |
<br>
|
107 |
Status: <?= esc_html( "{{ vm.{$key}_status }}" ); ?>
|
162 |
} else {
|
163 |
$block_attr = [
|
164 |
'class' => "ngt-option-block ngt-option-block--$key ngt-option-block--{$option['tag']}",
|
165 |
+
'v-show' => "sectionsDisplayed['{$option['tag']}']",
|
166 |
];
|
167 |
}
|
168 |
|
php/Common/Admin/partials/debug-info.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace Nextgenthemes\ARVE\Common\Admin;
|
3 |
+
|
4 |
+
?>
|
5 |
+
<textarea style="font-family: monospace; width: 100%" rows="25">
|
6 |
+
ARVE: <?= esc_html( plugin_ver_status( 'advanced-responsive-video-embedder/advanced-responsive-video-embedder.php' ) . "\n" ); ?>
|
7 |
+
ARVE Pro: <?= esc_html( plugin_ver_status( 'arve-pro/arve-pro.php' ) . "\n" ); ?>
|
8 |
+
ARVE AMP: <?= esc_html( plugin_ver_status( 'arve-amp/arve-amp.php' ) . "\n" ); ?>
|
9 |
+
ARVE Sticky Videos: <?= esc_html( plugin_ver_status( 'arve-sticky-videos/arve-sticky-videos.php' ) . "\n" ); ?>
|
10 |
+
ARVE Random Video: <?= esc_html( plugin_ver_status( 'arve-random-video/arve-random-video.php' ) . "\n" ); ?>
|
11 |
+
WordPress Version: <?= esc_html( $GLOBALS['wp_version'] . "\n" ); ?>
|
12 |
+
PHP Version: <?= esc_html( phpversion() . "\n" ); ?>
|
13 |
+
REST URL: <?= esc_html( get_rest_url( null, $this->rest_namespace ) . "\n" ); ?>
|
14 |
+
|
15 |
+
<?php print_active_plugins(); ?>
|
16 |
+
|
17 |
+
<?php print_network_active_plugins(); ?>
|
18 |
+
|
19 |
+
ARVE OPTIONS:
|
20 |
+
<?php var_dump( get_option( 'nextgenthemes_arve' ) ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_var_dump ?>
|
21 |
+
</textarea>
|
php/Common/Settings.php
CHANGED
@@ -2,14 +2,15 @@
|
|
2 |
namespace Nextgenthemes\ARVE\Common;
|
3 |
|
4 |
class Settings {
|
5 |
-
|
|
|
6 |
public $sections = [];
|
|
|
7 |
private $menu_title = '';
|
8 |
private $option_key = '';
|
9 |
private $slugged_namspace = '';
|
10 |
private $slashed_namspace = '';
|
11 |
private $rest_namespace = '';
|
12 |
-
private $rest_url = '';
|
13 |
private $settings = [];
|
14 |
private $settings_page_title = '';
|
15 |
private $options_defaults = [];
|
@@ -18,24 +19,27 @@ class Settings {
|
|
18 |
public function __construct( $args ) {
|
19 |
|
20 |
$defaults = [
|
21 |
-
'menu_parent_slug'
|
22 |
-
'sections'
|
|
|
|
|
|
|
23 |
];
|
24 |
|
25 |
$args = wp_parse_args( $args, $defaults );
|
26 |
|
27 |
$this->settings = $args['settings'];
|
28 |
$this->sections = $args['sections'];
|
|
|
29 |
$this->menu_title = $args['menu_title'];
|
30 |
$this->settings_page_title = $args['settings_page_title'];
|
31 |
$this->slugged_namespace = sanitize_key( str_replace( '\\', '_', $args['namespace'] ) );
|
32 |
$this->slashed_namespace = str_replace( '_', '/', $this->slugged_namespace );
|
33 |
$this->rest_namespace = $this->slugged_namespace . '/v1';
|
34 |
-
$this->rest_url = get_home_url() . '/wp-json/' . $this->rest_namespace;
|
35 |
$this->menu_parent_slug = $args['menu_parent_slug'];
|
36 |
|
37 |
foreach ( $this->settings as $key => $value ) {
|
38 |
-
|
39 |
$this->options_tags[] = $value['tag'];
|
40 |
|
41 |
$this->options_defaults[ $key ] = $value['default'];
|
@@ -104,7 +108,7 @@ class Settings {
|
|
104 |
[
|
105 |
'methods' => 'POST',
|
106 |
'args' => $this->settings,
|
107 |
-
'permission_callback'
|
108 |
return current_user_can( 'manage_options' );
|
109 |
},
|
110 |
'callback' => function( \WP_REST_Request $request ) {
|
@@ -118,38 +122,36 @@ class Settings {
|
|
118 |
public function assets( $page ) {
|
119 |
|
120 |
// Check if we are currently viewing our setting page
|
121 |
-
if ( !
|
122 |
return;
|
123 |
}
|
124 |
|
125 |
-
enqueue_asset(
|
126 |
-
[
|
127 |
-
'handle' => 'nextgenthemes-settings',
|
128 |
-
'src' => plugin_or_theme_src( 'build/common/settings.css' ),
|
129 |
-
'path' => dirname( dirname( __DIR__ ) ) . '/build/common/settings.css',
|
130 |
-
]
|
131 |
-
);
|
132 |
-
|
133 |
enqueue_asset(
|
134 |
[
|
135 |
'handle' => 'nextgenthemes-settings',
|
136 |
-
'src' => plugin_or_theme_src( 'build/common/settings.
|
137 |
-
'path' => dirname( dirname( __DIR__ ) ) . '/build/common/settings.
|
138 |
-
'deps' => [ 'jquery' ],
|
139 |
-
'async' => false,
|
140 |
]
|
141 |
);
|
142 |
|
143 |
-
|
144 |
-
|
145 |
-
'
|
146 |
-
$this->
|
|
|
|
|
|
|
|
|
|
|
|
|
147 |
[
|
148 |
-
'
|
149 |
-
'
|
150 |
-
'
|
151 |
-
'
|
152 |
-
'
|
|
|
|
|
153 |
]
|
154 |
);
|
155 |
}
|
@@ -159,7 +161,9 @@ class Settings {
|
|
159 |
// phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped
|
160 |
foreach ( $this->settings as $key => $option ) {
|
161 |
|
162 |
-
$
|
|
|
|
|
163 |
|
164 |
if ( 'hidden' !== $field_type ) :
|
165 |
?>
|
@@ -182,6 +186,27 @@ class Settings {
|
|
182 |
// phpcs:enable WordPress.Security.EscapeOutput.OutputNotEscaped
|
183 |
}
|
184 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
185 |
public function print_save_section() {
|
186 |
?>
|
187 |
<p>
|
@@ -189,57 +214,147 @@ class Settings {
|
|
189 |
@click='saveOptions'
|
190 |
:disabled='isSaving'
|
191 |
class='button button-primary'
|
192 |
-
>
|
|
|
|
|
193 |
<strong v-if='message'>{{ message }}</strong>
|
194 |
<img
|
195 |
v-if='isSaving == true'
|
196 |
class="wrap--nextgenthemes__loading-indicator"
|
197 |
src='<?php echo esc_url( get_admin_url() . '/images/wpspin_light-2x.gif' ); ?>'
|
198 |
-
alt='Loading indicator'
|
|
|
199 |
</p>
|
200 |
<?php
|
201 |
}
|
202 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
203 |
public function print_admin_page() {
|
204 |
?>
|
205 |
-
<div class='wrap wrap--nextgenthemes'>
|
206 |
<h2><?php echo esc_html( get_admin_page_title() ); ?></h2>
|
|
|
207 |
<div class="ngt-settings-grid">
|
208 |
-
<div class="ngt-settings-grid__content"
|
209 |
<?php
|
210 |
-
|
211 |
-
do_action( $this->slashed_namespace . '/admin/settings_header', $this );
|
212 |
$this->print_save_section();
|
|
|
213 |
$this->print_settings_blocks();
|
214 |
$this->print_save_section();
|
|
|
215 |
?>
|
216 |
-
<p>
|
217 |
-
<?php
|
218 |
-
foreach ( $this->sections as $key => $label ) {
|
219 |
-
|
220 |
-
if ( in_array( $key, [ 'debug', 'randomvideo' ] ) )
|
221 |
-
continue;
|
222 |
-
?>
|
223 |
-
<button
|
224 |
-
@click='resetOptions("<?= $key; ?>")'
|
225 |
-
:disabled='isSaving'
|
226 |
-
class='button button-secondary'
|
227 |
-
><?php
|
228 |
-
esc_html_e( 'Reset', 'advanced-responsive-video-embedder' );
|
229 |
-
esc_html_e( " $label" ) ;
|
230 |
-
?></button>
|
231 |
-
<?php
|
232 |
-
}
|
233 |
-
?>
|
234 |
-
<button
|
235 |
-
@click='resetOptions("all")'
|
236 |
-
:disabled='isSaving'
|
237 |
-
class='button button-secondary'
|
238 |
-
><?php esc_html_e( 'Reset ALL Options', 'advanced-responsive-video-embedder' ); ?></button>
|
239 |
-
</p>
|
240 |
</div>
|
241 |
<div class="ngt-settings-grid__sidebar">
|
242 |
<?php do_action( $this->slashed_namespace . '/admin/settings_sidebar', $this ); ?>
|
|
|
243 |
</div>
|
244 |
</div>
|
245 |
</div>
|
2 |
namespace Nextgenthemes\ARVE\Common;
|
3 |
|
4 |
class Settings {
|
5 |
+
private static $no_reset_sections = [ 'debug', 'random-video', 'keys' ];
|
6 |
+
|
7 |
public $sections = [];
|
8 |
+
private $premium_sections = [];
|
9 |
private $menu_title = '';
|
10 |
private $option_key = '';
|
11 |
private $slugged_namspace = '';
|
12 |
private $slashed_namspace = '';
|
13 |
private $rest_namespace = '';
|
|
|
14 |
private $settings = [];
|
15 |
private $settings_page_title = '';
|
16 |
private $options_defaults = [];
|
19 |
public function __construct( $args ) {
|
20 |
|
21 |
$defaults = [
|
22 |
+
'menu_parent_slug' => 'options-general.php',
|
23 |
+
'sections' => [ 'main' => 'Main' ],
|
24 |
+
'premium_sections' => [],
|
25 |
+
'settings_page_title' => 'Default Page Title',
|
26 |
+
'default_menu_title' => 'Default Menu Title',
|
27 |
];
|
28 |
|
29 |
$args = wp_parse_args( $args, $defaults );
|
30 |
|
31 |
$this->settings = $args['settings'];
|
32 |
$this->sections = $args['sections'];
|
33 |
+
$this->premium_sections = $args['premium_sections'];
|
34 |
$this->menu_title = $args['menu_title'];
|
35 |
$this->settings_page_title = $args['settings_page_title'];
|
36 |
$this->slugged_namespace = sanitize_key( str_replace( '\\', '_', $args['namespace'] ) );
|
37 |
$this->slashed_namespace = str_replace( '_', '/', $this->slugged_namespace );
|
38 |
$this->rest_namespace = $this->slugged_namespace . '/v1';
|
|
|
39 |
$this->menu_parent_slug = $args['menu_parent_slug'];
|
40 |
|
41 |
foreach ( $this->settings as $key => $value ) {
|
42 |
+
|
43 |
$this->options_tags[] = $value['tag'];
|
44 |
|
45 |
$this->options_defaults[ $key ] = $value['default'];
|
108 |
[
|
109 |
'methods' => 'POST',
|
110 |
'args' => $this->settings,
|
111 |
+
'permission_callback' => function() {
|
112 |
return current_user_can( 'manage_options' );
|
113 |
},
|
114 |
'callback' => function( \WP_REST_Request $request ) {
|
122 |
public function assets( $page ) {
|
123 |
|
124 |
// Check if we are currently viewing our setting page
|
125 |
+
if ( ! str_ends_with( $page, $this->slugged_namespace ) ) {
|
126 |
return;
|
127 |
}
|
128 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
129 |
enqueue_asset(
|
130 |
[
|
131 |
'handle' => 'nextgenthemes-settings',
|
132 |
+
'src' => plugin_or_theme_src( 'build/common/settings.css' ),
|
133 |
+
'path' => dirname( dirname( __DIR__ ) ) . '/build/common/settings.css',
|
|
|
|
|
134 |
]
|
135 |
);
|
136 |
|
137 |
+
$settings_data = [
|
138 |
+
'options' => $this->options,
|
139 |
+
'home_url' => get_home_url(),
|
140 |
+
'rest_url' => esc_url( get_rest_url( null, $this->rest_namespace ) ),
|
141 |
+
'nonce' => wp_create_nonce( 'wp_rest' ),
|
142 |
+
'settings' => $this->settings,
|
143 |
+
'sections' => $this->sections,
|
144 |
+
];
|
145 |
+
|
146 |
+
enqueue_asset(
|
147 |
[
|
148 |
+
'handle' => 'nextgenthemes-settings',
|
149 |
+
'src' => plugin_or_theme_src( 'build/common/settings.js' ),
|
150 |
+
'path' => dirname( dirname( __DIR__ ) ) . '/build/common/settings.js',
|
151 |
+
'deps' => [ 'jquery' ],
|
152 |
+
'async' => false,
|
153 |
+
'inline_script' => "var {$this->slugged_namespace} = " . \wp_json_encode( $settings_data ) . ';',
|
154 |
+
'inline_script_pos' => 'before',
|
155 |
]
|
156 |
);
|
157 |
}
|
161 |
// phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped
|
162 |
foreach ( $this->settings as $key => $option ) {
|
163 |
|
164 |
+
$option['premium'] = in_array( $option['tag'], $this->premium_sections, true );
|
165 |
+
$option['tag_name'] = $this->sections[ $option['tag'] ];
|
166 |
+
$field_type = isset( $option['ui'] ) ? $option['ui'] : $option['type'];
|
167 |
|
168 |
if ( 'hidden' !== $field_type ) :
|
169 |
?>
|
186 |
// phpcs:enable WordPress.Security.EscapeOutput.OutputNotEscaped
|
187 |
}
|
188 |
|
189 |
+
private function print_settings_tabs() {
|
190 |
+
?>
|
191 |
+
<h2 class="nav-tab-wrapper">
|
192 |
+
<a @click='showAllSectionsButDebug()' class="nav-tab">All Options</button>
|
193 |
+
<?php
|
194 |
+
foreach ( $this->sections as $slug => $name ) :
|
195 |
+
|
196 |
+
$classes = in_array( $slug, $this->premium_sections, true ) ? 'nav-tab nav-tab--ngt-highlight' : 'nav-tab';
|
197 |
+
?>
|
198 |
+
<a
|
199 |
+
@click="showSection('<?= esc_attr($slug) ?>')"
|
200 |
+
class="<?= esc_attr($classes) ?>"
|
201 |
+
v-bind:class='{ "nav-tab-active": sectionsDisplayed["<?= esc_attr($slug) ?>"] }'
|
202 |
+
>
|
203 |
+
<?= esc_html($name) ?>
|
204 |
+
</a>
|
205 |
+
<?php endforeach; ?>
|
206 |
+
</h2>
|
207 |
+
<?php
|
208 |
+
}
|
209 |
+
|
210 |
public function print_save_section() {
|
211 |
?>
|
212 |
<p>
|
214 |
@click='saveOptions'
|
215 |
:disabled='isSaving'
|
216 |
class='button button-primary'
|
217 |
+
>
|
218 |
+
Save
|
219 |
+
</button>
|
220 |
<strong v-if='message'>{{ message }}</strong>
|
221 |
<img
|
222 |
v-if='isSaving == true'
|
223 |
class="wrap--nextgenthemes__loading-indicator"
|
224 |
src='<?php echo esc_url( get_admin_url() . '/images/wpspin_light-2x.gif' ); ?>'
|
225 |
+
alt='Loading indicator'
|
226 |
+
/>
|
227 |
</p>
|
228 |
<?php
|
229 |
}
|
230 |
|
231 |
+
private function print_paid_section_message() {
|
232 |
+
|
233 |
+
if ( empty( $this->premium_sections ) ) {
|
234 |
+
return;
|
235 |
+
}
|
236 |
+
|
237 |
+
foreach ( $this->premium_sections as $slug ) {
|
238 |
+
$d_sections[] = sprintf( "sectionsDisplayed['%s']", esc_attr($slug) );
|
239 |
+
}
|
240 |
+
|
241 |
+
$v_show = implode( ' || ', $d_sections );
|
242 |
+
// phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped
|
243 |
+
?>
|
244 |
+
<div class="ngt-block" v-show="<?= $v_show ?>" >
|
245 |
+
<p><?php esc_html_e( 'You may already set options for addons but they will only take effect if the associated addons are installed.', 'advanced-responsive-video-embedder' ); ?></p>
|
246 |
+
</div>
|
247 |
+
<?php
|
248 |
+
// phpcs:enable WordPress.Security.EscapeOutput.OutputNotEscaped
|
249 |
+
}
|
250 |
+
|
251 |
+
private function print_debug_info_block() {
|
252 |
+
?>
|
253 |
+
<div class="ngt-block" v-show="sectionsDisplayed.debug">
|
254 |
+
<?php require_once __DIR__ . '/Admin/partials/debug-info.php'; ?>
|
255 |
+
</div>
|
256 |
+
<?php
|
257 |
+
}
|
258 |
+
|
259 |
+
private function print_reset_bottons() {
|
260 |
+
?>
|
261 |
+
<p>
|
262 |
+
<?php
|
263 |
+
foreach ( $this->sections as $key => $label ) {
|
264 |
+
|
265 |
+
if ( in_array( $key, self::$no_reset_sections, true ) ) {
|
266 |
+
continue;
|
267 |
+
}
|
268 |
+
|
269 |
+
?>
|
270 |
+
<button
|
271 |
+
@click="resetOptions('<?= esc_attr($key); ?>')"
|
272 |
+
:disabled='isSaving'
|
273 |
+
class='button button--ngt-reset button-secondary'
|
274 |
+
v-show="sectionsDisplayed['<?= esc_attr( $key ); ?>']"
|
275 |
+
>
|
276 |
+
<?php
|
277 |
+
printf(
|
278 |
+
// translators: Options section
|
279 |
+
esc_html__( 'Reset %s section', 'advanced-responsive-video-embedder' ),
|
280 |
+
esc_html( $label )
|
281 |
+
);
|
282 |
+
?>
|
283 |
+
</button>
|
284 |
+
<?php
|
285 |
+
}
|
286 |
+
?>
|
287 |
+
</p>
|
288 |
+
<?php
|
289 |
+
}
|
290 |
+
|
291 |
+
public function print_errors() {
|
292 |
+
?>
|
293 |
+
<div class="ngt-block" v-if="errors.length">
|
294 |
+
<strong>Please correct the following error(s):</strong>
|
295 |
+
<ul>
|
296 |
+
<li v-for="error in errors">{{ error }}</li>
|
297 |
+
</ul>
|
298 |
+
</div>
|
299 |
+
<?php
|
300 |
+
}
|
301 |
+
|
302 |
+
public function print_outdated_php_msg() {
|
303 |
+
|
304 |
+
if ( \version_compare(PHP_VERSION, '5.6.40', '<=') ) {
|
305 |
+
|
306 |
+
?>
|
307 |
+
<div class="ngt-sidebar-box">
|
308 |
+
<p>
|
309 |
+
<?php
|
310 |
+
printf(
|
311 |
+
// translators: PHP version, URL, Contact URL
|
312 |
+
kses_basic( __( 'Your PHP version %1$s is very <a href="%2$s">outdated, insecure and slow</a>. No pressure, this plugin will continue to work with PHP 5.6, but at some undecided point I like to use features from PHP 7. If you can not update for some reason please tell <a href="%3$s">tell me</a>. WordPress itself planned to require PHP 7 in a feature release but decided not to persue this for now because so many people still run on outdated versions. WordPress already has beta support for 8.0 but I would not go with 8.0 just yet.', 'advanced-responsive-video-embedder' ) ), // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
313 |
+
esc_html( PHP_VERSION ),
|
314 |
+
esc_url( 'https://www.php.net/supported-versions' ),
|
315 |
+
esc_url( 'https://nextgenthemes.com/contact/' )
|
316 |
+
);
|
317 |
+
?>
|
318 |
+
</p>
|
319 |
+
</div>
|
320 |
+
<?php
|
321 |
+
} elseif ( \version_compare(PHP_VERSION, '7.3.23', '<') ) {
|
322 |
+
?>
|
323 |
+
<div class="ngt-sidebar-box">
|
324 |
+
<p>
|
325 |
+
<?php
|
326 |
+
printf(
|
327 |
+
// translators: URL
|
328 |
+
kses_basic( __( 'Just a heads up, your PHP version %1$s is outdated and potentially insecure. See what versions are <a href="%2$s">good here</a>. WordPress already has beta support for 8.0 but I would not go with 8.0 just yet.', 'advanced-responsive-video-embedder' ) ), // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
329 |
+
esc_html( PHP_VERSION ),
|
330 |
+
esc_url( 'https://www.php.net/supported-versions' )
|
331 |
+
);
|
332 |
+
?>
|
333 |
+
</p>
|
334 |
+
</div>
|
335 |
+
<?php
|
336 |
+
}
|
337 |
+
}
|
338 |
+
|
339 |
public function print_admin_page() {
|
340 |
?>
|
341 |
+
<div class='wrap wrap--nextgenthemes' id='nextgenthemes-vue'>
|
342 |
<h2><?php echo esc_html( get_admin_page_title() ); ?></h2>
|
343 |
+
<?php $this->print_settings_tabs(); ?>
|
344 |
<div class="ngt-settings-grid">
|
345 |
+
<div class="ngt-settings-grid__content" >
|
346 |
<?php
|
347 |
+
$this->print_paid_section_message();
|
|
|
348 |
$this->print_save_section();
|
349 |
+
$this->print_debug_info_block();
|
350 |
$this->print_settings_blocks();
|
351 |
$this->print_save_section();
|
352 |
+
$this->print_reset_bottons();
|
353 |
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
354 |
</div>
|
355 |
<div class="ngt-settings-grid__sidebar">
|
356 |
<?php do_action( $this->slashed_namespace . '/admin/settings_sidebar', $this ); ?>
|
357 |
+
<?php $this->print_outdated_php_msg(); ?>
|
358 |
</div>
|
359 |
</div>
|
360 |
</div>
|
php/Common/functions-assets.php
CHANGED
@@ -26,7 +26,7 @@ function deps_and_ver( $path ) {
|
|
26 |
$asset_php = $pathinfo['dirname'] . DIRECTORY_SEPARATOR . $pathinfo['filename'] . '.asset.php';
|
27 |
|
28 |
if ( is_file( $asset_php ) ) {
|
29 |
-
$dv = require
|
30 |
|
31 |
if ( 'css' === $pathinfo['extension'] ) {
|
32 |
$dv['dependencies'] = [];
|
@@ -41,27 +41,30 @@ function deps_and_ver( $path ) {
|
|
41 |
function replace_extension($filename, $new_extension) {
|
42 |
$info = pathinfo($filename);
|
43 |
$dir = $info['dirname'] ? $info['dirname'] . DIRECTORY_SEPARATOR : '';
|
44 |
-
|
45 |
return $dir . $info['filename'] . '.' . $new_extension;
|
46 |
}
|
47 |
|
48 |
function asset( array $args ) {
|
49 |
|
50 |
$defaults = [
|
51 |
-
'path'
|
52 |
-
'async'
|
53 |
-
'cdn_src'
|
54 |
-
'defer'
|
55 |
-
'deps'
|
56 |
-
'enqueue'
|
57 |
-
'enqueue_hooks'
|
58 |
-
'handle'
|
59 |
-
'in_footer'
|
60 |
-
'integrity'
|
61 |
-
'media'
|
62 |
-
'src'
|
63 |
-
'ver'
|
64 |
-
'mce'
|
|
|
|
|
|
|
65 |
];
|
66 |
|
67 |
$args = wp_parse_args( $args, $defaults );
|
@@ -82,6 +85,10 @@ function asset( array $args ) {
|
|
82 |
|
83 |
wp_register_script( $args['handle'], $args['src'], $args['deps'], $args['ver'], $args['in_footer'] );
|
84 |
|
|
|
|
|
|
|
|
|
85 |
if ( $args['integrity'] || $args['async'] || $args['defer'] ) {
|
86 |
add_attr_to_asset( 'script', $args );
|
87 |
}
|
@@ -96,6 +103,10 @@ function asset( array $args ) {
|
|
96 |
} else {
|
97 |
wp_register_style( $args['handle'], $args['src'], $args['deps'], $args['ver'], $args['media'] );
|
98 |
|
|
|
|
|
|
|
|
|
99 |
if ( $args['integrity'] ) {
|
100 |
add_attr_to_asset( 'style', $args );
|
101 |
}
|
26 |
$asset_php = $pathinfo['dirname'] . DIRECTORY_SEPARATOR . $pathinfo['filename'] . '.asset.php';
|
27 |
|
28 |
if ( is_file( $asset_php ) ) {
|
29 |
+
$dv = require $asset_php;
|
30 |
|
31 |
if ( 'css' === $pathinfo['extension'] ) {
|
32 |
$dv['dependencies'] = [];
|
41 |
function replace_extension($filename, $new_extension) {
|
42 |
$info = pathinfo($filename);
|
43 |
$dir = $info['dirname'] ? $info['dirname'] . DIRECTORY_SEPARATOR : '';
|
44 |
+
|
45 |
return $dir . $info['filename'] . '.' . $new_extension;
|
46 |
}
|
47 |
|
48 |
function asset( array $args ) {
|
49 |
|
50 |
$defaults = [
|
51 |
+
'path' => '',
|
52 |
+
'async' => true,
|
53 |
+
'cdn_src' => '',
|
54 |
+
'defer' => false,
|
55 |
+
'deps' => [],
|
56 |
+
'enqueue' => false,
|
57 |
+
'enqueue_hooks' => [],
|
58 |
+
'handle' => '',
|
59 |
+
'in_footer' => true,
|
60 |
+
'integrity' => '',
|
61 |
+
'media' => 'all',
|
62 |
+
'src' => '',
|
63 |
+
'ver' => null,
|
64 |
+
'mce' => false,
|
65 |
+
'inline_style' => '',
|
66 |
+
'inline_script' => '',
|
67 |
+
'inline_script_pos' => 'after',
|
68 |
];
|
69 |
|
70 |
$args = wp_parse_args( $args, $defaults );
|
85 |
|
86 |
wp_register_script( $args['handle'], $args['src'], $args['deps'], $args['ver'], $args['in_footer'] );
|
87 |
|
88 |
+
if ( $args['inline_script'] ) {
|
89 |
+
wp_add_inline_script( $args['handle'], $args['inline_script'], $args['inline_script_pos'] );
|
90 |
+
}
|
91 |
+
|
92 |
if ( $args['integrity'] || $args['async'] || $args['defer'] ) {
|
93 |
add_attr_to_asset( 'script', $args );
|
94 |
}
|
103 |
} else {
|
104 |
wp_register_style( $args['handle'], $args['src'], $args['deps'], $args['ver'], $args['media'] );
|
105 |
|
106 |
+
if ( $args['inline_style'] ) {
|
107 |
+
wp_add_inline_style( $args['handle'], $args['inline_style'] );
|
108 |
+
}
|
109 |
+
|
110 |
if ( $args['integrity'] ) {
|
111 |
add_attr_to_asset( 'style', $args );
|
112 |
}
|
php/Common/functions-compat.php
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! function_exists( 'str_contains' ) ) {
|
4 |
+
|
5 |
+
function str_contains( $haystack, $needle ) {
|
6 |
+
return false !== strpos( $haystack, $needle );
|
7 |
+
}
|
8 |
+
}
|
9 |
+
|
10 |
+
if ( ! function_exists( 'str_starts_with' ) ) {
|
11 |
+
|
12 |
+
function str_starts_with( $haystack, $needle ) {
|
13 |
+
return $haystack[0] === $needle[0] ? strncmp( $haystack, $needle, strlen( $needle ) ) === 0 : false;
|
14 |
+
}
|
15 |
+
}
|
16 |
+
|
17 |
+
if ( ! function_exists( 'str_ends_with' ) ) {
|
18 |
+
|
19 |
+
function str_ends_with( $haystack, $needle ) {
|
20 |
+
|
21 |
+
if ( '' === $needle ) {
|
22 |
+
return true;
|
23 |
+
}
|
24 |
+
|
25 |
+
// search forward starting from end minus needle length characters
|
26 |
+
$diff = strlen( $haystack ) - strlen( $needle );
|
27 |
+
|
28 |
+
return $diff >= 0 && strpos( $haystack, $needle, $diff ) !== false;
|
29 |
+
}
|
30 |
+
}
|
php/Common/functions-deprecated.php
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace Nextgenthemes\ARVE\Common;
|
3 |
+
|
4 |
+
function contains( $haystack, $needle ) {
|
5 |
+
return str_contains( $haystack, $needle );
|
6 |
+
}
|
7 |
+
|
8 |
+
function starts_with( $haystack, $needle ) {
|
9 |
+
return str_starts_with( $haystack, $needle );
|
10 |
+
}
|
11 |
+
|
12 |
+
function ends_with( $haystack, $needle ) {
|
13 |
+
return str_ends_with( $haystack, $needle );
|
14 |
+
}
|
php/Common/functions-license.php
CHANGED
@@ -1,6 +1,27 @@
|
|
1 |
<?php
|
2 |
namespace Nextgenthemes\ARVE\Common;
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
function has_valid_key( $product ) {
|
5 |
$o = (array) get_option( 'nextgenthemes' );
|
6 |
|
1 |
<?php
|
2 |
namespace Nextgenthemes\ARVE\Common;
|
3 |
|
4 |
+
function check_product_keys() {
|
5 |
+
|
6 |
+
$products = get_products();
|
7 |
+
|
8 |
+
unset( $products['arve_amp'] );
|
9 |
+
|
10 |
+
foreach ( $products as $key => $value ) :
|
11 |
+
|
12 |
+
if ( $value['active'] && ! $value['valid_key'] ) {
|
13 |
+
$msg = sprintf(
|
14 |
+
// Translators: URL, Product name
|
15 |
+
kses_basic( __( '<a href="%1$s">%2$s</a> license not activated or valid', 'advanced-responsive-video-embedder' ) ),
|
16 |
+
esc_url( 'https://nextgenthemes.com/plugins/arve/documentation/installing-and-license-management/' ),
|
17 |
+
$value['name']
|
18 |
+
);
|
19 |
+
|
20 |
+
throw new \Exception($msg);
|
21 |
+
}
|
22 |
+
endforeach;
|
23 |
+
}
|
24 |
+
|
25 |
function has_valid_key( $product ) {
|
26 |
$o = (array) get_option( 'nextgenthemes' );
|
27 |
|
php/Common/functions-misc.php
CHANGED
@@ -82,9 +82,9 @@ function array_insert_before($key, array &$array, $new_key, $new_value) {
|
|
82 |
$new = array();
|
83 |
foreach ($array as $k => $value) {
|
84 |
if ($k === $key) {
|
85 |
-
$new[$new_key] = $new_value;
|
86 |
}
|
87 |
-
$new[$k] = $value;
|
88 |
}
|
89 |
return $new;
|
90 |
}
|
@@ -112,12 +112,12 @@ function array_insert_after($key, array &$array, $new_key, $new_value) {
|
|
112 |
if (array_key_exists($key, $array)) {
|
113 |
$new = array();
|
114 |
foreach ($array as $k => $value) {
|
115 |
-
$new[$k] = $value;
|
116 |
if ($k === $key) {
|
117 |
-
$new[$new_key] = $new_value;
|
118 |
}
|
119 |
-
|
120 |
-
|
121 |
}
|
122 |
return false;
|
123 |
}
|
82 |
$new = array();
|
83 |
foreach ($array as $k => $value) {
|
84 |
if ($k === $key) {
|
85 |
+
$new[ $new_key ] = $new_value;
|
86 |
}
|
87 |
+
$new[ $k ] = $value;
|
88 |
}
|
89 |
return $new;
|
90 |
}
|
112 |
if (array_key_exists($key, $array)) {
|
113 |
$new = array();
|
114 |
foreach ($array as $k => $value) {
|
115 |
+
$new[ $k ] = $value;
|
116 |
if ($k === $key) {
|
117 |
+
$new[ $new_key ] = $new_value;
|
118 |
}
|
119 |
+
}
|
120 |
+
return $new;
|
121 |
}
|
122 |
return false;
|
123 |
}
|
php/Common/functions-settings.php
CHANGED
@@ -11,6 +11,10 @@ function nextgenthemes_settings_instance() {
|
|
11 |
[
|
12 |
'namespace' => 'nextgenthemes',
|
13 |
'settings' => nextgenthemes_settings(),
|
|
|
|
|
|
|
|
|
14 |
'menu_title' => esc_html__( 'NextGenThemes Settings', 'advanced-responsive-video-embedder' ),
|
15 |
'settings_page_title' => esc_html__( 'NextGenThemes Settings', 'advanced-responsive-video-embedder' ),
|
16 |
]
|
@@ -66,7 +70,7 @@ function nextgenthemes_settings() {
|
|
66 |
$settings[ $p ] = [
|
67 |
'default' => '',
|
68 |
'option' => true,
|
69 |
-
'tag' => '
|
70 |
// translators: %s is Product name
|
71 |
'label' => sprintf( esc_html__( '%s license Key', 'advanced-responsive-video-embedder' ), $value['name'] ),
|
72 |
'type' => 'string',
|
@@ -76,7 +80,7 @@ function nextgenthemes_settings() {
|
|
76 |
$settings[ $p . '_status' ] = [
|
77 |
'default' => '',
|
78 |
'option' => true,
|
79 |
-
'tag' => '
|
80 |
// translators: %s is Product name
|
81 |
'label' => sprintf( esc_html__( '%s license Key Status', 'advanced-responsive-video-embedder' ), $value['name'] ),
|
82 |
'type' => 'string',
|
@@ -88,7 +92,7 @@ function nextgenthemes_settings() {
|
|
88 |
$settings[ $key . '_beta' ] = [
|
89 |
'default' => false,
|
90 |
'option' => true,
|
91 |
-
'tag' => '
|
92 |
// translators: Product name
|
93 |
'label' => sprintf( esc_html__( '%s beta updates', 'advanced-responsive-video-embedder' ), $value['name'] ),
|
94 |
'type' => 'boolean',
|
@@ -96,17 +100,17 @@ function nextgenthemes_settings() {
|
|
96 |
}
|
97 |
|
98 |
$settings['cdn'] = [
|
|
|
99 |
'default' => false,
|
100 |
'option' => true,
|
101 |
-
'tag' => 'main',
|
102 |
'label' => esc_html__( 'Use jsDelivr CDN for some assets', 'advanced-responsive-video-embedder' ),
|
103 |
'type' => 'boolean',
|
104 |
];
|
105 |
|
106 |
$settings['action'] = [
|
|
|
107 |
'default' => '',
|
108 |
'option' => true,
|
109 |
-
'tag' => 'main',
|
110 |
'label' => esc_html__( 'Action', 'advanced-responsive-video-embedder' ),
|
111 |
'type' => 'string',
|
112 |
'ui' => 'hidden',
|
@@ -118,7 +122,7 @@ function nextgenthemes_settings() {
|
|
118 |
function get_products() {
|
119 |
|
120 |
$products = [
|
121 |
-
'arve_pro'
|
122 |
'namespace' => 'ARVE\Pro',
|
123 |
'name' => 'ARVE Pro',
|
124 |
'id' => 1253,
|
@@ -126,7 +130,7 @@ function get_products() {
|
|
126 |
'author' => 'Nicolas Jonas',
|
127 |
'url' => 'https://nextgenthemes.com/plugins/arve-pro/',
|
128 |
],
|
129 |
-
'arve_amp'
|
130 |
'namespace' => 'ARVE\AMP',
|
131 |
'name' => 'ARVE AMP',
|
132 |
'id' => 16941,
|
@@ -142,6 +146,14 @@ function get_products() {
|
|
142 |
'author' => 'Nicolas Jonas',
|
143 |
'url' => 'https://nextgenthemes.com/plugins/arve-random-video/',
|
144 |
],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
145 |
];
|
146 |
|
147 |
$products = apply_filters( 'nextgenthemes_products', $products );
|
11 |
[
|
12 |
'namespace' => 'nextgenthemes',
|
13 |
'settings' => nextgenthemes_settings(),
|
14 |
+
'sections' => [
|
15 |
+
'keys' => esc_html__( 'License Keys', 'advanced-responsive-video-embedder' ),
|
16 |
+
'beta-updates' => esc_html__( 'Beta Updates', 'advanced-responsive-video-embedder' ),
|
17 |
+
],
|
18 |
'menu_title' => esc_html__( 'NextGenThemes Settings', 'advanced-responsive-video-embedder' ),
|
19 |
'settings_page_title' => esc_html__( 'NextGenThemes Settings', 'advanced-responsive-video-embedder' ),
|
20 |
]
|
70 |
$settings[ $p ] = [
|
71 |
'default' => '',
|
72 |
'option' => true,
|
73 |
+
'tag' => 'keys',
|
74 |
// translators: %s is Product name
|
75 |
'label' => sprintf( esc_html__( '%s license Key', 'advanced-responsive-video-embedder' ), $value['name'] ),
|
76 |
'type' => 'string',
|
80 |
$settings[ $p . '_status' ] = [
|
81 |
'default' => '',
|
82 |
'option' => true,
|
83 |
+
'tag' => 'keys',
|
84 |
// translators: %s is Product name
|
85 |
'label' => sprintf( esc_html__( '%s license Key Status', 'advanced-responsive-video-embedder' ), $value['name'] ),
|
86 |
'type' => 'string',
|
92 |
$settings[ $key . '_beta' ] = [
|
93 |
'default' => false,
|
94 |
'option' => true,
|
95 |
+
'tag' => 'beta-updates',
|
96 |
// translators: Product name
|
97 |
'label' => sprintf( esc_html__( '%s beta updates', 'advanced-responsive-video-embedder' ), $value['name'] ),
|
98 |
'type' => 'boolean',
|
100 |
}
|
101 |
|
102 |
$settings['cdn'] = [
|
103 |
+
'tag' => 'keys',
|
104 |
'default' => false,
|
105 |
'option' => true,
|
|
|
106 |
'label' => esc_html__( 'Use jsDelivr CDN for some assets', 'advanced-responsive-video-embedder' ),
|
107 |
'type' => 'boolean',
|
108 |
];
|
109 |
|
110 |
$settings['action'] = [
|
111 |
+
'tag' => 'keys',
|
112 |
'default' => '',
|
113 |
'option' => true,
|
|
|
114 |
'label' => esc_html__( 'Action', 'advanced-responsive-video-embedder' ),
|
115 |
'type' => 'string',
|
116 |
'ui' => 'hidden',
|
122 |
function get_products() {
|
123 |
|
124 |
$products = [
|
125 |
+
'arve_pro' => [
|
126 |
'namespace' => 'ARVE\Pro',
|
127 |
'name' => 'ARVE Pro',
|
128 |
'id' => 1253,
|
130 |
'author' => 'Nicolas Jonas',
|
131 |
'url' => 'https://nextgenthemes.com/plugins/arve-pro/',
|
132 |
],
|
133 |
+
'arve_amp' => [
|
134 |
'namespace' => 'ARVE\AMP',
|
135 |
'name' => 'ARVE AMP',
|
136 |
'id' => 16941,
|
146 |
'author' => 'Nicolas Jonas',
|
147 |
'url' => 'https://nextgenthemes.com/plugins/arve-random-video/',
|
148 |
],
|
149 |
+
'arve_sticky_videos' => [
|
150 |
+
'namespace' => 'ARVE\StickyVideos',
|
151 |
+
'name' => 'ARVE Sticky Videos',
|
152 |
+
'id' => false,
|
153 |
+
'type' => 'plugin',
|
154 |
+
'author' => 'Nicolas Jonas',
|
155 |
+
'url' => 'https://nextgenthemes.com/plugins/arve-sticky-videos/',
|
156 |
+
],
|
157 |
];
|
158 |
|
159 |
$products = apply_filters( 'nextgenthemes_products', $products );
|
php/Common/functions-string.php
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
<?php
|
2 |
namespace Nextgenthemes\ARVE\Common;
|
3 |
|
4 |
-
function
|
5 |
|
6 |
foreach ( $needles as $needle ) {
|
7 |
|
8 |
-
if (
|
9 |
return true;
|
10 |
}
|
11 |
}
|
@@ -13,41 +13,50 @@ function contains_any( $haystack, array $needles ) {
|
|
13 |
return false;
|
14 |
}
|
15 |
|
16 |
-
function
|
17 |
-
return false !== strpos( $haystack, $needle );
|
18 |
-
}
|
19 |
|
20 |
-
|
21 |
-
return $haystack[0] === $needle[0] ? strncmp( $haystack, $needle, strlen( $needle ) ) === 0 : false;
|
22 |
-
}
|
23 |
|
24 |
-
|
25 |
-
|
26 |
-
if ( '' === $needle ) {
|
27 |
-
return true;
|
28 |
}
|
29 |
|
30 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
|
32 |
-
return $
|
33 |
}
|
34 |
|
35 |
-
function
|
36 |
|
37 |
-
$
|
38 |
|
39 |
-
if ( ! $
|
40 |
-
|
41 |
}
|
42 |
|
43 |
-
|
44 |
-
|
45 |
-
$port = isset( $parsed_url['port'] ) ? ':' . $parsed_url['port'] : '';
|
46 |
-
$user = isset( $parsed_url['user'] ) ? $parsed_url['user'] : '';
|
47 |
-
$pass = isset( $parsed_url['pass'] ) ? ':' . $parsed_url['pass'] : '';
|
48 |
-
$pass = ( $user || $pass ) ? "$pass@" : '';
|
49 |
-
$path = isset( $parsed_url['path'] ) ? $parsed_url['path'] : '';
|
50 |
-
$fragment = isset( $parsed_url['fragment'] ) ? '#' . $parsed_url['fragment'] : '';
|
51 |
|
52 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
}
|
1 |
<?php
|
2 |
namespace Nextgenthemes\ARVE\Common;
|
3 |
|
4 |
+
function str_contains_any( $haystack, array $needles ) {
|
5 |
|
6 |
foreach ( $needles as $needle ) {
|
7 |
|
8 |
+
if ( str_contains( $haystack, $needle ) ) {
|
9 |
return true;
|
10 |
}
|
11 |
}
|
13 |
return false;
|
14 |
}
|
15 |
|
16 |
+
function remove_url_query( $url ) {
|
|
|
|
|
17 |
|
18 |
+
$parsed_url = parse_url( $url );
|
|
|
|
|
19 |
|
20 |
+
if ( ! $parsed_url ) {
|
21 |
+
return $url;
|
|
|
|
|
22 |
}
|
23 |
|
24 |
+
$scheme = isset( $parsed_url['scheme'] ) ? $parsed_url['scheme'] . '://' : '';
|
25 |
+
$host = isset( $parsed_url['host'] ) ? $parsed_url['host'] : '';
|
26 |
+
$port = isset( $parsed_url['port'] ) ? ':' . $parsed_url['port'] : '';
|
27 |
+
$user = isset( $parsed_url['user'] ) ? $parsed_url['user'] : '';
|
28 |
+
$pass = isset( $parsed_url['pass'] ) ? ':' . $parsed_url['pass'] : '';
|
29 |
+
$pass = ( $user || $pass ) ? "$pass@" : '';
|
30 |
+
$path = isset( $parsed_url['path'] ) ? $parsed_url['path'] : '';
|
31 |
+
$fragment = isset( $parsed_url['fragment'] ) ? '#' . $parsed_url['fragment'] : '';
|
32 |
|
33 |
+
return "$scheme$user$pass$host$port$path$fragment";
|
34 |
}
|
35 |
|
36 |
+
function dashes_to_camel_case( $string, $capitalize_first_character = false ) {
|
37 |
|
38 |
+
$str = str_replace('-', '', ucwords($string, '-'));
|
39 |
|
40 |
+
if ( ! $capitalize_first_character ) {
|
41 |
+
$str = lcfirst($str);
|
42 |
}
|
43 |
|
44 |
+
return $str;
|
45 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
46 |
|
47 |
+
function kses_basic( $html ) {
|
48 |
+
return wp_kses(
|
49 |
+
$html,
|
50 |
+
[
|
51 |
+
'a' => [
|
52 |
+
'href' => [],
|
53 |
+
'target' => [],
|
54 |
+
'title' => [],
|
55 |
+
],
|
56 |
+
'br' => [],
|
57 |
+
'em' => [],
|
58 |
+
'strong' => [],
|
59 |
+
'code' => [],
|
60 |
+
]
|
61 |
+
);
|
62 |
}
|
php/Common/init.php
CHANGED
@@ -4,6 +4,9 @@ namespace Nextgenthemes\ARVE\Common;
|
|
4 |
const VERSION = '1.0.0';
|
5 |
|
6 |
// phpcs:disable WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound
|
|
|
|
|
|
|
7 |
require_once __DIR__ . '/Settings.php';
|
8 |
require_once __DIR__ . '/functions-settings.php';
|
9 |
require_once __DIR__ . '/functions-license.php';
|
@@ -18,6 +21,7 @@ require_once __DIR__ . '/Admin/NoticeFactory.php';
|
|
18 |
require_once __DIR__ . '/Admin/functions-licensing.php';
|
19 |
require_once __DIR__ . '/Admin/functions-settings.php';
|
20 |
require_once __DIR__ . '/Admin/functions-notices.php';
|
|
|
21 |
// phpcs:enable WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound
|
22 |
|
23 |
if ( ! defined( 'NGT_COMMON_INIT' ) ) {
|
4 |
const VERSION = '1.0.0';
|
5 |
|
6 |
// phpcs:disable WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound
|
7 |
+
require_once __DIR__ . '/functions-compat.php';
|
8 |
+
require_once __DIR__ . '/functions-deprecated.php';
|
9 |
+
// ------------------------------------------------
|
10 |
require_once __DIR__ . '/Settings.php';
|
11 |
require_once __DIR__ . '/functions-settings.php';
|
12 |
require_once __DIR__ . '/functions-license.php';
|
21 |
require_once __DIR__ . '/Admin/functions-licensing.php';
|
22 |
require_once __DIR__ . '/Admin/functions-settings.php';
|
23 |
require_once __DIR__ . '/Admin/functions-notices.php';
|
24 |
+
require_once __DIR__ . '/Admin/functions-debug.php';
|
25 |
// phpcs:enable WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound
|
26 |
|
27 |
if ( ! defined( 'NGT_COMMON_INIT' ) ) {
|
php/EmbedChecker.php
CHANGED
@@ -15,9 +15,9 @@ class EmbedChecker {
|
|
15 |
$maybe_arve_html = $GLOBALS['wp_embed']->shortcode( $this->shortcode_args, $this->shortcode_args['url'] );
|
16 |
remove_filter( 'nextgenthemes/arve/oembed2args', [ $this, 'oembed2args' ] );
|
17 |
|
18 |
-
if (
|
19 |
return $maybe_arve_html;
|
20 |
-
}
|
21 |
|
22 |
return false;
|
23 |
}
|
15 |
$maybe_arve_html = $GLOBALS['wp_embed']->shortcode( $this->shortcode_args, $this->shortcode_args['url'] );
|
16 |
remove_filter( 'nextgenthemes/arve/oembed2args', [ $this, 'oembed2args' ] );
|
17 |
|
18 |
+
if ( str_contains( $maybe_arve_html, 'class="arve' ) ) {
|
19 |
return $maybe_arve_html;
|
20 |
+
}
|
21 |
|
22 |
return false;
|
23 |
}
|
php/ShortcodeArgs.php
ADDED
@@ -0,0 +1,427 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace Nextgenthemes\ARVE;
|
3 |
+
|
4 |
+
class ShortcodeArgs {
|
5 |
+
|
6 |
+
private $errors;
|
7 |
+
|
8 |
+
public function __construct( $error_instance ) {
|
9 |
+
$this->errors = $error_instance;
|
10 |
+
}
|
11 |
+
|
12 |
+
public function get_done( array $a ) {
|
13 |
+
|
14 |
+
missing_attribute_check( $a );
|
15 |
+
|
16 |
+
$a = $this->args_validate( $a );
|
17 |
+
$a = args_detect_html5( $a );
|
18 |
+
$a = $this->detect_provider_and_id_from_url( $a );
|
19 |
+
|
20 |
+
$a['aspect_ratio'] = arg_aspect_ratio( $a );
|
21 |
+
$a['thumbnail'] = apply_filters( 'nextgenthemes/arve/args/thumbnail', $a['thumbnail'], $a );
|
22 |
+
$a['img_src'] = $this->arg_img_src( $a );
|
23 |
+
$a['img_srcset'] = $this->arg_img_srcset( $a );
|
24 |
+
$a = args_video( $a );
|
25 |
+
$a['id'] = liveleak_id_fix( $a );
|
26 |
+
$a['maxwidth'] = $this->arg_maxwidth( $a );
|
27 |
+
$a['width'] = $a['maxwidth'];
|
28 |
+
$a['height'] = height_from_width_and_ratio( $a['width'], $a['aspect_ratio'] );
|
29 |
+
$a['mode'] = $this->arg_mode( $a );
|
30 |
+
$a['autoplay'] = arg_autoplay( $a );
|
31 |
+
$a['src'] = $this->arg_iframe_src( $a );
|
32 |
+
$a['uid'] = sanitize_key( uniqid( "arve-{$a['provider']}-{$a['id']}", true) );
|
33 |
+
|
34 |
+
return $a;
|
35 |
+
}
|
36 |
+
|
37 |
+
private function arg_maxwidth( array $a ) {
|
38 |
+
|
39 |
+
$options = options();
|
40 |
+
|
41 |
+
if ( empty( $a['maxwidth'] ) ) {
|
42 |
+
|
43 |
+
if ( in_array( $a['align'], [ 'left', 'right', 'center' ], true ) ) {
|
44 |
+
$a['maxwidth'] = (int) $options['align_maxwidth'];
|
45 |
+
} elseif ( empty( $options['maxwidth'] ) ) {
|
46 |
+
$a['maxwidth'] = (int) empty( $GLOBALS['content_width'] ) ? DEFAULT_MAXWIDTH : $GLOBALS['content_width'];
|
47 |
+
} else {
|
48 |
+
$a['maxwidth'] = (int) $options['maxwidth'];
|
49 |
+
}
|
50 |
+
}
|
51 |
+
|
52 |
+
if ( $a['maxwidth'] < 50 ) {
|
53 |
+
$this->errors->add( 'maxw', __( 'Maxwidth needs to be 50+', 'advanced-responsive-video-embedder' ) );
|
54 |
+
}
|
55 |
+
|
56 |
+
return $a['maxwidth'];
|
57 |
+
}
|
58 |
+
|
59 |
+
private function arg_mode( array $a ) {
|
60 |
+
|
61 |
+
if ( 'lazyload-lightbox' === $a['mode'] ) {
|
62 |
+
$a['mode'] = 'lightbox';
|
63 |
+
}
|
64 |
+
|
65 |
+
if ( 'thumbnail' === $a['mode'] ) {
|
66 |
+
$a['mode'] = 'lazyload';
|
67 |
+
}
|
68 |
+
|
69 |
+
if ( 'normal' !== $a['mode'] &&
|
70 |
+
! defined( '\Nextgenthemes\ARVE\Pro\VERSION' ) ) {
|
71 |
+
|
72 |
+
$err_msg = sprintf(
|
73 |
+
// Translators: Mode
|
74 |
+
__( 'Mode: %s not available (ARVE Pro not active?), switching to normal mode', 'advanced-responsive-video-embedder' ),
|
75 |
+
$a['mode']
|
76 |
+
);
|
77 |
+
$a['errors']->add( 'mode-not-avail', $err_msg );
|
78 |
+
$a['mode'] = 'normal';
|
79 |
+
}
|
80 |
+
|
81 |
+
return $a['mode'];
|
82 |
+
}
|
83 |
+
|
84 |
+
private function args_validate( array $a ) {
|
85 |
+
|
86 |
+
foreach ( $a as $key => $value ) {
|
87 |
+
|
88 |
+
switch ( $key ) {
|
89 |
+
case 'errors':
|
90 |
+
break;
|
91 |
+
case 'url_handler':
|
92 |
+
if ( null !== $value && ! is_array( $value ) ) {
|
93 |
+
$this->errors->add( 2, 'url_handler needs to be null or array' . $value );
|
94 |
+
}
|
95 |
+
break;
|
96 |
+
case 'oembed_data':
|
97 |
+
if ( null !== $value && ! is_object( $value ) ) {
|
98 |
+
$this->errors->add( 'oembed_data', 'oembed_data needs to be null or a object' );
|
99 |
+
}
|
100 |
+
break;
|
101 |
+
default:
|
102 |
+
if ( null !== $value && ! is_string( $value ) ) {
|
103 |
+
$this->errors->add( 2, "$key must be null or string" );
|
104 |
+
}
|
105 |
+
break;
|
106 |
+
}
|
107 |
+
}
|
108 |
+
|
109 |
+
foreach ( bool_shortcode_args() as $arg ) {
|
110 |
+
$a[ $arg ] = $this->validate_bool( $a[ $arg ], $arg );
|
111 |
+
};
|
112 |
+
|
113 |
+
$url_args = array_merge( VIDEO_FILE_EXTENSIONS, [ 'url', 'src' ] );
|
114 |
+
|
115 |
+
foreach ( $url_args as $key => $urlarg ) {
|
116 |
+
$a[ $urlarg ] = $this->validate_url( $a[ $urlarg ], $urlarg );
|
117 |
+
};
|
118 |
+
|
119 |
+
$a['align'] = $this->validate_align( $a );
|
120 |
+
$a['aspect_ratio'] = $this->validate_aspect_ratio( $a );
|
121 |
+
|
122 |
+
return $a;
|
123 |
+
}
|
124 |
+
|
125 |
+
private function validate_url( $url, $attr_name ) {
|
126 |
+
|
127 |
+
if ( ! empty( $url ) && ! valid_url( $url ) ) {
|
128 |
+
|
129 |
+
$error_msg = sprintf(
|
130 |
+
// Translators: 1 URL 2 Attr name
|
131 |
+
__( 'Invalid URL <code>%1$s</code> in <code>%2$s</code>', 'advanced-responsive-video-embedder' ),
|
132 |
+
esc_html( $url ),
|
133 |
+
esc_html( $attr_name )
|
134 |
+
);
|
135 |
+
|
136 |
+
$this->errors->add( $attr_name, $error_msg );
|
137 |
+
}
|
138 |
+
|
139 |
+
return $url;
|
140 |
+
}
|
141 |
+
|
142 |
+
// phpcs:ignore Generic.Metrics.CyclomaticComplexity.TooHigh
|
143 |
+
private function validate_bool( $str, $attr_name ) {
|
144 |
+
|
145 |
+
switch ( $str ) {
|
146 |
+
case 'true':
|
147 |
+
case '1':
|
148 |
+
case 'y':
|
149 |
+
case 'yes':
|
150 |
+
case 'on':
|
151 |
+
return true;
|
152 |
+
case '':
|
153 |
+
case null:
|
154 |
+
return null;
|
155 |
+
case 'false':
|
156 |
+
case '0':
|
157 |
+
case 'n':
|
158 |
+
case 'no':
|
159 |
+
case 'off':
|
160 |
+
return false;
|
161 |
+
default:
|
162 |
+
$this->errors->add(
|
163 |
+
$attr_name,
|
164 |
+
// Translators: %1$s = Attr Name, %2$s = Attribute array
|
165 |
+
sprintf(
|
166 |
+
// Translators: Attribute Name
|
167 |
+
__( '%1$s <code>%2$s</code> not valid', 'advanced-responsive-video-embedder' ),
|
168 |
+
esc_html( $attr_name ),
|
169 |
+
esc_html( $str )
|
170 |
+
)
|
171 |
+
);
|
172 |
+
return null;
|
173 |
+
}//end switch
|
174 |
+
}
|
175 |
+
|
176 |
+
private function validate_align( array $a ) {
|
177 |
+
|
178 |
+
switch ( $a['align'] ) {
|
179 |
+
case null:
|
180 |
+
case '':
|
181 |
+
case 'none':
|
182 |
+
$a['align'] = null;
|
183 |
+
break;
|
184 |
+
case 'left':
|
185 |
+
case 'right':
|
186 |
+
case 'center':
|
187 |
+
break;
|
188 |
+
default:
|
189 |
+
$this->errors->add(
|
190 |
+
'align',
|
191 |
+
// Translators: Alignment
|
192 |
+
sprintf( __( 'Align <code>%s</code> not valid', 'advanced-responsive-video-embedder' ), esc_html( $a['align'] ) )
|
193 |
+
);
|
194 |
+
$a['align'] = null;
|
195 |
+
break;
|
196 |
+
}
|
197 |
+
|
198 |
+
return $a['align'];
|
199 |
+
}
|
200 |
+
|
201 |
+
private function validate_aspect_ratio( array $a ) {
|
202 |
+
|
203 |
+
if ( empty( $a['aspect_ratio'] ) ) {
|
204 |
+
return $a['aspect_ratio'];
|
205 |
+
}
|
206 |
+
|
207 |
+
$ratio = explode( ':', $a['aspect_ratio'] );
|
208 |
+
|
209 |
+
if ( empty( $ratio[0] ) || ! is_numeric( $ratio[0] ) ||
|
210 |
+
empty( $ratio[1] ) || ! is_numeric( $ratio[1] )
|
211 |
+
) {
|
212 |
+
$this->errors->add(
|
213 |
+
'aspect_ratio',
|
214 |
+
// Translators: attribute
|
215 |
+
sprintf( __( 'Aspect ratio <code>%s</code> is not valid', 'advanced-responsive-video-embedder' ), $a['aspect_ratio'] )
|
216 |
+
);
|
217 |
+
|
218 |
+
$a['aspect_ratio'] = null;
|
219 |
+
}
|
220 |
+
|
221 |
+
return $a['aspect_ratio'];
|
222 |
+
}
|
223 |
+
|
224 |
+
private function arg_img_src( array $a ) {
|
225 |
+
|
226 |
+
$img_src = false;
|
227 |
+
|
228 |
+
if ( $a['thumbnail'] ) :
|
229 |
+
|
230 |
+
if ( is_numeric( $a['thumbnail'] ) ) {
|
231 |
+
|
232 |
+
$img_src = wp_get_attachment_image_url( $a['thumbnail'], 'small' );
|
233 |
+
|
234 |
+
if ( empty( $img_src ) ) {
|
235 |
+
$this->errors->add( 'no-media-id', __( 'No attachment with that ID', 'advanced-responsive-video-embedder' ) );
|
236 |
+
}
|
237 |
+
} elseif ( valid_url( $a['thumbnail'] ) ) {
|
238 |
+
|
239 |
+
$img_src = $a['thumbnail'];
|
240 |
+
|
241 |
+
} else {
|
242 |
+
|
243 |
+
$this->errors->add( 'invalid-url', __( 'Not a valid thumbnail URL or Media ID given', 'advanced-responsive-video-embedder' ) );
|
244 |
+
}
|
245 |
+
|
246 |
+
endif; // thumbnail
|
247 |
+
|
248 |
+
return apply_filters( 'nextgenthemes/arve/args/img_src', $img_src, $a );
|
249 |
+
}
|
250 |
+
|
251 |
+
private function arg_img_srcset( array $a ) {
|
252 |
+
|
253 |
+
$img_srcset = false;
|
254 |
+
|
255 |
+
if ( $a['img_src'] && is_numeric( $a['thumbnail'] ) ) {
|
256 |
+
$img_srcset = wp_get_attachment_image_srcset( $a['thumbnail'], 'small' );
|
257 |
+
}
|
258 |
+
|
259 |
+
return apply_filters( 'nextgenthemes/arve/args/img_srcset', $img_srcset, $a );
|
260 |
+
}
|
261 |
+
|
262 |
+
private function detect_provider_and_id_from_url( array $a ) {
|
263 |
+
|
264 |
+
if ( 'html5' === $a['provider'] ||
|
265 |
+
( $a['provider'] && $a['id'] )
|
266 |
+
) {
|
267 |
+
return $a;
|
268 |
+
}
|
269 |
+
|
270 |
+
if ( ! $a['url'] && ! $a['src'] ) {
|
271 |
+
throw new \Exception(
|
272 |
+
__( 'detect_provider_and_id_from_url method needs url.', 'advanced-responsive-video-embedder' )
|
273 |
+
);
|
274 |
+
}
|
275 |
+
|
276 |
+
$options = options();
|
277 |
+
$properties = get_host_properties();
|
278 |
+
$input_provider = $a['provider'];
|
279 |
+
|
280 |
+
foreach ( $properties as $host_id => $host ) :
|
281 |
+
|
282 |
+
if ( empty( $host['regex'] ) ) {
|
283 |
+
continue;
|
284 |
+
}
|
285 |
+
|
286 |
+
$preg_match = preg_match( $host['regex'], $a['url'], $matches );
|
287 |
+
|
288 |
+
if ( 1 !== $preg_match ) {
|
289 |
+
continue;
|
290 |
+
}
|
291 |
+
|
292 |
+
foreach ( $matches as $key => $value ) {
|
293 |
+
|
294 |
+
if ( is_string( $key ) ) {
|
295 |
+
$a['provider'] = $host_id;
|
296 |
+
$a[ $key ] = $matches[ $key ];
|
297 |
+
}
|
298 |
+
}
|
299 |
+
endforeach;
|
300 |
+
|
301 |
+
if ( $input_provider &&
|
302 |
+
( $input_provider !== $a['provider'] ) &&
|
303 |
+
! ( 'youtube' === $input_provider && 'youtubelist' === $a['provider'] )
|
304 |
+
) {
|
305 |
+
$this->errors->add( 'detect!=oembed', "Regex detected provider <code>{$a['provider']}</code> did not match given provider <code>$input_provider</code>" );
|
306 |
+
}
|
307 |
+
|
308 |
+
if ( ! $a['provider'] ) {
|
309 |
+
$a['provider'] = 'iframe';
|
310 |
+
$a['src'] = $a['src'] ? $a['src'] : $a['url'];
|
311 |
+
$a['id'] = $a['src'];
|
312 |
+
}
|
313 |
+
|
314 |
+
return $a;
|
315 |
+
}
|
316 |
+
|
317 |
+
private function special_iframe_src_mods( array $a ) {
|
318 |
+
|
319 |
+
switch ( $a['provider'] ) {
|
320 |
+
case 'youtube':
|
321 |
+
$yt_v = Common\get_url_arg( $a['url'], 'v' );
|
322 |
+
$yt_list = Common\get_url_arg( $a['url'], 'list' );
|
323 |
+
|
324 |
+
if ( str_contains( $a['src'], '/embed/videoseries?' ) &&
|
325 |
+
$yt_v
|
326 |
+
) {
|
327 |
+
$a['src'] = str_replace( '/embed/videoseries?', "/embed/$yt_v?", $a['src'] );
|
328 |
+
}
|
329 |
+
|
330 |
+
if ( $yt_list ) {
|
331 |
+
$a['src'] = remove_query_arg( 'feature', $a['src'] );
|
332 |
+
$a['src'] = add_query_arg( 'list', $yt_list, $a['src'] );
|
333 |
+
$a['src_gen'] = add_query_arg( 'list', $yt_list, $a['src_gen'] );
|
334 |
+
}
|
335 |
+
break;
|
336 |
+
case 'vimeo':
|
337 |
+
$a['src'] = add_query_arg( 'dnt', 1, $a['src'] );
|
338 |
+
$a['src_gen'] = add_query_arg( 'dnt', 1, $a['src_gen'] );
|
339 |
+
|
340 |
+
$parsed_url = wp_parse_url( $a['url'] );
|
341 |
+
|
342 |
+
if ( ! empty( $parsed_url['fragment'] ) && str_starts_with( $parsed_url['fragment'], 't' ) ) {
|
343 |
+
$a['src'] .= '#' . $parsed_url['fragment'];
|
344 |
+
$a['src_gen'] .= '#' . $parsed_url['fragment'];
|
345 |
+
}
|
346 |
+
break;
|
347 |
+
case 'wistia':
|
348 |
+
$a['src'] = add_query_arg( 'dnt', 1, $a['src'] );
|
349 |
+
$a['src_gen'] = add_query_arg( 'dnt', 1, $a['src_gen'] );
|
350 |
+
break;
|
351 |
+
}
|
352 |
+
|
353 |
+
return $a;
|
354 |
+
}
|
355 |
+
|
356 |
+
private function arg_iframe_src( array $a ) {
|
357 |
+
|
358 |
+
if ( 'html5' === $a['provider'] ) {
|
359 |
+
return false;
|
360 |
+
}
|
361 |
+
|
362 |
+
if ( ! $a['provider'] || ! $a['id'] ) {
|
363 |
+
$this->errors->add( 'no-provider-and-id', 'Need Provider and ID to build iframe src' );
|
364 |
+
return false;
|
365 |
+
}
|
366 |
+
|
367 |
+
$options = options();
|
368 |
+
$a['src_gen'] = build_iframe_src( $a );
|
369 |
+
$a = special_iframe_src_mods( $a );
|
370 |
+
|
371 |
+
$this->compare_oembed_src_with_generated_src( $a );
|
372 |
+
|
373 |
+
if ( ! valid_url( $a['src'] ) && valid_url( $a['src_gen'] ) ) {
|
374 |
+
$a['src'] = $a['src_gen'];
|
375 |
+
}
|
376 |
+
|
377 |
+
$a['src'] = iframe_src_args( $a['src'], $a );
|
378 |
+
$a['src'] = iframe_src_autoplay_args( $a['autoplay'], $a );
|
379 |
+
|
380 |
+
if ( 'youtube' === $a['provider'] && $options['youtube_nocookie'] ) {
|
381 |
+
$a['src'] = str_replace( 'https://www.youtube.com', 'https://www.youtube-nocookie.com', $a['src'] );
|
382 |
+
}
|
383 |
+
|
384 |
+
return $a['src'];
|
385 |
+
}
|
386 |
+
|
387 |
+
private function compare_oembed_src_with_generated_src( $a ) {
|
388 |
+
|
389 |
+
if ( ! $a['src'] ) {
|
390 |
+
return;
|
391 |
+
}
|
392 |
+
|
393 |
+
$src = $a['src'];
|
394 |
+
$src_gen = $a['src_gen'];
|
395 |
+
|
396 |
+
switch ( $a['provider'] ) {
|
397 |
+
case 'wistia':
|
398 |
+
case 'vimeo':
|
399 |
+
$src = Common\remove_url_query( $a['src'] );
|
400 |
+
$src_gen = Common\remove_url_query( $a['src_gen'] );
|
401 |
+
break;
|
402 |
+
case 'youtube':
|
403 |
+
$src = remove_query_arg( 'feature', $a['src'] );
|
404 |
+
break;
|
405 |
+
}
|
406 |
+
|
407 |
+
if ( $src !== $src_gen ) {
|
408 |
+
$msg = sprintf(
|
409 |
+
'src mismatch<br>url: %s<br>src in: %s<br>src gen: %s',
|
410 |
+
$a['url'],
|
411 |
+
$a['src'],
|
412 |
+
$a['src_gen']
|
413 |
+
);
|
414 |
+
|
415 |
+
if ( $src !== $a['src'] || $src_gen !== $a['src_gen'] ) {
|
416 |
+
$msg .= sprintf(
|
417 |
+
'Actual comparison<br>url: %s<br>src in: %s<br>src gen: %s',
|
418 |
+
$a['url'],
|
419 |
+
$src,
|
420 |
+
$src_gen
|
421 |
+
);
|
422 |
+
}
|
423 |
+
|
424 |
+
$this->errors->add( 'hidden', $msg );
|
425 |
+
}
|
426 |
+
}
|
427 |
+
}
|
php/functions-assets.php
CHANGED
@@ -33,7 +33,7 @@ function register_assets() {
|
|
33 |
foreach ( $sc_settings as $key => $v ) {
|
34 |
|
35 |
$attr[ $key ] = [
|
36 |
-
'type' => ( 'select' === $v['type'] ) ? 'string' : $v['type']
|
37 |
];
|
38 |
|
39 |
if ( $options['gutenberg_help'] && ! empty( $v['description'] ) ) {
|
@@ -121,7 +121,7 @@ function gutenberg_block( $args ) {
|
|
121 |
function maybe_enqueue_assets( $html ) {
|
122 |
|
123 |
// Doing this because of embed caching the actual functions and filters generating the videos may not be called, if the Block or Shortcode is not used the styles would never get loaded but we micro optimize and load them only when needed this way.
|
124 |
-
if (
|
125 |
wp_enqueue_style( 'arve' );
|
126 |
wp_enqueue_script( 'arve' );
|
127 |
}
|
33 |
foreach ( $sc_settings as $key => $v ) {
|
34 |
|
35 |
$attr[ $key ] = [
|
36 |
+
'type' => ( 'select' === $v['type'] ) ? 'string' : $v['type'],
|
37 |
];
|
38 |
|
39 |
if ( $options['gutenberg_help'] && ! empty( $v['description'] ) ) {
|
121 |
function maybe_enqueue_assets( $html ) {
|
122 |
|
123 |
// Doing this because of embed caching the actual functions and filters generating the videos may not be called, if the Block or Shortcode is not used the styles would never get loaded but we micro optimize and load them only when needed this way.
|
124 |
+
if ( str_contains( $html, 'class="arve' ) ) {
|
125 |
wp_enqueue_style( 'arve' );
|
126 |
wp_enqueue_script( 'arve' );
|
127 |
}
|
php/functions-host-properties.php
CHANGED
@@ -174,15 +174,15 @@ function get_host_properties() {
|
|
174 |
],
|
175 |
'facebook' => [
|
176 |
'name' => 'Facebook',
|
177 |
-
'oembed' =>
|
178 |
'regex' => '#(?<id>https?://([a-z]+\.)?facebook\.com/[-.a-z0-9]+/videos/[^\s]+)#i',
|
179 |
'url_encode_id' => true,
|
180 |
'embed_url' => 'https://www.facebook.com/plugins/video.php?href=%s',
|
181 |
-
'auto_thumbnail' =>
|
182 |
'tests' => [
|
183 |
[
|
184 |
'url' => 'https://www.facebook.com/TheKillingsOfTonyBlair/videos/vb.551089058285349/562955837098671/?type=2&theater',
|
185 |
-
'id' => 'https://www.facebook.com/TheKillingsOfTonyBlair/videos/vb.551089058285349/562955837098671
|
186 |
],
|
187 |
[
|
188 |
'url' => 'https://web.facebook.com/XTvideo/videos/10153906059711871/',
|
@@ -613,8 +613,8 @@ function get_host_properties() {
|
|
613 |
'id' => 'GjL82KUHVb0&list=PLI46g-I12_9qGBq-4epxOay0hotjys5iA',
|
614 |
],
|
615 |
[
|
616 |
-
|
617 |
-
|
618 |
],
|
619 |
],
|
620 |
'specific_tests' => [
|
174 |
],
|
175 |
'facebook' => [
|
176 |
'name' => 'Facebook',
|
177 |
+
'oembed' => false,
|
178 |
'regex' => '#(?<id>https?://([a-z]+\.)?facebook\.com/[-.a-z0-9]+/videos/[^\s]+)#i',
|
179 |
'url_encode_id' => true,
|
180 |
'embed_url' => 'https://www.facebook.com/plugins/video.php?href=%s',
|
181 |
+
'auto_thumbnail' => false,
|
182 |
'tests' => [
|
183 |
[
|
184 |
'url' => 'https://www.facebook.com/TheKillingsOfTonyBlair/videos/vb.551089058285349/562955837098671/?type=2&theater',
|
185 |
+
'id' => 'https://www.facebook.com/TheKillingsOfTonyBlair/videos/vb.551089058285349/562955837098671/?type=2&theater',
|
186 |
],
|
187 |
[
|
188 |
'url' => 'https://web.facebook.com/XTvideo/videos/10153906059711871/',
|
613 |
'id' => 'GjL82KUHVb0&list=PLI46g-I12_9qGBq-4epxOay0hotjys5iA',
|
614 |
],
|
615 |
[
|
616 |
+
'url' => 'https://youtu.be/b8m9zhNAgKs?list=PLI_7Mg2Z_-4I-W_lI55D9lBUkC66ftHMg',
|
617 |
+
'id' => 'b8m9zhNAgKs?list=PLI_7Mg2Z_-4I-W_lI55D9lBUkC66ftHMg',
|
618 |
],
|
619 |
],
|
620 |
'specific_tests' => [
|
php/functions-html-output.php
CHANGED
@@ -1,6 +1,8 @@
|
|
1 |
<?php
|
2 |
namespace Nextgenthemes\ARVE;
|
3 |
|
|
|
|
|
4 |
function build_html( array $a ) {
|
5 |
|
6 |
$options = options();
|
@@ -61,7 +63,7 @@ function build_iframe_tag( array $a ) {
|
|
61 |
'allowfullscreen' => '',
|
62 |
'class' => $class,
|
63 |
'data-arve' => $a['uid'],
|
64 |
-
'data-src-no-ap' => iframe_src_autoplay_args(
|
65 |
'frameborder' => '0',
|
66 |
'height' => $a['height'],
|
67 |
'name' => $a['iframe_name'],
|
1 |
<?php
|
2 |
namespace Nextgenthemes\ARVE;
|
3 |
|
4 |
+
use function \Nextgenthemes\ARVE\Common\get_var_dump;
|
5 |
+
|
6 |
function build_html( array $a ) {
|
7 |
|
8 |
$options = options();
|
63 |
'allowfullscreen' => '',
|
64 |
'class' => $class,
|
65 |
'data-arve' => $a['uid'],
|
66 |
+
'data-src-no-ap' => iframe_src_autoplay_args( false, $a ),
|
67 |
'frameborder' => '0',
|
68 |
'height' => $a['height'],
|
69 |
'name' => $a['iframe_name'],
|
php/functions-misc.php
CHANGED
@@ -4,7 +4,7 @@ namespace Nextgenthemes\ARVE;
|
|
4 |
function aspect_ratio_gcd( $aspect_ratio ) {
|
5 |
|
6 |
list( $width, $height ) = explode( ':', $aspect_ratio );
|
7 |
-
$gcd
|
8 |
|
9 |
$aspect_ratio = $width / $gcd . ':' . $height / $gcd;
|
10 |
|
@@ -55,7 +55,7 @@ function youtube_time_to_seconds( $yttime ) {
|
|
55 |
|
56 |
preg_match( $pattern, $yttime, $matches );
|
57 |
|
58 |
-
foreach( [ 'h', 'm', 's' ] as $m ) {
|
59 |
if ( ! isset( $matches[ $m ] ) ) {
|
60 |
$matches[ $m ] = 0;
|
61 |
}
|
@@ -68,19 +68,12 @@ function youtube_time_to_seconds( $yttime ) {
|
|
68 |
|
69 |
function new_height( $old_width, $old_height, $new_width ) {
|
70 |
|
71 |
-
$aspect_num
|
72 |
-
$new_height
|
73 |
|
74 |
return $new_height;
|
75 |
}
|
76 |
|
77 |
-
function new_height_from_aspect_ratio( $new_width, $aspect_ratio ) {
|
78 |
-
|
79 |
-
list( $old_width, $old_height ) = explode( ':', $aspect_ratio );
|
80 |
-
|
81 |
-
return new_height( $old_width, $old_height, $new_width );
|
82 |
-
}
|
83 |
-
|
84 |
/**
|
85 |
* Calculates padding percentage value for a particular aspect ratio
|
86 |
*
|
@@ -103,29 +96,29 @@ function disabled_on_feeds() {
|
|
103 |
}
|
104 |
|
105 |
function seconds_to_iso8601_duration( $time ) {
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
}
|
4 |
function aspect_ratio_gcd( $aspect_ratio ) {
|
5 |
|
6 |
list( $width, $height ) = explode( ':', $aspect_ratio );
|
7 |
+
$gcd = gcd( $width, $height );
|
8 |
|
9 |
$aspect_ratio = $width / $gcd . ':' . $height / $gcd;
|
10 |
|
55 |
|
56 |
preg_match( $pattern, $yttime, $matches );
|
57 |
|
58 |
+
foreach ( [ 'h', 'm', 's' ] as $m ) {
|
59 |
if ( ! isset( $matches[ $m ] ) ) {
|
60 |
$matches[ $m ] = 0;
|
61 |
}
|
68 |
|
69 |
function new_height( $old_width, $old_height, $new_width ) {
|
70 |
|
71 |
+
$aspect_num = $old_width / $old_height;
|
72 |
+
$new_height = $new_width / $aspect_num;
|
73 |
|
74 |
return $new_height;
|
75 |
}
|
76 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
77 |
/**
|
78 |
* Calculates padding percentage value for a particular aspect ratio
|
79 |
*
|
96 |
}
|
97 |
|
98 |
function seconds_to_iso8601_duration( $time ) {
|
99 |
+
$units = array(
|
100 |
+
'Y' => 365 * 24 * 3600,
|
101 |
+
'D' => 24 * 3600,
|
102 |
+
'H' => 3600,
|
103 |
+
'M' => 60,
|
104 |
+
'S' => 1,
|
105 |
+
);
|
106 |
+
|
107 |
+
$str = 'P';
|
108 |
+
$istime = false;
|
109 |
+
|
110 |
+
foreach ( $units as $unit_name => $unit ) {
|
111 |
+
$quot = intval($time / $unit);
|
112 |
+
$time -= $quot * $unit;
|
113 |
+
$unit = $quot;
|
114 |
+
if ( $unit > 0 ) {
|
115 |
+
if ( ! $istime && in_array( $unit_name, array( 'H', 'M', 'S' ), true )) { // There may be a better way to do this
|
116 |
+
$str .= 'T';
|
117 |
+
$istime = true;
|
118 |
+
}
|
119 |
+
$str .= strval($unit) . $unit_name;
|
120 |
+
}
|
121 |
+
}
|
122 |
+
|
123 |
+
return $str;
|
124 |
}
|
php/functions-oembed.php
CHANGED
@@ -61,7 +61,7 @@ function oembed2args( $data, $url ) {
|
|
61 |
// needed for private videos
|
62 |
function vimeo_referer( $args, $url ) {
|
63 |
|
64 |
-
if (
|
65 |
$args['headers']['Referer'] = site_url();
|
66 |
}
|
67 |
|
@@ -80,11 +80,11 @@ function trigger_cache_rebuild( $ttl, $url, $attr, $post_id ) {
|
|
80 |
$cache_time = get_post_meta( $post_id, $cachekey_time, true );
|
81 |
|
82 |
// Get the cached HTML
|
83 |
-
$cachekey
|
84 |
-
$metadata
|
85 |
-
$cache_exists
|
86 |
-
$cache_html
|
87 |
-
// $cache_exists2 = metadata_exists( 'post', $post_id, $cachekey ); // TODO not sure of 'post' is always right for embeds outside of
|
88 |
|
89 |
// time after a recache should be done
|
90 |
$trigger_time = get_option( 'nextgenthemes_arve_oembed_recache' );
|
@@ -96,13 +96,13 @@ function trigger_cache_rebuild( $ttl, $url, $attr, $post_id ) {
|
|
96 |
'open.spotify.com',
|
97 |
'secure.polldaddy.com',
|
98 |
'embed.tumblr.com',
|
99 |
-
'imgur.com'
|
100 |
];
|
101 |
|
102 |
// Check if we need to regenerate the oEmbed HTML:
|
103 |
if ( $cache_exists &&
|
104 |
$cache_time < $trigger_time &&
|
105 |
-
! Common\
|
106 |
$GLOBALS['wp_embed']->usecache
|
107 |
) {
|
108 |
// What we need to skip the oembed cache part
|
61 |
// needed for private videos
|
62 |
function vimeo_referer( $args, $url ) {
|
63 |
|
64 |
+
if ( str_contains( $url, 'vimeo' ) ) {
|
65 |
$args['headers']['Referer'] = site_url();
|
66 |
}
|
67 |
|
80 |
$cache_time = get_post_meta( $post_id, $cachekey_time, true );
|
81 |
|
82 |
// Get the cached HTML
|
83 |
+
$cachekey = '_oembed_' . $key_suffix;
|
84 |
+
$metadata = get_post_custom( $post_id );
|
85 |
+
$cache_exists = isset( $metadata[ $cachekey ][0] );
|
86 |
+
$cache_html = $cache_exists ? strtolower( get_post_meta( $post_id, $cachekey, true ) ) : false;
|
87 |
+
// $cache_exists2 = metadata_exists( 'post', $post_id, $cachekey ); // TODO not sure of 'post' is always right for embeds outside of
|
88 |
|
89 |
// time after a recache should be done
|
90 |
$trigger_time = get_option( 'nextgenthemes_arve_oembed_recache' );
|
96 |
'open.spotify.com',
|
97 |
'secure.polldaddy.com',
|
98 |
'embed.tumblr.com',
|
99 |
+
'imgur.com',
|
100 |
];
|
101 |
|
102 |
// Check if we need to regenerate the oEmbed HTML:
|
103 |
if ( $cache_exists &&
|
104 |
$cache_time < $trigger_time &&
|
105 |
+
! Common\str_contains_any( $cache_html, $not_touching ) &&
|
106 |
$GLOBALS['wp_embed']->usecache
|
107 |
) {
|
108 |
// What we need to skip the oembed cache part
|
php/functions-settings.php
CHANGED
@@ -1,6 +1,8 @@
|
|
1 |
<?php
|
2 |
namespace Nextgenthemes\ARVE;
|
3 |
|
|
|
|
|
4 |
function options() {
|
5 |
$i = settings_instance();
|
6 |
return $i->get_options();
|
@@ -22,17 +24,19 @@ function settings_instance() {
|
|
22 |
'namespace' => __NAMESPACE__,
|
23 |
'settings' => settings(),
|
24 |
'sections' => [
|
25 |
-
'main'
|
26 |
-
'pro'
|
27 |
-
|
28 |
-
'
|
29 |
-
'
|
30 |
-
'
|
31 |
-
'debug'
|
|
|
32 |
],
|
|
|
33 |
'menu_parent_slug' => 'options-general.php',
|
34 |
-
'menu_title' =>
|
35 |
-
'settings_page_title' =>
|
36 |
]
|
37 |
);
|
38 |
}
|
@@ -149,7 +153,7 @@ function shortcode_pairs() {
|
|
149 |
'gutenberg' => null,
|
150 |
'src' => null,
|
151 |
'img_srcset' => null,
|
152 |
-
'maxwidth' => null, # Overwriting the option value ON PURPOSE here, see
|
153 |
'av1mp4' => null,
|
154 |
'mp4' => null,
|
155 |
'm4v' => null,
|
@@ -238,10 +242,6 @@ function upgrade_options( $settings_instance ) {
|
|
238 |
}
|
239 |
}
|
240 |
|
241 |
-
function get_supported_modes() {
|
242 |
-
return apply_filters( 'nextgenthemes/arve/modes', [ 'normal' => esc_html__( 'Normal', 'advanced-responsive-video-embedder' ) ] );
|
243 |
-
}
|
244 |
-
|
245 |
function all_settings() {
|
246 |
|
247 |
$properties = get_host_properties();
|
@@ -265,9 +265,9 @@ function all_settings() {
|
|
265 |
$auto_title = implode( ', ', $auto_title );
|
266 |
$embed_code_only = implode( ', ', $embed_code_only );
|
267 |
$def_bool_options = [
|
268 |
-
'' =>
|
269 |
-
'true' =>
|
270 |
-
'false' =>
|
271 |
];
|
272 |
|
273 |
$provider_list_link = 'https://nextgenthemes.com/plugins/arve-pro/#video-host-support';
|
@@ -277,12 +277,12 @@ function all_settings() {
|
|
277 |
'url' => [
|
278 |
'default' => null,
|
279 |
'option' => false,
|
280 |
-
'label' =>
|
281 |
'type' => 'string',
|
282 |
'placeholder' => esc_attr__( 'Video URL / iframe Embed Code', 'advanced-responsive-video-embedder' ),
|
283 |
'description' => sprintf(
|
284 |
// Translators: %1$s Providers
|
285 |
-
__( 'Post the URL of the video here. For %1$s and any <a href="%2$s">unlisted</a> video hosts paste their iframe embed codes.', 'advanced-responsive-video-embedder' ),
|
286 |
esc_html( $embed_code_only ),
|
287 |
esc_url( $provider_list_link )
|
288 |
),
|
@@ -292,11 +292,11 @@ function all_settings() {
|
|
292 |
'title' => [
|
293 |
'default' => null,
|
294 |
'option' => false,
|
295 |
-
'label' =>
|
296 |
'type' => 'string',
|
297 |
'description' => sprintf(
|
298 |
// Translators: Provider list
|
299 |
-
__( 'Used for SEO, is visible on top of thumbnails in Lazyload/Lightbox modes, is used as link text in link-lightbox mode. <a href="%1$s">ARVE Pro</a> is able to get them from %2$s automatically.', 'advanced-responsive-video-embedder' ),
|
300 |
esc_url( $pro_addon_link ),
|
301 |
esc_html( $auto_title )
|
302 |
),
|
@@ -306,33 +306,46 @@ function all_settings() {
|
|
306 |
'description' => [
|
307 |
'default' => null,
|
308 |
'option' => false,
|
309 |
-
'label' =>
|
310 |
'type' => 'string',
|
311 |
-
'placeholder' =>
|
312 |
-
|
|
|
|
|
|
|
|
|
|
|
313 |
'descriptionlink' => esc_url( $pro_addon_link ),
|
314 |
'descriptionlinktext' => esc_html__( 'ARVE Pro', 'advanced-responsive-video-embedder' ),
|
315 |
],
|
316 |
'upload_date' => [
|
317 |
'default' => null,
|
318 |
'option' => false,
|
319 |
-
'label' =>
|
320 |
'type' => 'string',
|
321 |
-
'placeholder' =>
|
322 |
-
'description' => sprintf(
|
|
|
|
|
|
|
|
|
323 |
'descriptionlink' => esc_url( $pro_addon_link ),
|
324 |
'descriptionlinktext' => esc_html__( 'ARVE Pro', 'advanced-responsive-video-embedder' ),
|
325 |
],
|
326 |
'mode' => [
|
327 |
'tag' => 'pro',
|
328 |
'default' => 'normal',
|
329 |
-
'label' =>
|
330 |
'type' => 'select',
|
331 |
-
'options' =>
|
332 |
-
|
333 |
-
|
|
|
|
|
|
|
334 |
'description' => sprintf(
|
335 |
-
|
|
|
336 |
'https://nextgenthemes.com/plugins/arve-pro/'
|
337 |
),
|
338 |
'descriptionlink' => esc_url( $pro_addon_link ),
|
@@ -343,31 +356,31 @@ function all_settings() {
|
|
343 |
'default' => '',
|
344 |
'ui' => 'image_upload',
|
345 |
'shortcode' => false,
|
346 |
-
'label' =>
|
347 |
'type' => 'string',
|
348 |
-
'placeholder' =>
|
349 |
-
'description' =>
|
350 |
],
|
351 |
'thumbnail_post_image_fallback' => [
|
352 |
'tag' => 'pro',
|
353 |
'default' => false,
|
354 |
'shortcode' => false,
|
355 |
-
'label' =>
|
356 |
'type' => 'boolean',
|
357 |
],
|
358 |
'thumbnail' => [
|
359 |
'default' => null,
|
360 |
'shortcode' => true,
|
361 |
'option' => false,
|
362 |
-
'label' =>
|
363 |
'type' => 'attachment',
|
364 |
'libraryType' => [ 'image' ],
|
365 |
-
'addButton' =>
|
366 |
-
'frameTitle' =>
|
367 |
-
'placeholder' =>
|
368 |
'description' => sprintf(
|
369 |
// Translators: 1 Link, 2 Provider list
|
370 |
-
__( 'Media library image ID (Select above in Gutenberg) or image URL for preview image for Lazyload modes, always used for SEO. <a href="%1$s">ARVE Pro</a> is able to get them from %2$s automatically.', 'advanced-responsive-video-embedder' ),
|
371 |
esc_url( $pro_addon_link ),
|
372 |
esc_html( $auto_thumbs )
|
373 |
),
|
@@ -378,126 +391,126 @@ function all_settings() {
|
|
378 |
'default' => false,
|
379 |
'shortcode' => true,
|
380 |
'tag' => 'pro',
|
381 |
-
'label' =>
|
382 |
'type' => 'boolean',
|
383 |
-
'description' =>
|
384 |
],
|
385 |
'grow' => [
|
386 |
'tag' => 'pro',
|
387 |
'default' => true,
|
388 |
'type' => 'select',
|
389 |
'options' => $def_bool_options,
|
390 |
-
'label' =>
|
391 |
-
'description' =>
|
392 |
],
|
393 |
'fullscreen' => [
|
394 |
'tag' => 'pro',
|
395 |
'default' => 'disabled',
|
396 |
'type' => 'select',
|
397 |
-
'label' =>
|
398 |
-
'desc_detail' =>
|
399 |
'options' => [
|
400 |
-
'' =>
|
401 |
-
'enabled-exit' =>
|
402 |
-
'enabled-stick' =>
|
403 |
-
'disabled' =>
|
404 |
],
|
405 |
],
|
406 |
'play_icon_style' => [
|
407 |
'tag' => 'pro',
|
408 |
'default' => 'youtube',
|
409 |
-
'label' =>
|
410 |
'type' => 'select',
|
411 |
'options' => [
|
412 |
// Translators: 1 %s is play icon style.
|
413 |
-
'' =>
|
414 |
-
'youtube' =>
|
415 |
-
'youtube-red-diamond' =>
|
416 |
-
'vimeo' =>
|
417 |
-
'circle' =>
|
418 |
-
'none' =>
|
419 |
-
'custom' =>
|
420 |
],
|
421 |
],
|
422 |
'hover_effect' => [
|
423 |
'tag' => 'pro',
|
424 |
'default' => 'zoom',
|
425 |
-
'label' =>
|
426 |
'type' => 'select',
|
427 |
'options' => [
|
428 |
-
'' =>
|
429 |
-
'zoom' =>
|
430 |
-
'rectangle' =>
|
431 |
-
'none' =>
|
432 |
],
|
433 |
],
|
434 |
'disable_links' => [
|
435 |
'tag' => 'pro',
|
436 |
'default' => false,
|
437 |
-
'label' =>
|
438 |
'type' => 'select',
|
439 |
'options' => $def_bool_options,
|
440 |
-
'description' =>
|
441 |
],
|
442 |
// 'mobile_inview' => [
|
443 |
// 'tag' => 'pro',
|
444 |
// 'default' => true,
|
445 |
// 'shortcode' => false,
|
446 |
-
// 'label' =>
|
447 |
// 'type' => 'boolean',
|
448 |
-
// 'description' =>
|
449 |
// ],
|
450 |
'align' => [
|
451 |
'default' => 'none',
|
452 |
'shortcode' => true,
|
453 |
-
'label' =>
|
454 |
'type' => 'select',
|
455 |
'options' => [
|
456 |
-
'' =>
|
457 |
-
'none' =>
|
458 |
-
'left' =>
|
459 |
-
'right' =>
|
460 |
-
'center' =>
|
461 |
],
|
462 |
],
|
463 |
'lightbox_script' => [
|
464 |
'tag' => 'pro',
|
465 |
'default' => 'bigpicture',
|
466 |
'shortcode' => false,
|
467 |
-
'label' =>
|
468 |
'type' => 'select',
|
469 |
'options' => [
|
470 |
-
'bigpicture' =>
|
471 |
-
'lity' =>
|
472 |
],
|
473 |
-
'description' =>
|
474 |
],
|
475 |
'arve_link' => [
|
476 |
'default' => false,
|
477 |
-
'label' =>
|
478 |
'type' => 'select',
|
479 |
'options' => $def_bool_options,
|
480 |
-
'description' =>
|
481 |
],
|
482 |
'duration' => [
|
483 |
'default' => null,
|
484 |
'option' => false,
|
485 |
-
'label' =>
|
486 |
'type' => 'string',
|
487 |
'placeholder' => '1H2M3S',
|
488 |
-
'description' =>
|
489 |
],
|
490 |
'autoplay' => [
|
491 |
'default' => false,
|
492 |
'shortcode' => true,
|
493 |
-
'label' =>
|
494 |
'type' => 'select',
|
495 |
'options' => $def_bool_options,
|
496 |
-
'description' =>
|
497 |
],
|
498 |
'maxwidth' => [
|
499 |
'default' => 0,
|
500 |
-
'label' =>
|
501 |
'type' => 'integer',
|
502 |
'description' => sprintf(
|
503 |
// Translators: $content_width value.
|
@@ -508,35 +521,80 @@ function all_settings() {
|
|
508 |
'lightbox_maxwidth' => [
|
509 |
'tag' => 'pro',
|
510 |
'default' => 1174,
|
511 |
-
'label' =>
|
512 |
'type' => 'integer',
|
513 |
-
'placeholder' =>
|
514 |
-
'description' =>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
515 |
],
|
516 |
'align_maxwidth' => [
|
517 |
'default' => 400,
|
518 |
'shortcode' => false,
|
519 |
-
'label' =>
|
520 |
'type' => 'integer',
|
521 |
'description' => esc_attr__( 'In px, Needed! Must be 100+ to work.', 'advanced-responsive-video-embedder' ),
|
522 |
],
|
523 |
'aspect_ratio' => [
|
524 |
'default' => null,
|
525 |
'option' => false,
|
526 |
-
'label' =>
|
527 |
'type' => 'string',
|
528 |
-
'description' =>
|
529 |
-
'placeholder' =>
|
530 |
],
|
531 |
'parameters' => [
|
532 |
'default' => null,
|
533 |
'html5' => false,
|
534 |
'option' => false,
|
535 |
-
'label' =>
|
536 |
'type' => 'string',
|
537 |
-
'placeholder' =>
|
538 |
'description' => sprintf(
|
539 |
-
__( 'Provider specific player settings on iframe src. See <a href="%s">documentation.</a>', 'advanced-responsive-video-embedder' ), // phpcs:ignore WordPress.WP.I18n.MissingTranslatorsComment
|
540 |
esc_url( 'https://nextgenthemes.com/plugins/arve/documentation/#parematers' )
|
541 |
),
|
542 |
],
|
@@ -544,111 +602,111 @@ function all_settings() {
|
|
544 |
'tag' => 'html5',
|
545 |
'default' => true,
|
546 |
'shortcode' => false,
|
547 |
-
'label' =>
|
548 |
'type' => 'boolean',
|
549 |
-
'description' =>
|
550 |
],
|
551 |
'controlslist' => [
|
552 |
'tag' => 'html5',
|
553 |
'default' => '',
|
554 |
-
'label' =>
|
555 |
'type' => 'string',
|
556 |
'placeholder' => 'nodownload nofullscreen noremoteplayback',
|
557 |
-
'description' => __( 'controlsList attribute on <video> for example use <code>nodownload nofullscreen noremoteplayback</code> to hide the download and the fullscreen button
|
558 |
],
|
559 |
'controls' => [
|
560 |
'tag' => 'html5',
|
561 |
'default' => true,
|
562 |
-
'label' =>
|
563 |
'type' => 'select',
|
564 |
'options' => $def_bool_options,
|
565 |
-
'description' =>
|
566 |
],
|
567 |
'loop' => [
|
568 |
'tag' => 'html5',
|
569 |
'default' => 'n',
|
570 |
'shortcode' => true,
|
571 |
'option' => false,
|
572 |
-
'label' =>
|
573 |
'type' => 'boolean',
|
574 |
-
'description' =>
|
575 |
],
|
576 |
'muted' => [
|
577 |
'tag' => 'html5',
|
578 |
'default' => 'n',
|
579 |
'shortcode' => true,
|
580 |
'option' => false,
|
581 |
-
'label' =>
|
582 |
'type' => 'boolean',
|
583 |
-
'description' =>
|
584 |
],
|
585 |
'volume' => [
|
586 |
'tag' => 'pro',
|
587 |
'default' => 100,
|
588 |
'shortcode' => true,
|
589 |
-
'label' =>
|
590 |
'placeholder' => '100',
|
591 |
'type' => 'integer',
|
592 |
-
'description' =>
|
593 |
],
|
594 |
'always_enqueue_assets' => [
|
595 |
'shortcode' => false,
|
596 |
'default' => false,
|
597 |
-
'label' =>
|
598 |
'type' => 'boolean',
|
599 |
-
'description' =>
|
600 |
],
|
601 |
'youtube_nocookie' => [
|
602 |
'default' => true,
|
603 |
'shortcode' => false,
|
604 |
-
'label' =>
|
605 |
'type' => 'boolean',
|
606 |
-
'description' =>
|
607 |
],
|
608 |
'vimeo_api_id' => [
|
609 |
-
'tag' => '
|
610 |
'default' => '',
|
611 |
'shortcode' => false,
|
612 |
-
'label' =>
|
613 |
'type' => 'string',
|
614 |
'description' => sprintf(
|
615 |
// Translators: URL
|
616 |
-
__( 'Needed for <a href="%s">Random Video Addon</a>.', 'advanced-responsive-video-embedder' ),
|
617 |
esc_url( 'https://nextgenthemes.com/plugins/arve-random-video/' )
|
618 |
),
|
619 |
'descriptionlink' => esc_url( 'https://nextgenthemes.com/plugins/arve-random-video/' ),
|
620 |
'descriptionlinktext' => esc_html__( 'Random Video Addon', 'advanced-responsive-video-embedder' ),
|
621 |
],
|
622 |
'vimeo_api_secret' => [
|
623 |
-
'tag' => '
|
624 |
'default' => '',
|
625 |
'shortcode' => false,
|
626 |
-
'label' =>
|
627 |
'type' => 'string',
|
628 |
'description' => sprintf(
|
629 |
// Translators: URL
|
630 |
-
__( 'Needed for <a href="%s">Random Video Addon</a>.', 'advanced-responsive-video-embedder' ),
|
631 |
esc_url( 'https://nextgenthemes.com/plugins/arve-random-video/' )
|
632 |
),
|
633 |
'descriptionlink' => esc_url( 'https://nextgenthemes.com/plugins/arve-random-video/' ),
|
634 |
'descriptionlinktext' => esc_html__( 'Random Video Addon', 'advanced-responsive-video-embedder' ),
|
635 |
],
|
636 |
'vimeo_api_token' => [
|
637 |
-
'tag' => '
|
638 |
'default' => '',
|
639 |
'shortcode' => false,
|
640 |
-
'label' =>
|
641 |
'type' => 'string',
|
642 |
'description' => sprintf(
|
643 |
// Translators: URL
|
644 |
-
__( 'Needed for <a href="%s">Random Video Addon</a>.', 'advanced-responsive-video-embedder' ),
|
645 |
esc_url( 'https://nextgenthemes.com/plugins/arve-random-video/' )
|
646 |
),
|
647 |
'descriptionlink' => esc_url( 'https://nextgenthemes.com/plugins/arve-random-video/' ),
|
648 |
'descriptionlinktext' => esc_html__( 'Random Video Addon', 'advanced-responsive-video-embedder' ),
|
649 |
],
|
650 |
'random_video_url' => [
|
651 |
-
'tag' => '
|
652 |
'default' => null,
|
653 |
'option' => false,
|
654 |
'shortcode' => true,
|
@@ -656,22 +714,22 @@ function all_settings() {
|
|
656 |
'type' => 'string',
|
657 |
'description' => sprintf(
|
658 |
// Translators: URL
|
659 |
-
__( 'Vimeo showcase URL
|
660 |
esc_url( 'https://nextgenthemes.com/plugins/arve-random-video/' )
|
661 |
),
|
662 |
'descriptionlink' => esc_url( 'https://nextgenthemes.com/plugins/arve-random-video/' ),
|
663 |
'descriptionlinktext' => esc_html__( 'Random Video Addon', 'advanced-responsive-video-embedder' ),
|
664 |
],
|
665 |
'random_video_urls' => [
|
666 |
-
'tag' => '
|
667 |
'default' => null,
|
668 |
'option' => false,
|
669 |
'shortcode' => true,
|
670 |
-
'label' => esc_html__( 'Random Video
|
671 |
'type' => 'string',
|
672 |
'description' => sprintf(
|
673 |
// Translators: URL
|
674 |
-
__( 'Video URLs seperated by commas. <a href="%s">(Random Video Addon)</a>.', 'advanced-responsive-video-embedder' ),
|
675 |
esc_url( 'https://nextgenthemes.com/plugins/arve-random-video/' )
|
676 |
),
|
677 |
'descriptionlink' => esc_url( 'https://nextgenthemes.com/plugins/arve-random-video/' ),
|
@@ -680,61 +738,61 @@ function all_settings() {
|
|
680 |
'legacy_shortcodes' => [
|
681 |
'default' => true,
|
682 |
'shortcode' => false,
|
683 |
-
'label' =>
|
684 |
'type' => 'boolean',
|
685 |
-
'description' =>
|
686 |
],
|
687 |
'sandbox' => [
|
688 |
'default' => true,
|
689 |
'shortcode' => true,
|
690 |
-
'label' =>
|
691 |
'type' => 'boolean',
|
692 |
-
'description' =>
|
693 |
],
|
694 |
'seo_data' => [
|
695 |
'tag' => 'main',
|
696 |
'default' => true,
|
697 |
'shortcode' => false,
|
698 |
-
'label' =>
|
699 |
'type' => 'boolean',
|
700 |
-
'description' =>
|
701 |
],
|
702 |
'gutenberg_help' => [
|
703 |
'default' => true,
|
704 |
'shortcode' => false,
|
705 |
-
'label' =>
|
706 |
'type' => 'boolean',
|
707 |
-
'description' =>
|
708 |
],
|
709 |
'feed' => [
|
710 |
'default' => true,
|
711 |
'shortcode' => false,
|
712 |
'option' => true,
|
713 |
-
'label' =>
|
714 |
'type' => 'boolean',
|
715 |
-
'description' =>
|
716 |
],
|
717 |
/*
|
718 |
'videojs_theme' => [
|
719 |
'tag' => 'videojs',
|
720 |
'default' => 'default',
|
721 |
'shortcode' => false,
|
722 |
-
'label' =>
|
723 |
'type' => 'select',
|
724 |
'options' => [
|
725 |
-
'default' =>
|
726 |
-
'netfoutube' =>
|
727 |
-
'city' =>
|
728 |
-
'forest' =>
|
729 |
-
'fantasy' =>
|
730 |
-
'sea' =>
|
731 |
],
|
732 |
],
|
733 |
'videojs_youtube' => [
|
734 |
'tag' => 'videojs',
|
735 |
'default' => false,
|
736 |
'shortcode' => false,
|
737 |
-
'label' =>
|
738 |
'type' => 'boolean',
|
739 |
],
|
740 |
*/
|
@@ -742,9 +800,9 @@ function all_settings() {
|
|
742 |
'default' => false,
|
743 |
'shortcode' => false,
|
744 |
'option' => true,
|
745 |
-
'label' =>
|
746 |
'type' => 'boolean',
|
747 |
-
'description' =>
|
748 |
],
|
749 |
];
|
750 |
|
@@ -760,7 +818,7 @@ function all_settings() {
|
|
760 |
'option' => true,
|
761 |
'shortcode' => false,
|
762 |
// Translators: %s is Provider
|
763 |
-
'label' => sprintf(
|
764 |
'type' => 'string',
|
765 |
];
|
766 |
}
|
1 |
<?php
|
2 |
namespace Nextgenthemes\ARVE;
|
3 |
|
4 |
+
use function \Nextgenthemes\ARVE\Common\kses_basic;
|
5 |
+
|
6 |
function options() {
|
7 |
$i = settings_instance();
|
8 |
return $i->get_options();
|
24 |
'namespace' => __NAMESPACE__,
|
25 |
'settings' => settings(),
|
26 |
'sections' => [
|
27 |
+
'main' => esc_html__( 'Main', 'advanced-responsive-video-embedder' ),
|
28 |
+
'pro' => esc_html__( 'Pro', 'advanced-responsive-video-embedder' ),
|
29 |
+
'sticky-videos' => esc_html__( 'Sticky Videos', 'advanced-responsive-video-embedder' ),
|
30 |
+
'random-video' => esc_html__( 'Random Video', 'advanced-responsive-video-embedder' ),
|
31 |
+
'urlparams' => esc_html__( 'URL Parameters', 'advanced-responsive-video-embedder' ),
|
32 |
+
'html5' => esc_html__( 'HTML5', 'advanced-responsive-video-embedder' ),
|
33 |
+
'debug' => esc_html__( 'Debug Info', 'advanced-responsive-video-embedder' ),
|
34 |
+
#'videojs' => esc_html__( 'Video.js', 'advanced-responsive-video-embedder' ),
|
35 |
],
|
36 |
+
'premium_sections' => [ 'pro', 'sticky-videos', 'random-video', 'videojs' ],
|
37 |
'menu_parent_slug' => 'options-general.php',
|
38 |
+
'menu_title' => esc_html__( 'ARVE', 'advanced-responsive-video-embedder' ),
|
39 |
+
'settings_page_title' => esc_html__( 'ARVE Settings', 'advanced-responsive-video-embedder' ),
|
40 |
]
|
41 |
);
|
42 |
}
|
153 |
'gutenberg' => null,
|
154 |
'src' => null,
|
155 |
'img_srcset' => null,
|
156 |
+
'maxwidth' => null, # Overwriting the option value ON PURPOSE here, see arg_maxwidth
|
157 |
'av1mp4' => null,
|
158 |
'mp4' => null,
|
159 |
'm4v' => null,
|
242 |
}
|
243 |
}
|
244 |
|
|
|
|
|
|
|
|
|
245 |
function all_settings() {
|
246 |
|
247 |
$properties = get_host_properties();
|
265 |
$auto_title = implode( ', ', $auto_title );
|
266 |
$embed_code_only = implode( ', ', $embed_code_only );
|
267 |
$def_bool_options = [
|
268 |
+
'' => esc_html__( 'Default (settings page)', 'advanced-responsive-video-embedder' ),
|
269 |
+
'true' => esc_html__( 'True', 'advanced-responsive-video-embedder' ),
|
270 |
+
'false' => esc_html__( 'False', 'advanced-responsive-video-embedder' ),
|
271 |
];
|
272 |
|
273 |
$provider_list_link = 'https://nextgenthemes.com/plugins/arve-pro/#video-host-support';
|
277 |
'url' => [
|
278 |
'default' => null,
|
279 |
'option' => false,
|
280 |
+
'label' => esc_html__( 'Video URL / iframe Embed Code', 'advanced-responsive-video-embedder' ),
|
281 |
'type' => 'string',
|
282 |
'placeholder' => esc_attr__( 'Video URL / iframe Embed Code', 'advanced-responsive-video-embedder' ),
|
283 |
'description' => sprintf(
|
284 |
// Translators: %1$s Providers
|
285 |
+
kses_basic( __( 'Post the URL of the video here. For %1$s and any <a href="%2$s">unlisted</a> video hosts paste their iframe embed codes.', 'advanced-responsive-video-embedder' ) ),
|
286 |
esc_html( $embed_code_only ),
|
287 |
esc_url( $provider_list_link )
|
288 |
),
|
292 |
'title' => [
|
293 |
'default' => null,
|
294 |
'option' => false,
|
295 |
+
'label' => esc_html__( 'Title', 'advanced-responsive-video-embedder' ),
|
296 |
'type' => 'string',
|
297 |
'description' => sprintf(
|
298 |
// Translators: Provider list
|
299 |
+
kses_basic( __( 'Used for SEO, is visible on top of thumbnails in Lazyload/Lightbox modes, is used as link text in link-lightbox mode. <a href="%1$s">ARVE Pro</a> is able to get them from %2$s automatically.', 'advanced-responsive-video-embedder' ) ),
|
300 |
esc_url( $pro_addon_link ),
|
301 |
esc_html( $auto_title )
|
302 |
),
|
306 |
'description' => [
|
307 |
'default' => null,
|
308 |
'option' => false,
|
309 |
+
'label' => esc_html__( 'Description', 'advanced-responsive-video-embedder' ),
|
310 |
'type' => 'string',
|
311 |
+
'placeholder' => esc_html__( 'Used for SEO (needed, ARVE Pro auto fills this)', 'advanced-responsive-video-embedder' ),
|
312 |
+
|
313 |
+
'description' => sprintf(
|
314 |
+
// translators: URL
|
315 |
+
kses_basic( __( '<a href="%s">ARVE Pro</a> fills this automatically', 'advanced-responsive-video-embedder' ) ),
|
316 |
+
esc_url( $pro_addon_link )
|
317 |
+
),
|
318 |
'descriptionlink' => esc_url( $pro_addon_link ),
|
319 |
'descriptionlinktext' => esc_html__( 'ARVE Pro', 'advanced-responsive-video-embedder' ),
|
320 |
],
|
321 |
'upload_date' => [
|
322 |
'default' => null,
|
323 |
'option' => false,
|
324 |
+
'label' => esc_html__( 'Upload Date', 'advanced-responsive-video-embedder' ),
|
325 |
'type' => 'string',
|
326 |
+
'placeholder' => esc_html__( '2019-09-29 (ARVE Pro fills this with post date)', 'advanced-responsive-video-embedder' ),
|
327 |
+
'description' => sprintf(
|
328 |
+
// translators: URL
|
329 |
+
kses_basic( __( '<a href="%s">ARVE Pro</a> fills this automatically', 'advanced-responsive-video-embedder' ) ),
|
330 |
+
esc_url( $pro_addon_link )
|
331 |
+
),
|
332 |
'descriptionlink' => esc_url( $pro_addon_link ),
|
333 |
'descriptionlinktext' => esc_html__( 'ARVE Pro', 'advanced-responsive-video-embedder' ),
|
334 |
],
|
335 |
'mode' => [
|
336 |
'tag' => 'pro',
|
337 |
'default' => 'normal',
|
338 |
+
'label' => esc_html__( 'Mode', 'advanced-responsive-video-embedder' ),
|
339 |
'type' => 'select',
|
340 |
+
'options' => [
|
341 |
+
'' => esc_html__( 'Default (settings page)', 'advanced-responsive-video-embedder' ),
|
342 |
+
'lazyload' => esc_html__( 'Lazyload', 'advanced-responsive-video-embedder' ),
|
343 |
+
'lightbox' => esc_html__( 'Lightbox', 'advanced-responsive-video-embedder' ),
|
344 |
+
'link-lightbox' => esc_html__( 'Link -> Lightbox', 'advanced-responsive-video-embedder' ),
|
345 |
+
],
|
346 |
'description' => sprintf(
|
347 |
+
// translators: URL
|
348 |
+
kses_basic( __( 'For Lazyload, Lightbox and Link mode check out <a href="%s">ARVE Pro</a>. Only use normal when Pro is not installed!', 'advanced-responsive-video-embedder' ) ),
|
349 |
'https://nextgenthemes.com/plugins/arve-pro/'
|
350 |
),
|
351 |
'descriptionlink' => esc_url( $pro_addon_link ),
|
356 |
'default' => '',
|
357 |
'ui' => 'image_upload',
|
358 |
'shortcode' => false,
|
359 |
+
'label' => esc_html__( 'Thumbnail Fallback', 'advanced-responsive-video-embedder' ),
|
360 |
'type' => 'string',
|
361 |
+
'placeholder' => esc_html__( 'URL or media gallery image ID used for thumbnail', 'advanced-responsive-video-embedder' ),
|
362 |
+
'description' => esc_html__( 'URL or media gallery image ID used for thumbnail', 'advanced-responsive-video-embedder' ),
|
363 |
],
|
364 |
'thumbnail_post_image_fallback' => [
|
365 |
'tag' => 'pro',
|
366 |
'default' => false,
|
367 |
'shortcode' => false,
|
368 |
+
'label' => esc_html__( 'Thumbnail Featured Image Fallback', 'advanced-responsive-video-embedder' ),
|
369 |
'type' => 'boolean',
|
370 |
],
|
371 |
'thumbnail' => [
|
372 |
'default' => null,
|
373 |
'shortcode' => true,
|
374 |
'option' => false,
|
375 |
+
'label' => esc_html__( 'Thumbnail', 'advanced-responsive-video-embedder' ),
|
376 |
'type' => 'attachment',
|
377 |
'libraryType' => [ 'image' ],
|
378 |
+
'addButton' => esc_html__( 'Select Image', 'advanced-responsive-video-embedder' ),
|
379 |
+
'frameTitle' => esc_html__( 'Select Image', 'advanced-responsive-video-embedder' ),
|
380 |
+
'placeholder' => esc_html__( 'Media library image ID or image URL', 'advanced-responsive-video-embedder' ),
|
381 |
'description' => sprintf(
|
382 |
// Translators: 1 Link, 2 Provider list
|
383 |
+
kses_basic( __( 'Media library image ID (Select above in Gutenberg) or image URL for preview image for Lazyload modes, always used for SEO. <a href="%1$s">ARVE Pro</a> is able to get them from %2$s automatically.', 'advanced-responsive-video-embedder' ) ),
|
384 |
esc_url( $pro_addon_link ),
|
385 |
esc_html( $auto_thumbs )
|
386 |
),
|
391 |
'default' => false,
|
392 |
'shortcode' => true,
|
393 |
'tag' => 'pro',
|
394 |
+
'label' => esc_html__( 'Hide Title (Lazyload & Lightbox only)', 'advanced-responsive-video-embedder' ),
|
395 |
'type' => 'boolean',
|
396 |
+
'description' => esc_html__( 'Usefull when the thumbnail image already displays the video title (Lazyload & Lightbox modes).', 'advanced-responsive-video-embedder' ),
|
397 |
],
|
398 |
'grow' => [
|
399 |
'tag' => 'pro',
|
400 |
'default' => true,
|
401 |
'type' => 'select',
|
402 |
'options' => $def_bool_options,
|
403 |
+
'label' => esc_html__( 'Expand on play? (Lazyload only)', 'advanced-responsive-video-embedder' ),
|
404 |
+
'description' => esc_html__( 'Expands video size after clicking the thumbnail (Lazyload Mode)', 'advanced-responsive-video-embedder' ),
|
405 |
],
|
406 |
'fullscreen' => [
|
407 |
'tag' => 'pro',
|
408 |
'default' => 'disabled',
|
409 |
'type' => 'select',
|
410 |
+
'label' => esc_html__( 'Go Fullscreen on opening Lightbox?', 'advanced-responsive-video-embedder' ),
|
411 |
+
'desc_detail' => esc_html__( 'Makes the Browser go fullscreen when opening the Lighbox. Optionally stay in Fullscreen mode even after the Lightbox is closed', 'advanced-responsive-video-embedder' ),
|
412 |
'options' => [
|
413 |
+
'' => esc_html__( 'Default (settings page)', 'advanced-responsive-video-embedder' ),
|
414 |
+
'enabled-exit' => esc_html__( 'Enabled, exit FS on lightbox close', 'advanced-responsive-video-embedder' ),
|
415 |
+
'enabled-stick' => esc_html__( 'Enabled, stay FS on lightbox close', 'advanced-responsive-video-embedder' ),
|
416 |
+
'disabled' => esc_html__( 'Disabled', 'advanced-responsive-video-embedder' ),
|
417 |
],
|
418 |
],
|
419 |
'play_icon_style' => [
|
420 |
'tag' => 'pro',
|
421 |
'default' => 'youtube',
|
422 |
+
'label' => esc_html__( 'Play Button', 'advanced-responsive-video-embedder' ),
|
423 |
'type' => 'select',
|
424 |
'options' => [
|
425 |
// Translators: 1 %s is play icon style.
|
426 |
+
'' => esc_html__( 'Default (settings page)', 'advanced-responsive-video-embedder' ),
|
427 |
+
'youtube' => esc_html__( 'Youtube', 'advanced-responsive-video-embedder' ),
|
428 |
+
'youtube-red-diamond' => esc_html__( 'Youtube Red Diamond', 'advanced-responsive-video-embedder' ),
|
429 |
+
'vimeo' => esc_html__( 'Vimeo', 'advanced-responsive-video-embedder' ),
|
430 |
+
'circle' => esc_html__( 'Circle', 'advanced-responsive-video-embedder' ),
|
431 |
+
'none' => esc_html__( 'No play image', 'advanced-responsive-video-embedder' ),
|
432 |
+
'custom' => esc_html__( 'Custom (for PHP filter)', 'advanced-responsive-video-embedder' ),
|
433 |
],
|
434 |
],
|
435 |
'hover_effect' => [
|
436 |
'tag' => 'pro',
|
437 |
'default' => 'zoom',
|
438 |
+
'label' => esc_html__( 'Hover Effect (Lazyload/Lightbox only)', 'advanced-responsive-video-embedder' ),
|
439 |
'type' => 'select',
|
440 |
'options' => [
|
441 |
+
'' => esc_html__( 'Default (settings page)', 'advanced-responsive-video-embedder' ),
|
442 |
+
'zoom' => esc_html__( 'Zoom Thumbnail', 'advanced-responsive-video-embedder' ),
|
443 |
+
'rectangle' => esc_html__( 'Move Rectangle in', 'advanced-responsive-video-embedder' ),
|
444 |
+
'none' => esc_html__( 'None', 'advanced-responsive-video-embedder' ),
|
445 |
],
|
446 |
],
|
447 |
'disable_links' => [
|
448 |
'tag' => 'pro',
|
449 |
'default' => false,
|
450 |
+
'label' => esc_html__( 'Disable links', 'advanced-responsive-video-embedder' ),
|
451 |
'type' => 'select',
|
452 |
'options' => $def_bool_options,
|
453 |
+
'description' => esc_html__( 'Prevent embeds to open new popups/tabs from links inside video embeds. Note: breaks functionality like sharing.', 'advanced-responsive-video-embedder' ),
|
454 |
],
|
455 |
// 'mobile_inview' => [
|
456 |
// 'tag' => 'pro',
|
457 |
// 'default' => true,
|
458 |
// 'shortcode' => false,
|
459 |
+
// 'label' => esc_html__( 'Mobile Inview Fallback', 'advanced-responsive-video-embedder' ),
|
460 |
// 'type' => 'boolean',
|
461 |
+
// 'description' => esc_html__( 'This is not needed/used for YouTube and Vimeo. On mobiles fallback Lazyload mode to Lazyload Inview as workarround for the problem that it otherwise needs two touches to play a lazyloaded video because mobile browsers prevent autoplay. Note that this will prevent users to see your custom thumbnails or titles!', 'advanced-responsive-video-embedder' ),
|
462 |
// ],
|
463 |
'align' => [
|
464 |
'default' => 'none',
|
465 |
'shortcode' => true,
|
466 |
+
'label' => esc_html__( 'Alignment', 'advanced-responsive-video-embedder' ),
|
467 |
'type' => 'select',
|
468 |
'options' => [
|
469 |
+
'' => esc_html__( 'Default (settings page)', 'advanced-responsive-video-embedder' ),
|
470 |
+
'none' => esc_html__( 'None', 'advanced-responsive-video-embedder' ),
|
471 |
+
'left' => esc_html__( 'Left', 'advanced-responsive-video-embedder' ),
|
472 |
+
'right' => esc_html__( 'Right', 'advanced-responsive-video-embedder' ),
|
473 |
+
'center' => esc_html__( 'Center', 'advanced-responsive-video-embedder' ),
|
474 |
],
|
475 |
],
|
476 |
'lightbox_script' => [
|
477 |
'tag' => 'pro',
|
478 |
'default' => 'bigpicture',
|
479 |
'shortcode' => false,
|
480 |
+
'label' => esc_html__( 'Lightbox Script', 'advanced-responsive-video-embedder' ),
|
481 |
'type' => 'select',
|
482 |
'options' => [
|
483 |
+
'bigpicture' => esc_html__( 'BigPicture', 'advanced-responsive-video-embedder' ),
|
484 |
+
'lity' => esc_html__( 'Lity', 'advanced-responsive-video-embedder' ),
|
485 |
],
|
486 |
+
'description' => esc_html__( 'Only use Lity if you have issues with Big Picture', 'advanced-responsive-video-embedder' ),
|
487 |
],
|
488 |
'arve_link' => [
|
489 |
'default' => false,
|
490 |
+
'label' => esc_html__( 'ARVE Link', 'advanced-responsive-video-embedder' ),
|
491 |
'type' => 'select',
|
492 |
'options' => $def_bool_options,
|
493 |
+
'description' => esc_html__( "Shows a small 'ARVE' link below the videos. Be the most awesome person and help promoting this plugin.", 'advanced-responsive-video-embedder' ),
|
494 |
],
|
495 |
'duration' => [
|
496 |
'default' => null,
|
497 |
'option' => false,
|
498 |
+
'label' => esc_html__( 'Duration', 'advanced-responsive-video-embedder' ),
|
499 |
'type' => 'string',
|
500 |
'placeholder' => '1H2M3S',
|
501 |
+
'description' => esc_html__( '`1H2M3S` for 1 hour, 2 minutes and 3 seconds. `5M` for 5 minutes.', 'advanced-responsive-video-embedder' ),
|
502 |
],
|
503 |
'autoplay' => [
|
504 |
'default' => false,
|
505 |
'shortcode' => true,
|
506 |
+
'label' => esc_html__( 'Autoplay', 'advanced-responsive-video-embedder' ),
|
507 |
'type' => 'select',
|
508 |
'options' => $def_bool_options,
|
509 |
+
'description' => esc_html__( 'Do not expect this to work! Browsers (especially mobile) or user settings prevent it, some video hosts do not support it at all. Only used in normal mode. ARVE will mute HTML5 video playback in case to make autoplay work for the broadest audience.', 'advanced-responsive-video-embedder' ),
|
510 |
],
|
511 |
'maxwidth' => [
|
512 |
'default' => 0,
|
513 |
+
'label' => esc_html__( 'Maximal Width', 'advanced-responsive-video-embedder' ),
|
514 |
'type' => 'integer',
|
515 |
'description' => sprintf(
|
516 |
// Translators: $content_width value.
|
521 |
'lightbox_maxwidth' => [
|
522 |
'tag' => 'pro',
|
523 |
'default' => 1174,
|
524 |
+
'label' => esc_html__( 'Lightbox Maximal Width', 'advanced-responsive-video-embedder' ),
|
525 |
'type' => 'integer',
|
526 |
+
'placeholder' => esc_html__( 'Leave empty for default from settings page', 'advanced-responsive-video-embedder' ),
|
527 |
+
'description' => esc_html__( 'default 1174', 'advanced-responsive-video-embedder' ),
|
528 |
+
],
|
529 |
+
'sticky_width' => [
|
530 |
+
'tag' => 'sticky-videos',
|
531 |
+
'default' => '350px',
|
532 |
+
'shortcode' => false,
|
533 |
+
'label' => esc_html__( 'Sticky Video Width', 'advanced-responsive-video-embedder' ),
|
534 |
+
'type' => 'string',
|
535 |
+
'description' => esc_attr__( 'CSS value (px, vw, ...) 350px is default.', 'advanced-responsive-video-embedder' ),
|
536 |
+
],
|
537 |
+
'sticky_gap' => [
|
538 |
+
'tag' => 'sticky-videos',
|
539 |
+
'default' => '0',
|
540 |
+
'shortcode' => false,
|
541 |
+
'label' => esc_html__( 'Sticky Video Corner Gap', 'advanced-responsive-video-embedder' ),
|
542 |
+
'type' => 'string',
|
543 |
+
'description' => esc_attr__( 'CSS value (px, vw, ...).', 'advanced-responsive-video-embedder' ),
|
544 |
+
],
|
545 |
+
'sticky_close_btn_pos_x' => [
|
546 |
+
'tag' => 'sticky-videos',
|
547 |
+
'default' => '0',
|
548 |
+
'shortcode' => false,
|
549 |
+
'label' => esc_html__( 'Close Button Position X', 'advanced-responsive-video-embedder' ),
|
550 |
+
'type' => 'string',
|
551 |
+
'description' => esc_attr__( 'The base poition is always in the corner pointing to the middle of the screem, nagative values will position the button outside of video.', 'advanced-responsive-video-embedder' ),
|
552 |
+
],
|
553 |
+
'sticky_close_btn_pos_y' => [
|
554 |
+
'tag' => 'sticky-videos',
|
555 |
+
'default' => '-15px',
|
556 |
+
'shortcode' => false,
|
557 |
+
'label' => esc_html__( 'Close Button Position X', 'advanced-responsive-video-embedder' ),
|
558 |
+
'type' => 'string',
|
559 |
+
'description' => esc_attr__( 'The base poition is always in the corner pointing to the middle of the screem, nagative values will position the button outside of video.', 'advanced-responsive-video-embedder' ),
|
560 |
+
],
|
561 |
+
'sticky_pos' => [
|
562 |
+
'tag' => 'sticky-videos',
|
563 |
+
'default' => 'top-left',
|
564 |
+
'label' => esc_html__( 'Sticky Video Position', 'advanced-responsive-video-embedder' ),
|
565 |
+
'type' => 'select',
|
566 |
+
'options' => [
|
567 |
+
'top-left' => esc_html__( 'Top left', 'advanced-responsive-video-embedder' ),
|
568 |
+
'top-right' => esc_html__( 'Top right', 'advanced-responsive-video-embedder' ),
|
569 |
+
'bottom-left' => esc_html__( 'Bottom left', 'advanced-responsive-video-embedder' ),
|
570 |
+
'bottom-right' => esc_html__( 'Bottom right', 'advanced-responsive-video-embedder' ),
|
571 |
+
],
|
572 |
+
'description' => esc_attr__( 'Corner the video gets pinned to on bigger screens.', 'advanced-responsive-video-embedder' ),
|
573 |
],
|
574 |
'align_maxwidth' => [
|
575 |
'default' => 400,
|
576 |
'shortcode' => false,
|
577 |
+
'label' => esc_html__( 'Align Maximal Width', 'advanced-responsive-video-embedder' ),
|
578 |
'type' => 'integer',
|
579 |
'description' => esc_attr__( 'In px, Needed! Must be 100+ to work.', 'advanced-responsive-video-embedder' ),
|
580 |
],
|
581 |
'aspect_ratio' => [
|
582 |
'default' => null,
|
583 |
'option' => false,
|
584 |
+
'label' => esc_html__( 'Aspect Ratio', 'advanced-responsive-video-embedder' ),
|
585 |
'type' => 'string',
|
586 |
+
'description' => esc_html__( 'E.g. 4:3, 21:9. Only needed in rare cases. ARVE is usually smart enough to figure this out on its own.', 'advanced-responsive-video-embedder' ),
|
587 |
+
'placeholder' => esc_html__( '4:3, 21:9 ...', 'advanced-responsive-video-embedder' ),
|
588 |
],
|
589 |
'parameters' => [
|
590 |
'default' => null,
|
591 |
'html5' => false,
|
592 |
'option' => false,
|
593 |
+
'label' => esc_html__( 'Parameters', 'advanced-responsive-video-embedder' ),
|
594 |
'type' => 'string',
|
595 |
+
'placeholder' => esc_html__( 'example=1&foo=bar', 'advanced-responsive-video-embedder' ),
|
596 |
'description' => sprintf(
|
597 |
+
kses_basic( __( 'Provider specific player settings on iframe src. See <a href="%s">documentation.</a>', 'advanced-responsive-video-embedder' ) ), // phpcs:ignore WordPress.WP.I18n.MissingTranslatorsComment
|
598 |
esc_url( 'https://nextgenthemes.com/plugins/arve/documentation/#parematers' )
|
599 |
),
|
600 |
],
|
602 |
'tag' => 'html5',
|
603 |
'default' => true,
|
604 |
'shortcode' => false,
|
605 |
+
'label' => esc_html__( 'Use ARVE for video files?', 'advanced-responsive-video-embedder' ),
|
606 |
'type' => 'boolean',
|
607 |
+
'description' => esc_html__( 'Use ARVE to embed HTML5 video files. ARVE uses the browsers players instead of loading the mediaelement player that WP uses.', 'advanced-responsive-video-embedder' ),
|
608 |
],
|
609 |
'controlslist' => [
|
610 |
'tag' => 'html5',
|
611 |
'default' => '',
|
612 |
+
'label' => esc_html__( 'Chrome HTML5 Player controls', 'advanced-responsive-video-embedder' ),
|
613 |
'type' => 'string',
|
614 |
'placeholder' => 'nodownload nofullscreen noremoteplayback',
|
615 |
+
'description' => kses_basic( __( 'controlsList attribute on <video> for example use <code>nodownload nofullscreen noremoteplayback</code> to hide the download and the fullscreen button and disable remote playback. Or just the option(s) you like.', 'advanced-responsive-video-embedder' ) ),
|
616 |
],
|
617 |
'controls' => [
|
618 |
'tag' => 'html5',
|
619 |
'default' => true,
|
620 |
+
'label' => esc_html__( 'Show Controls? (Video file only)', 'advanced-responsive-video-embedder' ),
|
621 |
'type' => 'select',
|
622 |
'options' => $def_bool_options,
|
623 |
+
'description' => esc_html__( 'Show controls on HTML5 video.', 'advanced-responsive-video-embedder' ),
|
624 |
],
|
625 |
'loop' => [
|
626 |
'tag' => 'html5',
|
627 |
'default' => 'n',
|
628 |
'shortcode' => true,
|
629 |
'option' => false,
|
630 |
+
'label' => esc_html__( 'Loop?', 'advanced-responsive-video-embedder' ),
|
631 |
'type' => 'boolean',
|
632 |
+
'description' => esc_html__( 'Loop HTML5 video.', 'advanced-responsive-video-embedder' ),
|
633 |
],
|
634 |
'muted' => [
|
635 |
'tag' => 'html5',
|
636 |
'default' => 'n',
|
637 |
'shortcode' => true,
|
638 |
'option' => false,
|
639 |
+
'label' => esc_html__( 'Mute?', 'advanced-responsive-video-embedder' ),
|
640 |
'type' => 'boolean',
|
641 |
+
'description' => esc_html__( 'Mute HTML5 video.', 'advanced-responsive-video-embedder' ),
|
642 |
],
|
643 |
'volume' => [
|
644 |
'tag' => 'pro',
|
645 |
'default' => 100,
|
646 |
'shortcode' => true,
|
647 |
+
'label' => esc_html__( 'Volume?', 'advanced-responsive-video-embedder' ),
|
648 |
'placeholder' => '100',
|
649 |
'type' => 'integer',
|
650 |
+
'description' => esc_html__( 'Works with video files only.', 'advanced-responsive-video-embedder' ),
|
651 |
],
|
652 |
'always_enqueue_assets' => [
|
653 |
'shortcode' => false,
|
654 |
'default' => false,
|
655 |
+
'label' => esc_html__( 'Always load assets', 'advanced-responsive-video-embedder' ),
|
656 |
'type' => 'boolean',
|
657 |
+
'description' => esc_html__( 'Default=No ARVE will loads its scripts and styles only when the posts content contains a arve video. In case your content is loaded via AJAX at a later stage this detection will not work or the styles are not loaded for another reason you may have to enable this option', 'advanced-responsive-video-embedder' ),
|
658 |
],
|
659 |
'youtube_nocookie' => [
|
660 |
'default' => true,
|
661 |
'shortcode' => false,
|
662 |
+
'label' => esc_html__( 'Use youtube-nocookie.com url?', 'advanced-responsive-video-embedder' ),
|
663 |
'type' => 'boolean',
|
664 |
+
'description' => esc_html__( 'Privacy enhanced mode, will NOT disable cookies but only sets them when a user starts to play a video. There is currently a youtube bug that opens highlighed video boxes with a wrong -nocookie.com url so you need to disble this if you need those.', 'advanced-responsive-video-embedder' ),
|
665 |
],
|
666 |
'vimeo_api_id' => [
|
667 |
+
'tag' => 'random-video',
|
668 |
'default' => '',
|
669 |
'shortcode' => false,
|
670 |
+
'label' => esc_html__( 'Vimeo client identifier', 'advanced-responsive-video-embedder' ),
|
671 |
'type' => 'string',
|
672 |
'description' => sprintf(
|
673 |
// Translators: URL
|
674 |
+
kses_basic( __( 'Needed for <a href="%s">Random Video Addon</a>.', 'advanced-responsive-video-embedder' ) ),
|
675 |
esc_url( 'https://nextgenthemes.com/plugins/arve-random-video/' )
|
676 |
),
|
677 |
'descriptionlink' => esc_url( 'https://nextgenthemes.com/plugins/arve-random-video/' ),
|
678 |
'descriptionlinktext' => esc_html__( 'Random Video Addon', 'advanced-responsive-video-embedder' ),
|
679 |
],
|
680 |
'vimeo_api_secret' => [
|
681 |
+
'tag' => 'random-video',
|
682 |
'default' => '',
|
683 |
'shortcode' => false,
|
684 |
+
'label' => esc_html__( 'Vimeo client secret', 'advanced-responsive-video-embedder' ),
|
685 |
'type' => 'string',
|
686 |
'description' => sprintf(
|
687 |
// Translators: URL
|
688 |
+
kses_basic( __( 'Needed for <a href="%s">Random Video Addon</a>.', 'advanced-responsive-video-embedder' ) ),
|
689 |
esc_url( 'https://nextgenthemes.com/plugins/arve-random-video/' )
|
690 |
),
|
691 |
'descriptionlink' => esc_url( 'https://nextgenthemes.com/plugins/arve-random-video/' ),
|
692 |
'descriptionlinktext' => esc_html__( 'Random Video Addon', 'advanced-responsive-video-embedder' ),
|
693 |
],
|
694 |
'vimeo_api_token' => [
|
695 |
+
'tag' => 'random-video',
|
696 |
'default' => '',
|
697 |
'shortcode' => false,
|
698 |
+
'label' => esc_html__( 'Vimeo API Token', 'advanced-responsive-video-embedder' ),
|
699 |
'type' => 'string',
|
700 |
'description' => sprintf(
|
701 |
// Translators: URL
|
702 |
+
kses_basic( __( 'Needed for <a href="%s">Random Video Addon</a>.', 'advanced-responsive-video-embedder' ) ),
|
703 |
esc_url( 'https://nextgenthemes.com/plugins/arve-random-video/' )
|
704 |
),
|
705 |
'descriptionlink' => esc_url( 'https://nextgenthemes.com/plugins/arve-random-video/' ),
|
706 |
'descriptionlinktext' => esc_html__( 'Random Video Addon', 'advanced-responsive-video-embedder' ),
|
707 |
],
|
708 |
'random_video_url' => [
|
709 |
+
'tag' => 'random-video',
|
710 |
'default' => null,
|
711 |
'option' => false,
|
712 |
'shortcode' => true,
|
714 |
'type' => 'string',
|
715 |
'description' => sprintf(
|
716 |
// Translators: URL
|
717 |
+
kses_basic( __( 'Youtube Playlist or Vimeo showcase URL<a href="%s">(Random Video Addon)</a>.', 'advanced-responsive-video-embedder' ) ),
|
718 |
esc_url( 'https://nextgenthemes.com/plugins/arve-random-video/' )
|
719 |
),
|
720 |
'descriptionlink' => esc_url( 'https://nextgenthemes.com/plugins/arve-random-video/' ),
|
721 |
'descriptionlinktext' => esc_html__( 'Random Video Addon', 'advanced-responsive-video-embedder' ),
|
722 |
],
|
723 |
'random_video_urls' => [
|
724 |
+
'tag' => 'random-video',
|
725 |
'default' => null,
|
726 |
'option' => false,
|
727 |
'shortcode' => true,
|
728 |
+
'label' => esc_html__( 'Random Video URLs', 'advanced-responsive-video-embedder' ),
|
729 |
'type' => 'string',
|
730 |
'description' => sprintf(
|
731 |
// Translators: URL
|
732 |
+
kses_basic( __( 'Video URLs seperated by commas. <a href="%s">(Random Video Addon)</a>.', 'advanced-responsive-video-embedder' ) ),
|
733 |
esc_url( 'https://nextgenthemes.com/plugins/arve-random-video/' )
|
734 |
),
|
735 |
'descriptionlink' => esc_url( 'https://nextgenthemes.com/plugins/arve-random-video/' ),
|
738 |
'legacy_shortcodes' => [
|
739 |
'default' => true,
|
740 |
'shortcode' => false,
|
741 |
+
'label' => esc_html__( 'Enable lagacy shortcodes', 'advanced-responsive-video-embedder' ),
|
742 |
'type' => 'boolean',
|
743 |
+
'description' => esc_html__( 'Enable the old and deprected <code>[youtube id="abcde" /]</code> or <code>[vimeo id="abcde" /]</code> ... style shortcodes. Only enable if you have them in your content.', 'advanced-responsive-video-embedder' ),
|
744 |
],
|
745 |
'sandbox' => [
|
746 |
'default' => true,
|
747 |
'shortcode' => true,
|
748 |
+
'label' => esc_html__( 'Sandbox', 'advanced-responsive-video-embedder' ),
|
749 |
'type' => 'boolean',
|
750 |
+
'description' => esc_html__( "Only disable if you have to. If you embed encrypted media you have to disable this. 'Disable Links' feature from ARVE Pro will not work when without sandbox.", 'advanced-responsive-video-embedder' ),
|
751 |
],
|
752 |
'seo_data' => [
|
753 |
'tag' => 'main',
|
754 |
'default' => true,
|
755 |
'shortcode' => false,
|
756 |
+
'label' => esc_html__( 'Enable structured data (schema.org)', 'advanced-responsive-video-embedder' ),
|
757 |
'type' => 'boolean',
|
758 |
+
'description' => esc_html__( 'Disable if you use Yoast Video SEO or another plugin that generates the data already.', 'advanced-responsive-video-embedder' ),
|
759 |
],
|
760 |
'gutenberg_help' => [
|
761 |
'default' => true,
|
762 |
'shortcode' => false,
|
763 |
+
'label' => esc_html__( 'Enable help text in the Block sidebar?', 'advanced-responsive-video-embedder' ),
|
764 |
'type' => 'boolean',
|
765 |
+
'description' => esc_html__( 'Disabling this makes the interface much cleaner.', 'advanced-responsive-video-embedder' ),
|
766 |
],
|
767 |
'feed' => [
|
768 |
'default' => true,
|
769 |
'shortcode' => false,
|
770 |
'option' => true,
|
771 |
+
'label' => esc_html__( 'Use in RSS/Atom Feeds?', 'advanced-responsive-video-embedder' ),
|
772 |
'type' => 'boolean',
|
773 |
+
'description' => esc_html__( 'Enable the plugin in RSS/Atom feeds? Disabling will not completely diable everything but it will use native WP behavior in feeds where possible.', 'advanced-responsive-video-embedder' ),
|
774 |
],
|
775 |
/*
|
776 |
'videojs_theme' => [
|
777 |
'tag' => 'videojs',
|
778 |
'default' => 'default',
|
779 |
'shortcode' => false,
|
780 |
+
'label' => esc_html__( 'Video.js Theme', 'advanced-responsive-video-embedder' ),
|
781 |
'type' => 'select',
|
782 |
'options' => [
|
783 |
+
'default' => esc_html__( 'Default', 'advanced-responsive-video-embedder' ),
|
784 |
+
'netfoutube' => esc_html__( 'Netfoutube', 'advanced-responsive-video-embedder' ),
|
785 |
+
'city' => esc_html__( 'City', 'advanced-responsive-video-embedder' ),
|
786 |
+
'forest' => esc_html__( 'Forest', 'advanced-responsive-video-embedder' ),
|
787 |
+
'fantasy' => esc_html__( 'Fantasy', 'advanced-responsive-video-embedder' ),
|
788 |
+
'sea' => esc_html__( 'Sea', 'advanced-responsive-video-embedder' ),
|
789 |
],
|
790 |
],
|
791 |
'videojs_youtube' => [
|
792 |
'tag' => 'videojs',
|
793 |
'default' => false,
|
794 |
'shortcode' => false,
|
795 |
+
'label' => esc_html__( 'Use Video.js for YouTube', 'advanced-responsive-video-embedder' ),
|
796 |
'type' => 'boolean',
|
797 |
],
|
798 |
*/
|
800 |
'default' => false,
|
801 |
'shortcode' => false,
|
802 |
'option' => true,
|
803 |
+
'label' => esc_html__( 'Admin bar ARVE button', 'advanced-responsive-video-embedder' ),
|
804 |
'type' => 'boolean',
|
805 |
+
'description' => esc_html__( 'For quickly accessing the ARVE settings page.', 'advanced-responsive-video-embedder' ),
|
806 |
],
|
807 |
];
|
808 |
|
818 |
'option' => true,
|
819 |
'shortcode' => false,
|
820 |
// Translators: %s is Provider
|
821 |
+
'label' => sprintf( esc_html__( '%s url parameters', 'advanced-responsive-video-embedder' ), $provider ),
|
822 |
'type' => 'string',
|
823 |
];
|
824 |
}
|
php/functions-shortcode-filters.php
CHANGED
@@ -1,29 +1,49 @@
|
|
1 |
<?php
|
2 |
namespace Nextgenthemes\ARVE;
|
3 |
|
4 |
-
function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
|
6 |
-
if ( has_fatal_error( $a ) ) {
|
7 |
return $a;
|
8 |
}
|
9 |
|
10 |
-
|
|
|
|
|
11 |
|
12 |
-
|
13 |
|
14 |
-
|
|
|
|
|
|
|
|
|
15 |
|
16 |
-
|
17 |
-
}
|
18 |
|
19 |
-
|
|
|
|
|
|
|
|
|
20 |
|
21 |
-
|
22 |
-
return $a;
|
23 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
|
25 |
if ( ! empty( $a['aspect_ratio'] ) ) {
|
26 |
-
return $a;
|
27 |
}
|
28 |
|
29 |
if ( ! empty( $a['oembed_data']->width ) && ! empty( $a['oembed_data']->height ) ) {
|
@@ -44,189 +64,49 @@ function sc_filter_aspect_ratio( array $a ) {
|
|
44 |
$a['aspect_ratio'] = aspect_ratio_gcd( $a['aspect_ratio'] );
|
45 |
}
|
46 |
|
47 |
-
return $a;
|
48 |
}
|
49 |
|
50 |
-
function
|
51 |
-
|
52 |
-
if ( has_fatal_error( $a ) ) {
|
53 |
-
return $a;
|
54 |
-
}
|
55 |
-
|
56 |
-
$a['width'] = $a['maxwidth'];
|
57 |
-
|
58 |
-
if ( $a['aspect_ratio'] ) {
|
59 |
-
$a['height'] = new_height_from_aspect_ratio( $a['width'], $a['aspect_ratio'] );
|
60 |
-
}
|
61 |
-
|
62 |
-
return $a;
|
63 |
-
}
|
64 |
-
|
65 |
-
function sc_filter_maxwidth( array $a ) {
|
66 |
-
|
67 |
-
if ( has_fatal_error( $a ) ) {
|
68 |
-
return $a;
|
69 |
-
}
|
70 |
|
71 |
$options = options();
|
72 |
|
73 |
-
if ( empty( $
|
74 |
|
75 |
-
if ( in_array( $
|
76 |
-
$
|
77 |
} elseif ( empty( $options['maxwidth'] ) ) {
|
78 |
-
$
|
79 |
} else {
|
80 |
-
$
|
81 |
}
|
82 |
}
|
83 |
|
84 |
-
if ( $
|
85 |
-
|
86 |
}
|
87 |
|
88 |
-
return $
|
89 |
}
|
90 |
|
91 |
-
function
|
92 |
-
|
93 |
-
if ( has_fatal_error( $a ) ) {
|
94 |
-
return $a;
|
95 |
-
}
|
96 |
|
97 |
if ( 'liveleak' !== $a['provider'] ) {
|
98 |
-
return $a;
|
99 |
}
|
100 |
|
101 |
-
if (
|
102 |
$a['id'][0] = 'i';
|
103 |
-
} elseif ( !
|
104 |
-
&& !
|
105 |
) {
|
106 |
$a['id'] = 'i=' . $a['id'];
|
107 |
}
|
108 |
|
109 |
-
return $a;
|
110 |
-
}
|
111 |
-
|
112 |
-
function sc_filter_mode( array $a ) {
|
113 |
-
|
114 |
-
if ( has_fatal_error( $a ) ) {
|
115 |
-
return $a;
|
116 |
-
}
|
117 |
-
|
118 |
-
if ( 'lazyload-lightbox' === $a['mode'] ) {
|
119 |
-
$a['mode'] = 'lightbox';
|
120 |
-
}
|
121 |
-
|
122 |
-
if ( 'thumbnail' === $a['mode'] ) {
|
123 |
-
$a['mode'] = 'lazyload';
|
124 |
-
}
|
125 |
-
|
126 |
-
$supported_modes = get_supported_modes();
|
127 |
-
|
128 |
-
if ( ! array_key_exists( $a['mode'], $supported_modes ) ) {
|
129 |
-
|
130 |
-
$err_msg = sprintf(
|
131 |
-
// Translators: Mode
|
132 |
-
__( 'Mode: %s not available (ARVE Pro not active?), switching to normal mode', 'advanced-responsive-video-embedder' ),
|
133 |
-
$a['mode']
|
134 |
-
);
|
135 |
-
$a['errors']->add( 'mode-not-avail', $err_msg );
|
136 |
-
$a['mode'] = 'normal';
|
137 |
-
}
|
138 |
-
|
139 |
-
return apply_filters( 'nextgenthemes/arve/sc_filter/mode', $a );
|
140 |
-
}
|
141 |
-
|
142 |
-
function sc_filter_validate( array $a ) {
|
143 |
-
|
144 |
-
if ( has_fatal_error( $a ) ) {
|
145 |
-
return $a;
|
146 |
-
}
|
147 |
-
|
148 |
-
foreach ( $a as $key => $value ) {
|
149 |
-
|
150 |
-
switch ( $key ) {
|
151 |
-
case 'errors':
|
152 |
-
break;
|
153 |
-
case 'url_handler':
|
154 |
-
if ( null !== $value && ! is_array( $value ) ) {
|
155 |
-
$a['errors']->add( 2, 'url_handler needs to be null or array' . $value );
|
156 |
-
}
|
157 |
-
break;
|
158 |
-
case 'oembed_data':
|
159 |
-
if ( null !== $value && ! is_object( $value ) ) {
|
160 |
-
$a['errors']->add( 'oembed_data', 'oembed_data needs to be null or a object' );
|
161 |
-
}
|
162 |
-
break;
|
163 |
-
default:
|
164 |
-
if ( null !== $value && ! is_string( $value ) ) {
|
165 |
-
$a['errors']->add( 2, "$key must be null or string" );
|
166 |
-
}
|
167 |
-
break;
|
168 |
-
}
|
169 |
-
}
|
170 |
-
|
171 |
-
foreach ( bool_shortcode_args() as $boolattr ) {
|
172 |
-
$a = validate_bool( $a, $boolattr );
|
173 |
-
};
|
174 |
-
unset( $boolattr );
|
175 |
-
|
176 |
-
$url_args = VIDEO_FILE_EXTENSIONS;
|
177 |
-
$url_args[] = 'url';
|
178 |
-
$url_args[] = 'src';
|
179 |
-
|
180 |
-
foreach ( $url_args as $urlattr ) {
|
181 |
-
$a = validate_url( $a, $urlattr );
|
182 |
-
};
|
183 |
-
unset( $urlattr );
|
184 |
-
|
185 |
-
$a = validate_align( $a );
|
186 |
-
$a = validate_aspect_ratio( $a );
|
187 |
-
|
188 |
-
return apply_filters( 'nextgenthemes/arve/sc_filter/validate', $a );
|
189 |
-
}
|
190 |
-
|
191 |
-
function sc_filter_validate_again( array $a ) {
|
192 |
-
|
193 |
-
if ( has_fatal_error( $a ) ) {
|
194 |
-
return $a;
|
195 |
-
}
|
196 |
-
|
197 |
-
if ( 'html5' !== $a['provider'] ) {
|
198 |
-
|
199 |
-
if ( ! is_int( $a['width'] ) ) {
|
200 |
-
$a['width'] = (int) $a['width'];
|
201 |
-
$a['errors']->add( 'width', '<code>width</code> must be int' );
|
202 |
-
}
|
203 |
-
|
204 |
-
if ( ! is_int( $a['height'] ) ) {
|
205 |
-
$a['height'] = (int) $a['height'];
|
206 |
-
$a['errors']->add( 'height', '<code>height</code> must be int' );
|
207 |
-
}
|
208 |
-
}
|
209 |
-
|
210 |
-
foreach ( $a as $key => $val ) {
|
211 |
-
|
212 |
-
if ( 'oembed_data' === $key && ! is_object( $a[ $attr ] ) && ! is_null( $a[ $attr ] ) ) {
|
213 |
-
$a['errors']->add( 'not bool', $attr . ' must be object' );
|
214 |
-
}
|
215 |
-
|
216 |
-
if ( in_array( $key, bool_shortcode_args(), true ) && ! is_bool( $a[ $attr ] ) ) {
|
217 |
-
$a['errors']->add( 'not bool', $attr . ' must be bool' );
|
218 |
-
}
|
219 |
-
}
|
220 |
-
unset( $attr );
|
221 |
-
|
222 |
-
return $a;
|
223 |
}
|
224 |
|
225 |
-
function
|
226 |
-
|
227 |
-
if ( has_fatal_error( $a ) ) {
|
228 |
-
return $a;
|
229 |
-
}
|
230 |
|
231 |
if ( 'normal' === $a['mode'] ) { // Prevent more then one vid autoplaying
|
232 |
|
@@ -241,102 +121,21 @@ function sc_filter_autoplay( array $a ) {
|
|
241 |
}
|
242 |
}
|
243 |
|
244 |
-
return apply_filters( 'nextgenthemes/arve/
|
245 |
-
}
|
246 |
-
|
247 |
-
function has_fatal_error( array $a ) {
|
248 |
-
( '' !== $a['errors']->get_error_message( 'fatal' ) ) ? true : false;
|
249 |
-
}
|
250 |
-
|
251 |
-
function sc_filter_missing_attribute_check( array $a ) {
|
252 |
-
|
253 |
-
if ( ! is_wp_error( $a['errors'] ) ) {
|
254 |
-
|
255 |
-
$a['errors'] = new \WP_Error();
|
256 |
-
|
257 |
-
$msg = 'WP Error was not initialized, attributes were: <pre>' . var_export( $a, true ) . '</pre>';
|
258 |
-
$a['errors']->add( 'no-wp-error', $msg );
|
259 |
-
}
|
260 |
-
|
261 |
-
if ( has_fatal_error( $a ) ) {
|
262 |
-
return $a;
|
263 |
-
}
|
264 |
-
|
265 |
-
// Old shortcodes
|
266 |
-
if ( $a['legacy_sc'] ) {
|
267 |
-
|
268 |
-
if ( ! $a['id'] || ! $a['provider'] ) {
|
269 |
-
$a['errors']->add( 'fatal', 'need id and provider' );
|
270 |
-
}
|
271 |
-
|
272 |
-
return $a;
|
273 |
-
}
|
274 |
-
|
275 |
-
$error = true;
|
276 |
-
$required_attributes = VIDEO_FILE_EXTENSIONS;
|
277 |
-
$required_attributes[] = 'url';
|
278 |
-
|
279 |
-
foreach ( $required_attributes as $req_attr ) {
|
280 |
-
|
281 |
-
if ( $a[ $req_attr ] ) {
|
282 |
-
$error = false;
|
283 |
-
break;
|
284 |
-
}
|
285 |
-
}
|
286 |
-
|
287 |
-
if ( $error ) {
|
288 |
-
|
289 |
-
$msg = sprintf(
|
290 |
-
// Translators: Attributes.
|
291 |
-
esc_html__( 'The [[arve]] shortcode needs one of this attributes %s', 'advanced-responsive-video-embedder' ),
|
292 |
-
implode( ', ', $required_attributes )
|
293 |
-
);
|
294 |
-
|
295 |
-
$a['errors']->add( 'fatal', $msg );
|
296 |
-
}
|
297 |
-
|
298 |
-
return $a;
|
299 |
}
|
300 |
|
301 |
-
function
|
302 |
|
303 |
-
if (
|
304 |
-
return
|
305 |
}
|
306 |
|
307 |
-
$
|
308 |
-
|
309 |
-
if ( $a['thumbnail'] ) :
|
310 |
-
|
311 |
-
if ( is_numeric( $a['thumbnail'] ) ) {
|
312 |
-
|
313 |
-
$a['img_src'] = wp_get_attachment_image_url( $a['thumbnail'], 'small' );
|
314 |
-
$a['img_srcset'] = wp_get_attachment_image_srcset( $a['thumbnail'], 'small' );
|
315 |
-
|
316 |
-
if ( empty( $a['img_src'] ) ) {
|
317 |
-
$a['errors']->add( 'wp thumbnail', __( 'No attachment with that ID', 'advanced-responsive-video-embedder' ) );
|
318 |
-
}
|
319 |
-
} elseif ( valid_url( $a['thumbnail'] ) ) {
|
320 |
-
|
321 |
-
$a['img_src'] = $a['thumbnail'];
|
322 |
-
|
323 |
-
} else {
|
324 |
-
|
325 |
-
$a['errors']->add( 'thumbnail', __( 'Not a valid thumbnail URL or Media ID given', 'advanced-responsive-video-embedder' ) );
|
326 |
-
}
|
327 |
-
endif;
|
328 |
-
|
329 |
-
$a = apply_filters( 'nextgenthemes/arve/sc_filter/img_src', $a );
|
330 |
-
$a = apply_filters( 'nextgenthemes/arve/sc_filter/img_srcset', $a );
|
331 |
|
332 |
-
return $
|
333 |
}
|
334 |
|
335 |
-
function
|
336 |
-
|
337 |
-
if ( has_fatal_error( $a ) ) {
|
338 |
-
return $a;
|
339 |
-
}
|
340 |
|
341 |
foreach ( VIDEO_FILE_EXTENSIONS as $ext ) {
|
342 |
|
@@ -345,67 +144,6 @@ function sc_filter_video( array $a ) {
|
|
345 |
}
|
346 |
}
|
347 |
|
348 |
-
return apply_filters( 'nextgenthemes/arve/sc_filter/video', $a );
|
349 |
-
}
|
350 |
-
|
351 |
-
function sc_filter_detect_provider_and_id_from_url( array $a ) {
|
352 |
-
|
353 |
-
if ( has_fatal_error( $a ) ) {
|
354 |
-
return $a;
|
355 |
-
}
|
356 |
-
|
357 |
-
if ( 'html5' === $a['provider'] ||
|
358 |
-
( $a['provider'] && $a['id'] )
|
359 |
-
) {
|
360 |
-
return $a;
|
361 |
-
}
|
362 |
-
|
363 |
-
if ( ! $a['url'] && ! $a['src'] ) {
|
364 |
-
$a['errors']->add(
|
365 |
-
'fatal',
|
366 |
-
__( 'sc_filter_detect_provider_and_id_from_url function needs url.', 'advanced-responsive-video-embedder' )
|
367 |
-
);
|
368 |
-
return $a;
|
369 |
-
}
|
370 |
-
|
371 |
-
$options = options();
|
372 |
-
$properties = get_host_properties();
|
373 |
-
$input_provider = $a['provider'];
|
374 |
-
|
375 |
-
foreach ( $properties as $host_id => $host ) :
|
376 |
-
|
377 |
-
if ( empty( $host['regex'] ) ) {
|
378 |
-
continue;
|
379 |
-
}
|
380 |
-
|
381 |
-
$preg_match = preg_match( $host['regex'], $a['url'], $matches );
|
382 |
-
|
383 |
-
if ( 1 !== $preg_match ) {
|
384 |
-
continue;
|
385 |
-
}
|
386 |
-
|
387 |
-
foreach ( $matches as $key => $value ) {
|
388 |
-
|
389 |
-
if ( is_string( $key ) ) {
|
390 |
-
$a['provider'] = $host_id;
|
391 |
-
$a[ $key ] = $matches[ $key ];
|
392 |
-
}
|
393 |
-
}
|
394 |
-
endforeach;
|
395 |
-
|
396 |
-
if ( $input_provider &&
|
397 |
-
( $input_provider !== $a['provider'] ) &&
|
398 |
-
! ( 'youtube' === $input_provider && 'youtubelist' === $a['provider'] )
|
399 |
-
) {
|
400 |
-
$a['errors']->add( 'detect!=oembed', "Regex detected provider <code>{$a['provider']}</code> did not match given provider <code>$input_provider</code>" );
|
401 |
-
}
|
402 |
-
|
403 |
-
if ( ! $a['provider'] ) {
|
404 |
-
$a['provider'] = 'iframe';
|
405 |
-
$a['src'] = $a['src'] ? $a['src'] : $a['url'];
|
406 |
-
$a['id'] = $a['src'];
|
407 |
-
}
|
408 |
-
|
409 |
return $a;
|
410 |
}
|
411 |
|
@@ -416,7 +154,7 @@ function special_iframe_src_mods( array $a ) {
|
|
416 |
$yt_v = Common\get_url_arg( $a['url'], 'v' );
|
417 |
$yt_list = Common\get_url_arg( $a['url'], 'list' );
|
418 |
|
419 |
-
if (
|
420 |
$yt_v
|
421 |
) {
|
422 |
$a['src'] = str_replace( '/embed/videoseries?', "/embed/$yt_v?", $a['src'] );
|
@@ -434,7 +172,7 @@ function special_iframe_src_mods( array $a ) {
|
|
434 |
|
435 |
$parsed_url = wp_parse_url( $a['url'] );
|
436 |
|
437 |
-
if ( ! empty( $parsed_url['fragment'] ) &&
|
438 |
$a['src'] .= '#' . $parsed_url['fragment'];
|
439 |
$a['src_gen'] .= '#' . $parsed_url['fragment'];
|
440 |
}
|
@@ -448,85 +186,6 @@ function special_iframe_src_mods( array $a ) {
|
|
448 |
return $a;
|
449 |
}
|
450 |
|
451 |
-
function sc_filter_iframe_src( array $a ) {
|
452 |
-
|
453 |
-
if ( has_fatal_error( $a ) ) {
|
454 |
-
return $a;
|
455 |
-
}
|
456 |
-
|
457 |
-
if ( 'html5' === $a['provider'] ) {
|
458 |
-
return $a;
|
459 |
-
}
|
460 |
-
|
461 |
-
if ( ! $a['provider'] || ! $a['id'] ) {
|
462 |
-
$a['errors']->add( 'no-provider-and-id', 'Need Provider and ID to build iframe src' );
|
463 |
-
return $a;
|
464 |
-
}
|
465 |
-
|
466 |
-
$options = options();
|
467 |
-
$a['src_gen'] = build_iframe_src( $a );
|
468 |
-
$a = special_iframe_src_mods( $a );
|
469 |
-
$a = compare_oembed_src_with_generated_src( $a );
|
470 |
-
|
471 |
-
if ( ! valid_url( $a['src'] ) && valid_url( $a['src_gen'] ) ) {
|
472 |
-
$a['src'] = $a['src_gen'];
|
473 |
-
}
|
474 |
-
|
475 |
-
$a['src'] = iframe_src_args( $a['src'], $a );
|
476 |
-
$a['src'] = iframe_src_autoplay_args( $a['src'], $a['autoplay'], $a );
|
477 |
-
|
478 |
-
if ( 'youtube' === $a['provider'] && $options['youtube_nocookie'] ) {
|
479 |
-
$a['src'] = str_replace( 'https://www.youtube.com', 'https://www.youtube-nocookie.com', $a['src'] );
|
480 |
-
}
|
481 |
-
|
482 |
-
$a = apply_filters( 'nextgenthemes/arve/sc_filter/src', $a );
|
483 |
-
|
484 |
-
return $a;
|
485 |
-
}
|
486 |
-
|
487 |
-
function compare_oembed_src_with_generated_src( array $a ) {
|
488 |
-
|
489 |
-
if ( ! $a['src'] ) {
|
490 |
-
return $a;
|
491 |
-
}
|
492 |
-
|
493 |
-
$src = $a['src'];
|
494 |
-
$src_gen = $a['src_gen'];
|
495 |
-
|
496 |
-
switch ( $a['provider'] ) {
|
497 |
-
case 'wistia':
|
498 |
-
case 'vimeo':
|
499 |
-
$src = Common\remove_url_query( $a['src'] );
|
500 |
-
$src_gen = Common\remove_url_query( $a['src_gen'] );
|
501 |
-
break;
|
502 |
-
case 'youtube':
|
503 |
-
$src = remove_query_arg( 'feature', $a['src'] );
|
504 |
-
break;
|
505 |
-
}
|
506 |
-
|
507 |
-
if ( $src !== $src_gen ) {
|
508 |
-
$msg = sprintf(
|
509 |
-
'src mismatch<br>url: %s<br>src in: %s<br>src gen: %s',
|
510 |
-
$a['url'],
|
511 |
-
$a['src'],
|
512 |
-
$a['src_gen']
|
513 |
-
);
|
514 |
-
|
515 |
-
if ( $src !== $a['src'] || $src_gen !== $a['src_gen'] ) {
|
516 |
-
$msg .= sprintf(
|
517 |
-
'Actual comparison<br>url: %s<br>src in: %s<br>src gen: %s',
|
518 |
-
$a['url'],
|
519 |
-
$src,
|
520 |
-
$src_gen
|
521 |
-
);
|
522 |
-
}
|
523 |
-
|
524 |
-
$a['errors']->add( 'hidden', $msg );
|
525 |
-
}
|
526 |
-
|
527 |
-
return $a;
|
528 |
-
}
|
529 |
-
|
530 |
function build_iframe_src( array $a ) {
|
531 |
|
532 |
$options = options();
|
@@ -593,8 +252,8 @@ function iframe_src_args( $src, array $a ) {
|
|
593 |
$parameters = wp_parse_args( preg_replace( '!\s+!', '&', $a['parameters'] ) );
|
594 |
$params_options = [];
|
595 |
|
596 |
-
if ( ! empty( $options['url_params_' . $a['provider'] ] ) ) {
|
597 |
-
$params_options = wp_parse_args( preg_replace( '!\s+!', '&', $options['url_params_' . $a['provider'] ] ) );
|
598 |
}
|
599 |
|
600 |
$parameters = wp_parse_args( $parameters, $params_options );
|
@@ -613,7 +272,7 @@ function iframe_src_args( $src, array $a ) {
|
|
613 |
}
|
614 |
|
615 |
// phpcs:ignore Generic.Metrics.CyclomaticComplexity.MaxExceeded
|
616 |
-
function iframe_src_autoplay_args( $
|
617 |
|
618 |
switch ( $a['provider'] ) {
|
619 |
case 'alugha':
|
@@ -626,109 +285,56 @@ function iframe_src_autoplay_args( $src, $autoplay, array $a ) {
|
|
626 |
case 'vimeo':
|
627 |
case 'youtube':
|
628 |
case 'youtubelist':
|
629 |
-
$
|
630 |
-
|
631 |
-
|
632 |
case 'twitch':
|
633 |
case 'ustream':
|
634 |
-
$
|
635 |
-
|
636 |
-
|
637 |
case 'livestream':
|
638 |
-
case '
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
case 'metacafe':
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
case 'brightcove':
|
647 |
case 'snotr':
|
648 |
-
$
|
649 |
-
|
650 |
-
|
651 |
case 'yahoo':
|
652 |
-
|
653 |
-
|
654 |
-
|
655 |
default:
|
656 |
// Do nothing for providers that to not support autoplay or fail with parameters
|
657 |
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
|
678 |
-
);
|
679 |
-
$off = add_query_arg(
|
680 |
-
[
|
681 |
-
'ap' => '0',
|
682 |
-
'autoplay' => '0',
|
683 |
-
'autoStart' => 'false',
|
684 |
-
'player_autoStart' => 'false',
|
685 |
-
],
|
686 |
-
$a['src']
|
687 |
-
);
|
688 |
-
break;
|
689 |
-
*/
|
690 |
}
|
691 |
-
|
692 |
-
if ( $autoplay ) {
|
693 |
-
$src = $on;
|
694 |
-
} else {
|
695 |
-
$src = $off;
|
696 |
-
}
|
697 |
-
|
698 |
-
return $src;
|
699 |
-
}
|
700 |
-
|
701 |
-
function sc_filter_detect_query_args( array $a ) {
|
702 |
-
|
703 |
-
if ( empty( $a['url'] ) ) {
|
704 |
-
return $a;
|
705 |
-
}
|
706 |
-
|
707 |
-
$to_extract = [
|
708 |
-
'brightcove' => [ 'videoId', 'something' ],
|
709 |
-
];
|
710 |
-
|
711 |
-
foreach ( $to_extract as $provider => $parameters ) {
|
712 |
-
|
713 |
-
if ( $provider !== $a['provider'] ) {
|
714 |
-
return $a;
|
715 |
-
}
|
716 |
-
|
717 |
-
$query_array = url_query_array( $a['url'] );
|
718 |
-
|
719 |
-
foreach ( $parameters as $key => $parameter ) {
|
720 |
-
|
721 |
-
$att_name = $a['provider'] . "_$parameter";
|
722 |
-
|
723 |
-
if ( empty( $query_array[ $parameter ] ) ) {
|
724 |
-
$a[ $att_name ] = new \WP_Error( $att_name, "$parameter not found in URL" );
|
725 |
-
} else {
|
726 |
-
$a[ $att_name ] = $query_array[ $parameter ];
|
727 |
-
}
|
728 |
-
}
|
729 |
-
}
|
730 |
-
|
731 |
-
return $a;
|
732 |
}
|
733 |
|
734 |
function get_video_type( $ext ) {
|
@@ -744,11 +350,7 @@ function get_video_type( $ext ) {
|
|
744 |
}
|
745 |
}
|
746 |
|
747 |
-
function
|
748 |
-
|
749 |
-
if ( has_fatal_error( $a ) ) {
|
750 |
-
return $a;
|
751 |
-
}
|
752 |
|
753 |
if ( $a['provider'] && 'html5' !== $a['provider'] ) {
|
754 |
return $a;
|
@@ -756,14 +358,14 @@ function sc_filter_detect_html5( array $a ) {
|
|
756 |
|
757 |
foreach ( VIDEO_FILE_EXTENSIONS as $ext ) :
|
758 |
|
759 |
-
if (
|
760 |
! $a[ $ext ]
|
761 |
) {
|
762 |
$a[ $ext ] = $a['url'];
|
763 |
}
|
764 |
|
765 |
if ( 'av1mp4' === $ext &&
|
766 |
-
|
767 |
! $a[ $ext ]
|
768 |
) {
|
769 |
$a[ $ext ] = $a['url'];
|
1 |
<?php
|
2 |
namespace Nextgenthemes\ARVE;
|
3 |
|
4 |
+
function missing_attribute_check( array $a ) {
|
5 |
+
|
6 |
+
// Old shortcodes
|
7 |
+
if ( $a['legacy_sc'] ) {
|
8 |
+
|
9 |
+
if ( ! $a['id'] || ! $a['provider'] ) {
|
10 |
+
throw new \Exception('need id and provider');
|
11 |
+
}
|
12 |
|
|
|
13 |
return $a;
|
14 |
}
|
15 |
|
16 |
+
$error = true;
|
17 |
+
$required_attributes = VIDEO_FILE_EXTENSIONS;
|
18 |
+
$required_attributes[] = 'url';
|
19 |
|
20 |
+
foreach ( $required_attributes as $req_attr ) {
|
21 |
|
22 |
+
if ( $a[ $req_attr ] ) {
|
23 |
+
$error = false;
|
24 |
+
break;
|
25 |
+
}
|
26 |
+
}
|
27 |
|
28 |
+
if ( $error ) {
|
|
|
29 |
|
30 |
+
$msg = sprintf(
|
31 |
+
// Translators: Attributes.
|
32 |
+
esc_html__( 'The [[arve]] shortcode needs one of this attributes %s', 'advanced-responsive-video-embedder' ),
|
33 |
+
implode( ', ', $required_attributes )
|
34 |
+
);
|
35 |
|
36 |
+
throw new \Exception($msg);
|
|
|
37 |
}
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* @return false|string
|
42 |
+
*/
|
43 |
+
function arg_aspect_ratio( array $a ) {
|
44 |
|
45 |
if ( ! empty( $a['aspect_ratio'] ) ) {
|
46 |
+
return $a['aspect_ratio'];
|
47 |
}
|
48 |
|
49 |
if ( ! empty( $a['oembed_data']->width ) && ! empty( $a['oembed_data']->height ) ) {
|
64 |
$a['aspect_ratio'] = aspect_ratio_gcd( $a['aspect_ratio'] );
|
65 |
}
|
66 |
|
67 |
+
return $a['aspect_ratio'];
|
68 |
}
|
69 |
|
70 |
+
function arg_maxwidth( $maxwidth, $align ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
71 |
|
72 |
$options = options();
|
73 |
|
74 |
+
if ( empty( $maxwidth ) ) {
|
75 |
|
76 |
+
if ( in_array( $align, [ 'left', 'right', 'center' ], true ) ) {
|
77 |
+
$maxwidth = (int) $options['align_maxwidth'];
|
78 |
} elseif ( empty( $options['maxwidth'] ) ) {
|
79 |
+
$maxwidth = (int) empty( $GLOBALS['content_width'] ) ? DEFAULT_MAXWIDTH : $GLOBALS['content_width'];
|
80 |
} else {
|
81 |
+
$maxwidth = (int) $options['maxwidth'];
|
82 |
}
|
83 |
}
|
84 |
|
85 |
+
if ( $maxwidth < 50 ) {
|
86 |
+
throw new \Exception( __( 'Maxwidth needs to be 50+', 'advanced-responsive-video-embedder' ) );
|
87 |
}
|
88 |
|
89 |
+
return $maxwidth;
|
90 |
}
|
91 |
|
92 |
+
function liveleak_id_fix( array $a ) {
|
|
|
|
|
|
|
|
|
93 |
|
94 |
if ( 'liveleak' !== $a['provider'] ) {
|
95 |
+
return $a['id'];
|
96 |
}
|
97 |
|
98 |
+
if ( str_starts_with( $a['id'], 't=' ) ) {
|
99 |
$a['id'][0] = 'i';
|
100 |
+
} elseif ( ! str_starts_with( $a['id'], 'i=' )
|
101 |
+
&& ! str_starts_with( $a['id'], 'f=' )
|
102 |
) {
|
103 |
$a['id'] = 'i=' . $a['id'];
|
104 |
}
|
105 |
|
106 |
+
return $a['id'];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
107 |
}
|
108 |
|
109 |
+
function arg_autoplay( array $a ) {
|
|
|
|
|
|
|
|
|
110 |
|
111 |
if ( 'normal' === $a['mode'] ) { // Prevent more then one vid autoplaying
|
112 |
|
121 |
}
|
122 |
}
|
123 |
|
124 |
+
return apply_filters( 'nextgenthemes/arve/args/autoplay', $a['autoplay'], $a );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
125 |
}
|
126 |
|
127 |
+
function height_from_width_and_ratio( $width, $ratio ) {
|
128 |
|
129 |
+
if ( empty( $ratio ) ) {
|
130 |
+
return false;
|
131 |
}
|
132 |
|
133 |
+
list( $old_width, $old_height ) = explode( ':', $ratio );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
134 |
|
135 |
+
return new_height( $old_width, $old_height, $width );
|
136 |
}
|
137 |
|
138 |
+
function args_video( array $a ) {
|
|
|
|
|
|
|
|
|
139 |
|
140 |
foreach ( VIDEO_FILE_EXTENSIONS as $ext ) {
|
141 |
|
144 |
}
|
145 |
}
|
146 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
147 |
return $a;
|
148 |
}
|
149 |
|
154 |
$yt_v = Common\get_url_arg( $a['url'], 'v' );
|
155 |
$yt_list = Common\get_url_arg( $a['url'], 'list' );
|
156 |
|
157 |
+
if ( str_contains( $a['src'], '/embed/videoseries?' ) &&
|
158 |
$yt_v
|
159 |
) {
|
160 |
$a['src'] = str_replace( '/embed/videoseries?', "/embed/$yt_v?", $a['src'] );
|
172 |
|
173 |
$parsed_url = wp_parse_url( $a['url'] );
|
174 |
|
175 |
+
if ( ! empty( $parsed_url['fragment'] ) && str_starts_with( $parsed_url['fragment'], 't' ) ) {
|
176 |
$a['src'] .= '#' . $parsed_url['fragment'];
|
177 |
$a['src_gen'] .= '#' . $parsed_url['fragment'];
|
178 |
}
|
186 |
return $a;
|
187 |
}
|
188 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
189 |
function build_iframe_src( array $a ) {
|
190 |
|
191 |
$options = options();
|
252 |
$parameters = wp_parse_args( preg_replace( '!\s+!', '&', $a['parameters'] ) );
|
253 |
$params_options = [];
|
254 |
|
255 |
+
if ( ! empty( $options[ 'url_params_' . $a['provider'] ] ) ) {
|
256 |
+
$params_options = wp_parse_args( preg_replace( '!\s+!', '&', $options[ 'url_params_' . $a['provider'] ] ) );
|
257 |
}
|
258 |
|
259 |
$parameters = wp_parse_args( $parameters, $params_options );
|
272 |
}
|
273 |
|
274 |
// phpcs:ignore Generic.Metrics.CyclomaticComplexity.MaxExceeded
|
275 |
+
function iframe_src_autoplay_args( $autoplay, array $a ) {
|
276 |
|
277 |
switch ( $a['provider'] ) {
|
278 |
case 'alugha':
|
285 |
case 'vimeo':
|
286 |
case 'youtube':
|
287 |
case 'youtubelist':
|
288 |
+
return $autoplay ?
|
289 |
+
add_query_arg( 'autoplay', 1, $a['src'] ) :
|
290 |
+
add_query_arg( 'autoplay', 0, $a['src'] );
|
291 |
case 'twitch':
|
292 |
case 'ustream':
|
293 |
+
return $autoplay ?
|
294 |
+
add_query_arg( 'autoplay', 'true', $a['src'] ) :
|
295 |
+
add_query_arg( 'autoplay', 'false', $a['src'] );
|
296 |
case 'livestream':
|
297 |
+
case 'wistia':
|
298 |
+
return $autoplay ?
|
299 |
+
add_query_arg( 'autoPlay', 'true', $a['src'] ) :
|
300 |
+
add_query_arg( 'autoPlay', 'false', $a['src'] );
|
301 |
case 'metacafe':
|
302 |
+
return $autoplay ?
|
303 |
+
add_query_arg( 'ap', 1, $a['src'] ) :
|
304 |
+
remove_query_arg( 'ap', $a['src'] );
|
305 |
case 'brightcove':
|
306 |
case 'snotr':
|
307 |
+
return $autoplay ?
|
308 |
+
add_query_arg( 'autoplay', 1, $a['src'] ) :
|
309 |
+
remove_query_arg( 'autoplay', $a['src'] );
|
310 |
case 'yahoo':
|
311 |
+
return $autoplay ?
|
312 |
+
add_query_arg( 'autoplay', 'true', $a['src'] ) :
|
313 |
+
add_query_arg( 'autoplay', 'false', $a['src'] );
|
314 |
default:
|
315 |
// Do nothing for providers that to not support autoplay or fail with parameters
|
316 |
+
return $a['src'];
|
317 |
+
case 'MAYBEiframe':
|
318 |
+
return $autoplay ?
|
319 |
+
add_query_arg(
|
320 |
+
[
|
321 |
+
'ap' => '1',
|
322 |
+
'autoplay' => '1',
|
323 |
+
'autoStart' => 'true',
|
324 |
+
'player_autoStart' => 'true',
|
325 |
+
],
|
326 |
+
$a['src']
|
327 |
+
) :
|
328 |
+
add_query_arg(
|
329 |
+
[
|
330 |
+
'ap' => '0',
|
331 |
+
'autoplay' => '0',
|
332 |
+
'autoStart' => 'false',
|
333 |
+
'player_autoStart' => 'false',
|
334 |
+
],
|
335 |
+
$a['src']
|
336 |
+
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
337 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
338 |
}
|
339 |
|
340 |
function get_video_type( $ext ) {
|
350 |
}
|
351 |
}
|
352 |
|
353 |
+
function args_detect_html5( array $a ) {
|
|
|
|
|
|
|
|
|
354 |
|
355 |
if ( $a['provider'] && 'html5' !== $a['provider'] ) {
|
356 |
return $a;
|
358 |
|
359 |
foreach ( VIDEO_FILE_EXTENSIONS as $ext ) :
|
360 |
|
361 |
+
if ( str_ends_with( $a['url'], ".$ext" ) &&
|
362 |
! $a[ $ext ]
|
363 |
) {
|
364 |
$a[ $ext ] = $a['url'];
|
365 |
}
|
366 |
|
367 |
if ( 'av1mp4' === $ext &&
|
368 |
+
str_ends_with( $a['url'], 'av1.mp4' ) &&
|
369 |
! $a[ $ext ]
|
370 |
) {
|
371 |
$a[ $ext ] = $a['url'];
|
php/functions-shortcodes.php
CHANGED
@@ -1,8 +1,6 @@
|
|
1 |
<?php
|
2 |
namespace Nextgenthemes\ARVE;
|
3 |
|
4 |
-
use function Nextgenthemes\ARVE\Common\starts_with;
|
5 |
-
|
6 |
function shortcode( $a, $content = null ) {
|
7 |
|
8 |
$a = (array) $a;
|
@@ -79,44 +77,64 @@ function basic_tests( $tests ) {
|
|
79 |
return $html;
|
80 |
}
|
81 |
|
82 |
-
function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
|
84 |
-
|
85 |
-
|
86 |
-
|
|
|
|
|
|
|
87 |
}
|
88 |
|
89 |
-
|
|
|
|
|
|
|
|
|
|
|
90 |
$html = '';
|
91 |
|
92 |
-
|
93 |
-
|
94 |
|
95 |
-
|
|
|
|
|
96 |
|
97 |
-
|
98 |
-
|
99 |
-
$html .= sprintf(
|
100 |
-
'<span class="arve-error"%s>%s %s</span>',
|
101 |
-
'hidden' === $code ? ' hidden' : '',
|
102 |
-
__( '<abbr title="Advanced Responsive Video Embedder">ARVE</abbr> Error:', 'advanced-responsive-video-embedder' ),
|
103 |
-
$message
|
104 |
-
);
|
105 |
-
}
|
106 |
-
}
|
107 |
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
112 |
}
|
|
|
113 |
|
114 |
-
|
115 |
-
$html .= get_debug_info( $html, $a, $input_atts );
|
116 |
|
117 |
-
|
118 |
|
119 |
-
return
|
120 |
}
|
121 |
|
122 |
function shortcode_option_defaults() {
|
1 |
<?php
|
2 |
namespace Nextgenthemes\ARVE;
|
3 |
|
|
|
|
|
4 |
function shortcode( $a, $content = null ) {
|
5 |
|
6 |
$a = (array) $a;
|
77 |
return $html;
|
78 |
}
|
79 |
|
80 |
+
function error( $msg, $code = '' ) {
|
81 |
+
|
82 |
+
return sprintf(
|
83 |
+
'<span class="arve-error"%s><abbr title="%s">ARVE</abbr> %s</span>',
|
84 |
+
'hidden' === $code ? ' hidden' : '',
|
85 |
+
__( 'Advanced Responsive Video Embedder', 'advanced-responsive-video-embedder' ),
|
86 |
+
// translators: Error message
|
87 |
+
sprintf( __( 'Error: %s', 'advanced-responsive-video-embedder' ), $msg )
|
88 |
+
);
|
89 |
+
}
|
90 |
+
|
91 |
+
function add_error_html( array $a ) {
|
92 |
|
93 |
+
$html = '';
|
94 |
+
|
95 |
+
foreach ( $a['errors']->get_error_codes() as $code ) {
|
96 |
+
foreach ( $a['errors']->get_error_messages( $code ) as $key => $message ) {
|
97 |
+
$html .= error( $message, $code );
|
98 |
+
}
|
99 |
}
|
100 |
|
101 |
+
return $html;
|
102 |
+
}
|
103 |
+
|
104 |
+
function build_video( array $input_atts ) {
|
105 |
+
|
106 |
+
$a = array();
|
107 |
$html = '';
|
108 |
|
109 |
+
try {
|
110 |
+
Common\check_product_keys();
|
111 |
|
112 |
+
$a = shortcode_atts( shortcode_pairs(), $input_atts, 'arve' );
|
113 |
+
ksort( $a );
|
114 |
+
ksort( $input_atts );
|
115 |
|
116 |
+
$build_args = new ShortcodeArgs( $a['errors'] );
|
117 |
+
$a = $build_args->get_done( $a );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
118 |
|
119 |
+
$html .= add_error_html( $a );
|
120 |
+
$html .= build_html( $a );
|
121 |
+
$html .= get_debug_info( $html, $a, $input_atts );
|
122 |
+
|
123 |
+
wp_enqueue_script( 'arve' );
|
124 |
+
|
125 |
+
return apply_filters( 'nextgenthemes/arve/html', $html, $a );
|
126 |
+
|
127 |
+
} catch ( \Exception $e ) {
|
128 |
+
return error( $e->getMessage(), $e->getCode() ) .
|
129 |
+
get_debug_info( '', $a, $input_atts );
|
130 |
}
|
131 |
+
}
|
132 |
|
133 |
+
function arg_filters( array $a ) {
|
|
|
134 |
|
135 |
+
$args = new ShortcodeArgs( $a );
|
136 |
|
137 |
+
return $args->get_done();
|
138 |
}
|
139 |
|
140 |
function shortcode_option_defaults() {
|
php/functions-url-handlers.php
CHANGED
@@ -1,8 +1,6 @@
|
|
1 |
<?php
|
2 |
namespace Nextgenthemes\ARVE;
|
3 |
|
4 |
-
use \Nextgenthemes\ARVE\Common\starts_with;
|
5 |
-
|
6 |
function create_url_handlers() {
|
7 |
|
8 |
$properties = get_host_properties();
|
1 |
<?php
|
2 |
namespace Nextgenthemes\ARVE;
|
3 |
|
|
|
|
|
4 |
function create_url_handlers() {
|
5 |
|
6 |
$properties = get_host_properties();
|
php/functions-validation.php
CHANGED
@@ -7,7 +7,7 @@ function valid_url( $url ) {
|
|
7 |
return false;
|
8 |
}
|
9 |
|
10 |
-
if (
|
11 |
$url = 'https:' . $url;
|
12 |
}
|
13 |
|
@@ -18,46 +18,6 @@ function valid_url( $url ) {
|
|
18 |
return false;
|
19 |
}
|
20 |
|
21 |
-
function validate_url( array $a, $attr_name ) {
|
22 |
-
|
23 |
-
if ( ! empty( $a[ $attr_name ] ) && ! valid_url( $a[ $attr_name ] ) ) {
|
24 |
-
|
25 |
-
$error_msg = sprintf(
|
26 |
-
// Translators: 1 URL 2 Attr name
|
27 |
-
__( 'Invalid URL <code>%1$s</code> in <code>%2$s</code>', 'advanced-responsive-video-embedder' ),
|
28 |
-
esc_html( $a[ $attr_name ] ),
|
29 |
-
esc_html( $attr_name )
|
30 |
-
);
|
31 |
-
|
32 |
-
$a['errors']->add( $attr_name, $error_msg );
|
33 |
-
}
|
34 |
-
|
35 |
-
return $a;
|
36 |
-
}
|
37 |
-
|
38 |
-
function validate_aspect_ratio( array $a ) {
|
39 |
-
|
40 |
-
if ( empty( $a['aspect_ratio'] ) ) {
|
41 |
-
return $a;
|
42 |
-
}
|
43 |
-
|
44 |
-
$ratio = explode( ':', $a['aspect_ratio'] );
|
45 |
-
|
46 |
-
if ( empty( $ratio[0] ) || ! is_numeric( $ratio[0] ) ||
|
47 |
-
empty( $ratio[1] ) || ! is_numeric( $ratio[1] )
|
48 |
-
) {
|
49 |
-
$a['errors']->add(
|
50 |
-
'aspect_ratio',
|
51 |
-
// Translators: attribute
|
52 |
-
sprintf( __( 'Aspect ratio <code>%s</code> is not valid', 'advanced-responsive-video-embedder' ), $a['aspect_ratio'] )
|
53 |
-
);
|
54 |
-
|
55 |
-
$a['aspect_ratio'] = null;
|
56 |
-
}
|
57 |
-
|
58 |
-
return $a;
|
59 |
-
}
|
60 |
-
|
61 |
function bool_to_shortcode_string( $val ) {
|
62 |
|
63 |
if ( false === $val ) {
|
@@ -66,67 +26,3 @@ function bool_to_shortcode_string( $val ) {
|
|
66 |
|
67 |
return (string) $val;
|
68 |
}
|
69 |
-
|
70 |
-
// phpcs:ignore Generic.Metrics.CyclomaticComplexity.TooHigh
|
71 |
-
function validate_bool( array $a, $attr_name ) {
|
72 |
-
|
73 |
-
switch ( $a[ $attr_name ] ) {
|
74 |
-
case 'true':
|
75 |
-
case '1':
|
76 |
-
case 'y':
|
77 |
-
case 'yes':
|
78 |
-
case 'on':
|
79 |
-
$a[ $attr_name ] = true;
|
80 |
-
break;
|
81 |
-
case '':
|
82 |
-
case null:
|
83 |
-
$a[ $attr_name ] = null;
|
84 |
-
break;
|
85 |
-
case 'false':
|
86 |
-
case '0':
|
87 |
-
case 'n':
|
88 |
-
case 'no':
|
89 |
-
case 'off':
|
90 |
-
$a[ $attr_name ] = false;
|
91 |
-
break;
|
92 |
-
default:
|
93 |
-
$a['errors']->add(
|
94 |
-
$attr_name,
|
95 |
-
// Translators: %1$s = Attr Name, %2$s = Attribute array
|
96 |
-
sprintf(
|
97 |
-
// Translators: Attribute Name
|
98 |
-
__( '%1$s <code>%2$s</code> not valid', 'advanced-responsive-video-embedder' ),
|
99 |
-
esc_html( $attr_name ),
|
100 |
-
esc_html( $a[ $attr_name ] )
|
101 |
-
)
|
102 |
-
);
|
103 |
-
break;
|
104 |
-
}//end switch
|
105 |
-
|
106 |
-
return $a;
|
107 |
-
}
|
108 |
-
|
109 |
-
function validate_align( array $a ) {
|
110 |
-
|
111 |
-
switch ( $a['align'] ) {
|
112 |
-
case null:
|
113 |
-
case '':
|
114 |
-
case 'none':
|
115 |
-
$a['align'] = null;
|
116 |
-
break;
|
117 |
-
case 'left':
|
118 |
-
case 'right':
|
119 |
-
case 'center':
|
120 |
-
break;
|
121 |
-
default:
|
122 |
-
$a['errors']->add(
|
123 |
-
'align',
|
124 |
-
// Translators: Alignment
|
125 |
-
sprintf( __( 'Align <code>%s</code> not valid', 'advanced-responsive-video-embedder' ), esc_html( $a['align'] ) )
|
126 |
-
);
|
127 |
-
$a['align'] = null;
|
128 |
-
break;
|
129 |
-
}
|
130 |
-
|
131 |
-
return $a;
|
132 |
-
}
|
7 |
return false;
|
8 |
}
|
9 |
|
10 |
+
if ( str_starts_with( $url, '//' ) ) {
|
11 |
$url = 'https:' . $url;
|
12 |
}
|
13 |
|
18 |
return false;
|
19 |
}
|
20 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
function bool_to_shortcode_string( $val ) {
|
22 |
|
23 |
if ( false === $val ) {
|
26 |
|
27 |
return (string) $val;
|
28 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
readme.txt
CHANGED
@@ -2,19 +2,182 @@
|
|
2 |
Contributors: nico23
|
3 |
Donate link: https://nextgenthemes.com/donate/
|
4 |
Tags: YouTube, Vimeo, lazyload, thumbnail, video, responsive, embeds, video-embedder, iframe, lightweight, simplicity, shortcodes
|
5 |
-
Requires at least: 4.4.
|
6 |
Tested up to: 5.6
|
7 |
Requires PHP: 5.6
|
8 |
-
Stable tag: 9.
|
9 |
License: GPL-3.0
|
10 |
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
11 |
|
12 |
Easy responsive video embeds via URLs or shortcodes. Perfect drop-in replacement for WordPress' default embeds. Best plugin for videos?
|
13 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
## Changelog ##
|
15 |
|
16 |
-
* [ARVE Pro
|
17 |
-
* [ARVE
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
|
19 |
### 2021-01-03 9.1.3 ###
|
20 |
|
@@ -661,14 +824,14 @@ Just a small readme update and checking new release script, making sure everythi
|
|
661 |
|
662 |
### 7.2.10 beta - 2016-09-15 ###
|
663 |
|
664 |
-
* Fix: [iframe] shortcode not working.
|
665 |
|
666 |
### Pro Addon 2.3.1 beta - 2016-09-15 ###
|
667 |
|
668 |
* New: Added support for displaying title of videos on top of the thumbnail images.
|
669 |
* New: Responsive thumbnails using srcset the browser takes the best image resolution for the users device. (HTML5 srcset)
|
670 |
* New: Choose between 3 hover styles for the thumbnails: 'zoom image' (new default), 'rectangle move in' (old), or 'none' where only the play button changes.
|
671 |
-
* New: Choose
|
672 |
* Fix: Screenfull error.
|
673 |
* Fix: License API call.
|
674 |
* Improved: Rectangle animation.
|
@@ -696,7 +859,7 @@ Just a small readme update and checking new release script, making sure everythi
|
|
696 |
* Improved: Added image upload dialog to settings page and shortcode dialog.
|
697 |
* Improved: Better CSS to overwrite unwanted theme styles.
|
698 |
* Improved: Lots if code improvements.
|
699 |
-
* Improved: SSL enabled and forced when supported by
|
700 |
* Fix: Blury Vimeo thumbnails
|
701 |
* Fix: Prevent Dashboard Widget conflicts with WP Helpers plugin (possibly others). Thanks to Steve Bruner.
|
702 |
* Fix: Issue with unwanted borders showing on embeds.
|
@@ -1203,144 +1366,4 @@ Please check the [migration guide](https://nextgenthemes.com/?p=1875) about upgr
|
|
1203 |
|
1204 |
### 2012-02-03 0.1 ###
|
1205 |
|
1206 |
-
* Started by improving the WordPress 'Video Embedder Plugin' but now complete new code `svn log --stop-on-copy --quiet https://plugins.svn.wordpress.org/advanced-responsive-video-embedder/ | tail -2`
|
1207 |
-
|
1208 |
-
## Description ##
|
1209 |
-
|
1210 |
-
The best WordPress plugin for videos? Supports close to everything you can imagine, still keeping it easy & simple.
|
1211 |
-
|
1212 |
-
It is very likely the one and only plugin you will ever need to handle video embeds on your WordPress site(s). It goes far beyond just making your videos responsive!
|
1213 |
-
|
1214 |
-
[youtube https://www.youtube.com/watch?v=m6mkA6Zr1vY ]
|
1215 |
-
|
1216 |
-
* [Documentation](https://nextgenthemes.com/plugins/arve/documentation/)
|
1217 |
-
* [GitHub Page](https://github.com/nextgenthemes/advanced-responsive-video-embedder)
|
1218 |
-
* [Pro Addon](https://nextgenthemes.com/plugins/arve-pro/)
|
1219 |
-
|
1220 |
-
### Features ###
|
1221 |
-
|
1222 |
-
* SEO friendly, lets you specify title, description, upload date to provide search engines with the schema.org data they like to have for better indexing.
|
1223 |
-
* <abbr title="What You See Is What You Get">WYSIWYG</abbr> support. No more messing around with shortcodes and previewing.
|
1224 |
-
* New improved dialog for embedding videos.
|
1225 |
-
* Magically makes videos responsive you already embedded with WordPress default features.
|
1226 |
-
* No 'lock in' if you do not use the ARVE Gutenberg Block or shortcodes.
|
1227 |
-
* Supports [almost every video host](https://nextgenthemes.com/plugins/arve-pro/#support-table) that supports iframe embed codes.
|
1228 |
-
* Embeds via pasting the URL in its own line just like WordPress!
|
1229 |
-
* Optionally use very powerful Shortcodes instead.
|
1230 |
-
* Clean shortcode syntax `[arve url="https://youtu.be/yUCFRL43Zm4" align="left" parameters="start=30" ... /]`, no unnecessary shortcode wrapping.
|
1231 |
-
* One single button for all providers.
|
1232 |
-
* Responsive embeds with CSS, much better then with JavaScript.
|
1233 |
-
* Tries to be as unobtrusive as possible, sets 'hide brand' variables if supported, disables related videos at the end … to help keep people on your site rather then going to YouTube or keep watching videos.
|
1234 |
-
* Limited Autostart (for providers that support it, mobile browsers prevent this)
|
1235 |
-
* Custom URL parameters to use all options providers offer.
|
1236 |
-
* Optional maximal width.
|
1237 |
-
* Video alignment.
|
1238 |
-
* Detailed description of options in-place.
|
1239 |
-
* Automatic detected and custom aspect ratio.
|
1240 |
-
|
1241 |
-
### [Supported Providers](https://nextgenthemes.com/plugins/arve-pro/#support-table) ###
|
1242 |
-
|
1243 |
-
allmyvideos.net, Alugha, Archive.org, Break, Brightcove, CollegeHumor, Comedy Central, Dailymotion, Facebook, Funny or Die, IGN, Kickstarter, LiveLeak, Livestream, kla.tv, Metacafe, Movieweb, MPORA, Myspace, Snotr, Spike, TED Talks, Twitch, Veoh, Vevo, Viddler, vidspot.net, Vine, Vimeo, VK, Vzaar, Wistia, XTube, Yahoo, Youku, YouTube, YouTube Playlist, HTML5 video files directly, Google_drive, Dropbox, Ooyala
|
1244 |
-
[All providers with responsive iframe embed codes](https://nextgenthemes.com/plugins/arve/documentation/#general-iframe-embedding)
|
1245 |
-
|
1246 |
-
### Reviews ###
|
1247 |
-
|
1248 |
-
#### ★ ★ ★ ★ ★ The best there is – I have tried many… ####
|
1249 |
-
Have downloaded and paid for at least 4 other video players that use lightbox. Each one has major flaws. This products works perfectly. If you use the OnSite Editor, then just copy the short code and it works great.
|
1250 |
-
|
1251 |
-
[arve url="https://www.youtube.com/watch?v=Z7g8-GxLTSc" /]
|
1252 |
-
|
1253 |
-
For speed, the product uses the thumbnails from the server. So many of the other products do NOT do this and it slows the page rendering. This product should appear first on the WordPress search. Spent 3 days of my life wasted on other products, only to delete each one. [review by jodani](https://wordpress.org/support/plugin/advanced-responsive-video-embedder/reviews/?filter=5)
|
1254 |
-
|
1255 |
-
#### ★ ★ ★ ★ ★ Finally something that works ####
|
1256 |
-
So I have a responsive theme but on pages with you tube videos it wasn't making the you tube videos fit in the mobile screen. I have spent the last hour trying many plugins and researching on google and finally I installed this. And I didn't have to update any settings or anything just refreshed a post with videos and all the sudden it is beautiful and responsive on my mobile phone!!!!!! THANK YOU!!!! [review by happyecho](https://wordpress.org/support/plugin/advanced-responsive-video-embedder/reviews/?filter=5)
|
1257 |
-
|
1258 |
-
#### ★ ★ ★ ★ ★ Only Plug-in that worked ####
|
1259 |
-
I used a lot of high ranking plug-ins but they still broke my design. Downloaded this and worked right away. Thanks! [review by crconnell89](https://wordpress.org/support/plugin/advanced-responsive-video-embedder/reviews/?filter=5)
|
1260 |
-
|
1261 |
-
This plugin is financed by sales of the [Pro Addon](https://nextgenthemes.com/plugins/arve-pro/). The development and support of this plugins has become a job for me so I hope you understand that I can not make all features gratis and that you [purchase it](https://nextgenthemes.com/plugins/arve-pro/) to get extra features and support the development.
|
1262 |
-
|
1263 |
-
### [Pro Addon](https://nextgenthemes.com/plugins/arve-pro/) ###
|
1264 |
-
|
1265 |
-
* **Disable links in embeds (killer feature!)**<br>
|
1266 |
-
For example: Clicking on a title in a YouTube embed will not open a new popup/tab/window. **Prevent video hosts to lead your visitors away from your site!** Note this also breaks sharing functionality and is not possible when the provider requires flash. Try it on [this page](https://nextgenthemes.com/plugins/arve-pro/). Right click on links still works.
|
1267 |
-
* **Lazyload mode**<br>
|
1268 |
-
Make your site load **faster** by loading only a image instead of the entire video player on pageload.
|
1269 |
-
* **Lazyload -> Lightbox**<br>
|
1270 |
-
Shows the Video in a Lightbox after clicking a preview image
|
1271 |
-
* **Link -> Lightbox**<br>
|
1272 |
-
Use simple links as triggers for lightboxed videos
|
1273 |
-
* Automatic or custom thumbnail images
|
1274 |
-
* Automatic or custom titles on top of your thumbnails
|
1275 |
-
* 'Expand on click' feature
|
1276 |
-
* 3 hover styles
|
1277 |
-
* 3 play icon styles to choose from
|
1278 |
-
* Responsive thumbnails using cutting edge HTML5 technology
|
1279 |
-
* **Feel good about yourself**<br>
|
1280 |
-
for supporting my 8+ years work on this plugin. Tons of hours, weekends … always worked on improving it.
|
1281 |
-
* Show the latest video of a YouTube channel by using the channel URL (updated/cached hourly)
|
1282 |
-
* **[Get the ARVE Pro Addon](https://nextgenthemes.com/plugins/arve-pro/)** 10% off first year with discount code `wporg`
|
1283 |
-
|
1284 |
-
### ARVE AMP Addon ###
|
1285 |
-
|
1286 |
-
* Requires the gratis plugins [ARVE](https://wordpress.org/plugins/advanced-responsive-video-embedder/) and [AMP](https://wordpress.org/plugins/amp/)
|
1287 |
-
* Makes ARVE ready for Accelerated Mobile Pages (AMP)
|
1288 |
-
* It will display videos embedded with ARVE on AMP pages correctly
|
1289 |
-
* No options, just works
|
1290 |
-
* It creates <amp-brightcove>, <amp-youtube>, <amp-vimeo>, <amp-dailymotion> elements
|
1291 |
-
* For all other video hosts supported by ARVE <amp-iframe> element is used
|
1292 |
-
* HTML5 video embeds are also supported with <amp-video>
|
1293 |
-
* **[Check out the ARVE AMP Addon](https://nextgenthemes.com/plugins/arve-amp/)**
|
1294 |
-
|
1295 |
-
### Thanks ###
|
1296 |
-
|
1297 |
-
* Of course all the customers who bought a addon.
|
1298 |
-
* Howard Iken of [myfloridalaw.com](https://www.myfloridalaw.com) top donor, super nice to me even if I was rude and not deserved it!
|
1299 |
-
* [Ilya Grishkov](https://www.ilyagrishkov.com) for bringing up the idea and the first code to cache thumbnail urls.
|
1300 |
-
* Everybody giving constructive feedback, testing beta versions.
|
1301 |
-
* Everybody who donated back in the days when this was donation based.
|
1302 |
-
|
1303 |
-
### Thanks to the developers of the software used in ARVE ###
|
1304 |
-
|
1305 |
-
* [Shortcode UI](https://wordpress.org/plugins/shortcode-ui/), optional Plugin, utilized by ARVE
|
1306 |
-
* [Lity Lightbox](http://sorgalla.com/lity/), used in [Pro Addon](https://nextgenthemes.com/plugins/arve-pro/)
|
1307 |
-
|
1308 |
-
## Installation ##
|
1309 |
-
|
1310 |
-
Please refer to [codex.wordpress.org/Managing_Plugins#Automatic_Plugin_Installation](https://codex.wordpress.org/Managing_Plugins#Automatic_Plugin_Installation).
|
1311 |
-
|
1312 |
-
## Frequently Asked Questions ##
|
1313 |
-
|
1314 |
-
### I have a problem ... ###
|
1315 |
-
|
1316 |
-
Please report it on [nextgenthemes.com/support/](https://nextgenthemes.com/support/) **and please do not on the wordpess.org forums, thanks.**
|
1317 |
-
|
1318 |
-
### How to get the pro version working? ###
|
1319 |
-
|
1320 |
-
1. Go though the purchase process on [nextgenthemes.com/arve-pro/](https://nextgenthemes.com/arve-pro/)
|
1321 |
-
1. Follow the 3 easy steps you get with the purchase receipt. It is basically downloading a arve-pro.zip and installing it through your WordPress Admin panel.
|
1322 |
-
|
1323 |
-
### Why are my videos not filling their container? ###
|
1324 |
-
|
1325 |
-
You are most likely use `align`, this plugin has a option for limiting video width with alignment. If you want your videos to fill their containers then you should not use the `align` shortcode attribute. This assumes that you left the 'Video Maximal Width' field on the options page empty.
|
1326 |
-
|
1327 |
-
### Can you add a video provider? ###
|
1328 |
-
|
1329 |
-
I have no plans on implementing providers that include videos via JavaScript such as www.nicovideo.jp. I also will not implement video services from mainstream media news organizations. For others, feel free to ask.
|
1330 |
-
|
1331 |
-
### How do I embed videos from a unlisted providers / iframes? ###
|
1332 |
-
|
1333 |
-
This plugin not changes anything to usual HTML `<iframe>` embed codes you have to use the shortcode creator dialog and paste iframe embed codes there or write them manually. They will become `[arve url="https://..."]`. The url represents what is the `src` in HTML embeds. It works as simple as this, if the [arve] shortcode does not detect a known URL structure then it will treat the URL as a `src` for the iframe.
|
1334 |
-
|
1335 |
-
### Why does my YouTube video not repeat/loop? ###
|
1336 |
-
|
1337 |
-
This plugins embed is considered as 'custom player' by YouTube so you have to pass the video ID as playlist parameters to make the loop work.
|
1338 |
-
|
1339 |
-
`[arve url="https://www.youtube.com/watch?v=pvRqvX413Ik" parameters="loop=1&playlist=pvRqvX413Ik"]`
|
1340 |
-
|
1341 |
-
## Screenshots ##
|
1342 |
-
|
1343 |
-
1. Shortcode dialog
|
1344 |
-
2. Main Options
|
1345 |
-
2. URL Parameter Options
|
1346 |
-
3. Pro Options
|
2 |
Contributors: nico23
|
3 |
Donate link: https://nextgenthemes.com/donate/
|
4 |
Tags: YouTube, Vimeo, lazyload, thumbnail, video, responsive, embeds, video-embedder, iframe, lightweight, simplicity, shortcodes
|
5 |
+
Requires at least: 4.4.24
|
6 |
Tested up to: 5.6
|
7 |
Requires PHP: 5.6
|
8 |
+
Stable tag: 9.2.0
|
9 |
License: GPL-3.0
|
10 |
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
11 |
|
12 |
Easy responsive video embeds via URLs or shortcodes. Perfect drop-in replacement for WordPress' default embeds. Best plugin for videos?
|
13 |
|
14 |
+
## Description ##
|
15 |
+
|
16 |
+
The best WordPress plugin for videos? Supports close to everything you can imagine, still keeping it easy & simple.
|
17 |
+
|
18 |
+
It is very likely the one and only plugin you will ever need to handle video embeds on your WordPress site(s). It goes far beyond just making your videos responsive!
|
19 |
+
|
20 |
+
[youtube https://www.youtube.com/watch?v=m6mkA6Zr1vY ]
|
21 |
+
|
22 |
+
### Features ###
|
23 |
+
|
24 |
+
#### Classic Editor ####
|
25 |
+
|
26 |
+
* Takes over WordPress embeds with URLs on their own line and `[embed]` shortcodes.
|
27 |
+
* Can take over WP's default video file embeds.
|
28 |
+
* Has its own very powerful `[arve]` shortcode.
|
29 |
+
* Optional <abbr title="What You See Is What You Get">WYSIWYG</abbr> support with [Shortcode UI]() (not maintained). No more messing around with shortcodes and previewing.
|
30 |
+
|
31 |
+
#### Gutenberg ####
|
32 |
+
|
33 |
+
* Works with Embed, YouTube, Vimeo, Shortcode ... blocks.
|
34 |
+
* Provides it's own powerful ARVE Block with all the features the `[arve]` shortcode provides with a nice UI with detailed settings descriptions in.
|
35 |
+
|
36 |
+
#### Both ####
|
37 |
+
|
38 |
+
* Magically makes videos responsive you already embedded with WordPress default features.
|
39 |
+
* SEO friendly, lets you specify title, description, upload date to provide search engines with the schema.org data they like to have for better indexing. Pro can autofill this for you.
|
40 |
+
* No 'lock in' if you do not use the ARVE Gutenberg Block or `[arve]` shortcodes.
|
41 |
+
* Supports [almost every video host](https://nextgenthemes.com/plugins/arve-pro/#support-table) that supports iframe embed codes.
|
42 |
+
* Embeds via pasting the URL in its own line just like WordPress!
|
43 |
+
* Optionally use very powerful Shortcodes instead.
|
44 |
+
* Clean shortcode syntax `[arve url="https://youtu.be/yUCFRL43Zm4" align="left" parameters="start=30" ... /]`, no unnecessary shortcode wrapping.
|
45 |
+
* One shortcode or Block for all video providers.
|
46 |
+
* Responsive embeds with CSS, much better than with JavaScript.
|
47 |
+
* Tries to be as unobtrusive as possible, sets 'hide brand' variables if supported, disables related videos at the end … to help keep people on your site rather then going to YouTube or keep watching videos.
|
48 |
+
* Limited Autoplay (for providers that support it, they may mute it. Mobile browsers prevent autoplay with audio so ARVE will automatically mute HTML5 videos set to autoplay)
|
49 |
+
* Custom URL parameters to use all options providers offer.
|
50 |
+
* Optional maximal width.
|
51 |
+
* Video alignment.
|
52 |
+
* Detailed description of options in-place.
|
53 |
+
* Automatic detected and custom aspect ratio.
|
54 |
+
|
55 |
+
#### Supported Providers ####
|
56 |
+
|
57 |
+
[All providers with iframe embed codes](https://nextgenthemes.com/plugins/arve/documentation/#general-iframe-embedding)
|
58 |
+
Alugha, Archive.org, Bitchute, Break, Brightcove, Comedy Central, Dailymotion, Dailymotion Playlist, DTube, Facebook, Funny or Die, IGN, Kickstarter, LiveLeak, Livestream.com, kla.tv, Metacafe, myspace, Snotr, Spike, TED Talks, Twitch, Ustream, RuTube.ru, Viddler, vidspot.net, Vimeo, VK, vzaar, Wistia, XTube, Yahoo, Youku, YouTube, YouTube Playlist, mp4 or webm video files, ARVE general iframe embed, Google Drive, ooyala, IMDB
|
59 |
+
### Reviews ###
|
60 |
+
|
61 |
+
#### ★ ★ ★ ★ ★ Great plugin, great support ####
|
62 |
+
I’ve been using this plugin (free version and pro add-on) for a few years now. It works very well for my purposes (mainly lazyload and lightbox functionality). Recently I had a support issue with the new version which required some intervention – it was a conflict with my theme. Nico, the developer, went above and beyond to get a fix promptly sorted out for me. Thank you Nico.
|
63 |
+
|
64 |
+
#### ★ ★ ★ ★ ★ The best there is – I have tried many… ####
|
65 |
+
Have downloaded and paid for at least 4 other video players that use lightbox. Each one has major flaws. This products works perfectly. If you use the OnSite Editor, then just copy the short code and it works great.
|
66 |
+
|
67 |
+
[arve url="https://www.youtube.com/watch?v=Z7g8-GxLTSc" /]
|
68 |
+
|
69 |
+
For speed, the product uses the thumbnails from the server. So many of the other products do NOT do this and it slows the page rendering. This product should appear first on the WordPress search. Spent 3 days of my life wasted on other products, only to delete each one. [review by jodani][16]
|
70 |
+
|
71 |
+
#### ★ ★ ★ ★ ★ Finally something that works ####
|
72 |
+
So I have a responsive theme but on pages with you tube videos it wasn't making the you tube videos fit in the mobile screen. I have spent the last hour trying many plugins and researching on google and finally I installed this. And I didn't have to update any settings or anything just refreshed a post with videos and all the sudden it is beautiful and responsive on my mobile phone!!!!!! THANK YOU!!!! [review by happyecho][16]
|
73 |
+
|
74 |
+
#### ★ ★ ★ ★ ★ Only Plug-in that worked ####
|
75 |
+
I used a lot of high ranking plug-ins but they still broke my design. Downloaded this and worked right away. Thanks! [review by crconnell89][16]
|
76 |
+
|
77 |
+
[16]: https://wordpress.org/support/plugin/advanced-responsive-video-embedder/reviews/?filter=5
|
78 |
+
|
79 |
+
### [Pro Addon][20]
|
80 |
+
|
81 |
+
**<big>10% off</big>** first year with discount code `settingspage`.
|
82 |
+
|
83 |
+
This plugin is financed by purchases of the [Pro Addon][20]. The development and support of this plugins has become a job for me, so I hope you understand that I can not make all features gratis and that you [purchase it][20] to get extra features and support the development.
|
84 |
+
|
85 |
+
* **Disable links in embeds (killer feature!)**<br>
|
86 |
+
For example: Clicking on a title in a YouTube embed will not open a new tab. **Prevent video hosts to lead your visitors away from your site!**
|
87 |
+
* **Lazyload**<br>
|
88 |
+
Make your site load **faster** by loading only an image instead of the entire video player on pageload.
|
89 |
+
* **Lightbox**<br>
|
90 |
+
Shows the Video in a Lightbox after clicking a Lazyload preview image
|
91 |
+
* **Link ⇾ Lightbox**<br>
|
92 |
+
Use simple links as triggers for opening Video Lightboxes
|
93 |
+
* Auto pause videos when another video is played
|
94 |
+
* Automatic or custom thumbnail images
|
95 |
+
* Automatic or custom titles on top of your thumbnails
|
96 |
+
* 'Expand on click' feature
|
97 |
+
* 2 hover & 3 play icon styles
|
98 |
+
* Responsive thumbnails (srcset)
|
99 |
+
* **Feel good about yourself**<br>
|
100 |
+
for supporting my 8+ years work on this plugin. Tons of hours, weekends … always worked on improving it
|
101 |
+
* Show the latest video of a YouTube channel by using the channel URL (updated/cached hourly)
|
102 |
+
* **[Get the ARVE Pro][20]**
|
103 |
+
|
104 |
+
[20]: https://nextgenthemes.com/plugins/arve-pro/
|
105 |
+
|
106 |
+
### [Random Video Addon](https://nextgenthemes.com/plugins/arve-random-video/) ###
|
107 |
+
|
108 |
+
Display random video from:
|
109 |
+
|
110 |
+
* YouTube Playlist
|
111 |
+
* Vimeo Showcase
|
112 |
+
* Comma separated list of video URLs
|
113 |
+
|
114 |
+
#### Supported Providers ####
|
115 |
+
|
116 |
+
[All providers with iframe embed codes](https://nextgenthemes.com/plugins/arve/documentation/#general-iframe-embedding)
|
117 |
+
Alugha, Archive.org, Bitchute, Break, Brightcove, Comedy Central, Dailymotion, Dailymotion Playlist, DTube, Facebook, Funny or Die, IGN, Kickstarter, LiveLeak, Livestream.com, kla.tv, Metacafe, myspace, Snotr, Spike, TED Talks, Twitch, Ustream, RuTube.ru, Viddler, vidspot.net, Vimeo, VK, vzaar, Wistia, XTube, Yahoo, Youku, YouTube, YouTube Playlist, mp4 or webm video files, ARVE general iframe embed, Google Drive, ooyala, IMDB
|
118 |
+
### Thanks ###
|
119 |
+
|
120 |
+
* Of course all the customers who bought a addon.
|
121 |
+
* Howard Iken of [myfloridalaw.com](https://www.myfloridalaw.com) top donor, super nice to me even if I was rude and not deserved it!
|
122 |
+
* [Ilya Grishkov](https://www.ilyagrishkov.com) for bringing up the idea and the first code to cache thumbnail urls.
|
123 |
+
* Everybody giving constructive feedback, testing beta versions.
|
124 |
+
* Everybody who donated back in the days when this was donation based.
|
125 |
+
|
126 |
+
### Thanks to the developers of the software used in ARVE ###
|
127 |
+
|
128 |
+
* [BigPicture](https://github.com/henrygd/bigpicture), used in [Pro Addon](https://nextgenthemes.com/plugins/arve-pro/)
|
129 |
+
* [Shortcode UI](https://wordpress.org/plugins/shortcode-ui/), optional plugin (no longer maintained)
|
130 |
+
|
131 |
+
## Frequently Asked Questions ##
|
132 |
+
|
133 |
+
### I have a problem ... ###
|
134 |
+
|
135 |
+
Please report it on [nextgenthemes.com/support/](https://nextgenthemes.com/support/) **and please do not on the wordpess.org forums, thanks.**
|
136 |
+
|
137 |
+
### How to get the pro version working? ###
|
138 |
+
|
139 |
+
1. Go though the purchase process on [nextgenthemes.com/arve-pro/](https://nextgenthemes.com/arve-pro/)
|
140 |
+
1. Follow the 3 easy steps you get with the purchase receipt. It is basically downloading a arve-pro.zip and installing it through your WordPress Admin panel.
|
141 |
+
1. After that you may want to switch your default mode to Lazyload or Lightbox or the ARVE settings page.
|
142 |
+
|
143 |
+
### Why are my videos not filling their container? ###
|
144 |
+
|
145 |
+
You may need to adjust your 'Maximal Width' setting to your liking.
|
146 |
+
|
147 |
+
You are most likely use `align`, this plugin has a option for limiting video width with alignment. If you want your videos to fill their containers then you should not use the `align` shortcode attribute.
|
148 |
+
|
149 |
+
### Can you add a video provider? ###
|
150 |
+
|
151 |
+
Feel free to ask.
|
152 |
+
|
153 |
+
### How do I embed videos from a unlisted providers / iframes? ###
|
154 |
+
|
155 |
+
This plugin not changes anything to usual HTML `<iframe>` embed codes you have to use the shortcodes or the Gutenberg Block. They will become `[arve url="https://..."]`. The url represents what is the `src` in HTML embeds. It works as simple as this, if the [arve] shortcode does not detect a known URL structure then it will treat the URL as a `src` for the iframe.
|
156 |
+
|
157 |
+
### Why does my YouTube video not repeat/loop? ###
|
158 |
+
|
159 |
+
This plugins embed is considered as 'custom player' by YouTube so you have to pass the video ID as playlist parameters to make the loop work.
|
160 |
+
|
161 |
+
`[arve url="https://www.youtube.com/watch?v=pvRqvX413Ik" parameters="loop=1&playlist=pvRqvX413Ik"]`
|
162 |
+
|
163 |
+
## Screenshots ##
|
164 |
+
|
165 |
+
1. Shortcode dialog
|
166 |
+
2. Main Options
|
167 |
+
2. URL Parameter Options
|
168 |
+
3. Pro Options
|
169 |
+
|
170 |
## Changelog ##
|
171 |
|
172 |
+
* [ARVE Pro changelog](https://nextgenthemes.com/plugins/arve-pro/#changelog)
|
173 |
+
* [ARVE Random Videos changelog](https://nextgenthemes.com/plugins/random-video/#changelog)
|
174 |
+
|
175 |
+
### 2021-01-21 9.2.0 ###
|
176 |
+
|
177 |
+
* Fix: Compatibility with Astor Theme.
|
178 |
+
* Improved: Added notes that Shortcode UI is not maintained to the button and readme.
|
179 |
+
* Improved: Classic Tabs, new settings section for upcoming [ARVE sticky Videos](https://nextgenthemes.com/plugins/arve-sticky-videos/).
|
180 |
+
* Improved: Lots of code restructured and improved.
|
181 |
|
182 |
### 2021-01-03 9.1.3 ###
|
183 |
|
824 |
|
825 |
### 7.2.10 beta - 2016-09-15 ###
|
826 |
|
827 |
+
* Fix: `[iframe]` shortcode not working.
|
828 |
|
829 |
### Pro Addon 2.3.1 beta - 2016-09-15 ###
|
830 |
|
831 |
* New: Added support for displaying title of videos on top of the thumbnail images.
|
832 |
* New: Responsive thumbnails using srcset the browser takes the best image resolution for the users device. (HTML5 srcset)
|
833 |
* New: Choose between 3 hover styles for the thumbnails: 'zoom image' (new default), 'rectangle move in' (old), or 'none' where only the play button changes.
|
834 |
+
* New: Choose between 2 play button styles.
|
835 |
* Fix: Screenfull error.
|
836 |
* Fix: License API call.
|
837 |
* Improved: Rectangle animation.
|
859 |
* Improved: Added image upload dialog to settings page and shortcode dialog.
|
860 |
* Improved: Better CSS to overwrite unwanted theme styles.
|
861 |
* Improved: Lots if code improvements.
|
862 |
+
* Improved: SSL enabled and forced when supported by providers.
|
863 |
* Fix: Blury Vimeo thumbnails
|
864 |
* Fix: Prevent Dashboard Widget conflicts with WP Helpers plugin (possibly others). Thanks to Steve Bruner.
|
865 |
* Fix: Issue with unwanted borders showing on embeds.
|
1366 |
|
1367 |
### 2012-02-03 0.1 ###
|
1368 |
|
1369 |
+
* Started by improving the WordPress 'Video Embedder Plugin' but now complete new code `svn log --stop-on-copy --quiet https://plugins.svn.wordpress.org/advanced-responsive-video-embedder/ | tail -2` this plugins was submitted and approved in 2012, seems I have been working on this longer then I thought.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|