plugin.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. /**
  2. * Copyright (c) Tiny Technologies, Inc. All rights reserved.
  3. * Licensed under the LGPL or a commercial license.
  4. * For LGPL see License.txt in the project root for license information.
  5. * For commercial licenses see https://www.tiny.cloud/
  6. *
  7. * Version: 5.0.7 (2019-06-05)
  8. */
  9. (function () {
  10. var fullscreen = (function (domGlobals) {
  11. 'use strict';
  12. var Cell = function (initial) {
  13. var value = initial;
  14. var get = function () {
  15. return value;
  16. };
  17. var set = function (v) {
  18. value = v;
  19. };
  20. var clone = function () {
  21. return Cell(get());
  22. };
  23. return {
  24. get: get,
  25. set: set,
  26. clone: clone
  27. };
  28. };
  29. var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
  30. var get = function (fullscreenState) {
  31. return {
  32. isFullscreen: function () {
  33. return fullscreenState.get() !== null;
  34. }
  35. };
  36. };
  37. var Api = { get: get };
  38. var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
  39. var fireFullscreenStateChanged = function (editor, state) {
  40. editor.fire('FullscreenStateChanged', { state: state });
  41. };
  42. var Events = { fireFullscreenStateChanged: fireFullscreenStateChanged };
  43. var DOM = global$1.DOM;
  44. var getScrollPos = function () {
  45. var vp = DOM.getViewPort();
  46. return {
  47. x: vp.x,
  48. y: vp.y
  49. };
  50. };
  51. var setScrollPos = function (pos) {
  52. domGlobals.window.scrollTo(pos.x, pos.y);
  53. };
  54. var toggleFullscreen = function (editor, fullscreenState) {
  55. var body = domGlobals.document.body;
  56. var documentElement = domGlobals.document.documentElement;
  57. var editorContainerStyle;
  58. var editorContainer, iframe, iframeStyle;
  59. var fullscreenInfo = fullscreenState.get();
  60. editorContainer = editor.getContainer();
  61. editorContainerStyle = editorContainer.style;
  62. iframe = editor.getContentAreaContainer().firstChild;
  63. iframeStyle = iframe.style;
  64. if (!fullscreenInfo) {
  65. var newFullScreenInfo = {
  66. scrollPos: getScrollPos(),
  67. containerWidth: editorContainerStyle.width,
  68. containerHeight: editorContainerStyle.height,
  69. iframeWidth: iframeStyle.width,
  70. iframeHeight: iframeStyle.height
  71. };
  72. iframeStyle.width = iframeStyle.height = '100%';
  73. editorContainerStyle.width = editorContainerStyle.height = '';
  74. DOM.addClass(body, 'tox-fullscreen');
  75. DOM.addClass(documentElement, 'tox-fullscreen');
  76. DOM.addClass(editorContainer, 'tox-fullscreen');
  77. fullscreenState.set(newFullScreenInfo);
  78. Events.fireFullscreenStateChanged(editor, true);
  79. } else {
  80. iframeStyle.width = fullscreenInfo.iframeWidth;
  81. iframeStyle.height = fullscreenInfo.iframeHeight;
  82. if (fullscreenInfo.containerWidth) {
  83. editorContainerStyle.width = fullscreenInfo.containerWidth;
  84. }
  85. if (fullscreenInfo.containerHeight) {
  86. editorContainerStyle.height = fullscreenInfo.containerHeight;
  87. }
  88. DOM.removeClass(body, 'tox-fullscreen');
  89. DOM.removeClass(documentElement, 'tox-fullscreen');
  90. DOM.removeClass(editorContainer, 'tox-fullscreen');
  91. setScrollPos(fullscreenInfo.scrollPos);
  92. fullscreenState.set(null);
  93. Events.fireFullscreenStateChanged(editor, false);
  94. }
  95. };
  96. var Actions = { toggleFullscreen: toggleFullscreen };
  97. var register = function (editor, fullscreenState) {
  98. editor.addCommand('mceFullScreen', function () {
  99. Actions.toggleFullscreen(editor, fullscreenState);
  100. });
  101. };
  102. var Commands = { register: register };
  103. var makeSetupHandler = function (editor, fullscreenState) {
  104. return function (api) {
  105. api.setActive(fullscreenState.get() !== null);
  106. var editorEventCallback = function (e) {
  107. return api.setActive(e.state);
  108. };
  109. editor.on('FullscreenStateChanged', editorEventCallback);
  110. return function () {
  111. return editor.off('FullscreenStateChanged', editorEventCallback);
  112. };
  113. };
  114. };
  115. var register$1 = function (editor, fullscreenState) {
  116. editor.ui.registry.addToggleMenuItem('fullscreen', {
  117. text: 'Fullscreen',
  118. shortcut: 'Meta+Shift+F',
  119. onAction: function () {
  120. return editor.execCommand('mceFullScreen');
  121. },
  122. onSetup: makeSetupHandler(editor, fullscreenState)
  123. });
  124. editor.ui.registry.addToggleButton('fullscreen', {
  125. tooltip: 'Fullscreen',
  126. icon: 'fullscreen',
  127. onAction: function () {
  128. return editor.execCommand('mceFullScreen');
  129. },
  130. onSetup: makeSetupHandler(editor, fullscreenState)
  131. });
  132. };
  133. var Buttons = { register: register$1 };
  134. global.add('fullscreen', function (editor) {
  135. var fullscreenState = Cell(null);
  136. if (editor.settings.inline) {
  137. return Api.get(fullscreenState);
  138. }
  139. Commands.register(editor, fullscreenState);
  140. Buttons.register(editor, fullscreenState);
  141. editor.addShortcut('Meta+Shift+F', '', 'mceFullScreen');
  142. return Api.get(fullscreenState);
  143. });
  144. function Plugin () {
  145. }
  146. return Plugin;
  147. }(window));
  148. })();