useblocks 1.1.6 → 1.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/iframe/js/amp.DltrX-cv.js +1 -0
- package/iframe/js/iframe-eblock.js +1 -1
- package/iframe/js/iframe.js +1 -1
- package/iframe/js/rules.B4dVzZIU.js +1 -1
- package/iframe/js/sanitize-html.BUfJ0Zmy.js +1 -0
- package/package.json +1 -1
- package/static/core/3a92c038.js +78 -0
- package/static/core/{f1547990.js → 3fe138bd.js} +3 -3
- package/static/core/{9d75803c.js → 41400d24.js} +1 -1
- package/static/core/{fbcecf0c.js → 4cb1af33.js} +2 -2
- package/static/core/{e068fc9c.js → 5b91fab0.js} +4 -4
- package/static/core/{47dba41e.js → 6493972d.js} +2 -2
- package/static/core/7b3ab6c8.js +1 -0
- package/static/core/{a4277108.js → 7b4f9e02.js} +1 -1
- package/static/core/8aeabd5d.js +1 -0
- package/static/core/{335013fc.js → a5492c22.js} +10 -10
- package/static/core/{ee8bab83.js → b57dc87c.js} +1 -1
- package/static/core/{510315e7.js → c93b4f06.js} +1 -1
- package/static/core/{cb14142e.js → cc141b53.js} +1 -1
- package/static/core/d4e69323.js +3 -0
- package/static/core/{e72e96db.js → e9ed0819.js} +2 -2
- package/two_step_headless_plugin.html +558 -0
- package/ui-kit/index.js +1589 -1589
- package/{useblocks-core.c589fcf1.js → useblocks-core.242b532e.js} +1 -1
- package/useblocks-esm.js +2 -2
- package/useblocks.d.ts +70 -7
- package/useblocks.js +2 -2
- package/iframe/js/amp.CMBnFdLA.js +0 -1
- package/iframe/js/sanitize-html.jj9shohA.js +0 -1
- package/static/core/1326223f.js +0 -1
- package/static/core/3ee304c4.js +0 -1
- package/static/core/604497f2.js +0 -3
- package/static/core/b713ee78.js +0 -78
- /package/iframe/{iframe-eblock.c589fcf1.html → iframe-eblock.242b532e.html} +0 -0
- /package/iframe/{iframe.c589fcf1.html → iframe.242b532e.html} +0 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
__useblocks__.define(`static/core/
|
|
1
|
+
__useblocks__.define(`static/core/e9ed0819.js`,[`require`,`exports`,`module`,`static/core/4dc58c63.js`,`static/core/3fe138bd.js`],function(e,t,n){let r=e("./4dc58c63.js"),i=e("./3fe138bd.js");function a(e){return function(t){return{setOptions:()=>{},instance:{},dispose:()=>{},...e(t)||{}}}}function o(e){return t=>{let n={},r=[];for(let n of e)r.push(n(t));for(let e of r)Object.assign(n,e.instance);return{instance:n,setOptions:async e=>{for(let t of r)await t.setOptions(e)},dispose:()=>{for(let e of r)e.dispose()}}}}function s(){let e=new Date;return e.valueOf()-e.getTimezoneOffset()*60*1e3}function c(e){let t=e.replace(/-/g,`+`).replace(/_/g,`/`).padEnd(e.length+(4-e.length%4)%4,`=`),n=atob(t),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);return new TextDecoder().decode(r)}function l(e){let[t,n,r]=e.split(`.`),i=JSON.parse(c(n));return{exp:i.exp,createdAt:i.iat,data:i}}var u=i.eo();function d(e,t,n,r){e.inject(u,void 0),e.injectFactory(u,async(a,o)=>{try{let a=o?await o:void 0;if(!a){let t=e.getInstance(i.Oa);t&&(a=await t)}return t?!a||(l(a)?.exp??0)*1e3<=s()?await t(n,r,a):a:``}catch{return``}},!0)}var f=a(e=>{let t,n,r;return e.addService(i.ia,{execute:async n=>{if(t){let t=await e.getInstanceAsync(u);t&&n.headers.append(`authorization`,`Bearer ${t}`)}}}),{setOptions(a){let o=!i.na(n,a.user),s=r!==a.project;(t!==a.getAuthToken||o||s)&&(t=a.getAuthToken,n=a.user,r=a.project,d(e,t,a.user,a.project))}}});function p(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)e[r]=n[r]}return e}var m={read:function(e){return e[0]===`"`&&(e=e.slice(1,-1)),e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(e){return encodeURIComponent(e).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}};function h(e,t){function n(n,r,i){if(!(typeof document>`u`)){i=p({},t,i),typeof i.expires==`number`&&(i.expires=new Date(Date.now()+i.expires*864e5)),i.expires&&=i.expires.toUTCString(),n=encodeURIComponent(n).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var a=``;for(var o in i)i[o]&&(a+=`; `+o,i[o]!==!0&&(a+=`=`+i[o].split(`;`)[0]));return document.cookie=n+`=`+e.write(r,n)+a}}function r(t){if(!(typeof document>`u`||arguments.length&&!t)){for(var n=document.cookie?document.cookie.split(`; `):[],r={},i=0;i<n.length;i++){var a=n[i].split(`=`),o=a.slice(1).join(`=`);try{var s=decodeURIComponent(a[0]);if(r[s]=e.read(o,s),t===s)break}catch{}}return t?r[t]:r}}return Object.create({set:n,get:r,remove:function(e,t){n(e,``,p({},t,{expires:-1}))},withAttributes:function(e){return h(this.converter,p({},this.attributes,e))},withConverter:function(e){return h(p({},this.converter,e),this.attributes)}},{attributes:{value:Object.freeze(t)},converter:{value:Object.freeze(e)}})}var g=h(m,{path:`/`}),_=r.a(((e,t)=>{(function(n){"use strict";var r=n.setTimeout,i=n.clearTimeout,a=n.XMLHttpRequest,o=n.XDomainRequest,s=n.ActiveXObject,c=n.EventSource,l=n.document,u=n.Promise,d=n.fetch,f=n.Response,p=n.TextDecoder,m=n.TextEncoder,h=n.AbortController;if(typeof window<`u`&&l!==void 0&&!(`readyState`in l)&&l.body==null&&(l.readyState=`loading`,window.addEventListener(`load`,function(e){l.readyState=`complete`},!1)),a==null&&s!=null&&(a=function(){return new s(`Microsoft.XMLHTTP`)}),Object.create??(Object.create=function(e){function t(){}return t.prototype=e,new t}),Date.now||(Date.now=function(){return new Date().getTime()}),h==null){var g=d;d=function(e,t){var n=t.signal;return g(e,{headers:t.headers,credentials:t.credentials,cache:t.cache}).then(function(e){var t=e.body.getReader();return n._reader=t,n._aborted&&n._reader.cancel(),{status:e.status,statusText:e.statusText,headers:e.headers,body:{getReader:function(){return t}}}})},h=function(){this.signal={_reader:null,_aborted:!1},this.abort=function(){this.signal._reader!=null&&this.signal._reader.cancel(),this.signal._aborted=!0}}}function _(){this.bitsNeeded=0,this.codePoint=0}_.prototype.decode=function(e){function t(e,t,n){if(n===1)return e>=128>>t&&e<<t<=2047;if(n===2)return e>=2048>>t&&e<<t<=55295||e>=57344>>t&&e<<t<=65535;if(n===3)return e>=65536>>t&&e<<t<=1114111;throw Error()}function n(e,t){if(e===6)return t>>6>15?3:t>31?2:1;if(e===12)return t>15?3:2;if(e===18)return 3;throw Error()}for(var r=65533,i=``,a=this.bitsNeeded,o=this.codePoint,s=0;s<e.length;s+=1){var c=e[s];a!==0&&(c<128||c>191||!t(o<<6|c&63,a-6,n(a,o)))&&(a=0,o=r,i+=String.fromCharCode(o)),a===0?(c>=0&&c<=127?(a=0,o=c):c>=192&&c<=223?(a=6,o=c&31):c>=224&&c<=239?(a=12,o=c&15):c>=240&&c<=247?(a=18,o=c&7):(a=0,o=r),a!==0&&!t(o,a,n(a,o))&&(a=0,o=r)):(a-=6,o=o<<6|c&63),a===0&&(o<=65535?i+=String.fromCharCode(o):(i+=String.fromCharCode(55296+(o-65535-1>>10)),i+=String.fromCharCode(56320+(o-65535-1&1023))))}return this.bitsNeeded=a,this.codePoint=o,i},(p==null||m==null||!function(){try{return new p().decode(new m().encode(`test`),{stream:!0})===`test`}catch{}return!1}())&&(p=_);var v=function(){};function y(e){this.withCredentials=!1,this.readyState=0,this.status=0,this.statusText=``,this.responseText=``,this.onprogress=v,this.onload=v,this.onerror=v,this.onreadystatechange=v,this._contentType=``,this._xhr=e,this._sendTimeout=0,this._abort=v}y.prototype.open=function(e,t){this._abort(!0);var n=this,o=this._xhr,s=1,c=0;this._abort=function(e){n._sendTimeout!==0&&(i(n._sendTimeout),n._sendTimeout=0),(s===1||s===2||s===3)&&(s=4,o.onload=v,o.onerror=v,o.onabort=v,o.onprogress=v,o.onreadystatechange=v,o.abort(),c!==0&&(i(c),c=0),e||(n.readyState=4,n.onabort(null),n.onreadystatechange())),s=0};var l=function(){if(s===1){var e=0,t=``,r=void 0;if(`contentType`in o)e=200,t=`OK`,r=o.contentType;else try{e=o.status,t=o.statusText,r=o.getResponseHeader(`Content-Type`)}catch{e=0,t=``,r=void 0}e!==0&&(s=2,n.readyState=2,n.status=e,n.statusText=t,n._contentType=r,n.onreadystatechange())}},u=function(){if(l(),s===2||s===3){s=3;var e=``;try{e=o.responseText}catch{}n.readyState=3,n.responseText=e,n.onprogress()}},d=function(e,t){if((t==null||t.preventDefault==null)&&(t={preventDefault:v}),u(),s===1||s===2||s===3){if(s=4,c!==0&&(i(c),c=0),n.readyState=4,e===`load`)n.onload(t);else if(e===`error`)n.onerror(t);else if(e===`abort`)n.onabort(t);else throw TypeError();n.onreadystatechange()}},f=function(e){o!=null&&(o.readyState===4?(!(`onload`in o)||!(`onerror`in o)||!(`onabort`in o))&&d(o.responseText===``?`error`:`load`,e):o.readyState===3?`onprogress`in o||u():o.readyState===2&&l())},p=function(){c=r(function(){p()},500),o.readyState===3&&u()};`onload`in o&&(o.onload=function(e){d(`load`,e)}),`onerror`in o&&(o.onerror=function(e){d(`error`,e)}),`onabort`in o&&(o.onabort=function(e){d(`abort`,e)}),`onprogress`in o&&(o.onprogress=u),`onreadystatechange`in o&&(o.onreadystatechange=function(e){f(e)}),(`contentType`in o||!(`ontimeout`in a.prototype))&&(t+=(t.indexOf(`?`)===-1?`?`:`&`)+`padding=true`),o.open(e,t,!0),`readyState`in o&&(c=r(function(){p()},0))},y.prototype.abort=function(){this._abort(!1)},y.prototype.getResponseHeader=function(e){return this._contentType},y.prototype.setRequestHeader=function(e,t){var n=this._xhr;`setRequestHeader`in n&&n.setRequestHeader(e,t)},y.prototype.getAllResponseHeaders=function(){return this._xhr.getAllResponseHeaders==null?``:this._xhr.getAllResponseHeaders()||``},y.prototype.send=function(){if((!(`ontimeout`in a.prototype)||!(`sendAsBinary`in a.prototype)&&!(`mozAnon`in a.prototype))&&l!=null&&l.readyState!=null&&l.readyState!==`complete`){var e=this;e._sendTimeout=r(function(){e._sendTimeout=0,e.send()},4);return}var t=this._xhr;`withCredentials`in t&&(t.withCredentials=this.withCredentials);try{t.send(void 0)}catch(e){throw e}};function b(e){return e.replace(/[A-Z]/g,function(e){return String.fromCharCode(e.charCodeAt(0)+32)})}function x(e){for(var t=Object.create(null),n=e.split(`\r
|
|
2
2
|
`),r=0;r<n.length;r+=1){var i=n[r].split(`: `),a=i.shift(),o=i.join(`: `);t[b(a)]=o}this._map=t}x.prototype.get=function(e){return this._map[b(e)]},a!=null&&a.HEADERS_RECEIVED==null&&(a.HEADERS_RECEIVED=2);function S(){}S.prototype.open=function(e,t,n,r,i,o,s){e.open(`GET`,i);var c=0;for(var l in e.onprogress=function(){var t=e.responseText.slice(c);c+=t.length,n(t)},e.onerror=function(e){e.preventDefault(),r(Error(`NetworkError`))},e.onload=function(){r(null)},e.onabort=function(){r(null)},e.onreadystatechange=function(){if(e.readyState===a.HEADERS_RECEIVED){var n=e.status,r=e.statusText;t(n,r,e.getResponseHeader(`Content-Type`),new x(e.getAllResponseHeaders()))}},e.withCredentials=o,s)Object.prototype.hasOwnProperty.call(s,l)&&e.setRequestHeader(l,s[l]);return e.send(),e};function C(e){this._headers=e}C.prototype.get=function(e){return this._headers.get(e)};function w(){}w.prototype.open=function(e,t,n,r,i,a,o){var s=null,c=new h,l=c.signal,f=new p;return d(i,{headers:o,credentials:a?`include`:`same-origin`,signal:l,cache:`no-store`}).then(function(e){return s=e.body.getReader(),t(e.status,e.statusText,e.headers.get(`Content-Type`),new C(e.headers)),new u(function(e,t){var r=function(){s.read().then(function(t){t.done?e(void 0):(n(f.decode(t.value,{stream:!0})),r())}).catch(function(e){t(e)})};r()})}).catch(function(e){if(e.name!==`AbortError`)return e}).then(function(e){r(e)}),{abort:function(){s?.cancel(),c.abort()}}};function T(){this._listeners=Object.create(null)}function E(e){r(function(){throw e},0)}T.prototype.dispatchEvent=function(e){e.target=this;var t=this._listeners[e.type];if(t!=null)for(var n=t.length,r=0;r<n;r+=1){var i=t[r];try{typeof i.handleEvent==`function`?i.handleEvent(e):i.call(this,e)}catch(e){E(e)}}},T.prototype.addEventListener=function(e,t){e=String(e);var n=this._listeners,r=n[e];r??(r=[],n[e]=r);for(var i=!1,a=0;a<r.length;a+=1)r[a]===t&&(i=!0);i||r.push(t)},T.prototype.removeEventListener=function(e,t){e=String(e);var n=this._listeners,r=n[e];if(r!=null){for(var i=[],a=0;a<r.length;a+=1)r[a]!==t&&i.push(r[a]);i.length===0?delete n[e]:n[e]=i}};function D(e){this.type=e,this.target=void 0}function O(e,t){D.call(this,e),this.data=t.data,this.lastEventId=t.lastEventId}O.prototype=Object.create(D.prototype);function k(e,t){D.call(this,e),this.status=t.status,this.statusText=t.statusText,this.headers=t.headers}k.prototype=Object.create(D.prototype);function A(e,t){D.call(this,e),this.error=t.error}A.prototype=Object.create(D.prototype);var j=-1,M=0,N=1,P=2,F=-1,I=0,L=1,R=2,z=3,B=/^text\/event\-stream(;.*)?$/i,V=1e3,H=18e6,U=function(e,t){var n=e==null?t:parseInt(e,10);return n!==n&&(n=t),W(n)},W=function(e){return Math.min(Math.max(e,V),H)},G=function(e,t,n){try{typeof t==`function`&&t.call(e,n)}catch(e){E(e)}};function K(e,t){T.call(this),t||={},this.onopen=void 0,this.onmessage=void 0,this.onerror=void 0,this.url=void 0,this.readyState=void 0,this.withCredentials=void 0,this.headers=void 0,this._close=void 0,J(this,e,t)}function ee(){return a!=null&&`withCredentials`in a.prototype||o==null?new a:new o}var q=d!=null&&f!=null&&`body`in f.prototype;function J(e,t,n){t=String(t);var a=!!n.withCredentials,o=n.lastEventIdQueryParameterName||`lastEventId`,s=W(1e3),c=U(n.heartbeatTimeout,45e3),l=``,u=s,d=!1,f=0,p=n.headers||{},m=n.Transport,h=q&&m==null?void 0:new y(m==null?ee():new m),g=m!=null&&typeof m!=`string`?new m:h==null?new w:new S,_=void 0,v=0,b=j,x=``,C=``,T=``,E=``,D=I,V=0,H=0,K=function(t,n,r,i){if(b===M)if(t===200&&r!=null&&B.test(r)){b=N,d=Date.now(),u=s,e.readyState=N;var a=new k(`open`,{status:t,statusText:n,headers:i});e.dispatchEvent(a),G(e,e.onopen,a)}else{t===200?``+(r==null?`-`:r.replace(/\s+/g,` `)):(n&&=n.replace(/\s+/g,` `),``+t+n),X();var a=new k(`error`,{status:t,statusText:n,headers:i});e.dispatchEvent(a),G(e,e.onerror,a)}},J=function(t){if(b===N){for(var n=-1,a=0;a<t.length;a+=1){var o=t.charCodeAt(a);(o===10||o===13)&&(n=a)}var p=(n===-1?``:E)+t.slice(0,n+1);E=(n===-1?E:``)+t.slice(n+1),t!==``&&(d=Date.now(),f+=t.length);for(var m=0;m<p.length;m+=1){var o=p.charCodeAt(m);if(D===F&&o===10)D=I;else if(D===F&&(D=I),o===13||o===10){if(D!==I){D===L&&(H=m+1);var h=p.slice(V,H-1),g=p.slice(H+ +(H<m&&p.charCodeAt(H)===32),m);h===`data`?(x+=`
|
|
3
|
-
`,x+=g):h===`id`?C=g:h===`event`?T=g:h===`retry`?(s=U(g,s),u=s):h===`heartbeatTimeout`&&(c=U(g,c),v!==0&&(i(v),v=r(function(){Z()},c)))}if(D===I){if(x!==``){l=C,T===``&&(T=`message`);var _=new O(T,{data:x.slice(1),lastEventId:C});if(e.dispatchEvent(_),T===`open`?G(e,e.onopen,_):T===`message`?G(e,e.onmessage,_):T===`error`&&G(e,e.onerror,_),b===P)return}x=``,T=``}D=o===13?F:I}else D===I&&(V=m,D=L),D===L?o===58&&(H=m+1,D=R):D===R&&(D=z)}}},Y=function(t){if(b===N||b===M){b=j,v!==0&&(i(v),v=0),v=r(function(){Z()},u),u=W(Math.min(s*16,u*2)),e.readyState=M;var n=new A(`error`,{error:t});e.dispatchEvent(n),G(e,e.onerror,n)}},X=function(){b=P,_!=null&&(_.abort(),_=void 0),v!==0&&(i(v),v=0),e.readyState=P},Z=function(){if(v=0,b!==j){if(!d&&_!=null)Y(Error(`No activity within `+c+` milliseconds. `+(b===M?`No response received.`:f+` chars received.`)+` Reconnecting.`)),_!=null&&(_.abort(),_=void 0);else{var n=Math.max((d||Date.now())+c-Date.now(),1);d=!1,v=r(function(){Z()},n)}return}d=!1,f=0,v=r(function(){Z()},c),b=M,x=``,T=``,C=l,E=``,V=0,H=0,D=I;var i=t;if(t.slice(0,5)!==`data:`&&t.slice(0,5)!==`blob:`&&l!==``){var a=t.indexOf(`?`);i=a===-1?t:t.slice(0,a+1)+t.slice(a+1).replace(/(?:^|&)([^=&]*)(?:=[^&]*)?/g,function(e,t){return t===o?``:e}),i+=(t.indexOf(`?`)===-1?`?`:`&`)+o+`=`+encodeURIComponent(l)}var s=e.withCredentials,u={};u.Accept=`text/event-stream`;var p=e.headers;if(p!=null)for(var m in p)Object.prototype.hasOwnProperty.call(p,m)&&(u[m]=p[m]);try{_=g.open(h,K,J,Y,i,s,u)}catch(e){throw X(),e}};e.url=t,e.readyState=M,e.withCredentials=a,e.headers=p,e._close=X,Z()}K.prototype=Object.create(T.prototype),K.prototype.CONNECTING=M,K.prototype.OPEN=N,K.prototype.CLOSED=P,K.prototype.close=function(){this._close()},K.CONNECTING=M,K.OPEN=N,K.CLOSED=P,K.prototype.withCredentials=void 0;var Y=c;a!=null&&(c==null||!(`withCredentials`in c.prototype))&&(Y=K),(function(r){if(typeof t==`object`&&typeof t.exports==`object`){var i=r(e);i!==void 0&&(t.exports=i)}else typeof define==`function`&&define.amd?define([`exports`],r):r(n)})(function(e){e.EventSourcePolyfill=K,e.NativeEventSource=c,e.EventSource=Y})})(typeof globalThis>`u`?typeof window<`u`?window:typeof self<`u`?self:e:globalThis)})),v=_();function y({candidates:e,headers:t,createEventSource:n,onMessage:r,onError:i}){let a=e.filter(Boolean),o=!1,s=null,c=()=>{s?.close(),s=null},l=e=>{if(o)return;let u=a[e];if(!u){i?.(Error(`Failed to connect to EventSource through proxy chain`));return}c();let d=n(u,{headers:t});s=d,d.onmessage=e=>{o||s!==d||r(e)},d.onerror=t=>{if(!(o||s!==d)){if(c(),e+1<a.length){l(e+1);return}i?.(t)}}};return l(0),{close(){o=!0,c()}}}var b=`https://api.unsplash.com`,x=`https://api.giphy.com/v1/gifs`;function S(e){return{error:e instanceof Error?e:Error(String(e))}}async function C(e){if(!e.ok)throw Error(`Request failed with status ${e.status}`);let t=await e.text();try{return t?JSON.parse(t):null}catch(e){throw e}}function w(e){return e&&Array.isArray(e.results)?e:e?.data&&Array.isArray(e.data.results)?e.data:e?.response&&Array.isArray(e.response.results)?e.response:{...e||{},results:[]}}var T=i.Pr({reducerPath:`imageApi`,baseQuery:void 0,endpoints:e=>({getImageInfo:e.query({queryFn:async function(e,t){try{let n=t.getState().configSlice?.config?.imageInfoToolUrl||`https://scr.useblocks.io/imageinfo`;return{data:await C(await fetch(`${n}?url=${encodeURIComponent(e)}`))}}catch(e){return S(e)}}}),getSearchImage:e.query({queryFn:async function({query:e,page:t},n){let r=e.keywords.replace(/[^\w\d\sа-яёА-ЯЁ]|_/g,``).replace(/[\s_-]+/g,` `);try{let a=n.getState().configSlice?.config,o=i.Ar.getInstance(n,i.Sa)!==void 0,s=new URL(`${b}/search/photos`);return s.searchParams.set(`client_id`,`S5iNcLqYgRBIOLQdluHdTsCJnjCvahzhG7JfYQOrV7o`),s.searchParams.set(`lang`,`ru`),s.searchParams.set(`per_page`,`18`),s.searchParams.set(`query`,r),s.searchParams.set(`page`,String(t)),e.color!==``&&s.searchParams.set(`color`,e.color),e.orientation!==``&&s.searchParams.set(`orientation`,e.orientation),{data:w(await C(await i.aa(s.toString(),{config:a,standalone:o,resourceType:`stockImages`,intent:`metadata`})))}}catch(e){return S(e)}}}),getUnsplashImage:e.query({queryFn:async function(e,t){try{let n=t.getState().configSlice?.config,r=i.Ar.getInstance(t,i.Sa)!==void 0,a=new URL(e);return a.searchParams.set(`client_id`,`S5iNcLqYgRBIOLQdluHdTsCJnjCvahzhG7JfYQOrV7o`),{data:await C(await i.aa(a.toString(),{config:n,standalone:r,resourceType:`stockImages`,intent:`metadata`}))}}catch(e){return S(e)}}}),sendAiImageRequest:e.query({queryFn:async function({body:e},t){try{return await i.Dr(t).aiGenerator.ai_create(e)}catch(e){throw Error(e)}}}),getAiImage:e.query({queryFn:async function(e,t){try{return await i.Dr(t).aiGenerator.ai_status_list(e)}catch(e){return S(e)}}}),getAiImageSSE:e.query({queryFn:e=>({data:[]}),async onCacheEntryAdded({task_id:e,entity_id:t,setError:n},r){let{updateCachedData:a,cacheEntryRemoved:o}=r,s=i.Dr(r).baseUrl||i.na(`https://app.useblocks.io/api`),c=r.getState().configSlice?.config,l=i.Ar.getInstance(r,i.Sa)!==void 0,d=i.ki.isPlugin?await i.Ar.getInstance(r,u):g.get(i.qr.em_token),f=d?{Authorization:`Bearer ${d}`}:{},p=`${s}/ai-generator/v1/ai-status?entity_id=${t}&stream=1&task_id=${e}`,m=i.ca(p,{config:c,method:`GET`,requestType:`ai`,standalone:l}),h=y({candidates:m.length>0?m:[p],headers:f,createEventSource:(e,t)=>new v.EventSourcePolyfill(e,t),onMessage:e=>{let t=JSON.parse(e.data);a(e=>{e.push(t)}),t.progress===100&&h.close()},onError:()=>{h.close()}});await o,h.close()}}),getSearchGif:e.query({queryFn:async function({query:e,page:t},n){let r=e.keywords.replace(/[^\w\d\sа-яёА-ЯЁ]|_/g,``).replace(/[\s_-]+/g,` `);try{let e=n.getState().configSlice?.config,a=i.Ar.getInstance(n,i.Sa)!==void 0;return{data:await C(await i.aa(`${x}/search?api_key=Nh77eBlPeMn1ed9MBAvL542NUGeNO26F&q=${encodeURIComponent(r)}&limit=25&offset=${t}&lang=en`,{config:e,standalone:a,resourceType:`generic`,intent:`metadata`}))}}catch(e){return S(e)}}})})}),{useLazyGetImageInfoQuery:E,useGetImageInfoQuery:D,useGetSearchImageQuery:O,useLazyGetSearchImageQuery:k,useSendAiImageRequestQuery:A,useLazySendAiImageRequestQuery:j,useGetAiImageQuery:M,useLazyGetAiImageQuery:N,useGetUnsplashImageQuery:P,useLazyGetUnsplashImageQuery:F,useGetSearchGifQuery:I,useLazyGetSearchGifQuery:L,useGetAiImageSSEQuery:R,useLazyGetAiImageSSEQuery:z}=T,B=`https://app.useblocks.io/api`.replaceAll(/[\\/]$/g,``),V=`wp-json/limits/v1`,H=`wp-json/subscription/v2`,U=i.Pr({reducerPath:`limitsApi`,baseQuery:i.Tr({baseUrl:B}),tagTypes:[`LimitsStats`,`LimitsWarnings`,`SubscriptionMe`],endpoints:e=>({getLimitsStats:e.query({query:()=>({url:`${V}/stats`,method:`GET`}),providesTags:[`LimitsStats`]}),getLimitsStatsByType:e.query({query:e=>({url:`${V}/stats/${e}`,method:`GET`}),providesTags:(e,t,n)=>[{type:`LimitsStats`,id:n}]}),getLimitsWarnings:e.query({query:()=>({url:`${V}/warnings`,method:`GET`}),providesTags:[`LimitsWarnings`]}),getSubscriptionMeV2:e.query({query:()=>({url:`${H}/me`,method:`GET`}),providesTags:[`SubscriptionMe`]})})}),{useGetLimitsStatsQuery:W,useLazyGetLimitsStatsQuery:G,useGetLimitsStatsByTypeQuery:K,useLazyGetLimitsStatsByTypeQuery:ee,useGetLimitsWarningsQuery:q,useLazyGetLimitsWarningsQuery:J,useGetSubscriptionMeV2Query:Y,useLazyGetSubscriptionMeV2Query:X}=U,Z=new URLSearchParams(window.location.search),Q=Z.get(`tag`),te=Z.get(`folder`),ne=i.vr({activeModal:``,switchToPlanRequestTitle:``,secondModal:``,projectsTotal:``,projectsTotalPages:``,folders:[],activeTagId:Q||null,activeFolderId:te||(Q?null:`all`),activeTab:null,activeIntegration:null,addNewProjectInitialTitle:null}),$=`projectsPageSlice`,re=i.Hr({name:$,initialState:ne,reducers:{openModal(e,t){e.activeModal=t.payload},openAddNewProjectModal(e,t){e.activeModal=i.wi.ADD_NEW_PROJECT_MODAL,e.addNewProjectInitialTitle=t.payload??null},setSwitchToPlanRequestTitle(e,t){e.switchToPlanRequestTitle=typeof t.payload==`string`?t.payload:``},setActiveTab(e,t){e.activeTab=t.payload},closeModal(e){e.activeModal=``,e.activeIntegration=null,e.addNewProjectInitialTitle=null,e.switchToPlanRequestTitle=``},openSecondModal(e,t){e.secondModal=t.payload},closeSecondModal(e){e.secondModal=``},setFolders(e,{payload:t}){e.folders=t},setActiveTagId(e,{payload:t}){e.activeTagId=t},setActiveIntegration(e,t){e.activeIntegration=t.payload}},extraReducers:e=>{e.addMatcher(i.zt.endpoints.getProjects.matchFulfilled,(e,t)=>{let n=t.meta,r=n.baseQueryMeta,i=n.projectsListPagination??r?.projectsListPagination;if(i!=null&&typeof i.total==`number`&&Number.isFinite(i.total)&&i.total>=0){e.projectsTotal=String(i.total),e.projectsTotalPages=String(typeof i.totalPages==`number`&&Number.isFinite(i.totalPages)?i.totalPages:``);return}let a=r?.response?.headers?.get?.(`X-WP-Total`),o=r?.response?.headers?.get?.(`X-WP-TotalPages`);e.projectsTotal=a??``,e.projectsTotalPages=o??``}),e.addMatcher(i.Et.endpoints.getFolders.matchFulfilled,(e,{payload:t})=>{e.folders=t})}}),{openModal:ie,openAddNewProjectModal:ae,setSwitchToPlanRequestTitle:oe,setActiveTab:se,closeModal:ce,openSecondModal:le,closeSecondModal:ue,setFolders:de,setActiveTagId:fe,setActiveIntegration:pe}=re.actions,me=e=>e[$].activeTab,he=e=>e[$].activeModal,ge=e=>e[$].secondModal,_e=e=>e[$].projectsTotal,ve=e=>e[$].activeIntegration;Object.defineProperty(t,"A",{enumerable:!0,get:function(){return a}}),Object.defineProperty(t,"C",{enumerable:!0,get:function(){return j}}),Object.defineProperty(t,"D",{enumerable:!0,get:function(){return u}}),Object.defineProperty(t,"E",{enumerable:!0,get:function(){return f}}),Object.defineProperty(t,"O",{enumerable:!0,get:function(){return l}}),Object.defineProperty(t,"S",{enumerable:!0,get:function(){return F}}),Object.defineProperty(t,"T",{enumerable:!0,get:function(){return g}}),Object.defineProperty(t,"_",{enumerable:!0,get:function(){return T}}),Object.defineProperty(t,"a",{enumerable:!0,get:function(){return re}}),Object.defineProperty(t,"b",{enumerable:!0,get:function(){return L}}),Object.defineProperty(t,"c",{enumerable:!0,get:function(){return me}}),Object.defineProperty(t,"d",{enumerable:!0,get:function(){return se}}),Object.defineProperty(t,"f",{enumerable:!0,get:function(){return oe}}),Object.defineProperty(t,"g",{enumerable:!0,get:function(){return ee}}),Object.defineProperty(t,"h",{enumerable:!0,get:function(){return q}}),Object.defineProperty(t,"i",{enumerable:!0,get:function(){return le}}),Object.defineProperty(t,"k",{enumerable:!0,get:function(){return o}}),Object.defineProperty(t,"l",{enumerable:!0,get:function(){return _e}}),Object.defineProperty(t,"m",{enumerable:!0,get:function(){return W}}),Object.defineProperty(t,"n",{enumerable:!0,get:function(){return ue}}),Object.defineProperty(t,"o",{enumerable:!0,get:function(){return ve}}),Object.defineProperty(t,"p",{enumerable:!0,get:function(){return U}}),Object.defineProperty(t,"r",{enumerable:!0,get:function(){return ie}}),Object.defineProperty(t,"s",{enumerable:!0,get:function(){return he}}),Object.defineProperty(t,"t",{enumerable:!0,get:function(){return ce}}),Object.defineProperty(t,"u",{enumerable:!0,get:function(){return ge}}),Object.defineProperty(t,"v",{enumerable:!0,get:function(){return z}}),Object.defineProperty(t,"w",{enumerable:!0,get:function(){return _}}),Object.defineProperty(t,"x",{enumerable:!0,get:function(){return k}}),Object.defineProperty(t,"y",{enumerable:!0,get:function(){return E}})});
|
|
3
|
+
`,x+=g):h===`id`?C=g:h===`event`?T=g:h===`retry`?(s=U(g,s),u=s):h===`heartbeatTimeout`&&(c=U(g,c),v!==0&&(i(v),v=r(function(){Z()},c)))}if(D===I){if(x!==``){l=C,T===``&&(T=`message`);var _=new O(T,{data:x.slice(1),lastEventId:C});if(e.dispatchEvent(_),T===`open`?G(e,e.onopen,_):T===`message`?G(e,e.onmessage,_):T===`error`&&G(e,e.onerror,_),b===P)return}x=``,T=``}D=o===13?F:I}else D===I&&(V=m,D=L),D===L?o===58&&(H=m+1,D=R):D===R&&(D=z)}}},Y=function(t){if(b===N||b===M){b=j,v!==0&&(i(v),v=0),v=r(function(){Z()},u),u=W(Math.min(s*16,u*2)),e.readyState=M;var n=new A(`error`,{error:t});e.dispatchEvent(n),G(e,e.onerror,n)}},X=function(){b=P,_!=null&&(_.abort(),_=void 0),v!==0&&(i(v),v=0),e.readyState=P},Z=function(){if(v=0,b!==j){if(!d&&_!=null)Y(Error(`No activity within `+c+` milliseconds. `+(b===M?`No response received.`:f+` chars received.`)+` Reconnecting.`)),_!=null&&(_.abort(),_=void 0);else{var n=Math.max((d||Date.now())+c-Date.now(),1);d=!1,v=r(function(){Z()},n)}return}d=!1,f=0,v=r(function(){Z()},c),b=M,x=``,T=``,C=l,E=``,V=0,H=0,D=I;var i=t;if(t.slice(0,5)!==`data:`&&t.slice(0,5)!==`blob:`&&l!==``){var a=t.indexOf(`?`);i=a===-1?t:t.slice(0,a+1)+t.slice(a+1).replace(/(?:^|&)([^=&]*)(?:=[^&]*)?/g,function(e,t){return t===o?``:e}),i+=(t.indexOf(`?`)===-1?`?`:`&`)+o+`=`+encodeURIComponent(l)}var s=e.withCredentials,u={};u.Accept=`text/event-stream`;var p=e.headers;if(p!=null)for(var m in p)Object.prototype.hasOwnProperty.call(p,m)&&(u[m]=p[m]);try{_=g.open(h,K,J,Y,i,s,u)}catch(e){throw X(),e}};e.url=t,e.readyState=M,e.withCredentials=a,e.headers=p,e._close=X,Z()}K.prototype=Object.create(T.prototype),K.prototype.CONNECTING=M,K.prototype.OPEN=N,K.prototype.CLOSED=P,K.prototype.close=function(){this._close()},K.CONNECTING=M,K.OPEN=N,K.CLOSED=P,K.prototype.withCredentials=void 0;var Y=c;a!=null&&(c==null||!(`withCredentials`in c.prototype))&&(Y=K),(function(r){if(typeof t==`object`&&typeof t.exports==`object`){var i=r(e);i!==void 0&&(t.exports=i)}else typeof define==`function`&&define.amd?define([`exports`],r):r(n)})(function(e){e.EventSourcePolyfill=K,e.NativeEventSource=c,e.EventSource=Y})})(typeof globalThis>`u`?typeof window<`u`?window:typeof self<`u`?self:e:globalThis)})),v=_();function y({candidates:e,headers:t,createEventSource:n,onMessage:r,onError:i}){let a=e.filter(Boolean),o=!1,s=null,c=()=>{s?.close(),s=null},l=e=>{if(o)return;let u=a[e];if(!u){i?.(Error(`Failed to connect to EventSource through proxy chain`));return}c();let d=n(u,{headers:t});s=d,d.onmessage=e=>{o||s!==d||r(e)},d.onerror=t=>{if(!(o||s!==d)){if(c(),e+1<a.length){l(e+1);return}i?.(t)}}};return l(0),{close(){o=!0,c()}}}var b=`https://api.unsplash.com`,x=`https://api.giphy.com/v1/gifs`;function S(e){return{error:e instanceof Error?e:Error(String(e))}}async function C(e){if(!e.ok)throw Error(`Request failed with status ${e.status}`);let t=await e.text();try{return t?JSON.parse(t):null}catch(e){throw e}}function w(e){return e&&Array.isArray(e.results)?e:e?.data&&Array.isArray(e.data.results)?e.data:e?.response&&Array.isArray(e.response.results)?e.response:{...e||{},results:[]}}var T=i.zr({reducerPath:`imageApi`,baseQuery:void 0,endpoints:e=>({getImageInfo:e.query({queryFn:async function(e,t){try{let n=t.getState().configSlice?.config?.imageInfoToolUrl||`https://scr.useblocks.io/imageinfo`;return{data:await C(await fetch(`${n}?url=${encodeURIComponent(e)}`))}}catch(e){return S(e)}}}),getSearchImage:e.query({queryFn:async function({query:e,page:t},n){let r=e.keywords.replace(/[^\w\d\sа-яёА-ЯЁ]|_/g,``).replace(/[\s_-]+/g,` `);try{let a=n.getState().configSlice?.config,o=i.Fr.getInstance(n,i.Da)!==void 0,s=new URL(`${b}/search/photos`);return s.searchParams.set(`client_id`,`S5iNcLqYgRBIOLQdluHdTsCJnjCvahzhG7JfYQOrV7o`),s.searchParams.set(`lang`,`ru`),s.searchParams.set(`per_page`,`18`),s.searchParams.set(`query`,r),s.searchParams.set(`page`,String(t)),e.color!==``&&s.searchParams.set(`color`,e.color),e.orientation!==``&&s.searchParams.set(`orientation`,e.orientation),{data:w(await C(await i.ua(s.toString(),{config:a,standalone:o,resourceType:`stockImages`,intent:`metadata`})))}}catch(e){return S(e)}}}),getUnsplashImage:e.query({queryFn:async function(e,t){try{let n=t.getState().configSlice?.config,r=i.Fr.getInstance(t,i.Da)!==void 0,a=new URL(e);return a.searchParams.set(`client_id`,`S5iNcLqYgRBIOLQdluHdTsCJnjCvahzhG7JfYQOrV7o`),{data:await C(await i.ua(a.toString(),{config:n,standalone:r,resourceType:`stockImages`,intent:`metadata`}))}}catch(e){return S(e)}}}),sendAiImageRequest:e.query({queryFn:async function({body:e},t){try{return await i.Mr(t).aiGenerator.ai_create(e)}catch(e){throw Error(e)}}}),getAiImage:e.query({queryFn:async function(e,t){try{return await i.Mr(t).aiGenerator.ai_status_list(e)}catch(e){return S(e)}}}),getAiImageSSE:e.query({queryFn:e=>({data:[]}),async onCacheEntryAdded({task_id:e,entity_id:t,setError:n},r){let{updateCachedData:a,cacheEntryRemoved:o}=r,s=i.Mr(r).baseUrl||i.sa(`https://app.useblocks.io/api`),c=r.getState().configSlice?.config,l=i.Fr.getInstance(r,i.Da)!==void 0,d=i.Pi.isPlugin?await i.Fr.getInstance(r,u):g.get(i.Qr.em_token),f=d?{Authorization:`Bearer ${d}`}:{},p=`${s}/ai-generator/v1/ai-status?entity_id=${t}&stream=1&task_id=${e}`,m=i.pa(p,{config:c,method:`GET`,requestType:`ai`,standalone:l}),h=y({candidates:m.length>0?m:[p],headers:f,createEventSource:(e,t)=>new v.EventSourcePolyfill(e,t),onMessage:e=>{let t=JSON.parse(e.data);a(e=>{e.push(t)}),t.progress===100&&h.close()},onError:()=>{h.close()}});await o,h.close()}}),getSearchGif:e.query({queryFn:async function({query:e,page:t},n){let r=e.keywords.replace(/[^\w\d\sа-яёА-ЯЁ]|_/g,``).replace(/[\s_-]+/g,` `);try{let e=n.getState().configSlice?.config,a=i.Fr.getInstance(n,i.Da)!==void 0;return{data:await C(await i.ua(`${x}/search?api_key=Nh77eBlPeMn1ed9MBAvL542NUGeNO26F&q=${encodeURIComponent(r)}&limit=25&offset=${t}&lang=en`,{config:e,standalone:a,resourceType:`generic`,intent:`metadata`}))}}catch(e){return S(e)}}})})}),{useLazyGetImageInfoQuery:E,useGetImageInfoQuery:D,useGetSearchImageQuery:O,useLazyGetSearchImageQuery:k,useSendAiImageRequestQuery:A,useLazySendAiImageRequestQuery:j,useGetAiImageQuery:M,useLazyGetAiImageQuery:N,useGetUnsplashImageQuery:P,useLazyGetUnsplashImageQuery:F,useGetSearchGifQuery:I,useLazyGetSearchGifQuery:L,useGetAiImageSSEQuery:R,useLazyGetAiImageSSEQuery:z}=T,B=`https://app.useblocks.io/api`.replaceAll(/[\\/]$/g,``),V=`wp-json/limits/v1`,H=`wp-json/subscription/v2`,U=i.zr({reducerPath:`limitsApi`,baseQuery:i.Ar({baseUrl:B}),tagTypes:[`LimitsStats`,`LimitsWarnings`,`SubscriptionMe`],endpoints:e=>({getLimitsStats:e.query({query:()=>({url:`${V}/stats`,method:`GET`}),providesTags:[`LimitsStats`]}),getLimitsStatsByType:e.query({query:e=>({url:`${V}/stats/${e}`,method:`GET`}),providesTags:(e,t,n)=>[{type:`LimitsStats`,id:n}]}),getLimitsWarnings:e.query({query:()=>({url:`${V}/warnings`,method:`GET`}),providesTags:[`LimitsWarnings`]}),getSubscriptionMeV2:e.query({query:()=>({url:`${H}/me`,method:`GET`}),providesTags:[`SubscriptionMe`]})})}),{useGetLimitsStatsQuery:W,useLazyGetLimitsStatsQuery:G,useGetLimitsStatsByTypeQuery:K,useLazyGetLimitsStatsByTypeQuery:ee,useGetLimitsWarningsQuery:q,useLazyGetLimitsWarningsQuery:J,useGetSubscriptionMeV2Query:Y,useLazyGetSubscriptionMeV2Query:X}=U,Z=new URLSearchParams(window.location.search),Q=Z.get(`tag`),te=Z.get(`folder`),ne=i.Cr({activeModal:``,switchToPlanRequestTitle:``,secondModal:``,projectsTotal:``,projectsTotalPages:``,folders:[],activeTagId:Q||null,activeFolderId:te||(Q?null:`all`),activeTab:null,activeIntegration:null,addNewProjectInitialTitle:null}),$=`projectsPageSlice`,re=i.qr({name:$,initialState:ne,reducers:{openModal(e,t){e.activeModal=t.payload},openAddNewProjectModal(e,t){e.activeModal=i.ki.ADD_NEW_PROJECT_MODAL,e.addNewProjectInitialTitle=t.payload??null},setSwitchToPlanRequestTitle(e,t){e.switchToPlanRequestTitle=typeof t.payload==`string`?t.payload:``},setActiveTab(e,t){e.activeTab=t.payload},closeModal(e){e.activeModal=``,e.activeIntegration=null,e.addNewProjectInitialTitle=null,e.switchToPlanRequestTitle=``},openSecondModal(e,t){e.secondModal=t.payload},closeSecondModal(e){e.secondModal=``},setFolders(e,{payload:t}){e.folders=t},setActiveTagId(e,{payload:t}){e.activeTagId=t},setActiveIntegration(e,t){e.activeIntegration=t.payload}},extraReducers:e=>{e.addMatcher(i.zt.endpoints.getProjects.matchFulfilled,(e,t)=>{let n=t.meta,r=n.baseQueryMeta,i=n.projectsListPagination??r?.projectsListPagination;if(i!=null&&typeof i.total==`number`&&Number.isFinite(i.total)&&i.total>=0){e.projectsTotal=String(i.total),e.projectsTotalPages=String(typeof i.totalPages==`number`&&Number.isFinite(i.totalPages)?i.totalPages:``);return}let a=r?.response?.headers?.get?.(`X-WP-Total`),o=r?.response?.headers?.get?.(`X-WP-TotalPages`);e.projectsTotal=a??``,e.projectsTotalPages=o??``}),e.addMatcher(i.Et.endpoints.getFolders.matchFulfilled,(e,{payload:t})=>{e.folders=t})}}),{openModal:ie,openAddNewProjectModal:ae,setSwitchToPlanRequestTitle:oe,setActiveTab:se,closeModal:ce,openSecondModal:le,closeSecondModal:ue,setFolders:de,setActiveTagId:fe,setActiveIntegration:pe}=re.actions,me=e=>e[$].activeTab,he=e=>e[$].activeModal,ge=e=>e[$].secondModal,_e=e=>e[$].projectsTotal,ve=e=>e[$].activeIntegration;Object.defineProperty(t,"A",{enumerable:!0,get:function(){return a}}),Object.defineProperty(t,"C",{enumerable:!0,get:function(){return j}}),Object.defineProperty(t,"D",{enumerable:!0,get:function(){return u}}),Object.defineProperty(t,"E",{enumerable:!0,get:function(){return f}}),Object.defineProperty(t,"O",{enumerable:!0,get:function(){return l}}),Object.defineProperty(t,"S",{enumerable:!0,get:function(){return F}}),Object.defineProperty(t,"T",{enumerable:!0,get:function(){return g}}),Object.defineProperty(t,"_",{enumerable:!0,get:function(){return T}}),Object.defineProperty(t,"a",{enumerable:!0,get:function(){return re}}),Object.defineProperty(t,"b",{enumerable:!0,get:function(){return L}}),Object.defineProperty(t,"c",{enumerable:!0,get:function(){return me}}),Object.defineProperty(t,"d",{enumerable:!0,get:function(){return se}}),Object.defineProperty(t,"f",{enumerable:!0,get:function(){return oe}}),Object.defineProperty(t,"g",{enumerable:!0,get:function(){return ee}}),Object.defineProperty(t,"h",{enumerable:!0,get:function(){return q}}),Object.defineProperty(t,"i",{enumerable:!0,get:function(){return le}}),Object.defineProperty(t,"k",{enumerable:!0,get:function(){return o}}),Object.defineProperty(t,"l",{enumerable:!0,get:function(){return _e}}),Object.defineProperty(t,"m",{enumerable:!0,get:function(){return W}}),Object.defineProperty(t,"n",{enumerable:!0,get:function(){return ue}}),Object.defineProperty(t,"o",{enumerable:!0,get:function(){return ve}}),Object.defineProperty(t,"p",{enumerable:!0,get:function(){return U}}),Object.defineProperty(t,"r",{enumerable:!0,get:function(){return ie}}),Object.defineProperty(t,"s",{enumerable:!0,get:function(){return he}}),Object.defineProperty(t,"t",{enumerable:!0,get:function(){return ce}}),Object.defineProperty(t,"u",{enumerable:!0,get:function(){return ge}}),Object.defineProperty(t,"v",{enumerable:!0,get:function(){return z}}),Object.defineProperty(t,"w",{enumerable:!0,get:function(){return _}}),Object.defineProperty(t,"x",{enumerable:!0,get:function(){return k}}),Object.defineProperty(t,"y",{enumerable:!0,get:function(){return E}})});
|
|
@@ -0,0 +1,558 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="ru">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<title>Two-step flow: design → subject/preheader (headless)</title>
|
|
6
|
+
<script id="plugin-script" type="text/javascript" src="useblocks.js?242b532e"></script>
|
|
7
|
+
<style>
|
|
8
|
+
body {
|
|
9
|
+
margin: 0;
|
|
10
|
+
font-family: system-ui, sans-serif;
|
|
11
|
+
font-size: 14px;
|
|
12
|
+
}
|
|
13
|
+
.toolbar {
|
|
14
|
+
display: flex;
|
|
15
|
+
gap: 8px;
|
|
16
|
+
padding: 8px;
|
|
17
|
+
border-bottom: 1px solid #ddd;
|
|
18
|
+
align-items: center;
|
|
19
|
+
flex-wrap: wrap;
|
|
20
|
+
}
|
|
21
|
+
.step-btn.active {
|
|
22
|
+
font-weight: 600;
|
|
23
|
+
outline: 2px solid #852876;
|
|
24
|
+
}
|
|
25
|
+
#flow_log {
|
|
26
|
+
margin: 0;
|
|
27
|
+
padding: 8px;
|
|
28
|
+
background: #f5f5f5;
|
|
29
|
+
border-bottom: 1px solid #ddd;
|
|
30
|
+
max-height: 180px;
|
|
31
|
+
overflow: auto;
|
|
32
|
+
white-space: pre-wrap;
|
|
33
|
+
font-size: 12px;
|
|
34
|
+
}
|
|
35
|
+
.page {
|
|
36
|
+
display: none;
|
|
37
|
+
height: calc(100vh - 260px);
|
|
38
|
+
}
|
|
39
|
+
.page.active {
|
|
40
|
+
display: block;
|
|
41
|
+
}
|
|
42
|
+
#blocks-editor {
|
|
43
|
+
padding: 0;
|
|
44
|
+
background: #fff;
|
|
45
|
+
height: 100%;
|
|
46
|
+
min-height: 400px;
|
|
47
|
+
box-sizing: border-box;
|
|
48
|
+
}
|
|
49
|
+
.subject-page {
|
|
50
|
+
padding: 16px;
|
|
51
|
+
max-width: 640px;
|
|
52
|
+
}
|
|
53
|
+
.subject-page label {
|
|
54
|
+
display: block;
|
|
55
|
+
margin-top: 12px;
|
|
56
|
+
font-weight: 500;
|
|
57
|
+
}
|
|
58
|
+
.subject-page input,
|
|
59
|
+
.subject-page textarea {
|
|
60
|
+
width: 100%;
|
|
61
|
+
margin-top: 4px;
|
|
62
|
+
padding: 8px;
|
|
63
|
+
box-sizing: border-box;
|
|
64
|
+
}
|
|
65
|
+
.letter-state {
|
|
66
|
+
font-size: 12px;
|
|
67
|
+
color: #555;
|
|
68
|
+
margin-top: 8px;
|
|
69
|
+
}
|
|
70
|
+
</style>
|
|
71
|
+
</head>
|
|
72
|
+
<body>
|
|
73
|
+
<div class="toolbar">
|
|
74
|
+
<strong>Two-step editor flow</strong>
|
|
75
|
+
<button type="button" id="step_design" class="step-btn active">1. Design (full editor)</button>
|
|
76
|
+
<button type="button" id="step_subject" class="step-btn">2. Subject & preheader (headless)</button>
|
|
77
|
+
<button type="button" id="btn_clear_log">Очистить log</button>
|
|
78
|
+
</div>
|
|
79
|
+
<pre id="flow_log"></pre>
|
|
80
|
+
|
|
81
|
+
<div id="page_design" class="page active">
|
|
82
|
+
<div id="blocks-editor"></div>
|
|
83
|
+
</div>
|
|
84
|
+
|
|
85
|
+
<div id="page_subject" class="page subject-page">
|
|
86
|
+
<p>
|
|
87
|
+
Шаг 2: редактор без <code>element</code> (headless), UI — свои поля хоста.
|
|
88
|
+
Синхронизация: <code>show()</code> → <code>getEmail()</code> →
|
|
89
|
+
<code>updateJsonAndEmail</code> (subject — entity, preheader — json). Persist при каждом переходе шага.
|
|
90
|
+
</p>
|
|
91
|
+
<label for="field_subject">Subject</label>
|
|
92
|
+
<input id="field_subject" type="text" autocomplete="off" />
|
|
93
|
+
|
|
94
|
+
<label for="field_preheader">Preheader</label>
|
|
95
|
+
<textarea id="field_preheader" rows="3"></textarea>
|
|
96
|
+
|
|
97
|
+
<p class="letter-state" id="headless_status">Headless: не инициализирован</p>
|
|
98
|
+
<button type="button" id="btn_subject_next">Next (завершить шаг 2)</button>
|
|
99
|
+
</div>
|
|
100
|
+
|
|
101
|
+
<script async defer>
|
|
102
|
+
/**
|
|
103
|
+
* Двухшаговый флоу встраивания редактора:
|
|
104
|
+
* - Шаг 1 (design): editor.init({ element }) — полный редактор, save через updateHtmlAndEmail
|
|
105
|
+
* - Шаг 2 (headless): editor.init({ content }) без element — UI полей хоста
|
|
106
|
+
* - subject — поле сущности (letterStore.subject), preheader — в json
|
|
107
|
+
* - Шаг 2 sync: show() → getEmail() → updateJsonAndEmail
|
|
108
|
+
* - Между шагами: persist текущего шага → destroy() → новый init
|
|
109
|
+
*/
|
|
110
|
+
|
|
111
|
+
/** Как plugin.html: id письма и шаблон с API (без inline code при старте). */
|
|
112
|
+
const DEMO_LETTER_ID = 'test_test_test_test';
|
|
113
|
+
const INITIAL_TEMPLATE_ID = 321739;
|
|
114
|
+
/** Debounce 400ms для subject/preheader на шаге 2. */
|
|
115
|
+
const FIELD_DEBOUNCE_MS = 400;
|
|
116
|
+
|
|
117
|
+
const COMMON_STYLES =
|
|
118
|
+
'{"block":{"darkBgColor":"#1c52dc"},"text":{"fontFamily":["Safe Fonts","-apple-system, \'Segoe UI\', \'Helvetica Neue\', Helvetica, Roboto, Arial, sans-serif"],"fontSize":16,"fontSizeDim":"px","lineHeight":21,"lineHeightDim":"px","color":"#5a5a5a","textAlign":"left","paddingBottom":10,"paddingBottomDim":"px"},"headings":{"fontFamily":["Safe Fonts","-apple-system, \'Segoe UI\', \'Helvetica Neue\', Helvetica, Roboto, Arial, sans-serif"],"fontSize":24,"fontSizeDim":"px","lineHeight":32,"lineHeightDim":"px","color":"#333333","textAlign":"left","paddingTop":20,"paddingTopDim":"px","paddingBottom":10,"paddingBottomDim":"px","letterSpacing":0,"letterSpacingDim":"px","bold":true,"italic":false},"links":{"color":"#1C52DC","underline":true},"buttons":{"fontFamily":["Safe Fonts","-apple-system, \'Segoe UI\', \'Helvetica Neue\', Helvetica, Roboto, Arial, sans-serif"],"fontSize":16,"fontSizeDim":"px","letterSpacing":0,"letterSpacingDim":"px","color":"#FFFFFF","bold":false,"italic":false,"backgroundColor":"#1C52DC","marginTop":10,"marginTopDim":"px","marginBottom":10,"marginBottomDim":"px","border":{"all":null,"top":null,"right":null,"bottom":null,"left":null},"borderRadius":{"all":5,"topLeft":null,"topRight":null,"bottomRight":null,"bottomLeft":null},"textAlign":"center","padding":{"all":null,"top":null,"right":null,"bottom":null,"left":null}},"block":{"backgroundColor":""}}';
|
|
119
|
+
|
|
120
|
+
/** Начальный email — как в plugin.html (тот же templateId + поля). */
|
|
121
|
+
const createInitialEmail = () => ({
|
|
122
|
+
id: DEMO_LETTER_ID,
|
|
123
|
+
author: 123,
|
|
124
|
+
isNew: false,
|
|
125
|
+
subject: 'topic',
|
|
126
|
+
preheader: '',
|
|
127
|
+
description: '',
|
|
128
|
+
project: 'undefined',
|
|
129
|
+
parent_email: '309707',
|
|
130
|
+
common_styles: COMMON_STYLES,
|
|
131
|
+
title: '',
|
|
132
|
+
date: '2024-01-12T08:42:09',
|
|
133
|
+
modified: '2024-02-16T17:21:01',
|
|
134
|
+
group: [],
|
|
135
|
+
lock: false,
|
|
136
|
+
utm_parameters: {
|
|
137
|
+
utm_content: 'ssssssss',
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
const buildDesignContent = () => {
|
|
142
|
+
const email = parseLetterJson();
|
|
143
|
+
// subject — entity field, preheader — из json.
|
|
144
|
+
if (letterStore.subject) {
|
|
145
|
+
email.subject = letterStore.subject;
|
|
146
|
+
}
|
|
147
|
+
delete email.code;
|
|
148
|
+
|
|
149
|
+
if (letterStore.html) {
|
|
150
|
+
return {
|
|
151
|
+
email: {
|
|
152
|
+
...email,
|
|
153
|
+
id: DEMO_LETTER_ID,
|
|
154
|
+
code: letterStore.html,
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
return {
|
|
160
|
+
templateId: INITIAL_TEMPLATE_ID,
|
|
161
|
+
email: {
|
|
162
|
+
...email,
|
|
163
|
+
id: DEMO_LETTER_ID,
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
const buildBaseConfig = () => ({
|
|
169
|
+
locale: 'en_US',
|
|
170
|
+
mode: 'pro',
|
|
171
|
+
theme: 'light',
|
|
172
|
+
previewIconEnabled: true,
|
|
173
|
+
livePreviewEnabled: true,
|
|
174
|
+
nextButtonEnabled: true,
|
|
175
|
+
mergeTags: {
|
|
176
|
+
syntax: ['{{%value%}}'],
|
|
177
|
+
items: [
|
|
178
|
+
{ label: 'System', value: 'System', children: systemfields },
|
|
179
|
+
{ label: 'User', value: 'User', children: systemfields },
|
|
180
|
+
],
|
|
181
|
+
},
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
const systemfields = [
|
|
185
|
+
{ label: 'Имя получателя', value: 'ToName' },
|
|
186
|
+
{ label: 'Доп. поле «Имя»', value: 'Name' },
|
|
187
|
+
];
|
|
188
|
+
|
|
189
|
+
const getAuthToken = async () => {
|
|
190
|
+
const formdata = new FormData();
|
|
191
|
+
formdata.append('grant_type', 'client_credentials');
|
|
192
|
+
formdata.append('client_id', '****');
|
|
193
|
+
formdata.append('client_secret', '****');
|
|
194
|
+
return fetch('/api?oauth=token', { method: 'POST', body: formdata })
|
|
195
|
+
.then((r) => r.json())
|
|
196
|
+
.then((r) => r.access_token)
|
|
197
|
+
.catch(() => '');
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
/** In-memory store: subject + html + json (preheader в json). */
|
|
201
|
+
const letterStore = {
|
|
202
|
+
id: DEMO_LETTER_ID,
|
|
203
|
+
subject: 'topic',
|
|
204
|
+
html: '',
|
|
205
|
+
json: JSON.stringify(createInitialEmail()),
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
let editorInstance = null;
|
|
209
|
+
let currentStep = 'design';
|
|
210
|
+
let isEmailInitialized = false;
|
|
211
|
+
let isNotSaved = false;
|
|
212
|
+
let preheaderDebounceTimer = null;
|
|
213
|
+
let subjectDebounceTimer = null;
|
|
214
|
+
|
|
215
|
+
const flowLog = document.getElementById('flow_log');
|
|
216
|
+
const headlessStatus = document.getElementById('headless_status');
|
|
217
|
+
|
|
218
|
+
const appendLog = (msg) => {
|
|
219
|
+
const line = `[${new Date().toLocaleTimeString()}] ${msg}`;
|
|
220
|
+
console.log(line);
|
|
221
|
+
flowLog.textContent = `${flowLog.textContent}${flowLog.textContent ? '\n' : ''}${line}`;
|
|
222
|
+
flowLog.scrollTop = flowLog.scrollHeight;
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
const parseLetterJson = () => {
|
|
226
|
+
try {
|
|
227
|
+
return JSON.parse(letterStore.json || '{}');
|
|
228
|
+
} catch {
|
|
229
|
+
return {};
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
const getHeadlessFieldValues = () => ({
|
|
234
|
+
subject: document.getElementById('field_subject').value,
|
|
235
|
+
preheader: document.getElementById('field_preheader').value,
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
/** Заполнить поля шага 2: subject из entity, preheader из json. */
|
|
239
|
+
const syncHeadlessFieldsFromStore = () => {
|
|
240
|
+
const email = parseLetterJson();
|
|
241
|
+
document.getElementById('field_subject').value = letterStore.subject ?? email.subject ?? '';
|
|
242
|
+
document.getElementById('field_preheader').value = email.preheader ?? '';
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
const clearFieldDebounce = () => {
|
|
246
|
+
if (preheaderDebounceTimer) {
|
|
247
|
+
clearTimeout(preheaderDebounceTimer);
|
|
248
|
+
preheaderDebounceTimer = null;
|
|
249
|
+
}
|
|
250
|
+
if (subjectDebounceTimer) {
|
|
251
|
+
clearTimeout(subjectDebounceTimer);
|
|
252
|
+
subjectDebounceTimer = null;
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Merge getEmail() в json + compile html.
|
|
258
|
+
* letterPatch — доп. поля entity (subject и т.д.).
|
|
259
|
+
*/
|
|
260
|
+
const updateJsonAndEmail = async (data, letterPatch = {}) => {
|
|
261
|
+
const email = parseLetterJson();
|
|
262
|
+
const safeSubject = (data.subject || letterStore.subject || '').trim() || letterStore.subject;
|
|
263
|
+
const safeData = { ...data, subject: safeSubject, id: DEMO_LETTER_ID };
|
|
264
|
+
letterStore.subject = safeSubject;
|
|
265
|
+
letterStore.json = JSON.stringify({ ...email, ...safeData, ...letterPatch });
|
|
266
|
+
if (editorInstance) {
|
|
267
|
+
const compiled = await editorInstance.compileEmail();
|
|
268
|
+
if (compiled?.compiled?.html) {
|
|
269
|
+
letterStore.html = compiled.compiled.html;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
isNotSaved = false;
|
|
273
|
+
};
|
|
274
|
+
|
|
275
|
+
/** Шаг 1: save после правок в design-редакторе. */
|
|
276
|
+
const updateHtmlAndEmail = async (data, instance = editorInstance) => {
|
|
277
|
+
if (!instance) {
|
|
278
|
+
throw new Error('editor instance missing');
|
|
279
|
+
}
|
|
280
|
+
await updateJsonAndEmail(data);
|
|
281
|
+
appendLog(
|
|
282
|
+
`updateHtmlAndEmail: html=${letterStore.html?.length ?? 0}b subject="${letterStore.subject}" preheader="${parseLetterJson().preheader ?? ''}"`,
|
|
283
|
+
);
|
|
284
|
+
};
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Шаг 2: show() → getEmail() → updateJsonAndEmail.
|
|
288
|
+
* Всегда передаём subject и preheader вместе.
|
|
289
|
+
*/
|
|
290
|
+
const updateLetterAndJson = async ({ preheader, newData = {} } = {}) => {
|
|
291
|
+
if (!editorInstance) {
|
|
292
|
+
appendLog('updateLetterAndJson: skip — no editor instance');
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
const email = parseLetterJson();
|
|
296
|
+
const nextPreheader = preheader !== undefined ? preheader : email.preheader;
|
|
297
|
+
const nextSubject = newData.subject ?? letterStore.subject ?? email.subject;
|
|
298
|
+
|
|
299
|
+
appendLog(
|
|
300
|
+
`updateLetterAndJson: show() subject="${nextSubject}" preheader="${nextPreheader ?? ''}"`,
|
|
301
|
+
);
|
|
302
|
+
await editorInstance.show({
|
|
303
|
+
...email,
|
|
304
|
+
id: DEMO_LETTER_ID,
|
|
305
|
+
subject: nextSubject,
|
|
306
|
+
preheader: nextPreheader,
|
|
307
|
+
code: letterStore.html,
|
|
308
|
+
});
|
|
309
|
+
|
|
310
|
+
const data = await editorInstance.getEmail();
|
|
311
|
+
await updateJsonAndEmail({ ...data, id: DEMO_LETTER_ID }, newData);
|
|
312
|
+
appendLog(
|
|
313
|
+
`updateLetterAndJson: persisted subject="${letterStore.subject}" preheader="${parseLetterJson().preheader ?? ''}" html=${letterStore.html?.length ?? 0}b`,
|
|
314
|
+
);
|
|
315
|
+
};
|
|
316
|
+
|
|
317
|
+
const destroyEditor = async () => {
|
|
318
|
+
if (editorInstance) {
|
|
319
|
+
appendLog('destroyEditor: instance.destroy()');
|
|
320
|
+
await editorInstance.destroy();
|
|
321
|
+
editorInstance = null;
|
|
322
|
+
}
|
|
323
|
+
isEmailInitialized = false;
|
|
324
|
+
};
|
|
325
|
+
|
|
326
|
+
/** Новый DOM-узел — иначе shadow root / ELEMENT_MAP ломают повторный init на том же #blocks-editor. */
|
|
327
|
+
const replaceDesignEditorMount = () => {
|
|
328
|
+
const page = document.getElementById('page_design');
|
|
329
|
+
const old = document.getElementById('blocks-editor');
|
|
330
|
+
if (!page || !old) {
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
const fresh = document.createElement('div');
|
|
334
|
+
fresh.id = 'blocks-editor';
|
|
335
|
+
page.replaceChild(fresh, old);
|
|
336
|
+
};
|
|
337
|
+
|
|
338
|
+
const persistDesignBeforeLeave = async () => {
|
|
339
|
+
if (!editorInstance) {
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
try {
|
|
343
|
+
const data = await editorInstance.getEmail();
|
|
344
|
+
await updateHtmlAndEmail(data);
|
|
345
|
+
appendLog(
|
|
346
|
+
`persistDesignBeforeLeave: subject="${letterStore.subject}" preheader="${parseLetterJson().preheader ?? ''}"`,
|
|
347
|
+
);
|
|
348
|
+
} catch (error) {
|
|
349
|
+
const message = error && error.message ? error.message : String(error);
|
|
350
|
+
appendLog(`persistDesignBeforeLeave failed: ${message}`);
|
|
351
|
+
}
|
|
352
|
+
};
|
|
353
|
+
|
|
354
|
+
/** Перед уходом с шага 2: flush debounce + updateLetterAndJson с полями формы. */
|
|
355
|
+
const persistHeadlessBeforeLeave = async () => {
|
|
356
|
+
clearFieldDebounce();
|
|
357
|
+
if (!editorInstance) {
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
try {
|
|
361
|
+
const { subject, preheader } = getHeadlessFieldValues();
|
|
362
|
+
await updateLetterAndJson({ preheader, newData: { subject } });
|
|
363
|
+
appendLog(
|
|
364
|
+
`persistHeadlessBeforeLeave: subject="${letterStore.subject}" preheader="${parseLetterJson().preheader ?? ''}"`,
|
|
365
|
+
);
|
|
366
|
+
} catch (error) {
|
|
367
|
+
const message = error && error.message ? error.message : String(error);
|
|
368
|
+
appendLog(`persistHeadlessBeforeLeave failed: ${message}`);
|
|
369
|
+
}
|
|
370
|
+
};
|
|
371
|
+
|
|
372
|
+
const initDesignEditor = async () => {
|
|
373
|
+
await destroyEditor();
|
|
374
|
+
replaceDesignEditorMount();
|
|
375
|
+
appendLog('initDesignEditor: editor.init({ element: #blocks-editor })');
|
|
376
|
+
|
|
377
|
+
editorInstance = await emailmaker.init({
|
|
378
|
+
getAuthToken,
|
|
379
|
+
element: '#blocks-editor',
|
|
380
|
+
project: undefined,
|
|
381
|
+
previewIconEnabled: true,
|
|
382
|
+
livePreviewEnabled: true,
|
|
383
|
+
nextButtonEnabled: true,
|
|
384
|
+
content: buildDesignContent(),
|
|
385
|
+
config: buildBaseConfig(),
|
|
386
|
+
handleReadEmailRevisions: () => [],
|
|
387
|
+
handleEmailInit: async (data) => {
|
|
388
|
+
appendLog(`ON_EMAIL_INIT (design) preheader=${data?.preheader ?? ''} html=${data?.html?.length ?? 0}b`);
|
|
389
|
+
isEmailInitialized = true;
|
|
390
|
+
},
|
|
391
|
+
handleEmailChanged: () => {
|
|
392
|
+
isNotSaved = true;
|
|
393
|
+
},
|
|
394
|
+
handleSaveButtonClick: async () => {
|
|
395
|
+
appendLog('handleSaveButtonClick: analytics hook');
|
|
396
|
+
},
|
|
397
|
+
handleNextButtonClick: async (data) => {
|
|
398
|
+
appendLog('handleNextButtonClick: save design → go to step 2');
|
|
399
|
+
await updateHtmlAndEmail(data);
|
|
400
|
+
await goToStep('subject');
|
|
401
|
+
},
|
|
402
|
+
handleEmailAutosave: async ({ value }) => {
|
|
403
|
+
if (!isEmailInitialized) {
|
|
404
|
+
return value;
|
|
405
|
+
}
|
|
406
|
+
const compiled = await editorInstance?.compileEmail();
|
|
407
|
+
if (!compiled?.compiled?.html) {
|
|
408
|
+
return value;
|
|
409
|
+
}
|
|
410
|
+
appendLog('handleEmailAutosave (design)');
|
|
411
|
+
await updateHtmlAndEmail(value);
|
|
412
|
+
return value;
|
|
413
|
+
},
|
|
414
|
+
handleSaveEmail: async ({ value }) => {
|
|
415
|
+
appendLog('handleSaveEmail (design)');
|
|
416
|
+
await updateHtmlAndEmail(value);
|
|
417
|
+
return value;
|
|
418
|
+
},
|
|
419
|
+
});
|
|
420
|
+
|
|
421
|
+
try {
|
|
422
|
+
const compiled = await editorInstance.compileEmail();
|
|
423
|
+
appendLog(
|
|
424
|
+
`initDesignEditor done: compile html=${compiled?.compiled?.html?.length ?? 0}b`,
|
|
425
|
+
);
|
|
426
|
+
} catch (error) {
|
|
427
|
+
const message = error && error.message ? error.message : String(error);
|
|
428
|
+
appendLog(`initDesignEditor compile check failed: ${message}`);
|
|
429
|
+
}
|
|
430
|
+
};
|
|
431
|
+
|
|
432
|
+
const initHeadlessEditor = async () => {
|
|
433
|
+
await destroyEditor();
|
|
434
|
+
appendLog('initHeadlessEditor: editor.init({ NO element }) — headless');
|
|
435
|
+
|
|
436
|
+
// Headless init: subject из store, preheader из json, code из html.
|
|
437
|
+
const email = parseLetterJson();
|
|
438
|
+
const subject = letterStore.subject;
|
|
439
|
+
const preheader = email.preheader ?? '';
|
|
440
|
+
const code = letterStore.html;
|
|
441
|
+
|
|
442
|
+
editorInstance = await emailmaker.init({
|
|
443
|
+
getAuthToken,
|
|
444
|
+
config: { locale: 'en_US' },
|
|
445
|
+
content: {
|
|
446
|
+
email: {
|
|
447
|
+
...email,
|
|
448
|
+
id: DEMO_LETTER_ID,
|
|
449
|
+
subject,
|
|
450
|
+
code,
|
|
451
|
+
preheader,
|
|
452
|
+
},
|
|
453
|
+
},
|
|
454
|
+
handleReadEmailRevisions: () => [],
|
|
455
|
+
handleEmailInit: async () => {
|
|
456
|
+
appendLog('handleEmailInit (headless): emailInitialized');
|
|
457
|
+
isEmailInitialized = true;
|
|
458
|
+
headlessStatus.textContent = 'Headless: initialized';
|
|
459
|
+
},
|
|
460
|
+
});
|
|
461
|
+
|
|
462
|
+
syncHeadlessFieldsFromStore();
|
|
463
|
+
appendLog(
|
|
464
|
+
`initHeadlessEditor: fields subject="${letterStore.subject}" preheader="${parseLetterJson().preheader ?? ''}"`,
|
|
465
|
+
);
|
|
466
|
+
headlessStatus.textContent = isEmailInitialized ? 'Headless: initialized' : 'Headless: waiting init…';
|
|
467
|
+
};
|
|
468
|
+
|
|
469
|
+
const goToStep = async (step) => {
|
|
470
|
+
if (step === currentStep) {
|
|
471
|
+
return;
|
|
472
|
+
}
|
|
473
|
+
// Persist текущего шага перед destroy (оба направления).
|
|
474
|
+
if (currentStep === 'design') {
|
|
475
|
+
await persistDesignBeforeLeave();
|
|
476
|
+
} else if (currentStep === 'subject') {
|
|
477
|
+
await persistHeadlessBeforeLeave();
|
|
478
|
+
}
|
|
479
|
+
currentStep = step;
|
|
480
|
+
document.getElementById('page_design').classList.toggle('active', step === 'design');
|
|
481
|
+
document.getElementById('page_subject').classList.toggle('active', step === 'subject');
|
|
482
|
+
document.getElementById('step_design').classList.toggle('active', step === 'design');
|
|
483
|
+
document.getElementById('step_subject').classList.toggle('active', step === 'subject');
|
|
484
|
+
|
|
485
|
+
if (step === 'design') {
|
|
486
|
+
await initDesignEditor();
|
|
487
|
+
} else {
|
|
488
|
+
await initHeadlessEditor();
|
|
489
|
+
}
|
|
490
|
+
};
|
|
491
|
+
|
|
492
|
+
/** Preheader input → debounce → { preheader, newData: { subject } }. */
|
|
493
|
+
const schedulePreheaderSync = () => {
|
|
494
|
+
if (preheaderDebounceTimer) {
|
|
495
|
+
clearTimeout(preheaderDebounceTimer);
|
|
496
|
+
}
|
|
497
|
+
preheaderDebounceTimer = setTimeout(() => {
|
|
498
|
+
const { subject, preheader } = getHeadlessFieldValues();
|
|
499
|
+
appendLog(`debounce ${FIELD_DEBOUNCE_MS}ms → updateLetterAndJson (preheader+subject)`);
|
|
500
|
+
void updateLetterAndJson({ preheader, newData: { subject } });
|
|
501
|
+
}, FIELD_DEBOUNCE_MS);
|
|
502
|
+
};
|
|
503
|
+
|
|
504
|
+
/** Subject input → debounce → updateLetterAndJson с актуальным preheader. */
|
|
505
|
+
const scheduleSubjectSync = () => {
|
|
506
|
+
if (subjectDebounceTimer) {
|
|
507
|
+
clearTimeout(subjectDebounceTimer);
|
|
508
|
+
}
|
|
509
|
+
subjectDebounceTimer = setTimeout(() => {
|
|
510
|
+
const { subject, preheader } = getHeadlessFieldValues();
|
|
511
|
+
appendLog(`debounce ${FIELD_DEBOUNCE_MS}ms → updateLetterAndJson (subject+preheader)`);
|
|
512
|
+
void updateLetterAndJson({ preheader, newData: { subject } });
|
|
513
|
+
}, FIELD_DEBOUNCE_MS);
|
|
514
|
+
};
|
|
515
|
+
|
|
516
|
+
const onSubjectFieldBlur = () => {
|
|
517
|
+
clearFieldDebounce();
|
|
518
|
+
const { subject, preheader } = getHeadlessFieldValues();
|
|
519
|
+
appendLog('subject blur → updateLetterAndJson (subject+preheader)');
|
|
520
|
+
void updateLetterAndJson({ preheader, newData: { subject } });
|
|
521
|
+
};
|
|
522
|
+
|
|
523
|
+
document.getElementById('step_design').addEventListener('click', () => {
|
|
524
|
+
void goToStep('design');
|
|
525
|
+
});
|
|
526
|
+
document.getElementById('step_subject').addEventListener('click', () => {
|
|
527
|
+
void goToStep('subject');
|
|
528
|
+
});
|
|
529
|
+
document.getElementById('btn_clear_log').addEventListener('click', () => {
|
|
530
|
+
flowLog.textContent = '';
|
|
531
|
+
});
|
|
532
|
+
document.getElementById('field_preheader').addEventListener('input', schedulePreheaderSync);
|
|
533
|
+
document.getElementById('field_subject').addEventListener('input', scheduleSubjectSync);
|
|
534
|
+
document.getElementById('field_subject').addEventListener('blur', onSubjectFieldBlur);
|
|
535
|
+
document.getElementById('btn_subject_next').addEventListener('click', async () => {
|
|
536
|
+
clearFieldDebounce();
|
|
537
|
+
const { subject, preheader } = getHeadlessFieldValues();
|
|
538
|
+
appendLog('step 2 Next: updateLetterAndJson + finish');
|
|
539
|
+
await updateLetterAndJson({ preheader, newData: { subject } });
|
|
540
|
+
appendLog(
|
|
541
|
+
`DONE letter: subject="${letterStore.subject}", preheader="${parseLetterJson().preheader ?? ''}", html=${letterStore.html?.length}b`,
|
|
542
|
+
);
|
|
543
|
+
});
|
|
544
|
+
|
|
545
|
+
(async () => {
|
|
546
|
+
try {
|
|
547
|
+
appendLog('=== two-step flow demo START (step 1: design) ===');
|
|
548
|
+
appendLog(`letter id=${DEMO_LETTER_ID}, templateId=${INITIAL_TEMPLATE_ID} (no inline code)`);
|
|
549
|
+
await initDesignEditor();
|
|
550
|
+
} catch (error) {
|
|
551
|
+
const message = error && error.message ? error.message : String(error);
|
|
552
|
+
appendLog(`FATAL: ${message}`);
|
|
553
|
+
console.error(error);
|
|
554
|
+
}
|
|
555
|
+
})();
|
|
556
|
+
</script>
|
|
557
|
+
</body>
|
|
558
|
+
</html>
|