json-object-editor 0.10.312 → 0.10.400

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 (267) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/best-practices.md +0 -0
  3. package/css/joe-styles.css +59 -1
  4. package/css/joe.css +59 -1
  5. package/js/JsonObjectEditor.jquery.craydent.js +231 -39
  6. package/js/joe-full.js +562 -50
  7. package/js/joe.js +231 -39
  8. package/js/plugins/48_tinymce.min.js +11 -0
  9. package/js/plugins/tinymce/CHANGELOG.md +3738 -0
  10. package/js/plugins/tinymce/icons/default/icons.min.js +1 -0
  11. package/js/plugins/tinymce/js/tinymce/icons/default/icons.min.js +1 -0
  12. package/js/plugins/tinymce/js/tinymce/langs/README.md +3 -0
  13. package/js/plugins/tinymce/js/tinymce/license.md +6 -0
  14. package/js/plugins/tinymce/js/tinymce/models/dom/model.min.js +4 -0
  15. package/js/plugins/tinymce/js/tinymce/plugins/accordion/plugin.min.js +4 -0
  16. package/js/plugins/tinymce/js/tinymce/plugins/advlist/plugin.min.js +4 -0
  17. package/js/plugins/tinymce/js/tinymce/plugins/anchor/plugin.min.js +4 -0
  18. package/js/plugins/tinymce/js/tinymce/plugins/autolink/plugin.min.js +4 -0
  19. package/js/plugins/tinymce/js/tinymce/plugins/autoresize/plugin.min.js +4 -0
  20. package/js/plugins/tinymce/js/tinymce/plugins/autosave/plugin.min.js +4 -0
  21. package/js/plugins/tinymce/js/tinymce/plugins/charmap/plugin.min.js +4 -0
  22. package/js/plugins/tinymce/js/tinymce/plugins/code/plugin.min.js +4 -0
  23. package/js/plugins/tinymce/js/tinymce/plugins/codesample/plugin.min.js +4 -0
  24. package/js/plugins/tinymce/js/tinymce/plugins/directionality/plugin.min.js +4 -0
  25. package/js/plugins/tinymce/js/tinymce/plugins/emoticons/js/emojiimages.js +1 -0
  26. package/js/plugins/tinymce/js/tinymce/plugins/emoticons/js/emojiimages.min.js +3 -0
  27. package/js/plugins/tinymce/js/tinymce/plugins/emoticons/js/emojis.js +1 -0
  28. package/js/plugins/tinymce/js/tinymce/plugins/emoticons/js/emojis.min.js +2 -0
  29. package/js/plugins/tinymce/js/tinymce/plugins/emoticons/plugin.min.js +4 -0
  30. package/js/plugins/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js +4 -0
  31. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/ar.js +93 -0
  32. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/bg_BG.js +93 -0
  33. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/ca.js +93 -0
  34. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/cs.js +93 -0
  35. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/da.js +93 -0
  36. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/de.js +93 -0
  37. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/el.js +93 -0
  38. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/en.js +93 -0
  39. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/es.js +93 -0
  40. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/eu.js +93 -0
  41. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/fa.js +93 -0
  42. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/fi.js +93 -0
  43. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/fr_FR.js +93 -0
  44. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/he_IL.js +93 -0
  45. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/hi.js +93 -0
  46. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/hr.js +93 -0
  47. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/hu_HU.js +93 -0
  48. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/id.js +93 -0
  49. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/it.js +93 -0
  50. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/ja.js +93 -0
  51. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/kk.js +93 -0
  52. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/ko_KR.js +93 -0
  53. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/ms.js +93 -0
  54. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/nb_NO.js +93 -0
  55. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/nl.js +93 -0
  56. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/pl.js +93 -0
  57. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/pt_BR.js +93 -0
  58. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/pt_PT.js +93 -0
  59. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/ro.js +93 -0
  60. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/ru.js +93 -0
  61. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/sk.js +93 -0
  62. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/sl_SI.js +93 -0
  63. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/sv_SE.js +93 -0
  64. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/th_TH.js +93 -0
  65. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/tr.js +93 -0
  66. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/uk.js +93 -0
  67. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/vi.js +93 -0
  68. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/zh_CN.js +87 -0
  69. package/js/plugins/tinymce/js/tinymce/plugins/help/js/i18n/keynav/zh_TW.js +93 -0
  70. package/js/plugins/tinymce/js/tinymce/plugins/help/plugin.min.js +4 -0
  71. package/js/plugins/tinymce/js/tinymce/plugins/image/plugin.min.js +4 -0
  72. package/js/plugins/tinymce/js/tinymce/plugins/importcss/plugin.min.js +4 -0
  73. package/js/plugins/tinymce/js/tinymce/plugins/insertdatetime/plugin.min.js +4 -0
  74. package/js/plugins/tinymce/js/tinymce/plugins/link/plugin.min.js +4 -0
  75. package/js/plugins/tinymce/js/tinymce/plugins/lists/plugin.min.js +4 -0
  76. package/js/plugins/tinymce/js/tinymce/plugins/media/plugin.min.js +4 -0
  77. package/js/plugins/tinymce/js/tinymce/plugins/nonbreaking/plugin.min.js +4 -0
  78. package/js/plugins/tinymce/js/tinymce/plugins/pagebreak/plugin.min.js +4 -0
  79. package/js/plugins/tinymce/js/tinymce/plugins/preview/plugin.min.js +4 -0
  80. package/js/plugins/tinymce/js/tinymce/plugins/quickbars/plugin.min.js +4 -0
  81. package/js/plugins/tinymce/js/tinymce/plugins/save/plugin.min.js +4 -0
  82. package/js/plugins/tinymce/js/tinymce/plugins/searchreplace/plugin.min.js +4 -0
  83. package/js/plugins/tinymce/js/tinymce/plugins/table/plugin.min.js +4 -0
  84. package/js/plugins/tinymce/js/tinymce/plugins/visualblocks/plugin.min.js +4 -0
  85. package/js/plugins/tinymce/js/tinymce/plugins/visualchars/plugin.min.js +4 -0
  86. package/js/plugins/tinymce/js/tinymce/plugins/wordcount/plugin.min.js +4 -0
  87. package/js/plugins/tinymce/js/tinymce/skins/content/dark/content.js +1 -0
  88. package/js/plugins/tinymce/js/tinymce/skins/content/dark/content.min.css +1 -0
  89. package/js/plugins/tinymce/js/tinymce/skins/content/default/content.js +1 -0
  90. package/js/plugins/tinymce/js/tinymce/skins/content/default/content.min.css +1 -0
  91. package/js/plugins/tinymce/js/tinymce/skins/content/document/content.js +1 -0
  92. package/js/plugins/tinymce/js/tinymce/skins/content/document/content.min.css +1 -0
  93. package/js/plugins/tinymce/js/tinymce/skins/content/tinymce-5/content.js +1 -0
  94. package/js/plugins/tinymce/js/tinymce/skins/content/tinymce-5/content.min.css +1 -0
  95. package/js/plugins/tinymce/js/tinymce/skins/content/tinymce-5-dark/content.js +1 -0
  96. package/js/plugins/tinymce/js/tinymce/skins/content/tinymce-5-dark/content.min.css +1 -0
  97. package/js/plugins/tinymce/js/tinymce/skins/content/writer/content.js +1 -0
  98. package/js/plugins/tinymce/js/tinymce/skins/content/writer/content.min.css +1 -0
  99. package/js/plugins/tinymce/js/tinymce/skins/ui/oxide/content.inline.js +1 -0
  100. package/js/plugins/tinymce/js/tinymce/skins/ui/oxide/content.inline.min.css +1 -0
  101. package/js/plugins/tinymce/js/tinymce/skins/ui/oxide/content.js +1 -0
  102. package/js/plugins/tinymce/js/tinymce/skins/ui/oxide/content.min.css +1 -0
  103. package/js/plugins/tinymce/js/tinymce/skins/ui/oxide/skin.js +1 -0
  104. package/js/plugins/tinymce/js/tinymce/skins/ui/oxide/skin.min.css +1 -0
  105. package/js/plugins/tinymce/js/tinymce/skins/ui/oxide/skin.shadowdom.js +1 -0
  106. package/js/plugins/tinymce/js/tinymce/skins/ui/oxide/skin.shadowdom.min.css +1 -0
  107. package/js/plugins/tinymce/js/tinymce/skins/ui/oxide-dark/content.inline.js +1 -0
  108. package/js/plugins/tinymce/js/tinymce/skins/ui/oxide-dark/content.inline.min.css +1 -0
  109. package/js/plugins/tinymce/js/tinymce/skins/ui/oxide-dark/content.js +1 -0
  110. package/js/plugins/tinymce/js/tinymce/skins/ui/oxide-dark/content.min.css +1 -0
  111. package/js/plugins/tinymce/js/tinymce/skins/ui/oxide-dark/skin.js +1 -0
  112. package/js/plugins/tinymce/js/tinymce/skins/ui/oxide-dark/skin.min.css +1 -0
  113. package/js/plugins/tinymce/js/tinymce/skins/ui/oxide-dark/skin.shadowdom.js +1 -0
  114. package/js/plugins/tinymce/js/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css +1 -0
  115. package/js/plugins/tinymce/js/tinymce/skins/ui/tinymce-5/content.inline.js +1 -0
  116. package/js/plugins/tinymce/js/tinymce/skins/ui/tinymce-5/content.inline.min.css +1 -0
  117. package/js/plugins/tinymce/js/tinymce/skins/ui/tinymce-5/content.js +1 -0
  118. package/js/plugins/tinymce/js/tinymce/skins/ui/tinymce-5/content.min.css +1 -0
  119. package/js/plugins/tinymce/js/tinymce/skins/ui/tinymce-5/skin.js +1 -0
  120. package/js/plugins/tinymce/js/tinymce/skins/ui/tinymce-5/skin.min.css +1 -0
  121. package/js/plugins/tinymce/js/tinymce/skins/ui/tinymce-5/skin.shadowdom.js +1 -0
  122. package/js/plugins/tinymce/js/tinymce/skins/ui/tinymce-5/skin.shadowdom.min.css +1 -0
  123. package/js/plugins/tinymce/js/tinymce/skins/ui/tinymce-5-dark/content.inline.js +1 -0
  124. package/js/plugins/tinymce/js/tinymce/skins/ui/tinymce-5-dark/content.inline.min.css +1 -0
  125. package/js/plugins/tinymce/js/tinymce/skins/ui/tinymce-5-dark/content.js +1 -0
  126. package/js/plugins/tinymce/js/tinymce/skins/ui/tinymce-5-dark/content.min.css +1 -0
  127. package/js/plugins/tinymce/js/tinymce/skins/ui/tinymce-5-dark/skin.js +1 -0
  128. package/js/plugins/tinymce/js/tinymce/skins/ui/tinymce-5-dark/skin.min.css +1 -0
  129. package/js/plugins/tinymce/js/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.js +1 -0
  130. package/js/plugins/tinymce/js/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.min.css +1 -0
  131. package/js/plugins/tinymce/js/tinymce/themes/silver/theme.min.js +332 -0
  132. package/js/plugins/tinymce/js/tinymce/tinymce.d.ts +3350 -0
  133. package/js/plugins/tinymce/js/tinymce/tinymce.min.js +331 -0
  134. package/js/plugins/tinymce/langs/README.md +3 -0
  135. package/js/plugins/tinymce/license.md +6 -0
  136. package/js/plugins/tinymce/models/dom/model.min.js +4 -0
  137. package/js/plugins/tinymce/plugins/accordion/plugin.min.js +4 -0
  138. package/js/plugins/tinymce/plugins/advlist/plugin.min.js +4 -0
  139. package/js/plugins/tinymce/plugins/anchor/plugin.min.js +4 -0
  140. package/js/plugins/tinymce/plugins/autolink/plugin.min.js +4 -0
  141. package/js/plugins/tinymce/plugins/autoresize/plugin.min.js +4 -0
  142. package/js/plugins/tinymce/plugins/autosave/plugin.min.js +4 -0
  143. package/js/plugins/tinymce/plugins/charmap/plugin.min.js +4 -0
  144. package/js/plugins/tinymce/plugins/code/plugin.min.js +4 -0
  145. package/js/plugins/tinymce/plugins/codesample/plugin.min.js +4 -0
  146. package/js/plugins/tinymce/plugins/directionality/plugin.min.js +4 -0
  147. package/js/plugins/tinymce/plugins/emoticons/js/emojiimages.js +1 -0
  148. package/js/plugins/tinymce/plugins/emoticons/js/emojiimages.min.js +3 -0
  149. package/js/plugins/tinymce/plugins/emoticons/js/emojis.js +1 -0
  150. package/js/plugins/tinymce/plugins/emoticons/js/emojis.min.js +2 -0
  151. package/js/plugins/tinymce/plugins/emoticons/plugin.min.js +4 -0
  152. package/js/plugins/tinymce/plugins/fullscreen/plugin.min.js +4 -0
  153. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/ar.js +93 -0
  154. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/bg_BG.js +93 -0
  155. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/ca.js +93 -0
  156. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/cs.js +93 -0
  157. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/da.js +93 -0
  158. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/de.js +93 -0
  159. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/el.js +93 -0
  160. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/en.js +93 -0
  161. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/es.js +93 -0
  162. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/eu.js +93 -0
  163. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/fa.js +93 -0
  164. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/fi.js +93 -0
  165. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/fr_FR.js +93 -0
  166. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/he_IL.js +93 -0
  167. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/hi.js +93 -0
  168. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/hr.js +93 -0
  169. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/hu_HU.js +93 -0
  170. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/id.js +93 -0
  171. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/it.js +93 -0
  172. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/ja.js +93 -0
  173. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/kk.js +93 -0
  174. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/ko_KR.js +93 -0
  175. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/ms.js +93 -0
  176. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/nb_NO.js +93 -0
  177. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/nl.js +93 -0
  178. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/pl.js +93 -0
  179. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/pt_BR.js +93 -0
  180. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/pt_PT.js +93 -0
  181. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/ro.js +93 -0
  182. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/ru.js +93 -0
  183. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/sk.js +93 -0
  184. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/sl_SI.js +93 -0
  185. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/sv_SE.js +93 -0
  186. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/th_TH.js +93 -0
  187. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/tr.js +93 -0
  188. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/uk.js +93 -0
  189. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/vi.js +93 -0
  190. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/zh_CN.js +87 -0
  191. package/js/plugins/tinymce/plugins/help/js/i18n/keynav/zh_TW.js +93 -0
  192. package/js/plugins/tinymce/plugins/help/plugin.min.js +4 -0
  193. package/js/plugins/tinymce/plugins/image/plugin.min.js +4 -0
  194. package/js/plugins/tinymce/plugins/importcss/plugin.min.js +4 -0
  195. package/js/plugins/tinymce/plugins/insertdatetime/plugin.min.js +4 -0
  196. package/js/plugins/tinymce/plugins/link/plugin.min.js +4 -0
  197. package/js/plugins/tinymce/plugins/lists/plugin.min.js +4 -0
  198. package/js/plugins/tinymce/plugins/media/plugin.min.js +4 -0
  199. package/js/plugins/tinymce/plugins/nonbreaking/plugin.min.js +4 -0
  200. package/js/plugins/tinymce/plugins/pagebreak/plugin.min.js +4 -0
  201. package/js/plugins/tinymce/plugins/preview/plugin.min.js +4 -0
  202. package/js/plugins/tinymce/plugins/quickbars/plugin.min.js +4 -0
  203. package/js/plugins/tinymce/plugins/save/plugin.min.js +4 -0
  204. package/js/plugins/tinymce/plugins/searchreplace/plugin.min.js +4 -0
  205. package/js/plugins/tinymce/plugins/table/plugin.min.js +4 -0
  206. package/js/plugins/tinymce/plugins/visualblocks/plugin.min.js +4 -0
  207. package/js/plugins/tinymce/plugins/visualchars/plugin.min.js +4 -0
  208. package/js/plugins/tinymce/plugins/wordcount/plugin.min.js +4 -0
  209. package/js/plugins/tinymce/skins/content/dark/content.js +1 -0
  210. package/js/plugins/tinymce/skins/content/dark/content.min.css +1 -0
  211. package/js/plugins/tinymce/skins/content/default/content.js +1 -0
  212. package/js/plugins/tinymce/skins/content/default/content.min.css +1 -0
  213. package/js/plugins/tinymce/skins/content/document/content.js +1 -0
  214. package/js/plugins/tinymce/skins/content/document/content.min.css +1 -0
  215. package/js/plugins/tinymce/skins/content/tinymce-5/content.js +1 -0
  216. package/js/plugins/tinymce/skins/content/tinymce-5/content.min.css +1 -0
  217. package/js/plugins/tinymce/skins/content/tinymce-5-dark/content.js +1 -0
  218. package/js/plugins/tinymce/skins/content/tinymce-5-dark/content.min.css +1 -0
  219. package/js/plugins/tinymce/skins/content/writer/content.js +1 -0
  220. package/js/plugins/tinymce/skins/content/writer/content.min.css +1 -0
  221. package/js/plugins/tinymce/skins/ui/oxide/content.inline.js +1 -0
  222. package/js/plugins/tinymce/skins/ui/oxide/content.inline.min.css +1 -0
  223. package/js/plugins/tinymce/skins/ui/oxide/content.js +1 -0
  224. package/js/plugins/tinymce/skins/ui/oxide/content.min.css +1 -0
  225. package/js/plugins/tinymce/skins/ui/oxide/skin.js +1 -0
  226. package/js/plugins/tinymce/skins/ui/oxide/skin.min.css +23 -0
  227. package/js/plugins/tinymce/skins/ui/oxide/skin.shadowdom.js +1 -0
  228. package/js/plugins/tinymce/skins/ui/oxide/skin.shadowdom.min.css +1 -0
  229. package/js/plugins/tinymce/skins/ui/oxide - Copy/content.inline.js +1 -0
  230. package/js/plugins/tinymce/skins/ui/oxide - Copy/content.inline.min.css +1 -0
  231. package/js/plugins/tinymce/skins/ui/oxide - Copy/content.js +1 -0
  232. package/js/plugins/tinymce/skins/ui/oxide - Copy/content.min.css +1 -0
  233. package/js/plugins/tinymce/skins/ui/oxide - Copy/skin.js +1 -0
  234. package/js/plugins/tinymce/skins/ui/oxide - Copy/skin.min.css +1 -0
  235. package/js/plugins/tinymce/skins/ui/oxide - Copy/skin.shadowdom.js +1 -0
  236. package/js/plugins/tinymce/skins/ui/oxide - Copy/skin.shadowdom.min.css +1 -0
  237. package/js/plugins/tinymce/skins/ui/oxide-dark/content.inline.js +1 -0
  238. package/js/plugins/tinymce/skins/ui/oxide-dark/content.inline.min.css +1 -0
  239. package/js/plugins/tinymce/skins/ui/oxide-dark/content.js +1 -0
  240. package/js/plugins/tinymce/skins/ui/oxide-dark/content.min.css +1 -0
  241. package/js/plugins/tinymce/skins/ui/oxide-dark/skin.js +1 -0
  242. package/js/plugins/tinymce/skins/ui/oxide-dark/skin.min.css +1 -0
  243. package/js/plugins/tinymce/skins/ui/oxide-dark/skin.shadowdom.js +1 -0
  244. package/js/plugins/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css +1 -0
  245. package/js/plugins/tinymce/skins/ui/tinymce-5/content.inline.js +1 -0
  246. package/js/plugins/tinymce/skins/ui/tinymce-5/content.inline.min.css +1 -0
  247. package/js/plugins/tinymce/skins/ui/tinymce-5/content.js +1 -0
  248. package/js/plugins/tinymce/skins/ui/tinymce-5/content.min.css +1 -0
  249. package/js/plugins/tinymce/skins/ui/tinymce-5/skin.js +1 -0
  250. package/js/plugins/tinymce/skins/ui/tinymce-5/skin.min.css +1 -0
  251. package/js/plugins/tinymce/skins/ui/tinymce-5/skin.shadowdom.js +1 -0
  252. package/js/plugins/tinymce/skins/ui/tinymce-5/skin.shadowdom.min.css +1 -0
  253. package/js/plugins/tinymce/skins/ui/tinymce-5-dark/content.inline.js +1 -0
  254. package/js/plugins/tinymce/skins/ui/tinymce-5-dark/content.inline.min.css +1 -0
  255. package/js/plugins/tinymce/skins/ui/tinymce-5-dark/content.js +1 -0
  256. package/js/plugins/tinymce/skins/ui/tinymce-5-dark/content.min.css +1 -0
  257. package/js/plugins/tinymce/skins/ui/tinymce-5-dark/skin.js +1 -0
  258. package/js/plugins/tinymce/skins/ui/tinymce-5-dark/skin.min.css +1 -0
  259. package/js/plugins/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.js +1 -0
  260. package/js/plugins/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.min.css +1 -0
  261. package/js/plugins/tinymce/themes/silver/theme.min.js +332 -0
  262. package/js/plugins/tinymce/tinymce.d.ts +3350 -0
  263. package/js/plugins/tinymce/tinymce.min.js +331 -0
  264. package/js/plugins/tinymce.min.js +331 -11
  265. package/package.json +1 -1
  266. package/server/modules/Storage.js +58 -1
  267. package/server/schemas/status.js +3 -1
