plugin.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. (function () {
  2. var visualblocks = (function () {
  3. 'use strict';
  4. var Cell = function (initial) {
  5. var value = initial;
  6. var get = function () {
  7. return value;
  8. };
  9. var set = function (v) {
  10. value = v;
  11. };
  12. var clone = function () {
  13. return Cell(get());
  14. };
  15. return {
  16. get: get,
  17. set: set,
  18. clone: clone
  19. };
  20. };
  21. var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
  22. var fireVisualBlocks = function (editor, state) {
  23. editor.fire('VisualBlocks', { state: state });
  24. };
  25. var Events = { fireVisualBlocks: fireVisualBlocks };
  26. var isEnabledByDefault = function (editor) {
  27. return editor.getParam('visualblocks_default_state', false);
  28. };
  29. var getContentCss = function (editor) {
  30. return editor.settings.visualblocks_content_css;
  31. };
  32. var Settings = {
  33. isEnabledByDefault: isEnabledByDefault,
  34. getContentCss: getContentCss
  35. };
  36. var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
  37. var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');
  38. var cssId = global$1.DOM.uniqueId();
  39. var load = function (doc, url) {
  40. var linkElements = global$2.toArray(doc.getElementsByTagName('link'));
  41. var matchingLinkElms = global$2.grep(linkElements, function (head) {
  42. return head.id === cssId;
  43. });
  44. if (matchingLinkElms.length === 0) {
  45. var linkElm = global$1.DOM.create('link', {
  46. id: cssId,
  47. rel: 'stylesheet',
  48. href: url
  49. });
  50. doc.getElementsByTagName('head')[0].appendChild(linkElm);
  51. }
  52. };
  53. var LoadCss = { load: load };
  54. var toggleVisualBlocks = function (editor, pluginUrl, enabledState) {
  55. var dom = editor.dom;
  56. var contentCss = Settings.getContentCss(editor);
  57. LoadCss.load(editor.getDoc(), contentCss ? contentCss : pluginUrl + '/css/visualblocks.css');
  58. dom.toggleClass(editor.getBody(), 'mce-visualblocks');
  59. enabledState.set(!enabledState.get());
  60. Events.fireVisualBlocks(editor, enabledState.get());
  61. };
  62. var VisualBlocks = { toggleVisualBlocks: toggleVisualBlocks };
  63. var register = function (editor, pluginUrl, enabledState) {
  64. editor.addCommand('mceVisualBlocks', function () {
  65. VisualBlocks.toggleVisualBlocks(editor, pluginUrl, enabledState);
  66. });
  67. };
  68. var Commands = { register: register };
  69. var setup = function (editor, pluginUrl, enabledState) {
  70. editor.on('PreviewFormats AfterPreviewFormats', function (e) {
  71. if (enabledState.get()) {
  72. editor.dom.toggleClass(editor.getBody(), 'mce-visualblocks', e.type === 'afterpreviewformats');
  73. }
  74. });
  75. editor.on('init', function () {
  76. if (Settings.isEnabledByDefault(editor)) {
  77. VisualBlocks.toggleVisualBlocks(editor, pluginUrl, enabledState);
  78. }
  79. });
  80. editor.on('remove', function () {
  81. editor.dom.removeClass(editor.getBody(), 'mce-visualblocks');
  82. });
  83. };
  84. var Bindings = { setup: setup };
  85. var toggleActiveState = function (editor, enabledState) {
  86. return function (e) {
  87. var ctrl = e.control;
  88. ctrl.active(enabledState.get());
  89. editor.on('VisualBlocks', function (e) {
  90. ctrl.active(e.state);
  91. });
  92. };
  93. };
  94. var register$1 = function (editor, enabledState) {
  95. editor.addButton('visualblocks', {
  96. active: false,
  97. title: 'Show blocks',
  98. cmd: 'mceVisualBlocks',
  99. onPostRender: toggleActiveState(editor, enabledState)
  100. });
  101. editor.addMenuItem('visualblocks', {
  102. text: 'Show blocks',
  103. cmd: 'mceVisualBlocks',
  104. onPostRender: toggleActiveState(editor, enabledState),
  105. selectable: true,
  106. context: 'view',
  107. prependToContext: true
  108. });
  109. };
  110. var Buttons = { register: register$1 };
  111. global.add('visualblocks', function (editor, pluginUrl) {
  112. var enabledState = Cell(false);
  113. Commands.register(editor, pluginUrl, enabledState);
  114. Buttons.register(editor, enabledState);
  115. Bindings.setup(editor, pluginUrl, enabledState);
  116. });
  117. function Plugin () {
  118. }
  119. return Plugin;
  120. }());
  121. })();