· 6 years ago · Apr 13, 2019, 02:42 PM
1/* eslint-disable */
2
3// In order to make this script work, You need to enqueue this in admin area
4// Place code belllow in Your mu-plugin/plugin or theme functions file
5//
6// add_action( 'admin_enqueue_scripts', function () {
7// wp_enqueue_script(SCRIPT_SLUG_NAME, URL_PATH_TO_SCRIPT, ['jquery'], null, true);
8// }, 100);
9
10jQuery(document).on('tinymce-editor-setup', function (event, editor) {
11
12 var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
13
14 var noop = function () {
15 var x = [];
16 for (var _i = 0; _i < arguments.length; _i++) {
17 x[_i] = arguments[_i];
18 }
19 };
20 var noarg = function (f) {
21 return function () {
22 var x = [];
23 for (var _i = 0; _i < arguments.length; _i++) {
24 x[_i] = arguments[_i];
25 }
26 return f();
27 };
28 };
29 var compose = function (fa, fb) {
30 return function () {
31 var x = [];
32 for (var _i = 0; _i < arguments.length; _i++) {
33 x[_i] = arguments[_i];
34 }
35 return fa(fb.apply(null, arguments));
36 };
37 };
38 var constant = function (value) {
39 return function () {
40 return value;
41 };
42 };
43 var identity = function (x) {
44 return x;
45 };
46 var tripleEquals = function (a, b) {
47 return a === b;
48 };
49 var curry = function (f) {
50 var x = [];
51 for (var _i = 1; _i < arguments.length; _i++) {
52 x[_i - 1] = arguments[_i];
53 }
54 var args = new Array(arguments.length - 1);
55 for (var i = 1; i < arguments.length; i++)
56 args[i - 1] = arguments[i];
57 return function () {
58 var x = [];
59 for (var _i = 0; _i < arguments.length; _i++) {
60 x[_i] = arguments[_i];
61 }
62 var newArgs = new Array(arguments.length);
63 for (var j = 0; j < newArgs.length; j++)
64 newArgs[j] = arguments[j];
65 var all = args.concat(newArgs);
66 return f.apply(null, all);
67 };
68 };
69 var not = function (f) {
70 return function () {
71 var x = [];
72 for (var _i = 0; _i < arguments.length; _i++) {
73 x[_i] = arguments[_i];
74 }
75 return !f.apply(null, arguments);
76 };
77 };
78 var die = function (msg) {
79 return function () {
80 throw new Error(msg);
81 };
82 };
83 var apply = function (f) {
84 return f();
85 };
86 var call = function (f) {
87 f();
88 };
89 var never = constant(false);
90 var always = constant(true);
91 var $_20nfr6k7jfuw8q4g = {
92 noop: noop,
93 noarg: noarg,
94 compose: compose,
95 constant: constant,
96 identity: identity,
97 tripleEquals: tripleEquals,
98 curry: curry,
99 not: not,
100 die: die,
101 apply: apply,
102 call: call,
103 never: never,
104 always: always
105 };
106
107 var never$1 = $_20nfr6k7jfuw8q4g.never;
108 var always$1 = $_20nfr6k7jfuw8q4g.always;
109 var none = function () {
110 return NONE;
111 };
112 var NONE = function () {
113 var eq = function (o) {
114 return o.isNone();
115 };
116 var call = function (thunk) {
117 return thunk();
118 };
119 var id = function (n) {
120 return n;
121 };
122 var noop = function () {
123 };
124 var me = {
125 fold: function (n, s) {
126 return n();
127 },
128 is: never$1,
129 isSome: never$1,
130 isNone: always$1,
131 getOr: id,
132 getOrThunk: call,
133 getOrDie: function (msg) {
134 throw new Error(msg || 'error: getOrDie called on none.');
135 },
136 or: id,
137 orThunk: call,
138 map: none,
139 ap: none,
140 each: noop,
141 bind: none,
142 flatten: none,
143 exists: never$1,
144 forall: always$1,
145 filter: none,
146 equals: eq,
147 equals_: eq,
148 toArray: function () {
149 return [];
150 },
151 toString: $_20nfr6k7jfuw8q4g.constant('none()')
152 };
153 if (Object.freeze)
154 Object.freeze(me);
155 return me;
156 }();
157 var some = function (a) {
158 var constant_a = function () {
159 return a;
160 };
161 var self = function () {
162 return me;
163 };
164 var map = function (f) {
165 return some(f(a));
166 };
167 var bind = function (f) {
168 return f(a);
169 };
170 var me = {
171 fold: function (n, s) {
172 return s(a);
173 },
174 is: function (v) {
175 return a === v;
176 },
177 isSome: always$1,
178 isNone: never$1,
179 getOr: constant_a,
180 getOrThunk: constant_a,
181 getOrDie: constant_a,
182 or: self,
183 orThunk: self,
184 map: map,
185 ap: function (optfab) {
186 return optfab.fold(none, function (fab) {
187 return some(fab(a));
188 });
189 },
190 each: function (f) {
191 f(a);
192 },
193 bind: bind,
194 flatten: constant_a,
195 exists: bind,
196 forall: bind,
197 filter: function (f) {
198 return f(a) ? me : NONE;
199 },
200 equals: function (o) {
201 return o.is(a);
202 },
203 equals_: function (o, elementEq) {
204 return o.fold(never$1, function (b) {
205 return elementEq(a, b);
206 });
207 },
208 toArray: function () {
209 return [a];
210 },
211 toString: function () {
212 return 'some(' + a + ')';
213 }
214 };
215 return me;
216 };
217 var from = function (value) {
218 return value === null || value === undefined ? NONE : some(value);
219 };
220 var Option = {
221 some: some,
222 none: none,
223 from: from
224 };
225
226 var typeOf = function (x) {
227 if (x === null)
228 return 'null';
229 var t = typeof x;
230 if (t === 'object' && Array.prototype.isPrototypeOf(x))
231 return 'array';
232 if (t === 'object' && String.prototype.isPrototypeOf(x))
233 return 'string';
234 return t;
235 };
236 var isType = function (type) {
237 return function (value) {
238 return typeOf(value) === type;
239 };
240 };
241 var $_g6mvnrk8jfuw8q4k = {
242 isString: isType('string'),
243 isObject: isType('object'),
244 isArray: isType('array'),
245 isNull: isType('null'),
246 isBoolean: isType('boolean'),
247 isUndefined: isType('undefined'),
248 isFunction: isType('function'),
249 isNumber: isType('number')
250 };
251
252 var rawIndexOf = function () {
253 var pIndexOf = Array.prototype.indexOf;
254 var fastIndex = function (xs, x) {
255 return pIndexOf.call(xs, x);
256 };
257 var slowIndex = function (xs, x) {
258 return slowIndexOf(xs, x);
259 };
260 return pIndexOf === undefined ? slowIndex : fastIndex;
261 }();
262 var indexOf = function (xs, x) {
263 var r = rawIndexOf(xs, x);
264 return r === -1 ? Option.none() : Option.some(r);
265 };
266 var contains = function (xs, x) {
267 return rawIndexOf(xs, x) > -1;
268 };
269 var exists = function (xs, pred) {
270 return findIndex(xs, pred).isSome();
271 };
272 var range = function (num, f) {
273 var r = [];
274 for (var i = 0; i < num; i++) {
275 r.push(f(i));
276 }
277 return r;
278 };
279 var chunk = function (array, size) {
280 var r = [];
281 for (var i = 0; i < array.length; i += size) {
282 var s = array.slice(i, i + size);
283 r.push(s);
284 }
285 return r;
286 };
287 var map = function (xs, f) {
288 var len = xs.length;
289 var r = new Array(len);
290 for (var i = 0; i < len; i++) {
291 var x = xs[i];
292 r[i] = f(x, i, xs);
293 }
294 return r;
295 };
296 var each = function (xs, f) {
297 for (var i = 0, len = xs.length; i < len; i++) {
298 var x = xs[i];
299 f(x, i, xs);
300 }
301 };
302 var eachr = function (xs, f) {
303 for (var i = xs.length - 1; i >= 0; i--) {
304 var x = xs[i];
305 f(x, i, xs);
306 }
307 };
308 var partition = function (xs, pred) {
309 var pass = [];
310 var fail = [];
311 for (var i = 0, len = xs.length; i < len; i++) {
312 var x = xs[i];
313 var arr = pred(x, i, xs) ? pass : fail;
314 arr.push(x);
315 }
316 return {
317 pass: pass,
318 fail: fail
319 };
320 };
321 var filter = function (xs, pred) {
322 var r = [];
323 for (var i = 0, len = xs.length; i < len; i++) {
324 var x = xs[i];
325 if (pred(x, i, xs)) {
326 r.push(x);
327 }
328 }
329 return r;
330 };
331 var groupBy = function (xs, f) {
332 if (xs.length === 0) {
333 return [];
334 } else {
335 var wasType = f(xs[0]);
336 var r = [];
337 var group = [];
338 for (var i = 0, len = xs.length; i < len; i++) {
339 var x = xs[i];
340 var type = f(x);
341 if (type !== wasType) {
342 r.push(group);
343 group = [];
344 }
345 wasType = type;
346 group.push(x);
347 }
348 if (group.length !== 0) {
349 r.push(group);
350 }
351 return r;
352 }
353 };
354 var foldr = function (xs, f, acc) {
355 eachr(xs, function (x) {
356 acc = f(acc, x);
357 });
358 return acc;
359 };
360 var foldl = function (xs, f, acc) {
361 each(xs, function (x) {
362 acc = f(acc, x);
363 });
364 return acc;
365 };
366 var find = function (xs, pred) {
367 for (var i = 0, len = xs.length; i < len; i++) {
368 var x = xs[i];
369 if (pred(x, i, xs)) {
370 return Option.some(x);
371 }
372 }
373 return Option.none();
374 };
375 var findIndex = function (xs, pred) {
376 for (var i = 0, len = xs.length; i < len; i++) {
377 var x = xs[i];
378 if (pred(x, i, xs)) {
379 return Option.some(i);
380 }
381 }
382 return Option.none();
383 };
384 var slowIndexOf = function (xs, x) {
385 for (var i = 0, len = xs.length; i < len; ++i) {
386 if (xs[i] === x) {
387 return i;
388 }
389 }
390 return -1;
391 };
392 var push = Array.prototype.push;
393 var flatten = function (xs) {
394 var r = [];
395 for (var i = 0, len = xs.length; i < len; ++i) {
396 if (!Array.prototype.isPrototypeOf(xs[i]))
397 throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);
398 push.apply(r, xs[i]);
399 }
400 return r;
401 };
402 var bind = function (xs, f) {
403 var output = map(xs, f);
404 return flatten(output);
405 };
406 var forall = function (xs, pred) {
407 for (var i = 0, len = xs.length; i < len; ++i) {
408 var x = xs[i];
409 if (pred(x, i, xs) !== true) {
410 return false;
411 }
412 }
413 return true;
414 };
415 var equal = function (a1, a2) {
416 return a1.length === a2.length && forall(a1, function (x, i) {
417 return x === a2[i];
418 });
419 };
420 var slice = Array.prototype.slice;
421 var reverse = function (xs) {
422 var r = slice.call(xs, 0);
423 r.reverse();
424 return r;
425 };
426 var difference = function (a1, a2) {
427 return filter(a1, function (x) {
428 return !contains(a2, x);
429 });
430 };
431 var mapToObject = function (xs, f) {
432 var r = {};
433 for (var i = 0, len = xs.length; i < len; i++) {
434 var x = xs[i];
435 r[String(x)] = f(x, i);
436 }
437 return r;
438 };
439 var pure = function (x) {
440 return [x];
441 };
442 var sort = function (xs, comparator) {
443 var copy = slice.call(xs, 0);
444 copy.sort(comparator);
445 return copy;
446 };
447 var head = function (xs) {
448 return xs.length === 0 ? Option.none() : Option.some(xs[0]);
449 };
450 var last = function (xs) {
451 return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);
452 };
453 var from$1 = $_g6mvnrk8jfuw8q4k.isFunction(Array.from) ? Array.from : function (x) {
454 return slice.call(x);
455 };
456 var $_tyr3yk5jfuw8q47 = {
457 map: map,
458 each: each,
459 eachr: eachr,
460 partition: partition,
461 filter: filter,
462 groupBy: groupBy,
463 indexOf: indexOf,
464 foldr: foldr,
465 foldl: foldl,
466 find: find,
467 findIndex: findIndex,
468 flatten: flatten,
469 bind: bind,
470 forall: forall,
471 exists: exists,
472 contains: contains,
473 equal: equal,
474 reverse: reverse,
475 chunk: chunk,
476 difference: difference,
477 mapToObject: mapToObject,
478 pure: pure,
479 sort: sort,
480 range: range,
481 head: head,
482 last: last,
483 from: from$1
484 };
485
486 var keys = function () {
487 var fastKeys = Object.keys;
488 var slowKeys = function (o) {
489 var r = [];
490 for (var i in o) {
491 if (o.hasOwnProperty(i)) {
492 r.push(i);
493 }
494 }
495 return r;
496 };
497 return fastKeys === undefined ? slowKeys : fastKeys;
498 }();
499 var each$1 = function (obj, f) {
500 var props = keys(obj);
501 for (var k = 0, len = props.length; k < len; k++) {
502 var i = props[k];
503 var x = obj[i];
504 f(x, i, obj);
505 }
506 };
507 var objectMap = function (obj, f) {
508 return tupleMap(obj, function (x, i, obj) {
509 return {
510 k: i,
511 v: f(x, i, obj)
512 };
513 });
514 };
515 var tupleMap = function (obj, f) {
516 var r = {};
517 each$1(obj, function (x, i) {
518 var tuple = f(x, i, obj);
519 r[tuple.k] = tuple.v;
520 });
521 return r;
522 };
523 var bifilter = function (obj, pred) {
524 var t = {};
525 var f = {};
526 each$1(obj, function (x, i) {
527 var branch = pred(x, i) ? t : f;
528 branch[i] = x;
529 });
530 return {
531 t: t,
532 f: f
533 };
534 };
535 var mapToArray = function (obj, f) {
536 var r = [];
537 each$1(obj, function (value, name) {
538 r.push(f(value, name));
539 });
540 return r;
541 };
542 var find$1 = function (obj, pred) {
543 var props = keys(obj);
544 for (var k = 0, len = props.length; k < len; k++) {
545 var i = props[k];
546 var x = obj[i];
547 if (pred(x, i, obj)) {
548 return Option.some(x);
549 }
550 }
551 return Option.none();
552 };
553 var values = function (obj) {
554 return mapToArray(obj, function (v) {
555 return v;
556 });
557 };
558 var size = function (obj) {
559 return values(obj).length;
560 };
561 var $_11yiupkajfuw8q5c = {
562 bifilter: bifilter,
563 each: each$1,
564 map: objectMap,
565 mapToArray: mapToArray,
566 tupleMap: tupleMap,
567 find: find$1,
568 keys: keys,
569 values: values,
570 size: size
571 };
572
573 function Immutable() {
574 var fields = [];
575 for (var _i = 0; _i < arguments.length; _i++) {
576 fields[_i] = arguments[_i];
577 }
578 return function () {
579 var values = [];
580 for (var _i = 0; _i < arguments.length; _i++) {
581 values[_i] = arguments[_i];
582 }
583 if (fields.length !== values.length) {
584 throw new Error('Wrong number of arguments to struct. Expected "[' + fields.length + ']", got ' + values.length + ' arguments');
585 }
586 var struct = {};
587 $_tyr3yk5jfuw8q47.each(fields, function (name, i) {
588 struct[name] = $_20nfr6k7jfuw8q4g.constant(values[i]);
589 });
590 return struct;
591 };
592 }
593
594 var sort$1 = function (arr) {
595 return arr.slice(0).sort();
596 };
597 var reqMessage = function (required, keys) {
598 throw new Error('All required keys (' + sort$1(required).join(', ') + ') were not specified. Specified keys were: ' + sort$1(keys).join(', ') + '.');
599 };
600 var unsuppMessage = function (unsupported) {
601 throw new Error('Unsupported keys for object: ' + sort$1(unsupported).join(', '));
602 };
603 var validateStrArr = function (label, array) {
604 if (!$_g6mvnrk8jfuw8q4k.isArray(array))
605 throw new Error('The ' + label + ' fields must be an array. Was: ' + array + '.');
606 $_tyr3yk5jfuw8q47.each(array, function (a) {
607 if (!$_g6mvnrk8jfuw8q4k.isString(a))
608 throw new Error('The value ' + a + ' in the ' + label + ' fields was not a string.');
609 });
610 };
611 var invalidTypeMessage = function (incorrect, type) {
612 throw new Error('All values need to be of type: ' + type + '. Keys (' + sort$1(incorrect).join(', ') + ') were not.');
613 };
614 var checkDupes = function (everything) {
615 var sorted = sort$1(everything);
616 var dupe = $_tyr3yk5jfuw8q47.find(sorted, function (s, i) {
617 return i < sorted.length - 1 && s === sorted[i + 1];
618 });
619 dupe.each(function (d) {
620 throw new Error('The field: ' + d + ' occurs more than once in the combined fields: [' + sorted.join(', ') + '].');
621 });
622 };
623 var $_2j2nzkkejfuw8q5j = {
624 sort: sort$1,
625 reqMessage: reqMessage,
626 unsuppMessage: unsuppMessage,
627 validateStrArr: validateStrArr,
628 invalidTypeMessage: invalidTypeMessage,
629 checkDupes: checkDupes
630 };
631
632 function MixedBag(required, optional) {
633 var everything = required.concat(optional);
634 if (everything.length === 0)
635 throw new Error('You must specify at least one required or optional field.');
636 $_2j2nzkkejfuw8q5j.validateStrArr('required', required);
637 $_2j2nzkkejfuw8q5j.validateStrArr('optional', optional);
638 $_2j2nzkkejfuw8q5j.checkDupes(everything);
639 return function (obj) {
640 var keys = $_11yiupkajfuw8q5c.keys(obj);
641 var allReqd = $_tyr3yk5jfuw8q47.forall(required, function (req) {
642 return $_tyr3yk5jfuw8q47.contains(keys, req);
643 });
644 if (!allReqd)
645 $_2j2nzkkejfuw8q5j.reqMessage(required, keys);
646 var unsupported = $_tyr3yk5jfuw8q47.filter(keys, function (key) {
647 return !$_tyr3yk5jfuw8q47.contains(everything, key);
648 });
649 if (unsupported.length > 0)
650 $_2j2nzkkejfuw8q5j.unsuppMessage(unsupported);
651 var r = {};
652 $_tyr3yk5jfuw8q47.each(required, function (req) {
653 r[req] = $_20nfr6k7jfuw8q4g.constant(obj[req]);
654 });
655 $_tyr3yk5jfuw8q47.each(optional, function (opt) {
656 r[opt] = $_20nfr6k7jfuw8q4g.constant(Object.prototype.hasOwnProperty.call(obj, opt) ? Option.some(obj[opt]) : Option.none());
657 });
658 return r;
659 };
660 }
661
662 var $_5now9kbjfuw8q5e = {
663 immutable: Immutable,
664 immutableBag: MixedBag
665 };
666
667 var dimensions = $_5now9kbjfuw8q5e.immutable('width', 'height');
668 var grid = $_5now9kbjfuw8q5e.immutable('rows', 'columns');
669 var address = $_5now9kbjfuw8q5e.immutable('row', 'column');
670 var coords = $_5now9kbjfuw8q5e.immutable('x', 'y');
671 var detail = $_5now9kbjfuw8q5e.immutable('element', 'rowspan', 'colspan');
672 var detailnew = $_5now9kbjfuw8q5e.immutable('element', 'rowspan', 'colspan', 'isNew');
673 var extended = $_5now9kbjfuw8q5e.immutable('element', 'rowspan', 'colspan', 'row', 'column');
674 var rowdata = $_5now9kbjfuw8q5e.immutable('element', 'cells', 'section');
675 var elementnew = $_5now9kbjfuw8q5e.immutable('element', 'isNew');
676 var rowdatanew = $_5now9kbjfuw8q5e.immutable('element', 'cells', 'section', 'isNew');
677 var rowcells = $_5now9kbjfuw8q5e.immutable('cells', 'section');
678 var rowdetails = $_5now9kbjfuw8q5e.immutable('details', 'section');
679 var bounds = $_5now9kbjfuw8q5e.immutable('startRow', 'startCol', 'finishRow', 'finishCol');
680 var $_ce5pyrkgjfuw8q5v = {
681 dimensions: dimensions,
682 grid: grid,
683 address: address,
684 coords: coords,
685 extended: extended,
686 detail: detail,
687 detailnew: detailnew,
688 rowdata: rowdata,
689 elementnew: elementnew,
690 rowdatanew: rowdatanew,
691 rowcells: rowcells,
692 rowdetails: rowdetails,
693 bounds: bounds
694 };
695
696 var fromHtml = function (html, scope) {
697 var doc = scope || document;
698 var div = doc.createElement('div');
699 div.innerHTML = html;
700 if (!div.hasChildNodes() || div.childNodes.length > 1) {
701 console.error('HTML does not have a single root node', html);
702 throw 'HTML must have a single root node';
703 }
704 return fromDom(div.childNodes[0]);
705 };
706 var fromTag = function (tag, scope) {
707 var doc = scope || document;
708 var node = doc.createElement(tag);
709 return fromDom(node);
710 };
711 var fromText = function (text, scope) {
712 var doc = scope || document;
713 var node = doc.createTextNode(text);
714 return fromDom(node);
715 };
716 var fromDom = function (node) {
717 if (node === null || node === undefined)
718 throw new Error('Node cannot be null or undefined');
719 return {dom: $_20nfr6k7jfuw8q4g.constant(node)};
720 };
721 var fromPoint = function (doc, x, y) {
722 return Option.from(doc.dom().elementFromPoint(x, y)).map(fromDom);
723 };
724 var $_xbeoqkkjfuw8q73 = {
725 fromHtml: fromHtml,
726 fromTag: fromTag,
727 fromText: fromText,
728 fromDom: fromDom,
729 fromPoint: fromPoint
730 };
731
732 var $_x3hpikljfuw8q78 = {
733 ATTRIBUTE: 2,
734 CDATA_SECTION: 4,
735 COMMENT: 8,
736 DOCUMENT: 9,
737 DOCUMENT_TYPE: 10,
738 DOCUMENT_FRAGMENT: 11,
739 ELEMENT: 1,
740 TEXT: 3,
741 PROCESSING_INSTRUCTION: 7,
742 ENTITY_REFERENCE: 5,
743 ENTITY: 6,
744 NOTATION: 12
745 };
746
747 var ELEMENT = $_x3hpikljfuw8q78.ELEMENT;
748 var DOCUMENT = $_x3hpikljfuw8q78.DOCUMENT;
749 var is = function (element, selector) {
750 var elem = element.dom();
751 if (elem.nodeType !== ELEMENT)
752 return false;
753 else if (elem.matches !== undefined)
754 return elem.matches(selector);
755 else if (elem.msMatchesSelector !== undefined)
756 return elem.msMatchesSelector(selector);
757 else if (elem.webkitMatchesSelector !== undefined)
758 return elem.webkitMatchesSelector(selector);
759 else if (elem.mozMatchesSelector !== undefined)
760 return elem.mozMatchesSelector(selector);
761 else
762 throw new Error('Browser lacks native selectors');
763 };
764 var bypassSelector = function (dom) {
765 return dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT || dom.childElementCount === 0;
766 };
767 var all = function (selector, scope) {
768 var base = scope === undefined ? document : scope.dom();
769 return bypassSelector(base) ? [] : $_tyr3yk5jfuw8q47.map(base.querySelectorAll(selector), $_xbeoqkkjfuw8q73.fromDom);
770 };
771 var one = function (selector, scope) {
772 var base = scope === undefined ? document : scope.dom();
773 return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map($_xbeoqkkjfuw8q73.fromDom);
774 };
775 var $_enn9uikjjfuw8q6w = {
776 all: all,
777 is: is,
778 one: one
779 };
780
781 var toArray = function (target, f) {
782 var r = [];
783 var recurse = function (e) {
784 r.push(e);
785 return f(e);
786 };
787 var cur = f(target);
788 do {
789 cur = cur.bind(recurse);
790 } while (cur.isSome());
791 return r;
792 };
793 var $_myhefknjfuw8q7m = {toArray: toArray};
794
795 var global$1 = typeof window !== 'undefined' ? window : Function('return this;')();
796
797 var path = function (parts, scope) {
798 var o = scope !== undefined && scope !== null ? scope : global$1;
799 for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i)
800 o = o[parts[i]];
801 return o;
802 };
803 var resolve = function (p, scope) {
804 var parts = p.split('.');
805 return path(parts, scope);
806 };
807 var step = function (o, part) {
808 if (o[part] === undefined || o[part] === null)
809 o[part] = {};
810 return o[part];
811 };
812 var forge = function (parts, target) {
813 var o = target !== undefined ? target : global$1;
814 for (var i = 0; i < parts.length; ++i)
815 o = step(o, parts[i]);
816 return o;
817 };
818 var namespace = function (name, target) {
819 var parts = name.split('.');
820 return forge(parts, target);
821 };
822 var $_1but6zkrjfuw8q81 = {
823 path: path,
824 resolve: resolve,
825 forge: forge,
826 namespace: namespace
827 };
828
829 var unsafe = function (name, scope) {
830 return $_1but6zkrjfuw8q81.resolve(name, scope);
831 };
832 var getOrDie = function (name, scope) {
833 var actual = unsafe(name, scope);
834 if (actual === undefined || actual === null)
835 throw name + ' not available on this browser';
836 return actual;
837 };
838 var $_3og7cjkqjfuw8q7y = {getOrDie: getOrDie};
839
840 var node = function () {
841 var f = $_3og7cjkqjfuw8q7y.getOrDie('Node');
842 return f;
843 };
844 var compareDocumentPosition = function (a, b, match) {
845 return (a.compareDocumentPosition(b) & match) !== 0;
846 };
847 var documentPositionPreceding = function (a, b) {
848 return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);
849 };
850 var documentPositionContainedBy = function (a, b) {
851 return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);
852 };
853 var $_3crkomkpjfuw8q7x = {
854 documentPositionPreceding: documentPositionPreceding,
855 documentPositionContainedBy: documentPositionContainedBy
856 };
857
858 var cached = function (f) {
859 var called = false;
860 var r;
861 return function () {
862 if (!called) {
863 called = true;
864 r = f.apply(null, arguments);
865 }
866 return r;
867 };
868 };
869 var $_cfqymdkujfuw8q85 = {cached: cached};
870
871 var firstMatch = function (regexes, s) {
872 for (var i = 0; i < regexes.length; i++) {
873 var x = regexes[i];
874 if (x.test(s))
875 return x;
876 }
877 return undefined;
878 };
879 var find$2 = function (regexes, agent) {
880 var r = firstMatch(regexes, agent);
881 if (!r)
882 return {
883 major: 0,
884 minor: 0
885 };
886 var group = function (i) {
887 return Number(agent.replace(r, '$' + i));
888 };
889 return nu(group(1), group(2));
890 };
891 var detect = function (versionRegexes, agent) {
892 var cleanedAgent = String(agent).toLowerCase();
893 if (versionRegexes.length === 0)
894 return unknown();
895 return find$2(versionRegexes, cleanedAgent);
896 };
897 var unknown = function () {
898 return nu(0, 0);
899 };
900 var nu = function (major, minor) {
901 return {
902 major: major,
903 minor: minor
904 };
905 };
906 var $_yulx6kxjfuw8q8c = {
907 nu: nu,
908 detect: detect,
909 unknown: unknown
910 };
911
912 var edge = 'Edge';
913 var chrome = 'Chrome';
914 var ie = 'IE';
915 var opera = 'Opera';
916 var firefox = 'Firefox';
917 var safari = 'Safari';
918 var isBrowser = function (name, current) {
919 return function () {
920 return current === name;
921 };
922 };
923 var unknown$1 = function () {
924 return nu$1({
925 current: undefined,
926 version: $_yulx6kxjfuw8q8c.unknown()
927 });
928 };
929 var nu$1 = function (info) {
930 var current = info.current;
931 var version = info.version;
932 return {
933 current: current,
934 version: version,
935 isEdge: isBrowser(edge, current),
936 isChrome: isBrowser(chrome, current),
937 isIE: isBrowser(ie, current),
938 isOpera: isBrowser(opera, current),
939 isFirefox: isBrowser(firefox, current),
940 isSafari: isBrowser(safari, current)
941 };
942 };
943 var $_1x5z0nkwjfuw8q88 = {
944 unknown: unknown$1,
945 nu: nu$1,
946 edge: $_20nfr6k7jfuw8q4g.constant(edge),
947 chrome: $_20nfr6k7jfuw8q4g.constant(chrome),
948 ie: $_20nfr6k7jfuw8q4g.constant(ie),
949 opera: $_20nfr6k7jfuw8q4g.constant(opera),
950 firefox: $_20nfr6k7jfuw8q4g.constant(firefox),
951 safari: $_20nfr6k7jfuw8q4g.constant(safari)
952 };
953
954 var windows = 'Windows';
955 var ios = 'iOS';
956 var android = 'Android';
957 var linux = 'Linux';
958 var osx = 'OSX';
959 var solaris = 'Solaris';
960 var freebsd = 'FreeBSD';
961 var isOS = function (name, current) {
962 return function () {
963 return current === name;
964 };
965 };
966 var unknown$2 = function () {
967 return nu$2({
968 current: undefined,
969 version: $_yulx6kxjfuw8q8c.unknown()
970 });
971 };
972 var nu$2 = function (info) {
973 var current = info.current;
974 var version = info.version;
975 return {
976 current: current,
977 version: version,
978 isWindows: isOS(windows, current),
979 isiOS: isOS(ios, current),
980 isAndroid: isOS(android, current),
981 isOSX: isOS(osx, current),
982 isLinux: isOS(linux, current),
983 isSolaris: isOS(solaris, current),
984 isFreeBSD: isOS(freebsd, current)
985 };
986 };
987 var $_87zg95kyjfuw8q8d = {
988 unknown: unknown$2,
989 nu: nu$2,
990 windows: $_20nfr6k7jfuw8q4g.constant(windows),
991 ios: $_20nfr6k7jfuw8q4g.constant(ios),
992 android: $_20nfr6k7jfuw8q4g.constant(android),
993 linux: $_20nfr6k7jfuw8q4g.constant(linux),
994 osx: $_20nfr6k7jfuw8q4g.constant(osx),
995 solaris: $_20nfr6k7jfuw8q4g.constant(solaris),
996 freebsd: $_20nfr6k7jfuw8q4g.constant(freebsd)
997 };
998
999 function DeviceType(os, browser, userAgent) {
1000 var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;
1001 var isiPhone = os.isiOS() && !isiPad;
1002 var isAndroid3 = os.isAndroid() && os.version.major === 3;
1003 var isAndroid4 = os.isAndroid() && os.version.major === 4;
1004 var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;
1005 var isTouch = os.isiOS() || os.isAndroid();
1006 var isPhone = isTouch && !isTablet;
1007 var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;
1008 return {
1009 isiPad: $_20nfr6k7jfuw8q4g.constant(isiPad),
1010 isiPhone: $_20nfr6k7jfuw8q4g.constant(isiPhone),
1011 isTablet: $_20nfr6k7jfuw8q4g.constant(isTablet),
1012 isPhone: $_20nfr6k7jfuw8q4g.constant(isPhone),
1013 isTouch: $_20nfr6k7jfuw8q4g.constant(isTouch),
1014 isAndroid: os.isAndroid,
1015 isiOS: os.isiOS,
1016 isWebView: $_20nfr6k7jfuw8q4g.constant(iOSwebview)
1017 };
1018 }
1019
1020 var detect$1 = function (candidates, userAgent) {
1021 var agent = String(userAgent).toLowerCase();
1022 return $_tyr3yk5jfuw8q47.find(candidates, function (candidate) {
1023 return candidate.search(agent);
1024 });
1025 };
1026 var detectBrowser = function (browsers, userAgent) {
1027 return detect$1(browsers, userAgent).map(function (browser) {
1028 var version = $_yulx6kxjfuw8q8c.detect(browser.versionRegexes, userAgent);
1029 return {
1030 current: browser.name,
1031 version: version
1032 };
1033 });
1034 };
1035 var detectOs = function (oses, userAgent) {
1036 return detect$1(oses, userAgent).map(function (os) {
1037 var version = $_yulx6kxjfuw8q8c.detect(os.versionRegexes, userAgent);
1038 return {
1039 current: os.name,
1040 version: version
1041 };
1042 });
1043 };
1044 var $_62ehlbl0jfuw8q8o = {
1045 detectBrowser: detectBrowser,
1046 detectOs: detectOs
1047 };
1048
1049 var addToStart = function (str, prefix) {
1050 return prefix + str;
1051 };
1052 var addToEnd = function (str, suffix) {
1053 return str + suffix;
1054 };
1055 var removeFromStart = function (str, numChars) {
1056 return str.substring(numChars);
1057 };
1058 var removeFromEnd = function (str, numChars) {
1059 return str.substring(0, str.length - numChars);
1060 };
1061 var $_1u5wzbl3jfuw8q90 = {
1062 addToStart: addToStart,
1063 addToEnd: addToEnd,
1064 removeFromStart: removeFromStart,
1065 removeFromEnd: removeFromEnd
1066 };
1067
1068 var first = function (str, count) {
1069 return str.substr(0, count);
1070 };
1071 var last$1 = function (str, count) {
1072 return str.substr(str.length - count, str.length);
1073 };
1074 var head$1 = function (str) {
1075 return str === '' ? Option.none() : Option.some(str.substr(0, 1));
1076 };
1077 var tail = function (str) {
1078 return str === '' ? Option.none() : Option.some(str.substring(1));
1079 };
1080 var $_6v04e7l4jfuw8q91 = {
1081 first: first,
1082 last: last$1,
1083 head: head$1,
1084 tail: tail
1085 };
1086
1087 var checkRange = function (str, substr, start) {
1088 if (substr === '')
1089 return true;
1090 if (str.length < substr.length)
1091 return false;
1092 var x = str.substr(start, start + substr.length);
1093 return x === substr;
1094 };
1095 var supplant = function (str, obj) {
1096 var isStringOrNumber = function (a) {
1097 var t = typeof a;
1098 return t === 'string' || t === 'number';
1099 };
1100 return str.replace(/\${([^{}]*)}/g, function (a, b) {
1101 var value = obj[b];
1102 return isStringOrNumber(value) ? value : a;
1103 });
1104 };
1105 var removeLeading = function (str, prefix) {
1106 return startsWith(str, prefix) ? $_1u5wzbl3jfuw8q90.removeFromStart(str, prefix.length) : str;
1107 };
1108 var removeTrailing = function (str, prefix) {
1109 return endsWith(str, prefix) ? $_1u5wzbl3jfuw8q90.removeFromEnd(str, prefix.length) : str;
1110 };
1111 var ensureLeading = function (str, prefix) {
1112 return startsWith(str, prefix) ? str : $_1u5wzbl3jfuw8q90.addToStart(str, prefix);
1113 };
1114 var ensureTrailing = function (str, prefix) {
1115 return endsWith(str, prefix) ? str : $_1u5wzbl3jfuw8q90.addToEnd(str, prefix);
1116 };
1117 var contains$1 = function (str, substr) {
1118 return str.indexOf(substr) !== -1;
1119 };
1120 var capitalize = function (str) {
1121 return $_6v04e7l4jfuw8q91.head(str).bind(function (head) {
1122 return $_6v04e7l4jfuw8q91.tail(str).map(function (tail) {
1123 return head.toUpperCase() + tail;
1124 });
1125 }).getOr(str);
1126 };
1127 var startsWith = function (str, prefix) {
1128 return checkRange(str, prefix, 0);
1129 };
1130 var endsWith = function (str, suffix) {
1131 return checkRange(str, suffix, str.length - suffix.length);
1132 };
1133 var trim = function (str) {
1134 return str.replace(/^\s+|\s+$/g, '');
1135 };
1136 var lTrim = function (str) {
1137 return str.replace(/^\s+/g, '');
1138 };
1139 var rTrim = function (str) {
1140 return str.replace(/\s+$/g, '');
1141 };
1142 var $_ey09l9l2jfuw8q8y = {
1143 supplant: supplant,
1144 startsWith: startsWith,
1145 removeLeading: removeLeading,
1146 removeTrailing: removeTrailing,
1147 ensureLeading: ensureLeading,
1148 ensureTrailing: ensureTrailing,
1149 endsWith: endsWith,
1150 contains: contains$1,
1151 trim: trim,
1152 lTrim: lTrim,
1153 rTrim: rTrim,
1154 capitalize: capitalize
1155 };
1156
1157 var normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/;
1158 var checkContains = function (target) {
1159 return function (uastring) {
1160 return $_ey09l9l2jfuw8q8y.contains(uastring, target);
1161 };
1162 };
1163 var browsers = [
1164 {
1165 name: 'Edge',
1166 versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],
1167 search: function (uastring) {
1168 var monstrosity = $_ey09l9l2jfuw8q8y.contains(uastring, 'edge/') && $_ey09l9l2jfuw8q8y.contains(uastring, 'chrome') && $_ey09l9l2jfuw8q8y.contains(uastring, 'safari') && $_ey09l9l2jfuw8q8y.contains(uastring, 'applewebkit');
1169 return monstrosity;
1170 }
1171 },
1172 {
1173 name: 'Chrome',
1174 versionRegexes: [
1175 /.*?chrome\/([0-9]+)\.([0-9]+).*/,
1176 normalVersionRegex
1177 ],
1178 search: function (uastring) {
1179 return $_ey09l9l2jfuw8q8y.contains(uastring, 'chrome') && !$_ey09l9l2jfuw8q8y.contains(uastring, 'chromeframe');
1180 }
1181 },
1182 {
1183 name: 'IE',
1184 versionRegexes: [
1185 /.*?msie\ ?([0-9]+)\.([0-9]+).*/,
1186 /.*?rv:([0-9]+)\.([0-9]+).*/
1187 ],
1188 search: function (uastring) {
1189 return $_ey09l9l2jfuw8q8y.contains(uastring, 'msie') || $_ey09l9l2jfuw8q8y.contains(uastring, 'trident');
1190 }
1191 },
1192 {
1193 name: 'Opera',
1194 versionRegexes: [
1195 normalVersionRegex,
1196 /.*?opera\/([0-9]+)\.([0-9]+).*/
1197 ],
1198 search: checkContains('opera')
1199 },
1200 {
1201 name: 'Firefox',
1202 versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],
1203 search: checkContains('firefox')
1204 },
1205 {
1206 name: 'Safari',
1207 versionRegexes: [
1208 normalVersionRegex,
1209 /.*?cpu os ([0-9]+)_([0-9]+).*/
1210 ],
1211 search: function (uastring) {
1212 return ($_ey09l9l2jfuw8q8y.contains(uastring, 'safari') || $_ey09l9l2jfuw8q8y.contains(uastring, 'mobile/')) && $_ey09l9l2jfuw8q8y.contains(uastring, 'applewebkit');
1213 }
1214 }
1215 ];
1216 var oses = [
1217 {
1218 name: 'Windows',
1219 search: checkContains('win'),
1220 versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]
1221 },
1222 {
1223 name: 'iOS',
1224 search: function (uastring) {
1225 return $_ey09l9l2jfuw8q8y.contains(uastring, 'iphone') || $_ey09l9l2jfuw8q8y.contains(uastring, 'ipad');
1226 },
1227 versionRegexes: [
1228 /.*?version\/\ ?([0-9]+)\.([0-9]+).*/,
1229 /.*cpu os ([0-9]+)_([0-9]+).*/,
1230 /.*cpu iphone os ([0-9]+)_([0-9]+).*/
1231 ]
1232 },
1233 {
1234 name: 'Android',
1235 search: checkContains('android'),
1236 versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/]
1237 },
1238 {
1239 name: 'OSX',
1240 search: checkContains('os x'),
1241 versionRegexes: [/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]
1242 },
1243 {
1244 name: 'Linux',
1245 search: checkContains('linux'),
1246 versionRegexes: []
1247 },
1248 {
1249 name: 'Solaris',
1250 search: checkContains('sunos'),
1251 versionRegexes: []
1252 },
1253 {
1254 name: 'FreeBSD',
1255 search: checkContains('freebsd'),
1256 versionRegexes: []
1257 }
1258 ];
1259 var $_6xdjg7l1jfuw8q8s = {
1260 browsers: $_20nfr6k7jfuw8q4g.constant(browsers),
1261 oses: $_20nfr6k7jfuw8q4g.constant(oses)
1262 };
1263
1264 var detect$2 = function (userAgent) {
1265 var browsers = $_6xdjg7l1jfuw8q8s.browsers();
1266 var oses = $_6xdjg7l1jfuw8q8s.oses();
1267 var browser = $_62ehlbl0jfuw8q8o.detectBrowser(browsers, userAgent).fold($_1x5z0nkwjfuw8q88.unknown, $_1x5z0nkwjfuw8q88.nu);
1268 var os = $_62ehlbl0jfuw8q8o.detectOs(oses, userAgent).fold($_87zg95kyjfuw8q8d.unknown, $_87zg95kyjfuw8q8d.nu);
1269 var deviceType = DeviceType(os, browser, userAgent);
1270 return {
1271 browser: browser,
1272 os: os,
1273 deviceType: deviceType
1274 };
1275 };
1276 var $_5kufzskvjfuw8q87 = {detect: detect$2};
1277
1278 var detect$3 = $_cfqymdkujfuw8q85.cached(function () {
1279 var userAgent = navigator.userAgent;
1280 return $_5kufzskvjfuw8q87.detect(userAgent);
1281 });
1282 var $_fqgee0ktjfuw8q83 = {detect: detect$3};
1283
1284 var eq = function (e1, e2) {
1285 return e1.dom() === e2.dom();
1286 };
1287 var isEqualNode = function (e1, e2) {
1288 return e1.dom().isEqualNode(e2.dom());
1289 };
1290 var member = function (element, elements) {
1291 return $_tyr3yk5jfuw8q47.exists(elements, $_20nfr6k7jfuw8q4g.curry(eq, element));
1292 };
1293 var regularContains = function (e1, e2) {
1294 var d1 = e1.dom(), d2 = e2.dom();
1295 return d1 === d2 ? false : d1.contains(d2);
1296 };
1297 var ieContains = function (e1, e2) {
1298 return $_3crkomkpjfuw8q7x.documentPositionContainedBy(e1.dom(), e2.dom());
1299 };
1300 var browser = $_fqgee0ktjfuw8q83.detect().browser;
1301 var contains$2 = browser.isIE() ? ieContains : regularContains;
1302 var $_e8rn66kojfuw8q7n = {
1303 eq: eq,
1304 isEqualNode: isEqualNode,
1305 member: member,
1306 contains: contains$2,
1307 is: $_enn9uikjjfuw8q6w.is
1308 };
1309
1310 var owner = function (element) {
1311 return $_xbeoqkkjfuw8q73.fromDom(element.dom().ownerDocument);
1312 };
1313 var documentElement = function (element) {
1314 var doc = owner(element);
1315 return $_xbeoqkkjfuw8q73.fromDom(doc.dom().documentElement);
1316 };
1317 var defaultView = function (element) {
1318 var el = element.dom();
1319 var defaultView = el.ownerDocument.defaultView;
1320 return $_xbeoqkkjfuw8q73.fromDom(defaultView);
1321 };
1322 var parent = function (element) {
1323 var dom = element.dom();
1324 return Option.from(dom.parentNode).map($_xbeoqkkjfuw8q73.fromDom);
1325 };
1326 var findIndex$1 = function (element) {
1327 return parent(element).bind(function (p) {
1328 var kin = children(p);
1329 return $_tyr3yk5jfuw8q47.findIndex(kin, function (elem) {
1330 return $_e8rn66kojfuw8q7n.eq(element, elem);
1331 });
1332 });
1333 };
1334 var parents = function (element, isRoot) {
1335 var stop = $_g6mvnrk8jfuw8q4k.isFunction(isRoot) ? isRoot : $_20nfr6k7jfuw8q4g.constant(false);
1336 var dom = element.dom();
1337 var ret = [];
1338 while (dom.parentNode !== null && dom.parentNode !== undefined) {
1339 var rawParent = dom.parentNode;
1340 var parent = $_xbeoqkkjfuw8q73.fromDom(rawParent);
1341 ret.push(parent);
1342 if (stop(parent) === true)
1343 break;
1344 else
1345 dom = rawParent;
1346 }
1347 return ret;
1348 };
1349 var siblings = function (element) {
1350 var filterSelf = function (elements) {
1351 return $_tyr3yk5jfuw8q47.filter(elements, function (x) {
1352 return !$_e8rn66kojfuw8q7n.eq(element, x);
1353 });
1354 };
1355 return parent(element).map(children).map(filterSelf).getOr([]);
1356 };
1357 var offsetParent = function (element) {
1358 var dom = element.dom();
1359 return Option.from(dom.offsetParent).map($_xbeoqkkjfuw8q73.fromDom);
1360 };
1361 var prevSibling = function (element) {
1362 var dom = element.dom();
1363 return Option.from(dom.previousSibling).map($_xbeoqkkjfuw8q73.fromDom);
1364 };
1365 var nextSibling = function (element) {
1366 var dom = element.dom();
1367 return Option.from(dom.nextSibling).map($_xbeoqkkjfuw8q73.fromDom);
1368 };
1369 var prevSiblings = function (element) {
1370 return $_tyr3yk5jfuw8q47.reverse($_myhefknjfuw8q7m.toArray(element, prevSibling));
1371 };
1372 var nextSiblings = function (element) {
1373 return $_myhefknjfuw8q7m.toArray(element, nextSibling);
1374 };
1375 var children = function (element) {
1376 var dom = element.dom();
1377 return $_tyr3yk5jfuw8q47.map(dom.childNodes, $_xbeoqkkjfuw8q73.fromDom);
1378 };
1379 var child = function (element, index) {
1380 var children = element.dom().childNodes;
1381 return Option.from(children[index]).map($_xbeoqkkjfuw8q73.fromDom);
1382 };
1383 var firstChild = function (element) {
1384 return child(element, 0);
1385 };
1386 var lastChild = function (element) {
1387 return child(element, element.dom().childNodes.length - 1);
1388 };
1389 var childNodesCount = function (element) {
1390 return element.dom().childNodes.length;
1391 };
1392 var hasChildNodes = function (element) {
1393 return element.dom().hasChildNodes();
1394 };
1395 var spot = $_5now9kbjfuw8q5e.immutable('element', 'offset');
1396 var leaf = function (element, offset) {
1397 var cs = children(element);
1398 return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset);
1399 };
1400 var $_s8scrkmjfuw8q7a = {
1401 owner: owner,
1402 defaultView: defaultView,
1403 documentElement: documentElement,
1404 parent: parent,
1405 findIndex: findIndex$1,
1406 parents: parents,
1407 siblings: siblings,
1408 prevSibling: prevSibling,
1409 offsetParent: offsetParent,
1410 prevSiblings: prevSiblings,
1411 nextSibling: nextSibling,
1412 nextSiblings: nextSiblings,
1413 children: children,
1414 child: child,
1415 firstChild: firstChild,
1416 lastChild: lastChild,
1417 childNodesCount: childNodesCount,
1418 hasChildNodes: hasChildNodes,
1419 leaf: leaf
1420 };
1421
1422 var firstLayer = function (scope, selector) {
1423 return filterFirstLayer(scope, selector, $_20nfr6k7jfuw8q4g.constant(true));
1424 };
1425 var filterFirstLayer = function (scope, selector, predicate) {
1426 return $_tyr3yk5jfuw8q47.bind($_s8scrkmjfuw8q7a.children(scope), function (x) {
1427 return $_enn9uikjjfuw8q6w.is(x, selector) ? predicate(x) ? [x] : [] : filterFirstLayer(x, selector, predicate);
1428 });
1429 };
1430 var $_2g609akijfuw8q6n = {
1431 firstLayer: firstLayer,
1432 filterFirstLayer: filterFirstLayer
1433 };
1434
1435 var name = function (element) {
1436 var r = element.dom().nodeName;
1437 return r.toLowerCase();
1438 };
1439 var type = function (element) {
1440 return element.dom().nodeType;
1441 };
1442 var value = function (element) {
1443 return element.dom().nodeValue;
1444 };
1445 var isType$1 = function (t) {
1446 return function (element) {
1447 return type(element) === t;
1448 };
1449 };
1450 var isComment = function (element) {
1451 return type(element) === $_x3hpikljfuw8q78.COMMENT || name(element) === '#comment';
1452 };
1453 var isElement = isType$1($_x3hpikljfuw8q78.ELEMENT);
1454 var isText = isType$1($_x3hpikljfuw8q78.TEXT);
1455 var isDocument = isType$1($_x3hpikljfuw8q78.DOCUMENT);
1456 var $_a8gk30l6jfuw8q9c = {
1457 name: name,
1458 type: type,
1459 value: value,
1460 isElement: isElement,
1461 isText: isText,
1462 isDocument: isDocument,
1463 isComment: isComment
1464 };
1465
1466 var rawSet = function (dom, key, value) {
1467 if ($_g6mvnrk8jfuw8q4k.isString(value) || $_g6mvnrk8jfuw8q4k.isBoolean(value) || $_g6mvnrk8jfuw8q4k.isNumber(value)) {
1468 dom.setAttribute(key, value + '');
1469 } else {
1470 console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value, ':: Element ', dom);
1471 throw new Error('Attribute value was not simple');
1472 }
1473 };
1474 var set = function (element, key, value) {
1475 rawSet(element.dom(), key, value);
1476 };
1477 var setAll = function (element, attrs) {
1478 var dom = element.dom();
1479 $_11yiupkajfuw8q5c.each(attrs, function (v, k) {
1480 rawSet(dom, k, v);
1481 });
1482 };
1483 var get = function (element, key) {
1484 var v = element.dom().getAttribute(key);
1485 return v === null ? undefined : v;
1486 };
1487 var has = function (element, key) {
1488 var dom = element.dom();
1489 return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;
1490 };
1491 var remove = function (element, key) {
1492 element.dom().removeAttribute(key);
1493 };
1494 var hasNone = function (element) {
1495 var attrs = element.dom().attributes;
1496 return attrs === undefined || attrs === null || attrs.length === 0;
1497 };
1498 var clone = function (element) {
1499 return $_tyr3yk5jfuw8q47.foldl(element.dom().attributes, function (acc, attr) {
1500 acc[attr.name] = attr.value;
1501 return acc;
1502 }, {});
1503 };
1504 var transferOne = function (source, destination, attr) {
1505 if (has(source, attr) && !has(destination, attr))
1506 set(destination, attr, get(source, attr));
1507 };
1508 var transfer = function (source, destination, attrs) {
1509 if (!$_a8gk30l6jfuw8q9c.isElement(source) || !$_a8gk30l6jfuw8q9c.isElement(destination))
1510 return;
1511 $_tyr3yk5jfuw8q47.each(attrs, function (attr) {
1512 transferOne(source, destination, attr);
1513 });
1514 };
1515 var $_3q82t2l5jfuw8q93 = {
1516 clone: clone,
1517 set: set,
1518 setAll: setAll,
1519 get: get,
1520 has: has,
1521 remove: remove,
1522 hasNone: hasNone,
1523 transfer: transfer
1524 };
1525
1526 var inBody = function (element) {
1527 var dom = $_a8gk30l6jfuw8q9c.isText(element) ? element.dom().parentNode : element.dom();
1528 return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);
1529 };
1530 var body = $_cfqymdkujfuw8q85.cached(function () {
1531 return getBody($_xbeoqkkjfuw8q73.fromDom(document));
1532 });
1533 var getBody = function (doc) {
1534 var body = doc.dom().body;
1535 if (body === null || body === undefined)
1536 throw 'Body is not available yet';
1537 return $_xbeoqkkjfuw8q73.fromDom(body);
1538 };
1539 var $_atd1tul9jfuw8q9i = {
1540 body: body,
1541 getBody: getBody,
1542 inBody: inBody
1543 };
1544
1545 var all$1 = function (predicate) {
1546 return descendants($_atd1tul9jfuw8q9i.body(), predicate);
1547 };
1548 var ancestors = function (scope, predicate, isRoot) {
1549 return $_tyr3yk5jfuw8q47.filter($_s8scrkmjfuw8q7a.parents(scope, isRoot), predicate);
1550 };
1551 var siblings$1 = function (scope, predicate) {
1552 return $_tyr3yk5jfuw8q47.filter($_s8scrkmjfuw8q7a.siblings(scope), predicate);
1553 };
1554 var children$1 = function (scope, predicate) {
1555 return $_tyr3yk5jfuw8q47.filter($_s8scrkmjfuw8q7a.children(scope), predicate);
1556 };
1557 var descendants = function (scope, predicate) {
1558 var result = [];
1559 $_tyr3yk5jfuw8q47.each($_s8scrkmjfuw8q7a.children(scope), function (x) {
1560 if (predicate(x)) {
1561 result = result.concat([x]);
1562 }
1563 result = result.concat(descendants(x, predicate));
1564 });
1565 return result;
1566 };
1567 var $_4d3nfbl8jfuw8q9f = {
1568 all: all$1,
1569 ancestors: ancestors,
1570 siblings: siblings$1,
1571 children: children$1,
1572 descendants: descendants
1573 };
1574
1575 var all$2 = function (selector) {
1576 return $_enn9uikjjfuw8q6w.all(selector);
1577 };
1578 var ancestors$1 = function (scope, selector, isRoot) {
1579 return $_4d3nfbl8jfuw8q9f.ancestors(scope, function (e) {
1580 return $_enn9uikjjfuw8q6w.is(e, selector);
1581 }, isRoot);
1582 };
1583 var siblings$2 = function (scope, selector) {
1584 return $_4d3nfbl8jfuw8q9f.siblings(scope, function (e) {
1585 return $_enn9uikjjfuw8q6w.is(e, selector);
1586 });
1587 };
1588 var children$2 = function (scope, selector) {
1589 return $_4d3nfbl8jfuw8q9f.children(scope, function (e) {
1590 return $_enn9uikjjfuw8q6w.is(e, selector);
1591 });
1592 };
1593 var descendants$1 = function (scope, selector) {
1594 return $_enn9uikjjfuw8q6w.all(selector, scope);
1595 };
1596 var $_6c9d0hl7jfuw8q9d = {
1597 all: all$2,
1598 ancestors: ancestors$1,
1599 siblings: siblings$2,
1600 children: children$2,
1601 descendants: descendants$1
1602 };
1603
1604 function ClosestOrAncestor(is, ancestor, scope, a, isRoot) {
1605 return is(scope, a) ? Option.some(scope) : $_g6mvnrk8jfuw8q4k.isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot);
1606 }
1607
1608 var first$1 = function (predicate) {
1609 return descendant($_atd1tul9jfuw8q9i.body(), predicate);
1610 };
1611 var ancestor = function (scope, predicate, isRoot) {
1612 var element = scope.dom();
1613 var stop = $_g6mvnrk8jfuw8q4k.isFunction(isRoot) ? isRoot : $_20nfr6k7jfuw8q4g.constant(false);
1614 while (element.parentNode) {
1615 element = element.parentNode;
1616 var el = $_xbeoqkkjfuw8q73.fromDom(element);
1617 if (predicate(el))
1618 return Option.some(el);
1619 else if (stop(el))
1620 break;
1621 }
1622 return Option.none();
1623 };
1624 var closest = function (scope, predicate, isRoot) {
1625 var is = function (scope) {
1626 return predicate(scope);
1627 };
1628 return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);
1629 };
1630 var sibling = function (scope, predicate) {
1631 var element = scope.dom();
1632 if (!element.parentNode)
1633 return Option.none();
1634 return child$1($_xbeoqkkjfuw8q73.fromDom(element.parentNode), function (x) {
1635 return !$_e8rn66kojfuw8q7n.eq(scope, x) && predicate(x);
1636 });
1637 };
1638 var child$1 = function (scope, predicate) {
1639 var result = $_tyr3yk5jfuw8q47.find(scope.dom().childNodes, $_20nfr6k7jfuw8q4g.compose(predicate, $_xbeoqkkjfuw8q73.fromDom));
1640 return result.map($_xbeoqkkjfuw8q73.fromDom);
1641 };
1642 var descendant = function (scope, predicate) {
1643 var descend = function (element) {
1644 for (var i = 0; i < element.childNodes.length; i++) {
1645 if (predicate($_xbeoqkkjfuw8q73.fromDom(element.childNodes[i])))
1646 return Option.some($_xbeoqkkjfuw8q73.fromDom(element.childNodes[i]));
1647 var res = descend(element.childNodes[i]);
1648 if (res.isSome())
1649 return res;
1650 }
1651 return Option.none();
1652 };
1653 return descend(scope.dom());
1654 };
1655 var $_11ympzlbjfuw8q9n = {
1656 first: first$1,
1657 ancestor: ancestor,
1658 closest: closest,
1659 sibling: sibling,
1660 child: child$1,
1661 descendant: descendant
1662 };
1663
1664 var first$2 = function (selector) {
1665 return $_enn9uikjjfuw8q6w.one(selector);
1666 };
1667 var ancestor$1 = function (scope, selector, isRoot) {
1668 return $_11ympzlbjfuw8q9n.ancestor(scope, function (e) {
1669 return $_enn9uikjjfuw8q6w.is(e, selector);
1670 }, isRoot);
1671 };
1672 var sibling$1 = function (scope, selector) {
1673 return $_11ympzlbjfuw8q9n.sibling(scope, function (e) {
1674 return $_enn9uikjjfuw8q6w.is(e, selector);
1675 });
1676 };
1677 var child$2 = function (scope, selector) {
1678 return $_11ympzlbjfuw8q9n.child(scope, function (e) {
1679 return $_enn9uikjjfuw8q6w.is(e, selector);
1680 });
1681 };
1682 var descendant$1 = function (scope, selector) {
1683 return $_enn9uikjjfuw8q6w.one(selector, scope);
1684 };
1685 var closest$1 = function (scope, selector, isRoot) {
1686 return ClosestOrAncestor($_enn9uikjjfuw8q6w.is, ancestor$1, scope, selector, isRoot);
1687 };
1688 var $_8wdrbmlajfuw8q9m = {
1689 first: first$2,
1690 ancestor: ancestor$1,
1691 sibling: sibling$1,
1692 child: child$2,
1693 descendant: descendant$1,
1694 closest: closest$1
1695 };
1696
1697 var lookup = function (tags, element, _isRoot) {
1698 var isRoot = _isRoot !== undefined ? _isRoot : $_20nfr6k7jfuw8q4g.constant(false);
1699 if (isRoot(element))
1700 return Option.none();
1701 if ($_tyr3yk5jfuw8q47.contains(tags, $_a8gk30l6jfuw8q9c.name(element)))
1702 return Option.some(element);
1703 var isRootOrUpperTable = function (element) {
1704 return $_enn9uikjjfuw8q6w.is(element, 'table') || isRoot(element);
1705 };
1706 return $_8wdrbmlajfuw8q9m.ancestor(element, tags.join(','), isRootOrUpperTable);
1707 };
1708 var cell = function (element, isRoot) {
1709 return lookup([
1710 'td',
1711 'th'
1712 ], element, isRoot);
1713 };
1714 var cells = function (ancestor) {
1715 return $_2g609akijfuw8q6n.firstLayer(ancestor, 'th,td');
1716 };
1717 var notCell = function (element, isRoot) {
1718 return lookup([
1719 'caption',
1720 'tr',
1721 'tbody',
1722 'tfoot',
1723 'thead'
1724 ], element, isRoot);
1725 };
1726 var neighbours = function (selector, element) {
1727 return $_s8scrkmjfuw8q7a.parent(element).map(function (parent) {
1728 return $_6c9d0hl7jfuw8q9d.children(parent, selector);
1729 });
1730 };
1731 var neighbourCells = $_20nfr6k7jfuw8q4g.curry(neighbours, 'th,td');
1732 var neighbourRows = $_20nfr6k7jfuw8q4g.curry(neighbours, 'tr');
1733 var firstCell = function (ancestor) {
1734 return $_8wdrbmlajfuw8q9m.descendant(ancestor, 'th,td');
1735 };
1736 var table = function (element, isRoot) {
1737 return $_8wdrbmlajfuw8q9m.closest(element, 'table', isRoot);
1738 };
1739 var row = function (element, isRoot) {
1740 return lookup(['tr'], element, isRoot);
1741 };
1742 var rows = function (ancestor) {
1743 return $_2g609akijfuw8q6n.firstLayer(ancestor, 'tr');
1744 };
1745 var attr = function (element, property) {
1746 return parseInt($_3q82t2l5jfuw8q93.get(element, property), 10);
1747 };
1748 var grid$1 = function (element, rowProp, colProp) {
1749 var rows = attr(element, rowProp);
1750 var cols = attr(element, colProp);
1751 return $_ce5pyrkgjfuw8q5v.grid(rows, cols);
1752 };
1753 var $_aqhz9okhjfuw8q5y = {
1754 cell: cell,
1755 firstCell: firstCell,
1756 cells: cells,
1757 neighbourCells: neighbourCells,
1758 table: table,
1759 row: row,
1760 rows: rows,
1761 notCell: notCell,
1762 neighbourRows: neighbourRows,
1763 attr: attr,
1764 grid: grid$1
1765 };
1766
1767 var fromTable = function (table) {
1768 var rows = $_aqhz9okhjfuw8q5y.rows(table);
1769 return $_tyr3yk5jfuw8q47.map(rows, function (row) {
1770 var element = row;
1771 var parent = $_s8scrkmjfuw8q7a.parent(element);
1772 var parentSection = parent.bind(function (parent) {
1773 var parentName = $_a8gk30l6jfuw8q9c.name(parent);
1774 return parentName === 'tfoot' || parentName === 'thead' || parentName === 'tbody' ? parentName : 'tbody';
1775 });
1776 var cells = $_tyr3yk5jfuw8q47.map($_aqhz9okhjfuw8q5y.cells(row), function (cell) {
1777 var rowspan = $_3q82t2l5jfuw8q93.has(cell, 'rowspan') ? parseInt($_3q82t2l5jfuw8q93.get(cell, 'rowspan'), 10) : 1;
1778 var colspan = $_3q82t2l5jfuw8q93.has(cell, 'colspan') ? parseInt($_3q82t2l5jfuw8q93.get(cell, 'colspan'), 10) : 1;
1779 return $_ce5pyrkgjfuw8q5v.detail(cell, rowspan, colspan);
1780 });
1781 return $_ce5pyrkgjfuw8q5v.rowdata(element, cells, parentSection);
1782 });
1783 };
1784 var fromPastedRows = function (rows, example) {
1785 return $_tyr3yk5jfuw8q47.map(rows, function (row) {
1786 var cells = $_tyr3yk5jfuw8q47.map($_aqhz9okhjfuw8q5y.cells(row), function (cell) {
1787 var rowspan = $_3q82t2l5jfuw8q93.has(cell, 'rowspan') ? parseInt($_3q82t2l5jfuw8q93.get(cell, 'rowspan'), 10) : 1;
1788 var colspan = $_3q82t2l5jfuw8q93.has(cell, 'colspan') ? parseInt($_3q82t2l5jfuw8q93.get(cell, 'colspan'), 10) : 1;
1789 return $_ce5pyrkgjfuw8q5v.detail(cell, rowspan, colspan);
1790 });
1791 return $_ce5pyrkgjfuw8q5v.rowdata(row, cells, example.section());
1792 });
1793 };
1794 var $_dy3x0nkfjfuw8q5l = {
1795 fromTable: fromTable,
1796 fromPastedRows: fromPastedRows
1797 };
1798
1799 var key = function (row, column) {
1800 return row + ',' + column;
1801 };
1802 var getAt = function (warehouse, row, column) {
1803 var raw = warehouse.access()[key(row, column)];
1804 return raw !== undefined ? Option.some(raw) : Option.none();
1805 };
1806 var findItem = function (warehouse, item, comparator) {
1807 var filtered = filterItems(warehouse, function (detail) {
1808 return comparator(item, detail.element());
1809 });
1810 return filtered.length > 0 ? Option.some(filtered[0]) : Option.none();
1811 };
1812 var filterItems = function (warehouse, predicate) {
1813 var all = $_tyr3yk5jfuw8q47.bind(warehouse.all(), function (r) {
1814 return r.cells();
1815 });
1816 return $_tyr3yk5jfuw8q47.filter(all, predicate);
1817 };
1818 var generate = function (list) {
1819 var access = {};
1820 var cells = [];
1821 var maxRows = list.length;
1822 var maxColumns = 0;
1823 $_tyr3yk5jfuw8q47.each(list, function (details, r) {
1824 var currentRow = [];
1825 $_tyr3yk5jfuw8q47.each(details.cells(), function (detail, c) {
1826 var start = 0;
1827 while (access[key(r, start)] !== undefined) {
1828 start++;
1829 }
1830 var current = $_ce5pyrkgjfuw8q5v.extended(detail.element(), detail.rowspan(), detail.colspan(), r, start);
1831 for (var i = 0; i < detail.colspan(); i++) {
1832 for (var j = 0; j < detail.rowspan(); j++) {
1833 var cr = r + j;
1834 var cc = start + i;
1835 var newpos = key(cr, cc);
1836 access[newpos] = current;
1837 maxColumns = Math.max(maxColumns, cc + 1);
1838 }
1839 }
1840 currentRow.push(current);
1841 });
1842 cells.push($_ce5pyrkgjfuw8q5v.rowdata(details.element(), currentRow, details.section()));
1843 });
1844 var grid = $_ce5pyrkgjfuw8q5v.grid(maxRows, maxColumns);
1845 return {
1846 grid: $_20nfr6k7jfuw8q4g.constant(grid),
1847 access: $_20nfr6k7jfuw8q4g.constant(access),
1848 all: $_20nfr6k7jfuw8q4g.constant(cells)
1849 };
1850 };
1851 var justCells = function (warehouse) {
1852 var rows = $_tyr3yk5jfuw8q47.map(warehouse.all(), function (w) {
1853 return w.cells();
1854 });
1855 return $_tyr3yk5jfuw8q47.flatten(rows);
1856 };
1857 var $_2ge24cldjfuw8qa3 = {
1858 generate: generate,
1859 getAt: getAt,
1860 findItem: findItem,
1861 filterItems: filterItems,
1862 justCells: justCells
1863 };
1864
1865 var isSupported = function (dom) {
1866 return dom.style !== undefined;
1867 };
1868 var $_b75qp5lfjfuw8qau = {isSupported: isSupported};
1869
1870 var internalSet = function (dom, property, value) {
1871 if (!$_g6mvnrk8jfuw8q4k.isString(value)) {
1872 console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);
1873 throw new Error('CSS value must be a string: ' + value);
1874 }
1875 if ($_b75qp5lfjfuw8qau.isSupported(dom))
1876 dom.style.setProperty(property, value);
1877 };
1878 var internalRemove = function (dom, property) {
1879 if ($_b75qp5lfjfuw8qau.isSupported(dom))
1880 dom.style.removeProperty(property);
1881 };
1882 var set$1 = function (element, property, value) {
1883 var dom = element.dom();
1884 internalSet(dom, property, value);
1885 };
1886 var setAll$1 = function (element, css) {
1887 var dom = element.dom();
1888 $_11yiupkajfuw8q5c.each(css, function (v, k) {
1889 internalSet(dom, k, v);
1890 });
1891 };
1892 var setOptions = function (element, css) {
1893 var dom = element.dom();
1894 $_11yiupkajfuw8q5c.each(css, function (v, k) {
1895 v.fold(function () {
1896 internalRemove(dom, k);
1897 }, function (value) {
1898 internalSet(dom, k, value);
1899 });
1900 });
1901 };
1902 var get$1 = function (element, property) {
1903 var dom = element.dom();
1904 var styles = window.getComputedStyle(dom);
1905 var r = styles.getPropertyValue(property);
1906 var v = r === '' && !$_atd1tul9jfuw8q9i.inBody(element) ? getUnsafeProperty(dom, property) : r;
1907 return v === null ? undefined : v;
1908 };
1909 var getUnsafeProperty = function (dom, property) {
1910 return $_b75qp5lfjfuw8qau.isSupported(dom) ? dom.style.getPropertyValue(property) : '';
1911 };
1912 var getRaw = function (element, property) {
1913 var dom = element.dom();
1914 var raw = getUnsafeProperty(dom, property);
1915 return Option.from(raw).filter(function (r) {
1916 return r.length > 0;
1917 });
1918 };
1919 var getAllRaw = function (element) {
1920 var css = {};
1921 var dom = element.dom();
1922 if ($_b75qp5lfjfuw8qau.isSupported(dom)) {
1923 for (var i = 0; i < dom.style.length; i++) {
1924 var ruleName = dom.style.item(i);
1925 css[ruleName] = dom.style[ruleName];
1926 }
1927 }
1928 return css;
1929 };
1930 var isValidValue = function (tag, property, value) {
1931 var element = $_xbeoqkkjfuw8q73.fromTag(tag);
1932 set$1(element, property, value);
1933 var style = getRaw(element, property);
1934 return style.isSome();
1935 };
1936 var remove$1 = function (element, property) {
1937 var dom = element.dom();
1938 internalRemove(dom, property);
1939 if ($_3q82t2l5jfuw8q93.has(element, 'style') && $_ey09l9l2jfuw8q8y.trim($_3q82t2l5jfuw8q93.get(element, 'style')) === '') {
1940 $_3q82t2l5jfuw8q93.remove(element, 'style');
1941 }
1942 };
1943 var preserve = function (element, f) {
1944 var oldStyles = $_3q82t2l5jfuw8q93.get(element, 'style');
1945 var result = f(element);
1946 var restore = oldStyles === undefined ? $_3q82t2l5jfuw8q93.remove : $_3q82t2l5jfuw8q93.set;
1947 restore(element, 'style', oldStyles);
1948 return result;
1949 };
1950 var copy = function (source, target) {
1951 var sourceDom = source.dom();
1952 var targetDom = target.dom();
1953 if ($_b75qp5lfjfuw8qau.isSupported(sourceDom) && $_b75qp5lfjfuw8qau.isSupported(targetDom)) {
1954 targetDom.style.cssText = sourceDom.style.cssText;
1955 }
1956 };
1957 var reflow = function (e) {
1958 return e.dom().offsetWidth;
1959 };
1960 var transferOne$1 = function (source, destination, style) {
1961 getRaw(source, style).each(function (value) {
1962 if (getRaw(destination, style).isNone())
1963 set$1(destination, style, value);
1964 });
1965 };
1966 var transfer$1 = function (source, destination, styles) {
1967 if (!$_a8gk30l6jfuw8q9c.isElement(source) || !$_a8gk30l6jfuw8q9c.isElement(destination))
1968 return;
1969 $_tyr3yk5jfuw8q47.each(styles, function (style) {
1970 transferOne$1(source, destination, style);
1971 });
1972 };
1973 var $_bfod2hlejfuw8qac = {
1974 copy: copy,
1975 set: set$1,
1976 preserve: preserve,
1977 setAll: setAll$1,
1978 setOptions: setOptions,
1979 remove: remove$1,
1980 get: get$1,
1981 getRaw: getRaw,
1982 getAllRaw: getAllRaw,
1983 isValidValue: isValidValue,
1984 reflow: reflow,
1985 transfer: transfer$1
1986 };
1987
1988 var before = function (marker, element) {
1989 var parent = $_s8scrkmjfuw8q7a.parent(marker);
1990 parent.each(function (v) {
1991 v.dom().insertBefore(element.dom(), marker.dom());
1992 });
1993 };
1994 var after = function (marker, element) {
1995 var sibling = $_s8scrkmjfuw8q7a.nextSibling(marker);
1996 sibling.fold(function () {
1997 var parent = $_s8scrkmjfuw8q7a.parent(marker);
1998 parent.each(function (v) {
1999 append(v, element);
2000 });
2001 }, function (v) {
2002 before(v, element);
2003 });
2004 };
2005 var prepend = function (parent, element) {
2006 var firstChild = $_s8scrkmjfuw8q7a.firstChild(parent);
2007 firstChild.fold(function () {
2008 append(parent, element);
2009 }, function (v) {
2010 parent.dom().insertBefore(element.dom(), v.dom());
2011 });
2012 };
2013 var append = function (parent, element) {
2014 parent.dom().appendChild(element.dom());
2015 };
2016 var appendAt = function (parent, element, index) {
2017 $_s8scrkmjfuw8q7a.child(parent, index).fold(function () {
2018 append(parent, element);
2019 }, function (v) {
2020 before(v, element);
2021 });
2022 };
2023 var wrap = function (element, wrapper) {
2024 before(element, wrapper);
2025 append(wrapper, element);
2026 };
2027 var $_fatuxylgjfuw8qav = {
2028 before: before,
2029 after: after,
2030 prepend: prepend,
2031 append: append,
2032 appendAt: appendAt,
2033 wrap: wrap
2034 };
2035
2036 var before$1 = function (marker, elements) {
2037 $_tyr3yk5jfuw8q47.each(elements, function (x) {
2038 $_fatuxylgjfuw8qav.before(marker, x);
2039 });
2040 };
2041 var after$1 = function (marker, elements) {
2042 $_tyr3yk5jfuw8q47.each(elements, function (x, i) {
2043 var e = i === 0 ? marker : elements[i - 1];
2044 $_fatuxylgjfuw8qav.after(e, x);
2045 });
2046 };
2047 var prepend$1 = function (parent, elements) {
2048 $_tyr3yk5jfuw8q47.each(elements.slice().reverse(), function (x) {
2049 $_fatuxylgjfuw8qav.prepend(parent, x);
2050 });
2051 };
2052 var append$1 = function (parent, elements) {
2053 $_tyr3yk5jfuw8q47.each(elements, function (x) {
2054 $_fatuxylgjfuw8qav.append(parent, x);
2055 });
2056 };
2057 var $_9zaoqflijfuw8qb0 = {
2058 before: before$1,
2059 after: after$1,
2060 prepend: prepend$1,
2061 append: append$1
2062 };
2063
2064 var empty = function (element) {
2065 element.dom().textContent = '';
2066 $_tyr3yk5jfuw8q47.each($_s8scrkmjfuw8q7a.children(element), function (rogue) {
2067 remove$2(rogue);
2068 });
2069 };
2070 var remove$2 = function (element) {
2071 var dom = element.dom();
2072 if (dom.parentNode !== null)
2073 dom.parentNode.removeChild(dom);
2074 };
2075 var unwrap = function (wrapper) {
2076 var children = $_s8scrkmjfuw8q7a.children(wrapper);
2077 if (children.length > 0)
2078 $_9zaoqflijfuw8qb0.before(wrapper, children);
2079 remove$2(wrapper);
2080 };
2081 var $_fl1deelhjfuw8qax = {
2082 empty: empty,
2083 remove: remove$2,
2084 unwrap: unwrap
2085 };
2086
2087 var stats = $_5now9kbjfuw8q5e.immutable('minRow', 'minCol', 'maxRow', 'maxCol');
2088 var findSelectedStats = function (house, isSelected) {
2089 var totalColumns = house.grid().columns();
2090 var totalRows = house.grid().rows();
2091 var minRow = totalRows;
2092 var minCol = totalColumns;
2093 var maxRow = 0;
2094 var maxCol = 0;
2095 $_11yiupkajfuw8q5c.each(house.access(), function (detail) {
2096 if (isSelected(detail)) {
2097 var startRow = detail.row();
2098 var endRow = startRow + detail.rowspan() - 1;
2099 var startCol = detail.column();
2100 var endCol = startCol + detail.colspan() - 1;
2101 if (startRow < minRow)
2102 minRow = startRow;
2103 else if (endRow > maxRow)
2104 maxRow = endRow;
2105 if (startCol < minCol)
2106 minCol = startCol;
2107 else if (endCol > maxCol)
2108 maxCol = endCol;
2109 }
2110 });
2111 return stats(minRow, minCol, maxRow, maxCol);
2112 };
2113 var makeCell = function (list, seenSelected, rowIndex) {
2114 var row = list[rowIndex].element();
2115 var td = $_xbeoqkkjfuw8q73.fromTag('td');
2116 $_fatuxylgjfuw8qav.append(td, $_xbeoqkkjfuw8q73.fromTag('br'));
2117 var f = seenSelected ? $_fatuxylgjfuw8qav.append : $_fatuxylgjfuw8qav.prepend;
2118 f(row, td);
2119 };
2120 var fillInGaps = function (list, house, stats, isSelected) {
2121 var totalColumns = house.grid().columns();
2122 var totalRows = house.grid().rows();
2123 for (var i = 0; i < totalRows; i++) {
2124 var seenSelected = false;
2125 for (var j = 0; j < totalColumns; j++) {
2126 if (!(i < stats.minRow() || i > stats.maxRow() || j < stats.minCol() || j > stats.maxCol())) {
2127 var needCell = $_2ge24cldjfuw8qa3.getAt(house, i, j).filter(isSelected).isNone();
2128 if (needCell)
2129 makeCell(list, seenSelected, i);
2130 else
2131 seenSelected = true;
2132 }
2133 }
2134 }
2135 };
2136 var clean = function (table, stats) {
2137 var emptyRows = $_tyr3yk5jfuw8q47.filter($_2g609akijfuw8q6n.firstLayer(table, 'tr'), function (row) {
2138 return row.dom().childElementCount === 0;
2139 });
2140 $_tyr3yk5jfuw8q47.each(emptyRows, $_fl1deelhjfuw8qax.remove);
2141 if (stats.minCol() === stats.maxCol() || stats.minRow() === stats.maxRow()) {
2142 $_tyr3yk5jfuw8q47.each($_2g609akijfuw8q6n.firstLayer(table, 'th,td'), function (cell) {
2143 $_3q82t2l5jfuw8q93.remove(cell, 'rowspan');
2144 $_3q82t2l5jfuw8q93.remove(cell, 'colspan');
2145 });
2146 }
2147 $_3q82t2l5jfuw8q93.remove(table, 'width');
2148 $_3q82t2l5jfuw8q93.remove(table, 'height');
2149 $_bfod2hlejfuw8qac.remove(table, 'width');
2150 $_bfod2hlejfuw8qac.remove(table, 'height');
2151 };
2152 var extract = function (table, selectedSelector) {
2153 var isSelected = function (detail) {
2154 return $_enn9uikjjfuw8q6w.is(detail.element(), selectedSelector);
2155 };
2156 var list = $_dy3x0nkfjfuw8q5l.fromTable(table);
2157 var house = $_2ge24cldjfuw8qa3.generate(list);
2158 var stats = findSelectedStats(house, isSelected);
2159 var selector = 'th:not(' + selectedSelector + ')' + ',td:not(' + selectedSelector + ')';
2160 var unselectedCells = $_2g609akijfuw8q6n.filterFirstLayer(table, 'th,td', function (cell) {
2161 return $_enn9uikjjfuw8q6w.is(cell, selector);
2162 });
2163 $_tyr3yk5jfuw8q47.each(unselectedCells, $_fl1deelhjfuw8qax.remove);
2164 fillInGaps(list, house, stats, isSelected);
2165 clean(table, stats);
2166 return table;
2167 };
2168 var $_bbpooak9jfuw8q4m = {extract: extract};
2169
2170 var clone$1 = function (original, deep) {
2171 return $_xbeoqkkjfuw8q73.fromDom(original.dom().cloneNode(deep));
2172 };
2173 var shallow = function (original) {
2174 return clone$1(original, false);
2175 };
2176 var deep = function (original) {
2177 return clone$1(original, true);
2178 };
2179 var shallowAs = function (original, tag) {
2180 var nu = $_xbeoqkkjfuw8q73.fromTag(tag);
2181 var attributes = $_3q82t2l5jfuw8q93.clone(original);
2182 $_3q82t2l5jfuw8q93.setAll(nu, attributes);
2183 return nu;
2184 };
2185 var copy$1 = function (original, tag) {
2186 var nu = shallowAs(original, tag);
2187 var cloneChildren = $_s8scrkmjfuw8q7a.children(deep(original));
2188 $_9zaoqflijfuw8qb0.append(nu, cloneChildren);
2189 return nu;
2190 };
2191 var mutate = function (original, tag) {
2192 var nu = shallowAs(original, tag);
2193 $_fatuxylgjfuw8qav.before(original, nu);
2194 var children = $_s8scrkmjfuw8q7a.children(original);
2195 $_9zaoqflijfuw8qb0.append(nu, children);
2196 $_fl1deelhjfuw8qax.remove(original);
2197 return nu;
2198 };
2199 var $_ddvp06lkjfuw8qbt = {
2200 shallow: shallow,
2201 shallowAs: shallowAs,
2202 deep: deep,
2203 copy: copy$1,
2204 mutate: mutate
2205 };
2206
2207 function NodeValue(is, name) {
2208 var get = function (element) {
2209 if (!is(element))
2210 throw new Error('Can only get ' + name + ' value of a ' + name + ' node');
2211 return getOption(element).getOr('');
2212 };
2213 var getOptionIE10 = function (element) {
2214 try {
2215 return getOptionSafe(element);
2216 } catch (e) {
2217 return Option.none();
2218 }
2219 };
2220 var getOptionSafe = function (element) {
2221 return is(element) ? Option.from(element.dom().nodeValue) : Option.none();
2222 };
2223 var browser = $_fqgee0ktjfuw8q83.detect().browser;
2224 var getOption = browser.isIE() && browser.version.major === 10 ? getOptionIE10 : getOptionSafe;
2225 var set = function (element, value) {
2226 if (!is(element))
2227 throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');
2228 element.dom().nodeValue = value;
2229 };
2230 return {
2231 get: get,
2232 getOption: getOption,
2233 set: set
2234 };
2235 }
2236
2237 var api = NodeValue($_a8gk30l6jfuw8q9c.isText, 'text');
2238 var get$2 = function (element) {
2239 return api.get(element);
2240 };
2241 var getOption = function (element) {
2242 return api.getOption(element);
2243 };
2244 var set$2 = function (element, value) {
2245 api.set(element, value);
2246 };
2247 var $_6j8y7blnjfuw8qc3 = {
2248 get: get$2,
2249 getOption: getOption,
2250 set: set$2
2251 };
2252
2253 var getEnd = function (element) {
2254 return $_a8gk30l6jfuw8q9c.name(element) === 'img' ? 1 : $_6j8y7blnjfuw8qc3.getOption(element).fold(function () {
2255 return $_s8scrkmjfuw8q7a.children(element).length;
2256 }, function (v) {
2257 return v.length;
2258 });
2259 };
2260 var isEnd = function (element, offset) {
2261 return getEnd(element) === offset;
2262 };
2263 var isStart = function (element, offset) {
2264 return offset === 0;
2265 };
2266 var NBSP = '\xA0';
2267 var isTextNodeWithCursorPosition = function (el) {
2268 return $_6j8y7blnjfuw8qc3.getOption(el).filter(function (text) {
2269 return text.trim().length !== 0 || text.indexOf(NBSP) > -1;
2270 }).isSome();
2271 };
2272 var elementsWithCursorPosition = [
2273 'img',
2274 'br'
2275 ];
2276 var isCursorPosition = function (elem) {
2277 var hasCursorPosition = isTextNodeWithCursorPosition(elem);
2278 return hasCursorPosition || $_tyr3yk5jfuw8q47.contains(elementsWithCursorPosition, $_a8gk30l6jfuw8q9c.name(elem));
2279 };
2280 var $_6vfowrlmjfuw8qbz = {
2281 getEnd: getEnd,
2282 isEnd: isEnd,
2283 isStart: isStart,
2284 isCursorPosition: isCursorPosition
2285 };
2286
2287 var first$3 = function (element) {
2288 return $_11ympzlbjfuw8q9n.descendant(element, $_6vfowrlmjfuw8qbz.isCursorPosition);
2289 };
2290 var last$2 = function (element) {
2291 return descendantRtl(element, $_6vfowrlmjfuw8qbz.isCursorPosition);
2292 };
2293 var descendantRtl = function (scope, predicate) {
2294 var descend = function (element) {
2295 var children = $_s8scrkmjfuw8q7a.children(element);
2296 for (var i = children.length - 1; i >= 0; i--) {
2297 var child = children[i];
2298 if (predicate(child))
2299 return Option.some(child);
2300 var res = descend(child);
2301 if (res.isSome())
2302 return res;
2303 }
2304 return Option.none();
2305 };
2306 return descend(scope);
2307 };
2308 var $_ejrzj4lljfuw8qbw = {
2309 first: first$3,
2310 last: last$2
2311 };
2312
2313 var cell$1 = function () {
2314 var td = $_xbeoqkkjfuw8q73.fromTag('td');
2315 $_fatuxylgjfuw8qav.append(td, $_xbeoqkkjfuw8q73.fromTag('br'));
2316 return td;
2317 };
2318 var replace = function (cell, tag, attrs) {
2319 var replica = $_ddvp06lkjfuw8qbt.copy(cell, tag);
2320 $_11yiupkajfuw8q5c.each(attrs, function (v, k) {
2321 if (v === null)
2322 $_3q82t2l5jfuw8q93.remove(replica, k);
2323 else
2324 $_3q82t2l5jfuw8q93.set(replica, k, v);
2325 });
2326 return replica;
2327 };
2328 var pasteReplace = function (cellContent) {
2329 return cellContent;
2330 };
2331 var newRow = function (doc) {
2332 return function () {
2333 return $_xbeoqkkjfuw8q73.fromTag('tr', doc.dom());
2334 };
2335 };
2336 var cloneFormats = function (oldCell, newCell, formats) {
2337 var first = $_ejrzj4lljfuw8qbw.first(oldCell);
2338 return first.map(function (firstText) {
2339 var formatSelector = formats.join(',');
2340 var parents = $_6c9d0hl7jfuw8q9d.ancestors(firstText, formatSelector, function (element) {
2341 return $_e8rn66kojfuw8q7n.eq(element, oldCell);
2342 });
2343 return $_tyr3yk5jfuw8q47.foldr(parents, function (last, parent) {
2344 var clonedFormat = $_ddvp06lkjfuw8qbt.shallow(parent);
2345 $_fatuxylgjfuw8qav.append(last, clonedFormat);
2346 return clonedFormat;
2347 }, newCell);
2348 }).getOr(newCell);
2349 };
2350 var cellOperations = function (mutate, doc, formatsToClone) {
2351 var newCell = function (prev) {
2352 var doc = $_s8scrkmjfuw8q7a.owner(prev.element());
2353 var td = $_xbeoqkkjfuw8q73.fromTag($_a8gk30l6jfuw8q9c.name(prev.element()), doc.dom());
2354 var formats = formatsToClone.getOr([
2355 'strong',
2356 'em',
2357 'b',
2358 'i',
2359 'span',
2360 'font',
2361 'h1',
2362 'h2',
2363 'h3',
2364 'h4',
2365 'h5',
2366 'h6',
2367 'p',
2368 'div'
2369 ]);
2370 var lastNode = formats.length > 0 ? cloneFormats(prev.element(), td, formats) : td;
2371 $_fatuxylgjfuw8qav.append(lastNode, $_xbeoqkkjfuw8q73.fromTag('br'));
2372 $_bfod2hlejfuw8qac.copy(prev.element(), td);
2373 $_bfod2hlejfuw8qac.remove(td, 'height');
2374 if (prev.colspan() !== 1)
2375 $_bfod2hlejfuw8qac.remove(prev.element(), 'width');
2376 mutate(prev.element(), td);
2377 return td;
2378 };
2379 return {
2380 row: newRow(doc),
2381 cell: newCell,
2382 replace: replace,
2383 gap: cell$1
2384 };
2385 };
2386 var paste = function (doc) {
2387 return {
2388 row: newRow(doc),
2389 cell: cell$1,
2390 replace: pasteReplace,
2391 gap: cell$1
2392 };
2393 };
2394 var $_5ohg1eljjfuw8qb4 = {
2395 cellOperations: cellOperations,
2396 paste: paste
2397 };
2398
2399 var fromHtml$1 = function (html, scope) {
2400 var doc = scope || document;
2401 var div = doc.createElement('div');
2402 div.innerHTML = html;
2403 return $_s8scrkmjfuw8q7a.children($_xbeoqkkjfuw8q73.fromDom(div));
2404 };
2405 var fromTags = function (tags, scope) {
2406 return $_tyr3yk5jfuw8q47.map(tags, function (x) {
2407 return $_xbeoqkkjfuw8q73.fromTag(x, scope);
2408 });
2409 };
2410 var fromText$1 = function (texts, scope) {
2411 return $_tyr3yk5jfuw8q47.map(texts, function (x) {
2412 return $_xbeoqkkjfuw8q73.fromText(x, scope);
2413 });
2414 };
2415 var fromDom$1 = function (nodes) {
2416 return $_tyr3yk5jfuw8q47.map(nodes, $_xbeoqkkjfuw8q73.fromDom);
2417 };
2418 var $_du13u9lpjfuw8qce = {
2419 fromHtml: fromHtml$1,
2420 fromTags: fromTags,
2421 fromText: fromText$1,
2422 fromDom: fromDom$1
2423 };
2424
2425 var TagBoundaries = [
2426 'body',
2427 'p',
2428 'div',
2429 'article',
2430 'aside',
2431 'figcaption',
2432 'figure',
2433 'footer',
2434 'header',
2435 'nav',
2436 'section',
2437 'ol',
2438 'ul',
2439 'li',
2440 'table',
2441 'thead',
2442 'tbody',
2443 'tfoot',
2444 'caption',
2445 'tr',
2446 'td',
2447 'th',
2448 'h1',
2449 'h2',
2450 'h3',
2451 'h4',
2452 'h5',
2453 'h6',
2454 'blockquote',
2455 'pre',
2456 'address'
2457 ];
2458
2459 function DomUniverse() {
2460 var clone = function (element) {
2461 return $_xbeoqkkjfuw8q73.fromDom(element.dom().cloneNode(false));
2462 };
2463 var isBoundary = function (element) {
2464 if (!$_a8gk30l6jfuw8q9c.isElement(element))
2465 return false;
2466 if ($_a8gk30l6jfuw8q9c.name(element) === 'body')
2467 return true;
2468 return $_tyr3yk5jfuw8q47.contains(TagBoundaries, $_a8gk30l6jfuw8q9c.name(element));
2469 };
2470 var isEmptyTag = function (element) {
2471 if (!$_a8gk30l6jfuw8q9c.isElement(element))
2472 return false;
2473 return $_tyr3yk5jfuw8q47.contains([
2474 'br',
2475 'img',
2476 'hr',
2477 'input'
2478 ], $_a8gk30l6jfuw8q9c.name(element));
2479 };
2480 var comparePosition = function (element, other) {
2481 return element.dom().compareDocumentPosition(other.dom());
2482 };
2483 var copyAttributesTo = function (source, destination) {
2484 var as = $_3q82t2l5jfuw8q93.clone(source);
2485 $_3q82t2l5jfuw8q93.setAll(destination, as);
2486 };
2487 return {
2488 up: $_20nfr6k7jfuw8q4g.constant({
2489 selector: $_8wdrbmlajfuw8q9m.ancestor,
2490 closest: $_8wdrbmlajfuw8q9m.closest,
2491 predicate: $_11ympzlbjfuw8q9n.ancestor,
2492 all: $_s8scrkmjfuw8q7a.parents
2493 }),
2494 down: $_20nfr6k7jfuw8q4g.constant({
2495 selector: $_6c9d0hl7jfuw8q9d.descendants,
2496 predicate: $_4d3nfbl8jfuw8q9f.descendants
2497 }),
2498 styles: $_20nfr6k7jfuw8q4g.constant({
2499 get: $_bfod2hlejfuw8qac.get,
2500 getRaw: $_bfod2hlejfuw8qac.getRaw,
2501 set: $_bfod2hlejfuw8qac.set,
2502 remove: $_bfod2hlejfuw8qac.remove
2503 }),
2504 attrs: $_20nfr6k7jfuw8q4g.constant({
2505 get: $_3q82t2l5jfuw8q93.get,
2506 set: $_3q82t2l5jfuw8q93.set,
2507 remove: $_3q82t2l5jfuw8q93.remove,
2508 copyTo: copyAttributesTo
2509 }),
2510 insert: $_20nfr6k7jfuw8q4g.constant({
2511 before: $_fatuxylgjfuw8qav.before,
2512 after: $_fatuxylgjfuw8qav.after,
2513 afterAll: $_9zaoqflijfuw8qb0.after,
2514 append: $_fatuxylgjfuw8qav.append,
2515 appendAll: $_9zaoqflijfuw8qb0.append,
2516 prepend: $_fatuxylgjfuw8qav.prepend,
2517 wrap: $_fatuxylgjfuw8qav.wrap
2518 }),
2519 remove: $_20nfr6k7jfuw8q4g.constant({
2520 unwrap: $_fl1deelhjfuw8qax.unwrap,
2521 remove: $_fl1deelhjfuw8qax.remove
2522 }),
2523 create: $_20nfr6k7jfuw8q4g.constant({
2524 nu: $_xbeoqkkjfuw8q73.fromTag,
2525 clone: clone,
2526 text: $_xbeoqkkjfuw8q73.fromText
2527 }),
2528 query: $_20nfr6k7jfuw8q4g.constant({
2529 comparePosition: comparePosition,
2530 prevSibling: $_s8scrkmjfuw8q7a.prevSibling,
2531 nextSibling: $_s8scrkmjfuw8q7a.nextSibling
2532 }),
2533 property: $_20nfr6k7jfuw8q4g.constant({
2534 children: $_s8scrkmjfuw8q7a.children,
2535 name: $_a8gk30l6jfuw8q9c.name,
2536 parent: $_s8scrkmjfuw8q7a.parent,
2537 isText: $_a8gk30l6jfuw8q9c.isText,
2538 isComment: $_a8gk30l6jfuw8q9c.isComment,
2539 isElement: $_a8gk30l6jfuw8q9c.isElement,
2540 getText: $_6j8y7blnjfuw8qc3.get,
2541 setText: $_6j8y7blnjfuw8qc3.set,
2542 isBoundary: isBoundary,
2543 isEmptyTag: isEmptyTag
2544 }),
2545 eq: $_e8rn66kojfuw8q7n.eq,
2546 is: $_e8rn66kojfuw8q7n.is
2547 };
2548 }
2549
2550 var leftRight = $_5now9kbjfuw8q5e.immutable('left', 'right');
2551 var bisect = function (universe, parent, child) {
2552 var children = universe.property().children(parent);
2553 var index = $_tyr3yk5jfuw8q47.findIndex(children, $_20nfr6k7jfuw8q4g.curry(universe.eq, child));
2554 return index.map(function (ind) {
2555 return {
2556 before: $_20nfr6k7jfuw8q4g.constant(children.slice(0, ind)),
2557 after: $_20nfr6k7jfuw8q4g.constant(children.slice(ind + 1))
2558 };
2559 });
2560 };
2561 var breakToRight = function (universe, parent, child) {
2562 return bisect(universe, parent, child).map(function (parts) {
2563 var second = universe.create().clone(parent);
2564 universe.insert().appendAll(second, parts.after());
2565 universe.insert().after(parent, second);
2566 return leftRight(parent, second);
2567 });
2568 };
2569 var breakToLeft = function (universe, parent, child) {
2570 return bisect(universe, parent, child).map(function (parts) {
2571 var prior = universe.create().clone(parent);
2572 universe.insert().appendAll(prior, parts.before().concat([child]));
2573 universe.insert().appendAll(parent, parts.after());
2574 universe.insert().before(parent, prior);
2575 return leftRight(prior, parent);
2576 });
2577 };
2578 var breakPath = function (universe, item, isTop, breaker) {
2579 var result = $_5now9kbjfuw8q5e.immutable('first', 'second', 'splits');
2580 var next = function (child, group, splits) {
2581 var fallback = result(child, Option.none(), splits);
2582 if (isTop(child))
2583 return result(child, group, splits);
2584 else {
2585 return universe.property().parent(child).bind(function (parent) {
2586 return breaker(universe, parent, child).map(function (breakage) {
2587 var extra = [{
2588 first: breakage.left,
2589 second: breakage.right
2590 }];
2591 var nextChild = isTop(parent) ? parent : breakage.left();
2592 return next(nextChild, Option.some(breakage.right()), splits.concat(extra));
2593 }).getOr(fallback);
2594 });
2595 }
2596 };
2597 return next(item, Option.none(), []);
2598 };
2599 var $_fx4c5ilyjfuw8qf8 = {
2600 breakToLeft: breakToLeft,
2601 breakToRight: breakToRight,
2602 breakPath: breakPath
2603 };
2604
2605 var all$3 = function (universe, look, elements, f) {
2606 var head = elements[0];
2607 var tail = elements.slice(1);
2608 return f(universe, look, head, tail);
2609 };
2610 var oneAll = function (universe, look, elements) {
2611 return elements.length > 0 ? all$3(universe, look, elements, unsafeOne) : Option.none();
2612 };
2613 var unsafeOne = function (universe, look, head, tail) {
2614 var start = look(universe, head);
2615 return $_tyr3yk5jfuw8q47.foldr(tail, function (b, a) {
2616 var current = look(universe, a);
2617 return commonElement(universe, b, current);
2618 }, start);
2619 };
2620 var commonElement = function (universe, start, end) {
2621 return start.bind(function (s) {
2622 return end.filter($_20nfr6k7jfuw8q4g.curry(universe.eq, s));
2623 });
2624 };
2625 var $_40yiy6lzjfuw8qfi = {oneAll: oneAll};
2626
2627 var eq$1 = function (universe, item) {
2628 return $_20nfr6k7jfuw8q4g.curry(universe.eq, item);
2629 };
2630 var unsafeSubset = function (universe, common, ps1, ps2) {
2631 var children = universe.property().children(common);
2632 if (universe.eq(common, ps1[0]))
2633 return Option.some([ps1[0]]);
2634 if (universe.eq(common, ps2[0]))
2635 return Option.some([ps2[0]]);
2636 var finder = function (ps) {
2637 var topDown = $_tyr3yk5jfuw8q47.reverse(ps);
2638 var index = $_tyr3yk5jfuw8q47.findIndex(topDown, eq$1(universe, common)).getOr(-1);
2639 var item = index < topDown.length - 1 ? topDown[index + 1] : topDown[index];
2640 return $_tyr3yk5jfuw8q47.findIndex(children, eq$1(universe, item));
2641 };
2642 var startIndex = finder(ps1);
2643 var endIndex = finder(ps2);
2644 return startIndex.bind(function (sIndex) {
2645 return endIndex.map(function (eIndex) {
2646 var first = Math.min(sIndex, eIndex);
2647 var last = Math.max(sIndex, eIndex);
2648 return children.slice(first, last + 1);
2649 });
2650 });
2651 };
2652 var ancestors$2 = function (universe, start, end, _isRoot) {
2653 var isRoot = _isRoot !== undefined ? _isRoot : $_20nfr6k7jfuw8q4g.constant(false);
2654 var ps1 = [start].concat(universe.up().all(start));
2655 var ps2 = [end].concat(universe.up().all(end));
2656 var prune = function (path) {
2657 var index = $_tyr3yk5jfuw8q47.findIndex(path, isRoot);
2658 return index.fold(function () {
2659 return path;
2660 }, function (ind) {
2661 return path.slice(0, ind + 1);
2662 });
2663 };
2664 var pruned1 = prune(ps1);
2665 var pruned2 = prune(ps2);
2666 var shared = $_tyr3yk5jfuw8q47.find(pruned1, function (x) {
2667 return $_tyr3yk5jfuw8q47.exists(pruned2, eq$1(universe, x));
2668 });
2669 return {
2670 firstpath: $_20nfr6k7jfuw8q4g.constant(pruned1),
2671 secondpath: $_20nfr6k7jfuw8q4g.constant(pruned2),
2672 shared: $_20nfr6k7jfuw8q4g.constant(shared)
2673 };
2674 };
2675 var subset = function (universe, start, end) {
2676 var ancs = ancestors$2(universe, start, end);
2677 return ancs.shared().bind(function (shared) {
2678 return unsafeSubset(universe, shared, ancs.firstpath(), ancs.secondpath());
2679 });
2680 };
2681 var $_7m4t8jm0jfuw8qfq = {
2682 subset: subset,
2683 ancestors: ancestors$2
2684 };
2685
2686 var sharedOne = function (universe, look, elements) {
2687 return $_40yiy6lzjfuw8qfi.oneAll(universe, look, elements);
2688 };
2689 var subset$1 = function (universe, start, finish) {
2690 return $_7m4t8jm0jfuw8qfq.subset(universe, start, finish);
2691 };
2692 var ancestors$3 = function (universe, start, finish, _isRoot) {
2693 return $_7m4t8jm0jfuw8qfq.ancestors(universe, start, finish, _isRoot);
2694 };
2695 var breakToLeft$1 = function (universe, parent, child) {
2696 return $_fx4c5ilyjfuw8qf8.breakToLeft(universe, parent, child);
2697 };
2698 var breakToRight$1 = function (universe, parent, child) {
2699 return $_fx4c5ilyjfuw8qf8.breakToRight(universe, parent, child);
2700 };
2701 var breakPath$1 = function (universe, child, isTop, breaker) {
2702 return $_fx4c5ilyjfuw8qf8.breakPath(universe, child, isTop, breaker);
2703 };
2704 var $_23lsh2lxjfuw8qf5 = {
2705 sharedOne: sharedOne,
2706 subset: subset$1,
2707 ancestors: ancestors$3,
2708 breakToLeft: breakToLeft$1,
2709 breakToRight: breakToRight$1,
2710 breakPath: breakPath$1
2711 };
2712
2713 var universe = DomUniverse();
2714 var sharedOne$1 = function (look, elements) {
2715 return $_23lsh2lxjfuw8qf5.sharedOne(universe, function (universe, element) {
2716 return look(element);
2717 }, elements);
2718 };
2719 var subset$2 = function (start, finish) {
2720 return $_23lsh2lxjfuw8qf5.subset(universe, start, finish);
2721 };
2722 var ancestors$4 = function (start, finish, _isRoot) {
2723 return $_23lsh2lxjfuw8qf5.ancestors(universe, start, finish, _isRoot);
2724 };
2725 var breakToLeft$2 = function (parent, child) {
2726 return $_23lsh2lxjfuw8qf5.breakToLeft(universe, parent, child);
2727 };
2728 var breakToRight$2 = function (parent, child) {
2729 return $_23lsh2lxjfuw8qf5.breakToRight(universe, parent, child);
2730 };
2731 var breakPath$2 = function (child, isTop, breaker) {
2732 return $_23lsh2lxjfuw8qf5.breakPath(universe, child, isTop, function (u, p, c) {
2733 return breaker(p, c);
2734 });
2735 };
2736 var $_583a2nlujfuw8qdw = {
2737 sharedOne: sharedOne$1,
2738 subset: subset$2,
2739 ancestors: ancestors$4,
2740 breakToLeft: breakToLeft$2,
2741 breakToRight: breakToRight$2,
2742 breakPath: breakPath$2
2743 };
2744
2745 var inSelection = function (bounds, detail) {
2746 var leftEdge = detail.column();
2747 var rightEdge = detail.column() + detail.colspan() - 1;
2748 var topEdge = detail.row();
2749 var bottomEdge = detail.row() + detail.rowspan() - 1;
2750 return leftEdge <= bounds.finishCol() && rightEdge >= bounds.startCol() && (topEdge <= bounds.finishRow() && bottomEdge >= bounds.startRow());
2751 };
2752 var isWithin = function (bounds, detail) {
2753 return detail.column() >= bounds.startCol() && detail.column() + detail.colspan() - 1 <= bounds.finishCol() && detail.row() >= bounds.startRow() && detail.row() + detail.rowspan() - 1 <= bounds.finishRow();
2754 };
2755 var isRectangular = function (warehouse, bounds) {
2756 var isRect = true;
2757 var detailIsWithin = $_20nfr6k7jfuw8q4g.curry(isWithin, bounds);
2758 for (var i = bounds.startRow(); i <= bounds.finishRow(); i++) {
2759 for (var j = bounds.startCol(); j <= bounds.finishCol(); j++) {
2760 isRect = isRect && $_2ge24cldjfuw8qa3.getAt(warehouse, i, j).exists(detailIsWithin);
2761 }
2762 }
2763 return isRect ? Option.some(bounds) : Option.none();
2764 };
2765 var $_6nqrbhm3jfuw8qgd = {
2766 inSelection: inSelection,
2767 isWithin: isWithin,
2768 isRectangular: isRectangular
2769 };
2770
2771 var getBounds = function (detailA, detailB) {
2772 return $_ce5pyrkgjfuw8q5v.bounds(Math.min(detailA.row(), detailB.row()), Math.min(detailA.column(), detailB.column()), Math.max(detailA.row() + detailA.rowspan() - 1, detailB.row() + detailB.rowspan() - 1), Math.max(detailA.column() + detailA.colspan() - 1, detailB.column() + detailB.colspan() - 1));
2773 };
2774 var getAnyBox = function (warehouse, startCell, finishCell) {
2775 var startCoords = $_2ge24cldjfuw8qa3.findItem(warehouse, startCell, $_e8rn66kojfuw8q7n.eq);
2776 var finishCoords = $_2ge24cldjfuw8qa3.findItem(warehouse, finishCell, $_e8rn66kojfuw8q7n.eq);
2777 return startCoords.bind(function (sc) {
2778 return finishCoords.map(function (fc) {
2779 return getBounds(sc, fc);
2780 });
2781 });
2782 };
2783 var getBox = function (warehouse, startCell, finishCell) {
2784 return getAnyBox(warehouse, startCell, finishCell).bind(function (bounds) {
2785 return $_6nqrbhm3jfuw8qgd.isRectangular(warehouse, bounds);
2786 });
2787 };
2788 var $_ceqdh6m4jfuw8qgj = {
2789 getAnyBox: getAnyBox,
2790 getBox: getBox
2791 };
2792
2793 var moveBy = function (warehouse, cell, row, column) {
2794 return $_2ge24cldjfuw8qa3.findItem(warehouse, cell, $_e8rn66kojfuw8q7n.eq).bind(function (detail) {
2795 var startRow = row > 0 ? detail.row() + detail.rowspan() - 1 : detail.row();
2796 var startCol = column > 0 ? detail.column() + detail.colspan() - 1 : detail.column();
2797 var dest = $_2ge24cldjfuw8qa3.getAt(warehouse, startRow + row, startCol + column);
2798 return dest.map(function (d) {
2799 return d.element();
2800 });
2801 });
2802 };
2803 var intercepts = function (warehouse, start, finish) {
2804 return $_ceqdh6m4jfuw8qgj.getAnyBox(warehouse, start, finish).map(function (bounds) {
2805 var inside = $_2ge24cldjfuw8qa3.filterItems(warehouse, $_20nfr6k7jfuw8q4g.curry($_6nqrbhm3jfuw8qgd.inSelection, bounds));
2806 return $_tyr3yk5jfuw8q47.map(inside, function (detail) {
2807 return detail.element();
2808 });
2809 });
2810 };
2811 var parentCell = function (warehouse, innerCell) {
2812 var isContainedBy = function (c1, c2) {
2813 return $_e8rn66kojfuw8q7n.contains(c2, c1);
2814 };
2815 return $_2ge24cldjfuw8qa3.findItem(warehouse, innerCell, isContainedBy).bind(function (detail) {
2816 return detail.element();
2817 });
2818 };
2819 var $_fej9f9m2jfuw8qg6 = {
2820 moveBy: moveBy,
2821 intercepts: intercepts,
2822 parentCell: parentCell
2823 };
2824
2825 var moveBy$1 = function (cell, deltaRow, deltaColumn) {
2826 return $_aqhz9okhjfuw8q5y.table(cell).bind(function (table) {
2827 var warehouse = getWarehouse(table);
2828 return $_fej9f9m2jfuw8qg6.moveBy(warehouse, cell, deltaRow, deltaColumn);
2829 });
2830 };
2831 var intercepts$1 = function (table, first, last) {
2832 var warehouse = getWarehouse(table);
2833 return $_fej9f9m2jfuw8qg6.intercepts(warehouse, first, last);
2834 };
2835 var nestedIntercepts = function (table, first, firstTable, last, lastTable) {
2836 var warehouse = getWarehouse(table);
2837 var startCell = $_e8rn66kojfuw8q7n.eq(table, firstTable) ? first : $_fej9f9m2jfuw8qg6.parentCell(warehouse, first);
2838 var lastCell = $_e8rn66kojfuw8q7n.eq(table, lastTable) ? last : $_fej9f9m2jfuw8qg6.parentCell(warehouse, last);
2839 return $_fej9f9m2jfuw8qg6.intercepts(warehouse, startCell, lastCell);
2840 };
2841 var getBox$1 = function (table, first, last) {
2842 var warehouse = getWarehouse(table);
2843 return $_ceqdh6m4jfuw8qgj.getBox(warehouse, first, last);
2844 };
2845 var getWarehouse = function (table) {
2846 var list = $_dy3x0nkfjfuw8q5l.fromTable(table);
2847 return $_2ge24cldjfuw8qa3.generate(list);
2848 };
2849 var $_53tlnwm1jfuw8qg2 = {
2850 moveBy: moveBy$1,
2851 intercepts: intercepts$1,
2852 nestedIntercepts: nestedIntercepts,
2853 getBox: getBox$1
2854 };
2855
2856 var lookupTable = function (container, isRoot) {
2857 return $_8wdrbmlajfuw8q9m.ancestor(container, 'table');
2858 };
2859 var identified = $_5now9kbjfuw8q5e.immutableBag([
2860 'boxes',
2861 'start',
2862 'finish'
2863 ], []);
2864 var identify = function (start, finish, isRoot) {
2865 var getIsRoot = function (rootTable) {
2866 return function (element) {
2867 return isRoot(element) || $_e8rn66kojfuw8q7n.eq(element, rootTable);
2868 };
2869 };
2870 if ($_e8rn66kojfuw8q7n.eq(start, finish)) {
2871 return Option.some(identified({
2872 boxes: Option.some([start]),
2873 start: start,
2874 finish: finish
2875 }));
2876 } else {
2877 return lookupTable(start, isRoot).bind(function (startTable) {
2878 return lookupTable(finish, isRoot).bind(function (finishTable) {
2879 if ($_e8rn66kojfuw8q7n.eq(startTable, finishTable)) {
2880 return Option.some(identified({
2881 boxes: $_53tlnwm1jfuw8qg2.intercepts(startTable, start, finish),
2882 start: start,
2883 finish: finish
2884 }));
2885 } else if ($_e8rn66kojfuw8q7n.contains(startTable, finishTable)) {
2886 var ancestorCells = $_6c9d0hl7jfuw8q9d.ancestors(finish, 'td,th', getIsRoot(startTable));
2887 var finishCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : finish;
2888 return Option.some(identified({
2889 boxes: $_53tlnwm1jfuw8qg2.nestedIntercepts(startTable, start, startTable, finish, finishTable),
2890 start: start,
2891 finish: finishCell
2892 }));
2893 } else if ($_e8rn66kojfuw8q7n.contains(finishTable, startTable)) {
2894 var ancestorCells = $_6c9d0hl7jfuw8q9d.ancestors(start, 'td,th', getIsRoot(finishTable));
2895 var startCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : start;
2896 return Option.some(identified({
2897 boxes: $_53tlnwm1jfuw8qg2.nestedIntercepts(finishTable, start, startTable, finish, finishTable),
2898 start: start,
2899 finish: startCell
2900 }));
2901 } else {
2902 return $_583a2nlujfuw8qdw.ancestors(start, finish).shared().bind(function (lca) {
2903 return $_8wdrbmlajfuw8q9m.closest(lca, 'table', isRoot).bind(function (lcaTable) {
2904 var finishAncestorCells = $_6c9d0hl7jfuw8q9d.ancestors(finish, 'td,th', getIsRoot(lcaTable));
2905 var finishCell = finishAncestorCells.length > 0 ? finishAncestorCells[finishAncestorCells.length - 1] : finish;
2906 var startAncestorCells = $_6c9d0hl7jfuw8q9d.ancestors(start, 'td,th', getIsRoot(lcaTable));
2907 var startCell = startAncestorCells.length > 0 ? startAncestorCells[startAncestorCells.length - 1] : start;
2908 return Option.some(identified({
2909 boxes: $_53tlnwm1jfuw8qg2.nestedIntercepts(lcaTable, start, startTable, finish, finishTable),
2910 start: startCell,
2911 finish: finishCell
2912 }));
2913 });
2914 });
2915 }
2916 });
2917 });
2918 }
2919 };
2920 var retrieve = function (container, selector) {
2921 var sels = $_6c9d0hl7jfuw8q9d.descendants(container, selector);
2922 return sels.length > 0 ? Option.some(sels) : Option.none();
2923 };
2924 var getLast = function (boxes, lastSelectedSelector) {
2925 return $_tyr3yk5jfuw8q47.find(boxes, function (box) {
2926 return $_enn9uikjjfuw8q6w.is(box, lastSelectedSelector);
2927 });
2928 };
2929 var getEdges = function (container, firstSelectedSelector, lastSelectedSelector) {
2930 return $_8wdrbmlajfuw8q9m.descendant(container, firstSelectedSelector).bind(function (first) {
2931 return $_8wdrbmlajfuw8q9m.descendant(container, lastSelectedSelector).bind(function (last) {
2932 return $_583a2nlujfuw8qdw.sharedOne(lookupTable, [
2933 first,
2934 last
2935 ]).map(function (tbl) {
2936 return {
2937 first: $_20nfr6k7jfuw8q4g.constant(first),
2938 last: $_20nfr6k7jfuw8q4g.constant(last),
2939 table: $_20nfr6k7jfuw8q4g.constant(tbl)
2940 };
2941 });
2942 });
2943 });
2944 };
2945 var expandTo = function (finish, firstSelectedSelector) {
2946 return $_8wdrbmlajfuw8q9m.ancestor(finish, 'table').bind(function (table) {
2947 return $_8wdrbmlajfuw8q9m.descendant(table, firstSelectedSelector).bind(function (start) {
2948 return identify(start, finish).bind(function (identified) {
2949 return identified.boxes().map(function (boxes) {
2950 return {
2951 boxes: $_20nfr6k7jfuw8q4g.constant(boxes),
2952 start: $_20nfr6k7jfuw8q4g.constant(identified.start()),
2953 finish: $_20nfr6k7jfuw8q4g.constant(identified.finish())
2954 };
2955 });
2956 });
2957 });
2958 });
2959 };
2960 var shiftSelection = function (boxes, deltaRow, deltaColumn, firstSelectedSelector, lastSelectedSelector) {
2961 return getLast(boxes, lastSelectedSelector).bind(function (last) {
2962 return $_53tlnwm1jfuw8qg2.moveBy(last, deltaRow, deltaColumn).bind(function (finish) {
2963 return expandTo(finish, firstSelectedSelector);
2964 });
2965 });
2966 };
2967 var $_dpd405ltjfuw8qd8 = {
2968 identify: identify,
2969 retrieve: retrieve,
2970 shiftSelection: shiftSelection,
2971 getEdges: getEdges
2972 };
2973
2974 var retrieve$1 = function (container, selector) {
2975 return $_dpd405ltjfuw8qd8.retrieve(container, selector);
2976 };
2977 var retrieveBox = function (container, firstSelectedSelector, lastSelectedSelector) {
2978 return $_dpd405ltjfuw8qd8.getEdges(container, firstSelectedSelector, lastSelectedSelector).bind(function (edges) {
2979 var isRoot = function (ancestor) {
2980 return $_e8rn66kojfuw8q7n.eq(container, ancestor);
2981 };
2982 var firstAncestor = $_8wdrbmlajfuw8q9m.ancestor(edges.first(), 'thead,tfoot,tbody,table', isRoot);
2983 var lastAncestor = $_8wdrbmlajfuw8q9m.ancestor(edges.last(), 'thead,tfoot,tbody,table', isRoot);
2984 return firstAncestor.bind(function (fA) {
2985 return lastAncestor.bind(function (lA) {
2986 return $_e8rn66kojfuw8q7n.eq(fA, lA) ? $_53tlnwm1jfuw8qg2.getBox(edges.table(), edges.first(), edges.last()) : Option.none();
2987 });
2988 });
2989 });
2990 };
2991 var $_1mynollsjfuw8qcy = {
2992 retrieve: retrieve$1,
2993 retrieveBox: retrieveBox
2994 };
2995
2996 var selected = 'data-mce-selected';
2997 var selectedSelector = 'td[' + selected + '],th[' + selected + ']';
2998 var attributeSelector = '[' + selected + ']';
2999 var firstSelected = 'data-mce-first-selected';
3000 var firstSelectedSelector = 'td[' + firstSelected + '],th[' + firstSelected + ']';
3001 var lastSelected = 'data-mce-last-selected';
3002 var lastSelectedSelector = 'td[' + lastSelected + '],th[' + lastSelected + ']';
3003 var $_f8tr2nm5jfuw8qgp = {
3004 selected: $_20nfr6k7jfuw8q4g.constant(selected),
3005 selectedSelector: $_20nfr6k7jfuw8q4g.constant(selectedSelector),
3006 attributeSelector: $_20nfr6k7jfuw8q4g.constant(attributeSelector),
3007 firstSelected: $_20nfr6k7jfuw8q4g.constant(firstSelected),
3008 firstSelectedSelector: $_20nfr6k7jfuw8q4g.constant(firstSelectedSelector),
3009 lastSelected: $_20nfr6k7jfuw8q4g.constant(lastSelected),
3010 lastSelectedSelector: $_20nfr6k7jfuw8q4g.constant(lastSelectedSelector)
3011 };
3012
3013 var generate$1 = function (cases) {
3014 if (!$_g6mvnrk8jfuw8q4k.isArray(cases)) {
3015 throw new Error('cases must be an array');
3016 }
3017 if (cases.length === 0) {
3018 throw new Error('there must be at least one case');
3019 }
3020 var constructors = [];
3021 var adt = {};
3022 $_tyr3yk5jfuw8q47.each(cases, function (acase, count) {
3023 var keys = $_11yiupkajfuw8q5c.keys(acase);
3024 if (keys.length !== 1) {
3025 throw new Error('one and only one name per case');
3026 }
3027 var key = keys[0];
3028 var value = acase[key];
3029 if (adt[key] !== undefined) {
3030 throw new Error('duplicate key detected:' + key);
3031 } else if (key === 'cata') {
3032 throw new Error('cannot have a case named cata (sorry)');
3033 } else if (!$_g6mvnrk8jfuw8q4k.isArray(value)) {
3034 throw new Error('case arguments must be an array');
3035 }
3036 constructors.push(key);
3037 adt[key] = function () {
3038 var argLength = arguments.length;
3039 if (argLength !== value.length) {
3040 throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);
3041 }
3042 var args = new Array(argLength);
3043 for (var i = 0; i < args.length; i++)
3044 args[i] = arguments[i];
3045 var match = function (branches) {
3046 var branchKeys = $_11yiupkajfuw8q5c.keys(branches);
3047 if (constructors.length !== branchKeys.length) {
3048 throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\nActual: ' + branchKeys.join(','));
3049 }
3050 var allReqd = $_tyr3yk5jfuw8q47.forall(constructors, function (reqKey) {
3051 return $_tyr3yk5jfuw8q47.contains(branchKeys, reqKey);
3052 });
3053 if (!allReqd)
3054 throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\nRequired: ' + constructors.join(', '));
3055 return branches[key].apply(null, args);
3056 };
3057 return {
3058 fold: function () {
3059 if (arguments.length !== cases.length) {
3060 throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + arguments.length);
3061 }
3062 var target = arguments[count];
3063 return target.apply(null, args);
3064 },
3065 match: match,
3066 log: function (label) {
3067 console.log(label, {
3068 constructors: constructors,
3069 constructor: key,
3070 params: args
3071 });
3072 }
3073 };
3074 };
3075 });
3076 return adt;
3077 };
3078 var $_7sbzam7jfuw8qgu = {generate: generate$1};
3079
3080 var type$1 = $_7sbzam7jfuw8qgu.generate([
3081 {none: []},
3082 {multiple: ['elements']},
3083 {single: ['selection']}
3084 ]);
3085 var cata = function (subject, onNone, onMultiple, onSingle) {
3086 return subject.fold(onNone, onMultiple, onSingle);
3087 };
3088 var $_cx0pwam6jfuw8qgr = {
3089 cata: cata,
3090 none: type$1.none,
3091 multiple: type$1.multiple,
3092 single: type$1.single
3093 };
3094
3095 var selection = function (cell, selections) {
3096 return $_cx0pwam6jfuw8qgr.cata(selections.get(), $_20nfr6k7jfuw8q4g.constant([]), $_20nfr6k7jfuw8q4g.identity, $_20nfr6k7jfuw8q4g.constant([cell]));
3097 };
3098 var unmergable = function (cell, selections) {
3099 var hasSpan = function (elem) {
3100 return $_3q82t2l5jfuw8q93.has(elem, 'rowspan') && parseInt($_3q82t2l5jfuw8q93.get(elem, 'rowspan'), 10) > 1 || $_3q82t2l5jfuw8q93.has(elem, 'colspan') && parseInt($_3q82t2l5jfuw8q93.get(elem, 'colspan'), 10) > 1;
3101 };
3102 var candidates = selection(cell, selections);
3103 return candidates.length > 0 && $_tyr3yk5jfuw8q47.forall(candidates, hasSpan) ? Option.some(candidates) : Option.none();
3104 };
3105 var mergable = function (table, selections) {
3106 return $_cx0pwam6jfuw8qgr.cata(selections.get(), Option.none, function (cells, _env) {
3107 if (cells.length === 0) {
3108 return Option.none();
3109 }
3110 return $_1mynollsjfuw8qcy.retrieveBox(table, $_f8tr2nm5jfuw8qgp.firstSelectedSelector(), $_f8tr2nm5jfuw8qgp.lastSelectedSelector()).bind(function (bounds) {
3111 return cells.length > 1 ? Option.some({
3112 bounds: $_20nfr6k7jfuw8q4g.constant(bounds),
3113 cells: $_20nfr6k7jfuw8q4g.constant(cells)
3114 }) : Option.none();
3115 });
3116 }, Option.none);
3117 };
3118 var $_3xucu8lrjfuw8qco = {
3119 mergable: mergable,
3120 unmergable: unmergable,
3121 selection: selection
3122 };
3123
3124 var noMenu = function (cell) {
3125 return {
3126 element: $_20nfr6k7jfuw8q4g.constant(cell),
3127 mergable: Option.none,
3128 unmergable: Option.none,
3129 selection: $_20nfr6k7jfuw8q4g.constant([cell])
3130 };
3131 };
3132 var forMenu = function (selections, table, cell) {
3133 return {
3134 element: $_20nfr6k7jfuw8q4g.constant(cell),
3135 mergable: $_20nfr6k7jfuw8q4g.constant($_3xucu8lrjfuw8qco.mergable(table, selections)),
3136 unmergable: $_20nfr6k7jfuw8q4g.constant($_3xucu8lrjfuw8qco.unmergable(cell, selections)),
3137 selection: $_20nfr6k7jfuw8q4g.constant($_3xucu8lrjfuw8qco.selection(cell, selections))
3138 };
3139 };
3140 var notCell$1 = function (element) {
3141 return noMenu(element);
3142 };
3143 var paste$1 = $_5now9kbjfuw8q5e.immutable('element', 'clipboard', 'generators');
3144 var pasteRows = function (selections, table, cell, clipboard, generators) {
3145 return {
3146 element: $_20nfr6k7jfuw8q4g.constant(cell),
3147 mergable: Option.none,
3148 unmergable: Option.none,
3149 selection: $_20nfr6k7jfuw8q4g.constant($_3xucu8lrjfuw8qco.selection(cell, selections)),
3150 clipboard: $_20nfr6k7jfuw8q4g.constant(clipboard),
3151 generators: $_20nfr6k7jfuw8q4g.constant(generators)
3152 };
3153 };
3154 var $_5b7h1hlqjfuw8qci = {
3155 noMenu: noMenu,
3156 forMenu: forMenu,
3157 notCell: notCell$1,
3158 paste: paste$1,
3159 pasteRows: pasteRows
3160 };
3161
3162 var extractSelected = function (cells) {
3163 return $_aqhz9okhjfuw8q5y.table(cells[0]).map($_ddvp06lkjfuw8qbt.deep).map(function (replica) {
3164 return [$_bbpooak9jfuw8q4m.extract(replica, $_f8tr2nm5jfuw8qgp.attributeSelector())];
3165 });
3166 };
3167 var serializeElement = function (editor, elm) {
3168 return editor.selection.serializer.serialize(elm.dom(), {});
3169 };
3170 var registerEvents = function (editor, selections, actions, cellSelection) {
3171 editor.on('BeforeGetContent', function (e) {
3172 var multiCellContext = function (cells) {
3173 e.preventDefault();
3174 extractSelected(cells).each(function (elements) {
3175 e.content = $_tyr3yk5jfuw8q47.map(elements, function (elm) {
3176 return serializeElement(editor, elm);
3177 }).join('');
3178 });
3179 };
3180 if (e.selection === true) {
3181 $_cx0pwam6jfuw8qgr.cata(selections.get(), $_20nfr6k7jfuw8q4g.noop, multiCellContext, $_20nfr6k7jfuw8q4g.noop);
3182 }
3183 });
3184 editor.on('BeforeSetContent', function (e) {
3185 if (e.selection === true && e.paste === true) {
3186 var cellOpt = Option.from(editor.dom.getParent(editor.selection.getStart(), 'th,td'));
3187 cellOpt.each(function (domCell) {
3188 var cell = $_xbeoqkkjfuw8q73.fromDom(domCell);
3189 var table = $_aqhz9okhjfuw8q5y.table(cell);
3190 table.bind(function (table) {
3191 var elements = $_tyr3yk5jfuw8q47.filter($_du13u9lpjfuw8qce.fromHtml(e.content), function (content) {
3192 return $_a8gk30l6jfuw8q9c.name(content) !== 'meta';
3193 });
3194 if (elements.length === 1 && $_a8gk30l6jfuw8q9c.name(elements[0]) === 'table') {
3195 e.preventDefault();
3196 var doc = $_xbeoqkkjfuw8q73.fromDom(editor.getDoc());
3197 var generators = $_5ohg1eljjfuw8qb4.paste(doc);
3198 var targets = $_5b7h1hlqjfuw8qci.paste(cell, elements[0], generators);
3199 actions.pasteCells(table, targets).each(function (rng) {
3200 editor.selection.setRng(rng);
3201 editor.focus();
3202 cellSelection.clear(table);
3203 });
3204 }
3205 });
3206 });
3207 }
3208 });
3209 };
3210 var $_3y1hv8k4jfuw8q3l = {registerEvents: registerEvents};
3211
3212 function Dimension(name, getOffset) {
3213 var set = function (element, h) {
3214 if (!$_g6mvnrk8jfuw8q4k.isNumber(h) && !h.match(/^[0-9]+$/))
3215 throw name + '.set accepts only positive integer values. Value was ' + h;
3216 var dom = element.dom();
3217 if ($_b75qp5lfjfuw8qau.isSupported(dom))
3218 dom.style[name] = h + 'px';
3219 };
3220 var get = function (element) {
3221 var r = getOffset(element);
3222 if (r <= 0 || r === null) {
3223 var css = $_bfod2hlejfuw8qac.get(element, name);
3224 return parseFloat(css) || 0;
3225 }
3226 return r;
3227 };
3228 var getOuter = get;
3229 var aggregate = function (element, properties) {
3230 return $_tyr3yk5jfuw8q47.foldl(properties, function (acc, property) {
3231 var val = $_bfod2hlejfuw8qac.get(element, property);
3232 var value = val === undefined ? 0 : parseInt(val, 10);
3233 return isNaN(value) ? acc : acc + value;
3234 }, 0);
3235 };
3236 var max = function (element, value, properties) {
3237 var cumulativeInclusions = aggregate(element, properties);
3238 var absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;
3239 return absoluteMax;
3240 };
3241 return {
3242 set: set,
3243 get: get,
3244 getOuter: getOuter,
3245 aggregate: aggregate,
3246 max: max
3247 };
3248 }
3249
3250 var api$1 = Dimension('height', function (element) {
3251 return $_atd1tul9jfuw8q9i.inBody(element) ? element.dom().getBoundingClientRect().height : element.dom().offsetHeight;
3252 });
3253 var set$3 = function (element, h) {
3254 api$1.set(element, h);
3255 };
3256 var get$3 = function (element) {
3257 return api$1.get(element);
3258 };
3259 var getOuter = function (element) {
3260 return api$1.getOuter(element);
3261 };
3262 var setMax = function (element, value) {
3263 var inclusions = [
3264 'margin-top',
3265 'border-top-width',
3266 'padding-top',
3267 'padding-bottom',
3268 'border-bottom-width',
3269 'margin-bottom'
3270 ];
3271 var absMax = api$1.max(element, value, inclusions);
3272 $_bfod2hlejfuw8qac.set(element, 'max-height', absMax + 'px');
3273 };
3274 var $_cymdhgmcjfuw8qif = {
3275 set: set$3,
3276 get: get$3,
3277 getOuter: getOuter,
3278 setMax: setMax
3279 };
3280
3281 var api$2 = Dimension('width', function (element) {
3282 return element.dom().offsetWidth;
3283 });
3284 var set$4 = function (element, h) {
3285 api$2.set(element, h);
3286 };
3287 var get$4 = function (element) {
3288 return api$2.get(element);
3289 };
3290 var getOuter$1 = function (element) {
3291 return api$2.getOuter(element);
3292 };
3293 var setMax$1 = function (element, value) {
3294 var inclusions = [
3295 'margin-left',
3296 'border-left-width',
3297 'padding-left',
3298 'padding-right',
3299 'border-right-width',
3300 'margin-right'
3301 ];
3302 var absMax = api$2.max(element, value, inclusions);
3303 $_bfod2hlejfuw8qac.set(element, 'max-width', absMax + 'px');
3304 };
3305 var $_fj252lmejfuw8qin = {
3306 set: set$4,
3307 get: get$4,
3308 getOuter: getOuter$1,
3309 setMax: setMax$1
3310 };
3311
3312 var platform = $_fqgee0ktjfuw8q83.detect();
3313 var needManualCalc = function () {
3314 return platform.browser.isIE() || platform.browser.isEdge();
3315 };
3316 var toNumber = function (px, fallback) {
3317 var num = parseFloat(px);
3318 return isNaN(num) ? fallback : num;
3319 };
3320 var getProp = function (elm, name, fallback) {
3321 return toNumber($_bfod2hlejfuw8qac.get(elm, name), fallback);
3322 };
3323 var getCalculatedHeight = function (cell) {
3324 var paddingTop = getProp(cell, 'padding-top', 0);
3325 var paddingBottom = getProp(cell, 'padding-bottom', 0);
3326 var borderTop = getProp(cell, 'border-top-width', 0);
3327 var borderBottom = getProp(cell, 'border-bottom-width', 0);
3328 var height = cell.dom().getBoundingClientRect().height;
3329 var boxSizing = $_bfod2hlejfuw8qac.get(cell, 'box-sizing');
3330 var borders = borderTop + borderBottom;
3331 return boxSizing === 'border-box' ? height : height - paddingTop - paddingBottom - borders;
3332 };
3333 var getWidth = function (cell) {
3334 return getProp(cell, 'width', $_fj252lmejfuw8qin.get(cell));
3335 };
3336 var getHeight = function (cell) {
3337 return needManualCalc() ? getCalculatedHeight(cell) : getProp(cell, 'height', $_cymdhgmcjfuw8qif.get(cell));
3338 };
3339 var $_ddwgqpmbjfuw8qi6 = {
3340 getWidth: getWidth,
3341 getHeight: getHeight
3342 };
3343
3344 var genericSizeRegex = /(\d+(\.\d+)?)(\w|%)*/;
3345 var percentageBasedSizeRegex = /(\d+(\.\d+)?)%/;
3346 var pixelBasedSizeRegex = /(\d+(\.\d+)?)px|em/;
3347 var setPixelWidth = function (cell, amount) {
3348 $_bfod2hlejfuw8qac.set(cell, 'width', amount + 'px');
3349 };
3350 var setPercentageWidth = function (cell, amount) {
3351 $_bfod2hlejfuw8qac.set(cell, 'width', amount + '%');
3352 };
3353 var setHeight = function (cell, amount) {
3354 $_bfod2hlejfuw8qac.set(cell, 'height', amount + 'px');
3355 };
3356 var getHeightValue = function (cell) {
3357 return $_bfod2hlejfuw8qac.getRaw(cell, 'height').getOrThunk(function () {
3358 return $_ddwgqpmbjfuw8qi6.getHeight(cell) + 'px';
3359 });
3360 };
3361 var convert = function (cell, number, getter, setter) {
3362 var newSize = $_aqhz9okhjfuw8q5y.table(cell).map(function (table) {
3363 var total = getter(table);
3364 return Math.floor(number / 100 * total);
3365 }).getOr(number);
3366 setter(cell, newSize);
3367 return newSize;
3368 };
3369 var normalizePixelSize = function (value, cell, getter, setter) {
3370 var number = parseInt(value, 10);
3371 return $_ey09l9l2jfuw8q8y.endsWith(value, '%') && $_a8gk30l6jfuw8q9c.name(cell) !== 'table' ? convert(cell, number, getter, setter) : number;
3372 };
3373 var getTotalHeight = function (cell) {
3374 var value = getHeightValue(cell);
3375 if (!value)
3376 return $_cymdhgmcjfuw8qif.get(cell);
3377 return normalizePixelSize(value, cell, $_cymdhgmcjfuw8qif.get, setHeight);
3378 };
3379 var get$5 = function (cell, type, f) {
3380 var v = f(cell);
3381 var span = getSpan(cell, type);
3382 return v / span;
3383 };
3384 var getSpan = function (cell, type) {
3385 return $_3q82t2l5jfuw8q93.has(cell, type) ? parseInt($_3q82t2l5jfuw8q93.get(cell, type), 10) : 1;
3386 };
3387 var getRawWidth = function (element) {
3388 var cssWidth = $_bfod2hlejfuw8qac.getRaw(element, 'width');
3389 return cssWidth.fold(function () {
3390 return Option.from($_3q82t2l5jfuw8q93.get(element, 'width'));
3391 }, function (width) {
3392 return Option.some(width);
3393 });
3394 };
3395 var normalizePercentageWidth = function (cellWidth, tableSize) {
3396 return cellWidth / tableSize.pixelWidth() * 100;
3397 };
3398 var choosePercentageSize = function (element, width, tableSize) {
3399 if (percentageBasedSizeRegex.test(width)) {
3400 var percentMatch = percentageBasedSizeRegex.exec(width);
3401 return parseFloat(percentMatch[1]);
3402 } else {
3403 var fallbackWidth = $_fj252lmejfuw8qin.get(element);
3404 var intWidth = parseInt(fallbackWidth, 10);
3405 return normalizePercentageWidth(intWidth, tableSize);
3406 }
3407 };
3408 var getPercentageWidth = function (cell, tableSize) {
3409 var width = getRawWidth(cell);
3410 return width.fold(function () {
3411 var width = $_fj252lmejfuw8qin.get(cell);
3412 var intWidth = parseInt(width, 10);
3413 return normalizePercentageWidth(intWidth, tableSize);
3414 }, function (width) {
3415 return choosePercentageSize(cell, width, tableSize);
3416 });
3417 };
3418 var normalizePixelWidth = function (cellWidth, tableSize) {
3419 return cellWidth / 100 * tableSize.pixelWidth();
3420 };
3421 var choosePixelSize = function (element, width, tableSize) {
3422 if (pixelBasedSizeRegex.test(width)) {
3423 var pixelMatch = pixelBasedSizeRegex.exec(width);
3424 return parseInt(pixelMatch[1], 10);
3425 } else if (percentageBasedSizeRegex.test(width)) {
3426 var percentMatch = percentageBasedSizeRegex.exec(width);
3427 var floatWidth = parseFloat(percentMatch[1]);
3428 return normalizePixelWidth(floatWidth, tableSize);
3429 } else {
3430 var fallbackWidth = $_fj252lmejfuw8qin.get(element);
3431 return parseInt(fallbackWidth, 10);
3432 }
3433 };
3434 var getPixelWidth = function (cell, tableSize) {
3435 var width = getRawWidth(cell);
3436 return width.fold(function () {
3437 var width = $_fj252lmejfuw8qin.get(cell);
3438 var intWidth = parseInt(width, 10);
3439 return intWidth;
3440 }, function (width) {
3441 return choosePixelSize(cell, width, tableSize);
3442 });
3443 };
3444 var getHeight$1 = function (cell) {
3445 return get$5(cell, 'rowspan', getTotalHeight);
3446 };
3447 var getGenericWidth = function (cell) {
3448 var width = getRawWidth(cell);
3449 return width.bind(function (width) {
3450 if (genericSizeRegex.test(width)) {
3451 var match = genericSizeRegex.exec(width);
3452 return Option.some({
3453 width: $_20nfr6k7jfuw8q4g.constant(match[1]),
3454 unit: $_20nfr6k7jfuw8q4g.constant(match[3])
3455 });
3456 } else {
3457 return Option.none();
3458 }
3459 });
3460 };
3461 var setGenericWidth = function (cell, amount, unit) {
3462 $_bfod2hlejfuw8qac.set(cell, 'width', amount + unit);
3463 };
3464 var $_by2skemajfuw8qhj = {
3465 percentageBasedSizeRegex: $_20nfr6k7jfuw8q4g.constant(percentageBasedSizeRegex),
3466 pixelBasedSizeRegex: $_20nfr6k7jfuw8q4g.constant(pixelBasedSizeRegex),
3467 setPixelWidth: setPixelWidth,
3468 setPercentageWidth: setPercentageWidth,
3469 setHeight: setHeight,
3470 getPixelWidth: getPixelWidth,
3471 getPercentageWidth: getPercentageWidth,
3472 getGenericWidth: getGenericWidth,
3473 setGenericWidth: setGenericWidth,
3474 getHeight: getHeight$1,
3475 getRawWidth: getRawWidth
3476 };
3477
3478 var halve = function (main, other) {
3479 var width = $_by2skemajfuw8qhj.getGenericWidth(main);
3480 width.each(function (width) {
3481 var newWidth = width.width() / 2;
3482 $_by2skemajfuw8qhj.setGenericWidth(main, newWidth, width.unit());
3483 $_by2skemajfuw8qhj.setGenericWidth(other, newWidth, width.unit());
3484 });
3485 };
3486 var $_57e49gm9jfuw8qhh = {halve: halve};
3487
3488 var attached = function (element, scope) {
3489 var doc = scope || $_xbeoqkkjfuw8q73.fromDom(document.documentElement);
3490 return $_11ympzlbjfuw8q9n.ancestor(element, $_20nfr6k7jfuw8q4g.curry($_e8rn66kojfuw8q7n.eq, doc)).isSome();
3491 };
3492 var windowOf = function (element) {
3493 var dom = element.dom();
3494 if (dom === dom.window)
3495 return element;
3496 return $_a8gk30l6jfuw8q9c.isDocument(element) ? dom.defaultView || dom.parentWindow : null;
3497 };
3498 var $_a9ygj4mjjfuw8qj6 = {
3499 attached: attached,
3500 windowOf: windowOf
3501 };
3502
3503 var r = function (left, top) {
3504 var translate = function (x, y) {
3505 return r(left + x, top + y);
3506 };
3507 return {
3508 left: $_20nfr6k7jfuw8q4g.constant(left),
3509 top: $_20nfr6k7jfuw8q4g.constant(top),
3510 translate: translate
3511 };
3512 };
3513
3514 var boxPosition = function (dom) {
3515 var box = dom.getBoundingClientRect();
3516 return r(box.left, box.top);
3517 };
3518 var firstDefinedOrZero = function (a, b) {
3519 return a !== undefined ? a : b !== undefined ? b : 0;
3520 };
3521 var absolute = function (element) {
3522 var doc = element.dom().ownerDocument;
3523 var body = doc.body;
3524 var win = $_a9ygj4mjjfuw8qj6.windowOf($_xbeoqkkjfuw8q73.fromDom(doc));
3525 var html = doc.documentElement;
3526 var scrollTop = firstDefinedOrZero(win.pageYOffset, html.scrollTop);
3527 var scrollLeft = firstDefinedOrZero(win.pageXOffset, html.scrollLeft);
3528 var clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);
3529 var clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);
3530 return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);
3531 };
3532 var relative = function (element) {
3533 var dom = element.dom();
3534 return r(dom.offsetLeft, dom.offsetTop);
3535 };
3536 var viewport = function (element) {
3537 var dom = element.dom();
3538 var doc = dom.ownerDocument;
3539 var body = doc.body;
3540 var html = $_xbeoqkkjfuw8q73.fromDom(doc.documentElement);
3541 if (body === dom)
3542 return r(body.offsetLeft, body.offsetTop);
3543 if (!$_a9ygj4mjjfuw8qj6.attached(element, html))
3544 return r(0, 0);
3545 return boxPosition(dom);
3546 };
3547 var $_hsvzlmijfuw8qj4 = {
3548 absolute: absolute,
3549 relative: relative,
3550 viewport: viewport
3551 };
3552
3553 var rowInfo = $_5now9kbjfuw8q5e.immutable('row', 'y');
3554 var colInfo = $_5now9kbjfuw8q5e.immutable('col', 'x');
3555 var rtlEdge = function (cell) {
3556 var pos = $_hsvzlmijfuw8qj4.absolute(cell);
3557 return pos.left() + $_fj252lmejfuw8qin.getOuter(cell);
3558 };
3559 var ltrEdge = function (cell) {
3560 return $_hsvzlmijfuw8qj4.absolute(cell).left();
3561 };
3562 var getLeftEdge = function (index, cell) {
3563 return colInfo(index, ltrEdge(cell));
3564 };
3565 var getRightEdge = function (index, cell) {
3566 return colInfo(index, rtlEdge(cell));
3567 };
3568 var getTop = function (cell) {
3569 return $_hsvzlmijfuw8qj4.absolute(cell).top();
3570 };
3571 var getTopEdge = function (index, cell) {
3572 return rowInfo(index, getTop(cell));
3573 };
3574 var getBottomEdge = function (index, cell) {
3575 return rowInfo(index, getTop(cell) + $_cymdhgmcjfuw8qif.getOuter(cell));
3576 };
3577 var findPositions = function (getInnerEdge, getOuterEdge, array) {
3578 if (array.length === 0)
3579 return [];
3580 var lines = $_tyr3yk5jfuw8q47.map(array.slice(1), function (cellOption, index) {
3581 return cellOption.map(function (cell) {
3582 return getInnerEdge(index, cell);
3583 });
3584 });
3585 var lastLine = array[array.length - 1].map(function (cell) {
3586 return getOuterEdge(array.length - 1, cell);
3587 });
3588 return lines.concat([lastLine]);
3589 };
3590 var negate = function (step, _table) {
3591 return -step;
3592 };
3593 var height = {
3594 delta: $_20nfr6k7jfuw8q4g.identity,
3595 positions: $_20nfr6k7jfuw8q4g.curry(findPositions, getTopEdge, getBottomEdge),
3596 edge: getTop
3597 };
3598 var ltr = {
3599 delta: $_20nfr6k7jfuw8q4g.identity,
3600 edge: ltrEdge,
3601 positions: $_20nfr6k7jfuw8q4g.curry(findPositions, getLeftEdge, getRightEdge)
3602 };
3603 var rtl = {
3604 delta: negate,
3605 edge: rtlEdge,
3606 positions: $_20nfr6k7jfuw8q4g.curry(findPositions, getRightEdge, getLeftEdge)
3607 };
3608 var $_16z2iamhjfuw8qir = {
3609 height: height,
3610 rtl: rtl,
3611 ltr: ltr
3612 };
3613
3614 var $_26mw5tmgjfuw8qiq = {
3615 ltr: $_16z2iamhjfuw8qir.ltr,
3616 rtl: $_16z2iamhjfuw8qir.rtl
3617 };
3618
3619 function TableDirection(directionAt) {
3620 var auto = function (table) {
3621 return directionAt(table).isRtl() ? $_26mw5tmgjfuw8qiq.rtl : $_26mw5tmgjfuw8qiq.ltr;
3622 };
3623 var delta = function (amount, table) {
3624 return auto(table).delta(amount, table);
3625 };
3626 var positions = function (cols, table) {
3627 return auto(table).positions(cols, table);
3628 };
3629 var edge = function (cell) {
3630 return auto(cell).edge(cell);
3631 };
3632 return {
3633 delta: delta,
3634 edge: edge,
3635 positions: positions
3636 };
3637 }
3638
3639 var getGridSize = function (table) {
3640 var input = $_dy3x0nkfjfuw8q5l.fromTable(table);
3641 var warehouse = $_2ge24cldjfuw8qa3.generate(input);
3642 return warehouse.grid();
3643 };
3644 var $_b452wimljfuw8qjd = {getGridSize: getGridSize};
3645
3646 var Cell = function (initial) {
3647 var value = initial;
3648 var get = function () {
3649 return value;
3650 };
3651 var set = function (v) {
3652 value = v;
3653 };
3654 var clone = function () {
3655 return Cell(get());
3656 };
3657 return {
3658 get: get,
3659 set: set,
3660 clone: clone
3661 };
3662 };
3663
3664 var base = function (handleUnsupported, required) {
3665 return baseWith(handleUnsupported, required, {
3666 validate: $_g6mvnrk8jfuw8q4k.isFunction,
3667 label: 'function'
3668 });
3669 };
3670 var baseWith = function (handleUnsupported, required, pred) {
3671 if (required.length === 0)
3672 throw new Error('You must specify at least one required field.');
3673 $_2j2nzkkejfuw8q5j.validateStrArr('required', required);
3674 $_2j2nzkkejfuw8q5j.checkDupes(required);
3675 return function (obj) {
3676 var keys = $_11yiupkajfuw8q5c.keys(obj);
3677 var allReqd = $_tyr3yk5jfuw8q47.forall(required, function (req) {
3678 return $_tyr3yk5jfuw8q47.contains(keys, req);
3679 });
3680 if (!allReqd)
3681 $_2j2nzkkejfuw8q5j.reqMessage(required, keys);
3682 handleUnsupported(required, keys);
3683 var invalidKeys = $_tyr3yk5jfuw8q47.filter(required, function (key) {
3684 return !pred.validate(obj[key], key);
3685 });
3686 if (invalidKeys.length > 0)
3687 $_2j2nzkkejfuw8q5j.invalidTypeMessage(invalidKeys, pred.label);
3688 return obj;
3689 };
3690 };
3691 var handleExact = function (required, keys) {
3692 var unsupported = $_tyr3yk5jfuw8q47.filter(keys, function (key) {
3693 return !$_tyr3yk5jfuw8q47.contains(required, key);
3694 });
3695 if (unsupported.length > 0)
3696 $_2j2nzkkejfuw8q5j.unsuppMessage(unsupported);
3697 };
3698 var allowExtra = $_20nfr6k7jfuw8q4g.noop;
3699 var $_7z97w5mpjfuw8qkk = {
3700 exactly: $_20nfr6k7jfuw8q4g.curry(base, handleExact),
3701 ensure: $_20nfr6k7jfuw8q4g.curry(base, allowExtra),
3702 ensureWith: $_20nfr6k7jfuw8q4g.curry(baseWith, allowExtra)
3703 };
3704
3705 var elementToData = function (element) {
3706 var colspan = $_3q82t2l5jfuw8q93.has(element, 'colspan') ? parseInt($_3q82t2l5jfuw8q93.get(element, 'colspan'), 10) : 1;
3707 var rowspan = $_3q82t2l5jfuw8q93.has(element, 'rowspan') ? parseInt($_3q82t2l5jfuw8q93.get(element, 'rowspan'), 10) : 1;
3708 return {
3709 element: $_20nfr6k7jfuw8q4g.constant(element),
3710 colspan: $_20nfr6k7jfuw8q4g.constant(colspan),
3711 rowspan: $_20nfr6k7jfuw8q4g.constant(rowspan)
3712 };
3713 };
3714 var modification = function (generators, _toData) {
3715 contract(generators);
3716 var position = Cell(Option.none());
3717 var toData = _toData !== undefined ? _toData : elementToData;
3718 var nu = function (data) {
3719 return generators.cell(data);
3720 };
3721 var nuFrom = function (element) {
3722 var data = toData(element);
3723 return nu(data);
3724 };
3725 var add = function (element) {
3726 var replacement = nuFrom(element);
3727 if (position.get().isNone())
3728 position.set(Option.some(replacement));
3729 recent = Option.some({
3730 item: element,
3731 replacement: replacement
3732 });
3733 return replacement;
3734 };
3735 var recent = Option.none();
3736 var getOrInit = function (element, comparator) {
3737 return recent.fold(function () {
3738 return add(element);
3739 }, function (p) {
3740 return comparator(element, p.item) ? p.replacement : add(element);
3741 });
3742 };
3743 return {
3744 getOrInit: getOrInit,
3745 cursor: position.get
3746 };
3747 };
3748 var transform = function (scope, tag) {
3749 return function (generators) {
3750 var position = Cell(Option.none());
3751 contract(generators);
3752 var list = [];
3753 var find = function (element, comparator) {
3754 return $_tyr3yk5jfuw8q47.find(list, function (x) {
3755 return comparator(x.item, element);
3756 });
3757 };
3758 var makeNew = function (element) {
3759 var cell = generators.replace(element, tag, {scope: scope});
3760 list.push({
3761 item: element,
3762 sub: cell
3763 });
3764 if (position.get().isNone())
3765 position.set(Option.some(cell));
3766 return cell;
3767 };
3768 var replaceOrInit = function (element, comparator) {
3769 return find(element, comparator).fold(function () {
3770 return makeNew(element);
3771 }, function (p) {
3772 return comparator(element, p.item) ? p.sub : makeNew(element);
3773 });
3774 };
3775 return {
3776 replaceOrInit: replaceOrInit,
3777 cursor: position.get
3778 };
3779 };
3780 };
3781 var merging = function (generators) {
3782 contract(generators);
3783 var position = Cell(Option.none());
3784 var combine = function (cell) {
3785 if (position.get().isNone())
3786 position.set(Option.some(cell));
3787 return function () {
3788 var raw = generators.cell({
3789 element: $_20nfr6k7jfuw8q4g.constant(cell),
3790 colspan: $_20nfr6k7jfuw8q4g.constant(1),
3791 rowspan: $_20nfr6k7jfuw8q4g.constant(1)
3792 });
3793 $_bfod2hlejfuw8qac.remove(raw, 'width');
3794 $_bfod2hlejfuw8qac.remove(cell, 'width');
3795 return raw;
3796 };
3797 };
3798 return {
3799 combine: combine,
3800 cursor: position.get
3801 };
3802 };
3803 var contract = $_7z97w5mpjfuw8qkk.exactly([
3804 'cell',
3805 'row',
3806 'replace',
3807 'gap'
3808 ]);
3809 var $_eoocrvmnjfuw8qk1 = {
3810 modification: modification,
3811 transform: transform,
3812 merging: merging
3813 };
3814
3815 var blockList = [
3816 'body',
3817 'p',
3818 'div',
3819 'article',
3820 'aside',
3821 'figcaption',
3822 'figure',
3823 'footer',
3824 'header',
3825 'nav',
3826 'section',
3827 'ol',
3828 'ul',
3829 'table',
3830 'thead',
3831 'tfoot',
3832 'tbody',
3833 'caption',
3834 'tr',
3835 'td',
3836 'th',
3837 'h1',
3838 'h2',
3839 'h3',
3840 'h4',
3841 'h5',
3842 'h6',
3843 'blockquote',
3844 'pre',
3845 'address'
3846 ];
3847 var isList = function (universe, item) {
3848 var tagName = universe.property().name(item);
3849 return $_tyr3yk5jfuw8q47.contains([
3850 'ol',
3851 'ul'
3852 ], tagName);
3853 };
3854 var isBlock = function (universe, item) {
3855 var tagName = universe.property().name(item);
3856 return $_tyr3yk5jfuw8q47.contains(blockList, tagName);
3857 };
3858 var isFormatting = function (universe, item) {
3859 var tagName = universe.property().name(item);
3860 return $_tyr3yk5jfuw8q47.contains([
3861 'address',
3862 'pre',
3863 'p',
3864 'h1',
3865 'h2',
3866 'h3',
3867 'h4',
3868 'h5',
3869 'h6'
3870 ], tagName);
3871 };
3872 var isHeading = function (universe, item) {
3873 var tagName = universe.property().name(item);
3874 return $_tyr3yk5jfuw8q47.contains([
3875 'h1',
3876 'h2',
3877 'h3',
3878 'h4',
3879 'h5',
3880 'h6'
3881 ], tagName);
3882 };
3883 var isContainer = function (universe, item) {
3884 return $_tyr3yk5jfuw8q47.contains([
3885 'div',
3886 'li',
3887 'td',
3888 'th',
3889 'blockquote',
3890 'body',
3891 'caption'
3892 ], universe.property().name(item));
3893 };
3894 var isEmptyTag = function (universe, item) {
3895 return $_tyr3yk5jfuw8q47.contains([
3896 'br',
3897 'img',
3898 'hr',
3899 'input'
3900 ], universe.property().name(item));
3901 };
3902 var isFrame = function (universe, item) {
3903 return universe.property().name(item) === 'iframe';
3904 };
3905 var isInline = function (universe, item) {
3906 return !(isBlock(universe, item) || isEmptyTag(universe, item)) && universe.property().name(item) !== 'li';
3907 };
3908 var $_325i5bmsjfuw8qle = {
3909 isBlock: isBlock,
3910 isList: isList,
3911 isFormatting: isFormatting,
3912 isHeading: isHeading,
3913 isContainer: isContainer,
3914 isEmptyTag: isEmptyTag,
3915 isFrame: isFrame,
3916 isInline: isInline
3917 };
3918
3919 var universe$1 = DomUniverse();
3920 var isBlock$1 = function (element) {
3921 return $_325i5bmsjfuw8qle.isBlock(universe$1, element);
3922 };
3923 var isList$1 = function (element) {
3924 return $_325i5bmsjfuw8qle.isList(universe$1, element);
3925 };
3926 var isFormatting$1 = function (element) {
3927 return $_325i5bmsjfuw8qle.isFormatting(universe$1, element);
3928 };
3929 var isHeading$1 = function (element) {
3930 return $_325i5bmsjfuw8qle.isHeading(universe$1, element);
3931 };
3932 var isContainer$1 = function (element) {
3933 return $_325i5bmsjfuw8qle.isContainer(universe$1, element);
3934 };
3935 var isEmptyTag$1 = function (element) {
3936 return $_325i5bmsjfuw8qle.isEmptyTag(universe$1, element);
3937 };
3938 var isFrame$1 = function (element) {
3939 return $_325i5bmsjfuw8qle.isFrame(universe$1, element);
3940 };
3941 var isInline$1 = function (element) {
3942 return $_325i5bmsjfuw8qle.isInline(universe$1, element);
3943 };
3944 var $_d9tdqtmrjfuw8ql9 = {
3945 isBlock: isBlock$1,
3946 isList: isList$1,
3947 isFormatting: isFormatting$1,
3948 isHeading: isHeading$1,
3949 isContainer: isContainer$1,
3950 isEmptyTag: isEmptyTag$1,
3951 isFrame: isFrame$1,
3952 isInline: isInline$1
3953 };
3954
3955 var merge = function (cells) {
3956 var isBr = function (el) {
3957 return $_a8gk30l6jfuw8q9c.name(el) === 'br';
3958 };
3959 var advancedBr = function (children) {
3960 return $_tyr3yk5jfuw8q47.forall(children, function (c) {
3961 return isBr(c) || $_a8gk30l6jfuw8q9c.isText(c) && $_6j8y7blnjfuw8qc3.get(c).trim().length === 0;
3962 });
3963 };
3964 var isListItem = function (el) {
3965 return $_a8gk30l6jfuw8q9c.name(el) === 'li' || $_11ympzlbjfuw8q9n.ancestor(el, $_d9tdqtmrjfuw8ql9.isList).isSome();
3966 };
3967 var siblingIsBlock = function (el) {
3968 return $_s8scrkmjfuw8q7a.nextSibling(el).map(function (rightSibling) {
3969 if ($_d9tdqtmrjfuw8ql9.isBlock(rightSibling))
3970 return true;
3971 if ($_d9tdqtmrjfuw8ql9.isEmptyTag(rightSibling)) {
3972 return $_a8gk30l6jfuw8q9c.name(rightSibling) === 'img' ? false : true;
3973 }
3974 }).getOr(false);
3975 };
3976 var markCell = function (cell) {
3977 return $_ejrzj4lljfuw8qbw.last(cell).bind(function (rightEdge) {
3978 var rightSiblingIsBlock = siblingIsBlock(rightEdge);
3979 return $_s8scrkmjfuw8q7a.parent(rightEdge).map(function (parent) {
3980 return rightSiblingIsBlock === true || isListItem(parent) || isBr(rightEdge) || $_d9tdqtmrjfuw8ql9.isBlock(parent) && !$_e8rn66kojfuw8q7n.eq(cell, parent) ? [] : [$_xbeoqkkjfuw8q73.fromTag('br')];
3981 });
3982 }).getOr([]);
3983 };
3984 var markContent = function () {
3985 var content = $_tyr3yk5jfuw8q47.bind(cells, function (cell) {
3986 var children = $_s8scrkmjfuw8q7a.children(cell);
3987 return advancedBr(children) ? [] : children.concat(markCell(cell));
3988 });
3989 return content.length === 0 ? [$_xbeoqkkjfuw8q73.fromTag('br')] : content;
3990 };
3991 var contents = markContent();
3992 $_fl1deelhjfuw8qax.empty(cells[0]);
3993 $_9zaoqflijfuw8qb0.append(cells[0], contents);
3994 };
3995 var $_ancl40mqjfuw8qkm = {merge: merge};
3996
3997 var shallow$1 = function (old, nu) {
3998 return nu;
3999 };
4000 var deep$1 = function (old, nu) {
4001 var bothObjects = $_g6mvnrk8jfuw8q4k.isObject(old) && $_g6mvnrk8jfuw8q4k.isObject(nu);
4002 return bothObjects ? deepMerge(old, nu) : nu;
4003 };
4004 var baseMerge = function (merger) {
4005 return function () {
4006 var objects = new Array(arguments.length);
4007 for (var i = 0; i < objects.length; i++)
4008 objects[i] = arguments[i];
4009 if (objects.length === 0)
4010 throw new Error('Can\'t merge zero objects');
4011 var ret = {};
4012 for (var j = 0; j < objects.length; j++) {
4013 var curObject = objects[j];
4014 for (var key in curObject)
4015 if (curObject.hasOwnProperty(key)) {
4016 ret[key] = merger(ret[key], curObject[key]);
4017 }
4018 }
4019 return ret;
4020 };
4021 };
4022 var deepMerge = baseMerge(deep$1);
4023 var merge$1 = baseMerge(shallow$1);
4024 var $_91sgzmujfuw8qm5 = {
4025 deepMerge: deepMerge,
4026 merge: merge$1
4027 };
4028
4029 var cat = function (arr) {
4030 var r = [];
4031 var push = function (x) {
4032 r.push(x);
4033 };
4034 for (var i = 0; i < arr.length; i++) {
4035 arr[i].each(push);
4036 }
4037 return r;
4038 };
4039 var findMap = function (arr, f) {
4040 for (var i = 0; i < arr.length; i++) {
4041 var r = f(arr[i], i);
4042 if (r.isSome()) {
4043 return r;
4044 }
4045 }
4046 return Option.none();
4047 };
4048 var liftN = function (arr, f) {
4049 var r = [];
4050 for (var i = 0; i < arr.length; i++) {
4051 var x = arr[i];
4052 if (x.isSome()) {
4053 r.push(x.getOrDie());
4054 } else {
4055 return Option.none();
4056 }
4057 }
4058 return Option.some(f.apply(null, r));
4059 };
4060 var $_cul8qomvjfuw8qm7 = {
4061 cat: cat,
4062 findMap: findMap,
4063 liftN: liftN
4064 };
4065
4066 var addCell = function (gridRow, index, cell) {
4067 var cells = gridRow.cells();
4068 var before = cells.slice(0, index);
4069 var after = cells.slice(index);
4070 var newCells = before.concat([cell]).concat(after);
4071 return setCells(gridRow, newCells);
4072 };
4073 var mutateCell = function (gridRow, index, cell) {
4074 var cells = gridRow.cells();
4075 cells[index] = cell;
4076 };
4077 var setCells = function (gridRow, cells) {
4078 return $_ce5pyrkgjfuw8q5v.rowcells(cells, gridRow.section());
4079 };
4080 var mapCells = function (gridRow, f) {
4081 var cells = gridRow.cells();
4082 var r = $_tyr3yk5jfuw8q47.map(cells, f);
4083 return $_ce5pyrkgjfuw8q5v.rowcells(r, gridRow.section());
4084 };
4085 var getCell = function (gridRow, index) {
4086 return gridRow.cells()[index];
4087 };
4088 var getCellElement = function (gridRow, index) {
4089 return getCell(gridRow, index).element();
4090 };
4091 var cellLength = function (gridRow) {
4092 return gridRow.cells().length;
4093 };
4094 var $_aylxzgmyjfuw8qmj = {
4095 addCell: addCell,
4096 setCells: setCells,
4097 mutateCell: mutateCell,
4098 getCell: getCell,
4099 getCellElement: getCellElement,
4100 mapCells: mapCells,
4101 cellLength: cellLength
4102 };
4103
4104 var getColumn = function (grid, index) {
4105 return $_tyr3yk5jfuw8q47.map(grid, function (row) {
4106 return $_aylxzgmyjfuw8qmj.getCell(row, index);
4107 });
4108 };
4109 var getRow = function (grid, index) {
4110 return grid[index];
4111 };
4112 var findDiff = function (xs, comp) {
4113 if (xs.length === 0)
4114 return 0;
4115 var first = xs[0];
4116 var index = $_tyr3yk5jfuw8q47.findIndex(xs, function (x) {
4117 return !comp(first.element(), x.element());
4118 });
4119 return index.fold(function () {
4120 return xs.length;
4121 }, function (ind) {
4122 return ind;
4123 });
4124 };
4125 var subgrid = function (grid, row, column, comparator) {
4126 var restOfRow = getRow(grid, row).cells().slice(column);
4127 var endColIndex = findDiff(restOfRow, comparator);
4128 var restOfColumn = getColumn(grid, column).slice(row);
4129 var endRowIndex = findDiff(restOfColumn, comparator);
4130 return {
4131 colspan: $_20nfr6k7jfuw8q4g.constant(endColIndex),
4132 rowspan: $_20nfr6k7jfuw8q4g.constant(endRowIndex)
4133 };
4134 };
4135 var $_8v4imgmxjfuw8qme = {subgrid: subgrid};
4136
4137 var toDetails = function (grid, comparator) {
4138 var seen = $_tyr3yk5jfuw8q47.map(grid, function (row, ri) {
4139 return $_tyr3yk5jfuw8q47.map(row.cells(), function (col, ci) {
4140 return false;
4141 });
4142 });
4143 var updateSeen = function (ri, ci, rowspan, colspan) {
4144 for (var r = ri; r < ri + rowspan; r++) {
4145 for (var c = ci; c < ci + colspan; c++) {
4146 seen[r][c] = true;
4147 }
4148 }
4149 };
4150 return $_tyr3yk5jfuw8q47.map(grid, function (row, ri) {
4151 var details = $_tyr3yk5jfuw8q47.bind(row.cells(), function (cell, ci) {
4152 if (seen[ri][ci] === false) {
4153 var result = $_8v4imgmxjfuw8qme.subgrid(grid, ri, ci, comparator);
4154 updateSeen(ri, ci, result.rowspan(), result.colspan());
4155 return [$_ce5pyrkgjfuw8q5v.detailnew(cell.element(), result.rowspan(), result.colspan(), cell.isNew())];
4156 } else {
4157 return [];
4158 }
4159 });
4160 return $_ce5pyrkgjfuw8q5v.rowdetails(details, row.section());
4161 });
4162 };
4163 var toGrid = function (warehouse, generators, isNew) {
4164 var grid = [];
4165 for (var i = 0; i < warehouse.grid().rows(); i++) {
4166 var rowCells = [];
4167 for (var j = 0; j < warehouse.grid().columns(); j++) {
4168 var element = $_2ge24cldjfuw8qa3.getAt(warehouse, i, j).map(function (item) {
4169 return $_ce5pyrkgjfuw8q5v.elementnew(item.element(), isNew);
4170 }).getOrThunk(function () {
4171 return $_ce5pyrkgjfuw8q5v.elementnew(generators.gap(), true);
4172 });
4173 rowCells.push(element);
4174 }
4175 var row = $_ce5pyrkgjfuw8q5v.rowcells(rowCells, warehouse.all()[i].section());
4176 grid.push(row);
4177 }
4178 return grid;
4179 };
4180 var $_cw9o3smwjfuw8qm9 = {
4181 toDetails: toDetails,
4182 toGrid: toGrid
4183 };
4184
4185 var setIfNot = function (element, property, value, ignore) {
4186 if (value === ignore)
4187 $_3q82t2l5jfuw8q93.remove(element, property);
4188 else
4189 $_3q82t2l5jfuw8q93.set(element, property, value);
4190 };
4191 var render = function (table, grid) {
4192 var newRows = [];
4193 var newCells = [];
4194 var renderSection = function (gridSection, sectionName) {
4195 var section = $_8wdrbmlajfuw8q9m.child(table, sectionName).getOrThunk(function () {
4196 var tb = $_xbeoqkkjfuw8q73.fromTag(sectionName, $_s8scrkmjfuw8q7a.owner(table).dom());
4197 $_fatuxylgjfuw8qav.append(table, tb);
4198 return tb;
4199 });
4200 $_fl1deelhjfuw8qax.empty(section);
4201 var rows = $_tyr3yk5jfuw8q47.map(gridSection, function (row) {
4202 if (row.isNew()) {
4203 newRows.push(row.element());
4204 }
4205 var tr = row.element();
4206 $_fl1deelhjfuw8qax.empty(tr);
4207 $_tyr3yk5jfuw8q47.each(row.cells(), function (cell) {
4208 if (cell.isNew()) {
4209 newCells.push(cell.element());
4210 }
4211 setIfNot(cell.element(), 'colspan', cell.colspan(), 1);
4212 setIfNot(cell.element(), 'rowspan', cell.rowspan(), 1);
4213 $_fatuxylgjfuw8qav.append(tr, cell.element());
4214 });
4215 return tr;
4216 });
4217 $_9zaoqflijfuw8qb0.append(section, rows);
4218 };
4219 var removeSection = function (sectionName) {
4220 $_8wdrbmlajfuw8q9m.child(table, sectionName).bind($_fl1deelhjfuw8qax.remove);
4221 };
4222 var renderOrRemoveSection = function (gridSection, sectionName) {
4223 if (gridSection.length > 0) {
4224 renderSection(gridSection, sectionName);
4225 } else {
4226 removeSection(sectionName);
4227 }
4228 };
4229 var headSection = [];
4230 var bodySection = [];
4231 var footSection = [];
4232 $_tyr3yk5jfuw8q47.each(grid, function (row) {
4233 switch (row.section()) {
4234 case 'thead':
4235 headSection.push(row);
4236 break;
4237 case 'tbody':
4238 bodySection.push(row);
4239 break;
4240 case 'tfoot':
4241 footSection.push(row);
4242 break;
4243 }
4244 });
4245 renderOrRemoveSection(headSection, 'thead');
4246 renderOrRemoveSection(bodySection, 'tbody');
4247 renderOrRemoveSection(footSection, 'tfoot');
4248 return {
4249 newRows: $_20nfr6k7jfuw8q4g.constant(newRows),
4250 newCells: $_20nfr6k7jfuw8q4g.constant(newCells)
4251 };
4252 };
4253 var copy$2 = function (grid) {
4254 var rows = $_tyr3yk5jfuw8q47.map(grid, function (row) {
4255 var tr = $_ddvp06lkjfuw8qbt.shallow(row.element());
4256 $_tyr3yk5jfuw8q47.each(row.cells(), function (cell) {
4257 var clonedCell = $_ddvp06lkjfuw8qbt.deep(cell.element());
4258 setIfNot(clonedCell, 'colspan', cell.colspan(), 1);
4259 setIfNot(clonedCell, 'rowspan', cell.rowspan(), 1);
4260 $_fatuxylgjfuw8qav.append(tr, clonedCell);
4261 });
4262 return tr;
4263 });
4264 return rows;
4265 };
4266 var $_c9mejomzjfuw8qmn = {
4267 render: render,
4268 copy: copy$2
4269 };
4270
4271 var repeat = function (repititions, f) {
4272 var r = [];
4273 for (var i = 0; i < repititions; i++) {
4274 r.push(f(i));
4275 }
4276 return r;
4277 };
4278 var range$1 = function (start, end) {
4279 var r = [];
4280 for (var i = start; i < end; i++) {
4281 r.push(i);
4282 }
4283 return r;
4284 };
4285 var unique = function (xs, comparator) {
4286 var result = [];
4287 $_tyr3yk5jfuw8q47.each(xs, function (x, i) {
4288 if (i < xs.length - 1 && !comparator(x, xs[i + 1])) {
4289 result.push(x);
4290 } else if (i === xs.length - 1) {
4291 result.push(x);
4292 }
4293 });
4294 return result;
4295 };
4296 var deduce = function (xs, index) {
4297 if (index < 0 || index >= xs.length - 1)
4298 return Option.none();
4299 var current = xs[index].fold(function () {
4300 var rest = $_tyr3yk5jfuw8q47.reverse(xs.slice(0, index));
4301 return $_cul8qomvjfuw8qm7.findMap(rest, function (a, i) {
4302 return a.map(function (aa) {
4303 return {
4304 value: aa,
4305 delta: i + 1
4306 };
4307 });
4308 });
4309 }, function (c) {
4310 return Option.some({
4311 value: c,
4312 delta: 0
4313 });
4314 });
4315 var next = xs[index + 1].fold(function () {
4316 var rest = xs.slice(index + 1);
4317 return $_cul8qomvjfuw8qm7.findMap(rest, function (a, i) {
4318 return a.map(function (aa) {
4319 return {
4320 value: aa,
4321 delta: i + 1
4322 };
4323 });
4324 });
4325 }, function (n) {
4326 return Option.some({
4327 value: n,
4328 delta: 1
4329 });
4330 });
4331 return current.bind(function (c) {
4332 return next.map(function (n) {
4333 var extras = n.delta + c.delta;
4334 return Math.abs(n.value - c.value) / extras;
4335 });
4336 });
4337 };
4338 var $_fcnwwbn2jfuw8qoa = {
4339 repeat: repeat,
4340 range: range$1,
4341 unique: unique,
4342 deduce: deduce
4343 };
4344
4345 var columns = function (warehouse) {
4346 var grid = warehouse.grid();
4347 var cols = $_fcnwwbn2jfuw8qoa.range(0, grid.columns());
4348 var rows = $_fcnwwbn2jfuw8qoa.range(0, grid.rows());
4349 return $_tyr3yk5jfuw8q47.map(cols, function (col) {
4350 var getBlock = function () {
4351 return $_tyr3yk5jfuw8q47.bind(rows, function (r) {
4352 return $_2ge24cldjfuw8qa3.getAt(warehouse, r, col).filter(function (detail) {
4353 return detail.column() === col;
4354 }).fold($_20nfr6k7jfuw8q4g.constant([]), function (detail) {
4355 return [detail];
4356 });
4357 });
4358 };
4359 var isSingle = function (detail) {
4360 return detail.colspan() === 1;
4361 };
4362 var getFallback = function () {
4363 return $_2ge24cldjfuw8qa3.getAt(warehouse, 0, col);
4364 };
4365 return decide(getBlock, isSingle, getFallback);
4366 });
4367 };
4368 var decide = function (getBlock, isSingle, getFallback) {
4369 var inBlock = getBlock();
4370 var singleInBlock = $_tyr3yk5jfuw8q47.find(inBlock, isSingle);
4371 var detailOption = singleInBlock.orThunk(function () {
4372 return Option.from(inBlock[0]).orThunk(getFallback);
4373 });
4374 return detailOption.map(function (detail) {
4375 return detail.element();
4376 });
4377 };
4378 var rows$1 = function (warehouse) {
4379 var grid = warehouse.grid();
4380 var rows = $_fcnwwbn2jfuw8qoa.range(0, grid.rows());
4381 var cols = $_fcnwwbn2jfuw8qoa.range(0, grid.columns());
4382 return $_tyr3yk5jfuw8q47.map(rows, function (row) {
4383 var getBlock = function () {
4384 return $_tyr3yk5jfuw8q47.bind(cols, function (c) {
4385 return $_2ge24cldjfuw8qa3.getAt(warehouse, row, c).filter(function (detail) {
4386 return detail.row() === row;
4387 }).fold($_20nfr6k7jfuw8q4g.constant([]), function (detail) {
4388 return [detail];
4389 });
4390 });
4391 };
4392 var isSingle = function (detail) {
4393 return detail.rowspan() === 1;
4394 };
4395 var getFallback = function () {
4396 return $_2ge24cldjfuw8qa3.getAt(warehouse, row, 0);
4397 };
4398 return decide(getBlock, isSingle, getFallback);
4399 });
4400 };
4401 var $_9oko5pn1jfuw8qo0 = {
4402 columns: columns,
4403 rows: rows$1
4404 };
4405
4406 var col = function (column, x, y, w, h) {
4407 var blocker = $_xbeoqkkjfuw8q73.fromTag('div');
4408 $_bfod2hlejfuw8qac.setAll(blocker, {
4409 position: 'absolute',
4410 left: x - w / 2 + 'px',
4411 top: y + 'px',
4412 height: h + 'px',
4413 width: w + 'px'
4414 });
4415 $_3q82t2l5jfuw8q93.setAll(blocker, {
4416 'data-column': column,
4417 'role': 'presentation'
4418 });
4419 return blocker;
4420 };
4421 var row$1 = function (row, x, y, w, h) {
4422 var blocker = $_xbeoqkkjfuw8q73.fromTag('div');
4423 $_bfod2hlejfuw8qac.setAll(blocker, {
4424 position: 'absolute',
4425 left: x + 'px',
4426 top: y - h / 2 + 'px',
4427 height: h + 'px',
4428 width: w + 'px'
4429 });
4430 $_3q82t2l5jfuw8q93.setAll(blocker, {
4431 'data-row': row,
4432 'role': 'presentation'
4433 });
4434 return blocker;
4435 };
4436 var $_bis8idn3jfuw8qoi = {
4437 col: col,
4438 row: row$1
4439 };
4440
4441 var css = function (namespace) {
4442 var dashNamespace = namespace.replace(/\./g, '-');
4443 var resolve = function (str) {
4444 return dashNamespace + '-' + str;
4445 };
4446 return {resolve: resolve};
4447 };
4448 var $_63w6atn5jfuw8qot = {css: css};
4449
4450 var styles = $_63w6atn5jfuw8qot.css('ephox-snooker');
4451 var $_f6r94sn4jfuw8qoq = {resolve: styles.resolve};
4452
4453 function Toggler(turnOff, turnOn, initial) {
4454 var active = initial || false;
4455 var on = function () {
4456 turnOn();
4457 active = true;
4458 };
4459 var off = function () {
4460 turnOff();
4461 active = false;
4462 };
4463 var toggle = function () {
4464 var f = active ? off : on;
4465 f();
4466 };
4467 var isOn = function () {
4468 return active;
4469 };
4470 return {
4471 on: on,
4472 off: off,
4473 toggle: toggle,
4474 isOn: isOn
4475 };
4476 }
4477
4478 var read = function (element, attr) {
4479 var value = $_3q82t2l5jfuw8q93.get(element, attr);
4480 return value === undefined || value === '' ? [] : value.split(' ');
4481 };
4482 var add = function (element, attr, id) {
4483 var old = read(element, attr);
4484 var nu = old.concat([id]);
4485 $_3q82t2l5jfuw8q93.set(element, attr, nu.join(' '));
4486 };
4487 var remove$3 = function (element, attr, id) {
4488 var nu = $_tyr3yk5jfuw8q47.filter(read(element, attr), function (v) {
4489 return v !== id;
4490 });
4491 if (nu.length > 0)
4492 $_3q82t2l5jfuw8q93.set(element, attr, nu.join(' '));
4493 else
4494 $_3q82t2l5jfuw8q93.remove(element, attr);
4495 };
4496 var $_61h5lon9jfuw8qp0 = {
4497 read: read,
4498 add: add,
4499 remove: remove$3
4500 };
4501
4502 var supports = function (element) {
4503 return element.dom().classList !== undefined;
4504 };
4505 var get$6 = function (element) {
4506 return $_61h5lon9jfuw8qp0.read(element, 'class');
4507 };
4508 var add$1 = function (element, clazz) {
4509 return $_61h5lon9jfuw8qp0.add(element, 'class', clazz);
4510 };
4511 var remove$4 = function (element, clazz) {
4512 return $_61h5lon9jfuw8qp0.remove(element, 'class', clazz);
4513 };
4514 var toggle = function (element, clazz) {
4515 if ($_tyr3yk5jfuw8q47.contains(get$6(element), clazz)) {
4516 remove$4(element, clazz);
4517 } else {
4518 add$1(element, clazz);
4519 }
4520 };
4521 var $_f4rpvun8jfuw8qox = {
4522 get: get$6,
4523 add: add$1,
4524 remove: remove$4,
4525 toggle: toggle,
4526 supports: supports
4527 };
4528
4529 var add$2 = function (element, clazz) {
4530 if ($_f4rpvun8jfuw8qox.supports(element))
4531 element.dom().classList.add(clazz);
4532 else
4533 $_f4rpvun8jfuw8qox.add(element, clazz);
4534 };
4535 var cleanClass = function (element) {
4536 var classList = $_f4rpvun8jfuw8qox.supports(element) ? element.dom().classList : $_f4rpvun8jfuw8qox.get(element);
4537 if (classList.length === 0) {
4538 $_3q82t2l5jfuw8q93.remove(element, 'class');
4539 }
4540 };
4541 var remove$5 = function (element, clazz) {
4542 if ($_f4rpvun8jfuw8qox.supports(element)) {
4543 var classList = element.dom().classList;
4544 classList.remove(clazz);
4545 } else
4546 $_f4rpvun8jfuw8qox.remove(element, clazz);
4547 cleanClass(element);
4548 };
4549 var toggle$1 = function (element, clazz) {
4550 return $_f4rpvun8jfuw8qox.supports(element) ? element.dom().classList.toggle(clazz) : $_f4rpvun8jfuw8qox.toggle(element, clazz);
4551 };
4552 var toggler = function (element, clazz) {
4553 var hasClasslist = $_f4rpvun8jfuw8qox.supports(element);
4554 var classList = element.dom().classList;
4555 var off = function () {
4556 if (hasClasslist)
4557 classList.remove(clazz);
4558 else
4559 $_f4rpvun8jfuw8qox.remove(element, clazz);
4560 };
4561 var on = function () {
4562 if (hasClasslist)
4563 classList.add(clazz);
4564 else
4565 $_f4rpvun8jfuw8qox.add(element, clazz);
4566 };
4567 return Toggler(off, on, has$1(element, clazz));
4568 };
4569 var has$1 = function (element, clazz) {
4570 return $_f4rpvun8jfuw8qox.supports(element) && element.dom().classList.contains(clazz);
4571 };
4572 var $_fmcseon6jfuw8qou = {
4573 add: add$2,
4574 remove: remove$5,
4575 toggle: toggle$1,
4576 toggler: toggler,
4577 has: has$1
4578 };
4579
4580 var resizeBar = $_f6r94sn4jfuw8qoq.resolve('resizer-bar');
4581 var resizeRowBar = $_f6r94sn4jfuw8qoq.resolve('resizer-rows');
4582 var resizeColBar = $_f6r94sn4jfuw8qoq.resolve('resizer-cols');
4583 var BAR_THICKNESS = 7;
4584 var clear = function (wire) {
4585 var previous = $_6c9d0hl7jfuw8q9d.descendants(wire.parent(), '.' + resizeBar);
4586 $_tyr3yk5jfuw8q47.each(previous, $_fl1deelhjfuw8qax.remove);
4587 };
4588 var drawBar = function (wire, positions, create) {
4589 var origin = wire.origin();
4590 $_tyr3yk5jfuw8q47.each(positions, function (cpOption, i) {
4591 cpOption.each(function (cp) {
4592 var bar = create(origin, cp);
4593 $_fmcseon6jfuw8qou.add(bar, resizeBar);
4594 $_fatuxylgjfuw8qav.append(wire.parent(), bar);
4595 });
4596 });
4597 };
4598 var refreshCol = function (wire, colPositions, position, tableHeight) {
4599 drawBar(wire, colPositions, function (origin, cp) {
4600 var colBar = $_bis8idn3jfuw8qoi.col(cp.col(), cp.x() - origin.left(), position.top() - origin.top(), BAR_THICKNESS, tableHeight);
4601 $_fmcseon6jfuw8qou.add(colBar, resizeColBar);
4602 return colBar;
4603 });
4604 };
4605 var refreshRow = function (wire, rowPositions, position, tableWidth) {
4606 drawBar(wire, rowPositions, function (origin, cp) {
4607 var rowBar = $_bis8idn3jfuw8qoi.row(cp.row(), position.left() - origin.left(), cp.y() - origin.top(), tableWidth, BAR_THICKNESS);
4608 $_fmcseon6jfuw8qou.add(rowBar, resizeRowBar);
4609 return rowBar;
4610 });
4611 };
4612 var refreshGrid = function (wire, table, rows, cols, hdirection, vdirection) {
4613 var position = $_hsvzlmijfuw8qj4.absolute(table);
4614 var rowPositions = rows.length > 0 ? hdirection.positions(rows, table) : [];
4615 refreshRow(wire, rowPositions, position, $_fj252lmejfuw8qin.getOuter(table));
4616 var colPositions = cols.length > 0 ? vdirection.positions(cols, table) : [];
4617 refreshCol(wire, colPositions, position, $_cymdhgmcjfuw8qif.getOuter(table));
4618 };
4619 var refresh = function (wire, table, hdirection, vdirection) {
4620 clear(wire);
4621 var list = $_dy3x0nkfjfuw8q5l.fromTable(table);
4622 var warehouse = $_2ge24cldjfuw8qa3.generate(list);
4623 var rows = $_9oko5pn1jfuw8qo0.rows(warehouse);
4624 var cols = $_9oko5pn1jfuw8qo0.columns(warehouse);
4625 refreshGrid(wire, table, rows, cols, hdirection, vdirection);
4626 };
4627 var each$2 = function (wire, f) {
4628 var bars = $_6c9d0hl7jfuw8q9d.descendants(wire.parent(), '.' + resizeBar);
4629 $_tyr3yk5jfuw8q47.each(bars, f);
4630 };
4631 var hide = function (wire) {
4632 each$2(wire, function (bar) {
4633 $_bfod2hlejfuw8qac.set(bar, 'display', 'none');
4634 });
4635 };
4636 var show = function (wire) {
4637 each$2(wire, function (bar) {
4638 $_bfod2hlejfuw8qac.set(bar, 'display', 'block');
4639 });
4640 };
4641 var isRowBar = function (element) {
4642 return $_fmcseon6jfuw8qou.has(element, resizeRowBar);
4643 };
4644 var isColBar = function (element) {
4645 return $_fmcseon6jfuw8qou.has(element, resizeColBar);
4646 };
4647 var $_jc1w5n0jfuw8qng = {
4648 refresh: refresh,
4649 hide: hide,
4650 show: show,
4651 destroy: clear,
4652 isRowBar: isRowBar,
4653 isColBar: isColBar
4654 };
4655
4656 var fromWarehouse = function (warehouse, generators) {
4657 return $_cw9o3smwjfuw8qm9.toGrid(warehouse, generators, false);
4658 };
4659 var deriveRows = function (rendered, generators) {
4660 var findRow = function (details) {
4661 var rowOfCells = $_cul8qomvjfuw8qm7.findMap(details, function (detail) {
4662 return $_s8scrkmjfuw8q7a.parent(detail.element()).map(function (row) {
4663 var isNew = $_s8scrkmjfuw8q7a.parent(row).isNone();
4664 return $_ce5pyrkgjfuw8q5v.elementnew(row, isNew);
4665 });
4666 });
4667 return rowOfCells.getOrThunk(function () {
4668 return $_ce5pyrkgjfuw8q5v.elementnew(generators.row(), true);
4669 });
4670 };
4671 return $_tyr3yk5jfuw8q47.map(rendered, function (details) {
4672 var row = findRow(details.details());
4673 return $_ce5pyrkgjfuw8q5v.rowdatanew(row.element(), details.details(), details.section(), row.isNew());
4674 });
4675 };
4676 var toDetailList = function (grid, generators) {
4677 var rendered = $_cw9o3smwjfuw8qm9.toDetails(grid, $_e8rn66kojfuw8q7n.eq);
4678 return deriveRows(rendered, generators);
4679 };
4680 var findInWarehouse = function (warehouse, element) {
4681 var all = $_tyr3yk5jfuw8q47.flatten($_tyr3yk5jfuw8q47.map(warehouse.all(), function (r) {
4682 return r.cells();
4683 }));
4684 return $_tyr3yk5jfuw8q47.find(all, function (e) {
4685 return $_e8rn66kojfuw8q7n.eq(element, e.element());
4686 });
4687 };
4688 var run = function (operation, extract, adjustment, postAction, genWrappers) {
4689 return function (wire, table, target, generators, direction) {
4690 var input = $_dy3x0nkfjfuw8q5l.fromTable(table);
4691 var warehouse = $_2ge24cldjfuw8qa3.generate(input);
4692 var output = extract(warehouse, target).map(function (info) {
4693 var model = fromWarehouse(warehouse, generators);
4694 var result = operation(model, info, $_e8rn66kojfuw8q7n.eq, genWrappers(generators));
4695 var grid = toDetailList(result.grid(), generators);
4696 return {
4697 grid: $_20nfr6k7jfuw8q4g.constant(grid),
4698 cursor: result.cursor
4699 };
4700 });
4701 return output.fold(function () {
4702 return Option.none();
4703 }, function (out) {
4704 var newElements = $_c9mejomzjfuw8qmn.render(table, out.grid());
4705 adjustment(table, out.grid(), direction);
4706 postAction(table);
4707 $_jc1w5n0jfuw8qng.refresh(wire, table, $_16z2iamhjfuw8qir.height, direction);
4708 return Option.some({
4709 cursor: out.cursor,
4710 newRows: newElements.newRows,
4711 newCells: newElements.newCells
4712 });
4713 });
4714 };
4715 };
4716 var onCell = function (warehouse, target) {
4717 return $_aqhz9okhjfuw8q5y.cell(target.element()).bind(function (cell) {
4718 return findInWarehouse(warehouse, cell);
4719 });
4720 };
4721 var onPaste = function (warehouse, target) {
4722 return $_aqhz9okhjfuw8q5y.cell(target.element()).bind(function (cell) {
4723 return findInWarehouse(warehouse, cell).map(function (details) {
4724 return $_91sgzmujfuw8qm5.merge(details, {
4725 generators: target.generators,
4726 clipboard: target.clipboard
4727 });
4728 });
4729 });
4730 };
4731 var onPasteRows = function (warehouse, target) {
4732 var details = $_tyr3yk5jfuw8q47.map(target.selection(), function (cell) {
4733 return $_aqhz9okhjfuw8q5y.cell(cell).bind(function (lc) {
4734 return findInWarehouse(warehouse, lc);
4735 });
4736 });
4737 var cells = $_cul8qomvjfuw8qm7.cat(details);
4738 return cells.length > 0 ? Option.some($_91sgzmujfuw8qm5.merge({cells: cells}, {
4739 generators: target.generators,
4740 clipboard: target.clipboard
4741 })) : Option.none();
4742 };
4743 var onMergable = function (warehouse, target) {
4744 return target.mergable();
4745 };
4746 var onUnmergable = function (warehouse, target) {
4747 return target.unmergable();
4748 };
4749 var onCells = function (warehouse, target) {
4750 var details = $_tyr3yk5jfuw8q47.map(target.selection(), function (cell) {
4751 return $_aqhz9okhjfuw8q5y.cell(cell).bind(function (lc) {
4752 return findInWarehouse(warehouse, lc);
4753 });
4754 });
4755 var cells = $_cul8qomvjfuw8qm7.cat(details);
4756 return cells.length > 0 ? Option.some(cells) : Option.none();
4757 };
4758 var $_dis709mtjfuw8qlp = {
4759 run: run,
4760 toDetailList: toDetailList,
4761 onCell: onCell,
4762 onCells: onCells,
4763 onPaste: onPaste,
4764 onPasteRows: onPasteRows,
4765 onMergable: onMergable,
4766 onUnmergable: onUnmergable
4767 };
4768
4769 var value$1 = function (o) {
4770 var is = function (v) {
4771 return o === v;
4772 };
4773 var or = function (opt) {
4774 return value$1(o);
4775 };
4776 var orThunk = function (f) {
4777 return value$1(o);
4778 };
4779 var map = function (f) {
4780 return value$1(f(o));
4781 };
4782 var each = function (f) {
4783 f(o);
4784 };
4785 var bind = function (f) {
4786 return f(o);
4787 };
4788 var fold = function (_, onValue) {
4789 return onValue(o);
4790 };
4791 var exists = function (f) {
4792 return f(o);
4793 };
4794 var forall = function (f) {
4795 return f(o);
4796 };
4797 var toOption = function () {
4798 return Option.some(o);
4799 };
4800 return {
4801 is: is,
4802 isValue: $_20nfr6k7jfuw8q4g.always,
4803 isError: $_20nfr6k7jfuw8q4g.never,
4804 getOr: $_20nfr6k7jfuw8q4g.constant(o),
4805 getOrThunk: $_20nfr6k7jfuw8q4g.constant(o),
4806 getOrDie: $_20nfr6k7jfuw8q4g.constant(o),
4807 or: or,
4808 orThunk: orThunk,
4809 fold: fold,
4810 map: map,
4811 each: each,
4812 bind: bind,
4813 exists: exists,
4814 forall: forall,
4815 toOption: toOption
4816 };
4817 };
4818 var error = function (message) {
4819 var getOrThunk = function (f) {
4820 return f();
4821 };
4822 var getOrDie = function () {
4823 return $_20nfr6k7jfuw8q4g.die(String(message))();
4824 };
4825 var or = function (opt) {
4826 return opt;
4827 };
4828 var orThunk = function (f) {
4829 return f();
4830 };
4831 var map = function (f) {
4832 return error(message);
4833 };
4834 var bind = function (f) {
4835 return error(message);
4836 };
4837 var fold = function (onError, _) {
4838 return onError(message);
4839 };
4840 return {
4841 is: $_20nfr6k7jfuw8q4g.never,
4842 isValue: $_20nfr6k7jfuw8q4g.never,
4843 isError: $_20nfr6k7jfuw8q4g.always,
4844 getOr: $_20nfr6k7jfuw8q4g.identity,
4845 getOrThunk: getOrThunk,
4846 getOrDie: getOrDie,
4847 or: or,
4848 orThunk: orThunk,
4849 fold: fold,
4850 map: map,
4851 each: $_20nfr6k7jfuw8q4g.noop,
4852 bind: bind,
4853 exists: $_20nfr6k7jfuw8q4g.never,
4854 forall: $_20nfr6k7jfuw8q4g.always,
4855 toOption: Option.none
4856 };
4857 };
4858 var Result = {
4859 value: value$1,
4860 error: error
4861 };
4862
4863 var measure = function (startAddress, gridA, gridB) {
4864 if (startAddress.row() >= gridA.length || startAddress.column() > $_aylxzgmyjfuw8qmj.cellLength(gridA[0]))
4865 return Result.error('invalid start address out of table bounds, row: ' + startAddress.row() + ', column: ' + startAddress.column());
4866 var rowRemainder = gridA.slice(startAddress.row());
4867 var colRemainder = rowRemainder[0].cells().slice(startAddress.column());
4868 var colRequired = $_aylxzgmyjfuw8qmj.cellLength(gridB[0]);
4869 var rowRequired = gridB.length;
4870 return Result.value({
4871 rowDelta: $_20nfr6k7jfuw8q4g.constant(rowRemainder.length - rowRequired),
4872 colDelta: $_20nfr6k7jfuw8q4g.constant(colRemainder.length - colRequired)
4873 });
4874 };
4875 var measureWidth = function (gridA, gridB) {
4876 var colLengthA = $_aylxzgmyjfuw8qmj.cellLength(gridA[0]);
4877 var colLengthB = $_aylxzgmyjfuw8qmj.cellLength(gridB[0]);
4878 return {
4879 rowDelta: $_20nfr6k7jfuw8q4g.constant(0),
4880 colDelta: $_20nfr6k7jfuw8q4g.constant(colLengthA - colLengthB)
4881 };
4882 };
4883 var fill = function (cells, generator) {
4884 return $_tyr3yk5jfuw8q47.map(cells, function () {
4885 return $_ce5pyrkgjfuw8q5v.elementnew(generator.cell(), true);
4886 });
4887 };
4888 var rowFill = function (grid, amount, generator) {
4889 return grid.concat($_fcnwwbn2jfuw8qoa.repeat(amount, function (_row) {
4890 return $_aylxzgmyjfuw8qmj.setCells(grid[grid.length - 1], fill(grid[grid.length - 1].cells(), generator));
4891 }));
4892 };
4893 var colFill = function (grid, amount, generator) {
4894 return $_tyr3yk5jfuw8q47.map(grid, function (row) {
4895 return $_aylxzgmyjfuw8qmj.setCells(row, row.cells().concat(fill($_fcnwwbn2jfuw8qoa.range(0, amount), generator)));
4896 });
4897 };
4898 var tailor = function (gridA, delta, generator) {
4899 var fillCols = delta.colDelta() < 0 ? colFill : $_20nfr6k7jfuw8q4g.identity;
4900 var fillRows = delta.rowDelta() < 0 ? rowFill : $_20nfr6k7jfuw8q4g.identity;
4901 var modifiedCols = fillCols(gridA, Math.abs(delta.colDelta()), generator);
4902 var tailoredGrid = fillRows(modifiedCols, Math.abs(delta.rowDelta()), generator);
4903 return tailoredGrid;
4904 };
4905 var $_pbbdjnbjfuw8qpe = {
4906 measure: measure,
4907 measureWidth: measureWidth,
4908 tailor: tailor
4909 };
4910
4911 var merge$2 = function (grid, bounds, comparator, substitution) {
4912 if (grid.length === 0)
4913 return grid;
4914 for (var i = bounds.startRow(); i <= bounds.finishRow(); i++) {
4915 for (var j = bounds.startCol(); j <= bounds.finishCol(); j++) {
4916 $_aylxzgmyjfuw8qmj.mutateCell(grid[i], j, $_ce5pyrkgjfuw8q5v.elementnew(substitution(), false));
4917 }
4918 }
4919 return grid;
4920 };
4921 var unmerge = function (grid, target, comparator, substitution) {
4922 var first = true;
4923 for (var i = 0; i < grid.length; i++) {
4924 for (var j = 0; j < $_aylxzgmyjfuw8qmj.cellLength(grid[0]); j++) {
4925 var current = $_aylxzgmyjfuw8qmj.getCellElement(grid[i], j);
4926 var isToReplace = comparator(current, target);
4927 if (isToReplace === true && first === false) {
4928 $_aylxzgmyjfuw8qmj.mutateCell(grid[i], j, $_ce5pyrkgjfuw8q5v.elementnew(substitution(), true));
4929 } else if (isToReplace === true) {
4930 first = false;
4931 }
4932 }
4933 }
4934 return grid;
4935 };
4936 var uniqueCells = function (row, comparator) {
4937 return $_tyr3yk5jfuw8q47.foldl(row, function (rest, cell) {
4938 return $_tyr3yk5jfuw8q47.exists(rest, function (currentCell) {
4939 return comparator(currentCell.element(), cell.element());
4940 }) ? rest : rest.concat([cell]);
4941 }, []);
4942 };
4943 var splitRows = function (grid, index, comparator, substitution) {
4944 if (index > 0 && index < grid.length) {
4945 var rowPrevCells = grid[index - 1].cells();
4946 var cells = uniqueCells(rowPrevCells, comparator);
4947 $_tyr3yk5jfuw8q47.each(cells, function (cell) {
4948 var replacement = Option.none();
4949 for (var i = index; i < grid.length; i++) {
4950 for (var j = 0; j < $_aylxzgmyjfuw8qmj.cellLength(grid[0]); j++) {
4951 var current = grid[i].cells()[j];
4952 var isToReplace = comparator(current.element(), cell.element());
4953 if (isToReplace) {
4954 if (replacement.isNone()) {
4955 replacement = Option.some(substitution());
4956 }
4957 replacement.each(function (sub) {
4958 $_aylxzgmyjfuw8qmj.mutateCell(grid[i], j, $_ce5pyrkgjfuw8q5v.elementnew(sub, true));
4959 });
4960 }
4961 }
4962 }
4963 });
4964 }
4965 return grid;
4966 };
4967 var $_72fqzkndjfuw8qpp = {
4968 merge: merge$2,
4969 unmerge: unmerge,
4970 splitRows: splitRows
4971 };
4972
4973 var isSpanning = function (grid, row, col, comparator) {
4974 var candidate = $_aylxzgmyjfuw8qmj.getCell(grid[row], col);
4975 var matching = $_20nfr6k7jfuw8q4g.curry(comparator, candidate.element());
4976 var currentRow = grid[row];
4977 return grid.length > 1 && $_aylxzgmyjfuw8qmj.cellLength(currentRow) > 1 && (col > 0 && matching($_aylxzgmyjfuw8qmj.getCellElement(currentRow, col - 1)) || col < currentRow.length - 1 && matching($_aylxzgmyjfuw8qmj.getCellElement(currentRow, col + 1)) || row > 0 && matching($_aylxzgmyjfuw8qmj.getCellElement(grid[row - 1], col)) || row < grid.length - 1 && matching($_aylxzgmyjfuw8qmj.getCellElement(grid[row + 1], col)));
4978 };
4979 var mergeTables = function (startAddress, gridA, gridB, generator, comparator) {
4980 var startRow = startAddress.row();
4981 var startCol = startAddress.column();
4982 var mergeHeight = gridB.length;
4983 var mergeWidth = $_aylxzgmyjfuw8qmj.cellLength(gridB[0]);
4984 var endRow = startRow + mergeHeight;
4985 var endCol = startCol + mergeWidth;
4986 for (var r = startRow; r < endRow; r++) {
4987 for (var c = startCol; c < endCol; c++) {
4988 if (isSpanning(gridA, r, c, comparator)) {
4989 $_72fqzkndjfuw8qpp.unmerge(gridA, $_aylxzgmyjfuw8qmj.getCellElement(gridA[r], c), comparator, generator.cell);
4990 }
4991 var newCell = $_aylxzgmyjfuw8qmj.getCellElement(gridB[r - startRow], c - startCol);
4992 var replacement = generator.replace(newCell);
4993 $_aylxzgmyjfuw8qmj.mutateCell(gridA[r], c, $_ce5pyrkgjfuw8q5v.elementnew(replacement, true));
4994 }
4995 }
4996 return gridA;
4997 };
4998 var merge$3 = function (startAddress, gridA, gridB, generator, comparator) {
4999 var result = $_pbbdjnbjfuw8qpe.measure(startAddress, gridA, gridB);
5000 return result.map(function (delta) {
5001 var fittedGrid = $_pbbdjnbjfuw8qpe.tailor(gridA, delta, generator);
5002 return mergeTables(startAddress, fittedGrid, gridB, generator, comparator);
5003 });
5004 };
5005 var insert = function (index, gridA, gridB, generator, comparator) {
5006 $_72fqzkndjfuw8qpp.splitRows(gridA, index, comparator, generator.cell);
5007 var delta = $_pbbdjnbjfuw8qpe.measureWidth(gridB, gridA);
5008 var fittedNewGrid = $_pbbdjnbjfuw8qpe.tailor(gridB, delta, generator);
5009 var secondDelta = $_pbbdjnbjfuw8qpe.measureWidth(gridA, fittedNewGrid);
5010 var fittedOldGrid = $_pbbdjnbjfuw8qpe.tailor(gridA, secondDelta, generator);
5011 return fittedOldGrid.slice(0, index).concat(fittedNewGrid).concat(fittedOldGrid.slice(index, fittedOldGrid.length));
5012 };
5013 var $_5jycvqnajfuw8qp5 = {
5014 merge: merge$3,
5015 insert: insert
5016 };
5017
5018 var insertRowAt = function (grid, index, example, comparator, substitution) {
5019 var before = grid.slice(0, index);
5020 var after = grid.slice(index);
5021 var between = $_aylxzgmyjfuw8qmj.mapCells(grid[example], function (ex, c) {
5022 var withinSpan = index > 0 && index < grid.length && comparator($_aylxzgmyjfuw8qmj.getCellElement(grid[index - 1], c), $_aylxzgmyjfuw8qmj.getCellElement(grid[index], c));
5023 var ret = withinSpan ? $_aylxzgmyjfuw8qmj.getCell(grid[index], c) : $_ce5pyrkgjfuw8q5v.elementnew(substitution(ex.element(), comparator), true);
5024 return ret;
5025 });
5026 return before.concat([between]).concat(after);
5027 };
5028 var insertColumnAt = function (grid, index, example, comparator, substitution) {
5029 return $_tyr3yk5jfuw8q47.map(grid, function (row) {
5030 var withinSpan = index > 0 && index < $_aylxzgmyjfuw8qmj.cellLength(row) && comparator($_aylxzgmyjfuw8qmj.getCellElement(row, index - 1), $_aylxzgmyjfuw8qmj.getCellElement(row, index));
5031 var sub = withinSpan ? $_aylxzgmyjfuw8qmj.getCell(row, index) : $_ce5pyrkgjfuw8q5v.elementnew(substitution($_aylxzgmyjfuw8qmj.getCellElement(row, example), comparator), true);
5032 return $_aylxzgmyjfuw8qmj.addCell(row, index, sub);
5033 });
5034 };
5035 var splitCellIntoColumns = function (grid, exampleRow, exampleCol, comparator, substitution) {
5036 var index = exampleCol + 1;
5037 return $_tyr3yk5jfuw8q47.map(grid, function (row, i) {
5038 var isTargetCell = i === exampleRow;
5039 var sub = isTargetCell ? $_ce5pyrkgjfuw8q5v.elementnew(substitution($_aylxzgmyjfuw8qmj.getCellElement(row, exampleCol), comparator), true) : $_aylxzgmyjfuw8qmj.getCell(row, exampleCol);
5040 return $_aylxzgmyjfuw8qmj.addCell(row, index, sub);
5041 });
5042 };
5043 var splitCellIntoRows = function (grid, exampleRow, exampleCol, comparator, substitution) {
5044 var index = exampleRow + 1;
5045 var before = grid.slice(0, index);
5046 var after = grid.slice(index);
5047 var between = $_aylxzgmyjfuw8qmj.mapCells(grid[exampleRow], function (ex, i) {
5048 var isTargetCell = i === exampleCol;
5049 return isTargetCell ? $_ce5pyrkgjfuw8q5v.elementnew(substitution(ex.element(), comparator), true) : ex;
5050 });
5051 return before.concat([between]).concat(after);
5052 };
5053 var deleteColumnsAt = function (grid, start, finish) {
5054 var rows = $_tyr3yk5jfuw8q47.map(grid, function (row) {
5055 var cells = row.cells().slice(0, start).concat(row.cells().slice(finish + 1));
5056 return $_ce5pyrkgjfuw8q5v.rowcells(cells, row.section());
5057 });
5058 return $_tyr3yk5jfuw8q47.filter(rows, function (row) {
5059 return row.cells().length > 0;
5060 });
5061 };
5062 var deleteRowsAt = function (grid, start, finish) {
5063 return grid.slice(0, start).concat(grid.slice(finish + 1));
5064 };
5065 var $_22uvfenejfuw8qpx = {
5066 insertRowAt: insertRowAt,
5067 insertColumnAt: insertColumnAt,
5068 splitCellIntoColumns: splitCellIntoColumns,
5069 splitCellIntoRows: splitCellIntoRows,
5070 deleteRowsAt: deleteRowsAt,
5071 deleteColumnsAt: deleteColumnsAt
5072 };
5073
5074 var replaceIn = function (grid, targets, comparator, substitution) {
5075 var isTarget = function (cell) {
5076 return $_tyr3yk5jfuw8q47.exists(targets, function (target) {
5077 return comparator(cell.element(), target.element());
5078 });
5079 };
5080 return $_tyr3yk5jfuw8q47.map(grid, function (row) {
5081 return $_aylxzgmyjfuw8qmj.mapCells(row, function (cell) {
5082 return isTarget(cell) ? $_ce5pyrkgjfuw8q5v.elementnew(substitution(cell.element(), comparator), true) : cell;
5083 });
5084 });
5085 };
5086 var notStartRow = function (grid, rowIndex, colIndex, comparator) {
5087 return $_aylxzgmyjfuw8qmj.getCellElement(grid[rowIndex], colIndex) !== undefined && (rowIndex > 0 && comparator($_aylxzgmyjfuw8qmj.getCellElement(grid[rowIndex - 1], colIndex), $_aylxzgmyjfuw8qmj.getCellElement(grid[rowIndex], colIndex)));
5088 };
5089 var notStartColumn = function (row, index, comparator) {
5090 return index > 0 && comparator($_aylxzgmyjfuw8qmj.getCellElement(row, index - 1), $_aylxzgmyjfuw8qmj.getCellElement(row, index));
5091 };
5092 var replaceColumn = function (grid, index, comparator, substitution) {
5093 var targets = $_tyr3yk5jfuw8q47.bind(grid, function (row, i) {
5094 var alreadyAdded = notStartRow(grid, i, index, comparator) || notStartColumn(row, index, comparator);
5095 return alreadyAdded ? [] : [$_aylxzgmyjfuw8qmj.getCell(row, index)];
5096 });
5097 return replaceIn(grid, targets, comparator, substitution);
5098 };
5099 var replaceRow = function (grid, index, comparator, substitution) {
5100 var targetRow = grid[index];
5101 var targets = $_tyr3yk5jfuw8q47.bind(targetRow.cells(), function (item, i) {
5102 var alreadyAdded = notStartRow(grid, index, i, comparator) || notStartColumn(targetRow, i, comparator);
5103 return alreadyAdded ? [] : [item];
5104 });
5105 return replaceIn(grid, targets, comparator, substitution);
5106 };
5107 var $_507pt2nfjfuw8qq2 = {
5108 replaceColumn: replaceColumn,
5109 replaceRow: replaceRow
5110 };
5111
5112 var none$1 = function () {
5113 return folder(function (n, o, l, m, r) {
5114 return n();
5115 });
5116 };
5117 var only = function (index) {
5118 return folder(function (n, o, l, m, r) {
5119 return o(index);
5120 });
5121 };
5122 var left = function (index, next) {
5123 return folder(function (n, o, l, m, r) {
5124 return l(index, next);
5125 });
5126 };
5127 var middle = function (prev, index, next) {
5128 return folder(function (n, o, l, m, r) {
5129 return m(prev, index, next);
5130 });
5131 };
5132 var right = function (prev, index) {
5133 return folder(function (n, o, l, m, r) {
5134 return r(prev, index);
5135 });
5136 };
5137 var folder = function (fold) {
5138 return {fold: fold};
5139 };
5140 var $_17zkjbnijfuw8qqk = {
5141 none: none$1,
5142 only: only,
5143 left: left,
5144 middle: middle,
5145 right: right
5146 };
5147
5148 var neighbours$1 = function (input, index) {
5149 if (input.length === 0)
5150 return $_17zkjbnijfuw8qqk.none();
5151 if (input.length === 1)
5152 return $_17zkjbnijfuw8qqk.only(0);
5153 if (index === 0)
5154 return $_17zkjbnijfuw8qqk.left(0, 1);
5155 if (index === input.length - 1)
5156 return $_17zkjbnijfuw8qqk.right(index - 1, index);
5157 if (index > 0 && index < input.length - 1)
5158 return $_17zkjbnijfuw8qqk.middle(index - 1, index, index + 1);
5159 return $_17zkjbnijfuw8qqk.none();
5160 };
5161 var determine = function (input, column, step, tableSize) {
5162 var result = input.slice(0);
5163 var context = neighbours$1(input, column);
5164 var zero = function (array) {
5165 return $_tyr3yk5jfuw8q47.map(array, $_20nfr6k7jfuw8q4g.constant(0));
5166 };
5167 var onNone = $_20nfr6k7jfuw8q4g.constant(zero(result));
5168 var onOnly = function (index) {
5169 return tableSize.singleColumnWidth(result[index], step);
5170 };
5171 var onChange = function (index, next) {
5172 if (step >= 0) {
5173 var newNext = Math.max(tableSize.minCellWidth(), result[next] - step);
5174 return zero(result.slice(0, index)).concat([
5175 step,
5176 newNext - result[next]
5177 ]).concat(zero(result.slice(next + 1)));
5178 } else {
5179 var newThis = Math.max(tableSize.minCellWidth(), result[index] + step);
5180 var diffx = result[index] - newThis;
5181 return zero(result.slice(0, index)).concat([
5182 newThis - result[index],
5183 diffx
5184 ]).concat(zero(result.slice(next + 1)));
5185 }
5186 };
5187 var onLeft = onChange;
5188 var onMiddle = function (prev, index, next) {
5189 return onChange(index, next);
5190 };
5191 var onRight = function (prev, index) {
5192 if (step >= 0) {
5193 return zero(result.slice(0, index)).concat([step]);
5194 } else {
5195 var size = Math.max(tableSize.minCellWidth(), result[index] + step);
5196 return zero(result.slice(0, index)).concat([size - result[index]]);
5197 }
5198 };
5199 return context.fold(onNone, onOnly, onLeft, onMiddle, onRight);
5200 };
5201 var $_7b8knbnhjfuw8qqd = {determine: determine};
5202
5203 var getSpan$1 = function (cell, type) {
5204 return $_3q82t2l5jfuw8q93.has(cell, type) && parseInt($_3q82t2l5jfuw8q93.get(cell, type), 10) > 1;
5205 };
5206 var hasColspan = function (cell) {
5207 return getSpan$1(cell, 'colspan');
5208 };
5209 var hasRowspan = function (cell) {
5210 return getSpan$1(cell, 'rowspan');
5211 };
5212 var getInt = function (element, property) {
5213 return parseInt($_bfod2hlejfuw8qac.get(element, property), 10);
5214 };
5215 var $_63qtcvnkjfuw8qqu = {
5216 hasColspan: hasColspan,
5217 hasRowspan: hasRowspan,
5218 minWidth: $_20nfr6k7jfuw8q4g.constant(10),
5219 minHeight: $_20nfr6k7jfuw8q4g.constant(10),
5220 getInt: getInt
5221 };
5222
5223 var getRaw$1 = function (cell, property, getter) {
5224 return $_bfod2hlejfuw8qac.getRaw(cell, property).fold(function () {
5225 return getter(cell) + 'px';
5226 }, function (raw) {
5227 return raw;
5228 });
5229 };
5230 var getRawW = function (cell) {
5231 return getRaw$1(cell, 'width', $_by2skemajfuw8qhj.getPixelWidth);
5232 };
5233 var getRawH = function (cell) {
5234 return getRaw$1(cell, 'height', $_by2skemajfuw8qhj.getHeight);
5235 };
5236 var getWidthFrom = function (warehouse, direction, getWidth, fallback, tableSize) {
5237 var columns = $_9oko5pn1jfuw8qo0.columns(warehouse);
5238 var backups = $_tyr3yk5jfuw8q47.map(columns, function (cellOption) {
5239 return cellOption.map(direction.edge);
5240 });
5241 return $_tyr3yk5jfuw8q47.map(columns, function (cellOption, c) {
5242 var columnCell = cellOption.filter($_20nfr6k7jfuw8q4g.not($_63qtcvnkjfuw8qqu.hasColspan));
5243 return columnCell.fold(function () {
5244 var deduced = $_fcnwwbn2jfuw8qoa.deduce(backups, c);
5245 return fallback(deduced);
5246 }, function (cell) {
5247 return getWidth(cell, tableSize);
5248 });
5249 });
5250 };
5251 var getDeduced = function (deduced) {
5252 return deduced.map(function (d) {
5253 return d + 'px';
5254 }).getOr('');
5255 };
5256 var getRawWidths = function (warehouse, direction) {
5257 return getWidthFrom(warehouse, direction, getRawW, getDeduced);
5258 };
5259 var getPercentageWidths = function (warehouse, direction, tableSize) {
5260 return getWidthFrom(warehouse, direction, $_by2skemajfuw8qhj.getPercentageWidth, function (deduced) {
5261 return deduced.fold(function () {
5262 return tableSize.minCellWidth();
5263 }, function (cellWidth) {
5264 return cellWidth / tableSize.pixelWidth() * 100;
5265 });
5266 }, tableSize);
5267 };
5268 var getPixelWidths = function (warehouse, direction, tableSize) {
5269 return getWidthFrom(warehouse, direction, $_by2skemajfuw8qhj.getPixelWidth, function (deduced) {
5270 return deduced.getOrThunk(tableSize.minCellWidth);
5271 }, tableSize);
5272 };
5273 var getHeightFrom = function (warehouse, direction, getHeight, fallback) {
5274 var rows = $_9oko5pn1jfuw8qo0.rows(warehouse);
5275 var backups = $_tyr3yk5jfuw8q47.map(rows, function (cellOption) {
5276 return cellOption.map(direction.edge);
5277 });
5278 return $_tyr3yk5jfuw8q47.map(rows, function (cellOption, c) {
5279 var rowCell = cellOption.filter($_20nfr6k7jfuw8q4g.not($_63qtcvnkjfuw8qqu.hasRowspan));
5280 return rowCell.fold(function () {
5281 var deduced = $_fcnwwbn2jfuw8qoa.deduce(backups, c);
5282 return fallback(deduced);
5283 }, function (cell) {
5284 return getHeight(cell);
5285 });
5286 });
5287 };
5288 var getPixelHeights = function (warehouse, direction) {
5289 return getHeightFrom(warehouse, direction, $_by2skemajfuw8qhj.getHeight, function (deduced) {
5290 return deduced.getOrThunk($_63qtcvnkjfuw8qqu.minHeight);
5291 });
5292 };
5293 var getRawHeights = function (warehouse, direction) {
5294 return getHeightFrom(warehouse, direction, getRawH, getDeduced);
5295 };
5296 var $_694691njjfuw8qqm = {
5297 getRawWidths: getRawWidths,
5298 getPixelWidths: getPixelWidths,
5299 getPercentageWidths: getPercentageWidths,
5300 getPixelHeights: getPixelHeights,
5301 getRawHeights: getRawHeights
5302 };
5303
5304 var total = function (start, end, measures) {
5305 var r = 0;
5306 for (var i = start; i < end; i++) {
5307 r += measures[i] !== undefined ? measures[i] : 0;
5308 }
5309 return r;
5310 };
5311 var recalculateWidth = function (warehouse, widths) {
5312 var all = $_2ge24cldjfuw8qa3.justCells(warehouse);
5313 return $_tyr3yk5jfuw8q47.map(all, function (cell) {
5314 var width = total(cell.column(), cell.column() + cell.colspan(), widths);
5315 return {
5316 element: cell.element,
5317 width: $_20nfr6k7jfuw8q4g.constant(width),
5318 colspan: cell.colspan
5319 };
5320 });
5321 };
5322 var recalculateHeight = function (warehouse, heights) {
5323 var all = $_2ge24cldjfuw8qa3.justCells(warehouse);
5324 return $_tyr3yk5jfuw8q47.map(all, function (cell) {
5325 var height = total(cell.row(), cell.row() + cell.rowspan(), heights);
5326 return {
5327 element: cell.element,
5328 height: $_20nfr6k7jfuw8q4g.constant(height),
5329 rowspan: cell.rowspan
5330 };
5331 });
5332 };
5333 var matchRowHeight = function (warehouse, heights) {
5334 return $_tyr3yk5jfuw8q47.map(warehouse.all(), function (row, i) {
5335 return {
5336 element: row.element,
5337 height: $_20nfr6k7jfuw8q4g.constant(heights[i])
5338 };
5339 });
5340 };
5341 var $_2ltb63nljfuw8qr5 = {
5342 recalculateWidth: recalculateWidth,
5343 recalculateHeight: recalculateHeight,
5344 matchRowHeight: matchRowHeight
5345 };
5346
5347 var percentageSize = function (width, element) {
5348 var floatWidth = parseFloat(width);
5349 var pixelWidth = $_fj252lmejfuw8qin.get(element);
5350 var getCellDelta = function (delta) {
5351 return delta / pixelWidth * 100;
5352 };
5353 var singleColumnWidth = function (width, _delta) {
5354 return [100 - width];
5355 };
5356 var minCellWidth = function () {
5357 return $_63qtcvnkjfuw8qqu.minWidth() / pixelWidth * 100;
5358 };
5359 var setTableWidth = function (table, _newWidths, delta) {
5360 var total = floatWidth + delta;
5361 $_by2skemajfuw8qhj.setPercentageWidth(table, total);
5362 };
5363 return {
5364 width: $_20nfr6k7jfuw8q4g.constant(floatWidth),
5365 pixelWidth: $_20nfr6k7jfuw8q4g.constant(pixelWidth),
5366 getWidths: $_694691njjfuw8qqm.getPercentageWidths,
5367 getCellDelta: getCellDelta,
5368 singleColumnWidth: singleColumnWidth,
5369 minCellWidth: minCellWidth,
5370 setElementWidth: $_by2skemajfuw8qhj.setPercentageWidth,
5371 setTableWidth: setTableWidth
5372 };
5373 };
5374 var pixelSize = function (width) {
5375 var intWidth = parseInt(width, 10);
5376 var getCellDelta = $_20nfr6k7jfuw8q4g.identity;
5377 var singleColumnWidth = function (width, delta) {
5378 var newNext = Math.max($_63qtcvnkjfuw8qqu.minWidth(), width + delta);
5379 return [newNext - width];
5380 };
5381 var setTableWidth = function (table, newWidths, _delta) {
5382 var total = $_tyr3yk5jfuw8q47.foldr(newWidths, function (b, a) {
5383 return b + a;
5384 }, 0);
5385 $_by2skemajfuw8qhj.setPixelWidth(table, total);
5386 };
5387 return {
5388 width: $_20nfr6k7jfuw8q4g.constant(intWidth),
5389 pixelWidth: $_20nfr6k7jfuw8q4g.constant(intWidth),
5390 getWidths: $_694691njjfuw8qqm.getPixelWidths,
5391 getCellDelta: getCellDelta,
5392 singleColumnWidth: singleColumnWidth,
5393 minCellWidth: $_63qtcvnkjfuw8qqu.minWidth,
5394 setElementWidth: $_by2skemajfuw8qhj.setPixelWidth,
5395 setTableWidth: setTableWidth
5396 };
5397 };
5398 var chooseSize = function (element, width) {
5399 if ($_by2skemajfuw8qhj.percentageBasedSizeRegex().test(width)) {
5400 var percentMatch = $_by2skemajfuw8qhj.percentageBasedSizeRegex().exec(width);
5401 return percentageSize(percentMatch[1], element);
5402 } else if ($_by2skemajfuw8qhj.pixelBasedSizeRegex().test(width)) {
5403 var pixelMatch = $_by2skemajfuw8qhj.pixelBasedSizeRegex().exec(width);
5404 return pixelSize(pixelMatch[1]);
5405 } else {
5406 var fallbackWidth = $_fj252lmejfuw8qin.get(element);
5407 return pixelSize(fallbackWidth);
5408 }
5409 };
5410 var getTableSize = function (element) {
5411 var width = $_by2skemajfuw8qhj.getRawWidth(element);
5412 return width.fold(function () {
5413 var fallbackWidth = $_fj252lmejfuw8qin.get(element);
5414 return pixelSize(fallbackWidth);
5415 }, function (width) {
5416 return chooseSize(element, width);
5417 });
5418 };
5419 var $_2o9g1qnmjfuw8qrh = {getTableSize: getTableSize};
5420
5421 var getWarehouse$1 = function (list) {
5422 return $_2ge24cldjfuw8qa3.generate(list);
5423 };
5424 var sumUp = function (newSize) {
5425 return $_tyr3yk5jfuw8q47.foldr(newSize, function (b, a) {
5426 return b + a;
5427 }, 0);
5428 };
5429 var getTableWarehouse = function (table) {
5430 var list = $_dy3x0nkfjfuw8q5l.fromTable(table);
5431 return getWarehouse$1(list);
5432 };
5433 var adjustWidth = function (table, delta, index, direction) {
5434 var tableSize = $_2o9g1qnmjfuw8qrh.getTableSize(table);
5435 var step = tableSize.getCellDelta(delta);
5436 var warehouse = getTableWarehouse(table);
5437 var widths = tableSize.getWidths(warehouse, direction, tableSize);
5438 var deltas = $_7b8knbnhjfuw8qqd.determine(widths, index, step, tableSize);
5439 var newWidths = $_tyr3yk5jfuw8q47.map(deltas, function (dx, i) {
5440 return dx + widths[i];
5441 });
5442 var newSizes = $_2ltb63nljfuw8qr5.recalculateWidth(warehouse, newWidths);
5443 $_tyr3yk5jfuw8q47.each(newSizes, function (cell) {
5444 tableSize.setElementWidth(cell.element(), cell.width());
5445 });
5446 if (index === warehouse.grid().columns() - 1) {
5447 tableSize.setTableWidth(table, newWidths, step);
5448 }
5449 };
5450 var adjustHeight = function (table, delta, index, direction) {
5451 var warehouse = getTableWarehouse(table);
5452 var heights = $_694691njjfuw8qqm.getPixelHeights(warehouse, direction);
5453 var newHeights = $_tyr3yk5jfuw8q47.map(heights, function (dy, i) {
5454 return index === i ? Math.max(delta + dy, $_63qtcvnkjfuw8qqu.minHeight()) : dy;
5455 });
5456 var newCellSizes = $_2ltb63nljfuw8qr5.recalculateHeight(warehouse, newHeights);
5457 var newRowSizes = $_2ltb63nljfuw8qr5.matchRowHeight(warehouse, newHeights);
5458 $_tyr3yk5jfuw8q47.each(newRowSizes, function (row) {
5459 $_by2skemajfuw8qhj.setHeight(row.element(), row.height());
5460 });
5461 $_tyr3yk5jfuw8q47.each(newCellSizes, function (cell) {
5462 $_by2skemajfuw8qhj.setHeight(cell.element(), cell.height());
5463 });
5464 var total = sumUp(newHeights);
5465 $_by2skemajfuw8qhj.setHeight(table, total);
5466 };
5467 var adjustWidthTo = function (table, list, direction) {
5468 var tableSize = $_2o9g1qnmjfuw8qrh.getTableSize(table);
5469 var warehouse = getWarehouse$1(list);
5470 var widths = tableSize.getWidths(warehouse, direction, tableSize);
5471 var newSizes = $_2ltb63nljfuw8qr5.recalculateWidth(warehouse, widths);
5472 $_tyr3yk5jfuw8q47.each(newSizes, function (cell) {
5473 tableSize.setElementWidth(cell.element(), cell.width());
5474 });
5475 var total = $_tyr3yk5jfuw8q47.foldr(widths, function (b, a) {
5476 return a + b;
5477 }, 0);
5478 if (newSizes.length > 0) {
5479 tableSize.setElementWidth(table, total);
5480 }
5481 };
5482 var $_cwciisngjfuw8qq6 = {
5483 adjustWidth: adjustWidth,
5484 adjustHeight: adjustHeight,
5485 adjustWidthTo: adjustWidthTo
5486 };
5487
5488 var prune = function (table) {
5489 var cells = $_aqhz9okhjfuw8q5y.cells(table);
5490 if (cells.length === 0)
5491 $_fl1deelhjfuw8qax.remove(table);
5492 };
5493 var outcome = $_5now9kbjfuw8q5e.immutable('grid', 'cursor');
5494 var elementFromGrid = function (grid, row, column) {
5495 return findIn(grid, row, column).orThunk(function () {
5496 return findIn(grid, 0, 0);
5497 });
5498 };
5499 var findIn = function (grid, row, column) {
5500 return Option.from(grid[row]).bind(function (r) {
5501 return Option.from(r.cells()[column]).bind(function (c) {
5502 return Option.from(c.element());
5503 });
5504 });
5505 };
5506 var bundle = function (grid, row, column) {
5507 return outcome(grid, findIn(grid, row, column));
5508 };
5509 var uniqueRows = function (details) {
5510 return $_tyr3yk5jfuw8q47.foldl(details, function (rest, detail) {
5511 return $_tyr3yk5jfuw8q47.exists(rest, function (currentDetail) {
5512 return currentDetail.row() === detail.row();
5513 }) ? rest : rest.concat([detail]);
5514 }, []).sort(function (detailA, detailB) {
5515 return detailA.row() - detailB.row();
5516 });
5517 };
5518 var uniqueColumns = function (details) {
5519 return $_tyr3yk5jfuw8q47.foldl(details, function (rest, detail) {
5520 return $_tyr3yk5jfuw8q47.exists(rest, function (currentDetail) {
5521 return currentDetail.column() === detail.column();
5522 }) ? rest : rest.concat([detail]);
5523 }, []).sort(function (detailA, detailB) {
5524 return detailA.column() - detailB.column();
5525 });
5526 };
5527 var insertRowBefore = function (grid, detail, comparator, genWrappers) {
5528 var example = detail.row();
5529 var targetIndex = detail.row();
5530 var newGrid = $_22uvfenejfuw8qpx.insertRowAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);
5531 return bundle(newGrid, targetIndex, detail.column());
5532 };
5533 var insertRowsBefore = function (grid, details, comparator, genWrappers) {
5534 var example = details[0].row();
5535 var targetIndex = details[0].row();
5536 var rows = uniqueRows(details);
5537 var newGrid = $_tyr3yk5jfuw8q47.foldl(rows, function (newGrid, _row) {
5538 return $_22uvfenejfuw8qpx.insertRowAt(newGrid, targetIndex, example, comparator, genWrappers.getOrInit);
5539 }, grid);
5540 return bundle(newGrid, targetIndex, details[0].column());
5541 };
5542 var insertRowAfter = function (grid, detail, comparator, genWrappers) {
5543 var example = detail.row();
5544 var targetIndex = detail.row() + detail.rowspan();
5545 var newGrid = $_22uvfenejfuw8qpx.insertRowAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);
5546 return bundle(newGrid, targetIndex, detail.column());
5547 };
5548 var insertRowsAfter = function (grid, details, comparator, genWrappers) {
5549 var rows = uniqueRows(details);
5550 var example = rows[rows.length - 1].row();
5551 var targetIndex = rows[rows.length - 1].row() + rows[rows.length - 1].rowspan();
5552 var newGrid = $_tyr3yk5jfuw8q47.foldl(rows, function (newGrid, _row) {
5553 return $_22uvfenejfuw8qpx.insertRowAt(newGrid, targetIndex, example, comparator, genWrappers.getOrInit);
5554 }, grid);
5555 return bundle(newGrid, targetIndex, details[0].column());
5556 };
5557 var insertColumnBefore = function (grid, detail, comparator, genWrappers) {
5558 var example = detail.column();
5559 var targetIndex = detail.column();
5560 var newGrid = $_22uvfenejfuw8qpx.insertColumnAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);
5561 return bundle(newGrid, detail.row(), targetIndex);
5562 };
5563 var insertColumnsBefore = function (grid, details, comparator, genWrappers) {
5564 var columns = uniqueColumns(details);
5565 var example = columns[0].column();
5566 var targetIndex = columns[0].column();
5567 var newGrid = $_tyr3yk5jfuw8q47.foldl(columns, function (newGrid, _row) {
5568 return $_22uvfenejfuw8qpx.insertColumnAt(newGrid, targetIndex, example, comparator, genWrappers.getOrInit);
5569 }, grid);
5570 return bundle(newGrid, details[0].row(), targetIndex);
5571 };
5572 var insertColumnAfter = function (grid, detail, comparator, genWrappers) {
5573 var example = detail.column();
5574 var targetIndex = detail.column() + detail.colspan();
5575 var newGrid = $_22uvfenejfuw8qpx.insertColumnAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);
5576 return bundle(newGrid, detail.row(), targetIndex);
5577 };
5578 var insertColumnsAfter = function (grid, details, comparator, genWrappers) {
5579 var example = details[details.length - 1].column();
5580 var targetIndex = details[details.length - 1].column() + details[details.length - 1].colspan();
5581 var columns = uniqueColumns(details);
5582 var newGrid = $_tyr3yk5jfuw8q47.foldl(columns, function (newGrid, _row) {
5583 return $_22uvfenejfuw8qpx.insertColumnAt(newGrid, targetIndex, example, comparator, genWrappers.getOrInit);
5584 }, grid);
5585 return bundle(newGrid, details[0].row(), targetIndex);
5586 };
5587 var makeRowHeader = function (grid, detail, comparator, genWrappers) {
5588 var newGrid = $_507pt2nfjfuw8qq2.replaceRow(grid, detail.row(), comparator, genWrappers.replaceOrInit);
5589 return bundle(newGrid, detail.row(), detail.column());
5590 };
5591 var makeColumnHeader = function (grid, detail, comparator, genWrappers) {
5592 var newGrid = $_507pt2nfjfuw8qq2.replaceColumn(grid, detail.column(), comparator, genWrappers.replaceOrInit);
5593 return bundle(newGrid, detail.row(), detail.column());
5594 };
5595 var unmakeRowHeader = function (grid, detail, comparator, genWrappers) {
5596 var newGrid = $_507pt2nfjfuw8qq2.replaceRow(grid, detail.row(), comparator, genWrappers.replaceOrInit);
5597 return bundle(newGrid, detail.row(), detail.column());
5598 };
5599 var unmakeColumnHeader = function (grid, detail, comparator, genWrappers) {
5600 var newGrid = $_507pt2nfjfuw8qq2.replaceColumn(grid, detail.column(), comparator, genWrappers.replaceOrInit);
5601 return bundle(newGrid, detail.row(), detail.column());
5602 };
5603 var splitCellIntoColumns$1 = function (grid, detail, comparator, genWrappers) {
5604 var newGrid = $_22uvfenejfuw8qpx.splitCellIntoColumns(grid, detail.row(), detail.column(), comparator, genWrappers.getOrInit);
5605 return bundle(newGrid, detail.row(), detail.column());
5606 };
5607 var splitCellIntoRows$1 = function (grid, detail, comparator, genWrappers) {
5608 var newGrid = $_22uvfenejfuw8qpx.splitCellIntoRows(grid, detail.row(), detail.column(), comparator, genWrappers.getOrInit);
5609 return bundle(newGrid, detail.row(), detail.column());
5610 };
5611 var eraseColumns = function (grid, details, comparator, _genWrappers) {
5612 var columns = uniqueColumns(details);
5613 var newGrid = $_22uvfenejfuw8qpx.deleteColumnsAt(grid, columns[0].column(), columns[columns.length - 1].column());
5614 var cursor = elementFromGrid(newGrid, details[0].row(), details[0].column());
5615 return outcome(newGrid, cursor);
5616 };
5617 var eraseRows = function (grid, details, comparator, _genWrappers) {
5618 var rows = uniqueRows(details);
5619 var newGrid = $_22uvfenejfuw8qpx.deleteRowsAt(grid, rows[0].row(), rows[rows.length - 1].row());
5620 var cursor = elementFromGrid(newGrid, details[0].row(), details[0].column());
5621 return outcome(newGrid, cursor);
5622 };
5623 var mergeCells = function (grid, mergable, comparator, _genWrappers) {
5624 var cells = mergable.cells();
5625 $_ancl40mqjfuw8qkm.merge(cells);
5626 var newGrid = $_72fqzkndjfuw8qpp.merge(grid, mergable.bounds(), comparator, $_20nfr6k7jfuw8q4g.constant(cells[0]));
5627 return outcome(newGrid, Option.from(cells[0]));
5628 };
5629 var unmergeCells = function (grid, unmergable, comparator, genWrappers) {
5630 var newGrid = $_tyr3yk5jfuw8q47.foldr(unmergable, function (b, cell) {
5631 return $_72fqzkndjfuw8qpp.unmerge(b, cell, comparator, genWrappers.combine(cell));
5632 }, grid);
5633 return outcome(newGrid, Option.from(unmergable[0]));
5634 };
5635 var pasteCells = function (grid, pasteDetails, comparator, genWrappers) {
5636 var gridify = function (table, generators) {
5637 var list = $_dy3x0nkfjfuw8q5l.fromTable(table);
5638 var wh = $_2ge24cldjfuw8qa3.generate(list);
5639 return $_cw9o3smwjfuw8qm9.toGrid(wh, generators, true);
5640 };
5641 var gridB = gridify(pasteDetails.clipboard(), pasteDetails.generators());
5642 var startAddress = $_ce5pyrkgjfuw8q5v.address(pasteDetails.row(), pasteDetails.column());
5643 var mergedGrid = $_5jycvqnajfuw8qp5.merge(startAddress, grid, gridB, pasteDetails.generators(), comparator);
5644 return mergedGrid.fold(function () {
5645 return outcome(grid, Option.some(pasteDetails.element()));
5646 }, function (nuGrid) {
5647 var cursor = elementFromGrid(nuGrid, pasteDetails.row(), pasteDetails.column());
5648 return outcome(nuGrid, cursor);
5649 });
5650 };
5651 var gridifyRows = function (rows, generators, example) {
5652 var pasteDetails = $_dy3x0nkfjfuw8q5l.fromPastedRows(rows, example);
5653 var wh = $_2ge24cldjfuw8qa3.generate(pasteDetails);
5654 return $_cw9o3smwjfuw8qm9.toGrid(wh, generators, true);
5655 };
5656 var pasteRowsBefore = function (grid, pasteDetails, comparator, genWrappers) {
5657 var example = grid[pasteDetails.cells[0].row()];
5658 var index = pasteDetails.cells[0].row();
5659 var gridB = gridifyRows(pasteDetails.clipboard(), pasteDetails.generators(), example);
5660 var mergedGrid = $_5jycvqnajfuw8qp5.insert(index, grid, gridB, pasteDetails.generators(), comparator);
5661 var cursor = elementFromGrid(mergedGrid, pasteDetails.cells[0].row(), pasteDetails.cells[0].column());
5662 return outcome(mergedGrid, cursor);
5663 };
5664 var pasteRowsAfter = function (grid, pasteDetails, comparator, genWrappers) {
5665 var example = grid[pasteDetails.cells[0].row()];
5666 var index = pasteDetails.cells[pasteDetails.cells.length - 1].row() + pasteDetails.cells[pasteDetails.cells.length - 1].rowspan();
5667 var gridB = gridifyRows(pasteDetails.clipboard(), pasteDetails.generators(), example);
5668 var mergedGrid = $_5jycvqnajfuw8qp5.insert(index, grid, gridB, pasteDetails.generators(), comparator);
5669 var cursor = elementFromGrid(mergedGrid, pasteDetails.cells[0].row(), pasteDetails.cells[0].column());
5670 return outcome(mergedGrid, cursor);
5671 };
5672 var resize = $_cwciisngjfuw8qq6.adjustWidthTo;
5673 var $_2i21xzmmjfuw8qjg = {
5674 insertRowBefore: $_dis709mtjfuw8qlp.run(insertRowBefore, $_dis709mtjfuw8qlp.onCell, $_20nfr6k7jfuw8q4g.noop, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.modification),
5675 insertRowsBefore: $_dis709mtjfuw8qlp.run(insertRowsBefore, $_dis709mtjfuw8qlp.onCells, $_20nfr6k7jfuw8q4g.noop, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.modification),
5676 insertRowAfter: $_dis709mtjfuw8qlp.run(insertRowAfter, $_dis709mtjfuw8qlp.onCell, $_20nfr6k7jfuw8q4g.noop, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.modification),
5677 insertRowsAfter: $_dis709mtjfuw8qlp.run(insertRowsAfter, $_dis709mtjfuw8qlp.onCells, $_20nfr6k7jfuw8q4g.noop, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.modification),
5678 insertColumnBefore: $_dis709mtjfuw8qlp.run(insertColumnBefore, $_dis709mtjfuw8qlp.onCell, resize, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.modification),
5679 insertColumnsBefore: $_dis709mtjfuw8qlp.run(insertColumnsBefore, $_dis709mtjfuw8qlp.onCells, resize, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.modification),
5680 insertColumnAfter: $_dis709mtjfuw8qlp.run(insertColumnAfter, $_dis709mtjfuw8qlp.onCell, resize, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.modification),
5681 insertColumnsAfter: $_dis709mtjfuw8qlp.run(insertColumnsAfter, $_dis709mtjfuw8qlp.onCells, resize, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.modification),
5682 splitCellIntoColumns: $_dis709mtjfuw8qlp.run(splitCellIntoColumns$1, $_dis709mtjfuw8qlp.onCell, resize, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.modification),
5683 splitCellIntoRows: $_dis709mtjfuw8qlp.run(splitCellIntoRows$1, $_dis709mtjfuw8qlp.onCell, $_20nfr6k7jfuw8q4g.noop, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.modification),
5684 eraseColumns: $_dis709mtjfuw8qlp.run(eraseColumns, $_dis709mtjfuw8qlp.onCells, resize, prune, $_eoocrvmnjfuw8qk1.modification),
5685 eraseRows: $_dis709mtjfuw8qlp.run(eraseRows, $_dis709mtjfuw8qlp.onCells, $_20nfr6k7jfuw8q4g.noop, prune, $_eoocrvmnjfuw8qk1.modification),
5686 makeColumnHeader: $_dis709mtjfuw8qlp.run(makeColumnHeader, $_dis709mtjfuw8qlp.onCell, $_20nfr6k7jfuw8q4g.noop, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.transform('row', 'th')),
5687 unmakeColumnHeader: $_dis709mtjfuw8qlp.run(unmakeColumnHeader, $_dis709mtjfuw8qlp.onCell, $_20nfr6k7jfuw8q4g.noop, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.transform(null, 'td')),
5688 makeRowHeader: $_dis709mtjfuw8qlp.run(makeRowHeader, $_dis709mtjfuw8qlp.onCell, $_20nfr6k7jfuw8q4g.noop, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.transform('col', 'th')),
5689 unmakeRowHeader: $_dis709mtjfuw8qlp.run(unmakeRowHeader, $_dis709mtjfuw8qlp.onCell, $_20nfr6k7jfuw8q4g.noop, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.transform(null, 'td')),
5690 mergeCells: $_dis709mtjfuw8qlp.run(mergeCells, $_dis709mtjfuw8qlp.onMergable, $_20nfr6k7jfuw8q4g.noop, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.merging),
5691 unmergeCells: $_dis709mtjfuw8qlp.run(unmergeCells, $_dis709mtjfuw8qlp.onUnmergable, resize, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.merging),
5692 pasteCells: $_dis709mtjfuw8qlp.run(pasteCells, $_dis709mtjfuw8qlp.onPaste, resize, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.modification),
5693 pasteRowsBefore: $_dis709mtjfuw8qlp.run(pasteRowsBefore, $_dis709mtjfuw8qlp.onPasteRows, $_20nfr6k7jfuw8q4g.noop, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.modification),
5694 pasteRowsAfter: $_dis709mtjfuw8qlp.run(pasteRowsAfter, $_dis709mtjfuw8qlp.onPasteRows, $_20nfr6k7jfuw8q4g.noop, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.modification)
5695 };
5696
5697 var getBody$1 = function (editor) {
5698 return $_xbeoqkkjfuw8q73.fromDom(editor.getBody());
5699 };
5700 var getIsRoot = function (editor) {
5701 return function (element) {
5702 return $_e8rn66kojfuw8q7n.eq(element, getBody$1(editor));
5703 };
5704 };
5705 var removePxSuffix = function (size) {
5706 return size ? size.replace(/px$/, '') : '';
5707 };
5708 var addSizeSuffix = function (size) {
5709 if (/^[0-9]+$/.test(size)) {
5710 size += 'px';
5711 }
5712 return size;
5713 };
5714 var $_5xkhf2nnjfuw8qrq = {
5715 getBody: getBody$1,
5716 getIsRoot: getIsRoot,
5717 addSizeSuffix: addSizeSuffix,
5718 removePxSuffix: removePxSuffix
5719 };
5720
5721 var onDirection = function (isLtr, isRtl) {
5722 return function (element) {
5723 return getDirection(element) === 'rtl' ? isRtl : isLtr;
5724 };
5725 };
5726 var getDirection = function (element) {
5727 return $_bfod2hlejfuw8qac.get(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';
5728 };
5729 var $_a5xia4npjfuw8qs0 = {
5730 onDirection: onDirection,
5731 getDirection: getDirection
5732 };
5733
5734 var ltr$1 = {isRtl: $_20nfr6k7jfuw8q4g.constant(false)};
5735 var rtl$1 = {isRtl: $_20nfr6k7jfuw8q4g.constant(true)};
5736 var directionAt = function (element) {
5737 var dir = $_a5xia4npjfuw8qs0.getDirection(element);
5738 return dir === 'rtl' ? rtl$1 : ltr$1;
5739 };
5740 var $_4xd1udnojfuw8qrw = {directionAt: directionAt};
5741
5742 var defaultTableToolbar = [
5743 'tableprops',
5744 'tabledelete',
5745 '|',
5746 'tableinsertrowbefore',
5747 'tableinsertrowafter',
5748 'tabledeleterow',
5749 '|',
5750 'tableinsertcolbefore',
5751 'tableinsertcolafter',
5752 'tabledeletecol'
5753 ];
5754 var defaultStyles = {
5755 'border-collapse': 'collapse',
5756 'width': '100%'
5757 };
5758 var defaultAttributes = {border: '1'};
5759 var getDefaultAttributes = function (editor) {
5760 return editor.getParam('table_default_attributes', defaultAttributes, 'object');
5761 };
5762 var getDefaultStyles = function (editor) {
5763 return editor.getParam('table_default_styles', defaultStyles, 'object');
5764 };
5765 var hasTableResizeBars = function (editor) {
5766 return editor.getParam('table_resize_bars', true, 'boolean');
5767 };
5768 var hasTabNavigation = function (editor) {
5769 return editor.getParam('table_tab_navigation', true, 'boolean');
5770 };
5771 var hasAdvancedCellTab = function (editor) {
5772 return editor.getParam('table_cell_advtab', true, 'boolean');
5773 };
5774 var hasAdvancedRowTab = function (editor) {
5775 return editor.getParam('table_row_advtab', true, 'boolean');
5776 };
5777 var hasAdvancedTableTab = function (editor) {
5778 return editor.getParam('table_advtab', true, 'boolean');
5779 };
5780 var hasAppearanceOptions = function (editor) {
5781 return editor.getParam('table_appearance_options', true, 'boolean');
5782 };
5783 var hasTableGrid = function (editor) {
5784 return editor.getParam('table_grid', true, 'boolean');
5785 };
5786 var shouldStyleWithCss = function (editor) {
5787 return editor.getParam('table_style_by_css', false, 'boolean');
5788 };
5789 var getCellClassList = function (editor) {
5790 return editor.getParam('table_cell_class_list', [], 'array');
5791 };
5792 var getRowClassList = function (editor) {
5793 return editor.getParam('table_row_class_list', [], 'array');
5794 };
5795 var getTableClassList = function (editor) {
5796 return editor.getParam('table_class_list', [], 'array');
5797 };
5798 var getColorPickerCallback = function (editor) {
5799 return editor.getParam('color_picker_callback');
5800 };
5801 var isPixelsForced = function (editor) {
5802 return editor.getParam('table_responsive_width') === false;
5803 };
5804 var getCloneElements = function (editor) {
5805 var cloneElements = editor.getParam('table_clone_elements');
5806 if ($_g6mvnrk8jfuw8q4k.isString(cloneElements)) {
5807 return Option.some(cloneElements.split(/[ ,]/));
5808 } else if (Array.isArray(cloneElements)) {
5809 return Option.some(cloneElements);
5810 } else {
5811 return Option.none();
5812 }
5813 };
5814 var hasObjectResizing = function (editor) {
5815 var objectResizing = editor.getParam('object_resizing', true);
5816 return objectResizing === 'table' || objectResizing;
5817 };
5818 var getToolbar = function (editor) {
5819 var toolbar = editor.getParam('table_toolbar', defaultTableToolbar);
5820 if (toolbar === '' || toolbar === false) {
5821 return [];
5822 } else if ($_g6mvnrk8jfuw8q4k.isString(toolbar)) {
5823 return toolbar.split(/[ ,]/);
5824 } else if ($_g6mvnrk8jfuw8q4k.isArray(toolbar)) {
5825 return toolbar;
5826 } else {
5827 return [];
5828 }
5829 };
5830
5831 var fireNewRow = function (editor, row) {
5832 return editor.fire('newrow', {node: row});
5833 };
5834 var fireNewCell = function (editor, cell) {
5835 return editor.fire('newcell', {node: cell});
5836 };
5837
5838 var TableActions = function (editor, lazyWire) {
5839 var isTableBody = function (editor) {
5840 return $_a8gk30l6jfuw8q9c.name($_5xkhf2nnjfuw8qrq.getBody(editor)) === 'table';
5841 };
5842 var lastRowGuard = function (table) {
5843 var size = $_b452wimljfuw8qjd.getGridSize(table);
5844 return isTableBody(editor) === false || size.rows() > 1;
5845 };
5846 var lastColumnGuard = function (table) {
5847 var size = $_b452wimljfuw8qjd.getGridSize(table);
5848 return isTableBody(editor) === false || size.columns() > 1;
5849 };
5850 var cloneFormats = getCloneElements(editor);
5851 var execute = function (operation, guard, mutate, lazyWire) {
5852 return function (table, target) {
5853 var dataStyleCells = $_6c9d0hl7jfuw8q9d.descendants(table, 'td[data-mce-style],th[data-mce-style]');
5854 $_tyr3yk5jfuw8q47.each(dataStyleCells, function (cell) {
5855 $_3q82t2l5jfuw8q93.remove(cell, 'data-mce-style');
5856 });
5857 var wire = lazyWire();
5858 var doc = $_xbeoqkkjfuw8q73.fromDom(editor.getDoc());
5859 var direction = TableDirection($_4xd1udnojfuw8qrw.directionAt);
5860 var generators = $_5ohg1eljjfuw8qb4.cellOperations(mutate, doc, cloneFormats);
5861 return guard(table) ? operation(wire, table, target, generators, direction).bind(function (result) {
5862 $_tyr3yk5jfuw8q47.each(result.newRows(), function (row) {
5863 fireNewRow(editor, row.dom());
5864 });
5865 $_tyr3yk5jfuw8q47.each(result.newCells(), function (cell) {
5866 fireNewCell(editor, cell.dom());
5867 });
5868 return result.cursor().map(function (cell) {
5869 var rng = editor.dom.createRng();
5870 rng.setStart(cell.dom(), 0);
5871 rng.setEnd(cell.dom(), 0);
5872 return rng;
5873 });
5874 }) : Option.none();
5875 };
5876 };
5877 var deleteRow = execute($_2i21xzmmjfuw8qjg.eraseRows, lastRowGuard, $_20nfr6k7jfuw8q4g.noop, lazyWire);
5878 var deleteColumn = execute($_2i21xzmmjfuw8qjg.eraseColumns, lastColumnGuard, $_20nfr6k7jfuw8q4g.noop, lazyWire);
5879 var insertRowsBefore = execute($_2i21xzmmjfuw8qjg.insertRowsBefore, $_20nfr6k7jfuw8q4g.always, $_20nfr6k7jfuw8q4g.noop, lazyWire);
5880 var insertRowsAfter = execute($_2i21xzmmjfuw8qjg.insertRowsAfter, $_20nfr6k7jfuw8q4g.always, $_20nfr6k7jfuw8q4g.noop, lazyWire);
5881 var insertColumnsBefore = execute($_2i21xzmmjfuw8qjg.insertColumnsBefore, $_20nfr6k7jfuw8q4g.always, $_57e49gm9jfuw8qhh.halve, lazyWire);
5882 var insertColumnsAfter = execute($_2i21xzmmjfuw8qjg.insertColumnsAfter, $_20nfr6k7jfuw8q4g.always, $_57e49gm9jfuw8qhh.halve, lazyWire);
5883 var mergeCells = execute($_2i21xzmmjfuw8qjg.mergeCells, $_20nfr6k7jfuw8q4g.always, $_20nfr6k7jfuw8q4g.noop, lazyWire);
5884 var unmergeCells = execute($_2i21xzmmjfuw8qjg.unmergeCells, $_20nfr6k7jfuw8q4g.always, $_20nfr6k7jfuw8q4g.noop, lazyWire);
5885 var pasteRowsBefore = execute($_2i21xzmmjfuw8qjg.pasteRowsBefore, $_20nfr6k7jfuw8q4g.always, $_20nfr6k7jfuw8q4g.noop, lazyWire);
5886 var pasteRowsAfter = execute($_2i21xzmmjfuw8qjg.pasteRowsAfter, $_20nfr6k7jfuw8q4g.always, $_20nfr6k7jfuw8q4g.noop, lazyWire);
5887 var pasteCells = execute($_2i21xzmmjfuw8qjg.pasteCells, $_20nfr6k7jfuw8q4g.always, $_20nfr6k7jfuw8q4g.noop, lazyWire);
5888 return {
5889 deleteRow: deleteRow,
5890 deleteColumn: deleteColumn,
5891 insertRowsBefore: insertRowsBefore,
5892 insertRowsAfter: insertRowsAfter,
5893 insertColumnsBefore: insertColumnsBefore,
5894 insertColumnsAfter: insertColumnsAfter,
5895 mergeCells: mergeCells,
5896 unmergeCells: unmergeCells,
5897 pasteRowsBefore: pasteRowsBefore,
5898 pasteRowsAfter: pasteRowsAfter,
5899 pasteCells: pasteCells
5900 };
5901 };
5902
5903 var copyRows = function (table, target, generators) {
5904 var list = $_dy3x0nkfjfuw8q5l.fromTable(table);
5905 var house = $_2ge24cldjfuw8qa3.generate(list);
5906 var details = $_dis709mtjfuw8qlp.onCells(house, target);
5907 return details.map(function (selectedCells) {
5908 var grid = $_cw9o3smwjfuw8qm9.toGrid(house, generators, false);
5909 var slicedGrid = grid.slice(selectedCells[0].row(), selectedCells[selectedCells.length - 1].row() + selectedCells[selectedCells.length - 1].rowspan());
5910 var slicedDetails = $_dis709mtjfuw8qlp.toDetailList(slicedGrid, generators);
5911 return $_c9mejomzjfuw8qmn.copy(slicedDetails);
5912 });
5913 };
5914 var $_8a78aqntjfuw8qsp = {copyRows: copyRows};
5915
5916 var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');
5917
5918 var getTDTHOverallStyle = function (dom, elm, name) {
5919 var cells = dom.select('td,th', elm);
5920 var firstChildStyle;
5921 var checkChildren = function (firstChildStyle, elms) {
5922 for (var i = 0; i < elms.length; i++) {
5923 var currentStyle = dom.getStyle(elms[i], name);
5924 if (typeof firstChildStyle === 'undefined') {
5925 firstChildStyle = currentStyle;
5926 }
5927 if (firstChildStyle !== currentStyle) {
5928 return '';
5929 }
5930 }
5931 return firstChildStyle;
5932 };
5933 firstChildStyle = checkChildren(firstChildStyle, cells);
5934 return firstChildStyle;
5935 };
5936 var applyAlign = function (editor, elm, name) {
5937 if (name) {
5938 editor.formatter.apply('align' + name, {}, elm);
5939 }
5940 };
5941 var applyVAlign = function (editor, elm, name) {
5942 if (name) {
5943 editor.formatter.apply('valign' + name, {}, elm);
5944 }
5945 };
5946 var unApplyAlign = function (editor, elm) {
5947 global$2.each('left center right'.split(' '), function (name) {
5948 editor.formatter.remove('align' + name, {}, elm);
5949 });
5950 };
5951 var unApplyVAlign = function (editor, elm) {
5952 global$2.each('top middle bottom'.split(' '), function (name) {
5953 editor.formatter.remove('valign' + name, {}, elm);
5954 });
5955 };
5956 var $_ch6rvmnwjfuw8qt7 = {
5957 applyAlign: applyAlign,
5958 applyVAlign: applyVAlign,
5959 unApplyAlign: unApplyAlign,
5960 unApplyVAlign: unApplyVAlign,
5961 getTDTHOverallStyle: getTDTHOverallStyle
5962 };
5963
5964 var buildListItems = function (inputList, itemCallback, startItems) {
5965 var appendItems = function (values, output) {
5966 output = output || [];
5967 global$2.each(values, function (item) {
5968 var menuItem = {text: item.text || item.title};
5969 if (item.menu) {
5970 menuItem.menu = appendItems(item.menu);
5971 } else {
5972 menuItem.value = item.value;
5973 if (itemCallback) {
5974 itemCallback(menuItem);
5975 }
5976 }
5977 output.push(menuItem);
5978 });
5979 return output;
5980 };
5981 return appendItems(inputList, startItems || []);
5982 };
5983 var updateStyleField = function (editor, evt) {
5984 var dom = editor.dom;
5985 var rootControl = evt.control.rootControl;
5986 var data = rootControl.toJSON();
5987 var css = dom.parseStyle(data.style);
5988 if (evt.control.name() === 'style') {
5989 rootControl.find('#borderStyle').value(css['border-style'] || '')[0].fire('select');
5990 rootControl.find('#borderColor').value(css['border-color'] || '')[0].fire('change');
5991 rootControl.find('#backgroundColor').value(css['background-color'] || '')[0].fire('change');
5992 rootControl.find('#width').value(css.width || '').fire('change');
5993 rootControl.find('#height').value(css.height || '').fire('change');
5994 } else {
5995 css['border-style'] = data.borderStyle;
5996 css['border-color'] = data.borderColor;
5997 css['background-color'] = data.backgroundColor;
5998 css.width = data.width ? $_5xkhf2nnjfuw8qrq.addSizeSuffix(data.width) : '';
5999 css.height = data.height ? $_5xkhf2nnjfuw8qrq.addSizeSuffix(data.height) : '';
6000 }
6001 rootControl.find('#style').value(dom.serializeStyle(dom.parseStyle(dom.serializeStyle(css))));
6002 };
6003 var extractAdvancedStyles = function (dom, elm) {
6004 var css = dom.parseStyle(dom.getAttrib(elm, 'style'));
6005 var data = {};
6006 if (css['border-style']) {
6007 data.borderStyle = css['border-style'];
6008 }
6009 if (css['border-color']) {
6010 data.borderColor = css['border-color'];
6011 }
6012 if (css['background-color']) {
6013 data.backgroundColor = css['background-color'];
6014 }
6015 data.style = dom.serializeStyle(css);
6016 return data;
6017 };
6018 var createStyleForm = function (editor) {
6019 var createColorPickAction = function () {
6020 var colorPickerCallback = getColorPickerCallback(editor);
6021 if (colorPickerCallback) {
6022 return function (evt) {
6023 return colorPickerCallback.call(editor, function (value) {
6024 evt.control.value(value).fire('change');
6025 }, evt.control.value());
6026 };
6027 }
6028 };
6029 return {
6030 title: 'Advanced',
6031 type: 'form',
6032 defaults: {onchange: $_20nfr6k7jfuw8q4g.curry(updateStyleField, editor)},
6033 items: [
6034 {
6035 label: 'Style',
6036 name: 'style',
6037 type: 'textbox'
6038 },
6039 {
6040 type: 'form',
6041 padding: 0,
6042 formItemDefaults: {
6043 layout: 'grid',
6044 alignH: [
6045 'start',
6046 'right'
6047 ]
6048 },
6049 defaults: {size: 7},
6050 items: [
6051 {
6052 label: 'Border style',
6053 type: 'listbox',
6054 name: 'borderStyle',
6055 width: 90,
6056 onselect: $_20nfr6k7jfuw8q4g.curry(updateStyleField, editor),
6057 values: [
6058 {
6059 text: 'Select...',
6060 value: ''
6061 },
6062 {
6063 text: 'Solid',
6064 value: 'solid'
6065 },
6066 {
6067 text: 'Dotted',
6068 value: 'dotted'
6069 },
6070 {
6071 text: 'Dashed',
6072 value: 'dashed'
6073 },
6074 {
6075 text: 'Double',
6076 value: 'double'
6077 },
6078 {
6079 text: 'Groove',
6080 value: 'groove'
6081 },
6082 {
6083 text: 'Ridge',
6084 value: 'ridge'
6085 },
6086 {
6087 text: 'Inset',
6088 value: 'inset'
6089 },
6090 {
6091 text: 'Outset',
6092 value: 'outset'
6093 },
6094 {
6095 text: 'None',
6096 value: 'none'
6097 },
6098 {
6099 text: 'Hidden',
6100 value: 'hidden'
6101 }
6102 ]
6103 },
6104 {
6105 label: 'Border color',
6106 type: 'colorbox',
6107 name: 'borderColor',
6108 onaction: createColorPickAction()
6109 },
6110 {
6111 label: 'Background color',
6112 type: 'colorbox',
6113 name: 'backgroundColor',
6114 onaction: createColorPickAction()
6115 }
6116 ]
6117 }
6118 ]
6119 };
6120 };
6121 var $_2fnzp5nxjfuw8qt9 = {
6122 createStyleForm: createStyleForm,
6123 buildListItems: buildListItems,
6124 updateStyleField: updateStyleField,
6125 extractAdvancedStyles: extractAdvancedStyles
6126 };
6127
6128 var updateStyles = function (elm, cssText) {
6129 delete elm.dataset.mceStyle;
6130 elm.style.cssText += ';' + cssText;
6131 };
6132 var extractDataFromElement = function (editor, elm) {
6133 var dom = editor.dom;
6134 var data = {
6135 width: dom.getStyle(elm, 'width') || dom.getAttrib(elm, 'width'),
6136 height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),
6137 scope: dom.getAttrib(elm, 'scope'),
6138 class: dom.getAttrib(elm, 'class'),
6139 type: elm.nodeName.toLowerCase(),
6140 style: '',
6141 align: '',
6142 valign: ''
6143 };
6144 global$2.each('left center right'.split(' '), function (name) {
6145 if (editor.formatter.matchNode(elm, 'align' + name)) {
6146 data.align = name;
6147 }
6148 });
6149 global$2.each('top middle bottom'.split(' '), function (name) {
6150 if (editor.formatter.matchNode(elm, 'valign' + name)) {
6151 data.valign = name;
6152 }
6153 });
6154 if (hasAdvancedCellTab(editor)) {
6155 global$2.extend(data, $_2fnzp5nxjfuw8qt9.extractAdvancedStyles(dom, elm));
6156 }
6157 return data;
6158 };
6159 var onSubmitCellForm = function (editor, cells, evt) {
6160 var dom = editor.dom;
6161 var data;
6162
6163 function setAttrib(elm, name, value) {
6164 if (value) {
6165 dom.setAttrib(elm, name, value);
6166 }
6167 }
6168
6169 function setStyle(elm, name, value) {
6170 if (value) {
6171 dom.setStyle(elm, name, value);
6172 }
6173 }
6174
6175 $_2fnzp5nxjfuw8qt9.updateStyleField(editor, evt);
6176 data = evt.control.rootControl.toJSON();
6177 editor.undoManager.transact(function () {
6178 global$2.each(cells, function (cellElm) {
6179 setAttrib(cellElm, 'scope', data.scope);
6180 if (cells.length === 1) {
6181 setAttrib(cellElm, 'style', data.style);
6182 } else {
6183 updateStyles(cellElm, data.style);
6184 }
6185 setAttrib(cellElm, 'class', data.class);
6186 setStyle(cellElm, 'width', $_5xkhf2nnjfuw8qrq.addSizeSuffix(data.width));
6187 setStyle(cellElm, 'height', $_5xkhf2nnjfuw8qrq.addSizeSuffix(data.height));
6188 if (data.type && cellElm.nodeName.toLowerCase() !== data.type) {
6189 cellElm = dom.rename(cellElm, data.type);
6190 }
6191 if (cells.length === 1) {
6192 $_ch6rvmnwjfuw8qt7.unApplyAlign(editor, cellElm);
6193 $_ch6rvmnwjfuw8qt7.unApplyVAlign(editor, cellElm);
6194 }
6195 if (data.align) {
6196 $_ch6rvmnwjfuw8qt7.applyAlign(editor, cellElm, data.align);
6197 }
6198 if (data.valign) {
6199 $_ch6rvmnwjfuw8qt7.applyVAlign(editor, cellElm, data.valign);
6200 }
6201 });
6202 editor.focus();
6203 });
6204 };
6205 var open = function (editor) {
6206 var cellElm, data, classListCtrl, cells = [];
6207 cells = editor.dom.select('td[data-mce-selected],th[data-mce-selected]');
6208 cellElm = editor.dom.getParent(editor.selection.getStart(), 'td,th');
6209 if (!cells.length && cellElm) {
6210 cells.push(cellElm);
6211 }
6212 cellElm = cellElm || cells[0];
6213 if (!cellElm) {
6214 return;
6215 }
6216 if (cells.length > 1) {
6217 data = {
6218 width: '',
6219 height: '',
6220 scope: '',
6221 class: '',
6222 align: '',
6223 valign: '',
6224 style: '',
6225 type: cellElm.nodeName.toLowerCase()
6226 };
6227 } else {
6228 data = extractDataFromElement(editor, cellElm);
6229 }
6230 if (getCellClassList(editor).length > 0) {
6231 classListCtrl = {
6232 name: 'class',
6233 type: 'listbox',
6234 label: 'Class',
6235 values: $_2fnzp5nxjfuw8qt9.buildListItems(getCellClassList(editor), function (item) {
6236 if (item.value) {
6237 item.textStyle = function () {
6238 return editor.formatter.getCssText({
6239 block: 'td',
6240 classes: [item.value]
6241 });
6242 };
6243 }
6244 })
6245 };
6246 }
6247 var generalCellForm = {
6248 type: 'form',
6249 layout: 'flex',
6250 direction: 'column',
6251 labelGapCalc: 'children',
6252 padding: 0,
6253 items: [
6254 {
6255 type: 'form',
6256 layout: 'grid',
6257 columns: 2,
6258 labelGapCalc: false,
6259 padding: 0,
6260 defaults: {
6261 type: 'textbox',
6262 maxWidth: 50
6263 },
6264 items: [
6265 {
6266 label: 'Width',
6267 name: 'width',
6268 onchange: $_20nfr6k7jfuw8q4g.curry($_2fnzp5nxjfuw8qt9.updateStyleField, editor)
6269 },
6270 {
6271 label: 'Height',
6272 name: 'height',
6273 onchange: $_20nfr6k7jfuw8q4g.curry($_2fnzp5nxjfuw8qt9.updateStyleField, editor)
6274 },
6275 {
6276 label: 'Cell type',
6277 name: 'type',
6278 type: 'listbox',
6279 text: 'None',
6280 minWidth: 90,
6281 maxWidth: null,
6282 values: [
6283 {
6284 text: 'Cell',
6285 value: 'td'
6286 },
6287 {
6288 text: 'Header cell',
6289 value: 'th'
6290 }
6291 ]
6292 },
6293 {
6294 label: 'Scope',
6295 name: 'scope',
6296 type: 'listbox',
6297 text: 'None',
6298 minWidth: 90,
6299 maxWidth: null,
6300 values: [
6301 {
6302 text: 'None',
6303 value: ''
6304 },
6305 {
6306 text: 'Row',
6307 value: 'row'
6308 },
6309 {
6310 text: 'Column',
6311 value: 'col'
6312 },
6313 {
6314 text: 'Row group',
6315 value: 'rowgroup'
6316 },
6317 {
6318 text: 'Column group',
6319 value: 'colgroup'
6320 }
6321 ]
6322 },
6323 {
6324 label: 'H Align',
6325 name: 'align',
6326 type: 'listbox',
6327 text: 'None',
6328 minWidth: 90,
6329 maxWidth: null,
6330 values: [
6331 {
6332 text: 'None',
6333 value: ''
6334 },
6335 {
6336 text: 'Left',
6337 value: 'left'
6338 },
6339 {
6340 text: 'Center',
6341 value: 'center'
6342 },
6343 {
6344 text: 'Right',
6345 value: 'right'
6346 }
6347 ]
6348 },
6349 {
6350 label: 'V Align',
6351 name: 'valign',
6352 type: 'listbox',
6353 text: 'None',
6354 minWidth: 90,
6355 maxWidth: null,
6356 values: [
6357 {
6358 text: 'None',
6359 value: ''
6360 },
6361 {
6362 text: 'Top',
6363 value: 'top'
6364 },
6365 {
6366 text: 'Middle',
6367 value: 'middle'
6368 },
6369 {
6370 text: 'Bottom',
6371 value: 'bottom'
6372 }
6373 ]
6374 }
6375 ]
6376 },
6377 classListCtrl
6378 ]
6379 };
6380 if (hasAdvancedCellTab(editor)) {
6381 editor.windowManager.open({
6382 title: 'Cell properties',
6383 bodyType: 'tabpanel',
6384 data: data,
6385 body: [
6386 {
6387 title: 'General',
6388 type: 'form',
6389 items: generalCellForm
6390 },
6391 $_2fnzp5nxjfuw8qt9.createStyleForm(editor)
6392 ],
6393 onsubmit: $_20nfr6k7jfuw8q4g.curry(onSubmitCellForm, editor, cells)
6394 });
6395 } else {
6396 editor.windowManager.open({
6397 title: 'Cell properties',
6398 data: data,
6399 body: generalCellForm,
6400 onsubmit: $_20nfr6k7jfuw8q4g.curry(onSubmitCellForm, editor, cells)
6401 });
6402 }
6403 };
6404 var $_48j9iinvjfuw8qsu = {open: open};
6405
6406 var extractDataFromElement$1 = function (editor, elm) {
6407 var dom = editor.dom;
6408 var data = {
6409 height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),
6410 scope: dom.getAttrib(elm, 'scope'),
6411 class: dom.getAttrib(elm, 'class'),
6412 align: '',
6413 style: '',
6414 type: elm.parentNode.nodeName.toLowerCase()
6415 };
6416 global$2.each('left center right'.split(' '), function (name) {
6417 if (editor.formatter.matchNode(elm, 'align' + name)) {
6418 data.align = name;
6419 }
6420 });
6421 if (hasAdvancedRowTab(editor)) {
6422 global$2.extend(data, $_2fnzp5nxjfuw8qt9.extractAdvancedStyles(dom, elm));
6423 }
6424 return data;
6425 };
6426 var switchRowType = function (dom, rowElm, toType) {
6427 var tableElm = dom.getParent(rowElm, 'table');
6428 var oldParentElm = rowElm.parentNode;
6429 var parentElm = dom.select(toType, tableElm)[0];
6430 if (!parentElm) {
6431 parentElm = dom.create(toType);
6432 if (tableElm.firstChild) {
6433 if (tableElm.firstChild.nodeName === 'CAPTION') {
6434 dom.insertAfter(parentElm, tableElm.firstChild);
6435 } else {
6436 tableElm.insertBefore(parentElm, tableElm.firstChild);
6437 }
6438 } else {
6439 tableElm.appendChild(parentElm);
6440 }
6441 }
6442 parentElm.appendChild(rowElm);
6443 if (!oldParentElm.hasChildNodes()) {
6444 dom.remove(oldParentElm);
6445 }
6446 };
6447
6448 function onSubmitRowForm(editor, rows, oldData, evt) {
6449 var dom = editor.dom;
6450
6451 function setAttrib(elm, name, value) {
6452 if (value) {
6453 dom.setAttrib(elm, name, value);
6454 }
6455 }
6456
6457 function setStyle(elm, name, value) {
6458 if (value) {
6459 dom.setStyle(elm, name, value);
6460 }
6461 }
6462
6463 $_2fnzp5nxjfuw8qt9.updateStyleField(editor, evt);
6464 var data = evt.control.rootControl.toJSON();
6465 editor.undoManager.transact(function () {
6466 global$2.each(rows, function (rowElm) {
6467 setAttrib(rowElm, 'scope', data.scope);
6468 setAttrib(rowElm, 'style', data.style);
6469 setAttrib(rowElm, 'class', data.class);
6470 setStyle(rowElm, 'height', $_5xkhf2nnjfuw8qrq.addSizeSuffix(data.height));
6471 if (data.type !== rowElm.parentNode.nodeName.toLowerCase()) {
6472 switchRowType(editor.dom, rowElm, data.type);
6473 }
6474 if (data.align !== oldData.align) {
6475 $_ch6rvmnwjfuw8qt7.unApplyAlign(editor, rowElm);
6476 $_ch6rvmnwjfuw8qt7.applyAlign(editor, rowElm, data.align);
6477 }
6478 });
6479 editor.focus();
6480 });
6481 }
6482
6483 var open$1 = function (editor) {
6484 var dom = editor.dom;
6485 var tableElm, cellElm, rowElm, classListCtrl, data;
6486 var rows = [];
6487 var generalRowForm;
6488 tableElm = dom.getParent(editor.selection.getStart(), 'table');
6489 cellElm = dom.getParent(editor.selection.getStart(), 'td,th');
6490 global$2.each(tableElm.rows, function (row) {
6491 global$2.each(row.cells, function (cell) {
6492 if (dom.getAttrib(cell, 'data-mce-selected') || cell === cellElm) {
6493 rows.push(row);
6494 return false;
6495 }
6496 });
6497 });
6498 rowElm = rows[0];
6499 if (!rowElm) {
6500 return;
6501 }
6502 if (rows.length > 1) {
6503 data = {
6504 height: '',
6505 scope: '',
6506 style: '',
6507 class: '',
6508 align: '',
6509 type: rowElm.parentNode.nodeName.toLowerCase()
6510 };
6511 } else {
6512 data = extractDataFromElement$1(editor, rowElm);
6513 }
6514 if (getRowClassList(editor).length > 0) {
6515 classListCtrl = {
6516 name: 'class',
6517 type: 'listbox',
6518 label: 'Class',
6519 values: $_2fnzp5nxjfuw8qt9.buildListItems(getRowClassList(editor), function (item) {
6520 if (item.value) {
6521 item.textStyle = function () {
6522 return editor.formatter.getCssText({
6523 block: 'tr',
6524 classes: [item.value]
6525 });
6526 };
6527 }
6528 })
6529 };
6530 }
6531 generalRowForm = {
6532 type: 'form',
6533 columns: 2,
6534 padding: 0,
6535 defaults: {type: 'textbox'},
6536 items: [
6537 {
6538 type: 'listbox',
6539 name: 'type',
6540 label: 'Row type',
6541 text: 'Header',
6542 maxWidth: null,
6543 values: [
6544 {
6545 text: 'Header',
6546 value: 'thead'
6547 },
6548 {
6549 text: 'Body',
6550 value: 'tbody'
6551 },
6552 {
6553 text: 'Footer',
6554 value: 'tfoot'
6555 }
6556 ]
6557 },
6558 {
6559 type: 'listbox',
6560 name: 'align',
6561 label: 'Alignment',
6562 text: 'None',
6563 maxWidth: null,
6564 values: [
6565 {
6566 text: 'None',
6567 value: ''
6568 },
6569 {
6570 text: 'Left',
6571 value: 'left'
6572 },
6573 {
6574 text: 'Center',
6575 value: 'center'
6576 },
6577 {
6578 text: 'Right',
6579 value: 'right'
6580 }
6581 ]
6582 },
6583 {
6584 label: 'Height',
6585 name: 'height'
6586 },
6587 classListCtrl
6588 ]
6589 };
6590 if (hasAdvancedRowTab(editor)) {
6591 editor.windowManager.open({
6592 title: 'Row properties',
6593 data: data,
6594 bodyType: 'tabpanel',
6595 body: [
6596 {
6597 title: 'General',
6598 type: 'form',
6599 items: generalRowForm
6600 },
6601 $_2fnzp5nxjfuw8qt9.createStyleForm(editor)
6602 ],
6603 onsubmit: $_20nfr6k7jfuw8q4g.curry(onSubmitRowForm, editor, rows, data)
6604 });
6605 } else {
6606 editor.windowManager.open({
6607 title: 'Row properties',
6608 data: data,
6609 body: generalRowForm,
6610 onsubmit: $_20nfr6k7jfuw8q4g.curry(onSubmitRowForm, editor, rows, data)
6611 });
6612 }
6613 };
6614 var $_cshv4qnyjfuw8qtf = {open: open$1};
6615
6616 var global$3 = tinymce.util.Tools.resolve('tinymce.Env');
6617
6618 var DefaultRenderOptions = {
6619 styles: {
6620 'border-collapse': 'collapse',
6621 width: '100%'
6622 },
6623 attributes: {border: '1'},
6624 percentages: true
6625 };
6626 var makeTable = function () {
6627 return $_xbeoqkkjfuw8q73.fromTag('table');
6628 };
6629 var tableBody = function () {
6630 return $_xbeoqkkjfuw8q73.fromTag('tbody');
6631 };
6632 var tableRow = function () {
6633 return $_xbeoqkkjfuw8q73.fromTag('tr');
6634 };
6635 var tableHeaderCell = function () {
6636 return $_xbeoqkkjfuw8q73.fromTag('th');
6637 };
6638 var tableCell = function () {
6639 return $_xbeoqkkjfuw8q73.fromTag('td');
6640 };
6641 var render$1 = function (rows, columns, rowHeaders, columnHeaders, renderOpts) {
6642 if (renderOpts === void 0) {
6643 renderOpts = DefaultRenderOptions;
6644 }
6645 var table = makeTable();
6646 $_bfod2hlejfuw8qac.setAll(table, renderOpts.styles);
6647 $_3q82t2l5jfuw8q93.setAll(table, renderOpts.attributes);
6648 var tbody = tableBody();
6649 $_fatuxylgjfuw8qav.append(table, tbody);
6650 var trs = [];
6651 for (var i = 0; i < rows; i++) {
6652 var tr = tableRow();
6653 for (var j = 0; j < columns; j++) {
6654 var td = i < rowHeaders || j < columnHeaders ? tableHeaderCell() : tableCell();
6655 if (j < columnHeaders) {
6656 $_3q82t2l5jfuw8q93.set(td, 'scope', 'row');
6657 }
6658 if (i < rowHeaders) {
6659 $_3q82t2l5jfuw8q93.set(td, 'scope', 'col');
6660 }
6661 $_fatuxylgjfuw8qav.append(td, $_xbeoqkkjfuw8q73.fromTag('br'));
6662 if (renderOpts.percentages) {
6663 $_bfod2hlejfuw8qac.set(td, 'width', 100 / columns + '%');
6664 }
6665 $_fatuxylgjfuw8qav.append(tr, td);
6666 }
6667 trs.push(tr);
6668 }
6669 $_9zaoqflijfuw8qb0.append(tbody, trs);
6670 return table;
6671 };
6672
6673 var get$7 = function (element) {
6674 return element.dom().innerHTML;
6675 };
6676 var set$5 = function (element, content) {
6677 var owner = $_s8scrkmjfuw8q7a.owner(element);
6678 var docDom = owner.dom();
6679 var fragment = $_xbeoqkkjfuw8q73.fromDom(docDom.createDocumentFragment());
6680 var contentElements = $_du13u9lpjfuw8qce.fromHtml(content, docDom);
6681 $_9zaoqflijfuw8qb0.append(fragment, contentElements);
6682 $_fl1deelhjfuw8qax.empty(element);
6683 $_fatuxylgjfuw8qav.append(element, fragment);
6684 };
6685 var getOuter$2 = function (element) {
6686 var container = $_xbeoqkkjfuw8q73.fromTag('div');
6687 var clone = $_xbeoqkkjfuw8q73.fromDom(element.dom().cloneNode(true));
6688 $_fatuxylgjfuw8qav.append(container, clone);
6689 return get$7(container);
6690 };
6691 var $_76qisuo4jfuw8qut = {
6692 get: get$7,
6693 set: set$5,
6694 getOuter: getOuter$2
6695 };
6696
6697 var placeCaretInCell = function (editor, cell) {
6698 editor.selection.select(cell.dom(), true);
6699 editor.selection.collapse(true);
6700 };
6701 var selectFirstCellInTable = function (editor, tableElm) {
6702 $_8wdrbmlajfuw8q9m.descendant(tableElm, 'td,th').each($_20nfr6k7jfuw8q4g.curry(placeCaretInCell, editor));
6703 };
6704 var fireEvents = function (editor, table) {
6705 $_tyr3yk5jfuw8q47.each($_6c9d0hl7jfuw8q9d.descendants(table, 'tr'), function (row) {
6706 fireNewRow(editor, row.dom());
6707 $_tyr3yk5jfuw8q47.each($_6c9d0hl7jfuw8q9d.descendants(row, 'th,td'), function (cell) {
6708 fireNewCell(editor, cell.dom());
6709 });
6710 });
6711 };
6712 var isPercentage = function (width) {
6713 return $_g6mvnrk8jfuw8q4k.isString(width) && width.indexOf('%') !== -1;
6714 };
6715 var insert$1 = function (editor, columns, rows) {
6716 var defaultStyles = getDefaultStyles(editor);
6717 var options = {
6718 styles: defaultStyles,
6719 attributes: getDefaultAttributes(editor),
6720 percentages: isPercentage(defaultStyles.width) && !isPixelsForced(editor)
6721 };
6722 var table = render$1(rows, columns, 0, 0, options);
6723 $_3q82t2l5jfuw8q93.set(table, 'data-mce-id', '__mce');
6724 var html = $_76qisuo4jfuw8qut.getOuter(table);
6725 editor.insertContent(html);
6726 return $_8wdrbmlajfuw8q9m.descendant($_5xkhf2nnjfuw8qrq.getBody(editor), 'table[data-mce-id="__mce"]').map(function (table) {
6727 if (isPixelsForced(editor)) {
6728 $_bfod2hlejfuw8qac.set(table, 'width', $_bfod2hlejfuw8qac.get(table, 'width'));
6729 }
6730 $_3q82t2l5jfuw8q93.remove(table, 'data-mce-id');
6731 fireEvents(editor, table);
6732 selectFirstCellInTable(editor, table);
6733 return table.dom();
6734 }).getOr(null);
6735 };
6736 var $_1mq3b3o1jfuw8qtu = {insert: insert$1};
6737
6738 function styleTDTH(dom, elm, name, value) {
6739 if (elm.tagName === 'TD' || elm.tagName === 'TH') {
6740 dom.setStyle(elm, name, value);
6741 } else {
6742 if (elm.children) {
6743 for (var i = 0; i < elm.children.length; i++) {
6744 styleTDTH(dom, elm.children[i], name, value);
6745 }
6746 }
6747 }
6748 }
6749
6750 var extractDataFromElement$2 = function (editor, tableElm) {
6751 var dom = editor.dom;
6752 var data = {
6753 width: dom.getStyle(tableElm, 'width') || dom.getAttrib(tableElm, 'width'),
6754 height: dom.getStyle(tableElm, 'height') || dom.getAttrib(tableElm, 'height'),
6755 cellspacing: dom.getStyle(tableElm, 'border-spacing') || dom.getAttrib(tableElm, 'cellspacing'),
6756 cellpadding: dom.getAttrib(tableElm, 'data-mce-cell-padding') || dom.getAttrib(tableElm, 'cellpadding') || $_ch6rvmnwjfuw8qt7.getTDTHOverallStyle(editor.dom, tableElm, 'padding'),
6757 border: dom.getAttrib(tableElm, 'data-mce-border') || dom.getAttrib(tableElm, 'border') || $_ch6rvmnwjfuw8qt7.getTDTHOverallStyle(editor.dom, tableElm, 'border'),
6758 borderColor: dom.getAttrib(tableElm, 'data-mce-border-color'),
6759 caption: !!dom.select('caption', tableElm)[0],
6760 class: dom.getAttrib(tableElm, 'class')
6761 };
6762 global$2.each('left center right'.split(' '), function (name) {
6763 if (editor.formatter.matchNode(tableElm, 'align' + name)) {
6764 data.align = name;
6765 }
6766 });
6767 if (hasAdvancedTableTab(editor)) {
6768 global$2.extend(data, $_2fnzp5nxjfuw8qt9.extractAdvancedStyles(dom, tableElm));
6769 }
6770 return data;
6771 };
6772 var applyDataToElement = function (editor, tableElm, data) {
6773 var dom = editor.dom;
6774 var attrs = {};
6775 var styles = {};
6776 attrs.class = data.class;
6777 styles.height = $_5xkhf2nnjfuw8qrq.addSizeSuffix(data.height);
6778 if (dom.getAttrib(tableElm, 'width') && !shouldStyleWithCss(editor)) {
6779 attrs.width = $_5xkhf2nnjfuw8qrq.removePxSuffix(data.width);
6780 } else {
6781 styles.width = $_5xkhf2nnjfuw8qrq.addSizeSuffix(data.width);
6782 }
6783 if (shouldStyleWithCss(editor)) {
6784 styles['border-width'] = $_5xkhf2nnjfuw8qrq.addSizeSuffix(data.border);
6785 styles['border-spacing'] = $_5xkhf2nnjfuw8qrq.addSizeSuffix(data.cellspacing);
6786 global$2.extend(attrs, {
6787 'data-mce-border-color': data.borderColor,
6788 'data-mce-cell-padding': data.cellpadding,
6789 'data-mce-border': data.border
6790 });
6791 } else {
6792 global$2.extend(attrs, {
6793 border: data.border,
6794 cellpadding: data.cellpadding,
6795 cellspacing: data.cellspacing
6796 });
6797 }
6798 if (shouldStyleWithCss(editor)) {
6799 if (tableElm.children) {
6800 for (var i = 0; i < tableElm.children.length; i++) {
6801 styleTDTH(dom, tableElm.children[i], {
6802 'border-width': $_5xkhf2nnjfuw8qrq.addSizeSuffix(data.border),
6803 'border-color': data.borderColor,
6804 'padding': $_5xkhf2nnjfuw8qrq.addSizeSuffix(data.cellpadding)
6805 });
6806 }
6807 }
6808 }
6809 if (data.style) {
6810 global$2.extend(styles, dom.parseStyle(data.style));
6811 } else {
6812 styles = global$2.extend({}, dom.parseStyle(dom.getAttrib(tableElm, 'style')), styles);
6813 }
6814 attrs.style = dom.serializeStyle(styles);
6815 dom.setAttribs(tableElm, attrs);
6816 };
6817 var onSubmitTableForm = function (editor, tableElm, evt) {
6818 var dom = editor.dom;
6819 var captionElm;
6820 var data;
6821 $_2fnzp5nxjfuw8qt9.updateStyleField(editor, evt);
6822 data = evt.control.rootControl.toJSON();
6823 if (data.class === false) {
6824 delete data.class;
6825 }
6826 editor.undoManager.transact(function () {
6827 if (!tableElm) {
6828 tableElm = $_1mq3b3o1jfuw8qtu.insert(editor, data.cols || 1, data.rows || 1);
6829 }
6830 applyDataToElement(editor, tableElm, data);
6831 captionElm = dom.select('caption', tableElm)[0];
6832 if (captionElm && !data.caption) {
6833 dom.remove(captionElm);
6834 }
6835 if (!captionElm && data.caption) {
6836 captionElm = dom.create('caption');
6837 captionElm.innerHTML = !global$3.ie ? '<br data-mce-bogus="1"/>' : '\xA0';
6838 tableElm.insertBefore(captionElm, tableElm.firstChild);
6839 }
6840 $_ch6rvmnwjfuw8qt7.unApplyAlign(editor, tableElm);
6841 if (data.align) {
6842 $_ch6rvmnwjfuw8qt7.applyAlign(editor, tableElm, data.align);
6843 }
6844 editor.focus();
6845 editor.addVisual();
6846 });
6847 };
6848 var open$2 = function (editor, isProps) {
6849 var dom = editor.dom;
6850 var tableElm, colsCtrl, rowsCtrl, classListCtrl, data = {}, generalTableForm;
6851 if (isProps === true) {
6852 tableElm = dom.getParent(editor.selection.getStart(), 'table');
6853 if (tableElm) {
6854 data = extractDataFromElement$2(editor, tableElm);
6855 }
6856 } else {
6857 colsCtrl = {
6858 label: 'Cols',
6859 name: 'cols'
6860 };
6861 rowsCtrl = {
6862 label: 'Rows',
6863 name: 'rows'
6864 };
6865 }
6866 if (getTableClassList(editor).length > 0) {
6867 if (data.class) {
6868 data.class = data.class.replace(/\s*mce\-item\-table\s*/g, '');
6869 }
6870 classListCtrl = {
6871 name: 'class',
6872 type: 'listbox',
6873 label: 'Class',
6874 values: $_2fnzp5nxjfuw8qt9.buildListItems(getTableClassList(editor), function (item) {
6875 if (item.value) {
6876 item.textStyle = function () {
6877 return editor.formatter.getCssText({
6878 block: 'table',
6879 classes: [item.value]
6880 });
6881 };
6882 }
6883 })
6884 };
6885 }
6886 generalTableForm = {
6887 type: 'form',
6888 layout: 'flex',
6889 direction: 'column',
6890 labelGapCalc: 'children',
6891 padding: 0,
6892 items: [
6893 {
6894 type: 'form',
6895 labelGapCalc: false,
6896 padding: 0,
6897 layout: 'grid',
6898 columns: 2,
6899 defaults: {
6900 type: 'textbox',
6901 maxWidth: 50
6902 },
6903 items: hasAppearanceOptions(editor) ? [
6904 colsCtrl,
6905 rowsCtrl,
6906 {
6907 label: 'Width',
6908 name: 'width',
6909 onchange: $_20nfr6k7jfuw8q4g.curry($_2fnzp5nxjfuw8qt9.updateStyleField, editor)
6910 },
6911 {
6912 label: 'Height',
6913 name: 'height',
6914 onchange: $_20nfr6k7jfuw8q4g.curry($_2fnzp5nxjfuw8qt9.updateStyleField, editor)
6915 },
6916 {
6917 label: 'Cell spacing',
6918 name: 'cellspacing'
6919 },
6920 {
6921 label: 'Cell padding',
6922 name: 'cellpadding'
6923 },
6924 {
6925 label: 'Border',
6926 name: 'border'
6927 },
6928 {
6929 label: 'Caption',
6930 name: 'caption',
6931 type: 'checkbox'
6932 }
6933 ] : [
6934 colsCtrl,
6935 rowsCtrl,
6936 {
6937 label: 'Width',
6938 name: 'width',
6939 onchange: $_20nfr6k7jfuw8q4g.curry($_2fnzp5nxjfuw8qt9.updateStyleField, editor)
6940 },
6941 {
6942 label: 'Height',
6943 name: 'height',
6944 onchange: $_20nfr6k7jfuw8q4g.curry($_2fnzp5nxjfuw8qt9.updateStyleField, editor)
6945 }
6946 ]
6947 },
6948 {
6949 label: 'Alignment',
6950 name: 'align',
6951 type: 'listbox',
6952 text: 'None',
6953 values: [
6954 {
6955 text: 'None',
6956 value: ''
6957 },
6958 {
6959 text: 'Left',
6960 value: 'left'
6961 },
6962 {
6963 text: 'Center',
6964 value: 'center'
6965 },
6966 {
6967 text: 'Right',
6968 value: 'right'
6969 }
6970 ]
6971 },
6972 classListCtrl
6973 ]
6974 };
6975 if (hasAdvancedTableTab(editor)) {
6976 editor.windowManager.open({
6977 title: 'Table properties',
6978 data: data,
6979 bodyType: 'tabpanel',
6980 body: [
6981 {
6982 title: 'General',
6983 type: 'form',
6984 items: generalTableForm
6985 },
6986 $_2fnzp5nxjfuw8qt9.createStyleForm(editor)
6987 ],
6988 onsubmit: $_20nfr6k7jfuw8q4g.curry(onSubmitTableForm, editor, tableElm)
6989 });
6990 } else {
6991 editor.windowManager.open({
6992 title: 'Table properties',
6993 data: data,
6994 body: generalTableForm,
6995 onsubmit: $_20nfr6k7jfuw8q4g.curry(onSubmitTableForm, editor, tableElm)
6996 });
6997 }
6998 };
6999 var $_ad8brjnzjfuw8qtm = {open: open$2};
7000
7001 var each$3 = global$2.each;
7002 var registerCommands = function (editor, actions, cellSelection, selections, clipboardRows) {
7003 var isRoot = $_5xkhf2nnjfuw8qrq.getIsRoot(editor);
7004 var eraseTable = function () {
7005 var cell = $_xbeoqkkjfuw8q73.fromDom(editor.dom.getParent(editor.selection.getStart(), 'th,td'));
7006 var table = $_aqhz9okhjfuw8q5y.table(cell, isRoot);
7007 table.filter($_20nfr6k7jfuw8q4g.not(isRoot)).each(function (table) {
7008 var cursor = $_xbeoqkkjfuw8q73.fromText('');
7009 $_fatuxylgjfuw8qav.after(table, cursor);
7010 $_fl1deelhjfuw8qax.remove(table);
7011 var rng = editor.dom.createRng();
7012 rng.setStart(cursor.dom(), 0);
7013 rng.setEnd(cursor.dom(), 0);
7014 editor.selection.setRng(rng);
7015 });
7016 };
7017 var getSelectionStartCell = function () {
7018 return $_xbeoqkkjfuw8q73.fromDom(editor.dom.getParent(editor.selection.getStart(), 'th,td'));
7019 };
7020 var getTableFromCell = function (cell) {
7021 return $_aqhz9okhjfuw8q5y.table(cell, isRoot);
7022 };
7023 var actOnSelection = function (execute) {
7024 var cell = getSelectionStartCell();
7025 var table = getTableFromCell(cell);
7026 table.each(function (table) {
7027 var targets = $_5b7h1hlqjfuw8qci.forMenu(selections, table, cell);
7028 execute(table, targets).each(function (rng) {
7029 editor.selection.setRng(rng);
7030 editor.focus();
7031 cellSelection.clear(table);
7032 });
7033 });
7034 };
7035 var copyRowSelection = function (execute) {
7036 var cell = getSelectionStartCell();
7037 var table = getTableFromCell(cell);
7038 return table.bind(function (table) {
7039 var doc = $_xbeoqkkjfuw8q73.fromDom(editor.getDoc());
7040 var targets = $_5b7h1hlqjfuw8qci.forMenu(selections, table, cell);
7041 var generators = $_5ohg1eljjfuw8qb4.cellOperations($_20nfr6k7jfuw8q4g.noop, doc, Option.none());
7042 return $_8a78aqntjfuw8qsp.copyRows(table, targets, generators);
7043 });
7044 };
7045 var pasteOnSelection = function (execute) {
7046 clipboardRows.get().each(function (rows) {
7047 var clonedRows = $_tyr3yk5jfuw8q47.map(rows, function (row) {
7048 return $_ddvp06lkjfuw8qbt.deep(row);
7049 });
7050 var cell = getSelectionStartCell();
7051 var table = getTableFromCell(cell);
7052 table.bind(function (table) {
7053 var doc = $_xbeoqkkjfuw8q73.fromDom(editor.getDoc());
7054 var generators = $_5ohg1eljjfuw8qb4.paste(doc);
7055 var targets = $_5b7h1hlqjfuw8qci.pasteRows(selections, table, cell, clonedRows, generators);
7056 execute(table, targets).each(function (rng) {
7057 editor.selection.setRng(rng);
7058 editor.focus();
7059 cellSelection.clear(table);
7060 });
7061 });
7062 });
7063 };
7064 each$3({
7065 mceTableSplitCells: function () {
7066 actOnSelection(actions.unmergeCells);
7067 },
7068 mceTableMergeCells: function () {
7069 actOnSelection(actions.mergeCells);
7070 },
7071 mceTableInsertRowBefore: function () {
7072 actOnSelection(actions.insertRowsBefore);
7073 },
7074 mceTableInsertRowAfter: function () {
7075 actOnSelection(actions.insertRowsAfter);
7076 },
7077 mceTableInsertColBefore: function () {
7078 actOnSelection(actions.insertColumnsBefore);
7079 },
7080 mceTableInsertColAfter: function () {
7081 actOnSelection(actions.insertColumnsAfter);
7082 },
7083 mceTableDeleteCol: function () {
7084 actOnSelection(actions.deleteColumn);
7085 },
7086 mceTableDeleteRow: function () {
7087 actOnSelection(actions.deleteRow);
7088 },
7089 mceTableCutRow: function (grid) {
7090 clipboardRows.set(copyRowSelection());
7091 actOnSelection(actions.deleteRow);
7092 },
7093 mceTableCopyRow: function (grid) {
7094 clipboardRows.set(copyRowSelection());
7095 },
7096 mceTablePasteRowBefore: function (grid) {
7097 pasteOnSelection(actions.pasteRowsBefore);
7098 },
7099 mceTablePasteRowAfter: function (grid) {
7100 pasteOnSelection(actions.pasteRowsAfter);
7101 },
7102 mceTableDelete: eraseTable
7103 }, function (func, name) {
7104 editor.addCommand(name, func);
7105 });
7106 each$3({
7107 mceInsertTable: $_20nfr6k7jfuw8q4g.curry($_ad8brjnzjfuw8qtm.open, editor),
7108 mceTableProps: $_20nfr6k7jfuw8q4g.curry($_ad8brjnzjfuw8qtm.open, editor, true),
7109 mceTableRowProps: $_20nfr6k7jfuw8q4g.curry($_cshv4qnyjfuw8qtf.open, editor),
7110 mceTableCellProps: $_20nfr6k7jfuw8q4g.curry($_48j9iinvjfuw8qsu.open, editor)
7111 }, function (func, name) {
7112 editor.addCommand(name, function (ui, val) {
7113 func(val);
7114 });
7115 });
7116 };
7117 var $_srry6nsjfuw8qs8 = {registerCommands: registerCommands};
7118
7119 var only$1 = function (element) {
7120 var parent = Option.from(element.dom().documentElement).map($_xbeoqkkjfuw8q73.fromDom).getOr(element);
7121 return {
7122 parent: $_20nfr6k7jfuw8q4g.constant(parent),
7123 view: $_20nfr6k7jfuw8q4g.constant(element),
7124 origin: $_20nfr6k7jfuw8q4g.constant(r(0, 0))
7125 };
7126 };
7127 var detached = function (editable, chrome) {
7128 var origin = $_20nfr6k7jfuw8q4g.curry($_hsvzlmijfuw8qj4.absolute, chrome);
7129 return {
7130 parent: $_20nfr6k7jfuw8q4g.constant(chrome),
7131 view: $_20nfr6k7jfuw8q4g.constant(editable),
7132 origin: origin
7133 };
7134 };
7135 var body$1 = function (editable, chrome) {
7136 return {
7137 parent: $_20nfr6k7jfuw8q4g.constant(chrome),
7138 view: $_20nfr6k7jfuw8q4g.constant(editable),
7139 origin: $_20nfr6k7jfuw8q4g.constant(r(0, 0))
7140 };
7141 };
7142 var $_e4gwgeo6jfuw8qvi = {
7143 only: only$1,
7144 detached: detached,
7145 body: body$1
7146 };
7147
7148 function Event(fields) {
7149 var struct = $_5now9kbjfuw8q5e.immutable.apply(null, fields);
7150 var handlers = [];
7151 var bind = function (handler) {
7152 if (handler === undefined) {
7153 throw 'Event bind error: undefined handler';
7154 }
7155 handlers.push(handler);
7156 };
7157 var unbind = function (handler) {
7158 handlers = $_tyr3yk5jfuw8q47.filter(handlers, function (h) {
7159 return h !== handler;
7160 });
7161 };
7162 var trigger = function () {
7163 var event = struct.apply(null, arguments);
7164 $_tyr3yk5jfuw8q47.each(handlers, function (handler) {
7165 handler(event);
7166 });
7167 };
7168 return {
7169 bind: bind,
7170 unbind: unbind,
7171 trigger: trigger
7172 };
7173 }
7174
7175 var create = function (typeDefs) {
7176 var registry = $_11yiupkajfuw8q5c.map(typeDefs, function (event) {
7177 return {
7178 bind: event.bind,
7179 unbind: event.unbind
7180 };
7181 });
7182 var trigger = $_11yiupkajfuw8q5c.map(typeDefs, function (event) {
7183 return event.trigger;
7184 });
7185 return {
7186 registry: registry,
7187 trigger: trigger
7188 };
7189 };
7190 var $_1fbhhho9jfuw8qw4 = {create: create};
7191
7192 var mode = $_7z97w5mpjfuw8qkk.exactly([
7193 'compare',
7194 'extract',
7195 'mutate',
7196 'sink'
7197 ]);
7198 var sink = $_7z97w5mpjfuw8qkk.exactly([
7199 'element',
7200 'start',
7201 'stop',
7202 'destroy'
7203 ]);
7204 var api$3 = $_7z97w5mpjfuw8qkk.exactly([
7205 'forceDrop',
7206 'drop',
7207 'move',
7208 'delayDrop'
7209 ]);
7210 var $_aqs1mcodjfuw8qxk = {
7211 mode: mode,
7212 sink: sink,
7213 api: api$3
7214 };
7215
7216 var styles$1 = $_63w6atn5jfuw8qot.css('ephox-dragster');
7217 var $_41gm3bofjfuw8qxz = {resolve: styles$1.resolve};
7218
7219 function Blocker(options) {
7220 var settings = $_91sgzmujfuw8qm5.merge({'layerClass': $_41gm3bofjfuw8qxz.resolve('blocker')}, options);
7221 var div = $_xbeoqkkjfuw8q73.fromTag('div');
7222 $_3q82t2l5jfuw8q93.set(div, 'role', 'presentation');
7223 $_bfod2hlejfuw8qac.setAll(div, {
7224 position: 'fixed',
7225 left: '0px',
7226 top: '0px',
7227 width: '100%',
7228 height: '100%'
7229 });
7230 $_fmcseon6jfuw8qou.add(div, $_41gm3bofjfuw8qxz.resolve('blocker'));
7231 $_fmcseon6jfuw8qou.add(div, settings.layerClass);
7232 var element = function () {
7233 return div;
7234 };
7235 var destroy = function () {
7236 $_fl1deelhjfuw8qax.remove(div);
7237 };
7238 return {
7239 element: element,
7240 destroy: destroy
7241 };
7242 }
7243
7244 var mkEvent = function (target, x, y, stop, prevent, kill, raw) {
7245 return {
7246 'target': $_20nfr6k7jfuw8q4g.constant(target),
7247 'x': $_20nfr6k7jfuw8q4g.constant(x),
7248 'y': $_20nfr6k7jfuw8q4g.constant(y),
7249 'stop': stop,
7250 'prevent': prevent,
7251 'kill': kill,
7252 'raw': $_20nfr6k7jfuw8q4g.constant(raw)
7253 };
7254 };
7255 var handle = function (filter, handler) {
7256 return function (rawEvent) {
7257 if (!filter(rawEvent))
7258 return;
7259 var target = $_xbeoqkkjfuw8q73.fromDom(rawEvent.target);
7260 var stop = function () {
7261 rawEvent.stopPropagation();
7262 };
7263 var prevent = function () {
7264 rawEvent.preventDefault();
7265 };
7266 var kill = $_20nfr6k7jfuw8q4g.compose(prevent, stop);
7267 var evt = mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);
7268 handler(evt);
7269 };
7270 };
7271 var binder = function (element, event, filter, handler, useCapture) {
7272 var wrapped = handle(filter, handler);
7273 element.dom().addEventListener(event, wrapped, useCapture);
7274 return {unbind: $_20nfr6k7jfuw8q4g.curry(unbind, element, event, wrapped, useCapture)};
7275 };
7276 var bind$1 = function (element, event, filter, handler) {
7277 return binder(element, event, filter, handler, false);
7278 };
7279 var capture = function (element, event, filter, handler) {
7280 return binder(element, event, filter, handler, true);
7281 };
7282 var unbind = function (element, event, handler, useCapture) {
7283 element.dom().removeEventListener(event, handler, useCapture);
7284 };
7285 var $_fal932ohjfuw8qy6 = {
7286 bind: bind$1,
7287 capture: capture
7288 };
7289
7290 var filter$1 = $_20nfr6k7jfuw8q4g.constant(true);
7291 var bind$2 = function (element, event, handler) {
7292 return $_fal932ohjfuw8qy6.bind(element, event, filter$1, handler);
7293 };
7294 var capture$1 = function (element, event, handler) {
7295 return $_fal932ohjfuw8qy6.capture(element, event, filter$1, handler);
7296 };
7297 var $_6fxiitogjfuw8qy3 = {
7298 bind: bind$2,
7299 capture: capture$1
7300 };
7301
7302 var compare = function (old, nu) {
7303 return r(nu.left() - old.left(), nu.top() - old.top());
7304 };
7305 var extract$1 = function (event) {
7306 return Option.some(r(event.x(), event.y()));
7307 };
7308 var mutate$1 = function (mutation, info) {
7309 mutation.mutate(info.left(), info.top());
7310 };
7311 var sink$1 = function (dragApi, settings) {
7312 var blocker = Blocker(settings);
7313 var mdown = $_6fxiitogjfuw8qy3.bind(blocker.element(), 'mousedown', dragApi.forceDrop);
7314 var mup = $_6fxiitogjfuw8qy3.bind(blocker.element(), 'mouseup', dragApi.drop);
7315 var mmove = $_6fxiitogjfuw8qy3.bind(blocker.element(), 'mousemove', dragApi.move);
7316 var mout = $_6fxiitogjfuw8qy3.bind(blocker.element(), 'mouseout', dragApi.delayDrop);
7317 var destroy = function () {
7318 blocker.destroy();
7319 mup.unbind();
7320 mmove.unbind();
7321 mout.unbind();
7322 mdown.unbind();
7323 };
7324 var start = function (parent) {
7325 $_fatuxylgjfuw8qav.append(parent, blocker.element());
7326 };
7327 var stop = function () {
7328 $_fl1deelhjfuw8qax.remove(blocker.element());
7329 };
7330 return $_aqs1mcodjfuw8qxk.sink({
7331 element: blocker.element,
7332 start: start,
7333 stop: stop,
7334 destroy: destroy
7335 });
7336 };
7337 var MouseDrag = $_aqs1mcodjfuw8qxk.mode({
7338 compare: compare,
7339 extract: extract$1,
7340 sink: sink$1,
7341 mutate: mutate$1
7342 });
7343
7344 function InDrag() {
7345 var previous = Option.none();
7346 var reset = function () {
7347 previous = Option.none();
7348 };
7349 var update = function (mode, nu) {
7350 var result = previous.map(function (old) {
7351 return mode.compare(old, nu);
7352 });
7353 previous = Option.some(nu);
7354 return result;
7355 };
7356 var onEvent = function (event, mode) {
7357 var dataOption = mode.extract(event);
7358 dataOption.each(function (data) {
7359 var offset = update(mode, data);
7360 offset.each(function (d) {
7361 events.trigger.move(d);
7362 });
7363 });
7364 };
7365 var events = $_1fbhhho9jfuw8qw4.create({move: Event(['info'])});
7366 return {
7367 onEvent: onEvent,
7368 reset: reset,
7369 events: events.registry
7370 };
7371 }
7372
7373 function NoDrag(anchor) {
7374 var onEvent = function (event, mode) {
7375 };
7376 return {
7377 onEvent: onEvent,
7378 reset: $_20nfr6k7jfuw8q4g.noop
7379 };
7380 }
7381
7382 function Movement() {
7383 var noDragState = NoDrag();
7384 var inDragState = InDrag();
7385 var dragState = noDragState;
7386 var on = function () {
7387 dragState.reset();
7388 dragState = inDragState;
7389 };
7390 var off = function () {
7391 dragState.reset();
7392 dragState = noDragState;
7393 };
7394 var onEvent = function (event, mode) {
7395 dragState.onEvent(event, mode);
7396 };
7397 var isOn = function () {
7398 return dragState === inDragState;
7399 };
7400 return {
7401 on: on,
7402 off: off,
7403 isOn: isOn,
7404 onEvent: onEvent,
7405 events: inDragState.events
7406 };
7407 }
7408
7409 var adaptable = function (fn, rate) {
7410 var timer = null;
7411 var args = null;
7412 var cancel = function () {
7413 if (timer !== null) {
7414 clearTimeout(timer);
7415 timer = null;
7416 args = null;
7417 }
7418 };
7419 var throttle = function () {
7420 args = arguments;
7421 if (timer === null) {
7422 timer = setTimeout(function () {
7423 fn.apply(null, args);
7424 timer = null;
7425 args = null;
7426 }, rate);
7427 }
7428 };
7429 return {
7430 cancel: cancel,
7431 throttle: throttle
7432 };
7433 };
7434 var first$4 = function (fn, rate) {
7435 var timer = null;
7436 var cancel = function () {
7437 if (timer !== null) {
7438 clearTimeout(timer);
7439 timer = null;
7440 }
7441 };
7442 var throttle = function () {
7443 var args = arguments;
7444 if (timer === null) {
7445 timer = setTimeout(function () {
7446 fn.apply(null, args);
7447 timer = null;
7448 args = null;
7449 }, rate);
7450 }
7451 };
7452 return {
7453 cancel: cancel,
7454 throttle: throttle
7455 };
7456 };
7457 var last$3 = function (fn, rate) {
7458 var timer = null;
7459 var cancel = function () {
7460 if (timer !== null) {
7461 clearTimeout(timer);
7462 timer = null;
7463 }
7464 };
7465 var throttle = function () {
7466 var args = arguments;
7467 if (timer !== null)
7468 clearTimeout(timer);
7469 timer = setTimeout(function () {
7470 fn.apply(null, args);
7471 timer = null;
7472 args = null;
7473 }, rate);
7474 };
7475 return {
7476 cancel: cancel,
7477 throttle: throttle
7478 };
7479 };
7480 var $_4fpdigomjfuw8qyv = {
7481 adaptable: adaptable,
7482 first: first$4,
7483 last: last$3
7484 };
7485
7486 var setup = function (mutation, mode, settings) {
7487 var active = false;
7488 var events = $_1fbhhho9jfuw8qw4.create({
7489 start: Event([]),
7490 stop: Event([])
7491 });
7492 var movement = Movement();
7493 var drop = function () {
7494 sink.stop();
7495 if (movement.isOn()) {
7496 movement.off();
7497 events.trigger.stop();
7498 }
7499 };
7500 var throttledDrop = $_4fpdigomjfuw8qyv.last(drop, 200);
7501 var go = function (parent) {
7502 sink.start(parent);
7503 movement.on();
7504 events.trigger.start();
7505 };
7506 var mousemove = function (event, ui) {
7507 throttledDrop.cancel();
7508 movement.onEvent(event, mode);
7509 };
7510 movement.events.move.bind(function (event) {
7511 mode.mutate(mutation, event.info());
7512 });
7513 var on = function () {
7514 active = true;
7515 };
7516 var off = function () {
7517 active = false;
7518 };
7519 var runIfActive = function (f) {
7520 return function () {
7521 var args = Array.prototype.slice.call(arguments, 0);
7522 if (active) {
7523 return f.apply(null, args);
7524 }
7525 };
7526 };
7527 var sink = mode.sink($_aqs1mcodjfuw8qxk.api({
7528 forceDrop: drop,
7529 drop: runIfActive(drop),
7530 move: runIfActive(mousemove),
7531 delayDrop: runIfActive(throttledDrop.throttle)
7532 }), settings);
7533 var destroy = function () {
7534 sink.destroy();
7535 };
7536 return {
7537 element: sink.element,
7538 go: go,
7539 on: on,
7540 off: off,
7541 destroy: destroy,
7542 events: events.registry
7543 };
7544 };
7545 var $_bv42lfoijfuw8qyb = {setup: setup};
7546
7547 var transform$1 = function (mutation, options) {
7548 var settings = options !== undefined ? options : {};
7549 var mode = settings.mode !== undefined ? settings.mode : MouseDrag;
7550 return $_bv42lfoijfuw8qyb.setup(mutation, mode, options);
7551 };
7552 var $_a1giepobjfuw8qx7 = {transform: transform$1};
7553
7554 function Mutation() {
7555 var events = $_1fbhhho9jfuw8qw4.create({
7556 'drag': Event([
7557 'xDelta',
7558 'yDelta'
7559 ])
7560 });
7561 var mutate = function (x, y) {
7562 events.trigger.drag(x, y);
7563 };
7564 return {
7565 mutate: mutate,
7566 events: events.registry
7567 };
7568 }
7569
7570 function BarMutation() {
7571 var events = $_1fbhhho9jfuw8qw4.create({
7572 drag: Event([
7573 'xDelta',
7574 'yDelta',
7575 'target'
7576 ])
7577 });
7578 var target = Option.none();
7579 var delegate = Mutation();
7580 delegate.events.drag.bind(function (event) {
7581 target.each(function (t) {
7582 events.trigger.drag(event.xDelta(), event.yDelta(), t);
7583 });
7584 });
7585 var assign = function (t) {
7586 target = Option.some(t);
7587 };
7588 var get = function () {
7589 return target;
7590 };
7591 return {
7592 assign: assign,
7593 get: get,
7594 mutate: delegate.mutate,
7595 events: events.registry
7596 };
7597 }
7598
7599 var any = function (selector) {
7600 return $_8wdrbmlajfuw8q9m.first(selector).isSome();
7601 };
7602 var ancestor$2 = function (scope, selector, isRoot) {
7603 return $_8wdrbmlajfuw8q9m.ancestor(scope, selector, isRoot).isSome();
7604 };
7605 var sibling$2 = function (scope, selector) {
7606 return $_8wdrbmlajfuw8q9m.sibling(scope, selector).isSome();
7607 };
7608 var child$3 = function (scope, selector) {
7609 return $_8wdrbmlajfuw8q9m.child(scope, selector).isSome();
7610 };
7611 var descendant$2 = function (scope, selector) {
7612 return $_8wdrbmlajfuw8q9m.descendant(scope, selector).isSome();
7613 };
7614 var closest$2 = function (scope, selector, isRoot) {
7615 return $_8wdrbmlajfuw8q9m.closest(scope, selector, isRoot).isSome();
7616 };
7617 var $_44mfk0opjfuw8qze = {
7618 any: any,
7619 ancestor: ancestor$2,
7620 sibling: sibling$2,
7621 child: child$3,
7622 descendant: descendant$2,
7623 closest: closest$2
7624 };
7625
7626 var resizeBarDragging = $_f6r94sn4jfuw8qoq.resolve('resizer-bar-dragging');
7627
7628 function BarManager(wire, direction, hdirection) {
7629 var mutation = BarMutation();
7630 var resizing = $_a1giepobjfuw8qx7.transform(mutation, {});
7631 var hoverTable = Option.none();
7632 var getResizer = function (element, type) {
7633 return Option.from($_3q82t2l5jfuw8q93.get(element, type));
7634 };
7635 mutation.events.drag.bind(function (event) {
7636 getResizer(event.target(), 'data-row').each(function (_dataRow) {
7637 var currentRow = $_63qtcvnkjfuw8qqu.getInt(event.target(), 'top');
7638 $_bfod2hlejfuw8qac.set(event.target(), 'top', currentRow + event.yDelta() + 'px');
7639 });
7640 getResizer(event.target(), 'data-column').each(function (_dataCol) {
7641 var currentCol = $_63qtcvnkjfuw8qqu.getInt(event.target(), 'left');
7642 $_bfod2hlejfuw8qac.set(event.target(), 'left', currentCol + event.xDelta() + 'px');
7643 });
7644 });
7645 var getDelta = function (target, direction) {
7646 var newX = $_63qtcvnkjfuw8qqu.getInt(target, direction);
7647 var oldX = parseInt($_3q82t2l5jfuw8q93.get(target, 'data-initial-' + direction), 10);
7648 return newX - oldX;
7649 };
7650 resizing.events.stop.bind(function () {
7651 mutation.get().each(function (target) {
7652 hoverTable.each(function (table) {
7653 getResizer(target, 'data-row').each(function (row) {
7654 var delta = getDelta(target, 'top');
7655 $_3q82t2l5jfuw8q93.remove(target, 'data-initial-top');
7656 events.trigger.adjustHeight(table, delta, parseInt(row, 10));
7657 });
7658 getResizer(target, 'data-column').each(function (column) {
7659 var delta = getDelta(target, 'left');
7660 $_3q82t2l5jfuw8q93.remove(target, 'data-initial-left');
7661 events.trigger.adjustWidth(table, delta, parseInt(column, 10));
7662 });
7663 $_jc1w5n0jfuw8qng.refresh(wire, table, hdirection, direction);
7664 });
7665 });
7666 });
7667 var handler = function (target, direction) {
7668 events.trigger.startAdjust();
7669 mutation.assign(target);
7670 $_3q82t2l5jfuw8q93.set(target, 'data-initial-' + direction, parseInt($_bfod2hlejfuw8qac.get(target, direction), 10));
7671 $_fmcseon6jfuw8qou.add(target, resizeBarDragging);
7672 $_bfod2hlejfuw8qac.set(target, 'opacity', '0.2');
7673 resizing.go(wire.parent());
7674 };
7675 var mousedown = $_6fxiitogjfuw8qy3.bind(wire.parent(), 'mousedown', function (event) {
7676 if ($_jc1w5n0jfuw8qng.isRowBar(event.target()))
7677 handler(event.target(), 'top');
7678 if ($_jc1w5n0jfuw8qng.isColBar(event.target()))
7679 handler(event.target(), 'left');
7680 });
7681 var isRoot = function (e) {
7682 return $_e8rn66kojfuw8q7n.eq(e, wire.view());
7683 };
7684 var mouseover = $_6fxiitogjfuw8qy3.bind(wire.view(), 'mouseover', function (event) {
7685 if ($_a8gk30l6jfuw8q9c.name(event.target()) === 'table' || $_44mfk0opjfuw8qze.closest(event.target(), 'table', isRoot)) {
7686 hoverTable = $_a8gk30l6jfuw8q9c.name(event.target()) === 'table' ? Option.some(event.target()) : $_8wdrbmlajfuw8q9m.ancestor(event.target(), 'table', isRoot);
7687 hoverTable.each(function (ht) {
7688 $_jc1w5n0jfuw8qng.refresh(wire, ht, hdirection, direction);
7689 });
7690 } else if ($_atd1tul9jfuw8q9i.inBody(event.target())) {
7691 $_jc1w5n0jfuw8qng.destroy(wire);
7692 }
7693 });
7694 var destroy = function () {
7695 mousedown.unbind();
7696 mouseover.unbind();
7697 resizing.destroy();
7698 $_jc1w5n0jfuw8qng.destroy(wire);
7699 };
7700 var refresh = function (tbl) {
7701 $_jc1w5n0jfuw8qng.refresh(wire, tbl, hdirection, direction);
7702 };
7703 var events = $_1fbhhho9jfuw8qw4.create({
7704 adjustHeight: Event([
7705 'table',
7706 'delta',
7707 'row'
7708 ]),
7709 adjustWidth: Event([
7710 'table',
7711 'delta',
7712 'column'
7713 ]),
7714 startAdjust: Event([])
7715 });
7716 return {
7717 destroy: destroy,
7718 refresh: refresh,
7719 on: resizing.on,
7720 off: resizing.off,
7721 hideBars: $_20nfr6k7jfuw8q4g.curry($_jc1w5n0jfuw8qng.hide, wire),
7722 showBars: $_20nfr6k7jfuw8q4g.curry($_jc1w5n0jfuw8qng.show, wire),
7723 events: events.registry
7724 };
7725 }
7726
7727 function TableResize(wire, vdirection) {
7728 var hdirection = $_16z2iamhjfuw8qir.height;
7729 var manager = BarManager(wire, vdirection, hdirection);
7730 var events = $_1fbhhho9jfuw8qw4.create({
7731 beforeResize: Event(['table']),
7732 afterResize: Event(['table']),
7733 startDrag: Event([])
7734 });
7735 manager.events.adjustHeight.bind(function (event) {
7736 events.trigger.beforeResize(event.table());
7737 var delta = hdirection.delta(event.delta(), event.table());
7738 $_cwciisngjfuw8qq6.adjustHeight(event.table(), delta, event.row(), hdirection);
7739 events.trigger.afterResize(event.table());
7740 });
7741 manager.events.startAdjust.bind(function (event) {
7742 events.trigger.startDrag();
7743 });
7744 manager.events.adjustWidth.bind(function (event) {
7745 events.trigger.beforeResize(event.table());
7746 var delta = vdirection.delta(event.delta(), event.table());
7747 $_cwciisngjfuw8qq6.adjustWidth(event.table(), delta, event.column(), vdirection);
7748 events.trigger.afterResize(event.table());
7749 });
7750 return {
7751 on: manager.on,
7752 off: manager.off,
7753 hideBars: manager.hideBars,
7754 showBars: manager.showBars,
7755 destroy: manager.destroy,
7756 events: events.registry
7757 };
7758 }
7759
7760 var createContainer = function () {
7761 var container = $_xbeoqkkjfuw8q73.fromTag('div');
7762 $_bfod2hlejfuw8qac.setAll(container, {
7763 position: 'static',
7764 height: '0',
7765 width: '0',
7766 padding: '0',
7767 margin: '0',
7768 border: '0'
7769 });
7770 $_fatuxylgjfuw8qav.append($_atd1tul9jfuw8q9i.body(), container);
7771 return container;
7772 };
7773 var get$8 = function (editor, container) {
7774 return editor.inline ? $_e4gwgeo6jfuw8qvi.body($_5xkhf2nnjfuw8qrq.getBody(editor), createContainer()) : $_e4gwgeo6jfuw8qvi.only($_xbeoqkkjfuw8q73.fromDom(editor.getDoc()));
7775 };
7776 var remove$6 = function (editor, wire) {
7777 if (editor.inline) {
7778 $_fl1deelhjfuw8qax.remove(wire.parent());
7779 }
7780 };
7781 var $_fdmzdaoqjfuw8qzh = {
7782 get: get$8,
7783 remove: remove$6
7784 };
7785
7786 var ResizeHandler = function (editor) {
7787 var selectionRng = Option.none();
7788 var resize = Option.none();
7789 var wire = Option.none();
7790 var percentageBasedSizeRegex = /(\d+(\.\d+)?)%/;
7791 var startW, startRawW;
7792 var isTable = function (elm) {
7793 return elm.nodeName === 'TABLE';
7794 };
7795 var getRawWidth = function (elm) {
7796 return editor.dom.getStyle(elm, 'width') || editor.dom.getAttrib(elm, 'width');
7797 };
7798 var lazyResize = function () {
7799 return resize;
7800 };
7801 var lazyWire = function () {
7802 return wire.getOr($_e4gwgeo6jfuw8qvi.only($_xbeoqkkjfuw8q73.fromDom(editor.getBody())));
7803 };
7804 var destroy = function () {
7805 resize.each(function (sz) {
7806 sz.destroy();
7807 });
7808 wire.each(function (w) {
7809 $_fdmzdaoqjfuw8qzh.remove(editor, w);
7810 });
7811 };
7812 editor.on('init', function () {
7813 var direction = TableDirection($_4xd1udnojfuw8qrw.directionAt);
7814 var rawWire = $_fdmzdaoqjfuw8qzh.get(editor);
7815 wire = Option.some(rawWire);
7816 if (hasObjectResizing(editor) && hasTableResizeBars(editor)) {
7817 var sz = TableResize(rawWire, direction);
7818 sz.on();
7819 sz.events.startDrag.bind(function (event) {
7820 selectionRng = Option.some(editor.selection.getRng());
7821 });
7822 sz.events.afterResize.bind(function (event) {
7823 var table = event.table();
7824 var dataStyleCells = $_6c9d0hl7jfuw8q9d.descendants(table, 'td[data-mce-style],th[data-mce-style]');
7825 $_tyr3yk5jfuw8q47.each(dataStyleCells, function (cell) {
7826 $_3q82t2l5jfuw8q93.remove(cell, 'data-mce-style');
7827 });
7828 selectionRng.each(function (rng) {
7829 editor.selection.setRng(rng);
7830 editor.focus();
7831 });
7832 editor.undoManager.add();
7833 });
7834 resize = Option.some(sz);
7835 }
7836 });
7837 editor.on('ObjectResizeStart', function (e) {
7838 var targetElm = e.target;
7839 if (isTable(targetElm)) {
7840 startW = e.width;
7841 startRawW = getRawWidth(targetElm);
7842 }
7843 });
7844 editor.on('ObjectResized', function (e) {
7845 var targetElm = e.target;
7846 if (isTable(targetElm)) {
7847 var table = targetElm;
7848 if (percentageBasedSizeRegex.test(startRawW)) {
7849 var percentW = parseFloat(percentageBasedSizeRegex.exec(startRawW)[1]);
7850 var targetPercentW = e.width * percentW / startW;
7851 editor.dom.setStyle(table, 'width', targetPercentW + '%');
7852 } else {
7853 var newCellSizes_1 = [];
7854 global$2.each(table.rows, function (row) {
7855 global$2.each(row.cells, function (cell) {
7856 var width = editor.dom.getStyle(cell, 'width', true);
7857 newCellSizes_1.push({
7858 cell: cell,
7859 width: width
7860 });
7861 });
7862 });
7863 global$2.each(newCellSizes_1, function (newCellSize) {
7864 editor.dom.setStyle(newCellSize.cell, 'width', newCellSize.width);
7865 editor.dom.setAttrib(newCellSize.cell, 'width', null);
7866 });
7867 }
7868 }
7869 });
7870 return {
7871 lazyResize: lazyResize,
7872 lazyWire: lazyWire,
7873 destroy: destroy
7874 };
7875 };
7876
7877 var none$2 = function (current) {
7878 return folder$1(function (n, f, m, l) {
7879 return n(current);
7880 });
7881 };
7882 var first$5 = function (current) {
7883 return folder$1(function (n, f, m, l) {
7884 return f(current);
7885 });
7886 };
7887 var middle$1 = function (current, target) {
7888 return folder$1(function (n, f, m, l) {
7889 return m(current, target);
7890 });
7891 };
7892 var last$4 = function (current) {
7893 return folder$1(function (n, f, m, l) {
7894 return l(current);
7895 });
7896 };
7897 var folder$1 = function (fold) {
7898 return {fold: fold};
7899 };
7900 var $_wsunjotjfuw8r0k = {
7901 none: none$2,
7902 first: first$5,
7903 middle: middle$1,
7904 last: last$4
7905 };
7906
7907 var detect$4 = function (current, isRoot) {
7908 return $_aqhz9okhjfuw8q5y.table(current, isRoot).bind(function (table) {
7909 var all = $_aqhz9okhjfuw8q5y.cells(table);
7910 var index = $_tyr3yk5jfuw8q47.findIndex(all, function (x) {
7911 return $_e8rn66kojfuw8q7n.eq(current, x);
7912 });
7913 return index.map(function (ind) {
7914 return {
7915 index: $_20nfr6k7jfuw8q4g.constant(ind),
7916 all: $_20nfr6k7jfuw8q4g.constant(all)
7917 };
7918 });
7919 });
7920 };
7921 var next = function (current, isRoot) {
7922 var detection = detect$4(current, isRoot);
7923 return detection.fold(function () {
7924 return $_wsunjotjfuw8r0k.none(current);
7925 }, function (info) {
7926 return info.index() + 1 < info.all().length ? $_wsunjotjfuw8r0k.middle(current, info.all()[info.index() + 1]) : $_wsunjotjfuw8r0k.last(current);
7927 });
7928 };
7929 var prev = function (current, isRoot) {
7930 var detection = detect$4(current, isRoot);
7931 return detection.fold(function () {
7932 return $_wsunjotjfuw8r0k.none();
7933 }, function (info) {
7934 return info.index() - 1 >= 0 ? $_wsunjotjfuw8r0k.middle(current, info.all()[info.index() - 1]) : $_wsunjotjfuw8r0k.first(current);
7935 });
7936 };
7937 var $_947ovkosjfuw8r0c = {
7938 next: next,
7939 prev: prev
7940 };
7941
7942 var adt = $_7sbzam7jfuw8qgu.generate([
7943 {'before': ['element']},
7944 {
7945 'on': [
7946 'element',
7947 'offset'
7948 ]
7949 },
7950 {after: ['element']}
7951 ]);
7952 var cata$1 = function (subject, onBefore, onOn, onAfter) {
7953 return subject.fold(onBefore, onOn, onAfter);
7954 };
7955 var getStart = function (situ) {
7956 return situ.fold($_20nfr6k7jfuw8q4g.identity, $_20nfr6k7jfuw8q4g.identity, $_20nfr6k7jfuw8q4g.identity);
7957 };
7958 var $_cuk0n0ovjfuw8r0r = {
7959 before: adt.before,
7960 on: adt.on,
7961 after: adt.after,
7962 cata: cata$1,
7963 getStart: getStart
7964 };
7965
7966 var type$2 = $_7sbzam7jfuw8qgu.generate([
7967 {domRange: ['rng']},
7968 {
7969 relative: [
7970 'startSitu',
7971 'finishSitu'
7972 ]
7973 },
7974 {
7975 exact: [
7976 'start',
7977 'soffset',
7978 'finish',
7979 'foffset'
7980 ]
7981 }
7982 ]);
7983 var range$2 = $_5now9kbjfuw8q5e.immutable('start', 'soffset', 'finish', 'foffset');
7984 var exactFromRange = function (simRange) {
7985 return type$2.exact(simRange.start(), simRange.soffset(), simRange.finish(), simRange.foffset());
7986 };
7987 var getStart$1 = function (selection) {
7988 return selection.match({
7989 domRange: function (rng) {
7990 return $_xbeoqkkjfuw8q73.fromDom(rng.startContainer);
7991 },
7992 relative: function (startSitu, finishSitu) {
7993 return $_cuk0n0ovjfuw8r0r.getStart(startSitu);
7994 },
7995 exact: function (start, soffset, finish, foffset) {
7996 return start;
7997 }
7998 });
7999 };
8000 var getWin = function (selection) {
8001 var start = getStart$1(selection);
8002 return $_s8scrkmjfuw8q7a.defaultView(start);
8003 };
8004 var $_bv1jwpoujfuw8r0m = {
8005 domRange: type$2.domRange,
8006 relative: type$2.relative,
8007 exact: type$2.exact,
8008 exactFromRange: exactFromRange,
8009 range: range$2,
8010 getWin: getWin
8011 };
8012
8013 var makeRange = function (start, soffset, finish, foffset) {
8014 var doc = $_s8scrkmjfuw8q7a.owner(start);
8015 var rng = doc.dom().createRange();
8016 rng.setStart(start.dom(), soffset);
8017 rng.setEnd(finish.dom(), foffset);
8018 return rng;
8019 };
8020 var commonAncestorContainer = function (start, soffset, finish, foffset) {
8021 var r = makeRange(start, soffset, finish, foffset);
8022 return $_xbeoqkkjfuw8q73.fromDom(r.commonAncestorContainer);
8023 };
8024 var after$2 = function (start, soffset, finish, foffset) {
8025 var r = makeRange(start, soffset, finish, foffset);
8026 var same = $_e8rn66kojfuw8q7n.eq(start, finish) && soffset === foffset;
8027 return r.collapsed && !same;
8028 };
8029 var $_5xef0moxjfuw8r17 = {
8030 after: after$2,
8031 commonAncestorContainer: commonAncestorContainer
8032 };
8033
8034 var fromElements = function (elements, scope) {
8035 var doc = scope || document;
8036 var fragment = doc.createDocumentFragment();
8037 $_tyr3yk5jfuw8q47.each(elements, function (element) {
8038 fragment.appendChild(element.dom());
8039 });
8040 return $_xbeoqkkjfuw8q73.fromDom(fragment);
8041 };
8042 var $_8a834noyjfuw8r19 = {fromElements: fromElements};
8043
8044 var selectNodeContents = function (win, element) {
8045 var rng = win.document.createRange();
8046 selectNodeContentsUsing(rng, element);
8047 return rng;
8048 };
8049 var selectNodeContentsUsing = function (rng, element) {
8050 rng.selectNodeContents(element.dom());
8051 };
8052 var isWithin$1 = function (outerRange, innerRange) {
8053 return innerRange.compareBoundaryPoints(outerRange.END_TO_START, outerRange) < 1 && innerRange.compareBoundaryPoints(outerRange.START_TO_END, outerRange) > -1;
8054 };
8055 var create$1 = function (win) {
8056 return win.document.createRange();
8057 };
8058 var setStart = function (rng, situ) {
8059 situ.fold(function (e) {
8060 rng.setStartBefore(e.dom());
8061 }, function (e, o) {
8062 rng.setStart(e.dom(), o);
8063 }, function (e) {
8064 rng.setStartAfter(e.dom());
8065 });
8066 };
8067 var setFinish = function (rng, situ) {
8068 situ.fold(function (e) {
8069 rng.setEndBefore(e.dom());
8070 }, function (e, o) {
8071 rng.setEnd(e.dom(), o);
8072 }, function (e) {
8073 rng.setEndAfter(e.dom());
8074 });
8075 };
8076 var replaceWith = function (rng, fragment) {
8077 deleteContents(rng);
8078 rng.insertNode(fragment.dom());
8079 };
8080 var relativeToNative = function (win, startSitu, finishSitu) {
8081 var range = win.document.createRange();
8082 setStart(range, startSitu);
8083 setFinish(range, finishSitu);
8084 return range;
8085 };
8086 var exactToNative = function (win, start, soffset, finish, foffset) {
8087 var rng = win.document.createRange();
8088 rng.setStart(start.dom(), soffset);
8089 rng.setEnd(finish.dom(), foffset);
8090 return rng;
8091 };
8092 var deleteContents = function (rng) {
8093 rng.deleteContents();
8094 };
8095 var cloneFragment = function (rng) {
8096 var fragment = rng.cloneContents();
8097 return $_xbeoqkkjfuw8q73.fromDom(fragment);
8098 };
8099 var toRect = function (rect) {
8100 return {
8101 left: $_20nfr6k7jfuw8q4g.constant(rect.left),
8102 top: $_20nfr6k7jfuw8q4g.constant(rect.top),
8103 right: $_20nfr6k7jfuw8q4g.constant(rect.right),
8104 bottom: $_20nfr6k7jfuw8q4g.constant(rect.bottom),
8105 width: $_20nfr6k7jfuw8q4g.constant(rect.width),
8106 height: $_20nfr6k7jfuw8q4g.constant(rect.height)
8107 };
8108 };
8109 var getFirstRect = function (rng) {
8110 var rects = rng.getClientRects();
8111 var rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();
8112 return rect.width > 0 || rect.height > 0 ? Option.some(rect).map(toRect) : Option.none();
8113 };
8114 var getBounds$1 = function (rng) {
8115 var rect = rng.getBoundingClientRect();
8116 return rect.width > 0 || rect.height > 0 ? Option.some(rect).map(toRect) : Option.none();
8117 };
8118 var toString = function (rng) {
8119 return rng.toString();
8120 };
8121 var $_dkhwcmozjfuw8r1d = {
8122 create: create$1,
8123 replaceWith: replaceWith,
8124 selectNodeContents: selectNodeContents,
8125 selectNodeContentsUsing: selectNodeContentsUsing,
8126 relativeToNative: relativeToNative,
8127 exactToNative: exactToNative,
8128 deleteContents: deleteContents,
8129 cloneFragment: cloneFragment,
8130 getFirstRect: getFirstRect,
8131 getBounds: getBounds$1,
8132 isWithin: isWithin$1,
8133 toString: toString
8134 };
8135
8136 var adt$1 = $_7sbzam7jfuw8qgu.generate([
8137 {
8138 ltr: [
8139 'start',
8140 'soffset',
8141 'finish',
8142 'foffset'
8143 ]
8144 },
8145 {
8146 rtl: [
8147 'start',
8148 'soffset',
8149 'finish',
8150 'foffset'
8151 ]
8152 }
8153 ]);
8154 var fromRange = function (win, type, range) {
8155 return type($_xbeoqkkjfuw8q73.fromDom(range.startContainer), range.startOffset, $_xbeoqkkjfuw8q73.fromDom(range.endContainer), range.endOffset);
8156 };
8157 var getRanges = function (win, selection) {
8158 return selection.match({
8159 domRange: function (rng) {
8160 return {
8161 ltr: $_20nfr6k7jfuw8q4g.constant(rng),
8162 rtl: Option.none
8163 };
8164 },
8165 relative: function (startSitu, finishSitu) {
8166 return {
8167 ltr: $_cfqymdkujfuw8q85.cached(function () {
8168 return $_dkhwcmozjfuw8r1d.relativeToNative(win, startSitu, finishSitu);
8169 }),
8170 rtl: $_cfqymdkujfuw8q85.cached(function () {
8171 return Option.some($_dkhwcmozjfuw8r1d.relativeToNative(win, finishSitu, startSitu));
8172 })
8173 };
8174 },
8175 exact: function (start, soffset, finish, foffset) {
8176 return {
8177 ltr: $_cfqymdkujfuw8q85.cached(function () {
8178 return $_dkhwcmozjfuw8r1d.exactToNative(win, start, soffset, finish, foffset);
8179 }),
8180 rtl: $_cfqymdkujfuw8q85.cached(function () {
8181 return Option.some($_dkhwcmozjfuw8r1d.exactToNative(win, finish, foffset, start, soffset));
8182 })
8183 };
8184 }
8185 });
8186 };
8187 var doDiagnose = function (win, ranges) {
8188 var rng = ranges.ltr();
8189 if (rng.collapsed) {
8190 var reversed = ranges.rtl().filter(function (rev) {
8191 return rev.collapsed === false;
8192 });
8193 return reversed.map(function (rev) {
8194 return adt$1.rtl($_xbeoqkkjfuw8q73.fromDom(rev.endContainer), rev.endOffset, $_xbeoqkkjfuw8q73.fromDom(rev.startContainer), rev.startOffset);
8195 }).getOrThunk(function () {
8196 return fromRange(win, adt$1.ltr, rng);
8197 });
8198 } else {
8199 return fromRange(win, adt$1.ltr, rng);
8200 }
8201 };
8202 var diagnose = function (win, selection) {
8203 var ranges = getRanges(win, selection);
8204 return doDiagnose(win, ranges);
8205 };
8206 var asLtrRange = function (win, selection) {
8207 var diagnosis = diagnose(win, selection);
8208 return diagnosis.match({
8209 ltr: function (start, soffset, finish, foffset) {
8210 var rng = win.document.createRange();
8211 rng.setStart(start.dom(), soffset);
8212 rng.setEnd(finish.dom(), foffset);
8213 return rng;
8214 },
8215 rtl: function (start, soffset, finish, foffset) {
8216 var rng = win.document.createRange();
8217 rng.setStart(finish.dom(), foffset);
8218 rng.setEnd(start.dom(), soffset);
8219 return rng;
8220 }
8221 });
8222 };
8223 var $_c9xxrpp0jfuw8r1k = {
8224 ltr: adt$1.ltr,
8225 rtl: adt$1.rtl,
8226 diagnose: diagnose,
8227 asLtrRange: asLtrRange
8228 };
8229
8230 var searchForPoint = function (rectForOffset, x, y, maxX, length) {
8231 if (length === 0)
8232 return 0;
8233 else if (x === maxX)
8234 return length - 1;
8235 var xDelta = maxX;
8236 for (var i = 1; i < length; i++) {
8237 var rect = rectForOffset(i);
8238 var curDeltaX = Math.abs(x - rect.left);
8239 if (y > rect.bottom) {
8240 } else if (y < rect.top || curDeltaX > xDelta) {
8241 return i - 1;
8242 } else {
8243 xDelta = curDeltaX;
8244 }
8245 }
8246 return 0;
8247 };
8248 var inRect = function (rect, x, y) {
8249 return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;
8250 };
8251 var $_4j2zpup3jfuw8r2b = {
8252 inRect: inRect,
8253 searchForPoint: searchForPoint
8254 };
8255
8256 var locateOffset = function (doc, textnode, x, y, rect) {
8257 var rangeForOffset = function (offset) {
8258 var r = doc.dom().createRange();
8259 r.setStart(textnode.dom(), offset);
8260 r.collapse(true);
8261 return r;
8262 };
8263 var rectForOffset = function (offset) {
8264 var r = rangeForOffset(offset);
8265 return r.getBoundingClientRect();
8266 };
8267 var length = $_6j8y7blnjfuw8qc3.get(textnode).length;
8268 var offset = $_4j2zpup3jfuw8r2b.searchForPoint(rectForOffset, x, y, rect.right, length);
8269 return rangeForOffset(offset);
8270 };
8271 var locate = function (doc, node, x, y) {
8272 var r = doc.dom().createRange();
8273 r.selectNode(node.dom());
8274 var rects = r.getClientRects();
8275 var foundRect = $_cul8qomvjfuw8qm7.findMap(rects, function (rect) {
8276 return $_4j2zpup3jfuw8r2b.inRect(rect, x, y) ? Option.some(rect) : Option.none();
8277 });
8278 return foundRect.map(function (rect) {
8279 return locateOffset(doc, node, x, y, rect);
8280 });
8281 };
8282 var $_11d3zhp4jfuw8r2c = {locate: locate};
8283
8284 var searchInChildren = function (doc, node, x, y) {
8285 var r = doc.dom().createRange();
8286 var nodes = $_s8scrkmjfuw8q7a.children(node);
8287 return $_cul8qomvjfuw8qm7.findMap(nodes, function (n) {
8288 r.selectNode(n.dom());
8289 return $_4j2zpup3jfuw8r2b.inRect(r.getBoundingClientRect(), x, y) ? locateNode(doc, n, x, y) : Option.none();
8290 });
8291 };
8292 var locateNode = function (doc, node, x, y) {
8293 var locator = $_a8gk30l6jfuw8q9c.isText(node) ? $_11d3zhp4jfuw8r2c.locate : searchInChildren;
8294 return locator(doc, node, x, y);
8295 };
8296 var locate$1 = function (doc, node, x, y) {
8297 var r = doc.dom().createRange();
8298 r.selectNode(node.dom());
8299 var rect = r.getBoundingClientRect();
8300 var boundedX = Math.max(rect.left, Math.min(rect.right, x));
8301 var boundedY = Math.max(rect.top, Math.min(rect.bottom, y));
8302 return locateNode(doc, node, boundedX, boundedY);
8303 };
8304 var $_6f632yp2jfuw8r25 = {locate: locate$1};
8305
8306 var COLLAPSE_TO_LEFT = true;
8307 var COLLAPSE_TO_RIGHT = false;
8308 var getCollapseDirection = function (rect, x) {
8309 return x - rect.left < rect.right - x ? COLLAPSE_TO_LEFT : COLLAPSE_TO_RIGHT;
8310 };
8311 var createCollapsedNode = function (doc, target, collapseDirection) {
8312 var r = doc.dom().createRange();
8313 r.selectNode(target.dom());
8314 r.collapse(collapseDirection);
8315 return r;
8316 };
8317 var locateInElement = function (doc, node, x) {
8318 var cursorRange = doc.dom().createRange();
8319 cursorRange.selectNode(node.dom());
8320 var rect = cursorRange.getBoundingClientRect();
8321 var collapseDirection = getCollapseDirection(rect, x);
8322 var f = collapseDirection === COLLAPSE_TO_LEFT ? $_ejrzj4lljfuw8qbw.first : $_ejrzj4lljfuw8qbw.last;
8323 return f(node).map(function (target) {
8324 return createCollapsedNode(doc, target, collapseDirection);
8325 });
8326 };
8327 var locateInEmpty = function (doc, node, x) {
8328 var rect = node.dom().getBoundingClientRect();
8329 var collapseDirection = getCollapseDirection(rect, x);
8330 return Option.some(createCollapsedNode(doc, node, collapseDirection));
8331 };
8332 var search = function (doc, node, x) {
8333 var f = $_s8scrkmjfuw8q7a.children(node).length === 0 ? locateInEmpty : locateInElement;
8334 return f(doc, node, x);
8335 };
8336 var $_azsqu2p5jfuw8r2i = {search: search};
8337
8338 var caretPositionFromPoint = function (doc, x, y) {
8339 return Option.from(doc.dom().caretPositionFromPoint(x, y)).bind(function (pos) {
8340 if (pos.offsetNode === null)
8341 return Option.none();
8342 var r = doc.dom().createRange();
8343 r.setStart(pos.offsetNode, pos.offset);
8344 r.collapse();
8345 return Option.some(r);
8346 });
8347 };
8348 var caretRangeFromPoint = function (doc, x, y) {
8349 return Option.from(doc.dom().caretRangeFromPoint(x, y));
8350 };
8351 var searchTextNodes = function (doc, node, x, y) {
8352 var r = doc.dom().createRange();
8353 r.selectNode(node.dom());
8354 var rect = r.getBoundingClientRect();
8355 var boundedX = Math.max(rect.left, Math.min(rect.right, x));
8356 var boundedY = Math.max(rect.top, Math.min(rect.bottom, y));
8357 return $_6f632yp2jfuw8r25.locate(doc, node, boundedX, boundedY);
8358 };
8359 var searchFromPoint = function (doc, x, y) {
8360 return $_xbeoqkkjfuw8q73.fromPoint(doc, x, y).bind(function (elem) {
8361 var fallback = function () {
8362 return $_azsqu2p5jfuw8r2i.search(doc, elem, x);
8363 };
8364 return $_s8scrkmjfuw8q7a.children(elem).length === 0 ? fallback() : searchTextNodes(doc, elem, x, y).orThunk(fallback);
8365 });
8366 };
8367 var availableSearch = document.caretPositionFromPoint ? caretPositionFromPoint : document.caretRangeFromPoint ? caretRangeFromPoint : searchFromPoint;
8368 var fromPoint$1 = function (win, x, y) {
8369 var doc = $_xbeoqkkjfuw8q73.fromDom(win.document);
8370 return availableSearch(doc, x, y).map(function (rng) {
8371 return $_bv1jwpoujfuw8r0m.range($_xbeoqkkjfuw8q73.fromDom(rng.startContainer), rng.startOffset, $_xbeoqkkjfuw8q73.fromDom(rng.endContainer), rng.endOffset);
8372 });
8373 };
8374 var $_lw04hp1jfuw8r1v = {fromPoint: fromPoint$1};
8375
8376 var withinContainer = function (win, ancestor, outerRange, selector) {
8377 var innerRange = $_dkhwcmozjfuw8r1d.create(win);
8378 var self = $_enn9uikjjfuw8q6w.is(ancestor, selector) ? [ancestor] : [];
8379 var elements = self.concat($_6c9d0hl7jfuw8q9d.descendants(ancestor, selector));
8380 return $_tyr3yk5jfuw8q47.filter(elements, function (elem) {
8381 $_dkhwcmozjfuw8r1d.selectNodeContentsUsing(innerRange, elem);
8382 return $_dkhwcmozjfuw8r1d.isWithin(outerRange, innerRange);
8383 });
8384 };
8385 var find$3 = function (win, selection, selector) {
8386 var outerRange = $_c9xxrpp0jfuw8r1k.asLtrRange(win, selection);
8387 var ancestor = $_xbeoqkkjfuw8q73.fromDom(outerRange.commonAncestorContainer);
8388 return $_a8gk30l6jfuw8q9c.isElement(ancestor) ? withinContainer(win, ancestor, outerRange, selector) : [];
8389 };
8390 var $_7efy22p6jfuw8r2m = {find: find$3};
8391
8392 var beforeSpecial = function (element, offset) {
8393 var name = $_a8gk30l6jfuw8q9c.name(element);
8394 if ('input' === name)
8395 return $_cuk0n0ovjfuw8r0r.after(element);
8396 else if (!$_tyr3yk5jfuw8q47.contains([
8397 'br',
8398 'img'
8399 ], name))
8400 return $_cuk0n0ovjfuw8r0r.on(element, offset);
8401 else
8402 return offset === 0 ? $_cuk0n0ovjfuw8r0r.before(element) : $_cuk0n0ovjfuw8r0r.after(element);
8403 };
8404 var preprocessRelative = function (startSitu, finishSitu) {
8405 var start = startSitu.fold($_cuk0n0ovjfuw8r0r.before, beforeSpecial, $_cuk0n0ovjfuw8r0r.after);
8406 var finish = finishSitu.fold($_cuk0n0ovjfuw8r0r.before, beforeSpecial, $_cuk0n0ovjfuw8r0r.after);
8407 return $_bv1jwpoujfuw8r0m.relative(start, finish);
8408 };
8409 var preprocessExact = function (start, soffset, finish, foffset) {
8410 var startSitu = beforeSpecial(start, soffset);
8411 var finishSitu = beforeSpecial(finish, foffset);
8412 return $_bv1jwpoujfuw8r0m.relative(startSitu, finishSitu);
8413 };
8414 var preprocess = function (selection) {
8415 return selection.match({
8416 domRange: function (rng) {
8417 var start = $_xbeoqkkjfuw8q73.fromDom(rng.startContainer);
8418 var finish = $_xbeoqkkjfuw8q73.fromDom(rng.endContainer);
8419 return preprocessExact(start, rng.startOffset, finish, rng.endOffset);
8420 },
8421 relative: preprocessRelative,
8422 exact: preprocessExact
8423 });
8424 };
8425 var $_cjts8ap7jfuw8r2q = {
8426 beforeSpecial: beforeSpecial,
8427 preprocess: preprocess,
8428 preprocessRelative: preprocessRelative,
8429 preprocessExact: preprocessExact
8430 };
8431
8432 var doSetNativeRange = function (win, rng) {
8433 Option.from(win.getSelection()).each(function (selection) {
8434 selection.removeAllRanges();
8435 selection.addRange(rng);
8436 });
8437 };
8438 var doSetRange = function (win, start, soffset, finish, foffset) {
8439 var rng = $_dkhwcmozjfuw8r1d.exactToNative(win, start, soffset, finish, foffset);
8440 doSetNativeRange(win, rng);
8441 };
8442 var findWithin = function (win, selection, selector) {
8443 return $_7efy22p6jfuw8r2m.find(win, selection, selector);
8444 };
8445 var setRangeFromRelative = function (win, relative) {
8446 return $_c9xxrpp0jfuw8r1k.diagnose(win, relative).match({
8447 ltr: function (start, soffset, finish, foffset) {
8448 doSetRange(win, start, soffset, finish, foffset);
8449 },
8450 rtl: function (start, soffset, finish, foffset) {
8451 var selection = win.getSelection();
8452 if (selection.setBaseAndExtent) {
8453 selection.setBaseAndExtent(start.dom(), soffset, finish.dom(), foffset);
8454 } else if (selection.extend) {
8455 selection.collapse(start.dom(), soffset);
8456 selection.extend(finish.dom(), foffset);
8457 } else {
8458 doSetRange(win, finish, foffset, start, soffset);
8459 }
8460 }
8461 });
8462 };
8463 var setExact = function (win, start, soffset, finish, foffset) {
8464 var relative = $_cjts8ap7jfuw8r2q.preprocessExact(start, soffset, finish, foffset);
8465 setRangeFromRelative(win, relative);
8466 };
8467 var setRelative = function (win, startSitu, finishSitu) {
8468 var relative = $_cjts8ap7jfuw8r2q.preprocessRelative(startSitu, finishSitu);
8469 setRangeFromRelative(win, relative);
8470 };
8471 var toNative = function (selection) {
8472 var win = $_bv1jwpoujfuw8r0m.getWin(selection).dom();
8473 var getDomRange = function (start, soffset, finish, foffset) {
8474 return $_dkhwcmozjfuw8r1d.exactToNative(win, start, soffset, finish, foffset);
8475 };
8476 var filtered = $_cjts8ap7jfuw8r2q.preprocess(selection);
8477 return $_c9xxrpp0jfuw8r1k.diagnose(win, filtered).match({
8478 ltr: getDomRange,
8479 rtl: getDomRange
8480 });
8481 };
8482 var readRange = function (selection) {
8483 if (selection.rangeCount > 0) {
8484 var firstRng = selection.getRangeAt(0);
8485 var lastRng = selection.getRangeAt(selection.rangeCount - 1);
8486 return Option.some($_bv1jwpoujfuw8r0m.range($_xbeoqkkjfuw8q73.fromDom(firstRng.startContainer), firstRng.startOffset, $_xbeoqkkjfuw8q73.fromDom(lastRng.endContainer), lastRng.endOffset));
8487 } else {
8488 return Option.none();
8489 }
8490 };
8491 var doGetExact = function (selection) {
8492 var anchorNode = $_xbeoqkkjfuw8q73.fromDom(selection.anchorNode);
8493 var focusNode = $_xbeoqkkjfuw8q73.fromDom(selection.focusNode);
8494 return $_5xef0moxjfuw8r17.after(anchorNode, selection.anchorOffset, focusNode, selection.focusOffset) ? Option.some($_bv1jwpoujfuw8r0m.range($_xbeoqkkjfuw8q73.fromDom(selection.anchorNode), selection.anchorOffset, $_xbeoqkkjfuw8q73.fromDom(selection.focusNode), selection.focusOffset)) : readRange(selection);
8495 };
8496 var setToElement = function (win, element) {
8497 var rng = $_dkhwcmozjfuw8r1d.selectNodeContents(win, element);
8498 doSetNativeRange(win, rng);
8499 };
8500 var forElement = function (win, element) {
8501 var rng = $_dkhwcmozjfuw8r1d.selectNodeContents(win, element);
8502 return $_bv1jwpoujfuw8r0m.range($_xbeoqkkjfuw8q73.fromDom(rng.startContainer), rng.startOffset, $_xbeoqkkjfuw8q73.fromDom(rng.endContainer), rng.endOffset);
8503 };
8504 var getExact = function (win) {
8505 var selection = win.getSelection();
8506 return selection.rangeCount > 0 ? doGetExact(selection) : Option.none();
8507 };
8508 var get$9 = function (win) {
8509 return getExact(win).map(function (range) {
8510 return $_bv1jwpoujfuw8r0m.exact(range.start(), range.soffset(), range.finish(), range.foffset());
8511 });
8512 };
8513 var getFirstRect$1 = function (win, selection) {
8514 var rng = $_c9xxrpp0jfuw8r1k.asLtrRange(win, selection);
8515 return $_dkhwcmozjfuw8r1d.getFirstRect(rng);
8516 };
8517 var getBounds$2 = function (win, selection) {
8518 var rng = $_c9xxrpp0jfuw8r1k.asLtrRange(win, selection);
8519 return $_dkhwcmozjfuw8r1d.getBounds(rng);
8520 };
8521 var getAtPoint = function (win, x, y) {
8522 return $_lw04hp1jfuw8r1v.fromPoint(win, x, y);
8523 };
8524 var getAsString = function (win, selection) {
8525 var rng = $_c9xxrpp0jfuw8r1k.asLtrRange(win, selection);
8526 return $_dkhwcmozjfuw8r1d.toString(rng);
8527 };
8528 var clear$1 = function (win) {
8529 var selection = win.getSelection();
8530 selection.removeAllRanges();
8531 };
8532 var clone$2 = function (win, selection) {
8533 var rng = $_c9xxrpp0jfuw8r1k.asLtrRange(win, selection);
8534 return $_dkhwcmozjfuw8r1d.cloneFragment(rng);
8535 };
8536 var replace$1 = function (win, selection, elements) {
8537 var rng = $_c9xxrpp0jfuw8r1k.asLtrRange(win, selection);
8538 var fragment = $_8a834noyjfuw8r19.fromElements(elements, win.document);
8539 $_dkhwcmozjfuw8r1d.replaceWith(rng, fragment);
8540 };
8541 var deleteAt = function (win, selection) {
8542 var rng = $_c9xxrpp0jfuw8r1k.asLtrRange(win, selection);
8543 $_dkhwcmozjfuw8r1d.deleteContents(rng);
8544 };
8545 var isCollapsed = function (start, soffset, finish, foffset) {
8546 return $_e8rn66kojfuw8q7n.eq(start, finish) && soffset === foffset;
8547 };
8548 var $_3gcdhqowjfuw8r11 = {
8549 setExact: setExact,
8550 getExact: getExact,
8551 get: get$9,
8552 setRelative: setRelative,
8553 toNative: toNative,
8554 setToElement: setToElement,
8555 clear: clear$1,
8556 clone: clone$2,
8557 replace: replace$1,
8558 deleteAt: deleteAt,
8559 forElement: forElement,
8560 getFirstRect: getFirstRect$1,
8561 getBounds: getBounds$2,
8562 getAtPoint: getAtPoint,
8563 findWithin: findWithin,
8564 getAsString: getAsString,
8565 isCollapsed: isCollapsed
8566 };
8567
8568 var global$4 = tinymce.util.Tools.resolve('tinymce.util.VK');
8569
8570 var forward = function (editor, isRoot, cell, lazyWire) {
8571 return go(editor, isRoot, $_947ovkosjfuw8r0c.next(cell), lazyWire);
8572 };
8573 var backward = function (editor, isRoot, cell, lazyWire) {
8574 return go(editor, isRoot, $_947ovkosjfuw8r0c.prev(cell), lazyWire);
8575 };
8576 var getCellFirstCursorPosition = function (editor, cell) {
8577 var selection = $_bv1jwpoujfuw8r0m.exact(cell, 0, cell, 0);
8578 return $_3gcdhqowjfuw8r11.toNative(selection);
8579 };
8580 var getNewRowCursorPosition = function (editor, table) {
8581 var rows = $_6c9d0hl7jfuw8q9d.descendants(table, 'tr');
8582 return $_tyr3yk5jfuw8q47.last(rows).bind(function (last) {
8583 return $_8wdrbmlajfuw8q9m.descendant(last, 'td,th').map(function (first) {
8584 return getCellFirstCursorPosition(editor, first);
8585 });
8586 });
8587 };
8588 var go = function (editor, isRoot, cell, actions, lazyWire) {
8589 return cell.fold(Option.none, Option.none, function (current, next) {
8590 return $_ejrzj4lljfuw8qbw.first(next).map(function (cell) {
8591 return getCellFirstCursorPosition(editor, cell);
8592 });
8593 }, function (current) {
8594 return $_aqhz9okhjfuw8q5y.table(current, isRoot).bind(function (table) {
8595 var targets = $_5b7h1hlqjfuw8qci.noMenu(current);
8596 editor.undoManager.transact(function () {
8597 actions.insertRowsAfter(table, targets);
8598 });
8599 return getNewRowCursorPosition(editor, table);
8600 });
8601 });
8602 };
8603 var rootElements = [
8604 'table',
8605 'li',
8606 'dl'
8607 ];
8608 var handle$1 = function (event, editor, actions, lazyWire) {
8609 if (event.keyCode === global$4.TAB) {
8610 var body_1 = $_5xkhf2nnjfuw8qrq.getBody(editor);
8611 var isRoot_1 = function (element) {
8612 var name = $_a8gk30l6jfuw8q9c.name(element);
8613 return $_e8rn66kojfuw8q7n.eq(element, body_1) || $_tyr3yk5jfuw8q47.contains(rootElements, name);
8614 };
8615 var rng = editor.selection.getRng();
8616 if (rng.collapsed) {
8617 var start = $_xbeoqkkjfuw8q73.fromDom(rng.startContainer);
8618 $_aqhz9okhjfuw8q5y.cell(start, isRoot_1).each(function (cell) {
8619 event.preventDefault();
8620 var navigation = event.shiftKey ? backward : forward;
8621 var rng = navigation(editor, isRoot_1, cell, actions, lazyWire);
8622 rng.each(function (range) {
8623 editor.selection.setRng(range);
8624 });
8625 });
8626 }
8627 }
8628 };
8629 var $_djb8ceorjfuw8qzt = {handle: handle$1};
8630
8631 var response = $_5now9kbjfuw8q5e.immutable('selection', 'kill');
8632 var $_b7ap4hpbjfuw8r3x = {response: response};
8633
8634 var isKey = function (key) {
8635 return function (keycode) {
8636 return keycode === key;
8637 };
8638 };
8639 var isUp = isKey(38);
8640 var isDown = isKey(40);
8641 var isNavigation = function (keycode) {
8642 return keycode >= 37 && keycode <= 40;
8643 };
8644 var $_9n04otpcjfuw8r40 = {
8645 ltr: {
8646 isBackward: isKey(37),
8647 isForward: isKey(39)
8648 },
8649 rtl: {
8650 isBackward: isKey(39),
8651 isForward: isKey(37)
8652 },
8653 isUp: isUp,
8654 isDown: isDown,
8655 isNavigation: isNavigation
8656 };
8657
8658 var convertToRange = function (win, selection) {
8659 var rng = $_c9xxrpp0jfuw8r1k.asLtrRange(win, selection);
8660 return {
8661 start: $_20nfr6k7jfuw8q4g.constant($_xbeoqkkjfuw8q73.fromDom(rng.startContainer)),
8662 soffset: $_20nfr6k7jfuw8q4g.constant(rng.startOffset),
8663 finish: $_20nfr6k7jfuw8q4g.constant($_xbeoqkkjfuw8q73.fromDom(rng.endContainer)),
8664 foffset: $_20nfr6k7jfuw8q4g.constant(rng.endOffset)
8665 };
8666 };
8667 var makeSitus = function (start, soffset, finish, foffset) {
8668 return {
8669 start: $_20nfr6k7jfuw8q4g.constant($_cuk0n0ovjfuw8r0r.on(start, soffset)),
8670 finish: $_20nfr6k7jfuw8q4g.constant($_cuk0n0ovjfuw8r0r.on(finish, foffset))
8671 };
8672 };
8673 var $_81eh29pejfuw8r4k = {
8674 convertToRange: convertToRange,
8675 makeSitus: makeSitus
8676 };
8677
8678 var isSafari = $_fqgee0ktjfuw8q83.detect().browser.isSafari();
8679 var get$10 = function (_doc) {
8680 var doc = _doc !== undefined ? _doc.dom() : document;
8681 var x = doc.body.scrollLeft || doc.documentElement.scrollLeft;
8682 var y = doc.body.scrollTop || doc.documentElement.scrollTop;
8683 return r(x, y);
8684 };
8685 var to = function (x, y, _doc) {
8686 var doc = _doc !== undefined ? _doc.dom() : document;
8687 var win = doc.defaultView;
8688 win.scrollTo(x, y);
8689 };
8690 var by = function (x, y, _doc) {
8691 var doc = _doc !== undefined ? _doc.dom() : document;
8692 var win = doc.defaultView;
8693 win.scrollBy(x, y);
8694 };
8695 var setToElement$1 = function (win, element) {
8696 var pos = $_hsvzlmijfuw8qj4.absolute(element);
8697 var doc = $_xbeoqkkjfuw8q73.fromDom(win.document);
8698 to(pos.left(), pos.top(), doc);
8699 };
8700 var preserve$1 = function (doc, f) {
8701 var before = get$10(doc);
8702 f();
8703 var after = get$10(doc);
8704 if (before.top() !== after.top() || before.left() !== after.left()) {
8705 to(before.left(), before.top(), doc);
8706 }
8707 };
8708 var capture$2 = function (doc) {
8709 var previous = Option.none();
8710 var save = function () {
8711 previous = Option.some(get$10(doc));
8712 };
8713 var restore = function () {
8714 previous.each(function (p) {
8715 to(p.left(), p.top(), doc);
8716 });
8717 };
8718 save();
8719 return {
8720 save: save,
8721 restore: restore
8722 };
8723 };
8724 var intoView = function (element, alignToTop) {
8725 if (isSafari && $_g6mvnrk8jfuw8q4k.isFunction(element.dom().scrollIntoViewIfNeeded)) {
8726 element.dom().scrollIntoViewIfNeeded(false);
8727 } else {
8728 element.dom().scrollIntoView(alignToTop);
8729 }
8730 };
8731 var intoViewIfNeeded = function (element, container) {
8732 var containerBox = container.dom().getBoundingClientRect();
8733 var elementBox = element.dom().getBoundingClientRect();
8734 if (elementBox.top < containerBox.top) {
8735 intoView(element, true);
8736 } else if (elementBox.bottom > containerBox.bottom) {
8737 intoView(element, false);
8738 }
8739 };
8740 var scrollBarWidth = function () {
8741 var scrollDiv = $_xbeoqkkjfuw8q73.fromHtml('<div style="width: 100px; height: 100px; overflow: scroll; position: absolute; top: -9999px;"></div>');
8742 $_fatuxylgjfuw8qav.after($_atd1tul9jfuw8q9i.body(), scrollDiv);
8743 var w = scrollDiv.dom().offsetWidth - scrollDiv.dom().clientWidth;
8744 $_fl1deelhjfuw8qax.remove(scrollDiv);
8745 return w;
8746 };
8747 var $_xvhf9pfjfuw8r51 = {
8748 get: get$10,
8749 to: to,
8750 by: by,
8751 preserve: preserve$1,
8752 capture: capture$2,
8753 intoView: intoView,
8754 intoViewIfNeeded: intoViewIfNeeded,
8755 setToElement: setToElement$1,
8756 scrollBarWidth: scrollBarWidth
8757 };
8758
8759 function WindowBridge(win) {
8760 var elementFromPoint = function (x, y) {
8761 return Option.from(win.document.elementFromPoint(x, y)).map($_xbeoqkkjfuw8q73.fromDom);
8762 };
8763 var getRect = function (element) {
8764 return element.dom().getBoundingClientRect();
8765 };
8766 var getRangedRect = function (start, soffset, finish, foffset) {
8767 var sel = $_bv1jwpoujfuw8r0m.exact(start, soffset, finish, foffset);
8768 return $_3gcdhqowjfuw8r11.getFirstRect(win, sel).map(function (structRect) {
8769 return $_11yiupkajfuw8q5c.map(structRect, $_20nfr6k7jfuw8q4g.apply);
8770 });
8771 };
8772 var getSelection = function () {
8773 return $_3gcdhqowjfuw8r11.get(win).map(function (exactAdt) {
8774 return $_81eh29pejfuw8r4k.convertToRange(win, exactAdt);
8775 });
8776 };
8777 var fromSitus = function (situs) {
8778 var relative = $_bv1jwpoujfuw8r0m.relative(situs.start(), situs.finish());
8779 return $_81eh29pejfuw8r4k.convertToRange(win, relative);
8780 };
8781 var situsFromPoint = function (x, y) {
8782 return $_3gcdhqowjfuw8r11.getAtPoint(win, x, y).map(function (exact) {
8783 return {
8784 start: $_20nfr6k7jfuw8q4g.constant($_cuk0n0ovjfuw8r0r.on(exact.start(), exact.soffset())),
8785 finish: $_20nfr6k7jfuw8q4g.constant($_cuk0n0ovjfuw8r0r.on(exact.finish(), exact.foffset()))
8786 };
8787 });
8788 };
8789 var clearSelection = function () {
8790 $_3gcdhqowjfuw8r11.clear(win);
8791 };
8792 var selectContents = function (element) {
8793 $_3gcdhqowjfuw8r11.setToElement(win, element);
8794 };
8795 var setSelection = function (sel) {
8796 $_3gcdhqowjfuw8r11.setExact(win, sel.start(), sel.soffset(), sel.finish(), sel.foffset());
8797 };
8798 var setRelativeSelection = function (start, finish) {
8799 $_3gcdhqowjfuw8r11.setRelative(win, start, finish);
8800 };
8801 var getInnerHeight = function () {
8802 return win.innerHeight;
8803 };
8804 var getScrollY = function () {
8805 var pos = $_xvhf9pfjfuw8r51.get($_xbeoqkkjfuw8q73.fromDom(win.document));
8806 return pos.top();
8807 };
8808 var scrollBy = function (x, y) {
8809 $_xvhf9pfjfuw8r51.by(x, y, $_xbeoqkkjfuw8q73.fromDom(win.document));
8810 };
8811 return {
8812 elementFromPoint: elementFromPoint,
8813 getRect: getRect,
8814 getRangedRect: getRangedRect,
8815 getSelection: getSelection,
8816 fromSitus: fromSitus,
8817 situsFromPoint: situsFromPoint,
8818 clearSelection: clearSelection,
8819 setSelection: setSelection,
8820 setRelativeSelection: setRelativeSelection,
8821 selectContents: selectContents,
8822 getInnerHeight: getInnerHeight,
8823 getScrollY: getScrollY,
8824 scrollBy: scrollBy
8825 };
8826 }
8827
8828 var sync = function (container, isRoot, start, soffset, finish, foffset, selectRange) {
8829 if (!($_e8rn66kojfuw8q7n.eq(start, finish) && soffset === foffset)) {
8830 return $_8wdrbmlajfuw8q9m.closest(start, 'td,th', isRoot).bind(function (s) {
8831 return $_8wdrbmlajfuw8q9m.closest(finish, 'td,th', isRoot).bind(function (f) {
8832 return detect$5(container, isRoot, s, f, selectRange);
8833 });
8834 });
8835 } else {
8836 return Option.none();
8837 }
8838 };
8839 var detect$5 = function (container, isRoot, start, finish, selectRange) {
8840 if (!$_e8rn66kojfuw8q7n.eq(start, finish)) {
8841 return $_dpd405ltjfuw8qd8.identify(start, finish, isRoot).bind(function (cellSel) {
8842 var boxes = cellSel.boxes().getOr([]);
8843 if (boxes.length > 0) {
8844 selectRange(container, boxes, cellSel.start(), cellSel.finish());
8845 return Option.some($_b7ap4hpbjfuw8r3x.response(Option.some($_81eh29pejfuw8r4k.makeSitus(start, 0, start, $_6vfowrlmjfuw8qbz.getEnd(start))), true));
8846 } else {
8847 return Option.none();
8848 }
8849 });
8850 } else {
8851 return Option.none();
8852 }
8853 };
8854 var update = function (rows, columns, container, selected, annotations) {
8855 var updateSelection = function (newSels) {
8856 annotations.clear(container);
8857 annotations.selectRange(container, newSels.boxes(), newSels.start(), newSels.finish());
8858 return newSels.boxes();
8859 };
8860 return $_dpd405ltjfuw8qd8.shiftSelection(selected, rows, columns, annotations.firstSelectedSelector(), annotations.lastSelectedSelector()).map(updateSelection);
8861 };
8862 var $_7ulhzpgjfuw8r5b = {
8863 sync: sync,
8864 detect: detect$5,
8865 update: update
8866 };
8867
8868 var nu$3 = $_5now9kbjfuw8q5e.immutableBag([
8869 'left',
8870 'top',
8871 'right',
8872 'bottom'
8873 ], []);
8874 var moveDown = function (caret, amount) {
8875 return nu$3({
8876 left: caret.left(),
8877 top: caret.top() + amount,
8878 right: caret.right(),
8879 bottom: caret.bottom() + amount
8880 });
8881 };
8882 var moveUp = function (caret, amount) {
8883 return nu$3({
8884 left: caret.left(),
8885 top: caret.top() - amount,
8886 right: caret.right(),
8887 bottom: caret.bottom() - amount
8888 });
8889 };
8890 var moveBottomTo = function (caret, bottom) {
8891 var height = caret.bottom() - caret.top();
8892 return nu$3({
8893 left: caret.left(),
8894 top: bottom - height,
8895 right: caret.right(),
8896 bottom: bottom
8897 });
8898 };
8899 var moveTopTo = function (caret, top) {
8900 var height = caret.bottom() - caret.top();
8901 return nu$3({
8902 left: caret.left(),
8903 top: top,
8904 right: caret.right(),
8905 bottom: top + height
8906 });
8907 };
8908 var translate = function (caret, xDelta, yDelta) {
8909 return nu$3({
8910 left: caret.left() + xDelta,
8911 top: caret.top() + yDelta,
8912 right: caret.right() + xDelta,
8913 bottom: caret.bottom() + yDelta
8914 });
8915 };
8916 var getTop$1 = function (caret) {
8917 return caret.top();
8918 };
8919 var getBottom = function (caret) {
8920 return caret.bottom();
8921 };
8922 var toString$1 = function (caret) {
8923 return '(' + caret.left() + ', ' + caret.top() + ') -> (' + caret.right() + ', ' + caret.bottom() + ')';
8924 };
8925 var $_37xezepjjfuw8r6q = {
8926 nu: nu$3,
8927 moveUp: moveUp,
8928 moveDown: moveDown,
8929 moveBottomTo: moveBottomTo,
8930 moveTopTo: moveTopTo,
8931 getTop: getTop$1,
8932 getBottom: getBottom,
8933 translate: translate,
8934 toString: toString$1
8935 };
8936
8937 var getPartialBox = function (bridge, element, offset) {
8938 if (offset >= 0 && offset < $_6vfowrlmjfuw8qbz.getEnd(element))
8939 return bridge.getRangedRect(element, offset, element, offset + 1);
8940 else if (offset > 0)
8941 return bridge.getRangedRect(element, offset - 1, element, offset);
8942 return Option.none();
8943 };
8944 var toCaret = function (rect) {
8945 return $_37xezepjjfuw8r6q.nu({
8946 left: rect.left,
8947 top: rect.top,
8948 right: rect.right,
8949 bottom: rect.bottom
8950 });
8951 };
8952 var getElemBox = function (bridge, element) {
8953 return Option.some(bridge.getRect(element));
8954 };
8955 var getBoxAt = function (bridge, element, offset) {
8956 if ($_a8gk30l6jfuw8q9c.isElement(element))
8957 return getElemBox(bridge, element).map(toCaret);
8958 else if ($_a8gk30l6jfuw8q9c.isText(element))
8959 return getPartialBox(bridge, element, offset).map(toCaret);
8960 else
8961 return Option.none();
8962 };
8963 var getEntireBox = function (bridge, element) {
8964 if ($_a8gk30l6jfuw8q9c.isElement(element))
8965 return getElemBox(bridge, element).map(toCaret);
8966 else if ($_a8gk30l6jfuw8q9c.isText(element))
8967 return bridge.getRangedRect(element, 0, element, $_6vfowrlmjfuw8qbz.getEnd(element)).map(toCaret);
8968 else
8969 return Option.none();
8970 };
8971 var $_8xl6tpkjfuw8r6u = {
8972 getBoxAt: getBoxAt,
8973 getEntireBox: getEntireBox
8974 };
8975
8976 var traverse = $_5now9kbjfuw8q5e.immutable('item', 'mode');
8977 var backtrack = function (universe, item, direction, _transition) {
8978 var transition = _transition !== undefined ? _transition : sidestep;
8979 return universe.property().parent(item).map(function (p) {
8980 return traverse(p, transition);
8981 });
8982 };
8983 var sidestep = function (universe, item, direction, _transition) {
8984 var transition = _transition !== undefined ? _transition : advance;
8985 return direction.sibling(universe, item).map(function (p) {
8986 return traverse(p, transition);
8987 });
8988 };
8989 var advance = function (universe, item, direction, _transition) {
8990 var transition = _transition !== undefined ? _transition : advance;
8991 var children = universe.property().children(item);
8992 var result = direction.first(children);
8993 return result.map(function (r) {
8994 return traverse(r, transition);
8995 });
8996 };
8997 var successors = [
8998 {
8999 current: backtrack,
9000 next: sidestep,
9001 fallback: Option.none()
9002 },
9003 {
9004 current: sidestep,
9005 next: advance,
9006 fallback: Option.some(backtrack)
9007 },
9008 {
9009 current: advance,
9010 next: advance,
9011 fallback: Option.some(sidestep)
9012 }
9013 ];
9014 var go$1 = function (universe, item, mode, direction, rules) {
9015 var rules = rules !== undefined ? rules : successors;
9016 var ruleOpt = $_tyr3yk5jfuw8q47.find(rules, function (succ) {
9017 return succ.current === mode;
9018 });
9019 return ruleOpt.bind(function (rule) {
9020 return rule.current(universe, item, direction, rule.next).orThunk(function () {
9021 return rule.fallback.bind(function (fb) {
9022 return go$1(universe, item, fb, direction);
9023 });
9024 });
9025 });
9026 };
9027 var $_12nww3ppjfuw8r7x = {
9028 backtrack: backtrack,
9029 sidestep: sidestep,
9030 advance: advance,
9031 go: go$1
9032 };
9033
9034 var left$1 = function () {
9035 var sibling = function (universe, item) {
9036 return universe.query().prevSibling(item);
9037 };
9038 var first = function (children) {
9039 return children.length > 0 ? Option.some(children[children.length - 1]) : Option.none();
9040 };
9041 return {
9042 sibling: sibling,
9043 first: first
9044 };
9045 };
9046 var right$1 = function () {
9047 var sibling = function (universe, item) {
9048 return universe.query().nextSibling(item);
9049 };
9050 var first = function (children) {
9051 return children.length > 0 ? Option.some(children[0]) : Option.none();
9052 };
9053 return {
9054 sibling: sibling,
9055 first: first
9056 };
9057 };
9058 var $_135xakpqjfuw8r85 = {
9059 left: left$1,
9060 right: right$1
9061 };
9062
9063 var hone = function (universe, item, predicate, mode, direction, isRoot) {
9064 var next = $_12nww3ppjfuw8r7x.go(universe, item, mode, direction);
9065 return next.bind(function (n) {
9066 if (isRoot(n.item()))
9067 return Option.none();
9068 else
9069 return predicate(n.item()) ? Option.some(n.item()) : hone(universe, n.item(), predicate, n.mode(), direction, isRoot);
9070 });
9071 };
9072 var left$2 = function (universe, item, predicate, isRoot) {
9073 return hone(universe, item, predicate, $_12nww3ppjfuw8r7x.sidestep, $_135xakpqjfuw8r85.left(), isRoot);
9074 };
9075 var right$2 = function (universe, item, predicate, isRoot) {
9076 return hone(universe, item, predicate, $_12nww3ppjfuw8r7x.sidestep, $_135xakpqjfuw8r85.right(), isRoot);
9077 };
9078 var $_6b0zg3pojfuw8r7t = {
9079 left: left$2,
9080 right: right$2
9081 };
9082
9083 var isLeaf = function (universe, element) {
9084 return universe.property().children(element).length === 0;
9085 };
9086 var before$2 = function (universe, item, isRoot) {
9087 return seekLeft(universe, item, $_20nfr6k7jfuw8q4g.curry(isLeaf, universe), isRoot);
9088 };
9089 var after$3 = function (universe, item, isRoot) {
9090 return seekRight(universe, item, $_20nfr6k7jfuw8q4g.curry(isLeaf, universe), isRoot);
9091 };
9092 var seekLeft = function (universe, item, predicate, isRoot) {
9093 return $_6b0zg3pojfuw8r7t.left(universe, item, predicate, isRoot);
9094 };
9095 var seekRight = function (universe, item, predicate, isRoot) {
9096 return $_6b0zg3pojfuw8r7t.right(universe, item, predicate, isRoot);
9097 };
9098 var walkers = function () {
9099 return {
9100 left: $_135xakpqjfuw8r85.left,
9101 right: $_135xakpqjfuw8r85.right
9102 };
9103 };
9104 var walk = function (universe, item, mode, direction, _rules) {
9105 return $_12nww3ppjfuw8r7x.go(universe, item, mode, direction, _rules);
9106 };
9107 var $_fivsmpnjfuw8r7p = {
9108 before: before$2,
9109 after: after$3,
9110 seekLeft: seekLeft,
9111 seekRight: seekRight,
9112 walkers: walkers,
9113 walk: walk,
9114 backtrack: $_12nww3ppjfuw8r7x.backtrack,
9115 sidestep: $_12nww3ppjfuw8r7x.sidestep,
9116 advance: $_12nww3ppjfuw8r7x.advance
9117 };
9118
9119 var universe$2 = DomUniverse();
9120 var gather = function (element, prune, transform) {
9121 return $_fivsmpnjfuw8r7p.gather(universe$2, element, prune, transform);
9122 };
9123 var before$3 = function (element, isRoot) {
9124 return $_fivsmpnjfuw8r7p.before(universe$2, element, isRoot);
9125 };
9126 var after$4 = function (element, isRoot) {
9127 return $_fivsmpnjfuw8r7p.after(universe$2, element, isRoot);
9128 };
9129 var seekLeft$1 = function (element, predicate, isRoot) {
9130 return $_fivsmpnjfuw8r7p.seekLeft(universe$2, element, predicate, isRoot);
9131 };
9132 var seekRight$1 = function (element, predicate, isRoot) {
9133 return $_fivsmpnjfuw8r7p.seekRight(universe$2, element, predicate, isRoot);
9134 };
9135 var walkers$1 = function () {
9136 return $_fivsmpnjfuw8r7p.walkers();
9137 };
9138 var walk$1 = function (item, mode, direction, _rules) {
9139 return $_fivsmpnjfuw8r7p.walk(universe$2, item, mode, direction, _rules);
9140 };
9141 var $_fgafb6pmjfuw8r7l = {
9142 gather: gather,
9143 before: before$3,
9144 after: after$4,
9145 seekLeft: seekLeft$1,
9146 seekRight: seekRight$1,
9147 walkers: walkers$1,
9148 walk: walk$1
9149 };
9150
9151 var JUMP_SIZE = 5;
9152 var NUM_RETRIES = 100;
9153 var adt$2 = $_7sbzam7jfuw8qgu.generate([
9154 {'none': []},
9155 {'retry': ['caret']}
9156 ]);
9157 var isOutside = function (caret, box) {
9158 return caret.left() < box.left() || Math.abs(box.right() - caret.left()) < 1 || caret.left() > box.right();
9159 };
9160 var inOutsideBlock = function (bridge, element, caret) {
9161 return $_11ympzlbjfuw8q9n.closest(element, $_d9tdqtmrjfuw8ql9.isBlock).fold($_20nfr6k7jfuw8q4g.constant(false), function (cell) {
9162 return $_8xl6tpkjfuw8r6u.getEntireBox(bridge, cell).exists(function (box) {
9163 return isOutside(caret, box);
9164 });
9165 });
9166 };
9167 var adjustDown = function (bridge, element, guessBox, original, caret) {
9168 var lowerCaret = $_37xezepjjfuw8r6q.moveDown(caret, JUMP_SIZE);
9169 if (Math.abs(guessBox.bottom() - original.bottom()) < 1)
9170 return adt$2.retry(lowerCaret);
9171 else if (guessBox.top() > caret.bottom())
9172 return adt$2.retry(lowerCaret);
9173 else if (guessBox.top() === caret.bottom())
9174 return adt$2.retry($_37xezepjjfuw8r6q.moveDown(caret, 1));
9175 else
9176 return inOutsideBlock(bridge, element, caret) ? adt$2.retry($_37xezepjjfuw8r6q.translate(lowerCaret, JUMP_SIZE, 0)) : adt$2.none();
9177 };
9178 var adjustUp = function (bridge, element, guessBox, original, caret) {
9179 var higherCaret = $_37xezepjjfuw8r6q.moveUp(caret, JUMP_SIZE);
9180 if (Math.abs(guessBox.top() - original.top()) < 1)
9181 return adt$2.retry(higherCaret);
9182 else if (guessBox.bottom() < caret.top())
9183 return adt$2.retry(higherCaret);
9184 else if (guessBox.bottom() === caret.top())
9185 return adt$2.retry($_37xezepjjfuw8r6q.moveUp(caret, 1));
9186 else
9187 return inOutsideBlock(bridge, element, caret) ? adt$2.retry($_37xezepjjfuw8r6q.translate(higherCaret, JUMP_SIZE, 0)) : adt$2.none();
9188 };
9189 var upMovement = {
9190 point: $_37xezepjjfuw8r6q.getTop,
9191 adjuster: adjustUp,
9192 move: $_37xezepjjfuw8r6q.moveUp,
9193 gather: $_fgafb6pmjfuw8r7l.before
9194 };
9195 var downMovement = {
9196 point: $_37xezepjjfuw8r6q.getBottom,
9197 adjuster: adjustDown,
9198 move: $_37xezepjjfuw8r6q.moveDown,
9199 gather: $_fgafb6pmjfuw8r7l.after
9200 };
9201 var isAtTable = function (bridge, x, y) {
9202 return bridge.elementFromPoint(x, y).filter(function (elm) {
9203 return $_a8gk30l6jfuw8q9c.name(elm) === 'table';
9204 }).isSome();
9205 };
9206 var adjustForTable = function (bridge, movement, original, caret, numRetries) {
9207 return adjustTil(bridge, movement, original, movement.move(caret, JUMP_SIZE), numRetries);
9208 };
9209 var adjustTil = function (bridge, movement, original, caret, numRetries) {
9210 if (numRetries === 0)
9211 return Option.some(caret);
9212 if (isAtTable(bridge, caret.left(), movement.point(caret)))
9213 return adjustForTable(bridge, movement, original, caret, numRetries - 1);
9214 return bridge.situsFromPoint(caret.left(), movement.point(caret)).bind(function (guess) {
9215 return guess.start().fold(Option.none, function (element, offset) {
9216 return $_8xl6tpkjfuw8r6u.getEntireBox(bridge, element, offset).bind(function (guessBox) {
9217 return movement.adjuster(bridge, element, guessBox, original, caret).fold(Option.none, function (newCaret) {
9218 return adjustTil(bridge, movement, original, newCaret, numRetries - 1);
9219 });
9220 }).orThunk(function () {
9221 return Option.some(caret);
9222 });
9223 }, Option.none);
9224 });
9225 };
9226 var ieTryDown = function (bridge, caret) {
9227 return bridge.situsFromPoint(caret.left(), caret.bottom() + JUMP_SIZE);
9228 };
9229 var ieTryUp = function (bridge, caret) {
9230 return bridge.situsFromPoint(caret.left(), caret.top() - JUMP_SIZE);
9231 };
9232 var checkScroll = function (movement, adjusted, bridge) {
9233 if (movement.point(adjusted) > bridge.getInnerHeight())
9234 return Option.some(movement.point(adjusted) - bridge.getInnerHeight());
9235 else if (movement.point(adjusted) < 0)
9236 return Option.some(-movement.point(adjusted));
9237 else
9238 return Option.none();
9239 };
9240 var retry = function (movement, bridge, caret) {
9241 var moved = movement.move(caret, JUMP_SIZE);
9242 var adjusted = adjustTil(bridge, movement, caret, moved, NUM_RETRIES).getOr(moved);
9243 return checkScroll(movement, adjusted, bridge).fold(function () {
9244 return bridge.situsFromPoint(adjusted.left(), movement.point(adjusted));
9245 }, function (delta) {
9246 bridge.scrollBy(0, delta);
9247 return bridge.situsFromPoint(adjusted.left(), movement.point(adjusted) - delta);
9248 });
9249 };
9250 var $_efciv1pljfuw8r73 = {
9251 tryUp: $_20nfr6k7jfuw8q4g.curry(retry, upMovement),
9252 tryDown: $_20nfr6k7jfuw8q4g.curry(retry, downMovement),
9253 ieTryUp: ieTryUp,
9254 ieTryDown: ieTryDown,
9255 getJumpSize: $_20nfr6k7jfuw8q4g.constant(JUMP_SIZE)
9256 };
9257
9258 var adt$3 = $_7sbzam7jfuw8qgu.generate([
9259 {'none': ['message']},
9260 {'success': []},
9261 {'failedUp': ['cell']},
9262 {'failedDown': ['cell']}
9263 ]);
9264 var isOverlapping = function (bridge, before, after) {
9265 var beforeBounds = bridge.getRect(before);
9266 var afterBounds = bridge.getRect(after);
9267 return afterBounds.right > beforeBounds.left && afterBounds.left < beforeBounds.right;
9268 };
9269 var verify = function (bridge, before, beforeOffset, after, afterOffset, failure, isRoot) {
9270 return $_8wdrbmlajfuw8q9m.closest(after, 'td,th', isRoot).bind(function (afterCell) {
9271 return $_8wdrbmlajfuw8q9m.closest(before, 'td,th', isRoot).map(function (beforeCell) {
9272 if (!$_e8rn66kojfuw8q7n.eq(afterCell, beforeCell)) {
9273 return $_583a2nlujfuw8qdw.sharedOne(isRow, [
9274 afterCell,
9275 beforeCell
9276 ]).fold(function () {
9277 return isOverlapping(bridge, beforeCell, afterCell) ? adt$3.success() : failure(beforeCell);
9278 }, function (sharedRow) {
9279 return failure(beforeCell);
9280 });
9281 } else {
9282 return $_e8rn66kojfuw8q7n.eq(after, afterCell) && $_6vfowrlmjfuw8qbz.getEnd(afterCell) === afterOffset ? failure(beforeCell) : adt$3.none('in same cell');
9283 }
9284 });
9285 }).getOr(adt$3.none('default'));
9286 };
9287 var isRow = function (elem) {
9288 return $_8wdrbmlajfuw8q9m.closest(elem, 'tr');
9289 };
9290 var cata$2 = function (subject, onNone, onSuccess, onFailedUp, onFailedDown) {
9291 return subject.fold(onNone, onSuccess, onFailedUp, onFailedDown);
9292 };
9293 var $_25fydhprjfuw8r89 = {
9294 verify: verify,
9295 cata: cata$2,
9296 adt: adt$3
9297 };
9298
9299 var point = $_5now9kbjfuw8q5e.immutable('element', 'offset');
9300 var delta = $_5now9kbjfuw8q5e.immutable('element', 'deltaOffset');
9301 var range$3 = $_5now9kbjfuw8q5e.immutable('element', 'start', 'finish');
9302 var points = $_5now9kbjfuw8q5e.immutable('begin', 'end');
9303 var text = $_5now9kbjfuw8q5e.immutable('element', 'text');
9304 var $_1kct4uptjfuw8r98 = {
9305 point: point,
9306 delta: delta,
9307 range: range$3,
9308 points: points,
9309 text: text
9310 };
9311
9312 var inAncestor = $_5now9kbjfuw8q5e.immutable('ancestor', 'descendants', 'element', 'index');
9313 var inParent = $_5now9kbjfuw8q5e.immutable('parent', 'children', 'element', 'index');
9314 var childOf = function (element, ancestor) {
9315 return $_11ympzlbjfuw8q9n.closest(element, function (elem) {
9316 return $_s8scrkmjfuw8q7a.parent(elem).exists(function (parent) {
9317 return $_e8rn66kojfuw8q7n.eq(parent, ancestor);
9318 });
9319 });
9320 };
9321 var indexInParent = function (element) {
9322 return $_s8scrkmjfuw8q7a.parent(element).bind(function (parent) {
9323 var children = $_s8scrkmjfuw8q7a.children(parent);
9324 return indexOf$1(children, element).map(function (index) {
9325 return inParent(parent, children, element, index);
9326 });
9327 });
9328 };
9329 var indexOf$1 = function (elements, element) {
9330 return $_tyr3yk5jfuw8q47.findIndex(elements, $_20nfr6k7jfuw8q4g.curry($_e8rn66kojfuw8q7n.eq, element));
9331 };
9332 var selectorsInParent = function (element, selector) {
9333 return $_s8scrkmjfuw8q7a.parent(element).bind(function (parent) {
9334 var children = $_6c9d0hl7jfuw8q9d.children(parent, selector);
9335 return indexOf$1(children, element).map(function (index) {
9336 return inParent(parent, children, element, index);
9337 });
9338 });
9339 };
9340 var descendantsInAncestor = function (element, ancestorSelector, descendantSelector) {
9341 return $_8wdrbmlajfuw8q9m.closest(element, ancestorSelector).bind(function (ancestor) {
9342 var descendants = $_6c9d0hl7jfuw8q9d.descendants(ancestor, descendantSelector);
9343 return indexOf$1(descendants, element).map(function (index) {
9344 return inAncestor(ancestor, descendants, element, index);
9345 });
9346 });
9347 };
9348 var $_cz3gbvpujfuw8r9c = {
9349 childOf: childOf,
9350 indexOf: indexOf$1,
9351 indexInParent: indexInParent,
9352 selectorsInParent: selectorsInParent,
9353 descendantsInAncestor: descendantsInAncestor
9354 };
9355
9356 var isBr = function (elem) {
9357 return $_a8gk30l6jfuw8q9c.name(elem) === 'br';
9358 };
9359 var gatherer = function (cand, gather, isRoot) {
9360 return gather(cand, isRoot).bind(function (target) {
9361 return $_a8gk30l6jfuw8q9c.isText(target) && $_6j8y7blnjfuw8qc3.get(target).trim().length === 0 ? gatherer(target, gather, isRoot) : Option.some(target);
9362 });
9363 };
9364 var handleBr = function (isRoot, element, direction) {
9365 return direction.traverse(element).orThunk(function () {
9366 return gatherer(element, direction.gather, isRoot);
9367 }).map(direction.relative);
9368 };
9369 var findBr = function (element, offset) {
9370 return $_s8scrkmjfuw8q7a.child(element, offset).filter(isBr).orThunk(function () {
9371 return $_s8scrkmjfuw8q7a.child(element, offset - 1).filter(isBr);
9372 });
9373 };
9374 var handleParent = function (isRoot, element, offset, direction) {
9375 return findBr(element, offset).bind(function (br) {
9376 return direction.traverse(br).fold(function () {
9377 return gatherer(br, direction.gather, isRoot).map(direction.relative);
9378 }, function (adjacent) {
9379 return $_cz3gbvpujfuw8r9c.indexInParent(adjacent).map(function (info) {
9380 return $_cuk0n0ovjfuw8r0r.on(info.parent(), info.index());
9381 });
9382 });
9383 });
9384 };
9385 var tryBr = function (isRoot, element, offset, direction) {
9386 var target = isBr(element) ? handleBr(isRoot, element, direction) : handleParent(isRoot, element, offset, direction);
9387 return target.map(function (tgt) {
9388 return {
9389 start: $_20nfr6k7jfuw8q4g.constant(tgt),
9390 finish: $_20nfr6k7jfuw8q4g.constant(tgt)
9391 };
9392 });
9393 };
9394 var process = function (analysis) {
9395 return $_25fydhprjfuw8r89.cata(analysis, function (message) {
9396 return Option.none();
9397 }, function () {
9398 return Option.none();
9399 }, function (cell) {
9400 return Option.some($_1kct4uptjfuw8r98.point(cell, 0));
9401 }, function (cell) {
9402 return Option.some($_1kct4uptjfuw8r98.point(cell, $_6vfowrlmjfuw8qbz.getEnd(cell)));
9403 });
9404 };
9405 var $_62az2spsjfuw8r8p = {
9406 tryBr: tryBr,
9407 process: process
9408 };
9409
9410 var MAX_RETRIES = 20;
9411 var platform$1 = $_fqgee0ktjfuw8q83.detect();
9412 var findSpot = function (bridge, isRoot, direction) {
9413 return bridge.getSelection().bind(function (sel) {
9414 return $_62az2spsjfuw8r8p.tryBr(isRoot, sel.finish(), sel.foffset(), direction).fold(function () {
9415 return Option.some($_1kct4uptjfuw8r98.point(sel.finish(), sel.foffset()));
9416 }, function (brNeighbour) {
9417 var range = bridge.fromSitus(brNeighbour);
9418 var analysis = $_25fydhprjfuw8r89.verify(bridge, sel.finish(), sel.foffset(), range.finish(), range.foffset(), direction.failure, isRoot);
9419 return $_62az2spsjfuw8r8p.process(analysis);
9420 });
9421 });
9422 };
9423 var scan = function (bridge, isRoot, element, offset, direction, numRetries) {
9424 if (numRetries === 0)
9425 return Option.none();
9426 return tryCursor(bridge, isRoot, element, offset, direction).bind(function (situs) {
9427 var range = bridge.fromSitus(situs);
9428 var analysis = $_25fydhprjfuw8r89.verify(bridge, element, offset, range.finish(), range.foffset(), direction.failure, isRoot);
9429 return $_25fydhprjfuw8r89.cata(analysis, function () {
9430 return Option.none();
9431 }, function () {
9432 return Option.some(situs);
9433 }, function (cell) {
9434 if ($_e8rn66kojfuw8q7n.eq(element, cell) && offset === 0)
9435 return tryAgain(bridge, element, offset, $_37xezepjjfuw8r6q.moveUp, direction);
9436 else
9437 return scan(bridge, isRoot, cell, 0, direction, numRetries - 1);
9438 }, function (cell) {
9439 if ($_e8rn66kojfuw8q7n.eq(element, cell) && offset === $_6vfowrlmjfuw8qbz.getEnd(cell))
9440 return tryAgain(bridge, element, offset, $_37xezepjjfuw8r6q.moveDown, direction);
9441 else
9442 return scan(bridge, isRoot, cell, $_6vfowrlmjfuw8qbz.getEnd(cell), direction, numRetries - 1);
9443 });
9444 });
9445 };
9446 var tryAgain = function (bridge, element, offset, move, direction) {
9447 return $_8xl6tpkjfuw8r6u.getBoxAt(bridge, element, offset).bind(function (box) {
9448 return tryAt(bridge, direction, move(box, $_efciv1pljfuw8r73.getJumpSize()));
9449 });
9450 };
9451 var tryAt = function (bridge, direction, box) {
9452 if (platform$1.browser.isChrome() || platform$1.browser.isSafari() || platform$1.browser.isFirefox() || platform$1.browser.isEdge())
9453 return direction.otherRetry(bridge, box);
9454 else if (platform$1.browser.isIE())
9455 return direction.ieRetry(bridge, box);
9456 else
9457 return Option.none();
9458 };
9459 var tryCursor = function (bridge, isRoot, element, offset, direction) {
9460 return $_8xl6tpkjfuw8r6u.getBoxAt(bridge, element, offset).bind(function (box) {
9461 return tryAt(bridge, direction, box);
9462 });
9463 };
9464 var handle$2 = function (bridge, isRoot, direction) {
9465 return findSpot(bridge, isRoot, direction).bind(function (spot) {
9466 return scan(bridge, isRoot, spot.element(), spot.offset(), direction, MAX_RETRIES).map(bridge.fromSitus);
9467 });
9468 };
9469 var $_fxzqelpijfuw8r6a = {handle: handle$2};
9470
9471 var any$1 = function (predicate) {
9472 return $_11ympzlbjfuw8q9n.first(predicate).isSome();
9473 };
9474 var ancestor$3 = function (scope, predicate, isRoot) {
9475 return $_11ympzlbjfuw8q9n.ancestor(scope, predicate, isRoot).isSome();
9476 };
9477 var closest$3 = function (scope, predicate, isRoot) {
9478 return $_11ympzlbjfuw8q9n.closest(scope, predicate, isRoot).isSome();
9479 };
9480 var sibling$3 = function (scope, predicate) {
9481 return $_11ympzlbjfuw8q9n.sibling(scope, predicate).isSome();
9482 };
9483 var child$4 = function (scope, predicate) {
9484 return $_11ympzlbjfuw8q9n.child(scope, predicate).isSome();
9485 };
9486 var descendant$3 = function (scope, predicate) {
9487 return $_11ympzlbjfuw8q9n.descendant(scope, predicate).isSome();
9488 };
9489 var $_cs6t5xpvjfuw8r9l = {
9490 any: any$1,
9491 ancestor: ancestor$3,
9492 closest: closest$3,
9493 sibling: sibling$3,
9494 child: child$4,
9495 descendant: descendant$3
9496 };
9497
9498 var detection = $_fqgee0ktjfuw8q83.detect();
9499 var inSameTable = function (elem, table) {
9500 return $_cs6t5xpvjfuw8r9l.ancestor(elem, function (e) {
9501 return $_s8scrkmjfuw8q7a.parent(e).exists(function (p) {
9502 return $_e8rn66kojfuw8q7n.eq(p, table);
9503 });
9504 });
9505 };
9506 var simulate = function (bridge, isRoot, direction, initial, anchor) {
9507 return $_8wdrbmlajfuw8q9m.closest(initial, 'td,th', isRoot).bind(function (start) {
9508 return $_8wdrbmlajfuw8q9m.closest(start, 'table', isRoot).bind(function (table) {
9509 if (!inSameTable(anchor, table))
9510 return Option.none();
9511 return $_fxzqelpijfuw8r6a.handle(bridge, isRoot, direction).bind(function (range) {
9512 return $_8wdrbmlajfuw8q9m.closest(range.finish(), 'td,th', isRoot).map(function (finish) {
9513 return {
9514 start: $_20nfr6k7jfuw8q4g.constant(start),
9515 finish: $_20nfr6k7jfuw8q4g.constant(finish),
9516 range: $_20nfr6k7jfuw8q4g.constant(range)
9517 };
9518 });
9519 });
9520 });
9521 });
9522 };
9523 var navigate = function (bridge, isRoot, direction, initial, anchor, precheck) {
9524 if (detection.browser.isIE()) {
9525 return Option.none();
9526 } else {
9527 return precheck(initial, isRoot).orThunk(function () {
9528 return simulate(bridge, isRoot, direction, initial, anchor).map(function (info) {
9529 var range = info.range();
9530 return $_b7ap4hpbjfuw8r3x.response(Option.some($_81eh29pejfuw8r4k.makeSitus(range.start(), range.soffset(), range.finish(), range.foffset())), true);
9531 });
9532 });
9533 }
9534 };
9535 var firstUpCheck = function (initial, isRoot) {
9536 return $_8wdrbmlajfuw8q9m.closest(initial, 'tr', isRoot).bind(function (startRow) {
9537 return $_8wdrbmlajfuw8q9m.closest(startRow, 'table', isRoot).bind(function (table) {
9538 var rows = $_6c9d0hl7jfuw8q9d.descendants(table, 'tr');
9539 if ($_e8rn66kojfuw8q7n.eq(startRow, rows[0])) {
9540 return $_fgafb6pmjfuw8r7l.seekLeft(table, function (element) {
9541 return $_ejrzj4lljfuw8qbw.last(element).isSome();
9542 }, isRoot).map(function (last) {
9543 var lastOffset = $_6vfowrlmjfuw8qbz.getEnd(last);
9544 return $_b7ap4hpbjfuw8r3x.response(Option.some($_81eh29pejfuw8r4k.makeSitus(last, lastOffset, last, lastOffset)), true);
9545 });
9546 } else {
9547 return Option.none();
9548 }
9549 });
9550 });
9551 };
9552 var lastDownCheck = function (initial, isRoot) {
9553 return $_8wdrbmlajfuw8q9m.closest(initial, 'tr', isRoot).bind(function (startRow) {
9554 return $_8wdrbmlajfuw8q9m.closest(startRow, 'table', isRoot).bind(function (table) {
9555 var rows = $_6c9d0hl7jfuw8q9d.descendants(table, 'tr');
9556 if ($_e8rn66kojfuw8q7n.eq(startRow, rows[rows.length - 1])) {
9557 return $_fgafb6pmjfuw8r7l.seekRight(table, function (element) {
9558 return $_ejrzj4lljfuw8qbw.first(element).isSome();
9559 }, isRoot).map(function (first) {
9560 return $_b7ap4hpbjfuw8r3x.response(Option.some($_81eh29pejfuw8r4k.makeSitus(first, 0, first, 0)), true);
9561 });
9562 } else {
9563 return Option.none();
9564 }
9565 });
9566 });
9567 };
9568 var select = function (bridge, container, isRoot, direction, initial, anchor, selectRange) {
9569 return simulate(bridge, isRoot, direction, initial, anchor).bind(function (info) {
9570 return $_7ulhzpgjfuw8r5b.detect(container, isRoot, info.start(), info.finish(), selectRange);
9571 });
9572 };
9573 var $_4f08xvphjfuw8r5l = {
9574 navigate: navigate,
9575 select: select,
9576 firstUpCheck: firstUpCheck,
9577 lastDownCheck: lastDownCheck
9578 };
9579
9580 var findCell = function (target, isRoot) {
9581 return $_8wdrbmlajfuw8q9m.closest(target, 'td,th', isRoot);
9582 };
9583
9584 function MouseSelection(bridge, container, isRoot, annotations) {
9585 var cursor = Option.none();
9586 var clearState = function () {
9587 cursor = Option.none();
9588 };
9589 var mousedown = function (event) {
9590 annotations.clear(container);
9591 cursor = findCell(event.target(), isRoot);
9592 };
9593 var mouseover = function (event) {
9594 cursor.each(function (start) {
9595 annotations.clear(container);
9596 findCell(event.target(), isRoot).each(function (finish) {
9597 $_dpd405ltjfuw8qd8.identify(start, finish, isRoot).each(function (cellSel) {
9598 var boxes = cellSel.boxes().getOr([]);
9599 if (boxes.length > 1 || boxes.length === 1 && !$_e8rn66kojfuw8q7n.eq(start, finish)) {
9600 annotations.selectRange(container, boxes, cellSel.start(), cellSel.finish());
9601 bridge.selectContents(finish);
9602 }
9603 });
9604 });
9605 });
9606 };
9607 var mouseup = function () {
9608 cursor.each(clearState);
9609 };
9610 return {
9611 mousedown: mousedown,
9612 mouseover: mouseover,
9613 mouseup: mouseup
9614 };
9615 }
9616
9617 var $_9alrp8pxjfuw8r9w = {
9618 down: {
9619 traverse: $_s8scrkmjfuw8q7a.nextSibling,
9620 gather: $_fgafb6pmjfuw8r7l.after,
9621 relative: $_cuk0n0ovjfuw8r0r.before,
9622 otherRetry: $_efciv1pljfuw8r73.tryDown,
9623 ieRetry: $_efciv1pljfuw8r73.ieTryDown,
9624 failure: $_25fydhprjfuw8r89.adt.failedDown
9625 },
9626 up: {
9627 traverse: $_s8scrkmjfuw8q7a.prevSibling,
9628 gather: $_fgafb6pmjfuw8r7l.before,
9629 relative: $_cuk0n0ovjfuw8r0r.before,
9630 otherRetry: $_efciv1pljfuw8r73.tryUp,
9631 ieRetry: $_efciv1pljfuw8r73.ieTryUp,
9632 failure: $_25fydhprjfuw8r89.adt.failedUp
9633 }
9634 };
9635
9636 var rc = $_5now9kbjfuw8q5e.immutable('rows', 'cols');
9637 var mouse = function (win, container, isRoot, annotations) {
9638 var bridge = WindowBridge(win);
9639 var handlers = MouseSelection(bridge, container, isRoot, annotations);
9640 return {
9641 mousedown: handlers.mousedown,
9642 mouseover: handlers.mouseover,
9643 mouseup: handlers.mouseup
9644 };
9645 };
9646 var keyboard = function (win, container, isRoot, annotations) {
9647 var bridge = WindowBridge(win);
9648 var clearToNavigate = function () {
9649 annotations.clear(container);
9650 return Option.none();
9651 };
9652 var keydown = function (event, start, soffset, finish, foffset, direction) {
9653 var keycode = event.raw().which;
9654 var shiftKey = event.raw().shiftKey === true;
9655 var handler = $_dpd405ltjfuw8qd8.retrieve(container, annotations.selectedSelector()).fold(function () {
9656 if ($_9n04otpcjfuw8r40.isDown(keycode) && shiftKey) {
9657 return $_20nfr6k7jfuw8q4g.curry($_4f08xvphjfuw8r5l.select, bridge, container, isRoot, $_9alrp8pxjfuw8r9w.down, finish, start, annotations.selectRange);
9658 } else if ($_9n04otpcjfuw8r40.isUp(keycode) && shiftKey) {
9659 return $_20nfr6k7jfuw8q4g.curry($_4f08xvphjfuw8r5l.select, bridge, container, isRoot, $_9alrp8pxjfuw8r9w.up, finish, start, annotations.selectRange);
9660 } else if ($_9n04otpcjfuw8r40.isDown(keycode)) {
9661 return $_20nfr6k7jfuw8q4g.curry($_4f08xvphjfuw8r5l.navigate, bridge, isRoot, $_9alrp8pxjfuw8r9w.down, finish, start, $_4f08xvphjfuw8r5l.lastDownCheck);
9662 } else if ($_9n04otpcjfuw8r40.isUp(keycode)) {
9663 return $_20nfr6k7jfuw8q4g.curry($_4f08xvphjfuw8r5l.navigate, bridge, isRoot, $_9alrp8pxjfuw8r9w.up, finish, start, $_4f08xvphjfuw8r5l.firstUpCheck);
9664 } else {
9665 return Option.none;
9666 }
9667 }, function (selected) {
9668 var update = function (attempts) {
9669 return function () {
9670 var navigation = $_cul8qomvjfuw8qm7.findMap(attempts, function (delta) {
9671 return $_7ulhzpgjfuw8r5b.update(delta.rows(), delta.cols(), container, selected, annotations);
9672 });
9673 return navigation.fold(function () {
9674 return $_dpd405ltjfuw8qd8.getEdges(container, annotations.firstSelectedSelector(), annotations.lastSelectedSelector()).map(function (edges) {
9675 var relative = $_9n04otpcjfuw8r40.isDown(keycode) || direction.isForward(keycode) ? $_cuk0n0ovjfuw8r0r.after : $_cuk0n0ovjfuw8r0r.before;
9676 bridge.setRelativeSelection($_cuk0n0ovjfuw8r0r.on(edges.first(), 0), relative(edges.table()));
9677 annotations.clear(container);
9678 return $_b7ap4hpbjfuw8r3x.response(Option.none(), true);
9679 });
9680 }, function (_) {
9681 return Option.some($_b7ap4hpbjfuw8r3x.response(Option.none(), true));
9682 });
9683 };
9684 };
9685 if ($_9n04otpcjfuw8r40.isDown(keycode) && shiftKey)
9686 return update([rc(+1, 0)]);
9687 else if ($_9n04otpcjfuw8r40.isUp(keycode) && shiftKey)
9688 return update([rc(-1, 0)]);
9689 else if (direction.isBackward(keycode) && shiftKey)
9690 return update([
9691 rc(0, -1),
9692 rc(-1, 0)
9693 ]);
9694 else if (direction.isForward(keycode) && shiftKey)
9695 return update([
9696 rc(0, +1),
9697 rc(+1, 0)
9698 ]);
9699 else if ($_9n04otpcjfuw8r40.isNavigation(keycode) && shiftKey === false)
9700 return clearToNavigate;
9701 else
9702 return Option.none;
9703 });
9704 return handler();
9705 };
9706 var keyup = function (event, start, soffset, finish, foffset) {
9707 return $_dpd405ltjfuw8qd8.retrieve(container, annotations.selectedSelector()).fold(function () {
9708 var keycode = event.raw().which;
9709 var shiftKey = event.raw().shiftKey === true;
9710 if (shiftKey === false)
9711 return Option.none();
9712 if ($_9n04otpcjfuw8r40.isNavigation(keycode))
9713 return $_7ulhzpgjfuw8r5b.sync(container, isRoot, start, soffset, finish, foffset, annotations.selectRange);
9714 else
9715 return Option.none();
9716 }, Option.none);
9717 };
9718 return {
9719 keydown: keydown,
9720 keyup: keyup
9721 };
9722 };
9723 var $_ev8thhpajfuw8r3k = {
9724 mouse: mouse,
9725 keyboard: keyboard
9726 };
9727
9728 var add$3 = function (element, classes) {
9729 $_tyr3yk5jfuw8q47.each(classes, function (x) {
9730 $_fmcseon6jfuw8qou.add(element, x);
9731 });
9732 };
9733 var remove$7 = function (element, classes) {
9734 $_tyr3yk5jfuw8q47.each(classes, function (x) {
9735 $_fmcseon6jfuw8qou.remove(element, x);
9736 });
9737 };
9738 var toggle$2 = function (element, classes) {
9739 $_tyr3yk5jfuw8q47.each(classes, function (x) {
9740 $_fmcseon6jfuw8qou.toggle(element, x);
9741 });
9742 };
9743 var hasAll = function (element, classes) {
9744 return $_tyr3yk5jfuw8q47.forall(classes, function (clazz) {
9745 return $_fmcseon6jfuw8qou.has(element, clazz);
9746 });
9747 };
9748 var hasAny = function (element, classes) {
9749 return $_tyr3yk5jfuw8q47.exists(classes, function (clazz) {
9750 return $_fmcseon6jfuw8qou.has(element, clazz);
9751 });
9752 };
9753 var getNative = function (element) {
9754 var classList = element.dom().classList;
9755 var r = new Array(classList.length);
9756 for (var i = 0; i < classList.length; i++) {
9757 r[i] = classList.item(i);
9758 }
9759 return r;
9760 };
9761 var get$11 = function (element) {
9762 return $_f4rpvun8jfuw8qox.supports(element) ? getNative(element) : $_f4rpvun8jfuw8qox.get(element);
9763 };
9764 var $_6cu9bpq0jfuw8ram = {
9765 add: add$3,
9766 remove: remove$7,
9767 toggle: toggle$2,
9768 hasAll: hasAll,
9769 hasAny: hasAny,
9770 get: get$11
9771 };
9772
9773 var addClass = function (clazz) {
9774 return function (element) {
9775 $_fmcseon6jfuw8qou.add(element, clazz);
9776 };
9777 };
9778 var removeClass = function (clazz) {
9779 return function (element) {
9780 $_fmcseon6jfuw8qou.remove(element, clazz);
9781 };
9782 };
9783 var removeClasses = function (classes) {
9784 return function (element) {
9785 $_6cu9bpq0jfuw8ram.remove(element, classes);
9786 };
9787 };
9788 var hasClass = function (clazz) {
9789 return function (element) {
9790 return $_fmcseon6jfuw8qou.has(element, clazz);
9791 };
9792 };
9793 var $_5za372pzjfuw8rak = {
9794 addClass: addClass,
9795 removeClass: removeClass,
9796 removeClasses: removeClasses,
9797 hasClass: hasClass
9798 };
9799
9800 var byClass = function (ephemera) {
9801 var addSelectionClass = $_5za372pzjfuw8rak.addClass(ephemera.selected());
9802 var removeSelectionClasses = $_5za372pzjfuw8rak.removeClasses([
9803 ephemera.selected(),
9804 ephemera.lastSelected(),
9805 ephemera.firstSelected()
9806 ]);
9807 var clear = function (container) {
9808 var sels = $_6c9d0hl7jfuw8q9d.descendants(container, ephemera.selectedSelector());
9809 $_tyr3yk5jfuw8q47.each(sels, removeSelectionClasses);
9810 };
9811 var selectRange = function (container, cells, start, finish) {
9812 clear(container);
9813 $_tyr3yk5jfuw8q47.each(cells, addSelectionClass);
9814 $_fmcseon6jfuw8qou.add(start, ephemera.firstSelected());
9815 $_fmcseon6jfuw8qou.add(finish, ephemera.lastSelected());
9816 };
9817 return {
9818 clear: clear,
9819 selectRange: selectRange,
9820 selectedSelector: ephemera.selectedSelector,
9821 firstSelectedSelector: ephemera.firstSelectedSelector,
9822 lastSelectedSelector: ephemera.lastSelectedSelector
9823 };
9824 };
9825 var byAttr = function (ephemera) {
9826 var removeSelectionAttributes = function (element) {
9827 $_3q82t2l5jfuw8q93.remove(element, ephemera.selected());
9828 $_3q82t2l5jfuw8q93.remove(element, ephemera.firstSelected());
9829 $_3q82t2l5jfuw8q93.remove(element, ephemera.lastSelected());
9830 };
9831 var addSelectionAttribute = function (element) {
9832 $_3q82t2l5jfuw8q93.set(element, ephemera.selected(), '1');
9833 };
9834 var clear = function (container) {
9835 var sels = $_6c9d0hl7jfuw8q9d.descendants(container, ephemera.selectedSelector());
9836 $_tyr3yk5jfuw8q47.each(sels, removeSelectionAttributes);
9837 };
9838 var selectRange = function (container, cells, start, finish) {
9839 clear(container);
9840 $_tyr3yk5jfuw8q47.each(cells, addSelectionAttribute);
9841 $_3q82t2l5jfuw8q93.set(start, ephemera.firstSelected(), '1');
9842 $_3q82t2l5jfuw8q93.set(finish, ephemera.lastSelected(), '1');
9843 };
9844 return {
9845 clear: clear,
9846 selectRange: selectRange,
9847 selectedSelector: ephemera.selectedSelector,
9848 firstSelectedSelector: ephemera.firstSelectedSelector,
9849 lastSelectedSelector: ephemera.lastSelectedSelector
9850 };
9851 };
9852 var $_21uhbjpyjfuw8ra4 = {
9853 byClass: byClass,
9854 byAttr: byAttr
9855 };
9856
9857 function CellSelection$1(editor, lazyResize) {
9858 var handlerStruct = $_5now9kbjfuw8q5e.immutableBag([
9859 'mousedown',
9860 'mouseover',
9861 'mouseup',
9862 'keyup',
9863 'keydown'
9864 ], []);
9865 var handlers = Option.none();
9866 var annotations = $_21uhbjpyjfuw8ra4.byAttr($_f8tr2nm5jfuw8qgp);
9867 editor.on('init', function (e) {
9868 var win = editor.getWin();
9869 var body = $_5xkhf2nnjfuw8qrq.getBody(editor);
9870 var isRoot = $_5xkhf2nnjfuw8qrq.getIsRoot(editor);
9871 var syncSelection = function () {
9872 var sel = editor.selection;
9873 var start = $_xbeoqkkjfuw8q73.fromDom(sel.getStart());
9874 var end = $_xbeoqkkjfuw8q73.fromDom(sel.getEnd());
9875 var startTable = $_aqhz9okhjfuw8q5y.table(start);
9876 var endTable = $_aqhz9okhjfuw8q5y.table(end);
9877 var sameTable = startTable.bind(function (tableStart) {
9878 return endTable.bind(function (tableEnd) {
9879 return $_e8rn66kojfuw8q7n.eq(tableStart, tableEnd) ? Option.some(true) : Option.none();
9880 });
9881 });
9882 sameTable.fold(function () {
9883 annotations.clear(body);
9884 }, $_20nfr6k7jfuw8q4g.noop);
9885 };
9886 var mouseHandlers = $_ev8thhpajfuw8r3k.mouse(win, body, isRoot, annotations);
9887 var keyHandlers = $_ev8thhpajfuw8r3k.keyboard(win, body, isRoot, annotations);
9888 var hasShiftKey = function (event) {
9889 return event.raw().shiftKey === true;
9890 };
9891 var handleResponse = function (event, response) {
9892 if (!hasShiftKey(event)) {
9893 return;
9894 }
9895 if (response.kill()) {
9896 event.kill();
9897 }
9898 response.selection().each(function (ns) {
9899 var relative = $_bv1jwpoujfuw8r0m.relative(ns.start(), ns.finish());
9900 var rng = $_c9xxrpp0jfuw8r1k.asLtrRange(win, relative);
9901 editor.selection.setRng(rng);
9902 });
9903 };
9904 var keyup = function (event) {
9905 var wrappedEvent = wrapEvent(event);
9906 if (wrappedEvent.raw().shiftKey && $_9n04otpcjfuw8r40.isNavigation(wrappedEvent.raw().which)) {
9907 var rng = editor.selection.getRng();
9908 var start = $_xbeoqkkjfuw8q73.fromDom(rng.startContainer);
9909 var end = $_xbeoqkkjfuw8q73.fromDom(rng.endContainer);
9910 keyHandlers.keyup(wrappedEvent, start, rng.startOffset, end, rng.endOffset).each(function (response) {
9911 handleResponse(wrappedEvent, response);
9912 });
9913 }
9914 };
9915 var keydown = function (event) {
9916 var wrappedEvent = wrapEvent(event);
9917 lazyResize().each(function (resize) {
9918 resize.hideBars();
9919 });
9920 var rng = editor.selection.getRng();
9921 var startContainer = $_xbeoqkkjfuw8q73.fromDom(editor.selection.getStart());
9922 var start = $_xbeoqkkjfuw8q73.fromDom(rng.startContainer);
9923 var end = $_xbeoqkkjfuw8q73.fromDom(rng.endContainer);
9924 var direction = $_4xd1udnojfuw8qrw.directionAt(startContainer).isRtl() ? $_9n04otpcjfuw8r40.rtl : $_9n04otpcjfuw8r40.ltr;
9925 keyHandlers.keydown(wrappedEvent, start, rng.startOffset, end, rng.endOffset, direction).each(function (response) {
9926 handleResponse(wrappedEvent, response);
9927 });
9928 lazyResize().each(function (resize) {
9929 resize.showBars();
9930 });
9931 };
9932 var isMouseEvent = function (event) {
9933 return event.hasOwnProperty('x') && event.hasOwnProperty('y');
9934 };
9935 var wrapEvent = function (event) {
9936 var target = $_xbeoqkkjfuw8q73.fromDom(event.target);
9937 var stop = function () {
9938 event.stopPropagation();
9939 };
9940 var prevent = function () {
9941 event.preventDefault();
9942 };
9943 var kill = $_20nfr6k7jfuw8q4g.compose(prevent, stop);
9944 return {
9945 target: $_20nfr6k7jfuw8q4g.constant(target),
9946 x: $_20nfr6k7jfuw8q4g.constant(isMouseEvent(event) ? event.x : null),
9947 y: $_20nfr6k7jfuw8q4g.constant(isMouseEvent(event) ? event.y : null),
9948 stop: stop,
9949 prevent: prevent,
9950 kill: kill,
9951 raw: $_20nfr6k7jfuw8q4g.constant(event)
9952 };
9953 };
9954 var isLeftMouse = function (raw) {
9955 return raw.button === 0;
9956 };
9957 var isLeftButtonPressed = function (raw) {
9958 if (raw.buttons === undefined) {
9959 return true;
9960 }
9961 return (raw.buttons & 1) !== 0;
9962 };
9963 var mouseDown = function (e) {
9964 if (isLeftMouse(e)) {
9965 mouseHandlers.mousedown(wrapEvent(e));
9966 }
9967 };
9968 var mouseOver = function (e) {
9969 if (isLeftButtonPressed(e)) {
9970 mouseHandlers.mouseover(wrapEvent(e));
9971 }
9972 };
9973 var mouseUp = function (e) {
9974 if (isLeftMouse(e)) {
9975 mouseHandlers.mouseup(wrapEvent(e));
9976 }
9977 };
9978 editor.on('mousedown', mouseDown);
9979 editor.on('mouseover', mouseOver);
9980 editor.on('mouseup', mouseUp);
9981 editor.on('keyup', keyup);
9982 editor.on('keydown', keydown);
9983 editor.on('nodechange', syncSelection);
9984 handlers = Option.some(handlerStruct({
9985 mousedown: mouseDown,
9986 mouseover: mouseOver,
9987 mouseup: mouseUp,
9988 keyup: keyup,
9989 keydown: keydown
9990 }));
9991 });
9992 var destroy = function () {
9993 handlers.each(function (handlers) {
9994 });
9995 };
9996 return {
9997 clear: annotations.clear,
9998 destroy: destroy
9999 };
10000 }
10001
10002 var Selections = function (editor) {
10003 var get = function () {
10004 var body = $_5xkhf2nnjfuw8qrq.getBody(editor);
10005 return $_1mynollsjfuw8qcy.retrieve(body, $_f8tr2nm5jfuw8qgp.selectedSelector()).fold(function () {
10006 if (editor.selection.getStart() === undefined) {
10007 return $_cx0pwam6jfuw8qgr.none();
10008 } else {
10009 return $_cx0pwam6jfuw8qgr.single(editor.selection);
10010 }
10011 }, function (cells) {
10012 return $_cx0pwam6jfuw8qgr.multiple(cells);
10013 });
10014 };
10015 return {get: get};
10016 };
10017
10018 var each$4 = global$2.each;
10019 var addButtons = function (editor) {
10020 var menuItems = [];
10021 each$4('inserttable tableprops deletetable | cell row column'.split(' '), function (name) {
10022 if (name === '|') {
10023 menuItems.push({text: '-'});
10024 } else {
10025 menuItems.push(editor.menuItems[name]);
10026 }
10027 });
10028 editor.addButton('table', {
10029 type: 'menubutton',
10030 title: 'Table',
10031 menu: menuItems
10032 });
10033
10034 function cmd(command) {
10035 return function () {
10036 editor.execCommand(command);
10037 };
10038 }
10039
10040 editor.addButton('tableprops', {
10041 title: 'Table properties',
10042 onclick: $_20nfr6k7jfuw8q4g.curry($_ad8brjnzjfuw8qtm.open, editor, true),
10043 icon: 'table'
10044 });
10045 editor.addButton('tabledelete', {
10046 title: 'Delete table',
10047 onclick: cmd('mceTableDelete')
10048 });
10049 editor.addButton('tablecellprops', {
10050 title: 'Cell properties',
10051 onclick: cmd('mceTableCellProps')
10052 });
10053 editor.addButton('tablemergecells', {
10054 title: 'Merge cells',
10055 onclick: cmd('mceTableMergeCells')
10056 });
10057 editor.addButton('tablesplitcells', {
10058 title: 'Split cell',
10059 onclick: cmd('mceTableSplitCells')
10060 });
10061 editor.addButton('tableinsertrowbefore', {
10062 title: 'Insert row before',
10063 onclick: cmd('mceTableInsertRowBefore')
10064 });
10065 editor.addButton('tableinsertrowafter', {
10066 title: 'Insert row after',
10067 onclick: cmd('mceTableInsertRowAfter')
10068 });
10069 editor.addButton('tabledeleterow', {
10070 title: 'Delete row',
10071 onclick: cmd('mceTableDeleteRow')
10072 });
10073 editor.addButton('tablerowprops', {
10074 title: 'Row properties',
10075 onclick: cmd('mceTableRowProps')
10076 });
10077 editor.addButton('tablecutrow', {
10078 title: 'Cut row',
10079 onclick: cmd('mceTableCutRow')
10080 });
10081 editor.addButton('tablecopyrow', {
10082 title: 'Copy row',
10083 onclick: cmd('mceTableCopyRow')
10084 });
10085 editor.addButton('tablepasterowbefore', {
10086 title: 'Paste row before',
10087 onclick: cmd('mceTablePasteRowBefore')
10088 });
10089 editor.addButton('tablepasterowafter', {
10090 title: 'Paste row after',
10091 onclick: cmd('mceTablePasteRowAfter')
10092 });
10093 editor.addButton('tableinsertcolbefore', {
10094 title: 'Insert column before',
10095 onclick: cmd('mceTableInsertColBefore')
10096 });
10097 editor.addButton('tableinsertcolafter', {
10098 title: 'Insert column after',
10099 onclick: cmd('mceTableInsertColAfter')
10100 });
10101 editor.addButton('tabledeletecol', {
10102 title: 'Delete column',
10103 onclick: cmd('mceTableDeleteCol')
10104 });
10105 };
10106 var addToolbars = function (editor) {
10107 var isTable = function (table) {
10108 var selectorMatched = editor.dom.is(table, 'table') && editor.getBody().contains(table);
10109 return selectorMatched;
10110 };
10111 var toolbar = getToolbar(editor);
10112 if (toolbar.length > 0) {
10113 editor.addContextToolbar(isTable, toolbar.join(' '));
10114 }
10115 };
10116 var $_ga9kj7q2jfuw8rau = {
10117 addButtons: addButtons,
10118 addToolbars: addToolbars
10119 };
10120
10121 var addMenuItems = function (editor, selections) {
10122 var targets = Option.none();
10123 var tableCtrls = [];
10124 var cellCtrls = [];
10125 var mergeCtrls = [];
10126 var unmergeCtrls = [];
10127 var noTargetDisable = function (ctrl) {
10128 ctrl.disabled(true);
10129 };
10130 var ctrlEnable = function (ctrl) {
10131 ctrl.disabled(false);
10132 };
10133 var pushTable = function () {
10134 var self = this;
10135 tableCtrls.push(self);
10136 targets.fold(function () {
10137 noTargetDisable(self);
10138 }, function (targets) {
10139 ctrlEnable(self);
10140 });
10141 };
10142 var pushCell = function () {
10143 var self = this;
10144 cellCtrls.push(self);
10145 targets.fold(function () {
10146 noTargetDisable(self);
10147 }, function (targets) {
10148 ctrlEnable(self);
10149 });
10150 };
10151 var pushMerge = function () {
10152 var self = this;
10153 mergeCtrls.push(self);
10154 targets.fold(function () {
10155 noTargetDisable(self);
10156 }, function (targets) {
10157 self.disabled(targets.mergable().isNone());
10158 });
10159 };
10160 var pushUnmerge = function () {
10161 var self = this;
10162 unmergeCtrls.push(self);
10163 targets.fold(function () {
10164 noTargetDisable(self);
10165 }, function (targets) {
10166 self.disabled(targets.unmergable().isNone());
10167 });
10168 };
10169 var setDisabledCtrls = function () {
10170 targets.fold(function () {
10171 $_tyr3yk5jfuw8q47.each(tableCtrls, noTargetDisable);
10172 $_tyr3yk5jfuw8q47.each(cellCtrls, noTargetDisable);
10173 $_tyr3yk5jfuw8q47.each(mergeCtrls, noTargetDisable);
10174 $_tyr3yk5jfuw8q47.each(unmergeCtrls, noTargetDisable);
10175 }, function (targets) {
10176 $_tyr3yk5jfuw8q47.each(tableCtrls, ctrlEnable);
10177 $_tyr3yk5jfuw8q47.each(cellCtrls, ctrlEnable);
10178 $_tyr3yk5jfuw8q47.each(mergeCtrls, function (mergeCtrl) {
10179 mergeCtrl.disabled(targets.mergable().isNone());
10180 });
10181 $_tyr3yk5jfuw8q47.each(unmergeCtrls, function (unmergeCtrl) {
10182 unmergeCtrl.disabled(targets.unmergable().isNone());
10183 });
10184 });
10185 };
10186 editor.on('init', function () {
10187 editor.on('nodechange', function (e) {
10188 var cellOpt = Option.from(editor.dom.getParent(editor.selection.getStart(), 'th,td'));
10189 targets = cellOpt.bind(function (cellDom) {
10190 var cell = $_xbeoqkkjfuw8q73.fromDom(cellDom);
10191 var table = $_aqhz9okhjfuw8q5y.table(cell);
10192 return table.map(function (table) {
10193 return $_5b7h1hlqjfuw8qci.forMenu(selections, table, cell);
10194 });
10195 });
10196 setDisabledCtrls();
10197 });
10198 });
10199 var generateTableGrid = function () {
10200 var html = '';
10201 html = '<table role="grid" class="mce-grid mce-grid-border" aria-readonly="true">';
10202 for (var y = 0; y < 10; y++) {
10203 html += '<tr>';
10204 for (var x = 0; x < 10; x++) {
10205 html += '<td role="gridcell" tabindex="-1"><a id="mcegrid' + (y * 10 + x) + '" href="#" ' + 'data-mce-x="' + x + '" data-mce-y="' + y + '"></a></td>';
10206 }
10207 html += '</tr>';
10208 }
10209 html += '</table>';
10210 html += '<div class="mce-text-center" role="presentation">1 x 1</div>';
10211 return html;
10212 };
10213 var selectGrid = function (editor, tx, ty, control) {
10214 var table = control.getEl().getElementsByTagName('table')[0];
10215 var x, y, focusCell, cell, active;
10216 var rtl = control.isRtl() || control.parent().rel === 'tl-tr';
10217 table.nextSibling.innerHTML = tx + 1 + ' x ' + (ty + 1);
10218 if (rtl) {
10219 tx = 9 - tx;
10220 }
10221 for (y = 0; y < 10; y++) {
10222 for (x = 0; x < 10; x++) {
10223 cell = table.rows[y].childNodes[x].firstChild;
10224 active = (rtl ? x >= tx : x <= tx) && y <= ty;
10225 editor.dom.toggleClass(cell, 'mce-active', active);
10226 if (active) {
10227 focusCell = cell;
10228 }
10229 }
10230 }
10231 return focusCell.parentNode;
10232 };
10233 var insertTable = hasTableGrid(editor) === false ? {
10234 text: 'Table',
10235 icon: 'table',
10236 context: 'table',
10237 onclick: $_20nfr6k7jfuw8q4g.curry($_ad8brjnzjfuw8qtm.open, editor)
10238 } : {
10239 text: 'Table',
10240 icon: 'table',
10241 context: 'table',
10242 ariaHideMenu: true,
10243 onclick: function (e) {
10244 if (e.aria) {
10245 this.parent().hideAll();
10246 e.stopImmediatePropagation();
10247 $_ad8brjnzjfuw8qtm.open(editor);
10248 }
10249 },
10250 onshow: function () {
10251 selectGrid(editor, 0, 0, this.menu.items()[0]);
10252 },
10253 onhide: function () {
10254 var elements = this.menu.items()[0].getEl().getElementsByTagName('a');
10255 editor.dom.removeClass(elements, 'mce-active');
10256 editor.dom.addClass(elements[0], 'mce-active');
10257 },
10258 menu: [{
10259 type: 'container',
10260 html: generateTableGrid(),
10261 onPostRender: function () {
10262 this.lastX = this.lastY = 0;
10263 },
10264 onmousemove: function (e) {
10265 var target = e.target;
10266 var x, y;
10267 if (target.tagName.toUpperCase() === 'A') {
10268 x = parseInt(target.getAttribute('data-mce-x'), 10);
10269 y = parseInt(target.getAttribute('data-mce-y'), 10);
10270 if (this.isRtl() || this.parent().rel === 'tl-tr') {
10271 x = 9 - x;
10272 }
10273 if (x !== this.lastX || y !== this.lastY) {
10274 selectGrid(editor, x, y, e.control);
10275 this.lastX = x;
10276 this.lastY = y;
10277 }
10278 }
10279 },
10280 onclick: function (e) {
10281 var self = this;
10282 if (e.target.tagName.toUpperCase() === 'A') {
10283 e.preventDefault();
10284 e.stopPropagation();
10285 self.parent().cancel();
10286 editor.undoManager.transact(function () {
10287 $_1mq3b3o1jfuw8qtu.insert(editor, self.lastX + 1, self.lastY + 1);
10288 });
10289 editor.addVisual();
10290 }
10291 }
10292 }]
10293 };
10294
10295 function cmd(command) {
10296 return function () {
10297 editor.execCommand(command);
10298 };
10299 }
10300
10301 var tableProperties = {
10302 text: 'Table properties',
10303 context: 'table',
10304 onPostRender: pushTable,
10305 onclick: $_20nfr6k7jfuw8q4g.curry($_ad8brjnzjfuw8qtm.open, editor, true)
10306 };
10307 var deleteTable = {
10308 text: 'Delete table',
10309 context: 'table',
10310 onPostRender: pushTable,
10311 cmd: 'mceTableDelete'
10312 };
10313 var row = {
10314 text: 'Row',
10315 context: 'table',
10316 menu: [
10317 {
10318 text: 'Insert row before',
10319 onclick: cmd('mceTableInsertRowBefore'),
10320 onPostRender: pushCell
10321 },
10322 {
10323 text: 'Insert row after',
10324 onclick: cmd('mceTableInsertRowAfter'),
10325 onPostRender: pushCell
10326 },
10327 {
10328 text: 'Delete row',
10329 onclick: cmd('mceTableDeleteRow'),
10330 onPostRender: pushCell
10331 },
10332 {
10333 text: 'Row properties',
10334 onclick: cmd('mceTableRowProps'),
10335 onPostRender: pushCell
10336 },
10337 {text: '-'},
10338 {
10339 text: 'Cut row',
10340 onclick: cmd('mceTableCutRow'),
10341 onPostRender: pushCell
10342 },
10343 {
10344 text: 'Copy row',
10345 onclick: cmd('mceTableCopyRow'),
10346 onPostRender: pushCell
10347 },
10348 {
10349 text: 'Paste row before',
10350 onclick: cmd('mceTablePasteRowBefore'),
10351 onPostRender: pushCell
10352 },
10353 {
10354 text: 'Paste row after',
10355 onclick: cmd('mceTablePasteRowAfter'),
10356 onPostRender: pushCell
10357 }
10358 ]
10359 };
10360 var column = {
10361 text: 'Column',
10362 context: 'table',
10363 menu: [
10364 {
10365 text: 'Insert column before',
10366 onclick: cmd('mceTableInsertColBefore'),
10367 onPostRender: pushCell
10368 },
10369 {
10370 text: 'Insert column after',
10371 onclick: cmd('mceTableInsertColAfter'),
10372 onPostRender: pushCell
10373 },
10374 {
10375 text: 'Delete column',
10376 onclick: cmd('mceTableDeleteCol'),
10377 onPostRender: pushCell
10378 }
10379 ]
10380 };
10381 var cell = {
10382 separator: 'before',
10383 text: 'Cell',
10384 context: 'table',
10385 menu: [
10386 {
10387 text: 'Cell properties',
10388 onclick: cmd('mceTableCellProps'),
10389 onPostRender: pushCell
10390 },
10391 {
10392 text: 'Merge cells',
10393 onclick: cmd('mceTableMergeCells'),
10394 onPostRender: pushMerge
10395 },
10396 {
10397 text: 'Split cell',
10398 onclick: cmd('mceTableSplitCells'),
10399 onPostRender: pushUnmerge
10400 }
10401 ]
10402 };
10403 editor.addMenuItem('inserttable', insertTable);
10404 editor.addMenuItem('tableprops', tableProperties);
10405 editor.addMenuItem('deletetable', deleteTable);
10406 editor.addMenuItem('row', row);
10407 editor.addMenuItem('column', column);
10408 editor.addMenuItem('cell', cell);
10409 };
10410 var $_e80bn7q3jfuw8raz = {addMenuItems: addMenuItems};
10411
10412 var getClipboardRows = function (clipboardRows) {
10413 return clipboardRows.get().fold(function () {
10414 return;
10415 }, function (rows) {
10416 return $_tyr3yk5jfuw8q47.map(rows, function (row) {
10417 return row.dom();
10418 });
10419 });
10420 };
10421 var setClipboardRows = function (rows, clipboardRows) {
10422 var sugarRows = $_tyr3yk5jfuw8q47.map(rows, $_xbeoqkkjfuw8q73.fromDom);
10423 clipboardRows.set(Option.from(sugarRows));
10424 };
10425 var getApi = function (editor, clipboardRows) {
10426 return {
10427 insertTable: function (columns, rows) {
10428 return $_1mq3b3o1jfuw8qtu.insert(editor, columns, rows);
10429 },
10430 setClipboardRows: function (rows) {
10431 return setClipboardRows(rows, clipboardRows);
10432 },
10433 getClipboardRows: function () {
10434 return getClipboardRows(clipboardRows);
10435 }
10436 };
10437 };
10438
10439 function Plugin(editor) {
10440 console.log(editor);
10441 var resizeHandler = ResizeHandler(editor);
10442 var cellSelection = CellSelection$1(editor, resizeHandler.lazyResize);
10443 var actions = TableActions(editor, resizeHandler.lazyWire);
10444 var selections = Selections(editor);
10445 var clipboardRows = Cell(Option.none());
10446 $_srry6nsjfuw8qs8.registerCommands(editor, actions, cellSelection, selections, clipboardRows);
10447 $_3y1hv8k4jfuw8q3l.registerEvents(editor, selections, actions, cellSelection);
10448 $_e80bn7q3jfuw8raz.addMenuItems(editor, selections);
10449 $_ga9kj7q2jfuw8rau.addButtons(editor);
10450 $_ga9kj7q2jfuw8rau.addToolbars(editor);
10451 editor.on('PreInit', function () {
10452 editor.serializer.addTempAttr($_f8tr2nm5jfuw8qgp.firstSelected());
10453 editor.serializer.addTempAttr($_f8tr2nm5jfuw8qgp.lastSelected());
10454 });
10455 if (hasTabNavigation(editor)) {
10456 editor.on('keydown', function (e) {
10457 $_djb8ceorjfuw8qzt.handle(e, editor, actions, resizeHandler.lazyWire);
10458 });
10459 }
10460 editor.on('remove', function () {
10461 resizeHandler.destroy();
10462 cellSelection.destroy();
10463 });
10464 return getApi(editor, clipboardRows);
10465 }
10466
10467 editor.settings.toolbar1 += ',table';
10468 Plugin(editor);
10469});