diff --git a/404.html b/404.html index 3295dd64..3c64cc7e 100644 --- a/404.html +++ b/404.html @@ -23,11 +23,11 @@ } Joplin Utils - + -

404

That's a Four-Oh-Four.
Take me home
- +

404

There's nothing here.
Take me home
+ diff --git a/assets/404.html.cbaa2127.js b/assets/404.html.cbaa2127.js new file mode 100644 index 00000000..fe9c8293 --- /dev/null +++ b/assets/404.html.cbaa2127.js @@ -0,0 +1 @@ +import{_ as e,o as c,c as t}from"./app.d04c4254.js";const _={};function o(r,n){return c(),t("div")}const a=e(_,[["render",o],["__file","404.html.vue"]]);export{a as default}; diff --git a/assets/app.d04c4254.js b/assets/app.d04c4254.js new file mode 100644 index 00000000..6f7379e4 --- /dev/null +++ b/assets/app.d04c4254.js @@ -0,0 +1,10 @@ +const Ks="modulepreload",Ws=function(e){return"/"+e},Vr={},N=function(t,n,o){return!n||n.length===0?t():Promise.all(n.map(r=>{if(r=Ws(r),r in Vr)return;Vr[r]=!0;const i=r.endsWith(".css"),l=i?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${r}"]${l}`))return;const s=document.createElement("link");if(s.rel=i?"stylesheet":Ks,i||(s.as="script",s.crossOrigin=""),s.href=r,document.head.appendChild(s),i)return new Promise((a,c)=>{s.addEventListener("load",a),s.addEventListener("error",()=>c(new Error(`Unable to preload CSS for ${r}`)))})})).then(()=>t())},Qs={"v-8daa1a0e":()=>N(()=>import("./index.html.00ae33d9.js"),[]).then(({data:e})=>e),"v-16aa27d2":()=>N(()=>import("./dev.html.a2aaf0bf.js"),[]).then(({data:e})=>e),"v-3585ae58":()=>N(()=>import("./doc.html.83edde65.js"),[]).then(({data:e})=>e),"v-7445cd33":()=>N(()=>import("./index.html.a1892fd1.js"),[]).then(({data:e})=>e),"v-4110ef47":()=>N(()=>import("./require.html.d7fbad6f.js"),[]).then(({data:e})=>e),"v-320ef97a":()=>N(()=>import("./index.html.11483f31.js"),[]).then(({data:e})=>e),"v-7e84431f":()=>N(()=>import("./feature.html.4c859ed2.js"),[]).then(({data:e})=>e),"v-b9252508":()=>N(()=>import("./index.html.2e1912f2.js"),[]).then(({data:e})=>e),"v-15f08efa":()=>N(()=>import("./privacy.html.d4b78564.js"),[]).then(({data:e})=>e),"v-46f0e132":()=>N(()=>import("./index.html.1c3a4e47.js"),[]).then(({data:e})=>e),"v-001761b2":()=>N(()=>import("./index.html.7ddc7005.js"),[]).then(({data:e})=>e),"v-2d0ad528":()=>N(()=>import("./index.html.913728f9.js"),[]).then(({data:e})=>e),"v-6a87341d":()=>N(()=>import("./faq.html.9549b74d.js"),[]).then(({data:e})=>e),"v-12db533d":()=>N(()=>import("./feature.html.2c38983b.js"),[]).then(({data:e})=>e),"v-0829310c":()=>N(()=>import("./limitations.html.4f4941ba.js"),[]).then(({data:e})=>e),"v-7f9aa074":()=>N(()=>import("./recommended-extension.html.96a5d331.js"),[]).then(({data:e})=>e),"v-184d7906":()=>N(()=>import("./index.html.829fff11.js"),[]).then(({data:e})=>e),"v-10bb1423":()=>N(()=>import("./roadmap.html.90a49856.js"),[]).then(({data:e})=>e),"v-07d5ffc6":()=>N(()=>import("./dev.html.459a1c9e.js"),[]).then(({data:e})=>e),"v-0f2f86fa":()=>N(()=>import("./doc.html.561d5325.js"),[]).then(({data:e})=>e),"v-53faffe2":()=>N(()=>import("./index.html.fcc634bf.js"),[]).then(({data:e})=>e),"v-47c6d914":()=>N(()=>import("./require.html.37858ad2.js"),[]).then(({data:e})=>e),"v-41568498":()=>N(()=>import("./index.html.20c03b36.js"),[]).then(({data:e})=>e),"v-0b89b960":()=>N(()=>import("./feature.html.dafb5cdc.js"),[]).then(({data:e})=>e),"v-69d64f2d":()=>N(()=>import("./index.html.3dfadd79.js"),[]).then(({data:e})=>e),"v-4b1b7f72":()=>N(()=>import("./privacy.html.09945887.js"),[]).then(({data:e})=>e),"v-ae8752be":()=>N(()=>import("./index.html.d8ac0a8f.js"),[]).then(({data:e})=>e),"v-827a1f50":()=>N(()=>import("./index.html.8446580b.js"),[]).then(({data:e})=>e),"v-59a76b8e":()=>N(()=>import("./faq.html.1cf79fd8.js"),[]).then(({data:e})=>e),"v-7f406a2e":()=>N(()=>import("./feature.html.d1873fd6.js"),[]).then(({data:e})=>e),"v-1dccc42a":()=>N(()=>import("./limitations.html.140da99a.js"),[]).then(({data:e})=>e),"v-eaef6612":()=>N(()=>import("./recommended-extension.html.3b98dc9c.js"),[]).then(({data:e})=>e),"v-7b5f4c5b":()=>N(()=>import("./dev.html.b04b0c7c.js"),[]).then(({data:e})=>e),"v-201e9d12":()=>N(()=>import("./index.html.b5a03a1d.js"),[]).then(({data:e})=>e),"v-7d202b14":()=>N(()=>import("./roadmap.html.e7ca787b.js"),[]).then(({data:e})=>e),"v-3706649a":()=>N(()=>import("./404.html.d2dc3323.js"),[]).then(({data:e})=>e)};function ur(e,t){const n=Object.create(null),o=e.split(",");for(let r=0;r!!n[r.toLowerCase()]:r=>!!n[r]}const Gs="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",Js=ur(Gs);function ll(e){return!!e||e===""}function zn(e){if(ee(e)){const t={};for(let n=0;n{if(n){const o=n.split(Zs);o.length>1&&(t[o[0].trim()]=o[1].trim())}}),t}function Qe(e){let t="";if(_e(e))t=e;else if(ee(e))for(let n=0;n_e(e)?e:e==null?"":ee(e)||Ce(e)&&(e.toString===ul||!ie(e.toString))?JSON.stringify(e,sl,2):String(e),sl=(e,t)=>t&&t.__v_isRef?sl(e,t.value):ln(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[o,r])=>(n[`${o} =>`]=r,n),{})}:al(t)?{[`Set(${t.size})`]:[...t.values()]}:Ce(t)&&!ee(t)&&!dl(t)?String(t):t,we={},rn=[],it=()=>{},ea=()=>!1,ta=/^on[^a-z]/,Dn=e=>ta.test(e),dr=e=>e.startsWith("onUpdate:"),De=Object.assign,fr=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},na=Object.prototype.hasOwnProperty,fe=(e,t)=>na.call(e,t),ee=Array.isArray,ln=e=>vo(e)==="[object Map]",al=e=>vo(e)==="[object Set]",ie=e=>typeof e=="function",_e=e=>typeof e=="string",hr=e=>typeof e=="symbol",Ce=e=>e!==null&&typeof e=="object",cl=e=>Ce(e)&&ie(e.then)&&ie(e.catch),ul=Object.prototype.toString,vo=e=>ul.call(e),oa=e=>vo(e).slice(8,-1),dl=e=>vo(e)==="[object Object]",pr=e=>_e(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,xn=ur(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),_o=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},ra=/-(\w)/g,dt=_o(e=>e.replace(ra,(t,n)=>n?n.toUpperCase():"")),ia=/\B([A-Z])/g,Yt=_o(e=>e.replace(ia,"-$1").toLowerCase()),bo=_o(e=>e.charAt(0).toUpperCase()+e.slice(1)),Ro=_o(e=>e?`on${bo(e)}`:""),On=(e,t)=>!Object.is(e,t),So=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},fl=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Ur;const la=()=>Ur||(Ur=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});let We;class sa{constructor(t=!1){this.active=!0,this.effects=[],this.cleanups=[],!t&&We&&(this.parent=We,this.index=(We.scopes||(We.scopes=[])).push(this)-1)}run(t){if(this.active){const n=We;try{return We=this,t()}finally{We=n}}}on(){We=this}off(){We=this.parent}stop(t){if(this.active){let n,o;for(n=0,o=this.effects.length;n{const t=new Set(e);return t.w=0,t.n=0,t},hl=e=>(e.w&jt)>0,pl=e=>(e.n&jt)>0,da=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let o=0;o{(c==="length"||c>=o)&&s.push(a)});else switch(n!==void 0&&s.push(l.get(n)),t){case"add":ee(e)?pr(n)&&s.push(l.get("length")):(s.push(l.get(Qt)),ln(e)&&s.push(l.get(Wo)));break;case"delete":ee(e)||(s.push(l.get(Qt)),ln(e)&&s.push(l.get(Wo)));break;case"set":ln(e)&&s.push(l.get(Qt));break}if(s.length===1)s[0]&&Qo(s[0]);else{const a=[];for(const c of s)c&&a.push(...c);Qo(mr(a))}}function Qo(e,t){const n=ee(e)?e:[...e];for(const o of n)o.computed&&Kr(o);for(const o of n)o.computed||Kr(o)}function Kr(e,t){(e!==ot||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}const ha=ur("__proto__,__v_isRef,__isVue"),vl=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(hr)),pa=vr(),ma=vr(!1,!0),ga=vr(!0),Wr=va();function va(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const o=ge(this);for(let i=0,l=this.length;i{e[t]=function(...n){mn();const o=ge(this)[t].apply(this,n);return gn(),o}}),e}function vr(e=!1,t=!1){return function(o,r,i){if(r==="__v_isReactive")return!e;if(r==="__v_isReadonly")return e;if(r==="__v_isShallow")return t;if(r==="__v_raw"&&i===(e?t?ja:El:t?wl:yl).get(o))return o;const l=ee(o);if(!e&&l&&fe(Wr,r))return Reflect.get(Wr,r,i);const s=Reflect.get(o,r,i);return(hr(r)?vl.has(r):ha(r))||(e||Je(o,"get",r),t)?s:Ie(s)?l&&pr(r)?s:s.value:Ce(s)?e?yr(s):vn(s):s}}const _a=_l(),ba=_l(!0);function _l(e=!1){return function(n,o,r,i){let l=n[o];if(un(l)&&Ie(l)&&!Ie(r))return!1;if(!e&&(!oo(r)&&!un(r)&&(l=ge(l),r=ge(r)),!ee(n)&&Ie(l)&&!Ie(r)))return l.value=r,!0;const s=ee(n)&&pr(o)?Number(o)e,yo=e=>Reflect.getPrototypeOf(e);function Un(e,t,n=!1,o=!1){e=e.__v_raw;const r=ge(e),i=ge(t);n||(t!==i&&Je(r,"get",t),Je(r,"get",i));const{has:l}=yo(r),s=o?_r:n?Er:An;if(l.call(r,t))return s(e.get(t));if(l.call(r,i))return s(e.get(i));e!==r&&e.get(t)}function qn(e,t=!1){const n=this.__v_raw,o=ge(n),r=ge(e);return t||(e!==r&&Je(o,"has",e),Je(o,"has",r)),e===r?n.has(e):n.has(e)||n.has(r)}function Kn(e,t=!1){return e=e.__v_raw,!t&&Je(ge(e),"iterate",Qt),Reflect.get(e,"size",e)}function Qr(e){e=ge(e);const t=ge(this);return yo(t).has.call(t,e)||(t.add(e),_t(t,"add",e,e)),this}function Gr(e,t){t=ge(t);const n=ge(this),{has:o,get:r}=yo(n);let i=o.call(n,e);i||(e=ge(e),i=o.call(n,e));const l=r.call(n,e);return n.set(e,t),i?On(t,l)&&_t(n,"set",e,t):_t(n,"add",e,t),this}function Jr(e){const t=ge(this),{has:n,get:o}=yo(t);let r=n.call(t,e);r||(e=ge(e),r=n.call(t,e)),o&&o.call(t,e);const i=t.delete(e);return r&&_t(t,"delete",e,void 0),i}function Yr(){const e=ge(this),t=e.size!==0,n=e.clear();return t&&_t(e,"clear",void 0,void 0),n}function Wn(e,t){return function(o,r){const i=this,l=i.__v_raw,s=ge(l),a=t?_r:e?Er:An;return!e&&Je(s,"iterate",Qt),l.forEach((c,u)=>o.call(r,a(c),a(u),i))}}function Qn(e,t,n){return function(...o){const r=this.__v_raw,i=ge(r),l=ln(i),s=e==="entries"||e===Symbol.iterator&&l,a=e==="keys"&&l,c=r[e](...o),u=n?_r:t?Er:An;return!t&&Je(i,"iterate",a?Wo:Qt),{next(){const{value:f,done:h}=c.next();return h?{value:f,done:h}:{value:s?[u(f[0]),u(f[1])]:u(f),done:h}},[Symbol.iterator](){return this}}}}function kt(e){return function(...t){return e==="delete"?!1:this}}function La(){const e={get(i){return Un(this,i)},get size(){return Kn(this)},has:qn,add:Qr,set:Gr,delete:Jr,clear:Yr,forEach:Wn(!1,!1)},t={get(i){return Un(this,i,!1,!0)},get size(){return Kn(this)},has:qn,add:Qr,set:Gr,delete:Jr,clear:Yr,forEach:Wn(!1,!0)},n={get(i){return Un(this,i,!0)},get size(){return Kn(this,!0)},has(i){return qn.call(this,i,!0)},add:kt("add"),set:kt("set"),delete:kt("delete"),clear:kt("clear"),forEach:Wn(!0,!1)},o={get(i){return Un(this,i,!0,!0)},get size(){return Kn(this,!0)},has(i){return qn.call(this,i,!0)},add:kt("add"),set:kt("set"),delete:kt("delete"),clear:kt("clear"),forEach:Wn(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=Qn(i,!1,!1),n[i]=Qn(i,!0,!1),t[i]=Qn(i,!1,!0),o[i]=Qn(i,!0,!0)}),[e,n,t,o]}const[Ca,Ta,Pa,Oa]=La();function br(e,t){const n=t?e?Oa:Pa:e?Ta:Ca;return(o,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?o:Reflect.get(fe(n,r)&&r in o?n:o,r,i)}const Aa={get:br(!1,!1)},Ra={get:br(!1,!0)},Sa={get:br(!0,!1)},yl=new WeakMap,wl=new WeakMap,El=new WeakMap,ja=new WeakMap;function Ia(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function $a(e){return e.__v_skip||!Object.isExtensible(e)?0:Ia(oa(e))}function vn(e){return un(e)?e:wr(e,!1,bl,Aa,yl)}function za(e){return wr(e,!1,xa,Ra,wl)}function yr(e){return wr(e,!0,ka,Sa,El)}function wr(e,t,n,o,r){if(!Ce(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const l=$a(e);if(l===0)return e;const s=new Proxy(e,l===2?o:n);return r.set(e,s),s}function sn(e){return un(e)?sn(e.__v_raw):!!(e&&e.__v_isReactive)}function un(e){return!!(e&&e.__v_isReadonly)}function oo(e){return!!(e&&e.__v_isShallow)}function kl(e){return sn(e)||un(e)}function ge(e){const t=e&&e.__v_raw;return t?ge(t):e}function xl(e){return no(e,"__v_skip",!0),e}const An=e=>Ce(e)?vn(e):e,Er=e=>Ce(e)?yr(e):e;function Ll(e){At&&ot&&(e=ge(e),gl(e.dep||(e.dep=mr())))}function Cl(e,t){e=ge(e),e.dep&&Qo(e.dep)}function Ie(e){return!!(e&&e.__v_isRef===!0)}function be(e){return Pl(e,!1)}function Tl(e){return Pl(e,!0)}function Pl(e,t){return Ie(e)?e:new Da(e,t)}class Da{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:ge(t),this._value=n?t:An(t)}get value(){return Ll(this),this._value}set value(t){const n=this.__v_isShallow||oo(t)||un(t);t=n?t:ge(t),On(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:An(t),Cl(this))}}function A(e){return Ie(e)?e.value:e}const Ma={get:(e,t,n)=>A(Reflect.get(e,t,n)),set:(e,t,n,o)=>{const r=e[t];return Ie(r)&&!Ie(n)?(r.value=n,!0):Reflect.set(e,t,n,o)}};function Ol(e){return sn(e)?e:new Proxy(e,Ma)}function wo(e){const t=ee(e)?new Array(e.length):{};for(const n in e)t[n]=Fa(e,n);return t}class Na{constructor(t,n,o){this._object=t,this._key=n,this._defaultValue=o,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}}function Fa(e,t,n){const o=e[t];return Ie(o)?o:new Na(e,t,n)}var Al;class Ha{constructor(t,n,o,r){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this[Al]=!1,this._dirty=!0,this.effect=new gr(t,()=>{this._dirty||(this._dirty=!0,Cl(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!r,this.__v_isReadonly=o}get value(){const t=ge(this);return Ll(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}Al="__v_isReadonly";function Ba(e,t,n=!1){let o,r;const i=ie(e);return i?(o=e,r=it):(o=e.get,r=e.set),new Ha(o,r,i||!r,n)}function Rt(e,t,n,o){let r;try{r=o?e(...o):e()}catch(i){Mn(i,t,n)}return r}function et(e,t,n,o){if(ie(e)){const i=Rt(e,t,n,o);return i&&cl(i)&&i.catch(l=>{Mn(l,t,n)}),i}const r=[];for(let i=0;i>>1;Sn(Fe[o])ct&&Fe.splice(t,1)}function Ka(e){ee(e)?an.push(...e):(!pt||!pt.includes(e,e.allowRecurse?Ut+1:Ut))&&an.push(e),Sl()}function Zr(e,t=Rn?ct+1:0){for(;tSn(n)-Sn(o)),Ut=0;Ute.id==null?1/0:e.id,Wa=(e,t)=>{const n=Sn(e)-Sn(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function jl(e){Go=!1,Rn=!0,Fe.sort(Wa);const t=it;try{for(ct=0;ctm.trim())),f&&(r=n.map(fl))}let s,a=o[s=Ro(t)]||o[s=Ro(dt(t))];!a&&i&&(a=o[s=Ro(Yt(t))]),a&&et(a,e,6,r);const c=o[s+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[s])return;e.emitted[s]=!0,et(c,e,6,r)}}function Il(e,t,n=!1){const o=t.emitsCache,r=o.get(e);if(r!==void 0)return r;const i=e.emits;let l={},s=!1;if(!ie(e)){const a=c=>{const u=Il(c,t,!0);u&&(s=!0,De(l,u))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!i&&!s?(Ce(e)&&o.set(e,null),null):(ee(i)?i.forEach(a=>l[a]=null):De(l,i),Ce(e)&&o.set(e,l),l)}function xo(e,t){return!e||!Dn(t)?!1:(t=t.slice(2).replace(/Once$/,""),fe(e,t[0].toLowerCase()+t.slice(1))||fe(e,Yt(t))||fe(e,t))}let He=null,$l=null;function io(e){const t=He;return He=e,$l=e&&e.type.__scopeId||null,t}function ze(e,t=He,n){if(!t||e._n)return e;const o=(...r)=>{o._d&&ci(-1);const i=io(t),l=e(...r);return io(i),o._d&&ci(1),l};return o._n=!0,o._c=!0,o._d=!0,o}function jo(e){const{type:t,vnode:n,proxy:o,withProxy:r,props:i,propsOptions:[l],slots:s,attrs:a,emit:c,render:u,renderCache:f,data:h,setupState:m,ctx:b,inheritAttrs:w}=e;let k,g;const _=io(e);try{if(n.shapeFlag&4){const $=r||o;k=nt(u.call($,$,f,i,m,h,b)),g=a}else{const $=t;k=nt($.length>1?$(i,{attrs:a,slots:s,emit:c}):$(i,null)),g=t.props?a:Ga(a)}}catch($){Cn.length=0,Mn($,e,1),k=ne(Ge)}let C=k;if(g&&w!==!1){const $=Object.keys(g),{shapeFlag:q}=C;$.length&&q&7&&(l&&$.some(dr)&&(g=Ja(g,l)),C=$t(C,g))}return n.dirs&&(C=$t(C),C.dirs=C.dirs?C.dirs.concat(n.dirs):n.dirs),n.transition&&(C.transition=n.transition),k=C,io(_),k}const Ga=e=>{let t;for(const n in e)(n==="class"||n==="style"||Dn(n))&&((t||(t={}))[n]=e[n]);return t},Ja=(e,t)=>{const n={};for(const o in e)(!dr(o)||!(o.slice(9)in t))&&(n[o]=e[o]);return n};function Ya(e,t,n){const{props:o,children:r,component:i}=e,{props:l,children:s,patchFlag:a}=t,c=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return o?Xr(o,l,c):!!l;if(a&8){const u=t.dynamicProps;for(let f=0;fe.__isSuspense;function zl(e,t){t&&t.pendingBranch?ee(e)?t.effects.push(...e):t.effects.push(e):Ka(e)}function Gt(e,t){if(Re){let n=Re.provides;const o=Re.parent&&Re.parent.provides;o===n&&(n=Re.provides=Object.create(o)),n[e]=t}}function $e(e,t,n=!1){const o=Re||He;if(o){const r=o.parent==null?o.vnode.appContext&&o.vnode.appContext.provides:o.parent.provides;if(r&&e in r)return r[e];if(arguments.length>1)return n&&ie(t)?t.call(o.proxy):t}}function ec(e,t){return xr(e,null,t)}const ei={};function ut(e,t,n){return xr(e,t,n)}function xr(e,t,{immediate:n,deep:o,flush:r,onTrack:i,onTrigger:l}=we){const s=Re;let a,c=!1,u=!1;if(Ie(e)?(a=()=>e.value,c=oo(e)):sn(e)?(a=()=>e,o=!0):ee(e)?(u=!0,c=e.some(g=>sn(g)||oo(g)),a=()=>e.map(g=>{if(Ie(g))return g.value;if(sn(g))return Wt(g);if(ie(g))return Rt(g,s,2)})):ie(e)?t?a=()=>Rt(e,s,2):a=()=>{if(!(s&&s.isUnmounted))return f&&f(),et(e,s,3,[h])}:a=it,t&&o){const g=a;a=()=>Wt(g())}let f,h=g=>{f=k.onStop=()=>{Rt(g,s,4)}};if(fn)return h=it,t?n&&et(t,s,3,[a(),u?[]:void 0,h]):a(),it;let m=u?[]:ei;const b=()=>{if(!!k.active)if(t){const g=k.run();(o||c||(u?g.some((_,C)=>On(_,m[C])):On(g,m)))&&(f&&f(),et(t,s,3,[g,m===ei?void 0:m,h]),m=g)}else k.run()};b.allowRecurse=!!t;let w;r==="sync"?w=b:r==="post"?w=()=>qe(b,s&&s.suspense):(b.pre=!0,s&&(b.id=s.uid),w=()=>ko(b));const k=new gr(a,w);return t?n?b():m=k.run():r==="post"?qe(k.run.bind(k),s&&s.suspense):k.run(),()=>{k.stop(),s&&s.scope&&fr(s.scope.effects,k)}}function tc(e,t,n){const o=this.proxy,r=_e(e)?e.includes(".")?Dl(o,e):()=>o[e]:e.bind(o,o);let i;ie(t)?i=t:(i=t.handler,n=t);const l=Re;dn(this);const s=xr(r,i.bind(o),n);return l?dn(l):Jt(),s}function Dl(e,t){const n=t.split(".");return()=>{let o=e;for(let r=0;r{Wt(n,t)});else if(dl(e))for(const n in e)Wt(e[n],t);return e}function nc(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Ye(()=>{e.isMounted=!0}),Fn(()=>{e.isUnmounting=!0}),e}const Ze=[Function,Array],oc={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Ze,onEnter:Ze,onAfterEnter:Ze,onEnterCancelled:Ze,onBeforeLeave:Ze,onLeave:Ze,onAfterLeave:Ze,onLeaveCancelled:Ze,onBeforeAppear:Ze,onAppear:Ze,onAfterAppear:Ze,onAppearCancelled:Ze},setup(e,{slots:t}){const n=es(),o=nc();let r;return()=>{const i=t.default&&Fl(t.default(),!0);if(!i||!i.length)return;let l=i[0];if(i.length>1){for(const w of i)if(w.type!==Ge){l=w;break}}const s=ge(e),{mode:a}=s;if(o.isLeaving)return Io(l);const c=ti(l);if(!c)return Io(l);const u=Jo(c,s,o,n);Yo(c,u);const f=n.subTree,h=f&&ti(f);let m=!1;const{getTransitionKey:b}=c.type;if(b){const w=b();r===void 0?r=w:w!==r&&(r=w,m=!0)}if(h&&h.type!==Ge&&(!qt(c,h)||m)){const w=Jo(h,s,o,n);if(Yo(h,w),a==="out-in")return o.isLeaving=!0,w.afterLeave=()=>{o.isLeaving=!1,n.update()},Io(l);a==="in-out"&&c.type!==Ge&&(w.delayLeave=(k,g,_)=>{const C=Nl(o,h);C[String(h.key)]=h,k._leaveCb=()=>{g(),k._leaveCb=void 0,delete u.delayedLeave},u.delayedLeave=_})}return l}}},Ml=oc;function Nl(e,t){const{leavingVNodes:n}=e;let o=n.get(t.type);return o||(o=Object.create(null),n.set(t.type,o)),o}function Jo(e,t,n,o){const{appear:r,mode:i,persisted:l=!1,onBeforeEnter:s,onEnter:a,onAfterEnter:c,onEnterCancelled:u,onBeforeLeave:f,onLeave:h,onAfterLeave:m,onLeaveCancelled:b,onBeforeAppear:w,onAppear:k,onAfterAppear:g,onAppearCancelled:_}=t,C=String(e.key),$=Nl(n,e),q=(v,G)=>{v&&et(v,o,9,G)},X=(v,G)=>{const H=G[1];q(v,G),ee(v)?v.every(Q=>Q.length<=1)&&H():v.length<=1&&H()},O={mode:i,persisted:l,beforeEnter(v){let G=s;if(!n.isMounted)if(r)G=w||s;else return;v._leaveCb&&v._leaveCb(!0);const H=$[C];H&&qt(e,H)&&H.el._leaveCb&&H.el._leaveCb(),q(G,[v])},enter(v){let G=a,H=c,Q=u;if(!n.isMounted)if(r)G=k||a,H=g||c,Q=_||u;else return;let L=!1;const I=v._enterCb=R=>{L||(L=!0,R?q(Q,[v]):q(H,[v]),O.delayedLeave&&O.delayedLeave(),v._enterCb=void 0)};G?X(G,[v,I]):I()},leave(v,G){const H=String(e.key);if(v._enterCb&&v._enterCb(!0),n.isUnmounting)return G();q(f,[v]);let Q=!1;const L=v._leaveCb=I=>{Q||(Q=!0,G(),I?q(b,[v]):q(m,[v]),v._leaveCb=void 0,$[H]===e&&delete $[H])};$[H]=e,h?X(h,[v,L]):L()},clone(v){return Jo(v,t,n,o)}};return O}function Io(e){if(Nn(e))return e=$t(e),e.children=null,e}function ti(e){return Nn(e)?e.children?e.children[0]:void 0:e}function Yo(e,t){e.shapeFlag&6&&e.component?Yo(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Fl(e,t=!1,n){let o=[],r=0;for(let i=0;i1)for(let i=0;i!!e.type.__asyncLoader;function ce(e){ie(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:o,delay:r=200,timeout:i,suspensible:l=!0,onError:s}=e;let a=null,c,u=0;const f=()=>(u++,a=null,h()),h=()=>{let m;return a||(m=a=t().catch(b=>{if(b=b instanceof Error?b:new Error(String(b)),s)return new Promise((w,k)=>{s(b,()=>w(f()),()=>k(b),u+1)});throw b}).then(b=>m!==a&&a?a:(b&&(b.__esModule||b[Symbol.toStringTag]==="Module")&&(b=b.default),c=b,b)))};return he({name:"AsyncComponentWrapper",__asyncLoader:h,get __asyncResolved(){return c},setup(){const m=Re;if(c)return()=>$o(c,m);const b=_=>{a=null,Mn(_,m,13,!o)};if(l&&m.suspense||fn)return h().then(_=>()=>$o(_,m)).catch(_=>(b(_),()=>o?ne(o,{error:_}):null));const w=be(!1),k=be(),g=be(!!r);return r&&setTimeout(()=>{g.value=!1},r),i!=null&&setTimeout(()=>{if(!w.value&&!k.value){const _=new Error(`Async component timed out after ${i}ms.`);b(_),k.value=_}},i),h().then(()=>{w.value=!0,m.parent&&Nn(m.parent.vnode)&&ko(m.parent.update)}).catch(_=>{b(_),k.value=_}),()=>{if(w.value&&c)return $o(c,m);if(k.value&&o)return ne(o,{error:k.value});if(n&&!g.value)return ne(n)}}})}function $o(e,{vnode:{ref:t,props:n,children:o,shapeFlag:r},parent:i}){const l=ne(e,n,o);return l.ref=t,l}const Nn=e=>e.type.__isKeepAlive;function rc(e,t){Hl(e,"a",t)}function ic(e,t){Hl(e,"da",t)}function Hl(e,t,n=Re){const o=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Lo(t,o,n),n){let r=n.parent;for(;r&&r.parent;)Nn(r.parent.vnode)&&lc(o,t,n,r),r=r.parent}}function lc(e,t,n,o){const r=Lo(t,e,o,!0);Co(()=>{fr(o[t],r)},n)}function Lo(e,t,n=Re,o=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...l)=>{if(n.isUnmounted)return;mn(),dn(n);const s=et(t,n,e,l);return Jt(),gn(),s});return o?r.unshift(i):r.push(i),i}}const yt=e=>(t,n=Re)=>(!fn||e==="sp")&&Lo(e,(...o)=>t(...o),n),sc=yt("bm"),Ye=yt("m"),ac=yt("bu"),cc=yt("u"),Fn=yt("bum"),Co=yt("um"),uc=yt("sp"),dc=yt("rtg"),fc=yt("rtc");function hc(e,t=Re){Lo("ec",e,t)}function lo(e,t){const n=He;if(n===null)return e;const o=Po(n)||n.proxy,r=e.dirs||(e.dirs=[]);for(let i=0;it(l,s,void 0,i&&i[s]));else{const l=Object.keys(e);r=new Array(l.length);for(let s=0,a=l.length;suo(t)?!(t.type===Ge||t.type===xe&&!Vl(t.children)):!0)?e:null}const Zo=e=>e?ts(e)?Po(e)||e.proxy:Zo(e.parent):null,so=De(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Zo(e.parent),$root:e=>Zo(e.root),$emit:e=>e.emit,$options:e=>Lr(e),$forceUpdate:e=>e.f||(e.f=()=>ko(e.update)),$nextTick:e=>e.n||(e.n=Eo.bind(e.proxy)),$watch:e=>tc.bind(e)}),gc={get({_:e},t){const{ctx:n,setupState:o,data:r,props:i,accessCache:l,type:s,appContext:a}=e;let c;if(t[0]!=="$"){const m=l[t];if(m!==void 0)switch(m){case 1:return o[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(o!==we&&fe(o,t))return l[t]=1,o[t];if(r!==we&&fe(r,t))return l[t]=2,r[t];if((c=e.propsOptions[0])&&fe(c,t))return l[t]=3,i[t];if(n!==we&&fe(n,t))return l[t]=4,n[t];Xo&&(l[t]=0)}}const u=so[t];let f,h;if(u)return t==="$attrs"&&Je(e,"get",t),u(e);if((f=s.__cssModules)&&(f=f[t]))return f;if(n!==we&&fe(n,t))return l[t]=4,n[t];if(h=a.config.globalProperties,fe(h,t))return h[t]},set({_:e},t,n){const{data:o,setupState:r,ctx:i}=e;return r!==we&&fe(r,t)?(r[t]=n,!0):o!==we&&fe(o,t)?(o[t]=n,!0):fe(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:o,appContext:r,propsOptions:i}},l){let s;return!!n[l]||e!==we&&fe(e,l)||t!==we&&fe(t,l)||(s=i[0])&&fe(s,l)||fe(o,l)||fe(so,l)||fe(r.config.globalProperties,l)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:fe(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};let Xo=!0;function vc(e){const t=Lr(e),n=e.proxy,o=e.ctx;Xo=!1,t.beforeCreate&&oi(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:l,watch:s,provide:a,inject:c,created:u,beforeMount:f,mounted:h,beforeUpdate:m,updated:b,activated:w,deactivated:k,beforeDestroy:g,beforeUnmount:_,destroyed:C,unmounted:$,render:q,renderTracked:X,renderTriggered:O,errorCaptured:v,serverPrefetch:G,expose:H,inheritAttrs:Q,components:L,directives:I,filters:R}=t;if(c&&_c(c,o,null,e.appContext.config.unwrapInjectedRef),l)for(const te in l){const re=l[te];ie(re)&&(o[te]=re.bind(n))}if(r){const te=r.call(n,n);Ce(te)&&(e.data=vn(te))}if(Xo=!0,i)for(const te in i){const re=i[te],je=ie(re)?re.bind(n,n):ie(re.get)?re.get.bind(n,n):it,Me=!ie(re)&&ie(re.set)?re.set.bind(n):it,Be=V({get:je,set:Me});Object.defineProperty(o,te,{enumerable:!0,configurable:!0,get:()=>Be.value,set:Ne=>Be.value=Ne})}if(s)for(const te in s)Ul(s[te],o,n,te);if(a){const te=ie(a)?a.call(n):a;Reflect.ownKeys(te).forEach(re=>{Gt(re,te[re])})}u&&oi(u,e,"c");function B(te,re){ee(re)?re.forEach(je=>te(je.bind(n))):re&&te(re.bind(n))}if(B(sc,f),B(Ye,h),B(ac,m),B(cc,b),B(rc,w),B(ic,k),B(hc,v),B(fc,X),B(dc,O),B(Fn,_),B(Co,$),B(uc,G),ee(H))if(H.length){const te=e.exposed||(e.exposed={});H.forEach(re=>{Object.defineProperty(te,re,{get:()=>n[re],set:je=>n[re]=je})})}else e.exposed||(e.exposed={});q&&e.render===it&&(e.render=q),Q!=null&&(e.inheritAttrs=Q),L&&(e.components=L),I&&(e.directives=I)}function _c(e,t,n=it,o=!1){ee(e)&&(e=er(e));for(const r in e){const i=e[r];let l;Ce(i)?"default"in i?l=$e(i.from||r,i.default,!0):l=$e(i.from||r):l=$e(i),Ie(l)&&o?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>l.value,set:s=>l.value=s}):t[r]=l}}function oi(e,t,n){et(ee(e)?e.map(o=>o.bind(t.proxy)):e.bind(t.proxy),t,n)}function Ul(e,t,n,o){const r=o.includes(".")?Dl(n,o):()=>n[o];if(_e(e)){const i=t[e];ie(i)&&ut(r,i)}else if(ie(e))ut(r,e.bind(n));else if(Ce(e))if(ee(e))e.forEach(i=>Ul(i,t,n,o));else{const i=ie(e.handler)?e.handler.bind(n):t[e.handler];ie(i)&&ut(r,i,e)}}function Lr(e){const t=e.type,{mixins:n,extends:o}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:l}}=e.appContext,s=i.get(t);let a;return s?a=s:!r.length&&!n&&!o?a=t:(a={},r.length&&r.forEach(c=>ao(a,c,l,!0)),ao(a,t,l)),Ce(t)&&i.set(t,a),a}function ao(e,t,n,o=!1){const{mixins:r,extends:i}=t;i&&ao(e,i,n,!0),r&&r.forEach(l=>ao(e,l,n,!0));for(const l in t)if(!(o&&l==="expose")){const s=bc[l]||n&&n[l];e[l]=s?s(e[l],t[l]):t[l]}return e}const bc={data:ri,props:Ht,emits:Ht,methods:Ht,computed:Ht,beforeCreate:Ve,created:Ve,beforeMount:Ve,mounted:Ve,beforeUpdate:Ve,updated:Ve,beforeDestroy:Ve,beforeUnmount:Ve,destroyed:Ve,unmounted:Ve,activated:Ve,deactivated:Ve,errorCaptured:Ve,serverPrefetch:Ve,components:Ht,directives:Ht,watch:wc,provide:ri,inject:yc};function ri(e,t){return t?e?function(){return De(ie(e)?e.call(this,this):e,ie(t)?t.call(this,this):t)}:t:e}function yc(e,t){return Ht(er(e),er(t))}function er(e){if(ee(e)){const t={};for(let n=0;n0)&&!(l&16)){if(l&8){const u=e.vnode.dynamicProps;for(let f=0;f{a=!0;const[h,m]=Kl(f,t,!0);De(l,h),m&&s.push(...m)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!i&&!a)return Ce(e)&&o.set(e,rn),rn;if(ee(i))for(let u=0;u-1,m[1]=w<0||b-1||fe(m,"default"))&&s.push(f)}}}const c=[l,s];return Ce(e)&&o.set(e,c),c}function ii(e){return e[0]!=="$"}function li(e){const t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:e===null?"null":""}function si(e,t){return li(e)===li(t)}function ai(e,t){return ee(t)?t.findIndex(n=>si(n,e)):ie(t)&&si(t,e)?0:-1}const Wl=e=>e[0]==="_"||e==="$stable",Cr=e=>ee(e)?e.map(nt):[nt(e)],xc=(e,t,n)=>{if(t._n)return t;const o=ze((...r)=>Cr(t(...r)),n);return o._c=!1,o},Ql=(e,t,n)=>{const o=e._ctx;for(const r in e){if(Wl(r))continue;const i=e[r];if(ie(i))t[r]=xc(r,i,o);else if(i!=null){const l=Cr(i);t[r]=()=>l}}},Gl=(e,t)=>{const n=Cr(t);e.slots.default=()=>n},Lc=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=ge(t),no(t,"_",n)):Ql(t,e.slots={})}else e.slots={},t&&Gl(e,t);no(e.slots,To,1)},Cc=(e,t,n)=>{const{vnode:o,slots:r}=e;let i=!0,l=we;if(o.shapeFlag&32){const s=t._;s?n&&s===1?i=!1:(De(r,t),!n&&s===1&&delete r._):(i=!t.$stable,Ql(t,r)),l=t}else t&&(Gl(e,t),l={default:1});if(i)for(const s in r)!Wl(s)&&!(s in l)&&delete r[s]};function Jl(){return{app:null,config:{isNativeTag:ea,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let Tc=0;function Pc(e,t){return function(o,r=null){ie(o)||(o=Object.assign({},o)),r!=null&&!Ce(r)&&(r=null);const i=Jl(),l=new Set;let s=!1;const a=i.app={_uid:Tc++,_component:o,_props:r,_container:null,_context:i,_instance:null,version:Wc,get config(){return i.config},set config(c){},use(c,...u){return l.has(c)||(c&&ie(c.install)?(l.add(c),c.install(a,...u)):ie(c)&&(l.add(c),c(a,...u))),a},mixin(c){return i.mixins.includes(c)||i.mixins.push(c),a},component(c,u){return u?(i.components[c]=u,a):i.components[c]},directive(c,u){return u?(i.directives[c]=u,a):i.directives[c]},mount(c,u,f){if(!s){const h=ne(o,r);return h.appContext=i,u&&t?t(h,c):e(h,c,f),s=!0,a._container=c,c.__vue_app__=a,Po(h.component)||h.component.proxy}},unmount(){s&&(e(null,a._container),delete a._container.__vue_app__)},provide(c,u){return i.provides[c]=u,a}};return a}}function co(e,t,n,o,r=!1){if(ee(e)){e.forEach((h,m)=>co(h,t&&(ee(t)?t[m]:t),n,o,r));return}if(cn(o)&&!r)return;const i=o.shapeFlag&4?Po(o.component)||o.component.proxy:o.el,l=r?null:i,{i:s,r:a}=e,c=t&&t.r,u=s.refs===we?s.refs={}:s.refs,f=s.setupState;if(c!=null&&c!==a&&(_e(c)?(u[c]=null,fe(f,c)&&(f[c]=null)):Ie(c)&&(c.value=null)),ie(a))Rt(a,s,12,[l,u]);else{const h=_e(a),m=Ie(a);if(h||m){const b=()=>{if(e.f){const w=h?u[a]:a.value;r?ee(w)&&fr(w,i):ee(w)?w.includes(i)||w.push(i):h?(u[a]=[i],fe(f,a)&&(f[a]=u[a])):(a.value=[i],e.k&&(u[e.k]=a.value))}else h?(u[a]=l,fe(f,a)&&(f[a]=l)):m&&(a.value=l,e.k&&(u[e.k]=l))};l?(b.id=-1,qe(b,n)):b()}}}let xt=!1;const Gn=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",Jn=e=>e.nodeType===8;function Oc(e){const{mt:t,p:n,o:{patchProp:o,createText:r,nextSibling:i,parentNode:l,remove:s,insert:a,createComment:c}}=e,u=(g,_)=>{if(!_.hasChildNodes()){n(null,g,_),ro(),_._vnode=g;return}xt=!1,f(_.firstChild,g,null,null,null),ro(),_._vnode=g,xt&&console.error("Hydration completed but contains mismatches.")},f=(g,_,C,$,q,X=!1)=>{const O=Jn(g)&&g.data==="[",v=()=>w(g,_,C,$,q,O),{type:G,ref:H,shapeFlag:Q,patchFlag:L}=_;let I=g.nodeType;_.el=g,L===-2&&(X=!1,_.dynamicChildren=null);let R=null;switch(G){case jn:I!==3?_.children===""?(a(_.el=r(""),l(g),g),R=g):R=v():(g.data!==_.children&&(xt=!0,g.data=_.children),R=i(g));break;case Ge:I!==8||O?R=v():R=i(g);break;case Ln:if(O&&(g=i(g),I=g.nodeType),I===1||I===3){R=g;const se=!_.children.length;for(let B=0;B<_.staticCount;B++)se&&(_.children+=R.nodeType===1?R.outerHTML:R.data),B===_.staticCount-1&&(_.anchor=R),R=i(R);return O?i(R):R}else v();break;case xe:O?R=b(g,_,C,$,q,X):R=v();break;default:if(Q&1)I!==1||_.type.toLowerCase()!==g.tagName.toLowerCase()?R=v():R=h(g,_,C,$,q,X);else if(Q&6){_.slotScopeIds=q;const se=l(g);if(t(_,se,null,C,$,Gn(se),X),R=O?k(g):i(g),R&&Jn(R)&&R.data==="teleport end"&&(R=i(R)),cn(_)){let B;O?(B=ne(xe),B.anchor=R?R.previousSibling:se.lastChild):B=g.nodeType===3?zt(""):ne("div"),B.el=g,_.component.subTree=B}}else Q&64?I!==8?R=v():R=_.type.hydrate(g,_,C,$,q,X,e,m):Q&128&&(R=_.type.hydrate(g,_,C,$,Gn(l(g)),q,X,e,f))}return H!=null&&co(H,null,$,_),R},h=(g,_,C,$,q,X)=>{X=X||!!_.dynamicChildren;const{type:O,props:v,patchFlag:G,shapeFlag:H,dirs:Q}=_,L=O==="input"&&Q||O==="option";if(L||G!==-1){if(Q&&at(_,null,C,"created"),v)if(L||!X||G&48)for(const R in v)(L&&R.endsWith("value")||Dn(R)&&!xn(R))&&o(g,R,null,v[R],!1,void 0,C);else v.onClick&&o(g,"onClick",null,v.onClick,!1,void 0,C);let I;if((I=v&&v.onVnodeBeforeMount)&&Xe(I,C,_),Q&&at(_,null,C,"beforeMount"),((I=v&&v.onVnodeMounted)||Q)&&zl(()=>{I&&Xe(I,C,_),Q&&at(_,null,C,"mounted")},$),H&16&&!(v&&(v.innerHTML||v.textContent))){let R=m(g.firstChild,_,g,C,$,q,X);for(;R;){xt=!0;const se=R;R=R.nextSibling,s(se)}}else H&8&&g.textContent!==_.children&&(xt=!0,g.textContent=_.children)}return g.nextSibling},m=(g,_,C,$,q,X,O)=>{O=O||!!_.dynamicChildren;const v=_.children,G=v.length;for(let H=0;H{const{slotScopeIds:O}=_;O&&(q=q?q.concat(O):O);const v=l(g),G=m(i(g),_,v,C,$,q,X);return G&&Jn(G)&&G.data==="]"?i(_.anchor=G):(xt=!0,a(_.anchor=c("]"),v,G),G)},w=(g,_,C,$,q,X)=>{if(xt=!0,_.el=null,X){const G=k(g);for(;;){const H=i(g);if(H&&H!==G)s(H);else break}}const O=i(g),v=l(g);return s(g),n(null,_,v,O,C,$,Gn(v),q),O},k=g=>{let _=0;for(;g;)if(g=i(g),g&&Jn(g)&&(g.data==="["&&_++,g.data==="]")){if(_===0)return i(g);_--}return g};return[u,f]}const qe=zl;function Ac(e){return Rc(e,Oc)}function Rc(e,t){const n=la();n.__VUE__=!0;const{insert:o,remove:r,patchProp:i,createElement:l,createText:s,createComment:a,setText:c,setElementText:u,parentNode:f,nextSibling:h,setScopeId:m=it,insertStaticContent:b}=e,w=(d,p,y,E=null,T=null,S=null,M=!1,j=null,z=!!p.dynamicChildren)=>{if(d===p)return;d&&!qt(d,p)&&(E=D(d),Ne(d,T,S,!0),d=null),p.patchFlag===-2&&(z=!1,p.dynamicChildren=null);const{type:P,ref:J,shapeFlag:K}=p;switch(P){case jn:k(d,p,y,E);break;case Ge:g(d,p,y,E);break;case Ln:d==null&&_(p,y,E,M);break;case xe:L(d,p,y,E,T,S,M,j,z);break;default:K&1?q(d,p,y,E,T,S,M,j,z):K&6?I(d,p,y,E,T,S,M,j,z):(K&64||K&128)&&P.process(d,p,y,E,T,S,M,j,z,ue)}J!=null&&T&&co(J,d&&d.ref,S,p||d,!p)},k=(d,p,y,E)=>{if(d==null)o(p.el=s(p.children),y,E);else{const T=p.el=d.el;p.children!==d.children&&c(T,p.children)}},g=(d,p,y,E)=>{d==null?o(p.el=a(p.children||""),y,E):p.el=d.el},_=(d,p,y,E)=>{[d.el,d.anchor]=b(d.children,p,y,E,d.el,d.anchor)},C=({el:d,anchor:p},y,E)=>{let T;for(;d&&d!==p;)T=h(d),o(d,y,E),d=T;o(p,y,E)},$=({el:d,anchor:p})=>{let y;for(;d&&d!==p;)y=h(d),r(d),d=y;r(p)},q=(d,p,y,E,T,S,M,j,z)=>{M=M||p.type==="svg",d==null?X(p,y,E,T,S,M,j,z):G(d,p,T,S,M,j,z)},X=(d,p,y,E,T,S,M,j)=>{let z,P;const{type:J,props:K,shapeFlag:Y,transition:oe,dirs:ae}=d;if(z=d.el=l(d.type,S,K&&K.is,K),Y&8?u(z,d.children):Y&16&&v(d.children,z,null,E,T,S&&J!=="foreignObject",M,j),ae&&at(d,null,E,"created"),K){for(const ye in K)ye!=="value"&&!xn(ye)&&i(z,ye,null,K[ye],S,d.children,E,T,U);"value"in K&&i(z,"value",null,K.value),(P=K.onVnodeBeforeMount)&&Xe(P,E,d)}O(z,d,d.scopeId,M,E),ae&&at(d,null,E,"beforeMount");const Ee=(!T||T&&!T.pendingBranch)&&oe&&!oe.persisted;Ee&&oe.beforeEnter(z),o(z,p,y),((P=K&&K.onVnodeMounted)||Ee||ae)&&qe(()=>{P&&Xe(P,E,d),Ee&&oe.enter(z),ae&&at(d,null,E,"mounted")},T)},O=(d,p,y,E,T)=>{if(y&&m(d,y),E)for(let S=0;S{for(let P=z;P{const j=p.el=d.el;let{patchFlag:z,dynamicChildren:P,dirs:J}=p;z|=d.patchFlag&16;const K=d.props||we,Y=p.props||we;let oe;y&&Mt(y,!1),(oe=Y.onVnodeBeforeUpdate)&&Xe(oe,y,p,d),J&&at(p,d,y,"beforeUpdate"),y&&Mt(y,!0);const ae=T&&p.type!=="foreignObject";if(P?H(d.dynamicChildren,P,j,y,E,ae,S):M||re(d,p,j,null,y,E,ae,S,!1),z>0){if(z&16)Q(j,p,K,Y,y,E,T);else if(z&2&&K.class!==Y.class&&i(j,"class",null,Y.class,T),z&4&&i(j,"style",K.style,Y.style,T),z&8){const Ee=p.dynamicProps;for(let ye=0;ye{oe&&Xe(oe,y,p,d),J&&at(p,d,y,"updated")},E)},H=(d,p,y,E,T,S,M)=>{for(let j=0;j{if(y!==E){if(y!==we)for(const j in y)!xn(j)&&!(j in E)&&i(d,j,y[j],null,M,p.children,T,S,U);for(const j in E){if(xn(j))continue;const z=E[j],P=y[j];z!==P&&j!=="value"&&i(d,j,P,z,M,p.children,T,S,U)}"value"in E&&i(d,"value",y.value,E.value)}},L=(d,p,y,E,T,S,M,j,z)=>{const P=p.el=d?d.el:s(""),J=p.anchor=d?d.anchor:s("");let{patchFlag:K,dynamicChildren:Y,slotScopeIds:oe}=p;oe&&(j=j?j.concat(oe):oe),d==null?(o(P,y,E),o(J,y,E),v(p.children,y,J,T,S,M,j,z)):K>0&&K&64&&Y&&d.dynamicChildren?(H(d.dynamicChildren,Y,y,T,S,M,j),(p.key!=null||T&&p===T.subTree)&&Yl(d,p,!0)):re(d,p,y,J,T,S,M,j,z)},I=(d,p,y,E,T,S,M,j,z)=>{p.slotScopeIds=j,d==null?p.shapeFlag&512?T.ctx.activate(p,y,E,M,z):R(p,y,E,T,S,M,z):se(d,p,z)},R=(d,p,y,E,T,S,M)=>{const j=d.component=Fc(d,E,T);if(Nn(d)&&(j.ctx.renderer=ue),Hc(j),j.asyncDep){if(T&&T.registerDep(j,B),!d.el){const z=j.subTree=ne(Ge);g(null,z,p,y)}return}B(j,d,p,y,T,S,M)},se=(d,p,y)=>{const E=p.component=d.component;if(Ya(d,p,y))if(E.asyncDep&&!E.asyncResolved){te(E,p,y);return}else E.next=p,qa(E.update),E.update();else p.el=d.el,E.vnode=p},B=(d,p,y,E,T,S,M)=>{const j=()=>{if(d.isMounted){let{next:J,bu:K,u:Y,parent:oe,vnode:ae}=d,Ee=J,ye;Mt(d,!1),J?(J.el=ae.el,te(d,J,M)):J=ae,K&&So(K),(ye=J.props&&J.props.onVnodeBeforeUpdate)&&Xe(ye,oe,J,ae),Mt(d,!0);const Oe=jo(d),tt=d.subTree;d.subTree=Oe,w(tt,Oe,f(tt.el),D(tt),d,T,S),J.el=Oe.el,Ee===null&&Za(d,Oe.el),Y&&qe(Y,T),(ye=J.props&&J.props.onVnodeUpdated)&&qe(()=>Xe(ye,oe,J,ae),T)}else{let J;const{el:K,props:Y}=p,{bm:oe,m:ae,parent:Ee}=d,ye=cn(p);if(Mt(d,!1),oe&&So(oe),!ye&&(J=Y&&Y.onVnodeBeforeMount)&&Xe(J,Ee,p),Mt(d,!0),K&&le){const Oe=()=>{d.subTree=jo(d),le(K,d.subTree,d,T,null)};ye?p.type.__asyncLoader().then(()=>!d.isUnmounted&&Oe()):Oe()}else{const Oe=d.subTree=jo(d);w(null,Oe,y,E,d,T,S),p.el=Oe.el}if(ae&&qe(ae,T),!ye&&(J=Y&&Y.onVnodeMounted)){const Oe=p;qe(()=>Xe(J,Ee,Oe),T)}(p.shapeFlag&256||Ee&&cn(Ee.vnode)&&Ee.vnode.shapeFlag&256)&&d.a&&qe(d.a,T),d.isMounted=!0,p=y=E=null}},z=d.effect=new gr(j,()=>ko(P),d.scope),P=d.update=()=>z.run();P.id=d.uid,Mt(d,!0),P()},te=(d,p,y)=>{p.component=d;const E=d.vnode.props;d.vnode=p,d.next=null,kc(d,p.props,E,y),Cc(d,p.children,y),mn(),Zr(),gn()},re=(d,p,y,E,T,S,M,j,z=!1)=>{const P=d&&d.children,J=d?d.shapeFlag:0,K=p.children,{patchFlag:Y,shapeFlag:oe}=p;if(Y>0){if(Y&128){Me(P,K,y,E,T,S,M,j,z);return}else if(Y&256){je(P,K,y,E,T,S,M,j,z);return}}oe&8?(J&16&&U(P,T,S),K!==P&&u(y,K)):J&16?oe&16?Me(P,K,y,E,T,S,M,j,z):U(P,T,S,!0):(J&8&&u(y,""),oe&16&&v(K,y,E,T,S,M,j,z))},je=(d,p,y,E,T,S,M,j,z)=>{d=d||rn,p=p||rn;const P=d.length,J=p.length,K=Math.min(P,J);let Y;for(Y=0;YJ?U(d,T,S,!0,!1,K):v(p,y,E,T,S,M,j,z,K)},Me=(d,p,y,E,T,S,M,j,z)=>{let P=0;const J=p.length;let K=d.length-1,Y=J-1;for(;P<=K&&P<=Y;){const oe=d[P],ae=p[P]=z?Tt(p[P]):nt(p[P]);if(qt(oe,ae))w(oe,ae,y,null,T,S,M,j,z);else break;P++}for(;P<=K&&P<=Y;){const oe=d[K],ae=p[Y]=z?Tt(p[Y]):nt(p[Y]);if(qt(oe,ae))w(oe,ae,y,null,T,S,M,j,z);else break;K--,Y--}if(P>K){if(P<=Y){const oe=Y+1,ae=oeY)for(;P<=K;)Ne(d[P],T,S,!0),P++;else{const oe=P,ae=P,Ee=new Map;for(P=ae;P<=Y;P++){const Ke=p[P]=z?Tt(p[P]):nt(p[P]);Ke.key!=null&&Ee.set(Ke.key,P)}let ye,Oe=0;const tt=Y-ae+1;let en=!1,Fr=0;const _n=new Array(tt);for(P=0;P=tt){Ne(Ke,T,S,!0);continue}let st;if(Ke.key!=null)st=Ee.get(Ke.key);else for(ye=ae;ye<=Y;ye++)if(_n[ye-ae]===0&&qt(Ke,p[ye])){st=ye;break}st===void 0?Ne(Ke,T,S,!0):(_n[st-ae]=P+1,st>=Fr?Fr=st:en=!0,w(Ke,p[st],y,null,T,S,M,j,z),Oe++)}const Hr=en?Sc(_n):rn;for(ye=Hr.length-1,P=tt-1;P>=0;P--){const Ke=ae+P,st=p[Ke],Br=Ke+1{const{el:S,type:M,transition:j,children:z,shapeFlag:P}=d;if(P&6){Be(d.component.subTree,p,y,E);return}if(P&128){d.suspense.move(p,y,E);return}if(P&64){M.move(d,p,y,ue);return}if(M===xe){o(S,p,y);for(let K=0;Kj.enter(S),T);else{const{leave:K,delayLeave:Y,afterLeave:oe}=j,ae=()=>o(S,p,y),Ee=()=>{K(S,()=>{ae(),oe&&oe()})};Y?Y(S,ae,Ee):Ee()}else o(S,p,y)},Ne=(d,p,y,E=!1,T=!1)=>{const{type:S,props:M,ref:j,children:z,dynamicChildren:P,shapeFlag:J,patchFlag:K,dirs:Y}=d;if(j!=null&&co(j,null,y,d,!0),J&256){p.ctx.deactivate(d);return}const oe=J&1&&Y,ae=!cn(d);let Ee;if(ae&&(Ee=M&&M.onVnodeBeforeUnmount)&&Xe(Ee,p,d),J&6)x(d.component,y,E);else{if(J&128){d.suspense.unmount(y,E);return}oe&&at(d,null,p,"beforeUnmount"),J&64?d.type.remove(d,p,y,T,ue,E):P&&(S!==xe||K>0&&K&64)?U(P,p,y,!1,!0):(S===xe&&K&384||!T&&J&16)&&U(z,p,y),E&&Et(d)}(ae&&(Ee=M&&M.onVnodeUnmounted)||oe)&&qe(()=>{Ee&&Xe(Ee,p,d),oe&&at(d,null,p,"unmounted")},y)},Et=d=>{const{type:p,el:y,anchor:E,transition:T}=d;if(p===xe){Xt(y,E);return}if(p===Ln){$(d);return}const S=()=>{r(y),T&&!T.persisted&&T.afterLeave&&T.afterLeave()};if(d.shapeFlag&1&&T&&!T.persisted){const{leave:M,delayLeave:j}=T,z=()=>M(y,S);j?j(d.el,S,z):z()}else S()},Xt=(d,p)=>{let y;for(;d!==p;)y=h(d),r(d),d=y;r(p)},x=(d,p,y)=>{const{bum:E,scope:T,update:S,subTree:M,um:j}=d;E&&So(E),T.stop(),S&&(S.active=!1,Ne(M,d,p,y)),j&&qe(j,p),qe(()=>{d.isUnmounted=!0},p),p&&p.pendingBranch&&!p.isUnmounted&&d.asyncDep&&!d.asyncResolved&&d.suspenseId===p.pendingId&&(p.deps--,p.deps===0&&p.resolve())},U=(d,p,y,E=!1,T=!1,S=0)=>{for(let M=S;Md.shapeFlag&6?D(d.component.subTree):d.shapeFlag&128?d.suspense.next():h(d.anchor||d.el),W=(d,p,y)=>{d==null?p._vnode&&Ne(p._vnode,null,null,!0):w(p._vnode||null,d,p,null,null,null,y),Zr(),ro(),p._vnode=d},ue={p:w,um:Ne,m:Be,r:Et,mt:R,mc:v,pc:re,pbc:H,n:D,o:e};let Le,le;return t&&([Le,le]=t(ue)),{render:W,hydrate:Le,createApp:Pc(W,Le)}}function Mt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Yl(e,t,n=!1){const o=e.children,r=t.children;if(ee(o)&&ee(r))for(let i=0;i>1,e[n[s]]0&&(t[o]=n[i-1]),n[i]=o)}}for(i=n.length,l=n[i-1];i-- >0;)n[i]=l,l=t[l];return n}const jc=e=>e.__isTeleport,xe=Symbol(void 0),jn=Symbol(void 0),Ge=Symbol(void 0),Ln=Symbol(void 0),Cn=[];let rt=null;function F(e=!1){Cn.push(rt=e?null:[])}function Ic(){Cn.pop(),rt=Cn[Cn.length-1]||null}let In=1;function ci(e){In+=e}function Zl(e){return e.dynamicChildren=In>0?rt||rn:null,Ic(),In>0&&rt&&rt.push(e),e}function Z(e,t,n,o,r,i){return Zl(me(e,t,n,o,r,i,!0))}function Ae(e,t,n,o,r){return Zl(ne(e,t,n,o,r,!0))}function uo(e){return e?e.__v_isVNode===!0:!1}function qt(e,t){return e.type===t.type&&e.key===t.key}const To="__vInternal",Xl=({key:e})=>e!=null?e:null,Xn=({ref:e,ref_key:t,ref_for:n})=>e!=null?_e(e)||Ie(e)||ie(e)?{i:He,r:e,k:t,f:!!n}:e:null;function me(e,t=null,n=null,o=0,r=null,i=e===xe?0:1,l=!1,s=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Xl(t),ref:t&&Xn(t),scopeId:$l,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:o,dynamicProps:r,dynamicChildren:null,appContext:null};return s?(Tr(a,n),i&128&&e.normalize(a)):n&&(a.shapeFlag|=_e(n)?8:16),In>0&&!l&&rt&&(a.patchFlag>0||i&6)&&a.patchFlag!==32&&rt.push(a),a}const ne=$c;function $c(e,t=null,n=null,o=0,r=null,i=!1){if((!e||e===pc)&&(e=Ge),uo(e)){const s=$t(e,t,!0);return n&&Tr(s,n),In>0&&!i&&rt&&(s.shapeFlag&6?rt[rt.indexOf(e)]=s:rt.push(s)),s.patchFlag|=-2,s}if(Kc(e)&&(e=e.__vccOpts),t){t=zc(t);let{class:s,style:a}=t;s&&!_e(s)&&(t.class=Qe(s)),Ce(a)&&(kl(a)&&!ee(a)&&(a=De({},a)),t.style=zn(a))}const l=_e(e)?1:Xa(e)?128:jc(e)?64:Ce(e)?4:ie(e)?2:0;return me(e,t,n,o,r,l,i,!0)}function zc(e){return e?kl(e)||To in e?De({},e):e:null}function $t(e,t,n=!1){const{props:o,ref:r,patchFlag:i,children:l}=e,s=t?nr(o||{},t):o;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:s,key:s&&Xl(s),ref:t&&t.ref?n&&r?ee(r)?r.concat(Xn(t)):[r,Xn(t)]:Xn(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==xe?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&$t(e.ssContent),ssFallback:e.ssFallback&&$t(e.ssFallback),el:e.el,anchor:e.anchor}}function zt(e=" ",t=0){return ne(jn,null,e,t)}function Dc(e,t){const n=ne(Ln,null,e);return n.staticCount=t,n}function Pe(e="",t=!1){return t?(F(),Ae(Ge,null,e)):ne(Ge,null,e)}function nt(e){return e==null||typeof e=="boolean"?ne(Ge):ee(e)?ne(xe,null,e.slice()):typeof e=="object"?Tt(e):ne(jn,null,String(e))}function Tt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:$t(e)}function Tr(e,t){let n=0;const{shapeFlag:o}=e;if(t==null)t=null;else if(ee(t))n=16;else if(typeof t=="object")if(o&65){const r=t.default;r&&(r._c&&(r._d=!1),Tr(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!(To in t)?t._ctx=He:r===3&&He&&(He.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else ie(t)?(t={default:t,_ctx:He},n=32):(t=String(t),o&64?(n=16,t=[zt(t)]):n=8);e.children=t,e.shapeFlag|=n}function nr(...e){const t={};for(let n=0;nRe||He,dn=e=>{Re=e,e.scope.on()},Jt=()=>{Re&&Re.scope.off(),Re=null};function ts(e){return e.vnode.shapeFlag&4}let fn=!1;function Hc(e,t=!1){fn=t;const{props:n,children:o}=e.vnode,r=ts(e);Ec(e,n,r,t),Lc(e,o);const i=r?Bc(e,t):void 0;return fn=!1,i}function Bc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=xl(new Proxy(e.ctx,gc));const{setup:o}=n;if(o){const r=e.setupContext=o.length>1?Uc(e):null;dn(e),mn();const i=Rt(o,e,0,[e.props,r]);if(gn(),Jt(),cl(i)){if(i.then(Jt,Jt),t)return i.then(l=>{ui(e,l,t)}).catch(l=>{Mn(l,e,0)});e.asyncDep=i}else ui(e,i,t)}else ns(e,t)}function ui(e,t,n){ie(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Ce(t)&&(e.setupState=Ol(t)),ns(e,n)}let di;function ns(e,t,n){const o=e.type;if(!e.render){if(!t&&di&&!o.render){const r=o.template||Lr(e).template;if(r){const{isCustomElement:i,compilerOptions:l}=e.appContext.config,{delimiters:s,compilerOptions:a}=o,c=De(De({isCustomElement:i,delimiters:s},l),a);o.render=di(r,c)}}e.render=o.render||it}dn(e),mn(),vc(e),gn(),Jt()}function Vc(e){return new Proxy(e.attrs,{get(t,n){return Je(e,"get","$attrs"),t[n]}})}function Uc(e){const t=o=>{e.exposed=o||{}};let n;return{get attrs(){return n||(n=Vc(e))},slots:e.slots,emit:e.emit,expose:t}}function Po(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Ol(xl(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in so)return so[n](e)}}))}function qc(e,t=!0){return ie(e)?e.displayName||e.name:e.name||t&&e.__name}function Kc(e){return ie(e)&&"__vccOpts"in e}const V=(e,t)=>Ba(e,t,fn);function de(e,t,n){const o=arguments.length;return o===2?Ce(t)&&!ee(t)?uo(t)?ne(e,null,[t]):ne(e,t):ne(e,null,t):(o>3?n=Array.prototype.slice.call(arguments,2):o===3&&uo(n)&&(n=[n]),ne(e,t,n))}const Wc="3.2.40",Qc="http://www.w3.org/2000/svg",Kt=typeof document<"u"?document:null,fi=Kt&&Kt.createElement("template"),Gc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,o)=>{const r=t?Kt.createElementNS(Qc,e):Kt.createElement(e,n?{is:n}:void 0);return e==="select"&&o&&o.multiple!=null&&r.setAttribute("multiple",o.multiple),r},createText:e=>Kt.createTextNode(e),createComment:e=>Kt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Kt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,o,r,i){const l=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{fi.innerHTML=o?`${e}`:e;const s=fi.content;if(o){const a=s.firstChild;for(;a.firstChild;)s.appendChild(a.firstChild);s.removeChild(a)}t.insertBefore(s,n)}return[l?l.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function Jc(e,t,n){const o=e._vtc;o&&(t=(t?[t,...o]:[...o]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}function Yc(e,t,n){const o=e.style,r=_e(n);if(n&&!r){for(const i in n)or(o,i,n[i]);if(t&&!_e(t))for(const i in t)n[i]==null&&or(o,i,"")}else{const i=o.display;r?t!==n&&(o.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(o.display=i)}}const hi=/\s*!important$/;function or(e,t,n){if(ee(n))n.forEach(o=>or(e,t,o));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const o=Zc(e,t);hi.test(n)?e.setProperty(Yt(o),n.replace(hi,""),"important"):e[o]=n}}const pi=["Webkit","Moz","ms"],zo={};function Zc(e,t){const n=zo[t];if(n)return n;let o=dt(t);if(o!=="filter"&&o in e)return zo[t]=o;o=bo(o);for(let r=0;r{let e=Date.now,t=!1;if(typeof window<"u"){Date.now()>document.createEvent("Event").timeStamp&&(e=performance.now.bind(performance));const n=navigator.userAgent.match(/firefox\/(\d+)/i);t=!!(n&&Number(n[1])<=53)}return[e,t]})();let rr=0;const nu=Promise.resolve(),ou=()=>{rr=0},ru=()=>rr||(nu.then(ou),rr=os());function iu(e,t,n,o){e.addEventListener(t,n,o)}function lu(e,t,n,o){e.removeEventListener(t,n,o)}function su(e,t,n,o,r=null){const i=e._vei||(e._vei={}),l=i[t];if(o&&l)l.value=o;else{const[s,a]=au(t);if(o){const c=i[t]=cu(o,r);iu(e,s,c,a)}else l&&(lu(e,s,l,a),i[t]=void 0)}}const gi=/(?:Once|Passive|Capture)$/;function au(e){let t;if(gi.test(e)){t={};let o;for(;o=e.match(gi);)e=e.slice(0,e.length-o[0].length),t[o[0].toLowerCase()]=!0}return[e[2]===":"?e.slice(3):Yt(e.slice(2)),t]}function cu(e,t){const n=o=>{const r=o.timeStamp||os();(tu||r>=n.attached-1)&&et(uu(o,n.value),t,5,[o])};return n.value=e,n.attached=ru(),n}function uu(e,t){if(ee(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(o=>r=>!r._stopped&&o&&o(r))}else return t}const vi=/^on[a-z]/,du=(e,t,n,o,r=!1,i,l,s,a)=>{t==="class"?Jc(e,o,r):t==="style"?Yc(e,n,o):Dn(t)?dr(t)||su(e,t,n,o,l):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):fu(e,t,o,r))?eu(e,t,o,i,l,s,a):(t==="true-value"?e._trueValue=o:t==="false-value"&&(e._falseValue=o),Xc(e,t,o,r))};function fu(e,t,n,o){return o?!!(t==="innerHTML"||t==="textContent"||t in e&&vi.test(t)&&ie(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||vi.test(t)&&_e(n)?!1:t in e}const Lt="transition",bn="animation",Hn=(e,{slots:t})=>de(Ml,hu(e),t);Hn.displayName="Transition";const rs={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};Hn.props=De({},Ml.props,rs);const Nt=(e,t=[])=>{ee(e)?e.forEach(n=>n(...t)):e&&e(...t)},_i=e=>e?ee(e)?e.some(t=>t.length>1):e.length>1:!1;function hu(e){const t={};for(const L in e)L in rs||(t[L]=e[L]);if(e.css===!1)return t;const{name:n="v",type:o,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:l=`${n}-enter-active`,enterToClass:s=`${n}-enter-to`,appearFromClass:a=i,appearActiveClass:c=l,appearToClass:u=s,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:h=`${n}-leave-active`,leaveToClass:m=`${n}-leave-to`}=e,b=pu(r),w=b&&b[0],k=b&&b[1],{onBeforeEnter:g,onEnter:_,onEnterCancelled:C,onLeave:$,onLeaveCancelled:q,onBeforeAppear:X=g,onAppear:O=_,onAppearCancelled:v=C}=t,G=(L,I,R)=>{Ft(L,I?u:s),Ft(L,I?c:l),R&&R()},H=(L,I)=>{L._isLeaving=!1,Ft(L,f),Ft(L,m),Ft(L,h),I&&I()},Q=L=>(I,R)=>{const se=L?O:_,B=()=>G(I,L,R);Nt(se,[I,B]),bi(()=>{Ft(I,L?a:i),Ct(I,L?u:s),_i(se)||yi(I,o,w,B)})};return De(t,{onBeforeEnter(L){Nt(g,[L]),Ct(L,i),Ct(L,l)},onBeforeAppear(L){Nt(X,[L]),Ct(L,a),Ct(L,c)},onEnter:Q(!1),onAppear:Q(!0),onLeave(L,I){L._isLeaving=!0;const R=()=>H(L,I);Ct(L,f),vu(),Ct(L,h),bi(()=>{!L._isLeaving||(Ft(L,f),Ct(L,m),_i($)||yi(L,o,k,R))}),Nt($,[L,R])},onEnterCancelled(L){G(L,!1),Nt(C,[L])},onAppearCancelled(L){G(L,!0),Nt(v,[L])},onLeaveCancelled(L){H(L),Nt(q,[L])}})}function pu(e){if(e==null)return null;if(Ce(e))return[Do(e.enter),Do(e.leave)];{const t=Do(e);return[t,t]}}function Do(e){return fl(e)}function Ct(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e._vtc||(e._vtc=new Set)).add(t)}function Ft(e,t){t.split(/\s+/).forEach(o=>o&&e.classList.remove(o));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function bi(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let mu=0;function yi(e,t,n,o){const r=e._endId=++mu,i=()=>{r===e._endId&&o()};if(n)return setTimeout(i,n);const{type:l,timeout:s,propCount:a}=gu(e,t);if(!l)return o();const c=l+"end";let u=0;const f=()=>{e.removeEventListener(c,h),i()},h=m=>{m.target===e&&++u>=a&&f()};setTimeout(()=>{u(n[b]||"").split(", "),r=o(Lt+"Delay"),i=o(Lt+"Duration"),l=wi(r,i),s=o(bn+"Delay"),a=o(bn+"Duration"),c=wi(s,a);let u=null,f=0,h=0;t===Lt?l>0&&(u=Lt,f=l,h=i.length):t===bn?c>0&&(u=bn,f=c,h=a.length):(f=Math.max(l,c),u=f>0?l>c?Lt:bn:null,h=u?u===Lt?i.length:a.length:0);const m=u===Lt&&/\b(transform|all)(,|$)/.test(n[Lt+"Property"]);return{type:u,timeout:f,propCount:h,hasTransform:m}}function wi(e,t){for(;e.lengthEi(n)+Ei(e[o])))}function Ei(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function vu(){return document.body.offsetHeight}const _u={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},bu=(e,t)=>n=>{if(!("key"in n))return;const o=Yt(n.key);if(t.some(r=>r===o||_u[r]===o))return e(n)},fo={beforeMount(e,{value:t},{transition:n}){e._vod=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):yn(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:o}){!t!=!n&&(o?t?(o.beforeEnter(e),yn(e,!0),o.enter(e)):o.leave(e,()=>{yn(e,!1)}):yn(e,t))},beforeUnmount(e,{value:t}){yn(e,t)}};function yn(e,t){e.style.display=t?e._vod:"none"}const yu=De({patchProp:du},Gc);let Mo,ki=!1;function wu(){return Mo=ki?Mo:Ac(yu),ki=!0,Mo}const Eu=(...e)=>{const t=wu().createApp(...e),{mount:n}=t;return t.mount=o=>{const r=ku(o);if(r)return n(r,!0,r instanceof SVGElement)},t};function ku(e){return _e(e)?document.querySelector(e):e}const xu=JSON.parse('{"base":"/","lang":"en-US","title":"","description":"","head":[["link",{"rel":"manifest","href":"/manifest.webmanifest"}],["meta",{"name":"theme-color","content":"#3eaf7c"}]],"locales":{"/":{"lang":"en-US","title":"Joplin Utils"},"/zh/":{"lang":"zh-CN","title":"Joplin Utils"}}}');var Lu=([e,t,n])=>e==="meta"&&t.name?`${e}.${t.name}`:["title","base"].includes(e)?e:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,t,n]),Cu=e=>{const t=new Set,n=[];return e.forEach(o=>{const r=Lu(o);t.has(r)||(t.add(r),n.push(o))}),n},Bn=e=>/^(https?:)?\/\//.test(e),Tu=e=>/^mailto:/.test(e),Pu=e=>/^tel:/.test(e),Pr=e=>Object.prototype.toString.call(e)==="[object Object]",is=e=>e.replace(/\/$/,""),ls=e=>e.replace(/^\//,""),ss=(e,t)=>{const n=Object.keys(e).sort((o,r)=>{const i=r.split("/").length-o.split("/").length;return i!==0?i:r.length-o.length});for(const o of n)if(t.startsWith(o))return o;return"/"};const as={"v-8daa1a0e":ce(()=>N(()=>import("./index.html.3c279f2d.js"),[])),"v-16aa27d2":ce(()=>N(()=>import("./dev.html.6423d3a0.js"),[])),"v-3585ae58":ce(()=>N(()=>import("./doc.html.56e01b61.js"),[])),"v-7445cd33":ce(()=>N(()=>import("./index.html.8da6e519.js"),[])),"v-4110ef47":ce(()=>N(()=>import("./require.html.208702a9.js"),[])),"v-320ef97a":ce(()=>N(()=>import("./index.html.fe3f49fa.js"),[])),"v-7e84431f":ce(()=>N(()=>import("./feature.html.6e04f8e7.js"),["assets/feature.html.6e04f8e7.js","assets/convertExternalLink.6b823605.js"])),"v-b9252508":ce(()=>N(()=>import("./index.html.15127171.js"),[])),"v-15f08efa":ce(()=>N(()=>import("./privacy.html.f5b742eb.js"),[])),"v-46f0e132":ce(()=>N(()=>import("./index.html.e4f8f26c.js"),[])),"v-001761b2":ce(()=>N(()=>import("./index.html.597c080a.js"),[])),"v-2d0ad528":ce(()=>N(()=>import("./index.html.96a8e13a.js"),[])),"v-6a87341d":ce(()=>N(()=>import("./faq.html.f85ed92a.js"),["assets/faq.html.f85ed92a.js","assets/manually-set-token-of-joplin.65cb3464.js"])),"v-12db533d":ce(()=>N(()=>import("./feature.html.8f70f570.js"),["assets/feature.html.8f70f570.js","assets/copy-link.7c46ccd4.js"])),"v-0829310c":ce(()=>N(()=>import("./limitations.html.26c77031.js"),[])),"v-7f9aa074":ce(()=>N(()=>import("./recommended-extension.html.10ced95d.js"),[])),"v-184d7906":ce(()=>N(()=>import("./index.html.59449ee4.js"),[])),"v-10bb1423":ce(()=>N(()=>import("./roadmap.html.fa344b33.js"),[])),"v-07d5ffc6":ce(()=>N(()=>import("./dev.html.cb56fbcd.js"),[])),"v-0f2f86fa":ce(()=>N(()=>import("./doc.html.906106fc.js"),[])),"v-53faffe2":ce(()=>N(()=>import("./index.html.0670f073.js"),[])),"v-47c6d914":ce(()=>N(()=>import("./require.html.c3ed540a.js"),[])),"v-41568498":ce(()=>N(()=>import("./index.html.61178983.js"),[])),"v-0b89b960":ce(()=>N(()=>import("./feature.html.4eb69cda.js"),["assets/feature.html.4eb69cda.js","assets/convertExternalLink.6b823605.js"])),"v-69d64f2d":ce(()=>N(()=>import("./index.html.869292c5.js"),[])),"v-4b1b7f72":ce(()=>N(()=>import("./privacy.html.03e508f3.js"),[])),"v-ae8752be":ce(()=>N(()=>import("./index.html.87d6eee5.js"),[])),"v-827a1f50":ce(()=>N(()=>import("./index.html.0a9210ee.js"),[])),"v-59a76b8e":ce(()=>N(()=>import("./faq.html.1f95e2b4.js"),["assets/faq.html.1f95e2b4.js","assets/manually-set-token-of-joplin.65cb3464.js"])),"v-7f406a2e":ce(()=>N(()=>import("./feature.html.91f08a13.js"),["assets/feature.html.91f08a13.js","assets/copy-link.7c46ccd4.js"])),"v-1dccc42a":ce(()=>N(()=>import("./limitations.html.b8ae6ee7.js"),[])),"v-eaef6612":ce(()=>N(()=>import("./recommended-extension.html.0f64f62c.js"),[])),"v-7b5f4c5b":ce(()=>N(()=>import("./dev.html.8d19bce6.js"),[])),"v-201e9d12":ce(()=>N(()=>import("./index.html.4e4b35c3.js"),[])),"v-7d202b14":ce(()=>N(()=>import("./roadmap.html.a0d4133a.js"),[])),"v-3706649a":ce(()=>N(()=>import("./404.html.cbaa2127.js"),[]))};var wt=(e={})=>e;function cs(e,t,n){var o,r,i;t===void 0&&(t=50),n===void 0&&(n={});var l=(o=n.isImmediate)!=null&&o,s=(r=n.callback)!=null&&r,a=n.maxWait,c=Date.now(),u=[];function f(){if(a!==void 0){var m=Date.now()-c;if(m+t>=a)return a-m}return t}var h=function(){var m=[].slice.call(arguments),b=this;return new Promise(function(w,k){var g=l&&i===void 0;if(i!==void 0&&clearTimeout(i),i=setTimeout(function(){if(i=void 0,c=Date.now(),!l){var C=e.apply(b,m);s&&s(C),u.forEach(function($){return(0,$.resolve)(C)}),u=[]}},f()),g){var _=e.apply(b,m);return s&&s(_),w(_)}u.push({resolve:w,reject:k})})};return h.cancel=function(m){i!==void 0&&clearTimeout(i),u.forEach(function(b){return(0,b.reject)(m)}),u=[]},h}/*! + * vue-router v4.1.5 + * (c) 2022 Eduardo San Martin Morote + * @license MIT + */const on=typeof window<"u";function Ou(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const ve=Object.assign;function No(e,t){const n={};for(const o in t){const r=t[o];n[o]=lt(r)?r.map(e):e(r)}return n}const Tn=()=>{},lt=Array.isArray,Au=/\/$/,Ru=e=>e.replace(Au,"");function Fo(e,t,n="/"){let o,r={},i="",l="";const s=t.indexOf("#");let a=t.indexOf("?");return s=0&&(a=-1),a>-1&&(o=t.slice(0,a),i=t.slice(a+1,s>-1?s:t.length),r=e(i)),s>-1&&(o=o||t.slice(0,s),l=t.slice(s,t.length)),o=$u(o!=null?o:t,n),{fullPath:o+(i&&"?")+i+l,path:o,query:r,hash:l}}function Su(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function xi(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function ju(e,t,n){const o=t.matched.length-1,r=n.matched.length-1;return o>-1&&o===r&&hn(t.matched[o],n.matched[r])&&us(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function hn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function us(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!Iu(e[n],t[n]))return!1;return!0}function Iu(e,t){return lt(e)?Li(e,t):lt(t)?Li(t,e):e===t}function Li(e,t){return lt(t)?e.length===t.length&&e.every((n,o)=>n===t[o]):e.length===1&&e[0]===t}function $u(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),o=e.split("/");let r=n.length-1,i,l;for(i=0;i1&&r--;else break;return n.slice(0,r).join("/")+"/"+o.slice(i-(i===o.length?1:0)).join("/")}var $n;(function(e){e.pop="pop",e.push="push"})($n||($n={}));var Pn;(function(e){e.back="back",e.forward="forward",e.unknown=""})(Pn||(Pn={}));function zu(e){if(!e)if(on){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Ru(e)}const Du=/^[^#]+#/;function Mu(e,t){return e.replace(Du,"#")+t}function Nu(e,t){const n=document.documentElement.getBoundingClientRect(),o=e.getBoundingClientRect();return{behavior:t.behavior,left:o.left-n.left-(t.left||0),top:o.top-n.top-(t.top||0)}}const Oo=()=>({left:window.pageXOffset,top:window.pageYOffset});function Fu(e){let t;if("el"in e){const n=e.el,o=typeof n=="string"&&n.startsWith("#"),r=typeof n=="string"?o?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=Nu(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function Ci(e,t){return(history.state?history.state.position-t:-1)+e}const ir=new Map;function Hu(e,t){ir.set(e,t)}function Bu(e){const t=ir.get(e);return ir.delete(e),t}let Vu=()=>location.protocol+"//"+location.host;function ds(e,t){const{pathname:n,search:o,hash:r}=t,i=e.indexOf("#");if(i>-1){let s=r.includes(e.slice(i))?e.slice(i).length:1,a=r.slice(s);return a[0]!=="/"&&(a="/"+a),xi(a,"")}return xi(n,e)+o+r}function Uu(e,t,n,o){let r=[],i=[],l=null;const s=({state:h})=>{const m=ds(e,location),b=n.value,w=t.value;let k=0;if(h){if(n.value=m,t.value=h,l&&l===b){l=null;return}k=w?h.position-w.position:0}else o(m);r.forEach(g=>{g(n.value,b,{delta:k,type:$n.pop,direction:k?k>0?Pn.forward:Pn.back:Pn.unknown})})};function a(){l=n.value}function c(h){r.push(h);const m=()=>{const b=r.indexOf(h);b>-1&&r.splice(b,1)};return i.push(m),m}function u(){const{history:h}=window;!h.state||h.replaceState(ve({},h.state,{scroll:Oo()}),"")}function f(){for(const h of i)h();i=[],window.removeEventListener("popstate",s),window.removeEventListener("beforeunload",u)}return window.addEventListener("popstate",s),window.addEventListener("beforeunload",u),{pauseListeners:a,listen:c,destroy:f}}function Ti(e,t,n,o=!1,r=!1){return{back:e,current:t,forward:n,replaced:o,position:window.history.length,scroll:r?Oo():null}}function qu(e){const{history:t,location:n}=window,o={value:ds(e,n)},r={value:t.state};r.value||i(o.value,{back:null,current:o.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(a,c,u){const f=e.indexOf("#"),h=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+a:Vu()+e+a;try{t[u?"replaceState":"pushState"](c,"",h),r.value=c}catch(m){console.error(m),n[u?"replace":"assign"](h)}}function l(a,c){const u=ve({},t.state,Ti(r.value.back,a,r.value.forward,!0),c,{position:r.value.position});i(a,u,!0),o.value=a}function s(a,c){const u=ve({},r.value,t.state,{forward:a,scroll:Oo()});i(u.current,u,!0);const f=ve({},Ti(o.value,a,null),{position:u.position+1},c);i(a,f,!1),o.value=a}return{location:o,state:r,push:s,replace:l}}function Ku(e){e=zu(e);const t=qu(e),n=Uu(e,t.state,t.location,t.replace);function o(i,l=!0){l||n.pauseListeners(),history.go(i)}const r=ve({location:"",base:e,go:o,createHref:Mu.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}function Wu(e){return typeof e=="string"||e&&typeof e=="object"}function fs(e){return typeof e=="string"||typeof e=="symbol"}const ht={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},hs=Symbol("");var Pi;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(Pi||(Pi={}));function pn(e,t){return ve(new Error,{type:e,[hs]:!0},t)}function ft(e,t){return e instanceof Error&&hs in e&&(t==null||!!(e.type&t))}const Oi="[^/]+?",Qu={sensitive:!1,strict:!1,start:!0,end:!0},Gu=/[.+*?^${}()[\]/\\]/g;function Ju(e,t){const n=ve({},Qu,t),o=[];let r=n.start?"^":"";const i=[];for(const c of e){const u=c.length?[]:[90];n.strict&&!c.length&&(r+="/");for(let f=0;ft.length?t.length===1&&t[0]===40+40?1:-1:0}function Zu(e,t){let n=0;const o=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const Xu={type:0,value:""},ed=/[a-zA-Z0-9_]/;function td(e){if(!e)return[[]];if(e==="/")return[[Xu]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(m){throw new Error(`ERR (${n})/"${c}": ${m}`)}let n=0,o=n;const r=[];let i;function l(){i&&r.push(i),i=[]}let s=0,a,c="",u="";function f(){!c||(n===0?i.push({type:0,value:c}):n===1||n===2||n===3?(i.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),i.push({type:1,value:c,regexp:u,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),c="")}function h(){c+=a}for(;s{l(_)}:Tn}function l(u){if(fs(u)){const f=o.get(u);f&&(o.delete(u),n.splice(n.indexOf(f),1),f.children.forEach(l),f.alias.forEach(l))}else{const f=n.indexOf(u);f>-1&&(n.splice(f,1),u.record.name&&o.delete(u.record.name),u.children.forEach(l),u.alias.forEach(l))}}function s(){return n}function a(u){let f=0;for(;f=0&&(u.record.path!==n[f].record.path||!ps(u,n[f]));)f++;n.splice(f,0,u),u.record.name&&!Si(u)&&o.set(u.record.name,u)}function c(u,f){let h,m={},b,w;if("name"in u&&u.name){if(h=o.get(u.name),!h)throw pn(1,{location:u});w=h.record.name,m=ve(Ri(f.params,h.keys.filter(_=>!_.optional).map(_=>_.name)),u.params&&Ri(u.params,h.keys.map(_=>_.name))),b=h.stringify(m)}else if("path"in u)b=u.path,h=n.find(_=>_.re.test(b)),h&&(m=h.parse(b),w=h.record.name);else{if(h=f.name?o.get(f.name):n.find(_=>_.re.test(f.path)),!h)throw pn(1,{location:u,currentLocation:f});w=h.record.name,m=ve({},f.params,u.params),b=h.stringify(m)}const k=[];let g=h;for(;g;)k.unshift(g.record),g=g.parent;return{name:w,path:b,params:m,matched:k,meta:ld(k)}}return e.forEach(u=>i(u)),{addRoute:i,resolve:c,removeRoute:l,getRoutes:s,getRecordMatcher:r}}function Ri(e,t){const n={};for(const o of t)o in e&&(n[o]=e[o]);return n}function rd(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:id(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function id(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const o in e.components)t[o]=typeof n=="boolean"?n:n[o];return t}function Si(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function ld(e){return e.reduce((t,n)=>ve(t,n.meta),{})}function ji(e,t){const n={};for(const o in e)n[o]=o in t?t[o]:e[o];return n}function ps(e,t){return t.children.some(n=>n===e||ps(e,n))}const ms=/#/g,sd=/&/g,ad=/\//g,cd=/=/g,ud=/\?/g,gs=/\+/g,dd=/%5B/g,fd=/%5D/g,vs=/%5E/g,hd=/%60/g,_s=/%7B/g,pd=/%7C/g,bs=/%7D/g,md=/%20/g;function Or(e){return encodeURI(""+e).replace(pd,"|").replace(dd,"[").replace(fd,"]")}function gd(e){return Or(e).replace(_s,"{").replace(bs,"}").replace(vs,"^")}function lr(e){return Or(e).replace(gs,"%2B").replace(md,"+").replace(ms,"%23").replace(sd,"%26").replace(hd,"`").replace(_s,"{").replace(bs,"}").replace(vs,"^")}function vd(e){return lr(e).replace(cd,"%3D")}function _d(e){return Or(e).replace(ms,"%23").replace(ud,"%3F")}function bd(e){return e==null?"":_d(e).replace(ad,"%2F")}function ho(e){try{return decodeURIComponent(""+e)}catch{}return""+e}function yd(e){const t={};if(e===""||e==="?")return t;const o=(e[0]==="?"?e.slice(1):e).split("&");for(let r=0;ri&&lr(i)):[o&&lr(o)]).forEach(i=>{i!==void 0&&(t+=(t.length?"&":"")+n,i!=null&&(t+="="+i))})}return t}function wd(e){const t={};for(const n in e){const o=e[n];o!==void 0&&(t[n]=lt(o)?o.map(r=>r==null?null:""+r):o==null?o:""+o)}return t}const Ed=Symbol(""),$i=Symbol(""),Ao=Symbol(""),Ar=Symbol(""),sr=Symbol("");function wn(){let e=[];function t(o){return e.push(o),()=>{const r=e.indexOf(o);r>-1&&e.splice(r,1)}}function n(){e=[]}return{add:t,list:()=>e,reset:n}}function Pt(e,t,n,o,r){const i=o&&(o.enterCallbacks[r]=o.enterCallbacks[r]||[]);return()=>new Promise((l,s)=>{const a=f=>{f===!1?s(pn(4,{from:n,to:t})):f instanceof Error?s(f):Wu(f)?s(pn(2,{from:t,to:f})):(i&&o.enterCallbacks[r]===i&&typeof f=="function"&&i.push(f),l())},c=e.call(o&&o.instances[r],t,n,a);let u=Promise.resolve(c);e.length<3&&(u=u.then(a)),u.catch(f=>s(f))})}function Ho(e,t,n,o){const r=[];for(const i of e)for(const l in i.components){let s=i.components[l];if(!(t!=="beforeRouteEnter"&&!i.instances[l]))if(kd(s)){const c=(s.__vccOpts||s)[t];c&&r.push(Pt(c,n,o,i,l))}else{let a=s();r.push(()=>a.then(c=>{if(!c)return Promise.reject(new Error(`Couldn't resolve component "${l}" at "${i.path}"`));const u=Ou(c)?c.default:c;i.components[l]=u;const h=(u.__vccOpts||u)[t];return h&&Pt(h,n,o,i,l)()}))}}return r}function kd(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function zi(e){const t=$e(Ao),n=$e(Ar),o=V(()=>t.resolve(A(e.to))),r=V(()=>{const{matched:a}=o.value,{length:c}=a,u=a[c-1],f=n.matched;if(!u||!f.length)return-1;const h=f.findIndex(hn.bind(null,u));if(h>-1)return h;const m=Di(a[c-2]);return c>1&&Di(u)===m&&f[f.length-1].path!==m?f.findIndex(hn.bind(null,a[c-2])):h}),i=V(()=>r.value>-1&&Td(n.params,o.value.params)),l=V(()=>r.value>-1&&r.value===n.matched.length-1&&us(n.params,o.value.params));function s(a={}){return Cd(a)?t[A(e.replace)?"replace":"push"](A(e.to)).catch(Tn):Promise.resolve()}return{route:o,href:V(()=>o.value.href),isActive:i,isExactActive:l,navigate:s}}const xd=he({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:zi,setup(e,{slots:t}){const n=vn(zi(e)),{options:o}=$e(Ao),r=V(()=>({[Mi(e.activeClass,o.linkActiveClass,"router-link-active")]:n.isActive,[Mi(e.exactActiveClass,o.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const i=t.default&&t.default(n);return e.custom?i:de("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},i)}}}),Ld=xd;function Cd(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Td(e,t){for(const n in t){const o=t[n],r=e[n];if(typeof o=="string"){if(o!==r)return!1}else if(!lt(r)||r.length!==o.length||o.some((i,l)=>i!==r[l]))return!1}return!0}function Di(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Mi=(e,t,n)=>e!=null?e:t!=null?t:n,Pd=he({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const o=$e(sr),r=V(()=>e.route||o.value),i=$e($i,0),l=V(()=>{let c=A(i);const{matched:u}=r.value;let f;for(;(f=u[c])&&!f.components;)c++;return c}),s=V(()=>r.value.matched[l.value]);Gt($i,V(()=>l.value+1)),Gt(Ed,s),Gt(sr,r);const a=be();return ut(()=>[a.value,s.value,e.name],([c,u,f],[h,m,b])=>{u&&(u.instances[f]=c,m&&m!==u&&c&&c===h&&(u.leaveGuards.size||(u.leaveGuards=m.leaveGuards),u.updateGuards.size||(u.updateGuards=m.updateGuards))),c&&u&&(!m||!hn(u,m)||!h)&&(u.enterCallbacks[f]||[]).forEach(w=>w(c))},{flush:"post"}),()=>{const c=r.value,u=e.name,f=s.value,h=f&&f.components[u];if(!h)return Ni(n.default,{Component:h,route:c});const m=f.props[u],b=m?m===!0?c.params:typeof m=="function"?m(c):m:null,k=de(h,ve({},b,t,{onVnodeUnmounted:g=>{g.component.isUnmounted&&(f.instances[u]=null)},ref:a}));return Ni(n.default,{Component:k,route:c})||k}}});function Ni(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const ys=Pd;function Od(e){const t=od(e.routes,e),n=e.parseQuery||yd,o=e.stringifyQuery||Ii,r=e.history,i=wn(),l=wn(),s=wn(),a=Tl(ht);let c=ht;on&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=No.bind(null,x=>""+x),f=No.bind(null,bd),h=No.bind(null,ho);function m(x,U){let D,W;return fs(x)?(D=t.getRecordMatcher(x),W=U):W=x,t.addRoute(W,D)}function b(x){const U=t.getRecordMatcher(x);U&&t.removeRoute(U)}function w(){return t.getRoutes().map(x=>x.record)}function k(x){return!!t.getRecordMatcher(x)}function g(x,U){if(U=ve({},U||a.value),typeof x=="string"){const d=Fo(n,x,U.path),p=t.resolve({path:d.path},U),y=r.createHref(d.fullPath);return ve(d,p,{params:h(p.params),hash:ho(d.hash),redirectedFrom:void 0,href:y})}let D;if("path"in x)D=ve({},x,{path:Fo(n,x.path,U.path).path});else{const d=ve({},x.params);for(const p in d)d[p]==null&&delete d[p];D=ve({},x,{params:f(x.params)}),U.params=f(U.params)}const W=t.resolve(D,U),ue=x.hash||"";W.params=u(h(W.params));const Le=Su(o,ve({},x,{hash:gd(ue),path:W.path})),le=r.createHref(Le);return ve({fullPath:Le,hash:ue,query:o===Ii?wd(x.query):x.query||{}},W,{redirectedFrom:void 0,href:le})}function _(x){return typeof x=="string"?Fo(n,x,a.value.path):ve({},x)}function C(x,U){if(c!==x)return pn(8,{from:U,to:x})}function $(x){return O(x)}function q(x){return $(ve(_(x),{replace:!0}))}function X(x){const U=x.matched[x.matched.length-1];if(U&&U.redirect){const{redirect:D}=U;let W=typeof D=="function"?D(x):D;return typeof W=="string"&&(W=W.includes("?")||W.includes("#")?W=_(W):{path:W},W.params={}),ve({query:x.query,hash:x.hash,params:"path"in W?{}:x.params},W)}}function O(x,U){const D=c=g(x),W=a.value,ue=x.state,Le=x.force,le=x.replace===!0,d=X(D);if(d)return O(ve(_(d),{state:typeof d=="object"?ve({},ue,d.state):ue,force:Le,replace:le}),U||D);const p=D;p.redirectedFrom=U;let y;return!Le&&ju(o,W,D)&&(y=pn(16,{to:p,from:W}),Me(W,W,!0,!1)),(y?Promise.resolve(y):G(p,W)).catch(E=>ft(E)?ft(E,2)?E:je(E):te(E,p,W)).then(E=>{if(E){if(ft(E,2))return O(ve({replace:le},_(E.to),{state:typeof E.to=="object"?ve({},ue,E.to.state):ue,force:Le}),U||p)}else E=Q(p,W,!0,le,ue);return H(p,W,E),E})}function v(x,U){const D=C(x,U);return D?Promise.reject(D):Promise.resolve()}function G(x,U){let D;const[W,ue,Le]=Ad(x,U);D=Ho(W.reverse(),"beforeRouteLeave",x,U);for(const d of W)d.leaveGuards.forEach(p=>{D.push(Pt(p,x,U))});const le=v.bind(null,x,U);return D.push(le),tn(D).then(()=>{D=[];for(const d of i.list())D.push(Pt(d,x,U));return D.push(le),tn(D)}).then(()=>{D=Ho(ue,"beforeRouteUpdate",x,U);for(const d of ue)d.updateGuards.forEach(p=>{D.push(Pt(p,x,U))});return D.push(le),tn(D)}).then(()=>{D=[];for(const d of x.matched)if(d.beforeEnter&&!U.matched.includes(d))if(lt(d.beforeEnter))for(const p of d.beforeEnter)D.push(Pt(p,x,U));else D.push(Pt(d.beforeEnter,x,U));return D.push(le),tn(D)}).then(()=>(x.matched.forEach(d=>d.enterCallbacks={}),D=Ho(Le,"beforeRouteEnter",x,U),D.push(le),tn(D))).then(()=>{D=[];for(const d of l.list())D.push(Pt(d,x,U));return D.push(le),tn(D)}).catch(d=>ft(d,8)?d:Promise.reject(d))}function H(x,U,D){for(const W of s.list())W(x,U,D)}function Q(x,U,D,W,ue){const Le=C(x,U);if(Le)return Le;const le=U===ht,d=on?history.state:{};D&&(W||le?r.replace(x.fullPath,ve({scroll:le&&d&&d.scroll},ue)):r.push(x.fullPath,ue)),a.value=x,Me(x,U,D,le),je()}let L;function I(){L||(L=r.listen((x,U,D)=>{if(!Xt.listening)return;const W=g(x),ue=X(W);if(ue){O(ve(ue,{replace:!0}),W).catch(Tn);return}c=W;const Le=a.value;on&&Hu(Ci(Le.fullPath,D.delta),Oo()),G(W,Le).catch(le=>ft(le,12)?le:ft(le,2)?(O(le.to,W).then(d=>{ft(d,20)&&!D.delta&&D.type===$n.pop&&r.go(-1,!1)}).catch(Tn),Promise.reject()):(D.delta&&r.go(-D.delta,!1),te(le,W,Le))).then(le=>{le=le||Q(W,Le,!1),le&&(D.delta&&!ft(le,8)?r.go(-D.delta,!1):D.type===$n.pop&&ft(le,20)&&r.go(-1,!1)),H(W,Le,le)}).catch(Tn)}))}let R=wn(),se=wn(),B;function te(x,U,D){je(x);const W=se.list();return W.length?W.forEach(ue=>ue(x,U,D)):console.error(x),Promise.reject(x)}function re(){return B&&a.value!==ht?Promise.resolve():new Promise((x,U)=>{R.add([x,U])})}function je(x){return B||(B=!x,I(),R.list().forEach(([U,D])=>x?D(x):U()),R.reset()),x}function Me(x,U,D,W){const{scrollBehavior:ue}=e;if(!on||!ue)return Promise.resolve();const Le=!D&&Bu(Ci(x.fullPath,0))||(W||!D)&&history.state&&history.state.scroll||null;return Eo().then(()=>ue(x,U,Le)).then(le=>le&&Fu(le)).catch(le=>te(le,x,U))}const Be=x=>r.go(x);let Ne;const Et=new Set,Xt={currentRoute:a,listening:!0,addRoute:m,removeRoute:b,hasRoute:k,getRoutes:w,resolve:g,options:e,push:$,replace:q,go:Be,back:()=>Be(-1),forward:()=>Be(1),beforeEach:i.add,beforeResolve:l.add,afterEach:s.add,onError:se.add,isReady:re,install(x){const U=this;x.component("RouterLink",Ld),x.component("RouterView",ys),x.config.globalProperties.$router=U,Object.defineProperty(x.config.globalProperties,"$route",{enumerable:!0,get:()=>A(a)}),on&&!Ne&&a.value===ht&&(Ne=!0,$(r.location).catch(ue=>{}));const D={};for(const ue in ht)D[ue]=V(()=>a.value[ue]);x.provide(Ao,U),x.provide(Ar,vn(D)),x.provide(sr,a);const W=x.unmount;Et.add(x),x.unmount=function(){Et.delete(x),Et.size<1&&(c=ht,L&&L(),L=null,a.value=ht,Ne=!1,B=!1),W()}}};return Xt}function tn(e){return e.reduce((t,n)=>t.then(()=>n()),Promise.resolve())}function Ad(e,t){const n=[],o=[],r=[],i=Math.max(t.matched.length,e.matched.length);for(let l=0;lhn(c,s))?o.push(s):n.push(s));const a=e.matched[l];a&&(t.matched.find(c=>hn(c,a))||r.push(a))}return[n,o,r]}function Zt(){return $e(Ao)}function Dt(){return $e(Ar)}const Rd=({headerLinkSelector:e,headerAnchorSelector:t,delay:n,offset:o=5})=>{const r=Zt(),l=cs(()=>{var w,k,g,_;const s=Math.max(window.scrollY,document.documentElement.scrollTop,document.body.scrollTop);if(Math.abs(s-0)h.some($=>$.hash===C.hash));for(let C=0;C=((k=(w=$.parentElement)==null?void 0:w.offsetTop)!=null?k:0)-o,O=!q||s<((_=(g=q.parentElement)==null?void 0:g.offsetTop)!=null?_:0)-o;if(!(X&&O))continue;const G=decodeURIComponent(r.currentRoute.value.hash),H=decodeURIComponent($.hash);if(G===H)return;if(f){for(let Q=C+1;Q{window.addEventListener("scroll",l)}),Fn(()=>{window.removeEventListener("scroll",l)})},Fi=async(e,t)=>{const{scrollBehavior:n}=e.options;e.options.scrollBehavior=void 0,await e.replace({query:e.currentRoute.value.query,hash:t,force:!0}).finally(()=>e.options.scrollBehavior=n)},Sd="a.sidebar-item",jd=".header-anchor",Id=300,$d=5,zd=wt({setup(){Rd({headerLinkSelector:Sd,headerAnchorSelector:jd,delay:Id,offset:$d})}}),Hi=()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,Dd=()=>window.scrollTo({top:0,behavior:"smooth"});const Md=he({name:"BackToTop",setup(){const e=be(0),t=V(()=>e.value>300),n=cs(()=>{e.value=Hi()},100);Ye(()=>{e.value=Hi(),window.addEventListener("scroll",()=>n())});const o=de("div",{class:"back-to-top",onClick:Dd});return()=>de(Hn,{name:"back-to-top"},()=>t.value?o:null)}}),Nd=wt({rootComponents:[Md]});const Fd=de("svg",{class:"external-link-icon",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},[de("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}),de("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"})]),Hd=he({name:"ExternalLinkIcon",props:{locales:{type:Object,required:!1,default:()=>({})}},setup(e){const t=Vn(),n=V(()=>{var o;return(o=e.locales[t.value])!=null?o:{openInNewWindow:"open in new window"}});return()=>de("span",[Fd,de("span",{class:"external-link-icon-sr-only"},n.value.openInNewWindow)])}}),Bd={"/":{openInNewWindow:"open in new window"},"/zh/":{openInNewWindow:"open in new window"}},Vd=wt({enhance({app:e}){e.component("ExternalLinkIcon",de(Hd,{locales:Bd}))}});/*! medium-zoom 1.0.6 | MIT License | https://github.com/francoischalifour/medium-zoom */var Bt=Object.assign||function(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{},o=window.Promise||function(L){function I(){}L(I,I)},r=function(L){var I=L.target;if(I===G){b();return}C.indexOf(I)!==-1&&w({target:I})},i=function(){if(!(q||!v.original)){var L=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(X-L)>O.scrollOffset&&setTimeout(b,150)}},l=function(L){var I=L.key||L.keyCode;(I==="Escape"||I==="Esc"||I===27)&&b()},s=function(){var L=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},I=L;if(L.background&&(G.style.background=L.background),L.container&&L.container instanceof Object&&(I.container=Bt({},O.container,L.container)),L.template){var R=eo(L.template)?L.template:document.querySelector(L.template);I.template=R}return O=Bt({},O,I),C.forEach(function(se){se.dispatchEvent(nn("medium-zoom:update",{detail:{zoom:H}}))}),H},a=function(){var L=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return e(Bt({},O,L))},c=function(){for(var L=arguments.length,I=Array(L),R=0;R0?I.reduce(function(B,te){return[].concat(B,Vi(te))},[]):C;return se.forEach(function(B){B.classList.remove("medium-zoom-image"),B.dispatchEvent(nn("medium-zoom:detach",{detail:{zoom:H}}))}),C=C.filter(function(B){return se.indexOf(B)===-1}),H},f=function(L,I){var R=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return C.forEach(function(se){se.addEventListener("medium-zoom:"+L,I,R)}),$.push({type:"medium-zoom:"+L,listener:I,options:R}),H},h=function(L,I){var R=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return C.forEach(function(se){se.removeEventListener("medium-zoom:"+L,I,R)}),$=$.filter(function(se){return!(se.type==="medium-zoom:"+L&&se.listener.toString()===I.toString())}),H},m=function(){var L=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},I=L.target,R=function(){var B={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},te=void 0,re=void 0;if(O.container)if(O.container instanceof Object)B=Bt({},B,O.container),te=B.width-B.left-B.right-O.margin*2,re=B.height-B.top-B.bottom-O.margin*2;else{var je=eo(O.container)?O.container:document.querySelector(O.container),Me=je.getBoundingClientRect(),Be=Me.width,Ne=Me.height,Et=Me.left,Xt=Me.top;B=Bt({},B,{width:Be,height:Ne,left:Et,top:Xt})}te=te||B.width-O.margin*2,re=re||B.height-O.margin*2;var x=v.zoomedHd||v.original,U=Bi(x)?te:x.naturalWidth||te,D=Bi(x)?re:x.naturalHeight||re,W=x.getBoundingClientRect(),ue=W.top,Le=W.left,le=W.width,d=W.height,p=Math.min(U,te)/le,y=Math.min(D,re)/d,E=Math.min(p,y),T=(-Le+(te-le)/2+O.margin+B.left)/E,S=(-ue+(re-d)/2+O.margin+B.top)/E,M="scale("+E+") translate3d("+T+"px, "+S+"px, 0)";v.zoomed.style.transform=M,v.zoomedHd&&(v.zoomedHd.style.transform=M)};return new o(function(se){if(I&&C.indexOf(I)===-1){se(H);return}var B=function Be(){q=!1,v.zoomed.removeEventListener("transitionend",Be),v.original.dispatchEvent(nn("medium-zoom:opened",{detail:{zoom:H}})),se(H)};if(v.zoomed){se(H);return}if(I)v.original=I;else if(C.length>0){var te=C;v.original=te[0]}else{se(H);return}if(v.original.dispatchEvent(nn("medium-zoom:open",{detail:{zoom:H}})),X=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,q=!0,v.zoomed=Kd(v.original),document.body.appendChild(G),O.template){var re=eo(O.template)?O.template:document.querySelector(O.template);v.template=document.createElement("div"),v.template.appendChild(re.content.cloneNode(!0)),document.body.appendChild(v.template)}if(document.body.appendChild(v.zoomed),window.requestAnimationFrame(function(){document.body.classList.add("medium-zoom--opened")}),v.original.classList.add("medium-zoom-image--hidden"),v.zoomed.classList.add("medium-zoom-image--opened"),v.zoomed.addEventListener("click",b),v.zoomed.addEventListener("transitionend",B),v.original.getAttribute("data-zoom-src")){v.zoomedHd=v.zoomed.cloneNode(),v.zoomedHd.removeAttribute("srcset"),v.zoomedHd.removeAttribute("sizes"),v.zoomedHd.src=v.zoomed.getAttribute("data-zoom-src"),v.zoomedHd.onerror=function(){clearInterval(je),console.warn("Unable to reach the zoom image target "+v.zoomedHd.src),v.zoomedHd=null,R()};var je=setInterval(function(){v.zoomedHd.complete&&(clearInterval(je),v.zoomedHd.classList.add("medium-zoom-image--opened"),v.zoomedHd.addEventListener("click",b),document.body.appendChild(v.zoomedHd),R())},10)}else if(v.original.hasAttribute("srcset")){v.zoomedHd=v.zoomed.cloneNode(),v.zoomedHd.removeAttribute("sizes"),v.zoomedHd.removeAttribute("loading");var Me=v.zoomedHd.addEventListener("load",function(){v.zoomedHd.removeEventListener("load",Me),v.zoomedHd.classList.add("medium-zoom-image--opened"),v.zoomedHd.addEventListener("click",b),document.body.appendChild(v.zoomedHd),R()})}else R()})},b=function(){return new o(function(L){if(q||!v.original){L(H);return}var I=function R(){v.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(v.zoomed),v.zoomedHd&&document.body.removeChild(v.zoomedHd),document.body.removeChild(G),v.zoomed.classList.remove("medium-zoom-image--opened"),v.template&&document.body.removeChild(v.template),q=!1,v.zoomed.removeEventListener("transitionend",R),v.original.dispatchEvent(nn("medium-zoom:closed",{detail:{zoom:H}})),v.original=null,v.zoomed=null,v.zoomedHd=null,v.template=null,L(H)};q=!0,document.body.classList.remove("medium-zoom--opened"),v.zoomed.style.transform="",v.zoomedHd&&(v.zoomedHd.style.transform=""),v.template&&(v.template.style.transition="opacity 150ms",v.template.style.opacity=0),v.original.dispatchEvent(nn("medium-zoom:close",{detail:{zoom:H}})),v.zoomed.addEventListener("transitionend",I)})},w=function(){var L=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},I=L.target;return v.original?b():m({target:I})},k=function(){return O},g=function(){return C},_=function(){return v.original},C=[],$=[],q=!1,X=0,O=n,v={original:null,zoomed:null,zoomedHd:null,template:null};Object.prototype.toString.call(t)==="[object Object]"?O=t:(t||typeof t=="string")&&c(t),O=Bt({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},O);var G=qd(O.background);document.addEventListener("click",r),document.addEventListener("keyup",l),document.addEventListener("scroll",i),window.addEventListener("resize",b);var H={open:m,close:b,toggle:w,update:s,clone:a,attach:c,detach:u,on:f,off:h,getOptions:k,getImages:g,getZoomedImage:_};return H};function Qd(e,t){t===void 0&&(t={});var n=t.insertAt;if(!(!e||typeof document>"u")){var o=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css",n==="top"&&o.firstChild?o.insertBefore(r,o.firstChild):o.appendChild(r),r.styleSheet?r.styleSheet.cssText=e:r.appendChild(document.createTextNode(e))}}var Gd=".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}";Qd(Gd);const Jd=Wd,Yd=Symbol("mediumZoom");const Zd=".theme-default-content > img, .theme-default-content :not(a) > img",Xd={},ef=300,tf=wt({enhance({app:e,router:t}){const n=Jd(Xd);n.refresh=(o=Zd)=>{n.detach(),n.attach(o)},e.provide(Yd,n),t.afterEach(()=>{setTimeout(()=>n.refresh(),ef)})}});/** + * NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT + */const pe={settings:{minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'
'},status:null,set:e=>{const t=pe.isStarted();e=Bo(e,pe.settings.minimum,1),pe.status=e===1?null:e;const n=pe.render(!t),o=n.querySelector(pe.settings.barSelector),r=pe.settings.speed,i=pe.settings.easing;return n.offsetWidth,nf(l=>{Zn(o,{transform:"translate3d("+Ui(e)+"%,0,0)",transition:"all "+r+"ms "+i}),e===1?(Zn(n,{transition:"none",opacity:"1"}),n.offsetWidth,setTimeout(function(){Zn(n,{transition:"all "+r+"ms linear",opacity:"0"}),setTimeout(function(){pe.remove(),l()},r)},r)):setTimeout(()=>l(),r)}),pe},isStarted:()=>typeof pe.status=="number",start:()=>{pe.status||pe.set(0);const e=()=>{setTimeout(()=>{!pe.status||(pe.trickle(),e())},pe.settings.trickleSpeed)};return pe.settings.trickle&&e(),pe},done:e=>!e&&!pe.status?pe:pe.inc(.3+.5*Math.random()).set(1),inc:e=>{let t=pe.status;return t?(typeof e!="number"&&(e=(1-t)*Bo(Math.random()*t,.1,.95)),t=Bo(t+e,0,.994),pe.set(t)):pe.start()},trickle:()=>pe.inc(Math.random()*pe.settings.trickleRate),render:e=>{if(pe.isRendered())return document.getElementById("nprogress");qi(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=pe.settings.template;const n=t.querySelector(pe.settings.barSelector),o=e?"-100":Ui(pe.status||0),r=document.querySelector(pe.settings.parent);return Zn(n,{transition:"all 0 linear",transform:"translate3d("+o+"%,0,0)"}),r!==document.body&&qi(r,"nprogress-custom-parent"),r==null||r.appendChild(t),t},remove:()=>{Ki(document.documentElement,"nprogress-busy"),Ki(document.querySelector(pe.settings.parent),"nprogress-custom-parent");const e=document.getElementById("nprogress");e&&of(e)},isRendered:()=>!!document.getElementById("nprogress")},Bo=(e,t,n)=>en?n:e,Ui=e=>(-1+e)*100,nf=function(){const e=[];function t(){const n=e.shift();n&&n(t)}return function(n){e.push(n),e.length===1&&t()}}(),Zn=function(){const e=["Webkit","O","Moz","ms"],t={};function n(l){return l.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(s,a){return a.toUpperCase()})}function o(l){const s=document.body.style;if(l in s)return l;let a=e.length;const c=l.charAt(0).toUpperCase()+l.slice(1);let u;for(;a--;)if(u=e[a]+c,u in s)return u;return l}function r(l){return l=n(l),t[l]||(t[l]=o(l))}function i(l,s,a){s=r(s),l.style[s]=a}return function(l,s){for(const a in s){const c=s[a];c!==void 0&&Object.prototype.hasOwnProperty.call(s,a)&&i(l,a,c)}}}(),ws=(e,t)=>(typeof e=="string"?e:Rr(e)).indexOf(" "+t+" ")>=0,qi=(e,t)=>{const n=Rr(e),o=n+t;ws(n,t)||(e.className=o.substring(1))},Ki=(e,t)=>{const n=Rr(e);if(!ws(e,t))return;const o=n.replace(" "+t+" "," ");e.className=o.substring(1,o.length-1)},Rr=e=>(" "+(e.className||"")+" ").replace(/\s+/gi," "),of=e=>{e&&e.parentNode&&e.parentNode.removeChild(e)};const rf=()=>{Ye(()=>{const e=Zt(),t=new Set;t.add(e.currentRoute.value.path),e.beforeEach(n=>{t.has(n.path)||pe.start()}),e.afterEach(n=>{t.add(n.path),pe.done()})})},lf=wt({setup(){rf()}}),sf=JSON.parse(`{"locales":{"/":{"navbar":[{"text":"Tools","children":[{"text":"joplin-vscode-plugin","link":"/joplin-vscode-plugin/"},{"text":"joplin-search-integration","link":"/joplin-search-integration/"},{"text":"joplin-batch-web","link":"/joplin-batch-web/"}]},{"text":"Developer","children":[{"text":"joplin-api","link":"/joplin-api/"}]},{"text":"Contribute","children":[{"text":"Getting involved","link":"/dev/"}]}],"sidebar":{"/joplin-vscode-plugin/":[{"text":"Guide","children":["/joplin-vscode-plugin/","/joplin-vscode-plugin/guide/faq","/joplin-vscode-plugin/guide/feature","/joplin-vscode-plugin/guide/recommended-extension","/joplin-vscode-plugin/guide/limitations"]},{"text":"Other","children":["/joplin-vscode-plugin/other/","/joplin-vscode-plugin/other/roadmap",{"text":"Joplin Forum","link":"https://discourse.joplinapp.org/"},{"text":"VSCode","children":[{"text":"VSCode Official Document","link":"https://code.visualstudio.com/docs"}]},{"text":"Markdown","children":[{"text":"Markdown Guide (English)","link":"https://www.markdownguide.org/"}]},{"text":"VSCode + Markdown","children":[{"text":"VSCode Markdown Official Document","link":"https://code.visualstudio.com/docs/languages/markdown"}]}]}],"/joplin-search-integration/":[{"text":"Introduction","link":"/joplin-search-integration/"},{"text":"Privacy Policy","link":"/joplin-search-integration/privacy"},{"text":"Chrome Store","link":"https://chrome.google.com/webstore/detail/joplin-search-integration/mcjkdcifkhjenpfjacnbhpdcnjknjkhj"},{"text":"Firefox Add-ONS","link":"https://addons.mozilla.org/firefox/addon/joplin-search-integration/"}],"/joplin-batch-web/":[{"text":"Introduction","link":"/joplin-batch-web/"},{"text":"Other functions","link":"/joplin-batch-web/feature"},{"text":"Online site","link":"https://joplin-utils.rxliuli.com/web/joplin-batch-web/"}],"/joplin-api/":[{"text":"Introduction","link":""},{"text":"API Doc","link":"https://joplin-utils.rxliuli.com/api/joplin-api/"}],"/dev/":[{"text":"Introduction","link":"/dev/"},"/dev/doc","/dev/dev","/dev/require"]},"repo":"https://github.com/rxliuli/joplin-utils","docsBranch":"master","docsDir":"/website/docs","editLinkText":"Edit this page on GitHub","lastUpdatedText":"Last Updated","contributorsText":"Contributors","selectLanguageName":"English"},"/zh/":{"navbar":[{"text":"\u5DE5\u5177","children":[{"text":"joplin-vscode-plugin","link":"/zh/joplin-vscode-plugin/"},{"text":"joplin-search-integration","link":"/zh/joplin-search-integration/"},{"text":"joplin-batch-web","link":"/zh/joplin-batch-web/"}]},{"text":"\u5F00\u53D1\u8005","children":[{"text":"joplin-api","link":"/zh/joplin-api/"}]},{"text":"\u8D21\u732E","children":[{"text":"\u53C2\u4E0E\u9879\u76EE","link":"/zh/dev/"},{"text":"Joplin \u8BBA\u575B","link":"https://discourse.joplinapp.org/"}]}],"sidebar":{"/zh/joplin-vscode-plugin/":[{"text":"\u6307\u5357","children":["/zh/joplin-vscode-plugin/","/zh/joplin-vscode-plugin/guide/faq","/zh/joplin-vscode-plugin/guide/feature","/zh/joplin-vscode-plugin/guide/recommended-extension","/zh/joplin-vscode-plugin/guide/limitations"]},{"text":"\u5176\u4ED6","children":["/zh/joplin-vscode-plugin/other/","/zh/joplin-vscode-plugin/other/dev","/zh/joplin-vscode-plugin/other/roadmap",{"text":"VSCode","children":[{"text":"VSCode \u5B98\u65B9\u6587\u6863","link":"https://code.visualstudio.com/docs"},{"text":"VSCode \u4E2D\u6587\u7FFB\u8BD1\u6587\u6863","link":"https://jeasonstudio.gitbooks.io/vscode-cn-doc/"}]},{"text":"Markdown","children":[{"text":"Markdown \u6307\u5357\uFF08\u82F1\u6587\uFF09","link":"https://www.markdownguide.org/"},{"text":"Markdown \u6307\u5357\uFF08\u7FFB\u8BD1\uFF09","link":"https://www.markdown.xyz/"}]},{"text":"VSCode + Markdown","children":[{"text":"VSCode Markdown \u5B98\u65B9\u6587\u6863","link":"https://code.visualstudio.com/docs/languages/markdown"}]}]}],"/zh/joplin-search-integration/":[{"text":"\u7B80\u4ECB","link":"/zh/joplin-search-integration/"},{"text":"Chrome \u5546\u5E97","link":"https://chrome.google.com/webstore/detail/joplin-search-integration/mcjkdcifkhjenpfjacnbhpdcnjknjkhj"},{"text":"Firefox \u5546\u5E97","link":"https://addons.mozilla.org/firefox/addon/joplin-search-integration/"}],"/zh/joplin-batch-web/":[{"text":"\u7B80\u4ECB","link":"/zh/joplin-batch-web/"},{"text":"\u5176\u4ED6\u529F\u80FD","link":"/zh/joplin-batch-web/feature"},{"text":"\u5728\u7EBF\u7F51\u7AD9","link":"https://joplin-utils.rxliuli.com/web/joplin-batch-web/"}],"/zh/joplin-api/":[{"text":"\u7B80\u4ECB","link":"/zh/joplin-api/"},{"text":"NPM","link":"https://www.npmjs.com/package/joplin-api"},{"text":"API \u6587\u6863","link":"https://joplin-utils.rxliuli.com/api/joplin-api/"}],"/zh/dev/":[{"text":"\u7B80\u4ECB","link":"/zh/dev/"},"/zh/dev/doc","/zh/dev/dev","/zh/dev/require"]},"repo":"https://github.com/rxliuli/joplin-utils","docsBranch":"master","docsDir":"/website/docs","editLinkText":"\u5728 GitHub \u4E0A\u7F16\u8F91\u6B64\u9875","lastUpdatedText":"\u4E0A\u6B21\u66F4\u65B0","contributorsText":"\u8D21\u732E\u8005"}},"colorMode":"auto","colorModeSwitch":true,"navbar":[],"logo":null,"repo":null,"selectLanguageText":"Languages","selectLanguageAriaLabel":"Select language","sidebar":"auto","sidebarDepth":2,"editLink":true,"editLinkText":"Edit this page","lastUpdated":true,"lastUpdatedText":"Last Updated","contributors":true,"contributorsText":"Contributors","notFound":["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],"backToHome":"Take me home","openInNewWindow":"open in new window","toggleColorMode":"toggle color mode","toggleSidebar":"toggle sidebar"}`),Es=be(sf),af=()=>Es;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updateThemeData=e=>{Es.value=e});const ks=Symbol(""),cf=()=>{const e=$e(ks);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},uf=(e,t)=>{var n;return{...e,...(n=e.locales)==null?void 0:n[t]}},df=wt({enhance({app:e}){const t=af(),n=e._context.provides[zr],o=V(()=>uf(t.value,n.value));e.provide(ks,o),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return o.value}}})}}),ff=he({__name:"Badge",props:{type:{type:String,required:!1,default:"tip"},text:{type:String,required:!1,default:""},vertical:{type:String,required:!1,default:void 0}},setup(e){return(t,n)=>(F(),Z("span",{class:Qe(["badge",e.type]),style:zn({verticalAlign:e.vertical})},[ke(t.$slots,"default",{},()=>[zt(Se(e.text),1)])],6))}}),Te=(e,t)=>{const n=e.__vccOpts||e;for(const[o,r]of t)n[o]=r;return n},hf=Te(ff,[["__file","Badge.vue"]]),pf=he({name:"CodeGroup",setup(e,{slots:t}){const n=be(-1),o=be([]),r=(s=n.value)=>{s{s>0?n.value=s-1:n.value=o.value.length-1,o.value[n.value].focus()},l=(s,a)=>{s.key===" "||s.key==="Enter"?(s.preventDefault(),n.value=a):s.key==="ArrowRight"?(s.preventDefault(),r(a)):s.key==="ArrowLeft"&&(s.preventDefault(),i(a))};return()=>{var a;const s=(((a=t.default)==null?void 0:a.call(t))||[]).filter(c=>c.type.name==="CodeGroupItem").map(c=>(c.props===null&&(c.props={}),c));return s.length===0?null:(n.value<0||n.value>s.length-1?(n.value=s.findIndex(c=>c.props.active===""||c.props.active===!0),n.value===-1&&(n.value=0)):s.forEach((c,u)=>{c.props.active=u===n.value}),de("div",{class:"code-group"},[de("div",{class:"code-group__nav"},de("ul",{class:"code-group__ul"},s.map((c,u)=>{const f=u===n.value;return de("li",{class:"code-group__li"},de("button",{ref:h=>{h&&(o.value[u]=h)},class:{"code-group__nav-tab":!0,"code-group__nav-tab-active":f},ariaPressed:f,ariaExpanded:f,onClick:()=>n.value=u,onKeydown:h=>l(h,u)},c.props.title))}))),s]))}}}),mf=["aria-selected"],gf=he({name:"CodeGroupItem"}),vf=he({...gf,props:{title:{type:String,required:!0},active:{type:Boolean,required:!1,default:!1}},setup(e){return(t,n)=>(F(),Z("div",{class:Qe(["code-group-item",{"code-group-item__active":e.active}]),"aria-selected":e.active},[ke(t.$slots,"default")],10,mf))}}),_f=Te(vf,[["__file","CodeGroupItem.vue"]]);var Wi;const xs=typeof window<"u",bf=e=>typeof e=="function",yf=e=>typeof e=="string",Vo=()=>{};xs&&((Wi=window==null?void 0:window.navigator)==null?void 0:Wi.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function po(e){return typeof e=="function"?e():A(e)}function wf(e,t){function n(...o){e(()=>t.apply(this,o),{fn:t,thisArg:this,args:o})}return n}const Ls=e=>e();function Ef(e=Ls){const t=be(!0);function n(){t.value=!1}function o(){t.value=!0}return{isActive:t,pause:n,resume:o,eventFilter:(...i)=>{t.value&&e(...i)}}}function kf(e){return e}function Cs(e){return ca()?(ua(e),!0):!1}function xf(e){return typeof e=="function"?V(e):be(e)}function Lf(e,t=!0){es()?Ye(e):t?e():Eo(e)}function Cf(e=!1,t={}){const{truthyValue:n=!0,falsyValue:o=!1}=t,r=Ie(e),i=be(e);function l(s){if(arguments.length)return i.value=s,i.value;{const a=po(n);return i.value=i.value===a?po(o):a,i.value}}return r?l:[i,l]}var Qi=Object.getOwnPropertySymbols,Tf=Object.prototype.hasOwnProperty,Pf=Object.prototype.propertyIsEnumerable,Of=(e,t)=>{var n={};for(var o in e)Tf.call(e,o)&&t.indexOf(o)<0&&(n[o]=e[o]);if(e!=null&&Qi)for(var o of Qi(e))t.indexOf(o)<0&&Pf.call(e,o)&&(n[o]=e[o]);return n};function Af(e,t,n={}){const o=n,{eventFilter:r=Ls}=o,i=Of(o,["eventFilter"]);return ut(e,wf(r,t),i)}var Rf=Object.defineProperty,Sf=Object.defineProperties,jf=Object.getOwnPropertyDescriptors,mo=Object.getOwnPropertySymbols,Ts=Object.prototype.hasOwnProperty,Ps=Object.prototype.propertyIsEnumerable,Gi=(e,t,n)=>t in e?Rf(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,If=(e,t)=>{for(var n in t||(t={}))Ts.call(t,n)&&Gi(e,n,t[n]);if(mo)for(var n of mo(t))Ps.call(t,n)&&Gi(e,n,t[n]);return e},$f=(e,t)=>Sf(e,jf(t)),zf=(e,t)=>{var n={};for(var o in e)Ts.call(e,o)&&t.indexOf(o)<0&&(n[o]=e[o]);if(e!=null&&mo)for(var o of mo(e))t.indexOf(o)<0&&Ps.call(e,o)&&(n[o]=e[o]);return n};function Df(e,t,n={}){const o=n,{eventFilter:r}=o,i=zf(o,["eventFilter"]),{eventFilter:l,pause:s,resume:a,isActive:c}=Ef(r);return{stop:Af(e,t,$f(If({},i),{eventFilter:l})),pause:s,resume:a,isActive:c}}function Mf(e){var t;const n=po(e);return(t=n==null?void 0:n.$el)!=null?t:n}const go=xs?window:void 0;function Nf(...e){let t,n,o,r;if(yf(e[0])?([n,o,r]=e,t=go):[t,n,o,r]=e,!t)return Vo;let i=Vo;const l=ut(()=>Mf(t),a=>{i(),a&&(a.addEventListener(n,o,r),i=()=>{a.removeEventListener(n,o,r),i=Vo})},{immediate:!0,flush:"post"}),s=()=>{l(),i()};return Cs(s),s}function Ff(e,t=!1){const n=be(),o=()=>n.value=Boolean(e());return o(),Lf(o,t),n}function Hf(e,t={}){const{window:n=go}=t,o=Ff(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let r;const i=be(!1),l=()=>{!r||("removeEventListener"in r?r.removeEventListener("change",s):r.removeListener(s))},s=()=>{!o.value||(l(),r=n.matchMedia(xf(e).value),i.value=r.matches,"addEventListener"in r?r.addEventListener("change",s):r.addListener(s))};return ec(s),Cs(()=>l()),i}const ar=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},cr="__vueuse_ssr_handlers__";ar[cr]=ar[cr]||{};const Bf=ar[cr];function Vf(e,t){return Bf[e]||t}function Uf(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"||Array.isArray(e)?"object":Number.isNaN(e)?"any":"number"}var qf=Object.defineProperty,Ji=Object.getOwnPropertySymbols,Kf=Object.prototype.hasOwnProperty,Wf=Object.prototype.propertyIsEnumerable,Yi=(e,t,n)=>t in e?qf(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Zi=(e,t)=>{for(var n in t||(t={}))Kf.call(t,n)&&Yi(e,n,t[n]);if(Ji)for(var n of Ji(t))Wf.call(t,n)&&Yi(e,n,t[n]);return e};const Qf={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}};function Gf(e,t,n,o={}){var r;const{flush:i="pre",deep:l=!0,listenToStorageChanges:s=!0,writeDefaults:a=!0,mergeDefaults:c=!1,shallow:u,window:f=go,eventFilter:h,onError:m=O=>{console.error(O)}}=o,b=(u?Tl:be)(t);if(!n)try{n=Vf("getDefaultStorage",()=>{var O;return(O=go)==null?void 0:O.localStorage})()}catch(O){m(O)}if(!n)return b;const w=po(t),k=Uf(w),g=(r=o.serializer)!=null?r:Qf[k],{pause:_,resume:C}=Df(b,()=>$(b.value),{flush:i,deep:l,eventFilter:h});return f&&s&&Nf(f,"storage",X),X(),b;function $(O){try{O==null?n.removeItem(e):n.setItem(e,g.write(O))}catch(v){m(v)}}function q(O){if(!(O&&O.key!==e)){_();try{const v=O?O.newValue:n.getItem(e);if(v==null)return a&&w!==null&&n.setItem(e,g.write(w)),w;if(!O&&c){const G=g.read(v);return bf(c)?c(G,w):k==="object"&&!Array.isArray(G)?Zi(Zi({},w),G):G}else return typeof v!="string"?v:g.read(v)}catch(v){m(v)}finally{C()}}}function X(O){O&&O.key!==e||(b.value=q(O))}}function Jf(e){return Hf("(prefers-color-scheme: dark)",e)}var Xi;(function(e){e.UP="UP",e.RIGHT="RIGHT",e.DOWN="DOWN",e.LEFT="LEFT",e.NONE="NONE"})(Xi||(Xi={}));var Yf=Object.defineProperty,el=Object.getOwnPropertySymbols,Zf=Object.prototype.hasOwnProperty,Xf=Object.prototype.propertyIsEnumerable,tl=(e,t,n)=>t in e?Yf(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,eh=(e,t)=>{for(var n in t||(t={}))Zf.call(t,n)&&tl(e,n,t[n]);if(el)for(var n of el(t))Xf.call(t,n)&&tl(e,n,t[n]);return e};const th={easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]};eh({linear:kf},th);const Ue=()=>cf(),Os=Symbol(""),Sr=()=>{const e=$e(Os);if(!e)throw new Error("useDarkMode() is called without provider.");return e},nh=()=>{const e=Ue(),t=Jf(),n=Gf("vuepress-color-scheme",e.value.colorMode),o=V({get(){return e.value.colorModeSwitch?n.value==="auto"?t.value:n.value==="dark":e.value.colorMode==="dark"},set(r){r===t.value?n.value="auto":n.value=r?"dark":"light"}});Gt(Os,o),oh(o)},oh=e=>{const t=(n=e.value)=>{const o=window==null?void 0:window.document.querySelector("html");o==null||o.classList.toggle("dark",n)};Ye(()=>{ut(e,t,{immediate:!0})}),Co(()=>t())},As=(...e)=>{const n=Zt().resolve(...e),o=n.matched[n.matched.length-1];if(!(o!=null&&o.redirect))return n;const{redirect:r}=o,i=ie(r)?r(n):r,l=_e(i)?{path:i}:i;return As({hash:n.hash,query:n.query,params:n.params,...l})},jr=e=>{const t=As(encodeURI(e));return{text:t.meta.title||e,link:t.name==="404"?e:t.fullPath}};let Uo=null,En=null;const rh={wait:()=>Uo,pending:()=>{Uo=new Promise(e=>En=e)},resolve:()=>{En==null||En(),Uo=null,En=null}},Rs=()=>rh,Ss=Symbol("sidebarItems"),Ir=()=>{const e=$e(Ss);if(!e)throw new Error("useSidebarItems() is called without provider.");return e},ih=()=>{const e=Ue(),t=vt(),n=V(()=>lh(t.value,e.value));Gt(Ss,n)},lh=(e,t)=>{var r,i,l,s;const n=(i=(r=e.sidebar)!=null?r:t.sidebar)!=null?i:"auto",o=(s=(l=e.sidebarDepth)!=null?l:t.sidebarDepth)!=null?s:2;return e.home||n===!1?[]:n==="auto"?ah(o):ee(n)?js(n,o):Pr(n)?ch(n,o):[]},sh=(e,t)=>({text:e.title,link:e.link,children:$r(e.children,t)}),$r=(e,t)=>t>0?e.map(n=>sh(n,t-1)):[],ah=e=>{const t=St();return[{text:t.value.title,children:$r(t.value.headers,e)}]},js=(e,t)=>{const n=Dt(),o=St(),r=i=>{var s;let l;if(_e(i)?l=jr(i):l=i,l.children)return{...l,children:l.children.map(a=>r(a))};if(l.link===n.path){const a=((s=o.value.headers[0])==null?void 0:s.level)===1?o.value.headers[0].children:o.value.headers;return{...l,children:$r(a,t)}}return l};return e.map(i=>r(i))},ch=(e,t)=>{var i;const n=Dt(),o=ss(e,n.path),r=(i=e[o])!=null?i:[];return js(r,t)},uh={},dh={class:"theme-default-content"};function fh(e,t){const n=bt("Content");return F(),Z("div",dh,[ne(n)])}const hh=Te(uh,[["render",fh],["__file","HomeContent.vue"]]),ph={key:0,class:"features"},mh=he({__name:"HomeFeatures",setup(e){const t=vt(),n=V(()=>ee(t.value.features)?t.value.features:[]);return(o,r)=>A(n).length?(F(),Z("div",ph,[(F(!0),Z(xe,null,It(A(n),i=>(F(),Z("div",{key:i.title,class:"feature"},[me("h2",null,Se(i.title),1),me("p",null,Se(i.details),1)]))),128))])):Pe("v-if",!0)}}),gh=Te(mh,[["__file","HomeFeatures.vue"]]),vh=["innerHTML"],_h=["textContent"],bh=he({__name:"HomeFooter",setup(e){const t=vt(),n=V(()=>t.value.footer),o=V(()=>t.value.footerHtml);return(r,i)=>A(n)?(F(),Z(xe,{key:0},[Pe(" eslint-disable-next-line vue/no-v-html "),A(o)?(F(),Z("div",{key:0,class:"footer",innerHTML:A(n)},null,8,vh)):(F(),Z("div",{key:1,class:"footer",textContent:Se(A(n))},null,8,_h))],64)):Pe("v-if",!0)}}),yh=Te(bh,[["__file","HomeFooter.vue"]]),wh=["href","rel","target","aria-label"],Eh=he({inheritAttrs:!1}),kh=he({...Eh,__name:"AutoLink",props:{item:{type:Object,required:!0}},setup(e){const t=e,n=Dt(),o=Us(),{item:r}=wo(t),i=V(()=>Bn(r.value.link)),l=V(()=>Tu(r.value.link)||Pu(r.value.link)),s=V(()=>{if(!l.value){if(r.value.target)return r.value.target;if(i.value)return"_blank"}}),a=V(()=>s.value==="_blank"),c=V(()=>!i.value&&!l.value&&!a.value),u=V(()=>{if(!l.value){if(r.value.rel)return r.value.rel;if(a.value)return"noopener noreferrer"}}),f=V(()=>r.value.ariaLabel||r.value.text),h=V(()=>{const w=Object.keys(o.value.locales);return w.length?!w.some(k=>k===r.value.link):r.value.link!=="/"}),m=V(()=>h.value?n.path.startsWith(r.value.link):!1),b=V(()=>c.value?r.value.activeMatch?new RegExp(r.value.activeMatch).test(n.path):m.value:!1);return(w,k)=>{const g=bt("RouterLink"),_=bt("AutoLinkExternalIcon");return A(c)?(F(),Ae(g,nr({key:0,class:{"router-link-active":A(b)},to:A(r).link,"aria-label":A(f)},w.$attrs),{default:ze(()=>[ke(w.$slots,"before"),zt(" "+Se(A(r).text)+" ",1),ke(w.$slots,"after")]),_:3},16,["class","to","aria-label"])):(F(),Z("a",nr({key:1,class:"external-link",href:A(r).link,rel:A(u),target:A(s),"aria-label":A(f)},w.$attrs),[ke(w.$slots,"before"),zt(" "+Se(A(r).text)+" ",1),A(a)?(F(),Ae(_,{key:0})):Pe("v-if",!0),ke(w.$slots,"after")],16,wh))}}}),gt=Te(kh,[["__file","AutoLink.vue"]]),xh={class:"hero"},Lh={key:0,id:"main-title"},Ch={key:1,class:"description"},Th={key:2,class:"actions"},Ph=he({__name:"HomeHero",setup(e){const t=vt(),n=Dr(),o=Sr(),r=V(()=>o.value&&t.value.heroImageDark!==void 0?t.value.heroImageDark:t.value.heroImage),i=V(()=>t.value.heroText===null?null:t.value.heroText||n.value.title||"Hello"),l=V(()=>t.value.heroAlt||i.value||"hero"),s=V(()=>t.value.tagline===null?null:t.value.tagline||n.value.description||"Welcome to your VuePress site"),a=V(()=>ee(t.value.actions)?t.value.actions.map(({text:u,link:f,type:h="primary"})=>({text:u,link:f,type:h})):[]),c=()=>{if(!r.value)return null;const u=de("img",{src:Nr(r.value),alt:l.value});return t.value.heroImageDark===void 0?u:de(Mr,()=>u)};return(u,f)=>(F(),Z("header",xh,[ne(c),A(i)?(F(),Z("h1",Lh,Se(A(i)),1)):Pe("v-if",!0),A(s)?(F(),Z("p",Ch,Se(A(s)),1)):Pe("v-if",!0),A(a).length?(F(),Z("p",Th,[(F(!0),Z(xe,null,It(A(a),h=>(F(),Ae(gt,{key:h.text,class:Qe(["action-button",[h.type]]),item:h},null,8,["class","item"]))),128))])):Pe("v-if",!0)]))}}),Oh=Te(Ph,[["__file","HomeHero.vue"]]),Ah={class:"home"},Rh=he({__name:"Home",setup(e){return(t,n)=>(F(),Z("main",Ah,[ne(Oh),ne(gh),ne(hh),ne(yh)]))}}),Sh=Te(Rh,[["__file","Home.vue"]]),jh=he({__name:"NavbarBrand",setup(e){const t=Vn(),n=Dr(),o=Ue(),r=Sr(),i=V(()=>o.value.home||t.value),l=V(()=>n.value.title),s=V(()=>r.value&&o.value.logoDark!==void 0?o.value.logoDark:o.value.logo),a=()=>{if(!s.value)return null;const c=de("img",{class:"logo",src:Nr(s.value),alt:l.value});return o.value.logoDark===void 0?c:de(Mr,()=>c)};return(c,u)=>{const f=bt("RouterLink");return F(),Ae(f,{to:A(i)},{default:ze(()=>[ne(a),A(l)?(F(),Z("span",{key:0,class:Qe(["site-name",{"can-hide":A(s)}])},Se(A(l)),3)):Pe("v-if",!0)]),_:1},8,["to"])}}}),Ih=Te(jh,[["__file","NavbarBrand.vue"]]),$h=he({__name:"DropdownTransition",setup(e){const t=o=>{o.style.height=o.scrollHeight+"px"},n=o=>{o.style.height=""};return(o,r)=>(F(),Ae(Hn,{name:"dropdown",onEnter:t,onAfterEnter:n,onBeforeLeave:t},{default:ze(()=>[ke(o.$slots,"default")]),_:3}))}}),Is=Te($h,[["__file","DropdownTransition.vue"]]),zh=["aria-label"],Dh={class:"title"},Mh=me("span",{class:"arrow down"},null,-1),Nh=["aria-label"],Fh={class:"title"},Hh={class:"navbar-dropdown"},Bh={class:"navbar-dropdown-subtitle"},Vh={key:1},Uh={class:"navbar-dropdown-subitem-wrapper"},qh=he({__name:"NavbarDropdown",props:{item:{type:Object,required:!0}},setup(e){const t=e,{item:n}=wo(t),o=V(()=>n.value.ariaLabel||n.value.text),r=be(!1),i=Dt();ut(()=>i.path,()=>{r.value=!1});const l=a=>{a.detail===0?r.value=!r.value:r.value=!1},s=(a,c)=>c[c.length-1]===a;return(a,c)=>(F(),Z("div",{class:Qe(["navbar-dropdown-wrapper",{open:r.value}])},[me("button",{class:"navbar-dropdown-title",type:"button","aria-label":A(o),onClick:l},[me("span",Dh,Se(A(n).text),1),Mh],8,zh),me("button",{class:"navbar-dropdown-title-mobile",type:"button","aria-label":A(o),onClick:c[0]||(c[0]=u=>r.value=!r.value)},[me("span",Fh,Se(A(n).text),1),me("span",{class:Qe(["arrow",r.value?"down":"right"])},null,2)],8,Nh),ne(Is,null,{default:ze(()=>[lo(me("ul",Hh,[(F(!0),Z(xe,null,It(A(n).children,u=>(F(),Z("li",{key:u.text,class:"navbar-dropdown-item"},[u.children?(F(),Z(xe,{key:0},[me("h4",Bh,[u.link?(F(),Ae(gt,{key:0,item:u,onFocusout:f=>s(u,A(n).children)&&u.children.length===0&&(r.value=!1)},null,8,["item","onFocusout"])):(F(),Z("span",Vh,Se(u.text),1))]),me("ul",Uh,[(F(!0),Z(xe,null,It(u.children,f=>(F(),Z("li",{key:f.link,class:"navbar-dropdown-subitem"},[ne(gt,{item:f,onFocusout:h=>s(f,u.children)&&s(u,A(n).children)&&(r.value=!1)},null,8,["item","onFocusout"])]))),128))])],64)):(F(),Ae(gt,{key:1,item:u,onFocusout:f=>s(u,A(n).children)&&(r.value=!1)},null,8,["item","onFocusout"]))]))),128))],512),[[fo,r.value]])]),_:1})],2))}}),Kh=Te(qh,[["__file","NavbarDropdown.vue"]]),nl=e=>decodeURI(e).replace(/#.*$/,"").replace(/(index)?\.(md|html)$/,""),Wh=(e,t)=>{if(t.hash===e)return!0;const n=nl(t.path),o=nl(e);return n===o},$s=(e,t)=>e.link&&Wh(e.link,t)?!0:e.children?e.children.some(n=>$s(n,t)):!1,zs=e=>!Bn(e)||/github\.com/.test(e)?"GitHub":/bitbucket\.org/.test(e)?"Bitbucket":/gitlab\.com/.test(e)?"GitLab":/gitee\.com/.test(e)?"Gitee":null,Qh={GitHub:":repo/edit/:branch/:path",GitLab:":repo/-/edit/:branch/:path",Gitee:":repo/edit/:branch/:path",Bitbucket:":repo/src/:branch/:path?mode=edit&spa=0&at=:branch&fileviewer=file-view-default"},Gh=({docsRepo:e,editLinkPattern:t})=>{if(t)return t;const n=zs(e);return n!==null?Qh[n]:null},Jh=({docsRepo:e,docsBranch:t,docsDir:n,filePathRelative:o,editLinkPattern:r})=>{if(!o)return null;const i=Gh({docsRepo:e,editLinkPattern:r});return i?i.replace(/:repo/,Bn(e)?e:`https://github.com/${e}`).replace(/:branch/,t).replace(/:path/,ls(`${is(n)}/${o}`)):null},Yh={key:0,class:"navbar-items"},Zh=he({__name:"NavbarItems",setup(e){const t=()=>{const c=Zt(),u=Vn(),f=Dr(),h=Ue();return V(()=>{var _,C,$;const m=Object.keys(f.value.locales);if(m.length<2)return[];const b=c.currentRoute.value.path,w=c.currentRoute.value.fullPath,k=c.currentRoute.value.hash;return[{text:(_=h.value.selectLanguageText)!=null?_:"unknown language",ariaLabel:($=(C=h.value.selectLanguageAriaLabel)!=null?C:h.value.selectLanguageText)!=null?$:"unknown language",children:m.map(q=>{var Q,L,I,R,se,B;const X=(L=(Q=f.value.locales)==null?void 0:Q[q])!=null?L:{},O=(R=(I=h.value.locales)==null?void 0:I[q])!=null?R:{},v=`${X.lang}`,G=(se=O.selectLanguageName)!=null?se:v;let H;if(v===f.value.lang)H=w;else{const te=b.replace(u.value,q);c.getRoutes().some(re=>re.path===te)?H=`${te}${k}`:H=(B=O.home)!=null?B:q}return{text:G,link:H}})}]})},n=()=>{const c=Ue(),u=V(()=>c.value.repo),f=V(()=>u.value?zs(u.value):null),h=V(()=>u.value&&!Bn(u.value)?`https://github.com/${u.value}`:u.value),m=V(()=>h.value?c.value.repoLabel?c.value.repoLabel:f.value===null?"Source":f.value:null);return V(()=>!h.value||!m.value?[]:[{text:m.value,link:h.value}])},o=c=>_e(c)?jr(c):c.children?{...c,children:c.children.map(o)}:c,i=(()=>{const c=Ue();return V(()=>(c.value.navbar||[]).map(o))})(),l=t(),s=n(),a=V(()=>[...i.value,...l.value,...s.value]);return(c,u)=>A(a).length?(F(),Z("nav",Yh,[(F(!0),Z(xe,null,It(A(a),f=>(F(),Z("div",{key:f.text,class:"navbar-item"},[f.children?(F(),Ae(Kh,{key:0,item:f},null,8,["item"])):(F(),Ae(gt,{key:1,item:f},null,8,["item"]))]))),128))])):Pe("v-if",!0)}}),Ds=Te(Zh,[["__file","NavbarItems.vue"]]),Xh=["title"],ep={class:"icon",focusable:"false",viewBox:"0 0 32 32"},tp=Dc('',9),np=[tp],op={class:"icon",focusable:"false",viewBox:"0 0 32 32"},rp=me("path",{d:"M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z",fill:"currentColor"},null,-1),ip=[rp],lp=he({__name:"ToggleColorModeButton",setup(e){const t=Ue(),n=Sr(),o=()=>{n.value=!n.value};return(r,i)=>(F(),Z("button",{class:"toggle-color-mode-button",title:A(t).toggleColorMode,onClick:o},[lo((F(),Z("svg",ep,np,512)),[[fo,!A(n)]]),lo((F(),Z("svg",op,ip,512)),[[fo,A(n)]])],8,Xh))}}),sp=Te(lp,[["__file","ToggleColorModeButton.vue"]]),ap=["title"],cp=me("div",{class:"icon","aria-hidden":"true"},[me("span"),me("span"),me("span")],-1),up=[cp],dp=he({__name:"ToggleSidebarButton",emits:["toggle"],setup(e){const t=Ue();return(n,o)=>(F(),Z("div",{class:"toggle-sidebar-button",title:A(t).toggleSidebar,"aria-expanded":"false",role:"button",tabindex:"0",onClick:o[0]||(o[0]=r=>n.$emit("toggle"))},up,8,ap))}}),fp=Te(dp,[["__file","ToggleSidebarButton.vue"]]),hp=he({__name:"Navbar",emits:["toggle-sidebar"],setup(e){const t=Ue(),n=be(null),o=be(null),r=be(0),i=V(()=>r.value?{maxWidth:r.value+"px"}:{});Ye(()=>{const a=l(n.value,"paddingLeft")+l(n.value,"paddingRight"),c=()=>{var u;window.innerWidth<=719?r.value=0:r.value=n.value.offsetWidth-a-(((u=o.value)==null?void 0:u.offsetWidth)||0)};c(),window.addEventListener("resize",c,!1),window.addEventListener("orientationchange",c,!1)});function l(s,a){var f,h,m;const c=(m=(h=(f=s==null?void 0:s.ownerDocument)==null?void 0:f.defaultView)==null?void 0:h.getComputedStyle(s,null))==null?void 0:m[a],u=Number.parseInt(c,10);return Number.isNaN(u)?0:u}return(s,a)=>{const c=bt("NavbarSearch");return F(),Z("header",{ref_key:"navbar",ref:n,class:"navbar"},[ne(fp,{onToggle:a[0]||(a[0]=u=>s.$emit("toggle-sidebar"))}),me("span",{ref_key:"navbarBrand",ref:o},[ne(Ih)],512),me("div",{class:"navbar-items-wrapper",style:zn(A(i))},[ke(s.$slots,"before"),ne(Ds,{class:"can-hide"}),ke(s.$slots,"after"),A(t).colorModeSwitch?(F(),Ae(sp,{key:0})):Pe("v-if",!0),ne(c)],4)],512)}}}),pp=Te(hp,[["__file","Navbar.vue"]]),mp={class:"page-meta"},gp={key:0,class:"meta-item edit-link"},vp={key:1,class:"meta-item last-updated"},_p={class:"meta-item-label"},bp={class:"meta-item-info"},yp={key:2,class:"meta-item contributors"},wp={class:"meta-item-label"},Ep={class:"meta-item-info"},kp=["title"],xp=he({__name:"PageMeta",setup(e){const t=()=>{const a=Ue(),c=St(),u=vt();return V(()=>{var _,C,$;if(!((C=(_=u.value.editLink)!=null?_:a.value.editLink)!=null?C:!0))return null;const{repo:h,docsRepo:m=h,docsBranch:b="main",docsDir:w="",editLinkText:k}=a.value;if(!m)return null;const g=Jh({docsRepo:m,docsBranch:b,docsDir:w,filePathRelative:c.value.filePathRelative,editLinkPattern:($=u.value.editLinkPattern)!=null?$:a.value.editLinkPattern});return g?{text:k!=null?k:"Edit this page",link:g}:null})},n=()=>{const a=Ue(),c=St(),u=vt();return V(()=>{var m,b,w,k;return!((b=(m=u.value.lastUpdated)!=null?m:a.value.lastUpdated)!=null?b:!0)||!((w=c.value.git)!=null&&w.updatedTime)?null:new Date((k=c.value.git)==null?void 0:k.updatedTime).toLocaleString()})},o=()=>{const a=Ue(),c=St(),u=vt();return V(()=>{var h,m,b,w;return((m=(h=u.value.contributors)!=null?h:a.value.contributors)!=null?m:!0)&&(w=(b=c.value.git)==null?void 0:b.contributors)!=null?w:null})},r=Ue(),i=t(),l=n(),s=o();return(a,c)=>{const u=bt("ClientOnly");return F(),Z("footer",mp,[A(i)?(F(),Z("div",gp,[ne(gt,{class:"meta-item-label",item:A(i)},null,8,["item"])])):Pe("v-if",!0),A(l)?(F(),Z("div",vp,[me("span",_p,Se(A(r).lastUpdatedText)+": ",1),ne(u,null,{default:ze(()=>[me("span",bp,Se(A(l)),1)]),_:1})])):Pe("v-if",!0),A(s)&&A(s).length?(F(),Z("div",yp,[me("span",wp,Se(A(r).contributorsText)+": ",1),me("span",Ep,[(F(!0),Z(xe,null,It(A(s),(f,h)=>(F(),Z(xe,{key:h},[me("span",{class:"contributor",title:`email: ${f.email}`},Se(f.name),9,kp),h!==A(s).length-1?(F(),Z(xe,{key:0},[zt(", ")],64)):Pe("v-if",!0)],64))),128))])])):Pe("v-if",!0)])}}}),Lp=Te(xp,[["__file","PageMeta.vue"]]),Cp={key:0,class:"page-nav"},Tp={class:"inner"},Pp={key:0,class:"prev"},Op={key:1,class:"next"},Ap=he({__name:"PageNav",setup(e){const t=a=>a===!1?null:_e(a)?jr(a):Pr(a)?a:!1,n=(a,c,u)=>{const f=a.findIndex(h=>h.link===c);if(f!==-1){const h=a[f+u];return h!=null&&h.link?h:null}for(const h of a)if(h.children){const m=n(h.children,c,u);if(m)return m}return null},o=vt(),r=Ir(),i=Dt(),l=V(()=>{const a=t(o.value.prev);return a!==!1?a:n(r.value,i.path,-1)}),s=V(()=>{const a=t(o.value.next);return a!==!1?a:n(r.value,i.path,1)});return(a,c)=>A(l)||A(s)?(F(),Z("nav",Cp,[me("p",Tp,[A(l)?(F(),Z("span",Pp,[ne(gt,{item:A(l)},null,8,["item"])])):Pe("v-if",!0),A(s)?(F(),Z("span",Op,[ne(gt,{item:A(s)},null,8,["item"])])):Pe("v-if",!0)])])):Pe("v-if",!0)}}),Rp=Te(Ap,[["__file","PageNav.vue"]]),Sp={class:"page"},jp={class:"theme-default-content"},Ip=he({__name:"Page",setup(e){return(t,n)=>{const o=bt("Content");return F(),Z("main",Sp,[ke(t.$slots,"top"),me("div",jp,[ke(t.$slots,"content-top"),ne(o),ke(t.$slots,"content-bottom")]),ne(Lp),ne(Rp),ke(t.$slots,"bottom")])}}}),$p=Te(Ip,[["__file","Page.vue"]]),zp=["onKeydown"],Dp={class:"sidebar-item-children"},Mp=he({__name:"SidebarItem",props:{item:{type:Object,required:!0},depth:{type:Number,required:!1,default:0}},setup(e){const t=e,{item:n,depth:o}=wo(t),r=Dt(),i=Zt(),l=V(()=>$s(n.value,r)),s=V(()=>({"sidebar-item":!0,"sidebar-heading":o.value===0,active:l.value,collapsible:n.value.collapsible})),a=V(()=>n.value.collapsible?l.value:!0),[c,u]=Cf(a.value),f=m=>{n.value.collapsible&&(m.preventDefault(),u())},h=i.afterEach(m=>{Eo(()=>{c.value=a.value})});return Fn(()=>{h()}),(m,b)=>{var k;const w=bt("SidebarItem",!0);return F(),Z("li",null,[A(n).link?(F(),Ae(gt,{key:0,class:Qe(A(s)),item:A(n)},null,8,["class","item"])):(F(),Z("p",{key:1,tabindex:"0",class:Qe(A(s)),onClick:f,onKeydown:bu(f,["enter"])},[zt(Se(A(n).text)+" ",1),A(n).collapsible?(F(),Z("span",{key:0,class:Qe(["arrow",A(c)?"down":"right"])},null,2)):Pe("v-if",!0)],42,zp)),(k=A(n).children)!=null&&k.length?(F(),Ae(Is,{key:2},{default:ze(()=>[lo(me("ul",Dp,[(F(!0),Z(xe,null,It(A(n).children,g=>(F(),Ae(w,{key:`${A(o)}${g.text}${g.link}`,item:g,depth:A(o)+1},null,8,["item","depth"]))),128))],512),[[fo,A(c)]])]),_:1})):Pe("v-if",!0)])}}}),Np=Te(Mp,[["__file","SidebarItem.vue"]]),Fp={key:0,class:"sidebar-items"},Hp=he({__name:"SidebarItems",setup(e){const t=Dt(),n=Ir();return Ye(()=>{ut(()=>t.hash,o=>{const r=document.querySelector(".sidebar");if(!r)return;const i=document.querySelector(`.sidebar a.sidebar-item[href="${t.path}${o}"]`);if(!i)return;const{top:l,height:s}=r.getBoundingClientRect(),{top:a,height:c}=i.getBoundingClientRect();al+s&&i.scrollIntoView(!1)})}),(o,r)=>A(n).length?(F(),Z("ul",Fp,[(F(!0),Z(xe,null,It(A(n),i=>(F(),Ae(Np,{key:`${i.text}${i.link}`,item:i},null,8,["item"]))),128))])):Pe("v-if",!0)}}),Bp=Te(Hp,[["__file","SidebarItems.vue"]]),Vp={class:"sidebar"},Up=he({__name:"Sidebar",setup(e){return(t,n)=>(F(),Z("aside",Vp,[ne(Ds),ke(t.$slots,"top"),ne(Bp),ke(t.$slots,"bottom")]))}}),qp=Te(Up,[["__file","Sidebar.vue"]]),Kp=he({__name:"Layout",setup(e){const t=St(),n=vt(),o=Ue(),r=V(()=>n.value.navbar!==!1&&o.value.navbar!==!1),i=Ir(),l=be(!1),s=k=>{l.value=typeof k=="boolean"?k:!l.value},a={x:0,y:0},c=k=>{a.x=k.changedTouches[0].clientX,a.y=k.changedTouches[0].clientY},u=k=>{const g=k.changedTouches[0].clientX-a.x,_=k.changedTouches[0].clientY-a.y;Math.abs(g)>Math.abs(_)&&Math.abs(g)>40&&(g>0&&a.x<=80?s(!0):s(!1))},f=V(()=>[{"no-navbar":!r.value,"no-sidebar":!i.value.length,"sidebar-open":l.value},n.value.pageClass]);let h;Ye(()=>{h=Zt().afterEach(()=>{s(!1)})}),Co(()=>{h()});const m=Rs(),b=m.resolve,w=m.pending;return(k,g)=>(F(),Z("div",{class:Qe(["theme-container",A(f)]),onTouchstart:c,onTouchend:u},[ke(k.$slots,"navbar",{},()=>[A(r)?(F(),Ae(pp,{key:0,onToggleSidebar:s},{before:ze(()=>[ke(k.$slots,"navbar-before")]),after:ze(()=>[ke(k.$slots,"navbar-after")]),_:3})):Pe("v-if",!0)]),me("div",{class:"sidebar-mask",onClick:g[0]||(g[0]=_=>s(!1))}),ke(k.$slots,"sidebar",{},()=>[ne(qp,null,{top:ze(()=>[ke(k.$slots,"sidebar-top")]),bottom:ze(()=>[ke(k.$slots,"sidebar-bottom")]),_:3})]),ke(k.$slots,"page",{},()=>[A(n).home?(F(),Ae(Sh,{key:0})):(F(),Ae(Hn,{key:1,name:"fade-slide-y",mode:"out-in",onBeforeEnter:A(b),onBeforeLeave:A(w)},{default:ze(()=>[(F(),Ae($p,{key:A(t).path},{top:ze(()=>[ke(k.$slots,"page-top")]),"content-top":ze(()=>[ke(k.$slots,"page-content-top")]),"content-bottom":ze(()=>[ke(k.$slots,"page-content-bottom")]),bottom:ze(()=>[ke(k.$slots,"page-bottom")]),_:3}))]),_:3},8,["onBeforeEnter","onBeforeLeave"]))])],34))}}),Wp=Te(Kp,[["__file","Layout.vue"]]),Qp={class:"theme-container"},Gp={class:"page"},Jp={class:"theme-default-content"},Yp=me("h1",null,"404",-1),Zp=he({__name:"NotFound",setup(e){var s,a,c;const t=Vn(),n=Ue(),o=(s=n.value.notFound)!=null?s:["Not Found"],r=()=>o[Math.floor(Math.random()*o.length)],i=(a=n.value.home)!=null?a:t.value,l=(c=n.value.backToHome)!=null?c:"Back to home";return(u,f)=>{const h=bt("RouterLink");return F(),Z("div",Qp,[me("main",Gp,[me("div",Jp,[Yp,me("blockquote",null,Se(r()),1),ne(h,{to:A(i)},{default:ze(()=>[zt(Se(A(l)),1)]),_:1},8,["to"])])])])}}}),Xp=Te(Zp,[["__file","NotFound.vue"]]);const em=wt({enhance({app:e,router:t}){e.component("Badge",hf),e.component("CodeGroup",pf),e.component("CodeGroupItem",_f),e.component("AutoLinkExternalIcon",()=>{const o=e.component("ExternalLinkIcon");return o?de(o):null}),e.component("NavbarSearch",()=>{const o=e.component("Docsearch")||e.component("SearchBox");return o?de(o):null});const n=t.options.scrollBehavior;t.options.scrollBehavior=async(...o)=>(await Rs().wait(),n(...o))},setup(){nh(),ih()},layouts:{Layout:Wp,NotFound:Xp}}),tm=(e,t)=>t.some(n=>{if(_e(n))return n===e.key;const{key:o,ctrl:r=!1,shift:i=!1,alt:l=!1}=n;return o===e.key&&r===e.ctrlKey&&i===e.shiftKey&&l===e.altKey}),nm=/[^\x00-\x7F]/,om=e=>e.split(/\s+/g).map(t=>t.trim()).filter(t=>!!t),ol=e=>e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),rl=(e,t)=>{const n=t.join(" "),o=om(e);if(nm.test(e))return o.some(l=>n.toLowerCase().indexOf(l)>-1);const r=e.endsWith(" ");return new RegExp(o.map((l,s)=>o.length===s+1&&!r?`(?=.*\\b${ol(l)})`:`(?=.*\\b${ol(l)}\\b)`).join("")+".+","gi").test(n)},rm=({input:e,hotKeys:t})=>{if(t.value.length===0)return;const n=o=>{!e.value||tm(o,t.value)&&!e.value.contains(o.target)&&(o.preventDefault(),e.value.focus())};Ye(()=>{document.addEventListener("keydown",n)}),Fn(()=>{document.removeEventListener("keydown",n)})},im=[{title:"",headers:[],path:"/",pathLocale:"/",extraFields:[]},{title:"Development",headers:[{level:2,title:"Main technology stack",slug:"main-technology-stack",link:"#main-technology-stack",children:[]},{level:2,title:"Initialize the project",slug:"initialize-the-project",link:"#initialize-the-project",children:[]},{level:2,title:"joplin-vscode-plugin",slug:"joplin-vscode-plugin",link:"#joplin-vscode-plugin",children:[]},{level:2,title:"joplin-batch-web",slug:"joplin-batch-web",link:"#joplin-batch-web",children:[]},{level:2,title:"refer to",slug:"refer-to",link:"#refer-to",children:[]}],path:"/dev/dev.html",pathLocale:"/",extraFields:[]},{title:"Documentation",headers:[{level:2,title:"Setting up the local environment",slug:"setting-up-the-local-environment",link:"#setting-up-the-local-environment",children:[]},{level:2,title:"Adding document translations",slug:"adding-document-translations",link:"#adding-document-translations",children:[]}],path:"/dev/doc.html",pathLocale:"/",extraFields:[]},{title:"Getting involved",headers:[{level:2,title:"Introduction",slug:"introduction",link:"#introduction",children:[]},{level:2,title:"How to contribute",slug:"how-to-contribute",link:"#how-to-contribute",children:[]}],path:"/dev/",pathLocale:"/",extraFields:[]},{title:"Required dependencies",headers:[{level:2,title:"Install nodejs",slug:"install-nodejs",link:"#install-nodejs",children:[]},{level:2,title:"Install pnpm",slug:"install-pnpm",link:"#install-pnpm",children:[]},{level:2,title:"Register on GitHub",slug:"register-on-github",link:"#register-on-github",children:[]},{level:2,title:"Install git",slug:"install-git",link:"#install-git",children:[]}],path:"/dev/require.html",pathLocale:"/",extraFields:[]},{title:"joplin api",headers:[{level:2,title:"Introduction",slug:"introduction",link:"#introduction",children:[]},{level:2,title:"Quick Start",slug:"quick-start",link:"#quick-start",children:[]},{level:2,title:"API Reference",slug:"api-reference",link:"#api-reference",children:[]},{level:2,title:"Conventional name",slug:"conventional-name",link:"#conventional-name",children:[]}],path:"/joplin-api/",pathLocale:"/",extraFields:[]},{title:"Other functions",headers:[{level:2,title:"Convert external links to internal note references",slug:"convert-external-links-to-internal-note-references",link:"#convert-external-links-to-internal-note-references",children:[]}],path:"/joplin-batch-web/feature.html",pathLocale:"/",extraFields:[]},{title:"joplin-batch-web",headers:[{level:2,title:"Getting Started",slug:"getting-started",link:"#getting-started",children:[]},{level:2,title:"FAQ",slug:"faq",link:"#faq",children:[{level:3,title:"Why not use the cli form",slug:"why-not-use-the-cli-form",link:"#why-not-use-the-cli-form",children:[]},{level:3,title:"Will it record my note data",slug:"will-it-record-my-note-data",link:"#will-it-record-my-note-data",children:[]}]}],path:"/joplin-batch-web/",pathLocale:"/",extraFields:[]},{title:"Privacy Policy",headers:[{level:2,title:"Summary",slug:"summary",link:"#summary",children:[]},{level:2,title:"Data Storage",slug:"data-storage",link:"#data-storage",children:[]},{level:2,title:"Data Collection",slug:"data-collection",link:"#data-collection",children:[]},{level:2,title:"Contact",slug:"contact",link:"#contact",children:[]}],path:"/joplin-search-integration/privacy.html",pathLocale:"/",extraFields:[]},{title:"Joplin Search Integration",headers:[{level:2,title:"Introduction",slug:"introduction",link:"#introduction",children:[]},{level:2,title:"FAQ",slug:"faq",link:"#faq",children:[{level:3,title:"What does token/port refer to and where can I find it?",slug:"what-does-token-port-refer-to-and-where-can-i-find-it",link:"#what-does-token-port-refer-to-and-where-can-i-find-it",children:[]},{level:3,title:"No search results in Brave browser",slug:"no-search-results-in-brave-browser",link:"#no-search-results-in-brave-browser",children:[]}]},{level:2,title:"Contribute",slug:"contribute",link:"#contribute",children:[]}],path:"/joplin-search-integration/",pathLocale:"/",extraFields:[]},{title:"Quick start",headers:[{level:2,title:"Overview",slug:"overview",link:"#overview",children:[]},{level:2,title:"Requirements",slug:"requirements",link:"#requirements",children:[]},{level:2,title:"Install Joplin VSCode plugin",slug:"install-joplin-vscode-plugin",link:"#install-joplin-vscode-plugin",children:[]},{level:2,title:"Configure",slug:"configure",link:"#configure",children:[]},{level:2,title:"Restart VSCode",slug:"restart-vscode",link:"#restart-vscode",children:[]},{level:2,title:"Say Hello Joplin",slug:"say-hello-joplin",link:"#say-hello-joplin",children:[]},{level:2,title:"Usage",slug:"usage",link:"#usage",children:[]},{level:2,title:"Commands and keybindings",slug:"commands-and-keybindings",link:"#commands-and-keybindings",children:[]}],path:"/joplin-vscode-plugin/",pathLocale:"/",extraFields:[]},{title:"",headers:[],path:"/zh/",pathLocale:"/zh/",extraFields:[]},{title:"FAQ",headers:[{level:2,title:"Show error message Joplin's token/port is set incorrectly, unable to access Joplin service!",slug:"show-error-message-joplin-s-token-port-is-set-incorrectly-unable-to-access-joplin-service",link:"#show-error-message-joplin-s-token-port-is-set-incorrectly-unable-to-access-joplin-service",children:[]},{level:2,title:"Not opened in VSCode after clicking",slug:"not-opened-in-vscode-after-clicking",link:"#not-opened-in-vscode-after-clicking",children:[]},{level:2,title:"How to list joplin notes opened by VSCode",slug:"how-to-list-joplin-notes-opened-by-vscode",link:"#how-to-list-joplin-notes-opened-by-vscode",children:[]},{level:2,title:"No list displayed in the sidebar",slug:"no-list-displayed-in-the-sidebar",link:"#no-list-displayed-in-the-sidebar",children:[]},{level:2,title:"Clicking on the sidebar fails to open the note",slug:"clicking-on-the-sidebar-fails-to-open-the-note",link:"#clicking-on-the-sidebar-fails-to-open-the-note",children:[]},{level:2,title:"Windows 10 cannot upload a cut version of the picture",slug:"windows-10-cannot-upload-a-cut-version-of-the-picture",link:"#windows-10-cannot-upload-a-cut-version-of-the-picture",children:[]},{level:2,title:"How to use plugins in two synchronized vscode configurations",slug:"how-to-use-plugins-in-two-synchronized-vscode-configurations",link:"#how-to-use-plugins-in-two-synchronized-vscode-configurations",children:[]},{level:2,title:"markdown preview can't display images",slug:"markdown-preview-can-t-display-images",link:"#markdown-preview-can-t-display-images",children:[]},{level:2,title:"Incompatible Plugin Markdown Preview Enhanced",slug:"incompatible-plugin-markdown-preview-enhanced",link:"#incompatible-plugin-markdown-preview-enhanced",children:[]}],path:"/joplin-vscode-plugin/guide/faq.html",pathLocale:"/",extraFields:[]},{title:"Other features",headers:[{level:2,title:"Configuration table",slug:"configuration-table",link:"#configuration-table",children:[]},{level:2,title:"Hot key",slug:"hot-key",link:"#hot-key",children:[]},{level:2,title:"Editing attachments",slug:"editing-attachments",link:"#editing-attachments",children:[]},{level:2,title:"Paste the image",slug:"paste-the-image",link:"#paste-the-image",children:[]},{level:2,title:"Add attachment",slug:"add-attachment",link:"#add-attachment",children:[]},{level:2,title:"Create attachment",slug:"create-attachment",link:"#create-attachment",children:[]},{level:2,title:"Manage Tags",slug:"manage-tags",link:"#manage-tags",children:[]},{level:2,title:"Create tags",slug:"create-tags",link:"#create-tags",children:[]},{level:2,title:"Link notes",slug:"link-notes",link:"#link-notes",children:[]}],path:"/joplin-vscode-plugin/guide/feature.html",pathLocale:"/",extraFields:[]},{title:"Limitations",headers:[],path:"/joplin-vscode-plugin/guide/limitations.html",pathLocale:"/",extraFields:[]},{title:"Recommended extensions",headers:[{level:2,title:"Plugins",slug:"plugins",link:"#plugins",children:[]}],path:"/joplin-vscode-plugin/guide/recommended-extension.html",pathLocale:"/",extraFields:[]},{title:"Why write this plugin for vscode",headers:[],path:"/joplin-vscode-plugin/other/",pathLocale:"/",extraFields:[]},{title:"Roadmap",headers:[],path:"/joplin-vscode-plugin/other/roadmap.html",pathLocale:"/",extraFields:[]},{title:"\u5F00\u53D1",headers:[{level:2,title:"\u4E3B\u8981\u6280\u672F\u6808",slug:"\u4E3B\u8981\u6280\u672F\u6808",link:"#\u4E3B\u8981\u6280\u672F\u6808",children:[]},{level:2,title:"\u521D\u59CB\u5316\u9879\u76EE",slug:"\u521D\u59CB\u5316\u9879\u76EE",link:"#\u521D\u59CB\u5316\u9879\u76EE",children:[]},{level:2,title:"joplin-vscode-plugin",slug:"joplin-vscode-plugin",link:"#joplin-vscode-plugin",children:[]},{level:2,title:"joplin-batch-web",slug:"joplin-batch-web",link:"#joplin-batch-web",children:[]},{level:2,title:"\u53C2\u8003",slug:"\u53C2\u8003",link:"#\u53C2\u8003",children:[]}],path:"/zh/dev/dev.html",pathLocale:"/zh/",extraFields:[]},{title:"\u6587\u6863",headers:[{level:2,title:"\u521D\u59CB\u5316\u672C\u5730\u73AF\u5883",slug:"\u521D\u59CB\u5316\u672C\u5730\u73AF\u5883",link:"#\u521D\u59CB\u5316\u672C\u5730\u73AF\u5883",children:[]},{level:2,title:"\u6DFB\u52A0\u6587\u6863\u7FFB\u8BD1",slug:"\u6DFB\u52A0\u6587\u6863\u7FFB\u8BD1",link:"#\u6DFB\u52A0\u6587\u6863\u7FFB\u8BD1",children:[]}],path:"/zh/dev/doc.html",pathLocale:"/zh/",extraFields:[]},{title:"\u53C2\u4E0E\u9879\u76EE",headers:[{level:2,title:"\u7B80\u4ECB",slug:"\u7B80\u4ECB",link:"#\u7B80\u4ECB",children:[]},{level:2,title:"\u5982\u4F55\u8D21\u732E",slug:"\u5982\u4F55\u8D21\u732E",link:"#\u5982\u4F55\u8D21\u732E",children:[]}],path:"/zh/dev/",pathLocale:"/zh/",extraFields:[]},{title:"\u73AF\u5883\u8981\u6C42",headers:[{level:2,title:"\u5B89\u88C5 nodejs",slug:"\u5B89\u88C5-nodejs",link:"#\u5B89\u88C5-nodejs",children:[]},{level:2,title:"\u5B89\u88C5 pnpm",slug:"\u5B89\u88C5-pnpm",link:"#\u5B89\u88C5-pnpm",children:[]},{level:2,title:"\u6CE8\u518C github",slug:"\u6CE8\u518C-github",link:"#\u6CE8\u518C-github",children:[]},{level:2,title:"\u5B89\u88C5 git",slug:"\u5B89\u88C5-git",link:"#\u5B89\u88C5-git",children:[]}],path:"/zh/dev/require.html",pathLocale:"/zh/",extraFields:[]},{title:"joplin api",headers:[{level:2,title:"\u7B80\u4ECB",slug:"\u7B80\u4ECB",link:"#\u7B80\u4ECB",children:[]},{level:2,title:"\u5FEB\u901F\u542F\u52A8",slug:"\u5FEB\u901F\u542F\u52A8",link:"#\u5FEB\u901F\u542F\u52A8",children:[]},{level:2,title:"API \u53C2\u8003",slug:"api-\u53C2\u8003",link:"#api-\u53C2\u8003",children:[]},{level:2,title:"\u7EA6\u5B9A\u4FD7\u79F0",slug:"\u7EA6\u5B9A\u4FD7\u79F0",link:"#\u7EA6\u5B9A\u4FD7\u79F0",children:[]},{level:2,title:"\u4E00\u4E9B\u95EE\u9898",slug:"\u4E00\u4E9B\u95EE\u9898",link:"#\u4E00\u4E9B\u95EE\u9898",children:[]}],path:"/zh/joplin-api/",pathLocale:"/zh/",extraFields:[]},{title:"\u5176\u4ED6\u529F\u80FD",headers:[{level:2,title:"\u8F6C\u6362\u5916\u90E8\u94FE\u63A5\u4E3A\u5185\u90E8\u7B14\u8BB0\u5F15\u7528",slug:"\u8F6C\u6362\u5916\u90E8\u94FE\u63A5\u4E3A\u5185\u90E8\u7B14\u8BB0\u5F15\u7528",link:"#\u8F6C\u6362\u5916\u90E8\u94FE\u63A5\u4E3A\u5185\u90E8\u7B14\u8BB0\u5F15\u7528",children:[]}],path:"/zh/joplin-batch-web/feature.html",pathLocale:"/zh/",extraFields:[]},{title:"joplin-batch-web",headers:[{level:2,title:"\u5F00\u59CB",slug:"\u5F00\u59CB",link:"#\u5F00\u59CB",children:[]},{level:2,title:"FAQ",slug:"faq",link:"#faq",children:[{level:3,title:"\u4E3A\u4EC0\u4E48\u4E0D\u4F7F\u7528 cli \u7684\u5F62\u5F0F",slug:"\u4E3A\u4EC0\u4E48\u4E0D\u4F7F\u7528-cli-\u7684\u5F62\u5F0F",link:"#\u4E3A\u4EC0\u4E48\u4E0D\u4F7F\u7528-cli-\u7684\u5F62\u5F0F",children:[]},{level:3,title:"\u5B83\u4F1A\u8BB0\u5F55\u6211\u7684\u7B14\u8BB0\u6570\u636E\u4E48",slug:"\u5B83\u4F1A\u8BB0\u5F55\u6211\u7684\u7B14\u8BB0\u6570\u636E\u4E48",link:"#\u5B83\u4F1A\u8BB0\u5F55\u6211\u7684\u7B14\u8BB0\u6570\u636E\u4E48",children:[]}]}],path:"/zh/joplin-batch-web/",pathLocale:"/zh/",extraFields:[]},{title:"\u9690\u79C1\u653F\u7B56",headers:[{level:2,title:"\u6982\u62EC",slug:"\u6982\u62EC",link:"#\u6982\u62EC",children:[]},{level:2,title:"\u6570\u636E\u5B58\u50A8",slug:"\u6570\u636E\u5B58\u50A8",link:"#\u6570\u636E\u5B58\u50A8",children:[]},{level:2,title:"\u6570\u636E\u91C7\u96C6",slug:"\u6570\u636E\u91C7\u96C6",link:"#\u6570\u636E\u91C7\u96C6",children:[]},{level:2,title:"\u63A5\u89E6",slug:"\u63A5\u89E6",link:"#\u63A5\u89E6",children:[]}],path:"/zh/joplin-search-integration/privacy.html",pathLocale:"/zh/",extraFields:[]},{title:"joplin \u641C\u7D22\u96C6\u6210",headers:[{level:2,title:"\u7B80\u4ECB",slug:"\u7B80\u4ECB",link:"#\u7B80\u4ECB",children:[]},{level:2,title:"\u5E38\u89C1\u95EE\u9898",slug:"\u5E38\u89C1\u95EE\u9898",link:"#\u5E38\u89C1\u95EE\u9898",children:[{level:3,title:"token/port \u6307\u7684\u662F\u4EC0\u4E48\uFF0C\u5728\u54EA\u513F\u53EF\u4EE5\u627E\u5230\uFF1F",slug:"token-port-\u6307\u7684\u662F\u4EC0\u4E48-\u5728\u54EA\u513F\u53EF\u4EE5\u627E\u5230",link:"#token-port-\u6307\u7684\u662F\u4EC0\u4E48-\u5728\u54EA\u513F\u53EF\u4EE5\u627E\u5230",children:[]},{level:3,title:"\u5728 Brave \u6D4F\u89C8\u5668\u4E2D\u6CA1\u6709\u641C\u7D22\u7ED3\u679C",slug:"\u5728-brave-\u6D4F\u89C8\u5668\u4E2D\u6CA1\u6709\u641C\u7D22\u7ED3\u679C",link:"#\u5728-brave-\u6D4F\u89C8\u5668\u4E2D\u6CA1\u6709\u641C\u7D22\u7ED3\u679C",children:[]}]},{level:2,title:"\u8D21\u732E",slug:"\u8D21\u732E",link:"#\u8D21\u732E",children:[]}],path:"/zh/joplin-search-integration/",pathLocale:"/zh/",extraFields:[]},{title:"\u5FEB\u901F\u542F\u52A8",headers:[{level:2,title:"\u6982\u8FF0",slug:"\u6982\u8FF0",link:"#\u6982\u8FF0",children:[]},{level:2,title:"\u8981\u6C42",slug:"\u8981\u6C42",link:"#\u8981\u6C42",children:[]},{level:2,title:"\u5B89\u88C5 Joplin VSCode \u63D2\u4EF6",slug:"\u5B89\u88C5-joplin-vscode-\u63D2\u4EF6",link:"#\u5B89\u88C5-joplin-vscode-\u63D2\u4EF6",children:[]},{level:2,title:"\u914D\u7F6E",slug:"\u914D\u7F6E",link:"#\u914D\u7F6E",children:[]},{level:2,title:"\u91CD\u65B0\u542F\u52A8 VSCode",slug:"\u91CD\u65B0\u542F\u52A8-vscode",link:"#\u91CD\u65B0\u542F\u52A8-vscode",children:[]},{level:2,title:"\u5F00\u59CB\u4F7F\u7528",slug:"\u5F00\u59CB\u4F7F\u7528",link:"#\u5F00\u59CB\u4F7F\u7528",children:[]},{level:2,title:"\u529F\u80FD",slug:"\u529F\u80FD",link:"#\u529F\u80FD",children:[]},{level:2,title:"\u547D\u4EE4\u548C\u952E\u7ED1\u5B9A",slug:"\u547D\u4EE4\u548C\u952E\u7ED1\u5B9A",link:"#\u547D\u4EE4\u548C\u952E\u7ED1\u5B9A",children:[]}],path:"/zh/joplin-vscode-plugin/",pathLocale:"/zh/",extraFields:[]},{title:"\u5E38\u95EE\u95EE\u9898",headers:[{level:2,title:"\u663E\u793A\u9519\u8BEF\u4FE1\u606F Joplin\u2019s token/port is set incorrectly, unable to access Joplin service!",slug:"\u663E\u793A\u9519\u8BEF\u4FE1\u606F-joplin-s-token-port-is-set-incorrectly-unable-to-access-joplin-service",link:"#\u663E\u793A\u9519\u8BEF\u4FE1\u606F-joplin-s-token-port-is-set-incorrectly-unable-to-access-joplin-service",children:[]},{level:2,title:"\u5982\u4F55\u5217\u51FA VSCode \u6253\u5F00\u7684 joplin \u7B14\u8BB0",slug:"\u5982\u4F55\u5217\u51FA-vscode-\u6253\u5F00\u7684-joplin-\u7B14\u8BB0",link:"#\u5982\u4F55\u5217\u51FA-vscode-\u6253\u5F00\u7684-joplin-\u7B14\u8BB0",children:[]},{level:2,title:"\u63D2\u4EF6\u6CA1\u6709\u663E\u793A\u5217\u8868",slug:"\u63D2\u4EF6\u6CA1\u6709\u663E\u793A\u5217\u8868",link:"#\u63D2\u4EF6\u6CA1\u6709\u663E\u793A\u5217\u8868",children:[]},{level:2,title:"\u5728\u4FA7\u8FB9\u680F\u4E2D\u70B9\u51FB\u65E0\u6CD5\u6253\u5F00\u7B14\u8BB0",slug:"\u5728\u4FA7\u8FB9\u680F\u4E2D\u70B9\u51FB\u65E0\u6CD5\u6253\u5F00\u7B14\u8BB0",link:"#\u5728\u4FA7\u8FB9\u680F\u4E2D\u70B9\u51FB\u65E0\u6CD5\u6253\u5F00\u7B14\u8BB0",children:[]},{level:2,title:"Windows 10 \u65E0\u6CD5\u4E0A\u4F20\u526A\u5207\u7248\u56FE\u7247",slug:"windows-10-\u65E0\u6CD5\u4E0A\u4F20\u526A\u5207\u7248\u56FE\u7247",link:"#windows-10-\u65E0\u6CD5\u4E0A\u4F20\u526A\u5207\u7248\u56FE\u7247",children:[]},{level:2,title:"\u5982\u4F55\u5728\u4E24\u4E2A\u914D\u7F6E\u540C\u6B65\u7684 vscode \u4F7F\u7528\u63D2\u4EF6",slug:"\u5982\u4F55\u5728\u4E24\u4E2A\u914D\u7F6E\u540C\u6B65\u7684-vscode-\u4F7F\u7528\u63D2\u4EF6",link:"#\u5982\u4F55\u5728\u4E24\u4E2A\u914D\u7F6E\u540C\u6B65\u7684-vscode-\u4F7F\u7528\u63D2\u4EF6",children:[]},{level:2,title:"markdown \u9884\u89C8\u65E0\u6CD5\u663E\u793A\u56FE\u7247",slug:"markdown-\u9884\u89C8\u65E0\u6CD5\u663E\u793A\u56FE\u7247",link:"#markdown-\u9884\u89C8\u65E0\u6CD5\u663E\u793A\u56FE\u7247",children:[]},{level:2,title:"\u4E0D\u517C\u5BB9\u63D2\u4EF6 Markdown Preview Enhanced",slug:"\u4E0D\u517C\u5BB9\u63D2\u4EF6-markdown-preview-enhanced",link:"#\u4E0D\u517C\u5BB9\u63D2\u4EF6-markdown-preview-enhanced",children:[]}],path:"/zh/joplin-vscode-plugin/guide/faq.html",pathLocale:"/zh/",extraFields:[]},{title:"\u5176\u4ED6\u529F\u80FD",headers:[{level:2,title:"\u914D\u7F6E\u8868",slug:"\u914D\u7F6E\u8868",link:"#\u914D\u7F6E\u8868",children:[]},{level:2,title:"\u5FEB\u6377\u952E",slug:"\u5FEB\u6377\u952E",link:"#\u5FEB\u6377\u952E",children:[]},{level:2,title:"\u7F16\u8F91\u9644\u4EF6",slug:"\u7F16\u8F91\u9644\u4EF6",link:"#\u7F16\u8F91\u9644\u4EF6",children:[]},{level:2,title:"\u7C98\u8D34\u56FE\u7247",slug:"\u7C98\u8D34\u56FE\u7247",link:"#\u7C98\u8D34\u56FE\u7247",children:[]},{level:2,title:"\u6DFB\u52A0\u9644\u4EF6",slug:"\u6DFB\u52A0\u9644\u4EF6",link:"#\u6DFB\u52A0\u9644\u4EF6",children:[]},{level:2,title:"\u521B\u5EFA\u9644\u4EF6",slug:"\u521B\u5EFA\u9644\u4EF6",link:"#\u521B\u5EFA\u9644\u4EF6",children:[]},{level:2,title:"\u7BA1\u7406\u6807\u7B7E",slug:"\u7BA1\u7406\u6807\u7B7E",link:"#\u7BA1\u7406\u6807\u7B7E",children:[]},{level:2,title:"\u521B\u5EFA\u6807\u7B7E",slug:"\u521B\u5EFA\u6807\u7B7E",link:"#\u521B\u5EFA\u6807\u7B7E",children:[]},{level:2,title:"\u94FE\u63A5\u7B14\u8BB0",slug:"\u94FE\u63A5\u7B14\u8BB0",link:"#\u94FE\u63A5\u7B14\u8BB0",children:[]}],path:"/zh/joplin-vscode-plugin/guide/feature.html",pathLocale:"/zh/",extraFields:[]},{title:"\u9650\u5236",headers:[],path:"/zh/joplin-vscode-plugin/guide/limitations.html",pathLocale:"/zh/",extraFields:[]},{title:"\u63A8\u8350\u6269\u5C55",headers:[{level:2,title:"\u63D2\u4EF6",slug:"\u63D2\u4EF6",link:"#\u63D2\u4EF6",children:[]},{level:2,title:"\u66FF\u4EE3\u54C1",slug:"\u66FF\u4EE3\u54C1",link:"#\u66FF\u4EE3\u54C1",children:[]}],path:"/zh/joplin-vscode-plugin/guide/recommended-extension.html",pathLocale:"/zh/",extraFields:[]},{title:"\u53C2\u4E0E\u9879\u76EE",headers:[{level:2,title:"\u5982\u4F55\u8D21\u732E",slug:"\u5982\u4F55\u8D21\u732E",link:"#\u5982\u4F55\u8D21\u732E",children:[]},{level:2,title:"\u73AF\u5883\u8981\u6C42",slug:"\u73AF\u5883\u8981\u6C42",link:"#\u73AF\u5883\u8981\u6C42",children:[]},{level:2,title:"\u542F\u52A8\u9879\u76EE",slug:"\u542F\u52A8\u9879\u76EE",link:"#\u542F\u52A8\u9879\u76EE",children:[]},{level:2,title:"\u9879\u76EE\u7ED3\u6784",slug:"\u9879\u76EE\u7ED3\u6784",link:"#\u9879\u76EE\u7ED3\u6784",children:[]}],path:"/zh/joplin-vscode-plugin/other/dev.html",pathLocale:"/zh/",extraFields:[]},{title:"\u4E3A\u4EC0\u4E48\u8981\u5F00\u53D1\u8FD9\u4E2A\u63D2\u4EF6",headers:[],path:"/zh/joplin-vscode-plugin/other/",pathLocale:"/zh/",extraFields:[]},{title:"\u8DEF\u7EBF\u56FE",headers:[],path:"/zh/joplin-vscode-plugin/other/roadmap.html",pathLocale:"/zh/",extraFields:[]},{title:"",headers:[],path:"/404.html",pathLocale:"/",extraFields:[]}],Ms=be(im),lm=()=>Ms;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updateSearchIndex=e=>{Ms.value=e});const sm=({searchIndex:e,routeLocale:t,query:n,maxSuggestions:o})=>{const r=V(()=>e.value.filter(i=>i.pathLocale===t.value));return V(()=>{const i=n.value.trim().toLowerCase();if(!i)return[];const l=[],s=(a,c)=>{rl(i,[c.title])&&l.push({link:`${a.path}#${c.slug}`,title:a.title,header:c.title});for(const u of c.children){if(l.length>=o.value)return;s(a,u)}};for(const a of r.value){if(l.length>=o.value)break;if(rl(i,[a.title,...a.extraFields])){l.push({link:a.path,title:a.title});continue}for(const c of a.headers){if(l.length>=o.value)break;s(a,c)}}return l})},am=e=>{const t=be(0);return{focusIndex:t,focusNext:()=>{t.value{t.value>0?t.value-=1:t.value=e.value.length-1}}},cm=he({name:"SearchBox",props:{locales:{type:Object,required:!1,default:()=>({})},hotKeys:{type:Array,required:!1,default:()=>[]},maxSuggestions:{type:Number,required:!1,default:5}},setup(e){const{locales:t,hotKeys:n,maxSuggestions:o}=wo(e),r=Zt(),i=Vn(),l=lm(),s=be(null),a=be(!1),c=be(""),u=V(()=>{var C;return(C=t.value[i.value])!=null?C:{}}),f=sm({searchIndex:l,routeLocale:i,query:c,maxSuggestions:o}),{focusIndex:h,focusNext:m,focusPrev:b}=am(f);rm({input:s,hotKeys:n});const w=V(()=>a.value&&!!f.value.length),k=()=>{!w.value||b()},g=()=>{!w.value||m()},_=C=>{if(!w.value)return;const $=f.value[C];!$||r.push($.link).then(()=>{c.value="",h.value=0})};return()=>de("form",{class:"search-box",role:"search"},[de("input",{ref:s,type:"search",placeholder:u.value.placeholder,autocomplete:"off",spellcheck:!1,value:c.value,onFocus:()=>a.value=!0,onBlur:()=>a.value=!1,onInput:C=>c.value=C.target.value,onKeydown:C=>{switch(C.key){case"ArrowUp":{k();break}case"ArrowDown":{g();break}case"Enter":{C.preventDefault(),_(h.value);break}}}}),w.value&&de("ul",{class:"suggestions",onMouseleave:()=>h.value=-1},f.value.map(({link:C,title:$,header:q},X)=>de("li",{class:["suggestion",{focus:h.value===X}],onMouseenter:()=>h.value=X,onMousedown:()=>_(X)},de("a",{href:C,onClick:O=>O.preventDefault()},[de("span",{class:"page-title"},$),q&&de("span",{class:"page-header"},`> ${q}`)]))))])}});const um={},dm=["s","/"],fm=5,hm=wt({enhance({app:e}){e.component("SearchBox",t=>de(cm,{locales:um,hotKeys:dm,maxSuggestions:fm,...t}))}}),pm=e=>{if(window.dataLayer&&window.gtag)return;const t=document.createElement("script");t.src=`https://www.googletagmanager.com/gtag/js?id=${e}`,t.async=!0,document.head.appendChild(t),window.dataLayer=window.dataLayer||[],window.gtag=function(){dataLayer.push(arguments)},gtag("js",new Date),gtag("config",e)},mm="G-9V6G332LX9",gm=wt({enhance(){pm(mm)}}),to=[zd,Nd,Vd,tf,lf,df,em,hm,gm];var Ns=be(Qs),Fs=yr({key:"",path:"",title:"",lang:"",frontmatter:{},excerpt:"",headers:[]}),mt=be(Fs),St=()=>mt;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updatePageData=e=>{Ns.value[e.key]=()=>Promise.resolve(e),e.key===mt.value.key&&(mt.value=e)});var Hs=Symbol(""),vt=()=>{const e=$e(Hs);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},Bs=Symbol(""),vm=()=>{const e=$e(Bs);if(!e)throw new Error("usePageHead() is called without provider.");return e},_m=Symbol(""),Vs=Symbol(""),bm=()=>{const e=$e(Vs);if(!e)throw new Error("usePageLang() is called without provider.");return e},zr=Symbol(""),Vn=()=>{const e=$e(zr);if(!e)throw new Error("useRouteLocale() is called without provider.");return e},Ot=be(xu),Us=()=>Ot;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updateSiteData=e=>{Ot.value=e});var qs=Symbol(""),Dr=()=>{const e=$e(qs);if(!e)throw new Error("useSiteLocaleData() is called without provider.");return e},ym=Symbol(""),Vt=vn({resolvePageData:async e=>{const t=Ns.value[e],n=await(t==null?void 0:t());return n!=null?n:Fs},resolvePageFrontmatter:e=>e.frontmatter,resolvePageHead:(e,t,n)=>{const o=_e(t.description)?t.description:n.description,r=[...ee(t.head)?t.head:[],...n.head,["title",{},e],["meta",{name:"description",content:o}]];return Cu(r)},resolvePageHeadTitle:(e,t)=>`${e.title?`${e.title} | `:""}${t.title}`,resolvePageLang:e=>e.lang||"en",resolveRouteLocale:(e,t)=>ss(e,t),resolveSiteLocaleData:(e,t)=>({...e,...e.locales[t]})}),Mr=he({name:"ClientOnly",setup(e,t){const n=be(!1);return Ye(()=>{n.value=!0}),()=>{var o,r;return n.value?(r=(o=t.slots).default)==null?void 0:r.call(o):null}}}),wm=he({name:"Content",props:{pageKey:{type:String,required:!1,default:""}},setup(e){const t=St(),n=V(()=>as[e.pageKey||t.value.key]);return()=>n.value?de(n.value):de("div","404 Not Found")}}),Em="Layout",km="NotFound",xm=to.reduce((e,t)=>({...e,...t.layouts}),{}),il=he({name:"Vuepress",setup(){const e=St(),t=V(()=>{let n;if(e.value.path){const o=e.value.frontmatter.layout;_e(o)?n=o:n=Em}else n=km;return xm[n]});return()=>de(t.value)}}),Nr=e=>Bn(e)?e:`${Us().value.base}${ls(e)}`;const Lm=[["v-8daa1a0e","/",{title:""},["/index.html","/README.md"]],["v-16aa27d2","/dev/dev.html",{title:"Development"},["/dev/dev","/dev/dev.md"]],["v-3585ae58","/dev/doc.html",{title:"Documentation"},["/dev/doc","/dev/doc.md"]],["v-7445cd33","/dev/",{title:"Getting involved"},["/dev/index.html","/dev/README.md"]],["v-4110ef47","/dev/require.html",{title:"Required dependencies"},["/dev/require","/dev/require.md"]],["v-320ef97a","/joplin-api/",{title:"joplin api"},["/joplin-api/index.html","/joplin-api/README.md"]],["v-7e84431f","/joplin-batch-web/feature.html",{title:"Other functions"},["/joplin-batch-web/feature","/joplin-batch-web/feature.md"]],["v-b9252508","/joplin-batch-web/",{title:"joplin-batch-web"},["/joplin-batch-web/index.html","/joplin-batch-web/README.md"]],["v-15f08efa","/joplin-search-integration/privacy.html",{title:"Privacy Policy"},["/joplin-search-integration/privacy","/joplin-search-integration/privacy.md"]],["v-46f0e132","/joplin-search-integration/",{title:"Joplin Search Integration"},["/joplin-search-integration/index.html","/joplin-search-integration/README.md"]],["v-001761b2","/joplin-vscode-plugin/",{title:"Quick start"},["/joplin-vscode-plugin/index.html","/joplin-vscode-plugin/README.md"]],["v-2d0ad528","/zh/",{title:""},["/zh/index.html","/zh/README.md"]],["v-6a87341d","/joplin-vscode-plugin/guide/faq.html",{title:"FAQ"},["/joplin-vscode-plugin/guide/faq","/joplin-vscode-plugin/guide/faq.md"]],["v-12db533d","/joplin-vscode-plugin/guide/feature.html",{title:"Other features"},["/joplin-vscode-plugin/guide/feature","/joplin-vscode-plugin/guide/feature.md"]],["v-0829310c","/joplin-vscode-plugin/guide/limitations.html",{title:"Limitations"},["/joplin-vscode-plugin/guide/limitations","/joplin-vscode-plugin/guide/limitations.md"]],["v-7f9aa074","/joplin-vscode-plugin/guide/recommended-extension.html",{title:"Recommended extensions"},["/joplin-vscode-plugin/guide/recommended-extension","/joplin-vscode-plugin/guide/recommended-extension.md"]],["v-184d7906","/joplin-vscode-plugin/other/",{title:"Why write this plugin for vscode"},["/joplin-vscode-plugin/other/index.html","/joplin-vscode-plugin/other/README.md"]],["v-10bb1423","/joplin-vscode-plugin/other/roadmap.html",{title:"Roadmap"},["/joplin-vscode-plugin/other/roadmap","/joplin-vscode-plugin/other/roadmap.md"]],["v-07d5ffc6","/zh/dev/dev.html",{title:"\u5F00\u53D1"},["/zh/dev/dev","/zh/dev/dev.md"]],["v-0f2f86fa","/zh/dev/doc.html",{title:"\u6587\u6863"},["/zh/dev/doc","/zh/dev/doc.md"]],["v-53faffe2","/zh/dev/",{title:"\u53C2\u4E0E\u9879\u76EE"},["/zh/dev/index.html","/zh/dev/README.md"]],["v-47c6d914","/zh/dev/require.html",{title:"\u73AF\u5883\u8981\u6C42"},["/zh/dev/require","/zh/dev/require.md"]],["v-41568498","/zh/joplin-api/",{title:"joplin api"},["/zh/joplin-api/index.html","/zh/joplin-api/README.md"]],["v-0b89b960","/zh/joplin-batch-web/feature.html",{title:"\u5176\u4ED6\u529F\u80FD"},["/zh/joplin-batch-web/feature","/zh/joplin-batch-web/feature.md"]],["v-69d64f2d","/zh/joplin-batch-web/",{title:"joplin-batch-web"},["/zh/joplin-batch-web/index.html","/zh/joplin-batch-web/README.md"]],["v-4b1b7f72","/zh/joplin-search-integration/privacy.html",{title:"\u9690\u79C1\u653F\u7B56"},["/zh/joplin-search-integration/privacy","/zh/joplin-search-integration/privacy.md"]],["v-ae8752be","/zh/joplin-search-integration/",{title:"joplin \u641C\u7D22\u96C6\u6210"},["/zh/joplin-search-integration/index.html","/zh/joplin-search-integration/README.md"]],["v-827a1f50","/zh/joplin-vscode-plugin/",{title:"\u5FEB\u901F\u542F\u52A8"},["/zh/joplin-vscode-plugin/index.html","/zh/joplin-vscode-plugin/README.md"]],["v-59a76b8e","/zh/joplin-vscode-plugin/guide/faq.html",{title:"\u5E38\u95EE\u95EE\u9898"},["/zh/joplin-vscode-plugin/guide/faq","/zh/joplin-vscode-plugin/guide/faq.md"]],["v-7f406a2e","/zh/joplin-vscode-plugin/guide/feature.html",{title:"\u5176\u4ED6\u529F\u80FD"},["/zh/joplin-vscode-plugin/guide/feature","/zh/joplin-vscode-plugin/guide/feature.md"]],["v-1dccc42a","/zh/joplin-vscode-plugin/guide/limitations.html",{title:"\u9650\u5236"},["/zh/joplin-vscode-plugin/guide/limitations","/zh/joplin-vscode-plugin/guide/limitations.md"]],["v-eaef6612","/zh/joplin-vscode-plugin/guide/recommended-extension.html",{title:"\u63A8\u8350\u6269\u5C55"},["/zh/joplin-vscode-plugin/guide/recommended-extension","/zh/joplin-vscode-plugin/guide/recommended-extension.md"]],["v-7b5f4c5b","/zh/joplin-vscode-plugin/other/dev.html",{title:"\u53C2\u4E0E\u9879\u76EE"},["/zh/joplin-vscode-plugin/other/dev","/zh/joplin-vscode-plugin/other/dev.md"]],["v-201e9d12","/zh/joplin-vscode-plugin/other/",{title:"\u4E3A\u4EC0\u4E48\u8981\u5F00\u53D1\u8FD9\u4E2A\u63D2\u4EF6"},["/zh/joplin-vscode-plugin/other/index.html","/zh/joplin-vscode-plugin/other/README.md"]],["v-7d202b14","/zh/joplin-vscode-plugin/other/roadmap.html",{title:"\u8DEF\u7EBF\u56FE"},["/zh/joplin-vscode-plugin/other/roadmap","/zh/joplin-vscode-plugin/other/roadmap.md"]],["v-3706649a","/404.html",{title:""},["/404"]]];var Cm=()=>Lm.reduce((e,[t,n,o,r])=>(e.push({name:t,path:n,component:il,meta:o},...r.map(i=>({path:i,redirect:n}))),e),[{name:"404",path:"/:catchAll(.*)",component:il}]),Tm=Ku,Pm=()=>{const e=Od({history:Tm(is(Ot.value.base)),routes:Cm(),scrollBehavior:(t,n,o)=>o||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,n)=>{var o;(t.path!==n.path||n===ht)&&([mt.value]=await Promise.all([Vt.resolvePageData(t.name),(o=as[t.name])==null?void 0:o.__asyncLoader()]))}),e},Om=e=>{e.component("ClientOnly",Mr),e.component("Content",wm)},Am=(e,t)=>{const n=V(()=>Vt.resolveRouteLocale(Ot.value.locales,t.currentRoute.value.path)),o=V(()=>Vt.resolveSiteLocaleData(Ot.value,n.value)),r=V(()=>Vt.resolvePageFrontmatter(mt.value)),i=V(()=>Vt.resolvePageHeadTitle(mt.value,o.value)),l=V(()=>Vt.resolvePageHead(i.value,r.value,o.value)),s=V(()=>Vt.resolvePageLang(mt.value));return e.provide(zr,n),e.provide(qs,o),e.provide(Hs,r),e.provide(_m,i),e.provide(Bs,l),e.provide(Vs,s),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>r.value},$head:{get:()=>l.value},$headTitle:{get:()=>i.value},$lang:{get:()=>s.value},$page:{get:()=>mt.value},$routeLocale:{get:()=>n.value},$site:{get:()=>Ot.value},$siteLocale:{get:()=>o.value},$withBase:{get:()=>Nr}}),{pageData:mt,pageFrontmatter:r,pageHead:l,pageHeadTitle:i,pageLang:s,routeLocale:n,siteData:Ot,siteLocaleData:o}},Rm=()=>{const e=Dt(),t=vm(),n=bm(),o=be([]),r=()=>{t.value.forEach(l=>{const s=Sm(l);s&&o.value.push(s)})},i=()=>{document.documentElement.lang=n.value,o.value.forEach(l=>{l.parentNode===document.head&&document.head.removeChild(l)}),o.value.splice(0,o.value.length),t.value.forEach(l=>{const s=jm(l);s!==null&&(document.head.appendChild(s),o.value.push(s))})};Gt(ym,i),Ye(()=>{r(),i(),ut(()=>e.path,()=>i())})},Sm=([e,t,n=""])=>{const o=Object.entries(t).map(([s,a])=>_e(a)?`[${s}="${a}"]`:a===!0?`[${s}]`:"").join(""),r=`head > ${e}${o}`;return Array.from(document.querySelectorAll(r)).find(s=>s.innerText===n)||null},jm=([e,t,n])=>{if(!_e(e))return null;const o=document.createElement(e);return Pr(t)&&Object.entries(t).forEach(([r,i])=>{_e(i)?o.setAttribute(r,i):i===!0&&o.setAttribute(r,"")}),_e(n)&&o.appendChild(document.createTextNode(n)),o},Im=Eu,$m=async()=>{var n;const e=Im({name:"VuepressApp",setup(){var o;Rm();for(const r of to)(o=r.setup)==null||o.call(r);return()=>[de(ys),...to.flatMap(({rootComponents:r=[]})=>r.map(i=>de(i)))]}}),t=Pm();Om(e),Am(e,t);for(const o of to)await((n=o.enhance)==null?void 0:n.call(o,{app:e,router:t,siteData:Ot}));return e.use(t),{app:e,router:t}};$m().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{Te as _,me as a,ne as b,Z as c,$m as createVueApp,zt as d,Pe as e,Dc as f,F as o,bt as r,ze as w}; diff --git a/assets/dev.html.6423d3a0.js b/assets/dev.html.6423d3a0.js new file mode 100644 index 00000000..b7e6b353 --- /dev/null +++ b/assets/dev.html.6423d3a0.js @@ -0,0 +1,6 @@ +import{_ as i,r as o,o as l,c as r,a as e,b as t,w as c,d as n,e as d,f as p}from"./app.d04c4254.js";const h={},u=e("h1",{id:"development",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#development","aria-hidden":"true"},"#"),n(" Development")],-1),m=p(`

Main technology stack

  • pnpm monorepo
  • typescript
  • react

Initialize the project

# Clone the project to local
+git clone https://github.com/<YOUR GITHUB NAME>/joplin-utils.git
+# Install dependencies and initialize
+pnpm && pnpm run setup
+# Enter the corresponding module development code, refer to README for details
+

joplin-vscode-plugin

`,5),_=e("li",null,"code apps/joplin-vscode-plugin",-1),b={href:"https://joplinapp.org/api/references/development_mode/",target:"_blank",rel:"noopener noreferrer"},v=e("img",{src:"https://user-images.githubusercontent.com/24560368/198864483-b30f050f-e990-4a49-868a-2954eea75443.png",alt:"image"},null,-1),g=e("li",null,[n("enable clipper service "),e("img",{src:"https://user-images.githubusercontent.com/24560368/198864546-473dbc9b-6f09-4cf5-8585-87da13b8b039.png",alt:"image"})],-1),f=e("li",null,"cp .vscode/_launch.json .vscode/launch.json",-1),j=e("li",null,[n("modify .vscode/launch.json, set "),e("em",null,"env.JOPLIN_TOKEN"),n(", example: "),e("img",{src:"https://user-images.githubusercontent.com/24560368/198864435-ac47e951-79ad-40c5-b848-9e5dbafad478.png",alt:"image"})],-1),k=e("li",null,"pnpm dev",-1),x=e("li",null,"F5 run debug",-1),E=e("h2",{id:"joplin-batch-web",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#joplin-batch-web","aria-hidden":"true"},"#"),n(" joplin-batch-web")],-1),N=e("ol",null,[e("li",null,"code apps/joplin-batch-web"),e("li",null,"pnpm dev")],-1),w=e("h2",{id:"refer-to",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#refer-to","aria-hidden":"true"},"#"),n(" refer to")],-1),I={href:"https://joplinapp.org/api/overview/",target:"_blank",rel:"noopener noreferrer"};function y(L,O){const s=o("RouterLink"),a=o("ExternalLinkIcon");return l(),r("div",null,[u,e("blockquote",null,[e("p",null,[t(s,{to:"/dev/require.html"},{default:c(()=>[n("environment requirements")]),_:1})])]),m,e("ol",null,[_,e("li",null,[n("run joplin dev mode, ref: "),e("a",b,[n("https://joplinapp.org/api/references/development_mode/"),t(a)]),v]),g,f,j,k,x]),E,N,w,e("ul",null,[e("li",null,[e("a",I,[n("joplin data api documentation"),t(a)])])]),d(" TODO to be added ")])}const z=i(h,[["render",y],["__file","dev.html.vue"]]);export{z as default}; diff --git a/assets/dev.html.8d19bce6.js b/assets/dev.html.8d19bce6.js new file mode 100644 index 00000000..48366b57 --- /dev/null +++ b/assets/dev.html.8d19bce6.js @@ -0,0 +1 @@ +import{_ as e,o as l,c as i,f as o}from"./app.d04c4254.js";const c={},d=o('

\u53C2\u4E0E\u9879\u76EE

\u5982\u4F55\u8D21\u732E

\u4E3B\u8981\u5206\u4E3A\u4E24\u65B9\u9762

  • \u5F00\u53D1
    • \u5B9E\u73B0\u672A\u5B8C\u6210\u7684\u529F\u80FD
    • \u63D0\u51FA\u65B0\u7684 idea \u5E76\u5B9E\u73B0
  • \u975E\u5F00\u53D1
    • \u5E2E\u52A9\u7FFB\u8BD1\u6587\u6863\u3001\u56FD\u9645\u5316\u7684\u914D\u7F6E\u6587\u4EF6
    • \u7F16\u5199 vscode \u4E0E joplin \u7684\u7ED3\u5408\u6587\u6863
    • \u7F16\u5199\u53C2\u4E0E\u5F00\u53D1\u7684\u6587\u6863

\u73AF\u5883\u8981\u6C42

  • nodejs >= v18
  • joplin >= v1.4
  • pnpm

\u542F\u52A8\u9879\u76EE

  1. \u4F7F\u7528 vscode \u6253\u5F00\u9879\u76EE
  2. cp .vscode/_launch.json .vscode/launch.json
  3. \u4FEE\u6539 .vscode/launch.json \u914D\u7F6E\uFF0C\u4FEE\u6539\u4EE5\u4E0B\u914D\u7F6E\u9879

    \u4E2A\u4EBA\u5EFA\u8BAE\u540C\u65F6\u542F\u52A8 joplin electron \u9879\u76EE\uFF0C\u907F\u514D\u5728\u771F\u5B9E\u7684\u4E2A\u4EBA\u7B14\u8BB0\u4E0A\u8FDB\u884C\u6D4B\u8BD5\uFF0C\u63D2\u4EF6\u53EF\u80FD\u9519\u8BEF\u7684\u7834\u574F\u771F\u5B9E\u7B14\u8BB0\u3002

    • configurations/env
      • JOPLIN_TOKEN: web clipper \u7684\u9A8C\u8BC1\u4EE4\u724C
      • JOPLIN_PORT: \u7AEF\u53E3\uFF0C\u5F00\u53D1\u73AF\u5883\u4E00\u822C\u662F 27584
      • JOPLIN_PROFILE_PATH: \u4E2A\u4EBA\u914D\u7F6E\u76EE\u5F55\uFF0C\u5F00\u53D1\u73AF\u5883\u5E94\u8BE5\u662F ~/.config/joplin-desktop\uFF0C\u4F46\u6CE8\u610F\u9700\u8981\u4F7F\u7528\u5B8C\u5168\u8DEF\u5F84
  4. \u4F7F\u7528 yarn watch \u542F\u52A8 tsc \u76D1\u89C6\u6A21\u5F0F
  5. \u4F7F\u7528 F5 \u8FD0\u884C\u8C03\u8BD5\u6A21\u5F0F

\u9879\u76EE\u7ED3\u6784

  • docs: joplin \u5728\u7EBF\u6587\u6863
  • resources: \u56FE\u6807\u8D44\u6E90
  • src: \u6E90\u4EE3\u7801
    • api: \u4E00\u4E9B joplin-api \u4E2D\u76EE\u524D\u4E0D\u5B58\u5728\u7684\u529F\u80FD\u589E\u5F3A
    • config: \u63D2\u4EF6\u914D\u7F6E\u76F8\u5173\u5904\u7406
    • model: \u63D0\u4F9B view \u7684 NodePrivider \u5B9E\u73B0\u7C7B
    • service: \u4E00\u4E9B\u5176\u4ED6\u7684\u670D\u52A1\u5B9E\u73B0
    • util: \u901A\u7528\u5DE5\u5177\u4EE3\u7801
  • package.nls*.json: \u56FD\u9645\u5316\u914D\u7F6E\u6587\u4EF6
',10),a=[d];function n(r,s){return l(),i("div",null,a)}const h=e(c,[["render",n],["__file","dev.html.vue"]]);export{h as default}; diff --git a/assets/dev.html.cb56fbcd.js b/assets/dev.html.cb56fbcd.js new file mode 100644 index 00000000..587361f4 --- /dev/null +++ b/assets/dev.html.cb56fbcd.js @@ -0,0 +1,6 @@ +import{_ as l,r as o,o as i,c,a as e,b as a,w as r,d as n,e as d,f as p}from"./app.d04c4254.js";const h={},u=e("h1",{id:"\u5F00\u53D1",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u5F00\u53D1","aria-hidden":"true"},"#"),n(" \u5F00\u53D1")],-1),m=p(`

\u4E3B\u8981\u6280\u672F\u6808

  • pnpm monorepo
  • typescript
  • react

\u521D\u59CB\u5316\u9879\u76EE

# \u514B\u9686\u9879\u76EE\u5230\u672C\u5730
+git clone https://github.com/<YOUR GITHUB NAME>/joplin-utils.git
+# \u5B89\u88C5\u4F9D\u8D56\u5E76\u521D\u59CB\u5316
+pnpm && pnpm run setup
+# \u8FDB\u5165\u5230\u76F8\u5E94\u6A21\u5757\u5F00\u53D1\u4EE3\u7801\uFF0C\u5177\u4F53\u53C2\u8003 README
+

joplin-vscode-plugin

`,5),_=e("li",null,"code apps/joplin-vscode-plugin",-1),b={href:"https://joplinapp.org/api/references/development_mode/",target:"_blank",rel:"noopener noreferrer"},v=e("img",{src:"https://user-images.githubusercontent.com/24560368/198864483-b30f050f-e990-4a49-868a-2954eea75443.png",alt:"image"},null,-1),g=e("li",null,[n("enable clipper service "),e("img",{src:"https://user-images.githubusercontent.com/24560368/198864546-473dbc9b-6f09-4cf5-8585-87da13b8b039.png",alt:"image"})],-1),f=e("li",null,"cp .vscode/_launch.json .vscode/launch.json",-1),k=e("li",null,[n("modify .vscode/launch.json, set "),e("em",null,"env.JOPLIN_TOKEN"),n(", example: "),e("img",{src:"https://user-images.githubusercontent.com/24560368/198864435-ac47e951-79ad-40c5-b848-9e5dbafad478.png",alt:"image"})],-1),j=e("li",null,"pnpm dev",-1),x=e("li",null,"F5 run debug",-1),N=e("h2",{id:"joplin-batch-web",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#joplin-batch-web","aria-hidden":"true"},"#"),n(" joplin-batch-web")],-1),w=e("ol",null,[e("li",null,"code apps/joplin-batch-web"),e("li",null,"pnpm dev")],-1),E=e("h2",{id:"\u53C2\u8003",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u53C2\u8003","aria-hidden":"true"},"#"),n(" \u53C2\u8003")],-1),L={href:"https://joplinapp.org/api/overview/",target:"_blank",rel:"noopener noreferrer"};function O(V,B){const t=o("RouterLink"),s=o("ExternalLinkIcon");return i(),c("div",null,[u,e("blockquote",null,[e("p",null,[a(t,{to:"/zh/dev/require.html"},{default:r(()=>[n("\u73AF\u5883\u8981\u6C42")]),_:1})])]),m,e("ol",null,[_,e("li",null,[n("run joplin dev mode, ref: "),e("a",b,[n("https://joplinapp.org/api/references/development_mode/"),a(s)]),v]),g,f,k,j,x]),N,w,E,e("ul",null,[e("li",null,[e("a",L,[n("joplin data api \u6587\u6863"),a(s)])])]),d(" TODO \u5F85\u8865\u5145 ")])}const R=l(h,[["render",O],["__file","dev.html.vue"]]);export{R as default}; diff --git a/assets/doc.html.56e01b61.js b/assets/doc.html.56e01b61.js new file mode 100644 index 00000000..68a20db1 --- /dev/null +++ b/assets/doc.html.56e01b61.js @@ -0,0 +1,33 @@ +import{_ as l,r as t,o as c,c as p,a as n,b as e,w as r,d as s,f as o}from"./app.d04c4254.js";const u={},d=n("h1",{id:"documentation",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#documentation","aria-hidden":"true"},"#"),s(" Documentation")],-1),v=n("h2",{id:"setting-up-the-local-environment",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#setting-up-the-local-environment","aria-hidden":"true"},"#"),s(" Setting up the local environment")],-1),m={href:"https://docs.github.com/en/github/getting-started-with-github/quickstart/fork-a-repo",target:"_blank",rel:"noopener noreferrer"},h=o(`
# Clone the repo locally
+git clone https://github.com/<YOUR GITHUB NAME>/joplin-utils.git
+# Navigate to documentation folder
+cd website/
+# Install required dependencies
+yarn
+# Start the local development environment
+yarn docs:dev
+
`,1),k={href:"http://localhost:8080/",target:"_blank",rel:"noopener noreferrer"},b=n("h2",{id:"adding-document-translations",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#adding-document-translations","aria-hidden":"true"},"#"),s(" Adding document translations")],-1),g={href:"https://github.com/rxliuli/joplin-utils/issues/9",target:"_blank",rel:"noopener noreferrer"},_={href:"https://v2.vuepress.vuejs.org/",target:"_blank",rel:"noopener noreferrer"},f=n("li",null,[s("Add new documents to "),n("em",null,"docs/"),s(" then modify "),n("em",null,"docs/.vuepress/config.js"),s(" to add them to the website")],-1),q=o(`

You will notice that the configuration for the navigation bar is basically a nested array, the sidebar configuration is set via a link within the navigation bar. For example, this is an existing configuration for the joplin-vscode-plugin documentation

{
+  "navbar": [
+    {
+      "text": "joplin-vscode-plugin",
+      "link": "joplin-vscode-plugin/"
+    }
+  ]
+}
+

We can then configure "/joplin-vscode-plugin/" in the corresponding sidebar list

{
+  "sidebar": {
+    "/zh/joplin-vscode-plugin/": [
+      {
+        "text": "Guide",
+        "children": [
+          "/joplin-vscode-plugin/",
+          "/joplin-vscode-plugin/guide/faq",
+          "/joplin-vscode-plugin/guide/feature",
+          "/joplin-vscode-plugin/guide/recommended-extension",
+          "/joplin-vscode-plugin/guide/limitations"
+        ]
+      }
+    ]
+  }
+}
+
`,4);function j(x,y){const i=t("RouterLink"),a=t("ExternalLinkIcon");return c(),p("div",null,[d,n("blockquote",null,[n("p",null,[e(i,{to:"/dev/require.html"},{default:r(()=>[s("Required Dependencies")]),_:1})])]),v,n("p",null,[s("To start you need to fork the project on GitHub, see: "),n("a",m,[s("Fork a repo"),e(a)])]),h,n("p",null,[s("You should be able to see a preview of the local documentation at "),n("a",k,[s("http://localhost:8080/"),e(a)])]),b,n("ol",null,[n("li",null,[s("Check the existing "),n("a",g,[s("documentation optimization"),e(a)]),s(" list. Select a task and reply to the specific line in the issue")]),n("li",null,[s("As we are using "),n("a",_,[s("vuepress2"),e(a)]),s(" you need to understand the basic configuration i.e. how to modify the navigation bar and sidebar as well as how to add new documents")]),f]),q])}const N=l(u,[["render",j],["__file","doc.html.vue"]]);export{N as default}; diff --git a/assets/doc.html.906106fc.js b/assets/doc.html.906106fc.js new file mode 100644 index 00000000..d4f0d79c --- /dev/null +++ b/assets/doc.html.906106fc.js @@ -0,0 +1,33 @@ +import{_ as l,r as t,o as p,c,a as n,b as e,w as u,d as s,f as o}from"./app.d04c4254.js";const r={},d=n("h1",{id:"\u6587\u6863",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u6587\u6863","aria-hidden":"true"},"#"),s(" \u6587\u6863")],-1),v=n("h2",{id:"\u521D\u59CB\u5316\u672C\u5730\u73AF\u5883",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u521D\u59CB\u5316\u672C\u5730\u73AF\u5883","aria-hidden":"true"},"#"),s(" \u521D\u59CB\u5316\u672C\u5730\u73AF\u5883")],-1),k={href:"https://docs.github.com/cn/github/getting-started-with-github/quickstart/fork-a-repo",target:"_blank",rel:"noopener noreferrer"},m=o(`
# \u514B\u9686\u9879\u76EE\u5230\u672C\u5730
+git clone https://github.com/<YOUR GITHUB NAME>/joplin-utils.git
+# \u8FDB\u5165\u5230\u6587\u6863\u6A21\u5757
+cd website/
+# \u5B89\u88C5\u4F9D\u8D56
+yarn
+# \u542F\u52A8\u672C\u5730\u5F00\u53D1\u73AF\u5883
+yarn docs:dev
+
`,1),h={href:"http://localhost:8080/",target:"_blank",rel:"noopener noreferrer"},b=n("h2",{id:"\u6DFB\u52A0\u6587\u6863\u7FFB\u8BD1",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u6DFB\u52A0\u6587\u6863\u7FFB\u8BD1","aria-hidden":"true"},"#"),s(" \u6DFB\u52A0\u6587\u6863\u7FFB\u8BD1")],-1),g={href:"https://github.com/rxliuli/joplin-utils/issues/9",target:"_blank",rel:"noopener noreferrer"},_={href:"https://v2.vuepress.vuejs.org/zh/",target:"_blank",rel:"noopener noreferrer"},q=n("li",null,[s("\u5728 "),n("em",null,"docs/"),s(" \u6216 "),n("em",null,"docs/zh/"),s(" \u4E0B\u6DFB\u52A0\u6587\u6863\uFF0C\u7136\u540E\u5728 "),n("em",null,"docs/.vuepress/config.js"),s(" \u4E2D\u914D\u7F6E\u5373\u53EF")],-1),f=o(`

\u4ED4\u7EC6\u89C2\u5BDF\u4F60\u4F1A\u53D1\u73B0\uFF0C\u5BFC\u822A\u680F\u57FA\u672C\u4E0A\u662F\u4E00\u4E2A\u5D4C\u5957\u6570\u7EC4\uFF0C\u800C\u6BCF\u4E2A\u4FA7\u8FB9\u680F\u914D\u7F6E\u5176\u5B9E\u662F\u9488\u5BF9\u5BFC\u822A\u680F\u7684\u672B\u8282\u70B9\u7684 link \u505A\u914D\u7F6E\u3002 \u4F8B\u5982\u543E\u8F88\u5728\u5BFC\u822A\u680F\u4E2D\u6709\u8FD9\u6837\u4E00\u4E2A\u914D\u7F6E

{
+  "navbar": [
+    {
+      "text": "joplin-vscode-plugin",
+      "link": "/zh/joplin-vscode-plugin/"
+    }
+  ]
+}
+

\u90A3\u4E48\u543E\u8F88\u5FC5\u987B\u914D\u7F6E "/zh/joplin-vscode-plugin/" \u5BF9\u5E94\u7684\u4FA7\u8FB9\u680F\u5217\u8868

{
+  "sidebar": {
+    "/zh/joplin-vscode-plugin/": [
+      {
+        "text": "\u6307\u5357",
+        "children": [
+          "/zh/joplin-vscode-plugin/",
+          "/zh/joplin-vscode-plugin/guide/faq",
+          "/zh/joplin-vscode-plugin/guide/feature",
+          "/zh/joplin-vscode-plugin/guide/recommended-extension",
+          "/zh/joplin-vscode-plugin/guide/limitations"
+        ]
+      }
+    ]
+  }
+}
+
`,4);function j(x,z){const i=t("RouterLink"),a=t("ExternalLinkIcon");return p(),c("div",null,[d,n("blockquote",null,[n("p",null,[e(i,{to:"/zh/dev/require.html"},{default:u(()=>[s("\u73AF\u5883\u8981\u6C42")]),_:1})])]),v,n("p",null,[s("\u9996\u5148\uFF0C\u5728 github \u4E0A fork \u9879\u76EE\uFF0C\u53C2\u8003\uFF1A"),n("a",k,[s("\u590D\u523B\u4ED3\u5E93"),e(a)])]),m,n("p",null,[s("\u4F60\u5E94\u8BE5\u53EF\u4EE5\u5728 "),n("a",h,[s("http://localhost:8080/"),e(a)]),s(" \u770B\u5230\u672C\u5730\u6587\u6863\u7684\u9884\u89C8\u3002")]),b,n("ol",null,[n("li",null,[s("\u68C0\u67E5\u73B0\u6709\u7684 "),n("a",g,[s("\u6587\u4EF6\u4F18\u5316\u8FDB\u5EA6\u5217\u8868"),e(a)]),s("\uFF0C\u53EF\u4EE5\u9009\u62E9\u67D0\u9879\u4EFB\u52A1\uFF0C\u5728 issue \u4E2D\u9009\u62E9\u5E76\u56DE\u590D\u6307\u5B9A\u884C")]),n("li",null,[s("\u7531\u4E8E\u543E\u8F88\u4F7F\u7528\u4E86 "),n("a",_,[s("vuepress2"),e(a)]),s("\uFF0C\u6240\u4EE5\u9700\u8981\u4E86\u89E3\u57FA\u672C\u7684\u914D\u7F6E\uFF0C\u5373\u5982\u4F55\u4FEE\u6539\u5BFC\u822A\u680F\u3001\u4FA7\u8FB9\u680F\uFF0C\u4EE5\u53CA\u5982\u4F55\u6DFB\u52A0\u6587\u6863")]),q]),f])}const N=l(r,[["render",j],["__file","doc.html.vue"]]);export{N as default}; diff --git a/assets/faq.html.1f95e2b4.js b/assets/faq.html.1f95e2b4.js new file mode 100644 index 00000000..1550c8fc --- /dev/null +++ b/assets/faq.html.1f95e2b4.js @@ -0,0 +1,9 @@ +import{_ as r}from"./manually-set-token-of-joplin.65cb3464.js";import{_ as t,r as i,o as l,c as d,a as e,d as n,b as s,f as a}from"./app.d04c4254.js";const c={},p=a(`

\u5E38\u95EE\u95EE\u9898

\u663E\u793A\u9519\u8BEF\u4FE1\u606F Joplin\u2019s token/port is set incorrectly, unable to access Joplin service!

\u8BF7\u5C1D\u8BD5\u5728 CMD/Bash \u6267\u884C\u4EE5\u4E0B\u547D\u4EE4\uFF0C\u5982\u679C\u6CA1\u6709\u95EE\u9898\uFF0C\u5B83\u5E94\u8BE5\u8FD4\u56DE JoplinClipperServer\uFF0C\u5426\u5219\u4F60\u9700\u8981\u5411 Joplin \u5B98\u65B9\u63D0 issue\u3002

curl http://127.0.0.1:41184/ping
+

\u5982\u4F55\u5217\u51FA VSCode \u6253\u5F00\u7684 joplin \u7B14\u8BB0

\u867D\u7136\u6CA1\u6709\u6B63\u5F0F\u7684\u652F\u6301\uFF0C\u4F46\u4F60\u53EF\u4EE5\u4F7F\u7528\u5FEB\u6377\u952E c+j c+o \u6765\u5217\u51FA\u6700\u540E\u4FEE\u6539\u7684 20 \u4E2A joplin \u7B14\u8BB0\u505A\u5230\u7C7B\u4F3C\u7684\u4E8B\u60C5\u3002

\u4E4B\u6240\u4EE5\u6CA1\u6709\u6B63\u5F0F\u652F\u6301\uFF0C\u53EF\u80FD\u5C31\u662F\u56E0\u4E3A\u4E24\u8005\u7684\u529F\u80FD\u91CD\u53E0\uFF0C\u53E6\u5916\uFF0Cvscode \u7684\u6700\u8FD1\u6253\u5F00\u7684\u6587\u4EF6\u4E5F\u4E0D\u4EC5\u4EC5\u662F\u5F53\u524D\u7F16\u8F91\u5668\u6B63\u5728\u6253\u5F00\u7684\u6587\u4EF6\uFF0C\u800C\u662F\u5305\u62EC\u5DF2\u7ECF\u5173\u95ED\u7684\u3002

\u63D2\u4EF6\u6CA1\u6709\u663E\u793A\u5217\u8868

\u8BF7\u68C0\u67E5\u5B8C joplin \u7684\u914D\u7F6E\u9879\u4E4B\u540E\uFF0C\u91CD\u65B0\u542F\u52A8 VSCode\u3002

\u5728\u4FA7\u8FB9\u680F\u4E2D\u70B9\u51FB\u65E0\u6CD5\u6253\u5F00\u7B14\u8BB0

\u8FD9\u4E2A\u95EE\u9898\u53EF\u80FD\u6709\u591A\u4E2A\u539F\u56E0

`,11),h=e("p",null,[n("\u68C0\u67E5\u662F\u5426\u53EF\u4EE5\u5728 joplin \u4E2D\u901A\u8FC7 "),e("strong",null,"\u5207\u6362\u5916\u90E8\u7F16\u8F91"),n(" \u529F\u80FD\u6253\u5F00 vscode")],-1),u={href:"https://github.com/laurent22/joplin/issues/5921#issuecomment-1002692774",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/laurent22/joplin/issues",target:"_blank",rel:"noopener noreferrer"},_={href:"https://discourse.joplinapp.org/t/9277/11",target:"_blank",rel:"noopener noreferrer"},b={href:"https://discourse.joplinapp.org/t/16735",target:"_blank",rel:"noopener noreferrer"},v=a(`
  • \u68C0\u67E5\u4E0B\u9762\u547D\u4EE4\u662F\u5426\u80FD\u591F\u6B63\u5E38\u6267\u884C\uFF0C\u5982\u679C\u4ECD\u7136\u65E0\u6CD5\u5728\u7F16\u8F91\u5668\u4E2D\u6253\u5F00\uFF0C\u53EF\u80FD\u8981\u8BE2\u95EE @laurent22

    curl --location --request POST 'http://localhost:41184/services/externalEditWatcher?token=***' \\
    +--header 'Content-Type: application/json' \\
    +--data-raw '{
    + "action": "openAndWatch",
    + "noteId": "257f6a9dacc1409580ee526d50ac4d49"
    +}'
    +
  • `,1),g=a(`

    Windows 10 \u65E0\u6CD5\u4E0A\u4F20\u526A\u5207\u7248\u56FE\u7247

    \u53EF\u80FD\u662F\u6CA1\u6709\u5B89\u88C5 powershell\uFF0C\u5728 CMD \u4E2D\u8F93\u5165 powershell \u68C0\u67E5

    powershell
    +

    powershell

    `,4),k=e("code",null,"spawn powershell ENOENT",-1),w={href:"https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-windows?view=powershell-7.1",target:"_blank",rel:"noopener noreferrer"},f=e("h2",{id:"\u5982\u4F55\u5728\u4E24\u4E2A\u914D\u7F6E\u540C\u6B65\u7684-vscode-\u4F7F\u7528\u63D2\u4EF6",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u5982\u4F55\u5728\u4E24\u4E2A\u914D\u7F6E\u540C\u6B65\u7684-vscode-\u4F7F\u7528\u63D2\u4EF6","aria-hidden":"true"},"#"),n(" \u5982\u4F55\u5728\u4E24\u4E2A\u914D\u7F6E\u540C\u6B65\u7684 vscode \u4F7F\u7528\u63D2\u4EF6")],-1),j=e("p",null,[n("\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0C\u6BCF\u53F0\u7535\u8111\u4E0A\u7684 joplin \u4F1A\u751F\u6210\u968F\u673A\u7684 token\uFF0C\u4F46\u60A8\u53EF\u4EE5\u624B\u52A8\u4FEE\u6539\u5B83\uFF0C\u4E00\u822C\u914D\u7F6E\u6587\u4EF6\u5728 "),e("em",null,"~/.config/joplin-desktop/settings.json"),n("\uFF0C\u60A8\u53EA\u9700\u8981\u4FEE\u6539\u5176\u4E2D\u7684 "),e("code",null,"api.token"),n(" \u4E3A\u76F8\u540C\u7684 token \u5373\u53EF\u3002")],-1),x=e("p",null,[e("img",{src:r,alt:"\u624B\u52A8\u8BBE\u7F6E joplin \u7684 token"})],-1),q={href:"https://github.com/rxliuli/joplin-utils/issues/25",target:"_blank",rel:"noopener noreferrer"},S=e("h2",{id:"markdown-\u9884\u89C8\u65E0\u6CD5\u663E\u793A\u56FE\u7247",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#markdown-\u9884\u89C8\u65E0\u6CD5\u663E\u793A\u56FE\u7247","aria-hidden":"true"},"#"),n(" markdown \u9884\u89C8\u65E0\u6CD5\u663E\u793A\u56FE\u7247")],-1),C=e("p",null,[n("\u5F53\u4F60\u7B2C\u4E00\u6B21\u4F7F\u7528 joplin vscode \u63D2\u4EF6\u65F6\uFF0C\u4F60\u4E5F\u8BB8\u4F1A\u9047\u5230\u65E0\u6CD5\u5728 markdown \u9884\u89C8\u4E2D\u67E5\u770B\u56FE\u7247\u7684\u95EE\u9898\uFF0C\u5728\u9884\u89C8\u4E2D\u5B58\u5728\u63D0\u793A "),e("strong",null,"Some content has been disabled in this document"),n("\uFF0C\u8FD9\u4E2A\u95EE\u9898\u53EF\u4EE5\u5F88\u7B80\u5355\u7684\u89E3\u51B3\u3002")],-1),E=e("ol",null,[e("li",null,[n("\u8F93\u5165\u547D\u4EE4 "),e("code",null,"markdown.showPreviewSecuritySelector")]),e("li",null,[n("\u5728\u5217\u8868\u4E2D\u9009\u62E9 "),e("code",null,"Allow insecure local content")])],-1),y={href:"https://code.visualstudio.com/docs/languages/markdown#_markdown-preview-security",target:"_blank",rel:"noopener noreferrer"},N=e("h2",{id:"\u4E0D\u517C\u5BB9\u63D2\u4EF6-markdown-preview-enhanced",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u4E0D\u517C\u5BB9\u63D2\u4EF6-markdown-preview-enhanced","aria-hidden":"true"},"#"),n(" \u4E0D\u517C\u5BB9\u63D2\u4EF6 Markdown Preview Enhanced")],-1),V={href:"https://code.visualstudio.com/api/extension-guides/markdown-extension",target:"_blank",rel:"noopener noreferrer"},I={href:"https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one",target:"_blank",rel:"noopener noreferrer"},J={href:"https://github.com/rxliuli/joplin-utils/issues/46",target:"_blank",rel:"noopener noreferrer"};function M(P,B){const o=i("ExternalLinkIcon");return l(),d("div",null,[p,e("ol",null,[e("li",null,[h,e("ol",null,[e("li",null,[n("\u5982\u679C\u4E0D\u80FD\u6253\u5F00\uFF0C\u5219\u9700\u8981\u68C0\u67E5\u8BBE\u7F6E\u9875\u9762\u4E2D\u7684\u6587\u672C\u7F16\u8F91\u5668\u547D\u4EE4\uFF0C\u4F60\u9700\u8981\u8BBE\u7F6E\u4E00\u4E2A\u7F16\u8F91\u5668\uFF0C\u6216\u8005\u6709\u65E0\u6548\u7684\u8BBE\u7F6E\uFF0C\u53C2\u8003\uFF1A"),e("a",u,[n("https://github.com/laurent22/joplin/issues/5921#issuecomment-1002692774"),s(o)])]),e("li",null,[n("\u5982\u679C\u4ECD\u7136\u6709\u95EE\u9898\uFF0C\u8BF7\u53BB joplin \u5B98\u65B9\u9879\u76EE "),e("a",m,[n("\u63D0\u51FA issue"),s(o)])])])]),e("li",null,[e("p",null,[n("\u8BF7\u4F7F\u7528\u7248\u672C v1.4 \u6216\u66F4\u9AD8\uFF0C\u56E0\u4E3A\u5B83\u5305\u542B\u4E86\u5FC5\u987B\u7684 "),e("a",_,[n("action api"),s(o)]),n("\uFF0C\u4F8B\u5982\u5728 VSCode \u4E2D\u6839\u636E noteId \u6253\u5F00\u7B14\u8BB0")])]),e("li",null,[e("p",null,[n("\u786E\u5B9A\u662F\u5728\u5F53\u524D\u7535\u8111\u4E0A\u5B89\u88C5 Joplin \u684C\u9762\u7248\uFF0C\u8BE5\u63D2\u4EF6\u5E76\u4E0D\u652F\u6301 CLI\uFF0C\u56E0\u4E3A\u5B83\u5E76\u4E0D\u5305\u542B\u4E0A\u8FF0\u7684 action api\uFF0C\u53C2\u8003: "),e("a",b,[n("https://discourse.joplinapp.org/t/16735"),s(o)])])]),v]),g,e("p",null,[n("\u5982\u679C\u63D0\u793A "),k,n(" \u5219\u9700\u8981\u5B89\u88C5 powershell\uFF0C\u53C2\u8003\uFF1A"),e("a",w,[n("\u5728 Windows \u4E0A\u5B89\u88C5 PowerShell"),s(o)])]),f,j,x,e("blockquote",null,[e("p",null,[n("\u53C2\u8003\uFF1A"),e("a",q,[n("https://github.com/rxliuli/joplin-utils/issues/25"),s(o)])])]),S,C,E,e("blockquote",null,[e("p",null,[e("a",y,[n("vscode markdown \u6587\u6863"),s(o)])])]),N,e("p",null,[n("\u7531\u4E8E Markdown Preview Enhanced \u81EA\u884C\u6784\u5EFA\u4E86 markdown \u6587\u4EF6\u6E32\u67D3\u7684 webview \u9875\u9762\uFF0C\u800C\u4E14\u4E0D\u5728\u4E4E vscode \u63D0\u4F9B\u7684 "),e("a",V,[n("markdown-it \u6269\u5C55\u63A5\u53E3 api"),s(o)]),n("\uFF0C\u6240\u4EE5\u73B0\u5728\u65E0\u6CD5\u517C\u5BB9\uFF0C\u63A8\u8350\u4F7F\u7528 "),e("a",I,[n("Markdown All in One"),s(o)]),n("\uFF0C\u53C2\u8003\uFF1A"),e("a",J,[n("https://github.com/rxliuli/joplin-utils/issues/46"),s(o)])])])}const A=t(c,[["render",M],["__file","faq.html.vue"]]);export{A as default}; diff --git a/assets/faq.html.f85ed92a.js b/assets/faq.html.f85ed92a.js new file mode 100644 index 00000000..9beae745 --- /dev/null +++ b/assets/faq.html.f85ed92a.js @@ -0,0 +1,10 @@ +import{_ as s}from"./manually-set-token-of-joplin.65cb3464.js";import{_ as a,r,o as l,c as d,a as e,d as n,b as t,f as i}from"./app.d04c4254.js";const c={},p=i(`

    FAQ

    Show error message Joplin's token/port is set incorrectly, unable to access Joplin service!

    Please try to execute the following command in CMD/Bash, if there is no problem, it should return JoplinClipperServer, otherwise you need File an issue with Joplin.

    curl http://127.0.0.1:41184/ping
    +

    On Linux make sure your /etc/hosts contains the following entry

    127.0.0.1  localhost
    +

    Not opened in VSCode after clicking

    `,7),h={href:"https://joplinapp.org/faq/#how-can-i-edit-my-note-in-an-external-text-editor",target:"_blank",rel:"noopener noreferrer"},u=i('

    How to list joplin notes opened by VSCode

    Although there is no official support, you can use the shortcut key c+j c+o to list the last modified 20 joplin notes to do similar things.

    No list displayed in the sidebar

    After checking joplin configuration items, restart VSCode.

    Clicking on the sidebar fails to open the note

    There may be multiple reasons for this problem

    ',6),m=e("p",null,[n("Check if you can open vscode through the "),e("strong",null,"switch external editing"),n(" function in joplin")],-1),g={href:"https://github.com/laurent22/joplin/issues/5921#issuecomment-1002692774",target:"_blank",rel:"noopener noreferrer"},f={href:"https://github.com/laurent22/joplin/issues",target:"_blank",rel:"noopener noreferrer"},b={href:"https://discourse.joplinapp.org/t/9277/11",target:"_blank",rel:"noopener noreferrer"},v={href:"https://discourse.joplinapp.org/t/16735",target:"_blank",rel:"noopener noreferrer"},w=i(`
  • Check whether the following command can be executed normally, if it still cannot be opened in the editor, you may want to ask @laurent22

    curl --location --request POST'http://localhost:41184/services/externalEditWatcher?token=***' \\
    +--header'Content-Type: application/json' \\
    +--data-raw'{
    + "action": "openAndWatch",
    + "noteId": "257f6a9dacc1409580ee526d50ac4d49"
    +}'
    +
  • `,1),_=i(`

    Windows 10 cannot upload a cut version of the picture

    Powershell may not be installed, enter powershell in CMD to check

    powershell
    +

    powershell

    `,4),k=e("code",null,"spawn powershell ENOENT",-1),y={href:"https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-windows?view=powershell-7.1",target:"_blank",rel:"noopener noreferrer"},x=e("h2",{id:"how-to-use-plugins-in-two-synchronized-vscode-configurations",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-to-use-plugins-in-two-synchronized-vscode-configurations","aria-hidden":"true"},"#"),n(" How to use plugins in two synchronized vscode configurations")],-1),j=e("p",null,[n("By default, joplin on each computer will generate a random token, but you can modify it manually. The general configuration file is "),e("em",null,"~/.config/joplin-desktop/settings.json"),n(", you only need to modify the "),e("code",null,"api. The token"),n(" is the same token.")],-1),q=e("p",null,[e("img",{src:s,alt:"Manually set joplin's token"})],-1),S={href:"https://github.com/rxliuli/joplin-utils/issues/25",target:"_blank",rel:"noopener noreferrer"},C=e("h2",{id:"markdown-preview-can-t-display-images",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#markdown-preview-can-t-display-images","aria-hidden":"true"},"#"),n(" markdown preview can't display images")],-1),I=e("p",null,[n("When you first use the joplin vscode plugin, you may encounter the problem of not being able to view images in markdown preview, there is a prompt in the preview "),e("strong",null,"Some content has been disabled in this document"),n(", this problem can be solved very simply.")],-1),P=e("ol",null,[e("li",null,[n("Enter the command "),e("code",null,"markdown.showPreviewSecuritySelector")]),e("li",null,[n("Select "),e("code",null,"Allow insecure local content"),n(" in the list")])],-1),E={href:"https://code.visualstudio.com/docs/languages/markdown#_markdown-preview-security",target:"_blank",rel:"noopener noreferrer"},N=e("h2",{id:"incompatible-plugin-markdown-preview-enhanced",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#incompatible-plugin-markdown-preview-enhanced","aria-hidden":"true"},"#"),n(" Incompatible Plugin Markdown Preview Enhanced")],-1),T={href:"https://code.visualstudio.com/api/",target:"_blank",rel:"noopener noreferrer"},V={href:"https://github.com/rxliuli/joplin-utils/issues/46",target:"_blank",rel:"noopener noreferrer"};function M(A,B){const o=r("ExternalLinkIcon");return l(),d("div",null,[p,e("p",null,[n("Please refer to the official default external editor settings: "),e("a",h,[n("How can I edit my note in an external text editor?"),t(o)])]),u,e("ol",null,[e("li",null,[m,e("ol",null,[e("li",null,[n("If it can't be opened, you need to check the text editor command in the settings page, you need to set an editor, or there are invalid settings, refer to: "),e("a",g,[n("https://github.com/laurent22/joplin/issues/5921#issuecomment-1002692774"),t(o)])]),e("li",null,[n("If you still have problems, please go to the official joplin project "),e("a",f,[n("file an issue"),t(o)])])])]),e("li",null,[e("p",null,[n("Please use version v1.4 or higher, because it contains the necessary "),e("a",b,[n("action api"),t(o)]),n(", for example, open notes based on noteId in VSCode")])]),e("li",null,[e("p",null,[n("Make sure to install the Joplin desktop version on the current computer. The plug-in does not support CLI, because it does not include the above action api, refer to: "),e("a",v,[n("https://discourse.joplinapp.org/t/16735"),t(o)])])]),w]),_,e("p",null,[n("If you are prompted to "),k,n(", you need to install powershell, refer to: "),e("a",y,[n("Install PowerShell on Windows"),t(o)])]),x,j,q,e("blockquote",null,[e("p",null,[n("Reference: "),e("a",S,[n("https://github.com/rxliuli/joplin-utils/issues/25"),t(o)])])]),C,I,P,e("blockquote",null,[e("p",null,[e("a",E,[n("vscode markdown document"),t(o)])])]),N,e("p",null,[n("Since Markdown Preview Enhanced builds its own webview page for rendering markdown files and does not care about the "),e("a",T,[n("markdown-it extension-guides api"),t(o)]),n(" provided by vscode extension-guides/markdown-extension), it is now incompatible and recommends using [Markdown All in One](https://marketplace.visualstudio.com/items?itemName=yzhang. markdown-all-in-one), reference: "),e("a",V,[n("https://github.com/rxliuli/joplin-utils/issues/46"),t(o)])])])}const z=a(c,[["render",M],["__file","faq.html.vue"]]);export{z as default}; diff --git a/assets/feature.html.4eb69cda.js b/assets/feature.html.4eb69cda.js new file mode 100644 index 00000000..9c45ff5d --- /dev/null +++ b/assets/feature.html.4eb69cda.js @@ -0,0 +1 @@ +import{_ as e}from"./convertExternalLink.6b823605.js";import{_ as a,o as r,c as t,f as o}from"./app.d04c4254.js";const n={},c=o('

    \u5176\u4ED6\u529F\u80FD

    \u8F6C\u6362\u5916\u90E8\u94FE\u63A5\u4E3A\u5185\u90E8\u7B14\u8BB0\u5F15\u7528

    \u8FD9\u662F\u4E00\u4E2A\u7A0D\u5FAE\u590D\u6742\u4E00\u70B9\u7684\u529F\u80FD\uFF0C\u5B83\u7684\u4E3B\u8981\u5E94\u7528\u573A\u666F\u662F\u5C06\u4E00\u4E9B\u5916\u90E8\u5F15\u7528\u94FE\u63A5\u8F6C\u6362\u4E3A\u5185\u90E8\u7B14\u8BB0\u5F15\u7528\u94FE\u63A5\u3002

    \u4F8B\u5982\u4E4B\u524D\u53EF\u80FD\u4F7F\u7528 hexo \u7F16\u5199\u535A\u5BA2\uFF0C\u53EF\u80FD\u662F\u7528\u7EDD\u5BF9\u8DEF\u5F84\u5F15\u7528\u5176\u4ED6\u6587\u7AE0\uFF0C\u4F46\u73B0\u5728\u8FC1\u79FB\u5230\u4E86 joplin\uFF0C\u5E0C\u671B\u80FD\u5C06\u535A\u5BA2\u4E4B\u95F4\u7684\u5F15\u7528\u8F6C\u6362\u4E3A joplin \u7B14\u8BB0\u7684\u5185\u90E8\u5F15\u7528\uFF0C\u907F\u514D\u535A\u5BA2\u6587\u7AE0\u7684 url \u53D8\u5316\u5BFC\u81F4\u5F15\u7528 404 \u7684\u95EE\u9898\uFF0C\u800C\u8FD9\u4E2A\u529F\u80FD\u5C31\u662F\u4E3A\u4E86\u7B80\u5316\u64CD\u4F5C\u800C\u751F\u7684\u3002

    convertExternalLink

    ',5),i=[c];function s(_,h){return r(),t("div",null,i)}const p=a(n,[["render",s],["__file","feature.html.vue"]]);export{p as default}; diff --git a/assets/feature.html.6e04f8e7.js b/assets/feature.html.6e04f8e7.js new file mode 100644 index 00000000..48646470 --- /dev/null +++ b/assets/feature.html.6e04f8e7.js @@ -0,0 +1 @@ +import{_ as e}from"./convertExternalLink.6b823605.js";import{_ as t,o as n,c as o,f as r}from"./app.d04c4254.js";const a={},i=r('

    Other functions

    This is a slightly more complex function that is for conversion of external reference links into internal note reference links.

    For example, imagine you have have used hexo to write blogs using absolute paths to reference other notes or posts. Having migrated to Joplin you might now want to convert those absolute paths to internal Joplin references so as to avoid the "404 problem" caused by a change in the URL of a given post. This function was created to simplify this operation.

    convertExternalLink

    ',5),s=[i];function c(l,h){return n(),o("div",null,s)}const u=t(a,[["render",c],["__file","feature.html.vue"]]);export{u as default}; diff --git a/assets/feature.html.8f70f570.js b/assets/feature.html.8f70f570.js new file mode 100644 index 00000000..b6b0f7bf --- /dev/null +++ b/assets/feature.html.8f70f570.js @@ -0,0 +1 @@ +import{_ as t,a as e,b as d}from"./copy-link.7c46ccd4.js";import{_ as a,o,c,f as r}from"./app.d04c4254.js";const i={},n=r('

    Other features

    Configuration table

    FieldDefault valueOptionsDescription
    tokenstringjoplin web server token
    baseUrlhttp://localhost:41184stringThe base path of the joplin web service
    deleteConfirmtruebooleanWhether to remind when deleting
    sortNotesfalsebooleanWhether to sort notes.
    sortNotesTypealphabeticalType of sorting notes.
    alphabeticalSort notes by alphabetical order of its Title property.
    defaultDefault Joplin order (whatever that is).
    sortOrderascOrder of sorting notes (asc or desc)
    asc'asc': ascending order
    desc'desc': descending order (reverse)
    languageenglishThe language displayed by the plugin, follow VSCode
    enEnglish
    zhSimple Chinese

    Hot key

    • f2: Rename notes or directories
    • delete: delete notes or directories
    • ctrl+alt+u: upload pictures from clipboard
    • ctrl+alt+e: upload image from file chooser
    • ctrl+alt+shift+e: add attachments from the file selector
    • ctrl+j ctrl+o: search notes, default to show the 20 most recently modified notes
    • ctrl+j ctrl+i: create attachment
    • ctrl+j ctrl+m: manage tabs
    • ctrl+j ctrl+l: show attached resources for the current note

    Editing attachments

    Since the click-to-jump feature in the vscode editor is often problematic, a feature has been implemented since v0.7.8 to display a list of current note attachments for quick editing of specified attachment resources, with the default shortcut ctrl+j ctrl+l

    editResource

    Paste the image

    After v0.1.7 the image paste function has been added, you can upload images to Joplin and paste links to VSCode via right-click menu, command or shortcut.

    1. ctrl+alt+u to paste the image from clipboard
    2. ctrl+alt+e Use file manager to select the image to paste

    pasteImage

    Add attachment

    After v0.1.10 the ability to add attachments has been added, so you can add files as attached resources to Joplin notes via commands or shortcuts.

    1. ctrl+alt+shift+e Select the file to be added as an attachment

    Create attachment

    After v0.3.0 right-click to create an attachment resource is implemented, mainly for quickly creating and adding a mind map (powered by Baidu Brain Map) or flowchart (powered by draw.io).

    Manage Tags

    After v0.3.0, the command is > Joplin: Manage tags, and the default shortcut is ctrl+j ctrl+m to bring up the checkbox.

    Create tags

    Create tags is supported after v0.3.0, the command is > Joplin: Create tag.

    You can see Copy link in the right click menu on the note, click it to copy to clipboard.

    Link notes

    Use Ctrl+Click to open to other notes.

    ',25),s=[n];function h(l,p){return o(),c("div",null,s)}const u=a(i,[["render",h],["__file","feature.html.vue"]]);export{u as default}; diff --git a/assets/feature.html.91f08a13.js b/assets/feature.html.91f08a13.js new file mode 100644 index 00000000..91e011b5 --- /dev/null +++ b/assets/feature.html.91f08a13.js @@ -0,0 +1 @@ +import{_ as d,a as t,b as e}from"./copy-link.7c46ccd4.js";import{_ as o,o as c,c as a,f as r}from"./app.d04c4254.js";const l={},i=r('

    \u5176\u4ED6\u529F\u80FD

    \u914D\u7F6E\u8868

    \u5B57\u6BB5\u9ED8\u8BA4\u503C\u53EF\u9009\u503C\u8BF4\u660E
    tokenstringjoplin web \u670D\u52A1\u7684 token
    baseUrlhttp://localhost:41184stringjoplin api \u57FA\u7840\u8DEF\u5F84
    deleteConfirmtrueboolean\u5220\u9664\u65F6\u662F\u5426\u63D0\u9192
    sortNotesfalseboolean\u662F\u5426\u5BF9\u7B14\u8BB0\u8FDB\u884C\u6392\u5E8F
    sortNotesTypealphabetical\u7B14\u8BB0\u6392\u5E8F\u7684\u7C7B\u578B
    alphabetical\u6309\u7167\u6807\u9898\u7684\u5B57\u6BCD\u987A\u5E8F\u6392\u5E8F
    defaultJoplin \u9ED8\u8BA4\u7684\u6392\u5E8F
    sortOrderasc\u7B14\u8BB0\u6392\u5E8F\u7684\u987A\u5E8F\uFF08\u5347\u5E8F\u6216\u964D\u5E8F\uFF09
    asc\u5347\u5E8F
    desc\u964D\u5E8F
    languageenglish\u63D2\u4EF6\u663E\u793A\u7684\u8BED\u8A00\uFF0C\u8DDF\u968F VSCode
    en\u82F1\u8BED
    zh\u7B80\u4F53\u4E2D\u6587

    \u5FEB\u6377\u952E

    • f2: \u91CD\u547D\u540D\u7B14\u8BB0\u6216\u76EE\u5F55
    • delete: \u5220\u9664\u7B14\u8BB0\u6216\u76EE\u5F55
    • ctrl+alt+u: \u4ECE\u526A\u5207\u677F\u4E0A\u4F20\u56FE\u7247
    • ctrl+alt+e: \u4ECE\u6587\u4EF6\u9009\u62E9\u5668\u4E0A\u4F20\u56FE\u7247
    • ctrl+alt+shift+e: \u4ECE\u6587\u4EF6\u9009\u62E9\u5668\u6DFB\u52A0\u9644\u4EF6
    • ctrl+j ctrl+o: \u641C\u7D22\u7B14\u8BB0\uFF0C\u9ED8\u8BA4\u663E\u793A\u6700\u8FD1\u4FEE\u6539\u7684 20 \u6761\u7B14\u8BB0
    • ctrl+j ctrl+i: \u521B\u5EFA\u9644\u4EF6
    • ctrl+j ctrl+m: \u7BA1\u7406\u6807\u7B7E
    • ctrl+j ctrl+l: \u663E\u793A\u5F53\u524D\u7B14\u8BB0\u7684\u9644\u4EF6\u8D44\u6E90

    \u7F16\u8F91\u9644\u4EF6

    \u7531\u4E8E\u5728 vscode \u7F16\u8F91\u5668\u4E2D\u5B9E\u73B0\u7684\u70B9\u51FB\u8DF3\u8F6C\u529F\u80FD\u7ECF\u5E38\u5B58\u5728\u95EE\u9898\uFF0C\u6240\u4EE5\u5728 v0.7.8 \u4E4B\u540E\u5B9E\u73B0\u4E86\u663E\u793A\u5F53\u524D\u7B14\u8BB0\u9644\u4EF6\u5217\u8868\u7684\u529F\u80FD\uFF0C\u7528\u4EE5\u5FEB\u901F\u7F16\u8F91\u6307\u5B9A\u9644\u4EF6\u8D44\u6E90\uFF0C\u9ED8\u8BA4\u5FEB\u6377\u952E\u4E3A ctrl+j ctrl+l

    editResource

    \u7C98\u8D34\u56FE\u7247

    v0.1.7 \u4E4B\u540E\u65B0\u589E\u4E86\u56FE\u7247\u7C98\u8D34\u529F\u80FD\uFF0C\u53EF\u4EE5\u901A\u8FC7\u53F3\u952E\u83DC\u5355\u3001\u547D\u4EE4\u6216\u5FEB\u6377\u952E\u5C06\u56FE\u7247\u4E0A\u4F20\u5230 Joplin \u5E76\u7C98\u8D34\u94FE\u63A5\u5230 VSCode \u4E2D\u3002

    1. ctrl+alt+u \u7C98\u8D34\u526A\u5207\u677F\u7684\u56FE\u7247
    2. ctrl+alt+e \u4F7F\u7528\u6587\u4EF6\u7BA1\u7406\u5668\u9009\u62E9\u56FE\u7247\u7C98\u8D34

    pasteImage

    \u6DFB\u52A0\u9644\u4EF6

    v0.1.10 \u4E4B\u540E\u65B0\u589E\u4E86\u6DFB\u52A0\u9644\u4EF6\u7684\u529F\u80FD\uFF0C\u53EF\u4EE5\u901A\u8FC7\u547D\u4EE4\u6216\u5FEB\u6377\u952E\u5C06\u6587\u4EF6\u4F5C\u4E3A\u9644\u4EF6\u8D44\u6E90\u6DFB\u52A0\u5230 Joplin \u7B14\u8BB0\u4E2D\u3002

    1. ctrl+alt+shift+e \u9009\u62E9\u8981\u6DFB\u52A0\u4E3A\u9644\u4EF6\u7684\u6587\u4EF6

    \u521B\u5EFA\u9644\u4EF6

    \u5728 v0.3.0 \u4E4B\u540E\u5B9E\u73B0\u4E86\u53F3\u952E\u521B\u5EFA\u9644\u4EF6\u8D44\u6E90\u7684\u529F\u80FD\uFF0C\u4E3B\u8981\u7528\u4E8E\u5FEB\u901F\u521B\u5EFA\u5E76\u6DFB\u52A0\u4E00\u4E2A\u601D\u7EF4\u5BFC\u56FE\uFF08\u7531\u767E\u5EA6\u8111\u56FE\u63D0\u4F9B\u652F\u6301\uFF09\u6216\u6D41\u7A0B\u56FE\uFF08\u7531 draw.io \u63D0\u4F9B\u652F\u6301\uFF09\u3002

    \u7BA1\u7406\u6807\u7B7E

    \u5728 v0.3.0 \u4E4B\u540E\u652F\u6301\u7BA1\u7406\u6807\u7B7E\uFF0C\u547D\u4EE4\u662F > Joplin: Manage tags\uFF0C\u9ED8\u8BA4\u5FEB\u6377\u952E\u4E3A ctrl+j ctrl+m \u5373\u53EF\u5F39\u51FA\u590D\u9009\u6846\u3002

    \u521B\u5EFA\u6807\u7B7E

    \u5728 v0.3.0 \u4E4B\u540E\u652F\u6301\u521B\u5EFA\u6807\u7B7E\uFF0C\u547D\u4EE4\u662F > Joplin: Create tag\u3002

    \u94FE\u63A5\u7B14\u8BB0

    \u5728\u7B14\u8BB0\u4E0A\u53F3\u952E\u83DC\u5355\u53EF\u4EE5\u770B\u5230 \u590D\u5236\u94FE\u63A5\uFF0C\u70B9\u51FB\u5373\u590D\u5236\u5230\u526A\u5207\u677F\u3002

    Link notes

    \u4F7F\u7528 Ctrl+\u5355\u51FB \u6253\u5F00\u5230\u5176\u4ED6\u7B14\u8BB0\u4E2D\u3002

    ',25),h=[i];function s(n,p){return c(),a("div",null,h)}const _=o(l,[["render",s],["__file","feature.html.vue"]]);export{_ as default}; diff --git a/assets/index.html.0670f073.js b/assets/index.html.0670f073.js new file mode 100644 index 00000000..5b83a058 --- /dev/null +++ b/assets/index.html.0670f073.js @@ -0,0 +1 @@ +import{_ as d,r as o,o as i,c as r,a as e,b as l,w as t,d as n,f as c}from"./app.d04c4254.js";const s={},h=c('

    \u53C2\u4E0E\u9879\u76EE

    \u7B80\u4ECB

    \u4E5F\u8BB8\u4F60\u4E5F\u662F\u4E00\u4E2A\u559C\u6B22\u5206\u4EAB\u3001\u70ED\u7231\u5F00\u6E90\u7684\u4EBA\uFF0C\u90A3\u4E48\u65E0\u8BBA\u4F60\u662F\u5426\u4E3A\u5F00\u53D1\u8005\uFF0C\u90FD\u53EF\u4EE5\u4E00\u8D77\u53C2\u4E0E\u8FDB\u6765\u3002

    \u5982\u4F55\u8D21\u732E

    \u4E3B\u8981\u5206\u4E3A\u4E24\u65B9\u9762

    ',5),u=e("ul",null,[e("li",null,"\u5E2E\u52A9\u7FFB\u8BD1\u6587\u6863\u3001\u56FD\u9645\u5316\u7684\u914D\u7F6E\u6587\u4EF6"),e("li",null,"\u7F16\u5199 vscode \u4E0E joplin \u7684\u7ED3\u5408\u6587\u6863"),e("li",null,"\u7F16\u5199\u53C2\u4E0E\u5F00\u53D1\u7684\u6587\u6863")],-1),_=e("ul",null,[e("li",null,"\u5B9E\u73B0\u672A\u5B8C\u6210\u7684\u529F\u80FD"),e("li",null,"\u63D0\u51FA\u65B0\u7684 idea \u5E76\u5B9E\u73B0")],-1);function f(p,m){const a=o("RouterLink");return i(),r("div",null,[h,e("ul",null,[e("li",null,[l(a,{to:"/zh/dev/doc.html"},{default:t(()=>[n("\u5B8C\u5584\u6587\u6863")]),_:1}),u]),e("li",null,[l(a,{to:"/zh/dev/dev.html"},{default:t(()=>[n("\u7A0B\u5E8F\u5F00\u53D1")]),_:1}),_])])])}const v=d(s,[["render",f],["__file","index.html.vue"]]);export{v as default}; diff --git a/assets/index.html.0a9210ee.js b/assets/index.html.0a9210ee.js new file mode 100644 index 00000000..ee294d53 --- /dev/null +++ b/assets/index.html.0a9210ee.js @@ -0,0 +1 @@ +import{_ as p,r as i,o as s,c as d,a as e,d as o,b as n,w as r,f as a}from"./app.d04c4254.js";const h="/assets/install-plugin.ad435f16.png",c="/assets/joplin-settings.283096ff.png",_={},u=e("h1",{id:"\u5FEB\u901F\u542F\u52A8",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u5FEB\u901F\u542F\u52A8","aria-hidden":"true"},"#"),o(" \u5FEB\u901F\u542F\u52A8")],-1),f=e("h2",{id:"\u6982\u8FF0",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u6982\u8FF0","aria-hidden":"true"},"#"),o(" \u6982\u8FF0")],-1),g=e("p",null,"joplin-vscode-plugin \u63D0\u4F9B\u5728 vscode \u4E2D\u7BA1\u7406 joplin \u7B14\u8BB0\u7684\u529F\u80FD\uFF0C\u5305\u62EC\u5E38\u89C1\u7684\u67E5\u770B\u3001\u7F16\u8F91\u7B14\u8BB0\uFF0C\u7BA1\u7406\u7B14\u8BB0\u7684\u6807\u7B7E\uFF0C\u6DFB\u52A0\u3001\u4FEE\u6539\u9644\u4EF6\uFF0C\u5185\u90E8\u94FE\u63A5\u3001\u641C\u7D22\u7B49\u529F\u80FD\u3002",-1),b=e("p",null,"Joplin Web Clipper \u65E8\u5728\u901A\u8FC7 REST Web API \u4E0E\u6D4F\u89C8\u5668\u6269\u5C55\u8FDB\u884C\u901A\u4FE1\uFF0C\u5171\u4EAB\u7B14\u8BB0\u3001\u7B14\u8BB0\u672C\u3001\u6807\u7B7E\u7B49\u3002joplin-vscode-plugin \u8FDE\u63A5\u5230\u76F8\u540C\u7684 REST \u7AEF\u70B9\uFF0C\u53EF\u4EE5\u5728\u4E0D\u79BB\u5F00\u7F16\u8F91\u5668\u7684\u60C5\u51B5\u4E0B\u67E5\u770B\u548C\u4FEE\u6539\u7B14\u8BB0\u3002",-1),x={href:"https://joplinapp.org/",target:"_blank",rel:"noopener noreferrer"},C={href:"https://joplinapp.org/",target:"_blank",rel:"noopener noreferrer"},j=a('

    \u8981\u6C42

    • Joplin \u7248\u672C > v2.8
    • VSCode \u7248\u672C > v1.66.2
    • \u542F\u7528 Joplin Web Clipper
    • \u719F\u6089 Joplin \u548C VSCode \u7684\u57FA\u672C\u4F7F\u7528\u65B9\u6CD5

    \u5B89\u88C5 Joplin VSCode \u63D2\u4EF6

    \u5728 VSCode \u5E02\u573A\u4E2D\u641C\u7D22 joplin\u3002\u627E\u5230 joplin-vscode-plugin \u5E76\u70B9\u51FB\u5B89\u88C5\u3002

    \u5B89\u88C5\u63D2\u4EF6

    \u914D\u7F6E

    \u8981\u8BBF\u95EE Joplin \u6570\u636E\u5E93\uFF0C\u6211\u4EEC\u9700\u8981\u8FDE\u63A5\u5230 Joplin Web Clipper \u6253\u5F00\u7684 API \u7AEF\u70B9\u3002\u8FD9\u610F\u5473\u7740 Joplin \u5FC5\u987B\u8FD0\u884C\uFF0CWeb Clipper \u5FC5\u987B\u542F\u7528\u3002

    ',7),m={href:"https://joplinapp.org/clipper/",target:"_blank",rel:"noopener noreferrer"},v=e("p",null,"\u8981\u542F\u52A8\u5E76\u8FD0\u884C\uFF0C\u9700\u8981\u6CE8\u610F\u4E24\u4E2A\u8BBE\u7F6E\u3002",-1),J=e("p",null,"\u6388\u6743\u4EE4\u724C",-1),k=e("ul",null,[e("li",null,[o("\u4ECE Joplin \u8BBE\u7F6E\u4E2D\u590D\u5236\u4F60\u7684\u6388\u6743\u4EE4\u724C\u5E76\u7C98\u8D34\u5230\u8FD9\u91CC\u3002 "),e("strong",null,"\u7F51\u9875\u526A\u8F91 -> \u9AD8\u7EA7\u9009\u9879 -> \u62F7\u8D1D Token \u4EE4\u724C"),o("\u3002")])],-1),V=e("p",null,"\u57FA\u672C\u8DEF\u5F84",-1),S={href:"http://localhost:41184",target:"_blank",rel:"noopener noreferrer"},W=a('

    \u5B89\u88C5\u63D2\u4EF6

    \u91CD\u65B0\u542F\u52A8 VSCode

    \u76EE\u524D\u914D\u7F6E\u7F16\u8F91\u540E\u4E0D\u4F1A\u81EA\u52A8\u91CD\u65B0\u8FDE\u63A5\uFF0C\u9700\u8981\u5173\u95ED VSCode\uFF0C\u4E0B\u6B21\u542F\u52A8\u65F6\u5B83\u5C31\u4F1A\u8FDE\u63A5\u5230 Joplin\u3002

    \u5F00\u59CB\u4F7F\u7528

    \u8F93\u5165\u5FEB\u6377\u952E Ctrl+J Ctrl+J\uFF0C\u7136\u540E\u5E86\u795D \u{1F389}\u3002\u8FD9\u4E2A\u5FEB\u6377\u952E\u7EC4\u5408\u6FC0\u6D3B\u4E86 view: show joplin \u547D\u4EE4\uFF0C\u6253\u5F00\u4FA7\u8FB9\u680F\uFF0C\u663E\u793A\u6240\u6709\u7684\u7B14\u8BB0\u672C\u3002

    \u9884\u89C8

    \u529F\u80FD

    \u60A8\u7684\u6240\u6709\u7B14\u8BB0\u548C\u8BB0\u4E8B\u672C\u90FD\u53EF\u4EE5\u5728\u4FA7\u8FB9\u680F\u4E2D\u627E\u5230\uFF0C\u5C55\u5F00\u7B14\u8BB0\u672C\u53EF\u4EE5\u770B\u5230\u4E0B\u9762\u7684\u5B50\u7B14\u8BB0\u672C\u548C\u7B14\u8BB0\u3002

    \u70B9\u51FB\u4E00\u4E2A\u7B14\u8BB0\uFF0C\u5728\u7F16\u8F91\u5668\u4E2D\u6253\u5F00\u4E00\u4E2A\u5DE5\u4F5C\u526F\u672C\uFF0C\u4FDD\u5B58\u5B83\u4EE5\u5C06\u4FEE\u6539\u63A8\u9001\u56DE Joplin\u3002

    \u4F60\u53EF\u4EE5\u968F\u5FC3\u6240\u6B32\u5730\u521B\u5EFA\u3001\u7F16\u8F91\u548C\u5220\u9664 \u7B14\u8BB0 \u548C \u7B14\u8BB0\u672C\uFF0C\u4E00\u5207\u90FD\u5728 VSCode \u4E2D\u4E0D\u95F4\u65AD\u7684\u5B8C\u6210\u3002\u{1F9B8}\u2640\uFE0F

    \u547D\u4EE4\u548C\u952E\u7ED1\u5B9A

    VSCode \u6709\u5F88\u591A\u5FEB\u6377\u952E\u952E\u7ED1\u5B9A\uFF0C\u4E3A\u4E86\u907F\u514D\u4E0E\u5185\u7F6E\u7684\u5FEB\u6377\u952E\u51B2\u7A81\uFF0C\u6211\u4EEC\u5047\u5B9A\u4E86\u4E00\u4E2A\u5FEB\u6377\u952E\u524D\u7F00 Ctrl+J\uFF0C\u5728\u540E\u9762\u7EE7\u7EED\u6DFB\u52A0\u4E8C\u6B65\u5FEB\u6377\u952E\u952E\u3002

    \u63D0\u793A\uFF1A\u63A2\u7D22\u5728\u547D\u4EE4\u8C03\u8272\u677F\u4E2D\u8F93\u5165 joplin \u7684\u7ED3\u679C\uFF0C\u627E\u51FA\u6211\u6CA1\u6709\u544A\u8BC9\u4F60\u7684\u4F1F\u5927\u529F\u80FD\u3002

    ',13);function E(w,I){const t=i("RouterLink"),l=i("ExternalLinkIcon");return s(),d("div",null,[u,f,g,b,e("blockquote",null,[e("p",null,[o("\u4E3A\u4EC0\u4E48\u4F1A\u6709\u8FD9\u4E2A\u63D2\u4EF6\uFF1F\u9605\u8BFB "),n(t,{to:"/zh/joplin-vscode-plugin/other/"},{default:r(()=>[o("\u6211\u7684\u52A8\u673A")]),_:1}),o(" \u4E86\u89E3\u5F00\u53D1\u5B83\u7684\u539F\u56E0\u3002")]),e("p",null,[o("\u5B83\u80FD\u505A\u4EC0\u4E48\uFF1F"),n(t,{to:"/zh/joplin-vscode-plugin/other/roadmap.html"},{default:r(()=>[o("\u8DEF\u7EBF\u56FE")]),_:1}),o(" \u5217\u51FA\u4E86\u73B0\u6709\u548C\u8BA1\u5212\u4E2D\u7684\u529F\u80FD\u3002")]),e("p",null,[o("\u6CA1\u542C\u8BF4\u8FC7 "),e("a",x,[o("\u4E54\u666E\u6797"),n(l)]),o("\uFF1F\u4F60\u9519\u8FC7\u4E86\u4E00\u4E2A\u4E0D\u9519\u7684 "),e("a",C,[o("\u5F00\u6E90\u540C\u6B65\u7B14\u8BB0\u5E94\u7528"),n(l)]),o("\u3002")])]),j,e("blockquote",null,[e("p",null,[o("\u5173\u4E8E Web Clipper \u7684\u5E2E\u52A9\uFF0C\u8BF7\u53C2\u8003 "),e("a",m,[o("Joplin Web Clipper"),n(l)]),o("\u3002")])]),v,J,k,V,e("ul",null,[e("li",null,[o("\u4E00\u822C\u800C\u8A00\uFF0C\u5982\u679C\u4F60\u4F7F\u7528\u672C\u5730\u5B89\u88C5\u7684 joplin \u684C\u9762\u5BA2\u6237\u7AEF\uFF0C\u5219\u4E0D\u9700\u8981\u7279\u6B8A\u914D\u7F6E\u3002\u5982\u679C\u4F7F\u7528\u8FDC\u7AEF\u7684 joplin \u670D\u52A1\uFF0C\u5219\u9700\u8981\u8FDB\u884C\u914D\u7F6E\u3002 \u4F8B\u5982 "),e("a",S,[o("http://localhost:41184"),n(l)])])]),W])}const N=p(_,[["render",E],["__file","index.html.vue"]]);export{N as default}; diff --git a/assets/index.html.15127171.js b/assets/index.html.15127171.js new file mode 100644 index 00000000..3e1cc42f --- /dev/null +++ b/assets/index.html.15127171.js @@ -0,0 +1 @@ +import{_ as l,r as n,o as s,c,a as e,d as t,b as o,w as h,f as r}from"./app.d04c4254.js";const d={},u=r('

    joplin-batch-web

    Handles some batch operations that are not supported by Joplin itself, and presents them as a visual interface.

    • [x] Check for unreferenced attachment resources Some unused attachment resources are not cleaned up in time
    • [x] Check for referenced attachment resources that do not exist Some attachments that are being used may not exist for various reasons
    • [x] Convert external links to internal note references Would like to be able to convert previous blog links to internal :/id links to ensure they never expire
    • [x] Check for notes that don't have a parent directory (usually an error)

    Getting Started

    ',4),p=e("li",null,"open joplin desktop version",-1),b=e("li",null,"Enable the web clipper",-1),f={href:"https://joplin-utils.rxliuli.com/web/joplin-batch-web/#/settings",target:"_blank",rel:"noopener noreferrer"},m=e("li",null,"Navigate to the relevant function page",-1),_=e("p",null,[e("img",{src:"https://github.com/rxliuli/joplin-utils/raw/master/packages/joplin-batch-web/docs/images/guide.gif",alt:"guide"})],-1),g=r('

    FAQ

    Why not use the cli form

    The cli form is not very suitable for this scenario, e.g. when you need to preview unusual attachments or notes, which is more troublesome at the command line.

    Will it record my note data

    ',4),x={href:"https://github.com/rxliuli/joplin-utils/tree/master/packages/joplin-batch-web",target:"_blank",rel:"noopener noreferrer"};function w(k,y){const a=n("ExternalLinkIcon"),i=n("RouterLink");return s(),c("div",null,[u,e("ol",null,[p,b,e("li",null,[t("Fill out the configuration in the "),e("a",f,[t("Settings"),o(a)]),t(" page")]),m]),_,e("blockquote",null,[e("p",null,[t("If you want to participate in the development or run locally, you can refer to "),o(i,{to:"/joplin-batch-web/docs/dev.html"},{default:h(()=>[t("Participate in the project")]),_:1})])]),g,e("p",null,[t("The website works locally, there is no back-end server, if you are still worried, you can check the source code "),e("a",x,[t("joplin-batch-web"),o(a)])])])}const j=l(d,[["render",w],["__file","index.html.vue"]]);export{j as default}; diff --git a/assets/index.html.1c3a4e47.js b/assets/index.html.1c3a4e47.js new file mode 100644 index 00000000..59094034 --- /dev/null +++ b/assets/index.html.1c3a4e47.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-46f0e132","path":"/joplin-search-integration/","title":"Joplin Search Integration","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Introduction","slug":"introduction","link":"#introduction","children":[]},{"level":2,"title":"FAQ","slug":"faq","link":"#faq","children":[{"level":3,"title":"What does token/port refer to and where can I find it?","slug":"what-does-token-port-refer-to-and-where-can-i-find-it","link":"#what-does-token-port-refer-to-and-where-can-i-find-it","children":[]},{"level":3,"title":"No search results in Brave browser","slug":"no-search-results-in-brave-browser","link":"#no-search-results-in-brave-browser","children":[]}]},{"level":2,"title":"Contribute","slug":"contribute","link":"#contribute","children":[]}],"git":{"updatedTime":1683961149000,"contributors":[{"name":"rxliuli","email":"rxliuli@gmail.com","commits":6}]},"filePathRelative":"joplin-search-integration/README.md"}');export{e as data}; diff --git a/assets/index.html.3c279f2d.js b/assets/index.html.3c279f2d.js new file mode 100644 index 00000000..a9b688ad --- /dev/null +++ b/assets/index.html.3c279f2d.js @@ -0,0 +1 @@ +import{_ as e,o as c,c as t}from"./app.d04c4254.js";const n={};function _(o,r){return c(),t("div")}const a=e(n,[["render",_],["__file","index.html.vue"]]);export{a as default}; diff --git a/assets/index.html.4e4b35c3.js b/assets/index.html.4e4b35c3.js new file mode 100644 index 00000000..c16afe1a --- /dev/null +++ b/assets/index.html.4e4b35c3.js @@ -0,0 +1 @@ +import{_ as o,o as n,c as t,a as e,d as l}from"./app.d04c4254.js";const s={},c=e("h1",{id:"\u4E3A\u4EC0\u4E48\u8981\u5F00\u53D1\u8FD9\u4E2A\u63D2\u4EF6",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u4E3A\u4EC0\u4E48\u8981\u5F00\u53D1\u8FD9\u4E2A\u63D2\u4EF6","aria-hidden":"true"},"#"),l(" \u4E3A\u4EC0\u4E48\u8981\u5F00\u53D1\u8FD9\u4E2A\u63D2\u4EF6")],-1),d=e("ol",null,[e("li",null,"\u4F5C\u4E3A\u4E13\u4E1A\u7684\u7F16\u8F91\u5668\uFF0Cvscode \u7684\u7F16\u8F91\u529F\u80FD\u662F\u7B14\u8BB0\u5DE5\u5177\u6240\u65E0\u6CD5\u6BD4\u62DF\u7684\u3002\u4F8B\u5982\uFF0C\u5FEB\u6377\u952E\u652F\u6301\u3002"),e("li",null,"vscode \u4E0D\u4EC5\u662F\u4E00\u4E2A\u7F16\u8F91\u5668\uFF0C\u800C\u4E14\u5177\u6709\u975E\u5E38\u5927\u7684\u63D2\u4EF6\u751F\u6001\u7CFB\u7EDF\uFF0C\u56E0\u6B64\u5B83\u5DF2\u7ECF\u5B9E\u73B0\u4E86 markdown \u683C\u5F0F\u5316\uFF0Clint \u6821\u9A8C\uFF0Cpdf \u5BFC\u51FA\u548C\u5176\u4ED6\u6240\u6709\u529F\u80FD\u3002\u6211\u4EEC\u65E0\u9700\u5728\u7B14\u8BB0\u5DE5\u5177\u4E2D\u91CD\u65B0\u521B\u5EFA\u7F16\u8F91\u5668\u7684\u8F6E\u5B50 - \u53EF\u80FD\u662F\u65B9\u8F6E\u5B50\u3002"),e("li",null,"\u5B9E\u9645\u4E0A\uFF0C\u543E\u8F88\u4E00\u76F4\u5728\u4F7F\u7528 vscode \u7F16\u8F91\u964D\u4EF7\u6587\u6863\uFF0C\u5E76\u4F7F\u7528 git + vscode \u5B58\u50A8\u4E0E\u516C\u53F8\u76F8\u5173\u7684\u6587\u6863\u3002\u540C\u65F6\uFF0Cjoplin \u8FD8\u7528\u4E8E\u5B58\u50A8\u4E2A\u4EBA\u7B14\u8BB0\uFF0C\u4F46\u8FC7\u4E86\u4E00\u4F1A\u513F\uFF0C\u6211\u53D1\u73B0\u6211\u9700\u8981\u7F16\u8F91 vscode + joplin \u7684\u540C\u6B65 / \u641C\u7D22\u529F\u80FD\u3002")],-1),a=e("p",null,"\u56E0\u6B64\uFF0C\u543E\u8F88\u4E3A\u6709\u76F8\u540C\u9700\u6C42\u7684\u4EBA\u7F16\u5199\u4E86\u6B64\u63D2\u4EF6\u3002",-1),i=[c,d,a];function _(r,h){return n(),t("div",null,i)}const f=o(s,[["render",_],["__file","index.html.vue"]]);export{f as default}; diff --git a/assets/index.html.59449ee4.js b/assets/index.html.59449ee4.js new file mode 100644 index 00000000..cb45adac --- /dev/null +++ b/assets/index.html.59449ee4.js @@ -0,0 +1 @@ +import{_ as t,o,c as n,a as e,d as s}from"./app.d04c4254.js";const i={},a=e("h1",{id:"why-write-this-plugin-for-vscode",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#why-write-this-plugin-for-vscode","aria-hidden":"true"},"#"),s(" Why write this plugin for vscode")],-1),r=e("ol",null,[e("li",null,"As a professional editor, the editing function of vscode is unmatched by the note-taking tool. For example, shortcut key support"),e("li",null,"Vscode is not only an editor, but also has a very large plug-in ecosystem, so it has already been implemented in markdown formatting, linter verification, pdf export and other functions. There is no need to re-create the wheel in the note tool - it is possible Is a square wheel"),e("li",null,"In fact, I have been using vscode to edit markdown documents, and git + vscode to store company-related documents. At the same time, joplin is also used to store personal notes, but after a while, I found that I need to edit vscode + the synchronization/search function of joplin.")],-1),l=e("p",null,"So I wrote this plugin for people who have the same needs as me.",-1),d=[a,r,l];function c(h,u){return o(),n("div",null,d)}const p=t(i,[["render",c],["__file","index.html.vue"]]);export{p as default}; diff --git a/assets/index.html.597c080a.js b/assets/index.html.597c080a.js new file mode 100644 index 00000000..40deaac2 --- /dev/null +++ b/assets/index.html.597c080a.js @@ -0,0 +1 @@ +import{_ as d,r as a,o as s,c as p,a as e,d as o,b as n,w as l,f as r}from"./app.d04c4254.js";const h="/images/install-plugin.png",c="/images/joplin-settings.png",u={},b=e("h1",{id:"quick-start",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#quick-start","aria-hidden":"true"},"#"),o(" Quick start")],-1),g=e("h2",{id:"overview",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overview","aria-hidden":"true"},"#"),o(" Overview")],-1),k=e("p",null,[e("code",null,"joplin-vscode-plugin"),o(" offers editing and management of Joplin notes with the power and flexibility of VSCode.")],-1),m=e("p",null,[o("Joplin Web Clipper is designed to communicate with browser extensions by sharing Notes, Notebooks, Tags, etc. through a REST web API. "),e("code",null,"joplin-vscode-plugin"),o(" connects to that same REST endpoint to freely make changes to your notes without ever leaving the editor.")],-1),f={href:"https://joplinapp.org/",target:"_blank",rel:"noopener noreferrer"},_={href:"https://joplinapp.org/",target:"_blank",rel:"noopener noreferrer"},y=r('

    Requirements

    • Joplin version > v2.8
    • VSCode version > v1.66.2
    • Joplin Web Clipper enabled
    • Basic familiarity with using both Joplin and VS Code

    Install Joplin VSCode plugin

    Search for "Joplin" in the VSCode Marketplace. Find "joplin-vscode-plugin" and click Install.

    install plugin

    Configure

    To access the Joplin database, we need a connection to the API endpoint opened by Joplin Web Clipper. That means Joplin must be running and Web Clipper must be enabled.

    ',7),v={href:"https://joplinapp.org/clipper/",target:"_blank",rel:"noopener noreferrer"},C=e("p",null,"Two settings need attention to get up and running.",-1),w=e("p",null,[e("code",null,"Token")],-1),x=e("ul",null,[e("li",null,[o("Copy your Authorization token from Joplin settings and paste it here:"),e("br"),e("strong",null,"Web Clipper -> Advanced options -> Authorization Token")])],-1),J=e("p",null,[e("code",null,"baseUrl")],-1),S={href:"https://1.1.1.1:41184",target:"_blank",rel:"noopener noreferrer"},j=r('

    install plugin

    Restart VSCode

    Currently configuration edits do not trigger a fresh connection. Simply close VSCode and it should connect to Joplin the next time you start.


    Say Hello Joplin

    Type the key chord Ctrl+J Ctrl+J and celebrate. \u{1F389} That hotkey combo activates the View: Show Joplin command, opening the Sidebar to reveal all your Notebooks.

    preview

    Usage

    All your Notes and Noteboks can be found in the Sidebar. Unfold the Notebooks to see Subnotebooks and Notes beneath.

    Click on a Note to open a working copy in the Editor. Save it to push changes back to Joplin.

    You have full access to create, edit, and delete both Notes and Notebooks, at your whim. And it doesn't even stop there. The power is yours now. \u{1F9B8}\u200D\u2640\uFE0F

    Tip: Explore the results of typing "joplin" in the Command Palette to find out what great features I didn't tell you about.

    Commands and keybindings

    VSCode has a lot of keybindings. To avoid constantly clashing with all the built in settings, we laid claim to just one desirable hotekey, Ctrl+J, and turned that into the trigger for a key chord.

    Claiming Ctrl+J displaced the native binding for workbench.action.togglePanel (View: Toggle Panel). For your convenience a sane replacement binding is already added at Ctrl+K Ctrl+J.

    Type Joplin into the Command Palette (Ctrl+P) to see all the new commands available to you. Some of them already have keybindings. Assign new bindings under the Ctrl+J namespace to fit your needs.

    ',16);function q(T,N){const i=a("RouterLink"),t=a("ExternalLinkIcon");return s(),p("div",null,[b,g,k,m,e("blockquote",null,[e("p",null,[o("Why does this plugin exist? Read "),n(i,{to:"/joplin-vscode-plugin/other/"},{default:l(()=>[o("my motivation")]),_:1}),o(" for developing it.")]),e("p",null,[o("What can it do? The "),n(i,{to:"/joplin-vscode-plugin/other/roadmap.html"},{default:l(()=>[o("roadmap")]),_:1}),o(" lists both existing and planned features.")]),e("p",null,[o("Never heard of "),e("a",f,[o("Joplin"),n(t)]),o("? You're missing out on a great "),e("a",_,[o("opensource synchronized note taking app"),n(t)]),o(".")])]),y,e("blockquote",null,[e("p",null,[o("For help with Web Clipper refer to: "),e("a",v,[o("Joplin Web Clipper"),n(t)]),o(".")])]),C,w,x,J,e("ul",null,[e("li",null,[o("In general, if you use the locally installed joplin desktop client, no special configuration is required. If you use a remote joplin service, you need to configure it. For example "),e("a",S,[o("https://1.1.1.1:41184"),n(t)])])]),j])}const I=d(u,[["render",q],["__file","index.html.vue"]]);export{I as default}; diff --git a/assets/index.html.61178983.js b/assets/index.html.61178983.js new file mode 100644 index 00000000..d4e849ca --- /dev/null +++ b/assets/index.html.61178983.js @@ -0,0 +1,7 @@ +import{_ as o,r as s,o as i,c,a as t,d as e,b as n,f as d}from"./app.d04c4254.js";const r={},p=t("h1",{id:"joplin-api",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#joplin-api","aria-hidden":"true"},"#"),e(" joplin api")],-1),l={href:"https://joplin-utils.rxliuli.com/api/joplin-api/",target:"_blank",rel:"noopener noreferrer"},u={href:"https://joplinapp.org/api/references/rest_api/",target:"_blank",rel:"noopener noreferrer"},h=d(`

    \u7B80\u4ECB

    Joplin api \u7684 js \u5C01\u88C5\uFF0C\u4F7F\u7528 ts \u7F16\u5199\uFF0C\u63D0\u4F9B\u5B8C\u6574\u7684\u7C7B\u578B\u5B9A\u4E49\uFF0C\u5305\u542B\u76EE\u524D\u6240\u6709\u5728\u6587\u6863\u4E2D\u516C\u5F00\u7684 api\u3002

    \u5FEB\u901F\u542F\u52A8

    import { config, noteApi } from 'joplin-api'
    +
    +config.baseUrl = 'http://127.0.0.1:27583'
    +config.token = '***'
    +const res = await noteApi.list()
    +console.log(res)
    +
    `,4),k={href:"https://github.com/rxliuli/joplin-utils/tree/master/packages/joplin-api/src/api/__tests__",target:"_blank",rel:"noopener noreferrer"},_=d('

    API \u53C2\u8003

    \u5BF9\u8C61\u63CF\u8FF0
    eventApi\u4E8B\u4EF6\u76F8\u5173\u7684 api\uFF0C\u4F8B\u5982\u83B7\u53D6\u7B14\u8BB0\u4FEE\u6539\u5386\u53F2
    folderApi\u76EE\u5F55\u76F8\u5173 api\uFF0C\u4F8B\u5982\u83B7\u53D6\u76EE\u5F55\u6811
    folderExtApi\u76EE\u5F55\u6269\u5C55 api\uFF0C\u4F8B\u5982\u79FB\u52A8\u76EE\u5F55
    joplinApijoplin \u57FA\u7840 api\uFF0C\u4F8B\u5982\u68C0\u67E5 joplin web \u670D\u52A1\u662F\u5426\u6253\u5F00
    noteActionApi\u7B14\u8BB0\u76F8\u5173\u52A8\u4F5C api\uFF0C\u4F8B\u5982\u5728\u5916\u90E8\u7F16\u8F91\u5668\u6253\u5F00\u7B14\u8BB0
    noteApi\u7B14\u8BB0\u76F8\u5173 api\uFF0C\u4F8B\u5982\u83B7\u53D6\u7B14\u8BB0\u7684\u5185\u5BB9
    noteExtApi\u7B14\u8BB0\u6269\u5C55 api\uFF0C\u4F8B\u5982\u91CD\u547D\u540D
    resourceActionApi\u8D44\u6E90\u52A8\u4F5C api\uFF0C\u4F8B\u5982\u5728\u5916\u90E8\u7F16\u8F91\u5668\u6253\u5F00\u9644\u4EF6\u8D44\u6E90
    resourceApi\u8D44\u6E90\u76F8\u5173 api\uFF0C\u4F8B\u5982\u4E0A\u4F20\u56FE\u7247
    searchApi\u641C\u7D22\u76F8\u5173 api
    tagApi\u6807\u7B7E\u76F8\u5173 api\uFF0C\u4F8B\u5982\u4FEE\u6539\u7B14\u8BB0\u7684\u6807\u7B7E
    config\u5168\u5C40 joplin web clipper \u914D\u7F6E
    PageUtil\u5206\u9875\u76F8\u5173\u7684\u9759\u6001\u5DE5\u5177\u7C7B\uFF0C\u4F8B\u5982\u83B7\u53D6\u5168\u91CF\u7B14\u8BB0\u5217\u8868

    \u7EA6\u5B9A\u4FD7\u79F0

    • \u4F7F\u7528 class \u5C01\u88C5 API\uFF0C\u4F8B\u5982 note \u76F8\u5173\u7684 API \u88AB\u5C01\u88C5\u5728 NoteApi \u7C7B\u4E2D\u3002
    • \u540C\u4E00\u4E2A\u529F\u80FD\u542B\u4E49\u4FDD\u6301\u7EDF\u4E00\u7684\u547D\u540D\u3002\u4F8B\u5982\u7B14\u8BB0\u5217\u8868\u662F NoteApi.list\u3002\u4EE5\u4E0B\u4E3A\u5B8C\u6574\u5BF9\u7167\u8868
    \u542B\u4E49\u547D\u540D\u793A\u4F8B
    \u5217\u8868listnoteApi.list
    \u6839\u636E id \u83B7\u53D6getnoteApi.get
    \u521B\u5EFAcreatenoteApi.create
    \u4FEE\u6539updatenoteApi.update
    \u5220\u9664removenoteApi.remove
    • \u5B58\u5728\u4E00\u4E9B\u7279\u6B8A\u60C5\u51B5\uFF0C\u4F8B\u5982\u6D89\u53CA\u5230\u591A\u4E2A\u5B9E\u4F53\u7684 api\uFF0C\u547D\u540D\u5219\u4E00\u822C\u662F \u64CD\u4F5C\u5B9E\u4F53 + by + \u4F9D\u636E\u5B9E\u4F53\uFF0C\u4F8B\u5982 \u6839\u636E\u7B14\u8BB0 id \u83B7\u53D6\u6807\u7B7E\u5217\u8868\u7684 api \u662F noteApi.tagsById

    \u4E00\u4E9B\u95EE\u9898

    • get \u65B9\u6CD5\u4E0D\u5E94\u8BE5\u62A5\u9519\uFF0C\u5982\u679C\u4E0D\u5B58\u5728\u5E94\u8BE5\u8FD4\u56DE null \u800C\u975E\u629B\u51FA\u5F02\u5E38
    ',8);function b(f,A){const a=s("ExternalLinkIcon");return i(),c("div",null,[p,t("blockquote",null,[t("p",null,[t("a",l,[e("API \u6587\u6863"),n(a)]),e(", "),t("a",u,[e("Joplin \u5B98\u65B9\u6587\u6863"),n(a)])])]),h,t("blockquote",null,[t("p",null,[e("\u66F4\u591A\u793A\u4F8B\u53C2\u8003: "),t("a",k,[e("https://github.com/rxliuli/joplin-utils/tree/master/packages/joplin-api/src/api/__tests__"),n(a)])])]),_])}const m=o(r,[["render",b],["__file","index.html.vue"]]);export{m as default}; diff --git a/assets/index.html.869292c5.js b/assets/index.html.869292c5.js new file mode 100644 index 00000000..4fbd0c08 --- /dev/null +++ b/assets/index.html.869292c5.js @@ -0,0 +1 @@ +import{_ as r,r as l,o as c,c as s,a as e,d as t,b as a,w as h,f as n}from"./app.d04c4254.js";const d={},u=n('

    joplin-batch-web

    \u5904\u7406\u4E00\u4E9B Joplin \u672C\u8EAB\u4E0D\u652F\u6301\u7684\u6279\u91CF\u64CD\u4F5C\uFF0C\u4EE5\u53EF\u89C6\u5316\u754C\u9762\u7684\u5F62\u5F0F\u5C55\u73B0\u51FA\u6765\u3002

    • [x] \u68C0\u67E5\u662F\u5426\u5B58\u5728\u6CA1\u6709\u5F15\u7528\u7684\u9644\u4EF6\u8D44\u6E90 \u4E00\u4E9B\u6CA1\u6709\u4F7F\u7528\u7684\u9644\u4EF6\u8D44\u6E90\u6CA1\u6709\u88AB\u53CA\u65F6\u6E05\u7406
    • [x] \u68C0\u67E5\u5F15\u7528\u7684\u9644\u4EF6\u8D44\u6E90\u4E0D\u5B58\u5728\u7684\u60C5\u51B5 \u4E00\u4E9B\u6B63\u5728\u4F7F\u7528\u7684\u9644\u4EF6\u53EF\u80FD\u7531\u4E8E\u5404\u79CD\u539F\u56E0\u4E0D\u5B58\u5728\u4E86
    • [x] \u8F6C\u6362\u5916\u90E8\u94FE\u63A5\u4E3A\u5185\u90E8\u7B14\u8BB0\u5F15\u7528 \u5E0C\u671B\u80FD\u591F\u5C06\u4E4B\u524D\u7684 blog \u94FE\u63A5\u8F6C\u6362\u4E3A\u5185\u90E8\u7684 :/id \u94FE\u63A5\u4EE5\u4FDD\u8BC1\u6C38\u4E0D\u8FC7\u671F
    • [x] \u68C0\u67E5\u662F\u5426\u5B58\u5728\u6CA1\u6709\u7236\u7EA7\u76EE\u5F55\u7684\u7B14\u8BB0\uFF08\u4E00\u822C\u662F\u9519\u8BEF\uFF09

    \u5F00\u59CB

    ',4),_=e("li",null,"\u6253\u5F00 joplin \u684C\u9762\u7248",-1),p=e("li",null,"\u542F\u7528\u7F51\u9875\u526A\u8F91\u5668",-1),b={href:"https://joplin-utils.rxliuli.com/web/joplin-batch-web/#/settings",target:"_blank",rel:"noopener noreferrer"},f=e("li",null,"\u5BFC\u822A\u5230\u76F8\u5173\u529F\u80FD\u9875\u9762",-1),x=e("p",null,[e("img",{src:"https://github.com/rxliuli/joplin-utils/raw/master/packages/joplin-batch-web/docs/images/guide.gif",alt:"guide"})],-1),m=n('

    FAQ

    \u4E3A\u4EC0\u4E48\u4E0D\u4F7F\u7528 cli \u7684\u5F62\u5F0F

    cli \u7684\u5F62\u5F0F\u4E0D\u592A\u9002\u5408\u8FD9\u79CD\u573A\u666F\uFF0C\u4F8B\u5982\u9700\u8981\u9884\u89C8\u5F02\u5E38\u7684\u9644\u4EF6\u6216\u7B14\u8BB0\uFF0C\u5728\u547D\u4EE4\u884C\u4E0B\u6BD4\u8F83\u9EBB\u70E6\u3002

    \u5B83\u4F1A\u8BB0\u5F55\u6211\u7684\u7B14\u8BB0\u6570\u636E\u4E48

    ',4),g={href:"https://github.com/rxliuli/joplin-utils/tree/master/packages/joplin-batch-web",target:"_blank",rel:"noopener noreferrer"};function j(w,k){const i=l("ExternalLinkIcon"),o=l("RouterLink");return c(),s("div",null,[u,e("ol",null,[_,p,e("li",null,[t("\u5728 "),e("a",b,[t("\u8BBE\u7F6E"),a(i)]),t(" \u9875\u9762\u586B\u5199\u914D\u7F6E")]),f]),x,e("blockquote",null,[e("p",null,[t("\u5982\u679C\u60A8\u5E0C\u671B\u53C2\u4E0E\u5F00\u53D1\u6216\u5728\u672C\u5730\u8FD0\u884C\uFF0C\u53EF\u4EE5\u53C2\u8003 "),a(o,{to:"/zh/joplin-batch-web/docs/zh/dev.html"},{default:h(()=>[t("\u53C2\u4E0E\u9879\u76EE")]),_:1})])]),m,e("p",null,[t("\u7F51\u7AD9\u662F\u5168\u672C\u5730\u5DE5\u4F5C\u7684\uFF0C\u6CA1\u6709\u540E\u7AEF\u670D\u52A1\u5668\uFF0C\u5982\u679C\u4F60\u4ECD\u7136\u62C5\u5FE7\uFF0C\u53EF\u4EE5\u68C0\u67E5\u6E90\u4EE3\u7801 "),e("a",g,[t("joplin-batch-web"),a(i)])])])}const L=r(d,[["render",j],["__file","index.html.vue"]]);export{L as default}; diff --git a/assets/index.html.87d6eee5.js b/assets/index.html.87d6eee5.js new file mode 100644 index 00000000..5e4a914c --- /dev/null +++ b/assets/index.html.87d6eee5.js @@ -0,0 +1 @@ +import{_ as e,o as i,c as a,f as r}from"./app.d04c4254.js";const t={},n=r('

    joplin \u641C\u7D22\u96C6\u6210

    Get uBlock Origin for Chromium Get uBlock Origin for Firefox

    \u7B80\u4ECB

    \u4F7F\u7528\u641C\u7D22\u65F6\uFF0C\u76F8\u5173\u7684\u4E54\u666E\u6797\u7B14\u8BB0\u4E5F\u4F1A\u663E\u793A\u5728\u641C\u7D22\u7ED3\u679C\u4E2D\u3002

    search resultnote preview

    \u76EE\u524D\u652F\u6301\u7684\u641C\u7D22\u5F15\u64CE\u5305\u62EC

    • Google
    • Bing
    • Baidu
    • DuckDuckGo
    • Searx
    • MetaGer

    \u5E38\u89C1\u95EE\u9898

    token/port \u6307\u7684\u662F\u4EC0\u4E48\uFF0C\u5728\u54EA\u513F\u53EF\u4EE5\u627E\u5230\uFF1F

    \u4E00\u822C\u53EF\u4EE5\u5728 \u5DE5\u5177 > \u9009\u9879 > \u7F51\u9875\u526A\u8F91\u5668 \u4E2D\u770B\u5230

    joplin web clipper

    \u5728 Brave \u6D4F\u89C8\u5668\u4E2D\u6CA1\u6709\u641C\u7D22\u7ED3\u679C

    \u5B9E\u9645\u4E0A\u662F Brave \u4F1A\u9ED8\u8BA4\u963B\u6B62\u5176\u4ED6\u57DF\u7684\u8D44\u6E90\uFF0C\u6240\u4EE5\u5728 Google \u641C\u7D22\u7F51\u7AD9\u5173\u95ED\u5B83\u5373\u53EF\u3002

    joplin web clipper

    \u8D21\u732E

    \u5982\u679C\u4F60\u5E0C\u671B\u6DFB\u52A0\u65B0\u7684\u641C\u7D22\u5F15\u64CE\u652F\u6301\uFF0C\u53EF\u4EE5\u63D0\u51FA issue\uFF0C\u6216\u8005 fork \u540E\u4FEE\u6539\u63D0 PR\uFF08\u975E\u5E38\u7B80\u5355 \uFF09

    1. \u5728 manifest.json \u6DFB\u52A0\u5339\u914D\u7684\u641C\u7D22\u5F15\u64CE\u7684 url
    2. \u5B9E\u73B0 BaseSearchEngineAdapter \u63A5\u53E3
    ',17),o=[n];function l(h,s){return i(),a("div",null,o)}const p=e(t,[["render",l],["__file","index.html.vue"]]);export{p as default}; diff --git a/assets/index.html.8da6e519.js b/assets/index.html.8da6e519.js new file mode 100644 index 00000000..2d05394b --- /dev/null +++ b/assets/index.html.8da6e519.js @@ -0,0 +1 @@ +import{_ as a,r as l,o as r,c as d,a as e,b as o,w as n,d as i,f as c}from"./app.d04c4254.js";const s={},u=c('

    Getting involved

    Introduction

    If you are somebody who likes to share with others and has a love for open source, whether you are a developer or not, you can contribute to the project

    How to contribute

    Contribution is currently divided into two areas

    ',5),h=e("ul",null,[e("li",null,"Assist in translation of documents and in localization of configuration files"),e("li",null,"Add to the VSCode/Joplin integration documentation"),e("li",null,"Write development documentation")],-1),f=e("ul",null,[e("li",null,"Implementation of unfinished features"),e("li",null,"Proposal of new ideas and their implementation")],-1);function m(p,_){const t=l("RouterLink");return r(),d("div",null,[u,e("ul",null,[e("li",null,[o(t,{to:"/dev/doc.html"},{default:n(()=>[i("Documentation improvement")]),_:1}),h]),e("li",null,[o(t,{to:"/dev/dev.html"},{default:n(()=>[i("Application development")]),_:1}),f])])])}const b=a(s,[["render",m],["__file","index.html.vue"]]);export{b as default}; diff --git a/assets/index.html.96a8e13a.js b/assets/index.html.96a8e13a.js new file mode 100644 index 00000000..a9b688ad --- /dev/null +++ b/assets/index.html.96a8e13a.js @@ -0,0 +1 @@ +import{_ as e,o as c,c as t}from"./app.d04c4254.js";const n={};function _(o,r){return c(),t("div")}const a=e(n,[["render",_],["__file","index.html.vue"]]);export{a as default}; diff --git a/assets/index.html.d8ac0a8f.js b/assets/index.html.d8ac0a8f.js new file mode 100644 index 00000000..c06f80ec --- /dev/null +++ b/assets/index.html.d8ac0a8f.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-ae8752be","path":"/zh/joplin-search-integration/","title":"joplin \u641C\u7D22\u96C6\u6210","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u7B80\u4ECB","slug":"\u7B80\u4ECB","link":"#\u7B80\u4ECB","children":[]},{"level":2,"title":"\u5E38\u89C1\u95EE\u9898","slug":"\u5E38\u89C1\u95EE\u9898","link":"#\u5E38\u89C1\u95EE\u9898","children":[{"level":3,"title":"token/port \u6307\u7684\u662F\u4EC0\u4E48\uFF0C\u5728\u54EA\u513F\u53EF\u4EE5\u627E\u5230\uFF1F","slug":"token-port-\u6307\u7684\u662F\u4EC0\u4E48-\u5728\u54EA\u513F\u53EF\u4EE5\u627E\u5230","link":"#token-port-\u6307\u7684\u662F\u4EC0\u4E48-\u5728\u54EA\u513F\u53EF\u4EE5\u627E\u5230","children":[]},{"level":3,"title":"\u5728 Brave \u6D4F\u89C8\u5668\u4E2D\u6CA1\u6709\u641C\u7D22\u7ED3\u679C","slug":"\u5728-brave-\u6D4F\u89C8\u5668\u4E2D\u6CA1\u6709\u641C\u7D22\u7ED3\u679C","link":"#\u5728-brave-\u6D4F\u89C8\u5668\u4E2D\u6CA1\u6709\u641C\u7D22\u7ED3\u679C","children":[]}]},{"level":2,"title":"\u8D21\u732E","slug":"\u8D21\u732E","link":"#\u8D21\u732E","children":[]}],"git":{"updatedTime":1683961149000,"contributors":[{"name":"rxliuli","email":"rxliuli@gmail.com","commits":6}]},"filePathRelative":"zh/joplin-search-integration/README.md"}');export{e as data}; diff --git a/assets/index.html.e4f8f26c.js b/assets/index.html.e4f8f26c.js new file mode 100644 index 00000000..711d6de9 --- /dev/null +++ b/assets/index.html.e4f8f26c.js @@ -0,0 +1 @@ +import{_ as e,o as i,c as r,f as a}from"./app.d04c4254.js";const t={},n=a('

    Joplin Search Integration

    Get uBlock Origin for Chromium Get uBlock Origin for Firefox

    Introduction

    When using search, related Joplin notes are also displayed in the search results.

    search resultnote preview

    Currently supported search engines include

    • Google
    • Bing
    • Baidu
    • DuckDuckGo
    • Searx
    • MetaGer

    FAQ

    What does token/port refer to and where can I find it?

    You can usually see it in Tools > Options > Web Clipper

    joplin web clipper

    No search results in Brave browser

    In fact, Brave will block resources from other domains by default, so you can turn it off on the Google search site.

    joplin web clipper

    Contribute

    If you want to add new search engine support, you can raise an issue, or fork it and then modify it to mention PR (very simple)

    1. in manifest.json add the url of matching search engine
    2. implement BaseSearchEngineAdapter interface
    ',17),o=[n];function s(l,c){return i(),r("div",null,o)}const d=e(t,[["render",s],["__file","index.html.vue"]]);export{d as default}; diff --git a/assets/index.html.fe3f49fa.js b/assets/index.html.fe3f49fa.js new file mode 100644 index 00000000..7580a4fe --- /dev/null +++ b/assets/index.html.fe3f49fa.js @@ -0,0 +1,7 @@ +import{_ as i,r as s,o as d,c,a as e,d as t,b as a,f as o}from"./app.d04c4254.js";const r={},p=e("h1",{id:"joplin-api",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#joplin-api","aria-hidden":"true"},"#"),t(" joplin api")],-1),l={href:"https://joplin-utils.rxliuli.com/api/joplin-api/",target:"_blank",rel:"noopener noreferrer"},u={href:"https://joplinapp.org/api/references/rest_api/",target:"_blank",rel:"noopener noreferrer"},h=o(`

    Introduction

    Joplin api's js package, written in ts, provides a complete type definition, including all currently exposed api in the document.

    Quick Start

    import { config, noteApi } from 'joplin-api'
    +
    +config.baseUrl = 'http://127.0.0.1:27583'
    +config.token = '***'
    +const res = await noteApi.list()
    +console.log(res)
    +
    `,4),g={href:"https://github.com/rxliuli/joplin-utils/tree/master/packages/joplin-api/src/api/__tests__",target:"_blank",rel:"noopener noreferrer"},m=o('

    API Reference

    ObjectDescription
    eventApievent-related api, such as getting note modification history
    folderApiDirectory-related api, such as getting directory tree
    folderExtApiDirectory extension api, such as mobile directory
    joplinApijoplin basic api, such as checking whether joplin web service is open
    noteActionApiNote-related action api, such as opening a note in an external editor
    noteApiNote related api, such as getting the content of the note
    noteExtApiNote extension api, such as renaming
    resourceActionApiResource action api, such as opening an attachment resource in an external editor
    resourceApiResource-related api, such as uploading pictures
    searchApiSearch related api
    tagApiTag related api, such as modifying the tag of a note
    configGlobal joplin web clipper configuration
    PageUtilPaging-related static tools, such as getting the full list of notes

    Conventional name

    • Use class to encapsulate API, for example note related API is encapsulated in NoteApi class.
    • Keep the same naming for the same function meaning. For example, the note list is NoteApi.list. The following is a complete comparison table
    MeaningNamingExamples
    ListlistnoteApi.list
    Get by idgetnoteApi.get
    CreatecreatenoteApi.create
    ModifyupdatenoteApi.update
    RemoveremovenoteApi.remove
    • There are some special cases, such as APIs involving multiple entities, the naming is generally operation entity + by + according to entity, for example, the API to get the tag list according to the note id is noteApi.tagsById
    ',6);function f(k,b){const n=s("ExternalLinkIcon");return d(),c("div",null,[p,e("blockquote",null,[e("p",null,[e("a",l,[t("API documentation"),a(n)]),t(", "),e("a",u,[t("Joplin official document"),a(n)])])]),h,e("blockquote",null,[e("p",null,[t("More examples reference: "),e("a",g,[t("https://github.com/rxliuli/joplin-utils/tree/master/packages/joplin-api/src/api/__tests__"),a(n)])])]),m])}const v=i(r,[["render",f],["__file","index.html.vue"]]);export{v as default}; diff --git a/assets/limitations.html.26c77031.js b/assets/limitations.html.26c77031.js new file mode 100644 index 00000000..74ee3d1d --- /dev/null +++ b/assets/limitations.html.26c77031.js @@ -0,0 +1 @@ +import{_ as i,r as n,o as a,c as r,a as e,d as t,b as s}from"./app.d04c4254.js";const c={},l=e("h1",{id:"limitations",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#limitations","aria-hidden":"true"},"#"),t(" Limitations")],-1),d=e("p",null,"Although the plugin currently implements the common features of joplin, there are some limitations that are difficult to deal with. It is also because of these limitations that I do not use a direct vscode-based notes plugin.",-1),h={href:"https://github.com/Microsoft/vscode/issues/32592",target:"_blank",rel:"noopener noreferrer"},u={href:"https://github.com/microsoft/vscode/issues/5240",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/microsoft/vscode/issues/32540",target:"_blank",rel:"noopener noreferrer"},p={href:"https://code.visualstudio.com/api/extension-capabilities/overview#no-dom-access",target:"_blank",rel:"noopener noreferrer"},f=e("li",null,[t("Default shortcuts are a bit tricky to set, you need to consider conflicts with existing shortcuts (temporarily solved by assigning them to the "),e("code",null,"ctrl+j"),t(" namespace)")],-1);function _(g,b){const o=n("ExternalLinkIcon");return a(),r("div",null,[l,d,e("ul",null,[e("li",null,[t("Unable to drag and drop notes, see: "),e("a",h,[t("https://github.com/Microsoft/vscode/issues/32592"),s(o)])]),e("li",null,[t("Can't drag and drop files (e.g. images) into the editor and create references automatically, see: "),e("a",u,[t("https://github.com/microsoft/vscode/issues/5240"),s(o)])]),e("li",null,[t("Cannot preview audio and video, see: "),e("a",m,[t("https://github.com/microsoft/vscode/issues/32540"),s(o)])]),e("li",null,[t("Cannot customize the ui of the plugin, see: "),e("a",p,[t("https://code.visualstudio.com/api/extension-capabilities/overview#no-dom-access"),s(o)])]),f])])}const x=i(c,[["render",_],["__file","limitations.html.vue"]]);export{x as default}; diff --git a/assets/limitations.html.b8ae6ee7.js b/assets/limitations.html.b8ae6ee7.js new file mode 100644 index 00000000..f7383a62 --- /dev/null +++ b/assets/limitations.html.b8ae6ee7.js @@ -0,0 +1 @@ +import{_ as i,r as n,o as r,c,a as e,d as o,b as t}from"./app.d04c4254.js";const l={},a=e("h1",{id:"\u9650\u5236",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u9650\u5236","aria-hidden":"true"},"#"),o(" \u9650\u5236")],-1),d=e("p",null,"\u867D\u7136\u76EE\u524D\u63D2\u4EF6\u5DF2\u7ECF\u5B9E\u73B0\u4E86 joplin \u7684\u5E38\u7528\u529F\u80FD\uFF0C\u4F46\u5374\u662F\u5B58\u5728\u4E00\u4E9B\u96BE\u4EE5\u5904\u7406\u7684\u9650\u5236\u3002\u4E5F\u6B63\u662F\u7531\u4E8E\u8FD9\u4E9B\u9650\u5236\u7684\u5B58\u5728\uFF0C\u6240\u4EE5\u543E\u8F88\u624D\u6CA1\u6709\u4F7F\u7528\u76F4\u63A5\u57FA\u4E8E vscode \u7684\u7B14\u8BB0\u63D2\u4EF6\u3002",-1),h={href:"https://github.com/Microsoft/vscode/issues/32592",target:"_blank",rel:"noopener noreferrer"},u={href:"https://github.com/microsoft/vscode/issues/5240",target:"_blank",rel:"noopener noreferrer"},_={href:"https://github.com/microsoft/vscode/issues/32540",target:"_blank",rel:"noopener noreferrer"},m={href:"https://code.visualstudio.com/api/extension-capabilities/overview#no-dom-access",target:"_blank",rel:"noopener noreferrer"},p=e("li",null,[o("\u9ED8\u8BA4\u7684\u5FEB\u6377\u952E\u8BBE\u7F6E\u6BD4\u8F83\u9EBB\u70E6\uFF0C\u60A8\u9700\u8981\u8003\u8651\u4E0E\u73B0\u6709\u5FEB\u6377\u952E\u7684\u51B2\u7A81\uFF08\u76EE\u524D\u5DF2\u901A\u8FC7\u5C06\u4E4B\u5206\u914D\u5230 "),e("code",null,"ctrl+j"),o(" \u547D\u540D\u7A7A\u95F4\u4E0B\u6682\u65F6\u89E3\u51B3\uFF09")],-1);function f(v,b){const s=n("ExternalLinkIcon");return r(),c("div",null,[a,d,e("ul",null,[e("li",null,[o("\u65E0\u6CD5\u62D6\u653E\u7B14\u8BB0\uFF0C\u53C2\u8003: "),e("a",h,[o("https://github.com/Microsoft/vscode/issues/32592"),t(s)])]),e("li",null,[o("\u65E0\u6CD5\u5C06\u6587\u4EF6\uFF08\u4F8B\u5982\u56FE\u7247\uFF09\u62D6\u653E\u5230\u7F16\u8F91\u5668\u4E2D\u5E76\u81EA\u52A8\u521B\u5EFA\u5F15\u7528\uFF0C\u53C2\u8003: "),e("a",u,[o("https://github.com/microsoft/vscode/issues/5240"),t(s)])]),e("li",null,[o("\u65E0\u6CD5\u9884\u89C8\u663E\u793A\u97F3\u89C6\u9891\uFF0C\u53C2\u8003: "),e("a",_,[o("https://github.com/microsoft/vscode/issues/32540"),t(s)])]),e("li",null,[o("\u65E0\u6CD5\u81EA\u5B9A\u4E49\u63D2\u4EF6\u7684 ui, \u53C2\u8003: "),e("a",m,[o("https://code.visualstudio.com/api/extension-capabilities/overview#no-dom-access"),t(s)])]),p])])}const x=i(l,[["render",f],["__file","limitations.html.vue"]]);export{x as default}; diff --git a/assets/privacy.html.03e508f3.js b/assets/privacy.html.03e508f3.js new file mode 100644 index 00000000..863b9f3d --- /dev/null +++ b/assets/privacy.html.03e508f3.js @@ -0,0 +1 @@ +import{_ as n,r as t,o as i,c as o,a,d as e,b as s,f as c}from"./app.d04c4254.js";const h={},l=c('

    \u9690\u79C1\u653F\u7B56

    \u6B64\u9875\u9762\u544A\u77E5\u60A8\u6211\u4EEC\u5728\u4F7F\u7528 joplin-search-integration \u6269\u5C55\u65F6\u6536\u96C6\u3001\u4F7F\u7528\u548C\u62AB\u9732\u4E2A\u4EBA\u6570\u636E\u7684\u653F\u7B56\uFF0C\u4EE5\u53CA\u60A8\u4E0E\u8BE5\u6570\u636E\u76F8\u5173\u7684\u9009\u62E9\u3002

    \u6211\u4EEC\u4F7F\u7528\u60A8\u7684\u6570\u636E\u6765\u63D0\u4F9B\u548C\u6539\u8FDB\u670D\u52A1\u3002 \u4F7F\u7528\u670D\u52A1\u5373\u8868\u793A\u60A8\u540C\u610F\u6309\u7167\u672C\u653F\u7B56\u6536\u96C6\u548C\u4F7F\u7528\u4FE1\u606F\u3002

    \u6982\u62EC

    • \u6211\u4EEC\u6839\u672C\u4E0D\u8DDF\u8E2A\u6269\u5C55\u7A0B\u5E8F\u7684\u4F7F\u7528\u60C5\u51B5\u3002

    • \u6211\u4EEC\u7EDD\u4E0D\u4F1A\u5728\u60A8\u7684\u6D4F\u89C8\u5668\u4E4B\u5916\u53D1\u9001\u4FE1\u606F\u6216\u6269\u5C55\u8BBE\u7F6E\u3002

    • \u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0C\u8BE5\u6269\u5C55\u4EC5\u4E0E\u652F\u6301\u7684\u641C\u7D22\u5F15\u64CE\u7F51\u7AD9\u4EA4\u4E92\u3002

    \u6570\u636E\u5B58\u50A8

    \u6211\u4EEC\u5C06\u4E00\u4E9B\u6570\u636E\u6C38\u4E45\u5B58\u50A8\u5728\u60A8\u7684\u672C\u5730\u8BBE\u5907\u4E0A\u3002\u5373\u4F7F\u60A8\u7684\u6D4F\u89C8\u5668\u91CD\u65B0\u542F\u52A8\uFF0C\u6B64\u4FE1\u606F\u4ECD\u7136\u53EF\u7528\u3002

    \u6B64\u6570\u636E\u53EA\u80FD\u901A\u8FC7\u6D4F\u89C8\u5668\u4E0A\u7684 joplin-search-integration \u6269\u5C55\u7A0B\u5E8F\u8BBF\u95EE\u3002

    \u5B58\u50A8\u7684\u4FE1\u606F\u53EF\u80FD\u5305\u62EC\uFF1A

    • \u6269\u5C55\u8BBE\u7F6E\uFF08\u5982 joplin clipper service prot/token\uFF09\u3002

    \u6269\u5C55\u672C\u8EAB\u4E0D\u4F1A\u5C06\u4EFB\u4F55\u6B64\u7C7B\u4FE1\u606F\u53D1\u9001\u5230\u60A8\u7684\u8BBE\u5907\u4E4B\u5916\u3002

    \u4F46\u662F\uFF0C\u5982\u679C\u60A8\u542F\u7528 Chrome Sync\u3001Firefox Sync\u3001Edge Sync \u6216\u4EFB\u4F55\u5176\u4ED6\u517C\u5BB9\u7684\u6D4F\u89C8\u5668\u6570\u636E\u540C\u6B65\u529F\u80FD\uFF0C\u5219\u6B64\u4FE1\u606F\u53EF\u80FD\u4F1A\u7531\u60A8\u7684\u6D4F\u89C8\u5668\u53D1\u9001\u5230\u8BE5\u670D\u52A1\u3002

    \u6570\u636E\u91C7\u96C6

    \u6B64\u6269\u5C55\u7A0B\u5E8F\u4E0D\u4F1A\u6536\u96C6\u4EFB\u4F55\u6570\u636E\u6216\u5C06\u5176\u53D1\u9001\u5230\u4EFB\u4F55\u8FDC\u7A0B\u670D\u52A1\u5668\u3002

    \u63A5\u89E6

    ',15),p={href:"https://github.com/rxliuli/joplin-utils/issues",target:"_blank",rel:"noopener noreferrer"};function d(u,_){const r=t("ExternalLinkIcon");return i(),o("div",null,[l,a("p",null,[e("\u5982\u679C\u60A8\u6709\u4EFB\u4F55\u95EE\u9898\uFF0C\u8BF7"),a("a",p,[e("\u6253\u5F00\u4E00\u4E2A\u95EE\u9898"),s(r)]),e("\u3002")])])}const x=n(h,[["render",d],["__file","privacy.html.vue"]]);export{x as default}; diff --git a/assets/privacy.html.f5b742eb.js b/assets/privacy.html.f5b742eb.js new file mode 100644 index 00000000..45f04f9d --- /dev/null +++ b/assets/privacy.html.f5b742eb.js @@ -0,0 +1 @@ +import{_ as t,r as n,o as r,c as i,a as o,d as e,b as s,f as c}from"./app.d04c4254.js";const l={},h=c('

    Privacy Policy

    This page informs you of our policies regarding the collection, use, and disclosure of personal data when using the joplin-search-integration extension and your choices with respect to that data.

    We use your data to provide and improve the service. By using the service, you agree to the collection and use of information in accordance with this policy.

    Summary

    • We do not track the usage of the extension at all.
    • We never send information or extension settings outside of your browser.
    • By default, the extension only interacts with supported search engine websites.

    Data Storage

    We store some data permanently on your local device. This information is still available even if your browser is restarted.

    This data can only be accessed through the joplin-search-integration extension on your browser.

    The stored information may include:

    • Extension settings (such as joplin clipper service prot/token).

    The extension itself does not send any such information outside of your device.

    However, if you enable Chrome Sync, Firefox Sync, Edge Sync, or any other compatible browser data synchronization feature, this information may be sent by your browser to that service.

    Data Collection

    This extension does not collect any data or send it to any remote servers.

    Contact

    ',15),d={href:"https://github.com/rxliuli/joplin-utils/issues",target:"_blank",rel:"noopener noreferrer"};function u(p,y){const a=n("ExternalLinkIcon");return r(),i("div",null,[h,o("p",null,[e("If you have any questions, please "),o("a",d,[e("open an issue"),s(a)]),e(".")])])}const m=t(l,[["render",u],["__file","privacy.html.vue"]]);export{m as default}; diff --git a/assets/recommended-extension.html.0f64f62c.js b/assets/recommended-extension.html.0f64f62c.js new file mode 100644 index 00000000..c718e470 --- /dev/null +++ b/assets/recommended-extension.html.0f64f62c.js @@ -0,0 +1 @@ +import{_ as n,r as a,o as s,c as i,a as e,d as r,b as o}from"./app.d04c4254.js";const l={},d=e("h1",{id:"\u63A8\u8350\u6269\u5C55",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u63A8\u8350\u6269\u5C55","aria-hidden":"true"},"#"),r(" \u63A8\u8350\u6269\u5C55")],-1),c=e("h2",{id:"\u63D2\u4EF6",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u63D2\u4EF6","aria-hidden":"true"},"#"),r(" \u63D2\u4EF6")],-1),p=e("p",null,"\u5148\u7B80\u5355\u5217\u51FA\u543E\u8F88\u4E0E\u7B14\u8BB0\u76F8\u5173\u7684\u63D2\u4EF6\u5217\u8868\uFF0C\u5B83\u4EEC\u90FD\u5B9E\u73B0\u4E86\u67D0\u9879\u7279\u5B9A\u529F\u80FD\u4E14\u53EF\u4EE5\u7EC4\u5408\u3002",-1),h={href:"https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one",target:"_blank",rel:"noopener noreferrer"},m={href:"https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint",target:"_blank",rel:"noopener noreferrer"},_={href:"https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode",target:"_blank",rel:"noopener noreferrer"},u={href:"https://marketplace.visualstudio.com/items?itemName=yzane.markdown-pdf",target:"_blank",rel:"noopener noreferrer"},f={href:"https://marketplace.visualstudio.com/items?itemName=hediet.vscode-drawio",target:"_blank",rel:"noopener noreferrer"},k={href:"https://marketplace.visualstudio.com/items?itemName=eightHundreds.vscode-mindmap",target:"_blank",rel:"noopener noreferrer"},g={href:"https://marketplace.visualstudio.com/items?itemName=pomdtr.excalidraw-editor",target:"_blank",rel:"noopener noreferrer"},b={href:"https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker",target:"_blank",rel:"noopener noreferrer"},v=e("blockquote",null,[e("p",null,"\u4F60\u53EF\u80FD\u6CE8\u610F\u5230\u5176\u4E2D\u90E8\u5206\u63D2\u4EF6\u548C markdown \u6CA1\u4EC0\u4E48\u5173\u7CFB\uFF0C\u4F46\u5B83\u4EEC\u5BF9\u4E8E\u7F16\u8F91\u800C\u8A00\u4ECD\u7136\u662F\u91CD\u8981\u7684\uFF0C\u4F8B\u5982 Joplin \u6700\u8FD1\uFF08v1.4.*\uFF09\u624D\u5B9E\u73B0\u7684\u62FC\u5199\u68C0\u67E5\u529F\u80FD\u5DF2\u7ECF\u5B58\u5728\u73B0\u6709\u7684 VSCode \u63D2\u4EF6\u4E86\u3002")],-1),w=e("h2",{id:"\u66FF\u4EE3\u54C1",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u66FF\u4EE3\u54C1","aria-hidden":"true"},"#"),r(" \u66FF\u4EE3\u54C1")],-1),N={href:"https://discourse.joplinapp.org/t/17671",target:"_blank",rel:"noopener noreferrer"},j={href:"https://discourse.joplinapp.org/t/18463",target:"_blank",rel:"noopener noreferrer"},x={href:"https://marketplace.visualstudio.com/items?itemName=jojoco.markdownfromcsv",target:"_blank",rel:"noopener noreferrer"},M={href:"https://marketplace.visualstudio.com/items?itemName=vscodevim.vim",target:"_blank",rel:"noopener noreferrer"},C={href:"https://discourse.joplinapp.org/t/13364",target:"_blank",rel:"noopener noreferrer"},P={href:"https://code.visualstudio.com/docs/getstarted/userinterface#_outline-view",target:"_blank",rel:"noopener noreferrer"},S={href:"https://discourse.joplinapp.org/t/15624",target:"_blank",rel:"noopener noreferrer"},V={href:"https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode",target:"_blank",rel:"noopener noreferrer"},E={href:"https://discourse.joplinapp.org/t/16183",target:"_blank",rel:"noopener noreferrer"},D={href:"https://code.visualstudio.com/docs/editor/codebasics#_folding",target:"_blank",rel:"noopener noreferrer"},y={href:"https://github.com/joplin/plugin-templates",target:"_blank",rel:"noopener noreferrer"},I={href:"https://code.visualstudio.com/docs/editor/userdefinedsnippets",target:"_blank",rel:"noopener noreferrer"},O={href:"https://discourse.joplinapp.org/t/19204",target:"_blank",rel:"noopener noreferrer"},T={href:"https://code.visualstudio.com/docs/editor/versioncontrol#_diff-editor-review-pane",target:"_blank",rel:"noopener noreferrer"},z={href:"https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one",target:"_blank",rel:"noopener noreferrer"},A={href:"https://github.com/CalebJohn/joplin-rich-markdown#readme",target:"_blank",rel:"noopener noreferrer"},B={href:"https://marketplace.visualstudio.com/items?itemName=ryanmcalister.Unotes",target:"_blank",rel:"noopener noreferrer"},F={href:"https://github.com/benji300/joplin-note-tabs",target:"_blank",rel:"noopener noreferrer"},J={href:"https://code.visualstudio.com/docs/getstarted/userinterface#_tabs",target:"_blank",rel:"noopener noreferrer"};function L(U,W){const t=a("ExternalLinkIcon");return s(),i("div",null,[d,c,p,e("ul",null,[e("li",null,[e("a",h,[r("Markdown All in One"),o(t)]),r(": Markdown \u8BED\u8A00\u652F\u6301")]),e("li",null,[e("a",m,[r("markdown lint"),o(t)]),r(": Markdown linter \u5DE5\u5177")]),e("li",null,[e("a",_,[r("Prettier"),o(t)]),r(": \u591A\u8BED\u8A00\u683C\u5F0F\u5316\u5DE5\u5177\uFF0C\u5BF9 markdown \u7684\u652F\u6301\u975E\u5E38\u597D")]),e("li",null,[e("a",u,[r("Markdown PDF"),o(t)]),r(": Markdown \u5BFC\u51FA PDF")]),e("li",null,[e("a",f,[r("Draw.io Integration"),o(t)]),r(": draw.io \u6D41\u7A0B\u56FE\u96C6\u6210")]),e("li",null,[e("a",k,[r("vscode-mindmap"),o(t)]),r(": \u601D\u7EF4\u5BFC\u56FE\u96C6\u6210\uFF08\u6B64\u4E3A fork \u7248\u672C\uFF0C\u4F46\u66F4\u52A0\u597D\u7528\uFF09")]),e("li",null,[e("a",g,[r("Excalidraw"),o(t)]),r(": \u767D\u677F\u96C6\u6210")]),e("li",null,[e("a",b,[r("Code Spell Checker"),o(t)]),r(": \u5355\u8BCD\u62FC\u5199\u68C0\u67E5")])]),v,w,e("p",null,[r("joplin \u6700\u8FD1\u5F00\u53D1\u4E86\u63D2\u4EF6\u7CFB\u7EDF\uFF0C\u4E5F\u6709\u8BB8\u591A\u5F00\u53D1\u8005\u5728\u4E3A\u5B83\u7F16\u5199 "),e("a",N,[r("\u5404\u79CD\u63D2\u4EF6"),o(t)]),r("\uFF0C\u800C\u4F7F\u7528 joplin-vscode-plugin \u5219\u65E0\u6CD5\u4EAB\u53D7\u5927\u90E8\u5206\u63D2\u4EF6\u5E26\u6765\u7684\u529F\u80FD\u3002\u7136\u800C\uFF0Cvscode \u672C\u8EAB\u5C31\u6709\u4E00\u4E2A\u6781\u5176\u5E9E\u5927\u7684\u63D2\u4EF6\u7CFB\u7EDF\uFF0C\u4EE5\u53CA\u7E41\u591A\u7684\u529F\u80FD\u3002\u4E0B\u9762\u5217\u51FA\u4E86\u4E00\u4E9B joplin plugin \u5728 vscode \u7684\u66FF\u4EE3\u63D2\u4EF6\u6216\u529F\u80FD")]),e("ul",null,[e("li",null,[e("a",j,[r("\u7279\u6B8A\u7C98\u8D34\uFF08\u4F8B\u5982 csv\uFF09"),o(t)]),r("\uFF1A"),e("a",x,[r("Plugin Markdown table from CSV/TSV"),o(t)])]),e("li",null,[r("vim \u7F16\u8F91\uFF1A"),e("a",M,[r("Plugin Vim"),o(t)])]),e("li",null,[e("a",C,[r("\u7B14\u8BB0\u5927\u7EB2\u4FA7\u8FB9\u680F"),o(t)]),r("\uFF1A"),e("a",P,[r("Outline view"),o(t)])]),e("li",null,[e("a",S,[r("markdown \u8868\u683C\u683C\u5F0F\u5316"),o(t)]),r("\uFF1A"),e("a",V,[r("Plugin Prettier - Code formatter"),o(t)])]),e("li",null,[e("a",E,[r("\u7F16\u8F91\u5668\u4E2D\u7684\u6301\u4E45\u6298\u53E0"),o(t)]),r("\uFF1A"),e("a",D,[r("Folding"),o(t)])]),e("li",null,[e("a",y,[r("\u6A21\u677F\u529F\u80FD"),o(t)]),r("\uFF1A"),e("a",I,[r("Snippets"),o(t)])]),e("li",null,[e("a",O,[r("diff \u5BF9\u6BD4"),o(t)]),r("\uFF1A"),e("a",T,[r("Diff editor review pane"),o(t)])]),e("li",null,[r("math \u6A21\u5F0F\uFF1A"),e("a",z,[r("Markdown All in One"),o(t)])]),e("li",null,[e("a",A,[r("rich markdown"),o(t)]),r("\uFF1A"),e("a",B,[r("UNOTES - Markdown Notes WYSIWYG"),o(t)])]),e("li",null,[e("a",F,[r("\u7F16\u8F91\u5668\u5E03\u5C40"),o(t)]),r("\uFF1A"),e("a",J,[r("Tabs"),o(t)])])])])}const q=n(l,[["render",L],["__file","recommended-extension.html.vue"]]);export{q as default}; diff --git a/assets/recommended-extension.html.10ced95d.js b/assets/recommended-extension.html.10ced95d.js new file mode 100644 index 00000000..ce2ea4ad --- /dev/null +++ b/assets/recommended-extension.html.10ced95d.js @@ -0,0 +1 @@ +import{_ as r,r as a,o as i,c as s,a as e,d as t,b as n}from"./app.d04c4254.js";const l={},d=e("h1",{id:"recommended-extensions",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#recommended-extensions","aria-hidden":"true"},"#"),t(" Recommended extensions")],-1),m=e("h2",{id:"plugins",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#plugins","aria-hidden":"true"},"#"),t(" Plugins")],-1),c=e("p",null,"Let's start with a short list of my note taking related plugins that implement a specific feature and can be combined.",-1),h={href:"https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one",target:"_blank",rel:"noopener noreferrer"},p={href:"https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint",target:"_blank",rel:"noopener noreferrer"},u={href:"https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode",target:"_blank",rel:"noopener noreferrer"},_={href:"https://marketplace.visualstudio.com/items?itemName=yzane.markdown-pdf",target:"_blank",rel:"noopener noreferrer"},k={href:"https://marketplace.visualstudio.com/items?itemName=hediet.vscode-drawio",target:"_blank",rel:"noopener noreferrer"},f={href:"https://marketplace.visualstudio.com/items?itemName=eightHundreds.vscode-mindmap",target:"_blank",rel:"noopener noreferrer"},g={href:"https://marketplace.visualstudio.com/items?itemName=pomdtr.excalidraw-editor",target:"_blank",rel:"noopener noreferrer"},v={href:"https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker",target:"_blank",rel:"noopener noreferrer"},w=e("blockquote",null,[e("p",null,"You may notice that some of these plugins have nothing to do with markdown, but they are still important for editing, for example the spell checker feature that was only recently implemented in Joplin (v1.4.*) already exists in the existing VSCode plugins.")],-1);function b(x,N){const o=a("ExternalLinkIcon");return i(),s("div",null,[d,m,c,e("ul",null,[e("li",null,[e("a",h,[t("Markdown All in One"),n(o)]),t(": Markdown language support")]),e("li",null,[e("a",p,[t("markdown lint"),n(o)]),t(": Markdown linter tool")]),e("li",null,[e("a",u,[t("Prettier"),n(o)]),t(": multi-language formatting tool, very good support for markdown")]),e("li",null,[e("a",_,[t("Markdown PDF"),n(o)]),t(": Markdown export PDF")]),e("li",null,[e("a",k,[t("Draw.io Integration"),n(o)]),t(": draw.io Flowchart Integration")]),e("li",null,[e("a",f,[t("vscode-mindmap"),n(o)]),t(": mind map integration (this is the fork version, but it's much better)")]),e("li",null,[e("a",g,[t("Excalidraw"),n(o)]),t(": Whiteboard Integration")]),e("li",null,[e("a",v,[t("Code Spell Checker"),n(o)]),t(": Word spell checker")])]),w])}const E=r(l,[["render",b],["__file","recommended-extension.html.vue"]]);export{E as default}; diff --git a/assets/require.html.208702a9.js b/assets/require.html.208702a9.js new file mode 100644 index 00000000..04fc0101 --- /dev/null +++ b/assets/require.html.208702a9.js @@ -0,0 +1,8 @@ +import{_ as i,r as l,o as r,c as o,a as e,d as n,b as s,f as t}from"./app.d04c4254.js";const c={},d=e("h1",{id:"required-dependencies",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#required-dependencies","aria-hidden":"true"},"#"),n(" Required dependencies")],-1),u=e("ul",null,[e("li",null,"nodejs >= v18"),e("li",null,"pnpm"),e("li",null,"git"),e("li",null,"github")],-1),p=e("h2",{id:"install-nodejs",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#install-nodejs","aria-hidden":"true"},"#"),n(" Install nodejs")],-1),h={href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"},m=t(`
    node -v
    +npm -v
    +

    Install pnpm

    Once you have installed nodejs, install pnpm with the following command

    npm i -g pnpm
    +

    Check whether the pnpm installation was successful

    pnpm -v
    +

    Register on GitHub

    `,7),b={href:"https://github.com/",target:"_blank",rel:"noopener noreferrer"},g=e("h2",{id:"install-git",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#install-git","aria-hidden":"true"},"#"),n(" Install git")],-1),v={href:"https://git-scm.com/",target:"_blank",rel:"noopener noreferrer"},f=e("br",null,null,-1),_=t(`
    git --version
    +

    Finally set your local username and commit email address

    git config --global user.name "FIRST_NAME LAST_NAME"
    +git config --global user.email "MY_NAME@example.com"
    +
    `,3),k={href:"https://docs.github.com/en/get-started/quickstart/set-up-git",target:"_blank",rel:"noopener noreferrer"};function x(w,q){const a=l("ExternalLinkIcon");return r(),o("div",null,[d,u,p,e("p",null,[n("From the "),e("a",h,[n("nodejs official website"),s(a)]),n(" download and install the latest version then use the following commands to check whether the installation was successful")]),m,e("p",null,[n("Go to the "),e("a",b,[n("GitHub website"),s(a)]),n(", click 'sign up' and follow the instructions to create an account")]),g,e("p",null,[n("Download and install from the "),e("a",v,[n("official git website"),s(a)]),n(". If you are using linux or macOS then it may be pre-installed."),f,n(" Run the following to check if installation was successful")]),_,e("blockquote",null,[e("p",null,[n("For further details on how to use git together with GitHub, please refer to the "),e("a",k,[n("official GitHub documentation"),s(a)])])])])}const I=i(c,[["render",x],["__file","require.html.vue"]]);export{I as default}; diff --git a/assets/require.html.c3ed540a.js b/assets/require.html.c3ed540a.js new file mode 100644 index 00000000..8394ef10 --- /dev/null +++ b/assets/require.html.c3ed540a.js @@ -0,0 +1,8 @@ +import{_ as t,r,o as l,c as o,a as e,d as n,b as s,f as i}from"./app.d04c4254.js";const d={},c=e("h1",{id:"\u73AF\u5883\u8981\u6C42",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u73AF\u5883\u8981\u6C42","aria-hidden":"true"},"#"),n(" \u73AF\u5883\u8981\u6C42")],-1),p=e("ul",null,[e("li",null,"nodejs >= v18"),e("li",null,"pnpm"),e("li",null,"git"),e("li",null,"github")],-1),u=e("h2",{id:"\u5B89\u88C5-nodejs",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u5B89\u88C5-nodejs","aria-hidden":"true"},"#"),n(" \u5B89\u88C5 nodejs")],-1),h={href:"https://nodejs.org/en/",target:"_blank",rel:"noopener noreferrer"},b=i(`
    node -v
    +npm -v
    +

    \u5B89\u88C5 pnpm

    \u5728\u5B89\u88C5\u5B8C nodejs \u4E4B\u540E\uFF0C\u4F7F\u7528\u547D\u4EE4\u5B89\u88C5 pnpm

    npm i -g pnpm
    +

    \u68C0\u67E5\u662F\u5426\u6210\u529F\u5B89\u88C5

    pnpm -v
    +

    \u6CE8\u518C github

    `,7),g={href:"https://github.com/",target:"_blank",rel:"noopener noreferrer"},m=e("h2",{id:"\u5B89\u88C5-git",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u5B89\u88C5-git","aria-hidden":"true"},"#"),n(" \u5B89\u88C5 git")],-1),v={href:"https://git-scm.com/",target:"_blank",rel:"noopener noreferrer"},_=i(`
    git --version
    +

    \u7136\u540E\u8BBE\u7F6E\u4F60\u7684\u672C\u5730\u7528\u6237\u540D\u548C\u90AE\u7BB1

    git config --global user.name "FIRST_NAME LAST_NAME"
    +git config --global user.email "MY_NAME@example.com"
    +
    `,3),f={href:"https://docs.github.com/cn/github/getting-started-with-github/quickstart/set-up-git",target:"_blank",rel:"noopener noreferrer"};function k(x,q){const a=r("ExternalLinkIcon");return l(),o("div",null,[c,p,u,e("p",null,[n("\u4ECE "),e("a",h,[n("nodejs \u5B98\u7F51"),s(a)]),n(" \u4E0B\u8F7D\u5E76\u5B89\u88C5\u6700\u65B0\u7248\uFF0C\u7136\u540E\u4F7F\u7528\u4E0B\u9762\u7684\u547D\u4EE4\u68C0\u67E5\u662F\u5426\u6210\u529F\u5B89\u88C5")]),b,e("p",null,[n("\u8FDB\u5165 "),e("a",g,[n("github \u5B98\u7F51"),s(a)]),n("\uFF0C\u70B9\u51FB sign up\uFF0C\u8F93\u5165\u90AE\u7BB1\u548C\u5BC6\u7801\u5373\u53EF\u6210\u529F\u6CE8\u518C\u3002")]),m,e("p",null,[n("\u4ECE "),e("a",v,[n("git \u5B98\u7F51"),s(a)]),n(" \u4E0B\u8F7D git \u5B89\u88C5\u5305\uFF08\u5982\u679C\u662F linux/macos\uFF0C\u90A3\u4E48\u4F60\u53EF\u80FD\u5DF2\u7ECF\u5B89\u88C5\u5B83\u4E86\uFF09\uFF0C\u5B89\u88C5\u5B8C\u6210\u540E\u68C0\u67E5")]),_,e("blockquote",null,[e("p",null,[n("\u5177\u4F53\u5982\u4F55\u7ED3\u5408 git \u548C github \u4E00\u8D77\u4F7F\u7528\u8BF7\u53C2\u8003 "),e("a",f,[n("github \u5B98\u65B9\u6587\u6863"),s(a)])])])])}const N=t(d,[["render",k],["__file","require.html.vue"]]);export{N as default}; diff --git a/assets/roadmap.html.a0d4133a.js b/assets/roadmap.html.a0d4133a.js new file mode 100644 index 00000000..8f68bf31 --- /dev/null +++ b/assets/roadmap.html.a0d4133a.js @@ -0,0 +1 @@ +import{_ as t,r,o as c,c as s,a as l,d as e,b as i,f as n}from"./app.d04c4254.js";const a={},d=l("h1",{id:"\u8DEF\u7EBF\u56FE",tabindex:"-1"},[l("a",{class:"header-anchor",href:"#\u8DEF\u7EBF\u56FE","aria-hidden":"true"},"#"),e(" \u8DEF\u7EBF\u56FE")],-1),u=n("
  • \u7F16\u8F91
    • [x] \u7C98\u8D34\u56FE\u7247\u81EA\u52A8\u4E0A\u4F20\u5230 joplin \u5E76\u83B7\u53D6\u94FE\u63A5\u63D2\u5165
      • [x] \u652F\u6301\u7F16\u8F91\u5668\u53F3\u952E\u83DC\u5355\u7C98\u8D34\u526A\u5207\u677F\u56FE\u7247
    • [x] \u89E3\u51B3 joplin ref link \u5728\u7F16\u8F91\u5668\u4E2D\u4E0D\u80FD ctrl+click \u6253\u5F00\u7684\u95EE\u9898
    • [x] \u7F16\u8F91\u5668\u81EA\u5B9A\u4E49\u9762\u5305\u5C51\uFF0C\u70B9\u51FB\u65F6\u81EA\u52A8\u5C55\u5F00\u5DE6\u8FB9\u7684\u4FA7\u8FB9\u680F -- \u653E\u5F03\uFF0C\u8FD9\u5B9E\u5728\u6CA1\u4EC0\u4E48\u5FC5\u8981
    • [x] \u652F\u6301\u5728 markdown \u76F4\u63A5\u5C06 .drawio/.km \u7684\u6587\u4EF6\u4F5C\u4E3A\u56FE\u7247\u663E\u793A\u3002-- \u4F7F\u7528 drawio.svg/km.svg
    • [x] \u96C6\u6210 joplin v1.5 \u76F4\u63A5\u9884\u89C8\u89C6\u9891\u3001\u97F3\u9891\u3001PDF \u9644\u4EF6\u8D44\u6E90\u7684\u529F\u80FD\u3002-- \u786E\u5B9A\u4E0D\u53EF\u884C
  • ",1),h=l("li",null,"[x] \u5728\u4EE3\u7801\u7F16\u8F91\u5668\u4E2D\u76F4\u63A5\u6DFB\u52A0\u5F15\u7528 -- \u4F7F\u7528\u641C\u7D22\u6846\u9009\u62E9",-1),x=l("li",null,"[x] \u5B9E\u73B0\u7B14\u8BB0\u591A\u9009\u529F\u80FD -- \u6682\u4E0D\u5B9E\u73B0",-1),_={href:"https://github.com/microsoft/vscode/issues/97095",target:"_blank",rel:"noopener noreferrer"},p=l("ul",null,[l("li",null,"[x] \u7B14\u8BB0\u6807\u9898\u5927\u7EB2"),l("li",null,"[x] \u7B14\u8BB0\u7684\u9644\u4EF6\u8D44\u6E90\u4E0E\u5F15\u7528\u7B14\u8BB0"),l("li",null,"[x] \u7B14\u8BB0\u7684\u65F6\u95F4\u7EBF\u529F\u80FD")],-1),f=n('
  • [x] \u5904\u7406 vscode \u4E0D\u80FD\u4ECE\u94FE\u63A5\u6253\u5F00 .drawio \u7684\u95EE\u9898\uFF08\u53EF\u80FD\u4E5F\u5305\u542B .km \u7684\u601D\u7EF4\u5BFC\u56FE\uFF09
  • [x] \u5BF9 todo \u542F\u7528\u7279\u6B8A\u7684\u53F3\u952E\u83DC\u5355\u53CA icon
  • [x] \u652F\u6301\u5728\u7B14\u8BB0\u4E2D\u76F4\u63A5\u521B\u5EFA\u9644\u4EF6\uFF0C\u4E3B\u8981\u662F\u4E3A\u4E86\u53EF\u4EE5\u76F4\u63A5\u521B\u5EFA\u4EE3\u7801\u6587\u4EF6
  • [x] \u4FEE\u590D bug \u4ECE\u526A\u5207\u677F\u4E0A\u4F20\u56FE\u7247\u65F6\u63D0\u793A Cannot read property 'globalStoragePath' of undefined
  • [x] \u4F18\u5316\u6D88\u606F\u56FD\u9645\u5316
  • [x] \u6DFB\u52A0\u5F00\u53D1\u76F8\u5173\u6587\u6863
  • [x] \u4FEE\u590D\u6839\u76EE\u5F55\u7684\u7B14\u8BB0\u65E0\u6CD5\u663E\u793A\u7684\u95EE\u9898
  • [x] \u652F\u6301\u5728\u5916\u90E8\u7A0B\u5E8F\u4E2D\u67E5\u770B\u9644\u4EF6\u8D44\u6E90
    • [x] \u6253\u5F00\u9644\u4EF6\u8D44\u6E90\u65F6\u81EA\u52A8\u76D1\u89C6\u53D8\u5316\uFF0C\u4F7F\u7528 open \u8FD4\u56DE\u7684 child_process -- \u7531 joplin \u8D1F\u8D23
  • [x] \u641C\u7D22\u65F6\u9ED8\u8BA4\u663E\u793A\u6700\u8FD1\u7F16\u8F91\u7684 20 \u6761\u5386\u53F2\u7B14\u8BB0
  • [x] \u7F16\u5199\u4F7F\u7528 VSCode \u7F16\u5199 Markdown \u6587\u6863\u7684\u4E00\u4E9B\u5EFA\u8BAE\uFF0C\u53C2\u8003\uFF1A\u4E2A\u4EBA\u7ECF\u9A8C\u5206\u4EAB\uFF1A\u4F7F\u7528 VSCode + Joplin \u4F5C\u4E3A\u7B14\u8BB0\u5DE5\u5177
  • [x] \u5E94\u8BE5\u5141\u8BB8\u62D6\u52A8\u7B14\u8BB0\u6216\u76EE\u5F55 -- vscode api \u4E0D\u652F\u6301
  • [x] \u7B14\u8BB0/\u76EE\u5F55\u91CD\u547D\u540D\u76F4\u63A5\u5C31\u5730\u51FA\u73B0\u8F93\u5165\u6846 -- vscode api \u4E0D\u652F\u6301
  • ',12),m=l("li",null,[e("\u6807\u7B7E\u76F8\u5173 "),l("ul",null,[l("li",null,"[x] \u4E3A\u7B14\u8BB0\u6DFB\u52A0\u6807\u7B7E"),l("li",null,"[x] \u4E3A\u7B14\u8BB0\u5220\u9664\u6807\u7B7E"),l("li",null,"[x] \u91CD\u547D\u540D\u6807\u7B7E")])],-1),g=l("li",null,"\u6574\u7406 vscode api \u4F7F\u7528",-1),k=l("li",null,"[x] \u4F18\u5316\u6027\u80FD",-1),b=l("li",null,"[x] \u4F7F\u7528\u63D2\u4EF6\u5C06\u4E4B\u96C6\u6210\u5230 joplin \u4E2D",-1),v={href:"https://echarts.apache.org/examples/zh/editor.html?c=graph",target:"_blank",rel:"noopener noreferrer"},j={href:"https://echarts.apache.org/examples/zh/editor.html?c=treemap-disk",target:"_blank",rel:"noopener noreferrer"},w={href:"https://github.com/ecomfe/echarts-wordcloud",target:"_blank",rel:"noopener noreferrer"},V=l("li",null,"[x] timeline \u65F6\u95F4\u7EBF",-1),C=l("li",null,[e("\u521B\u9020 joplin-blog "),l("ul",null,[l("li",null,"[x] \u63D0\u9AD8\u6027\u80FD"),l("li",null,"[x] \u4F18\u5316 ux"),l("li",null,"[x] \u5BFC\u51FA\u6307\u5B9A\u7B14\u8BB0\u5230 hexo blog"),l("li",null,"[x] \u89E3\u51B3\u5185\u5D4C\u56FE\u7247\u7684\u95EE\u9898"),l("li",null,"[x] \u89E3\u51B3\u9644\u4EF6\u8D44\u6E90\u7684\u95EE\u9898"),l("li",null,"[x] \u89E3\u51B3\u5185\u90E8\u5F15\u7528\u7B14\u8BB0\u7684\u95EE\u9898")])],-1);function N(S,B){const o=r("ExternalLinkIcon");return c(),s("div",null,[d,l("ul",null,[u,l("li",null,[e("\u4F18\u5316 "),l("ul",null,[h,x,l("li",null,[e("[x] \u6DFB\u52A0 outline \u6807\u9898\u4FA7\u8FB9\u680F\uFF08\u7B49\u5F85 api \u652F\u6301\u3001\u6216\u81EA\u884C\u5B9E\u73B0 "),l("a",_,[e("https://github.com/microsoft/vscode/issues/97095"),i(o)]),e("\uFF09-- \u4F7F\u7528 ctrl+f12 \u5FEB\u6377\u952E\u663E\u793A\u5217\u8868 "),p]),f])]),m,g,l("li",null,[e("\u521B\u9020 joplin-chars -- \u5E9F\u5F03 "),l("ul",null,[k,b,l("li",null,[e("[x] "),l("a",v,[e("\u7B14\u8BB0\u5173\u7CFB\u56FE"),i(o)])]),l("li",null,[e("[x] "),l("a",j,[e("\u7B14\u8BB0\u76EE\u5F55\u5927\u5C0F\u5206\u6790\u56FE"),i(o)])]),l("li",null,[e("[x] "),l("a",w,[e("\u8BCD\u4E91"),i(o)])]),V])]),C])])}const z=t(a,[["render",N],["__file","roadmap.html.vue"]]);export{z as default}; diff --git a/assets/roadmap.html.fa344b33.js b/assets/roadmap.html.fa344b33.js new file mode 100644 index 00000000..4f0436c2 --- /dev/null +++ b/assets/roadmap.html.fa344b33.js @@ -0,0 +1 @@ +import{_ as n,r as a,o as r,c as s,a as e,d as i,b as t,f as o}from"./app.d04c4254.js";const c={},d=e("h1",{id:"roadmap",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#roadmap","aria-hidden":"true"},"#"),i(" Roadmap")],-1),u=o("
  • Edit
    • [x] Paste image automatically upload to joplin and get link to insert
      • [x] Support editor right-click menu to paste clipboard images
    • [x] Solve the problem that joplin ref link can't be opened by ctrl+click in the editor
    • [x] Editor custom breadcrumbs, automatically expand the left sidebar when clicked -- give up, it's not really necessary
    • [ ] support for displaying .drawio/.km files as images directly in markdown
    • [x] Integrate with joplin v1.5 to directly preview video, audio, and PDF attachments. -- Determine infeasibility
  • ",1),p=e("li",null,"[ ] Add references directly in the code editor -- use search box to select",-1),h=e("li",null,"[ ] Implement note multi-selection feature",-1),m={href:"https://github.com/microsoft/vscode/issues/97095",target:"_blank",rel:"noopener noreferrer"},g=e("ul",null,[e("li",null,"[ ] Note title outline"),e("li",null,"[ ] Attachment resources and citation notes for notes"),e("li",null,"[ ] Timeline functionality for notes")],-1),_=o('
  • [ ] Handle vscode not opening .drawio from links (may also include .km mind maps)
  • [x] enable special right-click menu and icons for todo
  • [x] support creating attachments directly in notes, mainly to create code files directly
  • [x] Fix bug Cannot read property 'globalStoragePath' of undefined when uploading images from clipboard
  • [x] Optimize message internationalization
  • [x] Add development related documentation
  • [x] Fix the problem that notes in the root directory cannot be displayed
  • [x] Support viewing attached resources in external applications
    • [x] Automatically monitor changes when opening attached resources, using child_process returned by open -- by joplin
  • [x] Show the 20 most recently edited historical notes by default when searching
  • [x] Some suggestions for writing Markdown documents using VSCode, see: Personal experience sharing: Using VSCode + Joplin as a note taking tool
  • [x] should allow dragging notes or directories -- vscode api doesn't support it
  • [x] Note/directory renaming appears directly in place in the input box -- vscode api does not support
  • ',12),f=e("li",null,[i("Tagging related "),e("ul",null,[e("li",null,"[x] Add tags to notes"),e("li",null,"[x] Remove tags for notes"),e("li",null,"[x] Rename tags")])],-1),x=e("li",null,"Organizing vscode api usage",-1),b=e("li",null,"[ ] Optimize performance",-1),y=e("li",null,"[ ] integrate it into joplin using plugins",-1),k={href:"https://echarts.apache.org/examples/zh/editor.html?c=graph",target:"_blank",rel:"noopener noreferrer"},v={href:"https://echarts.apache.org/examples/zh/editor.html?c=treemap-disk",target:"_blank",rel:"noopener noreferrer"},w={href:"https://github.com/ecomfe/echarts-wordcloud",target:"_blank",rel:"noopener noreferrer"},S=e("li",null,"[x] timeline timeline",-1),z=e("li",null,[i("Create joplin-blog "),e("ul",null,[e("li",null,"[ ] Improving performance"),e("li",null,"[ ] Optimize ux"),e("li",null,"[x] Export specified notes to hexo blog"),e("li",null,"[x] Resolve inline image issue"),e("li",null,"[x] Resolve attachment resource issue"),e("li",null,"[x] Solve the problem of internal reference notes")])],-1);function N(j,A){const l=a("ExternalLinkIcon");return r(),s("div",null,[d,e("ul",null,[u,e("li",null,[i("Optimization "),e("ul",null,[p,h,e("li",null,[i("[ ] Add outline title sidebar (waiting for api support, or implement "),e("a",m,[i("https://github.com/microsoft/vscode/issues/97095"),t(l)]),i(" by yourself) "),g]),_])]),f,x,e("li",null,[i("Create joplin-chars "),e("ul",null,[b,y,e("li",null,[i("[x] "),e("a",k,[i("Notes relationship diagram"),t(l)])]),e("li",null,[i("[x] "),e("a",v,[i("Notes directory size analysis diagram"),t(l)])]),e("li",null,[i("[x] "),e("a",w,[i("word cloud"),t(l)])]),S])]),z])])}const E=n(c,[["render",N],["__file","roadmap.html.vue"]]);export{E as default}; diff --git a/dev/dev.html b/dev/dev.html index bef5ccad..8c3bd413 100644 --- a/dev/dev.html +++ b/dev/dev.html @@ -23,7 +23,7 @@ } Development | Joplin Utils - + @@ -33,6 +33,6 @@ pnpm && pnpm run setup # Enter the corresponding module development code, refer to README for details

    joplin-vscode-plugin

    1. code apps/joplin-vscode-plugin
    2. run joplin dev mode, ref: https://joplinapp.org/api/references/development_mode/open in new windowimage
    3. enable clipper service image
    4. cp .vscode/_launch.json .vscode/launch.json
    5. modify .vscode/launch.json, set env.JOPLIN_TOKEN, example: image
    6. pnpm dev
    7. F5 run debug

    joplin-batch-web

    1. code apps/joplin-batch-web
    2. pnpm dev

    refer to

    - + diff --git a/dev/doc.html b/dev/doc.html index 97279a6f..9a9d346d 100644 --- a/dev/doc.html +++ b/dev/doc.html @@ -23,7 +23,7 @@ } Documentation | Joplin Utils - + @@ -60,6 +60,6 @@ } } - + diff --git a/dev/index.html b/dev/index.html index f1b46ac7..594704d2 100644 --- a/dev/index.html +++ b/dev/index.html @@ -23,11 +23,11 @@ } Getting involved | Joplin Utils - +

    Getting involved

    Introduction

    If you are somebody who likes to share with others and has a love for open source, whether you are a developer or not, you can contribute to the project

    How to contribute

    Contribution is currently divided into two areas

    • Documentation improvement
      • Assist in translation of documents and in localization of configuration files
      • Add to the VSCode/Joplin integration documentation
      • Write development documentation
    • Application development
      • Implementation of unfinished features
      • Proposal of new ideas and their implementation
    - + diff --git a/dev/require.html b/dev/require.html index 81d91733..e934d002 100644 --- a/dev/require.html +++ b/dev/require.html @@ -23,7 +23,7 @@ } Required dependencies | Joplin Utils - + @@ -35,6 +35,6 @@

    Finally set your local username and commit email address

    git config --global user.name "FIRST_NAME LAST_NAME"
     git config --global user.email "MY_NAME@example.com"
     

    For further details on how to use git together with GitHub, please refer to the official GitHub documentationopen in new window

    - + diff --git a/index.html b/index.html index 25a56c04..1d4707c1 100644 --- a/index.html +++ b/index.html @@ -23,11 +23,11 @@ } Joplin Utils - +
    Joplin Utils

    Joplin Utils

    Joplin-based community tool

    View joplin-vscode-plugin

    joplin-vscode-plugin

    Provides the ability to manage joplin notes in vscode, combined with vscode's existing powerful editor and its ecosystem.

    joplin-search-integration

    When using search, related Joplin notes are also displayed in the search results.

    joplin-api

    Joplin api's js package, written in ts, provides a complete type definition, including all currently exposed api in the document.

    - + diff --git a/joplin-api/index.html b/joplin-api/index.html index d66ec2d3..f4320162 100644 --- a/joplin-api/index.html +++ b/joplin-api/index.html @@ -23,7 +23,7 @@ } joplin api | Joplin Utils - + @@ -34,6 +34,6 @@ const res = await noteApi.list() console.log(res)

    More examples reference: https://github.com/rxliuli/joplin-utils/tree/master/packages/joplin-api/src/api/__tests__open in new window

    API Reference

    ObjectDescription
    eventApievent-related api, such as getting note modification history
    folderApiDirectory-related api, such as getting directory tree
    folderExtApiDirectory extension api, such as mobile directory
    joplinApijoplin basic api, such as checking whether joplin web service is open
    noteActionApiNote-related action api, such as opening a note in an external editor
    noteApiNote related api, such as getting the content of the note
    noteExtApiNote extension api, such as renaming
    resourceActionApiResource action api, such as opening an attachment resource in an external editor
    resourceApiResource-related api, such as uploading pictures
    searchApiSearch related api
    tagApiTag related api, such as modifying the tag of a note
    configGlobal joplin web clipper configuration
    PageUtilPaging-related static tools, such as getting the full list of notes

    Conventional name

    • Use class to encapsulate API, for example note related API is encapsulated in NoteApi class.
    • Keep the same naming for the same function meaning. For example, the note list is NoteApi.list. The following is a complete comparison table
    MeaningNamingExamples
    ListlistnoteApi.list
    Get by idgetnoteApi.get
    CreatecreatenoteApi.create
    ModifyupdatenoteApi.update
    RemoveremovenoteApi.remove
    • There are some special cases, such as APIs involving multiple entities, the naming is generally operation entity + by + according to entity, for example, the API to get the tag list according to the note id is noteApi.tagsById
    - + diff --git a/joplin-batch-web/feature.html b/joplin-batch-web/feature.html index 740fa2cd..5733d256 100644 --- a/joplin-batch-web/feature.html +++ b/joplin-batch-web/feature.html @@ -23,11 +23,11 @@ } Other functions | Joplin Utils - +

    Other functions

    This is a slightly more complex function that is for conversion of external reference links into internal note reference links.

    For example, imagine you have have used hexo to write blogs using absolute paths to reference other notes or posts. Having migrated to Joplin you might now want to convert those absolute paths to internal Joplin references so as to avoid the "404 problem" caused by a change in the URL of a given post. This function was created to simplify this operation.

    convertExternalLink

    - + diff --git a/joplin-batch-web/index.html b/joplin-batch-web/index.html index 5799fa50..6a5dc5aa 100644 --- a/joplin-batch-web/index.html +++ b/joplin-batch-web/index.html @@ -23,11 +23,11 @@ } joplin-batch-web | Joplin Utils - +

    joplin-batch-web

    Handles some batch operations that are not supported by Joplin itself, and presents them as a visual interface.

    • [x] Check for unreferenced attachment resources Some unused attachment resources are not cleaned up in time
    • [x] Check for referenced attachment resources that do not exist Some attachments that are being used may not exist for various reasons
    • [x] Convert external links to internal note references Would like to be able to convert previous blog links to internal :/id links to ensure they never expire
    • [x] Check for notes that don't have a parent directory (usually an error)

    Getting Started

    1. open joplin desktop version
    2. Enable the web clipper
    3. Fill out the configuration in the Settingsopen in new window page
    4. Navigate to the relevant function page

    guide

    If you want to participate in the development or run locally, you can refer to Participate in the project

    FAQ

    Why not use the cli form

    The cli form is not very suitable for this scenario, e.g. when you need to preview unusual attachments or notes, which is more troublesome at the command line.

    Will it record my note data

    The website works locally, there is no back-end server, if you are still worried, you can check the source code joplin-batch-webopen in new window

    - + diff --git a/joplin-search-integration/index.html b/joplin-search-integration/index.html index 327a9f1c..73c710e3 100644 --- a/joplin-search-integration/index.html +++ b/joplin-search-integration/index.html @@ -23,11 +23,11 @@ } Joplin Search Integration | Joplin Utils - + -

    Joplin Search Integration

    GitHubopen in new window, Chrome Storeopen in new window

    Introduction

    When using search, related Joplin notes are also displayed in the search results.

    search resultnote preview

    Currently supported search engines include

    • Google
    • Bing
    • Baidu
    • DuckDuckGo
    • Searx
    • MetaGer
    • You

    FAQ

    What does token/port refer to and where can I find it?

    You can usually see it in Tools > Options > Web Clipper

    joplin web clipper

    No search results in Brave browser

    In fact, Brave will block resources from other domains by default, so you can turn it off on the Google search site.

    joplin web clipper

    Contribute

    If you want to add new search engine support, you can raise an issue, or fork it and then modify it to mention PR (very simple)

    1. in manifest.json add the url of matching search engine
    2. implement BaseSearchEngineAdapter interface
    - +

    Joplin Search Integration

    Get uBlock Origin for Chromium Get uBlock Origin for Firefox

    Introduction

    When using search, related Joplin notes are also displayed in the search results.

    search resultnote preview

    Currently supported search engines include

    • Google
    • Bing
    • Baidu
    • DuckDuckGo
    • Searx
    • MetaGer

    FAQ

    What does token/port refer to and where can I find it?

    You can usually see it in Tools > Options > Web Clipper

    joplin web clipper

    No search results in Brave browser

    In fact, Brave will block resources from other domains by default, so you can turn it off on the Google search site.

    joplin web clipper

    Contribute

    If you want to add new search engine support, you can raise an issue, or fork it and then modify it to mention PR (very simple)

    1. in manifest.json add the url of matching search engine
    2. implement BaseSearchEngineAdapter interface
    + diff --git a/joplin-search-integration/privacy.html b/joplin-search-integration/privacy.html index b774d62d..1a650586 100644 --- a/joplin-search-integration/privacy.html +++ b/joplin-search-integration/privacy.html @@ -23,11 +23,11 @@ } Privacy Policy | Joplin Utils - +

    Privacy Policy

    This page informs you of our policies regarding the collection, use, and disclosure of personal data when using the joplin-search-integration extension and your choices with respect to that data.

    We use your data to provide and improve the service. By using the service, you agree to the collection and use of information in accordance with this policy.

    Summary

    • We do not track the usage of the extension at all.
    • We never send information or extension settings outside of your browser.
    • By default, the extension only interacts with supported search engine websites.

    Data Storage

    We store some data permanently on your local device. This information is still available even if your browser is restarted.

    This data can only be accessed through the joplin-search-integration extension on your browser.

    The stored information may include:

    • Extension settings (such as joplin clipper service prot/token).

    The extension itself does not send any such information outside of your device.

    However, if you enable Chrome Sync, Firefox Sync, Edge Sync, or any other compatible browser data synchronization feature, this information may be sent by your browser to that service.

    Data Collection

    This extension does not collect any data or send it to any remote servers.

    Contact

    If you have any questions, please open an issueopen in new window.

    - + diff --git a/joplin-vscode-plugin/guide/faq.html b/joplin-vscode-plugin/guide/faq.html index e869a9c5..aee3dd34 100644 --- a/joplin-vscode-plugin/guide/faq.html +++ b/joplin-vscode-plugin/guide/faq.html @@ -23,7 +23,7 @@ } FAQ | Joplin Utils - + @@ -37,6 +37,6 @@ }'

    Windows 10 cannot upload a cut version of the picture

    Powershell may not be installed, enter powershell in CMD to check

    powershell
     

    powershell

    If you are prompted to spawn powershell ENOENT, you need to install powershell, refer to: Install PowerShell on Windowsopen in new window

    How to use plugins in two synchronized vscode configurations

    By default, joplin on each computer will generate a random token, but you can modify it manually. The general configuration file is ~/.config/joplin-desktop/settings.json, you only need to modify the api. The token is the same token.

    Manually set joplin's token

    Reference: https://github.com/rxliuli/joplin-utils/issues/25open in new window

    markdown preview can't display images

    When you first use the joplin vscode plugin, you may encounter the problem of not being able to view images in markdown preview, there is a prompt in the preview Some content has been disabled in this document, this problem can be solved very simply.

    1. Enter the command markdown.showPreviewSecuritySelector
    2. Select Allow insecure local content in the list

    vscode markdown documentopen in new window

    Incompatible Plugin Markdown Preview Enhanced

    Since Markdown Preview Enhanced builds its own webview page for rendering markdown files and does not care about the markdown-it extension-guides apiopen in new window provided by vscode extension-guides/markdown-extension), it is now incompatible and recommends using [Markdown All in One](https://marketplace.visualstudio.com/items?itemName=yzhang. markdown-all-in-one), reference: https://github.com/rxliuli/joplin-utils/issues/46open in new window

    - + diff --git a/joplin-vscode-plugin/guide/feature.html b/joplin-vscode-plugin/guide/feature.html index 2d3a6ffa..f3c64db7 100644 --- a/joplin-vscode-plugin/guide/feature.html +++ b/joplin-vscode-plugin/guide/feature.html @@ -23,11 +23,11 @@ } Other features | Joplin Utils - +

    Other features

    Configuration table

    FieldDefault valueOptionsDescription
    tokenstringjoplin web server token
    baseUrlhttp://localhost:41184stringThe base path of the joplin web service
    deleteConfirmtruebooleanWhether to remind when deleting
    sortNotesfalsebooleanWhether to sort notes.
    sortNotesTypealphabeticalType of sorting notes.
    alphabeticalSort notes by alphabetical order of its Title property.
    defaultDefault Joplin order (whatever that is).
    sortOrderascOrder of sorting notes (asc or desc)
    asc'asc': ascending order
    desc'desc': descending order (reverse)
    languageenglishThe language displayed by the plugin, follow VSCode
    enEnglish
    zhSimple Chinese

    Hot key

    • f2: Rename notes or directories
    • delete: delete notes or directories
    • ctrl+alt+u: upload pictures from clipboard
    • ctrl+alt+e: upload image from file chooser
    • ctrl+alt+shift+e: add attachments from the file selector
    • ctrl+j ctrl+o: search notes, default to show the 20 most recently modified notes
    • ctrl+j ctrl+i: create attachment
    • ctrl+j ctrl+m: manage tabs
    • ctrl+j ctrl+l: show attached resources for the current note

    Editing attachments

    Since the click-to-jump feature in the vscode editor is often problematic, a feature has been implemented since v0.7.8 to display a list of current note attachments for quick editing of specified attachment resources, with the default shortcut ctrl+j ctrl+l

    editResource

    Paste the image

    After v0.1.7 the image paste function has been added, you can upload images to Joplin and paste links to VSCode via right-click menu, command or shortcut.

    1. ctrl+alt+u to paste the image from clipboard
    2. ctrl+alt+e Use file manager to select the image to paste

    pasteImage

    Add attachment

    After v0.1.10 the ability to add attachments has been added, so you can add files as attached resources to Joplin notes via commands or shortcuts.

    1. ctrl+alt+shift+e Select the file to be added as an attachment

    Create attachment

    After v0.3.0 right-click to create an attachment resource is implemented, mainly for quickly creating and adding a mind map (powered by Baidu Brain Map) or flowchart (powered by draw.io).

    Manage Tags

    After v0.3.0, the command is > Joplin: Manage tags, and the default shortcut is ctrl+j ctrl+m to bring up the checkbox.

    Create tags

    Create tags is supported after v0.3.0, the command is > Joplin: Create tag.

    You can see Copy link in the right click menu on the note, click it to copy to clipboard.

    Link notes

    Use Ctrl+Click to open to other notes.

    - + diff --git a/joplin-vscode-plugin/guide/limitations.html b/joplin-vscode-plugin/guide/limitations.html index f8d249a2..945ed80d 100644 --- a/joplin-vscode-plugin/guide/limitations.html +++ b/joplin-vscode-plugin/guide/limitations.html @@ -23,11 +23,11 @@ } Limitations | Joplin Utils - +

    Limitations

    Although the plugin currently implements the common features of joplin, there are some limitations that are difficult to deal with. It is also because of these limitations that I do not use a direct vscode-based notes plugin.

    - + diff --git a/joplin-vscode-plugin/guide/recommended-extension.html b/joplin-vscode-plugin/guide/recommended-extension.html index 304f796d..62c89122 100644 --- a/joplin-vscode-plugin/guide/recommended-extension.html +++ b/joplin-vscode-plugin/guide/recommended-extension.html @@ -23,11 +23,11 @@ } Recommended extensions | Joplin Utils - +

    Recommended extensions

    Plugins

    Let's start with a short list of my note taking related plugins that implement a specific feature and can be combined.

    You may notice that some of these plugins have nothing to do with markdown, but they are still important for editing, for example the spell checker feature that was only recently implemented in Joplin (v1.4.*) already exists in the existing VSCode plugins.

    - + diff --git a/joplin-vscode-plugin/index.html b/joplin-vscode-plugin/index.html index 82017989..62510d5f 100644 --- a/joplin-vscode-plugin/index.html +++ b/joplin-vscode-plugin/index.html @@ -23,11 +23,11 @@ } Quick start | Joplin Utils - +

    Quick start

    Overview

    joplin-vscode-plugin offers editing and management of Joplin notes with the power and flexibility of VSCode.

    Joplin Web Clipper is designed to communicate with browser extensions by sharing Notes, Notebooks, Tags, etc. through a REST web API. joplin-vscode-plugin connects to that same REST endpoint to freely make changes to your notes without ever leaving the editor.

    Why does this plugin exist? Read my motivation for developing it.

    What can it do? The roadmap lists both existing and planned features.

    Never heard of Joplinopen in new window? You're missing out on a great opensource synchronized note taking appopen in new window.

    Requirements

    • Joplin version > v2.8
    • VSCode version > v1.66.2
    • Joplin Web Clipper enabled
    • Basic familiarity with using both Joplin and VS Code

    Install Joplin VSCode plugin

    Search for "Joplin" in the VSCode Marketplace. Find "joplin-vscode-plugin" and click Install.

    install plugin

    Configure

    To access the Joplin database, we need a connection to the API endpoint opened by Joplin Web Clipper. That means Joplin must be running and Web Clipper must be enabled.

    For help with Web Clipper refer to: Joplin Web Clipperopen in new window.

    Two settings need attention to get up and running.

    Token

    • Copy your Authorization token from Joplin settings and paste it here:
      Web Clipper -> Advanced options -> Authorization Token

    baseUrl

    • In general, if you use the locally installed joplin desktop client, no special configuration is required. If you use a remote joplin service, you need to configure it. For example https://1.1.1.1:41184open in new window

    install plugin

    Restart VSCode

    Currently configuration edits do not trigger a fresh connection. Simply close VSCode and it should connect to Joplin the next time you start.


    Say Hello Joplin

    Type the key chord Ctrl+J Ctrl+J and celebrate. 🎉 That hotkey combo activates the View: Show Joplin command, opening the Sidebar to reveal all your Notebooks.

    preview

    Usage

    All your Notes and Noteboks can be found in the Sidebar. Unfold the Notebooks to see Subnotebooks and Notes beneath.

    Click on a Note to open a working copy in the Editor. Save it to push changes back to Joplin.

    You have full access to create, edit, and delete both Notes and Notebooks, at your whim. And it doesn't even stop there. The power is yours now. 🦸‍♀️

    Tip: Explore the results of typing "joplin" in the Command Palette to find out what great features I didn't tell you about.

    Commands and keybindings

    VSCode has a lot of keybindings. To avoid constantly clashing with all the built in settings, we laid claim to just one desirable hotekey, Ctrl+J, and turned that into the trigger for a key chord.

    Claiming Ctrl+J displaced the native binding for workbench.action.togglePanel (View: Toggle Panel). For your convenience a sane replacement binding is already added at Ctrl+K Ctrl+J.

    Type Joplin into the Command Palette (Ctrl+P) to see all the new commands available to you. Some of them already have keybindings. Assign new bindings under the Ctrl+J namespace to fit your needs.

    - + diff --git a/joplin-vscode-plugin/other/index.html b/joplin-vscode-plugin/other/index.html index bb344759..56c7e4d1 100644 --- a/joplin-vscode-plugin/other/index.html +++ b/joplin-vscode-plugin/other/index.html @@ -23,11 +23,11 @@ } Why write this plugin for vscode | Joplin Utils - +

    Why write this plugin for vscode

    1. As a professional editor, the editing function of vscode is unmatched by the note-taking tool. For example, shortcut key support
    2. Vscode is not only an editor, but also has a very large plug-in ecosystem, so it has already been implemented in markdown formatting, linter verification, pdf export and other functions. There is no need to re-create the wheel in the note tool - it is possible Is a square wheel
    3. In fact, I have been using vscode to edit markdown documents, and git + vscode to store company-related documents. At the same time, joplin is also used to store personal notes, but after a while, I found that I need to edit vscode + the synchronization/search function of joplin.

    So I wrote this plugin for people who have the same needs as me.

    - + diff --git a/joplin-vscode-plugin/other/roadmap.html b/joplin-vscode-plugin/other/roadmap.html index 57052330..f1bcf2ec 100644 --- a/joplin-vscode-plugin/other/roadmap.html +++ b/joplin-vscode-plugin/other/roadmap.html @@ -23,11 +23,11 @@ } Roadmap | Joplin Utils - +

    Roadmap

    • Edit
      • [x] Paste image automatically upload to joplin and get link to insert
        • [x] Support editor right-click menu to paste clipboard images
      • [x] Solve the problem that joplin ref link can't be opened by ctrl+click in the editor
      • [x] Editor custom breadcrumbs, automatically expand the left sidebar when clicked -- give up, it's not really necessary
      • [ ] support for displaying .drawio/.km files as images directly in markdown
      • [x] Integrate with joplin v1.5 to directly preview video, audio, and PDF attachments. -- Determine infeasibility
    • Optimization
      • [ ] Add references directly in the code editor -- use search box to select
      • [ ] Implement note multi-selection feature
      • [ ] Add outline title sidebar (waiting for api support, or implement https://github.com/microsoft/vscode/issues/97095open in new window by yourself)
        • [ ] Note title outline
        • [ ] Attachment resources and citation notes for notes
        • [ ] Timeline functionality for notes
      • [ ] Handle vscode not opening .drawio from links (may also include .km mind maps)
      • [x] enable special right-click menu and icons for todo
      • [x] support creating attachments directly in notes, mainly to create code files directly
      • [x] Fix bug Cannot read property 'globalStoragePath' of undefined when uploading images from clipboard
      • [x] Optimize message internationalization
      • [x] Add development related documentation
      • [x] Fix the problem that notes in the root directory cannot be displayed
      • [x] Support viewing attached resources in external applications
        • [x] Automatically monitor changes when opening attached resources, using child_process returned by open -- by joplin
      • [x] Show the 20 most recently edited historical notes by default when searching
      • [x] Some suggestions for writing Markdown documents using VSCode, see: Personal experience sharing: Using VSCode + Joplin as a note taking tool
      • [x] should allow dragging notes or directories -- vscode api doesn't support it
      • [x] Note/directory renaming appears directly in place in the input box -- vscode api does not support
    • Tagging related
      • [x] Add tags to notes
      • [x] Remove tags for notes
      • [x] Rename tags
    • Organizing vscode api usage
    • Create joplin-chars
    • Create joplin-blog
      • [ ] Improving performance
      • [ ] Optimize ux
      • [x] Export specified notes to hexo blog
      • [x] Resolve inline image issue
      • [x] Resolve attachment resource issue
      • [x] Solve the problem of internal reference notes
    - + diff --git a/zh/dev/dev.html b/zh/dev/dev.html index 5f87f541..98906d6a 100644 --- a/zh/dev/dev.html +++ b/zh/dev/dev.html @@ -23,7 +23,7 @@ } 开发 | Joplin Utils - + @@ -33,6 +33,6 @@ pnpm && pnpm run setup # 进入到相应模块开发代码,具体参考 README

    joplin-vscode-plugin

    1. code apps/joplin-vscode-plugin
    2. run joplin dev mode, ref: https://joplinapp.org/api/references/development_mode/open in new windowimage
    3. enable clipper service image
    4. cp .vscode/_launch.json .vscode/launch.json
    5. modify .vscode/launch.json, set env.JOPLIN_TOKEN, example: image
    6. pnpm dev
    7. F5 run debug

    joplin-batch-web

    1. code apps/joplin-batch-web
    2. pnpm dev

    参考

    - + diff --git a/zh/dev/doc.html b/zh/dev/doc.html index 41e1ec2d..119b5a7c 100644 --- a/zh/dev/doc.html +++ b/zh/dev/doc.html @@ -23,7 +23,7 @@ } 文档 | Joplin Utils - + @@ -60,6 +60,6 @@ } } - + diff --git a/zh/dev/index.html b/zh/dev/index.html index c5a2cf7c..ad89b77f 100644 --- a/zh/dev/index.html +++ b/zh/dev/index.html @@ -23,11 +23,11 @@ } 参与项目 | Joplin Utils - +

    参与项目

    简介

    也许你也是一个喜欢分享、热爱开源的人,那么无论你是否为开发者,都可以一起参与进来。

    如何贡献

    主要分为两方面

    • 完善文档
      • 帮助翻译文档、国际化的配置文件
      • 编写 vscode 与 joplin 的结合文档
      • 编写参与开发的文档
    • 程序开发
      • 实现未完成的功能
      • 提出新的 idea 并实现
    - + diff --git a/zh/dev/require.html b/zh/dev/require.html index 161e91a4..fe1b2ec5 100644 --- a/zh/dev/require.html +++ b/zh/dev/require.html @@ -23,7 +23,7 @@ } 环境要求 | Joplin Utils - + @@ -35,6 +35,6 @@

    然后设置你的本地用户名和邮箱

    git config --global user.name "FIRST_NAME LAST_NAME"
     git config --global user.email "MY_NAME@example.com"
     

    具体如何结合 git 和 github 一起使用请参考 github 官方文档open in new window

    - + diff --git a/zh/index.html b/zh/index.html index 9d4cf5a8..b26c57d1 100644 --- a/zh/index.html +++ b/zh/index.html @@ -23,11 +23,11 @@ } Joplin Utils - +
    Joplin Utils

    Joplin Utils

    基于 Joplin 的社区工具

    看看 joplin-vscode-plugin

    joplin-vscode-plugin

    提供在 vscode 中管理 joplin 笔记的功能,结合 vscode 现有的强大编辑器及其生态。

    joplin-search-integration

    使用搜索时,相关的乔普林笔记也会显示在搜索结果中。

    joplin-api

    Joplin api 的 js 封装,使用 ts 编写,提供完整的类型定义,包含目前所有在文档中公开的 api。

    - + diff --git a/zh/joplin-api/index.html b/zh/joplin-api/index.html index e7522615..9e812bcd 100644 --- a/zh/joplin-api/index.html +++ b/zh/joplin-api/index.html @@ -23,7 +23,7 @@ } joplin api | Joplin Utils - + @@ -34,6 +34,6 @@ const res = await noteApi.list() console.log(res)

    更多示例参考: https://github.com/rxliuli/joplin-utils/tree/master/packages/joplin-api/src/api/__tests__open in new window

    API 参考

    对象描述
    eventApi事件相关的 api,例如获取笔记修改历史
    folderApi目录相关 api,例如获取目录树
    folderExtApi目录扩展 api,例如移动目录
    joplinApijoplin 基础 api,例如检查 joplin web 服务是否打开
    noteActionApi笔记相关动作 api,例如在外部编辑器打开笔记
    noteApi笔记相关 api,例如获取笔记的内容
    noteExtApi笔记扩展 api,例如重命名
    resourceActionApi资源动作 api,例如在外部编辑器打开附件资源
    resourceApi资源相关 api,例如上传图片
    searchApi搜索相关 api
    tagApi标签相关 api,例如修改笔记的标签
    config全局 joplin web clipper 配置
    PageUtil分页相关的静态工具类,例如获取全量笔记列表

    约定俗称

    • 使用 class 封装 API,例如 note 相关的 API 被封装在 NoteApi 类中。
    • 同一个功能含义保持统一的命名。例如笔记列表是 NoteApi.list。以下为完整对照表
    含义命名示例
    列表listnoteApi.list
    根据 id 获取getnoteApi.get
    创建createnoteApi.create
    修改updatenoteApi.update
    删除removenoteApi.remove
    • 存在一些特殊情况,例如涉及到多个实体的 api,命名则一般是 操作实体 + by + 依据实体,例如 根据笔记 id 获取标签列表的 api 是 noteApi.tagsById

    一些问题

    • get 方法不应该报错,如果不存在应该返回 null 而非抛出异常
    - + diff --git a/zh/joplin-batch-web/feature.html b/zh/joplin-batch-web/feature.html index 557c752a..f07df473 100644 --- a/zh/joplin-batch-web/feature.html +++ b/zh/joplin-batch-web/feature.html @@ -23,11 +23,11 @@ } 其他功能 | Joplin Utils - +

    其他功能

    转换外部链接为内部笔记引用

    这是一个稍微复杂一点的功能,它的主要应用场景是将一些外部引用链接转换为内部笔记引用链接。

    例如之前可能使用 hexo 编写博客,可能是用绝对路径引用其他文章,但现在迁移到了 joplin,希望能将博客之间的引用转换为 joplin 笔记的内部引用,避免博客文章的 url 变化导致引用 404 的问题,而这个功能就是为了简化操作而生的。

    convertExternalLink

    - + diff --git a/zh/joplin-batch-web/index.html b/zh/joplin-batch-web/index.html index 6af4af4c..fb7619fa 100644 --- a/zh/joplin-batch-web/index.html +++ b/zh/joplin-batch-web/index.html @@ -23,11 +23,11 @@ } joplin-batch-web | Joplin Utils - +

    joplin-batch-web

    处理一些 Joplin 本身不支持的批量操作,以可视化界面的形式展现出来。

    • [x] 检查是否存在没有引用的附件资源 一些没有使用的附件资源没有被及时清理
    • [x] 检查引用的附件资源不存在的情况 一些正在使用的附件可能由于各种原因不存在了
    • [x] 转换外部链接为内部笔记引用 希望能够将之前的 blog 链接转换为内部的 :/id 链接以保证永不过期
    • [x] 检查是否存在没有父级目录的笔记(一般是错误)

    开始

    1. 打开 joplin 桌面版
    2. 启用网页剪辑器
    3. 设置open in new window 页面填写配置
    4. 导航到相关功能页面

    guide

    如果您希望参与开发或在本地运行,可以参考 参与项目

    FAQ

    为什么不使用 cli 的形式

    cli 的形式不太适合这种场景,例如需要预览异常的附件或笔记,在命令行下比较麻烦。

    它会记录我的笔记数据么

    网站是全本地工作的,没有后端服务器,如果你仍然担忧,可以检查源代码 joplin-batch-webopen in new window

    - + diff --git a/zh/joplin-search-integration/index.html b/zh/joplin-search-integration/index.html index e8bd81f8..56418e16 100644 --- a/zh/joplin-search-integration/index.html +++ b/zh/joplin-search-integration/index.html @@ -23,11 +23,11 @@ } joplin 搜索集成 | Joplin Utils - + -

    joplin 搜索集成

    GitHubopen in new window, Chrome 商店open in new window

    简介

    使用搜索时,相关的乔普林笔记也会显示在搜索结果中。

    search resultnote preview

    目前支持的搜索引擎包括

    • Google
    • Bing
    • Baidu
    • DuckDuckGo
    • Searx
    • MetaGer
    • You

    常见问题

    token/port 指的是什么,在哪儿可以找到?

    一般可以在 工具 > 选项 > 网页剪辑器 中看到

    joplin web clipper

    在 Brave 浏览器中没有搜索结果

    实际上是 Brave 会默认阻止其他域的资源,所以在 Google 搜索网站关闭它即可。

    joplin web clipper

    贡献

    如果你希望添加新的搜索引擎支持,可以提出 issue,或者 fork 后修改提 PR(非常简单 )

    1. 在 manifest.json 添加匹配的搜索引擎的 url
    2. 实现 BaseSearchEngineAdapter 接口
    - +

    joplin 搜索集成

    Get uBlock Origin for Chromium Get uBlock Origin for Firefox

    简介

    使用搜索时,相关的乔普林笔记也会显示在搜索结果中。

    search resultnote preview

    目前支持的搜索引擎包括

    • Google
    • Bing
    • Baidu
    • DuckDuckGo
    • Searx
    • MetaGer

    常见问题

    token/port 指的是什么,在哪儿可以找到?

    一般可以在 工具 > 选项 > 网页剪辑器 中看到

    joplin web clipper

    在 Brave 浏览器中没有搜索结果

    实际上是 Brave 会默认阻止其他域的资源,所以在 Google 搜索网站关闭它即可。

    joplin web clipper

    贡献

    如果你希望添加新的搜索引擎支持,可以提出 issue,或者 fork 后修改提 PR(非常简单 )

    1. 在 manifest.json 添加匹配的搜索引擎的 url
    2. 实现 BaseSearchEngineAdapter 接口
    + diff --git a/zh/joplin-search-integration/privacy.html b/zh/joplin-search-integration/privacy.html index 3310a6ed..d62c909b 100644 --- a/zh/joplin-search-integration/privacy.html +++ b/zh/joplin-search-integration/privacy.html @@ -23,11 +23,11 @@ } 隐私政策 | Joplin Utils - +

    隐私政策

    此页面告知您我们在使用 joplin-search-integration 扩展时收集、使用和披露个人数据的政策,以及您与该数据相关的选择。

    我们使用您的数据来提供和改进服务。 使用服务即表示您同意按照本政策收集和使用信息。

    概括

    • 我们根本不跟踪扩展程序的使用情况。

    • 我们绝不会在您的浏览器之外发送信息或扩展设置。

    • 默认情况下,该扩展仅与支持的搜索引擎网站交互。

    数据存储

    我们将一些数据永久存储在您的本地设备上。即使您的浏览器重新启动,此信息仍然可用。

    此数据只能通过浏览器上的 joplin-search-integration 扩展程序访问。

    存储的信息可能包括:

    • 扩展设置(如 joplin clipper service prot/token)。

    扩展本身不会将任何此类信息发送到您的设备之外。

    但是,如果您启用 Chrome Sync、Firefox Sync、Edge Sync 或任何其他兼容的浏览器数据同步功能,则此信息可能会由您的浏览器发送到该服务。

    数据采集

    此扩展程序不会收集任何数据或将其发送到任何远程服务器。

    接触

    如果您有任何问题,请打开一个问题open in new window

    - + diff --git a/zh/joplin-vscode-plugin/guide/faq.html b/zh/joplin-vscode-plugin/guide/faq.html index 48734877..000c0291 100644 --- a/zh/joplin-vscode-plugin/guide/faq.html +++ b/zh/joplin-vscode-plugin/guide/faq.html @@ -23,7 +23,7 @@ } 常问问题 | Joplin Utils - + @@ -36,6 +36,6 @@ }'

    Windows 10 无法上传剪切版图片

    可能是没有安装 powershell,在 CMD 中输入 powershell 检查

    powershell
     

    powershell

    如果提示 spawn powershell ENOENT 则需要安装 powershell,参考:在 Windows 上安装 PowerShellopen in new window

    如何在两个配置同步的 vscode 使用插件

    默认情况下,每台电脑上的 joplin 会生成随机的 token,但您可以手动修改它,一般配置文件在 ~/.config/joplin-desktop/settings.json,您只需要修改其中的 api.token 为相同的 token 即可。

    手动设置 joplin 的 token

    参考:https://github.com/rxliuli/joplin-utils/issues/25open in new window

    markdown 预览无法显示图片

    当你第一次使用 joplin vscode 插件时,你也许会遇到无法在 markdown 预览中查看图片的问题,在预览中存在提示 Some content has been disabled in this document,这个问题可以很简单的解决。

    1. 输入命令 markdown.showPreviewSecuritySelector
    2. 在列表中选择 Allow insecure local content

    vscode markdown 文档open in new window

    不兼容插件 Markdown Preview Enhanced

    由于 Markdown Preview Enhanced 自行构建了 markdown 文件渲染的 webview 页面,而且不在乎 vscode 提供的 markdown-it 扩展接口 apiopen in new window,所以现在无法兼容,推荐使用 Markdown All in Oneopen in new window,参考:https://github.com/rxliuli/joplin-utils/issues/46open in new window

    - + diff --git a/zh/joplin-vscode-plugin/guide/feature.html b/zh/joplin-vscode-plugin/guide/feature.html index f39d14f5..893554bc 100644 --- a/zh/joplin-vscode-plugin/guide/feature.html +++ b/zh/joplin-vscode-plugin/guide/feature.html @@ -23,11 +23,11 @@ } 其他功能 | Joplin Utils - +

    其他功能

    配置表

    字段默认值可选值说明
    tokenstringjoplin web 服务的 token
    baseUrlhttp://localhost:41184stringjoplin api 基础路径
    deleteConfirmtrueboolean删除时是否提醒
    sortNotesfalseboolean是否对笔记进行排序
    sortNotesTypealphabetical笔记排序的类型
    alphabetical按照标题的字母顺序排序
    defaultJoplin 默认的排序
    sortOrderasc笔记排序的顺序(升序或降序)
    asc升序
    desc降序
    languageenglish插件显示的语言,跟随 VSCode
    en英语
    zh简体中文

    快捷键

    • f2: 重命名笔记或目录
    • delete: 删除笔记或目录
    • ctrl+alt+u: 从剪切板上传图片
    • ctrl+alt+e: 从文件选择器上传图片
    • ctrl+alt+shift+e: 从文件选择器添加附件
    • ctrl+j ctrl+o: 搜索笔记,默认显示最近修改的 20 条笔记
    • ctrl+j ctrl+i: 创建附件
    • ctrl+j ctrl+m: 管理标签
    • ctrl+j ctrl+l: 显示当前笔记的附件资源

    编辑附件

    由于在 vscode 编辑器中实现的点击跳转功能经常存在问题,所以在 v0.7.8 之后实现了显示当前笔记附件列表的功能,用以快速编辑指定附件资源,默认快捷键为 ctrl+j ctrl+l

    editResource

    粘贴图片

    v0.1.7 之后新增了图片粘贴功能,可以通过右键菜单、命令或快捷键将图片上传到 Joplin 并粘贴链接到 VSCode 中。

    1. ctrl+alt+u 粘贴剪切板的图片
    2. ctrl+alt+e 使用文件管理器选择图片粘贴

    pasteImage

    添加附件

    v0.1.10 之后新增了添加附件的功能,可以通过命令或快捷键将文件作为附件资源添加到 Joplin 笔记中。

    1. ctrl+alt+shift+e 选择要添加为附件的文件

    创建附件

    v0.3.0 之后实现了右键创建附件资源的功能,主要用于快速创建并添加一个思维导图(由百度脑图提供支持)或流程图(由 draw.io 提供支持)。

    管理标签

    v0.3.0 之后支持管理标签,命令是 > Joplin: Manage tags,默认快捷键为 ctrl+j ctrl+m 即可弹出复选框。

    创建标签

    v0.3.0 之后支持创建标签,命令是 > Joplin: Create tag

    链接笔记

    在笔记上右键菜单可以看到 复制链接,点击即复制到剪切板。

    Link notes

    使用 Ctrl+单击 打开到其他笔记中。

    - + diff --git a/zh/joplin-vscode-plugin/guide/limitations.html b/zh/joplin-vscode-plugin/guide/limitations.html index ea3ea9d8..af55f8ed 100644 --- a/zh/joplin-vscode-plugin/guide/limitations.html +++ b/zh/joplin-vscode-plugin/guide/limitations.html @@ -23,11 +23,11 @@ } 限制 | Joplin Utils - +

    限制

    虽然目前插件已经实现了 joplin 的常用功能,但却是存在一些难以处理的限制。也正是由于这些限制的存在,所以吾辈才没有使用直接基于 vscode 的笔记插件。

    - + diff --git a/zh/joplin-vscode-plugin/guide/recommended-extension.html b/zh/joplin-vscode-plugin/guide/recommended-extension.html index b32a6d1a..3cbf21ed 100644 --- a/zh/joplin-vscode-plugin/guide/recommended-extension.html +++ b/zh/joplin-vscode-plugin/guide/recommended-extension.html @@ -23,11 +23,11 @@ } 推荐扩展 | Joplin Utils - +

    推荐扩展

    插件

    先简单列出吾辈与笔记相关的插件列表,它们都实现了某项特定功能且可以组合。

    你可能注意到其中部分插件和 markdown 没什么关系,但它们对于编辑而言仍然是重要的,例如 Joplin 最近(v1.4.*)才实现的拼写检查功能已经存在现有的 VSCode 插件了。

    替代品

    joplin 最近开发了插件系统,也有许多开发者在为它编写 各种插件open in new window,而使用 joplin-vscode-plugin 则无法享受大部分插件带来的功能。然而,vscode 本身就有一个极其庞大的插件系统,以及繁多的功能。下面列出了一些 joplin plugin 在 vscode 的替代插件或功能

    - + diff --git a/zh/joplin-vscode-plugin/index.html b/zh/joplin-vscode-plugin/index.html index 7a8440fd..cb07b38e 100644 --- a/zh/joplin-vscode-plugin/index.html +++ b/zh/joplin-vscode-plugin/index.html @@ -23,11 +23,11 @@ } 快速启动 | Joplin Utils - +

    快速启动

    概述

    joplin-vscode-plugin 提供在 vscode 中管理 joplin 笔记的功能,包括常见的查看、编辑笔记,管理笔记的标签,添加、修改附件,内部链接、搜索等功能。

    Joplin Web Clipper 旨在通过 REST Web API 与浏览器扩展进行通信,共享笔记、笔记本、标签等。joplin-vscode-plugin 连接到相同的 REST 端点,可以在不离开编辑器的情况下查看和修改笔记。

    为什么会有这个插件?阅读 我的动机 了解开发它的原因。

    它能做什么?路线图 列出了现有和计划中的功能。

    没听说过 乔普林open in new window?你错过了一个不错的 开源同步笔记应用open in new window

    要求

    • Joplin 版本 > v2.8
    • VSCode 版本 > v1.66.2
    • 启用 Joplin Web Clipper
    • 熟悉 Joplin 和 VSCode 的基本使用方法

    安装 Joplin VSCode 插件

    在 VSCode 市场中搜索 joplin。找到 joplin-vscode-plugin 并点击安装。

    安装插件

    配置

    要访问 Joplin 数据库,我们需要连接到 Joplin Web Clipper 打开的 API 端点。这意味着 Joplin 必须运行,Web Clipper 必须启用。

    关于 Web Clipper 的帮助,请参考 Joplin Web Clipperopen in new window

    要启动并运行,需要注意两个设置。

    授权令牌

    • 从 Joplin 设置中复制你的授权令牌并粘贴到这里。 网页剪辑 -> 高级选项 -> 拷贝 Token 令牌

    基本路径

    • 一般而言,如果你使用本地安装的 joplin 桌面客户端,则不需要特殊配置。如果使用远端的 joplin 服务,则需要进行配置。 例如 http://localhost:41184open in new window

    安装插件

    重新启动 VSCode

    目前配置编辑后不会自动重新连接,需要关闭 VSCode,下次启动时它就会连接到 Joplin。

    开始使用

    输入快捷键 Ctrl+J Ctrl+J,然后庆祝 🎉。这个快捷键组合激活了 view: show joplin 命令,打开侧边栏,显示所有的笔记本。

    预览

    功能

    您的所有笔记和记事本都可以在侧边栏中找到,展开笔记本可以看到下面的子笔记本和笔记。

    点击一个笔记,在编辑器中打开一个工作副本,保存它以将修改推送回 Joplin。

    你可以随心所欲地创建、编辑和删除 笔记笔记本,一切都在 VSCode 中不间断的完成。🦸♀️

    命令和键绑定

    VSCode 有很多快捷键键绑定,为了避免与内置的快捷键冲突,我们假定了一个快捷键前缀 Ctrl+J,在后面继续添加二步快捷键键。

    提示:探索在命令调色板中输入 joplin 的结果,找出我没有告诉你的伟大功能。

    - + diff --git a/zh/joplin-vscode-plugin/other/dev.html b/zh/joplin-vscode-plugin/other/dev.html index 10734bc9..d2a262d9 100644 --- a/zh/joplin-vscode-plugin/other/dev.html +++ b/zh/joplin-vscode-plugin/other/dev.html @@ -23,11 +23,11 @@ } 参与项目 | Joplin Utils - +

    参与项目

    如何贡献

    主要分为两方面

    • 开发
      • 实现未完成的功能
      • 提出新的 idea 并实现
    • 非开发
      • 帮助翻译文档、国际化的配置文件
      • 编写 vscode 与 joplin 的结合文档
      • 编写参与开发的文档

    环境要求

    • nodejs >= v18
    • joplin >= v1.4
    • pnpm

    启动项目

    1. 使用 vscode 打开项目
    2. cp .vscode/_launch.json .vscode/launch.json
    3. 修改 .vscode/launch.json 配置,修改以下配置项

      个人建议同时启动 joplin electron 项目,避免在真实的个人笔记上进行测试,插件可能错误的破坏真实笔记。

      • configurations/env
        • JOPLIN_TOKEN: web clipper 的验证令牌
        • JOPLIN_PORT: 端口,开发环境一般是 27584
        • JOPLIN_PROFILE_PATH: 个人配置目录,开发环境应该是 ~/.config/joplin-desktop,但注意需要使用完全路径
    4. 使用 yarn watch 启动 tsc 监视模式
    5. 使用 F5 运行调试模式

    项目结构

    • docs: joplin 在线文档
    • resources: 图标资源
    • src: 源代码
      • api: 一些 joplin-api 中目前不存在的功能增强
      • config: 插件配置相关处理
      • model: 提供 view 的 NodePrivider 实现类
      • service: 一些其他的服务实现
      • util: 通用工具代码
    • package.nls*.json: 国际化配置文件
    - + diff --git a/zh/joplin-vscode-plugin/other/index.html b/zh/joplin-vscode-plugin/other/index.html index e4cb0c52..5ac332be 100644 --- a/zh/joplin-vscode-plugin/other/index.html +++ b/zh/joplin-vscode-plugin/other/index.html @@ -23,11 +23,11 @@ } 为什么要开发这个插件 | Joplin Utils - +

    为什么要开发这个插件

    1. 作为专业的编辑器,vscode 的编辑功能是笔记工具所无法比拟的。例如,快捷键支持。
    2. vscode 不仅是一个编辑器,而且具有非常大的插件生态系统,因此它已经实现了 markdown 格式化,lint 校验,pdf 导出和其他所有功能。我们无需在笔记工具中重新创建编辑器的轮子 - 可能是方轮子。
    3. 实际上,吾辈一直在使用 vscode 编辑降价文档,并使用 git + vscode 存储与公司相关的文档。同时,joplin 还用于存储个人笔记,但过了一会儿,我发现我需要编辑 vscode + joplin 的同步 / 搜索功能。

    因此,吾辈为有相同需求的人编写了此插件。

    - + diff --git a/zh/joplin-vscode-plugin/other/roadmap.html b/zh/joplin-vscode-plugin/other/roadmap.html index d8989b08..3108232b 100644 --- a/zh/joplin-vscode-plugin/other/roadmap.html +++ b/zh/joplin-vscode-plugin/other/roadmap.html @@ -23,11 +23,11 @@ } 路线图 | Joplin Utils - +

    路线图

    • 编辑
      • [x] 粘贴图片自动上传到 joplin 并获取链接插入
        • [x] 支持编辑器右键菜单粘贴剪切板图片
      • [x] 解决 joplin ref link 在编辑器中不能 ctrl+click 打开的问题
      • [x] 编辑器自定义面包屑,点击时自动展开左边的侧边栏 -- 放弃,这实在没什么必要
      • [x] 支持在 markdown 直接将 .drawio/.km 的文件作为图片显示。-- 使用 drawio.svg/km.svg
      • [x] 集成 joplin v1.5 直接预览视频、音频、PDF 附件资源的功能。-- 确定不可行
    • 优化
      • [x] 在代码编辑器中直接添加引用 -- 使用搜索框选择
      • [x] 实现笔记多选功能 -- 暂不实现
      • [x] 添加 outline 标题侧边栏(等待 api 支持、或自行实现 https://github.com/microsoft/vscode/issues/97095open in new window)-- 使用 ctrl+f12 快捷键显示列表
        • [x] 笔记标题大纲
        • [x] 笔记的附件资源与引用笔记
        • [x] 笔记的时间线功能
      • [x] 处理 vscode 不能从链接打开 .drawio 的问题(可能也包含 .km 的思维导图)
      • [x] 对 todo 启用特殊的右键菜单及 icon
      • [x] 支持在笔记中直接创建附件,主要是为了可以直接创建代码文件
      • [x] 修复 bug 从剪切板上传图片时提示 Cannot read property 'globalStoragePath' of undefined
      • [x] 优化消息国际化
      • [x] 添加开发相关文档
      • [x] 修复根目录的笔记无法显示的问题
      • [x] 支持在外部程序中查看附件资源
        • [x] 打开附件资源时自动监视变化,使用 open 返回的 child_process -- 由 joplin 负责
      • [x] 搜索时默认显示最近编辑的 20 条历史笔记
      • [x] 编写使用 VSCode 编写 Markdown 文档的一些建议,参考:个人经验分享:使用 VSCode + Joplin 作为笔记工具
      • [x] 应该允许拖动笔记或目录 -- vscode api 不支持
      • [x] 笔记/目录重命名直接就地出现输入框 -- vscode api 不支持
    • 标签相关
      • [x] 为笔记添加标签
      • [x] 为笔记删除标签
      • [x] 重命名标签
    • 整理 vscode api 使用
    • 创造 joplin-chars -- 废弃
    • 创造 joplin-blog
      • [x] 提高性能
      • [x] 优化 ux
      • [x] 导出指定笔记到 hexo blog
      • [x] 解决内嵌图片的问题
      • [x] 解决附件资源的问题
      • [x] 解决内部引用笔记的问题
    - +