UNPKG

yy-form-making

Version:
1,715 lines (1,645 loc) 338 kB
(function () { var table = (function () { 'use strict'; var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); var noop = function () { var x = []; for (var _i = 0; _i < arguments.length; _i++) { x[_i] = arguments[_i]; } }; var compose = function (fa, fb) { return function () { var x = []; for (var _i = 0; _i < arguments.length; _i++) { x[_i] = arguments[_i]; } return fa(fb.apply(null, arguments)); }; }; var constant = function (value) { return function () { return value; }; }; var identity = function (x) { return x; }; var curry = function (f) { var x = []; for (var _i = 1; _i < arguments.length; _i++) { x[_i - 1] = arguments[_i]; } var args = new Array(arguments.length - 1); for (var i = 1; i < arguments.length; i++) args[i - 1] = arguments[i]; return function () { var x = []; for (var _i = 0; _i < arguments.length; _i++) { x[_i] = arguments[_i]; } var newArgs = new Array(arguments.length); for (var j = 0; j < newArgs.length; j++) newArgs[j] = arguments[j]; var all = args.concat(newArgs); return f.apply(null, all); }; }; var not = function (f) { return function () { var x = []; for (var _i = 0; _i < arguments.length; _i++) { x[_i] = arguments[_i]; } return !f.apply(null, arguments); }; }; var die = function (msg) { return function () { throw new Error(msg); }; }; var apply = function (f) { return f(); }; var never = constant(false); var always = constant(true); var never$1 = never; var always$1 = always; var none = function () { return NONE; }; var NONE = function () { var eq = function (o) { return o.isNone(); }; var call$$1 = function (thunk) { return thunk(); }; var id = function (n) { return n; }; var noop$$1 = function () { }; var nul = function () { return null; }; var undef = function () { return undefined; }; var me = { fold: function (n, s) { return n(); }, is: never$1, isSome: never$1, isNone: always$1, getOr: id, getOrThunk: call$$1, getOrDie: function (msg) { throw new Error(msg || 'error: getOrDie called on none.'); }, getOrNull: nul, getOrUndefined: undef, or: id, orThunk: call$$1, map: none, ap: none, each: noop$$1, bind: none, flatten: none, exists: never$1, forall: always$1, filter: none, equals: eq, equals_: eq, toArray: function () { return []; }, toString: constant('none()') }; if (Object.freeze) Object.freeze(me); return me; }(); var some = function (a) { var constant_a = function () { return a; }; var self = function () { return me; }; var map = function (f) { return some(f(a)); }; var bind = function (f) { return f(a); }; var me = { fold: function (n, s) { return s(a); }, is: function (v) { return a === v; }, isSome: always$1, isNone: never$1, getOr: constant_a, getOrThunk: constant_a, getOrDie: constant_a, getOrNull: constant_a, getOrUndefined: constant_a, or: self, orThunk: self, map: map, ap: function (optfab) { return optfab.fold(none, function (fab) { return some(fab(a)); }); }, each: function (f) { f(a); }, bind: bind, flatten: constant_a, exists: bind, forall: bind, filter: function (f) { return f(a) ? me : NONE; }, equals: function (o) { return o.is(a); }, equals_: function (o, elementEq) { return o.fold(never$1, function (b) { return elementEq(a, b); }); }, toArray: function () { return [a]; }, toString: function () { return 'some(' + a + ')'; } }; return me; }; var from = function (value) { return value === null || value === undefined ? NONE : some(value); }; var Option = { some: some, none: none, from: from }; var typeOf = function (x) { if (x === null) return 'null'; var t = typeof x; if (t === 'object' && Array.prototype.isPrototypeOf(x)) return 'array'; if (t === 'object' && String.prototype.isPrototypeOf(x)) return 'string'; return t; }; var isType = function (type) { return function (value) { return typeOf(value) === type; }; }; var isString = isType('string'); var isArray = isType('array'); var isBoolean = isType('boolean'); var isFunction = isType('function'); var isNumber = isType('number'); var rawIndexOf = function () { var pIndexOf = Array.prototype.indexOf; var fastIndex = function (xs, x) { return pIndexOf.call(xs, x); }; var slowIndex = function (xs, x) { return slowIndexOf(xs, x); }; return pIndexOf === undefined ? slowIndex : fastIndex; }(); var contains = function (xs, x) { return rawIndexOf(xs, x) > -1; }; var exists = function (xs, pred) { return findIndex(xs, pred).isSome(); }; var map = function (xs, f) { var len = xs.length; var r = new Array(len); for (var i = 0; i < len; i++) { var x = xs[i]; r[i] = f(x, i, xs); } return r; }; var each = function (xs, f) { for (var i = 0, len = xs.length; i < len; i++) { var x = xs[i]; f(x, i, xs); } }; var eachr = function (xs, f) { for (var i = xs.length - 1; i >= 0; i--) { var x = xs[i]; f(x, i, xs); } }; var filter = function (xs, pred) { var r = []; for (var i = 0, len = xs.length; i < len; i++) { var x = xs[i]; if (pred(x, i, xs)) { r.push(x); } } return r; }; var foldr = function (xs, f, acc) { eachr(xs, function (x) { acc = f(acc, x); }); return acc; }; var foldl = function (xs, f, acc) { each(xs, function (x) { acc = f(acc, x); }); return acc; }; var find = function (xs, pred) { for (var i = 0, len = xs.length; i < len; i++) { var x = xs[i]; if (pred(x, i, xs)) { return Option.some(x); } } return Option.none(); }; var findIndex = function (xs, pred) { for (var i = 0, len = xs.length; i < len; i++) { var x = xs[i]; if (pred(x, i, xs)) { return Option.some(i); } } return Option.none(); }; var slowIndexOf = function (xs, x) { for (var i = 0, len = xs.length; i < len; ++i) { if (xs[i] === x) { return i; } } return -1; }; var push = Array.prototype.push; var flatten = function (xs) { var r = []; for (var i = 0, len = xs.length; i < len; ++i) { if (!Array.prototype.isPrototypeOf(xs[i])) throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs); push.apply(r, xs[i]); } return r; }; var bind = function (xs, f) { var output = map(xs, f); return flatten(output); }; var forall = function (xs, pred) { for (var i = 0, len = xs.length; i < len; ++i) { var x = xs[i]; if (pred(x, i, xs) !== true) { return false; } } return true; }; var slice = Array.prototype.slice; var reverse = function (xs) { var r = slice.call(xs, 0); r.reverse(); return r; }; var last = function (xs) { return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]); }; var from$1 = isFunction(Array.from) ? Array.from : function (x) { return slice.call(x); }; var keys = Object.keys; var each$1 = function (obj, f) { var props = keys(obj); for (var k = 0, len = props.length; k < len; k++) { var i = props[k]; var x = obj[i]; f(x, i, obj); } }; var map$1 = function (obj, f) { return tupleMap(obj, function (x, i, obj) { return { k: i, v: f(x, i, obj) }; }); }; var tupleMap = function (obj, f) { var r = {}; each$1(obj, function (x, i) { var tuple = f(x, i, obj); r[tuple.k] = tuple.v; }); return r; }; var Immutable = function () { var fields = []; for (var _i = 0; _i < arguments.length; _i++) { fields[_i] = arguments[_i]; } return function () { var values = []; for (var _i = 0; _i < arguments.length; _i++) { values[_i] = arguments[_i]; } if (fields.length !== values.length) { throw new Error('Wrong number of arguments to struct. Expected "[' + fields.length + ']", got ' + values.length + ' arguments'); } var struct = {}; each(fields, function (name, i) { struct[name] = constant(values[i]); }); return struct; }; }; var sort$1 = function (arr) { return arr.slice(0).sort(); }; var reqMessage = function (required, keys) { throw new Error('All required keys (' + sort$1(required).join(', ') + ') were not specified. Specified keys were: ' + sort$1(keys).join(', ') + '.'); }; var unsuppMessage = function (unsupported) { throw new Error('Unsupported keys for object: ' + sort$1(unsupported).join(', ')); }; var validateStrArr = function (label, array) { if (!isArray(array)) throw new Error('The ' + label + ' fields must be an array. Was: ' + array + '.'); each(array, function (a) { if (!isString(a)) throw new Error('The value ' + a + ' in the ' + label + ' fields was not a string.'); }); }; var invalidTypeMessage = function (incorrect, type) { throw new Error('All values need to be of type: ' + type + '. Keys (' + sort$1(incorrect).join(', ') + ') were not.'); }; var checkDupes = function (everything) { var sorted = sort$1(everything); var dupe = find(sorted, function (s, i) { return i < sorted.length - 1 && s === sorted[i + 1]; }); dupe.each(function (d) { throw new Error('The field: ' + d + ' occurs more than once in the combined fields: [' + sorted.join(', ') + '].'); }); }; var MixedBag = function (required, optional) { var everything = required.concat(optional); if (everything.length === 0) throw new Error('You must specify at least one required or optional field.'); validateStrArr('required', required); validateStrArr('optional', optional); checkDupes(everything); return function (obj) { var keys$$1 = keys(obj); var allReqd = forall(required, function (req) { return contains(keys$$1, req); }); if (!allReqd) reqMessage(required, keys$$1); var unsupported = filter(keys$$1, function (key) { return !contains(everything, key); }); if (unsupported.length > 0) unsuppMessage(unsupported); var r = {}; each(required, function (req) { r[req] = constant(obj[req]); }); each(optional, function (opt) { r[opt] = constant(Object.prototype.hasOwnProperty.call(obj, opt) ? Option.some(obj[opt]) : Option.none()); }); return r; }; }; var dimensions = Immutable('width', 'height'); var grid = Immutable('rows', 'columns'); var address = Immutable('row', 'column'); var coords = Immutable('x', 'y'); var detail = Immutable('element', 'rowspan', 'colspan'); var detailnew = Immutable('element', 'rowspan', 'colspan', 'isNew'); var extended = Immutable('element', 'rowspan', 'colspan', 'row', 'column'); var rowdata = Immutable('element', 'cells', 'section'); var elementnew = Immutable('element', 'isNew'); var rowdatanew = Immutable('element', 'cells', 'section', 'isNew'); var rowcells = Immutable('cells', 'section'); var rowdetails = Immutable('details', 'section'); var bounds = Immutable('startRow', 'startCol', 'finishRow', 'finishCol'); var $_csuubelcjnlpb2sv = { dimensions: dimensions, grid: grid, address: address, coords: coords, extended: extended, detail: detail, detailnew: detailnew, rowdata: rowdata, elementnew: elementnew, rowdatanew: rowdatanew, rowcells: rowcells, rowdetails: rowdetails, bounds: bounds }; var fromHtml = function (html, scope) { var doc = scope || document; var div = doc.createElement('div'); div.innerHTML = html; if (!div.hasChildNodes() || div.childNodes.length > 1) { console.error('HTML does not have a single root node', html); throw 'HTML must have a single root node'; } return fromDom(div.childNodes[0]); }; var fromTag = function (tag, scope) { var doc = scope || document; var node = doc.createElement(tag); return fromDom(node); }; var fromText = function (text, scope) { var doc = scope || document; var node = doc.createTextNode(text); return fromDom(node); }; var fromDom = function (node) { if (node === null || node === undefined) throw new Error('Node cannot be null or undefined'); return { dom: constant(node) }; }; var fromPoint = function (docElm, x, y) { var doc = docElm.dom(); return Option.from(doc.elementFromPoint(x, y)).map(fromDom); }; var Element$$1 = { fromHtml: fromHtml, fromTag: fromTag, fromText: fromText, fromDom: fromDom, fromPoint: fromPoint }; var $_1skeq9lijnlpb2un = { ATTRIBUTE: Node.ATTRIBUTE_NODE, CDATA_SECTION: Node.CDATA_SECTION_NODE, COMMENT: Node.COMMENT_NODE, DOCUMENT: Node.DOCUMENT_NODE, DOCUMENT_TYPE: Node.DOCUMENT_TYPE_NODE, DOCUMENT_FRAGMENT: Node.DOCUMENT_FRAGMENT_NODE, ELEMENT: Node.ELEMENT_NODE, TEXT: Node.TEXT_NODE, PROCESSING_INSTRUCTION: Node.PROCESSING_INSTRUCTION_NODE, ENTITY_REFERENCE: Node.ENTITY_REFERENCE_NODE, ENTITY: Node.ENTITY_NODE, NOTATION: Node.NOTATION_NODE }; var ELEMENT = $_1skeq9lijnlpb2un.ELEMENT; var DOCUMENT = $_1skeq9lijnlpb2un.DOCUMENT; var is = function (element, selector) { var elem = element.dom(); if (elem.nodeType !== ELEMENT) return false; else if (elem.matches !== undefined) return elem.matches(selector); else if (elem.msMatchesSelector !== undefined) return elem.msMatchesSelector(selector); else if (elem.webkitMatchesSelector !== undefined) return elem.webkitMatchesSelector(selector); else if (elem.mozMatchesSelector !== undefined) return elem.mozMatchesSelector(selector); else throw new Error('Browser lacks native selectors'); }; var bypassSelector = function (dom) { return dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT || dom.childElementCount === 0; }; var all = function (selector, scope) { var base = scope === undefined ? document : scope.dom(); return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element$$1.fromDom); }; var one = function (selector, scope) { var base = scope === undefined ? document : scope.dom(); return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element$$1.fromDom); }; var $_1mxomdlfjnlpb2tz = { all: all, is: is, one: one }; var toArray = function (target, f) { var r = []; var recurse = function (e) { r.push(e); return f(e); }; var cur = f(target); do { cur = cur.bind(recurse); } while (cur.isSome()); return r; }; var $_84ox1wlkjnlpb2v9 = { toArray: toArray }; var Global = typeof window !== 'undefined' ? window : Function('return this;')(); var path = function (parts, scope) { var o = scope !== undefined && scope !== null ? scope : Global; for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) o = o[parts[i]]; return o; }; var resolve = function (p, scope) { var parts = p.split('.'); return path(parts, scope); }; var unsafe = function (name, scope) { return resolve(name, scope); }; var getOrDie = function (name, scope) { var actual = unsafe(name, scope); if (actual === undefined || actual === null) throw name + ' not available on this browser'; return actual; }; var $_7rb9h8lnjnlpb2vl = { getOrDie: getOrDie }; var node = function () { var f = $_7rb9h8lnjnlpb2vl.getOrDie('Node'); return f; }; var compareDocumentPosition = function (a, b, match) { return (a.compareDocumentPosition(b) & match) !== 0; }; var documentPositionPreceding = function (a, b) { return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING); }; var documentPositionContainedBy = function (a, b) { return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY); }; var $_5xoldwlmjnlpb2vk = { documentPositionPreceding: documentPositionPreceding, documentPositionContainedBy: documentPositionContainedBy }; var cached = function (f) { var called = false; var r; return function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } if (!called) { called = true; r = f.apply(null, args); } return r; }; }; var firstMatch = function (regexes, s) { for (var i = 0; i < regexes.length; i++) { var x = regexes[i]; if (x.test(s)) return x; } return undefined; }; var find$2 = function (regexes, agent) { var r = firstMatch(regexes, agent); if (!r) return { major: 0, minor: 0 }; var group = function (i) { return Number(agent.replace(r, '$' + i)); }; return nu(group(1), group(2)); }; var detect = function (versionRegexes, agent) { var cleanedAgent = String(agent).toLowerCase(); if (versionRegexes.length === 0) return unknown(); return find$2(versionRegexes, cleanedAgent); }; var unknown = function () { return nu(0, 0); }; var nu = function (major, minor) { return { major: major, minor: minor }; }; var Version = { nu: nu, detect: detect, unknown: unknown }; var edge = 'Edge'; var chrome = 'Chrome'; var ie = 'IE'; var opera = 'Opera'; var firefox = 'Firefox'; var safari = 'Safari'; var isBrowser = function (name, current) { return function () { return current === name; }; }; var unknown$1 = function () { return nu$1({ current: undefined, version: Version.unknown() }); }; var nu$1 = function (info) { var current = info.current; var version = info.version; return { current: current, version: version, isEdge: isBrowser(edge, current), isChrome: isBrowser(chrome, current), isIE: isBrowser(ie, current), isOpera: isBrowser(opera, current), isFirefox: isBrowser(firefox, current), isSafari: isBrowser(safari, current) }; }; var Browser = { unknown: unknown$1, nu: nu$1, edge: constant(edge), chrome: constant(chrome), ie: constant(ie), opera: constant(opera), firefox: constant(firefox), safari: constant(safari) }; var windows = 'Windows'; var ios = 'iOS'; var android = 'Android'; var linux = 'Linux'; var osx = 'OSX'; var solaris = 'Solaris'; var freebsd = 'FreeBSD'; var isOS = function (name, current) { return function () { return current === name; }; }; var unknown$2 = function () { return nu$2({ current: undefined, version: Version.unknown() }); }; var nu$2 = function (info) { var current = info.current; var version = info.version; return { current: current, version: version, isWindows: isOS(windows, current), isiOS: isOS(ios, current), isAndroid: isOS(android, current), isOSX: isOS(osx, current), isLinux: isOS(linux, current), isSolaris: isOS(solaris, current), isFreeBSD: isOS(freebsd, current) }; }; var OperatingSystem = { unknown: unknown$2, nu: nu$2, windows: constant(windows), ios: constant(ios), android: constant(android), linux: constant(linux), osx: constant(osx), solaris: constant(solaris), freebsd: constant(freebsd) }; var DeviceType = function (os, browser, userAgent) { var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true; var isiPhone = os.isiOS() && !isiPad; var isAndroid3 = os.isAndroid() && os.version.major === 3; var isAndroid4 = os.isAndroid() && os.version.major === 4; var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true; var isTouch = os.isiOS() || os.isAndroid(); var isPhone = isTouch && !isTablet; var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false; return { isiPad: constant(isiPad), isiPhone: constant(isiPhone), isTablet: constant(isTablet), isPhone: constant(isPhone), isTouch: constant(isTouch), isAndroid: os.isAndroid, isiOS: os.isiOS, isWebView: constant(iOSwebview) }; }; var detect$1 = function (candidates, userAgent) { var agent = String(userAgent).toLowerCase(); return find(candidates, function (candidate) { return candidate.search(agent); }); }; var detectBrowser = function (browsers, userAgent) { return detect$1(browsers, userAgent).map(function (browser) { var version = Version.detect(browser.versionRegexes, userAgent); return { current: browser.name, version: version }; }); }; var detectOs = function (oses, userAgent) { return detect$1(oses, userAgent).map(function (os) { var version = Version.detect(os.versionRegexes, userAgent); return { current: os.name, version: version }; }); }; var UaString = { detectBrowser: detectBrowser, detectOs: detectOs }; var checkRange = function (str, substr, start) { if (substr === '') return true; if (str.length < substr.length) return false; var x = str.substr(start, start + substr.length); return x === substr; }; var contains$1 = function (str, substr) { return str.indexOf(substr) !== -1; }; var endsWith = function (str, suffix) { return checkRange(str, suffix, str.length - suffix.length); }; var trim = function (str) { return str.replace(/^\s+|\s+$/g, ''); }; var normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/; var checkContains = function (target) { return function (uastring) { return contains$1(uastring, target); }; }; var browsers = [ { name: 'Edge', versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/], search: function (uastring) { var monstrosity = contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit'); return monstrosity; } }, { name: 'Chrome', versionRegexes: [ /.*?chrome\/([0-9]+)\.([0-9]+).*/, normalVersionRegex ], search: function (uastring) { return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe'); } }, { name: 'IE', versionRegexes: [ /.*?msie\ ?([0-9]+)\.([0-9]+).*/, /.*?rv:([0-9]+)\.([0-9]+).*/ ], search: function (uastring) { return contains$1(uastring, 'msie') || contains$1(uastring, 'trident'); } }, { name: 'Opera', versionRegexes: [ normalVersionRegex, /.*?opera\/([0-9]+)\.([0-9]+).*/ ], search: checkContains('opera') }, { name: 'Firefox', versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/], search: checkContains('firefox') }, { name: 'Safari', versionRegexes: [ normalVersionRegex, /.*?cpu os ([0-9]+)_([0-9]+).*/ ], search: function (uastring) { return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit'); } } ]; var oses = [ { name: 'Windows', search: checkContains('win'), versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/] }, { name: 'iOS', search: function (uastring) { return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad'); }, versionRegexes: [ /.*?version\/\ ?([0-9]+)\.([0-9]+).*/, /.*cpu os ([0-9]+)_([0-9]+).*/, /.*cpu iphone os ([0-9]+)_([0-9]+).*/ ] }, { name: 'Android', search: checkContains('android'), versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/] }, { name: 'OSX', search: checkContains('os x'), versionRegexes: [/.*?os\ x\ ?([0-9]+)_([0-9]+).*/] }, { name: 'Linux', search: checkContains('linux'), versionRegexes: [] }, { name: 'Solaris', search: checkContains('sunos'), versionRegexes: [] }, { name: 'FreeBSD', search: checkContains('freebsd'), versionRegexes: [] } ]; var PlatformInfo = { browsers: constant(browsers), oses: constant(oses) }; var detect$2 = function (userAgent) { var browsers = PlatformInfo.browsers(); var oses = PlatformInfo.oses(); var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu); var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu); var deviceType = DeviceType(os, browser, userAgent); return { browser: browser, os: os, deviceType: deviceType }; }; var PlatformDetection = { detect: detect$2 }; var detect$3 = cached(function () { var userAgent = navigator.userAgent; return PlatformDetection.detect(userAgent); }); var $_4aebialqjnlpb2vq = { detect: detect$3 }; var eq = function (e1, e2) { return e1.dom() === e2.dom(); }; var isEqualNode = function (e1, e2) { return e1.dom().isEqualNode(e2.dom()); }; var member = function (element, elements) { return exists(elements, curry(eq, element)); }; var regularContains = function (e1, e2) { var d1 = e1.dom(), d2 = e2.dom(); return d1 === d2 ? false : d1.contains(d2); }; var ieContains = function (e1, e2) { return $_5xoldwlmjnlpb2vk.documentPositionContainedBy(e1.dom(), e2.dom()); }; var browser = $_4aebialqjnlpb2vq.detect().browser; var contains$2 = browser.isIE() ? ieContains : regularContains; var $_3k22killjnlpb2vb = { eq: eq, isEqualNode: isEqualNode, member: member, contains: contains$2, is: $_1mxomdlfjnlpb2tz.is }; var owner = function (element) { return Element$$1.fromDom(element.dom().ownerDocument); }; var documentElement = function (element) { return Element$$1.fromDom(element.dom().ownerDocument.documentElement); }; var defaultView = function (element) { var el = element.dom(); var defaultView = el.ownerDocument.defaultView; return Element$$1.fromDom(defaultView); }; var parent = function (element) { var dom = element.dom(); return Option.from(dom.parentNode).map(Element$$1.fromDom); }; var findIndex$1 = function (element) { return parent(element).bind(function (p) { var kin = children(p); return findIndex(kin, function (elem) { return $_3k22killjnlpb2vb.eq(element, elem); }); }); }; var parents = function (element, isRoot) { var stop = isFunction(isRoot) ? isRoot : constant(false); var dom = element.dom(); var ret = []; while (dom.parentNode !== null && dom.parentNode !== undefined) { var rawParent = dom.parentNode; var parent = Element$$1.fromDom(rawParent); ret.push(parent); if (stop(parent) === true) break; else dom = rawParent; } return ret; }; var siblings = function (element) { var filterSelf = function (elements) { return filter(elements, function (x) { return !$_3k22killjnlpb2vb.eq(element, x); }); }; return parent(element).map(children).map(filterSelf).getOr([]); }; var offsetParent = function (element) { var dom = element.dom(); return Option.from(dom.offsetParent).map(Element$$1.fromDom); }; var prevSibling = function (element) { var dom = element.dom(); return Option.from(dom.previousSibling).map(Element$$1.fromDom); }; var nextSibling = function (element) { var dom = element.dom(); return Option.from(dom.nextSibling).map(Element$$1.fromDom); }; var prevSiblings = function (element) { return reverse($_84ox1wlkjnlpb2v9.toArray(element, prevSibling)); }; var nextSiblings = function (element) { return $_84ox1wlkjnlpb2v9.toArray(element, nextSibling); }; var children = function (element) { var dom = element.dom(); return map(dom.childNodes, Element$$1.fromDom); }; var child = function (element, index) { var children = element.dom().childNodes; return Option.from(children[index]).map(Element$$1.fromDom); }; var firstChild = function (element) { return child(element, 0); }; var lastChild = function (element) { return child(element, element.dom().childNodes.length - 1); }; var childNodesCount = function (element) { return element.dom().childNodes.length; }; var hasChildNodes = function (element) { return element.dom().hasChildNodes(); }; var spot = Immutable('element', 'offset'); var leaf = function (element, offset) { var cs = children(element); return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset); }; var $_2pl1nljjnlpb2ur = { owner: owner, defaultView: defaultView, documentElement: documentElement, parent: parent, findIndex: findIndex$1, parents: parents, siblings: siblings, prevSibling: prevSibling, offsetParent: offsetParent, prevSiblings: prevSiblings, nextSibling: nextSibling, nextSiblings: nextSiblings, children: children, child: child, firstChild: firstChild, lastChild: lastChild, childNodesCount: childNodesCount, hasChildNodes: hasChildNodes, leaf: leaf }; var firstLayer = function (scope, selector) { return filterFirstLayer(scope, selector, constant(true)); }; var filterFirstLayer = function (scope, selector, predicate) { return bind($_2pl1nljjnlpb2ur.children(scope), function (x) { return $_1mxomdlfjnlpb2tz.is(x, selector) ? predicate(x) ? [x] : [] : filterFirstLayer(x, selector, predicate); }); }; var $_1s67solejnlpb2tp = { firstLayer: firstLayer, filterFirstLayer: filterFirstLayer }; var name = function (element) { var r = element.dom().nodeName; return r.toLowerCase(); }; var type = function (element) { return element.dom().nodeType; }; var value = function (element) { return element.dom().nodeValue; }; var isType$1 = function (t) { return function (element) { return type(element) === t; }; }; var isComment = function (element) { return type(element) === $_1skeq9lijnlpb2un.COMMENT || name(element) === '#comment'; }; var isElement = isType$1($_1skeq9lijnlpb2un.ELEMENT); var isText = isType$1($_1skeq9lijnlpb2un.TEXT); var isDocument = isType$1($_1skeq9lijnlpb2un.DOCUMENT); var $_erx5tem3jnlpb2x3 = { name: name, type: type, value: value, isElement: isElement, isText: isText, isDocument: isDocument, isComment: isComment }; var rawSet = function (dom, key, value) { if (isString(value) || isBoolean(value) || isNumber(value)) { dom.setAttribute(key, value + ''); } else { console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value, ':: Element ', dom); throw new Error('Attribute value was not simple'); } }; var set = function (element, key, value) { rawSet(element.dom(), key, value); }; var setAll = function (element, attrs) { var dom = element.dom(); each$1(attrs, function (v, k) { rawSet(dom, k, v); }); }; var get$1 = function (element, key) { var v = element.dom().getAttribute(key); return v === null ? undefined : v; }; var has$1 = function (element, key) { var dom = element.dom(); return dom && dom.hasAttribute ? dom.hasAttribute(key) : false; }; var remove = function (element, key) { element.dom().removeAttribute(key); }; var hasNone = function (element) { var attrs = element.dom().attributes; return attrs === undefined || attrs === null || attrs.length === 0; }; var clone = function (element) { return foldl(element.dom().attributes, function (acc, attr) { acc[attr.name] = attr.value; return acc; }, {}); }; var transferOne = function (source, destination, attr) { if (has$1(source, attr) && !has$1(destination, attr)) set(destination, attr, get$1(source, attr)); }; var transfer = function (source, destination, attrs) { if (!$_erx5tem3jnlpb2x3.isElement(source) || !$_erx5tem3jnlpb2x3.isElement(destination)) return; each(attrs, function (attr) { transferOne(source, destination, attr); }); }; var $_9u6utvm2jnlpb2wv = { clone: clone, set: set, setAll: setAll, get: get$1, has: has$1, remove: remove, hasNone: hasNone, transfer: transfer }; var inBody = function (element) { var dom = $_erx5tem3jnlpb2x3.isText(element) ? element.dom().parentNode : element.dom(); return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom); }; var body = cached(function () { return getBody(Element$$1.fromDom(document)); }); var getBody = function (doc) { var body = doc.dom().body; if (body === null || body === undefined) throw 'Body is not available yet'; return Element$$1.fromDom(body); }; var $_1ie4uvm6jnlpb2xf = { body: body, getBody: getBody, inBody: inBody }; var all$1 = function (predicate) { return descendants($_1ie4uvm6jnlpb2xf.body(), predicate); }; var ancestors = function (scope, predicate, isRoot) { return filter($_2pl1nljjnlpb2ur.parents(scope, isRoot), predicate); }; var siblings$1 = function (scope, predicate) { return filter($_2pl1nljjnlpb2ur.siblings(scope), predicate); }; var children$1 = function (scope, predicate) { return filter($_2pl1nljjnlpb2ur.children(scope), predicate); }; var descendants = function (scope, predicate) { var result = []; each($_2pl1nljjnlpb2ur.children(scope), function (x) { if (predicate(x)) { result = result.concat([x]); } result = result.concat(descendants(x, predicate)); }); return result; }; var $_cyfw12m5jnlpb2x7 = { all: all$1, ancestors: ancestors, siblings: siblings$1, children: children$1, descendants: descendants }; var all$2 = function (selector) { return $_1mxomdlfjnlpb2tz.all(selector); }; var ancestors$1 = function (scope, selector, isRoot) { return $_cyfw12m5jnlpb2x7.ancestors(scope, function (e) { return $_1mxomdlfjnlpb2tz.is(e, selector); }, isRoot); }; var siblings$2 = function (scope, selector) { return $_cyfw12m5jnlpb2x7.siblings(scope, function (e) { return $_1mxomdlfjnlpb2tz.is(e, selector); }); }; var children$2 = function (scope, selector) { return $_cyfw12m5jnlpb2x7.children(scope, function (e) { return $_1mxomdlfjnlpb2tz.is(e, selector); }); }; var descendants$1 = function (scope, selector) { return $_1mxomdlfjnlpb2tz.all(selector, scope); }; var $_97aehqm4jnlpb2x5 = { all: all$2, ancestors: ancestors$1, siblings: siblings$2, children: children$2, descendants: descendants$1 }; function ClosestOrAncestor (is, ancestor, scope, a, isRoot) { return is(scope, a) ? Option.some(scope) : isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot); } var first$1 = function (predicate) { return descendant($_1ie4uvm6jnlpb2xf.body(), predicate); }; var ancestor = function (scope, predicate, isRoot) { var element = scope.dom(); var stop = isFunction(isRoot) ? isRoot : constant(false); while (element.parentNode) { element = element.parentNode; var el = Element$$1.fromDom(element); if (predicate(el)) return Option.some(el); else if (stop(el)) break; } return Option.none(); }; var closest = function (scope, predicate, isRoot) { var is = function (scope) { return predicate(scope); }; return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot); }; var sibling = function (scope, predicate) { var element = scope.dom(); if (!element.parentNode) return Option.none(); return child$1(Element$$1.fromDom(element.parentNode), function (x) { return !$_3k22killjnlpb2vb.eq(scope, x) && predicate(x); }); }; var child$1 = function (scope, predicate) { var result = find(scope.dom().childNodes, compose(predicate, Element$$1.fromDom)); return result.map(Element$$1.fromDom); }; var descendant = function (scope, predicate) { var descend = function (node) { for (var i = 0; i < node.childNodes.length; i++) { if (predicate(Element$$1.fromDom(node.childNodes[i]))) return Option.some(Element$$1.fromDom(node.childNodes[i])); var res = descend(node.childNodes[i]); if (res.isSome()) return res; } return Option.none(); }; return descend(scope.dom()); }; var $_1nfdlmm8jnlpb2xl = { first: first$1, ancestor: ancestor, closest: closest, sibling: sibling, child: child$1, descendant: descendant }; var first$2 = function (selector) { return $_1mxomdlfjnlpb2tz.one(selector); }; var ancestor$1 = function (scope, selector, isRoot) { return $_1nfdlmm8jnlpb2xl.ancestor(scope, function (e) { return $_1mxomdlfjnlpb2tz.is(e, selector); }, isRoot); }; var sibling$1 = function (scope, selector) { return $_1nfdlmm8jnlpb2xl.sibling(scope, function (e) { return $_1mxomdlfjnlpb2tz.is(e, selector); }); }; var child$2 = function (scope, selector) { return $_1nfdlmm8jnlpb2xl.child(scope, function (e) { return $_1mxomdlfjnlpb2tz.is(e, selector); }); }; var descendant$1 = function (scope, selector) { return $_1mxomdlfjnlpb2tz.one(selector, scope); }; var closest$1 = function (scope, selector, isRoot) { return ClosestOrAncestor($_1mxomdlfjnlpb2tz.is, ancestor$1, scope, selector, isRoot); }; var $_gdszrpm7jnlpb2xk = { first: first$2, ancestor: ancestor$1, sibling: sibling$1, child: child$2, descendant: descendant$1, closest: closest$1 }; var lookup = function (tags, element, _isRoot) { var isRoot = _isRoot !== undefined ? _isRoot : constant(false); if (isRoot(element)) return Option.none(); if (contains(tags, $_erx5tem3jnlpb2x3.name(element))) return Option.some(element); var isRootOrUpperTable = function (element) { return $_1mxomdlfjnlpb2tz.is(element, 'table') || isRoot(element); }; return $_gdszrpm7jnlpb2xk.ancestor(element, tags.join(','), isRootOrUpperTable); }; var cell = function (element, isRoot) { return lookup([ 'td', 'th' ], element, isRoot); }; var cells = function (ancestor) { return $_1s67solejnlpb2tp.firstLayer(ancestor, 'th,td'); }; var notCell = function (element, isRoot) { return lookup([ 'caption', 'tr', 'tbody', 'tfoot', 'thead' ], element, isRoot); }; var neighbours = function (selector, element) { return $_2pl1nljjnlpb2ur.parent(element).map(function (parent) { return $_97aehqm4jnlpb2x5.children(parent, selector); }); }; var neighbourCells = curry(neighbours, 'th,td'); var neighbourRows = curry(neighbours, 'tr'); var firstCell = function (ancestor) { return $_gdszrpm7jnlpb2xk.descendant(ancestor, 'th,td'); }; var table = function (element, isRoot) { return $_gdszrpm7jnlpb2xk.closest(element, 'table', isRoot); }; var row = function (element, isRoot) { return lookup(['tr'], element, isRoot); }; var rows = function (ancestor) { return $_1s67solejnlpb2tp.firstLayer(ancestor, 'tr'); }; var attr = function (element, property) { return parseInt($_9u6utvm2jnlpb2wv.get(element, property), 10); }; var grid$1 = function (element, rowProp, colProp) { var rows = attr(element, rowProp); var cols = attr(element, colProp); return $_csuubelcjnlpb2sv.grid(rows, cols); }; var $_em4z2mldjnlpb2sz = { cell: cell, firstCell: firstCell, cells: cells, neighbourCells: neighbourCells, table: table, row: row, rows: rows, notCell: notCell, neighbourRows: neighbourRows, attr: attr, grid: grid$1 }; var fromTable = function (table) { var rows = $_em4z2mldjnlpb2sz.rows(table); return map(rows, function (row) { var element = row; var parent = $_2pl1nljjnlpb2ur.parent(element); var parentSection = parent.map(function (parent) { var parentName = $_erx5tem3jnlpb2x3.name(parent); return parentName === 'tfoot' || parentName === 'thead' || parentName === 'tbody' ? parentName : 'tbody'; }).getOr('tbody'); var cells = map($_em4z2mldjnlpb2sz.cells(row), function (cell) { var rowspan = $_9u6utvm2jnlpb2wv.has(cell, 'rowspan') ? parseInt($_9u6utvm2jnlpb2wv.get(cell, 'rowspan'), 10) : 1; var colspan = $_9u6utvm2jnlpb2wv.has(cell, 'colspan') ? parseInt($_9u6utvm2jnlpb2wv.get(cell, 'colspan'), 10) : 1; return $_csuubelcjnlpb2sv.detail(cell, rowspan, colspan); }); return $_csuubelcjnlpb2sv.rowdata(element, cells, parentSection); }); }; var fromPastedRows = function (rows, example) { return map(rows, function (row) { var cells = map($_em4z2mldjnlpb2sz.cells(row), function (cell) { var rowspan = $_9u6utvm2jnlpb2wv.has(cell, 'rowspan') ? parseInt($_9u6utvm2jnlpb2wv.get(cell, 'rowspan'), 10) : 1; var colspan = $_9u6utvm2jnlpb2wv.has(cell, 'colspan') ? parseInt($_9u6utvm2jnlpb2wv.get(cell, 'colspan'), 10) : 1; return $_csuubelcjnlpb2sv.detail(cell, rowspan, colspan); }); return $_csuubelcjnlpb2sv.rowdata(row, cells, example.section()); }); }; var $_g8jea2lbjnlpb2sm = { fromTable: fromTable, fromPastedRows: fromPastedRows }; var key = function (row, column) { return row + ',' + column; }; var getAt = function (warehouse, row, column) { var raw = warehouse.access()[key(row, column)]; return raw !== undefined ? Option.some(raw) : Option.none(); }; var findItem = function (warehouse, item, comparator) { var filtered = filterItems(warehouse, function (detail) { return comparator(item, detail.element()); }); return filtered.length > 0 ? Option.some(filtered[0]) : Option.none(); }; var filterItems = function (warehouse, predicate) { var all = bind(warehouse.all(), function (r) { return r.cells(); }); return filter(all, predicate); }; var generate = function (list) { var access = {}; var cells = []; var maxRows = list.length; var maxColumns = 0; each(list, function (details, r) { var currentRow = []; each(details.cells(), function (detail, c) { var start = 0; while (access[key(r, start)] !== undefined) { start++; } var current = $_csuubelcjnlpb2sv.extended(detail.element(), detail.rowspan(), detail.colspan(), r, start); for (var i = 0; i < detail.colspan(); i++) { for (var j = 0; j < detail.rowspan(); j++) { var cr = r + j; var cc = start + i; var newpos = key(cr, cc); access[newpos] = current; maxColumns = Math.max(maxColumns, cc + 1); } } currentRow.push(current); }); cells.push($_csuubelcjnlpb2sv.rowdata(details.element(), currentRow, details.section())); }); var grid = $_csuubelcjnlpb2sv.grid(maxRows, maxColumns); return { grid: constant(grid), access: constant(access), all: constant(cells) }; }; var justCells = function (warehouse) { var rows = map(warehouse.all(), function (w) { return w.cells(); }); return flatten(rows); }; var $_ein1yumajnlpb2y1 = { generate: generate, getAt: getAt, findItem: findItem, filterItems: filterItems, justCells: justCells }; var isSupported = function (dom) { return dom.style !== undefined; }; var $_4sfuxamcjnlpb2yn = { isSupported: isSupported }; var internalSet = function (dom, property, value) { if (!isString(value)) { console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom); throw new Error('CSS value must be a string: ' + value); } if ($_4sfuxamcjnlpb2yn.isSupported(dom)) dom.style.setProperty(property, value); }; var internalRemove = function (dom, property) { if ($_4sfuxamcjnlpb2yn.isSupported(dom)) dom.style.removeProperty(property); }; var set$1 = function (element, property, value) { var dom = element.dom(); internalSet(dom, property, value); }; var setAll$1 = function (element, css) { var dom = element.dom(); each$1(css, function (v, k) { internalSet(dom, k, v); }); }; var setOptions = function (element, css) { var dom = element.dom(); each$1(css, function (v, k) { v.fold(function () { internalRemove(dom, k); }, function (value) { internalSet(dom, k, value); }); }); }; var get$2 = function (element, property) { var dom = element.dom(); var styles = window.getComputedStyle(dom); var r = styles.getPropertyValue(property); var v = r === '' && !$_1ie4uvm6jnlpb2xf.inBody(element) ? getUnsafeProperty(dom, property) : r; return v === null ? undefined : v; }; var getUnsafeProperty = function (dom, property) { return $_4sfuxamcjnlpb2yn.isSupported(dom) ? dom.style.getPropertyValue(property) : ''; }; var getRaw = function (element, property) { var dom = element.dom(); var raw = getUnsafeProperty(dom, property); return Option.from(raw).filter(function (r) { return r.length > 0; }); }; var getAllRaw = function (element) { var css = {}; var dom = element.dom(); if ($_4sfuxamcjnlpb2yn.isSupported(dom)) { for (var i = 0; i < dom.style.length; i++) { var ruleName = dom.style.item(i); css[ruleName] = dom.style[ruleName]; } } return css; }; var isValidValue = function (tag, property, value) { var element = Element$$1.fromTag(tag); set$1(element, property, value); var style = getRaw(element, property); return style.isSome(); }; var remove$1 = function (element, property) { var dom = element.dom(); internalRemove(dom, property); if ($_9u6utvm2jnlpb2wv.has(element, 'style') && trim($_9u6utvm2jnlpb2wv.get(element, 'style')) === '') { $_9u6utvm2jnlpb2wv.remove(element, 'style'); } }; var preserve = function (element, f) { var oldStyles = $_9u6utvm2jnlpb2wv.get(element, 'style'); var result = f(element); var restore = oldStyles === undefined ? $_9u6utvm2jnlpb2wv.remove : $_9u6utvm2jnlpb2wv.set; restore(element, 'style', oldStyles); return result; }; var copy = function (source, target) { var sourceDom = source.dom(); var targetDom = target.dom(); if ($_4sfuxamcjnlpb2yn.isSupported(sourceDom) && $_4sfuxamcjnlpb2yn.isSupported(targetDom)) { targetDom.style.cssText = sourceDom.style.cssText; } }; var reflow = function (e) { return e.dom().offsetWidth; }; var transferOne$1 = function (source, destination, style) { getRaw(source, style).each(function (value) { if (getRaw(destination, style).isNone()) set$1(destination, style, value); }); }; var transfer$1 = function (source, destination, styles) { if (!$_erx5tem3jnlpb2x3.isElement(source) || !$_erx5tem3jnlpb2x3.isElement(destination)) return; each(styles, function (style) { transferOne$1(source, destination, style); }); }; var $_g8mvdembjnlpb2ya = { copy: copy, set: set$1, preserve: preserve, setAll: setAll$1, setOptions: setOptions, remove: remove$1, get: get$2, getRaw: getRaw, getAllRaw: getAllRaw, isValidValue: isValidValue, reflow: reflow, transfer: transfer$1 }; var before = function (marker, element) { var parent = $_2pl1nljjnlpb2ur.parent(marker); parent.each(function (v) { v.dom().insertBefore(element.dom(), marker.dom()); }); }; var after = function (marker, element) { var sibling = $_2pl1nljjnlpb2ur.nextSibling(marker); sibling.fold(function () { var parent = $_2pl1nljjnlpb2ur.parent(marker); parent.each(function (v) { append(v, element); }); }, function (v) { before(v, element); }); }; var prepend = function (parent, element) { var firstChild = $_2pl1nljjnlpb2ur.firstChild(parent); firstChild.fold(function () { append(parent, element); }, function (v) { parent.dom().insertBefore(element.dom(), v.dom()); }); }; var append = function (parent, element) { parent.dom().appendChild(element.dom()); }; var appendAt = function (parent, element, index) { $_2pl1nljjnlpb2ur.child(parent, index).fol