package/js/joe.js CHANGED
@@ -482,6 +482,7 @@ function JsonObjectEditor(specs){
482
482
  respond_timeout = setTimeout(self.respond,200);
483
483
  }
484
484
  });
485
+ self.initButtons();
485
486
  initialized = true;
486
487
  self.respond();
487
488
  endLogGroup();
@@ -489,7 +490,38 @@ function JsonObjectEditor(specs){
489
490
 
490
491
  callback && callback();
491
492
  };
493
+ this.initButtons = function(){
494
+ // 🧩 Joe Button Universal Click Handler
495
+ $(document).on('click', 'joe-button', function(e) {
496
+ e.preventDefault();
492
497
 
498
+ var $btn = $(this);
499
+ var actionName = $btn.attr('action');
500
+
501
+ if (!actionName) {
502
+ console.warn('No action defined for joe-button');
503
+ return;
504
+ }
505
+
506
+ var currentObject = _joe.current ? _joe.current.object : null;
507
+ var currentSchema = _joe.current && _joe.current.schema;
508
+ var currentSchemaMethods = currentSchema ? currentSchema.methods : null;
509
+
510
+ // Priority 1: Backend async
511
+ if (JOE.async && typeof JOE.async[actionName] === 'function') {
512
+ JOE.async[actionName](currentObject, e);
513
+ return;
514
+ }
515
+
516
+ // Priority 2: Schema-defined client methods
517
+ if (currentSchemaMethods && typeof currentSchemaMethods[actionName] === 'function') {
518
+ currentSchemaMethods[actionName](currentObject, e);
519
+ return;
520
+ }
521
+
522
+ console.warn('No method found for joe-button action:', actionName);
523
+ });
524
+ }
493
525
  this.resizeOk = function(){
494
526
  if(!$c.isMobile()){
495
527
  return true;
@@ -3375,7 +3407,9 @@ this.renderHTMLContent = function(specs){
3375
3407
  case 'color':
3376
3408
  html+= self.renderColorField(prop);
3377
3409
  break;
3378
-
3410
+ case 'button':
3411
+ html += self.renderButtonField(prop);
3412
+ break;
3379
3413
  case 'group':
3380
3414
  html+= self.renderCheckboxGroupField(prop);
3381
3415
  break;
@@ -5571,53 +5605,110 @@ this.renderHTMLContent = function(specs){
5571
5605
  var tinyconfig = {};
5572
5606
  this.renderTinyMCEField = function(prop){
5573
5607
  /*|{
5574
- tags:'render,field,wysiwyg'
5608
+ tags:'render,field,wysiwyg,tinyMCE',
5575
5609
  }|*/
5576
- var locked = self.propAsFuncOrValue(prop.locked)?' disabled ':'';
5577
- var height = (prop.height)?'style="height:'+prop.height+';"' : '';
5578
- var editor_id = cuid();
5579
- var html=
5580
- '<div class="joe-tinymce-holder joe-texteditor-field joe-field" '
5581
- /*+height*/+' data-texteditor_id="'+editor_id+'" data-ftype="tinymce" name="'+prop.name+'">'+
5582
- '<div id="'+editor_id+'" class="joe-tinymce">'+(prop.value || "")+'</div>'+
5583
- '</div>';
5610
+ const locked = self.propAsFuncOrValue(prop.locked) ? 'disabled' : '';
5611
+ const heightStyle = (prop.height) ? `style="height:${prop.height};"` : '';
5612
+ const editor_id = cuid();
5613
+
5614
+ const html =
5615
+ `<div class="joe-tinymce-holder joe-texteditor-field joe-field wysiwyg-field"
5616
+ data-texteditor_id="${editor_id}"
5617
+ data-ftype="tinymce"
5618
+ data-name="${prop.name}">
5619
+ <textarea id="${editor_id}" class="joe-tinymce" ${locked} ${heightStyle}>${prop.value || ''}</textarea>
5620
+ </div>`;
5621
+
5584
5622
  return html;
5585
5623
  };
5586
5624
 
5587
5625
  this.readyTinyMCEs = function() {
5588
5626
  tinymce.init({
5589
5627
  selector: ".joe-tinymce",
5590
- //max_height: 300,
5591
- // height:500,
5592
- plugins:['table wordcount link image code searchreplace autoresize fullscreen'],
5593
- menu : { // this is the complete default configuration
5594
- edit : {title : 'Edit' , items : 'undo redo | cut copy paste pastetext | selectall'},
5595
- format : {title : 'Format', items : 'bold italic underline strikethrough superscript subscript | formats | removeformat'},
5596
- table : {title : 'Table' , items : 'inserttable tableprops deletetable | cell row column'},
5597
- tools : {title : 'Tools' , items : 'spellchecker code link image'}
5598
- },
5599
- toolbar: 'fullscreen | undo redo | bold italic removeformat | bullist numlist outdent indent',
5600
- // toolbar: 'insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image'
5601
- /* plugins: [
5602
- "advlist autolink lists link image charmap print preview anchor",
5603
- "searchreplace visualblocks code fullscreen",
5604
- "insertdatetime media table contextmenu paste"
5605
- ],*/
5606
- /*toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"*/
5607
- });
5608
- $('.joe-tinymce').each(function(){
5609
- var field = self.getField($(this).parents('.wysiwyg-field').data('name'));
5610
- if(field.height){
5611
- $('.mce-edit-area').height(field.height);
5628
+ base_url: '/JsonObjectEditor/js/plugins/tinymce',
5629
+ suffix: '.min',
5630
+ license_key: 'gpl',
5631
+ browser_spellcheck: true,
5632
+ contextmenu: false,
5633
+ content_style: `
5634
+ body {
5635
+ font-size: 16px;
5636
+ line-height: 21px;
5637
+ }
5638
+ `,
5639
+ plugins: ['table', 'wordcount', 'link', 'image', 'code', 'searchreplace', 'autoresize', 'fullscreen', 'lists'],
5640
+
5641
+ toolbar: 'fullscreen | undo redo | h1 h2 h3 h4 h5 |bold italic removeformat | bullist numlist outdent indent | code',
5642
+
5643
+ // Local TinyMCE asset paths
5644
+ skin_url: '/JsonObjectEditor/js/plugins/tinymce/skins/ui/oxide/',
5645
+ content_css:'/JsonObjectEditor/js/plugins/tinymce/skins/content/default/content.css',
5646
+ theme_url: '/JsonObjectEditor/js/plugins/tinymce/themes/silver/theme.min.js',
5647
+ icons_url: '/JsonObjectEditor/js/plugins/tinymce/icons/default/icons.min.js',
5648
+
5649
+ // Optional: hook into instance ready for dynamic height
5650
+ init_instance_callback: function(editor) {
5651
+ const textarea = editor.targetElm;
5652
+ const fieldContainer = textarea.closest('.wysiwyg-field');
5653
+ if (fieldContainer) {
5654
+ const fieldName = fieldContainer.getAttribute('data-name');
5655
+ const field = self.getField(fieldName);
5656
+ if (field && field.height) {
5657
+ const iframe = editor.getContainer().querySelector('iframe');
5658
+ if (iframe) {
5659
+ iframe.style.height = `${field.height}px`;
5660
+ }
5661
+ }
5662
+ }
5612
5663
  }
5613
-
5614
- });
5664
+ });
5615
5665
 
5616
5666
  };
5667
+ this.cleanTinyMCEs = function(html) {
5668
+ const temp = document.createElement('div');
5669
+ temp.innerHTML = html;
5670
+
5671
+ // Loop through all elements
5672
+ temp.querySelectorAll('*').forEach(el => {
5673
+ // Remove all data-* attributes
5674
+ [...el.attributes].forEach(attr => {
5675
+ if (attr.name.startsWith('data-')) {
5676
+ el.removeAttribute(attr.name);
5677
+ }
5678
+
5679
+ // Optionally clean up some noisy inline styles
5680
+ if (attr.name === 'style') {
5681
+ const styleVal = attr.value.toLowerCase();
5682
+ if (
5683
+ styleVal.includes('font-weight: 400') ||
5684
+ styleVal.includes('font-family') ||
5685
+ styleVal.includes('white-space:pre') ||
5686
+ styleVal.includes('line-height') ||
5687
+ styleVal.includes('margin') ||
5688
+ styleVal.includes('orphans') || // lol
5689
+ styleVal.includes('widows')
5690
+ ) {
5691
+ el.removeAttribute('style');
5692
+ }
5693
+ }
5694
+ });
5695
+
5696
+ // Clean up empty span tags (common from Google Docs)
5697
+ if (
5698
+ el.tagName === 'SPAN' &&
5699
+ el.attributes.length === 0 &&
5700
+ el.textContent.trim() === ''
5701
+ ) {
5702
+ el.remove();
5703
+ }
5704
+ });
5705
+
5706
+ return temp.innerHTML;
5707
+ }
5617
5708
  self.texteditors = [];
5618
5709
 
5619
5710
  this.readyTextEditors = this.readyTinyMCEs;
5620
- encapsulateFieldType('wysiwyg',self.renderTinyMCEField,{ready:self.readyTextEditors});
5711
+ encapsulateFieldType('wysiwyg',self.renderTinyMCEField,{ready:self.readyTextEditors,clean:this.cleanTinyMCEs});
5621
5712
 
5622
5713
  /*----------------------------->
5623
5714
  Y | Object Field
@@ -5669,7 +5760,59 @@ Y | Object Field
5669
5760
  var html= 'passthrough';
5670
5761
  return html;
5671
5762
  };
5763
+ /*----------------------------->
5764
+ BTN | BTN Field
5765
+ <-----------------------------*/
5766
+ this.renderButtonField = function(prop) {
5767
+ /*|{
5768
+ tags:'render,field,button',
5769
+ specs:'display,method,color,schema,svg,bgcolor'
5770
+ }|*/
5771
+ var itemObj = self.current.object || {}; // support field functions needing context
5772
+
5773
+ var display = self.propAsFuncOrValue(prop.display, itemObj);
5774
+ var method = self.propAsFuncOrValue(prop.method, itemObj);
5775
+ var color = self.propAsFuncOrValue(prop.color, itemObj);
5776
+ var schema = self.propAsFuncOrValue(prop.schema, itemObj);
5777
+ var svgOverride = self.propAsFuncOrValue(prop.svg, itemObj);
5778
+ var title = self.propAsFuncOrValue(prop.title, itemObj);
5779
+ var bgcolor = self.propAsFuncOrValue(prop.bgcolor, itemObj);
5780
+ var cssclass = self.propAsFuncOrValue(prop.cssclass, itemObj)||' joe-nofloat';
5781
+ var svgMarkup = '';
5782
+
5783
+ // 1. Try to pull menuicon from schema if schema is provided
5784
+ if (schema && _joe && _joe.Schemas && _joe.Schemas[schema] && _joe.Schemas[schema].menuicon) {
5785
+ svgMarkup = _joe.Schemas[schema].menuicon;
5786
+ }
5787
+
5788
+ // 2. Direct SVG overrides schema icon if provided
5789
+ if (svgOverride) {
5790
+ svgMarkup = '<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">' + svgOverride + '</svg>';
5791
+ }
5672
5792
 
5793
+ // 3. Build the button
5794
+ var styleAttr = bgcolor ? 'style="background-color: ' + bgcolor + ';"' : '';
5795
+
5796
+ var html = '<joe-button class="joe-button joe-field '+cssclass
5797
+ + (color ? ' joe-' + color + '-button' : '')
5798
+ + '" name="' + (prop.name || '') + '" '
5799
+ + (schema ? 'schema="' + schema + '" ' : '')
5800
+ + (method ? 'action="' + method + '" ' : '')
5801
+ + (color ? 'color="' + color + '" ' : '')
5802
+ + (title ? 'title="' + title + '" ' : '')
5803
+ + styleAttr + ' '
5804
+ + 'data-btnid="' + (prop.name || '') + '">';
5805
+
5806
+ if (svgMarkup) {
5807
+ html += svgMarkup + ' ';
5808
+ }
5809
+
5810
+ html += (display || "Button") + '</joe-button>';
5811
+
5812
+ return html;
5813
+ };
5814
+
5815
+ encapsulateFieldType('button', self.renderButtonField);
5673
5816
  /*----------------------------->
5674
5817
  27 | Comments
5675
5818
  <-----------------------------*/
@@ -7881,6 +8024,9 @@ Field Rendering Helpers
7881
8024
  //var parentFind = $('.joe-overlay.active');
7882
8025
 
7883
8026
  parentFind.find('.joe-field').each(function(){
8027
+ if (this.nodeName.toLowerCase() === 'joe-button') {
8028
+ return true; // Skip buttons, they are action elements only
8029
+ }
7884
8030
  if($(this).parents('.objectList-field,.objectlist-field').length){
7885
8031
  return true;
7886
8032
  }
@@ -7918,7 +8064,7 @@ Field Rendering Helpers
7918
8064
  case 'text':
7919
8065
  default:
7920
8066
 
7921
- prop = $(this).attr('name');
8067
+ prop = this.getAttribute('data-name') || this.getAttribute('name')
7922
8068
  if(prop && prop != 'undefined') {//make sure it's suppoesed to be a prop field
7923
8069
  switch ($(this).data('ftype')) {
7924
8070
  case 'passthrough':
@@ -7937,8 +8083,13 @@ Field Rendering Helpers
7937
8083
  object[prop] =(editor)? editor.getData():self.current.object[prop];
7938
8084
  break;
7939
8085
  case 'tinymce':
7940
- var editor = tinymce.editors.where({id:$(this).data('texteditor_id')})[0]||false;
7941
- object[prop] =(editor)? editor.getContent():self.current.object[prop];
8086
+ // var editor = tinymce.editors.where({id:$(this).data('texteditor_id')})[0]||false;
8087
+ // object[prop] =(editor)? editor.getContent():self.current.object[prop];
8088
+ // break;
8089
+ var editorId = this.getAttribute('data-texteditor_id');
8090
+ var editor = window.tinymce?.get(editorId);
8091
+ object[prop] = (editor) ? editor.getContent() : self.current.object[prop];
8092
+ object[prop] = self.cleanTinyMCEs(object[prop]);
7942
8093
  break;
7943
8094
 
7944
8095
  case 'multisorter':
@@ -8068,7 +8219,48 @@ Field Rendering Helpers
8068
8219
  return constructed;
8069
8220
  //return object;
8070
8221
  };
8071
-
8222
+ this.Object.getFromServer = function(id, specs, callback) {
8223
+ /*|{
8224
+ featured:true,
8225
+ tags:'load','get'
8226
+ description:'retrieves a fresh object from server and updates Joe current object'
8227
+ }|*/
8228
+ var specs = specs || {};
8229
+ var schemaName = specs.schema || _joe.current.schemaName || (_joe.current.schema && _joe.current.schema.__schemaname);
8230
+ var goto = (specs.goto === false)?false: true;
8231
+ if (!schemaName || !id) {
8232
+ console.warn('Cannot fetch object: missing schema or ID.');
8233
+ if (callback) callback(false);
8234
+ return;
8235
+ }
8236
+
8237
+ var url = '/API/object/' + schemaName + '/_id/' + id;
8238
+
8239
+ $.get(url, function(data) {
8240
+ if (!data || !data._id) {
8241
+ console.warn('No object returned from server.');
8242
+ if (callback) callback(false);
8243
+ return;
8244
+ }
8245
+ var toUpdate = _joe.search(id)[0] || false;
8246
+ if (toUpdate) {
8247
+ $.extend(true, toUpdate, data);
8248
+ }
8249
+ if(goto){
8250
+ if(_joe.current.object && _joe.current.object._id == data._id){
8251
+ //already on the same object
8252
+ _joe.current.object = data; // 🛠️ Fresh object loaded
8253
+
8254
+ }
8255
+ var specs = $.extend({},_joe.current.specs||{},{schema:schemaName,force:true}); // 🛠️ Use current view specs if available
8256
+ _joe.show(data, specs); // 🖌️ Full repaint using Joe system
8257
+ }
8258
+ if (callback) callback(true, data);
8259
+ }).fail(function(err) {
8260
+ console.error('Error fetching object from server:', err);
8261
+ if (callback) callback(false);
8262
+ });
8263
+ };
8072
8264
  /*-------------------------------------------------------------------->
8073
8265
  EXPORT DATA
8074
8266
  <--------------------------------------------------------------------*/