From ec97256e1794fa28288896d4d4bec787f1b45232 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 16 Jul 2026 11:19:44 +0000 Subject: [PATCH] fix: unique container ID per editor session + 1.5s settle delay on close --- .../433a0593-d3cf-414e-8763-ab5f87cbc75c.docx | Bin 40658 -> 40659 bytes renderer/carbone-templates/registry.json | 2 +- static/carbone.js | 14 +++++++++----- static/index.html | 4 ++-- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/renderer/carbone-templates/433a0593-d3cf-414e-8763-ab5f87cbc75c.docx b/renderer/carbone-templates/433a0593-d3cf-414e-8763-ab5f87cbc75c.docx index d69f6ae6508beb8a58bff55ef9f618fb97a045d9..93cd78a24e05d394aa28fd8fc5932cd4ced060e3 100644 GIT binary patch delta 2335 zcmZuz2UHW=79B#BAicyuAfaQB*y#aLcuG;)r-OzjO+r-=C7=}PWr6`rf>NYOq{b&j zM3Al&K_Mu@g9j)U1eZ?;%Fm#0t*`6fH8XpinX~sj=ialSVgkaRhww-lRl4qxe%Zl4Wtodyg4*)cQwXsN& zGjZ;)=yz-aot5mwob`4m(0IcR?i`lpdTDB{Db2fQR9suUGM6lMZh31O6L~CC{HVEH zPX&j+~i@g?W43 zqLW6x@?x<_JBAn#^0!ZlQMgHs#84zDPhk{MePr;G2HELtJkHZmlQLKytg0N^(>XHy zMO@=jmE^ngnd^es@`SW0KgC;e*DNqzcL?g-+TE*KR+)fdN8ui)t_b0YPEgQnkZK=x zH$kV0cfY0w#(L6Tu72PF?|`X4S4#=jpJ%@S!{oX_#V6Z?=p?D$fE(h~I$>`~N=x;! zIXc|oJvMbC3m7-aE@T~iM%5%y)~j2A2kx;b>u6ir$Bm3Zu@1FY*RH@dnYRjdq{!Ek z`H1v_i?sb~qH0ZRz9j_yWNko%ouztLVy14ORp>4uXC%}pE)+h~RsPSny|-18;8ZI) zvyEBmm`?h^5D!&LZeua4M;;{gxqb#?_AxTqDbcDcHd9}ZF}pf3q5h?9IS!s8BZls% zRMOG$j<+G`KD+tXUh6X0{_hLSwyQXQl zwltj&UFK!tT}&TZrj(}kOGTdC!d&%1nzqm7GoA#vuNdrXkMRNQnq9ltYpbXP)|N-` z-=vnvNAI=f(vJ70u6N;^w8lS2O-yE>Bb*z}wiK7tFiXx~_F-x*4QJiA6kaKHe^hU+ zy0}|%a@S78>8*fr#{Fax^7E*&>;O*Jxzp`oM7|ahaJ1ZlNmSg<8_Y;l2{e;Q^=Hkr zmGOF=h;Hp&Y3m3LYG5B=vIBcg;c6E2viu@h&qR94_*-dAZClMJ1F17QCTj^!Qu^;Cs-h+%0AbNayJ^9FC|DuE;IwRcHZj~QED(GSA5eY&s& zDJRZ;Jy&H&$Na_8roT?~+EP$T=C|w-sY9lvYC1t-}r(rKtc zM%rb&7Ka+5c(pAlpI_p*WuapeRzFySK&dG@`{8opRE&pCImxy`1)K2E@yfK44_o#x zq?e38Ys2wIFWJ0Ovp(vEdHUA-eOMj@ny7E0WOpv%hMiat`*6AJH zv`4Nsr)9ocU=GR@UiZ{aF5sUmJ`$J?7@i8i&42cIJrn1^Kn!N!F@E6&G-K%j1A>Rh zA$4@=^?d&W6cX2E1G-Qk<8^IargY!n`d((x=q33CpUz5@R>E^dMx~hh;cJ-070RIz z^-%<0CA0IEojY@o{{$Vz>K&G{5)$*ttF*vxTu3c(HH+|*anVQkPF3DnayZ@pDtYTq z`gi_+TcrS}Rj#LU8~mjMFmmazF`SRv2W}?f!t*)_C)?ehQ$IeT|JAk`_w?<# z;fC7fW>d%X(Laq!hD4N&NLh|nO}nVM#!+S7DM;BFDZ_+)f(keyI#iDiA}mB;HH)A? zwmfMSDHIidGnazbT|~k8eU)JNuEp5#o52@j+4*kzluc_rVN?%wN0Piq(Z#R0O;7tl z|E30#i{8^LW**qb?zan#x%WWLV8|(_-rz}EqzCz3@nC&>XRO*c{xdDEGwofM3VbOV zu8dvSNuPqtMv5P}o(*NJur^{>KWXZ(j|*=q{O=AmG-M}kufJaI6tvPZpuo0?A+JKF zR9-v}v=8|OMi5LE7(*aiXb6Ezp*{qZLOcX73h}=kcZxUmlm1@~K*uN-^Z<&l0>A}g zm^UumCnCZ>_-wdV)VUyQ3oaM{K&S1G5{kU7Ip)ssPvVr3_%`idx>xc~x-T&}!k*w6 zCAcA%*k2whs#f&ifjPzCVE+i5ktapgpiQmbA#Btqz^N9I4n_)g2XRu95_N# z+>S!t#OD4O=bIhJ2l0!K5GYPpgTmIQ%fY0{;65@MT8nK~XTqZYNzPx(gcJa9uI=$7 Pc0sU|uFjWM0KNJzC^W>j delta 2215 zcmZ9O2UHW;8pnqal-`3`2uMJwK@29q8b#5SeSlJ=30T$$C>VMR5C~ODFakp_K|w?U zqA@H*iZro+R6)uDK@QUd*#)wM>{LbE$2I*n2p(L66^-%a8f5pmHOn!>6z-S#V}wja9%%Y z40qE_6Th^yMV{dMHeI@jGZxW8$WY#ig@#L5D+#xfamz+Omsk6SPnun^@KG@=Ae%EA zEKB#&A`=c;YQ7Z&YK4<9`DE6RBWF{Kn(Urrr|Wu0)~qW~SGG)d#$WF2Q^~aNZGYeP zcFvJS+X>qfo>QVS99l~}ajDkg?R6=dL%kWPg~X7otG`DwF28oeTn-f)=7Pc|ryI_% z+>SM53g}^?WbRY!P=0xVik+w2`Ra>w-C=rymBh@W_m|J&lsgbFh@dnLx9qWpN@B~W z)&l;eiO$!?h4#?Tse19((ygZMWiRh;DSG>?BSSXiYh=g8_@LK|T9_>u?SZ@7*`gRs zNlTuQ%|jbE`RNMr31aW03P-HDZ6l`d6P%3F(`~zc&c)|1u|I}khC*}U2FbpOQ~XzD z;#0j0)$!u0V)Z8Zy-egt>*4|f!<;)SMU$1rbAf?}E32cvRXTwvP zKMA7ZF$euJ59z+okJ3VD;p=fm*9xC0-{7C$oaNVbLrr&L=we!QF7za>5L@LBqU zL8tQX>+t$xPN$kr=iE(tC9rPs6WtiX*!Ofgy|Rn6KxW*SY}AX?7Q}PFWu0;mOgO6ibZb9ja6n8@YxV%a+W($ME^_^Y?GD%LL(% z&yPPVGAx#wF2A(UiCZvYNrl=g;CLZx{1PGJuseRRGuD1WiE4O2m9tRQm`e1rkc^&&pIMddUg>OG z;)f^rtptc9H|8zbzaRvJ6k5OJbenu5HC_#Bp1QWFp1ho%g0w?u4A9K%8rGuekLW-+p_xv@L81g4`XkGZ#I3w>Nj37Es74pX_|kpxb{3e zVDUr0yN|M+Uu~cpVUxd}>oyM8$%{y~|0PQN3=?eJpL)z4kn z`iakZqkn$gP-BhGOAKIB+wX?h)j#HDN(YV3hs<<4)Hc42^Vg!{^A4#~YIJ6gng!LW zRbs2P2lSgpf4gUEQBwZSQwzIXGdcbKfWt^%FoINQ-!EZNZN8!XN;AJp)3|kL;>CJP zhjU3y(Vd|0{%G8u+)ScD{V8Cu$oTpi5S}w={bH`MsYU9+32d%>II(wzd?Z@S9^Q(Q zz-uVq&CGT`WDk(S4N>dYD<>bZ=yD_Nn+K~%{S>8GcP?w8J9bFrL77m2K>{{zEeqeL z(LZZaS3Tb3aG|jP6VXe*!_xGhr);4cxnve z@7@3Hl!ClY$*zof$`AEK?|9mFPuxnl2oaQ`DT3ztQeaY2+`lCoLIY$Lrt~i~cBsM{=JOM;K14C@OV8|T+rFO3 zX*(OwU8Va{n6_!f9lMxmO0CGaTUiDvhKfC=$tAm^h8#el6eX%X9=QZF-me?(*G-TU z?=pc?5_-5y)6f$sIXLQvkrl`-+vHw~xQ>WgnjdWKWWnIUmmlofe>fVClR7^$VwhrzCk9 zWOhU!0Q(D6wyRV+VO{rzH)g~0Aa{5~KpBQQROJx{iVp!gGISu3z!O4X2}5I7QVwMQ E2hG&q0{{R3 diff --git a/renderer/carbone-templates/registry.json b/renderer/carbone-templates/registry.json index ce6829e..2c0a881 100644 --- a/renderer/carbone-templates/registry.json +++ b/renderer/carbone-templates/registry.json @@ -6,6 +6,6 @@ "originalName": "master_cv_template.docx", "path": "/root/workspace/cv-app/renderer/carbone-templates/433a0593-d3cf-414e-8763-ab5f87cbc75c.docx", "uploadedAt": "2026-07-16T09:03:29.601Z", - "updatedAt": "2026-07-16T11:15:01.909Z" + "updatedAt": "2026-07-16T11:17:19.354Z" } ] \ No newline at end of file diff --git a/static/carbone.js b/static/carbone.js index 87d83e2..dc5f3e0 100644 --- a/static/carbone.js +++ b/static/carbone.js @@ -275,7 +275,9 @@ async function openOnlyofficeEditor(templateId, templateName) { const config = data.config; const onlyofficeUrl = data.onlyofficeUrl; - // Build the editor modal + // Build the editor modal with a unique container ID each time + // so ONLYOFFICE never reuses a cached DOM element + const containerId = 'oo-editor-' + Date.now(); const body = `

