~canonical-sysadmins/wordpress/5.1

« back to all changes in this revision

Viewing changes to wp-includes/js/tinymce/themes/inlite/theme.js

  • Committer: Haw Loeung
  • Date: 2016-12-13 06:54:17 UTC
  • mto: This revision was merged to the branch mainline in revision 24.
  • Revision ID: haw.loeung@canonical.com-20161213065417-pemlo49o7in8nmkn
New upstream version 4.7.

Show diffs side-by-side

added added

removed removed

Lines of Context:
81
81
  define(id, [], function () { return ref; });
82
82
};
83
83
/*jsc
84
 
["tinymce/inlite/Theme","global!tinymce.ThemeManager","global!tinymce.util.Delay","tinymce/inlite/ui/Panel","tinymce/inlite/ui/Buttons","tinymce/inlite/core/SkinLoader","tinymce/inlite/core/SelectionMatcher","tinymce/inlite/core/ElementMatcher","tinymce/inlite/core/Matcher","tinymce/inlite/alien/Arr","tinymce/inlite/core/PredicateId","global!tinymce.util.Tools","global!tinymce.ui.Factory","global!tinymce.DOM","tinymce/inlite/ui/Toolbar","tinymce/inlite/ui/Forms","tinymce/inlite/core/Measure","tinymce/inlite/core/Layout","tinymce/inlite/file/Conversions","tinymce/inlite/file/Picker","tinymce/inlite/core/Actions","global!tinymce.EditorManager","global!tinymce.util.Promise","tinymce/inlite/alien/Uuid","tinymce/inlite/alien/Unlink","tinymce/inlite/core/UrlType","global!tinymce.geom.Rect","tinymce/inlite/core/Convert","tinymce/inlite/alien/Bookmark","global!tinymce.dom.TreeWalker","global!tinymce.dom.RangeUtils"]
 
84
["tinymce/inlite/Theme","global!tinymce.ThemeManager","global!tinymce.util.Delay","tinymce/inlite/ui/Panel","tinymce/inlite/ui/Buttons","tinymce/inlite/core/SkinLoader","tinymce/inlite/core/SelectionMatcher","tinymce/inlite/core/ElementMatcher","tinymce/inlite/core/Matcher","tinymce/inlite/alien/Arr","tinymce/inlite/alien/EditorSettings","tinymce/inlite/core/PredicateId","global!tinymce.util.Tools","global!tinymce.ui.Factory","global!tinymce.DOM","tinymce/inlite/ui/Toolbar","tinymce/inlite/ui/Forms","tinymce/inlite/core/Measure","tinymce/inlite/core/Layout","tinymce/inlite/alien/Type","tinymce/inlite/file/Conversions","tinymce/inlite/file/Picker","tinymce/inlite/core/Actions","global!tinymce.EditorManager","global!tinymce.util.Promise","tinymce/inlite/alien/Uuid","tinymce/inlite/alien/Unlink","tinymce/inlite/core/UrlType","global!tinymce.geom.Rect","tinymce/inlite/core/Convert","tinymce/inlite/alien/Bookmark","global!tinymce.dom.TreeWalker","global!tinymce.dom.RangeUtils"]
85
85
jsc*/
86
86
defineGlobal("global!tinymce.ThemeManager", tinymce.ThemeManager);
87
87
defineGlobal("global!tinymce.util.Delay", tinymce.util.Delay);
89
89
defineGlobal("global!tinymce.ui.Factory", tinymce.ui.Factory);
90
90
defineGlobal("global!tinymce.DOM", tinymce.DOM);
91
91
/**
 
92
 * Type.js
 
93
 *
 
94
 * Released under LGPL License.
 
95
 * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
 
96
 *
 
97
 * License: http://www.tinymce.com/license
 
98
 * Contributing: http://www.tinymce.com/contributing
 
99
 */
 
100
 
 
101
define('tinymce/inlite/alien/Type', [
 
102
], function () {
 
103
        var isType = function (type) {
 
104
                return function (value) {
 
105
                        return typeof value === type;
 
106
                };
 
107
        };
 
108
 
 
109
        var isArray = function (value) {
 
110
                return Array.isArray(value);
 
111
        };
 
112
 
 
113
        var isNull = function (value) {
 
114
                return value === null;
 
115
        };
 
116
 
 
117
        var isObject = function (predicate) {
 
118
                return function (value) {
 
119
                        return !isNull(value) && !isArray(value) && predicate(value);
 
120
                };
 
121
        };
 
122
 
 
123
        return {
 
124
                isString: isType("string"),
 
125
                isNumber: isType("number"),
 
126
                isBoolean: isType("boolean"),
 
127
                isFunction: isType("function"),
 
128
                isObject: isObject(isType("object")),
 
129
                isNull: isNull,
 
130
                isArray: isArray
 
131
        };
 
132
});
 
