mirror of
https://github.com/documize/community.git
synced 2025-07-20 21:59:42 +02:00
455 lines
11 KiB
JavaScript
Executable file
455 lines
11 KiB
JavaScript
Executable file
(function () {
|
|
|
|
var defs = {}; // id -> {dependencies, definition, instance (possibly undefined)}
|
|
|
|
// Used when there is no 'main' module.
|
|
// The name is probably (hopefully) unique so minification removes for releases.
|
|
var register_3795 = function (id) {
|
|
var module = dem(id);
|
|
var fragments = id.split('.');
|
|
var target = Function('return this;')();
|
|
for (var i = 0; i < fragments.length - 1; ++i) {
|
|
if (target[fragments[i]] === undefined)
|
|
target[fragments[i]] = {};
|
|
target = target[fragments[i]];
|
|
}
|
|
target[fragments[fragments.length - 1]] = module;
|
|
};
|
|
|
|
var instantiate = function (id) {
|
|
var actual = defs[id];
|
|
var dependencies = actual.deps;
|
|
var definition = actual.defn;
|
|
var len = dependencies.length;
|
|
var instances = new Array(len);
|
|
for (var i = 0; i < len; ++i)
|
|
instances[i] = dem(dependencies[i]);
|
|
var defResult = definition.apply(null, instances);
|
|
if (defResult === undefined)
|
|
throw 'module [' + id + '] returned undefined';
|
|
actual.instance = defResult;
|
|
};
|
|
|
|
var def = function (id, dependencies, definition) {
|
|
if (typeof id !== 'string')
|
|
throw 'module id must be a string';
|
|
else if (dependencies === undefined)
|
|
throw 'no dependencies for ' + id;
|
|
else if (definition === undefined)
|
|
throw 'no definition function for ' + id;
|
|
defs[id] = {
|
|
deps: dependencies,
|
|
defn: definition,
|
|
instance: undefined
|
|
};
|
|
};
|
|
|
|
var dem = function (id) {
|
|
var actual = defs[id];
|
|
if (actual === undefined)
|
|
throw 'module [' + id + '] was undefined';
|
|
else if (actual.instance === undefined)
|
|
instantiate(id);
|
|
return actual.instance;
|
|
};
|
|
|
|
var req = function (ids, callback) {
|
|
var len = ids.length;
|
|
var instances = new Array(len);
|
|
for (var i = 0; i < len; ++i)
|
|
instances[i] = dem(ids[i]);
|
|
callback.apply(null, instances);
|
|
};
|
|
|
|
var ephox = {};
|
|
|
|
ephox.bolt = {
|
|
module: {
|
|
api: {
|
|
define: def,
|
|
require: req,
|
|
demand: dem
|
|
}
|
|
}
|
|
};
|
|
|
|
var define = def;
|
|
var require = req;
|
|
var demand = dem;
|
|
// this helps with minification when using a lot of global references
|
|
var defineGlobal = function (id, ref) {
|
|
define(id, [], function () { return ref; });
|
|
};
|
|
/*jsc
|
|
["tinymce.plugins.fullscreen.Plugin","ephox.katamari.api.Cell","tinymce.core.PluginManager","tinymce.plugins.fullscreen.api.Api","tinymce.plugins.fullscreen.api.Commands","tinymce.plugins.fullscreen.ui.Buttons","global!tinymce.util.Tools.resolve","tinymce.plugins.fullscreen.core.Actions","global!document","global!window","tinymce.core.dom.DOMUtils","tinymce.plugins.fullscreen.api.Events"]
|
|
jsc*/
|
|
define(
|
|
'ephox.katamari.api.Cell',
|
|
|
|
[
|
|
],
|
|
|
|
function () {
|
|
var Cell = function (initial) {
|
|
var value = initial;
|
|
|
|
var get = function () {
|
|
return value;
|
|
};
|
|
|
|
var set = function (v) {
|
|
value = v;
|
|
};
|
|
|
|
var clone = function () {
|
|
return Cell(get());
|
|
};
|
|
|
|
return {
|
|
get: get,
|
|
set: set,
|
|
clone: clone
|
|
};
|
|
};
|
|
|
|
return Cell;
|
|
}
|
|
);
|
|
|
|
defineGlobal("global!tinymce.util.Tools.resolve", tinymce.util.Tools.resolve);
|
|
/**
|
|
* ResolveGlobal.js
|
|
*
|
|
* Released under LGPL License.
|
|
* Copyright (c) 1999-2017 Ephox Corp. All rights reserved
|
|
*
|
|
* License: http://www.tinymce.com/license
|
|
* Contributing: http://www.tinymce.com/contributing
|
|
*/
|
|
|
|
define(
|
|
'tinymce.core.PluginManager',
|
|
[
|
|
'global!tinymce.util.Tools.resolve'
|
|
],
|
|
function (resolve) {
|
|
return resolve('tinymce.PluginManager');
|
|
}
|
|
);
|
|
|
|
/**
|
|
* Api.js
|
|
*
|
|
* Released under LGPL License.
|
|
* Copyright (c) 1999-2017 Ephox Corp. All rights reserved
|
|
*
|
|
* License: http://www.tinymce.com/license
|
|
* Contributing: http://www.tinymce.com/contributing
|
|
*/
|
|
|
|
define(
|
|
'tinymce.plugins.fullscreen.api.Api',
|
|
[
|
|
],
|
|
function () {
|
|
var get = function (fullscreenState) {
|
|
return {
|
|
isFullscreen: function () {
|
|
return fullscreenState.get() !== null;
|
|
}
|
|
};
|
|
};
|
|
|
|
return {
|
|
get: get
|
|
};
|
|
}
|
|
);
|
|
|
|
defineGlobal("global!document", document);
|
|
defineGlobal("global!window", window);
|
|
/**
|
|
* ResolveGlobal.js
|
|
*
|
|
* Released under LGPL License.
|
|
* Copyright (c) 1999-2017 Ephox Corp. All rights reserved
|
|
*
|
|
* License: http://www.tinymce.com/license
|
|
* Contributing: http://www.tinymce.com/contributing
|
|
*/
|
|
|
|
define(
|
|
'tinymce.core.dom.DOMUtils',
|
|
[
|
|
'global!tinymce.util.Tools.resolve'
|
|
],
|
|
function (resolve) {
|
|
return resolve('tinymce.dom.DOMUtils');
|
|
}
|
|
);
|
|
|
|
/**
|
|
* Events.js
|
|
*
|
|
* Released under LGPL License.
|
|
* Copyright (c) 1999-2017 Ephox Corp. All rights reserved
|
|
*
|
|
* License: http://www.tinymce.com/license
|
|
* Contributing: http://www.tinymce.com/contributing
|
|
*/
|
|
|
|
define(
|
|
'tinymce.plugins.fullscreen.api.Events',
|
|
[
|
|
],
|
|
function () {
|
|
var fireFullscreenStateChanged = function (editor, state) {
|
|
editor.fire('FullscreenStateChanged', { state: state });
|
|
};
|
|
|
|
return {
|
|
fireFullscreenStateChanged: fireFullscreenStateChanged
|
|
};
|
|
}
|
|
);
|
|
|
|
/**
|
|
* Actions.js
|
|
*
|
|
* Released under LGPL License.
|
|
* Copyright (c) 1999-2017 Ephox Corp. All rights reserved
|
|
*
|
|
* License: http://www.tinymce.com/license
|
|
* Contributing: http://www.tinymce.com/contributing
|
|
*/
|
|
|
|
define(
|
|
'tinymce.plugins.fullscreen.core.Actions',
|
|
[
|
|
'global!document',
|
|
'global!window',
|
|
'tinymce.core.dom.DOMUtils',
|
|
'tinymce.plugins.fullscreen.api.Events'
|
|
],
|
|
function (document, window, DOMUtils, Events) {
|
|
var DOM = DOMUtils.DOM;
|
|
|
|
var getWindowSize = function () {
|
|
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 };
|
|
};
|
|
|
|
var getScrollPos = function () {
|
|
var vp = DOM.getViewPort();
|
|
|
|
return {
|
|
x: vp.x,
|
|
y: vp.y
|
|
};
|
|
};
|
|
|
|
var setScrollPos = function (pos) {
|
|
window.scrollTo(pos.x, pos.y);
|
|
};
|
|
|
|
var toggleFullscreen = function (editor, fullscreenState) {
|
|
var body = document.body, documentElement = document.documentElement, editorContainerStyle;
|
|
var editorContainer, iframe, iframeStyle;
|
|
var fullscreenInfo = fullscreenState.get();
|
|
|
|
var resize = function () {
|
|
DOM.setStyle(iframe, 'height', getWindowSize().h - (editorContainer.clientHeight - iframe.clientHeight));
|
|
};
|
|
|
|
var removeResize = function () {
|
|
DOM.unbind(window, 'resize', resize);
|
|
};
|
|
|
|
editorContainer = editor.getContainer();
|
|
editorContainerStyle = editorContainer.style;
|
|
iframe = editor.getContentAreaContainer().firstChild;
|
|
iframeStyle = iframe.style;
|
|
|
|
if (!fullscreenInfo) {
|
|
var newFullScreenInfo = {
|
|
scrollPos: getScrollPos(),
|
|
containerWidth: editorContainerStyle.width,
|
|
containerHeight: editorContainerStyle.height,
|
|
iframeWidth: iframeStyle.width,
|
|
iframeHeight: iframeStyle.height,
|
|
resizeHandler: resize,
|
|
removeHandler: removeResize
|
|
};
|
|
|
|
iframeStyle.width = iframeStyle.height = '100%';
|
|
editorContainerStyle.width = editorContainerStyle.height = '';
|
|
|
|
DOM.addClass(body, 'mce-fullscreen');
|
|
DOM.addClass(documentElement, 'mce-fullscreen');
|
|
DOM.addClass(editorContainer, 'mce-fullscreen');
|
|
|
|
DOM.bind(window, 'resize', resize);
|
|
editor.on('remove', removeResize);
|
|
|
|
resize();
|
|
|
|
fullscreenState.set(newFullScreenInfo);
|
|
Events.fireFullscreenStateChanged(editor, true);
|
|
} else {
|
|
iframeStyle.width = fullscreenInfo.iframeWidth;
|
|
iframeStyle.height = fullscreenInfo.iframeHeight;
|
|
|
|
if (fullscreenInfo.containerWidth) {
|
|
editorContainerStyle.width = fullscreenInfo.containerWidth;
|
|
}
|
|
|
|
if (fullscreenInfo.containerHeight) {
|
|
editorContainerStyle.height = fullscreenInfo.containerHeight;
|
|
}
|
|
|
|
DOM.removeClass(body, 'mce-fullscreen');
|
|
DOM.removeClass(documentElement, 'mce-fullscreen');
|
|
DOM.removeClass(editorContainer, 'mce-fullscreen');
|
|
setScrollPos(fullscreenInfo.scrollPos);
|
|
|
|
DOM.unbind(window, 'resize', fullscreenInfo.resizeHandler);
|
|
editor.off('remove', fullscreenInfo.removeHandler);
|
|
|
|
fullscreenState.set(null);
|
|
Events.fireFullscreenStateChanged(editor, false);
|
|
}
|
|
};
|
|
|
|
return {
|
|
toggleFullscreen: toggleFullscreen
|
|
};
|
|
}
|
|
);
|
|
|
|
/**
|
|
* Commands.js
|
|
*
|
|
* Released under LGPL License.
|
|
* Copyright (c) 1999-2017 Ephox Corp. All rights reserved
|
|
*
|
|
* License: http://www.tinymce.com/license
|
|
* Contributing: http://www.tinymce.com/contributing
|
|
*/
|
|
|
|
define(
|
|
'tinymce.plugins.fullscreen.api.Commands',
|
|
[
|
|
'tinymce.plugins.fullscreen.core.Actions'
|
|
],
|
|
function (Actions) {
|
|
var register = function (editor, fullscreenState) {
|
|
editor.addCommand('mceFullScreen', function () {
|
|
Actions.toggleFullscreen(editor, fullscreenState);
|
|
});
|
|
};
|
|
|
|
return {
|
|
register: register
|
|
};
|
|
}
|
|
);
|
|
|
|
/**
|
|
* Buttons.js
|
|
*
|
|
* Released under LGPL License.
|
|
* Copyright (c) 1999-2017 Ephox Corp. All rights reserved
|
|
*
|
|
* License: http://www.tinymce.com/license
|
|
* Contributing: http://www.tinymce.com/contributing
|
|
*/
|
|
|
|
define(
|
|
'tinymce.plugins.fullscreen.ui.Buttons',
|
|
[
|
|
],
|
|
function () {
|
|
var postRender = function (editor) {
|
|
return function (e) {
|
|
var ctrl = e.control;
|
|
|
|
editor.on('FullscreenStateChanged', function (e) {
|
|
ctrl.active(e.state);
|
|
});
|
|
};
|
|
};
|
|
|
|
var register = function (editor) {
|
|
editor.addMenuItem('fullscreen', {
|
|
text: 'Fullscreen',
|
|
shortcut: 'Ctrl+Shift+F',
|
|
selectable: true,
|
|
cmd: 'mceFullScreen',
|
|
onPostRender: postRender(editor),
|
|
context: 'view'
|
|
});
|
|
|
|
editor.addButton('fullscreen', {
|
|
active: false,
|
|
tooltip: 'Fullscreen',
|
|
cmd: 'mceFullScreen',
|
|
onPostRender: postRender(editor)
|
|
});
|
|
};
|
|
|
|
return {
|
|
register: register
|
|
};
|
|
}
|
|
);
|
|
|
|
/**
|
|
* Plugin.js
|
|
*
|
|
* Released under LGPL License.
|
|
* Copyright (c) 1999-2017 Ephox Corp. All rights reserved
|
|
*
|
|
* License: http://www.tinymce.com/license
|
|
* Contributing: http://www.tinymce.com/contributing
|
|
*/
|
|
|
|
define(
|
|
'tinymce.plugins.fullscreen.Plugin',
|
|
[
|
|
'ephox.katamari.api.Cell',
|
|
'tinymce.core.PluginManager',
|
|
'tinymce.plugins.fullscreen.api.Api',
|
|
'tinymce.plugins.fullscreen.api.Commands',
|
|
'tinymce.plugins.fullscreen.ui.Buttons'
|
|
],
|
|
function (Cell, PluginManager, Api, Commands, Buttons) {
|
|
PluginManager.add('fullscreen', function (editor) {
|
|
var fullscreenState = Cell(null);
|
|
|
|
Commands.register(editor, fullscreenState);
|
|
Buttons.register(editor);
|
|
|
|
editor.addShortcut('Ctrl+Shift+F', '', 'mceFullScreen');
|
|
|
|
return Api.get(fullscreenState);
|
|
});
|
|
|
|
return function () { };
|
|
}
|
|
);
|
|
dem('tinymce.plugins.fullscreen.Plugin')();
|
|
})();
|