@sapui5/sap.ui.richtexteditor 1.84.40 → 1.84.42

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 (430) hide show
  1. package/package.json +1 -1
  2. package/src/sap/ui/richtexteditor/.library +27 -4
  3. package/src/sap/ui/richtexteditor/RTESplitButton.js +3 -3
  4. package/src/sap/ui/richtexteditor/RTESplitButtonRenderer.js +8 -4
  5. package/src/sap/ui/richtexteditor/RichTextEditor.js +551 -401
  6. package/src/sap/ui/richtexteditor/RichTextEditorRenderer.js +15 -7
  7. package/src/sap/ui/richtexteditor/ToolbarWrapper.js +570 -307
  8. package/src/sap/ui/richtexteditor/ToolbarWrapperRenderer.js +4 -5
  9. package/src/sap/ui/richtexteditor/js/tiny_mce4/plugins/a11ychecker/plugin.js +1 -1
  10. package/src/sap/ui/richtexteditor/js/tiny_mce4/plugins/a11ychecker/plugin.min.js +1 -1
  11. package/src/sap/ui/richtexteditor/js/tiny_mce4/plugins/help/plugin.min.js +1 -1
  12. package/src/sap/ui/richtexteditor/js/tiny_mce6/icons/default/icons.js +197 -0
  13. package/src/sap/ui/richtexteditor/js/tiny_mce6/icons/default/icons.min.js +7 -0
  14. package/src/sap/ui/richtexteditor/js/tiny_mce6/icons/default/index.js +13 -0
  15. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/ar.js +7 -0
  16. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/bg_BG.js +7 -0
  17. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/ca.js +7 -0
  18. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/cs.js +7 -0
  19. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/cy.js +1 -0
  20. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/da.js +7 -0
  21. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/de.js +7 -0
  22. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/dv.js +1 -0
  23. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/el.js +7 -0
  24. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/en_GB.js +261 -0
  25. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/es.js +7 -0
  26. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/es_MX.js +1 -0
  27. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/et.js +1 -0
  28. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/eu.js +7 -0
  29. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/fa.js +7 -0
  30. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/fi.js +7 -0
  31. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/fr_FR.js +7 -0
  32. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/he_IL.js +7 -0
  33. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/hi.js +7 -0
  34. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/hr.js +7 -0
  35. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/hu_HU.js +7 -0
  36. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/id.js +7 -0
  37. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/it.js +7 -0
  38. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/ja.js +7 -0
  39. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/kk.js +7 -0
  40. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/ko_KR.js +7 -0
  41. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/lt.js +1 -0
  42. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/lv.js +1 -0
  43. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/ms.js +7 -0
  44. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/nb_NO.js +7 -0
  45. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/nl.js +7 -0
  46. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/pl.js +7 -0
  47. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/pt_BR.js +7 -0
  48. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/pt_PT.js +7 -0
  49. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/ro.js +7 -0
  50. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/ru.js +7 -0
  51. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/sk.js +7 -0
  52. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/sl_SI.js +7 -0
  53. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/sr.js +1 -0
  54. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/sv_SE.js +7 -0
  55. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/th_TH.js +7 -0
  56. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/tr.js +7 -0
  57. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/uk.js +7 -0
  58. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/vi.js +7 -0
  59. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/zh_CN.js +7 -0
  60. package/src/sap/ui/richtexteditor/js/tiny_mce6/langs/zh_TW.js +7 -0
  61. package/src/sap/ui/richtexteditor/js/tiny_mce6/license.txt +5 -0
  62. package/src/sap/ui/richtexteditor/js/tiny_mce6/models/dom/index.js +13 -0
  63. package/src/sap/ui/richtexteditor/js/tiny_mce6/models/dom/model.js +8045 -0
  64. package/src/sap/ui/richtexteditor/js/tiny_mce6/models/dom/model.min.js +9 -0
  65. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/accordion/index.js +13 -0
  66. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/accordion/plugin.js +1038 -0
  67. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/accordion/plugin.min.js +9 -0
  68. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/CHANGELOG.md +110 -0
  69. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/codemirror.min.css +13 -0
  70. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/codemirror.min.js +13 -0
  71. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/customeditor.js +10 -0
  72. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/customeditor.min.js +10 -0
  73. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/ar.js +15 -0
  74. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/bg_BG.js +15 -0
  75. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/ca.js +15 -0
  76. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/cs.js +15 -0
  77. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/da.js +15 -0
  78. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/de.js +15 -0
  79. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/el.js +15 -0
  80. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/es.js +15 -0
  81. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/eu.js +15 -0
  82. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/fa.js +15 -0
  83. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/fi.js +15 -0
  84. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/fr_FR.js +15 -0
  85. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/he_IL.js +15 -0
  86. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/hi.js +15 -0
  87. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/hr.js +15 -0
  88. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/hu_HU.js +15 -0
  89. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/id.js +15 -0
  90. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/it.js +15 -0
  91. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/ja.js +15 -0
  92. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/kk.js +15 -0
  93. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/ko_KR.js +15 -0
  94. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/ms.js +15 -0
  95. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/nb_NO.js +15 -0
  96. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/nl.js +15 -0
  97. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/pl.js +15 -0
  98. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/pt_BR.js +15 -0
  99. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/pt_PT.js +15 -0
  100. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/ro.js +15 -0
  101. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/ru.js +15 -0
  102. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/sk.js +15 -0
  103. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/sl_SI.js +15 -0
  104. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/sv_SE.js +15 -0
  105. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/th_TH.js +15 -0
  106. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/tr.js +15 -0
  107. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/uk.js +15 -0
  108. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/vi.js +15 -0
  109. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/zh_CN.js +15 -0
  110. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/langs/zh_TW.js +15 -0
  111. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/license.txt +5 -0
  112. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/plugin.js +10 -0
  113. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/plugin.min.js +10 -0
  114. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/readme.txt +10 -0
  115. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advcode/version.txt +1 -0
  116. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advlist/index.js +13 -0
  117. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advlist/plugin.js +264 -0
  118. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/advlist/plugin.min.js +9 -0
  119. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/anchor/index.js +13 -0
  120. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/anchor/plugin.js +219 -0
  121. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/anchor/plugin.min.js +9 -0
  122. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/autolink/index.js +13 -0
  123. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/autolink/plugin.js +233 -0
  124. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/autolink/plugin.min.js +9 -0
  125. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/autoresize/index.js +13 -0
  126. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/autoresize/plugin.js +197 -0
  127. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/autoresize/plugin.min.js +9 -0
  128. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/autosave/index.js +13 -0
  129. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/autosave/plugin.js +238 -0
  130. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/autosave/plugin.min.js +9 -0
  131. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/charmap/index.js +13 -0
  132. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/charmap/plugin.js +1663 -0
  133. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/charmap/plugin.min.js +9 -0
  134. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/code/index.js +13 -0
  135. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/code/plugin.js +90 -0
  136. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/code/plugin.min.js +9 -0
  137. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/codesample/index.js +13 -0
  138. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/codesample/plugin.js +2468 -0
  139. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/codesample/plugin.min.js +9 -0
  140. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/directionality/index.js +13 -0
  141. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/directionality/plugin.js +400 -0
  142. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/directionality/plugin.min.js +9 -0
  143. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/emoticons/index.js +13 -0
  144. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/emoticons/js/emojiimages.js +7 -0
  145. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/emoticons/js/emojiimages.min.js +9 -0
  146. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/emoticons/js/emojis.js +7 -0
  147. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/emoticons/js/emojis.min.js +8 -0
  148. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/emoticons/plugin.js +600 -0
  149. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/emoticons/plugin.min.js +9 -0
  150. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/fullscreen/index.js +13 -0
  151. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/fullscreen/plugin.js +1201 -0
  152. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/fullscreen/plugin.min.js +9 -0
  153. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/index.js +13 -0
  154. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/ar.js +96 -0
  155. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/bg_BG.js +96 -0
  156. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/ca.js +96 -0
  157. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/cs.js +96 -0
  158. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/da.js +96 -0
  159. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/de.js +96 -0
  160. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/el.js +96 -0
  161. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/en.js +96 -0
  162. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/es.js +96 -0
  163. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/eu.js +96 -0
  164. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/fa.js +96 -0
  165. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/fi.js +96 -0
  166. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/fr_FR.js +96 -0
  167. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/he_IL.js +96 -0
  168. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/hi.js +96 -0
  169. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/hr.js +96 -0
  170. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/hu_HU.js +96 -0
  171. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/id.js +96 -0
  172. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/it.js +96 -0
  173. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/ja.js +96 -0
  174. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/kk.js +96 -0
  175. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/ko_KR.js +96 -0
  176. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/ms.js +96 -0
  177. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/nb_NO.js +96 -0
  178. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/nl.js +96 -0
  179. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/pl.js +96 -0
  180. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/pt_BR.js +96 -0
  181. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/pt_PT.js +96 -0
  182. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/ro.js +96 -0
  183. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/ru.js +96 -0
  184. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/sk.js +96 -0
  185. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/sl_SI.js +96 -0
  186. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/sv_SE.js +96 -0
  187. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/th_TH.js +96 -0
  188. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/tr.js +96 -0
  189. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/uk.js +96 -0
  190. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/vi.js +96 -0
  191. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/zh_CN.js +90 -0
  192. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/js/i18n/keynav/zh_TW.js +96 -0
  193. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/plugin.js +898 -0
  194. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/help/plugin.min.js +9 -0
  195. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/image/index.js +13 -0
  196. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/image/plugin.js +1509 -0
  197. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/image/plugin.min.js +9 -0
  198. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/importcss/index.js +13 -0
  199. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/importcss/plugin.js +349 -0
  200. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/importcss/plugin.min.js +9 -0
  201. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/insertdatetime/index.js +13 -0
  202. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/insertdatetime/plugin.js +192 -0
  203. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/insertdatetime/plugin.min.js +9 -0
  204. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/link/index.js +13 -0
  205. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/link/plugin.js +1246 -0
  206. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/link/plugin.min.js +9 -0
  207. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/lists/index.js +13 -0
  208. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/lists/plugin.js +1953 -0
  209. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/lists/plugin.min.js +9 -0
  210. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/media/index.js +13 -0
  211. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/media/plugin.js +1240 -0
  212. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/media/plugin.min.js +9 -0
  213. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/nonbreaking/index.js +13 -0
  214. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/nonbreaking/plugin.js +128 -0
  215. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/nonbreaking/plugin.min.js +9 -0
  216. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/pagebreak/index.js +13 -0
  217. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/pagebreak/plugin.js +122 -0
  218. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/pagebreak/plugin.min.js +9 -0
  219. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/CHANGELOG.md +402 -0
  220. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/js/wordimport.js +3498 -0
  221. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/ar.js +20 -0
  222. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/bg_BG.js +20 -0
  223. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/ca.js +20 -0
  224. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/cs.js +20 -0
  225. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/da.js +20 -0
  226. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/de.js +20 -0
  227. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/el.js +20 -0
  228. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/es.js +20 -0
  229. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/eu.js +20 -0
  230. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/fa.js +20 -0
  231. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/fi.js +20 -0
  232. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/fr_FR.js +20 -0
  233. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/he_IL.js +20 -0
  234. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/hi.js +20 -0
  235. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/hr.js +20 -0
  236. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/hu_HU.js +20 -0
  237. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/id.js +20 -0
  238. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/it.js +20 -0
  239. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/ja.js +20 -0
  240. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/kk.js +20 -0
  241. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/ko_KR.js +20 -0
  242. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/ms.js +20 -0
  243. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/nb_NO.js +20 -0
  244. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/nl.js +20 -0
  245. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/pl.js +20 -0
  246. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/pt_BR.js +20 -0
  247. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/pt_PT.js +20 -0
  248. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/ro.js +20 -0
  249. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/ru.js +20 -0
  250. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/sk.js +20 -0
  251. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/sl_SI.js +20 -0
  252. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/sv_SE.js +20 -0
  253. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/th_TH.js +20 -0
  254. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/tr.js +20 -0
  255. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/uk.js +20 -0
  256. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/vi.js +20 -0
  257. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/zh_CN.js +20 -0
  258. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/langs/zh_TW.js +20 -0
  259. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/license.txt +5 -0
  260. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/plugin.js +10 -0
  261. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/plugin.min.js +10 -0
  262. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/readme.txt +10 -0
  263. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/powerpaste/version.txt +1 -0
  264. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/preview/index.js +13 -0
  265. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/preview/plugin.js +102 -0
  266. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/preview/plugin.min.js +9 -0
  267. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/quickbars/index.js +13 -0
  268. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/quickbars/plugin.js +443 -0
  269. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/quickbars/plugin.min.js +9 -0
  270. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/save/index.js +13 -0
  271. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/save/plugin.js +123 -0
  272. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/save/plugin.min.js +9 -0
  273. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/searchreplace/index.js +13 -0
  274. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/searchreplace/plugin.js +1098 -0
  275. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/searchreplace/plugin.min.js +9 -0
  276. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/table/index.js +13 -0
  277. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/table/plugin.js +3467 -0
  278. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/table/plugin.min.js +9 -0
  279. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/template/index.js +13 -0
  280. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/template/plugin.js +572 -0
  281. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/template/plugin.min.js +9 -0
  282. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/visualblocks/index.js +13 -0
  283. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/visualblocks/plugin.js +103 -0
  284. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/visualblocks/plugin.min.js +9 -0
  285. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/visualchars/index.js +13 -0
  286. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/visualchars/plugin.js +565 -0
  287. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/visualchars/plugin.min.js +9 -0
  288. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/wordcount/index.js +13 -0
  289. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/wordcount/plugin.js +410 -0
  290. package/src/sap/ui/richtexteditor/js/tiny_mce6/plugins/wordcount/plugin.min.js +9 -0
  291. package/src/sap/ui/richtexteditor/js/tiny_mce6/readme.txt +12 -0
  292. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/content/dark/content.css +72 -0
  293. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/content/dark/content.min.css +7 -0
  294. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/content/default/content.css +67 -0
  295. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/content/default/content.min.css +7 -0
  296. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/content/document/content.css +72 -0
  297. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/content/document/content.min.css +7 -0
  298. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/content/tinymce-5/content.css +67 -0
  299. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/content/tinymce-5/content.min.css +7 -0
  300. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/content/tinymce-5-dark/content.css +72 -0
  301. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/content/tinymce-5-dark/content.min.css +7 -0
  302. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/content/writer/content.css +68 -0
  303. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/content/writer/content.min.css +7 -0
  304. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/oxide/content.css +791 -0
  305. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/oxide/content.inline.css +785 -0
  306. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/oxide/content.inline.min.css +7 -0
  307. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/oxide/content.min.css +7 -0
  308. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/oxide/skin.css +3694 -0
  309. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/oxide/skin.min.css +7 -0
  310. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/oxide/skin.shadowdom.css +36 -0
  311. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/oxide/skin.shadowdom.min.css +7 -0
  312. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/oxide-dark/content.css +772 -0
  313. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/oxide-dark/content.inline.css +785 -0
  314. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/oxide-dark/content.inline.min.css +7 -0
  315. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/oxide-dark/content.min.css +7 -0
  316. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/oxide-dark/skin.css +3697 -0
  317. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/oxide-dark/skin.min.css +7 -0
  318. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/oxide-dark/skin.shadowdom.css +36 -0
  319. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/oxide-dark/skin.shadowdom.min.css +7 -0
  320. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/tinymce-5/content.css +791 -0
  321. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/tinymce-5/content.inline.css +785 -0
  322. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/tinymce-5/content.inline.min.css +7 -0
  323. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/tinymce-5/content.min.css +7 -0
  324. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/tinymce-5/skin.css +3788 -0
  325. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/tinymce-5/skin.min.css +7 -0
  326. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/tinymce-5/skin.shadowdom.css +36 -0
  327. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/tinymce-5/skin.shadowdom.min.css +7 -0
  328. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/tinymce-5-dark/content.css +772 -0
  329. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/tinymce-5-dark/content.inline.css +785 -0
  330. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/tinymce-5-dark/content.inline.min.css +7 -0
  331. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/tinymce-5-dark/content.min.css +7 -0
  332. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/tinymce-5-dark/skin.css +3788 -0
  333. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/tinymce-5-dark/skin.min.css +7 -0
  334. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/tinymce-5-dark/skin.shadowdom.css +36 -0
  335. package/src/sap/ui/richtexteditor/js/tiny_mce6/skins/ui/tinymce-5-dark/skin.shadowdom.min.css +7 -0
  336. package/src/sap/ui/richtexteditor/js/tiny_mce6/themes/silver/index.js +13 -0
  337. package/src/sap/ui/richtexteditor/js/tiny_mce6/themes/silver/theme.js +30172 -0
  338. package/src/sap/ui/richtexteditor/js/tiny_mce6/themes/silver/theme.min.js +9 -0
  339. package/src/sap/ui/richtexteditor/js/tiny_mce6/tinymce.d.ts +3206 -0
  340. package/src/sap/ui/richtexteditor/js/tiny_mce6/tinymce.js +31303 -0
  341. package/src/sap/ui/richtexteditor/js/tiny_mce6/tinymce.min.js +9 -0
  342. package/src/sap/ui/richtexteditor/js/tiny_mce6/version.txt +1 -0
  343. package/src/sap/ui/richtexteditor/library.js +72 -33
  344. package/src/sap/ui/richtexteditor/messagebundle.properties +8 -2
  345. package/src/sap/ui/richtexteditor/messagebundle_ar.properties +60 -2
  346. package/src/sap/ui/richtexteditor/messagebundle_bg.properties +60 -2
  347. package/src/sap/ui/richtexteditor/messagebundle_ca.properties +60 -2
  348. package/src/sap/ui/richtexteditor/messagebundle_cs.properties +60 -2
  349. package/src/sap/ui/richtexteditor/messagebundle_cy.properties +60 -2
  350. package/src/sap/ui/richtexteditor/messagebundle_da.properties +60 -2
  351. package/src/sap/ui/richtexteditor/messagebundle_de.properties +60 -2
  352. package/src/sap/ui/richtexteditor/messagebundle_el.properties +60 -2
  353. package/src/sap/ui/richtexteditor/messagebundle_en.properties +60 -2
  354. package/src/sap/ui/richtexteditor/messagebundle_en_GB.properties +60 -2
  355. package/src/sap/ui/richtexteditor/messagebundle_en_US_sappsd.properties +6 -2
  356. package/src/sap/ui/richtexteditor/messagebundle_en_US_saprigi.properties +105 -0
  357. package/src/sap/ui/richtexteditor/messagebundle_en_US_saptrc.properties +6 -2
  358. package/src/sap/ui/richtexteditor/messagebundle_es.properties +60 -2
  359. package/src/sap/ui/richtexteditor/messagebundle_es_MX.properties +60 -2
  360. package/src/sap/ui/richtexteditor/messagebundle_et.properties +60 -2
  361. package/src/sap/ui/richtexteditor/messagebundle_fi.properties +60 -2
  362. package/src/sap/ui/richtexteditor/messagebundle_fr.properties +60 -2
  363. package/src/sap/ui/richtexteditor/messagebundle_fr_CA.properties +60 -2
  364. package/src/sap/ui/richtexteditor/messagebundle_hi.properties +60 -2
  365. package/src/sap/ui/richtexteditor/messagebundle_hr.properties +60 -2
  366. package/src/sap/ui/richtexteditor/messagebundle_hu.properties +60 -2
  367. package/src/sap/ui/richtexteditor/messagebundle_id.properties +60 -2
  368. package/src/sap/ui/richtexteditor/messagebundle_it.properties +60 -2
  369. package/src/sap/ui/richtexteditor/messagebundle_iw.properties +60 -2
  370. package/src/sap/ui/richtexteditor/messagebundle_ja.properties +60 -2
  371. package/src/sap/ui/richtexteditor/messagebundle_kk.properties +60 -2
  372. package/src/sap/ui/richtexteditor/messagebundle_ko.properties +60 -2
  373. package/src/sap/ui/richtexteditor/messagebundle_lt.properties +60 -2
  374. package/src/sap/ui/richtexteditor/messagebundle_lv.properties +60 -2
  375. package/src/sap/ui/richtexteditor/messagebundle_ms.properties +60 -2
  376. package/src/sap/ui/richtexteditor/messagebundle_nl.properties +60 -2
  377. package/src/sap/ui/richtexteditor/messagebundle_no.properties +60 -2
  378. package/src/sap/ui/richtexteditor/messagebundle_pl.properties +60 -2
  379. package/src/sap/ui/richtexteditor/messagebundle_pt.properties +60 -2
  380. package/src/sap/ui/richtexteditor/messagebundle_pt_PT.properties +60 -2
  381. package/src/sap/ui/richtexteditor/messagebundle_ro.properties +60 -2
  382. package/src/sap/ui/richtexteditor/messagebundle_ru.properties +60 -2
  383. package/src/sap/ui/richtexteditor/messagebundle_sh.properties +60 -2
  384. package/src/sap/ui/richtexteditor/messagebundle_sk.properties +60 -2
  385. package/src/sap/ui/richtexteditor/messagebundle_sl.properties +60 -2
  386. package/src/sap/ui/richtexteditor/messagebundle_sr.properties +60 -2
  387. package/src/sap/ui/richtexteditor/messagebundle_sv.properties +60 -2
  388. package/src/sap/ui/richtexteditor/messagebundle_th.properties +60 -2
  389. package/src/sap/ui/richtexteditor/messagebundle_tr.properties +60 -2
  390. package/src/sap/ui/richtexteditor/messagebundle_uk.properties +60 -2
  391. package/src/sap/ui/richtexteditor/messagebundle_vi.properties +60 -2
  392. package/src/sap/ui/richtexteditor/messagebundle_zh_CN.properties +60 -2
  393. package/src/sap/ui/richtexteditor/messagebundle_zh_TW.properties +60 -2
  394. package/src/sap/ui/richtexteditor/themes/base/RichTextEditor.less +25 -84
  395. package/src/sap/ui/richtexteditor/themes/base/library.source.less +1 -1
  396. package/src/sap/ui/richtexteditor/themes/sap_belize/RichTextEditor.less +33 -0
  397. package/src/sap/ui/richtexteditor/themes/sap_belize/library.source.less +4 -2
  398. package/src/sap/ui/richtexteditor/themes/sap_belize_hcb/RichTextEditor.less +29 -0
  399. package/src/sap/ui/richtexteditor/themes/sap_belize_hcb/library.source.less +3 -1
  400. package/src/sap/ui/richtexteditor/themes/sap_belize_hcw/RichTextEditor.less +30 -0
  401. package/src/sap/ui/richtexteditor/themes/sap_belize_hcw/library.source.less +3 -1
  402. package/src/sap/ui/richtexteditor/themes/sap_belize_plus/library.source.less +1 -1
  403. package/src/sap/ui/richtexteditor/themes/sap_bluecrystal/library.source.less +1 -1
  404. package/src/sap/ui/richtexteditor/themes/sap_fiori_3/RichTextEditor.less +4 -5
  405. package/src/sap/ui/richtexteditor/themes/sap_fiori_3/library.source.less +1 -1
  406. package/src/sap/ui/richtexteditor/themes/sap_fiori_3_dark/RichTextEditor.less +4 -5
  407. package/src/sap/ui/richtexteditor/themes/sap_fiori_3_dark/library.source.less +1 -1
  408. package/src/sap/ui/richtexteditor/themes/sap_fiori_3_hcb/RichTextEditor.less +4 -5
  409. package/src/sap/ui/richtexteditor/themes/sap_fiori_3_hcb/library.source.less +1 -1
  410. package/src/sap/ui/richtexteditor/themes/sap_fiori_3_hcw/RichTextEditor.less +4 -5
  411. package/src/sap/ui/richtexteditor/themes/sap_fiori_3_hcw/library.source.less +1 -1
  412. package/src/sap/ui/richtexteditor/js/tiny_mce4/plugins/compat3x/css/dialog.css +0 -118
  413. package/src/sap/ui/richtexteditor/js/tiny_mce4/plugins/compat3x/img/buttons.png +0 -0
  414. package/src/sap/ui/richtexteditor/js/tiny_mce4/plugins/compat3x/img/icons.gif +0 -0
  415. package/src/sap/ui/richtexteditor/js/tiny_mce4/plugins/compat3x/img/items.gif +0 -0
  416. package/src/sap/ui/richtexteditor/js/tiny_mce4/plugins/compat3x/img/menu_arrow.gif +0 -0
  417. package/src/sap/ui/richtexteditor/js/tiny_mce4/plugins/compat3x/img/menu_check.gif +0 -0
  418. package/src/sap/ui/richtexteditor/js/tiny_mce4/plugins/compat3x/img/progress.gif +0 -0
  419. package/src/sap/ui/richtexteditor/js/tiny_mce4/plugins/compat3x/img/tabs.gif +0 -0
  420. package/src/sap/ui/richtexteditor/js/tiny_mce4/plugins/compat3x/plugin.js +0 -314
  421. package/src/sap/ui/richtexteditor/js/tiny_mce4/plugins/compat3x/plugin.min.js +0 -1
  422. package/src/sap/ui/richtexteditor/js/tiny_mce4/plugins/compat3x/tiny_mce_popup.js +0 -534
  423. package/src/sap/ui/richtexteditor/js/tiny_mce4/plugins/compat3x/utils/editable_selects.js +0 -64
  424. package/src/sap/ui/richtexteditor/js/tiny_mce4/plugins/compat3x/utils/form_utils.js +0 -214
  425. package/src/sap/ui/richtexteditor/js/tiny_mce4/plugins/compat3x/utils/mctabs.js +0 -160
  426. package/src/sap/ui/richtexteditor/js/tiny_mce4/plugins/compat3x/utils/validate.js +0 -259
  427. package/src/sap/ui/richtexteditor/themes/base/icons.gif +0 -0
  428. package/src/sap/ui/richtexteditor/themes/base/icons.png +0 -0
  429. package/src/sap/ui/richtexteditor/themes/sap_hcb/RichTextEditor.less +0 -108
  430. package/src/sap/ui/richtexteditor/themes/sap_hcb/library.source.less +0 -9
