tinymce-rails 4.9.4 → 4.9.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/source/tinymce/tinymce.js +1700 -1089
  3. data/lib/tinymce/rails/configuration.rb +1 -1
  4. data/lib/tinymce/rails/engine.rb +5 -1
  5. data/lib/tinymce/rails/helper.rb +1 -1
  6. data/lib/tinymce/rails/version.rb +2 -2
  7. data/vendor/assets/config/tinymce-rails.manifest.js +8 -0
  8. data/vendor/assets/javascripts/tinymce/plugins/help/plugin.js +1 -1
  9. data/vendor/assets/javascripts/tinymce/plugins/image/plugin.js +1 -1
  10. data/vendor/assets/javascripts/tinymce/plugins/imagetools/plugin.js +1 -1
  11. data/vendor/assets/javascripts/tinymce/plugins/lists/plugin.js +1 -1
  12. data/vendor/assets/javascripts/tinymce/plugins/media/plugin.js +1 -1
  13. data/vendor/assets/javascripts/tinymce/plugins/paste/plugin.js +1 -1
  14. data/vendor/assets/javascripts/tinymce/plugins/print/plugin.js +1 -1
  15. data/vendor/assets/javascripts/tinymce/plugins/table/plugin.js +1 -1
  16. data/vendor/assets/javascripts/tinymce/plugins/textpattern/plugin.js +1 -1
  17. data/vendor/assets/javascripts/tinymce/plugins/visualchars/plugin.js +1 -1
  18. data/vendor/assets/javascripts/tinymce/plugins/wordcount/plugin.js +1 -1
  19. data/vendor/assets/javascripts/tinymce/skins/lightgray/content.inline.min.css +1 -1
  20. data/vendor/assets/javascripts/tinymce/skins/lightgray/content.min.css +1 -1
  21. data/vendor/assets/javascripts/tinymce/themes/inlite/theme.js +1 -1
  22. data/vendor/assets/javascripts/tinymce/themes/mobile/theme.js +1 -1
  23. data/vendor/assets/javascripts/tinymce/themes/modern/theme.js +1 -1
  24. data/vendor/assets/javascripts/tinymce/tinymce.js +2 -2
  25. metadata +4 -3
@@ -1,13 +1,9 @@
1
- // 4.9.4 (2019-03-20)
1
+ // 4.9.11 (2020-07-13)
2
2
  (function () {
3
3
  (function (domGlobals) {
4
4
  'use strict';
5
5
 
6
6
  var noop = function () {
7
- var args = [];
8
- for (var _i = 0; _i < arguments.length; _i++) {
9
- args[_i] = arguments[_i];
10
- }
11
7
  };
12
8
  var compose = function (fa, fb) {
13
9
  return function () {
@@ -57,8 +53,6 @@
57
53
  var never = constant(false);
58
54
  var always = constant(true);
59
55
 
60
- var never$1 = never;
61
- var always$1 = always;
62
56
  var none = function () {
63
57
  return NONE;
64
58
  };
@@ -72,37 +66,27 @@
72
66
  var id = function (n) {
73
67
  return n;
74
68
  };
75
- var noop = function () {
76
- };
77
- var nul = function () {
78
- return null;
79
- };
80
- var undef = function () {
81
- return undefined;
82
- };
83
69
  var me = {
84
70
  fold: function (n, s) {
85
71
  return n();
86
72
  },
87
- is: never$1,
88
- isSome: never$1,
89
- isNone: always$1,
73
+ is: never,
74
+ isSome: never,
75
+ isNone: always,
90
76
  getOr: id,
91
77
  getOrThunk: call,
92
78
  getOrDie: function (msg) {
93
79
  throw new Error(msg || 'error: getOrDie called on none.');
94
80
  },
95
- getOrNull: nul,
96
- getOrUndefined: undef,
81
+ getOrNull: constant(null),
82
+ getOrUndefined: constant(undefined),
97
83
  or: id,
98
84
  orThunk: call,
99
85
  map: none,
100
- ap: none,
101
86
  each: noop,
102
87
  bind: none,
103
- flatten: none,
104
- exists: never$1,
105
- forall: always$1,
88
+ exists: never,
89
+ forall: always,
106
90
  filter: none,
107
91
  equals: eq,
108
92
  equals_: eq,
@@ -111,20 +95,16 @@
111
95
  },
112
96
  toString: constant('none()')
113
97
  };
114
- if (Object.freeze)
98
+ if (Object.freeze) {
115
99
  Object.freeze(me);
100
+ }
116
101
  return me;
117
102
  }();
118
103
  var some = function (a) {
119
- var constant_a = function () {
120
- return a;
121
- };
104
+ var constant_a = constant(a);
122
105
  var self = function () {
123
106
  return me;
124
107
  };
125
- var map = function (f) {
126
- return some(f(a));
127
- };
128
108
  var bind = function (f) {
129
109
  return f(a);
130
110
  };
@@ -135,8 +115,8 @@
135
115
  is: function (v) {
136
116
  return a === v;
137
117
  },
138
- isSome: always$1,
139
- isNone: never$1,
118
+ isSome: always,
119
+ isNone: never,
140
120
  getOr: constant_a,
141
121
  getOrThunk: constant_a,
142
122
  getOrDie: constant_a,
@@ -144,35 +124,31 @@
144
124
  getOrUndefined: constant_a,
145
125
  or: self,
146
126
  orThunk: self,
147
- map: map,
148
- ap: function (optfab) {
149
- return optfab.fold(none, function (fab) {
150
- return some(fab(a));
151
- });
127
+ map: function (f) {
128
+ return some(f(a));
152
129
  },
153
130
  each: function (f) {
154
131
  f(a);
155
132
  },
156
133
  bind: bind,
157
- flatten: constant_a,
158
134
  exists: bind,
159
135
  forall: bind,
160
136
  filter: function (f) {
161
137
  return f(a) ? me : NONE;
162
138
  },
139
+ toArray: function () {
140
+ return [a];
141
+ },
142
+ toString: function () {
143
+ return 'some(' + a + ')';
144
+ },
163
145
  equals: function (o) {
164
146
  return o.is(a);
165
147
  },
166
148
  equals_: function (o, elementEq) {
167
- return o.fold(never$1, function (b) {
149
+ return o.fold(never, function (b) {
168
150
  return elementEq(a, b);
169
151
  });
170
- },
171
- toArray: function () {
172
- return [a];
173
- },
174
- toString: function () {
175
- return 'some(' + a + ')';
176
152
  }
177
153
  };
178
154
  return me;
@@ -187,13 +163,16 @@
187
163
  };
188
164
 
189
165
  var typeOf = function (x) {
190
- if (x === null)
166
+ if (x === null) {
191
167
  return 'null';
168
+ }
192
169
  var t = typeof x;
193
- if (t === 'object' && Array.prototype.isPrototypeOf(x))
170
+ if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {
194
171
  return 'array';
195
- if (t === 'object' && String.prototype.isPrototypeOf(x))
172
+ }
173
+ if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {
196
174
  return 'string';
175
+ }
197
176
  return t;
198
177
  };
199
178
  var isType = function (type) {
@@ -209,16 +188,12 @@
209
188
  var isFunction = isType('function');
210
189
  var isNumber = isType('number');
211
190
 
212
- var rawIndexOf = function () {
213
- var pIndexOf = Array.prototype.indexOf;
214
- var fastIndex = function (xs, x) {
215
- return pIndexOf.call(xs, x);
216
- };
217
- var slowIndex = function (xs, x) {
218
- return slowIndexOf(xs, x);
219
- };
220
- return pIndexOf === undefined ? slowIndex : fastIndex;
221
- }();
191
+ var nativeSlice = Array.prototype.slice;
192
+ var nativeIndexOf = Array.prototype.indexOf;
193
+ var nativePush = Array.prototype.push;
194
+ var rawIndexOf = function (ts, t) {
195
+ return nativeIndexOf.call(ts, t);
196
+ };
222
197
  var indexOf = function (xs, x) {
223
198
  var r = rawIndexOf(xs, x);
224
199
  return r === -1 ? Option.none() : Option.some(r);
@@ -227,27 +202,33 @@
227
202
  return rawIndexOf(xs, x) > -1;
228
203
  };
229
204
  var exists = function (xs, pred) {
230
- return findIndex(xs, pred).isSome();
205
+ for (var i = 0, len = xs.length; i < len; i++) {
206
+ var x = xs[i];
207
+ if (pred(x, i)) {
208
+ return true;
209
+ }
210
+ }
211
+ return false;
231
212
  };
232
213
  var map = function (xs, f) {
233
214
  var len = xs.length;
234
215
  var r = new Array(len);
235
216
  for (var i = 0; i < len; i++) {
236
217
  var x = xs[i];
237
- r[i] = f(x, i, xs);
218
+ r[i] = f(x, i);
238
219
  }
239
220
  return r;
240
221
  };
241
222
  var each = function (xs, f) {
242
223
  for (var i = 0, len = xs.length; i < len; i++) {
243
224
  var x = xs[i];
244
- f(x, i, xs);
225
+ f(x, i);
245
226
  }
246
227
  };
247
228
  var eachr = function (xs, f) {
248
229
  for (var i = xs.length - 1; i >= 0; i--) {
249
230
  var x = xs[i];
250
- f(x, i, xs);
231
+ f(x, i);
251
232
  }
252
233
  };
253
234
  var partition = function (xs, pred) {
@@ -255,7 +236,7 @@
255
236
  var fail = [];
256
237
  for (var i = 0, len = xs.length; i < len; i++) {
257
238
  var x = xs[i];
258
- var arr = pred(x, i, xs) ? pass : fail;
239
+ var arr = pred(x, i) ? pass : fail;
259
240
  arr.push(x);
260
241
  }
261
242
  return {
@@ -267,7 +248,7 @@
267
248
  var r = [];
268
249
  for (var i = 0, len = xs.length; i < len; i++) {
269
250
  var x = xs[i];
270
- if (pred(x, i, xs)) {
251
+ if (pred(x, i)) {
271
252
  r.push(x);
272
253
  }
273
254
  }
@@ -288,7 +269,7 @@
288
269
  var find = function (xs, pred) {
289
270
  for (var i = 0, len = xs.length; i < len; i++) {
290
271
  var x = xs[i];
291
- if (pred(x, i, xs)) {
272
+ if (pred(x, i)) {
292
273
  return Option.some(x);
293
274
  }
294
275
  }
@@ -297,27 +278,19 @@
297
278
  var findIndex = function (xs, pred) {
298
279
  for (var i = 0, len = xs.length; i < len; i++) {
299
280
  var x = xs[i];
300
- if (pred(x, i, xs)) {
281
+ if (pred(x, i)) {
301
282
  return Option.some(i);
302
283
  }
303
284
  }
304
285
  return Option.none();
305
286
  };
306
- var slowIndexOf = function (xs, x) {
307
- for (var i = 0, len = xs.length; i < len; ++i) {
308
- if (xs[i] === x) {
309
- return i;
310
- }
311
- }
312
- return -1;
313
- };
314
- var push = Array.prototype.push;
315
287
  var flatten = function (xs) {
316
288
  var r = [];
317
289
  for (var i = 0, len = xs.length; i < len; ++i) {
318
- if (!Array.prototype.isPrototypeOf(xs[i]))
290
+ if (!isArray(xs[i])) {
319
291
  throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);
320
- push.apply(r, xs[i]);
292
+ }
293
+ nativePush.apply(r, xs[i]);
321
294
  }
322
295
  return r;
323
296
  };
@@ -328,15 +301,14 @@
328
301
  var forall = function (xs, pred) {
329
302
  for (var i = 0, len = xs.length; i < len; ++i) {
330
303
  var x = xs[i];
331
- if (pred(x, i, xs) !== true) {
304
+ if (pred(x, i) !== true) {
332
305
  return false;
333
306
  }
334
307
  }
335
308
  return true;
336
309
  };
337
- var slice = Array.prototype.slice;
338
310
  var reverse = function (xs) {
339
- var r = slice.call(xs, 0);
311
+ var r = nativeSlice.call(xs, 0);
340
312
  r.reverse();
341
313
  return r;
342
314
  };
@@ -354,7 +326,7 @@
354
326
  return r;
355
327
  };
356
328
  var sort = function (xs, comparator) {
357
- var copy = slice.call(xs, 0);
329
+ var copy = nativeSlice.call(xs, 0);
358
330
  copy.sort(comparator);
359
331
  return copy;
360
332
  };
@@ -365,15 +337,16 @@
365
337
  return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);
366
338
  };
367
339
  var from$1 = isFunction(Array.from) ? Array.from : function (x) {
368
- return slice.call(x);
340
+ return nativeSlice.call(x);
369
341
  };
370
342
 
371
343
  var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();
372
344
 
373
345
  var path = function (parts, scope) {
374
346
  var o = scope !== undefined && scope !== null ? scope : Global;
375
- for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i)
347
+ for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {
376
348
  o = o[parts[i]];
349
+ }
377
350
  return o;
378
351
  };
379
352
  var resolve = function (p, scope) {
@@ -386,8 +359,9 @@
386
359
  };
387
360
  var getOrDie = function (name, scope) {
388
361
  var actual = unsafe(name, scope);
389
- if (actual === undefined || actual === null)
390
- throw name + ' not available on this browser';
362
+ if (actual === undefined || actual === null) {
363
+ throw new Error(name + ' not available on this browser');
364
+ }
391
365
  return actual;
392
366
  };
393
367
  var Global$1 = { getOrDie: getOrDie };
@@ -1091,7 +1065,7 @@
1091
1065
  hasDuplicate = true;
1092
1066
  }
1093
1067
  return 0;
1094
- }, strundefined = typeof undefined, MAX_NEGATIVE = 1 << 31, hasOwn = {}.hasOwnProperty, arr = [], pop = arr.pop, push_native = arr.push, push$1 = arr.push, slice$1 = arr.slice, indexOf$1 = arr.indexOf || function (elem) {
1068
+ }, strundefined = typeof undefined, MAX_NEGATIVE = 1 << 31, hasOwn = {}.hasOwnProperty, arr = [], pop = arr.pop, push_native = arr.push, push = arr.push, slice = arr.slice, indexOf$1 = arr.indexOf || function (elem) {
1095
1069
  var i = 0, len = this.length;
1096
1070
  for (; i < len; i++) {
1097
1071
  if (this[i] === elem) {
@@ -1113,12 +1087,12 @@
1113
1087
  return high !== high || escapedWhitespace ? escaped : high < 0 ? String.fromCharCode(high + 65536) : String.fromCharCode(high >> 10 | 55296, high & 1023 | 56320);
1114
1088
  };
1115
1089
  try {
1116
- push$1.apply(arr = slice$1.call(preferredDoc.childNodes), preferredDoc.childNodes);
1090
+ push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes);
1117
1091
  arr[preferredDoc.childNodes.length].nodeType;
1118
1092
  } catch (e) {
1119
- push$1 = {
1093
+ push = {
1120
1094
  apply: arr.length ? function (target, els) {
1121
- push_native.apply(target, slice$1.call(els));
1095
+ push_native.apply(target, slice.call(els));
1122
1096
  } : function (target, els) {
1123
1097
  var j = target.length, i = 0;
1124
1098
  while (target[j++] = els[i++]) {
@@ -1160,10 +1134,10 @@
1160
1134
  }
1161
1135
  }
1162
1136
  } else if (match[2]) {
1163
- push$1.apply(results, context.getElementsByTagName(selector));
1137
+ push.apply(results, context.getElementsByTagName(selector));
1164
1138
  return results;
1165
1139
  } else if ((m = match[3]) && support.getElementsByClassName) {
1166
- push$1.apply(results, context.getElementsByClassName(m));
1140
+ push.apply(results, context.getElementsByClassName(m));
1167
1141
  return results;
1168
1142
  }
1169
1143
  }
@@ -1188,7 +1162,7 @@
1188
1162
  }
1189
1163
  if (newSelector) {
1190
1164
  try {
1191
- push$1.apply(results, newContext.querySelectorAll(newSelector));
1165
+ push.apply(results, newContext.querySelectorAll(newSelector));
1192
1166
  return results;
1193
1167
  } catch (qsaError) {
1194
1168
  } finally {
@@ -1944,7 +1918,7 @@
1944
1918
  if (postFinder) {
1945
1919
  postFinder(null, results, matcherOut, xml);
1946
1920
  } else {
1947
- push$1.apply(results, matcherOut);
1921
+ push.apply(results, matcherOut);
1948
1922
  }
1949
1923
  }
1950
1924
  });
@@ -2020,7 +1994,7 @@
2020
1994
  }
2021
1995
  setMatched = condense(setMatched);
2022
1996
  }
2023
- push$1.apply(results, setMatched);
1997
+ push.apply(results, setMatched);
2024
1998
  if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {
2025
1999
  Sizzle.uniqueSort(results);
2026
2000
  }
@@ -2078,7 +2052,7 @@
2078
2052
  tokens.splice(i, 1);
2079
2053
  selector = seed.length && toSelector(tokens);
2080
2054
  if (!selector) {
2081
- push$1.apply(results, seed);
2055
+ push.apply(results, seed);
2082
2056
  return results;
2083
2057
  }
2084
2058
  break;
@@ -2378,7 +2352,7 @@
2378
2352
  _addCacheSuffix: _addCacheSuffix
2379
2353
  };
2380
2354
 
2381
- var doc = domGlobals.document, push$2 = Array.prototype.push, slice$2 = Array.prototype.slice;
2355
+ var doc = domGlobals.document, push$1 = Array.prototype.push, slice$1 = Array.prototype.slice;
2382
2356
  var rquickExpr$1 = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/;
2383
2357
  var Event = EventUtils.Event;
2384
2358
  var skipUniques = Tools.makeMap('children,contents,next,prev');
@@ -2556,7 +2530,7 @@
2556
2530
  if (match[1]) {
2557
2531
  node = createFragment(selector, getElementDocument(context)).firstChild;
2558
2532
  while (node) {
2559
- push$2.call(self, node);
2533
+ push$1.call(self, node);
2560
2534
  node = node.nextSibling;
2561
2535
  }
2562
2536
  } else {
@@ -2594,7 +2568,7 @@
2594
2568
  self[i] = nodes[i];
2595
2569
  }
2596
2570
  } else {
2597
- push$2.apply(self, DomQuery.makeArray(items));
2571
+ push$1.apply(self, DomQuery.makeArray(items));
2598
2572
  }
2599
2573
  return self;
2600
2574
  },
@@ -2911,7 +2885,7 @@
2911
2885
  return this.css('display', 'none');
2912
2886
  },
2913
2887
  slice: function () {
2914
- return new DomQuery(slice$2.apply(this, arguments));
2888
+ return new DomQuery(slice$1.apply(this, arguments));
2915
2889
  },
2916
2890
  eq: function (index) {
2917
2891
  return index === -1 ? this.slice(index) : this.slice(index, +index + 1);
@@ -2978,7 +2952,7 @@
2978
2952
  }
2979
2953
  return this.css(offset);
2980
2954
  },
2981
- push: push$2,
2955
+ push: push$1,
2982
2956
  sort: [].sort,
2983
2957
  splice: [].splice
2984
2958
  };
@@ -3252,18 +3226,20 @@
3252
3226
  var firstMatch = function (regexes, s) {
3253
3227
  for (var i = 0; i < regexes.length; i++) {
3254
3228
  var x = regexes[i];
3255
- if (x.test(s))
3229
+ if (x.test(s)) {
3256
3230
  return x;
3231
+ }
3257
3232
  }
3258
3233
  return undefined;
3259
3234
  };
3260
3235
  var find$2 = function (regexes, agent) {
3261
3236
  var r = firstMatch(regexes, agent);
3262
- if (!r)
3237
+ if (!r) {
3263
3238
  return {
3264
3239
  major: 0,
3265
3240
  minor: 0
3266
3241
  };
3242
+ }
3267
3243
  var group = function (i) {
3268
3244
  return Number(agent.replace(r, '$' + i));
3269
3245
  };
@@ -3271,8 +3247,9 @@
3271
3247
  };
3272
3248
  var detect = function (versionRegexes, agent) {
3273
3249
  var cleanedAgent = String(agent).toLowerCase();
3274
- if (versionRegexes.length === 0)
3250
+ if (versionRegexes.length === 0) {
3275
3251
  return unknown();
3252
+ }
3276
3253
  return find$2(versionRegexes, cleanedAgent);
3277
3254
  };
3278
3255
  var unknown = function () {
@@ -3451,8 +3428,7 @@
3451
3428
  name: 'Edge',
3452
3429
  versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],
3453
3430
  search: function (uastring) {
3454
- var monstrosity = contains$2(uastring, 'edge/') && contains$2(uastring, 'chrome') && contains$2(uastring, 'safari') && contains$2(uastring, 'applewebkit');
3455
- return monstrosity;
3431
+ return contains$2(uastring, 'edge/') && contains$2(uastring, 'chrome') && contains$2(uastring, 'safari') && contains$2(uastring, 'applewebkit');
3456
3432
  }
3457
3433
  },
3458
3434
  {
@@ -3640,21 +3616,21 @@
3640
3616
  for (var k = 0, len = props.length; k < len; k++) {
3641
3617
  var i = props[k];
3642
3618
  var x = obj[i];
3643
- f(x, i, obj);
3619
+ f(x, i);
3644
3620
  }
3645
3621
  };
3646
3622
  var map$2 = function (obj, f) {
3647
- return tupleMap(obj, function (x, i, obj) {
3623
+ return tupleMap(obj, function (x, i) {
3648
3624
  return {
3649
3625
  k: i,
3650
- v: f(x, i, obj)
3626
+ v: f(x, i)
3651
3627
  };
3652
3628
  });
3653
3629
  };
3654
3630
  var tupleMap = function (obj, f) {
3655
3631
  var r = {};
3656
3632
  each$3(obj, function (x, i) {
3657
- var tuple = f(x, i, obj);
3633
+ var tuple = f(x, i);
3658
3634
  r[tuple.k] = tuple.v;
3659
3635
  });
3660
3636
  return r;
@@ -3676,7 +3652,7 @@
3676
3652
  };
3677
3653
 
3678
3654
  var isSupported = function (dom) {
3679
- return dom.style !== undefined;
3655
+ return dom.style !== undefined && isFunction(dom.style.getPropertyValue);
3680
3656
  };
3681
3657
 
3682
3658
  var inBody = function (element) {
@@ -3745,6 +3721,17 @@
3745
3721
  return r.length > 0;
3746
3722
  });
3747
3723
  };
3724
+ var getAllRaw = function (element) {
3725
+ var css = {};
3726
+ var dom = element.dom();
3727
+ if (isSupported(dom)) {
3728
+ for (var i = 0; i < dom.style.length; i++) {
3729
+ var ruleName = dom.style.item(i);
3730
+ css[ruleName] = dom.style[ruleName];
3731
+ }
3732
+ }
3733
+ return css;
3734
+ };
3748
3735
 