133
 
 
134
/**
92
135
 * Toolbar.js
93
136
 *
94
137
 * Released under LGPL License.
100
143
 
101
144
define('tinymce/inlite/ui/Toolbar', [
102
145
        'global!tinymce.util.Tools',
103
 
        'global!tinymce.ui.Factory'
104
 
], function (Tools, Factory) {
 
146
        'global!tinymce.ui.Factory',
 
147
        'tinymce/inlite/alien/Type'
 
148
], function (Tools, Factory, Type) {
105
149
        var setActiveItem = function (item, name) {
106
150
                return function(state, args) {
107
151
                        var nodeName, i = args.parents.length;
161
205
                };
162
206
        };
163
207
 
 
208
        var itemsToArray = function (items) {
 
209
                if (Type.isArray(items)) {
 
210
                        return items;
 
211
                } else if (Type.isString(items)) {
 
212
                        return items.split(/[ ,]/);
 
213
                }
 
214
 
 
215
                return [];
 
216
        };
 
217
 
164
218
        var create = function (editor, name, items) {
165
219
                var toolbarItems = [], buttonGroup;
166
220
 
168
222
                        return;
169
223
                }
170
224
 
171
 
                Tools.each(items.split(/[ ,]/), function(item) {
 
225
                Tools.each(itemsToArray(items), function(item) {
172
226
                        var itemName;
173
227
 
174
228
                        if (item == '|') {
179
233
                                        toolbarItems.push(item);
180
234
                                        buttonGroup = null;
181
235
                                } else {
182
 
                                        if (!buttonGroup) {
183
 
                                                buttonGroup = {type: 'buttongroup', items: []};
184
 
                                                toolbarItems.push(buttonGroup);
185
 
                                        }
186
 
 
187
236
                                        if (editor.buttons[item]) {
 
237
                                                if (!buttonGroup) {
 
238
                                                        buttonGroup = {type: 'buttongroup', items: []};
 
239
                                                        toolbarItems.push(buttonGroup);
 
240
                                                }
 
241
 
188
242
                                                itemName = item;
189
243
                                                item = editor.buttons[itemName];
190
244
 
897
951
                return panelRect;
898
952
        };
899
953
 
 
954
        var defaultHandler = function (rects) {
 
955
                return rects.panelRect;
 
956
        };
 
957
 
900
958
        return {
901
959
                calcInsert: calcInsert,
902
960
                calc: calc,
903
 
                userConstrain: userConstrain
 
961
                userConstrain: userConstrain,
 
962
                defaultHandler: defaultHandler
 
963
        };
 
964
});
 
965
 
 
966
/**
 
967
 * EditorSettings.js
 
968
 *
 
969
 * Released under LGPL License.
 
970
 * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
 
971
 *
 
972
 * License: http://www.tinymce.com/license
 
973
 * Contributing: http://www.tinymce.com/contributing
 
974
 */
 
975
 
 
976
define('tinymce/inlite/alien/EditorSettings', [
 
977
        'tinymce/inlite/alien/Type'
 
978
], function (Type) {
 
979
        var validDefaultOrDie = function (value, predicate) {
 
980
                if (predicate(value)) {
 
981
                        return true;
 
982
                }
 
983
 
 
984
                throw new Error('Default value doesn\'t match requested type.');
 
985
        };
 
986
 
 
987
        var getByTypeOr = function (predicate) {
 
988
                return function (editor, name, defaultValue) {
 
989
                        var settings = editor.settings;
 
990
                        validDefaultOrDie(defaultValue, predicate);
 
991
                        return name in settings && predicate(settings[name]) ? settings[name] : defaultValue;
 
992
                };
 
993
        };
 
994
 
 
995
        var splitNoEmpty = function (str, delim) {
 
996
                return str.split(delim).filter(function (item) {
 
997
                        return item.length > 0;
 
998
                });
 
999
        };
 
1000
 
 
1001
        var itemsToArray = function (value, defaultValue) {
 
1002
                var stringToItemsArray = function (value) {
 
1003
                        return typeof value === 'string' ? splitNoEmpty(value, /[ ,]/) : value;
 
1004
                };
 
1005
 
 
1006
                var boolToItemsArray = function (value, defaultValue) {
 
1007
                        return value === false ? [ ] : defaultValue;
 
1008
                };
 
1009
 
 
1010
                if (Type.isArray(value)) {
 
1011
                        return value;
 
1012
                } else if (Type.isString(value)) {
 
1013
                        return stringToItemsArray(value);
 
1014
                } else if (Type.isBoolean(value)) {
 
1015
                        return boolToItemsArray(value, defaultValue);
 
1016
                }
 
1017
 
 
1018
                return defaultValue;
 
1019
        };
 
1020
 
 
1021
        var getToolbarItemsOr = function (predicate) {
 
1022
                return function (editor, name, defaultValue) {
 
1023
                        var value = name in editor.settings ? editor.settings[name] : defaultValue;
 
1024
                        validDefaultOrDie(defaultValue, predicate);
 
1025
                        return itemsToArray(value, defaultValue);
 
1026
                };
 
1027
        };
 
1028
 
 
1029
        return {
 
1030
                // TODO: Add Option based getString, getBool if merged with core
 
1031
                getStringOr: getByTypeOr(Type.isString),
 
1032
                getBoolOr: getByTypeOr(Type.isBoolean),
 
1033
                getNumberOr: getByTypeOr(Type.isNumber),
 
1034
                getHandlerOr: getByTypeOr(Type.isFunction),
 
1035
                getToolbarItemsOr: getToolbarItemsOr(Type.isArray)
904
1036
        };
905
1037
});
906
1038
 