@@ -1,15 +1,14 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2023 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2024 SAP SE. All rights reserved.
4
4
  */
5
5
 
6
- /*global Promise */
7
-
8
6
  // Provides control sap.ui.richtexteditor.ToolbarWrapper.
9
7
  sap.ui.define([
10
8
  "sap/ui/thirdparty/jquery",
11
9
  'sap/ui/core/Control',
12
10
  './library',
11
+ "sap/m/library",
13
12
  'sap/ui/core/IconPool',
14
13
  'sap/ui/core/Item',
15
14
  'sap/ui/core/Core',
@@ -18,9 +17,24 @@ sap.ui.define([
18
17
  "sap/base/Log",
19
18
  "./ToolbarWrapperRenderer" // Control renderer
20
19
  ],
21
- function(jQuery, Control, library, IconPool, Item, Core, RTESplitButton, URLWhitelist, Log) {
20
+ function(
21
+ jQuery,
22
+ Control,
23
+ library,
24
+ mLibrary,
25
+ IconPool,
26
+ Item,
27
+ Core,
28
+ RTESplitButton,
29
+ URLWhitelist,
30
+ Log
31
+ ) {
22
32
  "use strict";
23
33
 
34
+ var ButtonGroups = library.ButtonGroups,
35
+ EditorCommands = library.EditorCommands,
36
+ ButtonsToCommandsMap = library.ButtonsToCommandsMap,
37
+ ButtonType = mLibrary.ButtonType;
24
38
 
25
39
  /**
26
40
  * Constructor for a new RichTextEditor's Custom Toolbar.
@@ -37,7 +51,6 @@ sap.ui.define([
37
51
  * @constructor
38
52
  * @private
39
53
  * @alias sap.ui.richtexteditor.ToolbarWrapper
40
- * @ui5-metamodel This control/element also will be described in the UI5 (legacy) designtime metamodel
41
54
  * @since 1.48
42
55
  */
43
56
  var ToolbarWrapper = Control.extend("sap.ui.richtexteditor.ToolbarWrapper", /** @lends sap.ui.richtexteditor.ToolbarWrapper.prototype */ {
@@ -87,8 +100,8 @@ sap.ui.define([
87
100
  this._helper = library.RichTextEditorHelper;
88
101
  this._oResourceBundle = Core.getLibraryResourceBundle("sap.ui.richtexteditor");
89
102
  this._oAccessibilityTexts = {};
90
- this._sTextColor = library.EditorCommands.TextColor.defaultValue;
91
- this._sBackgroundColor = library.EditorCommands.BackgroundColor.defaultValue;
103
+ this._sTextColor = EditorCommands.TextColor.defaultValue;
104
+ this._sBackgroundColor = EditorCommands.BackgroundColor.defaultValue;
92
105
  };
93
106
 
94
107
  ToolbarWrapper.prototype.onBeforeRendering = function () {
@@ -97,10 +110,10 @@ sap.ui.define([
97
110
  oEditor = this.getEditor();
98
111
 
99
112
  if (oEditor) {
100
- oToolbar.setEnabled(oEditor.getEditable());
113
+ oToolbar && oToolbar.setEnabled(oEditor.getEditable());
101
114
  }
102
115
 
103
- oToolbar.addStyleClass("sapUiRTECustomToolbar");
116
+ oToolbar && oToolbar.addStyleClass("sapUiRTECustomToolbar");
104
117
  this.setAggregation("_toolbar", oToolbar);
105
118
 
106
119
  this.setAggregation("_customInsertImageDialog",
@@ -118,12 +131,12 @@ sap.ui.define([
118
131
 
119
132
  ToolbarWrapper.prototype.onAfterRendering = function () {
120
133
  var oEditor = this.getEditor();
121
- // create an array of deep copies with the initia setupof the button groups
134
+ // create an array of deep copies with the initial setup of the button groups
122
135
  this._initialButtonGroupsState = oEditor && oEditor.getButtonGroups().map(function(oObject){
123
136
  return jQuery.extend(true, {}, oObject);
124
137
  });
125
138
 
126
- this._syncPopoverOpeningArrows();
139
+ this._modifyPopoverOpeningArrowHandlers(true);
127
140
  this._syncColors("TextColor", this._sTextColor);
128
141
  this._syncColors("BackgroundColor", this._sBackgroundColor);
129
142
  };
@@ -136,25 +149,78 @@ sap.ui.define([
136
149
 
137
150
  this._customButtons = null;
138
151
  this._oAccessibilityTexts = null;
152
+ this._helper = null;
153
+ this._oResourceBundle = null;
154
+ this._sTextColor = null;
155
+ this._sBackgroundColor = null;
139
156
  };
140
157
 
141
158
  /**
142
- * Helper function for synchronising the arrow button of the color selection SplitButtons
159
+ * Helper function for attaching / detaching the synchronization handlers of the color selection SplitButton arrow buttons
143
160
  * The arrow button should be displayed as active, while the corresponding color popover is open
144
161
  *
162
+ * @param {boolean} bAttach Will attach the handlers if true
163
+ * @private
164
+ */
165
+ ToolbarWrapper.prototype._modifyPopoverOpeningArrowHandlers = function (bAttach) {
166
+ var oTextColorButton = this._findButtonById("TextColor"),
167
+ oTextColorArrowButton = oTextColorButton && oTextColorButton._getArrowButton(),
168
+ oBackgroundColorButton = this._findButtonById("BackgroundColor"),
169
+ oBackgroundColorArrowButton = oBackgroundColorButton && oBackgroundColorButton._getArrowButton();
170
+
171
+ // Attaching handlers
172
+ // As this method is called each time after rendering, we need to ensure that we attach
173
+ // the necessary handlers only once. That is why two properties were introduced:
174
+ // _bTextColorSyncHandlersAttached
175
+ // _bBackgroundColorSyncHandlersAttached
176
+ if (bAttach && oTextColorArrowButton && !this._bTextColorSyncHandlersAttached) {
177
+ this.getAggregation("_customTextColorDialog")._ensurePopover()
178
+ .attachAfterOpen(oTextColorArrowButton, this._customColorDialogAfterOpen, this)
179
+ .attachAfterClose(oTextColorArrowButton, this._customColorDialogAfterClose, this);
180
+ this._bTextColorSyncHandlersAttached = true;
181
+ }
182
+ if (bAttach && oBackgroundColorArrowButton && !this._bBackgroundColorSyncHandlersAttached) {
183
+ this.getAggregation("_customBackgroundColorDialog")._ensurePopover()
184
+ .attachAfterOpen(oBackgroundColorArrowButton, this._customColorDialogAfterOpen, this)
185
+ .attachAfterClose(oBackgroundColorArrowButton, this._customColorDialogAfterClose, this);
186
+ this._bBackgroundColorSyncHandlersAttached = true;
187
+ }
188
+
189
+ // Detaching handlers
190
+ if (!bAttach && oTextColorArrowButton && this._bTextColorSyncHandlersAttached) {
191
+ this.getAggregation("_customTextColorDialog")._ensurePopover()
192
+ .detachAfterOpen(this._customColorDialogAfterOpen, this)
193
+ .detachAfterClose(this._customColorDialogAfterClose, this);
194
+ this._bTextColorSyncHandlersAttached = null;
195
+ }
196
+ if (!bAttach && oBackgroundColorArrowButton && this._bBackgroundColorSyncHandlersAttached) {
197
+ this.getAggregation("_customBackgroundColorDialog")._ensurePopover()
198
+ .detachAfterOpen(this._customColorDialogAfterOpen, this)
199
+ .detachAfterClose(this._customColorDialogAfterClose, this);
200
+ this._bBackgroundColorSyncHandlersAttached = null;
201
+ }
202
+ };
203
+
204
+ /**
205
+ * Synchronization handler called after opening of the text / background color picker dialog
206
+ *
207
+ * @param {object} oEvent The event object
208
+ * @param {object} oButton The color button
145
209
  * @private
146
210
  */
147
- ToolbarWrapper.prototype._syncPopoverOpeningArrows = function () {
148
- var aFontButtons = this._findGroupedControls("font"),
149
- oTextColorArrowButton = aFontButtons[2] && aFontButtons[2]._getArrowButton(),
150
- oBackgroundColorArrowButton = aFontButtons[3] && aFontButtons[3]._getArrowButton();
211
+ ToolbarWrapper.prototype._customColorDialogAfterOpen = function (oEvent, oButton) {
212
+ oButton && oButton._activeButton();
213
+ };
151
214
 
152
- this.getAggregation("_customTextColorDialog")._ensurePopover()
153
- .attachAfterOpen(function () { oTextColorArrowButton._activeButton();})
154
- .attachAfterClose(function () { oTextColorArrowButton._inactiveButton();});
155
- this.getAggregation("_customBackgroundColorDialog")._ensurePopover()
156
- .attachAfterOpen(function () { oBackgroundColorArrowButton._activeButton();})
157
- .attachAfterClose(function () { oBackgroundColorArrowButton._inactiveButton();});
215
+ /**
216
+ * Synchronization handler called after closing of the text / background color picker dialog
217
+ *
218
+ * @param {object} oEvent The event object
219
+ * @param {object} oButton The color button
220
+ * @private
221
+ */
222
+ ToolbarWrapper.prototype._customColorDialogAfterClose = function (oEvent, oButton) {
223
+ oButton && oButton._inactiveButton();
158
224
  };
159
225
 
160
226
  /**
@@ -199,15 +265,27 @@ sap.ui.define([
199
265
  * @public
200
266
  */
201
267
  ToolbarWrapper.prototype.modifyRTEToolbarConfig = function (oConfig) {
202
- var oToolbar = this;
268
+ var that = this;
203
269
 
204
270
  // Remove the native toolbar. From now on the sap.ui.richtexteditor.ToolbarWrapper will be used
205
271
  oConfig.toolbar = false;
206
272
 
207
273
  oConfig.setup = function (editor) {
274
+ editor.on('PreInit', function () {
275
+ editor.addShortcut('alt+f10', 'Focus the first element in the toolbar.',
276
+ function () {
277
+ var oFirstVisibleElement = that.getAggregation("_toolbar").getAggregation("content").filter(function(oControl) {
278
+ return oControl.getVisible();
279
+ })[0];
280
+
281
+ oFirstVisibleElement && oFirstVisibleElement.focus();
282
+ }
283
+ );
284
+ });
285
+
208
286
  // Sync sap.ui.richtexteditor.ToolbarWrapper buttons with the editor
209
287
  editor.on('NodeChange', function () {
210
- oToolbar._syncToolbarStates(this);
288
+ that._syncToolbarStates(this);
211
289
  });
212
290
  };
213
291
 
@@ -237,20 +315,20 @@ sap.ui.define([
237
315
  * @private
238
316
  */
239
317
  ToolbarWrapper.prototype._syncColors = function (sCommand, sColor) {
240
- var aControls = this._findGroupedControls("font"),
241
- oTextButtonIcon;
318
+ var oColorButton = this._findButtonById(sCommand),
319
+ oColorButtonIcon;
242
320
 
243
321
  if (!sColor) {
244
322
  return;
245
323
  }
246
- switch (sCommand) {
247
- case "TextColor":
248
- aControls[2] && aControls[2].setIconColor(sColor);
249
- break;
250
- case "BackgroundColor":
251
- oTextButtonIcon = aControls[3] && aControls[3]._getTextButton().getDomRef("img");
252
- oTextButtonIcon && Core.byId(oTextButtonIcon.id).setColor(sColor);
253
- break;
324
+
325
+ if (sCommand === "TextColor") {
326
+ oColorButton && oColorButton.setIconColor(sColor);
327
+ }
328
+
329
+ if (sCommand === "BackgroundColor") {
330
+ oColorButtonIcon = oColorButton && oColorButton._getTextButton().getDomRef("img");
331
+ oColorButtonIcon && Core.byId(oColorButtonIcon.id).setColor(sColor);
254
332
  }
255
333
  };
256
334
  /**
@@ -260,16 +338,18 @@ sap.ui.define([
260
338
  */
261
339
  ToolbarWrapper.prototype._syncToolbarStates = function (oNativeEditor) {
262
340
  var oEditorCommand, oControl, sEditorCommand,
263
- oEditorCommands = library.EditorCommands,
264
341
  oFormatter = oNativeEditor.formatter,
342
+ oResourceBundle = this._oResourceBundle,
265
343
  _syncTextAlign = function (oTextAlignCommand, oEditorFormatter, oControl) {
266
- var sAlignCommand, sIconUri;
344
+ var sAlignCommand, sIconUri, oCommand;
267
345
 
268
346
  for (sAlignCommand in oTextAlignCommand) {
269
- sIconUri = IconPool.getIconURI(oEditorCommand[sAlignCommand].icon);
347
+ oCommand = oEditorCommand[sAlignCommand];
348
+ sIconUri = IconPool.getIconURI(oCommand.icon);
270
349
  if (oTextAlignCommand.hasOwnProperty(sAlignCommand) &&
271
350
  oEditorFormatter.match(oTextAlignCommand[sAlignCommand].style) &&
272
351
  oControl.getIcon() !== sIconUri) {
352
+ oControl.setTooltip(oResourceBundle.getText(oTextAlignCommand.bundleKey) + " " + oResourceBundle.getText(oCommand.bundleKey));
273
353
  oControl.setIcon(sIconUri);
274
354
  break;
275
355
  }
@@ -341,12 +421,12 @@ sap.ui.define([
341
421
  }
342
422
  };
343
423
 
344
- for (sEditorCommand in oEditorCommands) {
345
- if (!oEditorCommands.hasOwnProperty(sEditorCommand)) {
424
+ for (sEditorCommand in EditorCommands) {
425
+ if (!EditorCommands.hasOwnProperty(sEditorCommand)) {
346
426
  continue;
347
427
  }
348
428
 
349
- oEditorCommand = oEditorCommands[sEditorCommand];
429
+ oEditorCommand = EditorCommands[sEditorCommand];
350
430
  // TODO: Probably there's a better way to handle this
351
431
  oControl = Core.byId(this._getId(sEditorCommand));
352
432
 
@@ -400,11 +480,9 @@ sap.ui.define([
400
480
  * @private
401
481
  */
402
482
  ToolbarWrapper.prototype._createButtonConfig = function (sCommand) {
403
- var oEditorCommands = library.EditorCommands,
404
- oCommand = oEditorCommands[sCommand],
483
+ var oCommand = EditorCommands[sCommand],
405
484
  oRTE = this.getEditor();
406
485
 
407
-
408
486
  return {
409
487
  id: this._getId(sCommand),
410
488
  icon: IconPool.getIconURI(oCommand.icon),
@@ -429,17 +507,16 @@ sap.ui.define([
429
507
  */
430
508
  ToolbarWrapper.prototype._createMenuButtonItems = function (sCommand) {
431
509
  var oEditorHelper = this._helper,
432
- oEditorCommands = library.EditorCommands,
433
510
  aItems = [],
434
511
  sItemText,
435
512
  oCommand;
436
513
 
437
- for (var sEditorCommand in oEditorCommands[sCommand]) {
514
+ for (var sEditorCommand in EditorCommands[sCommand]) {
438
515
  if (sEditorCommand === 'bundleKey') {
439
516
  continue;
440
517
  }
441
518
 
442
- oCommand = oEditorCommands[sCommand][sEditorCommand];
519
+ oCommand = EditorCommands[sCommand][sEditorCommand];
443
520
  sItemText = this._oResourceBundle.getText(oCommand.bundleKey) || oCommand.text;
444
521
  aItems.push(oEditorHelper.createMenuItem(this._getId(sCommand + sEditorCommand), sItemText, IconPool.getIconURI(oCommand.icon)));
445
522
  }
@@ -455,7 +532,7 @@ sap.ui.define([
455
532
  * @private
456
533
  */
457
534
  ToolbarWrapper.prototype._findTextAlignCommandByIcon = function (sIconUri) {
458
- var oEditorCommands = library.EditorCommands['TextAlign'],
535
+ var oEditorCommands = EditorCommands['TextAlign'],
459
536
  sCommandIconUri, sCommand;
460
537
 
461
538
  Object.keys(oEditorCommands)
@@ -477,8 +554,7 @@ sap.ui.define([
477
554
  * @private
478
555
  */
479
556
  ToolbarWrapper.prototype._createFontStyleSelectItems = function () {
480
- var oEditorCommands = library.EditorCommands,
481
- oFontFamilies = oEditorCommands["FontFamily"],
557
+ var oFontFamilies = EditorCommands["FontFamily"],
482
558
  aItems = [],
483
559
  oItem;
484
560
 
@@ -502,8 +578,7 @@ sap.ui.define([
502
578
  * @private
503
579
  */
504
580
  ToolbarWrapper.prototype._getFontStyleCommand = function (sItemText) {
505
- var oEditorCommands = library.EditorCommands,
506
- oFontFamilies = oEditorCommands["FontFamily"];
581
+ var oFontFamilies = EditorCommands["FontFamily"];
507
582
 
508
583
  for (var sFontStyle in oFontFamilies) {
509
584
  if (oFontFamilies.hasOwnProperty(sFontStyle) && oFontFamilies[sFontStyle].text === sItemText) {
@@ -520,8 +595,7 @@ sap.ui.define([
520
595
  * @private
521
596
  */
522
597
  ToolbarWrapper.prototype._getFormatBlockCommand = function (sItemText) {
523
- var oEditorCommands = library.EditorCommands,
524
- oFormat = oEditorCommands["FormatBlock"];
598
+ var oFormat = EditorCommands["FormatBlock"];
525
599
 
526
600
  for (var sFormat in oFormat) {
527
601
  if (oFormat.hasOwnProperty(sFormat) && this._oResourceBundle.getText(oFormat[sFormat].bundleKey) === sItemText) {
@@ -539,10 +613,9 @@ sap.ui.define([
539
613
  ToolbarWrapper.prototype._createFontSizeSelectItems = function () {
540
614
  var aItems = [],
541
615
  number = 1, //TinyMCE command values for font sizes have a value from 1 to 7
542
- oItem,
543
- oEditorCommands = library.EditorCommands;
616
+ oItem;
544
617
 
545
- oEditorCommands["FontSize"].forEach(function (item) {
618
+ EditorCommands["FontSize"].forEach(function (item) {
546
619
  oItem = {
547
620
  id: this._getId("FontSize" + number),
548
621
  text: item + " pt"
@@ -560,8 +633,7 @@ sap.ui.define([
560
633
  * @private
561
634
  */
562
635
  ToolbarWrapper.prototype._createFormatBlockItems = function () {
563
- var oEditorCommands = library.EditorCommands,
564
- oFormatBlock = oEditorCommands["FormatBlock"],
636
+ var oFormatBlock = EditorCommands["FormatBlock"],
565
637
  aItems = [],
566
638
  oItem;
567
639
 
@@ -586,9 +658,9 @@ sap.ui.define([
586
658
  */
587
659
  ToolbarWrapper.prototype._getColor = function (sCommand) {
588
660
  var oRTE = this.getEditor(),
589
- oCommandStyle = library.EditorCommands[sCommand].style,
590
- oNode = oRTE.getNativeApi().selection.getNode(),
591
- aNodes = oRTE.getNativeApi().dom.getParents(oNode),
661
+ oCommandStyle = EditorCommands[sCommand].style,
662
+ oNode = oRTE && oRTE.getNativeApi().selection.getNode(),
663
+ aNodes = oRTE && oRTE.getNativeApi().dom.getParents(oNode),
592
664
  i, aCurrentNode, sColor;
593
665
 
594
666
  for (i = 0; i < aNodes.length; i++) {
@@ -601,7 +673,7 @@ sap.ui.define([
601
673
  }
602
674
 
603
675
  // If there is no color style found, return the default color
604
- return library.EditorCommands[sCommand].defaultValue;
676
+ return EditorCommands[sCommand].defaultValue;
605
677
  };
606
678
 
607
679
 
@@ -610,32 +682,30 @@ sap.ui.define([
610
682
  *
611
683
  * @private
612
684
  * @param {string} [sCommand] Editor Command
613
- * @returns {object} The configuration object for the toolbar SplitButton which opens a command specific popover
685
+ * @returns {object|null} The configuration object for the toolbar SplitButton which opens a command specific popover or null
614
686
  */
615
687
  ToolbarWrapper.prototype._createSplitButtonForDialog = function (sCommand) {
616
- var oCommand = library.EditorCommands[sCommand],
617
- oToolbar = this,
688
+ var oCommand = EditorCommands[sCommand],
689
+ that = this,
618
690
  oDialog, oResultConfig;
619
691
 
620
692
  if (!oCommand) {
621
- return;
693
+ return null;
622
694
  }
623
695
 
624
696
  oResultConfig = {
625
697
  id: this._getId(sCommand),
626
698
  tooltip: this._oResourceBundle.getText(oCommand.bundleKey),
627
699
  press: function () {
628
- switch (sCommand) {
629
- case "TextColor":
630
- oToolbar._applyColor(sCommand, oCommand.command, oToolbar._sTextColor);
631
- break;
632
- case "BackgroundColor":
633
- oToolbar._applyColor(sCommand, oCommand.command, oToolbar._sBackgroundColor);
634
- break;
700
+ if (sCommand === "TextColor") {
701
+ that._applyColor(sCommand, oCommand.command, that._sTextColor);
702
+ }
703
+ if (sCommand === "BackgroundColor") {
704
+ that._applyColor(sCommand, oCommand.command, that._sBackgroundColor);
635
705
  }
636
706
  },
637
707
  arrowPress: function () {
638
- oDialog = oToolbar.getAggregation("_custom" + sCommand + "Dialog");
708
+ oDialog = that.getAggregation("_custom" + sCommand + "Dialog");
639
709
 
640
710
  this._getArrowButton()._activeButton();
641
711
  if (!oDialog) {
@@ -655,19 +725,19 @@ sap.ui.define([
655
725
 
656
726
 
657
727
  /**
658
- * Helper function for creating Button Control configuration for opening dialogs
728
+ * Helper function for creating Button Control configuration for opening dialogs.
659
729
  *
660
730
  * @private
661
731
  * @param {string} [sCommand] Editor Command
662
- * @returns {object} The configuration object for the toolbar button which opens a command specific dialog
732
+ * @returns {object|null} The configuration object for the toolbar button which opens a command specific dialog or null.
663
733
  */
664
734
  ToolbarWrapper.prototype._createButtonForDialog = function (sCommand) {
665
- var oCommand = library.EditorCommands[sCommand],
666
- oToolbar = this,
735
+ var oCommand = EditorCommands[sCommand],
736
+ that = this,
667
737
  oDialog;
668
738
 
669
739
  if (!oCommand) {
670
- return;
740
+ return null;
671
741
  }
672
742
 
673
743
  return {
@@ -676,7 +746,7 @@ sap.ui.define([
676
746
  tooltip: this._oResourceBundle.getText(oCommand.bundleKey),
677
747
  text: this._oResourceBundle.getText(oCommand.bundleKey),
678
748
  press: function () {
679
- oDialog = oToolbar.getAggregation("_custom" + sCommand + "Dialog");
749
+ oDialog = that.getAggregation("_custom" + sCommand + "Dialog");
680
750
 
681
751
  if (!oDialog) {
682
752
  return;
@@ -685,13 +755,16 @@ sap.ui.define([
685
755
  switch (sCommand) {
686
756
  case "InsertImage":
687
757
  this.setPressed(true);
688
- oToolbar._syncImageDialogData(oDialog);
758
+ that._syncImageDialogData(oDialog);
689
759
  break;
690
760
  case "InsertLink":
691
- oToolbar._syncLinkDialogData(oDialog);
761
+ that._syncLinkDialogData(oDialog);
692
762
  break;
693
763
  case "InsertTable":
694
- oToolbar._resetDialogContent(oDialog);
764
+ that._resetDialogContent(oDialog);
765
+ break;
766
+ default:
767
+ break;
695
768
  }
696
769
  oDialog.open();
697
770
  }
@@ -838,25 +911,22 @@ sap.ui.define([
838
911
  * @private
839
912
  */
840
913
  ToolbarWrapper.prototype._createColorPalettePopoverConfig = function(sType) {
841
- var oCommand = library.EditorCommands[sType],
914
+ var oCommand = EditorCommands[sType],
842
915
  sColor = oCommand.defaultValue,
843
- oToolbar = this;
916
+ that = this;
844
917
 
845
918
  return {
846
919
  defaultColor: sColor,
847
920
  colorSelect: function (oEvent) {
848
921
  var sColor = oEvent.getParameters().value;
849
- oToolbar._applyColor(sType, oCommand.command, sColor, oEvent.getParameter("defaultAction"));
850
-
851
- switch (sType) {
852
- case "TextColor":
853
- oToolbar._sTextColor = sColor;
854
- oToolbar._syncColors("TextColor", sColor);
855
- break;
856
- case "BackgroundColor":
857
- oToolbar._sBackgroundColor = sColor;
858
- oToolbar._syncColors("BackgroundColor", sColor);
859
- break;
922
+ that._applyColor(sType, oCommand.command, sColor, oEvent.getParameter("defaultAction"));
923
+ if (sType === "TextColor") {
924
+ that._sTextColor = sColor;
925
+ that._syncColors("TextColor", sColor);
926
+ }
927
+ if (sType === "BackgroundColor") {
928
+ that._sBackgroundColor = sColor;
929
+ that._syncColors("BackgroundColor", sColor);
860
930
  }
861
931
  }
862
932
  };
@@ -892,7 +962,7 @@ sap.ui.define([
892
962
  */
893
963
  ToolbarWrapper.prototype._createInsertImageConfig = function() {
894
964
  var iRationCoeff,
895
- oTitleBundleText = this._oResourceBundle.getText(sap.ui.richtexteditor.EditorCommands["InsertImage"].bundleKey),
965
+ oTitleBundleText = this._oResourceBundle.getText(EditorCommands["InsertImage"].bundleKey),
896
966
  oURLInput = this._helper.createInput(),
897
967
  oURLLabel = this._helper.createLabel({
898
968
  text: this._oResourceBundle.getText("INSERT_IMAGE_URL"),
@@ -904,7 +974,8 @@ sap.ui.define([
904
974
  labelFor: oTextInput
905
975
  }),
906
976
  oDimensionsLabel = this._helper.createLabel({
907
- text: this._oResourceBundle.getText("INSERT_CONTENT_DIMENSIONS")
977
+ text: this._oResourceBundle.getText("INSERT_CONTENT_DIMENSIONS"),
978
+ labelFor: oDimensionWidthInput
908
979
  }),
909
980
  oDimensionWidthInput = this._helper.createInput({
910
981
  width: '8rem',
@@ -948,7 +1019,7 @@ sap.ui.define([
948
1019
  }),
949
1020
  oRTE = this.getEditor(),
950
1021
  fnCalculateRatio = function(bCheckHeight, bCheckWidth) {
951
- var oSelection = oRTE.getNativeApi().selection,
1022
+ var oSelection = oRTE && oRTE.getNativeApi().selection,
952
1023
  oSelectionNode = oSelection && oSelection.getNode(),
953
1024
  fWidthInputValue = parseFloat(oDimensionWidthInput.getValue()),
954
1025
  fHeightInputValue = parseFloat(oDimensionHeightInput.getValue()),
@@ -976,23 +1047,24 @@ sap.ui.define([
976
1047
  oDimensionHeightInput.setValue(fWidthInputValue / iRationCoeff);
977
1048
  }
978
1049
  },
979
- oToolbar = this,
1050
+ that = this,
980
1051
  aButtons = [];
981
1052
 
982
1053
  oDimensionsLabel.setLabelFor(oDimensionWidthInput);
983
1054
 
984
1055
  aButtons.push(this._helper.createButton({
985
1056
  id: this._getId("InsertImageButton"),
1057
+ type: ButtonType.Emphasized,
986
1058
  text: this._oResourceBundle.getText("DIALOG_OK_BUTTON"),
987
1059
  press: function () {
988
1060
  oRTE.getNativeApi()
989
- .insertContent(oToolbar._generateImageHTML(oURLInput.getValue(),
1061
+ .insertContent(that._generateImageHTML(oURLInput.getValue(),
990
1062
  oTextInput.getValue(),
991
1063
  oDimensionHeightInput.getValue(),
992
1064
  oDimensionWidthInput.getValue(),
993
1065
  oRatioCheckBox.getSelected()));
994
- oToolbar.getAggregation("_customInsertImageDialog").close();
995
- oToolbar._syncToolbarStates(oRTE.getNativeApi());
1066
+ that.getAggregation("_customInsertImageDialog").close();
1067
+ that._syncToolbarStates(oRTE.getNativeApi());
996
1068
  }
997
1069
  }));
998
1070
 
@@ -1000,8 +1072,8 @@ sap.ui.define([
1000
1072
  id: this._getId("CancelInsertImageButton"),
1001
1073
  text: this._oResourceBundle.getText("DIALOG_CANCEL_BUTTON"),
1002
1074
  press: function () {
1003
- oToolbar.getAggregation("_customInsertImageDialog").close();
1004
- oToolbar._syncToolbarStates(oRTE.getNativeApi());
1075
+ that.getAggregation("_customInsertImageDialog").close();
1076
+ that._syncToolbarStates(oRTE.getNativeApi());
1005
1077
  }
1006
1078
  }));
1007
1079
 
@@ -1048,10 +1120,9 @@ sap.ui.define([
1048
1120
  * Helper function for generating link HTML content
1049
1121
  *
1050
1122
  * @param {string} [sURL] The URL of the HTML link tag
1051
- * @param {string} [sText] The text of the HTML link tag
1052
1123
  * @param {string} [sTitle] The title of the HTML link tag
1053
1124
  * @param {boolean} [bTarget] True if the provided link should be opened in a new window
1054
- * @returns {string} String representing HTML tag with the provided parameters
1125
+ * @param {string} [sText] The text of the HTML link tag
1055
1126
  * @private
1056
1127
  */
1057
1128
  ToolbarWrapper.prototype._generateLinkHTML = function (sURL, sTitle, bTarget, sText) {
@@ -1126,7 +1197,7 @@ sap.ui.define([
1126
1197
  * @private
1127
1198
  */
1128
1199
  ToolbarWrapper.prototype._createInsertLinkConfig = function() {
1129
- var oTitleBundleText = this._oResourceBundle.getText(sap.ui.richtexteditor.EditorCommands["InsertLink"].bundleKey),
1200
+ var oTitleBundleText = this._oResourceBundle.getText(EditorCommands["InsertLink"].bundleKey),
1130
1201
  oURLInput = this._helper.createInput(),
1131
1202
  oURLLabel = this._helper.createLabel({
1132
1203
  text: this._oResourceBundle.getText("INSERT_LINK_URL"),
@@ -1166,20 +1237,21 @@ sap.ui.define([
1166
1237
  oTargetSelect]
1167
1238
  }),
1168
1239
  oRTE = this.getEditor(),
1169
- oToolbar = this,
1240
+ that = this,
1170
1241
  aButtons = [];
1171
1242
 
1172
1243
  aButtons.push(this._helper.createButton({
1173
1244
  id: this._getId("InsertLinkButton"),
1245
+ type: ButtonType.Emphasized,
1174
1246
  text: this._oResourceBundle.getText("DIALOG_OK_BUTTON"),
1175
1247
  press: function () {
1176
1248
  var bTarget = (oTargetSelect.getSelectedItem() === oTargetSelect.getItems()[1]);
1177
- oToolbar._generateLinkHTML(oURLInput.getValue(),
1249
+ that._generateLinkHTML(oURLInput.getValue(),
1178
1250
  oTitleInput.getValue(),
1179
1251
  bTarget,
1180
1252
  oTextInput.getValue());
1181
- oToolbar.getAggregation("_customInsertLinkDialog").close();
1182
- oToolbar._syncToolbarStates(oRTE.getNativeApi());
1253
+ that.getAggregation("_customInsertLinkDialog").close();
1254
+ that._syncToolbarStates(oRTE.getNativeApi());
1183
1255
  }
1184
1256
  }));
1185
1257
 
@@ -1187,8 +1259,8 @@ sap.ui.define([
1187
1259
  id: this._getId("CancelInsertLinkButton"),
1188
1260
  text: this._oResourceBundle.getText("DIALOG_CANCEL_BUTTON"),
1189
1261
  press: function () {
1190
- oToolbar.getAggregation("_customInsertLinkDialog").close();
1191
- oToolbar._syncToolbarStates(oRTE.getNativeApi());
1262
+ that.getAggregation("_customInsertLinkDialog").close();
1263
+ that._syncToolbarStates(oRTE.getNativeApi());
1192
1264
  }
1193
1265
  }));
1194
1266
 
@@ -1215,7 +1287,7 @@ sap.ui.define([
1215
1287
  * @private
1216
1288
  */
1217
1289
  ToolbarWrapper.prototype._createInsertTableConfig = function() {
1218
- var oTitleBundleText = this._oResourceBundle.getText(sap.ui.richtexteditor.EditorCommands["InsertTable"].bundleKey),
1290
+ var oTitleBundleText = this._oResourceBundle.getText(EditorCommands["InsertTable"].bundleKey),
1219
1291
  oRowsInput = this._helper.createStepInput({
1220
1292
  value: 2,
1221
1293
  min: 0,
@@ -1263,21 +1335,31 @@ sap.ui.define([
1263
1335
  oDimensionWidthInput]
1264
1336
  }),
1265
1337
  oRTE = this.getEditor(),
1266
- oToolbar = this,
1338
+ that = this,
1267
1339
  aButtons = [];
1268
1340
 
1269
1341
  aButtons.push(this._helper.createButton({
1270
1342
  id: this._getId("InsertTableButton"),
1271
1343
  text: this._oResourceBundle.getText("DIALOG_OK_BUTTON"),
1272
1344
  press: function () {
1273
- var tableElm = oRTE.getNativeApi().plugins.table
1274
- .insertTable(oColsInput.getValue(), oRowsInput.getValue()),
1275
- dom = oRTE.getNativeApi().dom;
1345
+ var oDomRef = oRTE.getNativeApi().dom;
1346
+ var oNativeAPI = oRTE.getNativeApi();
1347
+ var oTableElm;
1348
+
1349
+ if (oRTE.getEditorType() === library.EditorType.TinyMCE6) {
1350
+ oNativeAPI.execCommand('mceInsertTable', false, { rows: oRowsInput.getValue(), columns: oColsInput.getValue() });
1351
+
1352
+ oTableElm = oDomRef.getParents(oNativeAPI.selection.getNode()).find(function (element) {
1353
+ return element.tagName.toLowerCase() === "table";
1354
+ });
1355
+ } else {
1356
+ oTableElm = oNativeAPI.plugins.table.insertTable(oColsInput.getValue(), oRowsInput.getValue());
1357
+ }
1276
1358
 
1277
- dom.setStyle(tableElm, 'width', oDimensionWidthInput.getValue() + "px");
1278
- dom.setStyle(tableElm, 'height', oDimensionHeightInput.getValue() + "px");
1359
+ oDomRef.setStyle(oTableElm, 'width', oDimensionWidthInput.getValue() + "px");
1360
+ oDomRef.setStyle(oTableElm, 'height', oDimensionHeightInput.getValue() + "px");
1279
1361
 
1280
- oToolbar.getAggregation("_customInsertTableDialog").close();
1362
+ that.getAggregation("_customInsertTableDialog").close();
1281
1363
  }
1282
1364
  }));
1283
1365
 
@@ -1285,7 +1367,7 @@ sap.ui.define([
1285
1367
  id: this._getId("CancelInsertTableButton"),
1286
1368
  text: this._oResourceBundle.getText("DIALOG_CANCEL_BUTTON"),
1287
1369
  press: function () {
1288
- oToolbar.getAggregation("_customInsertTableDialog").close();
1370
+ that.getAggregation("_customInsertTableDialog").close();
1289
1371
  }
1290
1372
  }));
1291
1373
 
@@ -1314,8 +1396,7 @@ sap.ui.define([
1314
1396
  ToolbarWrapper.prototype._createCustomToolbar = function () {
1315
1397
  var oEditorHelper = this._helper,
1316
1398
  aContent = [],
1317
- oButtonGroups = library.ButtonGroups,
1318
- aGroupNames = Object.keys(oButtonGroups),
1399
+ aGroupNames = Object.keys(ButtonGroups),
1319
1400
  aGroups = [],
1320
1401
  aGroupObjects = this.getEditor() ? this.getEditor().getButtonGroups() : [];
1321
1402
 
@@ -1332,7 +1413,7 @@ sap.ui.define([
1332
1413
  aGroups = this._sortToolbarContent(aGroups);
1333
1414
 
1334
1415
  aGroups.forEach(function(oGroup){
1335
- aContent = aContent.concat(this.addButtonGroup(oGroup.name));
1416
+ aContent = aContent.concat(this._createButtonGroup(oGroup));
1336
1417
  }.bind(this));
1337
1418
 
1338
1419
  return oEditorHelper.createOverflowToolbar(this._getId(), aContent);
@@ -1372,183 +1453,331 @@ sap.ui.define([
1372
1453
  };
1373
1454
 
1374
1455
  /**
1375
- * Adds a Button Group to the Custom Toolbar
1456
+ * Maps the native TinyMCE style button names to ones supported by the toolbar wrapper.
1376
1457
  *
1377
- * @param {string} [sGroupName] Group name
1458
+ * @param {string} sGroupName Name of the group
1459
+ * @param {string[]} aNativeButtons Array of native TinyMCE style button names.
1460
+ * @returns {string[]} Array of supported button names (commands).
1461
+ * @private
1462
+ */
1463
+ ToolbarWrapper.prototype._mapNativeButtonsToCommands = function (sGroupName, aNativeButtons) {
1464
+ var oRTE = this.getEditor();
1465
+ var aCommandsToCreate = [];
1466
+ var aSupportedButtonGroup = ButtonGroups[sGroupName];
1467
+
1468
+ if (!Array.isArray(aSupportedButtonGroup) || aNativeButtons && !aNativeButtons.length) {
1469
+ return [];
1470
+ }
1471
+
1472
+ // There are some special groups which do not map 1 to 1 with the native button types
1473
+ // Those groups require some special attention as they might render all buttons as single menu one
1474
+ // or create select type controls.
1475
+ switch (sGroupName) {
1476
+ case "text-align":
1477
+ aCommandsToCreate.push("TextAlign");
1478
+ break;
1479
+ case "formatselect":
1480
+ case "blocks":
1481
+ case "styleselect":
1482
+ case "styles":
1483
+ aCommandsToCreate.push("FormatBlock");
1484
+ break;
1485
+ case "insert":
1486
+ aCommandsToCreate.push("InsertImage");
1487
+ break;
1488
+ default:
1489
+ // Check the provided buttons in the group against the supported ones for this particular group from the library.
1490
+ aNativeButtons.forEach(function (sNativeButtonName) {
1491
+ var sCustomCommandName = ButtonsToCommandsMap[sNativeButtonName];
1492
+
1493
+ if (aSupportedButtonGroup.indexOf(sCustomCommandName) > -1) {
1494
+ // The button is supported in the custom toolbar and can be added
1495
+ aCommandsToCreate.push(sCustomCommandName);
1496
+ } else {
1497
+ // For unsupported buttons - log warning and do not do anything
1498
+ Log.warning("Unsupported button for the custom toolbar found: " + sNativeButtonName + ", for group: " + sGroupName + ".", oRTE);
1499
+ }
1500
+ });
1501
+ break;
1502
+ }
1503
+
1504
+ return aCommandsToCreate;
1505
+ };
1506
+
1507
+ ToolbarWrapper.prototype._createFontToolbarContent = function (aButtonsToCreate, bVisible) {
1508
+ // All buttons in this group should be handled case by case as they are not of the same type.
1509
+ var aToolbarContent = [];
1510
+ var oAccessibilityKeys = library.Accessibility;
1511
+ var oRTE = this.getEditor();
1512
+ var that = this;
1513
+
1514
+ // --- Font Family ---
1515
+ if (aButtonsToCreate.indexOf("FontFamily") !== -1) {
1516
+ var oInvisibleTextFontFamily = this._helper.createInvisibleText({
1517
+ text: this._oResourceBundle.getText(oAccessibilityKeys["FontFamily"])
1518
+ }).toStatic();
1519
+ this._registerAssociatedInvisibleTexts("font", oInvisibleTextFontFamily.getId());
1520
+
1521
+ aToolbarContent.push(
1522
+ this._helper.createSelect({
1523
+ id: this._getId("FontFamily"),
1524
+ ariaLabelledBy: oInvisibleTextFontFamily,
1525
+ selectedItemId: this._getId("FontFamilyVerdana"),
1526
+ items: this._createFontStyleSelectItems(),
1527
+ change: function (oEvent) {
1528
+ var oItem;
1529
+
1530
+ if (oRTE) {
1531
+ oItem = oEvent.getSource().getSelectedItem();
1532
+ oRTE.getNativeApi().execCommand('FontName', false, that._getFontStyleCommand(oItem.getText()));
1533
+ } else {
1534
+ Log.warning("Cannot execute native command: " + 'FontName');
1535
+ }
1536
+ }
1537
+ }).setVisible(bVisible)
1538
+ );
1539
+ }
1540
+
1541
+ // --- Font Size ---
1542
+ if (aButtonsToCreate.indexOf("FontSize") !== -1) {
1543
+ var oInvisibleTextFontSize = this._helper.createInvisibleText({
1544
+ text: this._oResourceBundle.getText(oAccessibilityKeys["FontSize"])
1545
+ }).toStatic();
1546
+ this._registerAssociatedInvisibleTexts("font", oInvisibleTextFontSize.getId());
1547
+
1548
+ aToolbarContent.push(
1549
+ this._helper.createSelect({
1550
+ id: this._getId("FontSize"),
1551
+ ariaLabelledBy: oInvisibleTextFontSize,
1552
+ selectedItemId: this._getId("FontSize2"),
1553
+ items: this._createFontSizeSelectItems(),
1554
+ change: function (oEvent) {
1555
+ var oItem;
1556
+
1557
+ if (oRTE) {
1558
+ oItem = oEvent.getSource().getSelectedItem();
1559
+ oRTE.getNativeApi().execCommand('FontSize', false, oItem.getText().replace(/\s/g, ""));
1560
+ } else {
1561
+ Log.warning("Cannot execute native command: " + 'FontSize');
1562
+ }
1563
+ }
1564
+ }).setVisible(bVisible)
1565
+ );
1566
+ }
1567
+
1568
+ // --- Font Color ---
1569
+ if (aButtonsToCreate.indexOf("TextColor") !== -1) {
1570
+ var oInvisibleTextFontColor = this._helper.createInvisibleText({
1571
+ text: this._oResourceBundle.getText(oAccessibilityKeys["FontColor"])
1572
+ }).toStatic();
1573
+
1574
+ var oRTESplitButton = new RTESplitButton(this._createSplitButtonForDialog("TextColor")).setVisible(bVisible);
1575
+ oRTESplitButton._getTextButton().addAriaLabelledBy(oInvisibleTextFontColor);
1576
+
1577
+ aToolbarContent.push(oRTESplitButton);
1578
+ }
1579
+
1580
+ // --- Background Color ---
1581
+ if (aButtonsToCreate.indexOf("BackgroundColor") !== -1) {
1582
+ var oInvisibleTextBackgroundColor = this._helper.createInvisibleText({
1583
+ text: this._oResourceBundle.getText(oAccessibilityKeys["BackgroundColor"])
1584
+ }).toStatic();
1585
+
1586
+ var oBackgroundColorButton = this._helper.createSplitButton(this._createSplitButtonForDialog("BackgroundColor")).setVisible(bVisible);
1587
+ oBackgroundColorButton._getTextButton().addAriaLabelledBy(oInvisibleTextBackgroundColor);
1588
+ aToolbarContent.push(oBackgroundColorButton);
1589
+ }
1590
+
1591
+ return aToolbarContent;
1592
+ };
1593
+
1594
+ ToolbarWrapper.prototype._createTextAlignToolbarContent = function (bVisible) {
1595
+ var oRTE = this.getEditor();
1596
+ var bGroupVisible = oRTE ? oRTE.getShowGroupFontStyle() || bVisible : false;
1597
+ var that = this;
1598
+ var bTextAlignLRight = oRTE._getTextDirection() === "rtl";
1599
+ var iDefaultItemIndex = bTextAlignLRight ? 2 : 0;
1600
+ var aMenuItems = this._createMenuButtonItems("TextAlign");
1601
+
1602
+ return [
1603
+ this._helper.createMenuButton(
1604
+ this._getId("TextAlign"),
1605
+ aMenuItems,
1606
+ function (oEvent) {
1607
+ var oSelectedItem, oEditor, oSelectedItemIcon;
1608
+
1609
+ if (oRTE) {
1610
+ oSelectedItem = oEvent.getParameter("item");
1611
+ oEditor = oRTE.getNativeApi();
1612
+ oSelectedItemIcon = oSelectedItem.getIcon();
1613
+ if (oSelectedItemIcon === this.getParent().getIcon()) {
1614
+ var sTextAlign = bTextAlignLRight ? "JustifyRight" : "JustifyLeft";
1615
+ // Text Align commands in TinyMCE have a toggle behavior when you set a
1616
+ // certain command twice the default command (text-align-left) will be applied
1617
+ oEditor.execCommand(sTextAlign);
1618
+ } else {
1619
+ oEditor.execCommand('Justify' + that._findTextAlignCommandByIcon(oSelectedItemIcon));
1620
+ }
1621
+ } else {
1622
+ Log.warning("Cannot execute native command: " + 'Justify');
1623
+ }
1624
+ },
1625
+ aMenuItems[iDefaultItemIndex].getIcon(),
1626
+ this._oResourceBundle.getText(EditorCommands["TextAlign"].bundleKey)
1627
+ ).setVisible(bGroupVisible)
1628
+ ];
1629
+ };
1630
+
1631
+ ToolbarWrapper.prototype._createFormatSelectToolbarContent = function (bVisible) {
1632
+ var oRTE = this.getEditor();
1633
+ var oAccessibilityKeys = library.Accessibility;
1634
+ var oInvisibleTextFormatBlock = this._helper.createInvisibleText({
1635
+ text: this._oResourceBundle.getText(oAccessibilityKeys["FormatBlock"])
1636
+ }).toStatic();
1637
+
1638
+ this._registerAssociatedInvisibleTexts("formatselect", oInvisibleTextFormatBlock.getId());
1639
+
1640
+ return [
1641
+ this._helper.createSelect({
1642
+ id: this._getId("FormatBlock"),
1643
+ ariaLabelledBy: oInvisibleTextFormatBlock,
1644
+ items: this._createFormatBlockItems(),
1645
+ change: function (oEvent) {
1646
+ var oSelectedItem;
1647
+ if (oRTE) {
1648
+ oSelectedItem = oEvent.getSource().getSelectedItem();
1649
+ if (oSelectedItem) {
1650
+ var currentFormatterCommand = oRTE.getAggregation("_toolbarWrapper")._getFormatBlockCommand(oSelectedItem.getText());
1651
+ oRTE.getNativeApi().execCommand('FormatBlock', false, currentFormatterCommand);
1652
+ }
1653
+ } else {
1654
+ Log.warning("Cannot execute native command: " + 'FormatBlock');
1655
+ }
1656
+ }
1657
+ }).setVisible(bVisible)
1658
+ ];
1659
+ };
1660
+
1661
+ ToolbarWrapper.prototype._createFontStyleToolbarContent = function (aButtonsToCreate, bVisible) {
1662
+ var aToolbarContent = [];
1663
+
1664
+ aButtonsToCreate.forEach(function (oCommand) {
1665
+ aToolbarContent.push(this._helper.createOverflowToolbarToggleButton(this._createButtonConfig(oCommand)).setVisible(bVisible));
1666
+ }, this);
1667
+
1668
+ return aToolbarContent;
1669
+ };
1670
+
1671
+ ToolbarWrapper.prototype._createInsertToolbarContent = function (bVisible) {
1672
+ return [this._helper.createOverflowToolbarToggleButton(this._createButtonForDialog("InsertImage")).setVisible(bVisible)];
1673
+ };
1674
+
1675
+ ToolbarWrapper.prototype._createLinkToolbarContent = function (aButtonsToCreate, bVisible) {
1676
+ var aToolbarContent = [];
1677
+
1678
+ // All buttons in this group should be handled case by case as they are not of the same type.
1679
+ if (aButtonsToCreate.indexOf("InsertLink") !== -1) {
1680
+ aToolbarContent.push(this._helper.createOverflowToolbarToggleButton(this._createButtonForDialog("InsertLink")).setVisible(bVisible));
1681
+ }
1682
+ if (aButtonsToCreate.indexOf("Unlink") !== -1) {
1683
+ aToolbarContent.push(this._helper.createOverflowToolbarButton(this._createButtonConfig("Unlink")).setVisible(bVisible));
1684
+ }
1685
+
1686
+ return aToolbarContent;
1687
+ };
1688
+
1689
+ ToolbarWrapper.prototype._createStructureToolbarContent = function (aButtonsToCreate, bVisible) {
1690
+ var aToolbarContent = [];
1691
+
1692
+ aButtonsToCreate.forEach(function (oCommand) {
1693
+ aToolbarContent.push(this._helper.createOverflowToolbarButton(this._createButtonConfig(oCommand)).setVisible(bVisible));
1694
+ }, this);
1695
+
1696
+ return aToolbarContent;
1697
+ };
1698
+
1699
+ ToolbarWrapper.prototype._createClipboardToolbarContent = function (aButtonsToCreate, bVisible) {
1700
+ var aToolbarContent = [];
1701
+
1702
+ aButtonsToCreate.forEach(function (oCommand) {
1703
+ aToolbarContent.push(this._helper.createOverflowToolbarButton(this._createButtonConfig(oCommand)).setVisible(bVisible));
1704
+ }, this);
1705
+
1706
+ return aToolbarContent;
1707
+ };
1708
+
1709
+ ToolbarWrapper.prototype._createUndoToolbarContent = function (aButtonsToCreate, bVisible) {
1710
+ var aToolbarContent = [];
1711
+
1712
+ aButtonsToCreate.forEach(function (oCommand) {
1713
+ aToolbarContent.push(this._helper.createOverflowToolbarButton(this._createButtonConfig(oCommand)).setVisible(bVisible));
1714
+ }, this);
1715
+
1716
+ return aToolbarContent;
1717
+ };
1718
+
1719
+ /**
1720
+ * Creates a Button Group for the Custom Toolbar
1721
+ *
1722
+ * @param {string} [mGroup] Object map containing group information.
1723
+ * @param {string[]} [mGroup.buttons] Array of name/IDs of the buttons in the group
1724
+ * @param {string} [mGroup.name] Name/ID of the group.
1725
+ * @param {boolean} [mGroup.visible=true] (optional) The priority of the button group. Lower priorities are added first.
1726
+ * @param {int} [mGroup.row=0] (optional) Row number in which the button should be
1727
+ * @param {int} [mGroup.priority=10] (optional) The priority of the button group. Lower priorities are added first.
1728
+ * @param {int} [mGroup.customToolbarPriority] (optional) The priority of the button group in the custom toolbar. Each default group in the custom toolbar has a predefined <code>customToolbarPriority</code>. Lower priorities are added in first.
1378
1729
  * @returns {Array} An array containing the buttons in the group that should be added to the Custom Toolbar's content
1379
- * @public
1730
+ * @private
1380
1731
  */
1381
- ToolbarWrapper.prototype.addButtonGroup = function (sGroupName) {
1732
+ ToolbarWrapper.prototype._createButtonGroup = function (mGroup) {
1382
1733
  var oRTE = this.getEditor(),
1383
1734
  oEditorHelper = this._helper,
1384
1735
  aContent = [],
1385
- oButtonGroups = library.ButtonGroups,
1386
- oCommands = library.EditorCommands,
1387
- oAccessibilityKeys = library.Accessibility,
1388
- bVisibleGroupClipboard,
1389
- bVisibleGroupStructure,
1390
- bVisibleGroupFont,
1391
- bVisibleGroupFontStyle,
1392
- bVisibleGroupUndo,
1393
- bVisibleGroupTextAlign,
1394
- bVisibleGroupFormatBlock,
1395
- bVisibleGroupLink,
1396
- bVisibleGroupInsert,
1397
- oToolbar = this;
1736
+ aToolbarButtonsToCreate = [];
1398
1737
 
1738
+ if (!oRTE) {
1739
+ return [];
1740
+ }
1399
1741
 
1400
- switch (sGroupName) {
1401
- case "font-style":
1402
- bVisibleGroupFontStyle = oRTE ? oRTE.getShowGroupFontStyle() : false;
1742
+ // Map native tinyMCE style button names (e.g. "bold", "forecolor") to supported by the custom toolbar button commands (e.g. "Bold", "TextColor").
1743
+ // If the group does not have "buttons" property, the default configuration for this particular group will be used.
1744
+ aToolbarButtonsToCreate = this._mapNativeButtonsToCommands(mGroup.name, mGroup.buttons);
1403
1745
 
1404
- oButtonGroups["font-style"].forEach(function (oCommand) {
1405
- aContent.push(oEditorHelper.createOverflowToolbarToggleButton(this._createButtonConfig(oCommand)).setVisible(bVisibleGroupFontStyle));
1406
- }, this);
1746
+ switch (mGroup.name) {
1747
+ case "font-style":
1748
+ aContent = this._createFontStyleToolbarContent(aToolbarButtonsToCreate, mGroup.visible);
1407
1749
  break;
1408
1750
  case "font":
1409
- bVisibleGroupFont = oRTE ? oRTE.getShowGroupFont() : false;
1410
-
1411
- var oInvisibleTextFontFamily = oEditorHelper.createInvisibleText({
1412
- text: this._oResourceBundle.getText(oAccessibilityKeys["FontFamily"])
1413
- }).toStatic(),
1414
- oInvisibleTextFontSize = oEditorHelper.createInvisibleText({
1415
- text: this._oResourceBundle.getText(oAccessibilityKeys["FontSize"])
1416
- }).toStatic();
1417
- this._registerAssociatedInvisibleTexts("font", oInvisibleTextFontFamily.getId());
1418
- this._registerAssociatedInvisibleTexts("font", oInvisibleTextFontSize.getId());
1419
-
1420
- aContent.push(
1421
- oEditorHelper.createSelect({
1422
- id: this._getId("FontFamily"),
1423
- selectedItemId: this._getId("FontFamilyVerdana"),
1424
- ariaLabelledBy: oInvisibleTextFontFamily,
1425
- items: this._createFontStyleSelectItems(),
1426
- change: function (oEvent) {
1427
- var oItem;
1428
-
1429
- if (oRTE) {
1430
- oItem = oEvent.getSource().getSelectedItem();
1431
- oRTE.getNativeApi().execCommand('FontName', false, this._getFontStyleCommand(oItem.getText()));
1432
- } else {
1433
- Log.warning("Cannot execute native command: " + 'FontName');
1434
- }
1435
- }.bind(this)
1436
- }).setVisible(bVisibleGroupFont)
1437
- );
1438
-
1439
- aContent.push(
1440
- oEditorHelper.createSelect({
1441
- id: this._getId("FontSize"),
1442
- selectedItemId: this._getId("FontSize2"),
1443
- ariaLabelledBy: oInvisibleTextFontSize,
1444
- items: this._createFontSizeSelectItems(),
1445
- change: function (oEvent) {
1446
- var oItem;
1447
-
1448
- if (oRTE) {
1449
- oItem = oEvent.getSource().getSelectedItem();
1450
- oRTE.getNativeApi().execCommand('FontSize', false, oItem.getText().replace(/\s/g, ""));
1451
- } else {
1452
- Log.warning("Cannot execute native command: " + 'FontSize');
1453
- }
1454
- }
1455
- }).setVisible(bVisibleGroupFont)
1456
- );
1457
- aContent.push(new RTESplitButton(this._createSplitButtonForDialog("TextColor")).setVisible(bVisibleGroupFont));
1458
- aContent.push(oEditorHelper.createSplitButton(this._createSplitButtonForDialog("BackgroundColor")).setVisible(bVisibleGroupFont));
1751
+ aContent = this._createFontToolbarContent(aToolbarButtonsToCreate, mGroup.visible);
1459
1752
  break;
1460
1753
  case "text-align":
1461
- bVisibleGroupTextAlign = oRTE ? oRTE.getShowGroupTextAlign() : false;
1462
- var bTextAlignLRight = oRTE._getTextDirection() === "rtl";
1463
- var iDefaultItemIndex = bTextAlignLRight ? 2 : 0;
1464
- var aMenuItems = this._createMenuButtonItems("TextAlign");
1465
- aContent.push(
1466
- oEditorHelper.createMenuButton(
1467
- this._getId("TextAlign"),
1468
- aMenuItems,
1469
- function (oEvent) {
1470
- var oSelectedItem, oEditor, oSelectedItemIcon;
1471
-
1472
- if (oRTE) {
1473
- oSelectedItem = oEvent.getParameter("item");
1474
- oEditor = oRTE.getNativeApi();
1475
- oSelectedItemIcon = oSelectedItem.getIcon();
1476
- if (oSelectedItemIcon === this.getParent().getIcon()) {
1477
- var sTextAlign = bTextAlignLRight ? "JustifyRight" : "JustifyLeft";
1478
- // Text Align commands in TinyMCE have a toggle behavior when you set a
1479
- // certain command twice the default command (text-align-left) will be applied
1480
- oEditor.execCommand(sTextAlign);
1481
- } else {
1482
- oEditor.execCommand('Justify' + oToolbar._findTextAlignCommandByIcon(oSelectedItemIcon));
1483
- }
1484
- } else {
1485
- Log.warning("Cannot execute native command: " + 'Justify');
1486
- }
1487
- },
1488
- aMenuItems[iDefaultItemIndex].getIcon(),
1489
- this._oResourceBundle.getText(oCommands["TextAlign"].bundleKey)
1490
- ).setVisible(bVisibleGroupTextAlign)
1491
- );
1754
+ aContent = this._createTextAlignToolbarContent(mGroup.visible);
1492
1755
  break;
1756
+ case "styleselect":
1757
+ case "styles":
1758
+ case "blocks":
1493
1759
  case "formatselect":
1494
- bVisibleGroupFormatBlock = oRTE ? (this._isButtonGroupAdded("styleselect") || this._isButtonGroupAdded("formatselect")) : false;
1495
-
1496
- if (bVisibleGroupFormatBlock) {
1497
- var oInvisibleTextFormatBlock = oEditorHelper.createInvisibleText({
1498
- text: this._oResourceBundle.getText(oAccessibilityKeys["FormatBlock"])
1499
- }).toStatic();
1500
- this._registerAssociatedInvisibleTexts("formatselect", oInvisibleTextFormatBlock.getId());
1501
- aContent.push(
1502
- oEditorHelper.createSelect({
1503
- id: this._getId("FormatBlock"),
1504
- ariaLabelledBy: oInvisibleTextFormatBlock,
1505
- items: this._createFormatBlockItems(),
1506
- change: function (oEvent) {
1507
- var oSelectedItem;
1508
- if (oRTE) {
1509
- oSelectedItem = oEvent.getSource().getSelectedItem();
1510
- if (oSelectedItem) {
1511
- var currentFormatterCommand = oRTE.getAggregation("_toolbarWrapper")._getFormatBlockCommand(oSelectedItem.getText());
1512
- oRTE.getNativeApi().execCommand('FormatBlock', false, currentFormatterCommand);
1513
- }
1514
- } else {
1515
- Log.warning("Cannot execute native command: " + 'FormatBlock');
1516
- }
1517
- }
1518
- }).setVisible(bVisibleGroupFormatBlock)
1519
- );
1520
- }
1760
+ aContent = this._createFormatSelectToolbarContent(this._isButtonGroupAdded("styleselect") || this._isButtonGroupAdded("styles") || this._isButtonGroupAdded("blocks") || this._isButtonGroupAdded("formatselect"));
1521
1761
  break;
1522
1762
  case "structure":
1523
- bVisibleGroupStructure = oRTE ? oRTE.getShowGroupStructure() : false;
1524
- oButtonGroups["structure"].forEach(function (oCommand) {
1525
- aContent.push(oEditorHelper.createOverflowToolbarButton(this._createButtonConfig(oCommand)).setVisible(bVisibleGroupStructure));
1526
- }, this);
1763
+ aContent = this._createStructureToolbarContent(aToolbarButtonsToCreate, mGroup.visible);
1527
1764
  break;
1528
1765
  case "clipboard":
1529
- bVisibleGroupClipboard = oRTE ? oRTE.getShowGroupClipboard() : false;
1530
- oButtonGroups["clipboard"].forEach(function (oCommand) {
1531
- aContent.push(oEditorHelper.createOverflowToolbarButton(this._createButtonConfig(oCommand)).setVisible(bVisibleGroupClipboard));
1532
- }, this);
1766
+ aContent = this._createClipboardToolbarContent(aToolbarButtonsToCreate, mGroup.visible);
1533
1767
  break;
1534
1768
  case "undo":
1535
- bVisibleGroupUndo = oRTE ? oRTE.getShowGroupUndo() : false;
1536
- oButtonGroups["undo"].forEach(function (oCommand) {
1537
- aContent.push(oEditorHelper.createOverflowToolbarButton(this._createButtonConfig(oCommand)).setVisible(bVisibleGroupUndo));
1538
- }, this);
1769
+ aContent = this._createUndoToolbarContent(aToolbarButtonsToCreate, mGroup.visible);
1539
1770
  break;
1540
1771
  case "insert":
1541
- bVisibleGroupInsert = oRTE ? oRTE.getShowGroupInsert() : false;
1542
- aContent.push(oEditorHelper.createOverflowToolbarToggleButton(this._createButtonForDialog("InsertImage")).setVisible(bVisibleGroupInsert));
1772
+ aContent = this._createInsertToolbarContent(mGroup.visible);
1543
1773
  break;
1544
1774
  case "link":
1545
- bVisibleGroupLink = oRTE ? oRTE.getShowGroupLink() : false;
1546
- aContent.push(oEditorHelper.createOverflowToolbarToggleButton(this._createButtonForDialog("InsertLink")).setVisible(bVisibleGroupLink));
1547
- aContent.push(oEditorHelper.createOverflowToolbarButton(this._createButtonConfig("Unlink")).setVisible(bVisibleGroupLink));
1775
+ aContent = this._createLinkToolbarContent(aToolbarButtonsToCreate, mGroup.visible);
1548
1776
  break;
1549
1777
  case "table":
1550
- aContent.push(oEditorHelper.createOverflowToolbarButton(this._createButtonForDialog("InsertTable")));
1778
+ aContent.push(oEditorHelper.createOverflowToolbarButton(this._createButtonForDialog("InsertTable")).setVisible(mGroup.visible));
1551
1779
  break;
1780
+ default: break;
1552
1781
  }
1553
1782
 
1554
1783
  return aContent;
@@ -1558,36 +1787,28 @@ sap.ui.define([
1558
1787
  * Adds a Button Group to an existing Toolbar
1559
1788
  *
1560
1789
  * @param {map} [mGroup] Group object
1561
- * @param {boolean} [bFullGroup] If false, the group is generated from a group name
1562
1790
  * @returns {object} this for method chaining
1563
1791
  * @public
1564
1792
  */
1565
- ToolbarWrapper.prototype.addButtonGroupToContent = function (mGroup, bFullGroup) {
1793
+ ToolbarWrapper.prototype.addButtonGroupToContent = function (mGroup) {
1566
1794
  var sGroupName;
1567
1795
  // if the group is generated add it to the button groups object
1568
1796
  // as a custom group (if it contains supported group buttons - ex."table")
1569
- if (!bFullGroup && mGroup.buttons[0] === "table") {
1570
- sGroupName = mGroup.buttons[0];
1571
- sap.ui.richtexteditor.ButtonGroups.custom[mGroup.name] = {
1572
- name: mGroup.buttons[0],
1573
- controls: ["InsertTable"]
1574
- };
1575
- }
1576
1797
 
1577
1798
  // if the group is supported (ex. "table") add it to the button groups object
1578
- if (bFullGroup && mGroup.name === "table") {
1799
+ if (mGroup.name === "table") {
1579
1800
  sGroupName = mGroup.name;
1580
- sap.ui.richtexteditor.ButtonGroups[mGroup.name] = ["InsertTable"];
1801
+ ButtonGroups[mGroup.name] = ["InsertTable"];
1581
1802
  }
1582
1803
 
1583
1804
  // if the group is supported (ex. "formatselect") add it to the button groups object
1584
- if (bFullGroup && (mGroup.name === "formatselect" || mGroup.name === "styleselect")) {
1805
+ if (mGroup.name === "formatselect" || mGroup.name === "styleselect" || mGroup.name === "styles" || mGroup.name === "blocks") {
1585
1806
  sGroupName = "formatselect";
1586
- sap.ui.richtexteditor.ButtonGroups[mGroup.name] = ["FormatBlock"];
1807
+ ButtonGroups[mGroup.name] = ["FormatBlock"];
1587
1808
  }
1588
1809
 
1589
1810
  // if not supported return and do not add content
1590
- if (!sap.ui.richtexteditor.ButtonGroups[mGroup.name] && !sap.ui.richtexteditor.ButtonGroups.custom[mGroup.name]) {
1811
+ if (!ButtonGroups[mGroup.name] && !ButtonGroups.custom[mGroup.name]) {
1591
1812
  return this;
1592
1813
  }
1593
1814
 
@@ -1598,7 +1819,7 @@ sap.ui.define([
1598
1819
  }
1599
1820
 
1600
1821
  var oToolbar = this.getAggregation("_toolbar"),
1601
- aContent = this.addButtonGroup(sGroupName),
1822
+ aContent = this._createButtonGroup(mGroup),
1602
1823
  iContentSize = aContent.length,
1603
1824
  i, iStartIndex;
1604
1825
 
@@ -1625,27 +1846,41 @@ sap.ui.define([
1625
1846
  /**
1626
1847
  * Helper function for finding the correct position of a group according to its customToolbarPriority
1627
1848
  *
1628
- * @param {Array} [mGroup] Group Object
1629
- * @returns {Number} The index where the first element of the group should be added
1849
+ * @param {object} mGroup Group Object
1850
+ * @param {string} [mGroup.name] Name of the group
1851
+ * @param {int} [mGroup.customToolbarPriority] Predefined group priority
1852
+ * @returns {int} The index where the first element of the group should be added
1630
1853
  * @private
1631
1854
  */
1632
1855
  ToolbarWrapper.prototype._findGroupPriorityPosition = function (mGroup) {
1633
1856
  var aGroups = this.getEditor().getButtonGroups(),
1634
- aCustomToolbarGroups = library.ButtonGroups,
1635
1857
  iStartIndex = 0;
1636
1858
 
1637
1859
  // place groups without predefined customToolbarPriority at the end
1638
- if (!jQuery.isNumeric(mGroup.customToolbarPriority)) {
1860
+ if (typeof mGroup.customToolbarPriority !== "number") {
1639
1861
  mGroup.customToolbarPriority = this._getLastGroupPriority(aGroups) + 10;
1640
1862
  }
1641
1863
 
1642
1864
  // sort groups according to customToolbarPriority
1643
1865
  aGroups = this._sortToolbarContent(aGroups);
1644
1866
 
1645
- aGroups.forEach(function (oGroup) {
1646
- if (oGroup.customToolbarPriority < mGroup.customToolbarPriority && oGroup.name !== mGroup.name) {
1867
+ aGroups
1868
+ // Map all groups to supported buttons that can be created in the custom toolbar
1869
+ // based on the current group configuration
1870
+ .map(function (oGroup) {
1871
+ // We need new object that maps buttons to commands, as they do not map directly and some of the configurations
1872
+ // may have many buttons, which is then translated to single control in the custom toolbar.
1873
+ return {
1874
+ name: oGroup.name,
1875
+ iButtonsCount: this._mapNativeButtonsToCommands(oGroup.name, oGroup.buttons).length,
1876
+ customToolbarPriority: oGroup.customToolbarPriority
1877
+ };
1878
+ }.bind(this))
1879
+ // Find the correct starting index for this group, based on the customToolbarPriority group property
1880
+ .forEach(function (oMappedGroup) {
1881
+ if (oMappedGroup.customToolbarPriority < mGroup.customToolbarPriority && oMappedGroup.name !== mGroup.name) {
1647
1882
  // if the group exist for the customToolbar, add its button count to the startIndex
1648
- iStartIndex += aCustomToolbarGroups[oGroup.name] ? aCustomToolbarGroups[oGroup.name].length : 0;
1883
+ iStartIndex += ButtonGroups[oMappedGroup.name] ? oMappedGroup.iButtonsCount : 0;
1649
1884
  }
1650
1885
  });
1651
1886
 
@@ -1655,8 +1890,8 @@ sap.ui.define([
1655
1890
  /**
1656
1891
  * Helper function for finding the priority of the last group in the toolbar
1657
1892
  *
1658
- * @param {Array} [oGroups] Group name
1659
- * @returns {Number} The priority of the last group in the toolbar
1893
+ * @param {Array} [aGroups] Group name
1894
+ * @returns {number} The priority of the last group in the toolbar
1660
1895
  * @private
1661
1896
  */
1662
1897
  ToolbarWrapper.prototype._getLastGroupPriority = function (aGroups) {
@@ -1676,6 +1911,11 @@ sap.ui.define([
1676
1911
  ToolbarWrapper.prototype.removeButtonGroup = function (sGroupName) {
1677
1912
  var aObjects = this._findGroupedControls(sGroupName);
1678
1913
 
1914
+ // Detach handlers from color picker dialogs if the font group is removed
1915
+ if (sGroupName === "font") {
1916
+ this._modifyPopoverOpeningArrowHandlers(false);
1917
+ }
1918
+
1679
1919
  // destroys associated InvisibleTexts for the group
1680
1920
  this._destroyAssociatedInvisibleTexts(sGroupName);
1681
1921
 
@@ -1803,18 +2043,17 @@ sap.ui.define([
1803
2043
  * @private
1804
2044
  */
1805
2045
  ToolbarWrapper.prototype._findGroupedControls = function (sGroupName) {
1806
- var oButtonGroups = library.ButtonGroups,
1807
- oToolbar = this.getAggregation("_toolbar"),
2046
+ var oToolbar = this.getAggregation("_toolbar"),
1808
2047
  aControls = [];
1809
2048
 
1810
2049
  if (!oToolbar) {
1811
2050
  return [];
1812
2051
  }
1813
2052
 
1814
- if (oButtonGroups[sGroupName]) {
1815
- aControls = oButtonGroups[sGroupName];
1816
- } else if (oButtonGroups.custom[sGroupName]) {
1817
- aControls = oButtonGroups.custom[sGroupName].controls;
2053
+ if (ButtonGroups[sGroupName]) {
2054
+ aControls = ButtonGroups[sGroupName];
2055
+ } else if (ButtonGroups.custom[sGroupName]) {
2056
+ aControls = ButtonGroups.custom[sGroupName].controls;
1818
2057
  }
1819
2058
 
1820
2059
  var aIds = aControls.map(function (sName) {
@@ -1841,8 +2080,13 @@ sap.ui.define([
1841
2080
  * @public
1842
2081
  */
1843
2082
  ToolbarWrapper.prototype.modifyToolbarContent = function (sModifier) {
1844
- var vResult,
1845
- args = Array.prototype.slice.call(arguments);
2083
+ var vResult;
2084
+ var args = Array.prototype.slice.call(arguments);
2085
+ var oToolbar = this.getAggregation("_toolbar");
2086
+
2087
+ if (!oToolbar) {
2088
+ return null;
2089
+ }
1846
2090
 
1847
2091
  args.shift();
1848
2092
 
@@ -1874,6 +2118,9 @@ sap.ui.define([
1874
2118
  case "remove":
1875
2119
  vResult = this._proxyToolbarRemove.apply(this, args);
1876
2120
  break;
2121
+
2122
+ default:
2123
+ break;
1877
2124
  }
1878
2125
 
1879
2126
  return vResult;
@@ -2001,6 +2248,8 @@ sap.ui.define([
2001
2248
  case "number":
2002
2249
  sId = this._customButtons[vItem];
2003
2250
  break;
2251
+ default:
2252
+ break;
2004
2253
  }
2005
2254
 
2006
2255
  vResult = oToolbar.removeContent(sId);
@@ -2012,5 +2261,19 @@ sap.ui.define([
2012
2261
  return vResult;
2013
2262
  };
2014
2263
 
2264
+ /**
2265
+ * Helper function for finding controls in the Toolbar by their corresponding names.
2266
+ *
2267
+ * @param {string} sButtonName Custom toolbar button name (Bold, TextAlign, Italic, TextColor, etc...)
2268
+ * @returns {sap.ui.core.Control|null} The control with the corresponding name or null.
2269
+ */
2270
+ ToolbarWrapper.prototype._findButtonById = function (sButtonName) {
2271
+ var oRTE = this.getEditor();
2272
+ if (!oRTE) {
2273
+ return null;
2274
+ }
2275
+ return Core.byId(oRTE.getId() + this.getId() + "-" + sButtonName);
2276
+ };
2277
+
2015
2278
  return ToolbarWrapper;
2016
2279
  });