mirror of
https://github.com/tenrok/vue-meta.git
synced 2026-06-20 18:00:33 +03:00
11 lines
13 KiB
JavaScript
11 lines
13 KiB
JavaScript
/**
|
|
* vue-meta v2.3.3
|
|
* (c) 2020
|
|
* - Declan de Wet
|
|
* - Sébastien Chopin (@Atinux)
|
|
* - Pim (@pimlie)
|
|
* - All the amazing contributors
|
|
* @license MIT
|
|
*/
|
|
import n from"deepmerge";function t(n){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n})(n)}function e(n){return Array.isArray(n)}function r(n){return void 0===n}function i(n){return"object"===t(n)}function o(n){return"object"===t(n)&&null!==n}function a(n){return"function"==typeof n}var u=(function(){try{return!r(window)}catch(n){return!1}}()?window:global).console||{};function f(n){u&&u.warn&&u.warn(n)}var c=function(n){return f("".concat(n," is not supported in browser builds"))},s={title:void 0,titleChunk:"",titleTemplate:"%s",htmlAttrs:{},bodyAttrs:{},headAttrs:{},base:[],link:[],meta:[],style:[],script:[],noscript:[],__dangerouslyDisableSanitizers:[],__dangerouslyDisableSanitizersByTagID:{}},d="metaInfo",l="data-vue-meta",v="data-vue-meta-server-rendered",m="vmid",h="content",p="template",y=!0,b=10,g="ssr",I=Object.keys(s),A=[I[12],I[13]],N=[I[1],I[2],"changed"].concat(A),T=[I[3],I[4],I[5]],w=["link","style","script"],O=["once","skip","template"],k=["body","pbody"],M=["allowfullscreen","amp","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","truespeed","typemustmatch","visible"],S=null;function j(n,t,e){var r=n.t;t._vueMeta.i||!t._vueMeta.o&&"watcher"!==e||(t._vueMeta.i=null),t._vueMeta.i&&!t._vueMeta.u&&function(n,t){if(!(t=void 0===t?10:t))return void n();clearTimeout(S),S=setTimeout((function(){n()}),t)}((function(){t.$meta().refresh()}),r)}function K(n,t,e){if(!Array.prototype.findIndex){for(var r=0;r<n.length;r++)if(t.call(e,n[r],r,n))return r;return-1}return n.findIndex(t,e)}function _(n){return Array.from?Array.from(n):Array.prototype.slice.call(n)}function D(n,t){if(!Array.prototype.includes){for(var e in n)if(n[e]===t)return!0;return!1}return n.includes(t)}function x(n){return(n=n||this)&&(!0===n._vueMeta||i(n._vueMeta))}function V(n,t){return n._vueMeta.u=!0,function(){return z(n,t)}}function z(n,t){if(n._vueMeta.u=!1,t||void 0===t)return n.$meta().refresh()}function B(n){var t=n.$router;!n._vueMeta.s&&t&&(n._vueMeta.s=!0,t.beforeEach((function(t,e,r){V(n),r()})),t.afterEach((function(){n.$nextTick((function(){var t=z(n).metaInfo;t&&a(t.afterNavigation)&&t.afterNavigation(t)}))})))}var J=1;function W(n,t){var e=["activated","deactivated","beforeMount"];return{beforeCreate:function(){var i=this,o=this.$root,u=this.$options,c=n.config.devtools;if(Object.defineProperty(this,"_hasMetaInfo",{configurable:!0,get:function(){return c&&!o._vueMeta.l&&(f("VueMeta DeprecationWarning: _hasMetaInfo has been deprecated and will be removed in a future version. Please use hasMetaInfo(vm) instead"),o._vueMeta.l=!0),x(this)}}),!r(u[t.v])&&null!==u[t.v]){if(o._vueMeta||(o._vueMeta={m:J},J++,c&&o.$options[t.v]&&this.$nextTick((function(){var n=function(n,t,e){if(Array.prototype.find)return n.find(t,e);for(var r=0;r<n.length;r++)if(t.call(e,n[r],r,n))return n[r]}(o.$children,(function(n){return n.$vnode&&n.$vnode.fnOptions}));n&&n.$vnode.fnOptions[t.v]&&f("VueMeta has detected a possible global mixin which adds a ".concat(t.v," property to all Vue components on the page. This could cause severe performance issues. If possible, use $meta().addApp to add meta information instead"))}))),!this._vueMeta){this._vueMeta=!0;for(var s=this.$parent;s&&s!==o;)r(s._vueMeta)&&(s._vueMeta=!1),s=s.$parent}a(u[t.v])&&(u.computed=u.computed||{},u.computed.$metaInfo=u[t.v],this.$isServer||this.$on("hook:created",(function(){this.$watch("$metaInfo",(function(){j(t,this.$root,"watcher")}))}))),r(o._vueMeta.i)&&(o._vueMeta.i=this.$isServer,o._vueMeta.i||(o._vueMeta.initializedSsr||(o._vueMeta.initializedSsr=!0,this.$on("hook:beforeMount",(function(){this.$el&&1===this.$el.nodeType&&this.$el.hasAttribute("data-server-rendered")&&(this._vueMeta.m=t.h)}))),this.$on("hook:mounted",(function(){var n=this.$root;n._vueMeta.i||(n._vueMeta.o=!0,this.$nextTick((function(){var e=n.$meta().refresh(),r=e.tags,i=e.metaInfo;!1===r&&null===n._vueMeta.i&&this.$nextTick((function(){return j(t,n,"init")})),n._vueMeta.i=!0,delete n._vueMeta.o,!t.p&&i.afterNavigation&&B(n)})))})),t.p&&B(o))),this.$on("hook:destroyed",(function(){var n=this;this.$parent&&x(this)&&(delete this._hasMetaInfo,this.$nextTick((function(){if(t.g&&n.$el&&n.$el.offsetParent)var e=setInterval((function(){n.$el&&null!==n.$el.offsetParent||(clearInterval(e),j(t,n.$root,"destroyed"))}),50);else j(t,n.$root,"destroyed")})))})),this.$isServer||e.forEach((function(n){i.$on("hook:".concat(n),(function(){j(t,this.$root,n)}))}))}}}}function C(n,t){return t&&i(n)?(e(n[t])||(n[t]=[]),n):e(n)?n:[]}var H=[[/&/g,"&"],[/</g,"<"],[/>/g,">"],[/"/g,'"'],[/'/g,"'"]];function L(n,t,r){r=r||[];var i={A:function(n){return r.reduce((function(n,t){return n.replace(t[0],t[1])}),n)}};return A.forEach((function(n,e){if(0===e)C(t,n);else if(1===e)for(var r in t[n])C(t[n],r);i[n]=t[n]})),function n(t,r,i,a){var u=r.j,f=i.A,c=void 0===f?function(n){return n}:f,s={};for(var d in t){var l=t[d];if(D(N,d))s[d]=l;else{var v=A[0];if(i[v]&&D(i[v],d))s[d]=l;else{var m=t[u];if(m&&(v=A[1],i[v]&&i[v][m]&&D(i[v][m],d)))s[d]=l;else if("string"==typeof l?s[d]=c(l):e(l)?s[d]=l.map((function(t){return o(t)?n(t,r,i,!0):c(t)})):o(l)?s[d]=n(l,r,i,!0):s[d]=l,a){var h=c(d);d!==h&&(s[h]=s[d],delete s[d])}}}}return s}(t,n,i)}function P(n,t,e,i){var o=n.component,u=n.N,f=n.T;return!0!==e&&!0!==t[u]&&(r(e)&&t[u]&&(e=t[u],t[u]=!0),e?(r(i)&&(i=t[f]),t[f]=a(e)?e.call(o,i):e.replace(/%s/g,i),!0):(delete t[u],!1))}var R=!1;function $(t,e,r){return r=r||{},void 0===e.title&&delete e.title,T.forEach((function(n){if(e[n])for(var t in e[n])t in e[n]&&void 0===e[n][t]&&(D(M,t)&&!R&&(f("VueMeta: Please note that since v2 the value undefined is not used to indicate boolean attributes anymore, see migration guide for details"),R=!0),delete e[n][t])})),n(t,e,{O:function(n,t){return function(n,t,e){var r=n.component,i=n.j,o=n.N,a=n.T,u=[];return t.length||e.length?(t.forEach((function(n,t){if(n[i]){var f=K(e,(function(t){return t[i]===n[i]})),c=e[f];if(-1!==f){if(a in c&&void 0===c[a]||"innerHTML"in c&&void 0===c.innerHTML)return u.push(n),void e.splice(f,1);if(null!==c[a]&&null!==c.innerHTML){var s=n[o];if(s){if(!c[o])return P({component:r,N:o,T:a},c,s),void(c.template=!0);c[a]||P({component:r,N:o,T:a},c,void 0,n[a])}}else e.splice(f,1)}else u.push(n)}else u.push(n)})),u.concat(e)):u}(r,n,t)}})}function q(n,t){return function n(t,e,o){if(o=o||{},e._inactive)return o;var a=(t=t||{}).v,u=e.$metaInfo,f=e.$options,c=e.$children;if(f[a]){var s=u||f[a];i(s)&&(o=$(o,s,t))}c.length&&c.forEach((function(e){(function(n){return(n=n||this)&&!r(n._vueMeta)})(e)&&(o=n(t,e,o))}));return o}(n||{},t,s)}var E=function(n,t){return(t||document).querySelectorAll(n)};function U(n,t){return n[t]||(n[t]=document.getElementsByTagName(t)[0]),n[t]}function F(n,t,e){var r=t.m,i=t.k,o=t.type,a=t.j;e=e||{};var u=["".concat(o,"[").concat(i,'="').concat(r,'"]'),"".concat(o,"[data-").concat(a,"]")].map((function(n){for(var t in e){var r=e[t],i=r&&!0!==r?'="'.concat(r,'"'):"";n+="[data-".concat(t).concat(i,"]")}return n}));return _(E(u.join(", "),n))}function G(n,t){n.removeAttribute(t)}var Q=[];function X(n,t,e,r){var i=n.j,o=!1;return e.forEach((function(n){n[i]&&n.callback&&(o=!0,function(n,t){1===arguments.length&&(t=n,n=""),Q.push([n,t])}("".concat(t,"[data-").concat(i,'="').concat(n[i],'"]'),n.callback))})),r&&o?Y():o}function Y(){var n;"complete"!==(n||document).readyState?document.onreadystatechange=function(){Z()}:Z()}function Z(n){Q.forEach((function(t){var e=t[0],r=t[1],i="".concat(e,'[onload="this.__vm_l=1"]'),o=[];n||(o=_(E(i))),n&&n.matches(i)&&(o=[n]),o.forEach((function(n){if(!n.__vm_cb){var t=function(){n.__vm_cb=!0,G(n,"onload"),r(n)};n.__vm_l?t():n.__vm_ev||(n.__vm_ev=!0,n.addEventListener("load",t))}}))}))}var nn,tn={};function en(n,t,e,r,i){var o=(t||{}).k,a=i.getAttribute(o);a&&(tn[e]=JSON.parse(decodeURI(a)),G(i,o));var u=tn[e]||{},f=[];for(var c in u)u[c]&&n in u[c]&&(f.push(c),r[c]||delete u[c][n]);for(var s in r){var d=u[s];d&&d[n]===r[s]||(f.push(s),r[s]&&(u[s]=u[s]||{},u[s][n]=r[s]))}for(var l=0,v=f;l<v.length;l++){var m=v[l],h=u[m],p=[];for(var y in h)Array.prototype.push.apply(p,[].concat(h[y]));if(p.length){var b=D(M,m)&&p.some(Boolean)?"":p.filter(Boolean).join(" ");i.setAttribute(m,b)}else G(i,m)}tn[e]=u}function rn(n,t,e,r,i,o){var a=t||{},u=a.k,f=a.j,c=k.slice();c.push(f);var s=[],d={m:n,k:u,type:e,j:f},l={head:F(i,d),pbody:F(o,d,{pbody:!0}),body:F(o,d,{body:!0})};if(r.length>1){var v=[];r=r.filter((function(n){var t=JSON.stringify(n),e=!D(v,t);return v.push(t),e}))}r.forEach((function(t){if(!t.skip){var r=document.createElement(e);t.once||r.setAttribute(u,n),Object.keys(t).forEach((function(n){if(!D(O,n))if("innerHTML"!==n)if("json"!==n)if("cssText"!==n)if("callback"!==n){var e=D(c,n)?"data-".concat(n):n,i=D(M,n);if(!i||t[n]){var o=i?"":t[n];r.setAttribute(e,o)}}else r.onload=function(){return t[n](r)};else r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText));else r.innerHTML=JSON.stringify(t.json);else r.innerHTML=t.innerHTML}));var i,o=l[function(n){var t=n.body,e=n.pbody;return t?"body":e?"pbody":"head"}(t)];o.some((function(n,t){return i=t,r.isEqualNode(n)}))&&(i||0===i)?o.splice(i,1):s.push(r)}}));var m=[];for(var h in l)Array.prototype.push.apply(m,l[h]);return m.forEach((function(n){n.parentNode.removeChild(n)})),s.forEach((function(n){n.hasAttribute("data-body")?o.appendChild(n):n.hasAttribute("data-pbody")?o.insertBefore(n,o.firstChild):i.appendChild(n)})),{oldTags:m,newTags:s}}function on(n,t,r){var i=t=t||{},o=i.M,a=i.h,u={},f=U(u,"html");if(n===a&&f.hasAttribute(o)){G(f,o);var c=!1;return w.forEach((function(n){r[n]&&X(t,n,r[n])&&(c=!0)})),c&&Y(),!1}var s,d={},l={};for(var v in r)if(!D(N,v))if("title"!==v){if(D(T,v)){var m=v.substr(0,4);en(n,t,v,r[v],U(u,m))}else if(e(r[v])){var h=rn(n,t,v,r[v],U(u,"head"),U(u,"body")),p=h.oldTags,y=h.newTags;y.length&&(d[v]=y,l[v]=p)}}else((s=r.title)||""===s)&&(document.title=s);return{S:d,D:l}}function an(n,t,e){return{set:function(r){return function(n,t,e,r){if(n&&n.$el)return on(t,e,r);(nn=nn||{})[t]=r}(n,t,e,r)},remove:function(){return function(n,t,e){if(n&&n.$el){var r={},i=!0,o=!1,a=void 0;try{for(var u,f=T[Symbol.iterator]();!(i=(u=f.next()).done);i=!0){var c=u.value,s=c.substr(0,4);en(t,e,c,{},U(r,s))}}catch(n){o=!0,a=n}finally{try{i||null==f.return||f.return()}finally{if(o)throw a}}return function(n,t){var e=n.k;_(E("[".concat(e,'="').concat(t,'"]'))).map((function(n){return n.remove()}))}(e,t)}nn[t]&&(delete nn[t],fn())}(n,t,e)}}}function un(){return nn}function fn(n){!n&&Object.keys(nn).length||(nn=void 0)}function cn(n,t){if(t=t||{},!n._vueMeta)return f("This vue app/component has no vue-meta configuration"),{};var e=function(n,t,e,r){e=e||[];var i=(n=n||{}).j;return t.title&&(t.titleChunk=t.title),t.titleTemplate&&"%s"!==t.titleTemplate&&P({component:r,T:"title"},t,t.titleTemplate,t.titleChunk||""),t.base&&(t.base=Object.keys(t.base).length?[t.base]:[]),t.meta&&(t.meta=t.meta.filter((function(n,t,e){return!n[i]||t===K(e,(function(t){return t[i]===n[i]}))})),t.meta.forEach((function(t){return P(n,t)}))),L(n,t,e)}(t,q(t,n),H,n),r=on(n._vueMeta.m,t,e);r&&a(e.changed)&&(e.changed(e,r.S,r.D),r={addedTags:r.S,removedTags:r.D});var i=un();if(i){for(var o in i)on(o,t,i[o]),delete i[o];fn(!0)}return{vm:n,metaInfo:e,tags:r}}function sn(n){n=n||{};var t=this.$root;return{getOptions:function(){return function(n){var t={};for(var e in n)t[e]=n[e];return t}(n)},setOptions:function(e){e&&e.p&&(n.p=!!e.p,B(t));if(e&&"debounceWait"in e){var r=parseInt(e.t);isNaN(r)||(n.t=r)}e&&"waitOnDestroyed"in e&&(n.g=!!e.g)},refresh:function(){return cn(t,n)},inject:function(){return c("inject")},pause:function(){return V(t)},resume:function(){return z(t)},addApp:function(e){return an(t,e,n)}}}var dn={version:"2.3.3",install:function(n,t){n.__vuemeta_installed||(n.__vuemeta_installed=!0,t=function(n){return{v:(n=i(n)?n:{}).keyName||d,k:n.attribute||l,M:n.ssrAttribute||v,j:n.tagIDKeyName||m,T:n.contentKeyName||h,N:n.metaTemplateKeyName||p,t:r(n.debounceWait)?b:n.debounceWait,g:r(n.waitOnDestroyed)?y:n.waitOnDestroyed,h:n.ssrAppId||g,p:!!n.refreshOnceOnNavigation}}(t),n.prototype.$meta=function(){return sn.call(this,t)},n.mixin(W(n,t)))},generate:function(n,t){return c("generate")},hasMetaInfo:x};export default dn;
|