921
1053
        'tinymce/inlite/ui/Toolbar',
922
1054
        'tinymce/inlite/ui/Forms',
923
1055
        'tinymce/inlite/core/Measure',
924
 
        'tinymce/inlite/core/Layout'
925
 
], function (Tools, Factory, DOM, Toolbar, Forms, Measure, Layout) {
 
1056
        'tinymce/inlite/core/Layout',
 
1057
        'tinymce/inlite/alien/EditorSettings'
 
1058
], function (Tools, Factory, DOM, Toolbar, Forms, Measure, Layout, EditorSettings) {
926
1059
        return function () {
927
 
                var DEFAULT_TEXT_SELECTION_ITEMS = 'bold italic | quicklink h2 h3 blockquote';
928
 
                var DEFAULT_INSERT_TOOLBAR_ITEMS = 'quickimage quicktable';
 
1060
                var DEFAULT_TEXT_SELECTION_ITEMS = ['bold', 'italic', '|', 'quicklink', 'h2', 'h3', 'blockquote'];
 
1061
                var DEFAULT_INSERT_TOOLBAR_ITEMS = ['quickimage', 'quicktable'];
929
1062
                var panel, currentRect;
930
1063
 
931
1064
                var createToolbars = function (editor, toolbars) {
934
1067
                        });
935
1068
                };
936
1069
 
937
 
                var getTextSelectionToolbarItems = function (settings) {
938
 
                        var value = settings.selection_toolbar;
939
 
                        return value ? value : DEFAULT_TEXT_SELECTION_ITEMS;
940
 
                };
