From 9e840858d025b17c4239a869d047e8f05b0acac1 Mon Sep 17 00:00:00 2001 From: Kiyoka Nishiyama Date: Fri, 11 Feb 2022 13:19:02 +0000 Subject: [PATCH 1/4] fix: #2321 Open local image Implementation of opening image file with the external tool. --- src/muya/lib/assets/pngicon/imageOpen/1.png | Bin 0 -> 5597 bytes src/muya/lib/assets/pngicon/imageOpen/2.png | Bin 0 -> 6276 bytes src/muya/lib/assets/pngicon/imageOpen/3.png | Bin 0 -> 8982 bytes src/muya/lib/contentState/imageCtrl.js | 12 +++++++++ src/muya/lib/eventHandler/clickEvent.js | 3 ++- src/muya/lib/ui/imageToolbar/config.js | 6 +++++ src/muya/lib/ui/imageToolbar/index.css | 14 ++++++++-- src/muya/lib/ui/imageToolbar/index.js | 27 +++++++++++++++++++- 8 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 src/muya/lib/assets/pngicon/imageOpen/1.png create mode 100644 src/muya/lib/assets/pngicon/imageOpen/2.png create mode 100644 src/muya/lib/assets/pngicon/imageOpen/3.png diff --git a/src/muya/lib/assets/pngicon/imageOpen/1.png b/src/muya/lib/assets/pngicon/imageOpen/1.png new file mode 100644 index 0000000000000000000000000000000000000000..58c51eb314f931007dcfd35c3b8248926e16ed47 GIT binary patch literal 5597 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 LSG$~A6_N5ESYCYP literal 0 HcmV?d00001 diff --git a/src/muya/lib/assets/pngicon/imageOpen/3.png b/src/muya/lib/assets/pngicon/imageOpen/3.png new file mode 100644 index 0000000000000000000000000000000000000000..610c2e5f6be40a18b78301a5577928ae4552e660 GIT binary patch literal 8982 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 { /** @@ -204,6 +205,17 @@ const imageCtrl = ContentState => { return this.singleRender(outMostBlock, true) } + + ContentState.prototype.openImage = function ({ key }, realFilePath) { + const block = this.getBlock(key) + const { eventCenter } = this.muya + shell.openPath(realFilePath) + + this.singleRender(block) + eventCenter.dispatch('muya-transformer', { reference: null }) + eventCenter.dispatch('muya-image-toolbar', { reference: null }) + return this.muya.dispatchChange() + } } export default imageCtrl diff --git a/src/muya/lib/eventHandler/clickEvent.js b/src/muya/lib/eventHandler/clickEvent.js index 157f2a49..a095bfee 100644 --- a/src/muya/lib/eventHandler/clickEvent.js +++ b/src/muya/lib/eventHandler/clickEvent.js @@ -163,7 +163,8 @@ class ClickEvent { } eventCenter.dispatch('muya-image-toolbar', { reference, - imageInfo + imageInfo, + realFilePath: event.target.getAttribute('src') }) contentState.selectImage(imageInfo) // Handle show image transformer diff --git a/src/muya/lib/ui/imageToolbar/config.js b/src/muya/lib/ui/imageToolbar/config.js index 3c06fbdb..b61afa30 100644 --- a/src/muya/lib/ui/imageToolbar/config.js +++ b/src/muya/lib/ui/imageToolbar/config.js @@ -1,4 +1,5 @@ import editIcon from '../../assets/pngicon/imageEdit/2.png' +import openIcon from '../../assets/pngicon/imageOpen/2.png' import inlineIcon from '../../assets/pngicon/inline_image/2.png' import leftIcon from '../../assets/pngicon/algin_left/2.png' import middleIcon from '../../assets/pngicon/algin_center/2.png' @@ -11,6 +12,11 @@ const icons = [ tooltip: 'Edit Image', icon: editIcon }, + { + type: 'open', + tooltip: 'Open Image', + icon: openIcon + }, { type: 'inline', tooltip: 'Inline Image', diff --git a/src/muya/lib/ui/imageToolbar/index.css b/src/muya/lib/ui/imageToolbar/index.css index 76a717b5..740c5a2a 100644 --- a/src/muya/lib/ui/imageToolbar/index.css +++ b/src/muya/lib/ui/imageToolbar/index.css @@ -66,15 +66,25 @@ } .ag-image-toolbar li.item.edit { + margin-right: 8px; +} + +.ag-image-toolbar li.item.open.enable { margin-right: 21px; - margin-left: 10px; + margin-left: 0px; +} + +.ag-image-toolbar li.item.open.disable { + margin-right: 21px; + margin-left: 0px; + opacity: 0.4; } .ag-image-toolbar li.item.inline { margin-right: 8px; } -.ag-image-toolbar li.item:first-of-type:before { +.ag-image-toolbar li.item:nth-of-type(2):before { content: ''; width: 1px; position: absolute; diff --git a/src/muya/lib/ui/imageToolbar/index.js b/src/muya/lib/ui/imageToolbar/index.js index 4e1ab9a5..fe86033b 100644 --- a/src/muya/lib/ui/imageToolbar/index.js +++ b/src/muya/lib/ui/imageToolbar/index.js @@ -1,6 +1,7 @@ import BaseFloat from '../baseFloat' import { patch, h } from '../../parser/render/snabbdom' import icons from './config' +import { URL_REG } from '../../config' import './index.css' @@ -26,6 +27,7 @@ class ImageToolbar extends BaseFloat { this.options = opts this.icons = icons this.reference = null + this.realFilePath = null const toolbarContainer = this.toolbarContainer = document.createElement('div') this.container.appendChild(toolbarContainer) this.floatBox.classList.add('ag-image-toolbar-container') @@ -35,8 +37,9 @@ class ImageToolbar extends BaseFloat { listen () { const { eventCenter } = this.muya super.listen() - eventCenter.subscribe('muya-image-toolbar', ({ reference, imageInfo }) => { + eventCenter.subscribe('muya-image-toolbar', ({ reference, imageInfo, realFilePath }) => { this.reference = reference + this.realFilePath = realFilePath if (reference) { this.imageInfo = imageInfo setTimeout(() => { @@ -53,6 +56,10 @@ class ImageToolbar extends BaseFloat { const { icons, oldVnode, toolbarContainer, imageInfo } = this const { attrs } = imageInfo.token const dataAlign = attrs['data-align'] + let imageIsLocal = true + if (URL_REG.test(imageInfo.token.src) || URL_REG.test(attrs.src)) { + imageIsLocal = false + } const children = icons.map(i => { let icon let iconWrapperSelector @@ -69,6 +76,13 @@ class ImageToolbar extends BaseFloat { const iconWrapper = h(iconWrapperSelector, icon) let itemSelector = `li.item.${i.type}` + if (i.type === 'open') { + if (imageIsLocal) { + itemSelector += '.enable' + } else { + itemSelector += '.disable' + } + } if (i.type === dataAlign || !dataAlign && i.type === 'inline') { itemSelector += '.active' } @@ -99,6 +113,11 @@ class ImageToolbar extends BaseFloat { event.stopPropagation() const { imageInfo } = this + const { attrs } = imageInfo.token + let imageIsLocal = true + if (URL_REG.test(imageInfo.token.src) || URL_REG.test(attrs.src)) { + imageIsLocal = false + } switch (item.type) { // Delete image. case 'delete': @@ -135,6 +154,12 @@ class ImageToolbar extends BaseFloat { this.muya.contentState.updateImage(this.imageInfo, 'data-align', item.type) return this.hide() } + case 'open': { + if (imageIsLocal) { + this.muya.contentState.openImage(this.imageInfo, this.realFilePath) + return this.hide() + } + } } } } From 8f1c7fdcb391d22ec6d028dac9ad54ca2eadcfda Mon Sep 17 00:00:00 2001 From: Kiyoka Nishiyama Date: Tue, 15 Feb 2022 12:40:59 +0000 Subject: [PATCH 2/4] fix: #2321 Open local image replaced openImage icons --- src/muya/lib/assets/pngicon/imageOpen/1.png | Bin 5597 -> 5242 bytes src/muya/lib/assets/pngicon/imageOpen/2.png | Bin 6276 -> 5932 bytes src/muya/lib/assets/pngicon/imageOpen/3.png | Bin 8982 -> 8646 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/muya/lib/assets/pngicon/imageOpen/1.png b/src/muya/lib/assets/pngicon/imageOpen/1.png index 58c51eb314f931007dcfd35c3b8248926e16ed47..e0f762bb32ecc7c03c96fde45ed15077594eb669 100644 GIT binary patch delta 2063 zcmV+q2=MpaEBYvqBYy-=dQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1Ywmg6c6 z{AU%j1SBCI%fUR(xjVSap8{;B<4!uAp0yRJOnWZiu4ANFY6>CO3rp%O@0pV9C3ho0=6C(3B)2Y*Mg>_4{qAIa_huX!CjJ=>gp5ANhbIzDWb{g1?WrcQ0jLIoi@ZiWLI%ms7}Wt6~)3z#HvFgM;X10&RT zP;~-)+}CUHDqv6t$|FS*fZdjhP3cw%WD+efRLGSs6zc8(5MgLVFeG3AtRXkZlMT#) z2tY;>rhBGyn= zQKzb2gMUU%n!R}E)q5ZOD2h2qa3*N*A%qxG$Wfw;8hs2g#uRhnBq*Aidgu?}ma-xGX5QbfZz<3xG zU_tZX%tmsK2Xlin>@>&lDxHn^(p_rexp@@@Vs<{!^lyXJRh4#%YM%V*WKD_Q{u1q~ z8j=(jN5Qq=;KyRs!Nplu2UkH5`~Y!ua#D1W691PJTEuv8+>dwn9(V5mp;2L))inWV zx^1T7F)5o{m3m$wAdC)W(glehxvqHp#<}RSz%xZNlbR;ArbawX98oo$ z@`bF&D(5ZETBXKX_v9}O<@J>`*J+L*jwK|JgaidOlu?0=D6Kjv7E-hy^YIV6{v^2+ za+Sfzv4AQx$gUs!4}N!R6@R8Cy`)eK=zejWk5Qm!7iiWU=lj@knkPW;8MxBh{%Ql5 z{Up8K)*?qhcpJF5ZfnXOaJd5vJsGkoyHb#*P$&TJXY@@uVBi+$Tl0Er?c?+T$WT|y zH^9LmFjl1Ob)R?lcJ}t~nO1*4LoRZZYeioP000dbX;fHrSWQeiW3yWYJ_00WHaRvk zH8U_RH!?9|Ei^SUIW1ykW-u*bV>M(oI5IgiW;ZvJy$2s8W-~W6FgayqEjTx3W-T;i zG%_tYG&eadHDNO{Ha9phW->H0k_aaxWHUKAHfCgHEj2YYI4v|ZFf}b=G&eCVGh#4h zGdD6gFf(OglS>F+COI-UIW{skI5;siH6jWiARtFcO;9>kWpZ*4q073pQJBDO+y2Pv8S+D_DqFTA0GZH!z(=Rs$BXnS^CsHY@Q|!=3w| zxpSCdO?4KFC{8xfuj!fM8(XFRuRKdXmj(fT!*-3q6Yg+Ts=Z@3&wtXQ7Yh9VPcg0- zJmM8E*blXxz$^_G8s}MhR2?CTlL0R4GU%=fDZn>4!9AYC)*O0&gwJq{J$y7y5XDIc z*JU`*(rL)y6dP@>P~f%%!yyhZXf(*PbdC$0m*8J&%pjOFs=Mw}u1+wF;^bikGpsY1 tVG>^BsKvpPz_j{IbsU=ISz7oH{Qy6rLWfk0lso_c002ovPDHLkV1kUorL+J5 delta 2066 zcmV+t2<`X!DBUZNBYy*tdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1b@a^xxu z{I65&5s(B3j)TEe?G4`XUxOKMW-`fqB&LjHEVqPOXcF50``hUcE^#@L50+w%(c$vh zXDLvUJFYTkc7D$5!CjQAbvj=NmK0Kt#}t?SWu4s>5*KLU1AkDe>&15cBKw7(Zh)2} z9T5qXwt(^iQaN7m0w~9}T+GQnZeiOG*)BUt$4z5Wo7gAF?Xx#zuLUfs$gZpov+4>! z$1S8~Dq{{Xgb{R|GizRvAR+hibY8HdK0@_(jjmWZHNL-2w`_S?CVG?Pc*?u$#Nj?G zGxZ-l`?NH9fFgI3{c-o+QlERqE{cyxbzGaeY-MV&+u&ljP6WK@40iy8&5?%!f37#9nR2X19>f+TwuYS<`I10=zow-6>B7Y;<2xBleW|)By?klNbCipUL zufeN=!7#Esjz~sgw*z7e{I3(}BwAq@Adln1))oL#1lIw=1 z3n}DKqJKsoLyXblXo|(uJXx@4X34UZq{*j{VzQJ{P9;lLG|iA>ww!X#rNCzaa>3UH z2BmDW>E^dUTik3*Ti!}V`BYy+jn!(Zxt1nP8~R6!&01=?m7RB#((d=L$KCd{=e=~4 zT3716haS82)N?Nb*ggk?B8x)|RWpL&a zdoP2z!I{f~QxOC~hQV3m!5A3yJ4@(%;f~~BbTIcL-pKqFZ}Kj4G^l%#xzD`aW37#! zp*k5mPT@$ZQ=C4$-&2uP#*f`6NngGAR(6x2$c9tnriKo=lv8TeIPGg~FLU~MSke*8&{Z2^qW*NQQkKS%;qmz@Oi+isr#{%7Dy>-slZz|1G<&8`+Z z0tUB%i|ei??*W%P!0?kU8ImLUX$s{s@P0<$R0M`@fzYbkTW24q4?v!}TDk!a4uP=> zWv_X>yT7-$f6sLK`vG?~a;aoHi536=4%TT@SaeuTOgdw4vls?F0wg&xH#s#oG+`|; zVP#}3G-YFBEn;C~V=XvkGC4IgH8nLeGc=QV2p=RlH)CZsG&E%`WHB^1Ei_~>G%Yzd zWHT)`WMMWrH8L<{I5RMlya*>GIb}IxH85pnEj2SRVl6Z^VlypbW->M{H#1{qWMMEe zWn(fklLrZ3CNMQOFfuYWIW{;mHX;fjARtFcO;9>kWpZP$Ix{djGPA)7X$S=MUBi!)E)z0;1qvP(Y}NiX00047Nkl=4s2kuY`_DzxO3lg&fIfu$B4-CVhS%Xi*8+&yKu?qc!T8-dD?tTM|AIh z-~gY3bNh@ymKO=G#{Mt*=+#wu7;`Vfxr?!w0ZEn@GkAx`c!h^}f{FFjm8~o_+ zLj;auNwJHY_zrbd_M7_+LDJ-whWj-a!}VxS8qOcGyg0xHP6nLvyWo`0ADnN wSzg@0>rlQNxxg_F2XflRCid&9-1k554`>Tv=`3QI3jhEB07*qoM6N<$f*Ek18vpaB^>EX>4U6ba`-PAZ2)IW&i+q+ND@olH?!` z{pS>O1S1d<#}Qk^++dDBPuQ7VxzyHeM_CvPA@sCmh55h#uJ9jRl=KLhMN2K^z?EyR zWEkjiUbdg{$osi3x<29kVLseH5T+7nI$yP1{I~gd7jP28h<`r_(tdqtj~{BjxDQckG=8ztWwOC)YqV#0L5JdzoZ;8ciA=uo)*@Y39kZ zOqn|Cv;|jNDXhGBl_g78U3N$9g7xM81#0m^jej;$&M0@(Fe`Es5j~x-V+Oz|Y@rpO>0-cCDa{q)|ko%ur@bF2zOyu-ka5;BdyohlFu9FMI+jD@%rV1*)k!j}8;3P))tilM zC=Ualf^!{*^ZXnAOpu`b4}mMA>(E8<8Wv?P&p2<$)%10AFpA+$ID*M-hTWw z4PP^GMPLb@`G^yN=b9u01p1Ucf^zuKz!c=-wOI9?1*CRJta0k{7si|+L^usDir_GZ zTZIBbrQJBVBR&@wo4GXPgT}t7MVW0JSVpF`^!Gj*K1?(yohP0^xFZ@N)OM~wf`9T+ znhw2OO#Vb&*|CBZ;Wjw7nhQSeGu0sWzIH%UC?A%8;gf4W;i<1?XdUSb=5<=px8zQH3ncr!*BAk8^+nGw)LUty zRi|`X|IyeDNf$xddL|V^e-j5ehJWx_J@x*9+Tm-xz5EZIP1WWwLkYRo7kbh+Tnf`f z^+CtUhBWLxw77YWO7UE1Xz%_QY(hL7nh3vG)NN0QwJ$^QeI)WkX@Vm=%~g>hOO=GhVUs)f!_>G`81EFL)(lxG%{7xr+(VOqFJ-W1F0@v{6!k$)R@=zbZw z9)|)$JEf9PHFkyw zO5u_FPLgc|PncZdO3}S*!+!%5&?M=_;S7YIDSc;A-U&69W0nN1bz9nNYmhe*?i&Jt zH>ve)CJnzo*n1j&%J^x{yj&za`iObw;Bo7<3~ARrOXF~hWpH;898 zZG-bZvB*lYN_)^F54-*(xfF7h z!N{?IDm2KhAN&t~cWV`VKzJLtxNd989&ot>3_TgLDZ5gTrcfvV?`QN)Ibh%x=vyoEdTZ_D^a03FSIalR z!67hKr0jK{clUPo_V1Zie?LPma+GUDUkLyJ4H&Zw21f!UIAmmIVlrc6En+b=H!UHf1n2WMeWoIc1Xt z31193GB-IfHaRjgGcYxia0wU!GB}fp3A-dXVq<1FWnwrjVliVgEi^GWVJ%@{H8d?{ zFg7q|V>n?jGC4StX$njWF*Q^&F*-6eIx#l0ehg>`1X=8KACu}7GJg*Y84#hzQ4s(D z0nAB6K~z}7?bp9+6hRaR@XwuT;tvpPC5`?A#?nFyZ7gg;&`Jxdu!6;w3rdQ`YV8(# zK@?)6g^d=bQ_xtY2xxK9P6WZ9MZB|_z`44&ySI00aSx{0$D8?n=R0rSzF}tn*g8c= z6esgoK)2=^U-352(tmywC;M=?WbRIg`(8>QfZxLMpU9QiXI#M}+`;LRxqaNnN}i?P zcAayDpoIXww}FcDxQxvJK5FhVZeVNIQIx9NVCTa-+r&q_uW{tRV9r%cc#3rlM#Ox; zZG6H7oWUZ_)ybnO0_#}Kvvg2Xjb~Au?BG(}B(4e?GyoUH$$xR&#gW1hjZHv9@OwBq zk7+ggDrPWIqh4RE-Kt6{Upf+D?1--0r5I5dQ_zgVirB9Le453J%r z80SmCTNk2HByV0}2}^mFZj8H5t6LD1Xk`5Ub*dVisw6y#>rtEx z#^lfmYm80cR2YBl2>KQ6S6ln-cU)9p8*2^Q@+RPG0b`;MlP2Bs_VAlvX8(o#1UV0i UiY9=ySO5S307*qoM6N<$f+A1aoB#j- delta 2696 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 A{r~^~ delta 5658 zcmV+#7Uk*2LzYI6BYzEOdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+ND}qmfJ86 z{KqNg2;7(BaD8uXFvp()NJ+Naa@ zE}Mdrq}ET7-OEkAaDg?~R?r}GPgOZHls!d`z|*QbDWD1SKf4}wzLU)1L>vfJ|0 zi=h1=%NiM+^erfFLDsA<^cGOowp7R|K5n6ob?nDZ()vsM%SMrX3VHpvi?CkzxM+-Gtbw@)Mjb)VtxKQXHQf1j9nBLVCt|pb!u&&|} z{OCkbEvSgU9wMTAGCm1W-QcyZnyUCTowb1{rgpmPqNg5mY`Q^3X9k&w6JwgOaxvLx zvT2t6=lG+iiSS{!3BGOOc4y70iYdP~BK(Dm=gwk-sk1*m$Babo>YJbzxbkol;<4iNpa(ZpM^~dKIUenua zMm)s}Ro-D0}Xo{6^6|`OW;T=ZIbROV9oE+dHpyE<;T`wz80osw}b(-;Y#GDqQS- z9DnKVi`!!@eZtAfkA}T;YaF(cGlijb55dCry258b2RDI}JtS9#Y5?7J+lVz^~EYw^NfY2Fy z!BdKFy|o%u8dWFo0+`pqWaiK^AbwiR&VOtC@lZ|6DVL*t@;67g5}Tf)29-W?HV=wm z-=`v~AS~>t&Uh3Wgv7cn)`AVieODMGb+D0jTgnZ=job9d95Z-eNZBVCTXum=`+OvY z0#!v_1bq7YjnY0jwhPqt(3^K#eQVg!7~Sfubn4zEByq7dv)V1=RufTQW5p@qLVsKm zu=756=OQ7Dl&Z>0Leec6mH>P4#<6Qy=V{mUY5TgB2$Y%={HJM-8b4j-BLK|D426rG zYX#jcajr&WXWc?mc=h*-yXm99bx5<=-hd7J)~lq12zOant##92*`k%AUm}d99#hELqO~ZW(+sf=tBX9!Y7e; z3rz8lnP;koMb^<}^C`nH=aU&?_}Mhqqw(O8Cd|-K-GGBj7AGs)PjuW8m%L|bkVQW> z@+5|j(AFe5iRENw#R4-&%>LTknf$;j5COB*g6LI9kV+_uxe^L47;{Gp!%W&5*@PaASEE)afSay$ z=XrCtfJFNQ{b<*0+smA;9DnBQV$LYm9F8Fe2?*_T$t_9-nhLKuV_yzU<$5O8wAhsJQ0Raw3ql*)mMG-EbA;UI-TW(G}MoVjT}a8pisch*-|V@5PYtj zLOd0&`-RyRFuN(-Fh}h0;T(+PXpT)m^kB~#X*Aoc_>ymBXXDts)B;e})*4dKapBkU_HM7Ap9GHyso~2vYfjhvEv?vA|vok?GBUpq_SMocs;!Fq_Nq)^uK`94x$s z)&rLr+dh~(bf64Ut|I19dL`o!zosF;&>VAD)p+_4IEgCor9!kepX=n=p|jH(RF@G^Q@xECDB)>|_9ffZe(hW{RK_!)^aAIy0>19E6hXDKmcvjVF!m5fXiE_ zkoMLD^qET&Z~TM7nQ2-HNM@rF5TKeUPDPb|a?!Pd-hV8yND-4^sv}bJSqJX}g}#rJ zn?TtnrMEucqLnDk!l6Ed+sMKJ*_p!u5H;iAwQ)z<5Y36 z>(M8`0=I=4BAl(!%=6SsE0kN*oK>2c`J;^GqJN;yC$m7$W8a8-#wJ4C`O5eNa6+N( zS_ikVseiJ1im?fv4=CvXLi5}SEIU+o9tkU8QA~0IlL8jCIF1!jJDDKr@HV&Z;_TIW zbaB7<8zF1Lx88o(7W-s>Pj44|pb;Ee7qlDbAf?)AYe6ILmYd)Yf<*4D7z5*>(x$BE+6xcpjkr zMt>1zh#<8AhD4}TVeXDn)}Wf2M^nk{&WHyNuDBLa7~(Rj@;}Oq*mxuQbj#SweyjKrX%N94K8`Hz9_xtEq|+eL#ik+Pul>1J09{sg)9Hzqr^oXJsgKi zLz=#H7If2ET%AR>n>6#(9BeR0W`liGX0ar2atd8L$s}7_Btbsv& z>LKZ2O8VGCVijPNoz|~v3a`bhnwAD|g6}&DuP-!EgTR@ksp7l6UU!2=gG_YpOMjuW z3kit=0kF()Ic$?58Q@dR?J})M;jZzxElJzBZsT!+;@kM4XzU~gf&lo-WSPzp^C%Z7 zj%AZ#ze#asCb0Usn>BPSDvXI7>q~GjXJeY(8XL>Y2^ky@cn%#!V9F;W4179N^7)xT{=Gk?g2X3o8n1~|Vpr-vS!`|9QL)mP_-L`52%iJI8u z>@=}H;tNEqP)B~O)=LKXmgy9?UOd0&*OvzUAb0#JuDr_9hqK><`cvPpmI343_RE3= zuwZ2i`pd+RE9hwn6K!vLf)8KqJN#ifgch)J78nlA68CBb#^rYX?rS7<&3}-cj=4g? zvdf|?4Rl;dMD`d}tSnli3dtfKRq(89u+d-?M1ssZ3^$!!-A495yjd26-jd_jJ-BAm^Tb$#^pE(P?aqR_%MU(`EOs&5l@-4Hlu+f^fj>gIpu@ zPIArMU!o7NQXR^H{TXU6PJgrXE2oX;(evYUmw3D@!+|>awbFlNM*;cV)dizAEGY$Z)(WQ%5doLq*q`!&!pgrPVH!pT}qP&HU_}@fof8 z89xk(?*yIVflhkeRDYyyAf!>C4p~3umGm&MTq&~Uae~A(?PqyEq`d~%dUv#9Y(?0$ zQvriM1PoG;*=YenYYX(0wEG7^PzV|OM$V*nA%7=njfUULqW$veuXK7O$aFh<|0O{t z-@YKoDH_H6_`?X6zKfv}bIu%)``yG(21}nQZ04pW+-40@qkr@Ns{232$-2}{rhydz z00D$)LqkwWLqi~Na&Km7Y-Iodc$|HaJxIeq9K~N#OG~LZ*g?c0Lv^wsD&i2R|084ld5RI=Bjg;0K7Klar#0l=#1-&?3fz<9@um_qclp z2(21Z&Atgh)qgA_lT3*D!m1d2g@6FU2q7#nQ%_|VbMPEr_we!cF3z*O&;2?2m7>W2 zpGZ8%bi*RvAfDN@bk6(4QC5)@;&bA0gDyz?$aUG}H_l~;1)do-a+!JJD6v@XVY!D{ z#ZZZ-iDQbYQNECOS>e3JS*Q z&%l+|_19a#>?i5Xt`<822DX8V>#ip60hc?#(3371k|X(P3Z)Y8en#I^00wV?@S59O zXCJ2zKqQX3TD}1e4uP>UWv_d@JJj3Tzh^rA{Q%~ya&JQ})#?BM4fnId5k~?fIWadm zH8(V2EihqaWGyshV`D91VPj)0IAt<9H8eFfH8V3blP(k=Br!2!GdVFiFfC?fVr4Bf zGi5O?VL350En{M4HDNd~FfuqYF_Uo=CnPy#Ib$_2Wo9ikGcaN;G&N!~En;ReHZ3P$ zIxsdmGBP4BlbRJ{BQrKRWiw+mEjMH^F)cJ1?N)wYsfclXhv-HmMhV0{@+*X`7xlx$uQTlbrKE@8|PA?|*wN zszl<6qy>b56~I-%2+--d&Y4p8Srt|~3@ihd0&9R9f!l%GfHd$7@V)0clhd6MuAuS_ zKn%DUSSiKVN~bhX2V4l)z(iFUpmezgco}GxvLRpzFb=dUBCGUUdb+bhl`udl@hk8G za8!zifIM&lIHJ$1f%8h8WmhVNI)4tdXWOE&9^g-<&L#S(M*p_}mjWGa(b&EhQ3SHUFz{nrG&WQ$3RZ=b zUjjsdtw2OY`+?^=Ck=#J2P{{ObbGFot%@QR0<{7O;8vl|m%u5b$kV{Lz<=k!;pvnw zSp#}dxd>BAnt_Lan}E~69^fy}bta2EbEdP-P9Ys&0}Viv&%lVj8<5xh=Y)VEpwDxi z@oAjW2s{OB2l{~5f!&_#q~eL>GWCX9Ag7{j*0T-)>0-{Ye23qlw%!U{Eu{c0V&`Q;2(Knt||1d>3u1`0eBKP1An{(eC@eT%6CRT zuv?A@t2acH70=4>Ch3+li+H0h=mhpD4Mu&+msP~d>lm;NxE6RG_`-9YOp*I?Cg+JK zk_A-yTXnG&xI-yCU>a~tVb995XJ&yUvu#v&0ne!^eJIao=HiHWBAEs{fIH=crg$QG zy6}5QVI5Jyv;^2?*M9?#09OF-0aeYjLw%I8ECUj=~Dyj3P|~)jV+|Y`B{-zE%+)&d0X(i1sD`|@Aq71A^^p0 zrO&v3ItxkhQ3LDCjlfc|%j-lBc8DSeA&r_1x`C7lGC|G*wttLhR9X&ru9FYw?6A(y z7K=bos1wy7@}3xEp5SFNa5^m>vj%urJ>^sJm_?BwBG8~Fvr(P=H+9vZ^|V#Qxxfq% zRk#OuTs){(c^b4dXk*tef;a!6-XLk4f!~3TfP+EMkRr{iUVp9H_jD-!ln$wOlJjX~ZmPFL$mlcaZ%Ggmhmb+3}K(VBJn{>4N z2IQ1mHC3=Lovx8(wCw6KDMiS4QJq3nZPLipyMpihD}Ni)fI5wTEmdehfsKwX2pe5s zDbRFFG^HpPnlSc31J$Crz@%C0lp3+!%sIFpPb8Z}$To}9yst);TMVc)P|sE>7ZwZ` zXs;9(p?g|;rM$lnq=BDg#C8?TUZ6XkNS;vWGILmV*;+=8tGARIQ|p*|3sWm}S*?3& znR-XCUVqB(1b*-jO6GF69=MOG?QsKBFBdwsR2tCE@{}6MOi)`3Tr3XLT;h65&bnJ{ zv)^!14mhrB4g+s{u5+y9o+X}07QAt}(&;jzOXswhS~bhT-DaGmFEks*of7FBO;n0LioLvb|LVQ2+n{07*qoM6N<$f=P6v AB>(^b From ed0ee346ed3a8ae42bfba489e9c21d6342362257 Mon Sep 17 00:00:00 2001 From: Kiyoka Nishiyama Date: Thu, 24 Feb 2022 12:53:24 +0000 Subject: [PATCH 3/4] fix: #2321 Open local image The muya library has been modified to be pure JavaScript. --- src/muya/lib/config/index.js | 2 ++ src/muya/lib/contentState/imageCtrl.js | 5 +++-- src/renderer/components/editorWithTabs/editor.vue | 5 +++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/muya/lib/config/index.js b/src/muya/lib/config/index.js index ece057e5..77d652db 100644 --- a/src/muya/lib/config/index.js +++ b/src/muya/lib/config/index.js @@ -279,6 +279,8 @@ export const MUYA_DEFAULT_OPTION = Object.freeze({ imageAction: null, // Call Electron open dialog or input element type is file. imagePathPicker: null, + // Call Electron openPath to open image file with external tool. + openImageWithExternalTool: null, clipboardFilePath: () => {}, // image path auto completed when you input in image selector. imagePathAutoComplete: () => [], diff --git a/src/muya/lib/contentState/imageCtrl.js b/src/muya/lib/contentState/imageCtrl.js index 7ffdafb6..da387e74 100644 --- a/src/muya/lib/contentState/imageCtrl.js +++ b/src/muya/lib/contentState/imageCtrl.js @@ -1,6 +1,5 @@ import { URL_REG, DATA_URL_REG } from '../config' import { correctImageSrc } from '../utils/getImageInfo' -import { shell } from 'electron' const imageCtrl = ContentState => { /** @@ -209,7 +208,9 @@ const imageCtrl = ContentState => { ContentState.prototype.openImage = function ({ key }, realFilePath) { const block = this.getBlock(key) const { eventCenter } = this.muya - shell.openPath(realFilePath) + if (this.muya.options.openImageWithExternalTool) { + this.muya.options.openImageWithExternalTool(realFilePath) + } this.singleRender(block) eventCenter.dispatch('muya-transformer', { reference: null }) diff --git a/src/renderer/components/editorWithTabs/editor.vue b/src/renderer/components/editorWithTabs/editor.vue index 9136e1a3..4bbfec1c 100644 --- a/src/renderer/components/editorWithTabs/editor.vue +++ b/src/renderer/components/editorWithTabs/editor.vue @@ -596,6 +596,7 @@ export default { spellcheckEnabled: spellcheckerEnabled, imageAction: this.imageAction.bind(this), imagePathPicker: this.imagePathPicker.bind(this), + openImageWithExternalTool: this.openImageWithExternalTool.bind(this), clipboardFilePath: guessClipboardFilePath, imagePathAutoComplete: this.imagePathAutoComplete.bind(this) } @@ -873,6 +874,10 @@ export default { return this.$store.dispatch('ASK_FOR_IMAGE_PATH') }, + openImageWithExternalTool (realFilePath) { + return shell.openPath(realFilePath) + }, + keyup (event) { if (event.key === 'Escape') { this.setImageViewerVisible(false) From 24e0f96ef3f9a1eef6df2ac8859afb8907e03f8e Mon Sep 17 00:00:00 2001 From: Kiyoka Nishiyama Date: Sat, 14 May 2022 11:07:18 +0000 Subject: [PATCH 4/4] Applied review findings Unnecessary return statements were removed. Renamed isLocalImage to imageIsLocal. Changed getImageInfo function to return the absolute path of the image. Removed file:// scheme from the path given to shell.openPath(). --- src/muya/lib/contentState/imageCtrl.js | 15 +++++---- src/muya/lib/eventHandler/clickEvent.js | 3 +- src/muya/lib/ui/imageToolbar/index.js | 33 +++++++++++-------- src/muya/lib/utils/getImageInfo.js | 5 ++- .../components/editorWithTabs/editor.vue | 4 +-- 5 files changed, 34 insertions(+), 26 deletions(-) diff --git a/src/muya/lib/contentState/imageCtrl.js b/src/muya/lib/contentState/imageCtrl.js index da387e74..f72727a1 100644 --- a/src/muya/lib/contentState/imageCtrl.js +++ b/src/muya/lib/contentState/imageCtrl.js @@ -1,5 +1,6 @@ import { URL_REG, DATA_URL_REG } from '../config' import { correctImageSrc } from '../utils/getImageInfo' +import { fileURLToPath } from 'url' const imageCtrl = ContentState => { /** @@ -205,17 +206,17 @@ const imageCtrl = ContentState => { return this.singleRender(outMostBlock, true) } - ContentState.prototype.openImage = function ({ key }, realFilePath) { + ContentState.prototype.openImage = function ({ key, absoluteImagePath }) { const block = this.getBlock(key) const { eventCenter } = this.muya if (this.muya.options.openImageWithExternalTool) { - this.muya.options.openImageWithExternalTool(realFilePath) + const path = fileURLToPath(absoluteImagePath) + this.muya.options.openImageWithExternalTool(path) + this.singleRender(block) + eventCenter.dispatch('muya-transformer', { reference: null }) + eventCenter.dispatch('muya-image-toolbar', { reference: null }) + this.muya.dispatchChange() } - - this.singleRender(block) - eventCenter.dispatch('muya-transformer', { reference: null }) - eventCenter.dispatch('muya-image-toolbar', { reference: null }) - return this.muya.dispatchChange() } } diff --git a/src/muya/lib/eventHandler/clickEvent.js b/src/muya/lib/eventHandler/clickEvent.js index 1f17facc..7a8c96b1 100644 --- a/src/muya/lib/eventHandler/clickEvent.js +++ b/src/muya/lib/eventHandler/clickEvent.js @@ -166,8 +166,7 @@ class ClickEvent { } eventCenter.dispatch('muya-image-toolbar', { reference, - imageInfo, - realFilePath: event.target.getAttribute('src') + imageInfo }) contentState.selectImage(imageInfo) // Handle show image transformer diff --git a/src/muya/lib/ui/imageToolbar/index.js b/src/muya/lib/ui/imageToolbar/index.js index fe86033b..3159806d 100644 --- a/src/muya/lib/ui/imageToolbar/index.js +++ b/src/muya/lib/ui/imageToolbar/index.js @@ -27,7 +27,6 @@ class ImageToolbar extends BaseFloat { this.options = opts this.icons = icons this.reference = null - this.realFilePath = null const toolbarContainer = this.toolbarContainer = document.createElement('div') this.container.appendChild(toolbarContainer) this.floatBox.classList.add('ag-image-toolbar-container') @@ -37,9 +36,8 @@ class ImageToolbar extends BaseFloat { listen () { const { eventCenter } = this.muya super.listen() - eventCenter.subscribe('muya-image-toolbar', ({ reference, imageInfo, realFilePath }) => { + eventCenter.subscribe('muya-image-toolbar', ({ reference, imageInfo }) => { this.reference = reference - this.realFilePath = realFilePath if (reference) { this.imageInfo = imageInfo setTimeout(() => { @@ -56,9 +54,9 @@ class ImageToolbar extends BaseFloat { const { icons, oldVnode, toolbarContainer, imageInfo } = this const { attrs } = imageInfo.token const dataAlign = attrs['data-align'] - let imageIsLocal = true - if (URL_REG.test(imageInfo.token.src) || URL_REG.test(attrs.src)) { - imageIsLocal = false + let isLocalImage = false + if (this.isLocalFile(imageInfo)) { + isLocalImage = true } const children = icons.map(i => { let icon @@ -77,7 +75,7 @@ class ImageToolbar extends BaseFloat { let itemSelector = `li.item.${i.type}` if (i.type === 'open') { - if (imageIsLocal) { + if (isLocalImage) { itemSelector += '.enable' } else { itemSelector += '.disable' @@ -113,10 +111,9 @@ class ImageToolbar extends BaseFloat { event.stopPropagation() const { imageInfo } = this - const { attrs } = imageInfo.token - let imageIsLocal = true - if (URL_REG.test(imageInfo.token.src) || URL_REG.test(attrs.src)) { - imageIsLocal = false + let isLocalImage = false + if (this.isLocalFile(imageInfo)) { + isLocalImage = true } switch (item.type) { // Delete image. @@ -155,13 +152,21 @@ class ImageToolbar extends BaseFloat { return this.hide() } case 'open': { - if (imageIsLocal) { - this.muya.contentState.openImage(this.imageInfo, this.realFilePath) - return this.hide() + if (isLocalImage) { + this.muya.contentState.openImage(this.imageInfo) + this.hide() } } } } + + isLocalFile (imageInfo) { + const { attrs } = imageInfo.token + if (URL_REG.test(imageInfo.token.src) || URL_REG.test(attrs.src)) { + return false + } + return true + } } export default ImageToolbar diff --git a/src/muya/lib/utils/getImageInfo.js b/src/muya/lib/utils/getImageInfo.js index 22d54795..968a1806 100644 --- a/src/muya/lib/utils/getImageInfo.js +++ b/src/muya/lib/utils/getImageInfo.js @@ -12,10 +12,13 @@ export const getImageInfo = image => { start: offset, end: offset + raw.length } + const imageContainer = image.querySelector('.ag-image-container') + const absoluteImagePath = imageContainer.firstChild.currentSrc return { key: paragraph.id, token, - imageId: image.id + imageId: image.id, + absoluteImagePath: absoluteImagePath } } diff --git a/src/renderer/components/editorWithTabs/editor.vue b/src/renderer/components/editorWithTabs/editor.vue index b96a028b..811e7aa7 100644 --- a/src/renderer/components/editorWithTabs/editor.vue +++ b/src/renderer/components/editorWithTabs/editor.vue @@ -776,8 +776,8 @@ export default { return this.$store.dispatch('ASK_FOR_IMAGE_PATH') }, - openImageWithExternalTool (realFilePath) { - return shell.openPath(realFilePath) + openImageWithExternalTool (absoluteImagePath) { + return shell.openPath(absoluteImagePath) }, keyup (event) {