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/CHANGELOG.md CHANGED
@@ -1,10 +1,18 @@
1
1
  ## CHANGELOG
2
2
 
3
+ ### 0.10.400
4
+ - Initial work with ai partner
5
+ - button field added
6
+ - getFromServer added to object options
7
+ - best practices doc added
8
+
3
9
  ### 0.10.300
4
10
  - initial aws fix for bucketname
5
11
  310 - added tag_id to tags
6
12
  311 - fixed undefined icon bug in autocomplete
7
13
  312 - sourcemap fixed, status subset bug fixed.
14
+ 320 - Upgraded tinyMCE
15
+ 321 - added code to status
8
16
 
9
17
  ### 0.10.200
10
18
  227 - no product user select
File without changes
@@ -1,6 +1,10 @@
1
1
  @charset "utf-8";
2
2
  /* JOE UI Styles */
3
3
  /* theme: #006688, 0,102,136*/
4
+
5
+ :root {
6
+ --tinymce-offset: 55px;
7
+ }
4
8
  .clear{
5
9
  clear:both;
6
10
  }
@@ -2889,6 +2893,9 @@ joe-datepicker-holder > .Zebra_DatePicker.dp_visible {
2889
2893
  margin:0;
2890
2894
  line-height: 24px;
2891
2895
  }
2896
+ .joe-object-field.button-field .joe-button {
2897
+ float:none;
2898
+ }
2892
2899
  .joe-object-field .joe-button,