Editing: ${templateName}

@@ -284,7 +286,7 @@ async function openOnlyofficeEditor(templateId, templateName) {
-
+

Changes are saved automatically. Click "Save" to force-save, or "Close Editor" to return to the template list.

`; showModal(body, '', 'xlarge'); @@ -307,7 +309,7 @@ async function openOnlyofficeEditor(templateId, templateName) { throw new Error('ONLYOFFICE API not loaded. Check that the server is running at ' + onlyofficeUrl); } - onlyofficeEditorInstance = new DocsAPI.DocEditor('onlyoffice-editor-container', { + onlyofficeEditorInstance = new DocsAPI.DocEditor(containerId, { ...config, width: '100%', height: '800px', @@ -354,8 +356,10 @@ function closeOnlyofficeEditor() { onlyofficeEditorInstance = null; } closeModal(); - // Refresh the templates list to show any changes - loadOnlyofficeTemplates(); + // Wait 1.5s for ONLYOFFICE save callbacks to settle, then refresh + setTimeout(() => { + loadOnlyofficeTemplates(); + }, 1500); } // Call status check when templates page becomes active diff --git a/static/index.html b/static/index.html index 6d81234..83c8ff3 100644 --- a/static/index.html +++ b/static/index.html @@ -139,7 +139,7 @@ - - + + \ No newline at end of file