--- /dev/null
+/**
+ * plugin.js
+ *
+ * Copyright, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/*global tinymce:true */
+
+tinymce.PluginManager.add('fullscreen', function(editor) {
+ var fullscreenState = false, DOM = tinymce.DOM, iframeWidth, iframeHeight, resizeHandler;
+ var containerWidth, containerHeight;
+
+ if (editor.settings.inline) {
+ return;
+ }
+
+ function getWindowSize() {
+ var w, h, win = window, doc = document;
+ var body = doc.body;
+
+ // Old IE
+ if (body.offsetWidth) {
+ w = body.offsetWidth;
+ h = body.offsetHeight;
+ }
+
+ // Modern browsers
+ if (win.innerWidth && win.innerHeight) {
+ w = win.innerWidth;
+ h = win.innerHeight;
+ }
+
+ return {w: w, h: h};
+ }
+
+ function toggleFullscreen() {
+ var body = document.body, documentElement = document.documentElement, editorContainerStyle;
+ var editorContainer, iframe, iframeStyle;
+
+ function resize() {
+ DOM.setStyle(iframe, 'height', getWindowSize().h - (editorContainer.clientHeight - iframe.clientHeight));
+ }
+
+ fullscreenState = !fullscreenState;
+
+ editorContainer = editor.getContainer();
+ editorContainerStyle = editorContainer.style;
+ iframe = editor.getContentAreaContainer().firstChild;
+ iframeStyle = iframe.style;
+
+ if (fullscreenState) {
+ iframeWidth = iframeStyle.width;
+ iframeHeight = iframeStyle.height;
+ iframeStyle.width = iframeStyle.height = '100%';
+ containerWidth = editorContainerStyle.width;
+ containerHeight = editorContainerStyle.height;
+ editorContainerStyle.width = editorContainerStyle.height = '';
+
+ DOM.addClass(body, 'mce-fullscreen');
+ DOM.addClass(documentElement, 'mce-fullscreen');
+ DOM.addClass(editorContainer, 'mce-fullscreen');
+
+ DOM.bind(window, 'resize', resize);
+ resize();
+ resizeHandler = resize;
+ } else {
+ iframeStyle.width = iframeWidth;
+ iframeStyle.height = iframeHeight;
+
+ if (containerWidth) {
+ editorContainerStyle.width = containerWidth;
+ }
+
+ if (containerHeight) {
+ editorContainerStyle.height = containerHeight;
+ }
+
+ DOM.removeClass(body, 'mce-fullscreen');
+ DOM.removeClass(documentElement, 'mce-fullscreen');
+ DOM.removeClass(editorContainer, 'mce-fullscreen');
+ DOM.unbind(window, 'resize', resizeHandler);
+ }
+
+ editor.fire('FullscreenStateChanged', {state: fullscreenState});
+ }
+
+ editor.on('init', function() {
+ editor.addShortcut('Ctrl+Alt+F', '', toggleFullscreen);
+ });
+
+ editor.on('remove', function() {
+ if (resizeHandler) {
+ DOM.unbind(window, 'resize', resizeHandler);
+ }
+ });
+
+ editor.addCommand('mceFullScreen', toggleFullscreen);
+
+ editor.addMenuItem('fullscreen', {
+ text: 'Fullscreen',
+ shortcut: 'Ctrl+Alt+F',
+ selectable: true,
+ onClick: toggleFullscreen,
+ onPostRender: function() {
+ var self = this;
+
+ editor.on('FullscreenStateChanged', function(e) {
+ self.active(e.state);
+ });
+ },
+ context: 'view'
+ });
+
+ editor.addButton('fullscreen', {
+ tooltip: 'Fullscreen',
+ shortcut: 'Ctrl+Alt+F',
+ onClick: toggleFullscreen,
+ onPostRender: function() {
+ var self = this;
+
+ editor.on('FullscreenStateChanged', function(e) {
+ self.active(e.state);
+ });
+ }
+ });
+
+ return {
+ isFullscreen: function() {
+ return fullscreenState;
+ }
+ };
+});
\ No newline at end of file