home *** CD-ROM | disk | FTP | other *** search
/ HTML Examples / WP.iso / wordpress2 / wp-includes / js / tinymce / plugins / fullscreen / plugin.js next >
Encoding:
JavaScript  |  2017-05-07  |  7.6 KB  |  300 lines

  1. (function () {
  2.  
  3. var defs = {}; // id -> {dependencies, definition, instance (possibly undefined)}
  4.  
  5. // Used when there is no 'main' module.
  6. // The name is probably (hopefully) unique so minification removes for releases.
  7. var register_3795 = function (id) {
  8.   var module = dem(id);
  9.   var fragments = id.split('.');
  10.   var target = Function('return this;')();
  11.   for (var i = 0; i < fragments.length - 1; ++i) {
  12.     if (target[fragments[i]] === undefined)
  13.       target[fragments[i]] = {};
  14.     target = target[fragments[i]];
  15.   }
  16.   target[fragments[fragments.length - 1]] = module;
  17. };
  18.  
  19. var instantiate = function (id) {
  20.   var actual = defs[id];
  21.   var dependencies = actual.deps;
  22.   var definition = actual.defn;
  23.   var len = dependencies.length;
  24.   var instances = new Array(len);
  25.   for (var i = 0; i < len; ++i)
  26.     instances[i] = dem(dependencies[i]);
  27.   var defResult = definition.apply(null, instances);
  28.   if (defResult === undefined)
  29.      throw 'module [' + id + '] returned undefined';
  30.   actual.instance = defResult;
  31. };
  32.  
  33. var def = function (id, dependencies, definition) {
  34.   if (typeof id !== 'string')
  35.     throw 'module id must be a string';
  36.   else if (dependencies === undefined)
  37.     throw 'no dependencies for ' + id;
  38.   else if (definition === undefined)
  39.     throw 'no definition function for ' + id;
  40.   defs[id] = {
  41.     deps: dependencies,
  42.     defn: definition,
  43.     instance: undefined
  44.   };
  45. };
  46.  
  47. var dem = function (id) {
  48.   var actual = defs[id];
  49.   if (actual === undefined)
  50.     throw 'module [' + id + '] was undefined';
  51.   else if (actual.instance === undefined)
  52.     instantiate(id);
  53.   return actual.instance;
  54. };
  55.  
  56. var req = function (ids, callback) {
  57.   var len = ids.length;
  58.   var instances = new Array(len);
  59.   for (var i = 0; i < len; ++i)
  60.     instances.push(dem(ids[i]));
  61.   callback.apply(null, callback);
  62. };
  63.  
  64. var ephox = {};
  65.  
  66. ephox.bolt = {
  67.   module: {
  68.     api: {
  69.       define: def,
  70.       require: req,
  71.       demand: dem
  72.     }
  73.   }
  74. };
  75.  
  76. var define = def;
  77. var require = req;
  78. var demand = dem;
  79. // this helps with minificiation when using a lot of global references
  80. var defineGlobal = function (id, ref) {
  81.   define(id, [], function () { return ref; });
  82. };
  83. /*jsc
  84. ["tinymce.plugins.fullscreen.Plugin","tinymce.core.dom.DOMUtils","tinymce.core.PluginManager","global!tinymce.util.Tools.resolve"]
  85. jsc*/
  86. defineGlobal("global!tinymce.util.Tools.resolve", tinymce.util.Tools.resolve);
  87. /**
  88.  * ResolveGlobal.js
  89.  *
  90.  * Released under LGPL License.
  91.  * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
  92.  *
  93.  * License: http://www.tinymce.com/license
  94.  * Contributing: http://www.tinymce.com/contributing
  95.  */
  96.  
  97. define(
  98.   'tinymce.core.dom.DOMUtils',
  99.   [
  100.     'global!tinymce.util.Tools.resolve'
  101.   ],
  102.   function (resolve) {
  103.     return resolve('tinymce.dom.DOMUtils');
  104.   }
  105. );
  106.  
  107. /**
  108.  * ResolveGlobal.js
  109.  *
  110.  * Released under LGPL License.
  111.  * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
  112.  *
  113.  * License: http://www.tinymce.com/license
  114.  * Contributing: http://www.tinymce.com/contributing
  115.  */
  116.  
  117. define(
  118.   'tinymce.core.PluginManager',
  119.   [
  120.     'global!tinymce.util.Tools.resolve'
  121.   ],
  122.   function (resolve) {
  123.     return resolve('tinymce.PluginManager');
  124.   }
  125. );
  126.  
  127. /**
  128.  * Plugin.js
  129.  *
  130.  * Released under LGPL License.
  131.  * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
  132.  *
  133.  * License: http://www.tinymce.com/license
  134.  * Contributing: http://www.tinymce.com/contributing
  135.  */
  136.  
  137. /**
  138.  * This class contains all core logic for the fullscreen plugin.
  139.  *
  140.  * @class tinymce.fullscreen.Plugin
  141.  * @private
  142.  */
  143. define(
  144.   'tinymce.plugins.fullscreen.Plugin',
  145.   [
  146.     'tinymce.core.dom.DOMUtils',
  147.     'tinymce.core.PluginManager'
  148.   ],
  149.   function (DOMUtils, PluginManager) {
  150.     var DOM = DOMUtils.DOM;
  151.  
  152.     PluginManager.add('fullscreen', function (editor) {
  153.       var fullscreenState = false, iframeWidth, iframeHeight, resizeHandler;
  154.       var containerWidth, containerHeight, scrollPos;
  155.  
  156.       if (editor.settings.inline) {
  157.         return;
  158.       }
  159.  
  160.       function getWindowSize() {
  161.         var w, h, win = window, doc = document;
  162.         var body = doc.body;
  163.  
  164.         // Old IE
  165.         if (body.offsetWidth) {
  166.           w = body.offsetWidth;
  167.           h = body.offsetHeight;
  168.         }
  169.  
  170.         // Modern browsers
  171.         if (win.innerWidth && win.innerHeight) {
  172.           w = win.innerWidth;
  173.           h = win.innerHeight;
  174.         }
  175.  
  176.         return { w: w, h: h };
  177.       }
  178.  
  179.       function getScrollPos() {
  180.         var vp = DOM.getViewPort();
  181.  
  182.         return {
  183.           x: vp.x,
  184.           y: vp.y
  185.         };
  186.       }
  187.  
  188.       function setScrollPos(pos) {
  189.         window.scrollTo(pos.x, pos.y);
  190.       }
  191.  
  192.       function toggleFullscreen() {
  193.         var body = document.body, documentElement = document.documentElement, editorContainerStyle;
  194.         var editorContainer, iframe, iframeStyle;
  195.  
  196.         function resize() {
  197.           DOM.setStyle(iframe, 'height', getWindowSize().h - (editorContainer.clientHeight - iframe.clientHeight));
  198.         }
  199.  
  200.         fullscreenState = !fullscreenState;
  201.  
  202.         editorContainer = editor.getContainer();
  203.         editorContainerStyle = editorContainer.style;
  204.         iframe = editor.getContentAreaContainer().firstChild;
  205.         iframeStyle = iframe.style;
  206.  
  207.         if (fullscreenState) {
  208.           scrollPos = getScrollPos();
  209.           iframeWidth = iframeStyle.width;
  210.           iframeHeight = iframeStyle.height;
  211.           iframeStyle.width = iframeStyle.height = '100%';
  212.           containerWidth = editorContainerStyle.width;
  213.           containerHeight = editorContainerStyle.height;
  214.           editorContainerStyle.width = editorContainerStyle.height = '';
  215.  
  216.           DOM.addClass(body, 'mce-fullscreen');
  217.           DOM.addClass(documentElement, 'mce-fullscreen');
  218.           DOM.addClass(editorContainer, 'mce-fullscreen');
  219.  
  220.           DOM.bind(window, 'resize', resize);
  221.           resize();
  222.           resizeHandler = resize;
  223.         } else {
  224.           iframeStyle.width = iframeWidth;
  225.           iframeStyle.height = iframeHeight;
  226.  
  227.           if (containerWidth) {
  228.             editorContainerStyle.width = containerWidth;
  229.           }
  230.  
  231.           if (containerHeight) {
  232.             editorContainerStyle.height = containerHeight;
  233.           }
  234.  
  235.           DOM.removeClass(body, 'mce-fullscreen');
  236.           DOM.removeClass(documentElement, 'mce-fullscreen');
  237.           DOM.removeClass(editorContainer, 'mce-fullscreen');
  238.           DOM.unbind(window, 'resize', resizeHandler);
  239.           setScrollPos(scrollPos);
  240.         }
  241.  
  242.         editor.fire('FullscreenStateChanged', { state: fullscreenState });
  243.       }
  244.  
  245.       editor.on('init', function () {
  246.         editor.addShortcut('Ctrl+Shift+F', '', toggleFullscreen);
  247.       });
  248.  
  249.       editor.on('remove', function () {
  250.         if (resizeHandler) {
  251.           DOM.unbind(window, 'resize', resizeHandler);
  252.         }
  253.       });
  254.  
  255.       editor.addCommand('mceFullScreen', toggleFullscreen);
  256.  
  257.       editor.addMenuItem('fullscreen', {
  258.         text: 'Fullscreen',
  259.         shortcut: 'Ctrl+Shift+F',
  260.         selectable: true,
  261.         onClick: function () {
  262.           toggleFullscreen();
  263.           editor.focus();
  264.         },
  265.         onPostRender: function () {
  266.           var self = this;
  267.  
  268.           editor.on('FullscreenStateChanged', function (e) {
  269.             self.active(e.state);
  270.           });
  271.         },
  272.         context: 'view'
  273.       });
  274.  
  275.       editor.addButton('fullscreen', {
  276.         tooltip: 'Fullscreen',
  277.         shortcut: 'Ctrl+Shift+F',
  278.         onClick: toggleFullscreen,
  279.         onPostRender: function () {
  280.           var self = this;
  281.  
  282.           editor.on('FullscreenStateChanged', function (e) {
  283.             self.active(e.state);
  284.           });
  285.         }
  286.       });
  287.  
  288.       return {
  289.         isFullscreen: function () {
  290.           return fullscreenState;
  291.         }
  292.       };
  293.     });
  294.  
  295.     return function () { };
  296.   }
  297. );
  298. dem('tinymce.plugins.fullscreen.Plugin')();
  299. })();
  300.