3749
3736
  var Immutable = function () {
3750
3737
  var fields = [];
@@ -3802,19 +3789,22 @@
3802
3789
  var ELEMENT$1 = ELEMENT;
3803
3790
  var DOCUMENT$1 = DOCUMENT;
3804
3791
  var is$1 = function (element, selector) {
3805
- var elem = element.dom();
3806
- if (elem.nodeType !== ELEMENT$1) {
3792
+ var dom = element.dom();
3793
+ if (dom.nodeType !== ELEMENT$1) {
3807
3794
  return false;
3808
- } else if (elem.matches !== undefined) {
3809
- return elem.matches(selector);
3810
- } else if (elem.msMatchesSelector !== undefined) {
3811
- return elem.msMatchesSelector(selector);
3812
- } else if (elem.webkitMatchesSelector !== undefined) {
3813
- return elem.webkitMatchesSelector(selector);
3814
- } else if (elem.mozMatchesSelector !== undefined) {
3815
- return elem.mozMatchesSelector(selector);
3816
3795
  } else {
3817
- throw new Error('Browser lacks native selectors');
3796
+ var elem = dom;
3797
+ if (elem.matches !== undefined) {
3798
+ return elem.matches(selector);
3799
+ } else if (elem.msMatchesSelector !== undefined) {
3800
+ return elem.msMatchesSelector(selector);
3801
+ } else if (elem.webkitMatchesSelector !== undefined) {
3802
+ return elem.webkitMatchesSelector(selector);
3803
+ } else if (elem.mozMatchesSelector !== undefined) {
3804
+ return elem.mozMatchesSelector(selector);
3805
+ } else {
3806
+ throw new Error('Browser lacks native selectors');
3807
+ }
3818
3808
  }
3819
3809
  };
3820
3810
  var bypassSelector = function (dom) {
@@ -3850,16 +3840,13 @@
3850
3840
  return Element.fromDom(element.dom().ownerDocument.documentElement);
3851
3841
  };
3852
3842
  var defaultView = function (element) {
3853
- var el = element.dom();
3854
- var defView = el.ownerDocument.defaultView;
3855
- return Element.fromDom(defView);
3843
+ return Element.fromDom(element.dom().ownerDocument.defaultView);
3856
3844
  };
3857
3845
  var parent = function (element) {
3858
- var dom = element.dom();
3859
- return Option.from(dom.parentNode).map(Element.fromDom);
3846
+ return Option.from(element.dom().parentNode).map(Element.fromDom);
3860
3847
  };
3861
3848
  var parents = function (element, isRoot) {
3862
- var stop = isFunction(isRoot) ? isRoot : constant(false);
3849
+ var stop = isFunction(isRoot) ? isRoot : never;
3863
3850
  var dom = element.dom();
3864
3851
  var ret = [];
3865
3852
  while (dom.parentNode !== null && dom.parentNode !== undefined) {
@@ -3875,12 +3862,10 @@
3875
3862
  return ret;
3876
3863
  };
3877
3864
  var prevSibling = function (element) {
3878
- var dom = element.dom();
3879
- return Option.from(dom.previousSibling).map(Element.fromDom);
3865
+ return Option.from(element.dom().previousSibling).map(Element.fromDom);
3880
3866
  };
3881
3867
  var nextSibling = function (element) {
3882
- var dom = element.dom();
3883
- return Option.from(dom.nextSibling).map(Element.fromDom);
3868
+ return Option.from(element.dom().nextSibling).map(Element.fromDom);
3884
3869
  };
3885
3870
  var prevSiblings = function (element) {
3886
3871
  return reverse(Recurse.toArray(element, prevSibling));
@@ -3889,8 +3874,7 @@
3889
3874
  return Recurse.toArray(element, nextSibling);
3890
3875
  };
3891
3876
  var children = function (element) {
3892
- var dom = element.dom();
3893
- return map(dom.childNodes, Element.fromDom);
3877
+ return map(element.dom().childNodes, Element.fromDom);
3894
3878
  };
3895
3879
  var child = function (element, index) {
3896
3880
  var cs = element.dom().childNodes;
@@ -3963,6 +3947,503 @@
3963
3947
  };
3964
3948
  var Position = { getPos: getPos };
3965
3949
 
3950
+ var exports$1 = {}, module$1 = { exports: exports$1 };
3951
+ (function (define, exports, module, require) {
3952
+ (function (f) {
3953
+ if (typeof exports === 'object' && typeof module !== 'undefined') {
3954
+ module.exports = f();
3955
+ } else if (typeof define === 'function' && define.amd) {
3956
+ define([], f);
3957
+ } else {
3958
+ var g;
3959
+ if (typeof window !== 'undefined') {
3960
+ g = window;
3961
+ } else if (typeof global !== 'undefined') {
3962
+ g = global;
3963
+ } else if (typeof self !== 'undefined') {
3964
+ g = self;
3965
+ } else {
3966
+ g = this;
3967
+ }
3968
+ g.EphoxContactWrapper = f();
3969
+ }
3970
+ }(function () {
3971
+ return function () {
3972
+ function r(e, n, t) {
3973
+ function o(i, f) {
3974
+ if (!n[i]) {
3975
+ if (!e[i]) {
3976
+ var c = 'function' == typeof require && require;
3977
+ if (!f && c)
3978
+ return c(i, !0);
3979
+ if (u)
3980
+ return u(i, !0);
3981
+ var a = new Error('Cannot find module \'' + i + '\'');
3982
+ throw a.code = 'MODULE_NOT_FOUND', a;
3983
+ }
3984
+ var p = n[i] = { exports: {} };
3985
+ e[i][0].call(p.exports, function (r) {
3986
+ var n = e[i][1][r];
3987
+ return o(n || r);
3988
+ }, p, p.exports, r, e, n, t);
3989
+ }
3990
+ return n[i].exports;
3991
+ }
3992
+ for (var u = 'function' == typeof require && require, i = 0; i < t.length; i++)
3993
+ o(t[i]);
3994
+ return o;
3995
+ }
3996
+ return r;
3997
+ }()({
3998
+ 1: [
3999
+ function (require, module, exports) {
4000
+ var process = module.exports = {};
4001
+ var cachedSetTimeout;
4002
+ var cachedClearTimeout;
4003
+ function defaultSetTimout() {
4004
+ throw new Error('setTimeout has not been defined');
4005
+ }
4006
+ function defaultClearTimeout() {
4007
+ throw new Error('clearTimeout has not been defined');
4008
+ }
4009
+ (function () {
4010
+ try {
4011
+ if (typeof setTimeout === 'function') {
4012
+ cachedSetTimeout = setTimeout;
4013
+ } else {
4014
+ cachedSetTimeout = defaultSetTimout;
4015
+ }
4016
+ } catch (e) {
4017
+ cachedSetTimeout = defaultSetTimout;
4018
+ }
4019
+ try {
4020
+ if (typeof clearTimeout === 'function') {
4021
+ cachedClearTimeout = clearTimeout;
4022
+ } else {
4023
+ cachedClearTimeout = defaultClearTimeout;
4024
+ }
4025
+ } catch (e) {
4026
+ cachedClearTimeout = defaultClearTimeout;
4027
+ }
4028
+ }());
4029
+ function runTimeout(fun) {
4030
+ if (cachedSetTimeout === setTimeout) {
4031
+ return setTimeout(fun, 0);
4032
+ }
4033
+ if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
4034
+ cachedSetTimeout = setTimeout;
4035
+ return setTimeout(fun, 0);
4036
+ }
4037
+ try {
4038
+ return cachedSetTimeout(fun, 0);
4039
+ } catch (e) {
4040
+ try {
4041
+ return cachedSetTimeout.call(null, fun, 0);
4042
+ } catch (e) {
4043
+ return cachedSetTimeout.call(this, fun, 0);
4044
+ }
4045
+ }
4046
+ }
4047
+ function runClearTimeout(marker) {
4048
+ if (cachedClearTimeout === clearTimeout) {
4049
+ return clearTimeout(marker);
4050
+ }
4051
+ if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
4052
+ cachedClearTimeout = clearTimeout;
4053
+ return clearTimeout(marker);
4054
+ }
4055
+ try {
4056
+ return cachedClearTimeout(marker);
4057
+ } catch (e) {
4058
+ try {
4059
+ return cachedClearTimeout.call(null, marker);
4060
+ } catch (e) {
4061
+ return cachedClearTimeout.call(this, marker);
4062
+ }
4063
+ }
4064
+ }
4065
+ var queue = [];
4066
+ var draining = false;
4067
+ var currentQueue;
4068
+ var queueIndex = -1;
4069
+ function cleanUpNextTick() {
4070
+ if (!draining || !currentQueue) {
4071
+ return;
4072
+ }
4073
+ draining = false;
4074
+ if (currentQueue.length) {
4075
+ queue = currentQueue.concat(queue);
4076
+ } else {
4077
+ queueIndex = -1;
4078
+ }
4079
+ if (queue.length) {
4080
+ drainQueue();
4081
+ }
4082
+ }
4083
+ function drainQueue() {
4084
+ if (draining) {
4085
+ return;
4086
+ }
4087
+ var timeout = runTimeout(cleanUpNextTick);
4088
+ draining = true;
4089
+ var len = queue.length;
4090
+ while (len) {
4091
+ currentQueue = queue;
4092
+ queue = [];
4093
+ while (++queueIndex < len) {
4094
+ if (currentQueue) {
4095
+ currentQueue[queueIndex].run();
4096
+ }
4097
+ }
4098
+ queueIndex = -1;
4099
+ len = queue.length;
4100
+ }
4101
+ currentQueue = null;
4102
+ draining = false;
4103
+ runClearTimeout(timeout);
4104
+ }
4105
+ process.nextTick = function (fun) {
4106
+ var args = new Array(arguments.length - 1);
4107
+ if (arguments.length > 1) {
4108
+ for (var i = 1; i < arguments.length; i++) {
4109
+ args[i - 1] = arguments[i];
4110
+ }
4111
+ }
4112
+ queue.push(new Item(fun, args));
4113
+ if (queue.length === 1 && !draining) {
4114
+ runTimeout(drainQueue);
4115
+ }
4116
+ };
4117
+ function Item(fun, array) {
4118
+ this.fun = fun;
4119
+ this.array = array;
4120
+ }
4121
+ Item.prototype.run = function () {
4122
+ this.fun.apply(null, this.array);
4123
+ };
4124
+ process.title = 'browser';
4125
+ process.browser = true;
4126
+ process.env = {};
4127
+ process.argv = [];
4128
+ process.version = '';
4129
+ process.versions = {};
4130
+ function noop() {
4131
+ }
4132
+ process.on = noop;
4133
+ process.addListener = noop;
4134
+ process.once = noop;
4135
+ process.off = noop;
4136
+ process.removeListener = noop;
4137
+ process.removeAllListeners = noop;
4138
+ process.emit = noop;
4139
+ process.prependListener = noop;
4140
+ process.prependOnceListener = noop;
4141
+ process.listeners = function (name) {
4142
+ return [];
4143
+ };
4144
+ process.binding = function (name) {
4145
+ throw new Error('process.binding is not supported');
4146
+ };
4147
+ process.cwd = function () {
4148
+ return '/';
4149
+ };
4150
+ process.chdir = function (dir) {
4151
+ throw new Error('process.chdir is not supported');
4152
+ };
4153
+ process.umask = function () {
4154
+ return 0;
4155
+ };
4156
+ },
4157
+ {}
4158
+ ],
4159
+ 2: [
4160
+ function (require, module, exports) {
4161
+ (function (setImmediate) {
4162
+ (function (root) {
4163
+ var setTimeoutFunc = setTimeout;
4164
+ function noop() {
4165
+ }
4166
+ function bind(fn, thisArg) {
4167
+ return function () {
4168
+ fn.apply(thisArg, arguments);
4169
+ };
4170
+ }
4171
+ function Promise(fn) {
4172
+ if (typeof this !== 'object')
4173
+ throw new TypeError('Promises must be constructed via new');
4174
+ if (typeof fn !== 'function')
4175
+ throw new TypeError('not a function');
4176
+ this._state = 0;
4177
+ this._handled = false;
4178
+ this._value = undefined;
4179
+ this._deferreds = [];
4180
+ doResolve(fn, this);
4181
+ }
4182
+ function handle(self, deferred) {
4183
+ while (self._state === 3) {
4184
+ self = self._value;
4185
+ }
4186
+ if (self._state === 0) {
4187
+ self._deferreds.push(deferred);
4188
+ return;
4189
+ }
4190
+ self._handled = true;
4191
+ Promise._immediateFn(function () {
4192
+ var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;
4193
+ if (cb === null) {
4194
+ (self._state === 1 ? resolve : reject)(deferred.promise, self._value);
4195
+ return;
4196
+ }
4197
+ var ret;
4198
+ try {
4199
+ ret = cb(self._value);
4200
+ } catch (e) {
4201
+ reject(deferred.promise, e);
4202
+ return;
4203
+ }
4204
+ resolve(deferred.promise, ret);
4205
+ });
4206
+ }
4207
+ function resolve(self, newValue) {
4208
+ try {
4209
+ if (newValue === self)
4210
+ throw new TypeError('A promise cannot be resolved with itself.');
4211
+ if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {
4212
+ var then = newValue.then;
4213
+ if (newValue instanceof Promise) {
4214
+ self._state = 3;
4215
+ self._value = newValue;
4216
+ finale(self);
4217
+ return;
4218
+ } else if (typeof then === 'function') {
4219
+ doResolve(bind(then, newValue), self);
4220
+ return;
4221
+ }
4222
+ }
4223
+ self._state = 1;
4224
+ self._value = newValue;
4225
+ finale(self);
4226
+ } catch (e) {
4227
+ reject(self, e);
4228
+ }
4229
+ }
4230
+ function reject(self, newValue) {
4231
+ self._state = 2;
4232
+ self._value = newValue;
4233
+ finale(self);
4234
+ }
4235
+ function finale(self) {
4236
+ if (self._state === 2 && self._deferreds.length === 0) {
4237
+ Promise._immediateFn(function () {
4238
+ if (!self._handled) {
4239
+ Promise._unhandledRejectionFn(self._value);
4240
+ }
4241
+ });
4242
+ }
4243
+ for (var i = 0, len = self._deferreds.length; i < len; i++) {
4244
+ handle(self, self._deferreds[i]);
4245
+ }
4246
+ self._deferreds = null;
4247
+ }
4248
+ function Handler(onFulfilled, onRejected, promise) {
4249
+ this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
4250
+ this.onRejected = typeof onRejected === 'function' ? onRejected : null;
4251
+ this.promise = promise;
4252
+ }
4253
+ function doResolve(fn, self) {
4254
+ var done = false;
4255
+ try {
4256
+ fn(function (value) {
4257
+ if (done)
4258
+ return;
4259
+ done = true;
4260
+ resolve(self, value);
4261
+ }, function (reason) {
4262
+ if (done)
4263
+ return;
4264
+ done = true;
4265
+ reject(self, reason);
4266
+ });
4267
+ } catch (ex) {
4268
+ if (done)
4269
+ return;
4270
+ done = true;
4271
+ reject(self, ex);
4272
+ }
4273
+ }
4274
+ Promise.prototype['catch'] = function (onRejected) {
4275
+ return this.then(null, onRejected);
4276
+ };
4277
+ Promise.prototype.then = function (onFulfilled, onRejected) {
4278
+ var prom = new this.constructor(noop);
4279
+ handle(this, new Handler(onFulfilled, onRejected, prom));
4280
+ return prom;
4281
+ };
4282
+ Promise.all = function (arr) {
4283
+ var args = Array.prototype.slice.call(arr);
4284
+ return new Promise(function (resolve, reject) {
4285
+ if (args.length === 0)
4286
+ return resolve([]);
4287
+ var remaining = args.length;
4288
+ function res(i, val) {
4289
+ try {
4290
+ if (val && (typeof val === 'object' || typeof val === 'function')) {
4291
+ var then = val.then;
4292
+ if (typeof then === 'function') {
4293
+ then.call(val, function (val) {
4294
+ res(i, val);
4295
+ }, reject);
4296
+ return;
4297
+ }
4298
+ }
4299
+ args[i] = val;
4300
+ if (--remaining === 0) {
4301
+ resolve(args);
4302
+ }
4303
+ } catch (ex) {
4304
+ reject(ex);
4305
+ }
4306
+ }
4307
+ for (var i = 0; i < args.length; i++) {
4308
+ res(i, args[i]);
4309
+ }
4310
+ });
4311
+ };
4312
+ Promise.resolve = function (value) {
4313
+ if (value && typeof value === 'object' && value.constructor === Promise) {
4314
+ return value;
4315
+ }
4316
+ return new Promise(function (resolve) {
4317
+ resolve(value);
4318
+ });
4319
+ };
4320
+ Promise.reject = function (value) {
4321
+ return new Promise(function (resolve, reject) {
4322
+ reject(value);
4323
+ });
4324
+ };
4325
+ Promise.race = function (values) {
4326
+ return new Promise(function (resolve, reject) {
4327
+ for (var i = 0, len = values.length; i < len; i++) {
4328
+ values[i].then(resolve, reject);
4329
+ }
4330
+ });
4331
+ };
4332
+ Promise._immediateFn = typeof setImmediate === 'function' ? function (fn) {
4333
+ setImmediate(fn);
4334
+ } : function (fn) {
4335
+ setTimeoutFunc(fn, 0);
4336
+ };
4337
+ Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {
4338
+ if (typeof console !== 'undefined' && console) {
4339
+ console.warn('Possible Unhandled Promise Rejection:', err);
4340
+ }
4341
+ };
4342
+ Promise._setImmediateFn = function _setImmediateFn(fn) {
4343
+ Promise._immediateFn = fn;
4344
+ };
4345
+ Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) {
4346
+ Promise._unhandledRejectionFn = fn;
4347
+ };
4348
+ if (typeof module !== 'undefined' && module.exports) {
4349
+ module.exports = Promise;
4350
+ } else if (!root.Promise) {
4351
+ root.Promise = Promise;
4352
+ }
4353
+ }(this));
4354
+ }.call(this, require('timers').setImmediate));
4355
+ },
4356
+ { 'timers': 3 }
4357
+ ],
4358
+ 3: [
4359
+ function (require, module, exports) {
4360
+ (function (setImmediate, clearImmediate) {
4361
+ var nextTick = require('process/browser.js').nextTick;
4362
+ var apply = Function.prototype.apply;
4363
+ var slice = Array.prototype.slice;
4364
+ var immediateIds = {};
4365
+ var nextImmediateId = 0;
4366
+ exports.setTimeout = function () {
4367
+ return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);
4368
+ };
4369
+ exports.setInterval = function () {
4370
+ return new Timeout(apply.call(setInterval, window, arguments), clearInterval);
4371
+ };
4372
+ exports.clearTimeout = exports.clearInterval = function (timeout) {
4373
+ timeout.close();
4374
+ };
4375
+ function Timeout(id, clearFn) {
4376
+ this._id = id;
4377
+ this._clearFn = clearFn;
4378
+ }
4379
+ Timeout.prototype.unref = Timeout.prototype.ref = function () {
4380
+ };
4381
+ Timeout.prototype.close = function () {
4382
+ this._clearFn.call(window, this._id);
4383
+ };
4384
+ exports.enroll = function (item, msecs) {
4385
+ clearTimeout(item._idleTimeoutId);
4386
+ item._idleTimeout = msecs;
4387
+ };
4388
+ exports.unenroll = function (item) {
4389
+ clearTimeout(item._idleTimeoutId);
4390
+ item._idleTimeout = -1;
4391
+ };
4392
+ exports._unrefActive = exports.active = function (item) {
4393
+ clearTimeout(item._idleTimeoutId);
4394
+ var msecs = item._idleTimeout;
4395
+ if (msecs >= 0) {
4396
+ item._idleTimeoutId = setTimeout(function onTimeout() {
4397
+ if (item._onTimeout)
4398
+ item._onTimeout();
4399
+ }, msecs);
4400
+ }
4401
+ };
4402
+ exports.setImmediate = typeof setImmediate === 'function' ? setImmediate : function (fn) {
4403
+ var id = nextImmediateId++;
4404
+ var args = arguments.length < 2 ? false : slice.call(arguments, 1);
4405
+ immediateIds[id] = true;
4406
+ nextTick(function onNextTick() {
4407
+ if (immediateIds[id]) {
4408
+ if (args) {
4409
+ fn.apply(null, args);
4410
+ } else {
4411
+ fn.call(null);
4412
+ }
4413
+ exports.clearImmediate(id);
4414
+ }
4415
+ });
4416
+ return id;
4417
+ };
4418
+ exports.clearImmediate = typeof clearImmediate === 'function' ? clearImmediate : function (id) {
4419
+ delete immediateIds[id];
4420
+ };
4421
+ }.call(this, require('timers').setImmediate, require('timers').clearImmediate));
4422
+ },
4423
+ {
4424
+ 'process/browser.js': 1,
4425
+ 'timers': 3
4426
+ }
4427
+ ],
4428
+ 4: [
4429
+ function (require, module, exports) {
4430
+ var promisePolyfill = require('promise-polyfill');
4431
+ var Global = function () {
4432
+ if (typeof window !== 'undefined') {
4433
+ return window;
4434
+ } else {
4435
+ return Function('return this;')();
4436
+ }
4437
+ }();
4438
+ module.exports = { boltExport: Global.Promise || promisePolyfill };
4439
+ },
4440
+ { 'promise-polyfill': 2 }
4441
+ ]
4442
+ }, {}, [4])(4);
4443
+ }));
4444
+ }(undefined, exports$1, module$1, undefined));
4445
+ var Promise = module$1.exports.boltExport;
4446
+
3966
4447
  var nu$3 = function (baseFn) {
3967
4448
  var data = Option.none();
3968
4449
  var callbacks = [];
@@ -3974,10 +4455,11 @@
3974
4455
  });
3975
4456
  };
3976
4457
  var get = function (nCallback) {
3977
- if (isReady())
4458
+ if (isReady()) {
3978
4459
  call(nCallback);
3979
- else
4460
+ } else {
3980
4461
  callbacks.push(nCallback);
4462
+ }
3981
4463
  };
3982
4464
  var set = function (x) {
3983
4465
  data = Option.some(x);
@@ -4014,42 +4496,31 @@
4014
4496
  pure: pure
4015
4497
  };
4016
4498
 
