@pie-lib/editable-html 11.1.1 → 11.1.2-next.1595

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.
Files changed (160) hide show
  1. package/CHANGELOG.json +12 -3322
  2. package/CHANGELOG.md +170 -100
  3. package/NEXT.CHANGELOG.json +1 -0
  4. package/lib/block-tags.js +25 -0
  5. package/lib/block-tags.js.map +1 -0
  6. package/lib/constants.js +16 -0
  7. package/lib/constants.js.map +1 -0
  8. package/lib/editor.js +352 -90
  9. package/lib/editor.js.map +1 -1
  10. package/lib/index.js +25 -9
  11. package/lib/index.js.map +1 -1
  12. package/lib/plugins/characters/index.js +8 -3
  13. package/lib/plugins/characters/index.js.map +1 -1
  14. package/lib/plugins/characters/utils.js +12 -12
  15. package/lib/plugins/characters/utils.js.map +1 -1
  16. package/lib/plugins/css/icons/index.js +37 -0
  17. package/lib/plugins/css/icons/index.js.map +1 -0
  18. package/lib/plugins/css/index.js +397 -0
  19. package/lib/plugins/css/index.js.map +1 -0
  20. package/lib/plugins/customPlugin/index.js +114 -0
  21. package/lib/plugins/customPlugin/index.js.map +1 -0
  22. package/lib/plugins/html/index.js +11 -7
  23. package/lib/plugins/html/index.js.map +1 -1
  24. package/lib/plugins/image/index.js +2 -1
  25. package/lib/plugins/image/index.js.map +1 -1
  26. package/lib/plugins/image/insert-image-handler.js +13 -4
  27. package/lib/plugins/image/insert-image-handler.js.map +1 -1
  28. package/lib/plugins/index.js +270 -11
  29. package/lib/plugins/index.js.map +1 -1
  30. package/lib/plugins/list/index.js +130 -0
  31. package/lib/plugins/list/index.js.map +1 -1
  32. package/lib/plugins/math/index.js +91 -56
  33. package/lib/plugins/math/index.js.map +1 -1
  34. package/lib/plugins/media/index.js +5 -2
  35. package/lib/plugins/media/index.js.map +1 -1
  36. package/lib/plugins/media/media-dialog.js +98 -57
  37. package/lib/plugins/media/media-dialog.js.map +1 -1
  38. package/lib/plugins/rendering/index.js +46 -0
  39. package/lib/plugins/rendering/index.js.map +1 -0
  40. package/lib/plugins/respArea/drag-in-the-blank/choice.js +45 -7
  41. package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
  42. package/lib/plugins/respArea/explicit-constructed-response/index.js +11 -9
  43. package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
  44. package/lib/plugins/respArea/index.js +69 -21
  45. package/lib/plugins/respArea/index.js.map +1 -1
  46. package/lib/plugins/respArea/inline-dropdown/index.js +9 -4
  47. package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
  48. package/lib/plugins/respArea/math-templated/index.js +130 -0
  49. package/lib/plugins/respArea/math-templated/index.js.map +1 -0
  50. package/lib/plugins/respArea/utils.js +16 -1
  51. package/lib/plugins/respArea/utils.js.map +1 -1
  52. package/lib/plugins/table/CustomTablePlugin.js +133 -0
  53. package/lib/plugins/table/CustomTablePlugin.js.map +1 -0
  54. package/lib/plugins/table/index.js +43 -59
  55. package/lib/plugins/table/index.js.map +1 -1
  56. package/lib/plugins/table/table-toolbar.js +33 -4
  57. package/lib/plugins/table/table-toolbar.js.map +1 -1
  58. package/lib/plugins/textAlign/icons/index.js +226 -0
  59. package/lib/plugins/textAlign/icons/index.js.map +1 -0
  60. package/lib/plugins/textAlign/index.js +34 -0
  61. package/lib/plugins/textAlign/index.js.map +1 -0
  62. package/lib/plugins/toolbar/default-toolbar.js +82 -27
  63. package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
  64. package/lib/plugins/toolbar/done-button.js +5 -2
  65. package/lib/plugins/toolbar/done-button.js.map +1 -1
  66. package/lib/plugins/toolbar/editor-and-toolbar.js +18 -19
  67. package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
  68. package/lib/plugins/toolbar/toolbar-buttons.js +44 -11
  69. package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
  70. package/lib/plugins/toolbar/toolbar.js +35 -11
  71. package/lib/plugins/toolbar/toolbar.js.map +1 -1
  72. package/lib/serialization.js +233 -44
  73. package/lib/serialization.js.map +1 -1
  74. package/lib/shared/alert-dialog.js +75 -0
  75. package/package.json +7 -6
  76. package/src/__tests__/editor.test.jsx +363 -0
  77. package/src/__tests__/serialization.test.js +291 -0
  78. package/src/__tests__/utils.js +36 -0
  79. package/src/block-tags.js +17 -0
  80. package/src/constants.js +7 -0
  81. package/src/editor.jsx +307 -52
  82. package/src/index.jsx +19 -10
  83. package/src/plugins/characters/index.jsx +11 -3
  84. package/src/plugins/characters/utils.js +12 -12
  85. package/src/plugins/css/icons/index.jsx +17 -0
  86. package/src/plugins/css/index.jsx +346 -0
  87. package/src/plugins/customPlugin/index.jsx +85 -0
  88. package/src/plugins/html/index.jsx +9 -6
  89. package/src/plugins/image/__tests__/__snapshots__/component.test.jsx.snap +51 -0
  90. package/src/plugins/image/__tests__/__snapshots__/image-toolbar-logic.test.jsx.snap +27 -0
  91. package/src/plugins/image/__tests__/__snapshots__/image-toolbar.test.jsx.snap +44 -0
  92. package/src/plugins/image/__tests__/component.test.jsx +41 -0
  93. package/src/plugins/image/__tests__/image-toolbar-logic.test.jsx +42 -0
  94. package/src/plugins/image/__tests__/image-toolbar.test.jsx +11 -0
  95. package/src/plugins/image/__tests__/index.test.js +95 -0
  96. package/src/plugins/image/__tests__/insert-image-handler.test.js +113 -0
  97. package/src/plugins/image/__tests__/mock-change.js +15 -0
  98. package/src/plugins/image/index.jsx +2 -1
  99. package/src/plugins/image/insert-image-handler.js +13 -6
  100. package/src/plugins/index.jsx +248 -5
  101. package/src/plugins/list/__tests__/index.test.js +54 -0
  102. package/src/plugins/list/index.jsx +130 -0
  103. package/src/plugins/math/__tests__/__snapshots__/index.test.jsx.snap +48 -0
  104. package/src/plugins/math/__tests__/index.test.jsx +245 -0
  105. package/src/plugins/math/index.jsx +87 -56
  106. package/src/plugins/media/__tests__/index.test.js +75 -0
  107. package/src/plugins/media/index.jsx +3 -2
  108. package/src/plugins/media/media-dialog.js +106 -57
  109. package/src/plugins/rendering/index.js +31 -0
  110. package/src/plugins/respArea/drag-in-the-blank/choice.jsx +35 -5
  111. package/src/plugins/respArea/explicit-constructed-response/index.jsx +10 -8
  112. package/src/plugins/respArea/index.jsx +53 -7
  113. package/src/plugins/respArea/inline-dropdown/index.jsx +12 -5
  114. package/src/plugins/respArea/math-templated/index.jsx +104 -0
  115. package/src/plugins/respArea/utils.jsx +11 -0
  116. package/src/plugins/table/CustomTablePlugin.js +113 -0
  117. package/src/plugins/table/__tests__/__snapshots__/table-toolbar.test.jsx.snap +44 -0
  118. package/src/plugins/table/__tests__/index.test.jsx +401 -0
  119. package/src/plugins/table/__tests__/table-toolbar.test.jsx +42 -0
  120. package/src/plugins/table/index.jsx +46 -59
  121. package/src/plugins/table/table-toolbar.jsx +39 -2
  122. package/src/plugins/textAlign/icons/index.jsx +139 -0
  123. package/src/plugins/textAlign/index.jsx +23 -0
  124. package/src/plugins/toolbar/__tests__/__snapshots__/default-toolbar.test.jsx.snap +923 -0
  125. package/src/plugins/toolbar/__tests__/__snapshots__/editor-and-toolbar.test.jsx.snap +20 -0
  126. package/src/plugins/toolbar/__tests__/__snapshots__/toolbar-buttons.test.jsx.snap +36 -0
  127. package/src/plugins/toolbar/__tests__/__snapshots__/toolbar.test.jsx.snap +46 -0
  128. package/src/plugins/toolbar/__tests__/default-toolbar.test.jsx +94 -0
  129. package/src/plugins/toolbar/__tests__/editor-and-toolbar.test.jsx +37 -0
  130. package/src/plugins/toolbar/__tests__/toolbar-buttons.test.jsx +51 -0
  131. package/src/plugins/toolbar/__tests__/toolbar.test.jsx +106 -0
  132. package/src/plugins/toolbar/default-toolbar.jsx +82 -20
  133. package/src/plugins/toolbar/done-button.jsx +3 -1
  134. package/src/plugins/toolbar/editor-and-toolbar.jsx +18 -13
  135. package/src/plugins/toolbar/toolbar-buttons.jsx +52 -11
  136. package/src/plugins/toolbar/toolbar.jsx +31 -8
  137. package/src/serialization.jsx +213 -38
  138. package/README.md +0 -45
  139. package/deploy.sh +0 -16
  140. package/playground/image/data.js +0 -59
  141. package/playground/image/index.html +0 -22
  142. package/playground/image/index.jsx +0 -81
  143. package/playground/index.html +0 -25
  144. package/playground/mathquill/index.html +0 -22
  145. package/playground/mathquill/index.jsx +0 -155
  146. package/playground/package.json +0 -15
  147. package/playground/prod-test/index.html +0 -22
  148. package/playground/prod-test/index.jsx +0 -28
  149. package/playground/schema-override/data.js +0 -29
  150. package/playground/schema-override/image-plugin.jsx +0 -41
  151. package/playground/schema-override/index.html +0 -21
  152. package/playground/schema-override/index.jsx +0 -97
  153. package/playground/serialization/data.js +0 -29
  154. package/playground/serialization/image-plugin.jsx +0 -41
  155. package/playground/serialization/index.html +0 -22
  156. package/playground/serialization/index.jsx +0 -12
  157. package/playground/static.json +0 -3
  158. package/playground/table-examples.html +0 -70
  159. package/playground/webpack.config.js +0 -42
  160. package/static.json +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/plugins/media/index.jsx"],"names":["log","removeDialogs","prevDialogs","document","querySelectorAll","forEach","s","remove","insertDialog","props","newEl","createElement","type","callback","opts","rest","initialBodyOverflow","body","style","overflow","className","handleClose","val","data","el","uploadSoundSupport","ReactDOM","render","appendChild","types","MediaPlugin","toolbar","icon","onClick","value","onChange","inline","Inline","create","isVoid","editing","ends","undefined","height","title","starts","src","url","width","change","insertInline","nodeIsThere","findDescendant","d","key","c","removeNodeByKey","focus","setNodeByKey","supports","node","object","name","deleteNode","e","preventDefault","renderNode","jsonData","toJSON","tag","handleEdit","createChange","edit","get","handleDelete","normalizeNode","textNodeMap","updateNodesArray","index","isMedia","indexOf","text","push","length","withoutNormalization","n","insertTextByKey","serialization","deserialize","dataset","typeIndex","Element","tagName","toLowerCase","firstChild","getAttribute","parseInt","out","serialize","divProps"],"mappings":";;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;;;;;;;;AAEA,IAAMA,GAAG,GAAG,uBAAM,sCAAN,CAAZ;;AAEA,IAAMC,aAAa,GAAG,SAAhBA,aAAgB,GAAM;AAC1B,MAAMC,WAAW,GAAGC,QAAQ,CAACC,gBAAT,CAA0B,sBAA1B,CAApB;AAEAF,EAAAA,WAAW,CAACG,OAAZ,CAAoB,UAACC,CAAD;AAAA,WAAOA,CAAC,CAACC,MAAF,EAAP;AAAA,GAApB;AACD,CAJD;;AAMO,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAACC,KAAD,EAAW;AACrC,MAAMC,KAAK,GAAGP,QAAQ,CAACQ,aAAT,CAAuB,KAAvB,CAAd;AACA,MAAQC,IAAR,GAA0CH,KAA1C,CAAQG,IAAR;AAAA,MAAcC,QAAd,GAA0CJ,KAA1C,CAAcI,QAAd;AAAA,MAAwBC,IAAxB,GAA0CL,KAA1C,CAAwBK,IAAxB;AAAA,MAAiCC,IAAjC,6CAA0CN,KAA1C;AACA,MAAMO,mBAAmB,GAAGb,QAAQ,CAACc,IAAT,CAAcC,KAAd,CAAoBC,QAAhD;AAEAlB,EAAAA,aAAa;AAEbS,EAAAA,KAAK,CAACU,SAAN,GAAkB,qBAAlB;AACAjB,EAAAA,QAAQ,CAACc,IAAT,CAAcC,KAAd,CAAoBC,QAApB,GAA+B,QAA/B;;AAEA,MAAME,WAAW,GAAG,SAAdA,WAAc,CAACC,GAAD,EAAMC,IAAN,EAAe;AACjCV,IAAAA,QAAQ,CAACS,GAAD,EAAMC,IAAN,CAAR;AACAb,IAAAA,KAAK,CAACH,MAAN;AACAJ,IAAAA,QAAQ,CAACc,IAAT,CAAcC,KAAd,CAAoBC,QAApB,GAA+BH,mBAA/B;AACD,GAJD;;AAMA,MAAMQ,EAAE,gBACN,gCAAC,uBAAD,gCACMT,IADN;AAEE,IAAA,kBAAkB,EAAED,IAAI,CAACW,kBAF3B;AAGE,IAAA,IAAI,EAAEb,IAHR;AAIE,IAAA,aAAa,EAAE,IAJjB;AAKE,IAAA,IAAI,EAAE,IALR;AAME,IAAA,WAAW,EAAES;AANf,KADF;;AAWAK,uBAASC,MAAT,CAAgBH,EAAhB,EAAoBd,KAApB;;AAEAP,EAAAA,QAAQ,CAACc,IAAT,CAAcW,WAAd,CAA0BlB,KAA1B;AACD,CA9BM;;;AAgCP,IAAMmB,KAAK,GAAG,CAAC,OAAD,EAAU,OAAV,CAAd;;AAEe,SAASC,WAAT,CAAqBlB,IAArB,EAA2BE,IAA3B,EAAiC;AAC9C,MAAMiB,OAAO,GAAG;AACdC,IAAAA,IAAI,EAAEpB,IAAI,KAAK,OAAT,gBAAmB,gCAAC,oBAAD,OAAnB,gBAAsC,gCAAC,oBAAD,OAD9B;AAEdqB,IAAAA,OAAO,EAAE,iBAACC,KAAD,EAAQC,QAAR,EAAqB;AAC5BnC,MAAAA,GAAG,CAAC,mBAAD,CAAH;;AACA,UAAMoC,MAAM,GAAGC,cAAOC,MAAP,CAAc;AAC3B1B,QAAAA,IAAI,EAAEA,IADqB;AAE3B2B,QAAAA,MAAM,EAAE,IAFmB;AAG3BhB,QAAAA,IAAI,EAAE;AACJiB,UAAAA,OAAO,EAAE,KADL;AAEJC,UAAAA,IAAI,EAAEC,SAFF;AAGJC,UAAAA,MAAM,EAAED,SAHJ;AAIJE,UAAAA,KAAK,EAAEF,SAJH;AAKJG,UAAAA,MAAM,EAAEH,SALJ;AAMJI,UAAAA,GAAG,EAAEJ,SAND;AAOJK,UAAAA,GAAG,EAAEL,SAPD;AAQJM,UAAAA,KAAK,EAAEN;AARH;AAHqB,OAAd,CAAf;;AAeA,UAAMO,MAAM,GAAGf,KAAK,CAACe,MAAN,GAAeC,YAAf,CAA4Bd,MAA5B,CAAf;AACAD,MAAAA,QAAQ,CAACc,MAAD,CAAR;AACAzC,MAAAA,YAAY,CAAC;AACXI,QAAAA,IAAI,EAAJA,IADW;AAEXE,QAAAA,IAAI,EAAJA,IAFW;AAGXD,QAAAA,QAAQ,EAAE,kBAACS,GAAD,EAAMC,IAAN,EAAe;AACvB,cAAM4B,WAAW,GAAGF,MAAM,CAACf,KAAP,CAAa/B,QAAb,CAAsBiD,cAAtB,CAAqC,UAACC,CAAD;AAAA,mBAAOA,CAAC,CAACC,GAAF,KAAUlB,MAAM,CAACkB,GAAxB;AAAA,WAArC,CAApB;;AAEA,cAAIH,WAAJ,EAAiB;AACf,gBAAI,CAAC7B,GAAL,EAAU;AACR,kBAAMiC,CAAC,GAAGN,MAAM,CAACO,eAAP,CAAuBpB,MAAM,CAACkB,GAA9B,CAAV;AACAnB,cAAAA,QAAQ,CAACoB,CAAD,EAAI;AAAA,uBAAMzC,IAAI,CAAC2C,KAAL,EAAN;AAAA,eAAJ,CAAR;AACD,aAHD,MAGO;AACL,kBAAMF,EAAC,GAAGN,MAAM,CAACS,YAAP,CAAoBtB,MAAM,CAACkB,GAA3B,EAAgC;AAAE/B,gBAAAA,IAAI,EAAJA;AAAF,eAAhC,CAAV;;AACAY,cAAAA,QAAQ,CAACoB,EAAD,EAAI;AAAA,uBAAMzC,IAAI,CAAC2C,KAAL,CAAW,WAAX,EAAwBN,WAAxB,CAAN;AAAA,eAAJ,CAAR;AACD;AACF,WARD,MAQO;AACLrC,YAAAA,IAAI,CAAC2C,KAAL;AACD;AACF;AAjBU,OAAD,CAAZ;AAmBD,KAxCa;AAyCdE,IAAAA,QAAQ,EAAE,kBAACC,IAAD;AAAA,aAAUA,IAAI,CAACC,MAAL,KAAgB,QAAhB,IAA4BD,IAAI,CAAChD,IAAL,KAAcA,IAApD;AAAA;AAzCI,GAAhB;AA4CA,SAAO;AACLkD,IAAAA,IAAI,EAAElD,IADD;AAELmB,IAAAA,OAAO,EAAPA,OAFK;AAGLgC,IAAAA,UAAU,EAAE,oBAACC,CAAD,EAAIJ,IAAJ,EAAU1B,KAAV,EAAiBC,QAAjB,EAA8B;AACxC6B,MAAAA,CAAC,CAACC,cAAF;AACA,UAAMhB,MAAM,GAAGf,KAAK,CAACe,MAAN,GAAeO,eAAf,CAA+BI,IAAI,CAACN,GAApC,CAAf;AAEAnB,MAAAA,QAAQ,CAACc,MAAD,CAAR;AACD,KARI;AASLiB,IAAAA,UATK,sBASMzD,KATN,EASa;AAChB,UAAIA,KAAK,CAACmD,IAAN,CAAWhD,IAAX,KAAoBA,IAAxB,EAA8B;AAC5B,YAAQgD,IAAR,GAAsBnD,KAAtB,CAAQmD,IAAR;AAAA,YAAcN,GAAd,GAAsB7C,KAAtB,CAAc6C,GAAd;AACA,YAAQ/B,IAAR,GAAiBqC,IAAjB,CAAQrC,IAAR;AACA,YAAM4C,QAAQ,GAAG5C,IAAI,CAAC6C,MAAL,EAAjB;AACA,YAAQtB,GAAR,GAAsDqB,QAAtD,CAAQrB,GAAR;AAAA,YAAaH,MAAb,GAAsDwB,QAAtD,CAAaxB,MAAb;AAAA,YAAqBK,KAArB,GAAsDmB,QAAtD,CAAqBnB,KAArB;AAAA,YAA4BR,OAA5B,GAAsD2B,QAAtD,CAA4B3B,OAA5B;AAAA,YAAqC6B,GAArC,GAAsDF,QAAtD,CAAqCE,GAArC;AAAA,YAA6CtD,IAA7C,6CAAsDoD,QAAtD;;AACA,YAAMG,UAAU,GAAG,SAAbA,UAAa,GAAM;AACvB,cAAMrB,MAAM,GAAGnC,IAAI,CAACyD,YAAL,EAAf;AACA,cAAMhB,CAAC,GAAGN,MAAM,CAACS,YAAP,CAAoBJ,GAApB,EAAyB;AACjC/B,YAAAA,IAAI,kCACC4C,QADD;AAEF3B,cAAAA,OAAO,EAAE;AAFP;AAD6B,WAAzB,CAAV;AAOA1B,UAAAA,IAAI,CAACqB,QAAL,CAAcoB,CAAd,EAAiB,YAAM;AACrB/C,YAAAA,YAAY,iCACP2D,QADO;AAEVK,cAAAA,IAAI,EAAE,IAFI;AAGV5D,cAAAA,IAAI,EAAJA,IAHU;AAIVE,cAAAA,IAAI,EAAJA,IAJU;AAKVD,cAAAA,QAAQ,EAAE,kBAACS,GAAD,EAAMC,IAAN,EAAe;AACvB,oBAAQ+B,GAAR,GAAgBM,IAAhB,CAAQN,GAAR;AAEA,oBAAMH,WAAW,GAAGF,MAAM,CAACf,KAAP,CAAa/B,QAAb,CAAsBiD,cAAtB,CAClB,UAACC,CAAD;AAAA,yBAAOA,CAAC,CAACzC,IAAF,KAAWA,IAAX,IAAmByC,CAAC,CAAC9B,IAAF,CAAOkD,GAAP,CAAW,SAAX,CAA1B;AAAA,iBADkB,CAApB;;AAIA,oBAAItB,WAAW,IAAI7B,GAAnB,EAAwB;AACtB,sBAAMiC,GAAC,GAAGN,MAAM,CAACS,YAAP,CAAoBJ,GAApB,EAAyB;AAAE/B,oBAAAA,IAAI,EAAJA,IAAF;AAAQiB,oBAAAA,OAAO,EAAE;AAAjB,mBAAzB,CAAV;;AACA1B,kBAAAA,IAAI,CAACqB,QAAL,CAAcoB,GAAd,EAAiB;AAAA,2BAAMzC,IAAI,CAAC2C,KAAL,CAAW,WAAX,EAAwBN,WAAxB,CAAN;AAAA,mBAAjB;AACD,iBAHD,MAGO;AACLrC,kBAAAA,IAAI,CAAC2C,KAAL;AACD;AACF;AAlBS,eAAZ;AAoBD,WArBD;AAsBD,SA/BD;;AAgCA,YAAMiB,YAAY,GAAG,SAAfA,YAAe,GAAM;AACzB,cAAMzB,MAAM,GAAGnC,IAAI,CAACyD,YAAL,EAAf;AACA,cAAMhB,CAAC,GAAGN,MAAM,CAACO,eAAP,CAAuBI,IAAI,CAACN,GAA5B,CAAV;AAEAxC,UAAAA,IAAI,CAACqB,QAAL,CAAcoB,CAAd;AACD,SALD;;AAMA,YAAMrC,KAAK,GAAG,EAAd;;AAEA,YAAI8B,KAAJ,EAAW;AACT9B,UAAAA,KAAK,CAAC8B,KAAN,aAAiBA,KAAjB;AACD;;AAED,YAAIL,MAAJ,EAAY;AACVzB,UAAAA,KAAK,CAACyB,MAAN,aAAkBA,MAAlB;AACD;;AAED,YAAI0B,GAAG,KAAK,OAAZ,EAAqB;AACnB,8BACE,gCAAC,wBAAD;AAAc,YAAA,MAAM,MAApB;AAAqB,yBAAWzD,IAAhC;AAAsC,YAAA,KAAK,EAAEM,KAAK,CAAC8B;AAAnD,aAA8DjC,IAA9D,gBACE;AAAO,YAAA,QAAQ,EAAC;AAAhB,0BACE;AAAQ,YAAA,IAAI,EAAC,WAAb;AAAyB,YAAA,GAAG,EAAE+B;AAA9B,YADF,CADF,eAIE,gCAAC,wBAAD;AAAc,YAAA,QAAQ,MAAtB;AAAuB,YAAA,QAAQ,EAAE4B;AAAjC,YAJF,CADF;AAQD;;AAED,4BACE,gCAAC,wBAAD;AAAc,UAAA,MAAM,MAApB;AAAqB,uBAAW9D,IAAhC;AAAsC,UAAA,KAAK,EAAEM,KAAK,CAAC8B;AAAnD,WAA8DjC,IAA9D,gBACE;AACE,UAAA,WAAW,EAAC,GADd;AAEE,UAAA,KAAK,EAAC,0FAFR;AAGE,UAAA,eAAe,MAHjB;AAIE,UAAA,GAAG,EAAE+B,GAJP;AAKE,UAAA,OAAO,EAAEN,OAAO,GAAG,CAAH,GAAO;AALzB,WAMMzB,IANN,EAOMG,KAPN,EADF,eAUE,gCAAC,wBAAD;AAAc,UAAA,MAAM,EAAEoD,UAAtB;AAAkC,UAAA,QAAQ,EAAEI;AAA5C,UAVF,CADF;AAcD;AACF,KAzFI;AA0FLC,IAAAA,aAAa,EAAE,uBAACf,IAAD,EAAU;AACvB,UAAMgB,WAAW,GAAG,EAApB;AACA,UAAMC,gBAAgB,GAAG,EAAzB;AACA,UAAIC,KAAK,GAAG,CAAZ;AAEA,UAAIlB,IAAI,CAACC,MAAL,KAAgB,UAApB,EAAgC;AAEhCD,MAAAA,IAAI,CAACR,cAAL,CAAoB,UAACC,CAAD,EAAO;AACzB,YAAIA,CAAC,CAACQ,MAAF,KAAa,MAAjB,EAAyB;AACvBe,UAAAA,WAAW,CAACE,KAAD,CAAX,GAAqBzB,CAArB;AACD;;AAED,YAAM0B,OAAO,GAAGlD,KAAK,CAACmD,OAAN,CAAc3B,CAAC,CAACzC,IAAhB,KAAyB,CAAzC;;AAEA,YAAImE,OAAJ,EAAa;AACX,cAAID,KAAK,GAAG,CAAR,IAAaF,WAAW,CAACE,KAAK,GAAG,CAAT,CAAxB,IAAuCF,WAAW,CAACE,KAAK,GAAG,CAAT,CAAX,CAAuBG,IAAvB,KAAgC,EAA3E,EAA+E;AAC7EJ,YAAAA,gBAAgB,CAACK,IAAjB,CAAsBN,WAAW,CAACE,KAAK,GAAG,CAAT,CAAjC;AACD;AACF;;AAEDA,QAAAA,KAAK;AACN,OAdD;AAgBA,UAAI,CAACD,gBAAgB,CAACM,MAAtB,EAA8B;AAE9B,aAAO,UAAClC,MAAD,EAAY;AACjBA,QAAAA,MAAM,CAACmC,oBAAP,CAA4B,YAAM;AAChCP,UAAAA,gBAAgB,CAACxE,OAAjB,CAAyB,UAACgF,CAAD;AAAA,mBAAOpC,MAAM,CAACqC,eAAP,CAAuBD,CAAC,CAAC/B,GAAzB,EAA8B,CAA9B,EAAiC,GAAjC,CAAP;AAAA,WAAzB;AACD,SAFD;AAGD,OAJD;AAKD;AAxHI,GAAP;AA0HD;;AAEM,IAAMiC,aAAa,GAAG;AAC3BC,EAAAA,WAD2B,uBACfhE;AAAG;AADY,IACA;AACzB,QAAIZ,IAAI,GAAGY,EAAE,CAACiE,OAAH,IAAcjE,EAAE,CAACiE,OAAH,CAAW7E,IAApC;AACA,QAAIyD,GAAG,GAAG,QAAV;AACA,QAAIvB,GAAJ;AACA,QAAM4C,SAAS,GAAG7D,KAAK,CAACmD,OAAN,CAAcpE,IAAd,CAAlB;;AAEA,QAAI8E,SAAS,GAAG,CAAhB,EAAmB;AACjB,UAAIlE,EAAE,YAAYmE,OAAd,IAAyBnE,EAAE,CAACoE,OAAH,CAAWC,WAAX,OAA6B,OAA1D,EAAmE;AAAA;;AACjEjF,QAAAA,IAAI,GAAG,OAAP;AACAyD,QAAAA,GAAG,GAAG,OAAN;AACAvB,QAAAA,GAAG,qBAAGtB,EAAE,CAACsE,UAAN,mDAAG,eAAeC,YAAf,CAA4B,KAA5B,CAAN;AACD,OAJD,MAIO;AACL;AACD;AACF;;AAED,eAA8CvE,EAAE,CAACiE,OAAH,IAAc,EAA5D;AAAA,QAAQhD,IAAR,QAAQA,IAAR;AAAA,QAAcI,MAAd,QAAcA,MAAd;AAAA,QAAsBD,KAAtB,QAAsBA,KAAtB;AAAA,QAA6BJ,OAA7B,QAA6BA,OAA7B;AAAA,QAAsCO,GAAtC,QAAsCA,GAAtC;;AAEA/C,IAAAA,GAAG,CAAC,eAAD,EAAkB8D,IAAlB,CAAH;AACA,QAAMd,KAAK,GAAGgD,QAAQ,CAACxE,EAAE,CAACuE,YAAH,CAAgB,OAAhB,CAAD,EAA2B,EAA3B,CAAR,IAA0C,IAAxD;AACA,QAAMpD,MAAM,GAAGqD,QAAQ,CAACxE,EAAE,CAACuE,YAAH,CAAgB,QAAhB,CAAD,EAA4B,EAA5B,CAAR,IAA2C,IAA1D;AAEA,QAAME,GAAG,GAAG;AACVpC,MAAAA,MAAM,EAAE,QADE;AAEVjD,MAAAA,IAAI,EAAEA,IAFI;AAGV2B,MAAAA,MAAM,EAAE,IAHE;AAIVhB,MAAAA,IAAI,EAAE;AACJ8C,QAAAA,GAAG,EAAHA,GADI;AAEJvB,QAAAA,GAAG,EAAEA,GAAG,IAAItB,EAAE,CAACuE,YAAH,CAAgB,KAAhB,CAFR;AAGJvD,QAAAA,OAAO,EAAPA,OAHI;AAIJC,QAAAA,IAAI,EAAJA,IAJI;AAKJE,QAAAA,MAAM,EAANA,MALI;AAMJE,QAAAA,MAAM,EAANA,MANI;AAOJD,QAAAA,KAAK,EAALA,KAPI;AAQJI,QAAAA,KAAK,EAALA,KARI;AASJD,QAAAA,GAAG,EAAHA;AATI;AAJI,KAAZ;AAgBA/C,IAAAA,GAAG,CAAC,iBAAD,EAAoBiG,GAApB,CAAH;AACA,WAAOA,GAAP;AACD,GAzC0B;AA0C3BC,EAAAA,SA1C2B,qBA0CjBrC;AAAO;AA1CU,IA0CM;AAC/B,QAAM6B,SAAS,GAAG7D,KAAK,CAACmD,OAAN,CAAcnB,MAAM,CAACjD,IAArB,CAAlB;AAEA,QAAI8E,SAAS,GAAG,CAAhB,EAAmB;AAEnB,QAAM9E,IAAI,GAAGiB,KAAK,CAAC6D,SAAD,CAAlB;AAEA,QAAQnE,IAAR,GAAiBsC,MAAjB,CAAQtC,IAAR;AACA,QAAMiB,OAAO,GAAGjB,IAAI,CAACkD,GAAL,CAAS,SAAT,CAAhB;AACA,QAAMJ,GAAG,GAAG9C,IAAI,CAACkD,GAAL,CAAS,KAAT,CAAZ;AACA,QAAMhC,IAAI,GAAGlB,IAAI,CAACkD,GAAL,CAAS,MAAT,CAAb;AACA,QAAM3B,GAAG,GAAGvB,IAAI,CAACkD,GAAL,CAAS,KAAT,CAAZ;AACA,QAAM5B,MAAM,GAAGtB,IAAI,CAACkD,GAAL,CAAS,QAAT,CAAf;AACA,QAAM7B,KAAK,GAAGrB,IAAI,CAACkD,GAAL,CAAS,OAAT,CAAd;AACA,QAAMzB,KAAK,GAAGzB,IAAI,CAACkD,GAAL,CAAS,OAAT,CAAd;AACA,QAAM9B,MAAM,GAAGpB,IAAI,CAACkD,GAAL,CAAS,QAAT,CAAf;AACA,QAAM1B,GAAG,GAAGxB,IAAI,CAACkD,GAAL,CAAS,KAAT,CAAZ;AACA,QAAMvD,KAAK,GAAG,EAAd;;AAEA,QAAI8B,KAAJ,EAAW;AACT9B,MAAAA,KAAK,CAAC8B,KAAN,aAAiBA,KAAjB;AACD;;AAED,QAAIL,MAAJ,EAAY;AACVzB,MAAAA,KAAK,CAACyB,MAAN,aAAkBA,MAAlB;AACD;;AAED,QAAMwD,QAAQ,GAAG;AACf,sBAAgB3D,OADD;AAEf,mBAAaC,IAFE;AAGf,qBAAeI,MAHA;AAIf,oBAAcD,KAJC;AAKf,kBAAYG;AALG,KAAjB;;AAOA,QAAMtC,KAAK,mCACNS,KADM;AAET4B,MAAAA,GAAG,EAAHA;AAFS,MAAX;;AAKA,QAAIuB,GAAG,KAAK,OAAZ,EAAqB;AACnB,0BACE;AAAO,QAAA,QAAQ,EAAC;AAAhB,sBACE;AAAQ,QAAA,IAAI,EAAC,WAAb;AAAyB,QAAA,GAAG,EAAEvB;AAA9B,QADF,CADF;AAKD;;AAED,wBACE;AACE,mBAAWlC,IADb;AAEE,MAAA,GAAG,EAAEkC;AAFP,OAGMqD,QAHN;AAIE,MAAA,WAAW,EAAC,GAJd;AAKE,MAAA,KAAK,EAAC,0FALR;AAME,MAAA,eAAe;AANjB,OAOM1F,KAPN,EADF;AAWD;AApG0B,CAAtB","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Inline } from 'slate';\nimport TheatersIcon from '@material-ui/icons/Theaters';\nimport VolumeUpIcon from '@material-ui/icons/VolumeUp';\nimport debug from 'debug';\n\nimport MediaDialog from './media-dialog';\nimport MediaToolbar from './media-toolbar';\nimport MediaWrapper from './media-wrapper';\n\nconst log = debug('@pie-lib:editable-html:plugins:image');\n\nconst removeDialogs = () => {\n const prevDialogs = document.querySelectorAll('.insert-media-dialog');\n\n prevDialogs.forEach((s) => s.remove());\n};\n\nexport const insertDialog = (props) => {\n const newEl = document.createElement('div');\n const { type, callback, opts, ...rest } = props;\n const initialBodyOverflow = document.body.style.overflow;\n\n removeDialogs();\n\n newEl.className = 'insert-media-dialog';\n document.body.style.overflow = 'hidden';\n\n const handleClose = (val, data) => {\n callback(val, data);\n newEl.remove();\n document.body.style.overflow = initialBodyOverflow;\n };\n\n const el = (\n <MediaDialog\n {...rest}\n uploadSoundSupport={opts.uploadSoundSupport}\n type={type}\n disablePortal={true}\n open={true}\n handleClose={handleClose}\n />\n );\n\n ReactDOM.render(el, newEl);\n\n document.body.appendChild(newEl);\n};\n\nconst types = ['audio', 'video'];\n\nexport default function MediaPlugin(type, opts) {\n const toolbar = {\n icon: type === 'audio' ? <VolumeUpIcon /> : <TheatersIcon />,\n onClick: (value, onChange) => {\n log('[toolbar] onClick');\n const inline = Inline.create({\n type: type,\n isVoid: true,\n data: {\n editing: false,\n ends: undefined,\n height: undefined,\n title: undefined,\n starts: undefined,\n src: undefined,\n url: undefined,\n width: undefined,\n },\n });\n\n const change = value.change().insertInline(inline);\n onChange(change);\n insertDialog({\n type,\n opts,\n callback: (val, data) => {\n const nodeIsThere = change.value.document.findDescendant((d) => d.key === inline.key);\n\n if (nodeIsThere) {\n if (!val) {\n const c = change.removeNodeByKey(inline.key);\n onChange(c, () => opts.focus());\n } else {\n const c = change.setNodeByKey(inline.key, { data });\n onChange(c, () => opts.focus('beginning', nodeIsThere));\n }\n } else {\n opts.focus();\n }\n },\n });\n },\n supports: (node) => node.object === 'inline' && node.type === type,\n };\n\n return {\n name: type,\n toolbar,\n deleteNode: (e, node, value, onChange) => {\n e.preventDefault();\n const change = value.change().removeNodeByKey(node.key);\n\n onChange(change);\n },\n renderNode(props) {\n if (props.node.type === type) {\n const { node, key } = props;\n const { data } = node;\n const jsonData = data.toJSON();\n const { src, height, width, editing, tag, ...rest } = jsonData;\n const handleEdit = () => {\n const change = opts.createChange();\n const c = change.setNodeByKey(key, {\n data: {\n ...jsonData,\n editing: true,\n },\n });\n\n opts.onChange(c, () => {\n insertDialog({\n ...jsonData,\n edit: true,\n type,\n opts,\n callback: (val, data) => {\n const { key } = node;\n\n const nodeIsThere = change.value.document.findDescendant(\n (d) => d.type === type && d.data.get('editing'),\n );\n\n if (nodeIsThere && val) {\n const c = change.setNodeByKey(key, { data, editing: false });\n opts.onChange(c, () => opts.focus('beginning', nodeIsThere));\n } else {\n opts.focus();\n }\n },\n });\n });\n };\n const handleDelete = () => {\n const change = opts.createChange();\n const c = change.removeNodeByKey(node.key);\n\n opts.onChange(c);\n };\n const style = {};\n\n if (width) {\n style.width = `${width}px`;\n }\n\n if (height) {\n style.height = `${height}px`;\n }\n\n if (tag === 'audio') {\n return (\n <MediaWrapper editor data-type={type} width={style.width} {...rest}>\n <audio controls=\"controls\">\n <source type=\"audio/mp3\" src={src} />\n </audio>\n <MediaToolbar hideEdit onRemove={handleDelete} />\n </MediaWrapper>\n );\n }\n\n return (\n <MediaWrapper editor data-type={type} width={style.width} {...rest}>\n <iframe\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n src={src}\n editing={editing ? 1 : 0}\n {...rest}\n {...style}\n />\n <MediaToolbar onEdit={handleEdit} onRemove={handleDelete} />\n </MediaWrapper>\n );\n }\n },\n normalizeNode: (node) => {\n const textNodeMap = {};\n const updateNodesArray = [];\n let index = 0;\n\n if (node.object !== 'document') return;\n\n node.findDescendant((d) => {\n if (d.object === 'text') {\n textNodeMap[index] = d;\n }\n\n const isMedia = types.indexOf(d.type) >= 0;\n\n if (isMedia) {\n if (index > 0 && textNodeMap[index - 1] && textNodeMap[index - 1].text === '') {\n updateNodesArray.push(textNodeMap[index - 1]);\n }\n }\n\n index++;\n });\n\n if (!updateNodesArray.length) return;\n\n return (change) => {\n change.withoutNormalization(() => {\n updateNodesArray.forEach((n) => change.insertTextByKey(n.key, 0, ' '));\n });\n };\n },\n };\n}\n\nexport const serialization = {\n deserialize(el /*, next*/) {\n let type = el.dataset && el.dataset.type;\n let tag = 'iframe';\n let src;\n const typeIndex = types.indexOf(type);\n\n if (typeIndex < 0) {\n if (el instanceof Element && el.tagName.toLowerCase() === 'audio') {\n type = 'audio';\n tag = 'audio';\n src = el.firstChild?.getAttribute('src');\n } else {\n return;\n }\n }\n\n const { ends, starts, title, editing, url } = el.dataset || {};\n\n log('deserialize: ', name);\n const width = parseInt(el.getAttribute('width'), 10) || null;\n const height = parseInt(el.getAttribute('height'), 10) || null;\n\n const out = {\n object: 'inline',\n type: type,\n isVoid: true,\n data: {\n tag,\n src: src || el.getAttribute('src'),\n editing,\n ends,\n height,\n starts,\n title,\n width,\n url,\n },\n };\n log('return object: ', out);\n return out;\n },\n serialize(object /*, children*/) {\n const typeIndex = types.indexOf(object.type);\n\n if (typeIndex < 0) return;\n\n const type = types[typeIndex];\n\n const { data } = object;\n const editing = data.get('editing');\n const tag = data.get('tag');\n const ends = data.get('ends');\n const src = data.get('src');\n const starts = data.get('starts');\n const title = data.get('title');\n const width = data.get('width');\n const height = data.get('height');\n const url = data.get('url');\n const style = {};\n\n if (width) {\n style.width = `${width}px`;\n }\n\n if (height) {\n style.height = `${height}px`;\n }\n\n const divProps = {\n 'data-editing': editing,\n 'data-ends': ends,\n 'data-starts': starts,\n 'data-title': title,\n 'data-url': url,\n };\n const props = {\n ...style,\n src,\n };\n\n if (tag === 'audio') {\n return (\n <audio controls=\"controls\">\n <source type=\"audio/mp3\" src={src} />\n </audio>\n );\n }\n\n return (\n <iframe\n data-type={type}\n src={src}\n {...divProps}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n {...props}\n />\n );\n },\n};\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../src/plugins/media/index.jsx"],"names":["log","removeDialogs","prevDialogs","document","querySelectorAll","forEach","s","remove","insertDialog","props","newEl","createElement","type","callback","opts","rest","initialBodyOverflow","body","style","overflow","className","handleClose","val","data","el","uploadSoundSupport","ReactDOM","render","appendChild","types","MediaPlugin","toolbar","icon","ariaLabel","onClick","value","onChange","inline","Inline","create","isVoid","editing","ends","undefined","height","title","starts","src","url","width","change","insertInline","nodeIsThere","findDescendant","d","key","c","removeNodeByKey","focus","setNodeByKey","supports","node","object","name","deleteNode","e","preventDefault","renderNode","jsonData","toJSON","tag","handleEdit","createChange","edit","get","handleDelete","normalizeNode","textNodeMap","updateNodesArray","index","isMedia","indexOf","text","push","length","withoutNormalization","n","insertTextByKey","serialization","deserialize","dataset","typeIndex","Element","tagName","toLowerCase","firstChild","getAttribute","parseInt","out","serialize","divProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Inline } from 'slate';\nimport TheatersIcon from '@material-ui/icons/Theaters';\nimport VolumeUpIcon from '@material-ui/icons/VolumeUp';\nimport debug from 'debug';\n\nimport MediaDialog from './media-dialog';\nimport MediaToolbar from './media-toolbar';\nimport MediaWrapper from './media-wrapper';\n\nconst log = debug('@pie-lib:editable-html:plugins:image');\n\nconst removeDialogs = () => {\n const prevDialogs = document.querySelectorAll('.insert-media-dialog');\n\n prevDialogs.forEach((s) => s.remove());\n};\n\nexport const insertDialog = (props) => {\n const newEl = document.createElement('div');\n const { type, callback, opts, ...rest } = props;\n const initialBodyOverflow = document.body.style.overflow;\n\n removeDialogs();\n\n newEl.className = 'insert-media-dialog';\n document.body.style.overflow = 'hidden';\n\n const handleClose = (val, data) => {\n callback(val, data);\n newEl.remove();\n document.body.style.overflow = initialBodyOverflow;\n };\n\n const el = (\n <MediaDialog\n {...rest}\n uploadSoundSupport={opts.uploadSoundSupport}\n type={type}\n disablePortal={true}\n open={true}\n handleClose={handleClose}\n />\n );\n\n ReactDOM.render(el, newEl);\n\n document.body.appendChild(newEl);\n};\n\nconst types = ['audio', 'video'];\n\nexport default function MediaPlugin(type, opts) {\n const toolbar = {\n icon: type === 'audio' ? <VolumeUpIcon /> : <TheatersIcon />,\n ariaLabel: type === 'audio' ? 'Insert audio' : 'Insert video',\n onClick: (value, onChange) => {\n log('[toolbar] onClick');\n const inline = Inline.create({\n type: type,\n isVoid: true,\n data: {\n editing: false,\n ends: undefined,\n height: undefined,\n title: undefined,\n starts: undefined,\n src: undefined,\n url: undefined,\n width: undefined,\n },\n });\n\n const change = value.change().insertInline(inline);\n onChange(change);\n insertDialog({\n type,\n opts,\n callback: (val, data) => {\n const nodeIsThere = change.value.document.findDescendant((d) => d.key === inline.key);\n\n if (nodeIsThere) {\n if (!val) {\n const c = change.removeNodeByKey(inline.key);\n onChange(c, () => opts.focus());\n } else {\n const c = change.setNodeByKey(inline.key, { data });\n onChange(c, () => opts.focus('beginning', nodeIsThere));\n }\n } else {\n opts.focus();\n }\n },\n });\n },\n supports: (node) => node.object === 'inline' && node.type === type,\n };\n\n return {\n name: type,\n toolbar,\n deleteNode: (e, node, value, onChange) => {\n e.preventDefault();\n const change = value.change().removeNodeByKey(node.key);\n\n onChange(change);\n },\n renderNode(props) {\n if (props.node.type === type) {\n const { node, key } = props;\n const { data } = node;\n const jsonData = data.toJSON();\n const { src, height, width, editing, tag, ...rest } = jsonData;\n const handleEdit = () => {\n const change = opts.createChange();\n const c = change.setNodeByKey(key, {\n data: {\n ...jsonData,\n editing: true,\n },\n });\n\n opts.onChange(c, () => {\n insertDialog({\n ...jsonData,\n edit: true,\n type,\n opts,\n callback: (val, data) => {\n const { key } = node;\n\n const nodeIsThere = change.value.document.findDescendant(\n (d) => d.type === type && d.data.get('editing'),\n );\n\n if (nodeIsThere && val) {\n const c = change.setNodeByKey(key, { data, editing: false });\n opts.onChange(c, () => opts.focus('beginning', nodeIsThere));\n } else {\n opts.focus();\n }\n },\n });\n });\n };\n const handleDelete = () => {\n const change = opts.createChange();\n const c = change.removeNodeByKey(node.key);\n\n opts.onChange(c);\n };\n const style = {};\n\n if (width) {\n style.width = `${width}px`;\n }\n\n if (height) {\n style.height = `${height}px`;\n }\n\n if (tag === 'audio') {\n return (\n <MediaWrapper editor data-type={type} width={style.width} {...rest}>\n <audio controls=\"controls\" controlsList=\"nodownload\">\n <source type=\"audio/mp3\" src={src} />\n </audio>\n <MediaToolbar hideEdit onRemove={handleDelete} />\n </MediaWrapper>\n );\n }\n\n return (\n <MediaWrapper editor data-type={type} width={style.width} {...rest}>\n <iframe\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n src={src}\n editing={editing ? 1 : 0}\n {...rest}\n {...style}\n />\n <MediaToolbar onEdit={handleEdit} onRemove={handleDelete} />\n </MediaWrapper>\n );\n }\n },\n normalizeNode: (node) => {\n const textNodeMap = {};\n const updateNodesArray = [];\n let index = 0;\n\n if (node.object !== 'document') return;\n\n node.findDescendant((d) => {\n if (d.object === 'text') {\n textNodeMap[index] = d;\n }\n\n const isMedia = types.indexOf(d.type) >= 0;\n\n if (isMedia) {\n if (index > 0 && textNodeMap[index - 1] && textNodeMap[index - 1].text === '') {\n updateNodesArray.push(textNodeMap[index - 1]);\n }\n }\n\n index++;\n });\n\n if (!updateNodesArray.length) return;\n\n return (change) => {\n change.withoutNormalization(() => {\n updateNodesArray.forEach((n) => change.insertTextByKey(n.key, 0, ' '));\n });\n };\n },\n };\n}\n\nexport const serialization = {\n deserialize(el /*, next*/) {\n let type = el.dataset && el.dataset.type;\n let tag = 'iframe';\n let src;\n const typeIndex = types.indexOf(type);\n\n if (typeIndex < 0) {\n if (el instanceof Element && el.tagName.toLowerCase() === 'audio') {\n type = 'audio';\n tag = 'audio';\n src = el.firstChild?.getAttribute('src');\n } else {\n return;\n }\n }\n\n const { ends, starts, title, editing, url } = el.dataset || {};\n\n log('deserialize: ', name);\n const width = parseInt(el.getAttribute('width'), 10) || null;\n const height = parseInt(el.getAttribute('height'), 10) || null;\n\n const out = {\n object: 'inline',\n type: type,\n isVoid: true,\n data: {\n tag,\n src: src || el.getAttribute('src'),\n editing,\n ends,\n height,\n starts,\n title,\n width,\n url,\n },\n };\n log('return object: ', out);\n return out;\n },\n serialize(object /*, children*/) {\n const typeIndex = types.indexOf(object.type);\n\n if (typeIndex < 0) return;\n\n const type = types[typeIndex];\n\n const { data } = object;\n const editing = data.get('editing');\n const tag = data.get('tag');\n const ends = data.get('ends');\n const src = data.get('src');\n const starts = data.get('starts');\n const title = data.get('title');\n const width = data.get('width');\n const height = data.get('height');\n const url = data.get('url');\n const style = {};\n\n if (width) {\n style.width = `${width}px`;\n }\n\n if (height) {\n style.height = `${height}px`;\n }\n\n const divProps = {\n 'data-editing': editing,\n 'data-ends': ends,\n 'data-starts': starts,\n 'data-title': title,\n 'data-url': url,\n };\n const props = {\n ...style,\n src,\n };\n\n if (tag === 'audio') {\n return (\n <audio controls=\"controls\" controlsList=\"nodownload\">\n <source type=\"audio/mp3\" src={src} />\n </audio>\n );\n }\n\n return (\n <iframe\n data-type={type}\n src={src}\n {...divProps}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n {...props}\n />\n );\n },\n};\n"],"file":"index.js"}
@@ -87,6 +87,10 @@ var matchVimeoUrl = function matchVimeoUrl(url) {
87
87
  return url && /(http|https)?:\/\/(www\.)?(player\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^/]*)\/videos\/|)(video\/)?(\d+)(?:|\/\?)/.test(url);
88
88
  };
89
89
 
90
+ var matchDriveUrl = function matchDriveUrl(url) {
91
+ return url && /^https:\/\/drive\.google\.com\/(?:file\/d\/|drive\/(?:u\/\d+\/)?folders\/|uc\?id=)([a-zA-Z0-9_-]+)/.test(url);
92
+ };
93
+
90
94
  var matchSoundCloudUrl = function matchSoundCloudUrl(url) {
91
95
  if (!url) {
92
96
  return false;
@@ -120,6 +124,10 @@ var typeMap = {
120
124
  video: 'Video',
121
125
  audio: 'Audio'
122
126
  };
127
+ var tabsTypeMap = {
128
+ uploadFile: 'upload-file',
129
+ insertUrl: 'insert-url'
130
+ };
123
131
 
124
132
  var MediaDialog = /*#__PURE__*/function (_React$Component) {
125
133
  (0, _inherits2["default"])(MediaDialog, _React$Component);
@@ -188,56 +196,77 @@ var MediaDialog = /*#__PURE__*/function (_React$Component) {
188
196
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleStateChange", function (newState) {
189
197
  return _this.setState(newState, _this.formatUrl);
190
198
  });
191
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "urlChange", function (e) {
192
- var _ref = e.target || {},
193
- value = _ref.value;
194
-
195
- var type = _this.props.type;
196
-
197
- if (type && type === 'audio') {
198
- if (matchSoundCloudUrl(value)) {
199
- makeApiRequest(value).then(function (urlToUse) {
200
- _this.handleStateChange({
201
- urlToUse: urlToUse,
202
- invalid: !urlToUse,
203
- url: value
204
- });
205
- })["catch"](log);
206
- return;
207
- }
208
- } else if (type && type === 'video') {
209
- if (matchYoutubeUrl(value)) {
210
- var regExp = /^.*(youtu\.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/;
211
- var match = value.match(regExp);
212
- var id = match[2];
213
- var urlToUse = "https://youtube.com/embed/".concat(id);
214
- log('is youtube');
215
-
199
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "checkAudio", function (value) {
200
+ if (matchSoundCloudUrl(value)) {
201
+ makeApiRequest(value).then(function (urlToUse) {
216
202
  _this.handleStateChange({
217
203
  urlToUse: urlToUse,
218
- url: value,
219
- invalid: false
204
+ invalid: !urlToUse,
205
+ url: value
220
206
  });
207
+ })["catch"](log);
208
+ }
209
+ });
210
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "checkVideo", function (value) {
211
+ if (matchYoutubeUrl(value)) {
212
+ var regExp = /^.*(youtu\.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/;
213
+ var match = value.match(regExp);
214
+ var id = match[2];
215
+ var urlToUse = "https://youtube.com/embed/".concat(id);
216
+ log('is youtube');
217
+
218
+ _this.handleStateChange({
219
+ urlToUse: urlToUse,
220
+ url: value,
221
+ invalid: false
222
+ });
223
+ }
221
224
 
222
- return;
223
- }
225
+ if (matchVimeoUrl(value)) {
226
+ var _id = value.replace(/.*vimeo.com\/(.*)/g, '$1');
224
227
 
225
- if (matchVimeoUrl(value)) {
226
- var _id = value.replace(/.*vimeo.com\/(.*)/g, '$1');
228
+ var _urlToUse2 = "https://player.vimeo.com/video/".concat(_id);
227
229
 
228
- var _urlToUse2 = "https://player.vimeo.com/video/".concat(_id);
230
+ log('is vimeo');
229
231
 
230
- log('is vimeo');
232
+ _this.handleStateChange({
233
+ urlToUse: _urlToUse2,
234
+ url: value,
235
+ ends: null,
236
+ invalid: false
237
+ });
238
+ }
231
239
 
232
- _this.handleStateChange({
233
- urlToUse: _urlToUse2,
234
- url: value,
235
- ends: null,
236
- invalid: false
237
- });
240
+ if (matchDriveUrl(value)) {
241
+ // https://drive.google.com/file/d/11QkK_gUO068amNvZBm9cxZpKX74WYb8q/view
242
+ var _id2 = value.replace(/^https:\/\/drive\.google\.com\/(?:file\/d\/|drive\/(?:u\/\d+\/)?folders\/|uc\?id=)([a-zA-Z0-9_-]+)\/.*/, '$1');
238
243
 
239
- return;
240
- }
244
+ var _urlToUse3 = "https://drive.google.com/file/d/".concat(_id2, "/preview");
245
+
246
+ log('is google drive');
247
+
248
+ _this.handleStateChange({
249
+ urlToUse: _urlToUse3,
250
+ url: value,
251
+ ends: null,
252
+ invalid: false
253
+ });
254
+ }
255
+ });
256
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "urlChange", function (e) {
257
+ var _ref = e.target || {},
258
+ value = _ref.value;
259
+
260
+ var type = _this.props.type;
261
+
262
+ if (type && type === 'audio') {
263
+ _this.checkAudio();
264
+
265
+ return;
266
+ } else if (type && type === 'video') {
267
+ _this.checkVideo(value);
268
+
269
+ return;
241
270
  }
242
271
 
243
272
  _this.handleStateChange({
@@ -256,7 +285,7 @@ var MediaDialog = /*#__PURE__*/function (_React$Component) {
256
285
  var _this$state2 = _this.state,
257
286
  tabValue = _this$state2.tabValue,
258
287
  fileUpload = _this$state2.fileUpload;
259
- var isInsertURL = tabValue === 0;
288
+ var isInsertURL = tabValue === tabsTypeMap.insertUrl;
260
289
 
261
290
  if (!val) {
262
291
  if (fileUpload.url) {
@@ -327,7 +356,8 @@ var MediaDialog = /*#__PURE__*/function (_React$Component) {
327
356
 
328
357
  _this.setState({
329
358
  fileUpload: _objectSpread(_objectSpread({}, _this.state.fileUpload), {}, {
330
- url: dataURL
359
+ url: dataURL,
360
+ mimeType: fileChosen.type
331
361
  })
332
362
  });
333
363
  };
@@ -401,7 +431,8 @@ var MediaDialog = /*#__PURE__*/function (_React$Component) {
401
431
  _this.setState({
402
432
  fileUpload: _objectSpread(_objectSpread({}, _this.state.fileUpload), {}, {
403
433
  loading: false,
404
- url: ''
434
+ url: '',
435
+ mimeType: ''
405
436
  })
406
437
  });
407
438
 
@@ -412,13 +443,16 @@ var MediaDialog = /*#__PURE__*/function (_React$Component) {
412
443
  }
413
444
  }, _callee2);
414
445
  })));
415
- var _src = props.src,
416
- _starts = props.starts,
417
- _ends = props.ends,
446
+ var _ends = props.ends,
418
447
  _height = props.height,
448
+ _src = props.src,
449
+ _starts = props.starts,
450
+ _type = props.type,
451
+ uploadSoundSupport = props.uploadSoundSupport,
419
452
  _url = props.url,
420
453
  _urlToUse = props.urlToUse,
421
454
  _width = props.width;
455
+ var showUploadFile = (uploadSoundSupport === null || uploadSoundSupport === void 0 ? void 0 : uploadSoundSupport.add) && (uploadSoundSupport === null || uploadSoundSupport === void 0 ? void 0 : uploadSoundSupport["delete"]) && _type !== 'video';
422
456
  _this.state = {
423
457
  ends: _ends || 0,
424
458
  url: _url,
@@ -428,12 +462,14 @@ var MediaDialog = /*#__PURE__*/function (_React$Component) {
428
462
  invalid: false,
429
463
  starts: _starts || 0,
430
464
  width: _width || 560,
431
- tabValue: 0,
465
+ // default selected tab should be upload file if available
466
+ tabValue: showUploadFile ? tabsTypeMap.uploadFile : tabsTypeMap.insertUrl,
432
467
  fileUpload: {
433
468
  error: null,
434
469
  loading: false,
435
470
  scheduled: false,
436
- url: ''
471
+ url: '',
472
+ mimeType: ''
437
473
  }
438
474
  };
439
475
  return _this;
@@ -469,14 +505,16 @@ var MediaDialog = /*#__PURE__*/function (_React$Component) {
469
505
  starts = _this$state4.starts,
470
506
  width = _this$state4.width,
471
507
  url = _this$state4.url,
508
+ mimeType = _this$state4.mimeType,
472
509
  formattedUrl = _this$state4.formattedUrl,
473
510
  updating = _this$state4.updating,
474
511
  tabValue = _this$state4.tabValue,
475
512
  fileUpload = _this$state4.fileUpload;
476
513
  var isYoutube = matchYoutubeUrl(url);
477
- var isInsertURL = tabValue === 0;
478
- var isUploadMedia = tabValue === 1;
514
+ var isInsertURL = tabValue === tabsTypeMap.insertUrl;
515
+ var isUploadMedia = tabValue === tabsTypeMap.uploadFile;
479
516
  var submitIsDisabled = isInsertURL ? invalid || url === null || url === undefined : !fileUpload.url || fileUpload.scheduled;
517
+ var showUploadFile = (uploadSoundSupport === null || uploadSoundSupport === void 0 ? void 0 : uploadSoundSupport.add) && (uploadSoundSupport === null || uploadSoundSupport === void 0 ? void 0 : uploadSoundSupport["delete"]) && type !== 'video';
480
518
  return /*#__PURE__*/_react["default"].createElement(_Dialog["default"], {
481
519
  classes: {
482
520
  paper: classes.paper
@@ -499,11 +537,13 @@ var MediaDialog = /*#__PURE__*/function (_React$Component) {
499
537
  tabValue: value
500
538
  });
501
539
  }
502
- }, /*#__PURE__*/_react["default"].createElement(_Tab["default"], {
503
- label: type === 'video' ? 'Insert YouTube or Vimeo URL' : 'Insert SoundCloud URL'
504
- }), uploadSoundSupport !== null && uploadSoundSupport !== void 0 && uploadSoundSupport.add && uploadSoundSupport !== null && uploadSoundSupport !== void 0 && uploadSoundSupport["delete"] && type !== 'video' ? /*#__PURE__*/_react["default"].createElement(_Tab["default"], {
540
+ }, showUploadFile ? /*#__PURE__*/_react["default"].createElement(_Tab["default"], {
541
+ value: tabsTypeMap.uploadFile,
505
542
  label: "Upload file"
506
- }) : null)), isInsertURL && /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_TextField["default"], {
543
+ }) : null, /*#__PURE__*/_react["default"].createElement(_Tab["default"], {
544
+ value: tabsTypeMap.insertUrl,
545
+ label: type === 'video' ? 'Insert YouTube, Vimeo, or Google Drive URL' : 'Insert SoundCloud URL'
546
+ }))), isInsertURL && /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_TextField["default"], {
507
547
  autoFocus: true,
508
548
  error: invalid,
509
549
  helperText: invalid ? 'Invalid URL' : '',
@@ -571,9 +611,10 @@ var MediaDialog = /*#__PURE__*/function (_React$Component) {
571
611
  }, /*#__PURE__*/_react["default"].createElement("div", null, fileUpload.url ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
572
612
  className: classes.row
573
613
  }, /*#__PURE__*/_react["default"].createElement("audio", {
574
- controls: "controls"
614
+ controls: "controls",
615
+ controlsList: "nodownload"
575
616
  }, /*#__PURE__*/_react["default"].createElement("source", {
576
- type: "audio/mp3",
617
+ type: mimeType,
577
618
  src: fileUpload.url
578
619
  })), /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
579
620
  "aria-label": "delete",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/plugins/media/media-dialog.js"],"names":["log","matchYoutubeUrl","url","p","match","matchVimeoUrl","test","matchSoundCloudUrl","regexp","makeApiRequest","Promise","resolve","fetch","then","response","json","d","document","createElement","innerHTML","html","iframe","querySelector","src","err","typeMap","video","audio","MediaDialog","props","state","urlToUse","starts","ends","isYoutube","isVimeo","formattedUrl","params","paramName","paramStart","push","length","join","callback","setState","updating","newState","formatUrl","e","target","value","type","handleStateChange","invalid","regExp","id","replace","val","handleClose","tabValue","fileUpload","isInsertURL","handleRemoveFile","height","width","tag","loading","scheduled","preventDefault","error","fileChosen","files","reader","FileReader","onload","dataURL","result","readAsDataURL","uploadSoundSupport","add","done","console","handleDone","bind","undefined","urlChange","classes","open","disablePortal","edit","isUploadMedia","submitIsDisabled","paper","row","event","root","properties","changeHandler","uploadInput","deleteIcon","input","handleUploadFile","React","Component","PropTypes","object","isRequired","bool","func","shape","string","number","styles","theme","minWidth","padding","display","flexDirection","rowItem","marginRight","spacing","unit","cursor","active","color","primary","borderBottom","marginTop","palette","main","marginLeft"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport debug from 'debug';\nimport { color } from '@pie-lib/render-ui';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport MuiTabs from '@material-ui/core/Tabs';\nimport MuiTab from '@material-ui/core/Tab';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport TextField from '@material-ui/core/TextField';\nimport Typography from '@material-ui/core/Typography';\nimport IconButton from '@material-ui/core/IconButton';\nimport ActionDelete from '@material-ui/icons/Delete';\n\nconst log = debug('@pie-lib:editable-html:plugins:media:dialog');\n\nconst matchYoutubeUrl = (url) => {\n if (!url) {\n return false;\n }\n\n const p = /^(?:https?:\\/\\/)?(?:m\\.|www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})(?:\\S+)?$/;\n if (url.match(p)) {\n return url.match(p)[1];\n }\n return false;\n};\n\nconst matchVimeoUrl = (url) =>\n url &&\n /(http|https)?:\\/\\/(www\\.)?(player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/([^/]*)\\/videos\\/|)(video\\/)?(\\d+)(?:|\\/\\?)/.test(\n url,\n );\n\nconst matchSoundCloudUrl = (url) => {\n if (!url) {\n return false;\n }\n\n const regexp = /^https?:\\/\\/(soundcloud\\.com|snd\\.sc)\\/(.*)$/;\n return url.match(regexp) && url.match(regexp)[2];\n};\n\nconst makeApiRequest = (url) => {\n return new Promise((resolve) => {\n try {\n fetch(`https://soundcloud.com/oembed?format=json&url=${url}`)\n .then((response) => response.json())\n .then((json) => {\n const d = document.createElement('div');\n\n d.innerHTML = json.html;\n\n const iframe = d.querySelector('iframe');\n\n resolve(iframe.src);\n })\n .catch((err) => {\n resolve('');\n log(err);\n });\n } catch (err) {\n resolve('');\n }\n });\n};\n\nconst typeMap = {\n video: 'Video',\n audio: 'Audio',\n};\n\nexport class MediaDialog extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n open: PropTypes.bool,\n edit: PropTypes.bool,\n disablePortal: PropTypes.bool,\n handleClose: PropTypes.func,\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func,\n delete: PropTypes.func,\n }),\n type: PropTypes.string,\n src: PropTypes.string,\n url: PropTypes.string,\n urlToUse: PropTypes.string,\n starts: PropTypes.number,\n ends: PropTypes.number,\n height: PropTypes.number,\n width: PropTypes.number,\n };\n\n constructor(props) {\n super(props);\n\n const { src, starts, ends, height, url, urlToUse, width } = props;\n\n this.state = {\n ends: ends || 0,\n url: url,\n urlToUse: urlToUse,\n formattedUrl: src,\n height: height || 315,\n invalid: false,\n starts: starts || 0,\n width: width || 560,\n tabValue: 0,\n fileUpload: {\n error: null,\n loading: false,\n scheduled: false,\n url: '',\n },\n };\n }\n\n componentDidMount() {\n if (this.props.url) {\n this.urlChange({\n target: {\n value: this.props.url,\n },\n });\n }\n }\n\n formatUrl = () => {\n const { url, urlToUse, starts, ends } = this.state;\n const isYoutube = matchYoutubeUrl(url);\n const isVimeo = matchVimeoUrl(url);\n let formattedUrl = urlToUse;\n\n if ((isYoutube || isVimeo) && urlToUse) {\n const params = [];\n\n let paramName;\n let paramStart;\n\n switch (true) {\n case isVimeo:\n paramName = 't';\n paramStart = '#';\n break;\n case isYoutube:\n paramName = 'start';\n paramStart = '?';\n break;\n default:\n paramName = 'start';\n paramStart = '?';\n }\n\n if (starts) {\n params.push(`${paramName}=${starts}`);\n }\n\n if (ends) {\n params.push(`end=${ends}`);\n }\n\n formattedUrl = `${urlToUse}${params.length ? paramStart : ''}${params.join('&')}`;\n }\n\n const callback = () => this.setState({ formattedUrl, updating: false });\n\n this.setState({ formattedUrl: null, updating: true }, callback);\n };\n\n handleStateChange = (newState) => this.setState(newState, this.formatUrl);\n\n urlChange = (e) => {\n const { value } = e.target || {};\n const { type } = this.props;\n\n if (type && type === 'audio') {\n if (matchSoundCloudUrl(value)) {\n makeApiRequest(value)\n .then((urlToUse) => {\n this.handleStateChange({\n urlToUse,\n invalid: !urlToUse,\n url: value,\n });\n })\n .catch(log);\n\n return;\n }\n } else if (type && type === 'video') {\n if (matchYoutubeUrl(value)) {\n const regExp = /^.*(youtu\\.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n const match = value.match(regExp);\n const id = match[2];\n const urlToUse = `https://youtube.com/embed/${id}`;\n\n log('is youtube');\n\n this.handleStateChange({\n urlToUse,\n url: value,\n invalid: false,\n });\n\n return;\n }\n\n if (matchVimeoUrl(value)) {\n const id = value.replace(/.*vimeo.com\\/(.*)/g, '$1');\n const urlToUse = `https://player.vimeo.com/video/${id}`;\n\n log('is vimeo');\n\n this.handleStateChange({\n urlToUse,\n url: value,\n ends: null,\n invalid: false,\n });\n\n return;\n }\n }\n\n this.handleStateChange({\n urlToUse: null,\n url: null,\n invalid: true,\n });\n };\n\n changeHandler = (type) => (e) => this.handleStateChange({ [type]: e.target.value });\n\n handleDone = (val) => {\n const { handleClose } = this.props;\n const { tabValue, fileUpload } = this.state;\n const isInsertURL = tabValue === 0;\n\n if (!val) {\n if (fileUpload.url) {\n this.handleRemoveFile();\n }\n\n handleClose(val);\n return;\n }\n\n if (isInsertURL) {\n const { ends, height, url, urlToUse, formattedUrl, starts, width } = this.state;\n\n handleClose(val, {\n tag: 'iframe',\n ends,\n height,\n starts,\n width,\n url,\n urlToUse,\n src: formattedUrl,\n });\n return;\n }\n\n if (!fileUpload.loading) {\n handleClose(val, {\n tag: 'audio',\n src: fileUpload.url,\n });\n return;\n }\n\n this.setState({\n fileUpload: {\n ...fileUpload,\n scheduled: true,\n },\n });\n };\n\n handleUploadFile = async (e) => {\n e.preventDefault();\n\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n error: null,\n loading: true,\n },\n });\n\n const fileChosen = e.target.files[0];\n\n const reader = new FileReader();\n\n reader.onload = () => {\n const dataURL = reader.result;\n\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n url: dataURL,\n },\n });\n };\n reader.readAsDataURL(fileChosen);\n\n this.props.uploadSoundSupport.add({\n fileChosen,\n done: (err, src) => {\n log('done: err:', err);\n if (err) {\n //eslint-disable-next-line\n console.log(err);\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n scheduled: false,\n loading: false,\n error: err,\n },\n });\n return;\n }\n\n const { fileUpload } = this.state;\n const callback = fileUpload && fileUpload.scheduled ? this.handleDone.bind(this, true) : undefined;\n\n this.setState(\n {\n fileUpload: {\n ...fileUpload,\n scheduled: false,\n loading: false,\n url: src,\n },\n },\n callback,\n );\n },\n });\n };\n\n handleRemoveFile = async () => {\n this.props.uploadSoundSupport.delete(this.state.fileUpload.url, (err) => {\n if (err) {\n //eslint-disable-next-line\n console.log(err);\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n error: err,\n },\n });\n }\n });\n\n // we should put it inside uploadSoundSupport.delete but we can leave it here for testing purposes\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n loading: false,\n url: '',\n },\n });\n };\n\n render() {\n const { classes, open, disablePortal, type, edit, uploadSoundSupport } = this.props;\n const { ends, height, invalid, starts, width, url, formattedUrl, updating, tabValue, fileUpload } = this.state;\n const isYoutube = matchYoutubeUrl(url);\n const isInsertURL = tabValue === 0;\n const isUploadMedia = tabValue === 1;\n const submitIsDisabled = isInsertURL\n ? invalid || url === null || url === undefined\n : !fileUpload.url || fileUpload.scheduled;\n\n return (\n <Dialog\n classes={{\n paper: classes.paper,\n }}\n disablePortal={disablePortal}\n open={open}\n onClose={() => this.handleDone(false)}\n aria-labelledby=\"form-dialog-title\"\n >\n <DialogTitle id=\"form-dialog-title\">Insert {typeMap[type]}</DialogTitle>\n <DialogContent>\n <div>\n <div className={classes.row}>\n <MuiTabs\n indicatorColor=\"primary\"\n value={tabValue}\n onChange={(event, value) => {\n this.setState({ tabValue: value });\n }}\n >\n <MuiTab label={type === 'video' ? 'Insert YouTube or Vimeo URL' : 'Insert SoundCloud URL'} />\n {uploadSoundSupport?.add && uploadSoundSupport?.delete && type !== 'video' ? (\n <MuiTab label=\"Upload file\" />\n ) : null}\n </MuiTabs>\n </div>\n {isInsertURL && (\n <div>\n <TextField\n autoFocus\n error={invalid}\n helperText={invalid ? 'Invalid URL' : ''}\n margin=\"dense\"\n id=\"name\"\n label=\"URL\"\n placeholder={`Paste URL of ${type}...`}\n type=\"text\"\n onChange={this.urlChange}\n value={url}\n fullWidth\n />\n {type === 'video' && (\n <DialogContent\n classes={{\n root: classes.properties,\n }}\n >\n <DialogContentText>Video Properties</DialogContentText>\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"width\"\n label=\"Width\"\n type=\"number\"\n placeholder=\"Width\"\n value={width}\n onChange={this.changeHandler('width')}\n />\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"height\"\n label=\"Height\"\n type=\"number\"\n placeholder=\"Height\"\n value={height}\n onChange={this.changeHandler('height')}\n />\n </DialogContent>\n )}\n {formattedUrl && (\n <iframe\n width={width}\n height={height}\n src={formattedUrl}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n />\n )}\n {type === 'video' && (formattedUrl || updating) && !invalid && (\n <React.Fragment>\n <DialogContent\n classes={{\n root: classes.properties,\n }}\n >\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"starts\"\n label=\"Starts\"\n type=\"number\"\n placeholder=\"Starts\"\n value={starts}\n onChange={this.changeHandler('starts')}\n />\n {isYoutube && (\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"ends\"\n label=\"Ends\"\n type=\"number\"\n placeholder=\"Ends\"\n value={ends}\n onChange={this.changeHandler('ends')}\n />\n )}\n </DialogContent>\n </React.Fragment>\n )}\n </div>\n )}\n {isUploadMedia && (\n <div className={classes.uploadInput}>\n <div>\n {fileUpload.url ? (\n <>\n <div className={classes.row}>\n <audio controls=\"controls\">\n <source type=\"audio/mp3\" src={fileUpload.url} />\n </audio>\n <IconButton aria-label=\"delete\" className={classes.deleteIcon} onClick={this.handleRemoveFile}>\n <ActionDelete />\n </IconButton>\n </div>\n {!fileUpload.scheduled && fileUpload.loading ? (\n <Typography variant=\"subheading\">Loading...</Typography>\n ) : null}\n {fileUpload.scheduled ? (\n <Typography variant=\"subheading\">\n Waiting for Upload to finish, then inserting item...\n </Typography>\n ) : null}\n </>\n ) : !fileUpload.loading ? (\n <input accept=\"audio/*\" className={classes.input} onChange={this.handleUploadFile} type=\"file\" />\n ) : null}\n {!!fileUpload.error && (\n <Typography className={classes.error} variant=\"caption\">\n {fileUpload.error}\n </Typography>\n )}\n </div>\n </div>\n )}\n </div>\n </DialogContent>\n <DialogActions>\n <Button onClick={() => this.handleDone(false)} color=\"primary\">\n Cancel\n </Button>\n <Button disabled={submitIsDisabled} onClick={() => this.handleDone(true)} color=\"primary\">\n {edit ? 'Update' : 'Insert'}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nconst styles = (theme) => ({\n paper: {\n minWidth: '500px',\n },\n properties: {\n padding: 0,\n },\n row: {\n display: 'flex',\n flexDirection: 'space-between',\n },\n rowItem: {\n marginRight: theme.spacing.unit * 1.5,\n cursor: 'pointer',\n },\n active: {\n color: color.primary(),\n borderBottom: `2px solid ${color.primary()}`,\n },\n uploadInput: {\n marginTop: theme.spacing.unit * 1.5,\n },\n error: {\n marginTop: theme.spacing.unit * 1.5,\n color: theme.palette.error.main,\n },\n deleteIcon: {\n marginLeft: theme.spacing.unit * 1.5,\n },\n});\n\nexport default withStyles(styles)(MediaDialog);\n"],"file":"media-dialog.js"}
1
+ {"version":3,"sources":["../../../src/plugins/media/media-dialog.js"],"names":["log","matchYoutubeUrl","url","p","match","matchVimeoUrl","test","matchDriveUrl","matchSoundCloudUrl","regexp","makeApiRequest","Promise","resolve","fetch","then","response","json","d","document","createElement","innerHTML","html","iframe","querySelector","src","err","typeMap","video","audio","tabsTypeMap","uploadFile","insertUrl","MediaDialog","props","state","urlToUse","starts","ends","isYoutube","isVimeo","formattedUrl","params","paramName","paramStart","push","length","join","callback","setState","updating","newState","formatUrl","value","handleStateChange","invalid","regExp","id","replace","e","target","type","checkAudio","checkVideo","val","handleClose","tabValue","fileUpload","isInsertURL","handleRemoveFile","height","width","tag","loading","scheduled","preventDefault","error","fileChosen","files","reader","FileReader","onload","dataURL","result","mimeType","readAsDataURL","uploadSoundSupport","add","done","console","handleDone","bind","undefined","showUploadFile","urlChange","classes","open","disablePortal","edit","isUploadMedia","submitIsDisabled","paper","row","event","root","properties","changeHandler","uploadInput","deleteIcon","input","handleUploadFile","React","Component","PropTypes","object","isRequired","bool","func","shape","string","number","styles","theme","minWidth","padding","display","flexDirection","rowItem","marginRight","spacing","unit","cursor","active","color","primary","borderBottom","marginTop","palette","main","marginLeft"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport debug from 'debug';\nimport { color } from '@pie-lib/render-ui';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport MuiTabs from '@material-ui/core/Tabs';\nimport MuiTab from '@material-ui/core/Tab';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport TextField from '@material-ui/core/TextField';\nimport Typography from '@material-ui/core/Typography';\nimport IconButton from '@material-ui/core/IconButton';\nimport ActionDelete from '@material-ui/icons/Delete';\n\nconst log = debug('@pie-lib:editable-html:plugins:media:dialog');\n\nconst matchYoutubeUrl = (url) => {\n if (!url) {\n return false;\n }\n\n const p = /^(?:https?:\\/\\/)?(?:m\\.|www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})(?:\\S+)?$/;\n if (url.match(p)) {\n return url.match(p)[1];\n }\n return false;\n};\n\nconst matchVimeoUrl = (url) =>\n url &&\n /(http|https)?:\\/\\/(www\\.)?(player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/([^/]*)\\/videos\\/|)(video\\/)?(\\d+)(?:|\\/\\?)/.test(\n url,\n );\n\nconst matchDriveUrl = (url) =>\n url && /^https:\\/\\/drive\\.google\\.com\\/(?:file\\/d\\/|drive\\/(?:u\\/\\d+\\/)?folders\\/|uc\\?id=)([a-zA-Z0-9_-]+)/.test(url);\n\nconst matchSoundCloudUrl = (url) => {\n if (!url) {\n return false;\n }\n\n const regexp = /^https?:\\/\\/(soundcloud\\.com|snd\\.sc)\\/(.*)$/;\n return url.match(regexp) && url.match(regexp)[2];\n};\n\nconst makeApiRequest = (url) => {\n return new Promise((resolve) => {\n try {\n fetch(`https://soundcloud.com/oembed?format=json&url=${url}`)\n .then((response) => response.json())\n .then((json) => {\n const d = document.createElement('div');\n\n d.innerHTML = json.html;\n\n const iframe = d.querySelector('iframe');\n\n resolve(iframe.src);\n })\n .catch((err) => {\n resolve('');\n log(err);\n });\n } catch (err) {\n resolve('');\n }\n });\n};\n\nconst typeMap = {\n video: 'Video',\n audio: 'Audio',\n};\n\nconst tabsTypeMap = {\n uploadFile: 'upload-file',\n insertUrl: 'insert-url',\n};\n\nexport class MediaDialog extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n open: PropTypes.bool,\n edit: PropTypes.bool,\n disablePortal: PropTypes.bool,\n handleClose: PropTypes.func,\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func,\n delete: PropTypes.func,\n }),\n type: PropTypes.string,\n src: PropTypes.string,\n url: PropTypes.string,\n urlToUse: PropTypes.string,\n starts: PropTypes.number,\n ends: PropTypes.number,\n height: PropTypes.number,\n width: PropTypes.number,\n };\n\n constructor(props) {\n super(props);\n\n const { ends, height, src, starts, type, uploadSoundSupport, url, urlToUse, width } = props;\n const showUploadFile = uploadSoundSupport?.add && uploadSoundSupport?.delete && type !== 'video';\n\n this.state = {\n ends: ends || 0,\n url: url,\n urlToUse: urlToUse,\n formattedUrl: src,\n height: height || 315,\n invalid: false,\n starts: starts || 0,\n width: width || 560,\n // default selected tab should be upload file if available\n tabValue: showUploadFile ? tabsTypeMap.uploadFile : tabsTypeMap.insertUrl,\n fileUpload: {\n error: null,\n loading: false,\n scheduled: false,\n url: '',\n mimeType: '',\n },\n };\n }\n\n componentDidMount() {\n if (this.props.url) {\n this.urlChange({\n target: {\n value: this.props.url,\n },\n });\n }\n }\n\n formatUrl = () => {\n const { url, urlToUse, starts, ends } = this.state;\n const isYoutube = matchYoutubeUrl(url);\n const isVimeo = matchVimeoUrl(url);\n let formattedUrl = urlToUse;\n\n if ((isYoutube || isVimeo) && urlToUse) {\n const params = [];\n\n let paramName;\n let paramStart;\n\n switch (true) {\n case isVimeo:\n paramName = 't';\n paramStart = '#';\n break;\n case isYoutube:\n paramName = 'start';\n paramStart = '?';\n break;\n default:\n paramName = 'start';\n paramStart = '?';\n }\n\n if (starts) {\n params.push(`${paramName}=${starts}`);\n }\n\n if (ends) {\n params.push(`end=${ends}`);\n }\n\n formattedUrl = `${urlToUse}${params.length ? paramStart : ''}${params.join('&')}`;\n }\n\n const callback = () => this.setState({ formattedUrl, updating: false });\n\n this.setState({ formattedUrl: null, updating: true }, callback);\n };\n\n handleStateChange = (newState) => this.setState(newState, this.formatUrl);\n\n checkAudio = (value) => {\n if (matchSoundCloudUrl(value)) {\n makeApiRequest(value)\n .then((urlToUse) => {\n this.handleStateChange({\n urlToUse,\n invalid: !urlToUse,\n url: value,\n });\n })\n .catch(log);\n }\n };\n\n checkVideo = (value) => {\n if (matchYoutubeUrl(value)) {\n const regExp = /^.*(youtu\\.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n const match = value.match(regExp);\n const id = match[2];\n const urlToUse = `https://youtube.com/embed/${id}`;\n\n log('is youtube');\n\n this.handleStateChange({\n urlToUse,\n url: value,\n invalid: false,\n });\n }\n\n if (matchVimeoUrl(value)) {\n const id = value.replace(/.*vimeo.com\\/(.*)/g, '$1');\n const urlToUse = `https://player.vimeo.com/video/${id}`;\n\n log('is vimeo');\n\n this.handleStateChange({\n urlToUse,\n url: value,\n ends: null,\n invalid: false,\n });\n }\n\n if (matchDriveUrl(value)) {\n // https://drive.google.com/file/d/11QkK_gUO068amNvZBm9cxZpKX74WYb8q/view\n const id = value.replace(\n /^https:\\/\\/drive\\.google\\.com\\/(?:file\\/d\\/|drive\\/(?:u\\/\\d+\\/)?folders\\/|uc\\?id=)([a-zA-Z0-9_-]+)\\/.*/,\n '$1',\n );\n const urlToUse = `https://drive.google.com/file/d/${id}/preview`;\n\n log('is google drive');\n\n this.handleStateChange({\n urlToUse,\n url: value,\n ends: null,\n invalid: false,\n });\n }\n };\n\n urlChange = (e) => {\n const { value } = e.target || {};\n const { type } = this.props;\n\n if (type && type === 'audio') {\n this.checkAudio();\n return;\n } else if (type && type === 'video') {\n this.checkVideo(value);\n return;\n }\n\n this.handleStateChange({\n urlToUse: null,\n url: null,\n invalid: true,\n });\n };\n\n changeHandler = (type) => (e) => this.handleStateChange({ [type]: e.target.value });\n\n handleDone = (val) => {\n const { handleClose } = this.props;\n const { tabValue, fileUpload } = this.state;\n const isInsertURL = tabValue === tabsTypeMap.insertUrl;\n\n if (!val) {\n if (fileUpload.url) {\n this.handleRemoveFile();\n }\n\n handleClose(val);\n return;\n }\n\n if (isInsertURL) {\n const { ends, height, url, urlToUse, formattedUrl, starts, width } = this.state;\n\n handleClose(val, {\n tag: 'iframe',\n ends,\n height,\n starts,\n width,\n url,\n urlToUse,\n src: formattedUrl,\n });\n return;\n }\n\n if (!fileUpload.loading) {\n handleClose(val, {\n tag: 'audio',\n src: fileUpload.url,\n });\n return;\n }\n\n this.setState({\n fileUpload: {\n ...fileUpload,\n scheduled: true,\n },\n });\n };\n\n handleUploadFile = async (e) => {\n e.preventDefault();\n\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n error: null,\n loading: true,\n },\n });\n\n const fileChosen = e.target.files[0];\n\n const reader = new FileReader();\n\n reader.onload = () => {\n const dataURL = reader.result;\n\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n url: dataURL,\n mimeType: fileChosen.type,\n },\n });\n };\n reader.readAsDataURL(fileChosen);\n\n this.props.uploadSoundSupport.add({\n fileChosen,\n done: (err, src) => {\n log('done: err:', err);\n if (err) {\n //eslint-disable-next-line\n console.log(err);\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n scheduled: false,\n loading: false,\n error: err,\n },\n });\n return;\n }\n\n const { fileUpload } = this.state;\n const callback = fileUpload && fileUpload.scheduled ? this.handleDone.bind(this, true) : undefined;\n\n this.setState(\n {\n fileUpload: {\n ...fileUpload,\n scheduled: false,\n loading: false,\n url: src,\n },\n },\n callback,\n );\n },\n });\n };\n\n handleRemoveFile = async () => {\n this.props.uploadSoundSupport.delete(this.state.fileUpload.url, (err) => {\n if (err) {\n //eslint-disable-next-line\n console.log(err);\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n error: err,\n },\n });\n }\n });\n\n // we should put it inside uploadSoundSupport.delete but we can leave it here for testing purposes\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n loading: false,\n url: '',\n mimeType: '',\n },\n });\n };\n\n render() {\n const { classes, open, disablePortal, type, edit, uploadSoundSupport } = this.props;\n const {\n ends,\n height,\n invalid,\n starts,\n width,\n url,\n mimeType,\n formattedUrl,\n updating,\n tabValue,\n fileUpload,\n } = this.state;\n const isYoutube = matchYoutubeUrl(url);\n const isInsertURL = tabValue === tabsTypeMap.insertUrl;\n const isUploadMedia = tabValue === tabsTypeMap.uploadFile;\n const submitIsDisabled = isInsertURL\n ? invalid || url === null || url === undefined\n : !fileUpload.url || fileUpload.scheduled;\n const showUploadFile = uploadSoundSupport?.add && uploadSoundSupport?.delete && type !== 'video';\n\n return (\n <Dialog\n classes={{\n paper: classes.paper,\n }}\n disablePortal={disablePortal}\n open={open}\n onClose={() => this.handleDone(false)}\n aria-labelledby=\"form-dialog-title\"\n >\n <DialogTitle id=\"form-dialog-title\">Insert {typeMap[type]}</DialogTitle>\n <DialogContent>\n <div>\n <div className={classes.row}>\n <MuiTabs\n indicatorColor=\"primary\"\n value={tabValue}\n onChange={(event, value) => {\n this.setState({ tabValue: value });\n }}\n >\n {showUploadFile ? <MuiTab value={tabsTypeMap.uploadFile} label=\"Upload file\" /> : null}\n <MuiTab\n value={tabsTypeMap.insertUrl}\n label={type === 'video' ? 'Insert YouTube, Vimeo, or Google Drive URL' : 'Insert SoundCloud URL'}\n />\n </MuiTabs>\n </div>\n {isInsertURL && (\n <div>\n <TextField\n autoFocus\n error={invalid}\n helperText={invalid ? 'Invalid URL' : ''}\n margin=\"dense\"\n id=\"name\"\n label=\"URL\"\n placeholder={`Paste URL of ${type}...`}\n type=\"text\"\n onChange={this.urlChange}\n value={url}\n fullWidth\n />\n {type === 'video' && (\n <DialogContent\n classes={{\n root: classes.properties,\n }}\n >\n <DialogContentText>Video Properties</DialogContentText>\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"width\"\n label=\"Width\"\n type=\"number\"\n placeholder=\"Width\"\n value={width}\n onChange={this.changeHandler('width')}\n />\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"height\"\n label=\"Height\"\n type=\"number\"\n placeholder=\"Height\"\n value={height}\n onChange={this.changeHandler('height')}\n />\n </DialogContent>\n )}\n {formattedUrl && (\n <iframe\n width={width}\n height={height}\n src={formattedUrl}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n />\n )}\n {type === 'video' && (formattedUrl || updating) && !invalid && (\n <React.Fragment>\n <DialogContent\n classes={{\n root: classes.properties,\n }}\n >\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"starts\"\n label=\"Starts\"\n type=\"number\"\n placeholder=\"Starts\"\n value={starts}\n onChange={this.changeHandler('starts')}\n />\n {isYoutube && (\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"ends\"\n label=\"Ends\"\n type=\"number\"\n placeholder=\"Ends\"\n value={ends}\n onChange={this.changeHandler('ends')}\n />\n )}\n </DialogContent>\n </React.Fragment>\n )}\n </div>\n )}\n {isUploadMedia && (\n <div className={classes.uploadInput}>\n <div>\n {fileUpload.url ? (\n <>\n <div className={classes.row}>\n <audio controls=\"controls\" controlsList=\"nodownload\">\n <source type={mimeType} src={fileUpload.url} />\n </audio>\n <IconButton aria-label=\"delete\" className={classes.deleteIcon} onClick={this.handleRemoveFile}>\n <ActionDelete />\n </IconButton>\n </div>\n {!fileUpload.scheduled && fileUpload.loading ? (\n <Typography variant=\"subheading\">Loading...</Typography>\n ) : null}\n {fileUpload.scheduled ? (\n <Typography variant=\"subheading\">\n Waiting for Upload to finish, then inserting item...\n </Typography>\n ) : null}\n </>\n ) : !fileUpload.loading ? (\n <input accept=\"audio/*\" className={classes.input} onChange={this.handleUploadFile} type=\"file\" />\n ) : null}\n {!!fileUpload.error && (\n <Typography className={classes.error} variant=\"caption\">\n {fileUpload.error}\n </Typography>\n )}\n </div>\n </div>\n )}\n </div>\n </DialogContent>\n <DialogActions>\n <Button onClick={() => this.handleDone(false)} color=\"primary\">\n Cancel\n </Button>\n <Button disabled={submitIsDisabled} onClick={() => this.handleDone(true)} color=\"primary\">\n {edit ? 'Update' : 'Insert'}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nconst styles = (theme) => ({\n paper: {\n minWidth: '500px',\n },\n properties: {\n padding: 0,\n },\n row: {\n display: 'flex',\n flexDirection: 'space-between',\n },\n rowItem: {\n marginRight: theme.spacing.unit * 1.5,\n cursor: 'pointer',\n },\n active: {\n color: color.primary(),\n borderBottom: `2px solid ${color.primary()}`,\n },\n uploadInput: {\n marginTop: theme.spacing.unit * 1.5,\n },\n error: {\n marginTop: theme.spacing.unit * 1.5,\n color: theme.palette.error.main,\n },\n deleteIcon: {\n marginLeft: theme.spacing.unit * 1.5,\n },\n});\n\nexport default withStyles(styles)(MediaDialog);\n"],"file":"media-dialog.js"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _react = _interopRequireDefault(require("react"));
13
+
14
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
15
+
16
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
17
+
18
+ /**
19
+ * Plugin to render the normal divs and spans with attributes (if they are provided)
20
+ */
21
+ var _default = function _default() {
22
+ return {
23
+ name: 'renderingPlugin',
24
+ renderNode: function renderNode(props) {
25
+ var attributes = props.attributes,
26
+ children = props.children,
27
+ node = props.node;
28
+
29
+ if (node.object !== 'block' && node.object !== 'inline') {
30
+ return;
31
+ }
32
+
33
+ var Tag = node.object === 'block' ? 'div' : 'span';
34
+ var style = {
35
+ position: 'relative'
36
+ };
37
+ var extraAttributes = node.data.get('attributes');
38
+ return /*#__PURE__*/_react["default"].createElement(Tag, _objectSpread(_objectSpread(_objectSpread({}, attributes), extraAttributes), {}, {
39
+ style: style
40
+ }), children);
41
+ }
42
+ };
43
+ };
44
+
45
+ exports["default"] = _default;
46
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/plugins/rendering/index.js"],"names":["name","renderNode","props","attributes","children","node","object","Tag","style","position","extraAttributes","data","get","React","createElement"],"mappings":";;;;;;;;;;;AAAA;;;;;;AAEA;AACA;AACA;eACe,oBAAM;AACnB,SAAO;AACLA,IAAAA,IAAI,EAAE,iBADD;AAELC,IAAAA,UAAU,EAAE,oBAACC,KAAD,EAAW;AACrB,UAAQC,UAAR,GAAuCD,KAAvC,CAAQC,UAAR;AAAA,UAAoBC,QAApB,GAAuCF,KAAvC,CAAoBE,QAApB;AAAA,UAA8BC,IAA9B,GAAuCH,KAAvC,CAA8BG,IAA9B;;AAEA,UAAIA,IAAI,CAACC,MAAL,KAAgB,OAAhB,IAA2BD,IAAI,CAACC,MAAL,KAAgB,QAA/C,EAAyD;AACvD;AACD;;AAED,UAAMC,GAAG,GAAGF,IAAI,CAACC,MAAL,KAAgB,OAAhB,GAA0B,KAA1B,GAAkC,MAA9C;AACA,UAAME,KAAK,GAAG;AAAEC,QAAAA,QAAQ,EAAE;AAAZ,OAAd;AACA,UAAMC,eAAe,GAAGL,IAAI,CAACM,IAAL,CAAUC,GAAV,CAAc,YAAd,CAAxB;AAEA,0BAAOC,kBAAMC,aAAN,CACLP,GADK,gDAGAJ,UAHA,GAIAO,eAJA;AAKHF,QAAAA,KAAK,EAAEA;AALJ,UAOLJ,QAPK,CAAP;AASD;AAtBI,GAAP;AAwBD,C","sourcesContent":["import React from 'react';\n\n/**\n * Plugin to render the normal divs and spans with attributes (if they are provided)\n */\nexport default () => {\n return {\n name: 'renderingPlugin',\n renderNode: (props) => {\n const { attributes, children, node } = props;\n\n if (node.object !== 'block' && node.object !== 'inline') {\n return;\n }\n\n const Tag = node.object === 'block' ? 'div' : 'span';\n const style = { position: 'relative' };\n const extraAttributes = node.data.get('attributes');\n\n return React.createElement(\n Tag,\n {\n ...attributes,\n ...extraAttributes,\n style: style,\n },\n children,\n );\n },\n };\n};\n"],"file":"index.js"}