941
 
 
942
 
                var getInsertToolbarItems = function (settings) {
943
 
                        var value = settings.insert_toolbar;
944
 
                        return value ? value : DEFAULT_INSERT_TOOLBAR_ITEMS;
 
1070
                var getTextSelectionToolbarItems = function (editor) {
 
1071
                        return EditorSettings.getToolbarItemsOr(editor, 'selection_toolbar', DEFAULT_TEXT_SELECTION_ITEMS);
 
1072
                };
 
1073
 
 
1074
                var getInsertToolbarItems = function (editor) {
 
1075
                        return EditorSettings.getToolbarItemsOr(editor, 'insert_toolbar', DEFAULT_INSERT_TOOLBAR_ITEMS);
 
1076
                };
 
1077
 
 
1078
                var hasToolbarItems = function (toolbar) {
 
1079
                        return toolbar.items().length > 0;
945
1080
                };
946
1081
 
947
1082
                var create = function (editor, toolbars) {
948
 
                        var items, settings = editor.settings;
949
 
 
950
 
                        items = createToolbars(editor, toolbars);
951
 
                        items = items.concat([
952
 
                                Toolbar.create(editor, 'text', getTextSelectionToolbarItems(settings)),
953
 
                                Toolbar.create(editor, 'insert', getInsertToolbarItems(settings)),
 
1083
                        var items = createToolbars(editor, toolbars).concat([
 
1084
                                Toolbar.create(editor, 'text', getTextSelectionToolbarItems(editor)),
 
1085
                                Toolbar.create(editor, 'insert', getInsertToolbarItems(editor)),
954
1086
                                Forms.createQuickLinkForm(editor, hide)
955
1087
                        ]);
956
1088
 
966
1098
                                autofix: true,
967
1099
                                fixed: true,
968
1100
                                border: 1,
969
 
                                items: items,
 
1101
                                items: Tools.grep(items, hasToolbarItems),
970
1102
                                oncancel: function() {
971
1103
                                        editor.focus();
972
1104
                                }
1016
1148
                        if (toolbars.length > 0) {
1017
1149
                                toolbars[0].show();
1018
1150
                                panel.reflow();
 
1151
                                return true;
1019
1152
                        }
 
1153
 
 
1154
                        return false;
1020
1155
                };
1021
1156
 
1022
1157
                var showPanelAt = function (panel, id, editor, targetRect) {
1024
1159
 
1025
1160
                        showPanel(panel);
1026
1161
                        panel.items().hide();
1027
 
                        showToolbar(panel, id);
1028
 
 
1029
 
                        userConstainHandler = editor.settings.inline_toolbar_position_handler;
 
1162
 
 
1163
                        if (!showToolbar(panel, id)) {
 
1164
                                hide(panel);
 
1165
                                return;
 
1166
                        }
 
1167
 
 
1168
                        userConstainHandler = EditorSettings.getHandlerOr(editor, 'inline_toolbar_position_handler', Layout.defaultHandler);
1030
1169
                        contentAreaRect = Measure.getContentAreaRect(editor);
1031
1170
                        panelRect = DOM.getRect(panel.getEl());
1032
1171
 
1040
1179
                                panelRect = result.rect;
1041
1180
                                currentRect = targetRect;
1042
1181
                                movePanelTo(panel, Layout.userConstrain(userConstainHandler, targetRect, contentAreaRect, panelRect));
1043
 
 
1044
1182
                                togglePositionClass(panel, result.position);
1045
1183
                        } else {
1046
1184
                                hide(panel);
1054
1192
                var showForm = function (editor, id) {
1055
1193
                        if (panel) {
1056
1194
                                panel.items().hide();
1057
 
                                showToolbar(panel, id);
 
1195
 
 
1196
                                if (!showToolbar(panel, id)) {
 
1197
                                        hide(panel);
 
1198
                                        return;
 
1199
                                }
1058
1200
 
1059
1201
                                var contentAreaRect, panelRect, result, userConstainHandler;
1060
1202
 
1062
1204
                                panel.items().hide();
1063
1205
                                showToolbar(panel, id);
1064
1206
 
1065
 
                                userConstainHandler = editor.settings.inline_toolbar_position_handler;
 
1207
                                userConstainHandler = EditorSettings.getHandlerOr(editor, 'inline_toolbar_position_handler', Layout.defaultHandler);
1066
1208
                                contentAreaRect = Measure.getContentAreaRect(editor);
1067
1209
                                panelRect = DOM.getRect(panel.getEl());
1068
1210
 
1071
1213
                                if (result) {
1072
1214
                                        panelRect = result.rect;
1073
1215
                                        movePanelTo(panel, Layout.userConstrain(userConstainHandler, currentRect, contentAreaRect, panelRect));
1074
 
 
1075
1216
                                        togglePositionClass(panel, result.position);
1076
1217
                                }
1077
1218
                        }
1305
1446
                }
1306
1447
        };
1307
1448
 
1308
 
        var load = function (editor, skin, callback) {
1309
 
                var baseUrl = EditorManager.baseURL;
1310
 
                var skinUrl = baseUrl + '/skins/' + skin;
 
1449
        var urlFromName = function (name) {
 
1450
                var prefix = EditorManager.baseURL + '/skins/';
 
1451
                return name ? prefix + name : prefix + 'lightgray';
 
1452
        };
 
1453
 
 
1454
        var toAbsoluteUrl = function (editor, url) {
 
1455
                return editor.documentBaseURI.toAbsolute(url);
 
1456
        };
 
1457
 
 
1458
        var load = function (editor, callback) {
 
1459
                var settings = editor.settings;
 
1460
                var skinUrl = settings.skin_url ? toAbsoluteUrl(editor, settings.skin_url) : urlFromName(settings.skin);
1311
1461
 
1312
1462
                var done = function () {
1313
1463
                        fireSkinLoaded(editor, callback);
1544
1694
        'tinymce/inlite/core/ElementMatcher',
1545
1695
        'tinymce/inlite/core/Matcher',
1546
1696
        'tinymce/inlite/alien/Arr',
 
1697
        'tinymce/inlite/alien/EditorSettings',
1547
1698
        'tinymce/inlite/core/PredicateId'
1548
 
], function(ThemeManager, Delay, Panel, Buttons, SkinLoader, SelectionMatcher, ElementMatcher, Matcher, Arr, PredicateId) {
 
1699
], function(ThemeManager, Delay, Panel, Buttons, SkinLoader, SelectionMatcher, ElementMatcher, Matcher, Arr, EditorSettings, PredicateId) {
1549
1700
        var getSelectionElements = function (editor) {
1550
1701
                var node = editor.selection.getNode();
1551
1702
                var elms = editor.dom.getParents(node);
1644
1795
        };
1645
1796
 
1646
1797
        var renderInlineUI = function (editor, panel) {
1647
 
                var skinName = editor.settings.skin || 'lightgray';
1648
 
 
1649
 
                SkinLoader.load(editor, skinName, function () {
 
1798
                SkinLoader.load(editor, function () {
1650
1799
                        bindContextualToolbarsEvents(editor, panel);
1651
1800
                        overrideLinkShortcut(editor, panel);
1652
1801
                });