ru-se.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

plugin.js (5595B)


      1 (function () {
      2 var fullscreen = (function (domGlobals) {
      3     'use strict';
      4 
      5     var Cell = function (initial) {
      6       var value = initial;
      7       var get = function () {
      8         return value;
      9       };
     10       var set = function (v) {
     11         value = v;
     12       };
     13       var clone = function () {
     14         return Cell(get());
     15       };
     16       return {
     17         get: get,
     18         set: set,
     19         clone: clone
     20       };
     21     };
     22 
     23     var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
     24 
     25     var get = function (fullscreenState) {
     26       return {
     27         isFullscreen: function () {
     28           return fullscreenState.get() !== null;
     29         }
     30       };
     31     };
     32     var Api = { get: get };
     33 
     34     var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
     35 
     36     var fireFullscreenStateChanged = function (editor, state) {
     37       editor.fire('FullscreenStateChanged', { state: state });
     38     };
     39     var Events = { fireFullscreenStateChanged: fireFullscreenStateChanged };
     40 
     41     var DOM = global$1.DOM;
     42     var getWindowSize = function () {
     43       var w;
     44       var h;
     45       var win = domGlobals.window;
     46       var doc = domGlobals.document;
     47       var body = doc.body;
     48       if (body.offsetWidth) {
     49         w = body.offsetWidth;
     50         h = body.offsetHeight;
     51       }
     52       if (win.innerWidth && win.innerHeight) {
     53         w = win.innerWidth;
     54         h = win.innerHeight;
     55       }
     56       return {
     57         w: w,
     58         h: h
     59       };
     60     };
     61     var getScrollPos = function () {
     62       var vp = DOM.getViewPort();
     63       return {
     64         x: vp.x,
     65         y: vp.y
     66       };
     67     };
     68     var setScrollPos = function (pos) {
     69       domGlobals.window.scrollTo(pos.x, pos.y);
     70     };
     71     var toggleFullscreen = function (editor, fullscreenState) {
     72       var body = domGlobals.document.body;
     73       var documentElement = domGlobals.document.documentElement;
     74       var editorContainerStyle;
     75       var editorContainer, iframe, iframeStyle;
     76       var fullscreenInfo = fullscreenState.get();
     77       var resize = function () {
     78         DOM.setStyle(iframe, 'height', getWindowSize().h - (editorContainer.clientHeight - iframe.clientHeight));
     79       };
     80       var removeResize = function () {
     81         DOM.unbind(domGlobals.window, 'resize', resize);
     82       };
     83       editorContainer = editor.getContainer();
     84       editorContainerStyle = editorContainer.style;
     85       iframe = editor.getContentAreaContainer().firstChild;
     86       iframeStyle = iframe.style;
     87       if (!fullscreenInfo) {
     88         var newFullScreenInfo = {
     89           scrollPos: getScrollPos(),
     90           containerWidth: editorContainerStyle.width,
     91           containerHeight: editorContainerStyle.height,
     92           iframeWidth: iframeStyle.width,
     93           iframeHeight: iframeStyle.height,
     94           resizeHandler: resize,
     95           removeHandler: removeResize
     96         };
     97         iframeStyle.width = iframeStyle.height = '100%';
     98         editorContainerStyle.width = editorContainerStyle.height = '';
     99         DOM.addClass(body, 'mce-fullscreen');
    100         DOM.addClass(documentElement, 'mce-fullscreen');
    101         DOM.addClass(editorContainer, 'mce-fullscreen');
    102         DOM.bind(domGlobals.window, 'resize', resize);
    103         editor.on('remove', removeResize);
    104         resize();
    105         fullscreenState.set(newFullScreenInfo);
    106         Events.fireFullscreenStateChanged(editor, true);
    107       } else {
    108         iframeStyle.width = fullscreenInfo.iframeWidth;
    109         iframeStyle.height = fullscreenInfo.iframeHeight;
    110         if (fullscreenInfo.containerWidth) {
    111           editorContainerStyle.width = fullscreenInfo.containerWidth;
    112         }
    113         if (fullscreenInfo.containerHeight) {
    114           editorContainerStyle.height = fullscreenInfo.containerHeight;
    115         }
    116         DOM.removeClass(body, 'mce-fullscreen');
    117         DOM.removeClass(documentElement, 'mce-fullscreen');
    118         DOM.removeClass(editorContainer, 'mce-fullscreen');
    119         setScrollPos(fullscreenInfo.scrollPos);
    120         DOM.unbind(domGlobals.window, 'resize', fullscreenInfo.resizeHandler);
    121         editor.off('remove', fullscreenInfo.removeHandler);
    122         fullscreenState.set(null);
    123         Events.fireFullscreenStateChanged(editor, false);
    124       }
    125     };
    126     var Actions = { toggleFullscreen: toggleFullscreen };
    127 
    128     var register = function (editor, fullscreenState) {
    129       editor.addCommand('mceFullScreen', function () {
    130         Actions.toggleFullscreen(editor, fullscreenState);
    131       });
    132     };
    133     var Commands = { register: register };
    134 
    135     var postRender = function (editor) {
    136       return function (e) {
    137         var ctrl = e.control;
    138         editor.on('FullscreenStateChanged', function (e) {
    139           ctrl.active(e.state);
    140         });
    141       };
    142     };
    143     var register$1 = function (editor) {
    144       editor.addMenuItem('fullscreen', {
    145         text: 'Fullscreen',
    146         shortcut: 'Ctrl+Shift+F',
    147         selectable: true,
    148         cmd: 'mceFullScreen',
    149         onPostRender: postRender(editor),
    150         context: 'view'
    151       });
    152       editor.addButton('fullscreen', {
    153         active: false,
    154         tooltip: 'Fullscreen',
    155         cmd: 'mceFullScreen',
    156         onPostRender: postRender(editor)
    157       });
    158     };
    159     var Buttons = { register: register$1 };
    160 
    161     global.add('fullscreen', function (editor) {
    162       var fullscreenState = Cell(null);
    163       if (editor.settings.inline) {
    164         return Api.get(fullscreenState);
    165       }
    166       Commands.register(editor, fullscreenState);
    167       Buttons.register(editor);
    168       editor.addShortcut('Ctrl+Shift+F', '', 'mceFullScreen');
    169       return Api.get(fullscreenState);
    170     });
    171     function Plugin () {
    172     }
    173 
    174     return Plugin;
    175 
    176 }(window));
    177 })();