4017
- var bounce = function (f) {
4018
- return function () {
4019
- var args = [];
4020
- for (var _i = 0; _i < arguments.length; _i++) {
4021
- args[_i] = arguments[_i];
4022
- }
4023
- var me = this;
4024
- domGlobals.setTimeout(function () {
4025
- f.apply(me, args);
4026
- }, 0);
4027
- };
4499
+ var errorReporter = function (err) {
4500
+ domGlobals.setTimeout(function () {
4501
+ throw err;
4502
+ }, 0);
4028
4503
  };
4029
-
4030
- var nu$4 = function (baseFn) {
4504
+ var make = function (run) {
4031
4505
  var get = function (callback) {
4032
- baseFn(bounce(callback));
4506
+ run().then(callback, errorReporter);
4033
4507
  };
4034
4508
  var map = function (fab) {
4035
- return nu$4(function (callback) {
4036
- get(function (a) {
4037
- var value = fab(a);
4038
- callback(value);
4039
- });
4509
+ return make(function () {
4510
+ return run().then(fab);
4040
4511
  });
4041
4512
  };
4042
4513
  var bind = function (aFutureB) {
4043
- return nu$4(function (callback) {
4044
- get(function (a) {
4045
- aFutureB(a).get(callback);
4514
+ return make(function () {
4515
+ return run().then(function (v) {
4516
+ return aFutureB(v).toPromise();
4046
4517
  });
4047
4518
  });
4048
4519
  };
4049
4520
  var anonBind = function (futureB) {
4050
- return nu$4(function (callback) {
4051
- get(function (a) {
4052
- futureB.get(callback);
4521
+ return make(function () {
4522
+ return run().then(function () {
4523
+ return futureB.toPromise();
4053
4524
  });
4054
4525
  });
4055
4526
  };
@@ -4058,25 +4529,32 @@
4058
4529
  };
4059
4530
  var toCached = function () {
4060
4531
  var cache = null;
4061
- return nu$4(function (callback) {
4532
+ return make(function () {
4062
4533
  if (cache === null) {
4063
- cache = toLazy();
4534
+ cache = run();
4064
4535
  }
4065
- cache.get(callback);
4536
+ return cache;
4066
4537
  });
4067
4538
  };
4539
+ var toPromise = run;
4068
4540
  return {
4069
4541
  map: map,
4070
4542
  bind: bind,
4071
4543
  anonBind: anonBind,
4072
4544
  toLazy: toLazy,
4073
4545
  toCached: toCached,
4546
+ toPromise: toPromise,
4074
4547
  get: get
4075
4548
  };
4076
4549
  };
4550
+ var nu$4 = function (baseFn) {
4551
+ return make(function () {
4552
+ return new Promise(baseFn);
4553
+ });
4554
+ };
4077
4555
  var pure$1 = function (a) {
4078
- return nu$4(function (callback) {
4079
- callback(a);
4556
+ return make(function () {
4557
+ return Promise.resolve(a);
4080
4558
  });
4081
4559
  };
4082
4560
  var Future = {
@@ -4208,9 +4686,15 @@
4208
4686
  toOption: Option.none
4209
4687
  };
4210
4688
  };
4689
+ var fromOption = function (opt, err) {
4690
+ return opt.fold(function () {
4691
+ return error(err);
4692
+ }, value);
4693
+ };
4211
4694
  var Result = {
4212
4695
  value: value,
4213
- error: error
4696
+ error: error,
4697
+ fromOption: fromOption
4214
4698
  };
4215
4699
 
4216
4700
  function StyleSheetLoader(document, settings) {
@@ -4581,6 +5065,9 @@
4581
5065
  return !!node && node.nodeType === type;
4582
5066
  };
4583
5067
  };
5068
+ var isRestrictedNode = function (node) {
5069
+ return !!node && !Object.getPrototypeOf(node);
5070
+ };
4584
5071
  var isElement$1 = isNodeType(1);
4585
5072
  var matchNodeNames = function (names) {
4586
5073
  var items = names.toLowerCase().split(' ');
@@ -4666,6 +5153,7 @@
4666
5153
  isBr: isBr$1,
4667
5154
  isContentEditableTrue: isContentEditableTrue,
4668
5155
  isContentEditableFalse: isContentEditableFalse,
5156
+ isRestrictedNode: isRestrictedNode,
4669
5157
  matchNodeNames: matchNodeNames,
4670
5158
  hasPropValue: hasPropValue,
4671
5159
  hasAttribute: hasAttribute,
@@ -5169,7 +5657,7 @@
5169
5657
  textBlockElementsMap = createLookupTable('text_block_elements', 'h1 h2 h3 h4 h5 h6 p div address pre form ' + 'blockquote center dir fieldset header footer article section hgroup aside main nav figure');
5170
5658
  blockElementsMap = createLookupTable('block_elements', 'hr table tbody thead tfoot ' + 'th tr td li ol ul caption dl dt dd noscript menu isindex option ' + 'datalist select optgroup figcaption details summary', textBlockElementsMap);
5171
5659
  textInlineElementsMap = createLookupTable('text_inline_elements', 'span strong b em i font strike u var cite ' + 'dfn code mark q sup sub samp');
5172
- each$4((settings.special || 'script noscript noframes noembed title style textarea xmp').split(' '), function (name) {
5660
+ each$4((settings.special || 'script noscript iframe noframes noembed title style textarea xmp').split(' '), function (name) {
5173
5661
  specialElements[name] = new RegExp('</' + name + '[^>]*>', 'gi');
5174
5662
  });
5175
5663
  var patternToRegExp = function (str) {
@@ -5938,7 +6426,7 @@
5938
6426
  var getViewPort = function (argWin) {
5939
6427
  var actWin = !argWin ? win : argWin;
5940
6428
  var doc = actWin.document;
5941
- var rootElm = doc.documentElement;
6429
+ var rootElm = doc.documentElement ;
5942
6430
  return {
5943
6431
  x: actWin.pageXOffset || rootElm.scrollLeft,
5944
6432
  y: actWin.pageYOffset || rootElm.scrollTop,
@@ -6176,12 +6664,14 @@
6176
6664
  var node;
6177
6665
  var container = doc.createElement('div');
6178
6666
  var frag = doc.createDocumentFragment();
6667
+ frag.appendChild(container);
6179
6668
  if (html) {
6180
6669
  container.innerHTML = html;
6181
6670
  }
6182
6671
  while (node = container.firstChild) {
6183
6672
  frag.appendChild(node);
6184
6673
  }
6674
+ frag.removeChild(container);
6185
6675
  return frag;
6186
6676
  };
6187
6677
  var remove = function (node, keepChildren) {
@@ -6993,8 +7483,9 @@
6993
7483
  for (var _i = 0; _i < arguments.length; _i++) {
6994
7484
  args[_i] = arguments[_i];
6995
7485
  }
6996
- if (timer !== null)
7486
+ if (timer !== null) {
6997
7487
  domGlobals.clearTimeout(timer);
7488
+ }
6998
7489
  timer = domGlobals.setTimeout(function () {
6999
7490
  fn.apply(null, args);
7000
7491
  timer = null;
@@ -7119,8 +7610,8 @@
7119
7610
  return Option.none();
7120
7611
  };
7121
7612
  var closest = function (scope, predicate, isRoot) {
7122
- var is = function (s) {
7123
- return predicate(s);
7613
+ var is = function (s, test) {
7614
+ return test(s);
7124
7615
  };
7125
7616
  return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);
7126
7617
  };
@@ -7312,17 +7803,38 @@
7312
7803
  };
7313
7804
  };
7314
7805
 
7806
+ var __assign = function () {
7807
+ __assign = Object.assign || function __assign(t) {
7808
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
7809
+ s = arguments[i];
7810
+ for (var p in s)
7811
+ if (Object.prototype.hasOwnProperty.call(s, p))
7812
+ t[p] = s[p];
7813
+ }
7814
+ return t;
7815
+ };
7816
+ return __assign.apply(this, arguments);
7817
+ };
7315
7818
  function __rest(s, e) {
7316
7819
  var t = {};
7317
7820
  for (var p in s)
7318
7821
  if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
7319
7822
  t[p] = s[p];
7320
7823
  if (s != null && typeof Object.getOwnPropertySymbols === 'function')
7321
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++)
7322
- if (e.indexOf(p[i]) < 0)
7824
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7825
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
7323
7826
  t[p[i]] = s[p[i]];
7827
+ }
7324
7828
  return t;
7325
7829
  }
7830
+ function __spreadArrays() {
7831
+ for (var s = 0, i = 0, il = arguments.length; i < il; i++)
7832
+ s += arguments[i].length;
7833
+ for (var r = Array(s), k = 0, i = 0; i < il; i++)
7834
+ for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
7835
+ r[k] = a[j];
7836
+ return r;
7837
+ }
7326
7838
 
7327
7839
  var unique = 0;
7328
7840
  var generate = function (prefix) {
@@ -7591,7 +8103,8 @@
7591
8103
  return overflowY >= 0 && overflowY <= Math.min(rect1.height, rect2.height) / 2;
7592
8104
  };
7593
8105
  var isAbove = function (rect1, rect2) {
7594
- if (rect1.bottom - rect1.height / 2 < rect2.top) {
8106
+ var halfHeight = Math.min(rect2.height / 2, rect1.height / 2);
8107
+ if (rect1.bottom - halfHeight < rect2.top) {
7595
8108
  return true;
7596
8109
  }
7597
8110
  if (rect1.top > rect2.bottom) {
@@ -7649,31 +8162,25 @@
7649
8162
  return container;
7650
8163
  };
7651
8164
 
7652
- var extendingChars = new RegExp('[\u0300-\u036f\u0483-\u0487\u0488-\u0489\u0591-\u05bd\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05c7\u0610-\u061a' + '\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7-\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0' + '\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08E3-\u0902\u093a\u093c' + '\u0941-\u0948\u094d\u0951-\u0957\u0962-\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2-\u09e3' + '\u0a01-\u0a02\u0a3c\u0a41-\u0a42\u0a47-\u0a48\u0a4b-\u0a4d\u0a51\u0a70-\u0a71\u0a75\u0a81-\u0a82\u0abc' + '\u0ac1-\u0ac5\u0ac7-\u0ac8\u0acd\u0ae2-\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57' + '\u0b62-\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c00\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56' + '\u0c62-\u0c63\u0c81\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc-\u0ccd\u0cd5-\u0cd6\u0ce2-\u0ce3\u0d01\u0d3e\u0d41-\u0d44' + '\u0d4d\u0d57\u0d62-\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9' + '\u0ebb-\u0ebc\u0ec8-\u0ecd\u0f18-\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86-\u0f87\u0f8d-\u0f97' + '\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039-\u103a\u103d-\u103e\u1058-\u1059\u105e-\u1060\u1071-\u1074' + '\u1082\u1085-\u1086\u108d\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17b4-\u17b5' + '\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927-\u1928\u1932\u1939-\u193b\u1a17-\u1a18' + '\u1a1b\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1ab0-\u1abd\u1ABE\u1b00-\u1b03\u1b34' + '\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80-\u1b81\u1ba2-\u1ba5\u1ba8-\u1ba9\u1bab-\u1bad\u1be6\u1be8-\u1be9' + '\u1bed\u1bef-\u1bf1\u1c2c-\u1c33\u1c36-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1cf8-\u1cf9' + '\u1dc0-\u1df5\u1dfc-\u1dff\u200c-\u200d\u20d0-\u20dc\u20DD-\u20E0\u20e1\u20E2-\u20E4\u20e5-\u20f0\u2cef-\u2cf1' + '\u2d7f\u2de0-\u2dff\u302a-\u302d\u302e-\u302f\u3099-\u309a\ua66f\uA670-\uA672\ua674-\ua67d\uA69E-\ua69f\ua6f0-\ua6f1' + '\ua802\ua806\ua80b\ua825-\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc' + '\ua9e5\uaa29-\uaa2e\uaa31-\uaa32\uaa35-\uaa36\uaa43\uaa4c\uaa7c\uaab0\uaab2-\uaab4\uaab7-\uaab8\uaabe-\uaabf\uaac1' + '\uaaec-\uaaed\uaaf6\uabe5\uabe8\uabed\ufb1e\ufe00-\ufe0f\ufe20-\uFE2F\uff9e-\uff9f]');
8165
+ var extendingChars = new RegExp('[\u0300-\u036f\u0483-\u0487\u0488-\u0489\u0591-\u05bd\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05c7\u0610-\u061a' + '\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7-\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0' + '\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e3-\u0902\u093a\u093c' + '\u0941-\u0948\u094d\u0951-\u0957\u0962-\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2-\u09e3' + '\u0a01-\u0a02\u0a3c\u0a41-\u0a42\u0a47-\u0a48\u0a4b-\u0a4d\u0a51\u0a70-\u0a71\u0a75\u0a81-\u0a82\u0abc' + '\u0ac1-\u0ac5\u0ac7-\u0ac8\u0acd\u0ae2-\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57' + '\u0b62-\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c00\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56' + '\u0c62-\u0c63\u0c81\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc-\u0ccd\u0cd5-\u0cd6\u0ce2-\u0ce3\u0d01\u0d3e\u0d41-\u0d44' + '\u0d4d\u0d57\u0d62-\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9' + '\u0ebb-\u0ebc\u0ec8-\u0ecd\u0f18-\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86-\u0f87\u0f8d-\u0f97' + '\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039-\u103a\u103d-\u103e\u1058-\u1059\u105e-\u1060\u1071-\u1074' + '\u1082\u1085-\u1086\u108d\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17b4-\u17b5' + '\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927-\u1928\u1932\u1939-\u193b\u1a17-\u1a18' + '\u1a1b\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1ab0-\u1abd\u1ABE\u1b00-\u1b03\u1b34' + '\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80-\u1b81\u1ba2-\u1ba5\u1ba8-\u1ba9\u1bab-\u1bad\u1be6\u1be8-\u1be9' + '\u1bed\u1bef-\u1bf1\u1c2c-\u1c33\u1c36-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1cf8-\u1cf9' + '\u1dc0-\u1df5\u1dfc-\u1dff\u200c-\u200d\u20d0-\u20dc\u20DD-\u20E0\u20e1\u20E2-\u20E4\u20e5-\u20f0\u2cef-\u2cf1' + '\u2d7f\u2de0-\u2dff\u302a-\u302d\u302e-\u302f\u3099-\u309a\ua66f\uA670-\uA672\ua674-\ua67d\ua69e-\ua69f\ua6f0-\ua6f1' + '\ua802\ua806\ua80b\ua825-\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc' + '\ua9e5\uaa29-\uaa2e\uaa31-\uaa32\uaa35-\uaa36\uaa43\uaa4c\uaa7c\uaab0\uaab2-\uaab4\uaab7-\uaab8\uaabe-\uaabf\uaac1' + '\uaaec-\uaaed\uaaf6\uabe5\uabe8\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\uff9e-\uff9f]');
7653
8166
  var isExtendingChar = function (ch) {
7654
8167
  return typeof ch === 'string' && ch.charCodeAt(0) >= 768 && extendingChars.test(ch);
7655
8168
  };
7656
8169
 
7657
- var liftN = function (arr, f) {
7658
- var r = [];
7659
- for (var i = 0; i < arr.length; i++) {
7660
- var x = arr[i];
7661
- if (x.isSome()) {
7662
- r.push(x.getOrDie());
7663
- } else {
7664
- return Option.none();
7665
- }
7666
- }
7667
- return Option.some(f.apply(null, r));
8170
+ var lift2 = function (oa, ob, f) {
8171
+ return oa.isSome() && ob.isSome() ? Option.some(f(oa.getOrDie(), ob.getOrDie())) : Option.none();
8172
+ };
8173
+ var lift3 = function (oa, ob, oc, f) {
8174
+ return oa.isSome() && ob.isSome() && oc.isSome() ? Option.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Option.none();
7668
8175
  };
7669
8176
 
7670
- var slice$3 = [].slice;
8177
+ var slice$2 = [].slice;
7671
8178
  var or = function () {
7672
8179
  var x = [];
7673
8180
  for (var _i = 0; _i < arguments.length; _i++) {
7674
8181
  x[_i] = arguments[_i];
7675
8182
  }
7676
- var args = slice$3.call(arguments);
8183
+ var args = slice$2.call(arguments);
7677
8184
  return function (x) {
7678
8185
  for (var i = 0; i < args.length; i++) {
7679
8186
  if (args[i](x)) {
@@ -7688,7 +8195,7 @@
7688
8195
  for (var _i = 0; _i < arguments.length; _i++) {
7689
8196
  x[_i] = arguments[_i];
7690
8197
  }
7691
- var args = slice$3.call(arguments);
8198
+ var args = slice$2.call(arguments);
7692
8199
  return function (x) {
7693
8200
  for (var i = 0; i < args.length; i++) {
7694
8201
  if (!args[i](x)) {
@@ -7925,16 +8432,10 @@
7925
8432
  return CaretPosition(node.parentNode, nodeIndex(node));
7926
8433
  };
7927
8434
  CaretPosition.isAbove = function (pos1, pos2) {
7928
- return liftN([
7929
- head(pos2.getClientRects()),
7930
- last(pos1.getClientRects())
7931
- ], isAbove).getOr(false);
8435
+ return lift2(head(pos2.getClientRects()), last(pos1.getClientRects()), isAbove).getOr(false);
7932
8436
  };
7933
8437
  CaretPosition.isBelow = function (pos1, pos2) {
7934
- return liftN([
7935
- last(pos2.getClientRects()),
7936
- head(pos1.getClientRects())
7937
- ], isBelow).getOr(false);
8438
+ return lift2(last(pos2.getClientRects()), head(pos1.getClientRects()), isBelow).getOr(false);
7938
8439
  };
7939
8440
  CaretPosition.isAtStart = function (pos) {
7940
8441
  return pos ? pos.isAtStart() : false;
@@ -9048,7 +9549,7 @@
9048
9549
  };
9049
9550
 
9050
9551
  var addBogus = function (dom, node) {
9051
- if (dom.isBlock(node) && !node.innerHTML && !Env.ie) {
9552
+ if (NodeType.isElement(node) && dom.isBlock(node) && !node.innerHTML && !Env.ie) {
9052
9553
  node.innerHTML = '<br data-mce-bogus="1" />';
9053
9554
  }
9054
9555
  return node;
@@ -9211,10 +9712,7 @@
9211
9712
  var resolveId = function (dom, bookmark) {
9212
9713
  var startPos = restoreEndPoint(dom, 'start', bookmark);
9213
9714
  var endPos = restoreEndPoint(dom, 'end', bookmark);
9214
- return liftN([
9215
- startPos,
9216
- alt(endPos, startPos)
9217
- ], function (spos, epos) {
9715
+ return lift2(startPos, alt(endPos, startPos), function (spos, epos) {
9218
9716
  var rng = dom.createRng();
9219
9717
  rng.setStart(addBogus(dom, spos.container()), spos.offset());
9220
9718
  rng.setEnd(addBogus(dom, epos.container()), epos.offset());
@@ -9764,18 +10262,9 @@
9764
10262
  }
9765
10263
  return getOption(element).getOr('');
9766
10264
  };
9767
- var getOptionIE10 = function (element) {
9768
- try {
9769
- return getOptionSafe(element);
9770
- } catch (e) {
9771
- return Option.none();
9772
- }
9773
- };
9774
- var getOptionSafe = function (element) {
10265
+ var getOption = function (element) {
9775
10266
  return is(element) ? Option.from(element.dom().nodeValue) : Option.none();
9776
10267
  };
9777
- var browser = PlatformDetection$1.detect().browser;
9778
- var getOption = browser.isIE() && browser.version.major === 10 ? getOptionIE10 : getOptionSafe;
9779
10268
  var set = function (element, value) {
9780
10269
  if (!is(element)) {
9781
10270
  throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');
@@ -9906,7 +10395,7 @@
9906
10395
  function Annotator (editor) {
9907
10396
  var registry = create$1();
9908
10397
  setup$1(editor, registry);
9909
- var changes = setup(editor, registry);
10398
+ var changes = setup(editor);
9910
10399
  return {
9911
10400
  register: function (name, settings) {
9912
10401
  registry.register(name, settings);
@@ -10665,165 +11154,129 @@
10665
11154
  };
10666
11155
  var InsertContent = { insertAtCaret: insertAtCaret$1 };
10667
11156
 
10668
- var sectionResult = Immutable('sections', 'settings');
10669
- var detection = PlatformDetection$1.detect();
10670
- var isTouch = detection.deviceType.isTouch();
10671
- var mobilePlugins = [
10672
- 'lists',
10673
- 'autolink',
10674
- 'autosave'
10675
- ];
10676
- var defaultMobileSettings = { theme: 'mobile' };
10677
- var normalizePlugins = function (plugins) {
10678
- var pluginNames = isArray(plugins) ? plugins.join(' ') : plugins;
10679
- var trimmedPlugins = map(isString(pluginNames) ? pluginNames.split(' ') : [], trim$2);
10680
- return filter(trimmedPlugins, function (item) {
10681
- return item.length > 0;
10682
- });
11157
+ var strongRtl = /[\u0591-\u07FF\uFB1D-\uFDFF\uFE70-\uFEFC]/;
11158
+ var hasStrongRtl = function (text) {
11159
+ return strongRtl.test(text);
10683
11160
  };
10684
- var filterMobilePlugins = function (plugins) {
10685
- return filter(plugins, curry(contains, mobilePlugins));
11161
+
11162
+ var getBodySetting = function (editor, name, defaultValue) {
11163
+ var value = editor.getParam(name, defaultValue);
11164
+ if (value.indexOf('=') !== -1) {
11165
+ var bodyObj = editor.getParam(name, '', 'hash');
11166
+ return bodyObj.hasOwnProperty(editor.id) ? bodyObj[editor.id] : defaultValue;
11167
+ } else {
11168
+ return value;
11169
+ }
10686
11170
  };
10687
- var extractSections = function (keys, settings) {
10688
- var result = bifilter(settings, function (value, key) {
10689
- return contains(keys, key);
10690
- });
10691
- return sectionResult(result.t, result.f);
11171
+ var getIframeAttrs = function (editor) {
11172
+ return editor.getParam('iframe_attrs', {});
10692
11173
  };
10693
- var getSection = function (sectionResult, name, defaults) {
10694
- var sections = sectionResult.sections();
10695
- var sectionSettings = sections.hasOwnProperty(name) ? sections[name] : {};
10696
- return Tools.extend({}, defaults, sectionSettings);
11174
+ var getDocType = function (editor) {
11175
+ return editor.getParam('doctype', '<!DOCTYPE html>');
10697
11176
  };
10698
- var hasSection = function (sectionResult, name) {
10699
- return sectionResult.sections().hasOwnProperty(name);
11177
+ var getDocumentBaseUrl = function (editor) {
11178
+ return editor.getParam('document_base_url', '');
10700
11179
  };
10701
- var getDefaultSettings = function (id, documentBaseUrl, editor) {
10702
- return {
10703
- id: id,
10704
- theme: 'modern',
10705
- delta_width: 0,
10706
- delta_height: 0,
10707
- popup_css: '',
10708
- plugins: '',
10709
- document_base_url: documentBaseUrl,
10710
- add_form_submit_trigger: true,
10711
- submit_patch: true,
10712
- add_unload_trigger: true,
10713
- convert_urls: true,
10714
- relative_urls: true,
10715
- remove_script_host: true,
10716
- object_resizing: true,
10717
- doctype: '<!DOCTYPE html>',
10718
- visual: true,
10719
- font_size_style_values: 'xx-small,x-small,small,medium,large,x-large,xx-large',
10720
- font_size_legacy_values: 'xx-small,small,medium,large,x-large,xx-large,300%',
10721
- forced_root_block: 'p',
10722
- hidden_input: true,
10723
- render_ui: true,
10724
- indentation: '40px',
10725
- inline_styles: true,
10726
- convert_fonts_to_spans: true,
10727
- indent: 'simple',
10728
- indent_before: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist',
10729
- indent_after: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist',
10730
- entity_encoding: 'named',
10731
- url_converter: editor.convertURL,
10732
- url_converter_scope: editor,
10733
- ie7_compat: true
10734
- };
11180
+ var getBodyId = function (editor) {
11181
+ return getBodySetting(editor, 'body_id', 'tinymce');
10735
11182
  };
10736
- var getExternalPlugins = function (overrideSettings, settings) {
10737
- var userDefinedExternalPlugins = settings.external_plugins ? settings.external_plugins : {};
10738
- if (overrideSettings && overrideSettings.external_plugins) {
10739
- return Tools.extend({}, overrideSettings.external_plugins, userDefinedExternalPlugins);
10740
- } else {
10741
- return userDefinedExternalPlugins;
11183
+ var getBodyClass = function (editor) {
11184
+ return getBodySetting(editor, 'body_class', '');
11185
+ };
11186
+ var getContentSecurityPolicy = function (editor) {
11187
+ return editor.getParam('content_security_policy', '');
11188
+ };
11189
+ var shouldPutBrInPre = function (editor) {
11190
+ return editor.getParam('br_in_pre', true);
11191
+ };
11192
+ var getForcedRootBlock = function (editor) {
11193
+ if (editor.getParam('force_p_newlines', false)) {
11194
+ return 'p';
10742
11195
  }
11196
+ var block = editor.getParam('forced_root_block', 'p');
11197
+ return block === false ? '' : block;
10743
11198
  };
10744
- var combinePlugins = function (forcedPlugins, plugins) {
10745
- return [].concat(normalizePlugins(forcedPlugins)).concat(normalizePlugins(plugins));
11199
+ var getForcedRootBlockAttrs = function (editor) {
11200
+ return editor.getParam('forced_root_block_attrs', {});
10746
11201
  };
10747
- var processPlugins = function (isTouchDevice, sectionResult, defaultOverrideSettings, settings) {
10748
- var forcedPlugins = normalizePlugins(defaultOverrideSettings.forced_plugins);
10749
- var plugins = normalizePlugins(settings.plugins);
10750
- var platformPlugins = isTouchDevice && hasSection(sectionResult, 'mobile') ? filterMobilePlugins(plugins) : plugins;
10751
- var combinedPlugins = combinePlugins(forcedPlugins, platformPlugins);
10752
- return Tools.extend(settings, { plugins: combinedPlugins.join(' ') });
11202
+ var getBrNewLineSelector = function (editor) {
11203
+ return editor.getParam('br_newline_selector', '.mce-toc h2,figcaption,caption');
10753
11204
  };
10754
- var isOnMobile = function (isTouchDevice, sectionResult) {
10755
- var isInline = sectionResult.settings().inline;
10756
- return isTouchDevice && hasSection(sectionResult, 'mobile') && !isInline;
11205
+ var getNoNewLineSelector = function (editor) {
11206
+ return editor.getParam('no_newline_selector', '');
10757
11207
  };
10758
- var combineSettings = function (isTouchDevice, defaultSettings, defaultOverrideSettings, settings) {
10759
- var sectionResult = extractSections(['mobile'], settings);
10760
- var extendedSettings = Tools.extend(defaultSettings, defaultOverrideSettings, sectionResult.settings(), isOnMobile(isTouchDevice, sectionResult) ? getSection(sectionResult, 'mobile', defaultMobileSettings) : {}, {
10761
- validate: true,
10762
- content_editable: sectionResult.settings().inline,
10763
- external_plugins: getExternalPlugins(defaultOverrideSettings, sectionResult.settings())
10764
- });
10765
- return processPlugins(isTouchDevice, sectionResult, defaultOverrideSettings, extendedSettings);
11208
+ var shouldKeepStyles = function (editor) {
11209
+ return editor.getParam('keep_styles', true);
10766
11210
  };
10767
- var getEditorSettings = function (editor, id, documentBaseUrl, defaultOverrideSettings, settings) {
10768
- var defaultSettings = getDefaultSettings(id, documentBaseUrl, editor);
10769
- return combineSettings(isTouch, defaultSettings, defaultOverrideSettings, settings);
11211
+ var shouldEndContainerOnEmptyBlock = function (editor) {
11212
+ return editor.getParam('end_container_on_empty_block', false);
10770
11213
  };
10771
- var getFiltered = function (predicate, editor, name) {
10772
- return Option.from(editor.settings[name]).filter(predicate);
11214
+ var getFontStyleValues = function (editor) {
11215
+ return Tools.explode(editor.getParam('font_size_style_values', ''));
10773
11216
  };
10774
- var getString = curry(getFiltered, isString);
10775
- var getParamObject = function (value) {
10776
- var output = {};
10777
- if (typeof value === 'string') {
10778
- each(value.indexOf('=') > 0 ? value.split(/[;,](?![^=;,]*(?:[;,]|$))/) : value.split(','), function (val) {
10779
- var arr = val.split('=');
10780
- if (arr.length > 1) {
10781
- output[Tools.trim(arr[0])] = Tools.trim(arr[1]);
10782
- } else {
10783
- output[Tools.trim(arr[0])] = Tools.trim(arr);
10784
- }
10785
- });
10786
- } else {
10787
- output = value;
10788
- }
10789
- return output;
11217
+ var getFontSizeClasses = function (editor) {
11218
+ return Tools.explode(editor.getParam('font_size_classes', ''));
10790
11219
  };
10791
- var isArrayOf = function (p) {
10792
- return function (a) {
10793
- return isArray(a) && forall(a, p);
10794
- };
11220
+ var getImagesDataImgFilter = function (editor) {
11221
+ return editor.getParam('images_dataimg_filter', constant(true), 'function');
10795
11222
  };
10796
- var getParam = function (editor, name, defaultVal, type) {
10797
- var value = name in editor.settings ? editor.settings[name] : defaultVal;
10798
- if (type === 'hash') {
10799
- return getParamObject(value);
10800
- } else if (type === 'string') {
10801
- return getFiltered(isString, editor, name).getOr(defaultVal);
10802
- } else if (type === 'number') {
10803
- return getFiltered(isNumber, editor, name).getOr(defaultVal);
10804
- } else if (type === 'boolean') {
10805
- return getFiltered(isBoolean, editor, name).getOr(defaultVal);
10806
- } else if (type === 'object') {
10807
- return getFiltered(isObject, editor, name).getOr(defaultVal);
10808
- } else if (type === 'array') {
10809
- return getFiltered(isArray, editor, name).getOr(defaultVal);
10810
- } else if (type === 'string[]') {
10811
- return getFiltered(isArrayOf(isString), editor, name).getOr(defaultVal);
10812
- } else if (type === 'function') {
10813
- return getFiltered(isFunction, editor, name).getOr(defaultVal);
10814
- } else {
10815
- return value;
10816
- }
11223
+ var isAutomaticUploadsEnabled = function (editor) {
11224
+ return editor.getParam('automatic_uploads', true, 'boolean');
10817
11225
  };
10818
-
10819
- var strongRtl = /[\u0591-\u07FF\uFB1D-\uFDFF\uFE70-\uFEFC]/;
10820
- var hasStrongRtl = function (text) {
10821
- return strongRtl.test(text);
11226
+ var shouldReuseFileName = function (editor) {
11227
+ return editor.getParam('images_reuse_filename', false, 'boolean');
11228
+ };
11229
+ var shouldReplaceBlobUris = function (editor) {
11230
+ return editor.getParam('images_replace_blob_uris', true, 'boolean');
11231
+ };
11232
+ var getImageUploadUrl = function (editor) {
11233
+ return editor.getParam('images_upload_url', '', 'string');
11234
+ };
11235
+ var getImageUploadBasePath = function (editor) {
11236
+ return editor.getParam('images_upload_base_path', '', 'string');
11237
+ };
11238
+ var getImagesUploadCredentials = function (editor) {
11239
+ return editor.getParam('images_upload_credentials', false, 'boolean');
11240
+ };
11241
+ var getImagesUploadHandler = function (editor) {
11242
+ return editor.getParam('images_upload_handler', null, 'function');
11243
+ };
11244
+ var shouldUseContentCssCors = function (editor) {
11245
+ return editor.getParam('content_css_cors', false, 'boolean');
11246
+ };
11247
+ var getInlineBoundarySelector = function (editor) {
11248
+ return editor.getParam('inline_boundaries_selector', 'a[href],code,.mce-annotation', 'string');
11249
+ };
11250
+ var Settings = {
11251
+ getIframeAttrs: getIframeAttrs,
11252
+ getDocType: getDocType,
11253
+ getDocumentBaseUrl: getDocumentBaseUrl,
11254
+ getBodyId: getBodyId,
11255
+ getBodyClass: getBodyClass,
11256
+ getContentSecurityPolicy: getContentSecurityPolicy,
11257
+ shouldPutBrInPre: shouldPutBrInPre,
11258
+ getForcedRootBlock: getForcedRootBlock,
11259
+ getForcedRootBlockAttrs: getForcedRootBlockAttrs,
11260
+ getBrNewLineSelector: getBrNewLineSelector,
11261
+ getNoNewLineSelector: getNoNewLineSelector,
11262
+ shouldKeepStyles: shouldKeepStyles,
11263
+ shouldEndContainerOnEmptyBlock: shouldEndContainerOnEmptyBlock,
11264
+ getFontStyleValues: getFontStyleValues,
11265
+ getFontSizeClasses: getFontSizeClasses,
11266
+ getImagesDataImgFilter: getImagesDataImgFilter,
11267
+ isAutomaticUploadsEnabled: isAutomaticUploadsEnabled,
11268
+ shouldReuseFileName: shouldReuseFileName,
11269
+ shouldReplaceBlobUris: shouldReplaceBlobUris,
11270
+ getImageUploadUrl: getImageUploadUrl,
11271
+ getImageUploadBasePath: getImageUploadBasePath,
11272
+ getImagesUploadCredentials: getImagesUploadCredentials,
11273
+ getImagesUploadHandler: getImagesUploadHandler,
11274
+ shouldUseContentCssCors: shouldUseContentCssCors,
11275
+ getInlineBoundarySelector: getInlineBoundarySelector
10822
11276
  };
10823
11277
 
10824
11278
  var isInlineTarget = function (editor, elm) {
10825
- var selector = getString(editor, 'inline_boundaries_selector').getOr('a[href],code');
10826
- return is$1(Element.fromDom(elm), selector);
11279
+ return is$1(Element.fromDom(elm), Settings.getInlineBoundarySelector(editor));
10827
11280
  };
10828
11281
  var isRtl = function (element) {
10829
11282
  return DOMUtils$1.DOM.getStyle(element, 'direction', true) === 'rtl' || hasStrongRtl(element.textContent);
@@ -10905,10 +11358,7 @@
10905
11358
  }
10906
11359
  };
10907
11360
  var willDeleteLastPositionInElement = function (forward, fromPos, elm) {
10908
- return liftN([
10909
- CaretFinder.firstPositionIn(elm),
10910
- CaretFinder.lastPositionIn(elm)
10911
- ], function (firstPos, lastPos) {
11361
+ return lift2(CaretFinder.firstPositionIn(elm), CaretFinder.lastPositionIn(elm), function (firstPos, lastPos) {
10912
11362
  var normalizedFirstPos = InlineUtils.normalizePosition(true, firstPos);
10913
11363
  var normalizedLastPos = InlineUtils.normalizePosition(false, lastPos);
10914
11364
  var normalizedFromPos = InlineUtils.normalizePosition(false, fromPos);
@@ -11007,7 +11457,7 @@
11007
11457
  }).isSome();
11008
11458
  };
11009
11459
  var isEditable = function (blockBoundary) {
11010
- return NodeType.isContentEditableFalse(blockBoundary.from().block()) === false && NodeType.isContentEditableFalse(blockBoundary.to().block()) === false;
11460
+ return NodeType.isContentEditableFalse(blockBoundary.from().block().dom()) === false && NodeType.isContentEditableFalse(blockBoundary.to().block().dom()) === false;
11011
11461
  };
11012
11462
  var skipLastBr = function (rootNode, forward, blockPosition) {
11013
11463
  if (NodeType.isBr(blockPosition.position().getNode()) && Empty.isEmpty(blockPosition.block()) === false) {
@@ -11033,10 +11483,7 @@
11033
11483
  });
11034
11484
  });
11035
11485
  });
11036
- return liftN([
11037
- fromBlockPos,
11038
- toBlockPos
11039
- ], BlockBoundary).filter(function (blockBoundary) {
11486
+ return lift2(fromBlockPos, toBlockPos, BlockBoundary).filter(function (blockBoundary) {
11040
11487
  return isDifferentBlocks(blockBoundary) && hasSameParent(blockBoundary) && isEditable(blockBoundary);
11041
11488
  });
11042
11489
  };
@@ -11158,10 +11605,7 @@
11158
11605
 
11159
11606
  var deleteRangeMergeBlocks = function (rootNode, selection) {
11160
11607
  var rng = selection.getRng();
11161
- return liftN([
11162
- DeleteUtils.getParentBlock(rootNode, Element.fromDom(rng.startContainer)),
11163
- DeleteUtils.getParentBlock(rootNode, Element.fromDom(rng.endContainer))
11164
- ], function (block1, block2) {
11608
+ return lift2(DeleteUtils.getParentBlock(rootNode, Element.fromDom(rng.startContainer)), DeleteUtils.getParentBlock(rootNode, Element.fromDom(rng.endContainer)), function (block1, block2) {
11165
11609
  if (eq(block1, block2) === false) {
11166
11610
  rng.deleteContents();
11167
11611
  MergeBlocks.mergeBlocks(rootNode, true, block1, block2).each(function (pos) {
@@ -11231,8 +11675,9 @@
11231
11675
  throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);
11232
11676
  }
11233
11677
  var args = new Array(argLength);
11234
- for (var i = 0; i < args.length; i++)
11678
+ for (var i = 0; i < args.length; i++) {
11235
11679
  args[i] = arguments[i];
11680
+ }
11236
11681
  var match = function (branches) {
11237
11682
  var branchKeys = keys(branches);
11238
11683
  if (constructors.length !== branchKeys.length) {
@@ -11241,8 +11686,9 @@
11241
11686
  var allReqd = forall(constructors, function (reqKey) {
11242
11687
  return contains(branchKeys, reqKey);
11243
11688
  });
11244
- if (!allReqd)
11689
+ if (!allReqd) {
11245
11690
  throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\nRequired: ' + constructors.join(', '));
11691
+ }
11246
11692
  return branches[key].apply(null, args);
11247
11693
  };
11248
11694
  return {
@@ -11567,18 +12013,10 @@
11567
12013
  }
11568
12014
  };
11569
12015
  var deleteNormalized = function (elm, afterDeletePosOpt, normalizeWhitespace) {
11570
- var prevTextOpt = prevSibling(elm).filter(function (e) {
11571
- return NodeType.isText(e.dom());
11572
- });
11573
- var nextTextOpt = nextSibling(elm).filter(function (e) {
11574
- return NodeType.isText(e.dom());
11575
- });
12016
+ var prevTextOpt = prevSibling(elm).filter(isText);
12017
+ var nextTextOpt = nextSibling(elm).filter(isText);
11576
12018
  remove$1(elm);
11577
- return liftN([
11578
- prevTextOpt,
11579
- nextTextOpt,
11580
- afterDeletePosOpt
11581
- ], function (prev, next, pos) {
12019
+ return lift3(prevTextOpt, nextTextOpt, afterDeletePosOpt, function (prev, next, pos) {
11582
12020
  var prevNode = prev.dom(), nextNode = next.dom();
11583
12021
  var offset = prevNode.data.length;
11584
12022
  mergeTextNodes(prevNode, nextNode, normalizeWhitespace);
@@ -11895,10 +12333,7 @@
11895
12333
  return getName(location1) === getName(location2) && getElement(location1) === getElement(location2);
11896
12334
  };
11897
12335
  var betweenInlines = function (forward, isInlineTarget, rootNode, from, to, location) {
11898
- return liftN([
11899
- InlineUtils.findRootInline(isInlineTarget, rootNode, from),
11900
- InlineUtils.findRootInline(isInlineTarget, rootNode, to)
11901
- ], function (fromInline, toInline) {
12336
+ return lift2(InlineUtils.findRootInline(isInlineTarget, rootNode, from), InlineUtils.findRootInline(isInlineTarget, rootNode, to), function (fromInline, toInline) {
11902
12337
  if (fromInline !== toInline && InlineUtils.hasSameParentBlock(rootNode, fromInline, toInline)) {
11903
12338
  return Location.after(forward ? fromInline : toInline);
11904
12339
  } else {
@@ -12071,10 +12506,7 @@
12071
12506
  return range;
12072
12507
  };
12073
12508
  var hasOnlyTwoOrLessPositionsLeft = function (elm) {
12074
- return liftN([
12075
- CaretFinder.firstPositionIn(elm),
12076
- CaretFinder.lastPositionIn(elm)
12077
- ], function (firstPos, lastPos) {
12509
+ return lift2(CaretFinder.firstPositionIn(elm), CaretFinder.lastPositionIn(elm), function (firstPos, lastPos) {
12078
12510
  var normalizedFirstPos = InlineUtils.normalizePosition(true, firstPos);
12079
12511
  var normalizedLastPos = InlineUtils.normalizePosition(false, lastPos);
12080
12512
  return CaretFinder.nextPosition(elm, normalizedFirstPos).map(function (pos) {
@@ -12189,10 +12621,7 @@
12189
12621
  var partialSelection = function (isRoot, rng) {
12190
12622
  var startCell = getClosestCell(rng.startContainer, isRoot);
12191
12623
  var endCell = getClosestCell(rng.endContainer, isRoot);
12192
- return rng.collapsed ? Option.none() : liftN([
12193
- startCell,
12194
- endCell
12195
- ], tableCellRng).fold(function () {
12624
+ return rng.collapsed ? Option.none() : lift2(startCell, endCell, tableCellRng).fold(function () {
12196
12625
  return startCell.fold(function () {
12197
12626
  return endCell.bind(function (endCell) {
12198
12627
  return getClosestTable(endCell, isRoot).bind(function (table) {
@@ -12218,10 +12647,7 @@
12218
12647
  var getCellRng = function (rng, isRoot) {
12219
12648
  var startCell = getClosestCell(rng.startContainer, isRoot);
12220
12649
  var endCell = getClosestCell(rng.endContainer, isRoot);
12221
- return liftN([
12222
- startCell,
12223
- endCell
12224
- ], tableCellRng).filter(isExpandedCellRng).filter(function (cellRng) {
12650
+ return lift2(startCell, endCell, tableCellRng).filter(isExpandedCellRng).filter(function (cellRng) {
12225
12651
  return isWithinSameTable(isRoot, cellRng);
12226
12652
  }).orThunk(function () {
12227
12653
  return partialSelection(isRoot, rng);
@@ -12244,10 +12670,7 @@
12244
12670
  });
12245
12671
  };
12246
12672
  var getSelectedCells = function (tableSelection) {
12247
- return liftN([
12248
- getCellIndex(tableSelection.cells(), tableSelection.rng().start()),
12249
- getCellIndex(tableSelection.cells(), tableSelection.rng().end())
12250
- ], function (startIndex, endIndex) {
12673
+ return lift2(getCellIndex(tableSelection.cells(), tableSelection.rng().start()), getCellIndex(tableSelection.cells(), tableSelection.rng().end()), function (startIndex, endIndex) {
12251
12674
  return tableSelection.cells().slice(startIndex, endIndex + 1);
12252
12675
  });
12253
12676
  };
@@ -12868,42 +13291,135 @@
12868
13291
  };
12869
13292
  var InlineFormatDelete = { backspaceDelete: backspaceDelete$5 };
12870
13293
 
12871
- var isContentEditableTrue$2 = NodeType.isContentEditableTrue;
12872
- var isContentEditableFalse$6 = NodeType.isContentEditableFalse;
12873
- var showCaret = function (direction, editor, node, before, scrollIntoView) {
12874
- return editor._selectionOverrides.showCaret(direction, node, before, scrollIntoView);
12875
- };
12876
- var getNodeRange = function (node) {
12877
- var rng = node.ownerDocument.createRange();
12878
- rng.selectNode(node);
12879
- return rng;
12880
- };
12881
- var selectNode = function (editor, node) {
12882
- var e = editor.fire('BeforeObjectSelected', { target: node });
12883
- if (e.isDefaultPrevented()) {
12884
- return null;
13294
+ var getPos$1 = function (elm) {
13295
+ var x = 0, y = 0;
13296
+ var offsetParent = elm;
13297
+ while (offsetParent && offsetParent.nodeType) {
13298
+ x += offsetParent.offsetLeft || 0;
13299
+ y += offsetParent.offsetTop || 0;
13300
+ offsetParent = offsetParent.offsetParent;
12885
13301
  }
12886
- return getNodeRange(node);
13302
+ return {
13303
+ x: x,
13304
+ y: y
13305
+ };
12887
13306
  };
12888
- var renderCaretAtRange = function (editor, range, scrollIntoView) {
12889
- var normalizedRange = normalizeRange(1, editor.getBody(), range);
12890
- var caretPosition = CaretPosition$1.fromRangeStart(normalizedRange);
12891
- var caretPositionNode = caretPosition.getNode();
12892
- if (isContentEditableFalse$6(caretPositionNode)) {
12893
- return showCaret(1, editor, caretPositionNode, !caretPosition.isAtEnd(), false);
13307
+ var fireScrollIntoViewEvent = function (editor, elm, alignToTop) {
13308
+ var scrollEvent = {
13309
+ elm: elm,
13310
+ alignToTop: alignToTop
13311
+ };
13312
+ editor.fire('scrollIntoView', scrollEvent);
13313
+ return scrollEvent.isDefaultPrevented();
13314
+ };
13315
+ var scrollElementIntoView = function (editor, elm, alignToTop) {
13316
+ var y, viewPort;
13317
+ var dom = editor.dom;
13318
+ var root = dom.getRoot();
13319
+ var viewPortY, viewPortH, offsetY = 0;
13320
+ if (fireScrollIntoViewEvent(editor, elm, alignToTop)) {
13321
+ return;
12894
13322
  }
12895
- var caretPositionBeforeNode = caretPosition.getNode(true);
12896
- if (isContentEditableFalse$6(caretPositionBeforeNode)) {
12897
- return showCaret(1, editor, caretPositionBeforeNode, false, false);
13323
+ if (!NodeType.isElement(elm)) {
13324
+ return;
12898
13325
  }
12899
- var ceRoot = editor.dom.getParent(caretPosition.getNode(), function (node) {
12900
- return isContentEditableFalse$6(node) || isContentEditableTrue$2(node);
12901
- });
12902
- if (isContentEditableFalse$6(ceRoot)) {
12903
- return showCaret(1, editor, ceRoot, false, scrollIntoView);
13326
+ if (alignToTop === false) {
13327
+ offsetY = elm.offsetHeight;
12904
13328
  }
12905
- return null;
12906
- };
13329
+ if (root.nodeName !== 'BODY') {
13330
+ var scrollContainer = editor.selection.getScrollContainer();
13331
+ if (scrollContainer) {
13332
+ y = getPos$1(elm).y - getPos$1(scrollContainer).y + offsetY;
13333
+ viewPortH = scrollContainer.clientHeight;
13334
+ viewPortY = scrollContainer.scrollTop;
13335
+ if (y < viewPortY || y + 25 > viewPortY + viewPortH) {
13336
+ scrollContainer.scrollTop = y < viewPortY ? y : y - viewPortH + 25;
13337
+ }
13338
+ return;
13339
+ }
13340
+ }
13341
+ viewPort = dom.getViewPort(editor.getWin());
13342
+ y = dom.getPos(elm).y + offsetY;
13343
+ viewPortY = viewPort.y;
13344
+ viewPortH = viewPort.h;
13345
+ if (y < viewPort.y || y + 25 > viewPortY + viewPortH) {
13346
+ editor.getWin().scrollTo(0, y < viewPortY ? y : y - viewPortH + 25);
13347
+ }
13348
+ };
13349
+ var getViewPortRect = function (editor) {
13350
+ if (editor.inline) {
13351
+ return editor.getBody().getBoundingClientRect();
13352
+ } else {
13353
+ var win = editor.getWin();
13354
+ return {
13355
+ left: 0,
13356
+ right: win.innerWidth,
13357
+ top: 0,
13358
+ bottom: win.innerHeight,
13359
+ width: win.innerWidth,
13360
+ height: win.innerHeight
13361
+ };
13362
+ }
13363
+ };
13364
+ var scrollBy = function (editor, dx, dy) {
13365
+ if (editor.inline) {
13366
+ editor.getBody().scrollLeft += dx;
13367
+ editor.getBody().scrollTop += dy;
13368
+ } else {
13369
+ editor.getWin().scrollBy(dx, dy);
13370
+ }
13371
+ };
13372
+ var scrollRangeIntoView = function (editor, rng) {
13373
+ head(CaretPosition.fromRangeStart(rng).getClientRects()).each(function (rngRect) {
13374
+ var bodyRect = getViewPortRect(editor);
13375
+ var overflow = getOverflow(bodyRect, rngRect);
13376
+ var margin = 4;
13377
+ var dx = overflow.x > 0 ? overflow.x + margin : overflow.x - margin;
13378
+ var dy = overflow.y > 0 ? overflow.y + margin : overflow.y - margin;
13379
+ scrollBy(editor, overflow.x !== 0 ? dx : 0, overflow.y !== 0 ? dy : 0);
13380
+ });
13381
+ };
13382
+ var ScrollIntoView = {
13383
+ scrollElementIntoView: scrollElementIntoView,
13384
+ scrollRangeIntoView: scrollRangeIntoView
13385
+ };
13386
+
13387
+ var isContentEditableTrue$2 = NodeType.isContentEditableTrue;
13388
+ var isContentEditableFalse$6 = NodeType.isContentEditableFalse;
13389
+ var showCaret = function (direction, editor, node, before, scrollIntoView) {
13390
+ return editor._selectionOverrides.showCaret(direction, node, before, scrollIntoView);
13391
+ };
13392
+ var getNodeRange = function (node) {
13393
+ var rng = node.ownerDocument.createRange();
13394
+ rng.selectNode(node);
13395
+ return rng;
13396
+ };
13397
+ var selectNode = function (editor, node) {
13398
+ var e = editor.fire('BeforeObjectSelected', { target: node });
13399
+ if (e.isDefaultPrevented()) {
13400
+ return null;
13401
+ }
13402
+ return getNodeRange(node);
13403
+ };
13404
+ var renderCaretAtRange = function (editor, range, scrollIntoView) {
13405
+ var normalizedRange = normalizeRange(1, editor.getBody(), range);
13406
+ var caretPosition = CaretPosition$1.fromRangeStart(normalizedRange);
13407
+ var caretPositionNode = caretPosition.getNode();
13408
+ if (isContentEditableFalse$6(caretPositionNode)) {
13409
+ return showCaret(1, editor, caretPositionNode, !caretPosition.isAtEnd(), false);
13410
+ }
13411
+ var caretPositionBeforeNode = caretPosition.getNode(true);
13412
+ if (isContentEditableFalse$6(caretPositionBeforeNode)) {
13413
+ return showCaret(1, editor, caretPositionBeforeNode, false, false);
13414
+ }
13415
+ var ceRoot = editor.dom.getParent(caretPosition.getNode(), function (node) {
13416
+ return isContentEditableFalse$6(node) || isContentEditableTrue$2(node);
13417
+ });
13418
+ if (isContentEditableFalse$6(ceRoot)) {
13419
+ return showCaret(1, editor, ceRoot, false, scrollIntoView);
13420
+ }
13421
+ return null;
13422
+ };
12907
13423
  var renderRangeCaret = function (editor, range, scrollIntoView) {
12908
13424
  if (!range || !range.collapsed) {
12909
13425
  return range;
@@ -12914,6 +13430,10 @@
12914
13430
  }
12915
13431
  return range;
12916
13432
  };
13433
+ var moveToRange = function (editor, rng) {
13434
+ editor.selection.setRng(rng);
13435
+ ScrollIntoView.scrollRangeIntoView(editor, editor.selection.getRng());
13436
+ };
12917
13437
 
12918
13438
  var trimEmptyTextNode$1 = function (dom, node) {
12919
13439
  if (NodeType.isText(node) && node.data.length === 0) {
@@ -13015,118 +13535,6 @@
13015
13535
  forwardDeleteCommand: forwardDeleteCommand
13016
13536
  };
13017
13537
 
13018
- var getBodySetting = function (editor, name, defaultValue) {
13019
- var value = editor.getParam(name, defaultValue);
13020
- if (value.indexOf('=') !== -1) {
13021
- var bodyObj = editor.getParam(name, '', 'hash');
13022
- return bodyObj.hasOwnProperty(editor.id) ? bodyObj[editor.id] : defaultValue;
13023
- } else {
13024
- return value;
13025
- }
13026
- };
13027
- var getIframeAttrs = function (editor) {
13028
- return editor.getParam('iframe_attrs', {});
13029
- };
13030
- var getDocType = function (editor) {
13031
- return editor.getParam('doctype', '<!DOCTYPE html>');
13032
- };
13033
- var getDocumentBaseUrl = function (editor) {
13034
- return editor.getParam('document_base_url', '');
13035
- };
13036
- var getBodyId = function (editor) {
13037
- return getBodySetting(editor, 'body_id', 'tinymce');
13038
- };
13039
- var getBodyClass = function (editor) {
13040
- return getBodySetting(editor, 'body_class', '');
13041
- };
13042
- var getContentSecurityPolicy = function (editor) {
13043
- return editor.getParam('content_security_policy', '');
13044
- };
13045
- var shouldPutBrInPre = function (editor) {
13046
- return editor.getParam('br_in_pre', true);
13047
- };
13048
- var getForcedRootBlock = function (editor) {
13049
- if (editor.getParam('force_p_newlines', false)) {
13050
- return 'p';
13051
- }
13052
- var block = editor.getParam('forced_root_block', 'p');
13053
- return block === false ? '' : block;
13054
- };
13055
- var getForcedRootBlockAttrs = function (editor) {
13056
- return editor.getParam('forced_root_block_attrs', {});
13057
- };
13058
- var getBrNewLineSelector = function (editor) {
13059
- return editor.getParam('br_newline_selector', '.mce-toc h2,figcaption,caption');
13060
- };
13061
- var getNoNewLineSelector = function (editor) {
13062
- return editor.getParam('no_newline_selector', '');
13063
- };
13064
- var shouldKeepStyles = function (editor) {
13065
- return editor.getParam('keep_styles', true);
13066
- };
13067
- var shouldEndContainerOnEmptyBlock = function (editor) {
13068
- return editor.getParam('end_container_on_empty_block', false);
13069
- };
13070
- var getFontStyleValues = function (editor) {
13071
- return Tools.explode(editor.getParam('font_size_style_values', ''));
13072
- };
13073
- var getFontSizeClasses = function (editor) {
13074
- return Tools.explode(editor.getParam('font_size_classes', ''));
13075
- };
13076
- var getImagesDataImgFilter = function (editor) {
13077
- return editor.getParam('images_dataimg_filter', constant(true), 'function');
13078
- };
13079
- var isAutomaticUploadsEnabled = function (editor) {
13080
- return editor.getParam('automatic_uploads', true, 'boolean');
13081
- };
13082
- var shouldReuseFileName = function (editor) {
13083
- return editor.getParam('images_reuse_filename', false, 'boolean');
13084
- };
13085
- var shouldReplaceBlobUris = function (editor) {
13086
- return editor.getParam('images_replace_blob_uris', true, 'boolean');
13087
- };
13088
- var getImageUploadUrl = function (editor) {
13089
- return editor.getParam('images_upload_url', '', 'string');
13090
- };
13091
- var getImageUploadBasePath = function (editor) {
13092
- return editor.getParam('images_upload_base_path', '', 'string');
13093
- };
13094
- var getImagesUploadCredentials = function (editor) {
13095
- return editor.getParam('images_upload_credentials', false, 'boolean');
13096
- };
13097
- var getImagesUploadHandler = function (editor) {
13098
- return editor.getParam('images_upload_handler', null, 'function');
13099
- };
13100
- var shouldUseContentCssCors = function (editor) {
13101
- return editor.getParam('content_css_cors', false, 'boolean');
13102
- };
13103
- var Settings = {
13104
- getIframeAttrs: getIframeAttrs,
13105
- getDocType: getDocType,
13106
- getDocumentBaseUrl: getDocumentBaseUrl,
13107
- getBodyId: getBodyId,
13108
- getBodyClass: getBodyClass,
13109
- getContentSecurityPolicy: getContentSecurityPolicy,
13110
- shouldPutBrInPre: shouldPutBrInPre,
13111
- getForcedRootBlock: getForcedRootBlock,
13112
- getForcedRootBlockAttrs: getForcedRootBlockAttrs,
13113
- getBrNewLineSelector: getBrNewLineSelector,
13114
- getNoNewLineSelector: getNoNewLineSelector,
13115
- shouldKeepStyles: shouldKeepStyles,
13116
- shouldEndContainerOnEmptyBlock: shouldEndContainerOnEmptyBlock,
13117
- getFontStyleValues: getFontStyleValues,
13118
- getFontSizeClasses: getFontSizeClasses,
13119
- getImagesDataImgFilter: getImagesDataImgFilter,
13120
- isAutomaticUploadsEnabled: isAutomaticUploadsEnabled,
13121
- shouldReuseFileName: shouldReuseFileName,
13122
- shouldReplaceBlobUris: shouldReplaceBlobUris,
13123
- getImageUploadUrl: getImageUploadUrl,
13124
- getImageUploadBasePath: getImageUploadBasePath,
13125
- getImagesUploadCredentials: getImagesUploadCredentials,
13126
- getImagesUploadHandler: getImagesUploadHandler,
13127
- shouldUseContentCssCors: shouldUseContentCssCors
13128
- };
13129
-
13130
13538
  var getSpecifiedFontProp = function (propName, rootElm, elm) {
13131
13539
  var getProperty = function (elm) {
13132
13540
  return getRaw(elm, propName);
@@ -13549,6 +13957,9 @@
13549
13957
  };
13550
13958
  var InsertBr = { insert: insert };
13551
13959
 
13960
+ var create$3 = Immutable('start', 'soffset', 'finish', 'foffset');
13961
+ var SimRange = { create: create$3 };
13962
+
13552
13963
  var adt = Adt.generate([
13553
13964
  { before: ['element'] },
13554
13965
  {
@@ -13559,8 +13970,24 @@
13559
13970
  },
13560
13971
  { after: ['element'] }
13561
13972
  ]);
13973
+ var cata = function (subject, onBefore, onOn, onAfter) {
13974
+ return subject.fold(onBefore, onOn, onAfter);
13975
+ };
13976
+ var getStart = function (situ) {
13977
+ return situ.fold(identity, identity, identity);
13978
+ };
13979
+ var before$4 = adt.before;
13980
+ var on = adt.on;
13981
+ var after$3 = adt.after;
13982
+ var Situ = {
13983
+ before: before$4,
13984
+ on: on,
13985
+ after: after$3,
13986
+ cata: cata,
13987
+ getStart: getStart
13988
+ };
13562
13989
 
13563
- var type$1 = Adt.generate([
13990
+ var adt$1 = Adt.generate([
13564
13991
  { domRange: ['rng'] },
13565
13992
  {
13566
13993
  relative: [
@@ -13577,7 +14004,38 @@
13577
14004
  ]
13578
14005
  }
13579
14006
  ]);
13580
- var range = Immutable('start', 'soffset', 'finish', 'foffset');
14007
+ var exactFromRange = function (simRange) {
14008
+ return adt$1.exact(simRange.start(), simRange.soffset(), simRange.finish(), simRange.foffset());
14009
+ };
14010
+ var getStart$1 = function (selection) {
14011
+ return selection.match({
14012
+ domRange: function (rng) {
14013
+ return Element.fromDom(rng.startContainer);
14014
+ },
14015
+ relative: function (startSitu, finishSitu) {
14016
+ return Situ.getStart(startSitu);
14017
+ },
14018
+ exact: function (start, soffset, finish, foffset) {
14019
+ return start;
14020
+ }
14021
+ });
14022
+ };
14023
+ var domRange = adt$1.domRange;
14024
+ var relative = adt$1.relative;
14025
+ var exact = adt$1.exact;
14026
+ var getWin = function (selection) {
14027
+ var start = getStart$1(selection);
14028
+ return defaultView(start);
14029
+ };
14030
+ var range = SimRange.create;
14031
+ var Selection = {
14032
+ domRange: domRange,
14033
+ relative: relative,
14034
+ exact: exact,
14035
+ exactFromRange: exactFromRange,
14036
+ getWin: getWin,
14037
+ range: range
14038
+ };
13581
14039
 
13582
14040
  var browser$3 = PlatformDetection$1.detect().browser;
13583
14041
  var clamp = function (offset, element) {
@@ -13590,10 +14048,10 @@
13590
14048
  return offset;
13591
14049
  };
13592
14050
  var normalizeRng = function (rng) {
13593
- return range(rng.start(), clamp(rng.soffset(), rng.start()), rng.finish(), clamp(rng.foffset(), rng.finish()));
14051
+ return Selection.range(rng.start(), clamp(rng.soffset(), rng.start()), rng.finish(), clamp(rng.foffset(), rng.finish()));
13594
14052
  };
13595
14053
  var isOrContains = function (root, elm) {
13596
- return contains$3(root, elm) || eq(root, elm);
14054
+ return !NodeType.isRestrictedNode(elm.dom()) && (contains$3(root, elm) || eq(root, elm));
13597
14055
  };
13598
14056
  var isRngInRoot = function (root) {
13599
14057
  return function (rng) {
@@ -13604,7 +14062,7 @@
13604
14062
  return editor.inline === true || browser$3.isIE();
13605
14063
  };
13606
14064
  var nativeRangeToSelectionRange = function (r) {
13607
- return range(Element.fromDom(r.startContainer), r.startOffset, Element.fromDom(r.endContainer), r.endOffset);
14065
+ return Selection.range(Element.fromDom(r.startContainer), r.startOffset, Element.fromDom(r.endContainer), r.endOffset);
13608
14066
  };
13609
14067
  var readRange = function (win) {
13610
14068
  var selection = win.getSelection();
@@ -14513,28 +14971,178 @@
14513
14971
  EditorObservable = Tools.extend({}, Observable, EditorObservable);
14514
14972
  var EditorObservable$1 = EditorObservable;
14515
14973
 
14516
- var each$b = Tools.each, explode$2 = Tools.explode;
14517
- var keyCodeLookup = {
14518
- f1: 112,
14519
- f2: 113,
14520
- f3: 114,
14521
- f4: 115,
14522
- f5: 116,
14523
- f6: 117,
14524
- f7: 118,
14525
- f8: 119,
14526
- f9: 120,
14527
- f10: 121,
14528
- f11: 122,
14529
- f12: 123
14974
+ var sectionResult = Immutable('sections', 'settings');
14975
+ var detection = PlatformDetection$1.detect();
14976
+ var isTouch = detection.deviceType.isTouch();
14977
+ var mobilePlugins = [
14978
+ 'lists',
14979
+ 'autolink',
14980
+ 'autosave'
14981
+ ];
14982
+ var defaultMobileSettings = { theme: 'mobile' };
14983
+ var normalizePlugins = function (plugins) {
14984
+ var pluginNames = isArray(plugins) ? plugins.join(' ') : plugins;
14985
+ var trimmedPlugins = map(isString(pluginNames) ? pluginNames.split(' ') : [], trim$2);
14986
+ return filter(trimmedPlugins, function (item) {
14987
+ return item.length > 0;
14988
+ });
14530
14989
  };
14531
- var modifierNames = Tools.makeMap('alt,ctrl,shift,meta,access');
14532
- function Shortcuts (editor) {
14533
- var self = this;
14534
- var shortcuts = {};
14535
- var pendingPatterns = [];
14536
- var parseShortcut = function (pattern) {
14537
- var id, key;
14990
+ var filterMobilePlugins = function (plugins) {
14991
+ return filter(plugins, curry(contains, mobilePlugins));
14992
+ };
14993
+ var extractSections = function (keys, settings) {
14994
+ var result = bifilter(settings, function (value, key) {
14995
+ return contains(keys, key);
14996
+ });
14997
+ return sectionResult(result.t, result.f);
14998
+ };
14999
+ var getSection = function (sectionResult, name, defaults) {
15000
+ var sections = sectionResult.sections();
15001
+ var sectionSettings = sections.hasOwnProperty(name) ? sections[name] : {};
15002
+ return Tools.extend({}, defaults, sectionSettings);
15003
+ };
15004
+ var hasSection = function (sectionResult, name) {
15005
+ return sectionResult.sections().hasOwnProperty(name);
15006
+ };
15007
+ var getDefaultSettings = function (id, documentBaseUrl, editor) {
15008
+ return {
15009
+ id: id,
15010
+ theme: 'modern',
15011
+ delta_width: 0,
15012
+ delta_height: 0,
15013
+ popup_css: '',
15014
+ plugins: '',
15015
+ document_base_url: documentBaseUrl,
15016
+ add_form_submit_trigger: true,
15017
+ submit_patch: true,
15018
+ add_unload_trigger: true,
15019
+ convert_urls: true,
15020
+ relative_urls: true,
15021
+ remove_script_host: true,
15022
+ object_resizing: true,
15023
+ doctype: '<!DOCTYPE html>',
15024
+ visual: true,
15025
+ font_size_style_values: 'xx-small,x-small,small,medium,large,x-large,xx-large',
15026
+ font_size_legacy_values: 'xx-small,small,medium,large,x-large,xx-large,300%',
15027
+ forced_root_block: 'p',
15028
+ hidden_input: true,
15029
+ render_ui: true,
15030
+ indentation: '40px',
15031
+ inline_styles: true,
15032
+ convert_fonts_to_spans: true,
15033
+ indent: 'simple',
15034
+ indent_before: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist',
15035
+ indent_after: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist',
15036
+ entity_encoding: 'named',
15037
+ url_converter: editor.convertURL,
15038
+ url_converter_scope: editor,
15039
+ ie7_compat: true
15040
+ };
15041
+ };
15042
+ var getExternalPlugins = function (overrideSettings, settings) {
15043
+ var userDefinedExternalPlugins = settings.external_plugins ? settings.external_plugins : {};
15044
+ if (overrideSettings && overrideSettings.external_plugins) {
15045
+ return Tools.extend({}, overrideSettings.external_plugins, userDefinedExternalPlugins);
15046
+ } else {
15047
+ return userDefinedExternalPlugins;
15048
+ }
15049
+ };
15050
+ var combinePlugins = function (forcedPlugins, plugins) {
15051
+ return [].concat(normalizePlugins(forcedPlugins)).concat(normalizePlugins(plugins));
15052
+ };
15053
+ var processPlugins = function (isTouchDevice, sectionResult, defaultOverrideSettings, settings) {
15054
+ var forcedPlugins = normalizePlugins(defaultOverrideSettings.forced_plugins);
15055
+ var plugins = normalizePlugins(settings.plugins);
15056
+ var platformPlugins = isTouchDevice && hasSection(sectionResult, 'mobile') ? filterMobilePlugins(plugins) : plugins;
15057
+ var combinedPlugins = combinePlugins(forcedPlugins, platformPlugins);
15058
+ return Tools.extend(settings, { plugins: combinedPlugins.join(' ') });
15059
+ };
15060
+ var isOnMobile = function (isTouchDevice, sectionResult) {
15061
+ var isInline = sectionResult.settings().inline;
15062
+ return isTouchDevice && hasSection(sectionResult, 'mobile') && !isInline;
15063
+ };
15064
+ var combineSettings = function (isTouchDevice, defaultSettings, defaultOverrideSettings, settings) {
15065
+ var sectionResult = extractSections(['mobile'], settings);
15066
+ var extendedSettings = Tools.extend(defaultSettings, defaultOverrideSettings, sectionResult.settings(), isOnMobile(isTouchDevice, sectionResult) ? getSection(sectionResult, 'mobile', defaultMobileSettings) : {}, {
15067
+ validate: true,
15068
+ content_editable: sectionResult.settings().inline,
15069
+ external_plugins: getExternalPlugins(defaultOverrideSettings, sectionResult.settings())
15070
+ });
15071
+ return processPlugins(isTouchDevice, sectionResult, defaultOverrideSettings, extendedSettings);
15072
+ };
15073
+ var getEditorSettings = function (editor, id, documentBaseUrl, defaultOverrideSettings, settings) {
15074
+ var defaultSettings = getDefaultSettings(id, documentBaseUrl, editor);
15075
+ return combineSettings(isTouch, defaultSettings, defaultOverrideSettings, settings);
15076
+ };
15077
+ var getFiltered = function (predicate, editor, name) {
15078
+ return Option.from(editor.settings[name]).filter(predicate);
15079
+ };
15080
+ var getParamObject = function (value) {
15081
+ var output = {};
15082
+ if (typeof value === 'string') {
15083
+ each(value.indexOf('=') > 0 ? value.split(/[;,](?![^=;,]*(?:[;,]|$))/) : value.split(','), function (val) {
15084
+ var arr = val.split('=');
15085
+ if (arr.length > 1) {
15086
+ output[Tools.trim(arr[0])] = Tools.trim(arr[1]);
15087
+ } else {
15088
+ output[Tools.trim(arr[0])] = Tools.trim(arr);
15089
+ }
15090
+ });
15091
+ } else {
15092
+ output = value;
15093
+ }
15094
+ return output;
15095
+ };
15096
+ var isArrayOf = function (p) {
15097
+ return function (a) {
15098
+ return isArray(a) && forall(a, p);
15099
+ };
15100
+ };
15101
+ var getParam = function (editor, name, defaultVal, type) {
15102
+ var value = name in editor.settings ? editor.settings[name] : defaultVal;
15103
+ if (type === 'hash') {
15104
+ return getParamObject(value);
15105
+ } else if (type === 'string') {
15106
+ return getFiltered(isString, editor, name).getOr(defaultVal);
15107
+ } else if (type === 'number') {
15108
+ return getFiltered(isNumber, editor, name).getOr(defaultVal);
15109
+ } else if (type === 'boolean') {
15110
+ return getFiltered(isBoolean, editor, name).getOr(defaultVal);
15111
+ } else if (type === 'object') {
15112
+ return getFiltered(isObject, editor, name).getOr(defaultVal);
15113
+ } else if (type === 'array') {
15114
+ return getFiltered(isArray, editor, name).getOr(defaultVal);
15115
+ } else if (type === 'string[]') {
15116
+ return getFiltered(isArrayOf(isString), editor, name).getOr(defaultVal);
15117
+ } else if (type === 'function') {
15118
+ return getFiltered(isFunction, editor, name).getOr(defaultVal);
15119
+ } else {
15120
+ return value;
15121
+ }
15122
+ };
15123
+
15124
+ var each$b = Tools.each, explode$2 = Tools.explode;
15125
+ var keyCodeLookup = {
15126
+ f1: 112,
15127
+ f2: 113,
15128
+ f3: 114,
15129
+ f4: 115,
15130
+ f5: 116,
15131
+ f6: 117,
15132
+ f7: 118,
15133
+ f8: 119,
15134
+ f9: 120,
15135
+ f10: 121,
15136
+ f11: 122,
15137
+ f12: 123
15138
+ };
15139
+ var modifierNames = Tools.makeMap('alt,ctrl,shift,meta,access');
15140
+ function Shortcuts (editor) {
15141
+ var self = this;
15142
+ var shortcuts = {};
15143
+ var pendingPatterns = [];
15144
+ var parseShortcut = function (pattern) {
15145
+ var id, key;
14538
15146
  var shortcut = {};
14539
15147
  each$b(explode$2(pattern, '+'), function (value) {
14540
15148
  if (value in modifierNames) {
@@ -14665,8 +15273,8 @@
14665
15273
  var doc = owner(element).dom();
14666
15274
  return element.dom() === doc.activeElement;
14667
15275
  };
14668
- var active = function (_DOC) {
14669
- var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;
15276
+ var active = function (_doc) {
15277
+ var doc = _doc !== undefined ? _doc.dom() : domGlobals.document;
14670
15278
  return Option.from(doc.activeElement).map(Element.fromDom);
14671
15279
  };
14672
15280
  var search = function (element) {
@@ -15959,10 +16567,7 @@
15959
16567
  });
15960
16568
  };
15961
16569
  var hasAllContentsSelected = function (elm, rng) {
15962
- return liftN([
15963
- getStartNode(rng),
15964
- getEndNode(rng)
15965
- ], function (startNode, endNode) {
16570
+ return lift2(getStartNode(rng), getEndNode(rng), function (startNode, endNode) {
15966
16571
  var start = find(getFirstChildren(elm), curry(eq, startNode));
15967
16572
  var end = find(getLastChildren$1(elm), curry(eq, endNode));
15968
16573
  return start.isSome() && end.isSome();
@@ -16096,288 +16701,42 @@
16096
16701
  };
16097
16702
  }
16098
16703
 
16099
- var getAbsolutePosition = function (elm) {
16100
- var doc, docElem, win, clientRect;
16101
- clientRect = elm.getBoundingClientRect();
16102
- doc = elm.ownerDocument;
16103
- docElem = doc.documentElement;
16104
- win = doc.defaultView;
16105
- return {
16106
- top: clientRect.top + win.pageYOffset - docElem.clientTop,
16107
- left: clientRect.left + win.pageXOffset - docElem.clientLeft
16108
- };
16109
- };
16110
- var getBodyPosition = function (editor) {
16111
- return editor.inline ? getAbsolutePosition(editor.getBody()) : {
16112
- left: 0,
16113
- top: 0
16114
- };
16115
- };
16116
- var getScrollPosition = function (editor) {
16117
- var body = editor.getBody();
16118
- return editor.inline ? {
16119
- left: body.scrollLeft,
16120
- top: body.scrollTop
16121
- } : {
16122
- left: 0,
16123
- top: 0
16124
- };
16125
- };
16126
- var getBodyScroll = function (editor) {
16127
- var body = editor.getBody(), docElm = editor.getDoc().documentElement;
16128
- var inlineScroll = {
16129
- left: body.scrollLeft,
16130
- top: body.scrollTop
16131
- };
16132
- var iframeScroll = {
16133
- left: body.scrollLeft || docElm.scrollLeft,
16134
- top: body.scrollTop || docElm.scrollTop
16135
- };
16136
- return editor.inline ? inlineScroll : iframeScroll;
16137
- };
16138
- var getMousePosition = function (editor, event) {
16139
- if (event.target.ownerDocument !== editor.getDoc()) {
16140
- var iframePosition = getAbsolutePosition(editor.getContentAreaContainer());
16141
- var scrollPosition = getBodyScroll(editor);
16142
- return {
16143
- left: event.pageX - iframePosition.left + scrollPosition.left,
16144
- top: event.pageY - iframePosition.top + scrollPosition.top
16145
- };
16704
+ var VK = {
16705
+ BACKSPACE: 8,
16706
+ DELETE: 46,
16707
+ DOWN: 40,
16708
+ ENTER: 13,
16709
+ LEFT: 37,
16710
+ RIGHT: 39,
16711
+ SPACEBAR: 32,
16712
+ TAB: 9,
16713
+ UP: 38,
16714
+ END: 35,
16715
+ HOME: 36,
16716
+ modifierPressed: function (e) {
16717
+ return e.shiftKey || e.ctrlKey || e.altKey || this.metaKeyPressed(e);
16718
+ },
16719
+ metaKeyPressed: function (e) {
16720
+ return Env.mac ? e.metaKey : e.ctrlKey && !e.altKey;
16146
16721
  }
16147
- return {
16148
- left: event.pageX,
16149
- top: event.pageY
16150
- };
16151
16722
  };
16152
- var calculatePosition = function (bodyPosition, scrollPosition, mousePosition) {
16153
- return {
16154
- pageX: mousePosition.left - bodyPosition.left + scrollPosition.left,
16155
- pageY: mousePosition.top - bodyPosition.top + scrollPosition.top
16156
- };
16157
- };
16158
- var calc = function (editor, event) {
16159
- return calculatePosition(getBodyPosition(editor), getScrollPosition(editor), getMousePosition(editor, event));
16160
- };
16161
- var MousePosition = { calc: calc };
16162
16723
 
16163
- var isContentEditableFalse$7 = NodeType.isContentEditableFalse, isContentEditableTrue$3 = NodeType.isContentEditableTrue;
16164
- var isDraggable = function (rootElm, elm) {
16165
- return isContentEditableFalse$7(elm) && elm !== rootElm;
16166
- };
16167
- var isValidDropTarget = function (editor, targetElement, dragElement) {
16168
- if (targetElement === dragElement || editor.dom.isChildOf(targetElement, dragElement)) {
16169
- return false;
16724
+ var getNodeClientRects = function (node) {
16725
+ var toArrayWithNode = function (clientRects) {
16726
+ return map(clientRects, function (clientRect) {
16727
+ clientRect = clone$1(clientRect);
16728
+ clientRect.node = node;
16729
+ return clientRect;
16730
+ });
16731
+ };
16732
+ if (NodeType.isElement(node)) {
16733
+ return toArrayWithNode(node.getClientRects());
16170
16734
  }
16171
- if (isContentEditableFalse$7(targetElement)) {
16172
- return false;
16173
- }
16174
- return true;
16175
- };
16176
- var cloneElement = function (elm) {
16177
- var cloneElm = elm.cloneNode(true);
16178
- cloneElm.removeAttribute('data-mce-selected');
16179
- return cloneElm;
16180
- };
16181
- var createGhost = function (editor, elm, width, height) {
16182
- var clonedElm = elm.cloneNode(true);
16183
- editor.dom.setStyles(clonedElm, {
16184
- width: width,
16185
- height: height
16186
- });
16187
- editor.dom.setAttrib(clonedElm, 'data-mce-selected', null);
16188
- var ghostElm = editor.dom.create('div', {
16189
- 'class': 'mce-drag-container',
16190
- 'data-mce-bogus': 'all',
16191
- 'unselectable': 'on',
16192
- 'contenteditable': 'false'
16193
- });
16194
- editor.dom.setStyles(ghostElm, {
16195
- position: 'absolute',
16196
- opacity: 0.5,
16197
- overflow: 'hidden',
16198
- border: 0,
16199
- padding: 0,
16200
- margin: 0,
16201
- width: width,
16202
- height: height
16203
- });
16204
- editor.dom.setStyles(clonedElm, {
16205
- margin: 0,
16206
- boxSizing: 'border-box'
16207
- });
16208
- ghostElm.appendChild(clonedElm);
16209
- return ghostElm;
16210
- };
16211
- var appendGhostToBody = function (ghostElm, bodyElm) {
16212
- if (ghostElm.parentNode !== bodyElm) {
16213
- bodyElm.appendChild(ghostElm);
16214
- }
16215
- };
16216
- var moveGhost = function (ghostElm, position, width, height, maxX, maxY) {
16217
- var overflowX = 0, overflowY = 0;
16218
- ghostElm.style.left = position.pageX + 'px';
16219
- ghostElm.style.top = position.pageY + 'px';
16220
- if (position.pageX + width > maxX) {
16221
- overflowX = position.pageX + width - maxX;
16222
- }
16223
- if (position.pageY + height > maxY) {
16224
- overflowY = position.pageY + height - maxY;
16225
- }
16226
- ghostElm.style.width = width - overflowX + 'px';
16227
- ghostElm.style.height = height - overflowY + 'px';
16228
- };
16229
- var removeElement = function (elm) {
16230
- if (elm && elm.parentNode) {
16231
- elm.parentNode.removeChild(elm);
16232
- }
16233
- };
16234
- var isLeftMouseButtonPressed = function (e) {
16235
- return e.button === 0;
16236
- };
16237
- var hasDraggableElement = function (state) {
16238
- return state.element;
16239
- };
16240
- var applyRelPos = function (state, position) {
16241
- return {
16242
- pageX: position.pageX - state.relX,
16243
- pageY: position.pageY + 5
16244
- };
16245
- };
16246
- var start$1 = function (state, editor) {
16247
- return function (e) {
16248
- if (isLeftMouseButtonPressed(e)) {
16249
- var ceElm = find(editor.dom.getParents(e.target), Predicate.or(isContentEditableFalse$7, isContentEditableTrue$3)).getOr(null);
16250
- if (isDraggable(editor.getBody(), ceElm)) {
16251
- var elmPos = editor.dom.getPos(ceElm);
16252
- var bodyElm = editor.getBody();
16253
- var docElm = editor.getDoc().documentElement;
16254
- state.element = ceElm;
16255
- state.screenX = e.screenX;
16256
- state.screenY = e.screenY;
16257
- state.maxX = (editor.inline ? bodyElm.scrollWidth : docElm.offsetWidth) - 2;
16258
- state.maxY = (editor.inline ? bodyElm.scrollHeight : docElm.offsetHeight) - 2;
16259
- state.relX = e.pageX - elmPos.x;
16260
- state.relY = e.pageY - elmPos.y;
16261
- state.width = ceElm.offsetWidth;
16262
- state.height = ceElm.offsetHeight;
16263
- state.ghost = createGhost(editor, ceElm, state.width, state.height);
16264
- }
16265
- }
16266
- };
16267
- };
16268
- var move$1 = function (state, editor) {
16269
- var throttledPlaceCaretAt = Delay.throttle(function (clientX, clientY) {
16270
- editor._selectionOverrides.hideFakeCaret();
16271
- editor.selection.placeCaretAt(clientX, clientY);
16272
- }, 0);
16273
- return function (e) {
16274
- var movement = Math.max(Math.abs(e.screenX - state.screenX), Math.abs(e.screenY - state.screenY));
16275
- if (hasDraggableElement(state) && !state.dragging && movement > 10) {
16276
- var args = editor.fire('dragstart', { target: state.element });
16277
- if (args.isDefaultPrevented()) {
16278
- return;
16279
- }
16280
- state.dragging = true;
16281
- editor.focus();
16282
- }
16283
- if (state.dragging) {
16284
- var targetPos = applyRelPos(state, MousePosition.calc(editor, e));
16285
- appendGhostToBody(state.ghost, editor.getBody());
16286
- moveGhost(state.ghost, targetPos, state.width, state.height, state.maxX, state.maxY);
16287
- throttledPlaceCaretAt(e.clientX, e.clientY);
16288
- }
16289
- };
16290
- };
16291
- var getRawTarget = function (selection) {
16292
- var rng = selection.getSel().getRangeAt(0);
16293
- var startContainer = rng.startContainer;
16294
- return startContainer.nodeType === 3 ? startContainer.parentNode : startContainer;
16295
- };
16296
- var drop = function (state, editor) {
16297
- return function (e) {
16298
- if (state.dragging) {
16299
- if (isValidDropTarget(editor, getRawTarget(editor.selection), state.element)) {
16300
- var targetClone_1 = cloneElement(state.element);
16301
- var args = editor.fire('drop', {
16302
- targetClone: targetClone_1,
16303
- clientX: e.clientX,
16304
- clientY: e.clientY
16305
- });
16306
- if (!args.isDefaultPrevented()) {
16307
- targetClone_1 = args.targetClone;
16308
- editor.undoManager.transact(function () {
16309
- removeElement(state.element);
16310
- editor.insertContent(editor.dom.getOuterHTML(targetClone_1));
16311
- editor._selectionOverrides.hideFakeCaret();
16312
- });
16313
- }
16314
- }
16315
- }
16316
- removeDragState(state);
16317
- };
16318
- };
16319
- var stop = function (state, editor) {
16320
- return function () {
16321
- if (state.dragging) {
16322
- editor.fire('dragend');
16323
- }
16324
- removeDragState(state);
16325
- };
16326
- };
16327
- var removeDragState = function (state) {
16328
- state.dragging = false;
16329
- state.element = null;
16330
- removeElement(state.ghost);
16331
- };
16332
- var bindFakeDragEvents = function (editor) {
16333
- var state = {};
16334
- var pageDom, dragStartHandler, dragHandler, dropHandler, dragEndHandler, rootDocument;
16335
- pageDom = DOMUtils$1.DOM;
16336
- rootDocument = domGlobals.document;
16337
- dragStartHandler = start$1(state, editor);
16338
- dragHandler = move$1(state, editor);
16339
- dropHandler = drop(state, editor);
16340
- dragEndHandler = stop(state, editor);
16341
- editor.on('mousedown', dragStartHandler);
16342
- editor.on('mousemove', dragHandler);
16343
- editor.on('mouseup', dropHandler);
16344
- pageDom.bind(rootDocument, 'mousemove', dragHandler);
16345
- pageDom.bind(rootDocument, 'mouseup', dragEndHandler);
16346
- editor.on('remove', function () {
16347
- pageDom.unbind(rootDocument, 'mousemove', dragHandler);
16348
- pageDom.unbind(rootDocument, 'mouseup', dragEndHandler);
16349
- });
16350
- };
16351
- var blockIeDrop = function (editor) {
16352
- editor.on('drop', function (e) {
16353
- var realTarget = typeof e.clientX !== 'undefined' ? editor.getDoc().elementFromPoint(e.clientX, e.clientY) : null;
16354
- if (isContentEditableFalse$7(realTarget) || isContentEditableFalse$7(editor.dom.getContentEditableParent(realTarget))) {
16355
- e.preventDefault();
16356
- }
16357
- });
16358
- };
16359
- var init = function (editor) {
16360
- bindFakeDragEvents(editor);
16361
- blockIeDrop(editor);
16362
- };
16363
- var DragDropOverrides = { init: init };
16364
-
16365
- var getNodeClientRects = function (node) {
16366
- var toArrayWithNode = function (clientRects) {
16367
- return map(clientRects, function (clientRect) {
16368
- clientRect = clone$1(clientRect);
16369
- clientRect.node = node;
16370
- return clientRect;
16371
- });
16372
- };
16373
- if (NodeType.isElement(node)) {
16374
- return toArrayWithNode(node.getClientRects());
16375
- }
16376
- if (NodeType.isText(node)) {
16377
- var rng = node.ownerDocument.createRange();
16378
- rng.setStart(node, 0);
16379
- rng.setEnd(node, node.data.length);
16380
- return toArrayWithNode(rng.getClientRects());
16735
+ if (NodeType.isText(node)) {
16736
+ var rng = node.ownerDocument.createRange();
16737
+ rng.setStart(node, 0);
16738
+ rng.setEnd(node, node.data.length);
16739
+ return toArrayWithNode(rng.getClientRects());
16381
16740
  }
16382
16741
  };
16383
16742
  var getClientRects = function (node) {
@@ -16495,7 +16854,7 @@
16495
16854
  };
16496
16855
  };
16497
16856
 
16498
- var isContentEditableFalse$8 = NodeType.isContentEditableFalse;
16857
+ var isContentEditableFalse$7 = NodeType.isContentEditableFalse;
16499
16858
  var findNode$1 = findNode;
16500
16859
  var distanceToRectLeft = function (clientRect, clientX) {
16501
16860
  return Math.abs(clientRect.left - clientX);
@@ -16517,71 +16876,345 @@
16517
16876
  if (isInside(clientX, oldClientRect)) {
16518
16877
  return oldClientRect;
16519
16878
  }
16520
- if (newDistance === oldDistance && isContentEditableFalse$8(clientRect.node)) {
16879
+ if (newDistance === oldDistance && isContentEditableFalse$7(clientRect.node)) {
16521
16880
  return clientRect;
16522
16881
  }
16523
16882
  if (newDistance < oldDistance) {
16524
16883
  return clientRect;
16525
16884
  }
16526
- return oldClientRect;
16527
- });
16885
+ return oldClientRect;
16886
+ });
16887
+ };
16888
+ var walkUntil$1 = function (direction, root, predicateFn, node) {
16889
+ while (node = findNode$1(node, direction, isEditableCaretCandidate, root)) {
16890
+ if (predicateFn(node)) {
16891
+ return;
16892
+ }
16893
+ }
16894
+ };
16895
+ var findLineNodeRects = function (root, targetNodeRect) {
16896
+ var clientRects = [];
16897
+ var collect = function (checkPosFn, node) {
16898
+ var lineRects;
16899
+ lineRects = filter(getClientRects([node]), function (clientRect) {
16900
+ return !checkPosFn(clientRect, targetNodeRect);
16901
+ });
16902
+ clientRects = clientRects.concat(lineRects);
16903
+ return lineRects.length === 0;
16904
+ };
16905
+ clientRects.push(targetNodeRect);
16906
+ walkUntil$1(VDirection.Up, root, curry(collect, isAbove), targetNodeRect.node);
16907
+ walkUntil$1(VDirection.Down, root, curry(collect, isBelow), targetNodeRect.node);
16908
+ return clientRects;
16909
+ };
16910
+ var getFakeCaretTargets = function (root) {
16911
+ return filter(from$1(root.getElementsByTagName('*')), isFakeCaretTarget);
16912
+ };
16913
+ var caretInfo = function (clientRect, clientX) {
16914
+ return {
16915
+ node: clientRect.node,
16916
+ before: distanceToRectLeft(clientRect, clientX) < distanceToRectRight(clientRect, clientX)
16917
+ };
16918
+ };
16919
+ var closestCaret = function (root, clientX, clientY) {
16920
+ var closestNodeRect;
16921
+ var contentEditableFalseNodeRects = getClientRects(getFakeCaretTargets(root));
16922
+ var targetNodeRects = filter(contentEditableFalseNodeRects, function (rect) {
16923
+ return clientY >= rect.top && clientY <= rect.bottom;
16924
+ });
16925
+ closestNodeRect = findClosestClientRect(targetNodeRects, clientX);
16926
+ if (closestNodeRect) {
16927
+ closestNodeRect = findClosestClientRect(findLineNodeRects(root, closestNodeRect), clientX);
16928
+ if (closestNodeRect && isFakeCaretTarget(closestNodeRect.node)) {
16929
+ return caretInfo(closestNodeRect, clientX);
16930
+ }
16931
+ }
16932
+ return null;
16933
+ };
16934
+
16935
+ var isXYWithinRange = function (clientX, clientY, range) {
16936
+ if (range.collapsed) {
16937
+ return false;
16938
+ }
16939
+ if (Env.ie && Env.ie <= 11 && range.startOffset === range.endOffset - 1 && range.startContainer === range.endContainer) {
16940
+ var elm = range.startContainer.childNodes[range.startOffset];
16941
+ if (NodeType.isElement(elm)) {
16942
+ return exists(elm.getClientRects(), function (rect) {
16943
+ return containsXY(rect, clientX, clientY);
16944
+ });
16945
+ }
16946
+ }
16947
+ return exists(range.getClientRects(), function (rect) {
16948
+ return containsXY(rect, clientX, clientY);
16949
+ });
16950
+ };
16951
+ var RangePoint = { isXYWithinRange: isXYWithinRange };
16952
+
16953
+ var getAbsolutePosition = function (elm) {
16954
+ var doc, docElem, win, clientRect;
16955
+ clientRect = elm.getBoundingClientRect();
16956
+ doc = elm.ownerDocument;
16957
+ docElem = doc.documentElement;
16958
+ win = doc.defaultView;
16959
+ return {
16960
+ top: clientRect.top + win.pageYOffset - docElem.clientTop,
16961
+ left: clientRect.left + win.pageXOffset - docElem.clientLeft
16962
+ };
16963
+ };
16964
+ var getBodyPosition = function (editor) {
16965
+ return editor.inline ? getAbsolutePosition(editor.getBody()) : {
16966
+ left: 0,
16967
+ top: 0
16968
+ };
16969
+ };
16970
+ var getScrollPosition = function (editor) {
16971
+ var body = editor.getBody();
16972
+ return editor.inline ? {
16973
+ left: body.scrollLeft,
16974
+ top: body.scrollTop
16975
+ } : {
16976
+ left: 0,
16977
+ top: 0
16978
+ };
16979
+ };
16980
+ var getBodyScroll = function (editor) {
16981
+ var body = editor.getBody(), docElm = editor.getDoc().documentElement;
16982
+ var inlineScroll = {
16983
+ left: body.scrollLeft,
16984
+ top: body.scrollTop
16985
+ };
16986
+ var iframeScroll = {
16987
+ left: body.scrollLeft || docElm.scrollLeft,
16988
+ top: body.scrollTop || docElm.scrollTop
16989
+ };
16990
+ return editor.inline ? inlineScroll : iframeScroll;
16991
+ };
16992
+ var getMousePosition = function (editor, event) {
16993
+ if (event.target.ownerDocument !== editor.getDoc()) {
16994
+ var iframePosition = getAbsolutePosition(editor.getContentAreaContainer());
16995
+ var scrollPosition = getBodyScroll(editor);
16996
+ return {
16997
+ left: event.pageX - iframePosition.left + scrollPosition.left,
16998
+ top: event.pageY - iframePosition.top + scrollPosition.top
16999
+ };
17000
+ }
17001
+ return {
17002
+ left: event.pageX,
17003
+ top: event.pageY
17004
+ };
17005
+ };
17006
+ var calculatePosition = function (bodyPosition, scrollPosition, mousePosition) {
17007
+ return {
17008
+ pageX: mousePosition.left - bodyPosition.left + scrollPosition.left,
17009
+ pageY: mousePosition.top - bodyPosition.top + scrollPosition.top
17010
+ };
17011
+ };
17012
+ var calc = function (editor, event) {
17013
+ return calculatePosition(getBodyPosition(editor), getScrollPosition(editor), getMousePosition(editor, event));
17014
+ };
17015
+ var MousePosition = { calc: calc };
17016
+
17017
+ var isContentEditableFalse$8 = NodeType.isContentEditableFalse, isContentEditableTrue$3 = NodeType.isContentEditableTrue;
17018
+ var isDraggable = function (rootElm, elm) {
17019
+ return isContentEditableFalse$8(elm) && elm !== rootElm;
17020
+ };
17021
+ var isValidDropTarget = function (editor, targetElement, dragElement) {
17022
+ if (targetElement === dragElement || editor.dom.isChildOf(targetElement, dragElement)) {
17023
+ return false;
17024
+ }
17025
+ if (isContentEditableFalse$8(targetElement)) {
17026
+ return false;
17027
+ }
17028
+ return true;
17029
+ };
17030
+ var cloneElement = function (elm) {
17031
+ var cloneElm = elm.cloneNode(true);
17032
+ cloneElm.removeAttribute('data-mce-selected');
17033
+ return cloneElm;
17034
+ };
17035
+ var createGhost = function (editor, elm, width, height) {
17036
+ var clonedElm = elm.cloneNode(true);
17037
+ editor.dom.setStyles(clonedElm, {
17038
+ width: width,
17039
+ height: height
17040
+ });
17041
+ editor.dom.setAttrib(clonedElm, 'data-mce-selected', null);
17042
+ var ghostElm = editor.dom.create('div', {
17043
+ 'class': 'mce-drag-container',
17044
+ 'data-mce-bogus': 'all',
17045
+ 'unselectable': 'on',
17046
+ 'contenteditable': 'false'
17047
+ });
17048
+ editor.dom.setStyles(ghostElm, {
17049
+ position: 'absolute',
17050
+ opacity: 0.5,
17051
+ overflow: 'hidden',
17052
+ border: 0,
17053
+ padding: 0,
17054
+ margin: 0,
17055
+ width: width,
17056
+ height: height
17057
+ });
17058
+ editor.dom.setStyles(clonedElm, {
17059
+ margin: 0,
17060
+ boxSizing: 'border-box'
17061
+ });
17062
+ ghostElm.appendChild(clonedElm);
17063
+ return ghostElm;
17064
+ };
17065
+ var appendGhostToBody = function (ghostElm, bodyElm) {
17066
+ if (ghostElm.parentNode !== bodyElm) {
17067
+ bodyElm.appendChild(ghostElm);
17068
+ }
17069
+ };
17070
+ var moveGhost = function (ghostElm, position, width, height, maxX, maxY) {
17071
+ var overflowX = 0, overflowY = 0;
17072
+ ghostElm.style.left = position.pageX + 'px';
17073
+ ghostElm.style.top = position.pageY + 'px';
17074
+ if (position.pageX + width > maxX) {
17075
+ overflowX = position.pageX + width - maxX;
17076
+ }
17077
+ if (position.pageY + height > maxY) {
17078
+ overflowY = position.pageY + height - maxY;
17079
+ }
17080
+ ghostElm.style.width = width - overflowX + 'px';
17081
+ ghostElm.style.height = height - overflowY + 'px';
17082
+ };
17083
+ var removeElement = function (elm) {
17084
+ if (elm && elm.parentNode) {
17085
+ elm.parentNode.removeChild(elm);
17086
+ }
17087
+ };
17088
+ var isLeftMouseButtonPressed = function (e) {
17089
+ return e.button === 0;
17090
+ };
17091
+ var hasDraggableElement = function (state) {
17092
+ return state.element;
17093
+ };
17094
+ var applyRelPos = function (state, position) {
17095
+ return {
17096
+ pageX: position.pageX - state.relX,
17097
+ pageY: position.pageY + 5
17098
+ };
17099
+ };
17100
+ var start$1 = function (state, editor) {
17101
+ return function (e) {
17102
+ if (isLeftMouseButtonPressed(e)) {
17103
+ var ceElm = find(editor.dom.getParents(e.target), Predicate.or(isContentEditableFalse$8, isContentEditableTrue$3)).getOr(null);
17104
+ if (isDraggable(editor.getBody(), ceElm)) {
17105
+ var elmPos = editor.dom.getPos(ceElm);
17106
+ var bodyElm = editor.getBody();
17107
+ var docElm = editor.getDoc().documentElement;
17108
+ state.element = ceElm;
17109
+ state.screenX = e.screenX;
17110
+ state.screenY = e.screenY;
17111
+ state.maxX = (editor.inline ? bodyElm.scrollWidth : docElm.offsetWidth) - 2;
17112
+ state.maxY = (editor.inline ? bodyElm.scrollHeight : docElm.offsetHeight) - 2;
17113
+ state.relX = e.pageX - elmPos.x;
17114
+ state.relY = e.pageY - elmPos.y;
17115
+ state.width = ceElm.offsetWidth;
17116
+ state.height = ceElm.offsetHeight;
17117
+ state.ghost = createGhost(editor, ceElm, state.width, state.height);
17118
+ }
17119
+ }
17120
+ };
17121
+ };
17122
+ var move$1 = function (state, editor) {
17123
+ var throttledPlaceCaretAt = Delay.throttle(function (clientX, clientY) {
17124
+ editor._selectionOverrides.hideFakeCaret();
17125
+ editor.selection.placeCaretAt(clientX, clientY);
17126
+ }, 0);
17127
+ return function (e) {
17128
+ var movement = Math.max(Math.abs(e.screenX - state.screenX), Math.abs(e.screenY - state.screenY));
17129
+ if (hasDraggableElement(state) && !state.dragging && movement > 10) {
17130
+ var args = editor.fire('dragstart', { target: state.element });
17131
+ if (args.isDefaultPrevented()) {
17132
+ return;
17133
+ }
17134
+ state.dragging = true;
17135
+ editor.focus();
17136
+ }
17137
+ if (state.dragging) {
17138
+ var targetPos = applyRelPos(state, MousePosition.calc(editor, e));
17139
+ appendGhostToBody(state.ghost, editor.getBody());
17140
+ moveGhost(state.ghost, targetPos, state.width, state.height, state.maxX, state.maxY);
17141
+ throttledPlaceCaretAt(e.clientX, e.clientY);
17142
+ }
17143
+ };
17144
+ };
17145
+ var getRawTarget = function (selection) {
17146
+ var rng = selection.getSel().getRangeAt(0);
17147
+ var startContainer = rng.startContainer;
17148
+ return startContainer.nodeType === 3 ? startContainer.parentNode : startContainer;
17149
+ };
17150
+ var drop = function (state, editor) {
17151
+ return function (e) {
17152
+ if (state.dragging) {
17153
+ if (isValidDropTarget(editor, getRawTarget(editor.selection), state.element)) {
17154
+ var targetClone_1 = cloneElement(state.element);
17155
+ var args = editor.fire('drop', {
17156
+ targetClone: targetClone_1,
17157
+ clientX: e.clientX,
17158
+ clientY: e.clientY
17159
+ });
17160
+ if (!args.isDefaultPrevented()) {
17161
+ targetClone_1 = args.targetClone;
17162
+ editor.undoManager.transact(function () {
17163
+ removeElement(state.element);
17164
+ editor.insertContent(editor.dom.getOuterHTML(targetClone_1));
17165
+ editor._selectionOverrides.hideFakeCaret();
17166
+ });
17167
+ }
17168
+ }
17169
+ }
17170
+ removeDragState(state);
17171
+ };
16528
17172
  };
16529
- var walkUntil$1 = function (direction, root, predicateFn, node) {
16530
- while (node = findNode$1(node, direction, isEditableCaretCandidate, root)) {
16531
- if (predicateFn(node)) {
16532
- return;
17173
+ var stop = function (state, editor) {
17174
+ return function () {
17175
+ if (state.dragging) {
17176
+ editor.fire('dragend');
16533
17177
  }
16534
- }
16535
- };
16536
- var findLineNodeRects = function (root, targetNodeRect) {
16537
- var clientRects = [];
16538
- var collect = function (checkPosFn, node) {
16539
- var lineRects;
16540
- lineRects = filter(getClientRects([node]), function (clientRect) {
16541
- return !checkPosFn(clientRect, targetNodeRect);
16542
- });
16543
- clientRects = clientRects.concat(lineRects);
16544
- return lineRects.length === 0;
17178
+ removeDragState(state);
16545
17179
  };
16546
- clientRects.push(targetNodeRect);
16547
- walkUntil$1(VDirection.Up, root, curry(collect, isAbove), targetNodeRect.node);
16548
- walkUntil$1(VDirection.Down, root, curry(collect, isBelow), targetNodeRect.node);
16549
- return clientRects;
16550
17180
  };
16551
- var getFakeCaretTargets = function (root) {
16552
- return filter(from$1(root.getElementsByTagName('*')), isFakeCaretTarget);
16553
- };
16554
- var caretInfo = function (clientRect, clientX) {
16555
- return {
16556
- node: clientRect.node,
16557
- before: distanceToRectLeft(clientRect, clientX) < distanceToRectRight(clientRect, clientX)
16558
- };
17181
+ var removeDragState = function (state) {
17182
+ state.dragging = false;
17183
+ state.element = null;
17184
+ removeElement(state.ghost);
16559
17185
  };
16560
- var closestCaret = function (root, clientX, clientY) {
16561
- var closestNodeRect;
16562
- var contentEditableFalseNodeRects = getClientRects(getFakeCaretTargets(root));
16563
- var targetNodeRects = filter(contentEditableFalseNodeRects, function (rect) {
16564
- return clientY >= rect.top && clientY <= rect.bottom;
17186
+ var bindFakeDragEvents = function (editor) {
17187
+ var state = {};
17188
+ var pageDom, dragStartHandler, dragHandler, dropHandler, dragEndHandler, rootDocument;
17189
+ pageDom = DOMUtils$1.DOM;
17190
+ rootDocument = domGlobals.document;
17191
+ dragStartHandler = start$1(state, editor);
17192
+ dragHandler = move$1(state, editor);
17193
+ dropHandler = drop(state, editor);
17194
+ dragEndHandler = stop(state, editor);
17195
+ editor.on('mousedown', dragStartHandler);
17196
+ editor.on('mousemove', dragHandler);
17197
+ editor.on('mouseup', dropHandler);
17198
+ pageDom.bind(rootDocument, 'mousemove', dragHandler);
17199
+ pageDom.bind(rootDocument, 'mouseup', dragEndHandler);
17200
+ editor.on('remove', function () {
17201
+ pageDom.unbind(rootDocument, 'mousemove', dragHandler);
17202
+ pageDom.unbind(rootDocument, 'mouseup', dragEndHandler);
16565
17203
  });
16566
- closestNodeRect = findClosestClientRect(targetNodeRects, clientX);
16567
- if (closestNodeRect) {
16568
- closestNodeRect = findClosestClientRect(findLineNodeRects(root, closestNodeRect), clientX);
16569
- if (closestNodeRect && isFakeCaretTarget(closestNodeRect.node)) {
16570
- return caretInfo(closestNodeRect, clientX);
17204
+ };
17205
+ var blockIeDrop = function (editor) {
17206
+ editor.on('drop', function (e) {
17207
+ var realTarget = typeof e.clientX !== 'undefined' ? editor.getDoc().elementFromPoint(e.clientX, e.clientY) : null;
17208
+ if (isContentEditableFalse$8(realTarget) || isContentEditableFalse$8(editor.dom.getContentEditableParent(realTarget))) {
17209
+ e.preventDefault();
16571
17210
  }
16572
- }
16573
- return null;
17211
+ });
16574
17212
  };
16575
-
16576
- var isXYWithinRange = function (clientX, clientY, range) {
16577
- if (range.collapsed) {
16578
- return false;
16579
- }
16580
- return foldl(range.getClientRects(), function (state, rect) {
16581
- return state || containsXY(rect, clientX, clientY);
16582
- }, false);
17213
+ var init = function (editor) {
17214
+ bindFakeDragEvents(editor);
17215
+ blockIeDrop(editor);
16583
17216
  };
16584
- var RangePoint = { isXYWithinRange: isXYWithinRange };
17217
+ var DragDropOverrides = { init: init };
16585
17218
 
16586
17219
  var setup$4 = function (editor) {
16587
17220
  var renderFocusCaret = first(function () {
@@ -16602,26 +17235,6 @@
16602
17235
  };
16603
17236
  var CefFocus = { setup: setup$4 };
16604
17237
 
16605
- var VK = {
16606
- BACKSPACE: 8,
16607
- DELETE: 46,
16608
- DOWN: 40,
16609
- ENTER: 13,
16610
- LEFT: 37,
16611
- RIGHT: 39,
16612
- SPACEBAR: 32,
16613
- TAB: 9,
16614
- UP: 38,
16615
- END: 35,
16616
- HOME: 36,
16617
- modifierPressed: function (e) {
16618
- return e.shiftKey || e.ctrlKey || e.altKey || this.metaKeyPressed(e);
16619
- },
16620
- metaKeyPressed: function (e) {
16621
- return Env.mac ? e.metaKey : e.ctrlKey && !e.altKey;
16622
- }
16623
- };
16624
-
16625
17238
  var isContentEditableTrue$4 = NodeType.isContentEditableTrue;
16626
17239
  var isContentEditableFalse$9 = NodeType.isContentEditableFalse;
16627
17240
  var getContentEditableRoot$1 = function (editor, node) {
@@ -16820,8 +17433,8 @@
16820
17433
  }
16821
17434
  });
16822
17435
  editor.on('setSelectionRange', function (e) {
16823
- var rng;
16824
- rng = setContentEditableSelection(e.range, e.forward);
17436
+ e.range = normalizeShortEndedElementSelection(e.range);
17437
+ var rng = setContentEditableSelection(e.range, e.forward);
16825
17438
  if (rng) {
16826
17439
  e.range = rng;
16827
17440
  }
@@ -16864,6 +17477,33 @@
16864
17477
  var isRangeInCaretContainer = function (rng) {
16865
17478
  return isWithinCaretContainer(rng.startContainer) || isWithinCaretContainer(rng.endContainer);
16866
17479
  };
17480
+ var normalizeShortEndedElementSelection = function (rng) {
17481
+ var shortEndedElements = editor.schema.getShortEndedElements();
17482
+ var newRng = editor.dom.createRng();
17483
+ var startContainer = rng.startContainer;
17484
+ var startOffset = rng.startOffset;
17485
+ var endContainer = rng.endContainer;
17486
+ var endOffset = rng.endOffset;
17487
+ if (has(shortEndedElements, startContainer.nodeName.toLowerCase())) {
17488
+ if (startOffset === 0) {
17489
+ newRng.setStartBefore(startContainer);
17490
+ } else {
17491
+ newRng.setStartAfter(startContainer);
17492
+ }
17493
+ } else {
17494
+ newRng.setStart(startContainer, startOffset);
17495
+ }
17496
+ if (has(shortEndedElements, endContainer.nodeName.toLowerCase())) {
17497
+ if (endOffset === 0) {
17498
+ newRng.setEndBefore(endContainer);
17499
+ } else {
17500
+ newRng.setEndAfter(endContainer);
17501
+ }
17502
+ } else {
17503
+ newRng.setEnd(endContainer, endOffset);
17504
+ }
17505
+ return newRng;
17506
+ };
16867
17507
  var setContentEditableSelection = function (range, forward) {
16868
17508
  var node;
16869
17509
  var $ = editor.$;
@@ -16905,7 +17545,7 @@
16905
17545
  if (startContainer.nodeType !== 1) {
16906
17546
  return null;
16907
17547
  }
16908
- if (endOffset === startOffset + 1) {
17548
+ if (endOffset === startOffset + 1 && startContainer === range.endContainer) {
16909
17549
  node = startContainer.childNodes[startOffset];
16910
17550
  }
16911
17551
  if (!isContentEditableFalse$9(node)) {
@@ -16984,7 +17624,11 @@
16984
17624
  return name.indexOf('data-') === 0 || name.indexOf('aria-') === 0;
16985
17625
  };
16986
17626
  var trimComments = function (text) {
16987
- return text.replace(/<!--|-->/g, '');
17627
+ var sanitizedText = text;
17628
+ while (/<!--|--!?>/g.test(sanitizedText)) {
17629
+ sanitizedText = sanitizedText.replace(/<!--|--!?>/g, '');
17630
+ }
17631
+ return sanitizedText;
16988
17632
  };
16989
17633
  var isInvalidUri = function (settings, uri) {
16990
17634
  if (settings.allow_html_data_urls) {
@@ -17122,7 +17766,7 @@
17122
17766
  value: value
17123
17767
  });
17124
17768
  };
17125
- tokenRegExp = new RegExp('<(?:' + '(?:!--([\\w\\W]*?)-->)|' + '(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|' + '(?:!DOCTYPE([\\w\\W]*?)>)|' + '(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|' + '(?:\\/([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)>)|' + '(?:([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)((?:\\s+[^"\'>]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*|\\/|\\s+)>)' + ')', 'g');
17769
+ tokenRegExp = new RegExp('<(?:' + '(?:!--([\\w\\W]*?)--!?>)|' + '(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|' + '(?:!DOCTYPE([\\w\\W]*?)>)|' + '(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|' + '(?:\\/([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)>)|' + '(?:([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)((?:\\s+[^"\'>]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*|\\/|\\s+)>)' + ')', 'g');
17126
17770
  attrRegExp = /([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g;
17127
17771
  shortEndedElements = schema.getShortEndedElements();
17128
17772
  selfClosing = settings.self_closing_elements || schema.getSelfClosingElements();
@@ -18618,7 +19262,7 @@
18618
19262
  }
18619
19263
  ed.selection.setRng(RangeNormalizer.normalize(ed.selection.getRng()));
18620
19264
  bookmark = GetBookmark.getPersistentBookmark(ed.selection, true);
18621
- applyRngStyle(dom, ExpandRange.expandRng(ed, selection.getRng(), formatList), bookmark);
19265
+ applyRngStyle(dom, ExpandRange.expandRng(ed, selection.getRng(), formatList));
18622
19266
  if (format.styles) {
18623
19267
  MergeFormats.mergeUnderlineAndColor(dom, format, vars, curSelNode);
18624
19268
  }
@@ -19289,17 +19933,20 @@
19289
19933
  var baseMerge = function (merger) {
19290
19934
  return function () {
19291
19935
  var objects = new Array(arguments.length);
19292
- for (var i = 0; i < objects.length; i++)
19936
+ for (var i = 0; i < objects.length; i++) {
19293
19937
  objects[i] = arguments[i];
19294
- if (objects.length === 0)
19938
+ }
19939
+ if (objects.length === 0) {
19295
19940
  throw new Error('Can\'t merge zero objects');
19941
+ }
19296
19942
  var ret = {};
19297
19943
  for (var j = 0; j < objects.length; j++) {
19298
19944
  var curObject = objects[j];
19299
- for (var key in curObject)
19945
+ for (var key in curObject) {
19300
19946
  if (hasOwnProperty$2.call(curObject, key)) {
19301
19947
  ret[key] = merger(ret[key], curObject[key]);
19302
19948
  }
19949
+ }
19303
19950
  }
19304
19951
  return ret;
19305
19952
  };
@@ -19866,7 +20513,7 @@
19866
20513
  var blockElements = Tools.extend({}, schema.getBlockElements());
19867
20514
  var nonEmptyElements = schema.getNonEmptyElements();
19868
20515
  var parent, lastParent, prev, prevName;
19869
- var whiteSpaceElements = schema.getNonEmptyElements();
20516
+ var whiteSpaceElements = schema.getWhiteSpaceElements();
19870
20517
  var elementRule, textNode;
19871
20518
  blockElements.body = 1;
19872
20519
  for (i = 0; i < l; i++) {
@@ -20632,7 +21279,6 @@
20632
21279
  var contextMenuSelectImage = function (evt) {
20633
21280
  var target = evt.target;
20634
21281
  if (isEventOnImageOutsideRange(evt, editor.selection.getRng()) && !evt.isDefaultPrevented()) {
20635
- evt.preventDefault();
20636
21282
  editor.selection.select(target);
20637
21283
  }
20638
21284
  };
@@ -20942,99 +21588,6 @@
20942
21588
  };
20943
21589
  };
20944
21590
 
20945
- var getPos$1 = function (elm) {
20946
- var x = 0, y = 0;
20947
- var offsetParent = elm;
20948
- while (offsetParent && offsetParent.nodeType) {
20949
- x += offsetParent.offsetLeft || 0;
20950
- y += offsetParent.offsetTop || 0;
20951
- offsetParent = offsetParent.offsetParent;
20952
- }
20953
- return {
20954
- x: x,
20955
- y: y
20956
- };
20957
- };
20958
- var fireScrollIntoViewEvent = function (editor, elm, alignToTop) {
20959
- var scrollEvent = {
20960
- elm: elm,
20961
- alignToTop: alignToTop
20962
- };
20963
- editor.fire('scrollIntoView', scrollEvent);
20964
- return scrollEvent.isDefaultPrevented();
20965
- };
20966
- var scrollElementIntoView = function (editor, elm, alignToTop) {
20967
- var y, viewPort;
20968
- var dom = editor.dom;
20969
- var root = dom.getRoot();
20970
- var viewPortY, viewPortH, offsetY = 0;
20971
- if (fireScrollIntoViewEvent(editor, elm, alignToTop)) {
20972
- return;
20973
- }
20974
- if (!NodeType.isElement(elm)) {
20975
- return;
20976
- }
20977
- if (alignToTop === false) {
20978
- offsetY = elm.offsetHeight;
20979
- }
20980
- if (root.nodeName !== 'BODY') {
20981
- var scrollContainer = editor.selection.getScrollContainer();
20982
- if (scrollContainer) {
20983
- y = getPos$1(elm).y - getPos$1(scrollContainer).y + offsetY;
20984
- viewPortH = scrollContainer.clientHeight;
20985
- viewPortY = scrollContainer.scrollTop;
20986
- if (y < viewPortY || y + 25 > viewPortY + viewPortH) {
20987
- scrollContainer.scrollTop = y < viewPortY ? y : y - viewPortH + 25;
20988
- }
20989
- return;
20990
- }
20991
- }
20992
- viewPort = dom.getViewPort(editor.getWin());
20993
- y = dom.getPos(elm).y + offsetY;
20994
- viewPortY = viewPort.y;
20995
- viewPortH = viewPort.h;
20996
- if (y < viewPort.y || y + 25 > viewPortY + viewPortH) {
20997
- editor.getWin().scrollTo(0, y < viewPortY ? y : y - viewPortH + 25);
20998
- }
20999
- };
21000
- var getViewPortRect = function (editor) {
21001
- if (editor.inline) {
21002
- return editor.getBody().getBoundingClientRect();
21003
- } else {
21004
- var win = editor.getWin();
21005
- return {
21006
- left: 0,
21007
- right: win.innerWidth,
21008
- top: 0,
21009
- bottom: win.innerHeight,
21010
- width: win.innerWidth,
21011
- height: win.innerHeight
21012
- };
21013
- }
21014
- };
21015
- var scrollBy = function (editor, dx, dy) {
21016
- if (editor.inline) {
21017
- editor.getBody().scrollLeft += dx;
21018
- editor.getBody().scrollTop += dy;
21019
- } else {
21020
- editor.getWin().scrollBy(dx, dy);
21021
- }
21022
- };
21023
- var scrollRangeIntoView = function (editor, rng) {
21024
- head(CaretPosition.fromRangeStart(rng).getClientRects()).each(function (rngRect) {
21025
- var bodyRect = getViewPortRect(editor);
21026
- var overflow = getOverflow(bodyRect, rngRect);
21027
- var margin = 4;
21028
- var dx = overflow.x > 0 ? overflow.x + margin : overflow.x - margin;
21029
- var dy = overflow.y > 0 ? overflow.y + margin : overflow.y - margin;
21030
- scrollBy(editor, overflow.x !== 0 ? dx : 0, overflow.y !== 0 ? dy : 0);
21031
- });
21032
- };
21033
- var ScrollIntoView = {
21034
- scrollElementIntoView: scrollElementIntoView,
21035
- scrollRangeIntoView: scrollRangeIntoView
21036
- };
21037
-
21038
21591
  var hasCeProperty = function (node) {
21039
21592
  return NodeType.isContentEditableTrue(node) || NodeType.isContentEditableFalse(node);
21040
21593
  };
@@ -21353,22 +21906,37 @@
21353
21906
  };
21354
21907
  var GetSelectionContent = { getContent: getContent };
21355
21908
 
21909
+ var setupArgs = function (args, content) {
21910
+ return __assign(__assign({ format: 'html' }, args), {
21911
+ set: true,
21912
+ selection: true,
21913
+ content: content
21914
+ });
21915
+ };
21916
+ var cleanContent = function (editor, args) {
21917
+ if (args.format !== 'raw') {
21918
+ var node = editor.parser.parse(args.content, __assign({
21919
+ isRootContent: true,
21920
+ forced_root_block: false
21921
+ }, args));
21922
+ return HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(node);
21923
+ } else {
21924
+ return args.content;
21925
+ }
21926
+ };
21356
21927
  var setContent = function (editor, content, args) {
21928
+ var contentArgs = setupArgs(args, content);
21357
21929
  var rng = editor.selection.getRng(), caretNode;
21358
21930
  var doc = editor.getDoc();
21359
21931
  var frag, temp;
21360
- args = args || { format: 'html' };
21361
- args.set = true;
21362
- args.selection = true;
21363
- args.content = content;
21364
- if (!args.no_events) {
21365
- args = editor.fire('BeforeSetContent', args);
21366
- if (args.isDefaultPrevented()) {
21367
- editor.fire('SetContent', args);
21932
+ if (!contentArgs.no_events) {
21933
+ contentArgs = editor.fire('BeforeSetContent', contentArgs);
21934
+ if (contentArgs.isDefaultPrevented()) {
21935
+ editor.fire('SetContent', contentArgs);
21368
21936
  return;
21369
21937
  }
21370
21938
  }
21371
- content = args.content;
21939
+ content = cleanContent(editor, contentArgs);
21372
21940
  if (rng.insertNode) {
21373
21941
  content += '<span id="__caret">_</span>';
21374
21942
  if (rng.startContainer === doc && rng.endContainer === doc) {
@@ -21400,19 +21968,20 @@
21400
21968
  } catch (ex) {
21401
21969
  }
21402
21970
  } else {
21403
- if (rng.item) {
21971
+ var anyRng = rng;
21972
+ if (anyRng.item) {
21404
21973
  doc.execCommand('Delete', false, null);
21405
- rng = editor.getRng();
21974
+ anyRng = editor.selection.getRng();
21406
21975
  }
21407
21976
  if (/^\s+/.test(content)) {
21408
- rng.pasteHTML('<span id="__mce_tmp">_</span>' + content);
21977
+ anyRng.pasteHTML('<span id="__mce_tmp">_</span>' + content);
21409
21978
  editor.dom.remove('__mce_tmp');
21410
21979
  } else {
21411
- rng.pasteHTML(content);
21980
+ anyRng.pasteHTML(content);
21412
21981
  }
21413
21982
  }
21414
- if (!args.no_events) {
21415
- editor.fire('SetContent', args);
21983
+ if (!contentArgs.no_events) {
21984
+ editor.fire('SetContent', contentArgs);
21416
21985
  }
21417
21986
  };
21418
21987
  var SetSelectionContent = { setContent: setContent };
@@ -21428,7 +21997,7 @@
21428
21997
  return elm.dom();
21429
21998
  }).getOr(root);
21430
21999
  };
21431
- var getStart = function (root, rng, real) {
22000
+ var getStart$2 = function (root, rng, real) {
21432
22001
  return getEndpointElement(root, rng, true, real, function (elm, offset) {
21433
22002
  return Math.min(childNodesCount(elm), offset);
21434
22003
  });
@@ -21488,7 +22057,7 @@
21488
22057
  var node, root;
21489
22058
  var selectedBlocks = [];
21490
22059
  root = dom.getRoot();
21491
- startElm = dom.getParent(startElm || getStart(root, rng, rng.collapsed), dom.isBlock);
22060
+ startElm = dom.getParent(startElm || getStart$2(root, rng, rng.collapsed), dom.isBlock);
21492
22061
  endElm = dom.getParent(endElm || getEnd(root, rng, rng.collapsed), dom.isBlock);
21493
22062
  if (startElm && startElm !== root) {
21494
22063
  selectedBlocks.push(startElm);
@@ -21537,7 +22106,7 @@
21537
22106
  return isAttachedToDom(rng.startContainer) && isAttachedToDom(rng.endContainer);
21538
22107
  }
21539
22108
  };
21540
- var Selection = function (dom, win, serializer, editor) {
22109
+ var Selection$1 = function (dom, win, serializer, editor) {
21541
22110
  var bookmarkManager, controlSelection;
21542
22111
  var selectedRange, explicitRange, selectorChangedData;
21543
22112
  var setCursorLocation = function (node, offset) {
@@ -21558,8 +22127,8 @@
21558
22127
  var setContent = function (content, args) {
21559
22128
  return SetSelectionContent.setContent(editor, content, args);
21560
22129
  };
21561
- var getStart$1 = function (real) {
21562
- return getStart(editor.getBody(), getRng(), real);
22130
+ var getStart = function (real) {
22131
+ return getStart$2(editor.getBody(), getRng(), real);
21563
22132
  };
21564
22133
  var getEnd$1 = function (real) {
21565
22134
  return getEnd(editor.getBody(), getRng(), real);
@@ -21617,7 +22186,7 @@
21617
22186
  }
21618
22187
  }
21619
22188
  try {
21620
- if (selection = getSel()) {
22189
+ if ((selection = getSel()) && !NodeType.isRestrictedNode(selection.anchorNode)) {
21621
22190
  if (selection.rangeCount > 0) {
21622
22191
  rng = selection.getRangeAt(0);
21623
22192
  } else {
@@ -21824,7 +22393,7 @@
21824
22393
  getSel: getSel,
21825
22394
  setRng: setRng,
21826
22395
  getRng: getRng,
21827
- getStart: getStart$1,
22396
+ getStart: getStart,
21828
22397
  getEnd: getEnd$1,
21829
22398
  getSelectedBlocks: getSelectedBlocks$1,
21830
22399
  normalize: normalize,
@@ -21920,10 +22489,7 @@
21920
22489
  return acc.fold(function () {
21921
22490
  return Option.some(newPos);
21922
22491
  }, function (lastPos) {
21923
- return liftN([
21924
- head(lastPos.getClientRects()),
21925
- head(newPos.getClientRects())
21926
- ], function (lastRect, newRect) {
22492
+ return lift2(head(lastPos.getClientRects()), head(newPos.getClientRects()), function (lastRect, newRect) {
21927
22493
  var lastDist = Math.abs(x - lastRect.left);
21928
22494
  var newDist = Math.abs(x - newRect.left);
21929
22495
  return newDist <= lastDist ? newPos : lastPos;
@@ -22104,7 +22670,7 @@
22104
22670
  return function () {
22105
22671
  var newRng = getHorizontalRange(editor, forward);
22106
22672
  if (newRng) {
22107
- editor.selection.setRng(newRng);
22673
+ moveToRange(editor, newRng);
22108
22674
  return true;
22109
22675
  } else {
22110
22676
  return false;
@@ -22115,7 +22681,7 @@
22115
22681
  return function () {
22116
22682
  var newRng = getVerticalRange(editor, down);
22117
22683
  if (newRng) {
22118
- editor.selection.setRng(newRng);
22684
+ moveToRange(editor, newRng);
22119
22685
  return true;
22120
22686
  } else {
22121
22687
  return false;
@@ -22217,10 +22783,6 @@
22217
22783
  });
22218
22784
  };
22219
22785
 
22220
- var moveToRange = function (editor, rng) {
22221
- editor.selection.setRng(rng);
22222
- ScrollIntoView.scrollRangeIntoView(editor, rng);
22223
- };
22224
22786
  var hasNextBreak = function (getPositionsUntil, scope, lineInfo) {
22225
22787
  return lineInfo.breakAt.map(function (breakPos) {
22226
22788
  return getPositionsUntil(scope, breakPos).breakAt.isSome();
@@ -22332,7 +22894,7 @@
22332
22894
  return function () {
22333
22895
  return Option.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) {
22334
22896
  return Option.from(editor.dom.getParent(td, 'table')).map(function (table) {
22335
- return navigateHorizontally(editor, forward, table, td);
22897
+ return navigateHorizontally(editor, forward, table);
22336
22898
  });
22337
22899
  }).getOr(false);
22338
22900
  };
@@ -22871,10 +23433,41 @@
22871
23433
  }
22872
23434
  return parent !== root ? editableRoot : root;
22873
23435
  };
23436
+ var applyAttributes = function (editor, node, forcedRootBlockAttrs) {
23437
+ Option.from(forcedRootBlockAttrs.style).map(editor.dom.parseStyle).each(function (attrStyles) {
23438
+ var currentStyles = getAllRaw(Element.fromDom(node));
23439
+ var newStyles = __assign(__assign({}, currentStyles), attrStyles);
23440
+ editor.dom.setStyles(node, newStyles);
23441
+ });
23442
+ var attrClassesOpt = Option.from(forcedRootBlockAttrs.class).map(function (attrClasses) {
23443
+ return attrClasses.split(/\s+/);
23444
+ });
23445
+ var currentClassesOpt = Option.from(node.className).map(function (currentClasses) {
23446
+ return filter(currentClasses.split(/\s+/), function (clazz) {
23447
+ return clazz !== '';
23448
+ });
23449
+ });
23450
+ lift2(attrClassesOpt, currentClassesOpt, function (attrClasses, currentClasses) {
23451
+ var filteredClasses = filter(currentClasses, function (clazz) {
23452
+ return !contains(attrClasses, clazz);
23453
+ });
23454
+ var newClasses = __spreadArrays(attrClasses, filteredClasses);
23455
+ editor.dom.setAttrib(node, 'class', newClasses.join(' '));
23456
+ });
23457
+ var appliedAttrs = [
23458
+ 'style',
23459
+ 'class'
23460
+ ];
23461
+ var remainingAttrs = bifilter(forcedRootBlockAttrs, function (_, attrs) {
23462
+ return !contains(appliedAttrs, attrs);
23463
+ }).t;
23464
+ editor.dom.setAttribs(node, remainingAttrs);
23465
+ };
22874
23466
  var setForcedBlockAttrs = function (editor, node) {
22875
23467
  var forcedRootBlockName = Settings.getForcedRootBlock(editor);
22876
23468
  if (forcedRootBlockName && forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) {
22877
- editor.dom.setAttribs(node, Settings.getForcedRootBlockAttrs(editor));
23469
+ var forcedRootBlockAttrs = Settings.getForcedRootBlockAttrs(editor);
23470
+ applyAttributes(editor, node, forcedRootBlockAttrs);
22878
23471
  }
22879
23472
  };
22880
23473
  var wrapSelfAndSiblingsInDefaultBlock = function (editor, newBlockName, rng, container, offset) {
@@ -22940,7 +23533,6 @@
22940
23533
  var textInlineElements = schema.getTextInlineElements();
22941
23534
  if (name || parentBlockName === 'TABLE' || parentBlockName === 'HR') {
22942
23535
  block = dom.create(name || newBlockName);
22943
- setForcedBlockAttrs(editor, block);
22944
23536
  } else {
22945
23537
  block = parentBlock.cloneNode(false);
22946
23538
  }
@@ -22966,6 +23558,7 @@
22966
23558
  }
22967
23559
  } while ((node = node.parentNode) && node !== editableRoot);
22968
23560
  }
23561
+ setForcedBlockAttrs(editor, block);
22969
23562
  emptyBlock(caretNode);
22970
23563
  return block;
22971
23564
  };
@@ -23072,6 +23665,7 @@
23072
23665
  if (dom.isEmpty(parentBlock)) {
23073
23666
  emptyBlock(parentBlock);
23074
23667
  }
23668
+ setForcedBlockAttrs(editor, newBlock);
23075
23669
  NewLineUtils.moveToCaretPosition(editor, newBlock);
23076
23670
  } else if (isCaretAtStartOrEndOfBlock()) {
23077
23671
  insertNewBlockAfter();
@@ -23096,6 +23690,7 @@
23096
23690
  dom.remove(newBlock);
23097
23691
  insertNewBlockAfter();
23098
23692
  } else {
23693
+ setForcedBlockAttrs(editor, newBlock);
23099
23694
  NewLineUtils.moveToCaretPosition(editor, newBlock);
23100
23695
  }
23101
23696
  }
@@ -23282,9 +23877,20 @@
23282
23877
  var navigateIgnoreEmptyTextNodes = function (forward, root, from) {
23283
23878
  return CaretFinder.navigateIgnore(forward, root, from, isEmptyText);
23284
23879
  };
23880
+ var getClosestBlock = function (root, pos) {
23881
+ return find(Parents.parentsAndSelf(Element.fromDom(pos.container()), root), isBlock);
23882
+ };
23883
+ var isAtBeforeAfterBlockBoundary = function (forward, root, pos) {
23884
+ return navigateIgnoreEmptyTextNodes(forward, root.dom(), pos).forall(function (newPos) {
23885
+ return getClosestBlock(root, pos).fold(function () {
23886
+ return isInSameBlock(newPos, pos, root.dom()) === false;
23887
+ }, function (fromBlock) {
23888
+ return isInSameBlock(newPos, pos, root.dom()) === false && contains$3(fromBlock, Element.fromDom(newPos.container()));
23889
+ });
23890
+ });
23891
+ };
23285
23892
  var isAtBlockBoundary = function (forward, root, pos) {
23286
- var parentBlocks = filter(Parents.parentsAndSelf(Element.fromDom(pos.container()), root), isBlock);
23287
- return head(parentBlocks).fold(function () {
23893
+ return getClosestBlock(root, pos).fold(function () {
23288
23894
  return navigateIgnoreEmptyTextNodes(forward, root.dom(), pos).forall(function (newPos) {
23289
23895
  return isInSameBlock(newPos, pos, root.dom()) === false;
23290
23896
  });
@@ -23294,12 +23900,14 @@
23294
23900
  };
23295
23901
  var isAtStartOfBlock = curry(isAtBlockBoundary, false);
23296
23902
  var isAtEndOfBlock = curry(isAtBlockBoundary, true);
23903
+ var isBeforeBlock = curry(isAtBeforeAfterBlockBoundary, false);
23904
+ var isAfterBlock = curry(isAtBeforeAfterBlockBoundary, true);
23297
23905
 
23298
23906
  var nbsp = '\xA0';
23299
23907
  var isInMiddleOfText = function (pos) {
23300
23908
  return CaretPosition.isTextPosition(pos) && !pos.isAtStart() && !pos.isAtEnd();
23301
23909
  };
23302
- var getClosestBlock = function (root, pos) {
23910
+ var getClosestBlock$1 = function (root, pos) {
23303
23911
  var parentBlocks = filter(Parents.parentsAndSelf(Element.fromDom(pos.container()), root), isBlock);
23304
23912
  return head(parentBlocks).getOr(root);
23305
23913
  };
@@ -23307,20 +23915,19 @@
23307
23915
  if (isInMiddleOfText(pos)) {
23308
23916
  return isAfterSpace(pos);
23309
23917
  } else {
23310
- return isAfterSpace(pos) || CaretFinder.prevPosition(getClosestBlock(root, pos).dom(), pos).exists(isAfterSpace);
23918
+ return isAfterSpace(pos) || CaretFinder.prevPosition(getClosestBlock$1(root, pos).dom(), pos).exists(isAfterSpace);
23311
23919
  }
23312
23920
  };
23313
23921
  var hasSpaceAfter = function (root, pos) {
23314
23922
  if (isInMiddleOfText(pos)) {
23315
23923
  return isBeforeSpace(pos);
23316
23924
  } else {
23317
- return isBeforeSpace(pos) || CaretFinder.nextPosition(getClosestBlock(root, pos).dom(), pos).exists(isBeforeSpace);
23925
+ return isBeforeSpace(pos) || CaretFinder.nextPosition(getClosestBlock$1(root, pos).dom(), pos).exists(isBeforeSpace);
23318
23926
  }
23319
23927
  };
23320
23928
  var isPreValue = function (value) {
23321
23929
  return contains([
23322
23930
  'pre',
23323
- 'pre-line',
23324
23931
  'pre-wrap'
23325
23932
  ], value);
23326
23933
  };
@@ -23351,7 +23958,7 @@
23351
23958
  if (isInPre(pos)) {
23352
23959
  return false;
23353
23960
  } else {
23354
- return isAtStartOfBlock(root, pos) || isAfterBr(root, pos) || hasSpaceBefore(root, pos);
23961
+ return isAtStartOfBlock(root, pos) || isBeforeBlock(root, pos) || isAfterBr(root, pos) || hasSpaceBefore(root, pos);
23355
23962
  }
23356
23963
  };
23357
23964
  var leanRight = function (pos) {
@@ -23368,7 +23975,7 @@
23368
23975
  if (isInPre(afterPos)) {
23369
23976
  return false;
23370
23977
  } else {
23371
- return isAtEndOfBlock(root, afterPos) || isBeforeBr(root, afterPos) || hasSpaceAfter(root, afterPos);
23978
+ return isAtEndOfBlock(root, afterPos) || isAfterBlock(root, afterPos) || isBeforeBr(root, afterPos) || hasSpaceAfter(root, afterPos);
23372
23979
  }
23373
23980
  };
23374
23981
  var needsToBeNbsp = function (root, pos) {
@@ -23382,7 +23989,8 @@
23382
23989
  return NodeType.isText(container) && contains$2(container.data, nbsp);
23383
23990
  };
23384
23991
  var normalizeNbspMiddle = function (text) {
23385
- return map(text.split(''), function (chr, i, chars) {
23992
+ var chars = text.split('');
23993
+ return map(chars, function (chr, i) {
23386
23994
  if (isNbsp(chr) && i > 0 && i < chars.length - 1 && isContent$1(chars[i - 1]) && isContent$1(chars[i + 1])) {
23387
23995
  return ' ';
23388
23996
  } else {
@@ -24224,7 +24832,7 @@
24224
24832
  });
24225
24833
  editor.parser = createParser(editor);
24226
24834
  editor.serializer = DomSerializer$1(settings, editor);
24227
- editor.selection = Selection(editor.dom, editor.getWin(), editor.serializer, editor);
24835
+ editor.selection = Selection$1(editor.dom, editor.getWin(), editor.serializer, editor);
24228
24836
  editor.annotator = Annotator(editor);
24229
24837
  editor.formatter = Formatter(editor);
24230
24838
  editor.undoManager = UndoManager(editor);
@@ -25773,15 +26381,15 @@
25773
26381
  defaultSettings: {},
25774
26382
  $: DomQuery,
25775
26383
  majorVersion: '4',
25776
- minorVersion: '9.4',
25777
- releaseDate: '2019-03-20',
26384
+ minorVersion: '9.11',
26385
+ releaseDate: '2020-07-13',
25778
26386
  editors: legacyEditors,
25779
26387
  i18n: I18n,
25780
26388
  activeEditor: null,
25781
26389
  settings: {},
25782
26390
  setup: function () {
25783
26391
  var self = this;
25784
- var baseURL, documentBaseURL, suffix = '', preInit, src;
26392
+ var baseURL, documentBaseURL, suffix = '';
25785
26393
  documentBaseURL = URI.getDocumentBaseUrl(domGlobals.document.location);
25786
26394
  if (/^[^:]+:\/\/\/?[^\/]+\//.test(documentBaseURL)) {
25787
26395
  documentBaseURL = documentBaseURL.replace(/[\?#].*$/, '').replace(/[\/\\][^\/]+$/, '');
@@ -25789,14 +26397,17 @@
25789
26397
  documentBaseURL += '/';
25790
26398
  }
25791
26399
  }
25792
- preInit = window.tinymce || window.tinyMCEPreInit;
26400
+ var preInit = window.tinymce || window.tinyMCEPreInit;
25793
26401
  if (preInit) {
25794
26402
  baseURL = preInit.base || preInit.baseURL;
25795
26403
  suffix = preInit.suffix;
25796
26404
  } else {
25797
26405
  var scripts = domGlobals.document.getElementsByTagName('script');
25798
26406
  for (var i = 0; i < scripts.length; i++) {
25799
- src = scripts[i].src;
26407
+ var src = scripts[i].src || '';
26408
+ if (src === '') {
26409
+ continue;
26410
+ }
25800
26411
  var srcScript = src.substring(src.lastIndexOf('/'));
25801
26412
  if (/tinymce(\.full|\.jquery|)(\.min|\.dev|)\.js/.test(src)) {
25802
26413
  if (srcScript.indexOf('.min') !== -1) {
@@ -25807,7 +26418,7 @@
25807
26418
  }
25808
26419
  }
25809
26420
  if (!baseURL && domGlobals.document.currentScript) {
25810
- src = domGlobals.document.currentScript.src;
26421
+ var src = domGlobals.document.currentScript.src;
25811
26422
  if (src.indexOf('.min') !== -1) {
25812
26423
  suffix = '.min';
25813
26424
  }
@@ -26171,7 +26782,7 @@
26171
26782
  if (rel[4] === 'c') {
26172
26783
  x -= round$2(w / 2);
26173
26784
  }
26174
- return create$3(x, y, w, h);
26785
+ return create$4(x, y, w, h);
26175
26786
  };
26176
26787
  var findBestRelativePosition = function (rect, targetRect, constrainRect, rels) {
26177
26788
  var pos, i;
@@ -26184,7 +26795,7 @@
26184
26795
  return null;
26185
26796
  };
26186
26797
  var inflate = function (rect, w, h) {
26187
- return create$3(rect.x - w, rect.y - h, rect.w + w * 2, rect.h + h * 2);
26798
+ return create$4(rect.x - w, rect.y - h, rect.w + w * 2, rect.h + h * 2);
26188
26799
  };
26189
26800
  var intersect = function (rect, cropRect) {
26190
26801
  var x1, y1, x2, y2;
@@ -26195,7 +26806,7 @@
26195
26806
  if (x2 - x1 < 0 || y2 - y1 < 0) {
26196
26807
  return null;
26197
26808
  }
26198
- return create$3(x1, y1, x2 - x1, y2 - y1);
26809
+ return create$4(x1, y1, x2 - x1, y2 - y1);
26199
26810
  };
26200
26811
  var clamp$1 = function (rect, clampRect, fixedSize) {
26201
26812
  var underflowX1, underflowY1, overflowX2, overflowY2, x1, y1, x2, y2, cx2, cy2;
@@ -26219,9 +26830,9 @@
26219
26830
  }
26220
26831
  x2 -= overflowX2;
26221
26832
  y2 -= overflowY2;
26222
- return create$3(x1, y1, x2 - x1, y2 - y1);
26833
+ return create$4(x1, y1, x2 - x1, y2 - y1);
26223
26834
  };
26224
- var create$3 = function (x, y, w, h) {
26835
+ var create$4 = function (x, y, w, h) {
26225
26836
  return {
26226
26837
  x: x,
26227
26838
  y: y,
@@ -26230,7 +26841,7 @@
26230
26841
  };
26231
26842
  };
26232
26843
  var fromClientRect = function (clientRect) {
26233
- return create$3(clientRect.left, clientRect.top, clientRect.width, clientRect.height);
26844
+ return create$4(clientRect.left, clientRect.top, clientRect.width, clientRect.height);
26234
26845
  };
26235
26846
  var Rect = {
26236
26847
  inflate: inflate,
@@ -26238,7 +26849,7 @@
26238
26849
  findBestRelativePosition: findBestRelativePosition,
26239
26850
  intersect: intersect,
26240
26851
  clamp: clamp$1,
26241
- create: create$3,
26852
+ create: create$4,
26242
26853
  fromClientRect: fromClientRect
26243
26854
  };
26244
26855
 
@@ -26676,7 +27287,7 @@
26676
27287
  }
26677
27288
  };
26678
27289
 
26679
- var create$4 = function () {
27290
+ var create$5 = function () {
26680
27291
  return function () {
26681
27292
  var data = {};
26682
27293
  var keys = [];
@@ -26719,7 +27330,7 @@
26719
27330
  try {
26720
27331
  localStorage = domGlobals.window.localStorage;
26721
27332
  } catch (e) {
26722
- localStorage = create$4();
27333
+ localStorage = create$5();
26723
27334
  }
26724
27335
  var LocalStorage = localStorage;
26725
27336
 
@@ -26754,7 +27365,7 @@
26754
27365
  Serializer: DomSerializer$1,
26755
27366
  ControlSelection: ControlSelection,
26756
27367
  BookmarkManager: BookmarkManager$1,
26757
- Selection: Selection,
27368
+ Selection: Selection$1,
26758
27369
  Event: EventUtils.Event
26759
27370
  },
26760
27371
  html: {