2893
2900
  capp-card joe-button {
2894
2901
  border-radius: 20px;
@@ -3711,7 +3718,7 @@ joe-message-holder {
3711
3718
  /* background: #fff; */
3712
3719
  overflow: hidden;
3713
3720
  display:none;
3714
- z-index:10;
3721
+ z-index:10000;
3715
3722
  /* opacity: 1; */
3716
3723
  }
3717
3724
  joe-message-holder.active{
@@ -3866,7 +3873,58 @@ div.mce-fullscreen{
3866
3873
  right: 0px !important;
3867
3874
  width: auto !important;
3868
3875
  }
3876
+ .tox-statusbar__branding,
3877
+ .tox-promotion {
3878
+ display: none !important;
3879
+ }
3880
+
3881
+ /* .tox {
3882
+ --tox-bg-color: #f2f2f2;
3883
+ --tox-toolbar-bg: #f2f2f2;
3884
+ --tox-sidebar-bg: #f2f2f2;
3885
+ --tox-dialog-bg: #f2f2f2;
3886
+ } */
3887
+
3888
+ /* Make sure TinyMCE UI always floats above other parts of the UI */
3889
+ .tox {
3890
+ z-index: 10000 !important;
3891
+ }
3892
+
3893
+ .tox-editor-container {
3894
+ position: relative !important;
3895
+ z-index: 10000 !important;
3896
+ }
3897
+
3898
+ /* Also ensure the panel or overlay doesn't clip dropdowns */
3899
+ .joe-overlay-panel,
3900
+ .joe-tinymce-holder {
3901
+ overflow: visible !important;
3902
+ }
3903
+ .tox.tox-tinymce.tox-fullscreen {
3904
+ left: var(--tinymce-offset) !important;
3905
+ top: var(--tinymce-offset) !important;
3906
+
3907
+ width: calc(100vw - var(--tinymce-offset) - 5px) !important;
3908
+ height: calc(100vh - var(--tinymce-offset) - 5px) !important;
3909
+ position: fixed !important;
3910
+ z-index: 20000 !important; /* stay above most UI, but still under your header/sidebar if needed */
3911
+ }
3869
3912
 
3913
+ /* Remove rounded corners and apply gold border to TinyMCE wrapper */
3914
+ .tox.tox-tinymce {
3915
+ border: 1px solid #dca042 !important;
3916
+ border-radius: 0 !important;
3917
+ }
3918
+
3919
+ /* Remove radius inside the editor area */
3920
+ .tox .tox-editor-container {
3921
+ border-radius: 0 !important;
3922
+ }
3923
+
3924
+ /* Optional: remove radius from content iframe too */
3925
+ .tox .tox-edit-area iframe {
3926
+ border-radius: 0 !important;
3927
+ }
3870
3928
  /*-------------------------------------------------------------------->
3871
3929
  From the Datepicker file, thanks zebra
3872
3930
  <--------------------------------------------------------------------*/
package/css/joe.css CHANGED
@@ -487,6 +487,10 @@
487
487
  * Apache 2.0 License */.geocoder-control-input{position:absolute;left:0;top:0;background-color:#fff;background-repeat:no-repeat;background-image:url(../img/search.png);background-size:26px;border:0;padding:0;text-indent:6px;font-size:13px;height:26px;width:100%;line-height:26px;background-position:right center;cursor:pointer}.geocoder-control{width:26px;height:26px;-webkit-transition:width .175s ease-in;-moz-transition:width .175s ease-in;-ms-transition:width .175s ease-in;-o-transition:width .175s ease-in;transition:width .175s ease-in}.geocoder-control-expanded,.leaflet-touch .geocoder-control-expanded{width:275px}.geocoder-control-input.geocoder-control-loading{background-image:url(../img/loading.gif);background-size:26px}@media only screen and (min--moz-device-pixel-ratio:2),only screen and (-o-min-device-pixel-ratio:2/1),only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){.geocoder-control-input{background-image:url(../img/search@2x.png)}.geocoder-control-input.geocoder-control-loading{background-image:url(../img/loading@2x.gif)}}.geocoder-control-input:focus{outline:0;cursor:text}.geocoder-control-input::-ms-clear{display:none}.geocoder-control-suggestions{width:100%;position:absolute;top:26px;left:0;list-style:none;padding:0;margin:10px 0 0;overflow:hidden;display:none}.geocoder-control-suggestions .geocoder-control-suggestion{font-size:13px;padding:7px;background:#fff;border-top:1px solid #f1f1f1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}.geocoder-control-suggestions .geocoder-control-suggestion:first-child{border:0}.geocoder-control-suggestions .geocoder-control-suggestion.geocoder-control-selected,.geocoder-control-suggestions .geocoder-control-suggestion:hover{background:#00c0ff;border-color:#00c0ff}.leaflet-right .geocoder-control-suggestions{left:auto;right:0}.leaflet-right .geocoder-control-input{left:auto;right:0}.leaflet-touch .geocoder-control{width:30px;height:30px}.leaflet-touch .geocoder-control.geocoder-control-expanded{width:275px}.leaflet-touch .geocoder-control-input{height:30px;line-height:30px;background-size:30px}.leaflet-touch .geocoder-control-suggestions{top:30px}.leaflet-oldie .geocoder-control-input,.leaflet-oldie .geocoder-control-suggestions{border:1px solid #999}@charset "utf-8";
488
488
  /* JOE UI Styles */
489
489
  /* theme: #006688, 0,102,136*/
490
+
491
+ :root {
492
+ --tinymce-offset: 55px;
493
+ }
490
494
  .clear{
491
495
  clear:both;
492
496
  }
@@ -3375,6 +3379,9 @@ joe-datepicker-holder > .Zebra_DatePicker.dp_visible {
3375
3379
  margin:0;
3376
3380
  line-height: 24px;
3377
3381
  }
3382
+ .joe-object-field.button-field .joe-button {
3383
+ float:none;
3384
+ }
3378
3385
  .joe-object-field .joe-button,
3379
3386
  capp-card joe-button {
3380
3387
  border-radius: 20px;
@@ -4197,7 +4204,7 @@ joe-message-holder {
4197
4204
  /* background: #fff; */
4198
4205
  overflow: hidden;
4199
4206
  display:none;
4200
- z-index:10;
4207
+ z-index:10000;
4201
4208
  /* opacity: 1; */
4202
4209
  }
4203
4210
  joe-message-holder.active{
@@ -4352,7 +4359,58 @@ div.mce-fullscreen{
4352
4359
  right: 0px !important;
4353
4360
  width: auto !important;
4354
4361
  }
4362
+ .tox-statusbar__branding,
4363
+ .tox-promotion {
4364
+ display: none !important;
4365
+ }
4366
+
4367
+ /* .tox {
4368
+ --tox-bg-color: #f2f2f2;
4369
+ --tox-toolbar-bg: #f2f2f2;
4370
+ --tox-sidebar-bg: #f2f2f2;
4371
+ --tox-dialog-bg: #f2f2f2;
4372
+ } */
4373
+
4374
+ /* Make sure TinyMCE UI always floats above other parts of the UI */
4375
+ .tox {
4376
+ z-index: 10000 !important;
4377
+ }
4378
+
4379
+ .tox-editor-container {
4380
+ position: relative !important;
4381
+ z-index: 10000 !important;
4382
+ }
4383
+
4384
+ /* Also ensure the panel or overlay doesn't clip dropdowns */
4385
+ .joe-overlay-panel,
4386
+ .joe-tinymce-holder {
4387
+ overflow: visible !important;
4388
+ }
4389
+ .tox.tox-tinymce.tox-fullscreen {
4390
+ left: var(--tinymce-offset) !important;
4391
+ top: var(--tinymce-offset) !important;
4392
+
4393
+ width: calc(100vw - var(--tinymce-offset) - 5px) !important;
4394
+ height: calc(100vh - var(--tinymce-offset) - 5px) !important;
4395
+ position: fixed !important;
4396
+ z-index: 20000 !important; /* stay above most UI, but still under your header/sidebar if needed */
4397
+ }
4355
4398
 
4399
+ /* Remove rounded corners and apply gold border to TinyMCE wrapper */
4400
+ .tox.tox-tinymce {
4401
+ border: 1px solid #dca042 !important;
4402
+ border-radius: 0 !important;
4403
+ }
4404
+
4405
+ /* Remove radius inside the editor area */
4406
+ .tox .tox-editor-container {
4407
+ border-radius: 0 !important;
4408
+ }
4409
+
4410
+ /* Optional: remove radius from content iframe too */
4411
+ .tox .tox-edit-area iframe {
4412
+ border-radius: 0 !important;
4413
+ }
4356
4414
  /*-------------------------------------------------------------------->
4357
4415
  From the Datepicker file, thanks zebra
4358
4416
  <--------------------------------------------------------------------*/
@@ -476,6 +476,7 @@ function JsonObjectEditor(specs){
476
476
  respond_timeout = setTimeout(self.respond,200);
477
477
  }
478
478
  });
479
+ self.initButtons();
479
480
  initialized = true;
480
481
  self.respond();
481
482
  endLogGroup();
@@ -483,7 +484,38 @@ function JsonObjectEditor(specs){
483
484
 
484
485
  callback && callback();
485
486
  };
487
+ this.initButtons = function(){
488
+ // 🧩 Joe Button Universal Click Handler
489
+ $(document).on('click', 'joe-button', function(e) {
490
+ e.preventDefault();
486
491
 
492
+ var $btn = $(this);
493
+ var actionName = $btn.attr('action');
494
+
495
+ if (!actionName) {
496
+ console.warn('No action defined for joe-button');
497
+ return;
498
+ }
499
+
500
+ var currentObject = _joe.current ? _joe.current.object : null;
501
+ var currentSchema = _joe.current && _joe.current.schema;
502
+ var currentSchemaMethods = currentSchema ? currentSchema.methods : null;
503
+
504
+ // Priority 1: Backend async
505
+ if (JOE.async && typeof JOE.async[actionName] === 'function') {
506
+ JOE.async[actionName](currentObject, e);
507
+ return;
508
+ }
509
+
510
+ // Priority 2: Schema-defined client methods
511
+ if (currentSchemaMethods && typeof currentSchemaMethods[actionName] === 'function') {
512
+ currentSchemaMethods[actionName](currentObject, e);
513
+ return;
514
+ }
515
+
516
+ console.warn('No method found for joe-button action:', actionName);
517
+ });
518
+ }
487
519
  this.resizeOk = function(){
488
520
  if(!$c.isMobile()){
489
521
  return true;
@@ -3369,7 +3401,9 @@ this.renderHTMLContent = function(specs){
3369
3401
  case 'color':
3370
3402
  html+= self.renderColorField(prop);
3371
3403
  break;
3372
-
3404
+ case 'button':
3405
+ html += self.renderButtonField(prop);
3406
+ break;
3373
3407
  case 'group':
3374
3408
  html+= self.renderCheckboxGroupField(prop);
3375
3409
  break;
@@ -5565,53 +5599,110 @@ this.renderHTMLContent = function(specs){
5565
5599
  var tinyconfig = {};
5566
5600
  this.renderTinyMCEField = function(prop){
5567
5601
  /*|{
5568
- tags:'render,field,wysiwyg'
5602
+ tags:'render,field,wysiwyg,tinyMCE',
5569
5603
  }|*/
5570
- var locked = self.propAsFuncOrValue(prop.locked)?' disabled ':'';
5571
- var height = (prop.height)?'style="height:'+prop.height+';"' : '';
5572
- var editor_id = cuid();
5573
- var html=
5574
- '<div class="joe-tinymce-holder joe-texteditor-field joe-field" '
5575
- /*+height*/+' data-texteditor_id="'+editor_id+'" data-ftype="tinymce" name="'+prop.name+'">'+
5576
- '<div id="'+editor_id+'" class="joe-tinymce">'+(prop.value || "")+'</div>'+
5577
- '</div>';
5604
+ const locked = self.propAsFuncOrValue(prop.locked) ? 'disabled' : '';
5605
+ const heightStyle = (prop.height) ? `style="height:${prop.height};"` : '';
5606
+ const editor_id = cuid();
5607
+
5608
+ const html =
5609
+ `<div class="joe-tinymce-holder joe-texteditor-field joe-field wysiwyg-field"
5610
+ data-texteditor_id="${editor_id}"
5611
+ data-ftype="tinymce"
5612
+ data-name="${prop.name}">
5613
+ <textarea id="${editor_id}" class="joe-tinymce" ${locked} ${heightStyle}>${prop.value || ''}</textarea>
5614
+ </div>`;
5615
+
5578
5616
  return html;
5579
5617
  };
5580
5618
 
5581
5619
  this.readyTinyMCEs = function() {
5582
5620
  tinymce.init({
5583
5621
  selector: ".joe-tinymce",
5584
- //max_height: 300,
5585
- // height:500,
5586
- plugins:['table wordcount link image code searchreplace autoresize fullscreen'],
5587
- menu : { // this is the complete default configuration
5588
- edit : {title : 'Edit' , items : 'undo redo | cut copy paste pastetext | selectall'},
5589
- format : {title : 'Format', items : 'bold italic underline strikethrough superscript subscript | formats | removeformat'},
5590
- table : {title : 'Table' , items : 'inserttable tableprops deletetable | cell row column'},
5591
- tools : {title : 'Tools' , items : 'spellchecker code link image'}
5592
- },
5593
- toolbar: 'fullscreen | undo redo | bold italic removeformat | bullist numlist outdent indent',
5594
- // toolbar: 'insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image'
5595
- /* plugins: [
5596
- "advlist autolink lists link image charmap print preview anchor",
5597
- "searchreplace visualblocks code fullscreen",
5598
- "insertdatetime media table contextmenu paste"
5599
- ],*/
5600
- /*toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"*/
5601
- });
5602
- $('.joe-tinymce').each(function(){
5603
- var field = self.getField($(this).parents('.wysiwyg-field').data('name'));
5604
- if(field.height){
5605
- $('.mce-edit-area').height(field.height);
5622
+ base_url: '/JsonObjectEditor/js/plugins/tinymce',
5623
+ suffix: '.min',
5624
+ license_key: 'gpl',
5625
+ browser_spellcheck: true,
5626
+ contextmenu: false,
5627
+ content_style: `
5628
+ body {
5629
+ font-size: 16px;
5630
+ line-height: 21px;
5631
+ }
5632
+ `,
5633
+ plugins: ['table', 'wordcount', 'link', 'image', 'code', 'searchreplace', 'autoresize', 'fullscreen', 'lists'],
5634
+
5635
+ toolbar: 'fullscreen | undo redo | h1 h2 h3 h4 h5 |bold italic removeformat | bullist numlist outdent indent | code',
5636
+
5637
+ // Local TinyMCE asset paths
5638
+ skin_url: '/JsonObjectEditor/js/plugins/tinymce/skins/ui/oxide/',
5639
+ content_css:'/JsonObjectEditor/js/plugins/tinymce/skins/content/default/content.css',
5640
+ theme_url: '/JsonObjectEditor/js/plugins/tinymce/themes/silver/theme.min.js',
5641
+ icons_url: '/JsonObjectEditor/js/plugins/tinymce/icons/default/icons.min.js',
5642
+
5643
+ // Optional: hook into instance ready for dynamic height
5644
+ init_instance_callback: function(editor) {
5645
+ const textarea = editor.targetElm;
5646
+ const fieldContainer = textarea.closest('.wysiwyg-field');
5647
+ if (fieldContainer) {
5648
+ const fieldName = fieldContainer.getAttribute('data-name');
5649
+ const field = self.getField(fieldName);
5650
+ if (field && field.height) {
5651
+ const iframe = editor.getContainer().querySelector('iframe');
5652
+ if (iframe) {
5653
+ iframe.style.height = `${field.height}px`;
5654
+ }
5655
+ }
5656
+ }
5606
5657
  }
5607
-
5608
- });
5658
+ });
5609
5659
 
5610
5660
  };
5661
+ this.cleanTinyMCEs = function(html) {
5662
+ const temp = document.createElement('div');
5663
+ temp.innerHTML = html;
5664
+
5665
+ // Loop through all elements
5666
+ temp.querySelectorAll('*').forEach(el => {
5667
+ // Remove all data-* attributes
5668
+ [...el.attributes].forEach(attr => {
5669
+ if (attr.name.startsWith('data-')) {
5670
+ el.removeAttribute(attr.name);
5671
+ }
5672
+
5673
+ // Optionally clean up some noisy inline styles
5674
+ if (attr.name === 'style') {
5675
+ const styleVal = attr.value.toLowerCase();
5676
+ if (
5677
+ styleVal.includes('font-weight: 400') ||
5678
+ styleVal.includes('font-family') ||
5679
+ styleVal.includes('white-space:pre') ||
5680
+ styleVal.includes('line-height') ||
5681
+ styleVal.includes('margin') ||
5682
+ styleVal.includes('orphans') || // lol
5683
+ styleVal.includes('widows')
5684
+ ) {
5685
+ el.removeAttribute('style');
5686
+ }
5687
+ }
5688
+ });
5689
+
5690
+ // Clean up empty span tags (common from Google Docs)
5691
+ if (
5692
+ el.tagName === 'SPAN' &&
5693
+ el.attributes.length === 0 &&
5694
+ el.textContent.trim() === ''
5695
+ ) {
5696
+ el.remove();
5697
+ }
5698
+ });
5699
+
5700
+ return temp.innerHTML;
5701
+ }
5611
5702
  self.texteditors = [];
5612
5703
 
5613
5704
  this.readyTextEditors = this.readyTinyMCEs;
5614
- encapsulateFieldType('wysiwyg',self.renderTinyMCEField,{ready:self.readyTextEditors});
5705
+ encapsulateFieldType('wysiwyg',self.renderTinyMCEField,{ready:self.readyTextEditors,clean:this.cleanTinyMCEs});
5615
5706
 
5616
5707
  /*----------------------------->
5617
5708
  Y | Object Field
@@ -5663,7 +5754,59 @@ Y | Object Field
5663
5754
  var html= 'passthrough';
5664
5755
  return html;
5665
5756
  };
5757
+ /*----------------------------->
5758
+ BTN | BTN Field
5759
+ <-----------------------------*/
5760
+ this.renderButtonField = function(prop) {
5761
+ /*|{
5762
+ tags:'render,field,button',
5763
+ specs:'display,method,color,schema,svg,bgcolor'
5764
+ }|*/
5765
+ var itemObj = self.current.object || {}; // support field functions needing context
5766
+
5767
+ var display = self.propAsFuncOrValue(prop.display, itemObj);
5768
+ var method = self.propAsFuncOrValue(prop.method, itemObj);
5769
+ var color = self.propAsFuncOrValue(prop.color, itemObj);
5770
+ var schema = self.propAsFuncOrValue(prop.schema, itemObj);
5771
+ var svgOverride = self.propAsFuncOrValue(prop.svg, itemObj);
5772
+ var title = self.propAsFuncOrValue(prop.title, itemObj);
5773
+ var bgcolor = self.propAsFuncOrValue(prop.bgcolor, itemObj);
5774
+ var cssclass = self.propAsFuncOrValue(prop.cssclass, itemObj)||' joe-nofloat';
5775
+ var svgMarkup = '';
5776
+
5777
+ // 1. Try to pull menuicon from schema if schema is provided
5778
+ if (schema && _joe && _joe.Schemas && _joe.Schemas[schema] && _joe.Schemas[schema].menuicon) {
5779
+ svgMarkup = _joe.Schemas[schema].menuicon;
5780
+ }
5781
+
5782
+ // 2. Direct SVG overrides schema icon if provided
5783
+ if (svgOverride) {
5784
+ svgMarkup = '<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">' + svgOverride + '</svg>';
5785
+ }
5666
5786
 
5787
+ // 3. Build the button
5788
+ var styleAttr = bgcolor ? 'style="background-color: ' + bgcolor + ';"' : '';
5789
+
5790
+ var html = '<joe-button class="joe-button joe-field '+cssclass
5791
+ + (color ? ' joe-' + color + '-button' : '')
5792
+ + '" name="' + (prop.name || '') + '" '
5793
+ + (schema ? 'schema="' + schema + '" ' : '')
5794
+ + (method ? 'action="' + method + '" ' : '')
5795
+ + (color ? 'color="' + color + '" ' : '')
5796
+ + (title ? 'title="' + title + '" ' : '')
5797
+ + styleAttr + ' '
5798
+ + 'data-btnid="' + (prop.name || '') + '">';
5799
+
5800
+ if (svgMarkup) {
5801
+ html += svgMarkup + ' ';
5802
+ }
5803
+
5804
+ html += (display || "Button") + '</joe-button>';
5805
+
5806
+ return html;
5807
+ };
5808
+
5809
+ encapsulateFieldType('button', self.renderButtonField);
5667
5810
  /*----------------------------->
5668
5811
  27 | Comments
5669
5812
  <-----------------------------*/
@@ -7875,6 +8018,9 @@ Field Rendering Helpers
7875
8018
  //var parentFind = $('.joe-overlay.active');
7876
8019
 
7877
8020
  parentFind.find('.joe-field').each(function(){
8021
+ if (this.nodeName.toLowerCase() === 'joe-button') {
8022
+ return true; // Skip buttons, they are action elements only
8023
+ }
7878
8024
  if($(this).parents('.objectList-field,.objectlist-field').length){
7879
8025
  return true;
7880
8026
  }
@@ -7912,7 +8058,7 @@ Field Rendering Helpers
7912
8058
  case 'text':
7913
8059
  default:
7914
8060
 
7915
- prop = $(this).attr('name');
8061
+ prop = this.getAttribute('data-name') || this.getAttribute('name')
7916
8062
  if(prop && prop != 'undefined') {//make sure it's suppoesed to be a prop field
7917
8063
  switch ($(this).data('ftype')) {
7918
8064
  case 'passthrough':
@@ -7931,8 +8077,13 @@ Field Rendering Helpers
7931
8077
  object[prop] =(editor)? editor.getData():self.current.object[prop];
7932
8078
  break;
7933
8079
  case 'tinymce':
7934
- var editor = tinymce.editors.where({id:$(this).data('texteditor_id')})[0]||false;
7935
- object[prop] =(editor)? editor.getContent():self.current.object[prop];
8080
+ // var editor = tinymce.editors.where({id:$(this).data('texteditor_id')})[0]||false;
8081
+ // object[prop] =(editor)? editor.getContent():self.current.object[prop];
8082
+ // break;
8083
+ var editorId = this.getAttribute('data-texteditor_id');
8084
+ var editor = window.tinymce?.get(editorId);
8085
+ object[prop] = (editor) ? editor.getContent() : self.current.object[prop];
8086
+ object[prop] = self.cleanTinyMCEs(object[prop]);
7936
8087
  break;
7937
8088
 
7938
8089
  case 'multisorter':
@@ -8062,7 +8213,48 @@ Field Rendering Helpers
8062
8213
  return constructed;
8063
8214
  //return object;
8064
8215
  };
8065
-
8216
+ this.Object.getFromServer = function(id, specs, callback) {
8217
+ /*|{
8218
+ featured:true,
8219
+ tags:'load','get'
8220
+ description:'retrieves a fresh object from server and updates Joe current object'
8221
+ }|*/
8222
+ var specs = specs || {};
8223
+ var schemaName = specs.schema || _joe.current.schemaName || (_joe.current.schema && _joe.current.schema.__schemaname);
8224
+ var goto = (specs.goto === false)?false: true;
8225
+ if (!schemaName || !id) {
8226
+ console.warn('Cannot fetch object: missing schema or ID.');
8227
+ if (callback) callback(false);
8228
+ return;
8229
+ }
8230
+
8231
+ var url = '/API/object/' + schemaName + '/_id/' + id;
8232
+
8233
+ $.get(url, function(data) {
8234
+ if (!data || !data._id) {
8235
+ console.warn('No object returned from server.');
8236
+ if (callback) callback(false);
8237
+ return;
8238
+ }
8239
+ var toUpdate = _joe.search(id)[0] || false;
8240
+ if (toUpdate) {
8241
+ $.extend(true, toUpdate, data);
8242
+ }
8243
+ if(goto){
8244
+ if(_joe.current.object && _joe.current.object._id == data._id){
8245
+ //already on the same object
8246
+ _joe.current.object = data; // 🛠️ Fresh object loaded
8247
+
8248
+ }
8249
+ var specs = $.extend({},_joe.current.specs||{},{schema:schemaName,force:true}); // 🛠️ Use current view specs if available
8250
+ _joe.show(data, specs); // 🖌️ Full repaint using Joe system
8251
+ }
8252
+ if (callback) callback(true, data);
8253
+ }).fail(function(err) {
8254
+ console.error('Error fetching object from server:', err);
8255
+ if (callback) callback(false);
8256
+ });
8257
+ };
8066
8258
  /*-------------------------------------------------------------------->
8067
8259
  EXPORT DATA
8068
8260
  <--------------------------------------------------------------------*/