(function () { var mobile = (function () { 'use strict'; var noop = function () { }; var noarg = function (f) { return function () { return f(); }; }; var compose = function (fa, fb) { return function () { return fa(fb.apply(null, arguments)); }; }; var constant = function (value) { return function () { return value; }; }; var identity = function (x) { return x; }; var tripleEquals = function (a, b) { return a === b; }; var curry = function (f) { var args = new Array(arguments.length - 1); for (var i = 1; i < arguments.length; i++) args[i - 1] = arguments[i]; return function () { 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 () { return !f.apply(null, arguments); }; }; var die = function (msg) { return function () { throw new Error(msg); }; }; var apply = function (f) { return f(); }; var call = function (f) { f(); }; var never = constant(false); var always = constant(true); var $_9njj9iwjjdud7eix = { noop: noop, noarg: noarg, compose: compose, constant: constant, identity: identity, tripleEquals: tripleEquals, curry: curry, not: not, die: die, apply: apply, call: call, never: never, always: always }; var $_brmbwvwijdud7eiu = { contextmenu: $_9njj9iwjjdud7eix.constant('contextmenu'), touchstart: $_9njj9iwjjdud7eix.constant('touchstart'), touchmove: $_9njj9iwjjdud7eix.constant('touchmove'), touchend: $_9njj9iwjjdud7eix.constant('touchend'), gesturestart: $_9njj9iwjjdud7eix.constant('gesturestart'), mousedown: $_9njj9iwjjdud7eix.constant('mousedown'), mousemove: $_9njj9iwjjdud7eix.constant('mousemove'), mouseout: $_9njj9iwjjdud7eix.constant('mouseout'), mouseup: $_9njj9iwjjdud7eix.constant('mouseup'), mouseover: $_9njj9iwjjdud7eix.constant('mouseover'), focusin: $_9njj9iwjjdud7eix.constant('focusin'), keydown: $_9njj9iwjjdud7eix.constant('keydown'), input: $_9njj9iwjjdud7eix.constant('input'), change: $_9njj9iwjjdud7eix.constant('change'), focus: $_9njj9iwjjdud7eix.constant('focus'), click: $_9njj9iwjjdud7eix.constant('click'), transitionend: $_9njj9iwjjdud7eix.constant('transitionend'), selectstart: $_9njj9iwjjdud7eix.constant('selectstart') }; var cached = function (f) { var called = false; var r; return function () { if (!called) { called = true; r = f.apply(null, arguments); } return r; }; }; var $_2nf0bewljdud7ej2 = { cached: cached }; 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 = 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(versionRegexes, cleanedAgent); }; var unknown = function () { return nu(0, 0); }; var nu = function (major, minor) { return { major: major, minor: minor }; }; var $_f0l90ewojdud7ej7 = { 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: $_f0l90ewojdud7ej7.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 $_b24lawnjdud7ej4 = { unknown: unknown$1, nu: nu$1, edge: $_9njj9iwjjdud7eix.constant(edge), chrome: $_9njj9iwjjdud7eix.constant(chrome), ie: $_9njj9iwjjdud7eix.constant(ie), opera: $_9njj9iwjjdud7eix.constant(opera), firefox: $_9njj9iwjjdud7eix.constant(firefox), safari: $_9njj9iwjjdud7eix.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: $_f0l90ewojdud7ej7.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 $_7etfbawpjdud7ejh = { unknown: unknown$2, nu: nu$2, windows: $_9njj9iwjjdud7eix.constant(windows), ios: $_9njj9iwjjdud7eix.constant(ios), android: $_9njj9iwjjdud7eix.constant(android), linux: $_9njj9iwjjdud7eix.constant(linux), osx: $_9njj9iwjjdud7eix.constant(osx), solaris: $_9njj9iwjjdud7eix.constant(solaris), freebsd: $_9njj9iwjjdud7eix.constant(freebsd) }; function DeviceType (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: $_9njj9iwjjdud7eix.constant(isiPad), isiPhone: $_9njj9iwjjdud7eix.constant(isiPhone), isTablet: $_9njj9iwjjdud7eix.constant(isTablet), isPhone: $_9njj9iwjjdud7eix.constant(isPhone), isTouch: $_9njj9iwjjdud7eix.constant(isTouch), isAndroid: os.isAndroid, isiOS: os.isiOS, isWebView: $_9njj9iwjjdud7eix.constant(iOSwebview) }; } var never$1 = $_9njj9iwjjdud7eix.never; var always$1 = $_9njj9iwjjdud7eix.always; var none = function () { return NONE; }; var NONE = function () { var eq = function (o) { return o.isNone(); }; var call = function (thunk) { return thunk(); }; var id = function (n) { return n; }; var noop = function () { }; var me = { fold: function (n, s) { return n(); }, is: never$1, isSome: never$1, isNone: always$1, getOr: id, getOrThunk: call, getOrDie: function (msg) { throw new Error(msg || 'error: getOrDie called on none.'); }, or: id, orThunk: call, map: none, ap: none, each: noop, bind: none, flatten: none, exists: never$1, forall: always$1, filter: none, equals: eq, equals_: eq, toArray: function () { return []; }, toString: $_9njj9iwjjdud7eix.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, 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 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 indexOf = function (xs, x) { var r = rawIndexOf(xs, x); return r === -1 ? Option.none() : Option.some(r); }; var contains = function (xs, x) { return rawIndexOf(xs, x) > -1; }; var exists = function (xs, pred) { return findIndex(xs, pred).isSome(); }; var range = function (num, f) { var r = []; for (var i = 0; i < num; i++) { r.push(f(i)); } return r; }; var chunk = function (array, size) { var r = []; for (var i = 0; i < array.length; i += size) { var s = array.slice(i, i + size); r.push(s); } return r; }; 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 partition = function (xs, pred) { var pass = []; var fail = []; for (var i = 0, len = xs.length; i < len; i++) { var x = xs[i]; var arr = pred(x, i, xs) ? pass : fail; arr.push(x); } return { pass: pass, fail: fail }; }; 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 groupBy = function (xs, f) { if (xs.length === 0) { return []; } else { var wasType = f(xs[0]); var r = []; var group = []; for (var i = 0, len = xs.length; i < len; i++) { var x = xs[i]; var type = f(x); if (type !== wasType) { r.push(group); group = []; } wasType = type; group.push(x); } if (group.length !== 0) { r.push(group); } 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$1 = 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 equal = function (a1, a2) { return a1.length === a2.length && forall(a1, function (x, i) { return x === a2[i]; }); }; var slice = Array.prototype.slice; var reverse = function (xs) { var r = slice.call(xs, 0); r.reverse(); return r; }; var difference = function (a1, a2) { return filter(a1, function (x) { return !contains(a2, x); }); }; var mapToObject = function (xs, f) { var r = {}; for (var i = 0, len = xs.length; i < len; i++) { var x = xs[i]; r[String(x)] = f(x, i); } return r; }; var pure = function (x) { return [x]; }; var sort = function (xs, comparator) { var copy = slice.call(xs, 0); copy.sort(comparator); return copy; }; var head = function (xs) { return xs.length === 0 ? Option.none() : Option.some(xs[0]); }; var last = function (xs) { return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]); }; var $_1g2cevwsjdud7ejp = { map: map, each: each, eachr: eachr, partition: partition, filter: filter, groupBy: groupBy, indexOf: indexOf, foldr: foldr, foldl: foldl, find: find$1, findIndex: findIndex, flatten: flatten, bind: bind, forall: forall, exists: exists, contains: contains, equal: equal, reverse: reverse, chunk: chunk, difference: difference, mapToObject: mapToObject, pure: pure, sort: sort, range: range, head: head, last: last }; var detect$1 = function (candidates, userAgent) { var agent = String(userAgent).toLowerCase(); return $_1g2cevwsjdud7ejp.find(candidates, function (candidate) { return candidate.search(agent); }); }; var detectBrowser = function (browsers, userAgent) { return detect$1(browsers, userAgent).map(function (browser) { var version = $_f0l90ewojdud7ej7.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 = $_f0l90ewojdud7ej7.detect(os.versionRegexes, userAgent); return { current: os.name, version: version }; }); }; var $_72dxucwrjdud7ejm = { detectBrowser: detectBrowser, detectOs: detectOs }; var addToStart = function (str, prefix) { return prefix + str; }; var addToEnd = function (str, suffix) { return str + suffix; }; var removeFromStart = function (str, numChars) { return str.substring(numChars); }; var removeFromEnd = function (str, numChars) { return str.substring(0, str.length - numChars); }; var $_2u10wgwwjdud7ek7 = { addToStart: addToStart, addToEnd: addToEnd, removeFromStart: removeFromStart, removeFromEnd: removeFromEnd }; var first = function (str, count) { return str.substr(0, count); }; var last$1 = function (str, count) { return str.substr(str.length - count, str.length); }; var head$1 = function (str) { return str === '' ? Option.none() : Option.some(str.substr(0, 1)); }; var tail = function (str) { return str === '' ? Option.none() : Option.some(str.substring(1)); }; var $_elr1mrwxjdud7ek8 = { first: first, last: last$1, head: head$1, tail: tail }; 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 supplant = function (str, obj) { var isStringOrNumber = function (a) { var t = typeof a; return t === 'string' || t === 'number'; }; return str.replace(/\${([^{}]*)}/g, function (a, b) { var value = obj[b]; return isStringOrNumber(value) ? value : a; }); }; var removeLeading = function (str, prefix) { return startsWith(str, prefix) ? $_2u10wgwwjdud7ek7.removeFromStart(str, prefix.length) : str; }; var removeTrailing = function (str, prefix) { return endsWith(str, prefix) ? $_2u10wgwwjdud7ek7.removeFromEnd(str, prefix.length) : str; }; var ensureLeading = function (str, prefix) { return startsWith(str, prefix) ? str : $_2u10wgwwjdud7ek7.addToStart(str, prefix); }; var ensureTrailing = function (str, prefix) { return endsWith(str, prefix) ? str : $_2u10wgwwjdud7ek7.addToEnd(str, prefix); }; var contains$1 = function (str, substr) { return str.indexOf(substr) !== -1; }; var capitalize = function (str) { return $_elr1mrwxjdud7ek8.head(str).bind(function (head) { return $_elr1mrwxjdud7ek8.tail(str).map(function (tail) { return head.toUpperCase() + tail; }); }).getOr(str); }; var startsWith = function (str, prefix) { return checkRange(str, prefix, 0); }; var endsWith = function (str, suffix) { return checkRange(str, suffix, str.length - suffix.length); }; var trim = function (str) { return str.replace(/^\s+|\s+$/g, ''); }; var lTrim = function (str) { return str.replace(/^\s+/g, ''); }; var rTrim = function (str) { return str.replace(/\s+$/g, ''); }; var $_2e2eauwvjdud7ek5 = { supplant: supplant, startsWith: startsWith, removeLeading: removeLeading, removeTrailing: removeTrailing, ensureLeading: ensureLeading, ensureTrailing: ensureTrailing, endsWith: endsWith, contains: contains$1, trim: trim, lTrim: lTrim, rTrim: rTrim, capitalize: capitalize }; var normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/; var checkContains = function (target) { return function (uastring) { return $_2e2eauwvjdud7ek5.contains(uastring, target); }; }; var browsers = [ { name: 'Edge', versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/], search: function (uastring) { var monstrosity = $_2e2eauwvjdud7ek5.contains(uastring, 'edge/') && $_2e2eauwvjdud7ek5.contains(uastring, 'chrome') && $_2e2eauwvjdud7ek5.contains(uastring, 'safari') && $_2e2eauwvjdud7ek5.contains(uastring, 'applewebkit'); return monstrosity; } }, { name: 'Chrome', versionRegexes: [ /.*?chrome\/([0-9]+)\.([0-9]+).*/, normalVersionRegex ], search: function (uastring) { return $_2e2eauwvjdud7ek5.contains(uastring, 'chrome') && !$_2e2eauwvjdud7ek5.contains(uastring, 'chromeframe'); } }, { name: 'IE', versionRegexes: [ /.*?msie\ ?([0-9]+)\.([0-9]+).*/, /.*?rv:([0-9]+)\.([0-9]+).*/ ], search: function (uastring) { return $_2e2eauwvjdud7ek5.contains(uastring, 'msie') || $_2e2eauwvjdud7ek5.contains(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 ($_2e2eauwvjdud7ek5.contains(uastring, 'safari') || $_2e2eauwvjdud7ek5.contains(uastring, 'mobile/')) && $_2e2eauwvjdud7ek5.contains(uastring, 'applewebkit'); } } ]; var oses = [ { name: 'Windows', search: checkContains('win'), versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/] }, { name: 'iOS', search: function (uastring) { return $_2e2eauwvjdud7ek5.contains(uastring, 'iphone') || $_2e2eauwvjdud7ek5.contains(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 $_96jjecwujdud7ek0 = { browsers: $_9njj9iwjjdud7eix.constant(browsers), oses: $_9njj9iwjjdud7eix.constant(oses) }; var detect$2 = function (userAgent) { var browsers = $_96jjecwujdud7ek0.browsers(); var oses = $_96jjecwujdud7ek0.oses(); var browser = $_72dxucwrjdud7ejm.detectBrowser(browsers, userAgent).fold($_b24lawnjdud7ej4.unknown, $_b24lawnjdud7ej4.nu); var os = $_72dxucwrjdud7ejm.detectOs(oses, userAgent).fold($_7etfbawpjdud7ejh.unknown, $_7etfbawpjdud7ejh.nu); var deviceType = DeviceType(os, browser, userAgent); return { browser: browser, os: os, deviceType: deviceType }; }; var $_63bkauwmjdud7ej3 = { detect: detect$2 }; var detect$3 = $_2nf0bewljdud7ej2.cached(function () { var userAgent = navigator.userAgent; return $_63bkauwmjdud7ej3.detect(userAgent); }); var $_chh2cvwkjdud7ej0 = { detect: detect$3 }; var alloy = { tap: $_9njj9iwjjdud7eix.constant('alloy.tap') }; var $_801kkqwhjdud7eiq = { focus: $_9njj9iwjjdud7eix.constant('alloy.focus'), postBlur: $_9njj9iwjjdud7eix.constant('alloy.blur.post'), receive: $_9njj9iwjjdud7eix.constant('alloy.receive'), execute: $_9njj9iwjjdud7eix.constant('alloy.execute'), focusItem: $_9njj9iwjjdud7eix.constant('alloy.focus.item'), tap: alloy.tap, tapOrClick: $_chh2cvwkjdud7ej0.detect().deviceType.isTouch() ? alloy.tap : $_brmbwvwijdud7eiu.click, longpress: $_9njj9iwjjdud7eix.constant('alloy.longpress'), sandboxClose: $_9njj9iwjjdud7eix.constant('alloy.sandbox.close'), systemInit: $_9njj9iwjjdud7eix.constant('alloy.system.init'), windowScroll: $_9njj9iwjjdud7eix.constant('alloy.system.scroll'), attachedToDom: $_9njj9iwjjdud7eix.constant('alloy.system.attached'), detachedFromDom: $_9njj9iwjjdud7eix.constant('alloy.system.detached'), changeTab: $_9njj9iwjjdud7eix.constant('alloy.change.tab'), dismissTab: $_9njj9iwjjdud7eix.constant('alloy.dismiss.tab') }; 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 $_9rljuwzjdud7ekb = { isString: isType('string'), isObject: isType('object'), isArray: isType('array'), isNull: isType('null'), isBoolean: isType('boolean'), isUndefined: isType('undefined'), isFunction: isType('function'), isNumber: isType('number') }; var shallow = function (old, nu) { return nu; }; var deep = function (old, nu) { var bothObjects = $_9rljuwzjdud7ekb.isObject(old) && $_9rljuwzjdud7ekb.isObject(nu); return bothObjects ? deepMerge(old, nu) : nu; }; var baseMerge = function (merger) { return function () { var objects = new Array(arguments.length); for (var i = 0; i < objects.length; i++) objects[i] = arguments[i]; if (objects.length === 0) throw new Error('Can\'t merge zero objects'); var ret = {}; for (var j = 0; j < objects.length; j++) { var curObject = objects[j]; for (var key in curObject) if (curObject.hasOwnProperty(key)) { ret[key] = merger(ret[key], curObject[key]); } } return ret; }; }; var deepMerge = baseMerge(deep); var merge = baseMerge(shallow); var $_73qnwowyjdud7ek9 = { deepMerge: deepMerge, merge: merge }; var keys = function () { var fastKeys = Object.keys; var slowKeys = function (o) { var r = []; for (var i in o) { if (o.hasOwnProperty(i)) { r.push(i); } } return r; }; return fastKeys === undefined ? slowKeys : fastKeys; }(); 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 objectMap = 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 bifilter = function (obj, pred) { var t = {}; var f = {}; each$1(obj, function (x, i) { var branch = pred(x, i) ? t : f; branch[i] = x; }); return { t: t, f: f }; }; var mapToArray = function (obj, f) { var r = []; each$1(obj, function (value, name) { r.push(f(value, name)); }); return r; }; var find$2 = function (obj, pred) { var props = keys(obj); for (var k = 0, len = props.length; k < len; k++) { var i = props[k]; var x = obj[i]; if (pred(x, i, obj)) { return Option.some(x); } } return Option.none(); }; var values = function (obj) { return mapToArray(obj, function (v) { return v; }); }; var size = function (obj) { return values(obj).length; }; var $_2dykn0x0jdud7ekc = { bifilter: bifilter, each: each$1, map: objectMap, mapToArray: mapToArray, tupleMap: tupleMap, find: find$2, keys: keys, values: values, size: size }; var emit = function (component, event) { dispatchWith(component, component.element(), event, {}); }; var emitWith = function (component, event, properties) { dispatchWith(component, component.element(), event, properties); }; var emitExecute = function (component) { emit(component, $_801kkqwhjdud7eiq.execute()); }; var dispatch = function (component, target, event) { dispatchWith(component, target, event, {}); }; var dispatchWith = function (component, target, event, properties) { var data = $_73qnwowyjdud7ek9.deepMerge({ target: target }, properties); component.getSystem().triggerEvent(event, target, $_2dykn0x0jdud7ekc.map(data, $_9njj9iwjjdud7eix.constant)); }; var dispatchEvent = function (component, target, event, simulatedEvent) { component.getSystem().triggerEvent(event, target, simulatedEvent.event()); }; var dispatchFocus = function (component, target) { component.getSystem().triggerFocus(target, component.element()); }; var $_98da6jwgjdud7eil = { emit: emit, emitWith: emitWith, emitExecute: emitExecute, dispatch: dispatch, dispatchWith: dispatchWith, dispatchEvent: dispatchEvent, dispatchFocus: dispatchFocus }; function Immutable () { var fields = arguments; return function () { var values = new Array(arguments.length); for (var i = 0; i < values.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 = {}; $_1g2cevwsjdud7ejp.each(fields, function (name, i) { struct[name] = $_9njj9iwjjdud7eix.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 (!$_9rljuwzjdud7ekb.isArray(array)) throw new Error('The ' + label + ' fields must be an array. Was: ' + array + '.'); $_1g2cevwsjdud7ejp.each(array, function (a) { if (!$_9rljuwzjdud7ekb.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 = $_1g2cevwsjdud7ejp.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 $_1ie102x7jdud7el4 = { sort: sort$1, reqMessage: reqMessage, unsuppMessage: unsuppMessage, validateStrArr: validateStrArr, invalidTypeMessage: invalidTypeMessage, checkDupes: checkDupes }; function MixedBag (required, optional) { var everything = required.concat(optional); if (everything.length === 0) throw new Error('You must specify at least one required or optional field.'); $_1ie102x7jdud7el4.validateStrArr('required', required); $_1ie102x7jdud7el4.validateStrArr('optional', optional); $_1ie102x7jdud7el4.checkDupes(everything); return function (obj) { var keys = $_2dykn0x0jdud7ekc.keys(obj); var allReqd = $_1g2cevwsjdud7ejp.forall(required, function (req) { return $_1g2cevwsjdud7ejp.contains(keys, req); }); if (!allReqd) $_1ie102x7jdud7el4.reqMessage(required, keys); var unsupported = $_1g2cevwsjdud7ejp.filter(keys, function (key) { return !$_1g2cevwsjdud7ejp.contains(everything, key); }); if (unsupported.length > 0) $_1ie102x7jdud7el4.unsuppMessage(unsupported); var r = {}; $_1g2cevwsjdud7ejp.each(required, function (req) { r[req] = $_9njj9iwjjdud7eix.constant(obj[req]); }); $_1g2cevwsjdud7ejp.each(optional, function (opt) { r[opt] = $_9njj9iwjjdud7eix.constant(Object.prototype.hasOwnProperty.call(obj, opt) ? Option.some(obj[opt]) : Option.none()); }); return r; }; } var $_8o1q69x4jdud7ekz = { immutable: Immutable, immutableBag: MixedBag }; 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 $_ajxr2ix8jdud7el6 = { 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 step = function (o, part) { if (o[part] === undefined || o[part] === null) o[part] = {}; return o[part]; }; var forge = function (parts, target) { var o = target !== undefined ? target : global; for (var i = 0; i < parts.length; ++i) o = step(o, parts[i]); return o; }; var namespace = function (name, target) { var parts = name.split('.'); return forge(parts, target); }; var $_g961dixcjdud7elo = { path: path, resolve: resolve, forge: forge, namespace: namespace }; var unsafe = function (name, scope) { return $_g961dixcjdud7elo.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 $_3ytg1qxbjdud7elm = { getOrDie: getOrDie }; var node = function () { var f = $_3ytg1qxbjdud7elm.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 $_f2fzzbxajdud7ell = { documentPositionPreceding: documentPositionPreceding, documentPositionContainedBy: documentPositionContainedBy }; 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: $_9njj9iwjjdud7eix.constant(node) }; }; var fromPoint = function (doc, x, y) { return Option.from(doc.dom().elementFromPoint(x, y)).map(fromDom); }; var $_eobgtqxfjdud7elu = { fromHtml: fromHtml, fromTag: fromTag, fromText: fromText, fromDom: fromDom, fromPoint: fromPoint }; var $_5jaggbxgjdud7ely = { ATTRIBUTE: 2, CDATA_SECTION: 4, COMMENT: 8, DOCUMENT: 9, DOCUMENT_TYPE: 10, DOCUMENT_FRAGMENT: 11, ELEMENT: 1, TEXT: 3, PROCESSING_INSTRUCTION: 7, ENTITY_REFERENCE: 5, ENTITY: 6, NOTATION: 12 }; var ELEMENT = $_5jaggbxgjdud7ely.ELEMENT; var DOCUMENT = $_5jaggbxgjdud7ely.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) ? [] : $_1g2cevwsjdud7ejp.map(base.querySelectorAll(selector), $_eobgtqxfjdud7elu.fromDom); }; var one = function (selector, scope) { var base = scope === undefined ? document : scope.dom(); return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map($_eobgtqxfjdud7elu.fromDom); }; var $_1t43jfxejdud7elq = { all: all, is: is, one: one }; 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 $_1g2cevwsjdud7ejp.exists(elements, $_9njj9iwjjdud7eix.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 $_f2fzzbxajdud7ell.documentPositionContainedBy(e1.dom(), e2.dom()); }; var browser = $_chh2cvwkjdud7ej0.detect().browser; var contains$2 = browser.isIE() ? ieContains : regularContains; var $_f1y1rtx9jdud7el7 = { eq: eq, isEqualNode: isEqualNode, member: member, contains: contains$2, is: $_1t43jfxejdud7elq.is }; var owner = function (element) { return $_eobgtqxfjdud7elu.fromDom(element.dom().ownerDocument); }; var documentElement = function (element) { var doc = owner(element); return $_eobgtqxfjdud7elu.fromDom(doc.dom().documentElement); }; var defaultView = function (element) { var el = element.dom(); var defaultView = el.ownerDocument.defaultView; return $_eobgtqxfjdud7elu.fromDom(defaultView); }; var parent = function (element) { var dom = element.dom(); return Option.from(dom.parentNode).map($_eobgtqxfjdud7elu.fromDom); }; var findIndex$1 = function (element) { return parent(element).bind(function (p) { var kin = children(p); return $_1g2cevwsjdud7ejp.findIndex(kin, function (elem) { return $_f1y1rtx9jdud7el7.eq(element, elem); }); }); }; var parents = function (element, isRoot) { var stop = $_9rljuwzjdud7ekb.isFunction(isRoot) ? isRoot : $_9njj9iwjjdud7eix.constant(false); var dom = element.dom(); var ret = []; while (dom.parentNode !== null && dom.parentNode !== undefined) { var rawParent = dom.parentNode; var parent = $_eobgtqxfjdud7elu.fromDom(rawParent); ret.push(parent); if (stop(parent) === true) break; else dom = rawParent; } return ret; }; var siblings = function (element) { var filterSelf = function (elements) { return $_1g2cevwsjdud7ejp.filter(elements, function (x) { return !$_f1y1rtx9jdud7el7.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($_eobgtqxfjdud7elu.fromDom); }; var prevSibling = function (element) { var dom = element.dom(); return Option.from(dom.previousSibling).map($_eobgtqxfjdud7elu.fromDom); }; var nextSibling = function (element) { var dom = element.dom(); return Option.from(dom.nextSibling).map($_eobgtqxfjdud7elu.fromDom); }; var prevSiblings = function (element) { return $_1g2cevwsjdud7ejp.reverse($_ajxr2ix8jdud7el6.toArray(element, prevSibling)); }; var nextSiblings = function (element) { return $_ajxr2ix8jdud7el6.toArray(element, nextSibling); }; var children = function (element) { var dom = element.dom(); return $_1g2cevwsjdud7ejp.map(dom.childNodes, $_eobgtqxfjdud7elu.fromDom); }; var child = function (element, index) { var children = element.dom().childNodes; return Option.from(children[index]).map($_eobgtqxfjdud7elu.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 = $_8o1q69x4jdud7ekz.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 $_dekwe2x3jdud7ekr = { 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 before = function (marker, element) { var parent = $_dekwe2x3jdud7ekr.parent(marker); parent.each(function (v) { v.dom().insertBefore(element.dom(), marker.dom()); }); }; var after = function (marker, element) { var sibling = $_dekwe2x3jdud7ekr.nextSibling(marker); sibling.fold(function () { var parent = $_dekwe2x3jdud7ekr.parent(marker); parent.each(function (v) { append(v, element); }); }, function (v) { before(v, element); }); }; var prepend = function (parent, element) { var firstChild = $_dekwe2x3jdud7ekr.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) { $_dekwe2x3jdud7ekr.child(parent, index).fold(function () { append(parent, element); }, function (v) { before(v, element); }); }; var wrap = function (element, wrapper) { before(element, wrapper); append(wrapper, element); }; var $_ftkbb5x2jdud7ekp = { before: before, after: after, prepend: prepend, append: append, appendAt: appendAt, wrap: wrap }; var before$1 = function (marker, elements) { $_1g2cevwsjdud7ejp.each(elements, function (x) { $_ftkbb5x2jdud7ekp.before(marker, x); }); }; var after$1 = function (marker, elements) { $_1g2cevwsjdud7ejp.each(elements, function (x, i) { var e = i === 0 ? marker : elements[i - 1]; $_ftkbb5x2jdud7ekp.after(e, x); }); }; var prepend$1 = function (parent, elements) { $_1g2cevwsjdud7ejp.each(elements.slice().reverse(), function (x) { $_ftkbb5x2jdud7ekp.prepend(parent, x); }); }; var append$1 = function (parent, elements) { $_1g2cevwsjdud7ejp.each(elements, function (x) { $_ftkbb5x2jdud7ekp.append(parent, x); }); }; var $_alr2vxxijdud7em1 = { before: before$1, after: after$1, prepend: prepend$1, append: append$1 }; var empty = function (element) { element.dom().textContent = ''; $_1g2cevwsjdud7ejp.each($_dekwe2x3jdud7ekr.children(element), function (rogue) { remove(rogue); }); }; var remove = function (element) { var dom = element.dom(); if (dom.parentNode !== null) dom.parentNode.removeChild(dom); }; var unwrap = function (wrapper) { var children = $_dekwe2x3jdud7ekr.children(wrapper); if (children.length > 0) $_alr2vxxijdud7em1.before(wrapper, children); remove(wrapper); }; var $_8d9w48xhjdud7elz = { empty: empty, remove: remove, unwrap: unwrap }; 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) === $_5jaggbxgjdud7ely.COMMENT || name(element) === '#comment'; }; var isElement = isType$1($_5jaggbxgjdud7ely.ELEMENT); var isText = isType$1($_5jaggbxgjdud7ely.TEXT); var isDocument = isType$1($_5jaggbxgjdud7ely.DOCUMENT); var $_50qkdpxkjdud7em6 = { name: name, type: type, value: value, isElement: isElement, isText: isText, isDocument: isDocument, isComment: isComment }; var inBody = function (element) { var dom = $_50qkdpxkjdud7em6.isText(element) ? element.dom().parentNode : element.dom(); return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom); }; var body = $_2nf0bewljdud7ej2.cached(function () { return getBody($_eobgtqxfjdud7elu.fromDom(document)); }); var getBody = function (doc) { var body = doc.dom().body; if (body === null || body === undefined) throw 'Body is not available yet'; return $_eobgtqxfjdud7elu.fromDom(body); }; var $_1tyeizxjjdud7em4 = { body: body, getBody: getBody, inBody: inBody }; var fireDetaching = function (component) { $_98da6jwgjdud7eil.emit(component, $_801kkqwhjdud7eiq.detachedFromDom()); var children = component.components(); $_1g2cevwsjdud7ejp.each(children, fireDetaching); }; var fireAttaching = function (component) { var children = component.components(); $_1g2cevwsjdud7ejp.each(children, fireAttaching); $_98da6jwgjdud7eil.emit(component, $_801kkqwhjdud7eiq.attachedToDom()); }; var attach = function (parent, child) { attachWith(parent, child, $_ftkbb5x2jdud7ekp.append); }; var attachWith = function (parent, child, insertion) { parent.getSystem().addToWorld(child); insertion(parent.element(), child.element()); if ($_1tyeizxjjdud7em4.inBody(parent.element())) fireAttaching(child); parent.syncComponents(); }; var doDetach = function (component) { fireDetaching(component); $_8d9w48xhjdud7elz.remove(component.element()); component.getSystem().removeFromWorld(component); }; var detach = function (component) { var parent = $_dekwe2x3jdud7ekr.parent(component.element()).bind(function (p) { return component.getSystem().getByDom(p).fold(Option.none, Option.some); }); doDetach(component); parent.each(function (p) { p.syncComponents(); }); }; var detachChildren = function (component) { var subs = component.components(); $_1g2cevwsjdud7ejp.each(subs, doDetach); $_8d9w48xhjdud7elz.empty(component.element()); component.syncComponents(); }; var attachSystem = function (element, guiSystem) { $_ftkbb5x2jdud7ekp.append(element, guiSystem.element()); var children = $_dekwe2x3jdud7ekr.children(guiSystem.element()); $_1g2cevwsjdud7ejp.each(children, function (child) { guiSystem.getByDom(child).each(fireAttaching); }); }; var detachSystem = function (guiSystem) { var children = $_dekwe2x3jdud7ekr.children(guiSystem.element()); $_1g2cevwsjdud7ejp.each(children, function (child) { guiSystem.getByDom(child).each(fireDetaching); }); $_8d9w48xhjdud7elz.remove(guiSystem.element()); }; var $_fesilqx1jdud7ekf = { attach: attach, attachWith: attachWith, detach: detach, detachChildren: detachChildren, attachSystem: attachSystem, detachSystem: detachSystem }; var fromHtml$1 = function (html, scope) { var doc = scope || document; var div = doc.createElement('div'); div.innerHTML = html; return $_dekwe2x3jdud7ekr.children($_eobgtqxfjdud7elu.fromDom(div)); }; var fromTags = function (tags, scope) { return $_1g2cevwsjdud7ejp.map(tags, function (x) { return $_eobgtqxfjdud7elu.fromTag(x, scope); }); }; var fromText$1 = function (texts, scope) { return $_1g2cevwsjdud7ejp.map(texts, function (x) { return $_eobgtqxfjdud7elu.fromText(x, scope); }); }; var fromDom$1 = function (nodes) { return $_1g2cevwsjdud7ejp.map(nodes, $_eobgtqxfjdud7elu.fromDom); }; var $_c9k4uxxpjdud7emn = { fromHtml: fromHtml$1, fromTags: fromTags, fromText: fromText$1, fromDom: fromDom$1 }; var get = function (element) { return element.dom().innerHTML; }; var set = function (element, content) { var owner = $_dekwe2x3jdud7ekr.owner(element); var docDom = owner.dom(); var fragment = $_eobgtqxfjdud7elu.fromDom(docDom.createDocumentFragment()); var contentElements = $_c9k4uxxpjdud7emn.fromHtml(content, docDom); $_alr2vxxijdud7em1.append(fragment, contentElements); $_8d9w48xhjdud7elz.empty(element); $_ftkbb5x2jdud7ekp.append(element, fragment); }; var getOuter = function (element) { var container = $_eobgtqxfjdud7elu.fromTag('div'); var clone = $_eobgtqxfjdud7elu.fromDom(element.dom().cloneNode(true)); $_ftkbb5x2jdud7ekp.append(container, clone); return get(container); }; var $_1kv7pfxojdud7emm = { get: get, set: set, getOuter: getOuter }; var rawSet = function (dom, key, value) { if ($_9rljuwzjdud7ekb.isString(value) || $_9rljuwzjdud7ekb.isBoolean(value) || $_9rljuwzjdud7ekb.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$1 = function (element, key, value) { rawSet(element.dom(), key, value); }; var setAll = function (element, attrs) { var dom = element.dom(); $_2dykn0x0jdud7ekc.each(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 = function (element, key) { var dom = element.dom(); return dom && dom.hasAttribute ? dom.hasAttribute(key) : false; }; var remove$1 = 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 $_1g2cevwsjdud7ejp.foldl(element.dom().attributes, function (acc, attr) { acc[attr.name] = attr.value; return acc; }, {}); }; var transferOne = function (source, destination, attr) { if (has(source, attr) && !has(destination, attr)) set$1(destination, attr, get$1(source, attr)); }; var transfer = function (source, destination, attrs) { if (!$_50qkdpxkjdud7em6.isElement(source) || !$_50qkdpxkjdud7em6.isElement(destination)) return; $_1g2cevwsjdud7ejp.each(attrs, function (attr) { transferOne(source, destination, attr); }); }; var $_2vghk1xrjdud7ems = { clone: clone, set: set$1, setAll: setAll, get: get$1, has: has, remove: remove$1, hasNone: hasNone, transfer: transfer }; var clone$1 = function (original, deep) { return $_eobgtqxfjdud7elu.fromDom(original.dom().cloneNode(deep)); }; var shallow$1 = function (original) { return clone$1(original, false); }; var deep$1 = function (original) { return clone$1(original, true); }; var shallowAs = function (original, tag) { var nu = $_eobgtqxfjdud7elu.fromTag(tag); var attributes = $_2vghk1xrjdud7ems.clone(original); $_2vghk1xrjdud7ems.setAll(nu, attributes); return nu; }; var copy = function (original, tag) { var nu = shallowAs(original, tag); var cloneChildren = $_dekwe2x3jdud7ekr.children(deep$1(original)); $_alr2vxxijdud7em1.append(nu, cloneChildren); return nu; }; var mutate = function (original, tag) { var nu = shallowAs(original, tag); $_ftkbb5x2jdud7ekp.before(original, nu); var children = $_dekwe2x3jdud7ekr.children(original); $_alr2vxxijdud7em1.append(nu, children); $_8d9w48xhjdud7elz.remove(original); return nu; }; var $_1efzt4xqjdud7emq = { shallow: shallow$1, shallowAs: shallowAs, deep: deep$1, copy: copy, mutate: mutate }; var getHtml = function (element) { var clone = $_1efzt4xqjdud7emq.shallow(element); return $_1kv7pfxojdud7emm.getOuter(clone); }; var $_1sgwp2xnjdud7emj = { getHtml: getHtml }; var element = function (elem) { return $_1sgwp2xnjdud7emj.getHtml(elem); }; var $_d3f8kuxmjdud7emi = { element: element }; var value$1 = function (o) { var is = function (v) { return o === v; }; var or = function (opt) { return value$1(o); }; var orThunk = function (f) { return value$1(o); }; var map = function (f) { return value$1(f(o)); }; var each = function (f) { f(o); }; var bind = function (f) { return f(o); }; var fold = function (_, onValue) { return onValue(o); }; var exists = function (f) { return f(o); }; var forall = function (f) { return f(o); }; var toOption = function () { return Option.some(o); }; return { is: is, isValue: $_9njj9iwjjdud7eix.always, isError: $_9njj9iwjjdud7eix.never, getOr: $_9njj9iwjjdud7eix.constant(o), getOrThunk: $_9njj9iwjjdud7eix.constant(o), getOrDie: $_9njj9iwjjdud7eix.constant(o), or: or, orThunk: orThunk, fold: fold, map: map, each: each, bind: bind, exists: exists, forall: forall, toOption: toOption }; }; var error = function (message) { var getOrThunk = function (f) { return f(); }; var getOrDie = function () { return $_9njj9iwjjdud7eix.die(message)(); }; var or = function (opt) { return opt; }; var orThunk = function (f) { return f(); }; var map = function (f) { return error(message); }; var bind = function (f) { return error(message); }; var fold = function (onError, _) { return onError(message); }; return { is: $_9njj9iwjjdud7eix.never, isValue: $_9njj9iwjjdud7eix.never, isError: $_9njj9iwjjdud7eix.always, getOr: $_9njj9iwjjdud7eix.identity, getOrThunk: getOrThunk, getOrDie: getOrDie, or: or, orThunk: orThunk, fold: fold, map: map, each: $_9njj9iwjjdud7eix.noop, bind: bind, exists: $_9njj9iwjjdud7eix.never, forall: $_9njj9iwjjdud7eix.always, toOption: Option.none }; }; var Result = { value: value$1, error: error }; var generate = function (cases) { if (!$_9rljuwzjdud7ekb.isArray(cases)) { throw new Error('cases must be an array'); } if (cases.length === 0) { throw new Error('there must be at least one case'); } var constructors = []; var adt = {}; $_1g2cevwsjdud7ejp.each(cases, function (acase, count) { var keys = $_2dykn0x0jdud7ekc.keys(acase); if (keys.length !== 1) { throw new Error('one and only one name per case'); } var key = keys[0]; var value = acase[key]; if (adt[key] !== undefined) { throw new Error('duplicate key detected:' + key); } else if (key === 'cata') { throw new Error('cannot have a case named cata (sorry)'); } else if (!$_9rljuwzjdud7ekb.isArray(value)) { throw new Error('case arguments must be an array'); } constructors.push(key); adt[key] = function () { var argLength = arguments.length; if (argLength !== value.length) { throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength); } var args = new Array(argLength); for (var i = 0; i < args.length; i++) args[i] = arguments[i]; var match = function (branches) { var branchKeys = $_2dykn0x0jdud7ekc.keys(branches); if (constructors.length !== branchKeys.length) { throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\nActual: ' + branchKeys.join(',')); } var allReqd = $_1g2cevwsjdud7ejp.forall(constructors, function (reqKey) { return $_1g2cevwsjdud7ejp.contains(branchKeys, reqKey); }); if (!allReqd) throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\nRequired: ' + constructors.join(', ')); return branches[key].apply(null, args); }; return { fold: function () { if (arguments.length !== cases.length) { throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + arguments.length); } var target = arguments[count]; return target.apply(null, args); }, match: match, log: function (label) { console.log(label, { constructors: constructors, constructor: key, params: args }); } }; }; }); return adt; }; var $_2ytffsxwjdud7ets = { generate: generate }; var comparison = $_2ytffsxwjdud7ets.generate([ { bothErrors: [ 'error1', 'error2' ] }, { firstError: [ 'error1', 'value2' ] }, { secondError: [ 'value1', 'error2' ] }, { bothValues: [ 'value1', 'value2' ] } ]); var partition$1 = function (results) { var errors = []; var values = []; $_1g2cevwsjdud7ejp.each(results, function (result) { result.fold(function (err) { errors.push(err); }, function (value) { values.push(value); }); }); return { errors: errors, values: values }; }; var compare = function (result1, result2) { return result1.fold(function (err1) { return result2.fold(function (err2) { return comparison.bothErrors(err1, err2); }, function (val2) { return comparison.firstError(err1, val2); }); }, function (val1) { return result2.fold(function (err2) { return comparison.secondError(val1, err2); }, function (val2) { return comparison.bothValues(val1, val2); }); }); }; var $_807z09xvjdud7etp = { partition: partition$1, compare: compare }; var mergeValues = function (values, base) { return Result.value($_73qnwowyjdud7ek9.deepMerge.apply(undefined, [base].concat(values))); }; var mergeErrors = function (errors) { return $_9njj9iwjjdud7eix.compose(Result.error, $_1g2cevwsjdud7ejp.flatten)(errors); }; var consolidateObj = function (objects, base) { var partitions = $_807z09xvjdud7etp.partition(objects); return partitions.errors.length > 0 ? mergeErrors(partitions.errors) : mergeValues(partitions.values, base); }; var consolidateArr = function (objects) { var partitions = $_807z09xvjdud7etp.partition(objects); return partitions.errors.length > 0 ? mergeErrors(partitions.errors) : Result.value(partitions.values); }; var $_fsr4v9xtjdud7en1 = { consolidateObj: consolidateObj, consolidateArr: consolidateArr }; var narrow = function (obj, fields) { var r = {}; $_1g2cevwsjdud7ejp.each(fields, function (field) { if (obj[field] !== undefined && obj.hasOwnProperty(field)) r[field] = obj[field]; }); return r; }; var indexOnKey = function (array, key) { var obj = {}; $_1g2cevwsjdud7ejp.each(array, function (a) { var keyValue = a[key]; obj[keyValue] = a; }); return obj; }; var exclude = function (obj, fields) { var r = {}; $_2dykn0x0jdud7ekc.each(obj, function (v, k) { if (!$_1g2cevwsjdud7ejp.contains(fields, k)) { r[k] = v; } }); return r; }; var $_b3xxobxxjdud7etv = { narrow: narrow, exclude: exclude, indexOnKey: indexOnKey }; var readOpt = function (key) { return function (obj) { return obj.hasOwnProperty(key) ? Option.from(obj[key]) : Option.none(); }; }; var readOr = function (key, fallback) { return function (obj) { return readOpt(key)(obj).getOr(fallback); }; }; var readOptFrom = function (obj, key) { return readOpt(key)(obj); }; var hasKey = function (obj, key) { return obj.hasOwnProperty(key) && obj[key] !== undefined && obj[key] !== null; }; var $_37yfftxyjdud7etz = { readOpt: readOpt, readOr: readOr, readOptFrom: readOptFrom, hasKey: hasKey }; var wrap$1 = function (key, value) { var r = {}; r[key] = value; return r; }; var wrapAll = function (keyvalues) { var r = {}; $_1g2cevwsjdud7ejp.each(keyvalues, function (kv) { r[kv.key] = kv.value; }); return r; }; var $_7vvdhixzjdud7eu2 = { wrap: wrap$1, wrapAll: wrapAll }; var narrow$1 = function (obj, fields) { return $_b3xxobxxjdud7etv.narrow(obj, fields); }; var exclude$1 = function (obj, fields) { return $_b3xxobxxjdud7etv.exclude(obj, fields); }; var readOpt$1 = function (key) { return $_37yfftxyjdud7etz.readOpt(key); }; var readOr$1 = function (key, fallback) { return $_37yfftxyjdud7etz.readOr(key, fallback); }; var readOptFrom$1 = function (obj, key) { return $_37yfftxyjdud7etz.readOptFrom(obj, key); }; var wrap$2 = function (key, value) { return $_7vvdhixzjdud7eu2.wrap(key, value); }; var wrapAll$1 = function (keyvalues) { return $_7vvdhixzjdud7eu2.wrapAll(keyvalues); }; var indexOnKey$1 = function (array, key) { return $_b3xxobxxjdud7etv.indexOnKey(array, key); }; var consolidate = function (objs, base) { return $_fsr4v9xtjdud7en1.consolidateObj(objs, base); }; var hasKey$1 = function (obj, key) { return $_37yfftxyjdud7etz.hasKey(obj, key); }; var $_ettibkxsjdud7emz = { narrow: narrow$1, exclude: exclude$1, readOpt: readOpt$1, readOr: readOr$1, readOptFrom: readOptFrom$1, wrap: wrap$2, wrapAll: wrapAll$1, indexOnKey: indexOnKey$1, hasKey: hasKey$1, consolidate: consolidate }; var cat = function (arr) { var r = []; var push = function (x) { r.push(x); }; for (var i = 0; i < arr.length; i++) { arr[i].each(push); } return r; }; var findMap = function (arr, f) { for (var i = 0; i < arr.length; i++) { var r = f(arr[i], i); if (r.isSome()) { return r; } } return Option.none(); }; var liftN = function (arr, f) { var r = []; for (var i = 0; i < arr.length; i++) { var x = arr[i]; if (x.isSome()) { r.push(x.getOrDie()); } else { return Option.none(); } } return Option.some(f.apply(null, r)); }; var $_ak7xq9y0jdud7eu4 = { cat: cat, findMap: findMap, liftN: liftN }; var unknown$3 = 'unknown'; var debugging = true; var CHROME_INSPECTOR_GLOBAL = '__CHROME_INSPECTOR_CONNECTION_TO_ALLOY__'; var eventsMonitored = []; var path$1 = [ 'alloy/data/Fields', 'alloy/debugging/Debugging' ]; var getTrace = function () { if (debugging === false) return unknown$3; var err = new Error(); if (err.stack !== undefined) { var lines = err.stack.split('\n'); return $_1g2cevwsjdud7ejp.find(lines, function (line) { return line.indexOf('alloy') > 0 && !$_1g2cevwsjdud7ejp.exists(path$1, function (p) { return line.indexOf(p) > -1; }); }).getOr(unknown$3); } else { return unknown$3; } }; var logHandler = function (label, handlerName, trace) { }; var ignoreEvent = { logEventCut: $_9njj9iwjjdud7eix.noop, logEventStopped: $_9njj9iwjjdud7eix.noop, logNoParent: $_9njj9iwjjdud7eix.noop, logEventNoHandlers: $_9njj9iwjjdud7eix.noop, logEventResponse: $_9njj9iwjjdud7eix.noop, write: $_9njj9iwjjdud7eix.noop }; var monitorEvent = function (eventName, initialTarget, f) { var logger = debugging && (eventsMonitored === '*' || $_1g2cevwsjdud7ejp.contains(eventsMonitored, eventName)) ? function () { var sequence = []; return { logEventCut: function (name, target, purpose) { sequence.push({ outcome: 'cut', target: target, purpose: purpose }); }, logEventStopped: function (name, target, purpose) { sequence.push({ outcome: 'stopped', target: target, purpose: purpose }); }, logNoParent: function (name, target, purpose) { sequence.push({ outcome: 'no-parent', target: target, purpose: purpose }); }, logEventNoHandlers: function (name, target) { sequence.push({ outcome: 'no-handlers-left', target: target }); }, logEventResponse: function (name, target, purpose) { sequence.push({ outcome: 'response', purpose: purpose, target: target }); }, write: function () { if ($_1g2cevwsjdud7ejp.contains([ 'mousemove', 'mouseover', 'mouseout', $_801kkqwhjdud7eiq.systemInit() ], eventName)) return; console.log(eventName, { event: eventName, target: initialTarget.dom(), sequence: $_1g2cevwsjdud7ejp.map(sequence, function (s) { if (!$_1g2cevwsjdud7ejp.contains([ 'cut', 'stopped', 'response' ], s.outcome)) return s.outcome; else return '{' + s.purpose + '} ' + s.outcome + ' at (' + $_d3f8kuxmjdud7emi.element(s.target) + ')'; }) }); } }; }() : ignoreEvent; var output = f(logger); logger.write(); return output; }; var inspectorInfo = function (comp) { var go = function (c) { var cSpec = c.spec(); return { '(original.spec)': cSpec, '(dom.ref)': c.element().dom(), '(element)': $_d3f8kuxmjdud7emi.element(c.element()), '(initComponents)': $_1g2cevwsjdud7ejp.map(cSpec.components !== undefined ? cSpec.components : [], go), '(components)': $_1g2cevwsjdud7ejp.map(c.components(), go), '(bound.events)': $_2dykn0x0jdud7ekc.mapToArray(c.events(), function (v, k) { return [k]; }).join(', '), '(behaviours)': cSpec.behaviours !== undefined ? $_2dykn0x0jdud7ekc.map(cSpec.behaviours, function (v, k) { return v === undefined ? '--revoked--' : { config: v.configAsRaw(), 'original-config': v.initialConfig, state: c.readState(k) }; }) : 'none' }; }; return go(comp); }; var getOrInitConnection = function () { if (window[CHROME_INSPECTOR_GLOBAL] !== undefined) return window[CHROME_INSPECTOR_GLOBAL]; else { window[CHROME_INSPECTOR_GLOBAL] = { systems: {}, lookup: function (uid) { var systems = window[CHROME_INSPECTOR_GLOBAL].systems; var connections = $_2dykn0x0jdud7ekc.keys(systems); return $_ak7xq9y0jdud7eu4.findMap(connections, function (conn) { var connGui = systems[conn]; return connGui.getByUid(uid).toOption().map(function (comp) { return $_ettibkxsjdud7emz.wrap($_d3f8kuxmjdud7emi.element(comp.element()), inspectorInfo(comp)); }); }); } }; return window[CHROME_INSPECTOR_GLOBAL]; } }; var registerInspector = function (name, gui) { var connection = getOrInitConnection(); connection.systems[name] = gui; }; var $_efa715xljdud7em8 = { logHandler: logHandler, noLogger: $_9njj9iwjjdud7eix.constant(ignoreEvent), getTrace: getTrace, monitorEvent: monitorEvent, isDebugging: $_9njj9iwjjdud7eix.constant(debugging), registerInspector: registerInspector }; var isSource = function (component, simulatedEvent) { return $_f1y1rtx9jdud7el7.eq(component.element(), simulatedEvent.event().target()); }; var $_3y5zxmy5jdud7euv = { isSource: isSource }; var adt = $_2ytffsxwjdud7ets.generate([ { strict: [] }, { defaultedThunk: ['fallbackThunk'] }, { asOption: [] }, { asDefaultedOptionThunk: ['fallbackThunk'] }, { mergeWithThunk: ['baseThunk'] } ]); var defaulted = function (fallback) { return adt.defaultedThunk($_9njj9iwjjdud7eix.constant(fallback)); }; var asDefaultedOption = function (fallback) { return adt.asDefaultedOptionThunk($_9njj9iwjjdud7eix.constant(fallback)); }; var mergeWith = function (base) { return adt.mergeWithThunk($_9njj9iwjjdud7eix.constant(base)); }; var $_6rbn18y8jdud7evc = { strict: adt.strict, asOption: adt.asOption, defaulted: defaulted, defaultedThunk: adt.defaultedThunk, asDefaultedOption: asDefaultedOption, asDefaultedOptionThunk: adt.asDefaultedOptionThunk, mergeWith: mergeWith, mergeWithThunk: adt.mergeWithThunk }; var typeAdt = $_2ytffsxwjdud7ets.generate([ { setOf: [ 'validator', 'valueType' ] }, { arrOf: ['valueType'] }, { objOf: ['fields'] }, { itemOf: ['validator'] }, { choiceOf: [ 'key', 'branches' ] }, { thunk: ['description'] }, { func: [ 'args', 'outputSchema' ] } ]); var fieldAdt = $_2ytffsxwjdud7ets.generate([ { field: [ 'name', 'presence', 'type' ] }, { state: ['name'] } ]); var $_e4kogayajdud7ew8 = { typeAdt: typeAdt, fieldAdt: fieldAdt }; var json = function () { return $_3ytg1qxbjdud7elm.getOrDie('JSON'); }; var parse = function (obj) { return json().parse(obj); }; var stringify = function (obj, replacer, space) { return json().stringify(obj, replacer, space); }; var $_crnojnydjdud7ewk = { parse: parse, stringify: stringify }; var formatObj = function (input) { return $_9rljuwzjdud7ekb.isObject(input) && $_2dykn0x0jdud7ekc.keys(input).length > 100 ? ' removed due to size' : $_crnojnydjdud7ewk.stringify(input, null, 2); }; var formatErrors = function (errors) { var es = errors.length > 10 ? errors.slice(0, 10).concat([{ path: [], getErrorInfo: function () { return '... (only showing first ten failures)'; } }]) : errors; return $_1g2cevwsjdud7ejp.map(es, function (e) { return 'Failed path: (' + e.path.join(' > ') + ')\n' + e.getErrorInfo(); }); }; var $_5dzg9kycjdud7ewe = { formatObj: formatObj, formatErrors: formatErrors }; var nu$3 = function (path, getErrorInfo) { return Result.error([{ path: path, getErrorInfo: getErrorInfo }]); }; var missingStrict = function (path, key, obj) { return nu$3(path, function () { return 'Could not find valid *strict* value for "' + key + '" in ' + $_5dzg9kycjdud7ewe.formatObj(obj); }); }; var missingKey = function (path, key) { return nu$3(path, function () { return 'Choice schema did not contain choice key: "' + key + '"'; }); }; var missingBranch = function (path, branches, branch) { return nu$3(path, function () { return 'The chosen schema: "' + branch + '" did not exist in branches: ' + $_5dzg9kycjdud7ewe.formatObj(branches); }); }; var unsupportedFields = function (path, unsupported) { return nu$3(path, function () { return 'There are unsupported fields: [' + unsupported.join(', ') + '] specified'; }); }; var custom = function (path, err) { return nu$3(path, function () { return err; }); }; var toString = function (error) { return 'Failed path: (' + error.path.join(' > ') + ')\n' + error.getErrorInfo(); }; var $_a7kucqybjdud7ewb = { missingStrict: missingStrict, missingKey: missingKey, missingBranch: missingBranch, unsupportedFields: unsupportedFields, custom: custom, toString: toString }; var adt$1 = $_2ytffsxwjdud7ets.generate([ { field: [ 'key', 'okey', 'presence', 'prop' ] }, { state: [ 'okey', 'instantiator' ] } ]); var output = function (okey, value) { return adt$1.state(okey, $_9njj9iwjjdud7eix.constant(value)); }; var snapshot = function (okey) { return adt$1.state(okey, $_9njj9iwjjdud7eix.identity); }; var strictAccess = function (path, obj, key) { return $_37yfftxyjdud7etz.readOptFrom(obj, key).fold(function () { return $_a7kucqybjdud7ewb.missingStrict(path, key, obj); }, Result.value); }; var fallbackAccess = function (obj, key, fallbackThunk) { var v = $_37yfftxyjdud7etz.readOptFrom(obj, key).fold(function () { return fallbackThunk(obj); }, $_9njj9iwjjdud7eix.identity); return Result.value(v); }; var optionAccess = function (obj, key) { return Result.value($_37yfftxyjdud7etz.readOptFrom(obj, key)); }; var optionDefaultedAccess = function (obj, key, fallback) { var opt = $_37yfftxyjdud7etz.readOptFrom(obj, key).map(function (val) { return val === true ? fallback(obj) : val; }); return Result.value(opt); }; var cExtractOne = function (path, obj, field, strength) { return field.fold(function (key, okey, presence, prop) { var bundle = function (av) { return prop.extract(path.concat([key]), strength, av).map(function (res) { return $_7vvdhixzjdud7eu2.wrap(okey, strength(res)); }); }; var bundleAsOption = function (optValue) { return optValue.fold(function () { var outcome = $_7vvdhixzjdud7eu2.wrap(okey, strength(Option.none())); return Result.value(outcome); }, function (ov) { return prop.extract(path.concat([key]), strength, ov).map(function (res) { return $_7vvdhixzjdud7eu2.wrap(okey, strength(Option.some(res))); }); }); }; return function () { return presence.fold(function () { return strictAccess(path, obj, key).bind(bundle); }, function (fallbackThunk) { return fallbackAccess(obj, key, fallbackThunk).bind(bundle); }, function () { return optionAccess(obj, key).bind(bundleAsOption); }, function (fallbackThunk) { return optionDefaultedAccess(obj, key, fallbackThunk).bind(bundleAsOption); }, function (baseThunk) { var base = baseThunk(obj); return fallbackAccess(obj, key, $_9njj9iwjjdud7eix.constant({})).map(function (v) { return $_73qnwowyjdud7ek9.deepMerge(base, v); }).bind(bundle); }); }(); }, function (okey, instantiator) { var state = instantiator(obj); return Result.value($_7vvdhixzjdud7eu2.wrap(okey, strength(state))); }); }; var cExtract = function (path, obj, fields, strength) { var results = $_1g2cevwsjdud7ejp.map(fields, function (field) { return cExtractOne(path, obj, field, strength); }); return $_fsr4v9xtjdud7en1.consolidateObj(results, {}); }; var value$2 = function (validator) { var extract = function (path, strength, val) { return validator(val, strength).fold(function (err) { return $_a7kucqybjdud7ewb.custom(path, err); }, Result.value); }; var toString = function () { return 'val'; }; var toDsl = function () { return $_e4kogayajdud7ew8.typeAdt.itemOf(validator); }; return { extract: extract, toString: toString, toDsl: toDsl }; }; var getSetKeys = function (obj) { var keys = $_2dykn0x0jdud7ekc.keys(obj); return $_1g2cevwsjdud7ejp.filter(keys, function (k) { return $_ettibkxsjdud7emz.hasKey(obj, k); }); }; var objOnly = function (fields) { var delegate = obj(fields); var fieldNames = $_1g2cevwsjdud7ejp.foldr(fields, function (acc, f) { return f.fold(function (key) { return $_73qnwowyjdud7ek9.deepMerge(acc, $_ettibkxsjdud7emz.wrap(key, true)); }, $_9njj9iwjjdud7eix.constant(acc)); }, {}); var extract = function (path, strength, o) { var keys = $_9rljuwzjdud7ekb.isBoolean(o) ? [] : getSetKeys(o); var extra = $_1g2cevwsjdud7ejp.filter(keys, function (k) { return !$_ettibkxsjdud7emz.hasKey(fieldNames, k); }); return extra.length === 0 ? delegate.extract(path, strength, o) : $_a7kucqybjdud7ewb.unsupportedFields(path, extra); }; return { extract: extract, toString: delegate.toString, toDsl: delegate.toDsl }; }; var obj = function (fields) { var extract = function (path, strength, o) { return cExtract(path, o, fields, strength); }; var toString = function () { var fieldStrings = $_1g2cevwsjdud7ejp.map(fields, function (field) { return field.fold(function (key, okey, presence, prop) { return key + ' -> ' + prop.toString(); }, function (okey, instantiator) { return 'state(' + okey + ')'; }); }); return 'obj{\n' + fieldStrings.join('\n') + '}'; }; var toDsl = function () { return $_e4kogayajdud7ew8.typeAdt.objOf($_1g2cevwsjdud7ejp.map(fields, function (f) { return f.fold(function (key, okey, presence, prop) { return $_e4kogayajdud7ew8.fieldAdt.field(key, presence, prop); }, function (okey, instantiator) { return $_e4kogayajdud7ew8.fieldAdt.state(okey); }); })); }; return { extract: extract, toString: toString, toDsl: toDsl }; }; var arr = function (prop) { var extract = function (path, strength, array) { var results = $_1g2cevwsjdud7ejp.map(array, function (a, i) { return prop.extract(path.concat(['[' + i + ']']), strength, a); }); return $_fsr4v9xtjdud7en1.consolidateArr(results); }; var toString = function () { return 'array(' + prop.toString() + ')'; }; var toDsl = function () { return $_e4kogayajdud7ew8.typeAdt.arrOf(prop); }; return { extract: extract, toString: toString, toDsl: toDsl }; }; var setOf = function (validator, prop) { var validateKeys = function (path, keys) { return arr(value$2(validator)).extract(path, $_9njj9iwjjdud7eix.identity, keys); }; var extract = function (path, strength, o) { var keys = $_2dykn0x0jdud7ekc.keys(o); return validateKeys(path, keys).bind(function (validKeys) { var schema = $_1g2cevwsjdud7ejp.map(validKeys, function (vk) { return adt$1.field(vk, vk, $_6rbn18y8jdud7evc.strict(), prop); }); return obj(schema).extract(path, strength, o); }); }; var toString = function () { return 'setOf(' + prop.toString() + ')'; }; var toDsl = function () { return $_e4kogayajdud7ew8.typeAdt.setOf(validator, prop); }; return { extract: extract, toString: toString, toDsl: toDsl }; }; var func = function (args, schema, retriever) { var delegate = value$2(function (f, strength) { return $_9rljuwzjdud7ekb.isFunction(f) ? Result.value(function () { var gArgs = Array.prototype.slice.call(arguments, 0); var allowedArgs = gArgs.slice(0, args.length); var o = f.apply(null, allowedArgs); return retriever(o, strength); }) : Result.error('Not a function'); }); return { extract: delegate.extract, toString: function () { return 'function'; }, toDsl: function () { return $_e4kogayajdud7ew8.typeAdt.func(args, schema); } }; }; var thunk = function (desc, processor) { var getP = $_2nf0bewljdud7ej2.cached(function () { return processor(); }); var extract = function (path, strength, val) { return getP().extract(path, strength, val); }; var toString = function () { return getP().toString(); }; var toDsl = function () { return $_e4kogayajdud7ew8.typeAdt.thunk(desc); }; return { extract: extract, toString: toString, toDsl: toDsl }; }; var anyValue = value$2(Result.value); var arrOfObj = $_9njj9iwjjdud7eix.compose(arr, obj); var $_16ghfpy9jdud7evh = { anyValue: $_9njj9iwjjdud7eix.constant(anyValue), value: value$2, obj: obj, objOnly: objOnly, arr: arr, setOf: setOf, arrOfObj: arrOfObj, state: adt$1.state, field: adt$1.field, output: output, snapshot: snapshot, thunk: thunk, func: func }; var strict = function (key) { return $_16ghfpy9jdud7evh.field(key, key, $_6rbn18y8jdud7evc.strict(), $_16ghfpy9jdud7evh.anyValue()); }; var strictOf = function (key, schema) { return $_16ghfpy9jdud7evh.field(key, key, $_6rbn18y8jdud7evc.strict(), schema); }; var strictFunction = function (key) { return $_16ghfpy9jdud7evh.field(key, key, $_6rbn18y8jdud7evc.strict(), $_16ghfpy9jdud7evh.value(function (f) { return $_9rljuwzjdud7ekb.isFunction(f) ? Result.value(f) : Result.error('Not a function'); })); }; var forbid = function (key, message) { return $_16ghfpy9jdud7evh.field(key, key, $_6rbn18y8jdud7evc.asOption(), $_16ghfpy9jdud7evh.value(function (v) { return Result.error('The field: ' + key + ' is forbidden. ' + message); })); }; var strictArrayOf = function (key, prop) { return strictOf(key, prop); }; var strictObjOf = function (key, objSchema) { return $_16ghfpy9jdud7evh.field(key, key, $_6rbn18y8jdud7evc.strict(), $_16ghfpy9jdud7evh.obj(objSchema)); }; var strictArrayOfObj = function (key, objFields) { return $_16ghfpy9jdud7evh.field(key, key, $_6rbn18y8jdud7evc.strict(), $_16ghfpy9jdud7evh.arrOfObj(objFields)); }; var option = function (key) { return $_16ghfpy9jdud7evh.field(key, key, $_6rbn18y8jdud7evc.asOption(), $_16ghfpy9jdud7evh.anyValue()); }; var optionOf = function (key, schema) { return $_16ghfpy9jdud7evh.field(key, key, $_6rbn18y8jdud7evc.asOption(), schema); }; var optionObjOf = function (key, objSchema) { return $_16ghfpy9jdud7evh.field(key, key, $_6rbn18y8jdud7evc.asOption(), $_16ghfpy9jdud7evh.obj(objSchema)); }; var optionObjOfOnly = function (key, objSchema) { return $_16ghfpy9jdud7evh.field(key, key, $_6rbn18y8jdud7evc.asOption(), $_16ghfpy9jdud7evh.objOnly(objSchema)); }; var defaulted$1 = function (key, fallback) { return $_16ghfpy9jdud7evh.field(key, key, $_6rbn18y8jdud7evc.defaulted(fallback), $_16ghfpy9jdud7evh.anyValue()); }; var defaultedOf = function (key, fallback, schema) { return $_16ghfpy9jdud7evh.field(key, key, $_6rbn18y8jdud7evc.defaulted(fallback), schema); }; var defaultedObjOf = function (key, fallback, objSchema) { return $_16ghfpy9jdud7evh.field(key, key, $_6rbn18y8jdud7evc.defaulted(fallback), $_16ghfpy9jdud7evh.obj(objSchema)); }; var field = function (key, okey, presence, prop) { return $_16ghfpy9jdud7evh.field(key, okey, presence, prop); }; var state = function (okey, instantiator) { return $_16ghfpy9jdud7evh.state(okey, instantiator); }; var $_euqmtby7jdud7ev7 = { strict: strict, strictOf: strictOf, strictObjOf: strictObjOf, strictArrayOf: strictArrayOf, strictArrayOfObj: strictArrayOfObj, strictFunction: strictFunction, forbid: forbid, option: option, optionOf: optionOf, optionObjOf: optionObjOf, optionObjOfOnly: optionObjOfOnly, defaulted: defaulted$1, defaultedOf: defaultedOf, defaultedObjOf: defaultedObjOf, field: field, state: state }; var chooseFrom = function (path, strength, input, branches, ch) { var fields = $_ettibkxsjdud7emz.readOptFrom(branches, ch); return fields.fold(function () { return $_a7kucqybjdud7ewb.missingBranch(path, branches, ch); }, function (fs) { return $_16ghfpy9jdud7evh.obj(fs).extract(path.concat(['branch: ' + ch]), strength, input); }); }; var choose = function (key, branches) { var extract = function (path, strength, input) { var choice = $_ettibkxsjdud7emz.readOptFrom(input, key); return choice.fold(function () { return $_a7kucqybjdud7ewb.missingKey(path, key); }, function (chosen) { return chooseFrom(path, strength, input, branches, chosen); }); }; var toString = function () { return 'chooseOn(' + key + '). Possible values: ' + $_2dykn0x0jdud7ekc.keys(branches); }; var toDsl = function () { return $_e4kogayajdud7ew8.typeAdt.choiceOf(key, branches); }; return { extract: extract, toString: toString, toDsl: toDsl }; }; var $_dhmy12yfjdud7ewr = { choose: choose }; var anyValue$1 = $_16ghfpy9jdud7evh.value(Result.value); var arrOfObj$1 = function (objFields) { return $_16ghfpy9jdud7evh.arrOfObj(objFields); }; var arrOfVal = function () { return $_16ghfpy9jdud7evh.arr(anyValue$1); }; var arrOf = $_16ghfpy9jdud7evh.arr; var objOf = $_16ghfpy9jdud7evh.obj; var objOfOnly = $_16ghfpy9jdud7evh.objOnly; var setOf$1 = $_16ghfpy9jdud7evh.setOf; var valueOf = function (validator) { return $_16ghfpy9jdud7evh.value(function (v) { return validator(v); }); }; var extract = function (label, prop, strength, obj) { return prop.extract([label], strength, obj).fold(function (errs) { return Result.error({ input: obj, errors: errs }); }, Result.value); }; var asStruct = function (label, prop, obj) { return extract(label, prop, $_9njj9iwjjdud7eix.constant, obj); }; var asRaw = function (label, prop, obj) { return extract(label, prop, $_9njj9iwjjdud7eix.identity, obj); }; var getOrDie$1 = function (extraction) { return extraction.fold(function (errInfo) { throw new Error(formatError(errInfo)); }, $_9njj9iwjjdud7eix.identity); }; var asRawOrDie = function (label, prop, obj) { return getOrDie$1(asRaw(label, prop, obj)); }; var asStructOrDie = function (label, prop, obj) { return getOrDie$1(asStruct(label, prop, obj)); }; var formatError = function (errInfo) { return 'Errors: \n' + $_5dzg9kycjdud7ewe.formatErrors(errInfo.errors) + '\n\nInput object: ' + $_5dzg9kycjdud7ewe.formatObj(errInfo.input); }; var choose$1 = function (key, branches) { return $_dhmy12yfjdud7ewr.choose(key, branches); }; var thunkOf = function (desc, schema) { return $_16ghfpy9jdud7evh.thunk(desc, schema); }; var funcOrDie = function (args, schema) { var retriever = function (output, strength) { return getOrDie$1(extract('()', schema, strength, output)); }; return $_16ghfpy9jdud7evh.func(args, schema, retriever); }; var $_13hkebyejdud7ewm = { anyValue: $_9njj9iwjjdud7eix.constant(anyValue$1), arrOfObj: arrOfObj$1, arrOf: arrOf, arrOfVal: arrOfVal, valueOf: valueOf, setOf: setOf$1, objOf: objOf, objOfOnly: objOfOnly, asStruct: asStruct, asRaw: asRaw, asStructOrDie: asStructOrDie, asRawOrDie: asRawOrDie, getOrDie: getOrDie$1, formatError: formatError, choose: choose$1, thunkOf: thunkOf, funcOrDie: funcOrDie }; var nu$4 = function (parts) { if (!$_ettibkxsjdud7emz.hasKey(parts, 'can') && !$_ettibkxsjdud7emz.hasKey(parts, 'abort') && !$_ettibkxsjdud7emz.hasKey(parts, 'run')) throw new Error('EventHandler defined by: ' + $_crnojnydjdud7ewk.stringify(parts, null, 2) + ' does not have can, abort, or run!'); return $_13hkebyejdud7ewm.asRawOrDie('Extracting event.handler', $_13hkebyejdud7ewm.objOfOnly([ $_euqmtby7jdud7ev7.defaulted('can', $_9njj9iwjjdud7eix.constant(true)), $_euqmtby7jdud7ev7.defaulted('abort', $_9njj9iwjjdud7eix.constant(false)), $_euqmtby7jdud7ev7.defaulted('run', $_9njj9iwjjdud7eix.noop) ]), parts); }; var all$1 = function (handlers, f) { return function () { var args = Array.prototype.slice.call(arguments, 0); return $_1g2cevwsjdud7ejp.foldl(handlers, function (acc, handler) { return acc && f(handler).apply(undefined, args); }, true); }; }; var any = function (handlers, f) { return function () { var args = Array.prototype.slice.call(arguments, 0); return $_1g2cevwsjdud7ejp.foldl(handlers, function (acc, handler) { return acc || f(handler).apply(undefined, args); }, false); }; }; var read = function (handler) { return $_9rljuwzjdud7ekb.isFunction(handler) ? { can: $_9njj9iwjjdud7eix.constant(true), abort: $_9njj9iwjjdud7eix.constant(false), run: handler } : handler; }; var fuse = function (handlers) { var can = all$1(handlers, function (handler) { return handler.can; }); var abort = any(handlers, function (handler) { return handler.abort; }); var run = function () { var args = Array.prototype.slice.call(arguments, 0); $_1g2cevwsjdud7ejp.each(handlers, function (handler) { handler.run.apply(undefined, args); }); }; return nu$4({ can: can, abort: abort, run: run }); }; var $_6jq2azy6jdud7eux = { read: read, fuse: fuse, nu: nu$4 }; var derive = $_ettibkxsjdud7emz.wrapAll; var abort = function (name, predicate) { return { key: name, value: $_6jq2azy6jdud7eux.nu({ abort: predicate }) }; }; var can = function (name, predicate) { return { key: name, value: $_6jq2azy6jdud7eux.nu({ can: predicate }) }; }; var preventDefault = function (name) { return { key: name, value: $_6jq2azy6jdud7eux.nu({ run: function (component, simulatedEvent) { simulatedEvent.event().prevent(); } }) }; }; var run = function (name, handler) { return { key: name, value: $_6jq2azy6jdud7eux.nu({ run: handler }) }; }; var runActionExtra = function (name, action, extra) { return { key: name, value: $_6jq2azy6jdud7eux.nu({ run: function (component) { action.apply(undefined, [component].concat(extra)); } }) }; }; var runOnName = function (name) { return function (handler) { return run(name, handler); }; }; var runOnSourceName = function (name) { return function (handler) { return { key: name, value: $_6jq2azy6jdud7eux.nu({ run: function (component, simulatedEvent) { if ($_3y5zxmy5jdud7euv.isSource(component, simulatedEvent)) handler(component, simulatedEvent); } }) }; }; }; var redirectToUid = function (name, uid) { return run(name, function (component, simulatedEvent) { component.getSystem().getByUid(uid).each(function (redirectee) { $_98da6jwgjdud7eil.dispatchEvent(redirectee, redirectee.element(), name, simulatedEvent); }); }); }; var redirectToPart = function (name, detail, partName) { var uid = detail.partUids()[partName]; return redirectToUid(name, uid); }; var runWithTarget = function (name, f) { return run(name, function (component, simulatedEvent) { component.getSystem().getByDom(simulatedEvent.event().target()).each(function (target) { f(component, target, simulatedEvent); }); }); }; var cutter = function (name) { return run(name, function (component, simulatedEvent) { simulatedEvent.cut(); }); }; var stopper = function (name) { return run(name, function (component, simulatedEvent) { simulatedEvent.stop(); }); }; var $_5xcuyiy4jdud7eur = { derive: derive, run: run, preventDefault: preventDefault, runActionExtra: runActionExtra, runOnAttached: runOnSourceName($_801kkqwhjdud7eiq.attachedToDom()), runOnDetached: runOnSourceName($_801kkqwhjdud7eiq.detachedFromDom()), runOnInit: runOnSourceName($_801kkqwhjdud7eiq.systemInit()), runOnExecute: runOnName($_801kkqwhjdud7eiq.execute()), redirectToUid: redirectToUid, redirectToPart: redirectToPart, runWithTarget: runWithTarget, abort: abort, can: can, cutter: cutter, stopper: stopper }; var markAsBehaviourApi = function (f, apiName, apiFunction) { return f; }; var markAsExtraApi = function (f, extraName) { return f; }; var markAsSketchApi = function (f, apiFunction) { return f; }; var getAnnotation = Option.none; var $_4nn5bbygjdud7eww = { markAsBehaviourApi: markAsBehaviourApi, markAsExtraApi: markAsExtraApi, markAsSketchApi: markAsSketchApi, getAnnotation: getAnnotation }; var nu$5 = $_8o1q69x4jdud7ekz.immutableBag(['tag'], [ 'classes', 'attributes', 'styles', 'value', 'innerHtml', 'domChildren', 'defChildren' ]); var defToStr = function (defn) { var raw = defToRaw(defn); return $_crnojnydjdud7ewk.stringify(raw, null, 2); }; var defToRaw = function (defn) { return { tag: defn.tag(), classes: defn.classes().getOr([]), attributes: defn.attributes().getOr({}), styles: defn.styles().getOr({}), value: defn.value().getOr(''), innerHtml: defn.innerHtml().getOr(''), defChildren: defn.defChildren().getOr(''), domChildren: defn.domChildren().fold(function () { return ''; }, function (children) { return children.length === 0 ? '0 children, but still specified' : String(children.length); }) }; }; var $_cfxlyyyijdud7ex9 = { nu: nu$5, defToStr: defToStr, defToRaw: defToRaw }; var fields = [ 'classes', 'attributes', 'styles', 'value', 'innerHtml', 'defChildren', 'domChildren' ]; var nu$6 = $_8o1q69x4jdud7ekz.immutableBag([], fields); var derive$1 = function (settings) { var r = {}; var keys = $_2dykn0x0jdud7ekc.keys(settings); $_1g2cevwsjdud7ejp.each(keys, function (key) { settings[key].each(function (v) { r[key] = v; }); }); return nu$6(r); }; var modToStr = function (mod) { var raw = modToRaw(mod); return $_crnojnydjdud7ewk.stringify(raw, null, 2); }; var modToRaw = function (mod) { return { classes: mod.classes().getOr(''), attributes: mod.attributes().getOr(''), styles: mod.styles().getOr(''), value: mod.value().getOr(''), innerHtml: mod.innerHtml().getOr(''), defChildren: mod.defChildren().getOr(''), domChildren: mod.domChildren().fold(function () { return ''; }, function (children) { return children.length === 0 ? '0 children, but still specified' : String(children.length); }) }; }; var clashingOptArrays = function (key, oArr1, oArr2) { return oArr1.fold(function () { return oArr2.fold(function () { return {}; }, function (arr2) { return $_ettibkxsjdud7emz.wrap(key, arr2); }); }, function (arr1) { return oArr2.fold(function () { return $_ettibkxsjdud7emz.wrap(key, arr1); }, function (arr2) { return $_ettibkxsjdud7emz.wrap(key, arr2); }); }); }; var merge$1 = function (defnA, mod) { var raw = $_73qnwowyjdud7ek9.deepMerge({ tag: defnA.tag(), classes: mod.classes().getOr([]).concat(defnA.classes().getOr([])), attributes: $_73qnwowyjdud7ek9.merge(defnA.attributes().getOr({}), mod.attributes().getOr({})), styles: $_73qnwowyjdud7ek9.merge(defnA.styles().getOr({}), mod.styles().getOr({})) }, mod.innerHtml().or(defnA.innerHtml()).map(function (innerHtml) { return $_ettibkxsjdud7emz.wrap('innerHtml', innerHtml); }).getOr({}), clashingOptArrays('domChildren', mod.domChildren(), defnA.domChildren()), clashingOptArrays('defChildren', mod.defChildren(), defnA.defChildren()), mod.value().or(defnA.value()).map(function (value) { return $_ettibkxsjdud7emz.wrap('value', value); }).getOr({})); return $_cfxlyyyijdud7ex9.nu(raw); }; var $_biiw3tyhjdud7ewz = { nu: nu$6, derive: derive$1, merge: merge$1, modToStr: modToStr, modToRaw: modToRaw }; var executeEvent = function (bConfig, bState, executor) { return $_5xcuyiy4jdud7eur.runOnExecute(function (component) { executor(component, bConfig, bState); }); }; var loadEvent = function (bConfig, bState, f) { return $_5xcuyiy4jdud7eur.runOnInit(function (component, simulatedEvent) { f(component, bConfig, bState); }); }; var create = function (schema, name, active, apis, extra, state) { var configSchema = $_13hkebyejdud7ewm.objOfOnly(schema); var schemaSchema = $_euqmtby7jdud7ev7.optionObjOf(name, [$_euqmtby7jdud7ev7.optionObjOfOnly('config', schema)]); return doCreate(configSchema, schemaSchema, name, active, apis, extra, state); }; var createModes = function (modes, name, active, apis, extra, state) { var configSchema = modes; var schemaSchema = $_euqmtby7jdud7ev7.optionObjOf(name, [$_euqmtby7jdud7ev7.optionOf('config', modes)]); return doCreate(configSchema, schemaSchema, name, active, apis, extra, state); }; var wrapApi = function (bName, apiFunction, apiName) { var f = function (component) { var args = arguments; return component.config({ name: $_9njj9iwjjdud7eix.constant(bName) }).fold(function () { throw new Error('We could not find any behaviour configuration for: ' + bName + '. Using API: ' + apiName); }, function (info) { var rest = Array.prototype.slice.call(args, 1); return apiFunction.apply(undefined, [ component, info.config, info.state ].concat(rest)); }); }; return $_4nn5bbygjdud7eww.markAsBehaviourApi(f, apiName, apiFunction); }; var revokeBehaviour = function (name) { return { key: name, value: undefined }; }; var doCreate = function (configSchema, schemaSchema, name, active, apis, extra, state) { var getConfig = function (info) { return $_ettibkxsjdud7emz.hasKey(info, name) ? info[name]() : Option.none(); }; var wrappedApis = $_2dykn0x0jdud7ekc.map(apis, function (apiF, apiName) { return wrapApi(name, apiF, apiName); }); var wrappedExtra = $_2dykn0x0jdud7ekc.map(extra, function (extraF, extraName) { return $_4nn5bbygjdud7eww.markAsExtraApi(extraF, extraName); }); var me = $_73qnwowyjdud7ek9.deepMerge(wrappedExtra, wrappedApis, { revoke: $_9njj9iwjjdud7eix.curry(revokeBehaviour, name), config: function (spec) { var prepared = $_13hkebyejdud7ewm.asStructOrDie(name + '-config', configSchema, spec); return { key: name, value: { config: prepared, me: me, configAsRaw: $_2nf0bewljdud7ej2.cached(function () { return $_13hkebyejdud7ewm.asRawOrDie(name + '-config', configSchema, spec); }), initialConfig: spec, state: state } }; }, schema: function () { return schemaSchema; }, exhibit: function (info, base) { return getConfig(info).bind(function (behaviourInfo) { return $_ettibkxsjdud7emz.readOptFrom(active, 'exhibit').map(function (exhibitor) { return exhibitor(base, behaviourInfo.config, behaviourInfo.state); }); }).getOr($_biiw3tyhjdud7ewz.nu({})); }, name: function () { return name; }, handlers: function (info) { return getConfig(info).bind(function (behaviourInfo) { return $_ettibkxsjdud7emz.readOptFrom(active, 'events').map(function (events) { return events(behaviourInfo.config, behaviourInfo.state); }); }).getOr({}); } }); return me; }; var $_1t33c1y3jdud7euf = { executeEvent: executeEvent, loadEvent: loadEvent, create: create, createModes: createModes }; var base = function (handleUnsupported, required) { return baseWith(handleUnsupported, required, { validate: $_9rljuwzjdud7ekb.isFunction, label: 'function' }); }; var baseWith = function (handleUnsupported, required, pred) { if (required.length === 0) throw new Error('You must specify at least one required field.'); $_1ie102x7jdud7el4.validateStrArr('required', required); $_1ie102x7jdud7el4.checkDupes(required); return function (obj) { var keys = $_2dykn0x0jdud7ekc.keys(obj); var allReqd = $_1g2cevwsjdud7ejp.forall(required, function (req) { return $_1g2cevwsjdud7ejp.contains(keys, req); }); if (!allReqd) $_1ie102x7jdud7el4.reqMessage(required, keys); handleUnsupported(required, keys); var invalidKeys = $_1g2cevwsjdud7ejp.filter(required, function (key) { return !pred.validate(obj[key], key); }); if (invalidKeys.length > 0) $_1ie102x7jdud7el4.invalidTypeMessage(invalidKeys, pred.label); return obj; }; }; var handleExact = function (required, keys) { var unsupported = $_1g2cevwsjdud7ejp.filter(keys, function (key) { return !$_1g2cevwsjdud7ejp.contains(required, key); }); if (unsupported.length > 0) $_1ie102x7jdud7el4.unsuppMessage(unsupported); }; var allowExtra = $_9njj9iwjjdud7eix.noop; var $_cmsqfeyljdud7exh = { exactly: $_9njj9iwjjdud7eix.curry(base, handleExact), ensure: $_9njj9iwjjdud7eix.curry(base, allowExtra), ensureWith: $_9njj9iwjjdud7eix.curry(baseWith, allowExtra) }; var BehaviourState = $_cmsqfeyljdud7exh.ensure(['readState']); var init = function () { return BehaviourState({ readState: function () { return 'No State required'; } }); }; var $_71cmtkyjjdud7exe = { init: init }; var derive$2 = function (capabilities) { return $_ettibkxsjdud7emz.wrapAll(capabilities); }; var simpleSchema = $_13hkebyejdud7ewm.objOfOnly([ $_euqmtby7jdud7ev7.strict('fields'), $_euqmtby7jdud7ev7.strict('name'), $_euqmtby7jdud7ev7.defaulted('active', {}), $_euqmtby7jdud7ev7.defaulted('apis', {}), $_euqmtby7jdud7ev7.defaulted('extra', {}), $_euqmtby7jdud7ev7.defaulted('state', $_71cmtkyjjdud7exe) ]); var create$1 = function (data) { var value = $_13hkebyejdud7ewm.asRawOrDie('Creating behaviour: ' + data.name, simpleSchema, data); return $_1t33c1y3jdud7euf.create(value.fields, value.name, value.active, value.apis, value.extra, value.state); }; var modeSchema = $_13hkebyejdud7ewm.objOfOnly([ $_euqmtby7jdud7ev7.strict('branchKey'), $_euqmtby7jdud7ev7.strict('branches'), $_euqmtby7jdud7ev7.strict('name'), $_euqmtby7jdud7ev7.defaulted('active', {}), $_euqmtby7jdud7ev7.defaulted('apis', {}), $_euqmtby7jdud7ev7.defaulted('extra', {}), $_euqmtby7jdud7ev7.defaulted('state', $_71cmtkyjjdud7exe) ]); var createModes$1 = function (data) { var value = $_13hkebyejdud7ewm.asRawOrDie('Creating behaviour: ' + data.name, modeSchema, data); return $_1t33c1y3jdud7euf.createModes($_13hkebyejdud7ewm.choose(value.branchKey, value.branches), value.name, value.active, value.apis, value.extra, value.state); }; var $_ax1gfoy2jdud7eu7 = { derive: derive$2, revoke: $_9njj9iwjjdud7eix.constant(undefined), noActive: $_9njj9iwjjdud7eix.constant({}), noApis: $_9njj9iwjjdud7eix.constant({}), noExtra: $_9njj9iwjjdud7eix.constant({}), noState: $_9njj9iwjjdud7eix.constant($_71cmtkyjjdud7exe), create: create$1, createModes: createModes$1 }; function Toggler (turnOff, turnOn, initial) { var active = initial || false; var on = function () { turnOn(); active = true; }; var off = function () { turnOff(); active = false; }; var toggle = function () { var f = active ? off : on; f(); }; var isOn = function () { return active; }; return { on: on, off: off, toggle: toggle, isOn: isOn }; } var read$1 = function (element, attr) { var value = $_2vghk1xrjdud7ems.get(element, attr); return value === undefined || value === '' ? [] : value.split(' '); }; var add = function (element, attr, id) { var old = read$1(element, attr); var nu = old.concat([id]); $_2vghk1xrjdud7ems.set(element, attr, nu.join(' ')); }; var remove$2 = function (element, attr, id) { var nu = $_1g2cevwsjdud7ejp.filter(read$1(element, attr), function (v) { return v !== id; }); if (nu.length > 0) $_2vghk1xrjdud7ems.set(element, attr, nu.join(' ')); else $_2vghk1xrjdud7ems.remove(element, attr); }; var $_5hcec2yqjdud7ey0 = { read: read$1, add: add, remove: remove$2 }; var supports = function (element) { return element.dom().classList !== undefined; }; var get$2 = function (element) { return $_5hcec2yqjdud7ey0.read(element, 'class'); }; var add$1 = function (element, clazz) { return $_5hcec2yqjdud7ey0.add(element, 'class', clazz); }; var remove$3 = function (element, clazz) { return $_5hcec2yqjdud7ey0.remove(element, 'class', clazz); }; var toggle = function (element, clazz) { if ($_1g2cevwsjdud7ejp.contains(get$2(element), clazz)) { remove$3(element, clazz); } else { add$1(element, clazz); } }; var $_fxl75vypjdud7exy = { get: get$2, add: add$1, remove: remove$3, toggle: toggle, supports: supports }; var add$2 = function (element, clazz) { if ($_fxl75vypjdud7exy.supports(element)) element.dom().classList.add(clazz); else $_fxl75vypjdud7exy.add(element, clazz); }; var cleanClass = function (element) { var classList = $_fxl75vypjdud7exy.supports(element) ? element.dom().classList : $_fxl75vypjdud7exy.get(element); if (classList.length === 0) { $_2vghk1xrjdud7ems.remove(element, 'class'); } }; var remove$4 = function (element, clazz) { if ($_fxl75vypjdud7exy.supports(element)) { var classList = element.dom().classList; classList.remove(clazz); } else $_fxl75vypjdud7exy.remove(element, clazz); cleanClass(element); }; var toggle$1 = function (element, clazz) { return $_fxl75vypjdud7exy.supports(element) ? element.dom().classList.toggle(clazz) : $_fxl75vypjdud7exy.toggle(element, clazz); }; var toggler = function (element, clazz) { var hasClasslist = $_fxl75vypjdud7exy.supports(element); var classList = element.dom().classList; var off = function () { if (hasClasslist) classList.remove(clazz); else $_fxl75vypjdud7exy.remove(element, clazz); }; var on = function () { if (hasClasslist) classList.add(clazz); else $_fxl75vypjdud7exy.add(element, clazz); }; return Toggler(off, on, has$1(element, clazz)); }; var has$1 = function (element, clazz) { return $_fxl75vypjdud7exy.supports(element) && element.dom().classList.contains(clazz); }; var $_1x3ogvynjdud7exn = { add: add$2, remove: remove$4, toggle: toggle$1, toggler: toggler, has: has$1 }; var swap = function (element, addCls, removeCls) { $_1x3ogvynjdud7exn.remove(element, removeCls); $_1x3ogvynjdud7exn.add(element, addCls); }; var toAlpha = function (component, swapConfig, swapState) { swap(component.element(), swapConfig.alpha(), swapConfig.omega()); }; var toOmega = function (component, swapConfig, swapState) { swap(component.element(), swapConfig.omega(), swapConfig.alpha()); }; var clear = function (component, swapConfig, swapState) { $_1x3ogvynjdud7exn.remove(component.element(), swapConfig.alpha()); $_1x3ogvynjdud7exn.remove(component.element(), swapConfig.omega()); }; var isAlpha = function (component, swapConfig, swapState) { return $_1x3ogvynjdud7exn.has(component.element(), swapConfig.alpha()); }; var isOmega = function (component, swapConfig, swapState) { return $_1x3ogvynjdud7exn.has(component.element(), swapConfig.omega()); }; var $_8vr1mzymjdud7exk = { toAlpha: toAlpha, toOmega: toOmega, isAlpha: isAlpha, isOmega: isOmega, clear: clear }; var SwapSchema = [ $_euqmtby7jdud7ev7.strict('alpha'), $_euqmtby7jdud7ev7.strict('omega') ]; var Swapping = $_ax1gfoy2jdud7eu7.create({ fields: SwapSchema, name: 'swapping', apis: $_8vr1mzymjdud7exk }); var Cell = function (initial) { var value = initial; var get = function () { return value; }; var set = function (v) { value = v; }; var clone = function () { return Cell(get()); }; return { get: get, set: set, clone: clone }; }; function ClosestOrAncestor (is, ancestor, scope, a, isRoot) { return is(scope, a) ? Option.some(scope) : $_9rljuwzjdud7ekb.isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot); } var first$1 = function (predicate) { return descendant($_1tyeizxjjdud7em4.body(), predicate); }; var ancestor = function (scope, predicate, isRoot) { var element = scope.dom(); var stop = $_9rljuwzjdud7ekb.isFunction(isRoot) ? isRoot : $_9njj9iwjjdud7eix.constant(false); while (element.parentNode) { element = element.parentNode; var el = $_eobgtqxfjdud7elu.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($_eobgtqxfjdud7elu.fromDom(element.parentNode), function (x) { return !$_f1y1rtx9jdud7el7.eq(scope, x) && predicate(x); }); }; var child$1 = function (scope, predicate) { var result = $_1g2cevwsjdud7ejp.find(scope.dom().childNodes, $_9njj9iwjjdud7eix.compose(predicate, $_eobgtqxfjdud7elu.fromDom)); return result.map($_eobgtqxfjdud7elu.fromDom); }; var descendant = function (scope, predicate) { var descend = function (element) { for (var i = 0; i < element.childNodes.length; i++) { if (predicate($_eobgtqxfjdud7elu.fromDom(element.childNodes[i]))) return Option.some($_eobgtqxfjdud7elu.fromDom(element.childNodes[i])); var res = descend(element.childNodes[i]); if (res.isSome()) return res; } return Option.none(); }; return descend(scope.dom()); }; var $_4j5kdsyvjdud7eyd = { first: first$1, ancestor: ancestor, closest: closest, sibling: sibling, child: child$1, descendant: descendant }; var any$1 = function (predicate) { return $_4j5kdsyvjdud7eyd.first(predicate).isSome(); }; var ancestor$1 = function (scope, predicate, isRoot) { return $_4j5kdsyvjdud7eyd.ancestor(scope, predicate, isRoot).isSome(); }; var closest$1 = function (scope, predicate, isRoot) { return $_4j5kdsyvjdud7eyd.closest(scope, predicate, isRoot).isSome(); }; var sibling$1 = function (scope, predicate) { return $_4j5kdsyvjdud7eyd.sibling(scope, predicate).isSome(); }; var child$2 = function (scope, predicate) { return $_4j5kdsyvjdud7eyd.child(scope, predicate).isSome(); }; var descendant$1 = function (scope, predicate) { return $_4j5kdsyvjdud7eyd.descendant(scope, predicate).isSome(); }; var $_89ls8oyujdud7eyb = { any: any$1, ancestor: ancestor$1, closest: closest$1, sibling: sibling$1, child: child$2, descendant: descendant$1 }; var focus = function (element) { element.dom().focus(); }; var blur = function (element) { element.dom().blur(); }; var hasFocus = function (element) { var doc = $_dekwe2x3jdud7ekr.owner(element).dom(); return element.dom() === doc.activeElement; }; var active = function (_doc) { var doc = _doc !== undefined ? _doc.dom() : document; return Option.from(doc.activeElement).map($_eobgtqxfjdud7elu.fromDom); }; var focusInside = function (element) { var doc = $_dekwe2x3jdud7ekr.owner(element); var inside = active(doc).filter(function (a) { return $_89ls8oyujdud7eyb.closest(a, $_9njj9iwjjdud7eix.curry($_f1y1rtx9jdud7el7.eq, element)); }); inside.fold(function () { focus(element); }, $_9njj9iwjjdud7eix.noop); }; var search = function (element) { return active($_dekwe2x3jdud7ekr.owner(element)).filter(function (e) { return element.dom().contains(e.dom()); }); }; var $_25580rytjdud7ey7 = { hasFocus: hasFocus, focus: focus, blur: blur, active: active, search: search, focusInside: focusInside }; var DOMUtils = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils'); var ThemeManager = tinymce.util.Tools.resolve('tinymce.ThemeManager'); var openLink = function (target) { var link = document.createElement('a'); link.target = '_blank'; link.href = target.href; link.rel = 'noreferrer noopener'; var nuEvt = document.createEvent('MouseEvents'); nuEvt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); document.body.appendChild(link); link.dispatchEvent(nuEvt); document.body.removeChild(link); }; var $_6cir74yzjdud7eyp = { openLink: openLink }; var isSkinDisabled = function (editor) { return editor.settings.skin === false; }; var $_1ue238z0jdud7eyq = { isSkinDisabled: isSkinDisabled }; var formatChanged = 'formatChanged'; var orientationChanged = 'orientationChanged'; var dropupDismissed = 'dropupDismissed'; var $_dlmrcrz1jdud7eyr = { formatChanged: $_9njj9iwjjdud7eix.constant(formatChanged), orientationChanged: $_9njj9iwjjdud7eix.constant(orientationChanged), dropupDismissed: $_9njj9iwjjdud7eix.constant(dropupDismissed) }; var chooseChannels = function (channels, message) { return message.universal() ? channels : $_1g2cevwsjdud7ejp.filter(channels, function (ch) { return $_1g2cevwsjdud7ejp.contains(message.channels(), ch); }); }; var events = function (receiveConfig) { return $_5xcuyiy4jdud7eur.derive([$_5xcuyiy4jdud7eur.run($_801kkqwhjdud7eiq.receive(), function (component, message) { var channelMap = receiveConfig.channels(); var channels = $_2dykn0x0jdud7ekc.keys(channelMap); var targetChannels = chooseChannels(channels, message); $_1g2cevwsjdud7ejp.each(targetChannels, function (ch) { var channelInfo = channelMap[ch](); var channelSchema = channelInfo.schema(); var data = $_13hkebyejdud7ewm.asStructOrDie('channel[' + ch + '] data\nReceiver: ' + $_d3f8kuxmjdud7emi.element(component.element()), channelSchema, message.data()); channelInfo.onReceive()(component, data); }); })]); }; var $_cvbaslz4jdud7ez5 = { events: events }; var menuFields = [ $_euqmtby7jdud7ev7.strict('menu'), $_euqmtby7jdud7ev7.strict('selectedMenu') ]; var itemFields = [ $_euqmtby7jdud7ev7.strict('item'), $_euqmtby7jdud7ev7.strict('selectedItem') ]; var schema = $_13hkebyejdud7ewm.objOfOnly(itemFields.concat(menuFields)); var itemSchema = $_13hkebyejdud7ewm.objOfOnly(itemFields); var $_7x0bkgz7jdud7ezs = { menuFields: $_9njj9iwjjdud7eix.constant(menuFields), itemFields: $_9njj9iwjjdud7eix.constant(itemFields), schema: $_9njj9iwjjdud7eix.constant(schema), itemSchema: $_9njj9iwjjdud7eix.constant(itemSchema) }; var initSize = $_euqmtby7jdud7ev7.strictObjOf('initSize', [ $_euqmtby7jdud7ev7.strict('numColumns'), $_euqmtby7jdud7ev7.strict('numRows') ]); var itemMarkers = function () { return $_euqmtby7jdud7ev7.strictOf('markers', $_7x0bkgz7jdud7ezs.itemSchema()); }; var menuMarkers = function () { return $_euqmtby7jdud7ev7.strictOf('markers', $_7x0bkgz7jdud7ezs.schema()); }; var tieredMenuMarkers = function () { return $_euqmtby7jdud7ev7.strictObjOf('markers', [$_euqmtby7jdud7ev7.strict('backgroundMenu')].concat($_7x0bkgz7jdud7ezs.menuFields()).concat($_7x0bkgz7jdud7ezs.itemFields())); }; var markers = function (required) { return $_euqmtby7jdud7ev7.strictObjOf('markers', $_1g2cevwsjdud7ejp.map(required, $_euqmtby7jdud7ev7.strict)); }; var onPresenceHandler = function (label, fieldName, presence) { var trace = $_efa715xljdud7em8.getTrace(); return $_euqmtby7jdud7ev7.field(fieldName, fieldName, presence, $_13hkebyejdud7ewm.valueOf(function (f) { return Result.value(function () { $_efa715xljdud7em8.logHandler(label, fieldName, trace); return f.apply(undefined, arguments); }); })); }; var onHandler = function (fieldName) { return onPresenceHandler('onHandler', fieldName, $_6rbn18y8jdud7evc.defaulted($_9njj9iwjjdud7eix.noop)); }; var onKeyboardHandler = function (fieldName) { return onPresenceHandler('onKeyboardHandler', fieldName, $_6rbn18y8jdud7evc.defaulted(Option.none)); }; var onStrictHandler = function (fieldName) { return onPresenceHandler('onHandler', fieldName, $_6rbn18y8jdud7evc.strict()); }; var onStrictKeyboardHandler = function (fieldName) { return onPresenceHandler('onKeyboardHandler', fieldName, $_6rbn18y8jdud7evc.strict()); }; var output$1 = function (name, value) { return $_euqmtby7jdud7ev7.state(name, $_9njj9iwjjdud7eix.constant(value)); }; var snapshot$1 = function (name) { return $_euqmtby7jdud7ev7.state(name, $_9njj9iwjjdud7eix.identity); }; var $_etkinez6jdud7ezi = { initSize: $_9njj9iwjjdud7eix.constant(initSize), itemMarkers: itemMarkers, menuMarkers: menuMarkers, tieredMenuMarkers: tieredMenuMarkers, markers: markers, onHandler: onHandler, onKeyboardHandler: onKeyboardHandler, onStrictHandler: onStrictHandler, onStrictKeyboardHandler: onStrictKeyboardHandler, output: output$1, snapshot: snapshot$1 }; var ReceivingSchema = [$_euqmtby7jdud7ev7.strictOf('channels', $_13hkebyejdud7ewm.setOf(Result.value, $_13hkebyejdud7ewm.objOfOnly([ $_etkinez6jdud7ezi.onStrictHandler('onReceive'), $_euqmtby7jdud7ev7.defaulted('schema', $_13hkebyejdud7ewm.anyValue()) ])))]; var Receiving = $_ax1gfoy2jdud7eu7.create({ fields: ReceivingSchema, name: 'receiving', active: $_cvbaslz4jdud7ez5 }); var updateAriaState = function (component, toggleConfig) { var pressed = isOn(component, toggleConfig); var ariaInfo = toggleConfig.aria(); ariaInfo.update()(component, ariaInfo, pressed); }; var toggle$2 = function (component, toggleConfig, toggleState) { $_1x3ogvynjdud7exn.toggle(component.element(), toggleConfig.toggleClass()); updateAriaState(component, toggleConfig); }; var on = function (component, toggleConfig, toggleState) { $_1x3ogvynjdud7exn.add(component.element(), toggleConfig.toggleClass()); updateAriaState(component, toggleConfig); }; var off = function (component, toggleConfig, toggleState) { $_1x3ogvynjdud7exn.remove(component.element(), toggleConfig.toggleClass()); updateAriaState(component, toggleConfig); }; var isOn = function (component, toggleConfig) { return $_1x3ogvynjdud7exn.has(component.element(), toggleConfig.toggleClass()); }; var onLoad = function (component, toggleConfig, toggleState) { var api = toggleConfig.selected() ? on : off; api(component, toggleConfig, toggleState); }; var $_2x2xhizajdud7f0b = { onLoad: onLoad, toggle: toggle$2, isOn: isOn, on: on, off: off }; var exhibit = function (base, toggleConfig, toggleState) { return $_biiw3tyhjdud7ewz.nu({}); }; var events$1 = function (toggleConfig, toggleState) { var execute = $_1t33c1y3jdud7euf.executeEvent(toggleConfig, toggleState, $_2x2xhizajdud7f0b.toggle); var load = $_1t33c1y3jdud7euf.loadEvent(toggleConfig, toggleState, $_2x2xhizajdud7f0b.onLoad); return $_5xcuyiy4jdud7eur.derive($_1g2cevwsjdud7ejp.flatten([ toggleConfig.toggleOnExecute() ? [execute] : [], [load] ])); }; var $_bu8r8rz9jdud7f08 = { exhibit: exhibit, events: events$1 }; var updatePressed = function (component, ariaInfo, status) { $_2vghk1xrjdud7ems.set(component.element(), 'aria-pressed', status); if (ariaInfo.syncWithExpanded()) updateExpanded(component, ariaInfo, status); }; var updateSelected = function (component, ariaInfo, status) { $_2vghk1xrjdud7ems.set(component.element(), 'aria-selected', status); }; var updateChecked = function (component, ariaInfo, status) { $_2vghk1xrjdud7ems.set(component.element(), 'aria-checked', status); }; var updateExpanded = function (component, ariaInfo, status) { $_2vghk1xrjdud7ems.set(component.element(), 'aria-expanded', status); }; var tagAttributes = { button: ['aria-pressed'], 'input:checkbox': ['aria-checked'] }; var roleAttributes = { 'button': ['aria-pressed'], 'listbox': [ 'aria-pressed', 'aria-expanded' ], 'menuitemcheckbox': ['aria-checked'] }; var detectFromTag = function (component) { var elem = component.element(); var rawTag = $_50qkdpxkjdud7em6.name(elem); var suffix = rawTag === 'input' && $_2vghk1xrjdud7ems.has(elem, 'type') ? ':' + $_2vghk1xrjdud7ems.get(elem, 'type') : ''; return $_ettibkxsjdud7emz.readOptFrom(tagAttributes, rawTag + suffix); }; var detectFromRole = function (component) { var elem = component.element(); if (!$_2vghk1xrjdud7ems.has(elem, 'role')) return Option.none(); else { var role = $_2vghk1xrjdud7ems.get(elem, 'role'); return $_ettibkxsjdud7emz.readOptFrom(roleAttributes, role); } }; var updateAuto = function (component, ariaInfo, status) { var attributes = detectFromRole(component).orThunk(function () { return detectFromTag(component); }).getOr([]); $_1g2cevwsjdud7ejp.each(attributes, function (attr) { $_2vghk1xrjdud7ems.set(component.element(), attr, status); }); }; var $_6a43yqzcjdud7f0l = { updatePressed: updatePressed, updateSelected: updateSelected, updateChecked: updateChecked, updateExpanded: updateExpanded, updateAuto: updateAuto }; var ToggleSchema = [ $_euqmtby7jdud7ev7.defaulted('selected', false), $_euqmtby7jdud7ev7.strict('toggleClass'), $_euqmtby7jdud7ev7.defaulted('toggleOnExecute', true), $_euqmtby7jdud7ev7.defaultedOf('aria', { mode: 'none' }, $_13hkebyejdud7ewm.choose('mode', { 'pressed': [ $_euqmtby7jdud7ev7.defaulted('syncWithExpanded', false), $_etkinez6jdud7ezi.output('update', $_6a43yqzcjdud7f0l.updatePressed) ], 'checked': [$_etkinez6jdud7ezi.output('update', $_6a43yqzcjdud7f0l.updateChecked)], 'expanded': [$_etkinez6jdud7ezi.output('update', $_6a43yqzcjdud7f0l.updateExpanded)], 'selected': [$_etkinez6jdud7ezi.output('update', $_6a43yqzcjdud7f0l.updateSelected)], 'none': [$_etkinez6jdud7ezi.output('update', $_9njj9iwjjdud7eix.noop)] })) ]; var Toggling = $_ax1gfoy2jdud7eu7.create({ fields: ToggleSchema, name: 'toggling', active: $_bu8r8rz9jdud7f08, apis: $_2x2xhizajdud7f0b }); var format = function (command, update) { return Receiving.config({ channels: $_ettibkxsjdud7emz.wrap($_dlmrcrz1jdud7eyr.formatChanged(), { onReceive: function (button, data) { if (data.command === command) { update(button, data.state); } } }) }); }; var orientation = function (onReceive) { return Receiving.config({ channels: $_ettibkxsjdud7emz.wrap($_dlmrcrz1jdud7eyr.orientationChanged(), { onReceive: onReceive }) }); }; var receive = function (channel, onReceive) { return { key: channel, value: { onReceive: onReceive } }; }; var $_nw25bzdjdud7f0v = { format: format, orientation: orientation, receive: receive }; var prefix = 'tinymce-mobile'; var resolve$1 = function (p) { return prefix + '-' + p; }; var $_5qzh4bzejdud7f0y = { resolve: resolve$1, prefix: $_9njj9iwjjdud7eix.constant(prefix) }; var focus$1 = function (component, focusConfig) { if (!focusConfig.ignore()) { $_25580rytjdud7ey7.focus(component.element()); focusConfig.onFocus()(component); } }; var blur$1 = function (component, focusConfig) { if (!focusConfig.ignore()) { $_25580rytjdud7ey7.blur(component.element()); } }; var isFocused = function (component) { return $_25580rytjdud7ey7.hasFocus(component.element()); }; var $_arynz0zjjdud7f1h = { focus: focus$1, blur: blur$1, isFocused: isFocused }; var exhibit$1 = function (base, focusConfig) { if (focusConfig.ignore()) return $_biiw3tyhjdud7ewz.nu({}); else return $_biiw3tyhjdud7ewz.nu({ attributes: { 'tabindex': '-1' } }); }; var events$2 = function (focusConfig) { return $_5xcuyiy4jdud7eur.derive([$_5xcuyiy4jdud7eur.run($_801kkqwhjdud7eiq.focus(), function (component, simulatedEvent) { $_arynz0zjjdud7f1h.focus(component, focusConfig); simulatedEvent.stop(); })]); }; var $_5fj8t7zijdud7f1g = { exhibit: exhibit$1, events: events$2 }; var FocusSchema = [ $_etkinez6jdud7ezi.onHandler('onFocus'), $_euqmtby7jdud7ev7.defaulted('ignore', false) ]; var Focusing = $_ax1gfoy2jdud7eu7.create({ fields: FocusSchema, name: 'focusing', active: $_5fj8t7zijdud7f1g, apis: $_arynz0zjjdud7f1h }); var $_8y8vdkzpjdud7f2d = { BACKSPACE: $_9njj9iwjjdud7eix.constant([8]), TAB: $_9njj9iwjjdud7eix.constant([9]), ENTER: $_9njj9iwjjdud7eix.constant([13]), SHIFT: $_9njj9iwjjdud7eix.constant([16]), CTRL: $_9njj9iwjjdud7eix.constant([17]), ALT: $_9njj9iwjjdud7eix.constant([18]), CAPSLOCK: $_9njj9iwjjdud7eix.constant([20]), ESCAPE: $_9njj9iwjjdud7eix.constant([27]), SPACE: $_9njj9iwjjdud7eix.constant([32]), PAGEUP: $_9njj9iwjjdud7eix.constant([33]), PAGEDOWN: $_9njj9iwjjdud7eix.constant([34]), END: $_9njj9iwjjdud7eix.constant([35]), HOME: $_9njj9iwjjdud7eix.constant([36]), LEFT: $_9njj9iwjjdud7eix.constant([37]), UP: $_9njj9iwjjdud7eix.constant([38]), RIGHT: $_9njj9iwjjdud7eix.constant([39]), DOWN: $_9njj9iwjjdud7eix.constant([40]), INSERT: $_9njj9iwjjdud7eix.constant([45]), DEL: $_9njj9iwjjdud7eix.constant([46]), META: $_9njj9iwjjdud7eix.constant([ 91, 93, 224 ]), F10: $_9njj9iwjjdud7eix.constant([121]) }; var cycleBy = function (value, delta, min, max) { var r = value + delta; if (r > max) return min; else return r < min ? max : r; }; var cap = function (value, min, max) { if (value <= min) return min; else return value >= max ? max : value; }; var $_b3gjjrzujdud7f38 = { cycleBy: cycleBy, cap: cap }; var all$2 = function (predicate) { return descendants($_1tyeizxjjdud7em4.body(), predicate); }; var ancestors = function (scope, predicate, isRoot) { return $_1g2cevwsjdud7ejp.filter($_dekwe2x3jdud7ekr.parents(scope, isRoot), predicate); }; var siblings$1 = function (scope, predicate) { return $_1g2cevwsjdud7ejp.filter($_dekwe2x3jdud7ekr.siblings(scope), predicate); }; var children$1 = function (scope, predicate) { return $_1g2cevwsjdud7ejp.filter($_dekwe2x3jdud7ekr.children(scope), predicate); }; var descendants = function (scope, predicate) { var result = []; $_1g2cevwsjdud7ejp.each($_dekwe2x3jdud7ekr.children(scope), function (x) { if (predicate(x)) { result = result.concat([x]); } result = result.concat(descendants(x, predicate)); }); return result; }; var $_4ec18vzwjdud7f3b = { all: all$2, ancestors: ancestors, siblings: siblings$1, children: children$1, descendants: descendants }; var all$3 = function (selector) { return $_1t43jfxejdud7elq.all(selector); }; var ancestors$1 = function (scope, selector, isRoot) { return $_4ec18vzwjdud7f3b.ancestors(scope, function (e) { return $_1t43jfxejdud7elq.is(e, selector); }, isRoot); }; var siblings$2 = function (scope, selector) { return $_4ec18vzwjdud7f3b.siblings(scope, function (e) { return $_1t43jfxejdud7elq.is(e, selector); }); }; var children$2 = function (scope, selector) { return $_4ec18vzwjdud7f3b.children(scope, function (e) { return $_1t43jfxejdud7elq.is(e, selector); }); }; var descendants$1 = function (scope, selector) { return $_1t43jfxejdud7elq.all(selector, scope); }; var $_df6s98zvjdud7f39 = { all: all$3, ancestors: ancestors$1, siblings: siblings$2, children: children$2, descendants: descendants$1 }; var first$2 = function (selector) { return $_1t43jfxejdud7elq.one(selector); }; var ancestor$2 = function (scope, selector, isRoot) { return $_4j5kdsyvjdud7eyd.ancestor(scope, function (e) { return $_1t43jfxejdud7elq.is(e, selector); }, isRoot); }; var sibling$2 = function (scope, selector) { return $_4j5kdsyvjdud7eyd.sibling(scope, function (e) { return $_1t43jfxejdud7elq.is(e, selector); }); }; var child$3 = function (scope, selector) { return $_4j5kdsyvjdud7eyd.child(scope, function (e) { return $_1t43jfxejdud7elq.is(e, selector); }); }; var descendant$2 = function (scope, selector) { return $_1t43jfxejdud7elq.one(selector, scope); }; var closest$2 = function (scope, selector, isRoot) { return ClosestOrAncestor($_1t43jfxejdud7elq.is, ancestor$2, scope, selector, isRoot); }; var $_a3quyizxjdud7f3e = { first: first$2, ancestor: ancestor$2, sibling: sibling$2, child: child$3, descendant: descendant$2, closest: closest$2 }; var dehighlightAll = function (component, hConfig, hState) { var highlighted = $_df6s98zvjdud7f39.descendants(component.element(), '.' + hConfig.highlightClass()); $_1g2cevwsjdud7ejp.each(highlighted, function (h) { $_1x3ogvynjdud7exn.remove(h, hConfig.highlightClass()); component.getSystem().getByDom(h).each(function (target) { hConfig.onDehighlight()(component, target); }); }); }; var dehighlight = function (component, hConfig, hState, target) { var wasHighlighted = isHighlighted(component, hConfig, hState, target); $_1x3ogvynjdud7exn.remove(target.element(), hConfig.highlightClass()); if (wasHighlighted) hConfig.onDehighlight()(component, target); }; var highlight = function (component, hConfig, hState, target) { var wasHighlighted = isHighlighted(component, hConfig, hState, target); dehighlightAll(component, hConfig, hState); $_1x3ogvynjdud7exn.add(target.element(), hConfig.highlightClass()); if (!wasHighlighted) hConfig.onHighlight()(component, target); }; var highlightFirst = function (component, hConfig, hState) { getFirst(component, hConfig, hState).each(function (firstComp) { highlight(component, hConfig, hState, firstComp); }); }; var highlightLast = function (component, hConfig, hState) { getLast(component, hConfig, hState).each(function (lastComp) { highlight(component, hConfig, hState, lastComp); }); }; var highlightAt = function (component, hConfig, hState, index) { getByIndex(component, hConfig, hState, index).fold(function (err) { throw new Error(err); }, function (firstComp) { highlight(component, hConfig, hState, firstComp); }); }; var highlightBy = function (component, hConfig, hState, predicate) { var items = $_df6s98zvjdud7f39.descendants(component.element(), '.' + hConfig.itemClass()); var itemComps = $_ak7xq9y0jdud7eu4.cat($_1g2cevwsjdud7ejp.map(items, function (i) { return component.getSystem().getByDom(i).toOption(); })); var targetComp = $_1g2cevwsjdud7ejp.find(itemComps, predicate); targetComp.each(function (c) { highlight(component, hConfig, hState, c); }); }; var isHighlighted = function (component, hConfig, hState, queryTarget) { return $_1x3ogvynjdud7exn.has(queryTarget.element(), hConfig.highlightClass()); }; var getHighlighted = function (component, hConfig, hState) { return $_a3quyizxjdud7f3e.descendant(component.element(), '.' + hConfig.highlightClass()).bind(component.getSystem().getByDom); }; var getByIndex = function (component, hConfig, hState, index) { var items = $_df6s98zvjdud7f39.descendants(component.element(), '.' + hConfig.itemClass()); return Option.from(items[index]).fold(function () { return Result.error('No element found with index ' + index); }, component.getSystem().getByDom); }; var getFirst = function (component, hConfig, hState) { return $_a3quyizxjdud7f3e.descendant(component.element(), '.' + hConfig.itemClass()).bind(component.getSystem().getByDom); }; var getLast = function (component, hConfig, hState) { var items = $_df6s98zvjdud7f39.descendants(component.element(), '.' + hConfig.itemClass()); var last = items.length > 0 ? Option.some(items[items.length - 1]) : Option.none(); return last.bind(component.getSystem().getByDom); }; var getDelta = function (component, hConfig, hState, delta) { var items = $_df6s98zvjdud7f39.descendants(component.element(), '.' + hConfig.itemClass()); var current = $_1g2cevwsjdud7ejp.findIndex(items, function (item) { return $_1x3ogvynjdud7exn.has(item, hConfig.highlightClass()); }); return current.bind(function (selected) { var dest = $_b3gjjrzujdud7f38.cycleBy(selected, delta, 0, items.length - 1); return component.getSystem().getByDom(items[dest]); }); }; var getPrevious = function (component, hConfig, hState) { return getDelta(component, hConfig, hState, -1); }; var getNext = function (component, hConfig, hState) { return getDelta(component, hConfig, hState, +1); }; var $_6qqyvsztjdud7f2r = { dehighlightAll: dehighlightAll, dehighlight: dehighlight, highlight: highlight, highlightFirst: highlightFirst, highlightLast: highlightLast, highlightAt: highlightAt, highlightBy: highlightBy, isHighlighted: isHighlighted, getHighlighted: getHighlighted, getFirst: getFirst, getLast: getLast, getPrevious: getPrevious, getNext: getNext }; var HighlightSchema = [ $_euqmtby7jdud7ev7.strict('highlightClass'), $_euqmtby7jdud7ev7.strict('itemClass'), $_etkinez6jdud7ezi.onHandler('onHighlight'), $_etkinez6jdud7ezi.onHandler('onDehighlight') ]; var Highlighting = $_ax1gfoy2jdud7eu7.create({ fields: HighlightSchema, name: 'highlighting', apis: $_6qqyvsztjdud7f2r }); var dom = function () { var get = function (component) { return $_25580rytjdud7ey7.search(component.element()); }; var set = function (component, focusee) { component.getSystem().triggerFocus(focusee, component.element()); }; return { get: get, set: set }; }; var highlights = function () { var get = function (component) { return Highlighting.getHighlighted(component).map(function (item) { return item.element(); }); }; var set = function (component, element) { component.getSystem().getByDom(element).fold($_9njj9iwjjdud7eix.noop, function (item) { Highlighting.highlight(component, item); }); }; return { get: get, set: set }; }; var $_cic9p1zrjdud7f2l = { dom: dom, highlights: highlights }; var inSet = function (keys) { return function (event) { return $_1g2cevwsjdud7ejp.contains(keys, event.raw().which); }; }; var and = function (preds) { return function (event) { return $_1g2cevwsjdud7ejp.forall(preds, function (pred) { return pred(event); }); }; }; var is$1 = function (key) { return function (event) { return event.raw().which === key; }; }; var isShift = function (event) { return event.raw().shiftKey === true; }; var isControl = function (event) { return event.raw().ctrlKey === true; }; var $_7ccsxg100jdud7f3k = { inSet: inSet, and: and, is: is$1, isShift: isShift, isNotShift: $_9njj9iwjjdud7eix.not(isShift), isControl: isControl, isNotControl: $_9njj9iwjjdud7eix.not(isControl) }; var basic = function (key, action) { return { matches: $_7ccsxg100jdud7f3k.is(key), classification: action }; }; var rule = function (matches, action) { return { matches: matches, classification: action }; }; var choose$2 = function (transitions, event) { var transition = $_1g2cevwsjdud7ejp.find(transitions, function (t) { return t.matches(event); }); return transition.map(function (t) { return t.classification; }); }; var $_33m1mtzzjdud7f3i = { basic: basic, rule: rule, choose: choose$2 }; var typical = function (infoSchema, stateInit, getRules, getEvents, getApis, optFocusIn) { var schema = function () { return infoSchema.concat([ $_euqmtby7jdud7ev7.defaulted('focusManager', $_cic9p1zrjdud7f2l.dom()), $_etkinez6jdud7ezi.output('handler', me), $_etkinez6jdud7ezi.output('state', stateInit) ]); }; var processKey = function (component, simulatedEvent, keyingConfig, keyingState) { var rules = getRules(component, simulatedEvent, keyingConfig, keyingState); return $_33m1mtzzjdud7f3i.choose(rules, simulatedEvent.event()).bind(function (rule) { return rule(component, simulatedEvent, keyingConfig, keyingState); }); }; var toEvents = function (keyingConfig, keyingState) { var otherEvents = getEvents(keyingConfig, keyingState); var keyEvents = $_5xcuyiy4jdud7eur.derive(optFocusIn.map(function (focusIn) { return $_5xcuyiy4jdud7eur.run($_801kkqwhjdud7eiq.focus(), function (component, simulatedEvent) { focusIn(component, keyingConfig, keyingState, simulatedEvent); simulatedEvent.stop(); }); }).toArray().concat([$_5xcuyiy4jdud7eur.run($_brmbwvwijdud7eiu.keydown(), function (component, simulatedEvent) { processKey(component, simulatedEvent, keyingConfig, keyingState).each(function (_) { simulatedEvent.stop(); }); })])); return $_73qnwowyjdud7ek9.deepMerge(otherEvents, keyEvents); }; var me = { schema: schema, processKey: processKey, toEvents: toEvents, toApis: getApis }; return me; }; var $_3ktlz9zqjdud7f2g = { typical: typical }; var cyclePrev = function (values, index, predicate) { var before = $_1g2cevwsjdud7ejp.reverse(values.slice(0, index)); var after = $_1g2cevwsjdud7ejp.reverse(values.slice(index + 1)); return $_1g2cevwsjdud7ejp.find(before.concat(after), predicate); }; var tryPrev = function (values, index, predicate) { var before = $_1g2cevwsjdud7ejp.reverse(values.slice(0, index)); return $_1g2cevwsjdud7ejp.find(before, predicate); }; var cycleNext = function (values, index, predicate) { var before = values.slice(0, index); var after = values.slice(index + 1); return $_1g2cevwsjdud7ejp.find(after.concat(before), predicate); }; var tryNext = function (values, index, predicate) { var after = values.slice(index + 1); return $_1g2cevwsjdud7ejp.find(after, predicate); }; var $_ccuwl6101jdud7f3o = { cyclePrev: cyclePrev, cycleNext: cycleNext, tryPrev: tryPrev, tryNext: tryNext }; var isSupported = function (dom) { return dom.style !== undefined; }; var $_e1lc9g104jdud7f43 = { isSupported: isSupported }; var internalSet = function (dom, property, value) { if (!$_9rljuwzjdud7ekb.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 ($_e1lc9g104jdud7f43.isSupported(dom)) dom.style.setProperty(property, value); }; var internalRemove = function (dom, property) { if ($_e1lc9g104jdud7f43.isSupported(dom)) dom.style.removeProperty(property); }; var set$2 = function (element, property, value) { var dom = element.dom(); internalSet(dom, property, value); }; var setAll$1 = function (element, css) { var dom = element.dom(); $_2dykn0x0jdud7ekc.each(css, function (v, k) { internalSet(dom, k, v); }); }; var setOptions = function (element, css) { var dom = element.dom(); $_2dykn0x0jdud7ekc.each(css, function (v, k) { v.fold(function () { internalRemove(dom, k); }, function (value) { internalSet(dom, k, value); }); }); }; var get$3 = function (element, property) { var dom = element.dom(); var styles = window.getComputedStyle(dom); var r = styles.getPropertyValue(property); var v = r === '' && !$_1tyeizxjjdud7em4.inBody(element) ? getUnsafeProperty(dom, property) : r; return v === null ? undefined : v; }; var getUnsafeProperty = function (dom, property) { return $_e1lc9g104jdud7f43.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 ($_e1lc9g104jdud7f43.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 = $_eobgtqxfjdud7elu.fromTag(tag); set$2(element, property, value); var style = getRaw(element, property); return style.isSome(); }; var remove$5 = function (element, property) { var dom = element.dom(); internalRemove(dom, property); if ($_2vghk1xrjdud7ems.has(element, 'style') && $_2e2eauwvjdud7ek5.trim($_2vghk1xrjdud7ems.get(element, 'style')) === '') { $_2vghk1xrjdud7ems.remove(element, 'style'); } }; var preserve = function (element, f) { var oldStyles = $_2vghk1xrjdud7ems.get(element, 'style'); var result = f(element); var restore = oldStyles === undefined ? $_2vghk1xrjdud7ems.remove : $_2vghk1xrjdud7ems.set; restore(element, 'style', oldStyles); return result; }; var copy$1 = function (source, target) { var sourceDom = source.dom(); var targetDom = target.dom(); if ($_e1lc9g104jdud7f43.isSupported(sourceDom) && $_e1lc9g104jdud7f43.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$2(destination, style, value); }); }; var transfer$1 = function (source, destination, styles) { if (!$_50qkdpxkjdud7em6.isElement(source) || !$_50qkdpxkjdud7em6.isElement(destination)) return; $_1g2cevwsjdud7ejp.each(styles, function (style) { transferOne$1(source, destination, style); }); }; var $_btgbcy103jdud7f3t = { copy: copy$1, set: set$2, preserve: preserve, setAll: setAll$1, setOptions: setOptions, remove: remove$5, get: get$3, getRaw: getRaw, getAllRaw: getAllRaw, isValidValue: isValidValue, reflow: reflow, transfer: transfer$1 }; function Dimension (name, getOffset) { var set = function (element, h) { if (!$_9rljuwzjdud7ekb.isNumber(h) && !h.match(/^[0-9]+$/)) throw name + '.set accepts only positive integer values. Value was ' + h; var dom = element.dom(); if ($_e1lc9g104jdud7f43.isSupported(dom)) dom.style[name] = h + 'px'; }; var get = function (element) { var r = getOffset(element); if (r <= 0 || r === null) { var css = $_btgbcy103jdud7f3t.get(element, name); return parseFloat(css) || 0; } return r; }; var getOuter = get; var aggregate = function (element, properties) { return $_1g2cevwsjdud7ejp.foldl(properties, function (acc, property) { var val = $_btgbcy103jdud7f3t.get(element, property); var value = val === undefined ? 0 : parseInt(val, 10); return isNaN(value) ? acc : acc + value; }, 0); }; var max = function (element, value, properties) { var cumulativeInclusions = aggregate(element, properties); var absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0; return absoluteMax; }; return { set: set, get: get, getOuter: getOuter, aggregate: aggregate, max: max }; } var api = Dimension('height', function (element) { return $_1tyeizxjjdud7em4.inBody(element) ? element.dom().getBoundingClientRect().height : element.dom().offsetHeight; }); var set$3 = function (element, h) { api.set(element, h); }; var get$4 = function (element) { return api.get(element); }; var getOuter$1 = function (element) { return api.getOuter(element); }; var setMax = function (element, value) { var inclusions = [ 'margin-top', 'border-top-width', 'padding-top', 'padding-bottom', 'border-bottom-width', 'margin-bottom' ]; var absMax = api.max(element, value, inclusions); $_btgbcy103jdud7f3t.set(element, 'max-height', absMax + 'px'); }; var $_q9861102jdud7f3r = { set: set$3, get: get$4, getOuter: getOuter$1, setMax: setMax }; var create$2 = function (cyclicField) { var schema = [ $_euqmtby7jdud7ev7.option('onEscape'), $_euqmtby7jdud7ev7.option('onEnter'), $_euqmtby7jdud7ev7.defaulted('selector', '[data-alloy-tabstop="true"]'), $_euqmtby7jdud7ev7.defaulted('firstTabstop', 0), $_euqmtby7jdud7ev7.defaulted('useTabstopAt', $_9njj9iwjjdud7eix.constant(true)), $_euqmtby7jdud7ev7.option('visibilitySelector') ].concat([cyclicField]); var isVisible = function (tabbingConfig, element) { var target = tabbingConfig.visibilitySelector().bind(function (sel) { return $_a3quyizxjdud7f3e.closest(element, sel); }).getOr(element); return $_q9861102jdud7f3r.get(target) > 0; }; var findInitial = function (component, tabbingConfig) { var tabstops = $_df6s98zvjdud7f39.descendants(component.element(), tabbingConfig.selector()); var visibles = $_1g2cevwsjdud7ejp.filter(tabstops, function (elem) { return isVisible(tabbingConfig, elem); }); return Option.from(visibles[tabbingConfig.firstTabstop()]); }; var findCurrent = function (component, tabbingConfig) { return tabbingConfig.focusManager().get(component).bind(function (elem) { return $_a3quyizxjdud7f3e.closest(elem, tabbingConfig.selector()); }); }; var isTabstop = function (tabbingConfig, element) { return isVisible(tabbingConfig, element) && tabbingConfig.useTabstopAt()(element); }; var focusIn = function (component, tabbingConfig, tabbingState) { findInitial(component, tabbingConfig).each(function (target) { tabbingConfig.focusManager().set(component, target); }); }; var goFromTabstop = function (component, tabstops, stopIndex, tabbingConfig, cycle) { return cycle(tabstops, stopIndex, function (elem) { return isTabstop(tabbingConfig, elem); }).fold(function () { return tabbingConfig.cyclic() ? Option.some(true) : Option.none(); }, function (target) { tabbingConfig.focusManager().set(component, target); return Option.some(true); }); }; var go = function (component, simulatedEvent, tabbingConfig, cycle) { var tabstops = $_df6s98zvjdud7f39.descendants(component.element(), tabbingConfig.selector()); return findCurrent(component, tabbingConfig).bind(function (tabstop) { var optStopIndex = $_1g2cevwsjdud7ejp.findIndex(tabstops, $_9njj9iwjjdud7eix.curry($_f1y1rtx9jdud7el7.eq, tabstop)); return optStopIndex.bind(function (stopIndex) { return goFromTabstop(component, tabstops, stopIndex, tabbingConfig, cycle); }); }); }; var goBackwards = function (component, simulatedEvent, tabbingConfig, tabbingState) { var navigate = tabbingConfig.cyclic() ? $_ccuwl6101jdud7f3o.cyclePrev : $_ccuwl6101jdud7f3o.tryPrev; return go(component, simulatedEvent, tabbingConfig, navigate); }; var goForwards = function (component, simulatedEvent, tabbingConfig, tabbingState) { var navigate = tabbingConfig.cyclic() ? $_ccuwl6101jdud7f3o.cycleNext : $_ccuwl6101jdud7f3o.tryNext; return go(component, simulatedEvent, tabbingConfig, navigate); }; var execute = function (component, simulatedEvent, tabbingConfig, tabbingState) { return tabbingConfig.onEnter().bind(function (f) { return f(component, simulatedEvent); }); }; var exit = function (component, simulatedEvent, tabbingConfig, tabbingState) { return tabbingConfig.onEscape().bind(function (f) { return f(component, simulatedEvent); }); }; var getRules = $_9njj9iwjjdud7eix.constant([ $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.and([ $_7ccsxg100jdud7f3k.isShift, $_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.TAB()) ]), goBackwards), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.TAB()), goForwards), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.ESCAPE()), exit), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.and([ $_7ccsxg100jdud7f3k.isNotShift, $_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.ENTER()) ]), execute) ]); var getEvents = $_9njj9iwjjdud7eix.constant({}); var getApis = $_9njj9iwjjdud7eix.constant({}); return $_3ktlz9zqjdud7f2g.typical(schema, $_71cmtkyjjdud7exe.init, getRules, getEvents, getApis, Option.some(focusIn)); }; var $_5orss7zojdud7f1v = { create: create$2 }; var AcyclicType = $_5orss7zojdud7f1v.create($_euqmtby7jdud7ev7.state('cyclic', $_9njj9iwjjdud7eix.constant(false))); var CyclicType = $_5orss7zojdud7f1v.create($_euqmtby7jdud7ev7.state('cyclic', $_9njj9iwjjdud7eix.constant(true))); var inside = function (target) { return $_50qkdpxkjdud7em6.name(target) === 'input' && $_2vghk1xrjdud7ems.get(target, 'type') !== 'radio' || $_50qkdpxkjdud7em6.name(target) === 'textarea'; }; var $_ddk3fu108jdud7f4o = { inside: inside }; var doDefaultExecute = function (component, simulatedEvent, focused) { $_98da6jwgjdud7eil.dispatch(component, focused, $_801kkqwhjdud7eiq.execute()); return Option.some(true); }; var defaultExecute = function (component, simulatedEvent, focused) { return $_ddk3fu108jdud7f4o.inside(focused) && $_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.SPACE())(simulatedEvent.event()) ? Option.none() : doDefaultExecute(component, simulatedEvent, focused); }; var $_afxwya109jdud7f4r = { defaultExecute: defaultExecute }; var schema$1 = [ $_euqmtby7jdud7ev7.defaulted('execute', $_afxwya109jdud7f4r.defaultExecute), $_euqmtby7jdud7ev7.defaulted('useSpace', false), $_euqmtby7jdud7ev7.defaulted('useEnter', true), $_euqmtby7jdud7ev7.defaulted('useControlEnter', false), $_euqmtby7jdud7ev7.defaulted('useDown', false) ]; var execute = function (component, simulatedEvent, executeConfig, executeState) { return executeConfig.execute()(component, simulatedEvent, component.element()); }; var getRules = function (component, simulatedEvent, executeConfig, executeState) { var spaceExec = executeConfig.useSpace() && !$_ddk3fu108jdud7f4o.inside(component.element()) ? $_8y8vdkzpjdud7f2d.SPACE() : []; var enterExec = executeConfig.useEnter() ? $_8y8vdkzpjdud7f2d.ENTER() : []; var downExec = executeConfig.useDown() ? $_8y8vdkzpjdud7f2d.DOWN() : []; var execKeys = spaceExec.concat(enterExec).concat(downExec); return [$_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet(execKeys), execute)].concat(executeConfig.useControlEnter() ? [$_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.and([ $_7ccsxg100jdud7f3k.isControl, $_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.ENTER()) ]), execute)] : []); }; var getEvents = $_9njj9iwjjdud7eix.constant({}); var getApis = $_9njj9iwjjdud7eix.constant({}); var ExecutionType = $_3ktlz9zqjdud7f2g.typical(schema$1, $_71cmtkyjjdud7exe.init, getRules, getEvents, getApis, Option.none()); var flatgrid = function (spec) { var dimensions = Cell(Option.none()); var setGridSize = function (numRows, numColumns) { dimensions.set(Option.some({ numRows: $_9njj9iwjjdud7eix.constant(numRows), numColumns: $_9njj9iwjjdud7eix.constant(numColumns) })); }; var getNumRows = function () { return dimensions.get().map(function (d) { return d.numRows(); }); }; var getNumColumns = function () { return dimensions.get().map(function (d) { return d.numColumns(); }); }; return BehaviourState({ readState: $_9njj9iwjjdud7eix.constant({}), setGridSize: setGridSize, getNumRows: getNumRows, getNumColumns: getNumColumns }); }; var init$1 = function (spec) { return spec.state()(spec); }; var $_a1e0cn10bjdud7f52 = { flatgrid: flatgrid, init: init$1 }; var onDirection = function (isLtr, isRtl) { return function (element) { return getDirection(element) === 'rtl' ? isRtl : isLtr; }; }; var getDirection = function (element) { return $_btgbcy103jdud7f3t.get(element, 'direction') === 'rtl' ? 'rtl' : 'ltr'; }; var $_6dinub10djdud7f5a = { onDirection: onDirection, getDirection: getDirection }; var useH = function (movement) { return function (component, simulatedEvent, config, state) { var move = movement(component.element()); return use(move, component, simulatedEvent, config, state); }; }; var west = function (moveLeft, moveRight) { var movement = $_6dinub10djdud7f5a.onDirection(moveLeft, moveRight); return useH(movement); }; var east = function (moveLeft, moveRight) { var movement = $_6dinub10djdud7f5a.onDirection(moveRight, moveLeft); return useH(movement); }; var useV = function (move) { return function (component, simulatedEvent, config, state) { return use(move, component, simulatedEvent, config, state); }; }; var use = function (move, component, simulatedEvent, config, state) { var outcome = config.focusManager().get(component).bind(function (focused) { return move(component.element(), focused, config, state); }); return outcome.map(function (newFocus) { config.focusManager().set(component, newFocus); return true; }); }; var $_ev1k2410cjdud7f58 = { east: east, west: west, north: useV, south: useV, move: useV }; var indexInfo = $_8o1q69x4jdud7ekz.immutableBag([ 'index', 'candidates' ], []); var locate = function (candidates, predicate) { return $_1g2cevwsjdud7ejp.findIndex(candidates, predicate).map(function (index) { return indexInfo({ index: index, candidates: candidates }); }); }; var $_7l3fto10fjdud7f5i = { locate: locate }; var visibilityToggler = function (element, property, hiddenValue, visibleValue) { var initial = $_btgbcy103jdud7f3t.get(element, property); if (initial === undefined) initial = ''; var value = initial === hiddenValue ? visibleValue : hiddenValue; var off = $_9njj9iwjjdud7eix.curry($_btgbcy103jdud7f3t.set, element, property, initial); var on = $_9njj9iwjjdud7eix.curry($_btgbcy103jdud7f3t.set, element, property, value); return Toggler(off, on, false); }; var toggler$1 = function (element) { return visibilityToggler(element, 'visibility', 'hidden', 'visible'); }; var displayToggler = function (element, value) { return visibilityToggler(element, 'display', 'none', value); }; var isHidden = function (dom) { return dom.offsetWidth <= 0 && dom.offsetHeight <= 0; }; var isVisible = function (element) { var dom = element.dom(); return !isHidden(dom); }; var $_dbpb0m10gjdud7f5m = { toggler: toggler$1, displayToggler: displayToggler, isVisible: isVisible }; var locateVisible = function (container, current, selector) { var filter = $_dbpb0m10gjdud7f5m.isVisible; return locateIn(container, current, selector, filter); }; var locateIn = function (container, current, selector, filter) { var predicate = $_9njj9iwjjdud7eix.curry($_f1y1rtx9jdud7el7.eq, current); var candidates = $_df6s98zvjdud7f39.descendants(container, selector); var visible = $_1g2cevwsjdud7ejp.filter(candidates, $_dbpb0m10gjdud7f5m.isVisible); return $_7l3fto10fjdud7f5i.locate(visible, predicate); }; var findIndex$2 = function (elements, target) { return $_1g2cevwsjdud7ejp.findIndex(elements, function (elem) { return $_f1y1rtx9jdud7el7.eq(target, elem); }); }; var $_80m1p210ejdud7f5c = { locateVisible: locateVisible, locateIn: locateIn, findIndex: findIndex$2 }; var withGrid = function (values, index, numCols, f) { var oldRow = Math.floor(index / numCols); var oldColumn = index % numCols; return f(oldRow, oldColumn).bind(function (address) { var newIndex = address.row() * numCols + address.column(); return newIndex >= 0 && newIndex < values.length ? Option.some(values[newIndex]) : Option.none(); }); }; var cycleHorizontal = function (values, index, numRows, numCols, delta) { return withGrid(values, index, numCols, function (oldRow, oldColumn) { var onLastRow = oldRow === numRows - 1; var colsInRow = onLastRow ? values.length - oldRow * numCols : numCols; var newColumn = $_b3gjjrzujdud7f38.cycleBy(oldColumn, delta, 0, colsInRow - 1); return Option.some({ row: $_9njj9iwjjdud7eix.constant(oldRow), column: $_9njj9iwjjdud7eix.constant(newColumn) }); }); }; var cycleVertical = function (values, index, numRows, numCols, delta) { return withGrid(values, index, numCols, function (oldRow, oldColumn) { var newRow = $_b3gjjrzujdud7f38.cycleBy(oldRow, delta, 0, numRows - 1); var onLastRow = newRow === numRows - 1; var colsInRow = onLastRow ? values.length - newRow * numCols : numCols; var newCol = $_b3gjjrzujdud7f38.cap(oldColumn, 0, colsInRow - 1); return Option.some({ row: $_9njj9iwjjdud7eix.constant(newRow), column: $_9njj9iwjjdud7eix.constant(newCol) }); }); }; var cycleRight = function (values, index, numRows, numCols) { return cycleHorizontal(values, index, numRows, numCols, +1); }; var cycleLeft = function (values, index, numRows, numCols) { return cycleHorizontal(values, index, numRows, numCols, -1); }; var cycleUp = function (values, index, numRows, numCols) { return cycleVertical(values, index, numRows, numCols, -1); }; var cycleDown = function (values, index, numRows, numCols) { return cycleVertical(values, index, numRows, numCols, +1); }; var $_7hyrk410hjdud7f5p = { cycleDown: cycleDown, cycleUp: cycleUp, cycleLeft: cycleLeft, cycleRight: cycleRight }; var schema$2 = [ $_euqmtby7jdud7ev7.strict('selector'), $_euqmtby7jdud7ev7.defaulted('execute', $_afxwya109jdud7f4r.defaultExecute), $_etkinez6jdud7ezi.onKeyboardHandler('onEscape'), $_euqmtby7jdud7ev7.defaulted('captureTab', false), $_etkinez6jdud7ezi.initSize() ]; var focusIn = function (component, gridConfig, gridState) { $_a3quyizxjdud7f3e.descendant(component.element(), gridConfig.selector()).each(function (first) { gridConfig.focusManager().set(component, first); }); }; var findCurrent = function (component, gridConfig) { return gridConfig.focusManager().get(component).bind(function (elem) { return $_a3quyizxjdud7f3e.closest(elem, gridConfig.selector()); }); }; var execute$1 = function (component, simulatedEvent, gridConfig, gridState) { return findCurrent(component, gridConfig).bind(function (focused) { return gridConfig.execute()(component, simulatedEvent, focused); }); }; var doMove = function (cycle) { return function (element, focused, gridConfig, gridState) { return $_80m1p210ejdud7f5c.locateVisible(element, focused, gridConfig.selector()).bind(function (identified) { return cycle(identified.candidates(), identified.index(), gridState.getNumRows().getOr(gridConfig.initSize().numRows()), gridState.getNumColumns().getOr(gridConfig.initSize().numColumns())); }); }; }; var handleTab = function (component, simulatedEvent, gridConfig, gridState) { return gridConfig.captureTab() ? Option.some(true) : Option.none(); }; var doEscape = function (component, simulatedEvent, gridConfig, gridState) { return gridConfig.onEscape()(component, simulatedEvent); }; var moveLeft = doMove($_7hyrk410hjdud7f5p.cycleLeft); var moveRight = doMove($_7hyrk410hjdud7f5p.cycleRight); var moveNorth = doMove($_7hyrk410hjdud7f5p.cycleUp); var moveSouth = doMove($_7hyrk410hjdud7f5p.cycleDown); var getRules$1 = $_9njj9iwjjdud7eix.constant([ $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.LEFT()), $_ev1k2410cjdud7f58.west(moveLeft, moveRight)), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.RIGHT()), $_ev1k2410cjdud7f58.east(moveLeft, moveRight)), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.UP()), $_ev1k2410cjdud7f58.north(moveNorth)), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.DOWN()), $_ev1k2410cjdud7f58.south(moveSouth)), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.and([ $_7ccsxg100jdud7f3k.isShift, $_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.TAB()) ]), handleTab), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.and([ $_7ccsxg100jdud7f3k.isNotShift, $_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.TAB()) ]), handleTab), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.ESCAPE()), doEscape), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.SPACE().concat($_8y8vdkzpjdud7f2d.ENTER())), execute$1) ]); var getEvents$1 = $_9njj9iwjjdud7eix.constant({}); var getApis$1 = {}; var FlatgridType = $_3ktlz9zqjdud7f2g.typical(schema$2, $_a1e0cn10bjdud7f52.flatgrid, getRules$1, getEvents$1, getApis$1, Option.some(focusIn)); var horizontal = function (container, selector, current, delta) { return $_80m1p210ejdud7f5c.locateVisible(container, current, selector, $_9njj9iwjjdud7eix.constant(true)).bind(function (identified) { var index = identified.index(); var candidates = identified.candidates(); var newIndex = $_b3gjjrzujdud7f38.cycleBy(index, delta, 0, candidates.length - 1); return Option.from(candidates[newIndex]); }); }; var $_9mpzr710jjdud7f61 = { horizontal: horizontal }; var schema$3 = [ $_euqmtby7jdud7ev7.strict('selector'), $_euqmtby7jdud7ev7.defaulted('getInitial', Option.none), $_euqmtby7jdud7ev7.defaulted('execute', $_afxwya109jdud7f4r.defaultExecute), $_euqmtby7jdud7ev7.defaulted('executeOnMove', false) ]; var findCurrent$1 = function (component, flowConfig) { return flowConfig.focusManager().get(component).bind(function (elem) { return $_a3quyizxjdud7f3e.closest(elem, flowConfig.selector()); }); }; var execute$2 = function (component, simulatedEvent, flowConfig) { return findCurrent$1(component, flowConfig).bind(function (focused) { return flowConfig.execute()(component, simulatedEvent, focused); }); }; var focusIn$1 = function (component, flowConfig) { flowConfig.getInitial()(component).or($_a3quyizxjdud7f3e.descendant(component.element(), flowConfig.selector())).each(function (first) { flowConfig.focusManager().set(component, first); }); }; var moveLeft$1 = function (element, focused, info) { return $_9mpzr710jjdud7f61.horizontal(element, info.selector(), focused, -1); }; var moveRight$1 = function (element, focused, info) { return $_9mpzr710jjdud7f61.horizontal(element, info.selector(), focused, +1); }; var doMove$1 = function (movement) { return function (component, simulatedEvent, flowConfig) { return movement(component, simulatedEvent, flowConfig).bind(function () { return flowConfig.executeOnMove() ? execute$2(component, simulatedEvent, flowConfig) : Option.some(true); }); }; }; var getRules$2 = function (_) { return [ $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.LEFT().concat($_8y8vdkzpjdud7f2d.UP())), doMove$1($_ev1k2410cjdud7f58.west(moveLeft$1, moveRight$1))), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.RIGHT().concat($_8y8vdkzpjdud7f2d.DOWN())), doMove$1($_ev1k2410cjdud7f58.east(moveLeft$1, moveRight$1))), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.ENTER()), execute$2), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.SPACE()), execute$2) ]; }; var getEvents$2 = $_9njj9iwjjdud7eix.constant({}); var getApis$2 = $_9njj9iwjjdud7eix.constant({}); var FlowType = $_3ktlz9zqjdud7f2g.typical(schema$3, $_71cmtkyjjdud7exe.init, getRules$2, getEvents$2, getApis$2, Option.some(focusIn$1)); var outcome = $_8o1q69x4jdud7ekz.immutableBag([ 'rowIndex', 'columnIndex', 'cell' ], []); var toCell = function (matrix, rowIndex, columnIndex) { return Option.from(matrix[rowIndex]).bind(function (row) { return Option.from(row[columnIndex]).map(function (cell) { return outcome({ rowIndex: rowIndex, columnIndex: columnIndex, cell: cell }); }); }); }; var cycleHorizontal$1 = function (matrix, rowIndex, startCol, deltaCol) { var row = matrix[rowIndex]; var colsInRow = row.length; var newColIndex = $_b3gjjrzujdud7f38.cycleBy(startCol, deltaCol, 0, colsInRow - 1); return toCell(matrix, rowIndex, newColIndex); }; var cycleVertical$1 = function (matrix, colIndex, startRow, deltaRow) { var nextRowIndex = $_b3gjjrzujdud7f38.cycleBy(startRow, deltaRow, 0, matrix.length - 1); var colsInNextRow = matrix[nextRowIndex].length; var nextColIndex = $_b3gjjrzujdud7f38.cap(colIndex, 0, colsInNextRow - 1); return toCell(matrix, nextRowIndex, nextColIndex); }; var moveHorizontal = function (matrix, rowIndex, startCol, deltaCol) { var row = matrix[rowIndex]; var colsInRow = row.length; var newColIndex = $_b3gjjrzujdud7f38.cap(startCol + deltaCol, 0, colsInRow - 1); return toCell(matrix, rowIndex, newColIndex); }; var moveVertical = function (matrix, colIndex, startRow, deltaRow) { var nextRowIndex = $_b3gjjrzujdud7f38.cap(startRow + deltaRow, 0, matrix.length - 1); var colsInNextRow = matrix[nextRowIndex].length; var nextColIndex = $_b3gjjrzujdud7f38.cap(colIndex, 0, colsInNextRow - 1); return toCell(matrix, nextRowIndex, nextColIndex); }; var cycleRight$1 = function (matrix, startRow, startCol) { return cycleHorizontal$1(matrix, startRow, startCol, +1); }; var cycleLeft$1 = function (matrix, startRow, startCol) { return cycleHorizontal$1(matrix, startRow, startCol, -1); }; var cycleUp$1 = function (matrix, startRow, startCol) { return cycleVertical$1(matrix, startCol, startRow, -1); }; var cycleDown$1 = function (matrix, startRow, startCol) { return cycleVertical$1(matrix, startCol, startRow, +1); }; var moveLeft$2 = function (matrix, startRow, startCol) { return moveHorizontal(matrix, startRow, startCol, -1); }; var moveRight$2 = function (matrix, startRow, startCol) { return moveHorizontal(matrix, startRow, startCol, +1); }; var moveUp = function (matrix, startRow, startCol) { return moveVertical(matrix, startCol, startRow, -1); }; var moveDown = function (matrix, startRow, startCol) { return moveVertical(matrix, startCol, startRow, +1); }; var $_arz1zn10ljdud7f6n = { cycleRight: cycleRight$1, cycleLeft: cycleLeft$1, cycleUp: cycleUp$1, cycleDown: cycleDown$1, moveLeft: moveLeft$2, moveRight: moveRight$2, moveUp: moveUp, moveDown: moveDown }; var schema$4 = [ $_euqmtby7jdud7ev7.strictObjOf('selectors', [ $_euqmtby7jdud7ev7.strict('row'), $_euqmtby7jdud7ev7.strict('cell') ]), $_euqmtby7jdud7ev7.defaulted('cycles', true), $_euqmtby7jdud7ev7.defaulted('previousSelector', Option.none), $_euqmtby7jdud7ev7.defaulted('execute', $_afxwya109jdud7f4r.defaultExecute) ]; var focusIn$2 = function (component, matrixConfig) { var focused = matrixConfig.previousSelector()(component).orThunk(function () { var selectors = matrixConfig.selectors(); return $_a3quyizxjdud7f3e.descendant(component.element(), selectors.cell()); }); focused.each(function (cell) { matrixConfig.focusManager().set(component, cell); }); }; var execute$3 = function (component, simulatedEvent, matrixConfig) { return $_25580rytjdud7ey7.search(component.element()).bind(function (focused) { return matrixConfig.execute()(component, simulatedEvent, focused); }); }; var toMatrix = function (rows, matrixConfig) { return $_1g2cevwsjdud7ejp.map(rows, function (row) { return $_df6s98zvjdud7f39.descendants(row, matrixConfig.selectors().cell()); }); }; var doMove$2 = function (ifCycle, ifMove) { return function (element, focused, matrixConfig) { var move = matrixConfig.cycles() ? ifCycle : ifMove; return $_a3quyizxjdud7f3e.closest(focused, matrixConfig.selectors().row()).bind(function (inRow) { var cellsInRow = $_df6s98zvjdud7f39.descendants(inRow, matrixConfig.selectors().cell()); return $_80m1p210ejdud7f5c.findIndex(cellsInRow, focused).bind(function (colIndex) { var allRows = $_df6s98zvjdud7f39.descendants(element, matrixConfig.selectors().row()); return $_80m1p210ejdud7f5c.findIndex(allRows, inRow).bind(function (rowIndex) { var matrix = toMatrix(allRows, matrixConfig); return move(matrix, rowIndex, colIndex).map(function (next) { return next.cell(); }); }); }); }); }; }; var moveLeft$3 = doMove$2($_arz1zn10ljdud7f6n.cycleLeft, $_arz1zn10ljdud7f6n.moveLeft); var moveRight$3 = doMove$2($_arz1zn10ljdud7f6n.cycleRight, $_arz1zn10ljdud7f6n.moveRight); var moveNorth$1 = doMove$2($_arz1zn10ljdud7f6n.cycleUp, $_arz1zn10ljdud7f6n.moveUp); var moveSouth$1 = doMove$2($_arz1zn10ljdud7f6n.cycleDown, $_arz1zn10ljdud7f6n.moveDown); var getRules$3 = $_9njj9iwjjdud7eix.constant([ $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.LEFT()), $_ev1k2410cjdud7f58.west(moveLeft$3, moveRight$3)), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.RIGHT()), $_ev1k2410cjdud7f58.east(moveLeft$3, moveRight$3)), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.UP()), $_ev1k2410cjdud7f58.north(moveNorth$1)), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.DOWN()), $_ev1k2410cjdud7f58.south(moveSouth$1)), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.SPACE().concat($_8y8vdkzpjdud7f2d.ENTER())), execute$3) ]); var getEvents$3 = $_9njj9iwjjdud7eix.constant({}); var getApis$3 = $_9njj9iwjjdud7eix.constant({}); var MatrixType = $_3ktlz9zqjdud7f2g.typical(schema$4, $_71cmtkyjjdud7exe.init, getRules$3, getEvents$3, getApis$3, Option.some(focusIn$2)); var schema$5 = [ $_euqmtby7jdud7ev7.strict('selector'), $_euqmtby7jdud7ev7.defaulted('execute', $_afxwya109jdud7f4r.defaultExecute), $_euqmtby7jdud7ev7.defaulted('moveOnTab', false) ]; var execute$4 = function (component, simulatedEvent, menuConfig) { return menuConfig.focusManager().get(component).bind(function (focused) { return menuConfig.execute()(component, simulatedEvent, focused); }); }; var focusIn$3 = function (component, menuConfig, simulatedEvent) { $_a3quyizxjdud7f3e.descendant(component.element(), menuConfig.selector()).each(function (first) { menuConfig.focusManager().set(component, first); }); }; var moveUp$1 = function (element, focused, info) { return $_9mpzr710jjdud7f61.horizontal(element, info.selector(), focused, -1); }; var moveDown$1 = function (element, focused, info) { return $_9mpzr710jjdud7f61.horizontal(element, info.selector(), focused, +1); }; var fireShiftTab = function (component, simulatedEvent, menuConfig) { return menuConfig.moveOnTab() ? $_ev1k2410cjdud7f58.move(moveUp$1)(component, simulatedEvent, menuConfig) : Option.none(); }; var fireTab = function (component, simulatedEvent, menuConfig) { return menuConfig.moveOnTab() ? $_ev1k2410cjdud7f58.move(moveDown$1)(component, simulatedEvent, menuConfig) : Option.none(); }; var getRules$4 = $_9njj9iwjjdud7eix.constant([ $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.UP()), $_ev1k2410cjdud7f58.move(moveUp$1)), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.DOWN()), $_ev1k2410cjdud7f58.move(moveDown$1)), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.and([ $_7ccsxg100jdud7f3k.isShift, $_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.TAB()) ]), fireShiftTab), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.and([ $_7ccsxg100jdud7f3k.isNotShift, $_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.TAB()) ]), fireTab), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.ENTER()), execute$4), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.SPACE()), execute$4) ]); var getEvents$4 = $_9njj9iwjjdud7eix.constant({}); var getApis$4 = $_9njj9iwjjdud7eix.constant({}); var MenuType = $_3ktlz9zqjdud7f2g.typical(schema$5, $_71cmtkyjjdud7exe.init, getRules$4, getEvents$4, getApis$4, Option.some(focusIn$3)); var schema$6 = [ $_etkinez6jdud7ezi.onKeyboardHandler('onSpace'), $_etkinez6jdud7ezi.onKeyboardHandler('onEnter'), $_etkinez6jdud7ezi.onKeyboardHandler('onShiftEnter'), $_etkinez6jdud7ezi.onKeyboardHandler('onLeft'), $_etkinez6jdud7ezi.onKeyboardHandler('onRight'), $_etkinez6jdud7ezi.onKeyboardHandler('onTab'), $_etkinez6jdud7ezi.onKeyboardHandler('onShiftTab'), $_etkinez6jdud7ezi.onKeyboardHandler('onUp'), $_etkinez6jdud7ezi.onKeyboardHandler('onDown'), $_etkinez6jdud7ezi.onKeyboardHandler('onEscape'), $_euqmtby7jdud7ev7.option('focusIn') ]; var getRules$5 = function (component, simulatedEvent, executeInfo) { return [ $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.SPACE()), executeInfo.onSpace()), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.and([ $_7ccsxg100jdud7f3k.isNotShift, $_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.ENTER()) ]), executeInfo.onEnter()), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.and([ $_7ccsxg100jdud7f3k.isShift, $_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.ENTER()) ]), executeInfo.onShiftEnter()), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.and([ $_7ccsxg100jdud7f3k.isShift, $_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.TAB()) ]), executeInfo.onShiftTab()), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.and([ $_7ccsxg100jdud7f3k.isNotShift, $_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.TAB()) ]), executeInfo.onTab()), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.UP()), executeInfo.onUp()), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.DOWN()), executeInfo.onDown()), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.LEFT()), executeInfo.onLeft()), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.RIGHT()), executeInfo.onRight()), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.SPACE()), executeInfo.onSpace()), $_33m1mtzzjdud7f3i.rule($_7ccsxg100jdud7f3k.inSet($_8y8vdkzpjdud7f2d.ESCAPE()), executeInfo.onEscape()) ]; }; var focusIn$4 = function (component, executeInfo) { return executeInfo.focusIn().bind(function (f) { return f(component, executeInfo); }); }; var getEvents$5 = $_9njj9iwjjdud7eix.constant({}); var getApis$5 = $_9njj9iwjjdud7eix.constant({}); var SpecialType = $_3ktlz9zqjdud7f2g.typical(schema$6, $_71cmtkyjjdud7exe.init, getRules$5, getEvents$5, getApis$5, Option.some(focusIn$4)); var $_bkuaf5zmjdud7f1q = { acyclic: AcyclicType.schema(), cyclic: CyclicType.schema(), flow: FlowType.schema(), flatgrid: FlatgridType.schema(), matrix: MatrixType.schema(), execution: ExecutionType.schema(), menu: MenuType.schema(), special: SpecialType.schema() }; var Keying = $_ax1gfoy2jdud7eu7.createModes({ branchKey: 'mode', branches: $_bkuaf5zmjdud7f1q, name: 'keying', active: { events: function (keyingConfig, keyingState) { var handler = keyingConfig.handler(); return handler.toEvents(keyingConfig, keyingState); } }, apis: { focusIn: function (component) { component.getSystem().triggerFocus(component.element(), component.element()); }, setGridSize: function (component, keyConfig, keyState, numRows, numColumns) { if (!$_ettibkxsjdud7emz.hasKey(keyState, 'setGridSize')) { console.error('Layout does not support setGridSize'); } else { keyState.setGridSize(numRows, numColumns); } } }, state: $_a1e0cn10bjdud7f52 }); var field$1 = function (name, forbidden) { return $_euqmtby7jdud7ev7.defaultedObjOf(name, {}, $_1g2cevwsjdud7ejp.map(forbidden, function (f) { return $_euqmtby7jdud7ev7.forbid(f.name(), 'Cannot configure ' + f.name() + ' for ' + name); }).concat([$_euqmtby7jdud7ev7.state('dump', $_9njj9iwjjdud7eix.identity)])); }; var get$5 = function (data) { return data.dump(); }; var $_c7jpu210ojdud7f7a = { field: field$1, get: get$5 }; var unique = 0; var generate$1 = function (prefix) { var date = new Date(); var time = date.getTime(); var random = Math.floor(Math.random() * 1000000000); unique++; return prefix + '_' + random + unique + String(time); }; var $_3k9wwu10rjdud7f7t = { generate: generate$1 }; var premadeTag = $_3k9wwu10rjdud7f7t.generate('alloy-premade'); var apiConfig = $_3k9wwu10rjdud7f7t.generate('api'); var premade = function (comp) { return $_ettibkxsjdud7emz.wrap(premadeTag, comp); }; var getPremade = function (spec) { return $_ettibkxsjdud7emz.readOptFrom(spec, premadeTag); }; var makeApi = function (f) { return $_4nn5bbygjdud7eww.markAsSketchApi(function (component) { var args = Array.prototype.slice.call(arguments, 0); var spi = component.config(apiConfig); return f.apply(undefined, [spi].concat(args)); }, f); }; var $_37ypl510qjdud7f7n = { apiConfig: $_9njj9iwjjdud7eix.constant(apiConfig), makeApi: makeApi, premade: premade, getPremade: getPremade }; var adt$2 = $_2ytffsxwjdud7ets.generate([ { required: ['data'] }, { external: ['data'] }, { optional: ['data'] }, { group: ['data'] } ]); var fFactory = $_euqmtby7jdud7ev7.defaulted('factory', { sketch: $_9njj9iwjjdud7eix.identity }); var fSchema = $_euqmtby7jdud7ev7.defaulted('schema', []); var fName = $_euqmtby7jdud7ev7.strict('name'); var fPname = $_euqmtby7jdud7ev7.field('pname', 'pname', $_6rbn18y8jdud7evc.defaultedThunk(function (typeSpec) { return ''; }), $_13hkebyejdud7ewm.anyValue()); var fDefaults = $_euqmtby7jdud7ev7.defaulted('defaults', $_9njj9iwjjdud7eix.constant({})); var fOverrides = $_euqmtby7jdud7ev7.defaulted('overrides', $_9njj9iwjjdud7eix.constant({})); var requiredSpec = $_13hkebyejdud7ewm.objOf([ fFactory, fSchema, fName, fPname, fDefaults, fOverrides ]); var externalSpec = $_13hkebyejdud7ewm.objOf([ fFactory, fSchema, fName, fDefaults, fOverrides ]); var optionalSpec = $_13hkebyejdud7ewm.objOf([ fFactory, fSchema, fName, fPname, fDefaults, fOverrides ]); var groupSpec = $_13hkebyejdud7ewm.objOf([ fFactory, fSchema, fName, $_euqmtby7jdud7ev7.strict('unit'), fPname, fDefaults, fOverrides ]); var asNamedPart = function (part) { return part.fold(Option.some, Option.none, Option.some, Option.some); }; var name$1 = function (part) { var get = function (data) { return data.name(); }; return part.fold(get, get, get, get); }; var asCommon = function (part) { return part.fold($_9njj9iwjjdud7eix.identity, $_9njj9iwjjdud7eix.identity, $_9njj9iwjjdud7eix.identity, $_9njj9iwjjdud7eix.identity); }; var convert = function (adtConstructor, partSpec) { return function (spec) { var data = $_13hkebyejdud7ewm.asStructOrDie('Converting part type', partSpec, spec); return adtConstructor(data); }; }; var $_7938qf10vjdud7f8n = { required: convert(adt$2.required, requiredSpec), external: convert(adt$2.external, externalSpec), optional: convert(adt$2.optional, optionalSpec), group: convert(adt$2.group, groupSpec), asNamedPart: asNamedPart, name: name$1, asCommon: asCommon, original: $_9njj9iwjjdud7eix.constant('entirety') }; var placeholder = 'placeholder'; var adt$3 = $_2ytffsxwjdud7ets.generate([ { single: [ 'required', 'valueThunk' ] }, { multiple: [ 'required', 'valueThunks' ] } ]); var isSubstitute = function (uiType) { return $_1g2cevwsjdud7ejp.contains([placeholder], uiType); }; var subPlaceholder = function (owner, detail, compSpec, placeholders) { if (owner.exists(function (o) { return o !== compSpec.owner; })) return adt$3.single(true, $_9njj9iwjjdud7eix.constant(compSpec)); return $_ettibkxsjdud7emz.readOptFrom(placeholders, compSpec.name).fold(function () { throw new Error('Unknown placeholder component: ' + compSpec.name + '\nKnown: [' + $_2dykn0x0jdud7ekc.keys(placeholders) + ']\nNamespace: ' + owner.getOr('none') + '\nSpec: ' + $_crnojnydjdud7ewk.stringify(compSpec, null, 2)); }, function (newSpec) { return newSpec.replace(); }); }; var scan = function (owner, detail, compSpec, placeholders) { if (compSpec.uiType === placeholder) return subPlaceholder(owner, detail, compSpec, placeholders); else return adt$3.single(false, $_9njj9iwjjdud7eix.constant(compSpec)); }; var substitute = function (owner, detail, compSpec, placeholders) { var base = scan(owner, detail, compSpec, placeholders); return base.fold(function (req, valueThunk) { var value = valueThunk(detail, compSpec.config, compSpec.validated); var childSpecs = $_ettibkxsjdud7emz.readOptFrom(value, 'components').getOr([]); var substituted = $_1g2cevwsjdud7ejp.bind(childSpecs, function (c) { return substitute(owner, detail, c, placeholders); }); return [$_73qnwowyjdud7ek9.deepMerge(value, { components: substituted })]; }, function (req, valuesThunk) { var values = valuesThunk(detail, compSpec.config, compSpec.validated); return values; }); }; var substituteAll = function (owner, detail, components, placeholders) { return $_1g2cevwsjdud7ejp.bind(components, function (c) { return substitute(owner, detail, c, placeholders); }); }; var oneReplace = function (label, replacements) { var called = false; var used = function () { return called; }; var replace = function () { if (called === true) throw new Error('Trying to use the same placeholder more than once: ' + label); called = true; return replacements; }; var required = function () { return replacements.fold(function (req, _) { return req; }, function (req, _) { return req; }); }; return { name: $_9njj9iwjjdud7eix.constant(label), required: required, used: used, replace: replace }; }; var substitutePlaces = function (owner, detail, components, placeholders) { var ps = $_2dykn0x0jdud7ekc.map(placeholders, function (ph, name) { return oneReplace(name, ph); }); var outcome = substituteAll(owner, detail, components, ps); $_2dykn0x0jdud7ekc.each(ps, function (p) { if (p.used() === false && p.required()) { throw new Error('Placeholder: ' + p.name() + ' was not found in components list\nNamespace: ' + owner.getOr('none') + '\nComponents: ' + $_crnojnydjdud7ewk.stringify(detail.components(), null, 2)); } }); return outcome; }; var singleReplace = function (detail, p) { var replacement = p; return replacement.fold(function (req, valueThunk) { return [valueThunk(detail)]; }, function (req, valuesThunk) { return valuesThunk(detail); }); }; var $_1ipz1n10wjdud7f8y = { single: adt$3.single, multiple: adt$3.multiple, isSubstitute: isSubstitute, placeholder: $_9njj9iwjjdud7eix.constant(placeholder), substituteAll: substituteAll, substitutePlaces: substitutePlaces, singleReplace: singleReplace }; var combine = function (detail, data, partSpec, partValidated) { var spec = partSpec; return $_73qnwowyjdud7ek9.deepMerge(data.defaults()(detail, partSpec, partValidated), partSpec, { uid: detail.partUids()[data.name()] }, data.overrides()(detail, partSpec, partValidated), { 'debug.sketcher': $_ettibkxsjdud7emz.wrap('part-' + data.name(), spec) }); }; var subs = function (owner, detail, parts) { var internals = {}; var externals = {}; $_1g2cevwsjdud7ejp.each(parts, function (part) { part.fold(function (data) { internals[data.pname()] = $_1ipz1n10wjdud7f8y.single(true, function (detail, partSpec, partValidated) { return data.factory().sketch(combine(detail, data, partSpec, partValidated)); }); }, function (data) { var partSpec = detail.parts()[data.name()](); externals[data.name()] = $_9njj9iwjjdud7eix.constant(combine(detail, data, partSpec[$_7938qf10vjdud7f8n.original()]())); }, function (data) { internals[data.pname()] = $_1ipz1n10wjdud7f8y.single(false, function (detail, partSpec, partValidated) { return data.factory().sketch(combine(detail, data, partSpec, partValidated)); }); }, function (data) { internals[data.pname()] = $_1ipz1n10wjdud7f8y.multiple(true, function (detail, _partSpec, _partValidated) { var units = detail[data.name()](); return $_1g2cevwsjdud7ejp.map(units, function (u) { return data.factory().sketch($_73qnwowyjdud7ek9.deepMerge(data.defaults()(detail, u), u, data.overrides()(detail, u))); }); }); }); }); return { internals: $_9njj9iwjjdud7eix.constant(internals), externals: $_9njj9iwjjdud7eix.constant(externals) }; }; var $_pp6pv10ujdud7f8h = { subs: subs }; var generate$2 = function (owner, parts) { var r = {}; $_1g2cevwsjdud7ejp.each(parts, function (part) { $_7938qf10vjdud7f8n.asNamedPart(part).each(function (np) { var g = doGenerateOne(owner, np.pname()); r[np.name()] = function (config) { var validated = $_13hkebyejdud7ewm.asRawOrDie('Part: ' + np.name() + ' in ' + owner, $_13hkebyejdud7ewm.objOf(np.schema()), config); return $_73qnwowyjdud7ek9.deepMerge(g, { config: config, validated: validated }); }; }); }); return r; }; var doGenerateOne = function (owner, pname) { return { uiType: $_1ipz1n10wjdud7f8y.placeholder(), owner: owner, name: pname }; }; var generateOne = function (owner, pname, config) { return { uiType: $_1ipz1n10wjdud7f8y.placeholder(), owner: owner, name: pname, config: config, validated: {} }; }; var schemas = function (parts) { return $_1g2cevwsjdud7ejp.bind(parts, function (part) { return part.fold(Option.none, Option.some, Option.none, Option.none).map(function (data) { return $_euqmtby7jdud7ev7.strictObjOf(data.name(), data.schema().concat([$_etkinez6jdud7ezi.snapshot($_7938qf10vjdud7f8n.original())])); }).toArray(); }); }; var names = function (parts) { return $_1g2cevwsjdud7ejp.map(parts, $_7938qf10vjdud7f8n.name); }; var substitutes = function (owner, detail, parts) { return $_pp6pv10ujdud7f8h.subs(owner, detail, parts); }; var components = function (owner, detail, internals) { return $_1ipz1n10wjdud7f8y.substitutePlaces(Option.some(owner), detail, detail.components(), internals); }; var getPart = function (component, detail, partKey) { var uid = detail.partUids()[partKey]; return component.getSystem().getByUid(uid).toOption(); }; var getPartOrDie = function (component, detail, partKey) { return getPart(component, detail, partKey).getOrDie('Could not find part: ' + partKey); }; var getParts = function (component, detail, partKeys) { var r = {}; var uids = detail.partUids(); var system = component.getSystem(); $_1g2cevwsjdud7ejp.each(partKeys, function (pk) { r[pk] = system.getByUid(uids[pk]); }); return $_2dykn0x0jdud7ekc.map(r, $_9njj9iwjjdud7eix.constant); }; var getAllParts = function (component, detail) { var system = component.getSystem(); return $_2dykn0x0jdud7ekc.map(detail.partUids(), function (pUid, k) { return $_9njj9iwjjdud7eix.constant(system.getByUid(pUid)); }); }; var getPartsOrDie = function (component, detail, partKeys) { var r = {}; var uids = detail.partUids(); var system = component.getSystem(); $_1g2cevwsjdud7ejp.each(partKeys, function (pk) { r[pk] = system.getByUid(uids[pk]).getOrDie(); }); return $_2dykn0x0jdud7ekc.map(r, $_9njj9iwjjdud7eix.constant); }; var defaultUids = function (baseUid, partTypes) { var partNames = names(partTypes); return $_ettibkxsjdud7emz.wrapAll($_1g2cevwsjdud7ejp.map(partNames, function (pn) { return { key: pn, value: baseUid + '-' + pn }; })); }; var defaultUidsSchema = function (partTypes) { return $_euqmtby7jdud7ev7.field('partUids', 'partUids', $_6rbn18y8jdud7evc.mergeWithThunk(function (spec) { return defaultUids(spec.uid, partTypes); }), $_13hkebyejdud7ewm.anyValue()); }; var $_436kgb10tjdud7f7y = { generate: generate$2, generateOne: generateOne, schemas: schemas, names: names, substitutes: substitutes, components: components, defaultUids: defaultUids, defaultUidsSchema: defaultUidsSchema, getAllParts: getAllParts, getPart: getPart, getPartOrDie: getPartOrDie, getParts: getParts, getPartsOrDie: getPartsOrDie }; var prefix$1 = 'alloy-id-'; var idAttr = 'data-alloy-id'; var $_d587rf10yjdud7f9j = { prefix: $_9njj9iwjjdud7eix.constant(prefix$1), idAttr: $_9njj9iwjjdud7eix.constant(idAttr) }; var prefix$2 = $_d587rf10yjdud7f9j.prefix(); var idAttr$1 = $_d587rf10yjdud7f9j.idAttr(); var write = function (label, elem) { var id = $_3k9wwu10rjdud7f7t.generate(prefix$2 + label); $_2vghk1xrjdud7ems.set(elem, idAttr$1, id); return id; }; var writeOnly = function (elem, uid) { $_2vghk1xrjdud7ems.set(elem, idAttr$1, uid); }; var read$2 = function (elem) { var id = $_50qkdpxkjdud7em6.isElement(elem) ? $_2vghk1xrjdud7ems.get(elem, idAttr$1) : null; return Option.from(id); }; var find$3 = function (container, id) { return $_a3quyizxjdud7f3e.descendant(container, id); }; var generate$3 = function (prefix) { return $_3k9wwu10rjdud7f7t.generate(prefix); }; var revoke = function (elem) { $_2vghk1xrjdud7ems.remove(elem, idAttr$1); }; var $_4mrseh10xjdud7f9b = { revoke: revoke, write: write, writeOnly: writeOnly, read: read$2, find: find$3, generate: generate$3, attribute: $_9njj9iwjjdud7eix.constant(idAttr$1) }; var getPartsSchema = function (partNames, _optPartNames, _owner) { var owner = _owner !== undefined ? _owner : 'Unknown owner'; var fallbackThunk = function () { return [$_etkinez6jdud7ezi.output('partUids', {})]; }; var optPartNames = _optPartNames !== undefined ? _optPartNames : fallbackThunk(); if (partNames.length === 0 && optPartNames.length === 0) return fallbackThunk(); var partsSchema = $_euqmtby7jdud7ev7.strictObjOf('parts', $_1g2cevwsjdud7ejp.flatten([ $_1g2cevwsjdud7ejp.map(partNames, $_euqmtby7jdud7ev7.strict), $_1g2cevwsjdud7ejp.map(optPartNames, function (optPart) { return $_euqmtby7jdud7ev7.defaulted(optPart, $_1ipz1n10wjdud7f8y.single(false, function () { throw new Error('The optional part: ' + optPart + ' was not specified in the config, but it was used in components'); })); }) ])); var partUidsSchema = $_euqmtby7jdud7ev7.state('partUids', function (spec) { if (!$_ettibkxsjdud7emz.hasKey(spec, 'parts')) { throw new Error('Part uid definition for owner: ' + owner + ' requires "parts"\nExpected parts: ' + partNames.join(', ') + '\nSpec: ' + $_crnojnydjdud7ewk.stringify(spec, null, 2)); } var uids = $_2dykn0x0jdud7ekc.map(spec.parts, function (v, k) { return $_ettibkxsjdud7emz.readOptFrom(v, 'uid').getOrThunk(function () { return spec.uid + '-' + k; }); }); return uids; }); return [ partsSchema, partUidsSchema ]; }; var base$1 = function (label, partSchemas, partUidsSchemas, spec) { var ps = partSchemas.length > 0 ? [$_euqmtby7jdud7ev7.strictObjOf('parts', partSchemas)] : []; return ps.concat([ $_euqmtby7jdud7ev7.strict('uid'), $_euqmtby7jdud7ev7.defaulted('dom', {}), $_euqmtby7jdud7ev7.defaulted('components', []), $_etkinez6jdud7ezi.snapshot('originalSpec'), $_euqmtby7jdud7ev7.defaulted('debug.sketcher', {}) ]).concat(partUidsSchemas); }; var asRawOrDie$1 = function (label, schema, spec, partSchemas, partUidsSchemas) { var baseS = base$1(label, partSchemas, spec, partUidsSchemas); return $_13hkebyejdud7ewm.asRawOrDie(label + ' [SpecSchema]', $_13hkebyejdud7ewm.objOfOnly(baseS.concat(schema)), spec); }; var asStructOrDie$1 = function (label, schema, spec, partSchemas, partUidsSchemas) { var baseS = base$1(label, partSchemas, partUidsSchemas, spec); return $_13hkebyejdud7ewm.asStructOrDie(label + ' [SpecSchema]', $_13hkebyejdud7ewm.objOfOnly(baseS.concat(schema)), spec); }; var extend = function (builder, original, nu) { var newSpec = $_73qnwowyjdud7ek9.deepMerge(original, nu); return builder(newSpec); }; var addBehaviours = function (original, behaviours) { return $_73qnwowyjdud7ek9.deepMerge(original, behaviours); }; var $_5cn1o510zjdud7f9m = { asRawOrDie: asRawOrDie$1, asStructOrDie: asStructOrDie$1, addBehaviours: addBehaviours, getPartsSchema: getPartsSchema, extend: extend }; var single = function (owner, schema, factory, spec) { var specWithUid = supplyUid(spec); var detail = $_5cn1o510zjdud7f9m.asStructOrDie(owner, schema, specWithUid, [], []); return $_73qnwowyjdud7ek9.deepMerge(factory(detail, specWithUid), { 'debug.sketcher': $_ettibkxsjdud7emz.wrap(owner, spec) }); }; var composite = function (owner, schema, partTypes, factory, spec) { var specWithUid = supplyUid(spec); var partSchemas = $_436kgb10tjdud7f7y.schemas(partTypes); var partUidsSchema = $_436kgb10tjdud7f7y.defaultUidsSchema(partTypes); var detail = $_5cn1o510zjdud7f9m.asStructOrDie(owner, schema, specWithUid, partSchemas, [partUidsSchema]); var subs = $_436kgb10tjdud7f7y.substitutes(owner, detail, partTypes); var components = $_436kgb10tjdud7f7y.components(owner, detail, subs.internals()); return $_73qnwowyjdud7ek9.deepMerge(factory(detail, components, specWithUid, subs.externals()), { 'debug.sketcher': $_ettibkxsjdud7emz.wrap(owner, spec) }); }; var supplyUid = function (spec) { return $_73qnwowyjdud7ek9.deepMerge({ uid: $_4mrseh10xjdud7f9b.generate('uid') }, spec); }; var $_dsxxyk10sjdud7f7u = { supplyUid: supplyUid, single: single, composite: composite }; var singleSchema = $_13hkebyejdud7ewm.objOfOnly([ $_euqmtby7jdud7ev7.strict('name'), $_euqmtby7jdud7ev7.strict('factory'), $_euqmtby7jdud7ev7.strict('configFields'), $_euqmtby7jdud7ev7.defaulted('apis', {}), $_euqmtby7jdud7ev7.defaulted('extraApis', {}) ]); var compositeSchema = $_13hkebyejdud7ewm.objOfOnly([ $_euqmtby7jdud7ev7.strict('name'), $_euqmtby7jdud7ev7.strict('factory'), $_euqmtby7jdud7ev7.strict('configFields'), $_euqmtby7jdud7ev7.strict('partFields'), $_euqmtby7jdud7ev7.defaulted('apis', {}), $_euqmtby7jdud7ev7.defaulted('extraApis', {}) ]); var single$1 = function (rawConfig) { var config = $_13hkebyejdud7ewm.asRawOrDie('Sketcher for ' + rawConfig.name, singleSchema, rawConfig); var sketch = function (spec) { return $_dsxxyk10sjdud7f7u.single(config.name, config.configFields, config.factory, spec); }; var apis = $_2dykn0x0jdud7ekc.map(config.apis, $_37ypl510qjdud7f7n.makeApi); var extraApis = $_2dykn0x0jdud7ekc.map(config.extraApis, function (f, k) { return $_4nn5bbygjdud7eww.markAsExtraApi(f, k); }); return $_73qnwowyjdud7ek9.deepMerge({ name: $_9njj9iwjjdud7eix.constant(config.name), partFields: $_9njj9iwjjdud7eix.constant([]), configFields: $_9njj9iwjjdud7eix.constant(config.configFields), sketch: sketch }, apis, extraApis); }; var composite$1 = function (rawConfig) { var config = $_13hkebyejdud7ewm.asRawOrDie('Sketcher for ' + rawConfig.name, compositeSchema, rawConfig); var sketch = function (spec) { return $_dsxxyk10sjdud7f7u.composite(config.name, config.configFields, config.partFields, config.factory, spec); }; var parts = $_436kgb10tjdud7f7y.generate(config.name, config.partFields); var apis = $_2dykn0x0jdud7ekc.map(config.apis, $_37ypl510qjdud7f7n.makeApi); var extraApis = $_2dykn0x0jdud7ekc.map(config.extraApis, function (f, k) { return $_4nn5bbygjdud7eww.markAsExtraApi(f, k); }); return $_73qnwowyjdud7ek9.deepMerge({ name: $_9njj9iwjjdud7eix.constant(config.name), partFields: $_9njj9iwjjdud7eix.constant(config.partFields), configFields: $_9njj9iwjjdud7eix.constant(config.configFields), sketch: sketch, parts: $_9njj9iwjjdud7eix.constant(parts) }, apis, extraApis); }; var $_3inyq310pjdud7f7f = { single: single$1, composite: composite$1 }; var events$3 = function (optAction) { var executeHandler = function (action) { return $_5xcuyiy4jdud7eur.run($_801kkqwhjdud7eiq.execute(), function (component, simulatedEvent) { action(component); simulatedEvent.stop(); }); }; var onClick = function (component, simulatedEvent) { simulatedEvent.stop(); $_98da6jwgjdud7eil.emitExecute(component); }; var onMousedown = function (component, simulatedEvent) { simulatedEvent.cut(); }; var pointerEvents = $_chh2cvwkjdud7ej0.detect().deviceType.isTouch() ? [$_5xcuyiy4jdud7eur.run($_801kkqwhjdud7eiq.tap(), onClick)] : [ $_5xcuyiy4jdud7eur.run($_brmbwvwijdud7eiu.click(), onClick), $_5xcuyiy4jdud7eur.run($_brmbwvwijdud7eiu.mousedown(), onMousedown) ]; return $_5xcuyiy4jdud7eur.derive($_1g2cevwsjdud7ejp.flatten([ optAction.map(executeHandler).toArray(), pointerEvents ])); }; var $_aznso2110jdud7f9y = { events: events$3 }; var factory = function (detail, spec) { var events = $_aznso2110jdud7f9y.events(detail.action()); var optType = $_ettibkxsjdud7emz.readOptFrom(detail.dom(), 'attributes').bind($_ettibkxsjdud7emz.readOpt('type')); var optTag = $_ettibkxsjdud7emz.readOptFrom(detail.dom(), 'tag'); return { uid: detail.uid(), dom: detail.dom(), components: detail.components(), events: events, behaviours: $_73qnwowyjdud7ek9.deepMerge($_ax1gfoy2jdud7eu7.derive([ Focusing.config({}), Keying.config({ mode: 'execution', useSpace: true, useEnter: true }) ]), $_c7jpu210ojdud7f7a.get(detail.buttonBehaviours())), domModification: { attributes: $_73qnwowyjdud7ek9.deepMerge(optType.fold(function () { return optTag.is('button') ? { type: 'button' } : {}; }, function (t) { return {}; }), { role: detail.role().getOr('button') }) }, eventOrder: detail.eventOrder() }; }; var Button = $_3inyq310pjdud7f7f.single({ name: 'Button', factory: factory, configFields: [ $_euqmtby7jdud7ev7.defaulted('uid', undefined), $_euqmtby7jdud7ev7.strict('dom'), $_euqmtby7jdud7ev7.defaulted('components', []), $_c7jpu210ojdud7f7a.field('buttonBehaviours', [ Focusing, Keying ]), $_euqmtby7jdud7ev7.option('action'), $_euqmtby7jdud7ev7.option('role'), $_euqmtby7jdud7ev7.defaulted('eventOrder', {}) ] }); var exhibit$2 = function (base, unselectConfig) { return $_biiw3tyhjdud7ewz.nu({ styles: { '-webkit-user-select': 'none', 'user-select': 'none', '-ms-user-select': 'none', '-moz-user-select': '-moz-none' }, attributes: { 'unselectable': 'on' } }); }; var events$4 = function (unselectConfig) { return $_5xcuyiy4jdud7eur.derive([$_5xcuyiy4jdud7eur.abort($_brmbwvwijdud7eiu.selectstart(), $_9njj9iwjjdud7eix.constant(true))]); }; var $_f4i72r112jdud7fa8 = { events: events$4, exhibit: exhibit$2 }; var Unselecting = $_ax1gfoy2jdud7eu7.create({ fields: [], name: 'unselecting', active: $_f4i72r112jdud7fa8 }); var getAttrs = function (elem) { var attributes = elem.dom().attributes !== undefined ? elem.dom().attributes : []; return $_1g2cevwsjdud7ejp.foldl(attributes, function (b, attr) { if (attr.name === 'class') return b; else return $_73qnwowyjdud7ek9.deepMerge(b, $_ettibkxsjdud7emz.wrap(attr.name, attr.value)); }, {}); }; var getClasses = function (elem) { return Array.prototype.slice.call(elem.dom().classList, 0); }; var fromHtml$2 = function (html) { var elem = $_eobgtqxfjdud7elu.fromHtml(html); var children = $_dekwe2x3jdud7ekr.children(elem); var attrs = getAttrs(elem); var classes = getClasses(elem); var contents = children.length === 0 ? {} : { innerHtml: $_1kv7pfxojdud7emm.get(elem) }; return $_73qnwowyjdud7ek9.deepMerge({ tag: $_50qkdpxkjdud7em6.name(elem), classes: classes, attributes: attrs }, contents); }; var sketch = function (sketcher, html, config) { return sketcher.sketch($_73qnwowyjdud7ek9.deepMerge({ dom: fromHtml$2(html) }, config)); }; var $_75qh6t114jdud7fae = { fromHtml: fromHtml$2, sketch: sketch }; var dom$1 = function (rawHtml) { var html = $_2e2eauwvjdud7ek5.supplant(rawHtml, { prefix: $_5qzh4bzejdud7f0y.prefix() }); return $_75qh6t114jdud7fae.fromHtml(html); }; var spec = function (rawHtml) { var sDom = dom$1(rawHtml); return { dom: sDom }; }; var $_5oi2c7113jdud7fab = { dom: dom$1, spec: spec }; var forToolbarCommand = function (editor, command) { return forToolbar(command, function () { editor.execCommand(command); }, {}); }; var getToggleBehaviours = function (command) { return $_ax1gfoy2jdud7eu7.derive([ Toggling.config({ toggleClass: $_5qzh4bzejdud7f0y.resolve('toolbar-button-selected'), toggleOnExecute: false, aria: { mode: 'pressed' } }), $_nw25bzdjdud7f0v.format(command, function (button, status) { var toggle = status ? Toggling.on : Toggling.off; toggle(button); }) ]); }; var forToolbarStateCommand = function (editor, command) { var extraBehaviours = getToggleBehaviours(command); return forToolbar(command, function () { editor.execCommand(command); }, extraBehaviours); }; var forToolbarStateAction = function (editor, clazz, command, action) { var extraBehaviours = getToggleBehaviours(command); return forToolbar(clazz, action, extraBehaviours); }; var forToolbar = function (clazz, action, extraBehaviours) { return Button.sketch({ dom: $_5oi2c7113jdud7fab.dom(''), action: action, buttonBehaviours: $_73qnwowyjdud7ek9.deepMerge($_ax1gfoy2jdud7eu7.derive([Unselecting.config({})]), extraBehaviours) }); }; var $_d0l7buzfjdud7f11 = { forToolbar: forToolbar, forToolbarCommand: forToolbarCommand, forToolbarStateAction: forToolbarStateAction, forToolbarStateCommand: forToolbarStateCommand }; var reduceBy = function (value, min, max, step) { if (value < min) return value; else if (value > max) return max; else if (value === min) return min - 1; else return Math.max(min, value - step); }; var increaseBy = function (value, min, max, step) { if (value > max) return value; else if (value < min) return min; else if (value === max) return max + 1; else return Math.min(max, value + step); }; var capValue = function (value, min, max) { return Math.max(min, Math.min(max, value)); }; var snapValueOfX = function (bounds, value, min, max, step, snapStart) { return snapStart.fold(function () { var initValue = value - min; var extraValue = Math.round(initValue / step) * step; return capValue(min + extraValue, min - 1, max + 1); }, function (start) { var remainder = (value - start) % step; var adjustment = Math.round(remainder / step); var rawSteps = Math.floor((value - start) / step); var maxSteps = Math.floor((max - start) / step); var numSteps = Math.min(maxSteps, rawSteps + adjustment); var r = start + numSteps * step; return Math.max(start, r); }); }; var findValueOfX = function (bounds, min, max, xValue, step, snapToGrid, snapStart) { var range = max - min; if (xValue < bounds.left) return min - 1; else if (xValue > bounds.right) return max + 1; else { var xOffset = Math.min(bounds.right, Math.max(xValue, bounds.left)) - bounds.left; var newValue = capValue(xOffset / bounds.width * range + min, min - 1, max + 1); var roundedValue = Math.round(newValue); return snapToGrid && newValue >= min && newValue <= max ? snapValueOfX(bounds, newValue, min, max, step, snapStart) : roundedValue; } }; var $_3n27hj119jdud7fbg = { reduceBy: reduceBy, increaseBy: increaseBy, findValueOfX: findValueOfX }; var changeEvent = 'slider.change.value'; var isTouch = $_chh2cvwkjdud7ej0.detect().deviceType.isTouch(); var getEventSource = function (simulatedEvent) { var evt = simulatedEvent.event().raw(); if (isTouch && evt.touches !== undefined && evt.touches.length === 1) return Option.some(evt.touches[0]); else if (isTouch && evt.touches !== undefined) return Option.none(); else if (!isTouch && evt.clientX !== undefined) return Option.some(evt); else return Option.none(); }; var getEventX = function (simulatedEvent) { var spot = getEventSource(simulatedEvent); return spot.map(function (s) { return s.clientX; }); }; var fireChange = function (component, value) { $_98da6jwgjdud7eil.emitWith(component, changeEvent, { value: value }); }; var moveRightFromLedge = function (ledge, detail) { fireChange(ledge, detail.min()); }; var moveLeftFromRedge = function (redge, detail) { fireChange(redge, detail.max()); }; var setToRedge = function (redge, detail) { fireChange(redge, detail.max() + 1); }; var setToLedge = function (ledge, detail) { fireChange(ledge, detail.min() - 1); }; var setToX = function (spectrum, spectrumBounds, detail, xValue) { var value = $_3n27hj119jdud7fbg.findValueOfX(spectrumBounds, detail.min(), detail.max(), xValue, detail.stepSize(), detail.snapToGrid(), detail.snapStart()); fireChange(spectrum, value); }; var setXFromEvent = function (spectrum, detail, spectrumBounds, simulatedEvent) { return getEventX(simulatedEvent).map(function (xValue) { setToX(spectrum, spectrumBounds, detail, xValue); return xValue; }); }; var moveLeft$4 = function (spectrum, detail) { var newValue = $_3n27hj119jdud7fbg.reduceBy(detail.value().get(), detail.min(), detail.max(), detail.stepSize()); fireChange(spectrum, newValue); }; var moveRight$4 = function (spectrum, detail) { var newValue = $_3n27hj119jdud7fbg.increaseBy(detail.value().get(), detail.min(), detail.max(), detail.stepSize()); fireChange(spectrum, newValue); }; var $_edvvhp118jdud7fba = { setXFromEvent: setXFromEvent, setToLedge: setToLedge, setToRedge: setToRedge, moveLeftFromRedge: moveLeftFromRedge, moveRightFromLedge: moveRightFromLedge, moveLeft: moveLeft$4, moveRight: moveRight$4, changeEvent: $_9njj9iwjjdud7eix.constant(changeEvent) }; var platform = $_chh2cvwkjdud7ej0.detect(); var isTouch$1 = platform.deviceType.isTouch(); var edgePart = function (name, action) { return $_7938qf10vjdud7f8n.optional({ name: '' + name + '-edge', overrides: function (detail) { var touchEvents = $_5xcuyiy4jdud7eur.derive([$_5xcuyiy4jdud7eur.runActionExtra($_brmbwvwijdud7eiu.touchstart(), action, [detail])]); var mouseEvents = $_5xcuyiy4jdud7eur.derive([ $_5xcuyiy4jdud7eur.runActionExtra($_brmbwvwijdud7eiu.mousedown(), action, [detail]), $_5xcuyiy4jdud7eur.runActionExtra($_brmbwvwijdud7eiu.mousemove(), function (l, det) { if (det.mouseIsDown().get()) action(l, det); }, [detail]) ]); return { events: isTouch$1 ? touchEvents : mouseEvents }; } }); }; var ledgePart = edgePart('left', $_edvvhp118jdud7fba.setToLedge); var redgePart = edgePart('right', $_edvvhp118jdud7fba.setToRedge); var thumbPart = $_7938qf10vjdud7f8n.required({ name: 'thumb', defaults: $_9njj9iwjjdud7eix.constant({ dom: { styles: { position: 'absolute' } } }), overrides: function (detail) { return { events: $_5xcuyiy4jdud7eur.derive([ $_5xcuyiy4jdud7eur.redirectToPart($_brmbwvwijdud7eiu.touchstart(), detail, 'spectrum'), $_5xcuyiy4jdud7eur.redirectToPart($_brmbwvwijdud7eiu.touchmove(), detail, 'spectrum'), $_5xcuyiy4jdud7eur.redirectToPart($_brmbwvwijdud7eiu.touchend(), detail, 'spectrum') ]) }; } }); var spectrumPart = $_7938qf10vjdud7f8n.required({ schema: [$_euqmtby7jdud7ev7.state('mouseIsDown', function () { return Cell(false); })], name: 'spectrum', overrides: function (detail) { var moveToX = function (spectrum, simulatedEvent) { var spectrumBounds = spectrum.element().dom().getBoundingClientRect(); $_edvvhp118jdud7fba.setXFromEvent(spectrum, detail, spectrumBounds, simulatedEvent); }; var touchEvents = $_5xcuyiy4jdud7eur.derive([ $_5xcuyiy4jdud7eur.run($_brmbwvwijdud7eiu.touchstart(), moveToX), $_5xcuyiy4jdud7eur.run($_brmbwvwijdud7eiu.touchmove(), moveToX) ]); var mouseEvents = $_5xcuyiy4jdud7eur.derive([ $_5xcuyiy4jdud7eur.run($_brmbwvwijdud7eiu.mousedown(), moveToX), $_5xcuyiy4jdud7eur.run($_brmbwvwijdud7eiu.mousemove(), function (spectrum, se) { if (detail.mouseIsDown().get()) moveToX(spectrum, se); }) ]); return { behaviours: $_ax1gfoy2jdud7eu7.derive(isTouch$1 ? [] : [ Keying.config({ mode: 'special', onLeft: function (spectrum) { $_edvvhp118jdud7fba.moveLeft(spectrum, detail); return Option.some(true); }, onRight: function (spectrum) { $_edvvhp118jdud7fba.moveRight(spectrum, detail); return Option.some(true); } }), Focusing.config({}) ]), events: isTouch$1 ? touchEvents : mouseEvents }; } }); var SliderParts = [ ledgePart, redgePart, thumbPart, spectrumPart ]; var onLoad$1 = function (component, repConfig, repState) { repConfig.store().manager().onLoad(component, repConfig, repState); }; var onUnload = function (component, repConfig, repState) { repConfig.store().manager().onUnload(component, repConfig, repState); }; var setValue = function (component, repConfig, repState, data) { repConfig.store().manager().setValue(component, repConfig, repState, data); }; var getValue = function (component, repConfig, repState) { return repConfig.store().manager().getValue(component, repConfig, repState); }; var $_v97r211djdud7fbs = { onLoad: onLoad$1, onUnload: onUnload, setValue: setValue, getValue: getValue }; var events$5 = function (repConfig, repState) { var es = repConfig.resetOnDom() ? [ $_5xcuyiy4jdud7eur.runOnAttached(function (comp, se) { $_v97r211djdud7fbs.onLoad(comp, repConfig, repState); }), $_5xcuyiy4jdud7eur.runOnDetached(function (comp, se) { $_v97r211djdud7fbs.onUnload(comp, repConfig, repState); }) ] : [$_1t33c1y3jdud7euf.loadEvent(repConfig, repState, $_v97r211djdud7fbs.onLoad)]; return $_5xcuyiy4jdud7eur.derive(es); }; var $_9y5frt11cjdud7fbq = { events: events$5 }; var memory = function () { var data = Cell(null); var readState = function () { return { mode: 'memory', value: data.get() }; }; var isNotSet = function () { return data.get() === null; }; var clear = function () { data.set(null); }; return BehaviourState({ set: data.set, get: data.get, isNotSet: isNotSet, clear: clear, readState: readState }); }; var manual = function () { var readState = function () { }; return BehaviourState({ readState: readState }); }; var dataset = function () { var data = Cell({}); var readState = function () { return { mode: 'dataset', dataset: data.get() }; }; return BehaviourState({ readState: readState, set: data.set, get: data.get }); }; var init$2 = function (spec) { return spec.store().manager().state(spec); }; var $_1f27yj11gjdud7fc1 = { memory: memory, dataset: dataset, manual: manual, init: init$2 }; var setValue$1 = function (component, repConfig, repState, data) { var dataKey = repConfig.store().getDataKey(); repState.set({}); repConfig.store().setData()(component, data); repConfig.onSetValue()(component, data); }; var getValue$1 = function (component, repConfig, repState) { var key = repConfig.store().getDataKey()(component); var dataset = repState.get(); return $_ettibkxsjdud7emz.readOptFrom(dataset, key).fold(function () { return repConfig.store().getFallbackEntry()(key); }, function (data) { return data; }); }; var onLoad$2 = function (component, repConfig, repState) { repConfig.store().initialValue().each(function (data) { setValue$1(component, repConfig, repState, data); }); }; var onUnload$1 = function (component, repConfig, repState) { repState.set({}); }; var DatasetStore = [ $_euqmtby7jdud7ev7.option('initialValue'), $_euqmtby7jdud7ev7.strict('getFallbackEntry'), $_euqmtby7jdud7ev7.strict('getDataKey'), $_euqmtby7jdud7ev7.strict('setData'), $_etkinez6jdud7ezi.output('manager', { setValue: setValue$1, getValue: getValue$1, onLoad: onLoad$2, onUnload: onUnload$1, state: $_1f27yj11gjdud7fc1.dataset }) ]; var getValue$2 = function (component, repConfig, repState) { return repConfig.store().getValue()(component); }; var setValue$2 = function (component, repConfig, repState, data) { repConfig.store().setValue()(component, data); repConfig.onSetValue()(component, data); }; var onLoad$3 = function (component, repConfig, repState) { repConfig.store().initialValue().each(function (data) { repConfig.store().setValue()(component, data); }); }; var ManualStore = [ $_euqmtby7jdud7ev7.strict('getValue'), $_euqmtby7jdud7ev7.defaulted('setValue', $_9njj9iwjjdud7eix.noop), $_euqmtby7jdud7ev7.option('initialValue'), $_etkinez6jdud7ezi.output('manager', { setValue: setValue$2, getValue: getValue$2, onLoad: onLoad$3, onUnload: $_9njj9iwjjdud7eix.noop, state: $_71cmtkyjjdud7exe.init }) ]; var setValue$3 = function (component, repConfig, repState, data) { repState.set(data); repConfig.onSetValue()(component, data); }; var getValue$3 = function (component, repConfig, repState) { return repState.get(); }; var onLoad$4 = function (component, repConfig, repState) { repConfig.store().initialValue().each(function (initVal) { if (repState.isNotSet()) repState.set(initVal); }); }; var onUnload$2 = function (component, repConfig, repState) { repState.clear(); }; var MemoryStore = [ $_euqmtby7jdud7ev7.option('initialValue'), $_etkinez6jdud7ezi.output('manager', { setValue: setValue$3, getValue: getValue$3, onLoad: onLoad$4, onUnload: onUnload$2, state: $_1f27yj11gjdud7fc1.memory }) ]; var RepresentSchema = [ $_euqmtby7jdud7ev7.defaultedOf('store', { mode: 'memory' }, $_13hkebyejdud7ewm.choose('mode', { memory: MemoryStore, manual: ManualStore, dataset: DatasetStore })), $_etkinez6jdud7ezi.onHandler('onSetValue'), $_euqmtby7jdud7ev7.defaulted('resetOnDom', false) ]; var me = $_ax1gfoy2jdud7eu7.create({ fields: RepresentSchema, name: 'representing', active: $_9y5frt11cjdud7fbq, apis: $_v97r211djdud7fbs, extra: { setValueFrom: function (component, source) { var value = me.getValue(source); me.setValue(component, value); } }, state: $_1f27yj11gjdud7fc1 }); var isTouch$2 = $_chh2cvwkjdud7ej0.detect().deviceType.isTouch(); var SliderSchema = [ $_euqmtby7jdud7ev7.strict('min'), $_euqmtby7jdud7ev7.strict('max'), $_euqmtby7jdud7ev7.defaulted('stepSize', 1), $_euqmtby7jdud7ev7.defaulted('onChange', $_9njj9iwjjdud7eix.noop), $_euqmtby7jdud7ev7.defaulted('onInit', $_9njj9iwjjdud7eix.noop), $_euqmtby7jdud7ev7.defaulted('onDragStart', $_9njj9iwjjdud7eix.noop), $_euqmtby7jdud7ev7.defaulted('onDragEnd', $_9njj9iwjjdud7eix.noop), $_euqmtby7jdud7ev7.defaulted('snapToGrid', false), $_euqmtby7jdud7ev7.option('snapStart'), $_euqmtby7jdud7ev7.strict('getInitialValue'), $_c7jpu210ojdud7f7a.field('sliderBehaviours', [ Keying, me ]), $_euqmtby7jdud7ev7.state('value', function (spec) { return Cell(spec.min); }) ].concat(!isTouch$2 ? [$_euqmtby7jdud7ev7.state('mouseIsDown', function () { return Cell(false); })] : []); var api$1 = Dimension('width', function (element) { return element.dom().offsetWidth; }); var set$4 = function (element, h) { api$1.set(element, h); }; var get$6 = function (element) { return api$1.get(element); }; var getOuter$2 = function (element) { return api$1.getOuter(element); }; var setMax$1 = function (element, value) { var inclusions = [ 'margin-left', 'border-left-width', 'padding-left', 'padding-right', 'border-right-width', 'margin-right' ]; var absMax = api$1.max(element, value, inclusions); $_btgbcy103jdud7f3t.set(element, 'max-width', absMax + 'px'); }; var $_6chz3611kjdud7fcw = { set: set$4, get: get$6, getOuter: getOuter$2, setMax: setMax$1 }; var isTouch$3 = $_chh2cvwkjdud7ej0.detect().deviceType.isTouch(); var sketch$1 = function (detail, components, spec, externals) { var range = detail.max() - detail.min(); var getXCentre = function (component) { var rect = component.element().dom().getBoundingClientRect(); return (rect.left + rect.right) / 2; }; var getThumb = function (component) { return $_436kgb10tjdud7f7y.getPartOrDie(component, detail, 'thumb'); }; var getXOffset = function (slider, spectrumBounds, detail) { var v = detail.value().get(); if (v < detail.min()) { return $_436kgb10tjdud7f7y.getPart(slider, detail, 'left-edge').fold(function () { return 0; }, function (ledge) { return getXCentre(ledge) - spectrumBounds.left; }); } else if (v > detail.max()) { return $_436kgb10tjdud7f7y.getPart(slider, detail, 'right-edge').fold(function () { return spectrumBounds.width; }, function (redge) { return getXCentre(redge) - spectrumBounds.left; }); } else { return (detail.value().get() - detail.min()) / range * spectrumBounds.width; } }; var getXPos = function (slider) { var spectrum = $_436kgb10tjdud7f7y.getPartOrDie(slider, detail, 'spectrum'); var spectrumBounds = spectrum.element().dom().getBoundingClientRect(); var sliderBounds = slider.element().dom().getBoundingClientRect(); var xOffset = getXOffset(slider, spectrumBounds, detail); return spectrumBounds.left - sliderBounds.left + xOffset; }; var refresh = function (component) { var pos = getXPos(component); var thumb = getThumb(component); var thumbRadius = $_6chz3611kjdud7fcw.get(thumb.element()) / 2; $_btgbcy103jdud7f3t.set(thumb.element(), 'left', pos - thumbRadius + 'px'); }; var changeValue = function (component, newValue) { var oldValue = detail.value().get(); var thumb = getThumb(component); if (oldValue !== newValue || $_btgbcy103jdud7f3t.getRaw(thumb.element(), 'left').isNone()) { detail.value().set(newValue); refresh(component); detail.onChange()(component, thumb, newValue); return Option.some(true); } else { return Option.none(); } }; var resetToMin = function (slider) { changeValue(slider, detail.min()); }; var resetToMax = function (slider) { changeValue(slider, detail.max()); }; var uiEventsArr = isTouch$3 ? [ $_5xcuyiy4jdud7eur.run($_brmbwvwijdud7eiu.touchstart(), function (slider, simulatedEvent) { detail.onDragStart()(slider, getThumb(slider)); }), $_5xcuyiy4jdud7eur.run($_brmbwvwijdud7eiu.touchend(), function (slider, simulatedEvent) { detail.onDragEnd()(slider, getThumb(slider)); }) ] : [ $_5xcuyiy4jdud7eur.run($_brmbwvwijdud7eiu.mousedown(), function (slider, simulatedEvent) { simulatedEvent.stop(); detail.onDragStart()(slider, getThumb(slider)); detail.mouseIsDown().set(true); }), $_5xcuyiy4jdud7eur.run($_brmbwvwijdud7eiu.mouseup(), function (slider, simulatedEvent) { detail.onDragEnd()(slider, getThumb(slider)); detail.mouseIsDown().set(false); }) ]; return { uid: detail.uid(), dom: detail.dom(), components: components, behaviours: $_73qnwowyjdud7ek9.deepMerge($_ax1gfoy2jdud7eu7.derive($_1g2cevwsjdud7ejp.flatten([ !isTouch$3 ? [Keying.config({ mode: 'special', focusIn: function (slider) { return $_436kgb10tjdud7f7y.getPart(slider, detail, 'spectrum').map(Keying.focusIn).map($_9njj9iwjjdud7eix.constant(true)); } })] : [], [me.config({ store: { mode: 'manual', getValue: function (_) { return detail.value().get(); } } })] ])), $_c7jpu210ojdud7f7a.get(detail.sliderBehaviours())), events: $_5xcuyiy4jdud7eur.derive([ $_5xcuyiy4jdud7eur.run($_edvvhp118jdud7fba.changeEvent(), function (slider, simulatedEvent) { changeValue(slider, simulatedEvent.event().value()); }), $_5xcuyiy4jdud7eur.runOnAttached(function (slider, simulatedEvent) { detail.value().set(detail.getInitialValue()()); var thumb = getThumb(slider); refresh(slider); detail.onInit()(slider, thumb, detail.value().get()); }) ].concat(uiEventsArr)), apis: { resetToMin: resetToMin, resetToMax: resetToMax, refresh: refresh }, domModification: { styles: { position: 'relative' } } }; }; var $_5vf75e11jjdud7fci = { sketch: sketch$1 }; var Slider = $_3inyq310pjdud7f7f.composite({ name: 'Slider', configFields: SliderSchema, partFields: SliderParts, factory: $_5vf75e11jjdud7fci.sketch, apis: { resetToMin: function (apis, slider) { apis.resetToMin(slider); }, resetToMax: function (apis, slider) { apis.resetToMax(slider); }, refresh: function (apis, slider) { apis.refresh(slider); } } }); var button = function (realm, clazz, makeItems) { return $_d0l7buzfjdud7f11.forToolbar(clazz, function () { var items = makeItems(); realm.setContextToolbar([{ label: clazz + ' group', items: items }]); }, {}); }; var $_247awl11ljdud7fcy = { button: button }; var BLACK = -1; var makeSlider = function (spec) { var getColor = function (hue) { if (hue < 0) { return 'black'; } else if (hue > 360) { return 'white'; } else { return 'hsl(' + hue + ', 100%, 50%)'; } }; var onInit = function (slider, thumb, value) { var color = getColor(value); $_btgbcy103jdud7f3t.set(thumb.element(), 'background-color', color); }; var onChange = function (slider, thumb, value) { var color = getColor(value); $_btgbcy103jdud7f3t.set(thumb.element(), 'background-color', color); spec.onChange(slider, thumb, color); }; return Slider.sketch({ dom: $_5oi2c7113jdud7fab.dom('
'), components: [ Slider.parts()['left-edge']($_5oi2c7113jdud7fab.spec('
')), Slider.parts().spectrum({ dom: $_5oi2c7113jdud7fab.dom('
'), components: [$_5oi2c7113jdud7fab.spec('
')], behaviours: $_ax1gfoy2jdud7eu7.derive([Toggling.config({ toggleClass: $_5qzh4bzejdud7f0y.resolve('thumb-active') })]) }), Slider.parts()['right-edge']($_5oi2c7113jdud7fab.spec('
')), Slider.parts().thumb({ dom: $_5oi2c7113jdud7fab.dom('
'), behaviours: $_ax1gfoy2jdud7eu7.derive([Toggling.config({ toggleClass: $_5qzh4bzejdud7f0y.resolve('thumb-active') })]) }) ], onChange: onChange, onDragStart: function (slider, thumb) { Toggling.on(thumb); }, onDragEnd: function (slider, thumb) { Toggling.off(thumb); }, onInit: onInit, stepSize: 10, min: 0, max: 360, getInitialValue: spec.getInitialValue, sliderBehaviours: $_ax1gfoy2jdud7eu7.derive([$_nw25bzdjdud7f0v.orientation(Slider.refresh)]) }); }; var makeItems = function (spec) { return [makeSlider(spec)]; }; var sketch$2 = function (realm, editor) { var spec = { onChange: function (slider, thumb, color) { editor.undoManager.transact(function () { editor.formatter.apply('forecolor', { value: color }); editor.nodeChanged(); }); }, getInitialValue: function () { return BLACK; } }; return $_247awl11ljdud7fcy.button(realm, 'color', function () { return makeItems(spec); }); }; var $_2q53pp115jdud7fap = { makeItems: makeItems, sketch: sketch$2 }; var schema$7 = $_13hkebyejdud7ewm.objOfOnly([ $_euqmtby7jdud7ev7.strict('getInitialValue'), $_euqmtby7jdud7ev7.strict('onChange'), $_euqmtby7jdud7ev7.strict('category'), $_euqmtby7jdud7ev7.strict('sizes') ]); var sketch$3 = function (rawSpec) { var spec = $_13hkebyejdud7ewm.asRawOrDie('SizeSlider', schema$7, rawSpec); var isValidValue = function (valueIndex) { return valueIndex >= 0 && valueIndex < spec.sizes.length; }; var onChange = function (slider, thumb, valueIndex) { if (isValidValue(valueIndex)) { spec.onChange(valueIndex); } }; return Slider.sketch({ dom: { tag: 'div', classes: [ $_5qzh4bzejdud7f0y.resolve('slider-' + spec.category + '-size-container'), $_5qzh4bzejdud7f0y.resolve('slider'), $_5qzh4bzejdud7f0y.resolve('slider-size-container') ] }, onChange: onChange, onDragStart: function (slider, thumb) { Toggling.on(thumb); }, onDragEnd: function (slider, thumb) { Toggling.off(thumb); }, min: 0, max: spec.sizes.length - 1, stepSize: 1, getInitialValue: spec.getInitialValue, snapToGrid: true, sliderBehaviours: $_ax1gfoy2jdud7eu7.derive([$_nw25bzdjdud7f0v.orientation(Slider.refresh)]), components: [ Slider.parts().spectrum({ dom: $_5oi2c7113jdud7fab.dom('
'), components: [$_5oi2c7113jdud7fab.spec('
')] }), Slider.parts().thumb({ dom: $_5oi2c7113jdud7fab.dom('
'), behaviours: $_ax1gfoy2jdud7eu7.derive([Toggling.config({ toggleClass: $_5qzh4bzejdud7f0y.resolve('thumb-active') })]) }) ] }); }; var $_a4vyig11njdud7fd0 = { sketch: sketch$3 }; var ancestor$3 = function (scope, transform, isRoot) { var element = scope.dom(); var stop = $_9rljuwzjdud7ekb.isFunction(isRoot) ? isRoot : $_9njj9iwjjdud7eix.constant(false); while (element.parentNode) { element = element.parentNode; var el = $_eobgtqxfjdud7elu.fromDom(element); var transformed = transform(el); if (transformed.isSome()) return transformed; else if (stop(el)) break; } return Option.none(); }; var closest$3 = function (scope, transform, isRoot) { var current = transform(scope); return current.orThunk(function () { return isRoot(scope) ? Option.none() : ancestor$3(scope, transform, isRoot); }); }; var $_9mj1j411pjdud7fdi = { ancestor: ancestor$3, closest: closest$3 }; var candidates = [ '9px', '10px', '11px', '12px', '14px', '16px', '18px', '20px', '24px', '32px', '36px' ]; var defaultSize = 'medium'; var defaultIndex = 2; var indexToSize = function (index) { return Option.from(candidates[index]); }; var sizeToIndex = function (size) { return $_1g2cevwsjdud7ejp.findIndex(candidates, function (v) { return v === size; }); }; var getRawOrComputed = function (isRoot, rawStart) { var optStart = $_50qkdpxkjdud7em6.isElement(rawStart) ? Option.some(rawStart) : $_dekwe2x3jdud7ekr.parent(rawStart); return optStart.map(function (start) { var inline = $_9mj1j411pjdud7fdi.closest(start, function (elem) { return $_btgbcy103jdud7f3t.getRaw(elem, 'font-size'); }, isRoot); return inline.getOrThunk(function () { return $_btgbcy103jdud7f3t.get(start, 'font-size'); }); }).getOr(''); }; var getSize = function (editor) { var node = editor.selection.getStart(); var elem = $_eobgtqxfjdud7elu.fromDom(node); var root = $_eobgtqxfjdud7elu.fromDom(editor.getBody()); var isRoot = function (e) { return $_f1y1rtx9jdud7el7.eq(root, e); }; var elemSize = getRawOrComputed(isRoot, elem); return $_1g2cevwsjdud7ejp.find(candidates, function (size) { return elemSize === size; }).getOr(defaultSize); }; var applySize = function (editor, value) { var currentValue = getSize(editor); if (currentValue !== value) { editor.execCommand('fontSize', false, value); } }; var get$7 = function (editor) { var size = getSize(editor); return sizeToIndex(size).getOr(defaultIndex); }; var apply$1 = function (editor, index) { indexToSize(index).each(function (size) { applySize(editor, size); }); }; var $_f22pa511ojdud7fd8 = { candidates: $_9njj9iwjjdud7eix.constant(candidates), get: get$7, apply: apply$1 }; var sizes = $_f22pa511ojdud7fd8.candidates(); var makeSlider$1 = function (spec) { return $_a4vyig11njdud7fd0.sketch({ onChange: spec.onChange, sizes: sizes, category: 'font', getInitialValue: spec.getInitialValue }); }; var makeItems$1 = function (spec) { return [ $_5oi2c7113jdud7fab.spec(''), makeSlider$1(spec), $_5oi2c7113jdud7fab.spec('') ]; }; var sketch$4 = function (realm, editor) { var spec = { onChange: function (value) { $_f22pa511ojdud7fd8.apply(editor, value); }, getInitialValue: function () { return $_f22pa511ojdud7fd8.get(editor); } }; return $_247awl11ljdud7fcy.button(realm, 'font-size', function () { return makeItems$1(spec); }); }; var $_8r2dx911mjdud7fcz = { makeItems: makeItems$1, sketch: sketch$4 }; var record = function (spec) { var uid = $_ettibkxsjdud7emz.hasKey(spec, 'uid') ? spec.uid : $_4mrseh10xjdud7f9b.generate('memento'); var get = function (any) { return any.getSystem().getByUid(uid).getOrDie(); }; var getOpt = function (any) { return any.getSystem().getByUid(uid).fold(Option.none, Option.some); }; var asSpec = function () { return $_73qnwowyjdud7ek9.deepMerge(spec, { uid: uid }); }; return { get: get, getOpt: getOpt, asSpec: asSpec }; }; var $_81ial811rjdud7fdw = { record: record }; function create$3(width, height) { return resize(document.createElement('canvas'), width, height); } function clone$2(canvas) { var tCanvas, ctx; tCanvas = create$3(canvas.width, canvas.height); ctx = get2dContext(tCanvas); ctx.drawImage(canvas, 0, 0); return tCanvas; } function get2dContext(canvas) { return canvas.getContext('2d'); } function get3dContext(canvas) { var gl = null; try { gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl'); } catch (e) { } if (!gl) { gl = null; } return gl; } function resize(canvas, width, height) { canvas.width = width; canvas.height = height; return canvas; } var $_92yes011ujdud7fek = { create: create$3, clone: clone$2, resize: resize, get2dContext: get2dContext, get3dContext: get3dContext }; function getWidth(image) { return image.naturalWidth || image.width; } function getHeight(image) { return image.naturalHeight || image.height; } var $_a084qb11vjdud7fel = { getWidth: getWidth, getHeight: getHeight }; var promise = function () { var Promise = function (fn) { if (typeof this !== 'object') throw new TypeError('Promises must be constructed via new'); if (typeof fn !== 'function') throw new TypeError('not a function'); this._state = null; this._value = null; this._deferreds = []; doResolve(fn, bind(resolve, this), bind(reject, this)); }; var asap = Promise.immediateFn || typeof setImmediate === 'function' && setImmediate || function (fn) { setTimeout(fn, 1); }; function bind(fn, thisArg) { return function () { fn.apply(thisArg, arguments); }; } var isArray = Array.isArray || function (value) { return Object.prototype.toString.call(value) === '[object Array]'; }; function handle(deferred) { var me = this; if (this._state === null) { this._deferreds.push(deferred); return; } asap(function () { var cb = me._state ? deferred.onFulfilled : deferred.onRejected; if (cb === null) { (me._state ? deferred.resolve : deferred.reject)(me._value); return; } var ret; try { ret = cb(me._value); } catch (e) { deferred.reject(e); return; } deferred.resolve(ret); }); } function resolve(newValue) { try { if (newValue === this) throw new TypeError('A promise cannot be resolved with itself.'); if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) { var then = newValue.then; if (typeof then === 'function') { doResolve(bind(then, newValue), bind(resolve, this), bind(reject, this)); return; } } this._state = true; this._value = newValue; finale.call(this); } catch (e) { reject.call(this, e); } } function reject(newValue) { this._state = false; this._value = newValue; finale.call(this); } function finale() { for (var i = 0, len = this._deferreds.length; i < len; i++) { handle.call(this, this._deferreds[i]); } this._deferreds = null; } function Handler(onFulfilled, onRejected, resolve, reject) { this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; this.onRejected = typeof onRejected === 'function' ? onRejected : null; this.resolve = resolve; this.reject = reject; } function doResolve(fn, onFulfilled, onRejected) { var done = false; try { fn(function (value) { if (done) return; done = true; onFulfilled(value); }, function (reason) { if (done) return; done = true; onRejected(reason); }); } catch (ex) { if (done) return; done = true; onRejected(ex); } } Promise.prototype['catch'] = function (onRejected) { return this.then(null, onRejected); }; Promise.prototype.then = function (onFulfilled, onRejected) { var me = this; return new Promise(function (resolve, reject) { handle.call(me, new Handler(onFulfilled, onRejected, resolve, reject)); }); }; Promise.all = function () { var args = Array.prototype.slice.call(arguments.length === 1 && isArray(arguments[0]) ? arguments[0] : arguments); return new Promise(function (resolve, reject) { if (args.length === 0) return resolve([]); var remaining = args.length; function res(i, val) { try { if (val && (typeof val === 'object' || typeof val === 'function')) { var then = val.then; if (typeof then === 'function') { then.call(val, function (val) { res(i, val); }, reject); return; } } args[i] = val; if (--remaining === 0) { resolve(args); } } catch (ex) { reject(ex); } } for (var i = 0; i < args.length; i++) { res(i, args[i]); } }); }; Promise.resolve = function (value) { if (value && typeof value === 'object' && value.constructor === Promise) { return value; } return new Promise(function (resolve) { resolve(value); }); }; Promise.reject = function (value) { return new Promise(function (resolve, reject) { reject(value); }); }; Promise.race = function (values) { return new Promise(function (resolve, reject) { for (var i = 0, len = values.length; i < len; i++) { values[i].then(resolve, reject); } }); }; return Promise; }; var Promise = window.Promise ? window.Promise : promise(); function Blob (parts, properties) { var f = $_3ytg1qxbjdud7elm.getOrDie('Blob'); return new f(parts, properties); } function FileReader () { var f = $_3ytg1qxbjdud7elm.getOrDie('FileReader'); return new f(); } function Uint8Array (arr) { var f = $_3ytg1qxbjdud7elm.getOrDie('Uint8Array'); return new f(arr); } var requestAnimationFrame = function (callback) { var f = $_3ytg1qxbjdud7elm.getOrDie('requestAnimationFrame'); f(callback); }; var atob = function (base64) { var f = $_3ytg1qxbjdud7elm.getOrDie('atob'); return f(base64); }; var $_b8ho8s120jdud7ff0 = { atob: atob, requestAnimationFrame: requestAnimationFrame }; function loadImage(image) { return new Promise(function (resolve) { function loaded() { image.removeEventListener('load', loaded); resolve(image); } if (image.complete) { resolve(image); } else { image.addEventListener('load', loaded); } }); } function imageToBlob(image) { return loadImage(image).then(function (image) { var src = image.src; if (src.indexOf('blob:') === 0) { return anyUriToBlob(src); } if (src.indexOf('data:') === 0) { return dataUriToBlob(src); } return anyUriToBlob(src); }); } function blobToImage(blob) { return new Promise(function (resolve, reject) { var blobUrl = URL.createObjectURL(blob); var image = new Image(); var removeListeners = function () { image.removeEventListener('load', loaded); image.removeEventListener('error', error); }; function loaded() { removeListeners(); resolve(image); } function error() { removeListeners(); reject('Unable to load data of type ' + blob.type + ': ' + blobUrl); } image.addEventListener('load', loaded); image.addEventListener('error', error); image.src = blobUrl; if (image.complete) { loaded(); } }); } function anyUriToBlob(url) { return new Promise(function (resolve, reject) { var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.responseType = 'blob'; xhr.onload = function () { if (this.status == 200) { resolve(this.response); } }; xhr.onerror = function () { var _this = this; var corsError = function () { var obj = new Error('No access to download image'); obj.code = 18; obj.name = 'SecurityError'; return obj; }; var genericError = function () { return new Error('Error ' + _this.status + ' downloading image'); }; reject(this.status === 0 ? corsError() : genericError()); }; xhr.send(); }); } function dataUriToBlobSync(uri) { var data = uri.split(','); var matches = /data:([^;]+)/.exec(data[0]); if (!matches) return Option.none(); var mimetype = matches[1]; var base64 = data[1]; var sliceSize = 1024; var byteCharacters = $_b8ho8s120jdud7ff0.atob(base64); var bytesLength = byteCharacters.length; var slicesCount = Math.ceil(bytesLength / sliceSize); var byteArrays = new Array(slicesCount); for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) { var begin = sliceIndex * sliceSize; var end = Math.min(begin + sliceSize, bytesLength); var bytes = new Array(end - begin); for (var offset = begin, i = 0; offset < end; ++i, ++offset) { bytes[i] = byteCharacters[offset].charCodeAt(0); } byteArrays[sliceIndex] = Uint8Array(bytes); } return Option.some(Blob(byteArrays, { type: mimetype })); } function dataUriToBlob(uri) { return new Promise(function (resolve, reject) { dataUriToBlobSync(uri).fold(function () { reject('uri is not base64: ' + uri); }, resolve); }); } function uriToBlob(url) { if (url.indexOf('blob:') === 0) { return anyUriToBlob(url); } if (url.indexOf('data:') === 0) { return dataUriToBlob(url); } return null; } function canvasToBlob(canvas, type, quality) { type = type || 'image/png'; if (HTMLCanvasElement.prototype.toBlob) { return new Promise(function (resolve) { canvas.toBlob(function (blob) { resolve(blob); }, type, quality); }); } else { return dataUriToBlob(canvas.toDataURL(type, quality)); } } function canvasToDataURL(getCanvas, type, quality) { type = type || 'image/png'; return getCanvas.then(function (canvas) { return canvas.toDataURL(type, quality); }); } function blobToCanvas(blob) { return blobToImage(blob).then(function (image) { revokeImageUrl(image); var context, canvas; canvas = $_92yes011ujdud7fek.create($_a084qb11vjdud7fel.getWidth(image), $_a084qb11vjdud7fel.getHeight(image)); context = $_92yes011ujdud7fek.get2dContext(canvas); context.drawImage(image, 0, 0); return canvas; }); } function blobToDataUri(blob) { return new Promise(function (resolve) { var reader = new FileReader(); reader.onloadend = function () { resolve(reader.result); }; reader.readAsDataURL(blob); }); } function blobToBase64(blob) { return blobToDataUri(blob).then(function (dataUri) { return dataUri.split(',')[1]; }); } function revokeImageUrl(image) { URL.revokeObjectURL(image.src); } var $_fcfj4d11tjdud7fea = { blobToImage: blobToImage, imageToBlob: imageToBlob, blobToDataUri: blobToDataUri, blobToBase64: blobToBase64, dataUriToBlobSync: dataUriToBlobSync, canvasToBlob: canvasToBlob, canvasToDataURL: canvasToDataURL, blobToCanvas: blobToCanvas, uriToBlob: uriToBlob }; var blobToImage$1 = function (image) { return $_fcfj4d11tjdud7fea.blobToImage(image); }; var imageToBlob$1 = function (blob) { return $_fcfj4d11tjdud7fea.imageToBlob(blob); }; var blobToDataUri$1 = function (blob) { return $_fcfj4d11tjdud7fea.blobToDataUri(blob); }; var blobToBase64$1 = function (blob) { return $_fcfj4d11tjdud7fea.blobToBase64(blob); }; var dataUriToBlobSync$1 = function (uri) { return $_fcfj4d11tjdud7fea.dataUriToBlobSync(uri); }; var uriToBlob$1 = function (uri) { return Option.from($_fcfj4d11tjdud7fea.uriToBlob(uri)); }; var $_28p52q11sjdud7fe7 = { blobToImage: blobToImage$1, imageToBlob: imageToBlob$1, blobToDataUri: blobToDataUri$1, blobToBase64: blobToBase64$1, dataUriToBlobSync: dataUriToBlobSync$1, uriToBlob: uriToBlob$1 }; var addImage = function (editor, blob) { $_28p52q11sjdud7fe7.blobToBase64(blob).then(function (base64) { editor.undoManager.transact(function () { var cache = editor.editorUpload.blobCache; var info = cache.create($_3k9wwu10rjdud7f7t.generate('mceu'), blob, base64); cache.add(info); var img = editor.dom.createHTML('img', { src: info.blobUri() }); editor.insertContent(img); }); }); }; var extractBlob = function (simulatedEvent) { var event = simulatedEvent.event(); var files = event.raw().target.files || event.raw().dataTransfer.files; return Option.from(files[0]); }; var sketch$5 = function (editor) { var pickerDom = { tag: 'input', attributes: { accept: 'image/*', type: 'file', title: '' }, styles: { visibility: 'hidden', position: 'absolute' } }; var memPicker = $_81ial811rjdud7fdw.record({ dom: pickerDom, events: $_5xcuyiy4jdud7eur.derive([ $_5xcuyiy4jdud7eur.cutter($_brmbwvwijdud7eiu.click()), $_5xcuyiy4jdud7eur.run($_brmbwvwijdud7eiu.change(), function (picker, simulatedEvent) { extractBlob(simulatedEvent).each(function (blob) { addImage(editor, blob); }); }) ]) }); return Button.sketch({ dom: $_5oi2c7113jdud7fab.dom(''), components: [memPicker.asSpec()], action: function (button) { var picker = memPicker.get(button); picker.element().dom().click(); } }); }; var $_sv17x11qjdud7fdo = { sketch: sketch$5 }; var get$8 = function (element) { return element.dom().textContent; }; var set$5 = function (element, value) { element.dom().textContent = value; }; var $_4cmh4e123jdud7fff = { get: get$8, set: set$5 }; var isNotEmpty = function (val) { return val.length > 0; }; var defaultToEmpty = function (str) { return str === undefined || str === null ? '' : str; }; var noLink = function (editor) { var text = editor.selection.getContent({ format: 'text' }); return { url: '', text: text, title: '', target: '', link: Option.none() }; }; var fromLink = function (link) { var text = $_4cmh4e123jdud7fff.get(link); var url = $_2vghk1xrjdud7ems.get(link, 'href'); var title = $_2vghk1xrjdud7ems.get(link, 'title'); var target = $_2vghk1xrjdud7ems.get(link, 'target'); return { url: defaultToEmpty(url), text: text !== url ? defaultToEmpty(text) : '', title: defaultToEmpty(title), target: defaultToEmpty(target), link: Option.some(link) }; }; var getInfo = function (editor) { return query(editor).fold(function () { return noLink(editor); }, function (link) { return fromLink(link); }); }; var wasSimple = function (link) { var prevHref = $_2vghk1xrjdud7ems.get(link, 'href'); var prevText = $_4cmh4e123jdud7fff.get(link); return prevHref === prevText; }; var getTextToApply = function (link, url, info) { return info.text.filter(isNotEmpty).fold(function () { return wasSimple(link) ? Option.some(url) : Option.none(); }, Option.some); }; var unlinkIfRequired = function (editor, info) { var activeLink = info.link.bind($_9njj9iwjjdud7eix.identity); activeLink.each(function (link) { editor.execCommand('unlink'); }); }; var getAttrs$1 = function (url, info) { var attrs = {}; attrs.href = url; info.title.filter(isNotEmpty).each(function (title) { attrs.title = title; }); info.target.filter(isNotEmpty).each(function (target) { attrs.target = target; }); return attrs; }; var applyInfo = function (editor, info) { info.url.filter(isNotEmpty).fold(function () { unlinkIfRequired(editor, info); }, function (url) { var attrs = getAttrs$1(url, info); var activeLink = info.link.bind($_9njj9iwjjdud7eix.identity); activeLink.fold(function () { var text = info.text.filter(isNotEmpty).getOr(url); editor.insertContent(editor.dom.createHTML('a', attrs, editor.dom.encode(text))); }, function (link) { var text = getTextToApply(link, url, info); $_2vghk1xrjdud7ems.setAll(link, attrs); text.each(function (newText) { $_4cmh4e123jdud7fff.set(link, newText); }); }); }); }; var query = function (editor) { var start = $_eobgtqxfjdud7elu.fromDom(editor.selection.getStart()); return $_a3quyizxjdud7f3e.closest(start, 'a'); }; var $_ee8359122jdud7ff7 = { getInfo: getInfo, applyInfo: applyInfo, query: query }; var platform$1 = $_chh2cvwkjdud7ej0.detect(); var preserve$1 = function (f, editor) { var rng = editor.selection.getRng(); f(); editor.selection.setRng(rng); }; var forAndroid = function (editor, f) { var wrapper = platform$1.os.isAndroid() ? preserve$1 : $_9njj9iwjjdud7eix.apply; wrapper(f, editor); }; var $_bmumk0124jdud7ffg = { forAndroid: forAndroid }; var events$6 = function (name, eventHandlers) { var events = $_5xcuyiy4jdud7eur.derive(eventHandlers); return $_ax1gfoy2jdud7eu7.create({ fields: [$_euqmtby7jdud7ev7.strict('enabled')], name: name, active: { events: $_9njj9iwjjdud7eix.constant(events) } }); }; var config = function (name, eventHandlers) { var me = events$6(name, eventHandlers); return { key: name, value: { config: {}, me: me, configAsRaw: $_9njj9iwjjdud7eix.constant({}), initialConfig: {}, state: $_ax1gfoy2jdud7eu7.noState() } }; }; var $_6jfkt3126jdud7ffy = { events: events$6, config: config }; var getCurrent = function (component, composeConfig, composeState) { return composeConfig.find()(component); }; var $_bwstl9128jdud7fg3 = { getCurrent: getCurrent }; var ComposeSchema = [$_euqmtby7jdud7ev7.strict('find')]; var Composing = $_ax1gfoy2jdud7eu7.create({ fields: ComposeSchema, name: 'composing', apis: $_bwstl9128jdud7fg3 }); var factory$1 = function (detail, spec) { return { uid: detail.uid(), dom: $_73qnwowyjdud7ek9.deepMerge({ tag: 'div', attributes: { role: 'presentation' } }, detail.dom()), components: detail.components(), behaviours: $_c7jpu210ojdud7f7a.get(detail.containerBehaviours()), events: detail.events(), domModification: detail.domModification(), eventOrder: detail.eventOrder() }; }; var Container = $_3inyq310pjdud7f7f.single({ name: 'Container', factory: factory$1, configFields: [ $_euqmtby7jdud7ev7.defaulted('components', []), $_c7jpu210ojdud7f7a.field('containerBehaviours', []), $_euqmtby7jdud7ev7.defaulted('events', {}), $_euqmtby7jdud7ev7.defaulted('domModification', {}), $_euqmtby7jdud7ev7.defaulted('eventOrder', {}) ] }); var factory$2 = function (detail, spec) { return { uid: detail.uid(), dom: detail.dom(), behaviours: $_73qnwowyjdud7ek9.deepMerge($_ax1gfoy2jdud7eu7.derive([ me.config({ store: { mode: 'memory', initialValue: detail.getInitialValue()() } }), Composing.config({ find: Option.some }) ]), $_c7jpu210ojdud7f7a.get(detail.dataBehaviours())), events: $_5xcuyiy4jdud7eur.derive([$_5xcuyiy4jdud7eur.runOnAttached(function (component, simulatedEvent) { me.setValue(component, detail.getInitialValue()()); })]) }; }; var DataField = $_3inyq310pjdud7f7f.single({ name: 'DataField', factory: factory$2, configFields: [ $_euqmtby7jdud7ev7.strict('uid'), $_euqmtby7jdud7ev7.strict('dom'), $_euqmtby7jdud7ev7.strict('getInitialValue'), $_c7jpu210ojdud7f7a.field('dataBehaviours', [ me, Composing ]) ] }); var get$9 = function (element) { return element.dom().value; }; var set$6 = function (element, value) { if (value === undefined) throw new Error('Value.set was undefined'); element.dom().value = value; }; var $_2itxad12ejdud7fgx = { set: set$6, get: get$9 }; var schema$8 = [ $_euqmtby7jdud7ev7.option('data'), $_euqmtby7jdud7ev7.defaulted('inputAttributes', {}), $_euqmtby7jdud7ev7.defaulted('inputStyles', {}), $_euqmtby7jdud7ev7.defaulted('type', 'input'), $_euqmtby7jdud7ev7.defaulted('tag', 'input'), $_euqmtby7jdud7ev7.defaulted('inputClasses', []), $_etkinez6jdud7ezi.onHandler('onSetValue'), $_euqmtby7jdud7ev7.defaulted('styles', {}), $_euqmtby7jdud7ev7.option('placeholder'), $_euqmtby7jdud7ev7.defaulted('eventOrder', {}), $_c7jpu210ojdud7f7a.field('inputBehaviours', [ me, Focusing ]), $_euqmtby7jdud7ev7.defaulted('selectOnFocus', true) ]; var behaviours = function (detail) { return $_73qnwowyjdud7ek9.deepMerge($_ax1gfoy2jdud7eu7.derive([ me.config({ store: { mode: 'manual', initialValue: detail.data().getOr(undefined), getValue: function (input) { return $_2itxad12ejdud7fgx.get(input.element()); }, setValue: function (input, data) { var current = $_2itxad12ejdud7fgx.get(input.element()); if (current !== data) { $_2itxad12ejdud7fgx.set(input.element(), data); } } }, onSetValue: detail.onSetValue() }), Focusing.config({ onFocus: detail.selectOnFocus() === false ? $_9njj9iwjjdud7eix.noop : function (component) { var input = component.element(); var value = $_2itxad12ejdud7fgx.get(input); input.dom().setSelectionRange(0, value.length); } }) ]), $_c7jpu210ojdud7f7a.get(detail.inputBehaviours())); }; var dom$2 = function (detail) { return { tag: detail.tag(), attributes: $_73qnwowyjdud7ek9.deepMerge($_ettibkxsjdud7emz.wrapAll([{ key: 'type', value: detail.type() }].concat(detail.placeholder().map(function (pc) { return { key: 'placeholder', value: pc }; }).toArray())), detail.inputAttributes()), styles: detail.inputStyles(), classes: detail.inputClasses() }; }; var $_93oz4o12djdud7fgo = { schema: $_9njj9iwjjdud7eix.constant(schema$8), behaviours: behaviours, dom: dom$2 }; var factory$3 = function (detail, spec) { return { uid: detail.uid(), dom: $_93oz4o12djdud7fgo.dom(detail), components: [], behaviours: $_93oz4o12djdud7fgo.behaviours(detail), eventOrder: detail.eventOrder() }; }; var Input = $_3inyq310pjdud7f7f.single({ name: 'Input', configFields: $_93oz4o12djdud7fgo.schema(), factory: factory$3 }); var exhibit$3 = function (base, tabConfig) { return $_biiw3tyhjdud7ewz.nu({ attributes: $_ettibkxsjdud7emz.wrapAll([{ key: tabConfig.tabAttr(), value: 'true' }]) }); }; var $_7pfhbw12gjdud7fh0 = { exhibit: exhibit$3 }; var TabstopSchema = [$_euqmtby7jdud7ev7.defaulted('tabAttr', 'data-alloy-tabstop')]; var Tabstopping = $_ax1gfoy2jdud7eu7.create({ fields: TabstopSchema, name: 'tabstopping', active: $_7pfhbw12gjdud7fh0 }); var clearInputBehaviour = 'input-clearing'; var field$2 = function (name, placeholder) { var inputSpec = $_81ial811rjdud7fdw.record(Input.sketch({ placeholder: placeholder, onSetValue: function (input, data) { $_98da6jwgjdud7eil.emit(input, $_brmbwvwijdud7eiu.input()); }, inputBehaviours: $_ax1gfoy2jdud7eu7.derive([ Composing.config({ find: Option.some }), Tabstopping.config({}), Keying.config({ mode: 'execution' }) ]), selectOnFocus: false })); var buttonSpec = $_81ial811rjdud7fdw.record(Button.sketch({ dom: $_5oi2c7113jdud7fab.dom(''), action: function (button) { var input = inputSpec.get(button); me.setValue(input, ''); } })); return { name: name, spec: Container.sketch({ dom: $_5oi2c7113jdud7fab.dom('
'), components: [ inputSpec.asSpec(), buttonSpec.asSpec() ], containerBehaviours: $_ax1gfoy2jdud7eu7.derive([ Toggling.config({ toggleClass: $_5qzh4bzejdud7f0y.resolve('input-container-empty') }), Composing.config({ find: function (comp) { return Option.some(inputSpec.get(comp)); } }), $_6jfkt3126jdud7ffy.config(clearInputBehaviour, [$_5xcuyiy4jdud7eur.run($_brmbwvwijdud7eiu.input(), function (iContainer) { var input = inputSpec.get(iContainer); var val = me.getValue(input); var f = val.length > 0 ? Toggling.off : Toggling.on; f(iContainer); })]) ]) }) }; }; var hidden = function (name) { return { name: name, spec: DataField.sketch({ dom: { tag: 'span', styles: { display: 'none' } }, getInitialValue: function () { return Option.none(); } }) }; }; var $_dqko3j125jdud7ffj = { field: field$2, hidden: hidden }; var nativeDisabled = [ 'input', 'button', 'textarea' ]; var onLoad$5 = function (component, disableConfig, disableState) { if (disableConfig.disabled()) disable(component, disableConfig, disableState); }; var hasNative = function (component) { return $_1g2cevwsjdud7ejp.contains(nativeDisabled, $_50qkdpxkjdud7em6.name(component.element())); }; var nativeIsDisabled = function (component) { return $_2vghk1xrjdud7ems.has(component.element(), 'disabled'); }; var nativeDisable = function (component) { $_2vghk1xrjdud7ems.set(component.element(), 'disabled', 'disabled'); }; var nativeEnable = function (component) { $_2vghk1xrjdud7ems.remove(component.element(), 'disabled'); }; var ariaIsDisabled = function (component) { return $_2vghk1xrjdud7ems.get(component.element(), 'aria-disabled') === 'true'; }; var ariaDisable = function (component) { $_2vghk1xrjdud7ems.set(component.element(), 'aria-disabled', 'true'); }; var ariaEnable = function (component) { $_2vghk1xrjdud7ems.set(component.element(), 'aria-disabled', 'false'); }; var disable = function (component, disableConfig, disableState) { disableConfig.disableClass().each(function (disableClass) { $_1x3ogvynjdud7exn.add(component.element(), disableClass); }); var f = hasNative(component) ? nativeDisable : ariaDisable; f(component); }; var enable = function (component, disableConfig, disableState) { disableConfig.disableClass().each(function (disableClass) { $_1x3ogvynjdud7exn.remove(component.element(), disableClass); }); var f = hasNative(component) ? nativeEnable : ariaEnable; f(component); }; var isDisabled = function (component) { return hasNative(component) ? nativeIsDisabled(component) : ariaIsDisabled(component); }; var $_qq2li12ljdud7fhv = { enable: enable, disable: disable, isDisabled: isDisabled, onLoad: onLoad$5 }; var exhibit$4 = function (base, disableConfig, disableState) { return $_biiw3tyhjdud7ewz.nu({ classes: disableConfig.disabled() ? disableConfig.disableClass().map($_1g2cevwsjdud7ejp.pure).getOr([]) : [] }); }; var events$7 = function (disableConfig, disableState) { return $_5xcuyiy4jdud7eur.derive([ $_5xcuyiy4jdud7eur.abort($_801kkqwhjdud7eiq.execute(), function (component, simulatedEvent) { return $_qq2li12ljdud7fhv.isDisabled(component, disableConfig, disableState); }), $_1t33c1y3jdud7euf.loadEvent(disableConfig, disableState, $_qq2li12ljdud7fhv.onLoad) ]); }; var $_3yxxg12kjdud7fhs = { exhibit: exhibit$4, events: events$7 }; var DisableSchema = [ $_euqmtby7jdud7ev7.defaulted('disabled', false), $_euqmtby7jdud7ev7.option('disableClass') ]; var Disabling = $_ax1gfoy2jdud7eu7.create({ fields: DisableSchema, name: 'disabling', active: $_3yxxg12kjdud7fhs, apis: $_qq2li12ljdud7fhv }); var owner$1 = 'form'; var schema$9 = [$_c7jpu210ojdud7f7a.field('formBehaviours', [me])]; var getPartName = function (name) { return ''; }; var sketch$6 = function (fSpec) { var parts = function () { var record = []; var field = function (name, config) { record.push(name); return $_436kgb10tjdud7f7y.generateOne(owner$1, getPartName(name), config); }; return { field: field, record: function () { return record; } }; }(); var spec = fSpec(parts); var partNames = parts.record(); var fieldParts = $_1g2cevwsjdud7ejp.map(partNames, function (n) { return $_7938qf10vjdud7f8n.required({ name: n, pname: getPartName(n) }); }); return $_dsxxyk10sjdud7f7u.composite(owner$1, schema$9, fieldParts, make, spec); }; var make = function (detail, components, spec) { return $_73qnwowyjdud7ek9.deepMerge({ 'debug.sketcher': { 'Form': spec }, uid: detail.uid(), dom: detail.dom(), components: components, behaviours: $_73qnwowyjdud7ek9.deepMerge($_ax1gfoy2jdud7eu7.derive([me.config({ store: { mode: 'manual', getValue: function (form) { var optPs = $_436kgb10tjdud7f7y.getAllParts(form, detail); return $_2dykn0x0jdud7ekc.map(optPs, function (optPThunk, pName) { return optPThunk().bind(Composing.getCurrent).map(me.getValue); }); }, setValue: function (form, values) { $_2dykn0x0jdud7ekc.each(values, function (newValue, key) { $_436kgb10tjdud7f7y.getPart(form, detail, key).each(function (wrapper) { Composing.getCurrent(wrapper).each(function (field) { me.setValue(field, newValue); }); }); }); } } })]), $_c7jpu210ojdud7f7a.get(detail.formBehaviours())), apis: { getField: function (form, key) { return $_436kgb10tjdud7f7y.getPart(form, detail, key).bind(Composing.getCurrent); } } }); }; var $_1cu1pe12njdud7fib = { getField: $_37ypl510qjdud7f7n.makeApi(function (apis, component, key) { return apis.getField(component, key); }), sketch: sketch$6 }; var revocable = function (doRevoke) { var subject = Cell(Option.none()); var revoke = function () { subject.get().each(doRevoke); }; var clear = function () { revoke(); subject.set(Option.none()); }; var set = function (s) { revoke(); subject.set(Option.some(s)); }; var isSet = function () { return subject.get().isSome(); }; return { clear: clear, isSet: isSet, set: set }; }; var destroyable = function () { return revocable(function (s) { s.destroy(); }); }; var unbindable = function () { return revocable(function (s) { s.unbind(); }); }; var api$2 = function () { var subject = Cell(Option.none()); var revoke = function () { subject.get().each(function (s) { s.destroy(); }); }; var clear = function () { revoke(); subject.set(Option.none()); }; var set = function (s) { revoke(); subject.set(Option.some(s)); }; var run = function (f) { subject.get().each(f); }; var isSet = function () { return subject.get().isSome(); }; return { clear: clear, isSet: isSet, set: set, run: run }; }; var value$3 = function () { var subject = Cell(Option.none()); var clear = function () { subject.set(Option.none()); }; var set = function (s) { subject.set(Option.some(s)); }; var on = function (f) { subject.get().each(f); }; var isSet = function () { return subject.get().isSome(); }; return { clear: clear, set: set, isSet: isSet, on: on }; }; var $_9fhyae12ojdud7fij = { destroyable: destroyable, unbindable: unbindable, api: api$2, value: value$3 }; var SWIPING_LEFT = 1; var SWIPING_RIGHT = -1; var SWIPING_NONE = 0; var init$3 = function (xValue) { return { xValue: xValue, points: [] }; }; var move = function (model, xValue) { if (xValue === model.xValue) { return model; } var currentDirection = xValue - model.xValue > 0 ? SWIPING_LEFT : SWIPING_RIGHT; var newPoint = { direction: currentDirection, xValue: xValue }; var priorPoints = function () { if (model.points.length === 0) { return []; } else { var prev = model.points[model.points.length - 1]; return prev.direction === currentDirection ? model.points.slice(0, model.points.length - 1) : model.points; } }(); return { xValue: xValue, points: priorPoints.concat([newPoint]) }; }; var complete = function (model) { if (model.points.length === 0) { return SWIPING_NONE; } else { var firstDirection = model.points[0].direction; var lastDirection = model.points[model.points.length - 1].direction; return firstDirection === SWIPING_RIGHT && lastDirection === SWIPING_RIGHT ? SWIPING_RIGHT : firstDirection === SWIPING_LEFT && lastDirection === SWIPING_LEFT ? SWIPING_LEFT : SWIPING_NONE; } }; var $_1u15ok12pjdud7fim = { init: init$3, move: move, complete: complete }; var sketch$7 = function (rawSpec) { var navigateEvent = 'navigateEvent'; var wrapperAdhocEvents = 'serializer-wrapper-events'; var formAdhocEvents = 'form-events'; var schema = $_13hkebyejdud7ewm.objOf([ $_euqmtby7jdud7ev7.strict('fields'), $_euqmtby7jdud7ev7.defaulted('maxFieldIndex', rawSpec.fields.length - 1), $_euqmtby7jdud7ev7.strict('onExecute'), $_euqmtby7jdud7ev7.strict('getInitialValue'), $_euqmtby7jdud7ev7.state('state', function () { return { dialogSwipeState: $_9fhyae12ojdud7fij.value(), currentScreen: Cell(0) }; }) ]); var spec = $_13hkebyejdud7ewm.asRawOrDie('SerialisedDialog', schema, rawSpec); var navigationButton = function (direction, directionName, enabled) { return Button.sketch({ dom: $_5oi2c7113jdud7fab.dom(''), action: function (button) { $_98da6jwgjdud7eil.emitWith(button, navigateEvent, { direction: direction }); }, buttonBehaviours: $_ax1gfoy2jdud7eu7.derive([Disabling.config({ disableClass: $_5qzh4bzejdud7f0y.resolve('toolbar-navigation-disabled'), disabled: !enabled })]) }); }; var reposition = function (dialog, message) { $_a3quyizxjdud7f3e.descendant(dialog.element(), '.' + $_5qzh4bzejdud7f0y.resolve('serialised-dialog-chain')).each(function (parent) { $_btgbcy103jdud7f3t.set(parent, 'left', -spec.state.currentScreen.get() * message.width + 'px'); }); }; var navigate = function (dialog, direction) { var screens = $_df6s98zvjdud7f39.descendants(dialog.element(), '.' + $_5qzh4bzejdud7f0y.resolve('serialised-dialog-screen')); $_a3quyizxjdud7f3e.descendant(dialog.element(), '.' + $_5qzh4bzejdud7f0y.resolve('serialised-dialog-chain')).each(function (parent) { if (spec.state.currentScreen.get() + direction >= 0 && spec.state.currentScreen.get() + direction < screens.length) { $_btgbcy103jdud7f3t.getRaw(parent, 'left').each(function (left) { var currentLeft = parseInt(left, 10); var w = $_6chz3611kjdud7fcw.get(screens[0]); $_btgbcy103jdud7f3t.set(parent, 'left', currentLeft - direction * w + 'px'); }); spec.state.currentScreen.set(spec.state.currentScreen.get() + direction); } }); }; var focusInput = function (dialog) { var inputs = $_df6s98zvjdud7f39.descendants(dialog.element(), 'input'); var optInput = Option.from(inputs[spec.state.currentScreen.get()]); optInput.each(function (input) { dialog.getSystem().getByDom(input).each(function (inputComp) { $_98da6jwgjdud7eil.dispatchFocus(dialog, inputComp.element()); }); }); var dotitems = memDots.get(dialog); Highlighting.highlightAt(dotitems, spec.state.currentScreen.get()); }; var resetState = function () { spec.state.currentScreen.set(0); spec.state.dialogSwipeState.clear(); }; var memForm = $_81ial811rjdud7fdw.record($_1cu1pe12njdud7fib.sketch(function (parts) { return { dom: $_5oi2c7113jdud7fab.dom('
'), components: [Container.sketch({ dom: $_5oi2c7113jdud7fab.dom('
'), components: $_1g2cevwsjdud7ejp.map(spec.fields, function (field, i) { return i <= spec.maxFieldIndex ? Container.sketch({ dom: $_5oi2c7113jdud7fab.dom('
'), components: $_1g2cevwsjdud7ejp.flatten([ [navigationButton(-1, 'previous', i > 0)], [parts.field(field.name, field.spec)], [navigationButton(+1, 'next', i < spec.maxFieldIndex)] ]) }) : parts.field(field.name, field.spec); }) })], formBehaviours: $_ax1gfoy2jdud7eu7.derive([ $_nw25bzdjdud7f0v.orientation(function (dialog, message) { reposition(dialog, message); }), Keying.config({ mode: 'special', focusIn: function (dialog) { focusInput(dialog); }, onTab: function (dialog) { navigate(dialog, +1); return Option.some(true); }, onShiftTab: function (dialog) { navigate(dialog, -1); return Option.some(true); } }), $_6jfkt3126jdud7ffy.config(formAdhocEvents, [ $_5xcuyiy4jdud7eur.runOnAttached(function (dialog, simulatedEvent) { resetState(); var dotitems = memDots.get(dialog); Highlighting.highlightFirst(dotitems); spec.getInitialValue(dialog).each(function (v) { me.setValue(dialog, v); }); }), $_5xcuyiy4jdud7eur.runOnExecute(spec.onExecute), $_5xcuyiy4jdud7eur.run($_brmbwvwijdud7eiu.transitionend(), function (dialog, simulatedEvent) { if (simulatedEvent.event().raw().propertyName === 'left') { focusInput(dialog); } }), $_5xcuyiy4jdud7eur.run(navigateEvent, function (dialog, simulatedEvent) { var direction = simulatedEvent.event().direction(); navigate(dialog, direction); }) ]) ]) }; })); var memDots = $_81ial811rjdud7fdw.record({ dom: $_5oi2c7113jdud7fab.dom('
'), behaviours: $_ax1gfoy2jdud7eu7.derive([Highlighting.config({ highlightClass: $_5qzh4bzejdud7f0y.resolve('dot-active'), itemClass: $_5qzh4bzejdud7f0y.resolve('dot-item') })]), components: $_1g2cevwsjdud7ejp.bind(spec.fields, function (_f, i) { return i <= spec.maxFieldIndex ? [$_5oi2c7113jdud7fab.spec('
')] : []; }) }); return { dom: $_5oi2c7113jdud7fab.dom('
'), components: [ memForm.asSpec(), memDots.asSpec() ], behaviours: $_ax1gfoy2jdud7eu7.derive([ Keying.config({ mode: 'special', focusIn: function (wrapper) { var form = memForm.get(wrapper); Keying.focusIn(form); } }), $_6jfkt3126jdud7ffy.config(wrapperAdhocEvents, [ $_5xcuyiy4jdud7eur.run($_brmbwvwijdud7eiu.touchstart(), function (wrapper, simulatedEvent) { spec.state.dialogSwipeState.set($_1u15ok12pjdud7fim.init(simulatedEvent.event().raw().touches[0].clientX)); }), $_5xcuyiy4jdud7eur.run($_brmbwvwijdud7eiu.touchmove(), function (wrapper, simulatedEvent) { spec.state.dialogSwipeState.on(function (state) { simulatedEvent.event().prevent(); spec.state.dialogSwipeState.set($_1u15ok12pjdud7fim.move(state, simulatedEvent.event().raw().touches[0].clientX)); }); }), $_5xcuyiy4jdud7eur.run($_brmbwvwijdud7eiu.touchend(), function (wrapper) { spec.state.dialogSwipeState.on(function (state) { var dialog = memForm.get(wrapper); var direction = -1 * $_1u15ok12pjdud7fim.complete(state); navigate(dialog, direction); }); }) ]) ]) }; }; var $_6vo93712ijdud7fh6 = { sketch: sketch$7 }; var getGroups = $_2nf0bewljdud7ej2.cached(function (realm, editor) { return [{ label: 'the link group', items: [$_6vo93712ijdud7fh6.sketch({ fields: [ $_dqko3j125jdud7ffj.field('url', 'Type or paste URL'), $_dqko3j125jdud7ffj.field('text', 'Link text'), $_dqko3j125jdud7ffj.field('title', 'Link title'), $_dqko3j125jdud7ffj.field('target', 'Link target'), $_dqko3j125jdud7ffj.hidden('link') ], maxFieldIndex: [ 'url', 'text', 'title', 'target' ].length - 1, getInitialValue: function () { return Option.some($_ee8359122jdud7ff7.getInfo(editor)); }, onExecute: function (dialog) { var info = me.getValue(dialog); $_ee8359122jdud7ff7.applyInfo(editor, info); realm.restoreToolbar(); editor.focus(); } })] }]; }); var sketch$8 = function (realm, editor) { return $_d0l7buzfjdud7f11.forToolbarStateAction(editor, 'link', 'link', function () { var groups = getGroups(realm, editor); realm.setContextToolbar(groups); $_bmumk0124jdud7ffg.forAndroid(editor, function () { realm.focusToolbar(); }); $_ee8359122jdud7ff7.query(editor).each(function (link) { editor.selection.select(link.dom()); }); }); }; var $_20tbzu121jdud7ff2 = { sketch: sketch$8 }; var DefaultStyleFormats = [ { title: 'Headings', items: [ { title: 'Heading 1', format: 'h1' }, { title: 'Heading 2', format: 'h2' }, { title: 'Heading 3', format: 'h3' }, { title: 'Heading 4', format: 'h4' }, { title: 'Heading 5', format: 'h5' }, { title: 'Heading 6', format: 'h6' } ] }, { title: 'Inline', items: [ { title: 'Bold', icon: 'bold', format: 'bold' }, { title: 'Italic', icon: 'italic', format: 'italic' }, { title: 'Underline', icon: 'underline', format: 'underline' }, { title: 'Strikethrough', icon: 'strikethrough', format: 'strikethrough' }, { title: 'Superscript', icon: 'superscript', format: 'superscript' }, { title: 'Subscript', icon: 'subscript', format: 'subscript' }, { title: 'Code', icon: 'code', format: 'code' } ] }, { title: 'Blocks', items: [ { title: 'Paragraph', format: 'p' }, { title: 'Blockquote', format: 'blockquote' }, { title: 'Div', format: 'div' }, { title: 'Pre', format: 'pre' } ] }, { title: 'Alignment', items: [ { title: 'Left', icon: 'alignleft', format: 'alignleft' }, { title: 'Center', icon: 'aligncenter', format: 'aligncenter' }, { title: 'Right', icon: 'alignright', format: 'alignright' }, { title: 'Justify', icon: 'alignjustify', format: 'alignjustify' } ] } ]; var generateFrom = function (spec, all) { var schema = $_1g2cevwsjdud7ejp.map(all, function (a) { return $_euqmtby7jdud7ev7.field(a.name(), a.name(), $_6rbn18y8jdud7evc.asOption(), $_13hkebyejdud7ewm.objOf([ $_euqmtby7jdud7ev7.strict('config'), $_euqmtby7jdud7ev7.defaulted('state', $_71cmtkyjjdud7exe) ])); }); var validated = $_13hkebyejdud7ewm.asStruct('component.behaviours', $_13hkebyejdud7ewm.objOf(schema), spec.behaviours).fold(function (errInfo) { throw new Error($_13hkebyejdud7ewm.formatError(errInfo) + '\nComplete spec:\n' + $_crnojnydjdud7ewk.stringify(spec, null, 2)); }, $_9njj9iwjjdud7eix.identity); return { list: all, data: $_2dykn0x0jdud7ekc.map(validated, function (blobOptionThunk) { var blobOption = blobOptionThunk(); return $_9njj9iwjjdud7eix.constant(blobOption.map(function (blob) { return { config: blob.config(), state: blob.state().init(blob.config()) }; })); }) }; }; var getBehaviours = function (bData) { return bData.list; }; var getData = function (bData) { return bData.data; }; var $_9q6ztw12wjdud7fkm = { generateFrom: generateFrom, getBehaviours: getBehaviours, getData: getData }; var getBehaviours$1 = function (spec) { var behaviours = $_ettibkxsjdud7emz.readOptFrom(spec, 'behaviours').getOr({}); var keys = $_1g2cevwsjdud7ejp.filter($_2dykn0x0jdud7ekc.keys(behaviours), function (k) { return behaviours[k] !== undefined; }); return $_1g2cevwsjdud7ejp.map(keys, function (k) { return spec.behaviours[k].me; }); }; var generateFrom$1 = function (spec, all) { return $_9q6ztw12wjdud7fkm.generateFrom(spec, all); }; var generate$4 = function (spec) { var all = getBehaviours$1(spec); return generateFrom$1(spec, all); }; var $_9vg7um12vjdud7fkh = { generate: generate$4, generateFrom: generateFrom$1 }; var ComponentApi = $_cmsqfeyljdud7exh.exactly([ 'getSystem', 'config', 'hasConfigured', 'spec', 'connect', 'disconnect', 'element', 'syncComponents', 'readState', 'components', 'events' ]); var SystemApi = $_cmsqfeyljdud7exh.exactly([ 'debugInfo', 'triggerFocus', 'triggerEvent', 'triggerEscape', 'addToWorld', 'removeFromWorld', 'addToGui', 'removeFromGui', 'build', 'getByUid', 'getByDom', 'broadcast', 'broadcastOn' ]); function NoContextApi (getComp) { var fail = function (event) { return function () { throw new Error('The component must be in a context to send: ' + event + '\n' + $_d3f8kuxmjdud7emi.element(getComp().element()) + ' is not in context.'); }; }; return SystemApi({ debugInfo: $_9njj9iwjjdud7eix.constant('fake'), triggerEvent: fail('triggerEvent'), triggerFocus: fail('triggerFocus'), triggerEscape: fail('triggerEscape'), build: fail('build'), addToWorld: fail('addToWorld'), removeFromWorld: fail('removeFromWorld'), addToGui: fail('addToGui'), removeFromGui: fail('removeFromGui'), getByUid: fail('getByUid'), getByDom: fail('getByDom'), broadcast: fail('broadcast'), broadcastOn: fail('broadcastOn') }); } var byInnerKey = function (data, tuple) { var r = {}; $_2dykn0x0jdud7ekc.each(data, function (detail, key) { $_2dykn0x0jdud7ekc.each(detail, function (value, indexKey) { var chain = $_ettibkxsjdud7emz.readOr(indexKey, [])(r); r[indexKey] = chain.concat([tuple(key, value)]); }); }); return r; }; var $_5gdyb2131jdud7fle = { byInnerKey: byInnerKey }; var behaviourDom = function (name, modification) { return { name: $_9njj9iwjjdud7eix.constant(name), modification: modification }; }; var concat = function (chain, aspect) { var values = $_1g2cevwsjdud7ejp.bind(chain, function (c) { return c.modification().getOr([]); }); return Result.value($_ettibkxsjdud7emz.wrap(aspect, values)); }; var onlyOne = function (chain, aspect, order) { if (chain.length > 1) return Result.error('Multiple behaviours have tried to change DOM "' + aspect + '". The guilty behaviours are: ' + $_crnojnydjdud7ewk.stringify($_1g2cevwsjdud7ejp.map(chain, function (b) { return b.name(); })) + '. At this stage, this ' + 'is not supported. Future releases might provide strategies for resolving this.'); else if (chain.length === 0) return Result.value({}); else return Result.value(chain[0].modification().fold(function () { return {}; }, function (m) { return $_ettibkxsjdud7emz.wrap(aspect, m); })); }; var duplicate = function (aspect, k, obj, behaviours) { return Result.error('Mulitple behaviours have tried to change the _' + k + '_ "' + aspect + '"' + '. The guilty behaviours are: ' + $_crnojnydjdud7ewk.stringify($_1g2cevwsjdud7ejp.bind(behaviours, function (b) { return b.modification().getOr({})[k] !== undefined ? [b.name()] : []; }), null, 2) + '. This is not currently supported.'); }; var safeMerge = function (chain, aspect) { var y = $_1g2cevwsjdud7ejp.foldl(chain, function (acc, c) { var obj = c.modification().getOr({}); return acc.bind(function (accRest) { var parts = $_2dykn0x0jdud7ekc.mapToArray(obj, function (v, k) { return accRest[k] !== undefined ? duplicate(aspect, k, obj, chain) : Result.value($_ettibkxsjdud7emz.wrap(k, v)); }); return $_ettibkxsjdud7emz.consolidate(parts, accRest); }); }, Result.value({})); return y.map(function (yValue) { return $_ettibkxsjdud7emz.wrap(aspect, yValue); }); }; var mergeTypes = { classes: concat, attributes: safeMerge, styles: safeMerge, domChildren: onlyOne, defChildren: onlyOne, innerHtml: onlyOne, value: onlyOne }; var combine$1 = function (info, baseMod, behaviours, base) { var behaviourDoms = $_73qnwowyjdud7ek9.deepMerge({}, baseMod); $_1g2cevwsjdud7ejp.each(behaviours, function (behaviour) { behaviourDoms[behaviour.name()] = behaviour.exhibit(info, base); }); var byAspect = $_5gdyb2131jdud7fle.byInnerKey(behaviourDoms, behaviourDom); var usedAspect = $_2dykn0x0jdud7ekc.map(byAspect, function (values, aspect) { return $_1g2cevwsjdud7ejp.bind(values, function (value) { return value.modification().fold(function () { return []; }, function (v) { return [value]; }); }); }); var modifications = $_2dykn0x0jdud7ekc.mapToArray(usedAspect, function (values, aspect) { return $_ettibkxsjdud7emz.readOptFrom(mergeTypes, aspect).fold(function () { return Result.error('Unknown field type: ' + aspect); }, function (merger) { return merger(values, aspect); }); }); var consolidated = $_ettibkxsjdud7emz.consolidate(modifications, {}); return consolidated.map($_biiw3tyhjdud7ewz.nu); }; var $_57i0zb130jdud7fl4 = { combine: combine$1 }; var sortKeys = function (label, keyName, array, order) { var sliced = array.slice(0); try { var sorted = sliced.sort(function (a, b) { var aKey = a[keyName](); var bKey = b[keyName](); var aIndex = order.indexOf(aKey); var bIndex = order.indexOf(bKey); if (aIndex === -1) throw new Error('The ordering for ' + label + ' does not have an entry for ' + aKey + '.\nOrder specified: ' + $_crnojnydjdud7ewk.stringify(order, null, 2)); if (bIndex === -1) throw new Error('The ordering for ' + label + ' does not have an entry for ' + bKey + '.\nOrder specified: ' + $_crnojnydjdud7ewk.stringify(order, null, 2)); if (aIndex < bIndex) return -1; else if (bIndex < aIndex) return 1; else return 0; }); return Result.value(sorted); } catch (err) { return Result.error([err]); } }; var $_1ppdst133jdud7flt = { sortKeys: sortKeys }; var nu$7 = function (handler, purpose) { return { handler: handler, purpose: $_9njj9iwjjdud7eix.constant(purpose) }; }; var curryArgs = function (descHandler, extraArgs) { return { handler: $_9njj9iwjjdud7eix.curry.apply(undefined, [descHandler.handler].concat(extraArgs)), purpose: descHandler.purpose }; }; var getHandler = function (descHandler) { return descHandler.handler; }; var $_6lldf5134jdud7flx = { nu: nu$7, curryArgs: curryArgs, getHandler: getHandler }; var behaviourTuple = function (name, handler) { return { name: $_9njj9iwjjdud7eix.constant(name), handler: $_9njj9iwjjdud7eix.constant(handler) }; }; var nameToHandlers = function (behaviours, info) { var r = {}; $_1g2cevwsjdud7ejp.each(behaviours, function (behaviour) { r[behaviour.name()] = behaviour.handlers(info); }); return r; }; var groupByEvents = function (info, behaviours, base) { var behaviourEvents = $_73qnwowyjdud7ek9.deepMerge(base, nameToHandlers(behaviours, info)); return $_5gdyb2131jdud7fle.byInnerKey(behaviourEvents, behaviourTuple); }; var combine$2 = function (info, eventOrder, behaviours, base) { var byEventName = groupByEvents(info, behaviours, base); return combineGroups(byEventName, eventOrder); }; var assemble = function (rawHandler) { var handler = $_6jq2azy6jdud7eux.read(rawHandler); return function (component, simulatedEvent) { var args = Array.prototype.slice.call(arguments, 0); if (handler.abort.apply(undefined, args)) { simulatedEvent.stop(); } else if (handler.can.apply(undefined, args)) { handler.run.apply(undefined, args); } }; }; var missingOrderError = function (eventName, tuples) { return Result.error(['The event (' + eventName + ') has more than one behaviour that listens to it.\nWhen this occurs, you must ' + 'specify an event ordering for the behaviours in your spec (e.g. [ "listing", "toggling" ]).\nThe behaviours that ' + 'can trigger it are: ' + $_crnojnydjdud7ewk.stringify($_1g2cevwsjdud7ejp.map(tuples, function (c) { return c.name(); }), null, 2)]); }; var fuse$1 = function (tuples, eventOrder, eventName) { var order = eventOrder[eventName]; if (!order) return missingOrderError(eventName, tuples); else return $_1ppdst133jdud7flt.sortKeys('Event: ' + eventName, 'name', tuples, order).map(function (sortedTuples) { var handlers = $_1g2cevwsjdud7ejp.map(sortedTuples, function (tuple) { return tuple.handler(); }); return $_6jq2azy6jdud7eux.fuse(handlers); }); }; var combineGroups = function (byEventName, eventOrder) { var r = $_2dykn0x0jdud7ekc.mapToArray(byEventName, function (tuples, eventName) { var combined = tuples.length === 1 ? Result.value(tuples[0].handler()) : fuse$1(tuples, eventOrder, eventName); return combined.map(function (handler) { var assembled = assemble(handler); var purpose = tuples.length > 1 ? $_1g2cevwsjdud7ejp.filter(eventOrder, function (o) { return $_1g2cevwsjdud7ejp.contains(tuples, function (t) { return t.name() === o; }); }).join(' > ') : tuples[0].name(); return $_ettibkxsjdud7emz.wrap(eventName, $_6lldf5134jdud7flx.nu(assembled, purpose)); }); }); return $_ettibkxsjdud7emz.consolidate(r, {}); }; var $_e28r99132jdud7flj = { combine: combine$2 }; var toInfo = function (spec) { return $_13hkebyejdud7ewm.asStruct('custom.definition', $_13hkebyejdud7ewm.objOfOnly([ $_euqmtby7jdud7ev7.field('dom', 'dom', $_6rbn18y8jdud7evc.strict(), $_13hkebyejdud7ewm.objOfOnly([ $_euqmtby7jdud7ev7.strict('tag'), $_euqmtby7jdud7ev7.defaulted('styles', {}), $_euqmtby7jdud7ev7.defaulted('classes', []), $_euqmtby7jdud7ev7.defaulted('attributes', {}), $_euqmtby7jdud7ev7.option('value'), $_euqmtby7jdud7ev7.option('innerHtml') ])), $_euqmtby7jdud7ev7.strict('components'), $_euqmtby7jdud7ev7.strict('uid'), $_euqmtby7jdud7ev7.defaulted('events', {}), $_euqmtby7jdud7ev7.defaulted('apis', $_9njj9iwjjdud7eix.constant({})), $_euqmtby7jdud7ev7.field('eventOrder', 'eventOrder', $_6rbn18y8jdud7evc.mergeWith({ 'alloy.execute': [ 'disabling', 'alloy.base.behaviour', 'toggling' ], 'alloy.focus': [ 'alloy.base.behaviour', 'focusing', 'keying' ], 'alloy.system.init': [ 'alloy.base.behaviour', 'disabling', 'toggling', 'representing' ], 'input': [ 'alloy.base.behaviour', 'representing', 'streaming', 'invalidating' ], 'alloy.system.detached': [ 'alloy.base.behaviour', 'representing' ] }), $_13hkebyejdud7ewm.anyValue()), $_euqmtby7jdud7ev7.option('domModification'), $_etkinez6jdud7ezi.snapshot('originalSpec'), $_euqmtby7jdud7ev7.defaulted('debug.sketcher', 'unknown') ]), spec); }; var getUid = function (info) { return $_ettibkxsjdud7emz.wrap($_d587rf10yjdud7f9j.idAttr(), info.uid()); }; var toDefinition = function (info) { var base = { tag: info.dom().tag(), classes: info.dom().classes(), attributes: $_73qnwowyjdud7ek9.deepMerge(getUid(info), info.dom().attributes()), styles: info.dom().styles(), domChildren: $_1g2cevwsjdud7ejp.map(info.components(), function (comp) { return comp.element(); }) }; return $_cfxlyyyijdud7ex9.nu($_73qnwowyjdud7ek9.deepMerge(base, info.dom().innerHtml().map(function (h) { return $_ettibkxsjdud7emz.wrap('innerHtml', h); }).getOr({}), info.dom().value().map(function (h) { return $_ettibkxsjdud7emz.wrap('value', h); }).getOr({}))); }; var toModification = function (info) { return info.domModification().fold(function () { return $_biiw3tyhjdud7ewz.nu({}); }, $_biiw3tyhjdud7ewz.nu); }; var toApis = function (info) { return info.apis(); }; var toEvents = function (info) { return info.events(); }; var $_derq1l135jdud7fm6 = { toInfo: toInfo, toDefinition: toDefinition, toModification: toModification, toApis: toApis, toEvents: toEvents }; var add$3 = function (element, classes) { $_1g2cevwsjdud7ejp.each(classes, function (x) { $_1x3ogvynjdud7exn.add(element, x); }); }; var remove$6 = function (element, classes) { $_1g2cevwsjdud7ejp.each(classes, function (x) { $_1x3ogvynjdud7exn.remove(element, x); }); }; var toggle$3 = function (element, classes) { $_1g2cevwsjdud7ejp.each(classes, function (x) { $_1x3ogvynjdud7exn.toggle(element, x); }); }; var hasAll = function (element, classes) { return $_1g2cevwsjdud7ejp.forall(classes, function (clazz) { return $_1x3ogvynjdud7exn.has(element, clazz); }); }; var hasAny = function (element, classes) { return $_1g2cevwsjdud7ejp.exists(classes, function (clazz) { return $_1x3ogvynjdud7exn.has(element, clazz); }); }; var getNative = function (element) { var classList = element.dom().classList; var r = new Array(classList.length); for (var i = 0; i < classList.length; i++) { r[i] = classList.item(i); } return r; }; var get$10 = function (element) { return $_fxl75vypjdud7exy.supports(element) ? getNative(element) : $_fxl75vypjdud7exy.get(element); }; var $_af5dkc137jdud7fms = { add: add$3, remove: remove$6, toggle: toggle$3, hasAll: hasAll, hasAny: hasAny, get: get$10 }; var getChildren = function (definition) { if (definition.domChildren().isSome() && definition.defChildren().isSome()) { throw new Error('Cannot specify children and child specs! Must be one or the other.\nDef: ' + $_cfxlyyyijdud7ex9.defToStr(definition)); } else { return definition.domChildren().fold(function () { var defChildren = definition.defChildren().getOr([]); return $_1g2cevwsjdud7ejp.map(defChildren, renderDef); }, function (domChildren) { return domChildren; }); } }; var renderToDom = function (definition) { var subject = $_eobgtqxfjdud7elu.fromTag(definition.tag()); $_2vghk1xrjdud7ems.setAll(subject, definition.attributes().getOr({})); $_af5dkc137jdud7fms.add(subject, definition.classes().getOr([])); $_btgbcy103jdud7f3t.setAll(subject, definition.styles().getOr({})); $_1kv7pfxojdud7emm.set(subject, definition.innerHtml().getOr('')); var children = getChildren(definition); $_alr2vxxijdud7em1.append(subject, children); definition.value().each(function (value) { $_2itxad12ejdud7fgx.set(subject, value); }); return subject; }; var renderDef = function (spec) { var definition = $_cfxlyyyijdud7ex9.nu(spec); return renderToDom(definition); }; var $_46rnsn136jdud7fmh = { renderToDom: renderToDom }; var build = function (spec) { var getMe = function () { return me; }; var systemApi = Cell(NoContextApi(getMe)); var info = $_13hkebyejdud7ewm.getOrDie($_derq1l135jdud7fm6.toInfo($_73qnwowyjdud7ek9.deepMerge(spec, { behaviours: undefined }))); var bBlob = $_9vg7um12vjdud7fkh.generate(spec); var bList = $_9q6ztw12wjdud7fkm.getBehaviours(bBlob); var bData = $_9q6ztw12wjdud7fkm.getData(bBlob); var definition = $_derq1l135jdud7fm6.toDefinition(info); var baseModification = { 'alloy.base.modification': $_derq1l135jdud7fm6.toModification(info) }; var modification = $_57i0zb130jdud7fl4.combine(bData, baseModification, bList, definition).getOrDie(); var modDefinition = $_biiw3tyhjdud7ewz.merge(definition, modification); var item = $_46rnsn136jdud7fmh.renderToDom(modDefinition); var baseEvents = { 'alloy.base.behaviour': $_derq1l135jdud7fm6.toEvents(info) }; var events = $_e28r99132jdud7flj.combine(bData, info.eventOrder(), bList, baseEvents).getOrDie(); var subcomponents = Cell(info.components()); var connect = function (newApi) { systemApi.set(newApi); }; var disconnect = function () { systemApi.set(NoContextApi(getMe)); }; var syncComponents = function () { var children = $_dekwe2x3jdud7ekr.children(item); var subs = $_1g2cevwsjdud7ejp.bind(children, function (child) { return systemApi.get().getByDom(child).fold(function () { return []; }, function (c) { return [c]; }); }); subcomponents.set(subs); }; var config = function (behaviour) { if (behaviour === $_37ypl510qjdud7f7n.apiConfig()) return info.apis(); var b = bData; var f = $_9rljuwzjdud7ekb.isFunction(b[behaviour.name()]) ? b[behaviour.name()] : function () { throw new Error('Could not find ' + behaviour.name() + ' in ' + $_crnojnydjdud7ewk.stringify(spec, null, 2)); }; return f(); }; var hasConfigured = function (behaviour) { return $_9rljuwzjdud7ekb.isFunction(bData[behaviour.name()]); }; var readState = function (behaviourName) { return bData[behaviourName]().map(function (b) { return b.state.readState(); }).getOr('not enabled'); }; var me = ComponentApi({ getSystem: systemApi.get, config: config, hasConfigured: hasConfigured, spec: $_9njj9iwjjdud7eix.constant(spec), readState: readState, connect: connect, disconnect: disconnect, element: $_9njj9iwjjdud7eix.constant(item), syncComponents: syncComponents, components: subcomponents.get, events: $_9njj9iwjjdud7eix.constant(events) }); return me; }; var $_4n786712ujdud7fjz = { build: build }; var isRecursive = function (component, originator, target) { return $_f1y1rtx9jdud7el7.eq(originator, component.element()) && !$_f1y1rtx9jdud7el7.eq(originator, target); }; var $_5qg91m138jdud7fmw = { events: $_5xcuyiy4jdud7eur.derive([$_5xcuyiy4jdud7eur.can($_801kkqwhjdud7eiq.focus(), function (component, simulatedEvent) { var originator = simulatedEvent.event().originator(); var target = simulatedEvent.event().target(); if (isRecursive(component, originator, target)) { console.warn($_801kkqwhjdud7eiq.focus() + ' did not get interpreted by the desired target. ' + '\nOriginator: ' + $_d3f8kuxmjdud7emi.element(originator) + '\nTarget: ' + $_d3f8kuxmjdud7emi.element(target) + '\nCheck the ' + $_801kkqwhjdud7eiq.focus() + ' event handlers'); return false; } else { return true; } })]) }; var make$1 = function (spec) { return spec; }; var $_5ltf8m139jdud7fmz = { make: make$1 }; var buildSubcomponents = function (spec) { var components = $_ettibkxsjdud7emz.readOr('components', [])(spec); return $_1g2cevwsjdud7ejp.map(components, build$1); }; var buildFromSpec = function (userSpec) { var spec = $_5ltf8m139jdud7fmz.make(userSpec); var components = buildSubcomponents(spec); var completeSpec = $_73qnwowyjdud7ek9.deepMerge($_5qg91m138jdud7fmw, spec, $_ettibkxsjdud7emz.wrap('components', components)); return Result.value($_4n786712ujdud7fjz.build(completeSpec)); }; var text = function (textContent) { var element = $_eobgtqxfjdud7elu.fromText(textContent); return external({ element: element }); }; var external = function (spec) { var extSpec = $_13hkebyejdud7ewm.asStructOrDie('external.component', $_13hkebyejdud7ewm.objOfOnly([ $_euqmtby7jdud7ev7.strict('element'), $_euqmtby7jdud7ev7.option('uid') ]), spec); var systemApi = Cell(NoContextApi()); var connect = function (newApi) { systemApi.set(newApi); }; var disconnect = function () { systemApi.set(NoContextApi(function () { return me; })); }; extSpec.uid().each(function (uid) { $_4mrseh10xjdud7f9b.writeOnly(extSpec.element(), uid); }); var me = ComponentApi({ getSystem: systemApi.get, config: Option.none, hasConfigured: $_9njj9iwjjdud7eix.constant(false), connect: connect, disconnect: disconnect, element: $_9njj9iwjjdud7eix.constant(extSpec.element()), spec: $_9njj9iwjjdud7eix.constant(spec), readState: $_9njj9iwjjdud7eix.constant('No state'), syncComponents: $_9njj9iwjjdud7eix.noop, components: $_9njj9iwjjdud7eix.constant([]), events: $_9njj9iwjjdud7eix.constant({}) }); return $_37ypl510qjdud7f7n.premade(me); }; var build$1 = function (rawUserSpec) { return $_37ypl510qjdud7f7n.getPremade(rawUserSpec).fold(function () { var userSpecWithUid = $_73qnwowyjdud7ek9.deepMerge({ uid: $_4mrseh10xjdud7f9b.generate('') }, rawUserSpec); return buildFromSpec(userSpecWithUid).getOrDie(); }, function (prebuilt) { return prebuilt; }); }; var $_ap2ej712tjdud7fjl = { build: build$1, premade: $_37ypl510qjdud7f7n.premade, external: external, text: text }; var hoverEvent = 'alloy.item-hover'; var focusEvent = 'alloy.item-focus'; var onHover = function (item) { if ($_25580rytjdud7ey7.search(item.element()).isNone() || Focusing.isFocused(item)) { if (!Focusing.isFocused(item)) Focusing.focus(item); $_98da6jwgjdud7eil.emitWith(item, hoverEvent, { item: item }); } }; var onFocus = function (item) { $_98da6jwgjdud7eil.emitWith(item, focusEvent, { item: item }); }; var $_8ru1bo13djdud7fnf = { hover: $_9njj9iwjjdud7eix.constant(hoverEvent), focus: $_9njj9iwjjdud7eix.constant(focusEvent), onHover: onHover, onFocus: onFocus }; var builder = function (info) { return { dom: $_73qnwowyjdud7ek9.deepMerge(info.dom(), { attributes: { role: info.toggling().isSome() ? 'menuitemcheckbox' : 'menuitem' } }), behaviours: $_73qnwowyjdud7ek9.deepMerge($_ax1gfoy2jdud7eu7.derive([ info.toggling().fold(Toggling.revoke, function (tConfig) { return Toggling.config($_73qnwowyjdud7ek9.deepMerge({ aria: { mode: 'checked' } }, tConfig)); }), Focusing.config({ ignore: info.ignoreFocus(), onFocus: function (component) { $_8ru1bo13djdud7fnf.onFocus(component); } }), Keying.config({ mode: 'execution' }), me.config({ store: { mode: 'memory', initialValue: info.data() } }) ]), info.itemBehaviours()), events: $_5xcuyiy4jdud7eur.derive([ $_5xcuyiy4jdud7eur.runWithTarget($_801kkqwhjdud7eiq.tapOrClick(), $_98da6jwgjdud7eil.emitExecute), $_5xcuyiy4jdud7eur.cutter($_brmbwvwijdud7eiu.mousedown()), $_5xcuyiy4jdud7eur.run($_brmbwvwijdud7eiu.mouseover(), $_8ru1bo13djdud7fnf.onHover), $_5xcuyiy4jdud7eur.run($_801kkqwhjdud7eiq.focusItem(), Focusing.focus) ]), components: info.components(), domModification: info.domModification() }; }; var schema$10 = [ $_euqmtby7jdud7ev7.strict('data'), $_euqmtby7jdud7ev7.strict('components'), $_euqmtby7jdud7ev7.strict('dom'), $_euqmtby7jdud7ev7.option('toggling'), $_euqmtby7jdud7ev7.defaulted('itemBehaviours', {}), $_euqmtby7jdud7ev7.defaulted('ignoreFocus', false), $_euqmtby7jdud7ev7.defaulted('domModification', {}), $_etkinez6jdud7ezi.output('builder', builder) ]; var builder$1 = function (detail) { return { dom: detail.dom(), components: detail.components(), events: $_5xcuyiy4jdud7eur.derive([$_5xcuyiy4jdud7eur.stopper($_801kkqwhjdud7eiq.focusItem())]) }; }; var schema$11 = [ $_euqmtby7jdud7ev7.strict('dom'), $_euqmtby7jdud7ev7.strict('components'), $_etkinez6jdud7ezi.output('builder', builder$1) ]; var owner$2 = 'item-widget'; var partTypes = [$_7938qf10vjdud7f8n.required({ name: 'widget', overrides: function (detail) { return { behaviours: $_ax1gfoy2jdud7eu7.derive([me.config({ store: { mode: 'manual', getValue: function (component) { return detail.data(); }, setValue: function () { } } })]) }; } })]; var $_bqteuv13gjdud7fny = { owner: $_9njj9iwjjdud7eix.constant(owner$2), parts: $_9njj9iwjjdud7eix.constant(partTypes) }; var builder$2 = function (info) { var subs = $_436kgb10tjdud7f7y.substitutes($_bqteuv13gjdud7fny.owner(), info, $_bqteuv13gjdud7fny.parts()); var components = $_436kgb10tjdud7f7y.components($_bqteuv13gjdud7fny.owner(), info, subs.internals()); var focusWidget = function (component) { return $_436kgb10tjdud7f7y.getPart(component, info, 'widget').map(function (widget) { Keying.focusIn(widget); return widget; }); }; var onHorizontalArrow = function (component, simulatedEvent) { return $_ddk3fu108jdud7f4o.inside(simulatedEvent.event().target()) ? Option.none() : function () { if (info.autofocus()) { simulatedEvent.setSource(component.element()); return Option.none(); } else { return Option.none(); } }(); }; return $_73qnwowyjdud7ek9.deepMerge({ dom: info.dom(), components: components, domModification: info.domModification(), events: $_5xcuyiy4jdud7eur.derive([ $_5xcuyiy4jdud7eur.runOnExecute(function (component, simulatedEvent) { focusWidget(component).each(function (widget) { simulatedEvent.stop(); }); }), $_5xcuyiy4jdud7eur.run($_brmbwvwijdud7eiu.mouseover(), $_8ru1bo13djdud7fnf.onHover), $_5xcuyiy4jdud7eur.run($_801kkqwhjdud7eiq.focusItem(), function (component, simulatedEvent) { if (info.autofocus()) focusWidget(component); else Focusing.focus(component); }) ]), behaviours: $_ax1gfoy2jdud7eu7.derive([ me.config({ store: { mode: 'memory', initialValue: info.data() } }), Focusing.config({ onFocus: function (component) { $_8ru1bo13djdud7fnf.onFocus(component); } }), Keying.config({ mode: 'special', onLeft: onHorizontalArrow, onRight: onHorizontalArrow, onEscape: function (component, simulatedEvent) { if (!Focusing.isFocused(component) && !info.autofocus()) { Focusing.focus(component); return Option.some(true); } else if (info.autofocus()) { simulatedEvent.setSource(component.element()); return Option.none(); } else { return Option.none(); } } }) ]) }); }; var schema$12 = [ $_euqmtby7jdud7ev7.strict('uid'), $_euqmtby7jdud7ev7.strict('data'), $_euqmtby7jdud7ev7.strict('components'), $_euqmtby7jdud7ev7.strict('dom'), $_euqmtby7jdud7ev7.defaulted('autofocus', false), $_euqmtby7jdud7ev7.defaulted('domModification', {}), $_436kgb10tjdud7f7y.defaultUidsSchema($_bqteuv13gjdud7fny.parts()), $_etkinez6jdud7ezi.output('builder', builder$2) ]; var itemSchema$1 = $_13hkebyejdud7ewm.choose('type', { widget: schema$12, item: schema$10, separator: schema$11 }); var configureGrid = function (detail, movementInfo) { return { mode: 'flatgrid', selector: '.' + detail.markers().item(), initSize: { numColumns: movementInfo.initSize().numColumns(), numRows: movementInfo.initSize().numRows() }, focusManager: detail.focusManager() }; }; var configureMenu = function (detail, movementInfo) { return { mode: 'menu', selector: '.' + detail.markers().item(), moveOnTab: movementInfo.moveOnTab(), focusManager: detail.focusManager() }; }; var parts = [$_7938qf10vjdud7f8n.group({ factory: { sketch: function (spec) { var itemInfo = $_13hkebyejdud7ewm.asStructOrDie('menu.spec item', itemSchema$1, spec); return itemInfo.builder()(itemInfo); } }, name: 'items', unit: 'item', defaults: function (detail, u) { var fallbackUid = $_4mrseh10xjdud7f9b.generate(''); return $_73qnwowyjdud7ek9.deepMerge({ uid: fallbackUid }, u); }, overrides: function (detail, u) { return { type: u.type, ignoreFocus: detail.fakeFocus(), domModification: { classes: [detail.markers().item()] } }; } })]; var schema$13 = [ $_euqmtby7jdud7ev7.strict('value'), $_euqmtby7jdud7ev7.strict('items'), $_euqmtby7jdud7ev7.strict('dom'), $_euqmtby7jdud7ev7.strict('components'), $_euqmtby7jdud7ev7.defaulted('eventOrder', {}), $_c7jpu210ojdud7f7a.field('menuBehaviours', [ Highlighting, me, Composing, Keying ]), $_euqmtby7jdud7ev7.defaultedOf('movement', { mode: 'menu', moveOnTab: true }, $_13hkebyejdud7ewm.choose('mode', { grid: [ $_etkinez6jdud7ezi.initSize(), $_etkinez6jdud7ezi.output('config', configureGrid) ], menu: [ $_euqmtby7jdud7ev7.defaulted('moveOnTab', true), $_etkinez6jdud7ezi.output('config', configureMenu) ] })), $_etkinez6jdud7ezi.itemMarkers(), $_euqmtby7jdud7ev7.defaulted('fakeFocus', false), $_euqmtby7jdud7ev7.defaulted('focusManager', $_cic9p1zrjdud7f2l.dom()), $_etkinez6jdud7ezi.onHandler('onHighlight') ]; var $_8okyr013bjdud7fn2 = { name: $_9njj9iwjjdud7eix.constant('Menu'), schema: $_9njj9iwjjdud7eix.constant(schema$13), parts: $_9njj9iwjjdud7eix.constant(parts) }; var focusEvent$1 = 'alloy.menu-focus'; var $_4itv8s13ijdud7fo7 = { focus: $_9njj9iwjjdud7eix.constant(focusEvent$1) }; var make$2 = function (detail, components, spec, externals) { return $_73qnwowyjdud7ek9.deepMerge({ dom: $_73qnwowyjdud7ek9.deepMerge(detail.dom(), { attributes: { role: 'menu' } }), uid: detail.uid(), behaviours: $_73qnwowyjdud7ek9.deepMerge($_ax1gfoy2jdud7eu7.derive([ Highlighting.config({ highlightClass: detail.markers().selectedItem(), itemClass: detail.markers().item(), onHighlight: detail.onHighlight() }), me.config({ store: { mode: 'memory', initialValue: detail.value() } }), Composing.config({ find: $_9njj9iwjjdud7eix.identity }), Keying.config(detail.movement().config()(detail, detail.movement())) ]), $_c7jpu210ojdud7f7a.get(detail.menuBehaviours())), events: $_5xcuyiy4jdud7eur.derive([ $_5xcuyiy4jdud7eur.run($_8ru1bo13djdud7fnf.focus(), function (menu, simulatedEvent) { var event = simulatedEvent.event(); menu.getSystem().getByDom(event.target()).each(function (item) { Highlighting.highlight(menu, item); simulatedEvent.stop(); $_98da6jwgjdud7eil.emitWith(menu, $_4itv8s13ijdud7fo7.focus(), { menu: menu, item: item }); }); }), $_5xcuyiy4jdud7eur.run($_8ru1bo13djdud7fnf.hover(), function (menu, simulatedEvent) { var item = simulatedEvent.event().item(); Highlighting.highlight(menu, item); }) ]), components: components, eventOrder: detail.eventOrder() }); }; var $_99di413hjdud7fo2 = { make: make$2 }; var Menu = $_3inyq310pjdud7f7f.composite({ name: 'Menu', configFields: $_8okyr013bjdud7fn2.schema(), partFields: $_8okyr013bjdud7fn2.parts(), factory: $_99di413hjdud7fo2.make }); var preserve$2 = function (f, container) { var ownerDoc = $_dekwe2x3jdud7ekr.owner(container); var refocus = $_25580rytjdud7ey7.active(ownerDoc).bind(function (focused) { var hasFocus = function (elem) { return $_f1y1rtx9jdud7el7.eq(focused, elem); }; return hasFocus(container) ? Option.some(container) : $_4j5kdsyvjdud7eyd.descendant(container, hasFocus); }); var result = f(container); refocus.each(function (oldFocus) { $_25580rytjdud7ey7.active(ownerDoc).filter(function (newFocus) { return $_f1y1rtx9jdud7el7.eq(newFocus, oldFocus); }).orThunk(function () { $_25580rytjdud7ey7.focus(oldFocus); }); }); return result; }; var $_7yrff213mjdud7fol = { preserve: preserve$2 }; var set$7 = function (component, replaceConfig, replaceState, data) { $_fesilqx1jdud7ekf.detachChildren(component); $_7yrff213mjdud7fol.preserve(function () { var children = $_1g2cevwsjdud7ejp.map(data, component.getSystem().build); $_1g2cevwsjdud7ejp.each(children, function (l) { $_fesilqx1jdud7ekf.attach(component, l); }); }, component.element()); }; var insert = function (component, replaceConfig, insertion, childSpec) { var child = component.getSystem().build(childSpec); $_fesilqx1jdud7ekf.attachWith(component, child, insertion); }; var append$2 = function (component, replaceConfig, replaceState, appendee) { insert(component, replaceConfig, $_ftkbb5x2jdud7ekp.append, appendee); }; var prepend$2 = function (component, replaceConfig, replaceState, prependee) { insert(component, replaceConfig, $_ftkbb5x2jdud7ekp.prepend, prependee); }; var remove$7 = function (component, replaceConfig, replaceState, removee) { var children = contents(component, replaceConfig); var foundChild = $_1g2cevwsjdud7ejp.find(children, function (child) { return $_f1y1rtx9jdud7el7.eq(removee.element(), child.element()); }); foundChild.each($_fesilqx1jdud7ekf.detach); }; var contents = function (component, replaceConfig) { return component.components(); }; var $_1r1wx913ljdud7fog = { append: append$2, prepend: prepend$2, remove: remove$7, set: set$7, contents: contents }; var Replacing = $_ax1gfoy2jdud7eu7.create({ fields: [], name: 'replacing', apis: $_1r1wx913ljdud7fog }); var transpose = function (obj) { return $_2dykn0x0jdud7ekc.tupleMap(obj, function (v, k) { return { k: v, v: k }; }); }; var trace = function (items, byItem, byMenu, finish) { return $_ettibkxsjdud7emz.readOptFrom(byMenu, finish).bind(function (triggerItem) { return $_ettibkxsjdud7emz.readOptFrom(items, triggerItem).bind(function (triggerMenu) { var rest = trace(items, byItem, byMenu, triggerMenu); return Option.some([triggerMenu].concat(rest)); }); }).getOr([]); }; var generate$5 = function (menus, expansions) { var items = {}; $_2dykn0x0jdud7ekc.each(menus, function (menuItems, menu) { $_1g2cevwsjdud7ejp.each(menuItems, function (item) { items[item] = menu; }); }); var byItem = expansions; var byMenu = transpose(expansions); var menuPaths = $_2dykn0x0jdud7ekc.map(byMenu, function (triggerItem, submenu) { return [submenu].concat(trace(items, byItem, byMenu, submenu)); }); return $_2dykn0x0jdud7ekc.map(items, function (path) { return $_ettibkxsjdud7emz.readOptFrom(menuPaths, path).getOr([path]); }); }; var $_41e4h513pjdud7fpr = { generate: generate$5 }; function LayeredState () { var expansions = Cell({}); var menus = Cell({}); var paths = Cell({}); var primary = Cell(Option.none()); var toItemValues = Cell($_9njj9iwjjdud7eix.constant([])); var clear = function () { expansions.set({}); menus.set({}); paths.set({}); primary.set(Option.none()); }; var isClear = function () { return primary.get().isNone(); }; var setContents = function (sPrimary, sMenus, sExpansions, sToItemValues) { primary.set(Option.some(sPrimary)); expansions.set(sExpansions); menus.set(sMenus); toItemValues.set(sToItemValues); var menuValues = sToItemValues(sMenus); var sPaths = $_41e4h513pjdud7fpr.generate(menuValues, sExpansions); paths.set(sPaths); }; var expand = function (itemValue) { return $_ettibkxsjdud7emz.readOptFrom(expansions.get(), itemValue).map(function (menu) { var current = $_ettibkxsjdud7emz.readOptFrom(paths.get(), itemValue).getOr([]); return [menu].concat(current); }); }; var collapse = function (itemValue) { return $_ettibkxsjdud7emz.readOptFrom(paths.get(), itemValue).bind(function (path) { return path.length > 1 ? Option.some(path.slice(1)) : Option.none(); }); }; var refresh = function (itemValue) { return $_ettibkxsjdud7emz.readOptFrom(paths.get(), itemValue); }; var lookupMenu = function (menuValue) { return $_ettibkxsjdud7emz.readOptFrom(menus.get(), menuValue); }; var otherMenus = function (path) { var menuValues = toItemValues.get()(menus.get()); return $_1g2cevwsjdud7ejp.difference($_2dykn0x0jdud7ekc.keys(menuValues), path); }; var getPrimary = function () { return primary.get().bind(lookupMenu); }; var getMenus = function () { return menus.get(); }; return { setContents: setContents, expand: expand, refresh: refresh, collapse: collapse, lookupMenu: lookupMenu, otherMenus: otherMenus, getPrimary: getPrimary, getMenus: getMenus, clear: clear, isClear: isClear }; } var make$3 = function (detail, rawUiSpec) { var buildMenus = function (container, menus) { return $_2dykn0x0jdud7ekc.map(menus, function (spec, name) { var data = Menu.sketch($_73qnwowyjdud7ek9.deepMerge(spec, { value: name, items: spec.items, markers: $_ettibkxsjdud7emz.narrow(rawUiSpec.markers, [ 'item', 'selectedItem' ]), fakeFocus: detail.fakeFocus(), onHighlight: detail.onHighlight(), focusManager: detail.fakeFocus() ? $_cic9p1zrjdud7f2l.highlights() : $_cic9p1zrjdud7f2l.dom() })); return container.getSystem().build(data); }); }; var state = LayeredState(); var setup = function (container) { var componentMap = buildMenus(container, detail.data().menus()); state.setContents(detail.data().primary(), componentMap, detail.data().expansions(), function (sMenus) { return toMenuValues(container, sMenus); }); return state.getPrimary(); }; var getItemValue = function (item) { return me.getValue(item).value; }; var toMenuValues = function (container, sMenus) { return $_2dykn0x0jdud7ekc.map(detail.data().menus(), function (data, menuName) { return $_1g2cevwsjdud7ejp.bind(data.items, function (item) { return item.type === 'separator' ? [] : [item.data.value]; }); }); }; var setActiveMenu = function (container, menu) { Highlighting.highlight(container, menu); Highlighting.getHighlighted(menu).orThunk(function () { return Highlighting.getFirst(menu); }).each(function (item) { $_98da6jwgjdud7eil.dispatch(container, item.element(), $_801kkqwhjdud7eiq.focusItem()); }); }; var getMenus = function (state, menuValues) { return $_ak7xq9y0jdud7eu4.cat($_1g2cevwsjdud7ejp.map(menuValues, state.lookupMenu)); }; var updateMenuPath = function (container, state, path) { return Option.from(path[0]).bind(state.lookupMenu).map(function (activeMenu) { var rest = getMenus(state, path.slice(1)); $_1g2cevwsjdud7ejp.each(rest, function (r) { $_1x3ogvynjdud7exn.add(r.element(), detail.markers().backgroundMenu()); }); if (!$_1tyeizxjjdud7em4.inBody(activeMenu.element())) { Replacing.append(container, $_ap2ej712tjdud7fjl.premade(activeMenu)); } $_af5dkc137jdud7fms.remove(activeMenu.element(), [detail.markers().backgroundMenu()]); setActiveMenu(container, activeMenu); var others = getMenus(state, state.otherMenus(path)); $_1g2cevwsjdud7ejp.each(others, function (o) { $_af5dkc137jdud7fms.remove(o.element(), [detail.markers().backgroundMenu()]); if (!detail.stayInDom()) Replacing.remove(container, o); }); return activeMenu; }); }; var expandRight = function (container, item) { var value = getItemValue(item); return state.expand(value).bind(function (path) { Option.from(path[0]).bind(state.lookupMenu).each(function (activeMenu) { if (!$_1tyeizxjjdud7em4.inBody(activeMenu.element())) { Replacing.append(container, $_ap2ej712tjdud7fjl.premade(activeMenu)); } detail.onOpenSubmenu()(container, item, activeMenu); Highlighting.highlightFirst(activeMenu); }); return updateMenuPath(container, state, path); }); }; var collapseLeft = function (container, item) { var value = getItemValue(item); return state.collapse(value).bind(function (path) { return updateMenuPath(container, state, path).map(function (activeMenu) { detail.onCollapseMenu()(container, item, activeMenu); return activeMenu; }); }); }; var updateView = function (container, item) { var value = getItemValue(item); return state.refresh(value).bind(function (path) { return updateMenuPath(container, state, path); }); }; var onRight = function (container, item) { return $_ddk3fu108jdud7f4o.inside(item.element()) ? Option.none() : expandRight(container, item); }; var onLeft = function (container, item) { return $_ddk3fu108jdud7f4o.inside(item.element()) ? Option.none() : collapseLeft(container, item); }; var onEscape = function (container, item) { return collapseLeft(container, item).orThunk(function () { return detail.onEscape()(container, item); }); }; var keyOnItem = function (f) { return function (container, simulatedEvent) { return $_a3quyizxjdud7f3e.closest(simulatedEvent.getSource(), '.' + detail.markers().item()).bind(function (target) { return container.getSystem().getByDom(target).bind(function (item) { return f(container, item); }); }); }; }; var events = $_5xcuyiy4jdud7eur.derive([ $_5xcuyiy4jdud7eur.run($_4itv8s13ijdud7fo7.focus(), function (sandbox, simulatedEvent) { var menu = simulatedEvent.event().menu(); Highlighting.highlight(sandbox, menu); }), $_5xcuyiy4jdud7eur.runOnExecute(function (sandbox, simulatedEvent) { var target = simulatedEvent.event().target(); return sandbox.getSystem().getByDom(target).bind(function (item) { var itemValue = getItemValue(item); if (itemValue.indexOf('collapse-item') === 0) { return collapseLeft(sandbox, item); } return expandRight(sandbox, item).orThunk(function () { return detail.onExecute()(sandbox, item); }); }); }), $_5xcuyiy4jdud7eur.runOnAttached(function (container, simulatedEvent) { setup(container).each(function (primary) { Replacing.append(container, $_ap2ej712tjdud7fjl.premade(primary)); if (detail.openImmediately()) { setActiveMenu(container, primary); detail.onOpenMenu()(container, primary); } }); }) ].concat(detail.navigateOnHover() ? [$_5xcuyiy4jdud7eur.run($_8ru1bo13djdud7fnf.hover(), function (sandbox, simulatedEvent) { var item = simulatedEvent.event().item(); updateView(sandbox, item); expandRight(sandbox, item); detail.onHover()(sandbox, item); })] : [])); var collapseMenuApi = function (container) { Highlighting.getHighlighted(container).each(function (currentMenu) { Highlighting.getHighlighted(currentMenu).each(function (currentItem) { collapseLeft(container, currentItem); }); }); }; return { uid: detail.uid(), dom: detail.dom(), behaviours: $_73qnwowyjdud7ek9.deepMerge($_ax1gfoy2jdud7eu7.derive([ Keying.config({ mode: 'special', onRight: keyOnItem(onRight), onLeft: keyOnItem(onLeft), onEscape: keyOnItem(onEscape), focusIn: function (container, keyInfo) { state.getPrimary().each(function (primary) { $_98da6jwgjdud7eil.dispatch(container, primary.element(), $_801kkqwhjdud7eiq.focusItem()); }); } }), Highlighting.config({ highlightClass: detail.markers().selectedMenu(), itemClass: detail.markers().menu() }), Composing.config({ find: function (container) { return Highlighting.getHighlighted(container); } }), Replacing.config({}) ]), $_c7jpu210ojdud7f7a.get(detail.tmenuBehaviours())), eventOrder: detail.eventOrder(), apis: { collapseMenu: collapseMenuApi }, events: events }; }; var $_5tcqz613njdud7fou = { make: make$3, collapseItem: $_9njj9iwjjdud7eix.constant('collapse-item') }; var tieredData = function (primary, menus, expansions) { return { primary: primary, menus: menus, expansions: expansions }; }; var singleData = function (name, menu) { return { primary: name, menus: $_ettibkxsjdud7emz.wrap(name, menu), expansions: {} }; }; var collapseItem = function (text) { return { value: $_3k9wwu10rjdud7f7t.generate($_5tcqz613njdud7fou.collapseItem()), text: text }; }; var TieredMenu = $_3inyq310pjdud7f7f.single({ name: 'TieredMenu', configFields: [ $_etkinez6jdud7ezi.onStrictKeyboardHandler('onExecute'), $_etkinez6jdud7ezi.onStrictKeyboardHandler('onEscape'), $_etkinez6jdud7ezi.onStrictHandler('onOpenMenu'), $_etkinez6jdud7ezi.onStrictHandler('onOpenSubmenu'), $_etkinez6jdud7ezi.onHandler('onCollapseMenu'), $_euqmtby7jdud7ev7.defaulted('openImmediately', true), $_euqmtby7jdud7ev7.strictObjOf('data', [ $_euqmtby7jdud7ev7.strict('primary'), $_euqmtby7jdud7ev7.strict('menus'), $_euqmtby7jdud7ev7.strict('expansions') ]), $_euqmtby7jdud7ev7.defaulted('fakeFocus', false), $_etkinez6jdud7ezi.onHandler('onHighlight'), $_etkinez6jdud7ezi.onHandler('onHover'), $_etkinez6jdud7ezi.tieredMenuMarkers(), $_euqmtby7jdud7ev7.strict('dom'), $_euqmtby7jdud7ev7.defaulted('navigateOnHover', true), $_euqmtby7jdud7ev7.defaulted('stayInDom', false), $_c7jpu210ojdud7f7a.field('tmenuBehaviours', [ Keying, Highlighting, Composing, Replacing ]), $_euqmtby7jdud7ev7.defaulted('eventOrder', {}) ], apis: { collapseMenu: function (apis, tmenu) { apis.collapseMenu(tmenu); } }, factory: $_5tcqz613njdud7fou.make, extraApis: { tieredData: tieredData, singleData: singleData, collapseItem: collapseItem } }); var findRoute = function (component, transConfig, transState, route) { return $_ettibkxsjdud7emz.readOptFrom(transConfig.routes(), route.start()).map($_9njj9iwjjdud7eix.apply).bind(function (sConfig) { return $_ettibkxsjdud7emz.readOptFrom(sConfig, route.destination()).map($_9njj9iwjjdud7eix.apply); }); }; var getTransition = function (comp, transConfig, transState) { var route = getCurrentRoute(comp, transConfig, transState); return route.bind(function (r) { return getTransitionOf(comp, transConfig, transState, r); }); }; var getTransitionOf = function (comp, transConfig, transState, route) { return findRoute(comp, transConfig, transState, route).bind(function (r) { return r.transition().map(function (t) { return { transition: $_9njj9iwjjdud7eix.constant(t), route: $_9njj9iwjjdud7eix.constant(r) }; }); }); }; var disableTransition = function (comp, transConfig, transState) { getTransition(comp, transConfig, transState).each(function (routeTransition) { var t = routeTransition.transition(); $_1x3ogvynjdud7exn.remove(comp.element(), t.transitionClass()); $_2vghk1xrjdud7ems.remove(comp.element(), transConfig.destinationAttr()); }); }; var getNewRoute = function (comp, transConfig, transState, destination) { return { start: $_9njj9iwjjdud7eix.constant($_2vghk1xrjdud7ems.get(comp.element(), transConfig.stateAttr())), destination: $_9njj9iwjjdud7eix.constant(destination) }; }; var getCurrentRoute = function (comp, transConfig, transState) { var el = comp.element(); return $_2vghk1xrjdud7ems.has(el, transConfig.destinationAttr()) ? Option.some({ start: $_9njj9iwjjdud7eix.constant($_2vghk1xrjdud7ems.get(comp.element(), transConfig.stateAttr())), destination: $_9njj9iwjjdud7eix.constant($_2vghk1xrjdud7ems.get(comp.element(), transConfig.destinationAttr())) }) : Option.none(); }; var jumpTo = function (comp, transConfig, transState, destination) { disableTransition(comp, transConfig, transState); if ($_2vghk1xrjdud7ems.has(comp.element(), transConfig.stateAttr()) && $_2vghk1xrjdud7ems.get(comp.element(), transConfig.stateAttr()) !== destination) transConfig.onFinish()(comp, destination); $_2vghk1xrjdud7ems.set(comp.element(), transConfig.stateAttr(), destination); }; var fasttrack = function (comp, transConfig, transState, destination) { if ($_2vghk1xrjdud7ems.has(comp.element(), transConfig.destinationAttr())) { $_2vghk1xrjdud7ems.set(comp.element(), transConfig.stateAttr(), $_2vghk1xrjdud7ems.get(comp.element(), transConfig.destinationAttr())); $_2vghk1xrjdud7ems.remove(comp.element(), transConfig.destinationAttr()); } }; var progressTo = function (comp, transConfig, transState, destination) { fasttrack(comp, transConfig, transState, destination); var route = getNewRoute(comp, transConfig, transState, destination); getTransitionOf(comp, transConfig, transState, route).fold(function () { jumpTo(comp, transConfig, transState, destination); }, function (routeTransition) { disableTransition(comp, transConfig, transState); var t = routeTransition.transition(); $_1x3ogvynjdud7exn.add(comp.element(), t.transitionClass()); $_2vghk1xrjdud7ems.set(comp.element(), transConfig.destinationAttr(), destination); }); }; var getState = function (comp, transConfig, transState) { var e = comp.element(); return $_2vghk1xrjdud7ems.has(e, transConfig.stateAttr()) ? Option.some($_2vghk1xrjdud7ems.get(e, transConfig.stateAttr())) : Option.none(); }; var $_7wpzrk13sjdud7fq5 = { findRoute: findRoute, disableTransition: disableTransition, getCurrentRoute: getCurrentRoute, jumpTo: jumpTo, progressTo: progressTo, getState: getState }; var events$8 = function (transConfig, transState) { return $_5xcuyiy4jdud7eur.derive([ $_5xcuyiy4jdud7eur.run($_brmbwvwijdud7eiu.transitionend(), function (component, simulatedEvent) { var raw = simulatedEvent.event().raw(); $_7wpzrk13sjdud7fq5.getCurrentRoute(component, transConfig, transState).each(function (route) { $_7wpzrk13sjdud7fq5.findRoute(component, transConfig, transState, route).each(function (rInfo) { rInfo.transition().each(function (rTransition) { if (raw.propertyName === rTransition.property()) { $_7wpzrk13sjdud7fq5.jumpTo(component, transConfig, transState, route.destination()); transConfig.onTransition()(component, route); } }); }); }); }), $_5xcuyiy4jdud7eur.runOnAttached(function (comp, se) { $_7wpzrk13sjdud7fq5.jumpTo(comp, transConfig, transState, transConfig.initialState()); }) ]); }; var $_4zcx6q13rjdud7fq3 = { events: events$8 }; var TransitionSchema = [ $_euqmtby7jdud7ev7.defaulted('destinationAttr', 'data-transitioning-destination'), $_euqmtby7jdud7ev7.defaulted('stateAttr', 'data-transitioning-state'), $_euqmtby7jdud7ev7.strict('initialState'), $_etkinez6jdud7ezi.onHandler('onTransition'), $_etkinez6jdud7ezi.onHandler('onFinish'), $_euqmtby7jdud7ev7.strictOf('routes', $_13hkebyejdud7ewm.setOf(Result.value, $_13hkebyejdud7ewm.setOf(Result.value, $_13hkebyejdud7ewm.objOfOnly([$_euqmtby7jdud7ev7.optionObjOfOnly('transition', [ $_euqmtby7jdud7ev7.strict('property'), $_euqmtby7jdud7ev7.strict('transitionClass') ])])))) ]; var createRoutes = function (routes) { var r = {}; $_2dykn0x0jdud7ekc.each(routes, function (v, k) { var waypoints = k.split('<->'); r[waypoints[0]] = $_ettibkxsjdud7emz.wrap(waypoints[1], v); r[waypoints[1]] = $_ettibkxsjdud7emz.wrap(waypoints[0], v); }); return r; }; var createBistate = function (first, second, transitions) { return $_ettibkxsjdud7emz.wrapAll([ { key: first, value: $_ettibkxsjdud7emz.wrap(second, transitions) }, { key: second, value: $_ettibkxsjdud7emz.wrap(first, transitions) } ]); }; var createTristate = function (first, second, third, transitions) { return $_ettibkxsjdud7emz.wrapAll([ { key: first, value: $_ettibkxsjdud7emz.wrapAll([ { key: second, value: transitions }, { key: third, value: transitions } ]) }, { key: second, value: $_ettibkxsjdud7emz.wrapAll([ { key: first, value: transitions }, { key: third, value: transitions } ]) }, { key: third, value: $_ettibkxsjdud7emz.wrapAll([ { key: first, value: transitions }, { key: second, value: transitions } ]) } ]); }; var Transitioning = $_ax1gfoy2jdud7eu7.create({ fields: TransitionSchema, name: 'transitioning', active: $_4zcx6q13rjdud7fq3, apis: $_7wpzrk13sjdud7fq5, extra: { createRoutes: createRoutes, createBistate: createBistate, createTristate: createTristate } }); var scrollable = $_5qzh4bzejdud7f0y.resolve('scrollable'); var register = function (element) { $_1x3ogvynjdud7exn.add(element, scrollable); }; var deregister = function (element) { $_1x3ogvynjdud7exn.remove(element, scrollable); }; var $_bhtyzh13ujdud7fqk = { register: register, deregister: deregister, scrollable: $_9njj9iwjjdud7eix.constant(scrollable) }; var getValue$4 = function (item) { return $_ettibkxsjdud7emz.readOptFrom(item, 'format').getOr(item.title); }; var convert$1 = function (formats, memMenuThunk) { var mainMenu = makeMenu('Styles', [].concat($_1g2cevwsjdud7ejp.map(formats.items, function (k) { return makeItem(getValue$4(k), k.title, k.isSelected(), k.getPreview(), $_ettibkxsjdud7emz.hasKey(formats.expansions, getValue$4(k))); })), memMenuThunk, false); var submenus = $_2dykn0x0jdud7ekc.map(formats.menus, function (menuItems, menuName) { var items = $_1g2cevwsjdud7ejp.map(menuItems, function (item) { return makeItem(getValue$4(item), item.title, item.isSelected !== undefined ? item.isSelected() : false, item.getPreview !== undefined ? item.getPreview() : '', $_ettibkxsjdud7emz.hasKey(formats.expansions, getValue$4(item))); }); return makeMenu(menuName, items, memMenuThunk, true); }); var menus = $_73qnwowyjdud7ek9.deepMerge(submenus, $_ettibkxsjdud7emz.wrap('styles', mainMenu)); var tmenu = TieredMenu.tieredData('styles', menus, formats.expansions); return { tmenu: tmenu }; }; var makeItem = function (value, text, selected, preview, isMenu) { return { data: { value: value, text: text }, type: 'item', dom: { tag: 'div', classes: isMenu ? [$_5qzh4bzejdud7f0y.resolve('styles-item-is-menu')] : [] }, toggling: { toggleOnExecute: false, toggleClass: $_5qzh4bzejdud7f0y.resolve('format-matches'), selected: selected }, itemBehaviours: $_ax1gfoy2jdud7eu7.derive(isMenu ? [] : [$_nw25bzdjdud7f0v.format(value, function (comp, status) { var toggle = status ? Toggling.on : Toggling.off; toggle(comp); })]), components: [{ dom: { tag: 'div', attributes: { style: preview }, innerHtml: text } }] }; }; var makeMenu = function (value, items, memMenuThunk, collapsable) { return { value: value, dom: { tag: 'div' }, components: [ Button.sketch({ dom: { tag: 'div', classes: [$_5qzh4bzejdud7f0y.resolve('styles-collapser')] }, components: collapsable ? [ { dom: { tag: 'span', classes: [$_5qzh4bzejdud7f0y.resolve('styles-collapse-icon')] } }, $_ap2ej712tjdud7fjl.text(value) ] : [$_ap2ej712tjdud7fjl.text(value)], action: function (item) { if (collapsable) { var comp = memMenuThunk().get(item); TieredMenu.collapseMenu(comp); } } }), { dom: { tag: 'div', classes: [$_5qzh4bzejdud7f0y.resolve('styles-menu-items-container')] }, components: [Menu.parts().items({})], behaviours: $_ax1gfoy2jdud7eu7.derive([$_6jfkt3126jdud7ffy.config('adhoc-scrollable-menu', [ $_5xcuyiy4jdud7eur.runOnAttached(function (component, simulatedEvent) { $_btgbcy103jdud7f3t.set(component.element(), 'overflow-y', 'auto'); $_btgbcy103jdud7f3t.set(component.element(), '-webkit-overflow-scrolling', 'touch'); $_bhtyzh13ujdud7fqk.register(component.element()); }), $_5xcuyiy4jdud7eur.runOnDetached(function (component) { $_btgbcy103jdud7f3t.remove(component.element(), 'overflow-y'); $_btgbcy103jdud7f3t.remove(component.element(), '-webkit-overflow-scrolling'); $_bhtyzh13ujdud7fqk.deregister(component.element()); }) ])]) } ], items: items, menuBehaviours: $_ax1gfoy2jdud7eu7.derive([Transitioning.config({ initialState: 'after', routes: Transitioning.createTristate('before', 'current', 'after', { transition: { property: 'transform', transitionClass: 'transitioning' } }) })]) }; }; var sketch$9 = function (settings) { var dataset = convert$1(settings.formats, function () { return memMenu; }); var memMenu = $_81ial811rjdud7fdw.record(TieredMenu.sketch({ dom: { tag: 'div', classes: [$_5qzh4bzejdud7f0y.resolve('styles-menu')] }, components: [], fakeFocus: true, stayInDom: true, onExecute: function (tmenu, item) { var v = me.getValue(item); settings.handle(item, v.value); }, onEscape: function () { }, onOpenMenu: function (container, menu) { var w = $_6chz3611kjdud7fcw.get(container.element()); $_6chz3611kjdud7fcw.set(menu.element(), w); Transitioning.jumpTo(menu, 'current'); }, onOpenSubmenu: function (container, item, submenu) { var w = $_6chz3611kjdud7fcw.get(container.element()); var menu = $_a3quyizxjdud7f3e.ancestor(item.element(), '[role="menu"]').getOrDie('hacky'); var menuComp = container.getSystem().getByDom(menu).getOrDie(); $_6chz3611kjdud7fcw.set(submenu.element(), w); Transitioning.progressTo(menuComp, 'before'); Transitioning.jumpTo(submenu, 'after'); Transitioning.progressTo(submenu, 'current'); }, onCollapseMenu: function (container, item, menu) { var submenu = $_a3quyizxjdud7f3e.ancestor(item.element(), '[role="menu"]').getOrDie('hacky'); var submenuComp = container.getSystem().getByDom(submenu).getOrDie(); Transitioning.progressTo(submenuComp, 'after'); Transitioning.progressTo(menu, 'current'); }, navigateOnHover: false, openImmediately: true, data: dataset.tmenu, markers: { backgroundMenu: $_5qzh4bzejdud7f0y.resolve('styles-background-menu'), menu: $_5qzh4bzejdud7f0y.resolve('styles-menu'), selectedMenu: $_5qzh4bzejdud7f0y.resolve('styles-selected-menu'), item: $_5qzh4bzejdud7f0y.resolve('styles-item'), selectedItem: $_5qzh4bzejdud7f0y.resolve('styles-selected-item') } })); return memMenu.asSpec(); }; var $_8232q612sjdud7fix = { sketch: sketch$9 }; var getFromExpandingItem = function (item) { var newItem = $_73qnwowyjdud7ek9.deepMerge($_ettibkxsjdud7emz.exclude(item, ['items']), { menu: true }); var rest = expand(item.items); var newMenus = $_73qnwowyjdud7ek9.deepMerge(rest.menus, $_ettibkxsjdud7emz.wrap(item.title, rest.items)); var newExpansions = $_73qnwowyjdud7ek9.deepMerge(rest.expansions, $_ettibkxsjdud7emz.wrap(item.title, item.title)); return { item: newItem, menus: newMenus, expansions: newExpansions }; }; var getFromItem = function (item) { return $_ettibkxsjdud7emz.hasKey(item, 'items') ? getFromExpandingItem(item) : { item: item, menus: {}, expansions: {} }; }; var expand = function (items) { return $_1g2cevwsjdud7ejp.foldr(items, function (acc, item) { var newData = getFromItem(item); return { menus: $_73qnwowyjdud7ek9.deepMerge(acc.menus, newData.menus), items: [newData.item].concat(acc.items), expansions: $_73qnwowyjdud7ek9.deepMerge(acc.expansions, newData.expansions) }; }, { menus: {}, expansions: {}, items: [] }); }; var $_2318xp13vjdud7fqo = { expand: expand }; var register$1 = function (editor, settings) { var isSelectedFor = function (format) { return function () { return editor.formatter.match(format); }; }; var getPreview = function (format) { return function () { var styles = editor.formatter.getCssText(format); return styles; }; }; var enrichSupported = function (item) { return $_73qnwowyjdud7ek9.deepMerge(item, { isSelected: isSelectedFor(item.format), getPreview: getPreview(item.format) }); }; var enrichMenu = function (item) { return $_73qnwowyjdud7ek9.deepMerge(item, { isSelected: $_9njj9iwjjdud7eix.constant(false), getPreview: $_9njj9iwjjdud7eix.constant('') }); }; var enrichCustom = function (item) { var formatName = $_3k9wwu10rjdud7f7t.generate(item.title); var newItem = $_73qnwowyjdud7ek9.deepMerge(item, { format: formatName, isSelected: isSelectedFor(formatName), getPreview: getPreview(formatName) }); editor.formatter.register(formatName, newItem); return newItem; }; var formats = $_ettibkxsjdud7emz.readOptFrom(settings, 'style_formats').getOr(DefaultStyleFormats); var doEnrich = function (items) { return $_1g2cevwsjdud7ejp.map(items, function (item) { if ($_ettibkxsjdud7emz.hasKey(item, 'items')) { var newItems = doEnrich(item.items); return $_73qnwowyjdud7ek9.deepMerge(enrichMenu(item), { items: newItems }); } else if ($_ettibkxsjdud7emz.hasKey(item, 'format')) { return enrichSupported(item); } else { return enrichCustom(item); } }); }; return doEnrich(formats); }; var prune = function (editor, formats) { var doPrune = function (items) { return $_1g2cevwsjdud7ejp.bind(items, function (item) { if (item.items !== undefined) { var newItems = doPrune(item.items); return newItems.length > 0 ? [item] : []; } else { var keep = $_ettibkxsjdud7emz.hasKey(item, 'format') ? editor.formatter.canApply(item.format) : true; return keep ? [item] : []; } }); }; var prunedItems = doPrune(formats); return $_2318xp13vjdud7fqo.expand(prunedItems); }; var ui = function (editor, formats, onDone) { var pruned = prune(editor, formats); return $_8232q612sjdud7fix.sketch({ formats: pruned, handle: function (item, value) { editor.undoManager.transact(function () { if (Toggling.isOn(item)) { editor.formatter.remove(value); } else { editor.formatter.apply(value); } }); onDone(); } }); }; var $_2m4bmu12qjdud7fio = { register: register$1, ui: ui }; var defaults = [ 'undo', 'bold', 'italic', 'link', 'image', 'bullist', 'styleselect' ]; var extract$1 = function (rawToolbar) { var toolbar = rawToolbar.replace(/\|/g, ' ').trim(); return toolbar.length > 0 ? toolbar.split(/\s+/) : []; }; var identifyFromArray = function (toolbar) { return $_1g2cevwsjdud7ejp.bind(toolbar, function (item) { return $_9rljuwzjdud7ekb.isArray(item) ? identifyFromArray(item) : extract$1(item); }); }; var identify = function (settings) { var toolbar = settings.toolbar !== undefined ? settings.toolbar : defaults; return $_9rljuwzjdud7ekb.isArray(toolbar) ? identifyFromArray(toolbar) : extract$1(toolbar); }; var setup = function (realm, editor) { var commandSketch = function (name) { return function () { return $_d0l7buzfjdud7f11.forToolbarCommand(editor, name); }; }; var stateCommandSketch = function (name) { return function () { return $_d0l7buzfjdud7f11.forToolbarStateCommand(editor, name); }; }; var actionSketch = function (name, query, action) { return function () { return $_d0l7buzfjdud7f11.forToolbarStateAction(editor, name, query, action); }; }; var undo = commandSketch('undo'); var redo = commandSketch('redo'); var bold = stateCommandSketch('bold'); var italic = stateCommandSketch('italic'); var underline = stateCommandSketch('underline'); var removeformat = commandSketch('removeformat'); var link = function () { return $_20tbzu121jdud7ff2.sketch(realm, editor); }; var unlink = actionSketch('unlink', 'link', function () { editor.execCommand('unlink', null, false); }); var image = function () { return $_sv17x11qjdud7fdo.sketch(editor); }; var bullist = actionSketch('unordered-list', 'ul', function () { editor.execCommand('InsertUnorderedList', null, false); }); var numlist = actionSketch('ordered-list', 'ol', function () { editor.execCommand('InsertOrderedList', null, false); }); var fontsizeselect = function () { return $_8r2dx911mjdud7fcz.sketch(realm, editor); }; var forecolor = function () { return $_2q53pp115jdud7fap.sketch(realm, editor); }; var styleFormats = $_2m4bmu12qjdud7fio.register(editor, editor.settings); var styleFormatsMenu = function () { return $_2m4bmu12qjdud7fio.ui(editor, styleFormats, function () { editor.fire('scrollIntoView'); }); }; var styleselect = function () { return $_d0l7buzfjdud7f11.forToolbar('style-formats', function (button) { editor.fire('toReading'); realm.dropup().appear(styleFormatsMenu, Toggling.on, button); }, $_ax1gfoy2jdud7eu7.derive([ Toggling.config({ toggleClass: $_5qzh4bzejdud7f0y.resolve('toolbar-button-selected'), toggleOnExecute: false, aria: { mode: 'pressed' } }), Receiving.config({ channels: $_ettibkxsjdud7emz.wrapAll([ $_nw25bzdjdud7f0v.receive($_dlmrcrz1jdud7eyr.orientationChanged(), Toggling.off), $_nw25bzdjdud7f0v.receive($_dlmrcrz1jdud7eyr.dropupDismissed(), Toggling.off) ]) }) ])); }; var feature = function (prereq, sketch) { return { isSupported: function () { return prereq.forall(function (p) { return $_ettibkxsjdud7emz.hasKey(editor.buttons, p); }); }, sketch: sketch }; }; return { undo: feature(Option.none(), undo), redo: feature(Option.none(), redo), bold: feature(Option.none(), bold), italic: feature(Option.none(), italic), underline: feature(Option.none(), underline), removeformat: feature(Option.none(), removeformat), link: feature(Option.none(), link), unlink: feature(Option.none(), unlink), image: feature(Option.none(), image), bullist: feature(Option.some('bullist'), bullist), numlist: feature(Option.some('numlist'), numlist), fontsizeselect: feature(Option.none(), fontsizeselect), forecolor: feature(Option.none(), forecolor), styleselect: feature(Option.none(), styleselect) }; }; var detect$4 = function (settings, features) { var itemNames = identify(settings); var present = {}; return $_1g2cevwsjdud7ejp.bind(itemNames, function (iName) { var r = !$_ettibkxsjdud7emz.hasKey(present, iName) && $_ettibkxsjdud7emz.hasKey(features, iName) && features[iName].isSupported() ? [features[iName].sketch()] : []; present[iName] = true; return r; }); }; var $_44tgozz2jdud7eyu = { identify: identify, setup: setup, detect: detect$4 }; var mkEvent = function (target, x, y, stop, prevent, kill, raw) { return { 'target': $_9njj9iwjjdud7eix.constant(target), 'x': $_9njj9iwjjdud7eix.constant(x), 'y': $_9njj9iwjjdud7eix.constant(y), 'stop': stop, 'prevent': prevent, 'kill': kill, 'raw': $_9njj9iwjjdud7eix.constant(raw) }; }; var handle = function (filter, handler) { return function (rawEvent) { if (!filter(rawEvent)) return; var target = $_eobgtqxfjdud7elu.fromDom(rawEvent.target); var stop = function () { rawEvent.stopPropagation(); }; var prevent = function () { rawEvent.preventDefault(); }; var kill = $_9njj9iwjjdud7eix.compose(prevent, stop); var evt = mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent); handler(evt); }; }; var binder = function (element, event, filter, handler, useCapture) { var wrapped = handle(filter, handler); element.dom().addEventListener(event, wrapped, useCapture); return { unbind: $_9njj9iwjjdud7eix.curry(unbind, element, event, wrapped, useCapture) }; }; var bind$1 = function (element, event, filter, handler) { return binder(element, event, filter, handler, false); }; var capture = function (element, event, filter, handler) { return binder(element, event, filter, handler, true); }; var unbind = function (element, event, handler, useCapture) { element.dom().removeEventListener(event, handler, useCapture); }; var $_4i64fg13yjdud7fr2 = { bind: bind$1, capture: capture }; var filter$1 = $_9njj9iwjjdud7eix.constant(true); var bind$2 = function (element, event, handler) { return $_4i64fg13yjdud7fr2.bind(element, event, filter$1, handler); }; var capture$1 = function (element, event, handler) { return $_4i64fg13yjdud7fr2.capture(element, event, filter$1, handler); }; var $_5x7hr513xjdud7fqz = { bind: bind$2, capture: capture$1 }; var INTERVAL = 50; var INSURANCE = 1000 / INTERVAL; var get$11 = function (outerWindow) { var isPortrait = outerWindow.matchMedia('(orientation: portrait)').matches; return { isPortrait: $_9njj9iwjjdud7eix.constant(isPortrait) }; }; var getActualWidth = function (outerWindow) { var isIos = $_chh2cvwkjdud7ej0.detect().os.isiOS(); var isPortrait = get$11(outerWindow).isPortrait(); return isIos && !isPortrait ? outerWindow.screen.height : outerWindow.screen.width; }; var onChange = function (outerWindow, listeners) { var win = $_eobgtqxfjdud7elu.fromDom(outerWindow); var poller = null; var change = function () { clearInterval(poller); var orientation = get$11(outerWindow); listeners.onChange(orientation); onAdjustment(function () { listeners.onReady(orientation); }); }; var orientationHandle = $_5x7hr513xjdud7fqz.bind(win, 'orientationchange', change); var onAdjustment = function (f) { clearInterval(poller); var flag = outerWindow.innerHeight; var insurance = 0; poller = setInterval(function () { if (flag !== outerWindow.innerHeight) { clearInterval(poller); f(Option.some(outerWindow.innerHeight)); } else if (insurance > INSURANCE) { clearInterval(poller); f(Option.none()); } insurance++; }, INTERVAL); }; var destroy = function () { orientationHandle.unbind(); }; return { onAdjustment: onAdjustment, destroy: destroy }; }; var $_9zlehr13wjdud7fqs = { get: get$11, onChange: onChange, getActualWidth: getActualWidth }; function DelayedFunction (fun, delay) { var ref = null; var schedule = function () { var args = arguments; ref = setTimeout(function () { fun.apply(null, args); ref = null; }, delay); }; var cancel = function () { if (ref !== null) { clearTimeout(ref); ref = null; } }; return { cancel: cancel, schedule: schedule }; } var SIGNIFICANT_MOVE = 5; var LONGPRESS_DELAY = 400; var getTouch = function (event) { if (event.raw().touches === undefined || event.raw().touches.length !== 1) return Option.none(); return Option.some(event.raw().touches[0]); }; var isFarEnough = function (touch, data) { var distX = Math.abs(touch.clientX - data.x()); var distY = Math.abs(touch.clientY - data.y()); return distX > SIGNIFICANT_MOVE || distY > SIGNIFICANT_MOVE; }; var monitor = function (settings) { var startData = Cell(Option.none()); var longpress = DelayedFunction(function (event) { startData.set(Option.none()); settings.triggerEvent($_801kkqwhjdud7eiq.longpress(), event); }, LONGPRESS_DELAY); var handleTouchstart = function (event) { getTouch(event).each(function (touch) { longpress.cancel(); var data = { x: $_9njj9iwjjdud7eix.constant(touch.clientX), y: $_9njj9iwjjdud7eix.constant(touch.clientY), target: event.target }; longpress.schedule(data); startData.set(Option.some(data)); }); return Option.none(); }; var handleTouchmove = function (event) { longpress.cancel(); getTouch(event).each(function (touch) { startData.get().each(function (data) { if (isFarEnough(touch, data)) startData.set(Option.none()); }); }); return Option.none(); }; var handleTouchend = function (event) { longpress.cancel(); var isSame = function (data) { return $_f1y1rtx9jdud7el7.eq(data.target(), event.target()); }; return startData.get().filter(isSame).map(function (data) { return settings.triggerEvent($_801kkqwhjdud7eiq.tap(), event); }); }; var handlers = $_ettibkxsjdud7emz.wrapAll([ { key: $_brmbwvwijdud7eiu.touchstart(), value: handleTouchstart }, { key: $_brmbwvwijdud7eiu.touchmove(), value: handleTouchmove }, { key: $_brmbwvwijdud7eiu.touchend(), value: handleTouchend } ]); var fireIfReady = function (event, type) { return $_ettibkxsjdud7emz.readOptFrom(handlers, type).bind(function (handler) { return handler(event); }); }; return { fireIfReady: fireIfReady }; }; var $_civf8z144jdud7fs6 = { monitor: monitor }; var monitor$1 = function (editorApi) { var tapEvent = $_civf8z144jdud7fs6.monitor({ triggerEvent: function (type, evt) { editorApi.onTapContent(evt); } }); var onTouchend = function () { return $_5x7hr513xjdud7fqz.bind(editorApi.body(), 'touchend', function (evt) { tapEvent.fireIfReady(evt, 'touchend'); }); }; var onTouchmove = function () { return $_5x7hr513xjdud7fqz.bind(editorApi.body(), 'touchmove', function (evt) { tapEvent.fireIfReady(evt, 'touchmove'); }); }; var fireTouchstart = function (evt) { tapEvent.fireIfReady(evt, 'touchstart'); }; return { fireTouchstart: fireTouchstart, onTouchend: onTouchend, onTouchmove: onTouchmove }; }; var $_cza229143jdud7fs3 = { monitor: monitor$1 }; var isAndroid6 = $_chh2cvwkjdud7ej0.detect().os.version.major >= 6; var initEvents = function (editorApi, toolstrip, alloy) { var tapping = $_cza229143jdud7fs3.monitor(editorApi); var outerDoc = $_dekwe2x3jdud7ekr.owner(toolstrip); var isRanged = function (sel) { return !$_f1y1rtx9jdud7el7.eq(sel.start(), sel.finish()) || sel.soffset() !== sel.foffset(); }; var hasRangeInUi = function () { return $_25580rytjdud7ey7.active(outerDoc).filter(function (input) { return $_50qkdpxkjdud7em6.name(input) === 'input'; }).exists(function (input) { return input.dom().selectionStart !== input.dom().selectionEnd; }); }; var updateMargin = function () { var rangeInContent = editorApi.doc().dom().hasFocus() && editorApi.getSelection().exists(isRanged); alloy.getByDom(toolstrip).each((rangeInContent || hasRangeInUi()) === true ? Toggling.on : Toggling.off); }; var listeners = [ $_5x7hr513xjdud7fqz.bind(editorApi.body(), 'touchstart', function (evt) { editorApi.onTouchContent(); tapping.fireTouchstart(evt); }), tapping.onTouchmove(), tapping.onTouchend(), $_5x7hr513xjdud7fqz.bind(toolstrip, 'touchstart', function (evt) { editorApi.onTouchToolstrip(); }), editorApi.onToReading(function () { $_25580rytjdud7ey7.blur(editorApi.body()); }), editorApi.onToEditing($_9njj9iwjjdud7eix.noop), editorApi.onScrollToCursor(function (tinyEvent) { tinyEvent.preventDefault(); editorApi.getCursorBox().each(function (bounds) { var cWin = editorApi.win(); var isOutside = bounds.top() > cWin.innerHeight || bounds.bottom() > cWin.innerHeight; var cScrollBy = isOutside ? bounds.bottom() - cWin.innerHeight + 50 : 0; if (cScrollBy !== 0) { cWin.scrollTo(cWin.pageXOffset, cWin.pageYOffset + cScrollBy); } }); }) ].concat(isAndroid6 === true ? [] : [ $_5x7hr513xjdud7fqz.bind($_eobgtqxfjdud7elu.fromDom(editorApi.win()), 'blur', function () { alloy.getByDom(toolstrip).each(Toggling.off); }), $_5x7hr513xjdud7fqz.bind(outerDoc, 'select', updateMargin), $_5x7hr513xjdud7fqz.bind(editorApi.doc(), 'selectionchange', updateMargin) ]); var destroy = function () { $_1g2cevwsjdud7ejp.each(listeners, function (l) { l.unbind(); }); }; return { destroy: destroy }; }; var $_bywc5s142jdud7frq = { initEvents: initEvents }; var safeParse = function (element, attribute) { var parsed = parseInt($_2vghk1xrjdud7ems.get(element, attribute), 10); return isNaN(parsed) ? 0 : parsed; }; var $_1bs4n9147jdud7fsm = { safeParse: safeParse }; function NodeValue (is, name) { var get = function (element) { if (!is(element)) throw new Error('Can only get ' + name + ' value of a ' + name + ' node'); return getOption(element).getOr(''); }; var getOptionIE10 = function (element) { try { return getOptionSafe(element); } catch (e) { return Option.none(); } }; var getOptionSafe = function (element) { return is(element) ? Option.from(element.dom().nodeValue) : Option.none(); }; var browser = $_chh2cvwkjdud7ej0.detect().browser; var getOption = browser.isIE() && browser.version.major === 10 ? getOptionIE10 : getOptionSafe; var set = function (element, value) { if (!is(element)) throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node'); element.dom().nodeValue = value; }; return { get: get, getOption: getOption, set: set }; } var api$3 = NodeValue($_50qkdpxkjdud7em6.isText, 'text'); var get$12 = function (element) { return api$3.get(element); }; var getOption = function (element) { return api$3.getOption(element); }; var set$8 = function (element, value) { api$3.set(element, value); }; var $_3k83ka14ajdud7fsz = { get: get$12, getOption: getOption, set: set$8 }; var getEnd = function (element) { return $_50qkdpxkjdud7em6.name(element) === 'img' ? 1 : $_3k83ka14ajdud7fsz.getOption(element).fold(function () { return $_dekwe2x3jdud7ekr.children(element).length; }, function (v) { return v.length; }); }; var isEnd = function (element, offset) { return getEnd(element) === offset; }; var isStart = function (element, offset) { return offset === 0; }; var NBSP = '\xA0'; var isTextNodeWithCursorPosition = function (el) { return $_3k83ka14ajdud7fsz.getOption(el).filter(function (text) { return text.trim().length !== 0 || text.indexOf(NBSP) > -1; }).isSome(); }; var elementsWithCursorPosition = [ 'img', 'br' ]; var isCursorPosition = function (elem) { var hasCursorPosition = isTextNodeWithCursorPosition(elem); return hasCursorPosition || $_1g2cevwsjdud7ejp.contains(elementsWithCursorPosition, $_50qkdpxkjdud7em6.name(elem)); }; var $_68us7a149jdud7fsw = { getEnd: getEnd, isEnd: isEnd, isStart: isStart, isCursorPosition: isCursorPosition }; var adt$4 = $_2ytffsxwjdud7ets.generate([ { 'before': ['element'] }, { 'on': [ 'element', 'offset' ] }, { after: ['element'] } ]); var cata = function (subject, onBefore, onOn, onAfter) { return subject.fold(onBefore, onOn, onAfter); }; var getStart = function (situ) { return situ.fold($_9njj9iwjjdud7eix.identity, $_9njj9iwjjdud7eix.identity, $_9njj9iwjjdud7eix.identity); }; var $_45626b14djdud7ft8 = { before: adt$4.before, on: adt$4.on, after: adt$4.after, cata: cata, getStart: getStart }; var type$1 = $_2ytffsxwjdud7ets.generate([ { domRange: ['rng'] }, { relative: [ 'startSitu', 'finishSitu' ] }, { exact: [ 'start', 'soffset', 'finish', 'foffset' ] } ]); var range$1 = $_8o1q69x4jdud7ekz.immutable('start', 'soffset', 'finish', 'foffset'); var exactFromRange = function (simRange) { return type$1.exact(simRange.start(), simRange.soffset(), simRange.finish(), simRange.foffset()); }; var getStart$1 = function (selection) { return selection.match({ domRange: function (rng) { return $_eobgtqxfjdud7elu.fromDom(rng.startContainer); }, relative: function (startSitu, finishSitu) { return $_45626b14djdud7ft8.getStart(startSitu); }, exact: function (start, soffset, finish, foffset) { return start; } }); }; var getWin = function (selection) { var start = getStart$1(selection); return $_dekwe2x3jdud7ekr.defaultView(start); }; var $_fmfln914cjdud7ft5 = { domRange: type$1.domRange, relative: type$1.relative, exact: type$1.exact, exactFromRange: exactFromRange, range: range$1, getWin: getWin }; var makeRange = function (start, soffset, finish, foffset) { var doc = $_dekwe2x3jdud7ekr.owner(start); var rng = doc.dom().createRange(); rng.setStart(start.dom(), soffset); rng.setEnd(finish.dom(), foffset); return rng; }; var commonAncestorContainer = function (start, soffset, finish, foffset) { var r = makeRange(start, soffset, finish, foffset); return $_eobgtqxfjdud7elu.fromDom(r.commonAncestorContainer); }; var after$2 = function (start, soffset, finish, foffset) { var r = makeRange(start, soffset, finish, foffset); var same = $_f1y1rtx9jdud7el7.eq(start, finish) && soffset === foffset; return r.collapsed && !same; }; var $_ye0rw14fjdud7ftn = { after: after$2, commonAncestorContainer: commonAncestorContainer }; var fromElements = function (elements, scope) { var doc = scope || document; var fragment = doc.createDocumentFragment(); $_1g2cevwsjdud7ejp.each(elements, function (element) { fragment.appendChild(element.dom()); }); return $_eobgtqxfjdud7elu.fromDom(fragment); }; var $_cknvaa14gjdud7ftp = { fromElements: fromElements }; var selectNodeContents = function (win, element) { var rng = win.document.createRange(); selectNodeContentsUsing(rng, element); return rng; }; var selectNodeContentsUsing = function (rng, element) { rng.selectNodeContents(element.dom()); }; var isWithin = function (outerRange, innerRange) { return innerRange.compareBoundaryPoints(outerRange.END_TO_START, outerRange) < 1 && innerRange.compareBoundaryPoints(outerRange.START_TO_END, outerRange) > -1; }; var create$4 = function (win) { return win.document.createRange(); }; var setStart = function (rng, situ) { situ.fold(function (e) { rng.setStartBefore(e.dom()); }, function (e, o) { rng.setStart(e.dom(), o); }, function (e) { rng.setStartAfter(e.dom()); }); }; var setFinish = function (rng, situ) { situ.fold(function (e) { rng.setEndBefore(e.dom()); }, function (e, o) { rng.setEnd(e.dom(), o); }, function (e) { rng.setEndAfter(e.dom()); }); }; var replaceWith = function (rng, fragment) { deleteContents(rng); rng.insertNode(fragment.dom()); }; var relativeToNative = function (win, startSitu, finishSitu) { var range = win.document.createRange(); setStart(range, startSitu); setFinish(range, finishSitu); return range; }; var exactToNative = function (win, start, soffset, finish, foffset) { var rng = win.document.createRange(); rng.setStart(start.dom(), soffset); rng.setEnd(finish.dom(), foffset); return rng; }; var deleteContents = function (rng) { rng.deleteContents(); }; var cloneFragment = function (rng) { var fragment = rng.cloneContents(); return $_eobgtqxfjdud7elu.fromDom(fragment); }; var toRect = function (rect) { return { left: $_9njj9iwjjdud7eix.constant(rect.left), top: $_9njj9iwjjdud7eix.constant(rect.top), right: $_9njj9iwjjdud7eix.constant(rect.right), bottom: $_9njj9iwjjdud7eix.constant(rect.bottom), width: $_9njj9iwjjdud7eix.constant(rect.width), height: $_9njj9iwjjdud7eix.constant(rect.height) }; }; var getFirstRect = function (rng) { var rects = rng.getClientRects(); var rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect(); return rect.width > 0 || rect.height > 0 ? Option.some(rect).map(toRect) : Option.none(); }; var getBounds = function (rng) { var rect = rng.getBoundingClientRect(); return rect.width > 0 || rect.height > 0 ? Option.some(rect).map(toRect) : Option.none(); }; var toString$1 = function (rng) { return rng.toString(); }; var $_5e0i8014hjdud7fts = { create: create$4, replaceWith: replaceWith, selectNodeContents: selectNodeContents, selectNodeContentsUsing: selectNodeContentsUsing, relativeToNative: relativeToNative, exactToNative: exactToNative, deleteContents: deleteContents, cloneFragment: cloneFragment, getFirstRect: getFirstRect, getBounds: getBounds, isWithin: isWithin, toString: toString$1 }; var adt$5 = $_2ytffsxwjdud7ets.generate([ { ltr: [ 'start', 'soffset', 'finish', 'foffset' ] }, { rtl: [ 'start', 'soffset', 'finish', 'foffset' ] } ]); var fromRange = function (win, type, range) { return type($_eobgtqxfjdud7elu.fromDom(range.startContainer), range.startOffset, $_eobgtqxfjdud7elu.fromDom(range.endContainer), range.endOffset); }; var getRanges = function (win, selection) { return selection.match({ domRange: function (rng) { return { ltr: $_9njj9iwjjdud7eix.constant(rng), rtl: Option.none }; }, relative: function (startSitu, finishSitu) { return { ltr: $_2nf0bewljdud7ej2.cached(function () { return $_5e0i8014hjdud7fts.relativeToNative(win, startSitu, finishSitu); }), rtl: $_2nf0bewljdud7ej2.cached(function () { return Option.some($_5e0i8014hjdud7fts.relativeToNative(win, finishSitu, startSitu)); }) }; }, exact: function (start, soffset, finish, foffset) { return { ltr: $_2nf0bewljdud7ej2.cached(function () { return $_5e0i8014hjdud7fts.exactToNative(win, start, soffset, finish, foffset); }), rtl: $_2nf0bewljdud7ej2.cached(function () { return Option.some($_5e0i8014hjdud7fts.exactToNative(win, finish, foffset, start, soffset)); }) }; } }); }; var doDiagnose = function (win, ranges) { var rng = ranges.ltr(); if (rng.collapsed) { var reversed = ranges.rtl().filter(function (rev) { return rev.collapsed === false; }); return reversed.map(function (rev) { return adt$5.rtl($_eobgtqxfjdud7elu.fromDom(rev.endContainer), rev.endOffset, $_eobgtqxfjdud7elu.fromDom(rev.startContainer), rev.startOffset); }).getOrThunk(function () { return fromRange(win, adt$5.ltr, rng); }); } else { return fromRange(win, adt$5.ltr, rng); } }; var diagnose = function (win, selection) { var ranges = getRanges(win, selection); return doDiagnose(win, ranges); }; var asLtrRange = function (win, selection) { var diagnosis = diagnose(win, selection); return diagnosis.match({ ltr: function (start, soffset, finish, foffset) { var rng = win.document.createRange(); rng.setStart(start.dom(), soffset); rng.setEnd(finish.dom(), foffset); return rng; }, rtl: function (start, soffset, finish, foffset) { var rng = win.document.createRange(); rng.setStart(finish.dom(), foffset); rng.setEnd(start.dom(), soffset); return rng; } }); }; var $_76ojt714ijdud7ftx = { ltr: adt$5.ltr, rtl: adt$5.rtl, diagnose: diagnose, asLtrRange: asLtrRange }; var searchForPoint = function (rectForOffset, x, y, maxX, length) { if (length === 0) return 0; else if (x === maxX) return length - 1; var xDelta = maxX; for (var i = 1; i < length; i++) { var rect = rectForOffset(i); var curDeltaX = Math.abs(x - rect.left); if (y > rect.bottom) { } else if (y < rect.top || curDeltaX > xDelta) { return i - 1; } else { xDelta = curDeltaX; } } return 0; }; var inRect = function (rect, x, y) { return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom; }; var $_bqzywk14ljdud7fuc = { inRect: inRect, searchForPoint: searchForPoint }; var locateOffset = function (doc, textnode, x, y, rect) { var rangeForOffset = function (offset) { var r = doc.dom().createRange(); r.setStart(textnode.dom(), offset); r.collapse(true); return r; }; var rectForOffset = function (offset) { var r = rangeForOffset(offset); return r.getBoundingClientRect(); }; var length = $_3k83ka14ajdud7fsz.get(textnode).length; var offset = $_bqzywk14ljdud7fuc.searchForPoint(rectForOffset, x, y, rect.right, length); return rangeForOffset(offset); }; var locate$1 = function (doc, node, x, y) { var r = doc.dom().createRange(); r.selectNode(node.dom()); var rects = r.getClientRects(); var foundRect = $_ak7xq9y0jdud7eu4.findMap(rects, function (rect) { return $_bqzywk14ljdud7fuc.inRect(rect, x, y) ? Option.some(rect) : Option.none(); }); return foundRect.map(function (rect) { return locateOffset(doc, node, x, y, rect); }); }; var $_c6oh7z14mjdud7fue = { locate: locate$1 }; var searchInChildren = function (doc, node, x, y) { var r = doc.dom().createRange(); var nodes = $_dekwe2x3jdud7ekr.children(node); return $_ak7xq9y0jdud7eu4.findMap(nodes, function (n) { r.selectNode(n.dom()); return $_bqzywk14ljdud7fuc.inRect(r.getBoundingClientRect(), x, y) ? locateNode(doc, n, x, y) : Option.none(); }); }; var locateNode = function (doc, node, x, y) { var locator = $_50qkdpxkjdud7em6.isText(node) ? $_c6oh7z14mjdud7fue.locate : searchInChildren; return locator(doc, node, x, y); }; var locate$2 = function (doc, node, x, y) { var r = doc.dom().createRange(); r.selectNode(node.dom()); var rect = r.getBoundingClientRect(); var boundedX = Math.max(rect.left, Math.min(rect.right, x)); var boundedY = Math.max(rect.top, Math.min(rect.bottom, y)); return locateNode(doc, node, boundedX, boundedY); }; var $_fsgwi914kjdud7fu8 = { locate: locate$2 }; var first$3 = function (element) { return $_4j5kdsyvjdud7eyd.descendant(element, $_68us7a149jdud7fsw.isCursorPosition); }; var last$2 = function (element) { return descendantRtl(element, $_68us7a149jdud7fsw.isCursorPosition); }; var descendantRtl = function (scope, predicate) { var descend = function (element) { var children = $_dekwe2x3jdud7ekr.children(element); for (var i = children.length - 1; i >= 0; i--) { var child = children[i]; if (predicate(child)) return Option.some(child); var res = descend(child); if (res.isSome()) return res; } return Option.none(); }; return descend(scope); }; var $_he1hx14ojdud7ful = { first: first$3, last: last$2 }; var COLLAPSE_TO_LEFT = true; var COLLAPSE_TO_RIGHT = false; var getCollapseDirection = function (rect, x) { return x - rect.left < rect.right - x ? COLLAPSE_TO_LEFT : COLLAPSE_TO_RIGHT; }; var createCollapsedNode = function (doc, target, collapseDirection) { var r = doc.dom().createRange(); r.selectNode(target.dom()); r.collapse(collapseDirection); return r; }; var locateInElement = function (doc, node, x) { var cursorRange = doc.dom().createRange(); cursorRange.selectNode(node.dom()); var rect = cursorRange.getBoundingClientRect(); var collapseDirection = getCollapseDirection(rect, x); var f = collapseDirection === COLLAPSE_TO_LEFT ? $_he1hx14ojdud7ful.first : $_he1hx14ojdud7ful.last; return f(node).map(function (target) { return createCollapsedNode(doc, target, collapseDirection); }); }; var locateInEmpty = function (doc, node, x) { var rect = node.dom().getBoundingClientRect(); var collapseDirection = getCollapseDirection(rect, x); return Option.some(createCollapsedNode(doc, node, collapseDirection)); }; var search$1 = function (doc, node, x) { var f = $_dekwe2x3jdud7ekr.children(node).length === 0 ? locateInEmpty : locateInElement; return f(doc, node, x); }; var $_gcpi5c14njdud7fui = { search: search$1 }; var caretPositionFromPoint = function (doc, x, y) { return Option.from(doc.dom().caretPositionFromPoint(x, y)).bind(function (pos) { if (pos.offsetNode === null) return Option.none(); var r = doc.dom().createRange(); r.setStart(pos.offsetNode, pos.offset); r.collapse(); return Option.some(r); }); }; var caretRangeFromPoint = function (doc, x, y) { return Option.from(doc.dom().caretRangeFromPoint(x, y)); }; var searchTextNodes = function (doc, node, x, y) { var r = doc.dom().createRange(); r.selectNode(node.dom()); var rect = r.getBoundingClientRect(); var boundedX = Math.max(rect.left, Math.min(rect.right, x)); var boundedY = Math.max(rect.top, Math.min(rect.bottom, y)); return $_fsgwi914kjdud7fu8.locate(doc, node, boundedX, boundedY); }; var searchFromPoint = function (doc, x, y) { return $_eobgtqxfjdud7elu.fromPoint(doc, x, y).bind(function (elem) { var fallback = function () { return $_gcpi5c14njdud7fui.search(doc, elem, x); }; return $_dekwe2x3jdud7ekr.children(elem).length === 0 ? fallback() : searchTextNodes(doc, elem, x, y).orThunk(fallback); }); }; var availableSearch = document.caretPositionFromPoint ? caretPositionFromPoint : document.caretRangeFromPoint ? caretRangeFromPoint : searchFromPoint; var fromPoint$1 = function (win, x, y) { var doc = $_eobgtqxfjdud7elu.fromDom(win.document); return availableSearch(doc, x, y).map(function (rng) { return $_fmfln914cjdud7ft5.range($_eobgtqxfjdud7elu.fromDom(rng.startContainer), rng.startOffset, $_eobgtqxfjdud7elu.fromDom(rng.endContainer), rng.endOffset); }); }; var $_6sjtn814jjdud7fu4 = { fromPoint: fromPoint$1 }; var withinContainer = function (win, ancestor, outerRange, selector) { var innerRange = $_5e0i8014hjdud7fts.create(win); var self = $_1t43jfxejdud7elq.is(ancestor, selector) ? [ancestor] : []; var elements = self.concat($_df6s98zvjdud7f39.descendants(ancestor, selector)); return $_1g2cevwsjdud7ejp.filter(elements, function (elem) { $_5e0i8014hjdud7fts.selectNodeContentsUsing(innerRange, elem); return $_5e0i8014hjdud7fts.isWithin(outerRange, innerRange); }); }; var find$4 = function (win, selection, selector) { var outerRange = $_76ojt714ijdud7ftx.asLtrRange(win, selection); var ancestor = $_eobgtqxfjdud7elu.fromDom(outerRange.commonAncestorContainer); return $_50qkdpxkjdud7em6.isElement(ancestor) ? withinContainer(win, ancestor, outerRange, selector) : []; }; var $_cjqhl14pjdud7fun = { find: find$4 }; var beforeSpecial = function (element, offset) { var name = $_50qkdpxkjdud7em6.name(element); if ('input' === name) return $_45626b14djdud7ft8.after(element); else if (!$_1g2cevwsjdud7ejp.contains([ 'br', 'img' ], name)) return $_45626b14djdud7ft8.on(element, offset); else return offset === 0 ? $_45626b14djdud7ft8.before(element) : $_45626b14djdud7ft8.after(element); }; var preprocessRelative = function (startSitu, finishSitu) { var start = startSitu.fold($_45626b14djdud7ft8.before, beforeSpecial, $_45626b14djdud7ft8.after); var finish = finishSitu.fold($_45626b14djdud7ft8.before, beforeSpecial, $_45626b14djdud7ft8.after); return $_fmfln914cjdud7ft5.relative(start, finish); }; var preprocessExact = function (start, soffset, finish, foffset) { var startSitu = beforeSpecial(start, soffset); var finishSitu = beforeSpecial(finish, foffset); return $_fmfln914cjdud7ft5.relative(startSitu, finishSitu); }; var preprocess = function (selection) { return selection.match({ domRange: function (rng) { var start = $_eobgtqxfjdud7elu.fromDom(rng.startContainer); var finish = $_eobgtqxfjdud7elu.fromDom(rng.endContainer); return preprocessExact(start, rng.startOffset, finish, rng.endOffset); }, relative: preprocessRelative, exact: preprocessExact }); }; var $_dz1q1l14qjdud7fur = { beforeSpecial: beforeSpecial, preprocess: preprocess, preprocessRelative: preprocessRelative, preprocessExact: preprocessExact }; var doSetNativeRange = function (win, rng) { Option.from(win.getSelection()).each(function (selection) { selection.removeAllRanges(); selection.addRange(rng); }); }; var doSetRange = function (win, start, soffset, finish, foffset) { var rng = $_5e0i8014hjdud7fts.exactToNative(win, start, soffset, finish, foffset); doSetNativeRange(win, rng); }; var findWithin = function (win, selection, selector) { return $_cjqhl14pjdud7fun.find(win, selection, selector); }; var setRangeFromRelative = function (win, relative) { return $_76ojt714ijdud7ftx.diagnose(win, relative).match({ ltr: function (start, soffset, finish, foffset) { doSetRange(win, start, soffset, finish, foffset); }, rtl: function (start, soffset, finish, foffset) { var selection = win.getSelection(); if (selection.extend) { selection.collapse(start.dom(), soffset); selection.extend(finish.dom(), foffset); } else { doSetRange(win, finish, foffset, start, soffset); } } }); }; var setExact = function (win, start, soffset, finish, foffset) { var relative = $_dz1q1l14qjdud7fur.preprocessExact(start, soffset, finish, foffset); setRangeFromRelative(win, relative); }; var setRelative = function (win, startSitu, finishSitu) { var relative = $_dz1q1l14qjdud7fur.preprocessRelative(startSitu, finishSitu); setRangeFromRelative(win, relative); }; var toNative = function (selection) { var win = $_fmfln914cjdud7ft5.getWin(selection).dom(); var getDomRange = function (start, soffset, finish, foffset) { return $_5e0i8014hjdud7fts.exactToNative(win, start, soffset, finish, foffset); }; var filtered = $_dz1q1l14qjdud7fur.preprocess(selection); return $_76ojt714ijdud7ftx.diagnose(win, filtered).match({ ltr: getDomRange, rtl: getDomRange }); }; var readRange = function (selection) { if (selection.rangeCount > 0) { var firstRng = selection.getRangeAt(0); var lastRng = selection.getRangeAt(selection.rangeCount - 1); return Option.some($_fmfln914cjdud7ft5.range($_eobgtqxfjdud7elu.fromDom(firstRng.startContainer), firstRng.startOffset, $_eobgtqxfjdud7elu.fromDom(lastRng.endContainer), lastRng.endOffset)); } else { return Option.none(); } }; var doGetExact = function (selection) { var anchorNode = $_eobgtqxfjdud7elu.fromDom(selection.anchorNode); var focusNode = $_eobgtqxfjdud7elu.fromDom(selection.focusNode); return $_ye0rw14fjdud7ftn.after(anchorNode, selection.anchorOffset, focusNode, selection.focusOffset) ? Option.some($_fmfln914cjdud7ft5.range($_eobgtqxfjdud7elu.fromDom(selection.anchorNode), selection.anchorOffset, $_eobgtqxfjdud7elu.fromDom(selection.focusNode), selection.focusOffset)) : readRange(selection); }; var setToElement = function (win, element) { var rng = $_5e0i8014hjdud7fts.selectNodeContents(win, element); doSetNativeRange(win, rng); }; var forElement = function (win, element) { var rng = $_5e0i8014hjdud7fts.selectNodeContents(win, element); return $_fmfln914cjdud7ft5.range($_eobgtqxfjdud7elu.fromDom(rng.startContainer), rng.startOffset, $_eobgtqxfjdud7elu.fromDom(rng.endContainer), rng.endOffset); }; var getExact = function (win) { var selection = win.getSelection(); return selection.rangeCount > 0 ? doGetExact(selection) : Option.none(); }; var get$13 = function (win) { return getExact(win).map(function (range) { return $_fmfln914cjdud7ft5.exact(range.start(), range.soffset(), range.finish(), range.foffset()); }); }; var getFirstRect$1 = function (win, selection) { var rng = $_76ojt714ijdud7ftx.asLtrRange(win, selection); return $_5e0i8014hjdud7fts.getFirstRect(rng); }; var getBounds$1 = function (win, selection) { var rng = $_76ojt714ijdud7ftx.asLtrRange(win, selection); return $_5e0i8014hjdud7fts.getBounds(rng); }; var getAtPoint = function (win, x, y) { return $_6sjtn814jjdud7fu4.fromPoint(win, x, y); }; var getAsString = function (win, selection) { var rng = $_76ojt714ijdud7ftx.asLtrRange(win, selection); return $_5e0i8014hjdud7fts.toString(rng); }; var clear$1 = function (win) { var selection = win.getSelection(); selection.removeAllRanges(); }; var clone$3 = function (win, selection) { var rng = $_76ojt714ijdud7ftx.asLtrRange(win, selection); return $_5e0i8014hjdud7fts.cloneFragment(rng); }; var replace = function (win, selection, elements) { var rng = $_76ojt714ijdud7ftx.asLtrRange(win, selection); var fragment = $_cknvaa14gjdud7ftp.fromElements(elements, win.document); $_5e0i8014hjdud7fts.replaceWith(rng, fragment); }; var deleteAt = function (win, selection) { var rng = $_76ojt714ijdud7ftx.asLtrRange(win, selection); $_5e0i8014hjdud7fts.deleteContents(rng); }; var isCollapsed = function (start, soffset, finish, foffset) { return $_f1y1rtx9jdud7el7.eq(start, finish) && soffset === foffset; }; var $_af4mx314ejdud7ftd = { setExact: setExact, getExact: getExact, get: get$13, setRelative: setRelative, toNative: toNative, setToElement: setToElement, clear: clear$1, clone: clone$3, replace: replace, deleteAt: deleteAt, forElement: forElement, getFirstRect: getFirstRect$1, getBounds: getBounds$1, getAtPoint: getAtPoint, findWithin: findWithin, getAsString: getAsString, isCollapsed: isCollapsed }; var COLLAPSED_WIDTH = 2; var collapsedRect = function (rect) { return { left: rect.left, top: rect.top, right: rect.right, bottom: rect.bottom, width: $_9njj9iwjjdud7eix.constant(COLLAPSED_WIDTH), height: rect.height }; }; var toRect$1 = function (rawRect) { return { left: $_9njj9iwjjdud7eix.constant(rawRect.left), top: $_9njj9iwjjdud7eix.constant(rawRect.top), right: $_9njj9iwjjdud7eix.constant(rawRect.right), bottom: $_9njj9iwjjdud7eix.constant(rawRect.bottom), width: $_9njj9iwjjdud7eix.constant(rawRect.width), height: $_9njj9iwjjdud7eix.constant(rawRect.height) }; }; var getRectsFromRange = function (range) { if (!range.collapsed) { return $_1g2cevwsjdud7ejp.map(range.getClientRects(), toRect$1); } else { var start_1 = $_eobgtqxfjdud7elu.fromDom(range.startContainer); return $_dekwe2x3jdud7ekr.parent(start_1).bind(function (parent) { var selection = $_fmfln914cjdud7ft5.exact(start_1, range.startOffset, parent, $_68us7a149jdud7fsw.getEnd(parent)); var optRect = $_af4mx314ejdud7ftd.getFirstRect(range.startContainer.ownerDocument.defaultView, selection); return optRect.map(collapsedRect).map($_1g2cevwsjdud7ejp.pure); }).getOr([]); } }; var getRectangles = function (cWin) { var sel = cWin.getSelection(); return sel !== undefined && sel.rangeCount > 0 ? getRectsFromRange(sel.getRangeAt(0)) : []; }; var $_5lp8kt148jdud7fso = { getRectangles: getRectangles }; var autocompleteHack = function () { return function (f) { setTimeout(function () { f(); }, 0); }; }; var resume = function (cWin) { cWin.focus(); var iBody = $_eobgtqxfjdud7elu.fromDom(cWin.document.body); var inInput = $_25580rytjdud7ey7.active().exists(function (elem) { return $_1g2cevwsjdud7ejp.contains([ 'input', 'textarea' ], $_50qkdpxkjdud7em6.name(elem)); }); var transaction = inInput ? autocompleteHack() : $_9njj9iwjjdud7eix.apply; transaction(function () { $_25580rytjdud7ey7.active().each($_25580rytjdud7ey7.blur); $_25580rytjdud7ey7.focus(iBody); }); }; var $_5gl66x14rjdud7fuu = { resume: resume }; var EXTRA_SPACING = 50; var data = 'data-' + $_5qzh4bzejdud7f0y.resolve('last-outer-height'); var setLastHeight = function (cBody, value) { $_2vghk1xrjdud7ems.set(cBody, data, value); }; var getLastHeight = function (cBody) { return $_1bs4n9147jdud7fsm.safeParse(cBody, data); }; var getBoundsFrom = function (rect) { return { top: $_9njj9iwjjdud7eix.constant(rect.top()), bottom: $_9njj9iwjjdud7eix.constant(rect.top() + rect.height()) }; }; var getBounds$2 = function (cWin) { var rects = $_5lp8kt148jdud7fso.getRectangles(cWin); return rects.length > 0 ? Option.some(rects[0]).map(getBoundsFrom) : Option.none(); }; var findDelta = function (outerWindow, cBody) { var last = getLastHeight(cBody); var current = outerWindow.innerHeight; return last > current ? Option.some(last - current) : Option.none(); }; var calculate = function (cWin, bounds, delta) { var isOutside = bounds.top() > cWin.innerHeight || bounds.bottom() > cWin.innerHeight; return isOutside ? Math.min(delta, bounds.bottom() - cWin.innerHeight + EXTRA_SPACING) : 0; }; var setup$1 = function (outerWindow, cWin) { var cBody = $_eobgtqxfjdud7elu.fromDom(cWin.document.body); var toEditing = function () { $_5gl66x14rjdud7fuu.resume(cWin); }; var onResize = $_5x7hr513xjdud7fqz.bind($_eobgtqxfjdud7elu.fromDom(outerWindow), 'resize', function () { findDelta(outerWindow, cBody).each(function (delta) { getBounds$2(cWin).each(function (bounds) { var cScrollBy = calculate(cWin, bounds, delta); if (cScrollBy !== 0) { cWin.scrollTo(cWin.pageXOffset, cWin.pageYOffset + cScrollBy); } }); }); setLastHeight(cBody, outerWindow.innerHeight); }); setLastHeight(cBody, outerWindow.innerHeight); var destroy = function () { onResize.unbind(); }; return { toEditing: toEditing, destroy: destroy }; }; var $_d23om146jdud7fsf = { setup: setup$1 }; var getBodyFromFrame = function (frame) { return Option.some($_eobgtqxfjdud7elu.fromDom(frame.dom().contentWindow.document.body)); }; var getDocFromFrame = function (frame) { return Option.some($_eobgtqxfjdud7elu.fromDom(frame.dom().contentWindow.document)); }; var getWinFromFrame = function (frame) { return Option.from(frame.dom().contentWindow); }; var getSelectionFromFrame = function (frame) { var optWin = getWinFromFrame(frame); return optWin.bind($_af4mx314ejdud7ftd.getExact); }; var getFrame = function (editor) { return editor.getFrame(); }; var getOrDerive = function (name, f) { return function (editor) { var g = editor[name].getOrThunk(function () { var frame = getFrame(editor); return function () { return f(frame); }; }); return g(); }; }; var getOrListen = function (editor, doc, name, type) { return editor[name].getOrThunk(function () { return function (handler) { return $_5x7hr513xjdud7fqz.bind(doc, type, handler); }; }); }; var toRect$2 = function (rect) { return { left: $_9njj9iwjjdud7eix.constant(rect.left), top: $_9njj9iwjjdud7eix.constant(rect.top), right: $_9njj9iwjjdud7eix.constant(rect.right), bottom: $_9njj9iwjjdud7eix.constant(rect.bottom), width: $_9njj9iwjjdud7eix.constant(rect.width), height: $_9njj9iwjjdud7eix.constant(rect.height) }; }; var getActiveApi = function (editor) { var frame = getFrame(editor); var tryFallbackBox = function (win) { var isCollapsed = function (sel) { return $_f1y1rtx9jdud7el7.eq(sel.start(), sel.finish()) && sel.soffset() === sel.foffset(); }; var toStartRect = function (sel) { var rect = sel.start().dom().getBoundingClientRect(); return rect.width > 0 || rect.height > 0 ? Option.some(rect).map(toRect$2) : Option.none(); }; return $_af4mx314ejdud7ftd.getExact(win).filter(isCollapsed).bind(toStartRect); }; return getBodyFromFrame(frame).bind(function (body) { return getDocFromFrame(frame).bind(function (doc) { return getWinFromFrame(frame).map(function (win) { var html = $_eobgtqxfjdud7elu.fromDom(doc.dom().documentElement); var getCursorBox = editor.getCursorBox.getOrThunk(function () { return function () { return $_af4mx314ejdud7ftd.get(win).bind(function (sel) { return $_af4mx314ejdud7ftd.getFirstRect(win, sel).orThunk(function () { return tryFallbackBox(win); }); }); }; }); var setSelection = editor.setSelection.getOrThunk(function () { return function (start, soffset, finish, foffset) { $_af4mx314ejdud7ftd.setExact(win, start, soffset, finish, foffset); }; }); var clearSelection = editor.clearSelection.getOrThunk(function () { return function () { $_af4mx314ejdud7ftd.clear(win); }; }); return { body: $_9njj9iwjjdud7eix.constant(body), doc: $_9njj9iwjjdud7eix.constant(doc), win: $_9njj9iwjjdud7eix.constant(win), html: $_9njj9iwjjdud7eix.constant(html), getSelection: $_9njj9iwjjdud7eix.curry(getSelectionFromFrame, frame), setSelection: setSelection, clearSelection: clearSelection, frame: $_9njj9iwjjdud7eix.constant(frame), onKeyup: getOrListen(editor, doc, 'onKeyup', 'keyup'), onNodeChanged: getOrListen(editor, doc, 'onNodeChanged', 'selectionchange'), onDomChanged: editor.onDomChanged, onScrollToCursor: editor.onScrollToCursor, onScrollToElement: editor.onScrollToElement, onToReading: editor.onToReading, onToEditing: editor.onToEditing, onToolbarScrollStart: editor.onToolbarScrollStart, onTouchContent: editor.onTouchContent, onTapContent: editor.onTapContent, onTouchToolstrip: editor.onTouchToolstrip, getCursorBox: getCursorBox }; }); }); }); }; var $_8faw2r14sjdud7fv0 = { getBody: getOrDerive('getBody', getBodyFromFrame), getDoc: getOrDerive('getDoc', getDocFromFrame), getWin: getOrDerive('getWin', getWinFromFrame), getSelection: getOrDerive('getSelection', getSelectionFromFrame), getFrame: getFrame, getActiveApi: getActiveApi }; var attr = 'data-ephox-mobile-fullscreen-style'; var siblingStyles = 'display:none!important;'; var ancestorPosition = 'position:absolute!important;'; var ancestorStyles = 'top:0!important;left:0!important;margin:0' + '!important;padding:0!important;width:100%!important;'; var bgFallback = 'background-color:rgb(255,255,255)!important;'; var isAndroid = $_chh2cvwkjdud7ej0.detect().os.isAndroid(); var matchColor = function (editorBody) { var color = $_btgbcy103jdud7f3t.get(editorBody, 'background-color'); return color !== undefined && color !== '' ? 'background-color:' + color + '!important' : bgFallback; }; var clobberStyles = function (container, editorBody) { var gatherSibilings = function (element) { var siblings = $_df6s98zvjdud7f39.siblings(element, '*'); return siblings; }; var clobber = function (clobberStyle) { return function (element) { var styles = $_2vghk1xrjdud7ems.get(element, 'style'); var backup = styles === undefined ? 'no-styles' : styles.trim(); if (backup === clobberStyle) { return; } else { $_2vghk1xrjdud7ems.set(element, attr, backup); $_2vghk1xrjdud7ems.set(element, 'style', clobberStyle); } }; }; var ancestors = $_df6s98zvjdud7f39.ancestors(container, '*'); var siblings = $_1g2cevwsjdud7ejp.bind(ancestors, gatherSibilings); var bgColor = matchColor(editorBody); $_1g2cevwsjdud7ejp.each(siblings, clobber(siblingStyles)); $_1g2cevwsjdud7ejp.each(ancestors, clobber(ancestorPosition + ancestorStyles + bgColor)); var containerStyles = isAndroid === true ? '' : ancestorPosition; clobber(containerStyles + ancestorStyles + bgColor)(container); }; var restoreStyles = function () { var clobberedEls = $_df6s98zvjdud7f39.all('[' + attr + ']'); $_1g2cevwsjdud7ejp.each(clobberedEls, function (element) { var restore = $_2vghk1xrjdud7ems.get(element, attr); if (restore !== 'no-styles') { $_2vghk1xrjdud7ems.set(element, 'style', restore); } else { $_2vghk1xrjdud7ems.remove(element, 'style'); } $_2vghk1xrjdud7ems.remove(element, attr); }); }; var $_fjm65f14tjdud7fv9 = { clobberStyles: clobberStyles, restoreStyles: restoreStyles }; var tag = function () { var head = $_a3quyizxjdud7f3e.first('head').getOrDie(); var nu = function () { var meta = $_eobgtqxfjdud7elu.fromTag('meta'); $_2vghk1xrjdud7ems.set(meta, 'name', 'viewport'); $_ftkbb5x2jdud7ekp.append(head, meta); return meta; }; var element = $_a3quyizxjdud7f3e.first('meta[name="viewport"]').getOrThunk(nu); var backup = $_2vghk1xrjdud7ems.get(element, 'content'); var maximize = function () { $_2vghk1xrjdud7ems.set(element, 'content', 'width=device-width, initial-scale=1.0, user-scalable=no, maximum-scale=1.0'); }; var restore = function () { if (backup !== undefined && backup !== null && backup.length > 0) { $_2vghk1xrjdud7ems.set(element, 'content', backup); } else { $_2vghk1xrjdud7ems.set(element, 'content', 'user-scalable=yes'); } }; return { maximize: maximize, restore: restore }; }; var $_9dstax14ujdud7fvm = { tag: tag }; var create$5 = function (platform, mask) { var meta = $_9dstax14ujdud7fvm.tag(); var androidApi = $_9fhyae12ojdud7fij.api(); var androidEvents = $_9fhyae12ojdud7fij.api(); var enter = function () { mask.hide(); $_1x3ogvynjdud7exn.add(platform.container, $_5qzh4bzejdud7f0y.resolve('fullscreen-maximized')); $_1x3ogvynjdud7exn.add(platform.container, $_5qzh4bzejdud7f0y.resolve('android-maximized')); meta.maximize(); $_1x3ogvynjdud7exn.add(platform.body, $_5qzh4bzejdud7f0y.resolve('android-scroll-reload')); androidApi.set($_d23om146jdud7fsf.setup(platform.win, $_8faw2r14sjdud7fv0.getWin(platform.editor).getOrDie('no'))); $_8faw2r14sjdud7fv0.getActiveApi(platform.editor).each(function (editorApi) { $_fjm65f14tjdud7fv9.clobberStyles(platform.container, editorApi.body()); androidEvents.set($_bywc5s142jdud7frq.initEvents(editorApi, platform.toolstrip, platform.alloy)); }); }; var exit = function () { meta.restore(); mask.show(); $_1x3ogvynjdud7exn.remove(platform.container, $_5qzh4bzejdud7f0y.resolve('fullscreen-maximized')); $_1x3ogvynjdud7exn.remove(platform.container, $_5qzh4bzejdud7f0y.resolve('android-maximized')); $_fjm65f14tjdud7fv9.restoreStyles(); $_1x3ogvynjdud7exn.remove(platform.body, $_5qzh4bzejdud7f0y.resolve('android-scroll-reload')); androidEvents.clear(); androidApi.clear(); }; return { enter: enter, exit: exit }; }; var $_zs0oa141jdud7frl = { create: create$5 }; var adaptable = function (fn, rate) { var timer = null; var args = null; var cancel = function () { if (timer !== null) { clearTimeout(timer); timer = null; args = null; } }; var throttle = function () { args = arguments; if (timer === null) { timer = setTimeout(function () { fn.apply(null, args); timer = null; args = null; }, rate); } }; return { cancel: cancel, throttle: throttle }; }; var first$4 = function (fn, rate) { var timer = null; var cancel = function () { if (timer !== null) { clearTimeout(timer); timer = null; } }; var throttle = function () { var args = arguments; if (timer === null) { timer = setTimeout(function () { fn.apply(null, args); timer = null; args = null; }, rate); } }; return { cancel: cancel, throttle: throttle }; }; var last$3 = function (fn, rate) { var timer = null; var cancel = function () { if (timer !== null) { clearTimeout(timer); timer = null; } }; var throttle = function () { var args = arguments; if (timer !== null) clearTimeout(timer); timer = setTimeout(function () { fn.apply(null, args); timer = null; args = null; }, rate); }; return { cancel: cancel, throttle: throttle }; }; var $_dfio3v14wjdud7fvy = { adaptable: adaptable, first: first$4, last: last$3 }; var sketch$10 = function (onView, translate) { var memIcon = $_81ial811rjdud7fdw.record(Container.sketch({ dom: $_5oi2c7113jdud7fab.dom(''), containerBehaviours: $_ax1gfoy2jdud7eu7.derive([Toggling.config({ toggleClass: $_5qzh4bzejdud7f0y.resolve('mask-tap-icon-selected'), toggleOnExecute: false })]) })); var onViewThrottle = $_dfio3v14wjdud7fvy.first(onView, 200); return Container.sketch({ dom: $_5oi2c7113jdud7fab.dom('
'), components: [Container.sketch({ dom: $_5oi2c7113jdud7fab.dom('
'), components: [Button.sketch({ dom: $_5oi2c7113jdud7fab.dom('
'), components: [memIcon.asSpec()], action: function (button) { onViewThrottle.throttle(); }, buttonBehaviours: $_ax1gfoy2jdud7eu7.derive([Toggling.config({ toggleClass: $_5qzh4bzejdud7f0y.resolve('mask-tap-icon-selected') })]) })] })] }); }; var $_ddqihl14vjdud7fvr = { sketch: sketch$10 }; var MobileSchema = $_13hkebyejdud7ewm.objOf([ $_euqmtby7jdud7ev7.strictObjOf('editor', [ $_euqmtby7jdud7ev7.strict('getFrame'), $_euqmtby7jdud7ev7.option('getBody'), $_euqmtby7jdud7ev7.option('getDoc'), $_euqmtby7jdud7ev7.option('getWin'), $_euqmtby7jdud7ev7.option('getSelection'), $_euqmtby7jdud7ev7.option('setSelection'), $_euqmtby7jdud7ev7.option('clearSelection'), $_euqmtby7jdud7ev7.option('cursorSaver'), $_euqmtby7jdud7ev7.option('onKeyup'), $_euqmtby7jdud7ev7.option('onNodeChanged'), $_euqmtby7jdud7ev7.option('getCursorBox'), $_euqmtby7jdud7ev7.strict('onDomChanged'), $_euqmtby7jdud7ev7.defaulted('onTouchContent', $_9njj9iwjjdud7eix.noop), $_euqmtby7jdud7ev7.defaulted('onTapContent', $_9njj9iwjjdud7eix.noop), $_euqmtby7jdud7ev7.defaulted('onTouchToolstrip', $_9njj9iwjjdud7eix.noop), $_euqmtby7jdud7ev7.defaulted('onScrollToCursor', $_9njj9iwjjdud7eix.constant({ unbind: $_9njj9iwjjdud7eix.noop })), $_euqmtby7jdud7ev7.defaulted('onScrollToElement', $_9njj9iwjjdud7eix.constant({ unbind: $_9njj9iwjjdud7eix.noop })), $_euqmtby7jdud7ev7.defaulted('onToEditing', $_9njj9iwjjdud7eix.constant({ unbind: $_9njj9iwjjdud7eix.noop })), $_euqmtby7jdud7ev7.defaulted('onToReading', $_9njj9iwjjdud7eix.constant({ unbind: $_9njj9iwjjdud7eix.noop })), $_euqmtby7jdud7ev7.defaulted('onToolbarScrollStart', $_9njj9iwjjdud7eix.identity) ]), $_euqmtby7jdud7ev7.strict('socket'), $_euqmtby7jdud7ev7.strict('toolstrip'), $_euqmtby7jdud7ev7.strict('dropup'), $_euqmtby7jdud7ev7.strict('toolbar'), $_euqmtby7jdud7ev7.strict('container'), $_euqmtby7jdud7ev7.strict('alloy'), $_euqmtby7jdud7ev7.state('win', function (spec) { return $_dekwe2x3jdud7ekr.owner(spec.socket).dom().defaultView; }), $_euqmtby7jdud7ev7.state('body', function (spec) { return $_eobgtqxfjdud7elu.fromDom(spec.socket.dom().ownerDocument.body); }), $_euqmtby7jdud7ev7.defaulted('translate', $_9njj9iwjjdud7eix.identity), $_euqmtby7jdud7ev7.defaulted('setReadOnly', $_9njj9iwjjdud7eix.noop) ]); var produce = function (raw) { var mobile = $_13hkebyejdud7ewm.asRawOrDie('Getting AndroidWebapp schema', MobileSchema, raw); $_btgbcy103jdud7f3t.set(mobile.toolstrip, 'width', '100%'); var onTap = function () { mobile.setReadOnly(true); mode.enter(); }; var mask = $_ap2ej712tjdud7fjl.build($_ddqihl14vjdud7fvr.sketch(onTap, mobile.translate)); mobile.alloy.add(mask); var maskApi = { show: function () { mobile.alloy.add(mask); }, hide: function () { mobile.alloy.remove(mask); } }; $_ftkbb5x2jdud7ekp.append(mobile.container, mask.element()); var mode = $_zs0oa141jdud7frl.create(mobile, maskApi); return { setReadOnly: mobile.setReadOnly, refreshStructure: $_9njj9iwjjdud7eix.noop, enter: mode.enter, exit: mode.exit, destroy: $_9njj9iwjjdud7eix.noop }; }; var $_bip6sv140jdud7fra = { produce: produce }; var schema$14 = [ $_euqmtby7jdud7ev7.defaulted('shell', true), $_c7jpu210ojdud7f7a.field('toolbarBehaviours', [Replacing]) ]; var enhanceGroups = function (detail) { return { behaviours: $_ax1gfoy2jdud7eu7.derive([Replacing.config({})]) }; }; var partTypes$1 = [$_7938qf10vjdud7f8n.optional({ name: 'groups', overrides: enhanceGroups })]; var $_u7c81150jdud7fwn = { name: $_9njj9iwjjdud7eix.constant('Toolbar'), schema: $_9njj9iwjjdud7eix.constant(schema$14), parts: $_9njj9iwjjdud7eix.constant(partTypes$1) }; var factory$4 = function (detail, components, spec, _externals) { var setGroups = function (toolbar, groups) { getGroupContainer(toolbar).fold(function () { console.error('Toolbar was defined to not be a shell, but no groups container was specified in components'); throw new Error('Toolbar was defined to not be a shell, but no groups container was specified in components'); }, function (container) { Replacing.set(container, groups); }); }; var getGroupContainer = function (component) { return detail.shell() ? Option.some(component) : $_436kgb10tjdud7f7y.getPart(component, detail, 'groups'); }; var extra = detail.shell() ? { behaviours: [Replacing.config({})], components: [] } : { behaviours: [], components: components }; return { uid: detail.uid(), dom: detail.dom(), components: extra.components, behaviours: $_73qnwowyjdud7ek9.deepMerge($_ax1gfoy2jdud7eu7.derive(extra.behaviours), $_c7jpu210ojdud7f7a.get(detail.toolbarBehaviours())), apis: { setGroups: setGroups }, domModification: { attributes: { role: 'group' } } }; }; var Toolbar = $_3inyq310pjdud7f7f.composite({ name: 'Toolbar', configFields: $_u7c81150jdud7fwn.schema(), partFields: $_u7c81150jdud7fwn.parts(), factory: factory$4, apis: { setGroups: function (apis, toolbar, groups) { apis.setGroups(toolbar, groups); } } }); var schema$15 = [ $_euqmtby7jdud7ev7.strict('items'), $_etkinez6jdud7ezi.markers(['itemClass']), $_c7jpu210ojdud7f7a.field('tgroupBehaviours', [Keying]) ]; var partTypes$2 = [$_7938qf10vjdud7f8n.group({ name: 'items', unit: 'item', overrides: function (detail) { return { domModification: { classes: [detail.markers().itemClass()] } }; } })]; var $_3to63152jdud7fwu = { name: $_9njj9iwjjdud7eix.constant('ToolbarGroup'), schema: $_9njj9iwjjdud7eix.constant(schema$15), parts: $_9njj9iwjjdud7eix.constant(partTypes$2) }; var factory$5 = function (detail, components, spec, _externals) { return $_73qnwowyjdud7ek9.deepMerge({ dom: { attributes: { role: 'toolbar' } } }, { uid: detail.uid(), dom: detail.dom(), components: components, behaviours: $_73qnwowyjdud7ek9.deepMerge($_ax1gfoy2jdud7eu7.derive([Keying.config({ mode: 'flow', selector: '.' + detail.markers().itemClass() })]), $_c7jpu210ojdud7f7a.get(detail.tgroupBehaviours())), 'debug.sketcher': spec['debug.sketcher'] }); }; var ToolbarGroup = $_3inyq310pjdud7f7f.composite({ name: 'ToolbarGroup', configFields: $_3to63152jdud7fwu.schema(), partFields: $_3to63152jdud7fwu.parts(), factory: factory$5 }); var dataHorizontal = 'data-' + $_5qzh4bzejdud7f0y.resolve('horizontal-scroll'); var canScrollVertically = function (container) { container.dom().scrollTop = 1; var result = container.dom().scrollTop !== 0; container.dom().scrollTop = 0; return result; }; var canScrollHorizontally = function (container) { container.dom().scrollLeft = 1; var result = container.dom().scrollLeft !== 0; container.dom().scrollLeft = 0; return result; }; var hasVerticalScroll = function (container) { return container.dom().scrollTop > 0 || canScrollVertically(container); }; var hasHorizontalScroll = function (container) { return container.dom().scrollLeft > 0 || canScrollHorizontally(container); }; var markAsHorizontal = function (container) { $_2vghk1xrjdud7ems.set(container, dataHorizontal, 'true'); }; var hasScroll = function (container) { return $_2vghk1xrjdud7ems.get(container, dataHorizontal) === 'true' ? hasHorizontalScroll : hasVerticalScroll; }; var exclusive = function (scope, selector) { return $_5x7hr513xjdud7fqz.bind(scope, 'touchmove', function (event) { $_a3quyizxjdud7f3e.closest(event.target(), selector).filter(hasScroll).fold(function () { event.raw().preventDefault(); }, $_9njj9iwjjdud7eix.noop); }); }; var $_dvdycr153jdud7fwy = { exclusive: exclusive, markAsHorizontal: markAsHorizontal }; function ScrollingToolbar () { var makeGroup = function (gSpec) { var scrollClass = gSpec.scrollable === true ? '${prefix}-toolbar-scrollable-group' : ''; return { dom: $_5oi2c7113jdud7fab.dom('
'), tgroupBehaviours: $_ax1gfoy2jdud7eu7.derive([$_6jfkt3126jdud7ffy.config('adhoc-scrollable-toolbar', gSpec.scrollable === true ? [$_5xcuyiy4jdud7eur.runOnInit(function (component, simulatedEvent) { $_btgbcy103jdud7f3t.set(component.element(), 'overflow-x', 'auto'); $_dvdycr153jdud7fwy.markAsHorizontal(component.element()); $_bhtyzh13ujdud7fqk.register(component.element()); })] : [])]), components: [Container.sketch({ components: [ToolbarGroup.parts().items({})] })], markers: { itemClass: $_5qzh4bzejdud7f0y.resolve('toolbar-group-item') }, items: gSpec.items }; }; var toolbar = $_ap2ej712tjdud7fjl.build(Toolbar.sketch({ dom: $_5oi2c7113jdud7fab.dom('
'), components: [Toolbar.parts().groups({})], toolbarBehaviours: $_ax1gfoy2jdud7eu7.derive([ Toggling.config({ toggleClass: $_5qzh4bzejdud7f0y.resolve('context-toolbar'), toggleOnExecute: false, aria: { mode: 'none' } }), Keying.config({ mode: 'cyclic' }) ]), shell: true })); var wrapper = $_ap2ej712tjdud7fjl.build(Container.sketch({ dom: { classes: [$_5qzh4bzejdud7f0y.resolve('toolstrip')] }, components: [$_ap2ej712tjdud7fjl.premade(toolbar)], containerBehaviours: $_ax1gfoy2jdud7eu7.derive([Toggling.config({ toggleClass: $_5qzh4bzejdud7f0y.resolve('android-selection-context-toolbar'), toggleOnExecute: false })]) })); var resetGroups = function () { Toolbar.setGroups(toolbar, initGroups.get()); Toggling.off(toolbar); }; var initGroups = Cell([]); var setGroups = function (gs) { initGroups.set(gs); resetGroups(); }; var createGroups = function (gs) { return $_1g2cevwsjdud7ejp.map(gs, $_9njj9iwjjdud7eix.compose(ToolbarGroup.sketch, makeGroup)); }; var refresh = function () { Toolbar.refresh(toolbar); }; var setContextToolbar = function (gs) { Toggling.on(toolbar); Toolbar.setGroups(toolbar, gs); }; var restoreToolbar = function () { if (Toggling.isOn(toolbar)) { resetGroups(); } }; var focus = function () { Keying.focusIn(toolbar); }; return { wrapper: $_9njj9iwjjdud7eix.constant(wrapper), toolbar: $_9njj9iwjjdud7eix.constant(toolbar), createGroups: createGroups, setGroups: setGroups, setContextToolbar: setContextToolbar, restoreToolbar: restoreToolbar, refresh: refresh, focus: focus }; } var makeEditSwitch = function (webapp) { return $_ap2ej712tjdud7fjl.build(Button.sketch({ dom: $_5oi2c7113jdud7fab.dom('
'), action: function () { webapp.run(function (w) { w.setReadOnly(false); }); } })); }; var makeSocket = function () { return $_ap2ej712tjdud7fjl.build(Container.sketch({ dom: $_5oi2c7113jdud7fab.dom('
'), components: [], containerBehaviours: $_ax1gfoy2jdud7eu7.derive([Replacing.config({})]) })); }; var showEdit = function (socket, switchToEdit) { Replacing.append(socket, $_ap2ej712tjdud7fjl.premade(switchToEdit)); }; var hideEdit = function (socket, switchToEdit) { Replacing.remove(socket, switchToEdit); }; var updateMode = function (socket, switchToEdit, readOnly, root) { var swap = readOnly === true ? Swapping.toAlpha : Swapping.toOmega; swap(root); var f = readOnly ? showEdit : hideEdit; f(socket, switchToEdit); }; var $_enp5ds154jdud7fxb = { makeEditSwitch: makeEditSwitch, makeSocket: makeSocket, updateMode: updateMode }; var getAnimationRoot = function (component, slideConfig) { return slideConfig.getAnimationRoot().fold(function () { return component.element(); }, function (get) { return get(component); }); }; var getDimensionProperty = function (slideConfig) { return slideConfig.dimension().property(); }; var getDimension = function (slideConfig, elem) { return slideConfig.dimension().getDimension()(elem); }; var disableTransitions = function (component, slideConfig) { var root = getAnimationRoot(component, slideConfig); $_af5dkc137jdud7fms.remove(root, [ slideConfig.shrinkingClass(), slideConfig.growingClass() ]); }; var setShrunk = function (component, slideConfig) { $_1x3ogvynjdud7exn.remove(component.element(), slideConfig.openClass()); $_1x3ogvynjdud7exn.add(component.element(), slideConfig.closedClass()); $_btgbcy103jdud7f3t.set(component.element(), getDimensionProperty(slideConfig), '0px'); $_btgbcy103jdud7f3t.reflow(component.element()); }; var measureTargetSize = function (component, slideConfig) { setGrown(component, slideConfig); var expanded = getDimension(slideConfig, component.element()); setShrunk(component, slideConfig); return expanded; }; var setGrown = function (component, slideConfig) { $_1x3ogvynjdud7exn.remove(component.element(), slideConfig.closedClass()); $_1x3ogvynjdud7exn.add(component.element(), slideConfig.openClass()); $_btgbcy103jdud7f3t.remove(component.element(), getDimensionProperty(slideConfig)); }; var doImmediateShrink = function (component, slideConfig, slideState) { slideState.setCollapsed(); $_btgbcy103jdud7f3t.set(component.element(), getDimensionProperty(slideConfig), getDimension(slideConfig, component.element())); $_btgbcy103jdud7f3t.reflow(component.element()); disableTransitions(component, slideConfig); setShrunk(component, slideConfig); slideConfig.onStartShrink()(component); slideConfig.onShrunk()(component); }; var doStartShrink = function (component, slideConfig, slideState) { slideState.setCollapsed(); $_btgbcy103jdud7f3t.set(component.element(), getDimensionProperty(slideConfig), getDimension(slideConfig, component.element())); $_btgbcy103jdud7f3t.reflow(component.element()); var root = getAnimationRoot(component, slideConfig); $_1x3ogvynjdud7exn.add(root, slideConfig.shrinkingClass()); setShrunk(component, slideConfig); slideConfig.onStartShrink()(component); }; var doStartGrow = function (component, slideConfig, slideState) { var fullSize = measureTargetSize(component, slideConfig); var root = getAnimationRoot(component, slideConfig); $_1x3ogvynjdud7exn.add(root, slideConfig.growingClass()); setGrown(component, slideConfig); $_btgbcy103jdud7f3t.set(component.element(), getDimensionProperty(slideConfig), fullSize); slideState.setExpanded(); slideConfig.onStartGrow()(component); }; var grow = function (component, slideConfig, slideState) { if (!slideState.isExpanded()) doStartGrow(component, slideConfig, slideState); }; var shrink = function (component, slideConfig, slideState) { if (slideState.isExpanded()) doStartShrink(component, slideConfig, slideState); }; var immediateShrink = function (component, slideConfig, slideState) { if (slideState.isExpanded()) doImmediateShrink(component, slideConfig, slideState); }; var hasGrown = function (component, slideConfig, slideState) { return slideState.isExpanded(); }; var hasShrunk = function (component, slideConfig, slideState) { return slideState.isCollapsed(); }; var isGrowing = function (component, slideConfig, slideState) { var root = getAnimationRoot(component, slideConfig); return $_1x3ogvynjdud7exn.has(root, slideConfig.growingClass()) === true; }; var isShrinking = function (component, slideConfig, slideState) { var root = getAnimationRoot(component, slideConfig); return $_1x3ogvynjdud7exn.has(root, slideConfig.shrinkingClass()) === true; }; var isTransitioning = function (component, slideConfig, slideState) { return isGrowing(component, slideConfig, slideState) === true || isShrinking(component, slideConfig, slideState) === true; }; var toggleGrow = function (component, slideConfig, slideState) { var f = slideState.isExpanded() ? doStartShrink : doStartGrow; f(component, slideConfig, slideState); }; var $_47f52a158jdud7fxy = { grow: grow, shrink: shrink, immediateShrink: immediateShrink, hasGrown: hasGrown, hasShrunk: hasShrunk, isGrowing: isGrowing, isShrinking: isShrinking, isTransitioning: isTransitioning, toggleGrow: toggleGrow, disableTransitions: disableTransitions }; var exhibit$5 = function (base, slideConfig) { var expanded = slideConfig.expanded(); return expanded ? $_biiw3tyhjdud7ewz.nu({ classes: [slideConfig.openClass()], styles: {} }) : $_biiw3tyhjdud7ewz.nu({ classes: [slideConfig.closedClass()], styles: $_ettibkxsjdud7emz.wrap(slideConfig.dimension().property(), '0px') }); }; var events$9 = function (slideConfig, slideState) { return $_5xcuyiy4jdud7eur.derive([$_5xcuyiy4jdud7eur.run($_brmbwvwijdud7eiu.transitionend(), function (component, simulatedEvent) { var raw = simulatedEvent.event().raw(); if (raw.propertyName === slideConfig.dimension().property()) { $_47f52a158jdud7fxy.disableTransitions(component, slideConfig, slideState); if (slideState.isExpanded()) $_btgbcy103jdud7f3t.remove(component.element(), slideConfig.dimension().property()); var notify = slideState.isExpanded() ? slideConfig.onGrown() : slideConfig.onShrunk(); notify(component, simulatedEvent); } })]); }; var $_ao9shj157jdud7fxr = { exhibit: exhibit$5, events: events$9 }; var SlidingSchema = [ $_euqmtby7jdud7ev7.strict('closedClass'), $_euqmtby7jdud7ev7.strict('openClass'), $_euqmtby7jdud7ev7.strict('shrinkingClass'), $_euqmtby7jdud7ev7.strict('growingClass'), $_euqmtby7jdud7ev7.option('getAnimationRoot'), $_etkinez6jdud7ezi.onHandler('onShrunk'), $_etkinez6jdud7ezi.onHandler('onStartShrink'), $_etkinez6jdud7ezi.onHandler('onGrown'), $_etkinez6jdud7ezi.onHandler('onStartGrow'), $_euqmtby7jdud7ev7.defaulted('expanded', false), $_euqmtby7jdud7ev7.strictOf('dimension', $_13hkebyejdud7ewm.choose('property', { width: [ $_etkinez6jdud7ezi.output('property', 'width'), $_etkinez6jdud7ezi.output('getDimension', function (elem) { return $_6chz3611kjdud7fcw.get(elem) + 'px'; }) ], height: [ $_etkinez6jdud7ezi.output('property', 'height'), $_etkinez6jdud7ezi.output('getDimension', function (elem) { return $_q9861102jdud7f3r.get(elem) + 'px'; }) ] })) ]; var init$4 = function (spec) { var state = Cell(spec.expanded()); var readState = function () { return 'expanded: ' + state.get(); }; return BehaviourState({ isExpanded: function () { return state.get() === true; }, isCollapsed: function () { return state.get() === false; }, setCollapsed: $_9njj9iwjjdud7eix.curry(state.set, false), setExpanded: $_9njj9iwjjdud7eix.curry(state.set, true), readState: readState }); }; var $_f26cpi15ajdud7fyb = { init: init$4 }; var Sliding = $_ax1gfoy2jdud7eu7.create({ fields: SlidingSchema, name: 'sliding', active: $_ao9shj157jdud7fxr, apis: $_47f52a158jdud7fxy, state: $_f26cpi15ajdud7fyb }); var build$2 = function (refresh, scrollIntoView) { var dropup = $_ap2ej712tjdud7fjl.build(Container.sketch({ dom: { tag: 'div', classes: $_5qzh4bzejdud7f0y.resolve('dropup') }, components: [], containerBehaviours: $_ax1gfoy2jdud7eu7.derive([ Replacing.config({}), Sliding.config({ closedClass: $_5qzh4bzejdud7f0y.resolve('dropup-closed'), openClass: $_5qzh4bzejdud7f0y.resolve('dropup-open'), shrinkingClass: $_5qzh4bzejdud7f0y.resolve('dropup-shrinking'), growingClass: $_5qzh4bzejdud7f0y.resolve('dropup-growing'), dimension: { property: 'height' }, onShrunk: function (component) { refresh(); scrollIntoView(); Replacing.set(component, []); }, onGrown: function (component) { refresh(); scrollIntoView(); } }), $_nw25bzdjdud7f0v.orientation(function (component, data) { disappear($_9njj9iwjjdud7eix.noop); }) ]) })); var appear = function (menu, update, component) { if (Sliding.hasShrunk(dropup) === true && Sliding.isTransitioning(dropup) === false) { window.requestAnimationFrame(function () { update(component); Replacing.set(dropup, [menu()]); Sliding.grow(dropup); }); } }; var disappear = function (onReadyToShrink) { window.requestAnimationFrame(function () { onReadyToShrink(); Sliding.shrink(dropup); }); }; return { appear: appear, disappear: disappear, component: $_9njj9iwjjdud7eix.constant(dropup), element: dropup.element }; }; var $_9ihizd155jdud7fxi = { build: build$2 }; var isDangerous = function (event) { return event.raw().which === $_8y8vdkzpjdud7f2d.BACKSPACE()[0] && !$_1g2cevwsjdud7ejp.contains([ 'input', 'textarea' ], $_50qkdpxkjdud7em6.name(event.target())); }; var isFirefox = $_chh2cvwkjdud7ej0.detect().browser.isFirefox(); var settingsSchema = $_13hkebyejdud7ewm.objOfOnly([ $_euqmtby7jdud7ev7.strictFunction('triggerEvent'), $_euqmtby7jdud7ev7.strictFunction('broadcastEvent'), $_euqmtby7jdud7ev7.defaulted('stopBackspace', true) ]); var bindFocus = function (container, handler) { if (isFirefox) { return $_5x7hr513xjdud7fqz.capture(container, 'focus', handler); } else { return $_5x7hr513xjdud7fqz.bind(container, 'focusin', handler); } }; var bindBlur = function (container, handler) { if (isFirefox) { return $_5x7hr513xjdud7fqz.capture(container, 'blur', handler); } else { return $_5x7hr513xjdud7fqz.bind(container, 'focusout', handler); } }; var setup$2 = function (container, rawSettings) { var settings = $_13hkebyejdud7ewm.asRawOrDie('Getting GUI events settings', settingsSchema, rawSettings); var pointerEvents = $_chh2cvwkjdud7ej0.detect().deviceType.isTouch() ? [ 'touchstart', 'touchmove', 'touchend', 'gesturestart' ] : [ 'mousedown', 'mouseup', 'mouseover', 'mousemove', 'mouseout', 'click' ]; var tapEvent = $_civf8z144jdud7fs6.monitor(settings); var simpleEvents = $_1g2cevwsjdud7ejp.map(pointerEvents.concat([ 'selectstart', 'input', 'contextmenu', 'change', 'transitionend', 'dragstart', 'dragover', 'drop' ]), function (type) { return $_5x7hr513xjdud7fqz.bind(container, type, function (event) { tapEvent.fireIfReady(event, type).each(function (tapStopped) { if (tapStopped) event.kill(); }); var stopped = settings.triggerEvent(type, event); if (stopped) event.kill(); }); }); var onKeydown = $_5x7hr513xjdud7fqz.bind(container, 'keydown', function (event) { var stopped = settings.triggerEvent('keydown', event); if (stopped) event.kill(); else if (settings.stopBackspace === true && isDangerous(event)) { event.prevent(); } }); var onFocusIn = bindFocus(container, function (event) { var stopped = settings.triggerEvent('focusin', event); if (stopped) event.kill(); }); var onFocusOut = bindBlur(container, function (event) { var stopped = settings.triggerEvent('focusout', event); if (stopped) event.kill(); setTimeout(function () { settings.triggerEvent($_801kkqwhjdud7eiq.postBlur(), event); }, 0); }); var defaultView = $_dekwe2x3jdud7ekr.defaultView(container); var onWindowScroll = $_5x7hr513xjdud7fqz.bind(defaultView, 'scroll', function (event) { var stopped = settings.broadcastEvent($_801kkqwhjdud7eiq.windowScroll(), event); if (stopped) event.kill(); }); var unbind = function () { $_1g2cevwsjdud7ejp.each(simpleEvents, function (e) { e.unbind(); }); onKeydown.unbind(); onFocusIn.unbind(); onFocusOut.unbind(); onWindowScroll.unbind(); }; return { unbind: unbind }; }; var $_kt4rz15djdud7fz0 = { setup: setup$2 }; var derive$3 = function (rawEvent, rawTarget) { var source = $_ettibkxsjdud7emz.readOptFrom(rawEvent, 'target').map(function (getTarget) { return getTarget(); }).getOr(rawTarget); return Cell(source); }; var $_ervjm915fjdud7fzm = { derive: derive$3 }; var fromSource = function (event, source) { var stopper = Cell(false); var cutter = Cell(false); var stop = function () { stopper.set(true); }; var cut = function () { cutter.set(true); }; return { stop: stop, cut: cut, isStopped: stopper.get, isCut: cutter.get, event: $_9njj9iwjjdud7eix.constant(event), setSource: source.set, getSource: source.get }; }; var fromExternal = function (event) { var stopper = Cell(false); var stop = function () { stopper.set(true); }; return { stop: stop, cut: $_9njj9iwjjdud7eix.noop, isStopped: stopper.get, isCut: $_9njj9iwjjdud7eix.constant(false), event: $_9njj9iwjjdud7eix.constant(event), setTarget: $_9njj9iwjjdud7eix.die(new Error('Cannot set target of a broadcasted event')), getTarget: $_9njj9iwjjdud7eix.die(new Error('Cannot get target of a broadcasted event')) }; }; var fromTarget = function (event, target) { var source = Cell(target); return fromSource(event, source); }; var $_a4g5815gjdud7fzp = { fromSource: fromSource, fromExternal: fromExternal, fromTarget: fromTarget }; var adt$6 = $_2ytffsxwjdud7ets.generate([ { stopped: [] }, { resume: ['element'] }, { complete: [] } ]); var doTriggerHandler = function (lookup, eventType, rawEvent, target, source, logger) { var handler = lookup(eventType, target); var simulatedEvent = $_a4g5815gjdud7fzp.fromSource(rawEvent, source); return handler.fold(function () { logger.logEventNoHandlers(eventType, target); return adt$6.complete(); }, function (handlerInfo) { var descHandler = handlerInfo.descHandler(); var eventHandler = $_6lldf5134jdud7flx.getHandler(descHandler); eventHandler(simulatedEvent); if (simulatedEvent.isStopped()) { logger.logEventStopped(eventType, handlerInfo.element(), descHandler.purpose()); return adt$6.stopped(); } else if (simulatedEvent.isCut()) { logger.logEventCut(eventType, handlerInfo.element(), descHandler.purpose()); return adt$6.complete(); } else return $_dekwe2x3jdud7ekr.parent(handlerInfo.element()).fold(function () { logger.logNoParent(eventType, handlerInfo.element(), descHandler.purpose()); return adt$6.complete(); }, function (parent) { logger.logEventResponse(eventType, handlerInfo.element(), descHandler.purpose()); return adt$6.resume(parent); }); }); }; var doTriggerOnUntilStopped = function (lookup, eventType, rawEvent, rawTarget, source, logger) { return doTriggerHandler(lookup, eventType, rawEvent, rawTarget, source, logger).fold(function () { return true; }, function (parent) { return doTriggerOnUntilStopped(lookup, eventType, rawEvent, parent, source, logger); }, function () { return false; }); }; var triggerHandler = function (lookup, eventType, rawEvent, target, logger) { var source = $_ervjm915fjdud7fzm.derive(rawEvent, target); return doTriggerHandler(lookup, eventType, rawEvent, target, source, logger); }; var broadcast = function (listeners, rawEvent, logger) { var simulatedEvent = $_a4g5815gjdud7fzp.fromExternal(rawEvent); $_1g2cevwsjdud7ejp.each(listeners, function (listener) { var descHandler = listener.descHandler(); var handler = $_6lldf5134jdud7flx.getHandler(descHandler); handler(simulatedEvent); }); return simulatedEvent.isStopped(); }; var triggerUntilStopped = function (lookup, eventType, rawEvent, logger) { var rawTarget = rawEvent.target(); return triggerOnUntilStopped(lookup, eventType, rawEvent, rawTarget, logger); }; var triggerOnUntilStopped = function (lookup, eventType, rawEvent, rawTarget, logger) { var source = $_ervjm915fjdud7fzm.derive(rawEvent, rawTarget); return doTriggerOnUntilStopped(lookup, eventType, rawEvent, rawTarget, source, logger); }; var $_fisgeg15ejdud7fzg = { triggerHandler: triggerHandler, triggerUntilStopped: triggerUntilStopped, triggerOnUntilStopped: triggerOnUntilStopped, broadcast: broadcast }; var closest$4 = function (target, transform, isRoot) { var delegate = $_4j5kdsyvjdud7eyd.closest(target, function (elem) { return transform(elem).isSome(); }, isRoot); return delegate.bind(transform); }; var $_6iub0g15jjdud7g05 = { closest: closest$4 }; var eventHandler = $_8o1q69x4jdud7ekz.immutable('element', 'descHandler'); var messageHandler = function (id, handler) { return { id: $_9njj9iwjjdud7eix.constant(id), descHandler: $_9njj9iwjjdud7eix.constant(handler) }; }; function EventRegistry () { var registry = {}; var registerId = function (extraArgs, id, events) { $_2dykn0x0jdud7ekc.each(events, function (v, k) { var handlers = registry[k] !== undefined ? registry[k] : {}; handlers[id] = $_6lldf5134jdud7flx.curryArgs(v, extraArgs); registry[k] = handlers; }); }; var findHandler = function (handlers, elem) { return $_4mrseh10xjdud7f9b.read(elem).fold(function (err) { return Option.none(); }, function (id) { var reader = $_ettibkxsjdud7emz.readOpt(id); return handlers.bind(reader).map(function (descHandler) { return eventHandler(elem, descHandler); }); }); }; var filterByType = function (type) { return $_ettibkxsjdud7emz.readOptFrom(registry, type).map(function (handlers) { return $_2dykn0x0jdud7ekc.mapToArray(handlers, function (f, id) { return messageHandler(id, f); }); }).getOr([]); }; var find = function (isAboveRoot, type, target) { var readType = $_ettibkxsjdud7emz.readOpt(type); var handlers = readType(registry); return $_6iub0g15jjdud7g05.closest(target, function (elem) { return findHandler(handlers, elem); }, isAboveRoot); }; var unregisterId = function (id) { $_2dykn0x0jdud7ekc.each(registry, function (handlersById, eventName) { if (handlersById.hasOwnProperty(id)) delete handlersById[id]; }); }; return { registerId: registerId, unregisterId: unregisterId, filterByType: filterByType, find: find }; } function Registry () { var events = EventRegistry(); var components = {}; var readOrTag = function (component) { var elem = component.element(); return $_4mrseh10xjdud7f9b.read(elem).fold(function () { return $_4mrseh10xjdud7f9b.write('uid-', component.element()); }, function (uid) { return uid; }); }; var failOnDuplicate = function (component, tagId) { var conflict = components[tagId]; if (conflict === component) unregister(component); else throw new Error('The tagId "' + tagId + '" is already used by: ' + $_d3f8kuxmjdud7emi.element(conflict.element()) + '\nCannot use it for: ' + $_d3f8kuxmjdud7emi.element(component.element()) + '\n' + 'The conflicting element is' + ($_1tyeizxjjdud7em4.inBody(conflict.element()) ? ' ' : ' not ') + 'already in the DOM'); }; var register = function (component) { var tagId = readOrTag(component); if ($_ettibkxsjdud7emz.hasKey(components, tagId)) failOnDuplicate(component, tagId); var extraArgs = [component]; events.registerId(extraArgs, tagId, component.events()); components[tagId] = component; }; var unregister = function (component) { $_4mrseh10xjdud7f9b.read(component.element()).each(function (tagId) { components[tagId] = undefined; events.unregisterId(tagId); }); }; var filter = function (type) { return events.filterByType(type); }; var find = function (isAboveRoot, type, target) { return events.find(isAboveRoot, type, target); }; var getById = function (id) { return $_ettibkxsjdud7emz.readOpt(id)(components); }; return { find: find, filter: filter, register: register, unregister: unregister, getById: getById }; } var create$6 = function () { var root = $_ap2ej712tjdud7fjl.build(Container.sketch({ dom: { tag: 'div' } })); return takeover(root); }; var takeover = function (root) { var isAboveRoot = function (el) { return $_dekwe2x3jdud7ekr.parent(root.element()).fold(function () { return true; }, function (parent) { return $_f1y1rtx9jdud7el7.eq(el, parent); }); }; var registry = Registry(); var lookup = function (eventName, target) { return registry.find(isAboveRoot, eventName, target); }; var domEvents = $_kt4rz15djdud7fz0.setup(root.element(), { triggerEvent: function (eventName, event) { return $_efa715xljdud7em8.monitorEvent(eventName, event.target(), function (logger) { return $_fisgeg15ejdud7fzg.triggerUntilStopped(lookup, eventName, event, logger); }); }, broadcastEvent: function (eventName, event) { var listeners = registry.filter(eventName); return $_fisgeg15ejdud7fzg.broadcast(listeners, event); } }); var systemApi = SystemApi({ debugInfo: $_9njj9iwjjdud7eix.constant('real'), triggerEvent: function (customType, target, data) { $_efa715xljdud7em8.monitorEvent(customType, target, function (logger) { $_fisgeg15ejdud7fzg.triggerOnUntilStopped(lookup, customType, data, target, logger); }); }, triggerFocus: function (target, originator) { $_4mrseh10xjdud7f9b.read(target).fold(function () { $_25580rytjdud7ey7.focus(target); }, function (_alloyId) { $_efa715xljdud7em8.monitorEvent($_801kkqwhjdud7eiq.focus(), target, function (logger) { $_fisgeg15ejdud7fzg.triggerHandler(lookup, $_801kkqwhjdud7eiq.focus(), { originator: $_9njj9iwjjdud7eix.constant(originator), target: $_9njj9iwjjdud7eix.constant(target) }, target, logger); }); }); }, triggerEscape: function (comp, simulatedEvent) { systemApi.triggerEvent('keydown', comp.element(), simulatedEvent.event()); }, getByUid: function (uid) { return getByUid(uid); }, getByDom: function (elem) { return getByDom(elem); }, build: $_ap2ej712tjdud7fjl.build, addToGui: function (c) { add(c); }, removeFromGui: function (c) { remove(c); }, addToWorld: function (c) { addToWorld(c); }, removeFromWorld: function (c) { removeFromWorld(c); }, broadcast: function (message) { broadcast(message); }, broadcastOn: function (channels, message) { broadcastOn(channels, message); } }); var addToWorld = function (component) { component.connect(systemApi); if (!$_50qkdpxkjdud7em6.isText(component.element())) { registry.register(component); $_1g2cevwsjdud7ejp.each(component.components(), addToWorld); systemApi.triggerEvent($_801kkqwhjdud7eiq.systemInit(), component.element(), { target: $_9njj9iwjjdud7eix.constant(component.element()) }); } }; var removeFromWorld = function (component) { if (!$_50qkdpxkjdud7em6.isText(component.element())) { $_1g2cevwsjdud7ejp.each(component.components(), removeFromWorld); registry.unregister(component); } component.disconnect(); }; var add = function (component) { $_fesilqx1jdud7ekf.attach(root, component); }; var remove = function (component) { $_fesilqx1jdud7ekf.detach(component); }; var destroy = function () { domEvents.unbind(); $_8d9w48xhjdud7elz.remove(root.element()); }; var broadcastData = function (data) { var receivers = registry.filter($_801kkqwhjdud7eiq.receive()); $_1g2cevwsjdud7ejp.each(receivers, function (receiver) { var descHandler = receiver.descHandler(); var handler = $_6lldf5134jdud7flx.getHandler(descHandler); handler(data); }); }; var broadcast = function (message) { broadcastData({ universal: $_9njj9iwjjdud7eix.constant(true), data: $_9njj9iwjjdud7eix.constant(message) }); }; var broadcastOn = function (channels, message) { broadcastData({ universal: $_9njj9iwjjdud7eix.constant(false), channels: $_9njj9iwjjdud7eix.constant(channels), data: $_9njj9iwjjdud7eix.constant(message) }); }; var getByUid = function (uid) { return registry.getById(uid).fold(function () { return Result.error(new Error('Could not find component with uid: "' + uid + '" in system.')); }, Result.value); }; var getByDom = function (elem) { return $_4mrseh10xjdud7f9b.read(elem).bind(getByUid); }; addToWorld(root); return { root: $_9njj9iwjjdud7eix.constant(root), element: root.element, destroy: destroy, add: add, remove: remove, getByUid: getByUid, getByDom: getByDom, addToWorld: addToWorld, removeFromWorld: removeFromWorld, broadcast: broadcast, broadcastOn: broadcastOn }; }; var $_22oc0y15cjdud7fym = { create: create$6, takeover: takeover }; var READ_ONLY_MODE_CLASS = $_9njj9iwjjdud7eix.constant($_5qzh4bzejdud7f0y.resolve('readonly-mode')); var EDIT_MODE_CLASS = $_9njj9iwjjdud7eix.constant($_5qzh4bzejdud7f0y.resolve('edit-mode')); function OuterContainer (spec) { var root = $_ap2ej712tjdud7fjl.build(Container.sketch({ dom: { classes: [$_5qzh4bzejdud7f0y.resolve('outer-container')].concat(spec.classes) }, containerBehaviours: $_ax1gfoy2jdud7eu7.derive([Swapping.config({ alpha: READ_ONLY_MODE_CLASS(), omega: EDIT_MODE_CLASS() })]) })); return $_22oc0y15cjdud7fym.takeover(root); } function AndroidRealm (scrollIntoView) { var alloy = OuterContainer({ classes: [$_5qzh4bzejdud7f0y.resolve('android-container')] }); var toolbar = ScrollingToolbar(); var webapp = $_9fhyae12ojdud7fij.api(); var switchToEdit = $_enp5ds154jdud7fxb.makeEditSwitch(webapp); var socket = $_enp5ds154jdud7fxb.makeSocket(); var dropup = $_9ihizd155jdud7fxi.build($_9njj9iwjjdud7eix.noop, scrollIntoView); alloy.add(toolbar.wrapper()); alloy.add(socket); alloy.add(dropup.component()); var setToolbarGroups = function (rawGroups) { var groups = toolbar.createGroups(rawGroups); toolbar.setGroups(groups); }; var setContextToolbar = function (rawGroups) { var groups = toolbar.createGroups(rawGroups); toolbar.setContextToolbar(groups); }; var focusToolbar = function () { toolbar.focus(); }; var restoreToolbar = function () { toolbar.restoreToolbar(); }; var init = function (spec) { webapp.set($_bip6sv140jdud7fra.produce(spec)); }; var exit = function () { webapp.run(function (w) { w.exit(); Replacing.remove(socket, switchToEdit); }); }; var updateMode = function (readOnly) { $_enp5ds154jdud7fxb.updateMode(socket, switchToEdit, readOnly, alloy.root()); }; return { system: $_9njj9iwjjdud7eix.constant(alloy), element: alloy.element, init: init, exit: exit, setToolbarGroups: setToolbarGroups, setContextToolbar: setContextToolbar, focusToolbar: focusToolbar, restoreToolbar: restoreToolbar, updateMode: updateMode, socket: $_9njj9iwjjdud7eix.constant(socket), dropup: $_9njj9iwjjdud7eix.constant(dropup) }; } var input = function (parent, operation) { var input = $_eobgtqxfjdud7elu.fromTag('input'); $_btgbcy103jdud7f3t.setAll(input, { opacity: '0', position: 'absolute', top: '-1000px', left: '-1000px' }); $_ftkbb5x2jdud7ekp.append(parent, input); $_25580rytjdud7ey7.focus(input); operation(input); $_8d9w48xhjdud7elz.remove(input); }; var $_6rnw9j15ojdud7g16 = { input: input }; var refreshInput = function (input) { var start = input.dom().selectionStart; var end = input.dom().selectionEnd; var dir = input.dom().selectionDirection; setTimeout(function () { input.dom().setSelectionRange(start, end, dir); $_25580rytjdud7ey7.focus(input); }, 50); }; var refresh = function (winScope) { var sel = winScope.getSelection(); if (sel.rangeCount > 0) { var br = sel.getRangeAt(0); var r = winScope.document.createRange(); r.setStart(br.startContainer, br.startOffset); r.setEnd(br.endContainer, br.endOffset); sel.removeAllRanges(); sel.addRange(r); } }; var $_2v0qs115qjdud7g1f = { refreshInput: refreshInput, refresh: refresh }; var resume$1 = function (cWin, frame) { $_25580rytjdud7ey7.active().each(function (active) { if (!$_f1y1rtx9jdud7el7.eq(active, frame)) { $_25580rytjdud7ey7.blur(active); } }); cWin.focus(); $_25580rytjdud7ey7.focus($_eobgtqxfjdud7elu.fromDom(cWin.document.body)); $_2v0qs115qjdud7g1f.refresh(cWin); }; var $_7n4y0915pjdud7g1b = { resume: resume$1 }; var stubborn = function (outerBody, cWin, page, frame) { var toEditing = function () { $_7n4y0915pjdud7g1b.resume(cWin, frame); }; var toReading = function () { $_6rnw9j15ojdud7g16.input(outerBody, $_25580rytjdud7ey7.blur); }; var captureInput = $_5x7hr513xjdud7fqz.bind(page, 'keydown', function (evt) { if (!$_1g2cevwsjdud7ejp.contains([ 'input', 'textarea' ], $_50qkdpxkjdud7em6.name(evt.target()))) { toEditing(); } }); var onToolbarTouch = function () { }; var destroy = function () { captureInput.unbind(); }; return { toReading: toReading, toEditing: toEditing, onToolbarTouch: onToolbarTouch, destroy: destroy }; }; var timid = function (outerBody, cWin, page, frame) { var dismissKeyboard = function () { $_25580rytjdud7ey7.blur(frame); }; var onToolbarTouch = function () { dismissKeyboard(); }; var toReading = function () { dismissKeyboard(); }; var toEditing = function () { $_7n4y0915pjdud7g1b.resume(cWin, frame); }; return { toReading: toReading, toEditing: toEditing, onToolbarTouch: onToolbarTouch, destroy: $_9njj9iwjjdud7eix.noop }; }; var $_fx7jg115njdud7g0u = { stubborn: stubborn, timid: timid }; var initEvents$1 = function (editorApi, iosApi, toolstrip, socket, dropup) { var saveSelectionFirst = function () { iosApi.run(function (api) { api.highlightSelection(); }); }; var refreshIosSelection = function () { iosApi.run(function (api) { api.refreshSelection(); }); }; var scrollToY = function (yTop, height) { var y = yTop - socket.dom().scrollTop; iosApi.run(function (api) { api.scrollIntoView(y, y + height); }); }; var scrollToElement = function (target) { scrollToY(iosApi, socket); }; var scrollToCursor = function () { editorApi.getCursorBox().each(function (box) { scrollToY(box.top(), box.height()); }); }; var clearSelection = function () { iosApi.run(function (api) { api.clearSelection(); }); }; var clearAndRefresh = function () { clearSelection(); refreshThrottle.throttle(); }; var refreshView = function () { scrollToCursor(); iosApi.run(function (api) { api.syncHeight(); }); }; var reposition = function () { var toolbarHeight = $_q9861102jdud7f3r.get(toolstrip); iosApi.run(function (api) { api.setViewportOffset(toolbarHeight); }); refreshIosSelection(); refreshView(); }; var toEditing = function () { iosApi.run(function (api) { api.toEditing(); }); }; var toReading = function () { iosApi.run(function (api) { api.toReading(); }); }; var onToolbarTouch = function (event) { iosApi.run(function (api) { api.onToolbarTouch(event); }); }; var tapping = $_cza229143jdud7fs3.monitor(editorApi); var refreshThrottle = $_dfio3v14wjdud7fvy.last(refreshView, 300); var listeners = [ editorApi.onKeyup(clearAndRefresh), editorApi.onNodeChanged(refreshIosSelection), editorApi.onDomChanged(refreshThrottle.throttle), editorApi.onDomChanged(refreshIosSelection), editorApi.onScrollToCursor(function (tinyEvent) { tinyEvent.preventDefault(); refreshThrottle.throttle(); }), editorApi.onScrollToElement(function (event) { scrollToElement(event.element()); }), editorApi.onToEditing(toEditing), editorApi.onToReading(toReading), $_5x7hr513xjdud7fqz.bind(editorApi.doc(), 'touchend', function (touchEvent) { if ($_f1y1rtx9jdud7el7.eq(editorApi.html(), touchEvent.target()) || $_f1y1rtx9jdud7el7.eq(editorApi.body(), touchEvent.target())) { } }), $_5x7hr513xjdud7fqz.bind(toolstrip, 'transitionend', function (transitionEvent) { if (transitionEvent.raw().propertyName === 'height') { reposition(); } }), $_5x7hr513xjdud7fqz.capture(toolstrip, 'touchstart', function (touchEvent) { saveSelectionFirst(); onToolbarTouch(touchEvent); editorApi.onTouchToolstrip(); }), $_5x7hr513xjdud7fqz.bind(editorApi.body(), 'touchstart', function (evt) { clearSelection(); editorApi.onTouchContent(); tapping.fireTouchstart(evt); }), tapping.onTouchmove(), tapping.onTouchend(), $_5x7hr513xjdud7fqz.bind(editorApi.body(), 'click', function (event) { event.kill(); }), $_5x7hr513xjdud7fqz.bind(toolstrip, 'touchmove', function () { editorApi.onToolbarScrollStart(); }) ]; var destroy = function () { $_1g2cevwsjdud7ejp.each(listeners, function (l) { l.unbind(); }); }; return { destroy: destroy }; }; var $_1nj2i15rjdud7g1i = { initEvents: initEvents$1 }; function FakeSelection (win, frame) { var doc = win.document; var container = $_eobgtqxfjdud7elu.fromTag('div'); $_1x3ogvynjdud7exn.add(container, $_5qzh4bzejdud7f0y.resolve('unfocused-selections')); $_ftkbb5x2jdud7ekp.append($_eobgtqxfjdud7elu.fromDom(doc.documentElement), container); var onTouch = $_5x7hr513xjdud7fqz.bind(container, 'touchstart', function (event) { event.prevent(); $_7n4y0915pjdud7g1b.resume(win, frame); clear(); }); var make = function (rectangle) { var span = $_eobgtqxfjdud7elu.fromTag('span'); $_af5dkc137jdud7fms.add(span, [ $_5qzh4bzejdud7f0y.resolve('layer-editor'), $_5qzh4bzejdud7f0y.resolve('unfocused-selection') ]); $_btgbcy103jdud7f3t.setAll(span, { left: rectangle.left() + 'px', top: rectangle.top() + 'px', width: rectangle.width() + 'px', height: rectangle.height() + 'px' }); return span; }; var update = function () { clear(); var rectangles = $_5lp8kt148jdud7fso.getRectangles(win); var spans = $_1g2cevwsjdud7ejp.map(rectangles, make); $_alr2vxxijdud7em1.append(container, spans); }; var clear = function () { $_8d9w48xhjdud7elz.empty(container); }; var destroy = function () { onTouch.unbind(); $_8d9w48xhjdud7elz.remove(container); }; var isActive = function () { return $_dekwe2x3jdud7ekr.children(container).length > 0; }; return { update: update, isActive: isActive, destroy: destroy, clear: clear }; } var nu$8 = function (baseFn) { var data = Option.none(); var callbacks = []; var map = function (f) { return nu$8(function (nCallback) { get(function (data) { nCallback(f(data)); }); }); }; var get = function (nCallback) { if (isReady()) call(nCallback); else callbacks.push(nCallback); }; var set = function (x) { data = Option.some(x); run(callbacks); callbacks = []; }; var isReady = function () { return data.isSome(); }; var run = function (cbs) { $_1g2cevwsjdud7ejp.each(cbs, call); }; var call = function (cb) { data.each(function (x) { setTimeout(function () { cb(x); }, 0); }); }; baseFn(set); return { get: get, map: map, isReady: isReady }; }; var pure$1 = function (a) { return nu$8(function (callback) { callback(a); }); }; var LazyValue = { nu: nu$8, pure: pure$1 }; var bounce = function (f) { return function () { var args = Array.prototype.slice.call(arguments); var me = this; setTimeout(function () { f.apply(me, args); }, 0); }; }; var $_9k4fhx15xjdud7g2p = { bounce: bounce }; var nu$9 = function (baseFn) { var get = function (callback) { baseFn($_9k4fhx15xjdud7g2p.bounce(callback)); }; var map = function (fab) { return nu$9(function (callback) { get(function (a) { var value = fab(a); callback(value); }); }); }; var bind = function (aFutureB) { return nu$9(function (callback) { get(function (a) { aFutureB(a).get(callback); }); }); }; var anonBind = function (futureB) { return nu$9(function (callback) { get(function (a) { futureB.get(callback); }); }); }; var toLazy = function () { return LazyValue.nu(get); }; return { map: map, bind: bind, anonBind: anonBind, toLazy: toLazy, get: get }; }; var pure$2 = function (a) { return nu$9(function (callback) { callback(a); }); }; var Future = { nu: nu$9, pure: pure$2 }; var adjust = function (value, destination, amount) { if (Math.abs(value - destination) <= amount) { return Option.none(); } else if (value < destination) { return Option.some(value + amount); } else { return Option.some(value - amount); } }; var create$7 = function () { var interval = null; var animate = function (getCurrent, destination, amount, increment, doFinish, rate) { var finished = false; var finish = function (v) { finished = true; doFinish(v); }; clearInterval(interval); var abort = function (v) { clearInterval(interval); finish(v); }; interval = setInterval(function () { var value = getCurrent(); adjust(value, destination, amount).fold(function () { clearInterval(interval); finish(destination); }, function (s) { increment(s, abort); if (!finished) { var newValue = getCurrent(); if (newValue !== s || Math.abs(newValue - destination) > Math.abs(value - destination)) { clearInterval(interval); finish(destination); } } }); }, rate); }; return { animate: animate }; }; var $_d1o46j15yjdud7g2r = { create: create$7, adjust: adjust }; var findDevice = function (deviceWidth, deviceHeight) { var devices = [ { width: 320, height: 480, keyboard: { portrait: 300, landscape: 240 } }, { width: 320, height: 568, keyboard: { portrait: 300, landscape: 240 } }, { width: 375, height: 667, keyboard: { portrait: 305, landscape: 240 } }, { width: 414, height: 736, keyboard: { portrait: 320, landscape: 240 } }, { width: 768, height: 1024, keyboard: { portrait: 320, landscape: 400 } }, { width: 1024, height: 1366, keyboard: { portrait: 380, landscape: 460 } } ]; return $_ak7xq9y0jdud7eu4.findMap(devices, function (device) { return deviceWidth <= device.width && deviceHeight <= device.height ? Option.some(device.keyboard) : Option.none(); }).getOr({ portrait: deviceHeight / 5, landscape: deviceWidth / 4 }); }; var $_ejdhod161jdud7g3j = { findDevice: findDevice }; var softKeyboardLimits = function (outerWindow) { return $_ejdhod161jdud7g3j.findDevice(outerWindow.screen.width, outerWindow.screen.height); }; var accountableKeyboardHeight = function (outerWindow) { var portrait = $_9zlehr13wjdud7fqs.get(outerWindow).isPortrait(); var limits = softKeyboardLimits(outerWindow); var keyboard = portrait ? limits.portrait : limits.landscape; var visualScreenHeight = portrait ? outerWindow.screen.height : outerWindow.screen.width; return visualScreenHeight - outerWindow.innerHeight > keyboard ? 0 : keyboard; }; var getGreenzone = function (socket, dropup) { var outerWindow = $_dekwe2x3jdud7ekr.owner(socket).dom().defaultView; var viewportHeight = $_q9861102jdud7f3r.get(socket) + $_q9861102jdud7f3r.get(dropup); var acc = accountableKeyboardHeight(outerWindow); return viewportHeight - acc; }; var updatePadding = function (contentBody, socket, dropup) { var greenzoneHeight = getGreenzone(socket, dropup); var deltaHeight = $_q9861102jdud7f3r.get(socket) + $_q9861102jdud7f3r.get(dropup) - greenzoneHeight; $_btgbcy103jdud7f3t.set(contentBody, 'padding-bottom', deltaHeight + 'px'); }; var $_alvh5y160jdud7g3e = { getGreenzone: getGreenzone, updatePadding: updatePadding }; var fixture = $_2ytffsxwjdud7ets.generate([ { fixed: [ 'element', 'property', 'offsetY' ] }, { scroller: [ 'element', 'offsetY' ] } ]); var yFixedData = 'data-' + $_5qzh4bzejdud7f0y.resolve('position-y-fixed'); var yFixedProperty = 'data-' + $_5qzh4bzejdud7f0y.resolve('y-property'); var yScrollingData = 'data-' + $_5qzh4bzejdud7f0y.resolve('scrolling'); var windowSizeData = 'data-' + $_5qzh4bzejdud7f0y.resolve('last-window-height'); var getYFixedData = function (element) { return $_1bs4n9147jdud7fsm.safeParse(element, yFixedData); }; var getYFixedProperty = function (element) { return $_2vghk1xrjdud7ems.get(element, yFixedProperty); }; var getLastWindowSize = function (element) { return $_1bs4n9147jdud7fsm.safeParse(element, windowSizeData); }; var classifyFixed = function (element, offsetY) { var prop = getYFixedProperty(element); return fixture.fixed(element, prop, offsetY); }; var classifyScrolling = function (element, offsetY) { return fixture.scroller(element, offsetY); }; var classify = function (element) { var offsetY = getYFixedData(element); var classifier = $_2vghk1xrjdud7ems.get(element, yScrollingData) === 'true' ? classifyScrolling : classifyFixed; return classifier(element, offsetY); }; var findFixtures = function (container) { var candidates = $_df6s98zvjdud7f39.descendants(container, '[' + yFixedData + ']'); return $_1g2cevwsjdud7ejp.map(candidates, classify); }; var takeoverToolbar = function (toolbar) { var oldToolbarStyle = $_2vghk1xrjdud7ems.get(toolbar, 'style'); $_btgbcy103jdud7f3t.setAll(toolbar, { position: 'absolute', top: '0px' }); $_2vghk1xrjdud7ems.set(toolbar, yFixedData, '0px'); $_2vghk1xrjdud7ems.set(toolbar, yFixedProperty, 'top'); var restore = function () { $_2vghk1xrjdud7ems.set(toolbar, 'style', oldToolbarStyle || ''); $_2vghk1xrjdud7ems.remove(toolbar, yFixedData); $_2vghk1xrjdud7ems.remove(toolbar, yFixedProperty); }; return { restore: restore }; }; var takeoverViewport = function (toolbarHeight, height, viewport) { var oldViewportStyle = $_2vghk1xrjdud7ems.get(viewport, 'style'); $_bhtyzh13ujdud7fqk.register(viewport); $_btgbcy103jdud7f3t.setAll(viewport, { position: 'absolute', height: height + 'px', width: '100%', top: toolbarHeight + 'px' }); $_2vghk1xrjdud7ems.set(viewport, yFixedData, toolbarHeight + 'px'); $_2vghk1xrjdud7ems.set(viewport, yScrollingData, 'true'); $_2vghk1xrjdud7ems.set(viewport, yFixedProperty, 'top'); var restore = function () { $_bhtyzh13ujdud7fqk.deregister(viewport); $_2vghk1xrjdud7ems.set(viewport, 'style', oldViewportStyle || ''); $_2vghk1xrjdud7ems.remove(viewport, yFixedData); $_2vghk1xrjdud7ems.remove(viewport, yScrollingData); $_2vghk1xrjdud7ems.remove(viewport, yFixedProperty); }; return { restore: restore }; }; var takeoverDropup = function (dropup, toolbarHeight, viewportHeight) { var oldDropupStyle = $_2vghk1xrjdud7ems.get(dropup, 'style'); $_btgbcy103jdud7f3t.setAll(dropup, { position: 'absolute', bottom: '0px' }); $_2vghk1xrjdud7ems.set(dropup, yFixedData, '0px'); $_2vghk1xrjdud7ems.set(dropup, yFixedProperty, 'bottom'); var restore = function () { $_2vghk1xrjdud7ems.set(dropup, 'style', oldDropupStyle || ''); $_2vghk1xrjdud7ems.remove(dropup, yFixedData); $_2vghk1xrjdud7ems.remove(dropup, yFixedProperty); }; return { restore: restore }; }; var deriveViewportHeight = function (viewport, toolbarHeight, dropupHeight) { var outerWindow = $_dekwe2x3jdud7ekr.owner(viewport).dom().defaultView; var winH = outerWindow.innerHeight; $_2vghk1xrjdud7ems.set(viewport, windowSizeData, winH + 'px'); return winH - toolbarHeight - dropupHeight; }; var takeover$1 = function (viewport, contentBody, toolbar, dropup) { var outerWindow = $_dekwe2x3jdud7ekr.owner(viewport).dom().defaultView; var toolbarSetup = takeoverToolbar(toolbar); var toolbarHeight = $_q9861102jdud7f3r.get(toolbar); var dropupHeight = $_q9861102jdud7f3r.get(dropup); var viewportHeight = deriveViewportHeight(viewport, toolbarHeight, dropupHeight); var viewportSetup = takeoverViewport(toolbarHeight, viewportHeight, viewport); var dropupSetup = takeoverDropup(dropup, toolbarHeight, viewportHeight); var isActive = true; var restore = function () { isActive = false; toolbarSetup.restore(); viewportSetup.restore(); dropupSetup.restore(); }; var isExpanding = function () { var currentWinHeight = outerWindow.innerHeight; var lastWinHeight = getLastWindowSize(viewport); return currentWinHeight > lastWinHeight; }; var refresh = function () { if (isActive) { var newToolbarHeight = $_q9861102jdud7f3r.get(toolbar); var dropupHeight_1 = $_q9861102jdud7f3r.get(dropup); var newHeight = deriveViewportHeight(viewport, newToolbarHeight, dropupHeight_1); $_2vghk1xrjdud7ems.set(viewport, yFixedData, newToolbarHeight + 'px'); $_btgbcy103jdud7f3t.set(viewport, 'height', newHeight + 'px'); $_btgbcy103jdud7f3t.set(dropup, 'bottom', -(newToolbarHeight + newHeight + dropupHeight_1) + 'px'); $_alvh5y160jdud7g3e.updatePadding(contentBody, viewport, dropup); } }; var setViewportOffset = function (newYOffset) { var offsetPx = newYOffset + 'px'; $_2vghk1xrjdud7ems.set(viewport, yFixedData, offsetPx); refresh(); }; $_alvh5y160jdud7g3e.updatePadding(contentBody, viewport, dropup); return { setViewportOffset: setViewportOffset, isExpanding: isExpanding, isShrinking: $_9njj9iwjjdud7eix.not(isExpanding), refresh: refresh, restore: restore }; }; var $_efto7m15zjdud7g31 = { findFixtures: findFixtures, takeover: takeover$1, getYFixedData: getYFixedData }; var animator = $_d1o46j15yjdud7g2r.create(); var ANIMATION_STEP = 15; var NUM_TOP_ANIMATION_FRAMES = 10; var ANIMATION_RATE = 10; var lastScroll = 'data-' + $_5qzh4bzejdud7f0y.resolve('last-scroll-top'); var getTop = function (element) { var raw = $_btgbcy103jdud7f3t.getRaw(element, 'top').getOr(0); return parseInt(raw, 10); }; var getScrollTop = function (element) { return parseInt(element.dom().scrollTop, 10); }; var moveScrollAndTop = function (element, destination, finalTop) { return Future.nu(function (callback) { var getCurrent = $_9njj9iwjjdud7eix.curry(getScrollTop, element); var update = function (newScroll) { element.dom().scrollTop = newScroll; $_btgbcy103jdud7f3t.set(element, 'top', getTop(element) + ANIMATION_STEP + 'px'); }; var finish = function () { element.dom().scrollTop = destination; $_btgbcy103jdud7f3t.set(element, 'top', finalTop + 'px'); callback(destination); }; animator.animate(getCurrent, destination, ANIMATION_STEP, update, finish, ANIMATION_RATE); }); }; var moveOnlyScroll = function (element, destination) { return Future.nu(function (callback) { var getCurrent = $_9njj9iwjjdud7eix.curry(getScrollTop, element); $_2vghk1xrjdud7ems.set(element, lastScroll, getCurrent()); var update = function (newScroll, abort) { var previous = $_1bs4n9147jdud7fsm.safeParse(element, lastScroll); if (previous !== element.dom().scrollTop) { abort(element.dom().scrollTop); } else { element.dom().scrollTop = newScroll; $_2vghk1xrjdud7ems.set(element, lastScroll, newScroll); } }; var finish = function () { element.dom().scrollTop = destination; $_2vghk1xrjdud7ems.set(element, lastScroll, destination); callback(destination); }; var distance = Math.abs(destination - getCurrent()); var step = Math.ceil(distance / NUM_TOP_ANIMATION_FRAMES); animator.animate(getCurrent, destination, step, update, finish, ANIMATION_RATE); }); }; var moveOnlyTop = function (element, destination) { return Future.nu(function (callback) { var getCurrent = $_9njj9iwjjdud7eix.curry(getTop, element); var update = function (newTop) { $_btgbcy103jdud7f3t.set(element, 'top', newTop + 'px'); }; var finish = function () { update(destination); callback(destination); }; var distance = Math.abs(destination - getCurrent()); var step = Math.ceil(distance / NUM_TOP_ANIMATION_FRAMES); animator.animate(getCurrent, destination, step, update, finish, ANIMATION_RATE); }); }; var updateTop = function (element, amount) { var newTop = amount + $_efto7m15zjdud7g31.getYFixedData(element) + 'px'; $_btgbcy103jdud7f3t.set(element, 'top', newTop); }; var moveWindowScroll = function (toolbar, viewport, destY) { var outerWindow = $_dekwe2x3jdud7ekr.owner(toolbar).dom().defaultView; return Future.nu(function (callback) { updateTop(toolbar, destY); updateTop(viewport, destY); outerWindow.scrollTo(0, destY); callback(destY); }); }; var $_daro4h15ujdud7g2d = { moveScrollAndTop: moveScrollAndTop, moveOnlyScroll: moveOnlyScroll, moveOnlyTop: moveOnlyTop, moveWindowScroll: moveWindowScroll }; function BackgroundActivity (doAction) { var action = Cell(LazyValue.pure({})); var start = function (value) { var future = LazyValue.nu(function (callback) { return doAction(value).get(callback); }); action.set(future); }; var idle = function (g) { action.get().get(function () { g(); }); }; return { start: start, idle: idle }; } var scrollIntoView = function (cWin, socket, dropup, top, bottom) { var greenzone = $_alvh5y160jdud7g3e.getGreenzone(socket, dropup); var refreshCursor = $_9njj9iwjjdud7eix.curry($_2v0qs115qjdud7g1f.refresh, cWin); if (top > greenzone || bottom > greenzone) { $_daro4h15ujdud7g2d.moveOnlyScroll(socket, socket.dom().scrollTop - greenzone + bottom).get(refreshCursor); } else if (top < 0) { $_daro4h15ujdud7g2d.moveOnlyScroll(socket, socket.dom().scrollTop + top).get(refreshCursor); } else { } }; var $_4fyqnl163jdud7g3q = { scrollIntoView: scrollIntoView }; var par = function (asyncValues, nu) { return nu(function (callback) { var r = []; var count = 0; var cb = function (i) { return function (value) { r[i] = value; count++; if (count >= asyncValues.length) { callback(r); } }; }; if (asyncValues.length === 0) { callback([]); } else { $_1g2cevwsjdud7ejp.each(asyncValues, function (asyncValue, i) { asyncValue.get(cb(i)); }); } }); }; var $_8gmqij166jdud7g40 = { par: par }; var par$1 = function (futures) { return $_8gmqij166jdud7g40.par(futures, Future.nu); }; var mapM = function (array, fn) { var futures = $_1g2cevwsjdud7ejp.map(array, fn); return par$1(futures); }; var compose$1 = function (f, g) { return function (a) { return g(a).bind(f); }; }; var $_9xg2nn165jdud7g3z = { par: par$1, mapM: mapM, compose: compose$1 }; var updateFixed = function (element, property, winY, offsetY) { var destination = winY + offsetY; $_btgbcy103jdud7f3t.set(element, property, destination + 'px'); return Future.pure(offsetY); }; var updateScrollingFixed = function (element, winY, offsetY) { var destTop = winY + offsetY; var oldProp = $_btgbcy103jdud7f3t.getRaw(element, 'top').getOr(offsetY); var delta = destTop - parseInt(oldProp, 10); var destScroll = element.dom().scrollTop + delta; return $_daro4h15ujdud7g2d.moveScrollAndTop(element, destScroll, destTop); }; var updateFixture = function (fixture, winY) { return fixture.fold(function (element, property, offsetY) { return updateFixed(element, property, winY, offsetY); }, function (element, offsetY) { return updateScrollingFixed(element, winY, offsetY); }); }; var updatePositions = function (container, winY) { var fixtures = $_efto7m15zjdud7g31.findFixtures(container); var updates = $_1g2cevwsjdud7ejp.map(fixtures, function (fixture) { return updateFixture(fixture, winY); }); return $_9xg2nn165jdud7g3z.par(updates); }; var $_3kanae164jdud7g3u = { updatePositions: updatePositions }; var VIEW_MARGIN = 5; var register$2 = function (toolstrip, socket, container, outerWindow, structure, cWin) { var scroller = BackgroundActivity(function (y) { return $_daro4h15ujdud7g2d.moveWindowScroll(toolstrip, socket, y); }); var scrollBounds = function () { var rects = $_5lp8kt148jdud7fso.getRectangles(cWin); return Option.from(rects[0]).bind(function (rect) { var viewTop = rect.top() - socket.dom().scrollTop; var outside = viewTop > outerWindow.innerHeight + VIEW_MARGIN || viewTop < -VIEW_MARGIN; return outside ? Option.some({ top: $_9njj9iwjjdud7eix.constant(viewTop), bottom: $_9njj9iwjjdud7eix.constant(viewTop + rect.height()) }) : Option.none(); }); }; var scrollThrottle = $_dfio3v14wjdud7fvy.last(function () { scroller.idle(function () { $_3kanae164jdud7g3u.updatePositions(container, outerWindow.pageYOffset).get(function () { var extraScroll = scrollBounds(); extraScroll.each(function (extra) { socket.dom().scrollTop = socket.dom().scrollTop + extra.top(); }); scroller.start(0); structure.refresh(); }); }); }, 1000); var onScroll = $_5x7hr513xjdud7fqz.bind($_eobgtqxfjdud7elu.fromDom(outerWindow), 'scroll', function () { if (outerWindow.pageYOffset < 0) { return; } scrollThrottle.throttle(); }); $_3kanae164jdud7g3u.updatePositions(container, outerWindow.pageYOffset).get($_9njj9iwjjdud7eix.identity); return { unbind: onScroll.unbind }; }; var setup$3 = function (bag) { var cWin = bag.cWin(); var ceBody = bag.ceBody(); var socket = bag.socket(); var toolstrip = bag.toolstrip(); var toolbar = bag.toolbar(); var contentElement = bag.contentElement(); var keyboardType = bag.keyboardType(); var outerWindow = bag.outerWindow(); var dropup = bag.dropup(); var structure = $_efto7m15zjdud7g31.takeover(socket, ceBody, toolstrip, dropup); var keyboardModel = keyboardType(bag.outerBody(), cWin, $_1tyeizxjjdud7em4.body(), contentElement, toolstrip, toolbar); var toEditing = function () { keyboardModel.toEditing(); clearSelection(); }; var toReading = function () { keyboardModel.toReading(); }; var onToolbarTouch = function (event) { keyboardModel.onToolbarTouch(event); }; var onOrientation = $_9zlehr13wjdud7fqs.onChange(outerWindow, { onChange: $_9njj9iwjjdud7eix.noop, onReady: structure.refresh }); onOrientation.onAdjustment(function () { structure.refresh(); }); var onResize = $_5x7hr513xjdud7fqz.bind($_eobgtqxfjdud7elu.fromDom(outerWindow), 'resize', function () { if (structure.isExpanding()) { structure.refresh(); } }); var onScroll = register$2(toolstrip, socket, bag.outerBody(), outerWindow, structure, cWin); var unfocusedSelection = FakeSelection(cWin, contentElement); var refreshSelection = function () { if (unfocusedSelection.isActive()) { unfocusedSelection.update(); } }; var highlightSelection = function () { unfocusedSelection.update(); }; var clearSelection = function () { unfocusedSelection.clear(); }; var scrollIntoView = function (top, bottom) { $_4fyqnl163jdud7g3q.scrollIntoView(cWin, socket, dropup, top, bottom); }; var syncHeight = function () { $_btgbcy103jdud7f3t.set(contentElement, 'height', contentElement.dom().contentWindow.document.body.scrollHeight + 'px'); }; var setViewportOffset = function (newYOffset) { structure.setViewportOffset(newYOffset); $_daro4h15ujdud7g2d.moveOnlyTop(socket, newYOffset).get($_9njj9iwjjdud7eix.identity); }; var destroy = function () { structure.restore(); onOrientation.destroy(); onScroll.unbind(); onResize.unbind(); keyboardModel.destroy(); unfocusedSelection.destroy(); $_6rnw9j15ojdud7g16.input($_1tyeizxjjdud7em4.body(), $_25580rytjdud7ey7.blur); }; return { toEditing: toEditing, toReading: toReading, onToolbarTouch: onToolbarTouch, refreshSelection: refreshSelection, clearSelection: clearSelection, highlightSelection: highlightSelection, scrollIntoView: scrollIntoView, updateToolbarPadding: $_9njj9iwjjdud7eix.noop, setViewportOffset: setViewportOffset, syncHeight: syncHeight, refreshStructure: structure.refresh, destroy: destroy }; }; var $_1f632615sjdud7g1q = { setup: setup$3 }; var create$8 = function (platform, mask) { var meta = $_9dstax14ujdud7fvm.tag(); var priorState = $_9fhyae12ojdud7fij.value(); var scrollEvents = $_9fhyae12ojdud7fij.value(); var iosApi = $_9fhyae12ojdud7fij.api(); var iosEvents = $_9fhyae12ojdud7fij.api(); var enter = function () { mask.hide(); var doc = $_eobgtqxfjdud7elu.fromDom(document); $_8faw2r14sjdud7fv0.getActiveApi(platform.editor).each(function (editorApi) { priorState.set({ socketHeight: $_btgbcy103jdud7f3t.getRaw(platform.socket, 'height'), iframeHeight: $_btgbcy103jdud7f3t.getRaw(editorApi.frame(), 'height'), outerScroll: document.body.scrollTop }); scrollEvents.set({ exclusives: $_dvdycr153jdud7fwy.exclusive(doc, '.' + $_bhtyzh13ujdud7fqk.scrollable()) }); $_1x3ogvynjdud7exn.add(platform.container, $_5qzh4bzejdud7f0y.resolve('fullscreen-maximized')); $_fjm65f14tjdud7fv9.clobberStyles(platform.container, editorApi.body()); meta.maximize(); $_btgbcy103jdud7f3t.set(platform.socket, 'overflow', 'scroll'); $_btgbcy103jdud7f3t.set(platform.socket, '-webkit-overflow-scrolling', 'touch'); $_25580rytjdud7ey7.focus(editorApi.body()); var setupBag = $_8o1q69x4jdud7ekz.immutableBag([ 'cWin', 'ceBody', 'socket', 'toolstrip', 'toolbar', 'dropup', 'contentElement', 'cursor', 'keyboardType', 'isScrolling', 'outerWindow', 'outerBody' ], []); iosApi.set($_1f632615sjdud7g1q.setup(setupBag({ cWin: editorApi.win(), ceBody: editorApi.body(), socket: platform.socket, toolstrip: platform.toolstrip, toolbar: platform.toolbar, dropup: platform.dropup.element(), contentElement: editorApi.frame(), cursor: $_9njj9iwjjdud7eix.noop, outerBody: platform.body, outerWindow: platform.win, keyboardType: $_fx7jg115njdud7g0u.stubborn, isScrolling: function () { return scrollEvents.get().exists(function (s) { return s.socket.isScrolling(); }); } }))); iosApi.run(function (api) { api.syncHeight(); }); iosEvents.set($_1nj2i15rjdud7g1i.initEvents(editorApi, iosApi, platform.toolstrip, platform.socket, platform.dropup)); }); }; var exit = function () { meta.restore(); iosEvents.clear(); iosApi.clear(); mask.show(); priorState.on(function (s) { s.socketHeight.each(function (h) { $_btgbcy103jdud7f3t.set(platform.socket, 'height', h); }); s.iframeHeight.each(function (h) { $_btgbcy103jdud7f3t.set(platform.editor.getFrame(), 'height', h); }); document.body.scrollTop = s.scrollTop; }); priorState.clear(); scrollEvents.on(function (s) { s.exclusives.unbind(); }); scrollEvents.clear(); $_1x3ogvynjdud7exn.remove(platform.container, $_5qzh4bzejdud7f0y.resolve('fullscreen-maximized')); $_fjm65f14tjdud7fv9.restoreStyles(); $_bhtyzh13ujdud7fqk.deregister(platform.toolbar); $_btgbcy103jdud7f3t.remove(platform.socket, 'overflow'); $_btgbcy103jdud7f3t.remove(platform.socket, '-webkit-overflow-scrolling'); $_25580rytjdud7ey7.blur(platform.editor.getFrame()); $_8faw2r14sjdud7fv0.getActiveApi(platform.editor).each(function (editorApi) { editorApi.clearSelection(); }); }; var refreshStructure = function () { iosApi.run(function (api) { api.refreshStructure(); }); }; return { enter: enter, refreshStructure: refreshStructure, exit: exit }; }; var $_39i30915mjdud7g0i = { create: create$8 }; var produce$1 = function (raw) { var mobile = $_13hkebyejdud7ewm.asRawOrDie('Getting IosWebapp schema', MobileSchema, raw); $_btgbcy103jdud7f3t.set(mobile.toolstrip, 'width', '100%'); $_btgbcy103jdud7f3t.set(mobile.container, 'position', 'relative'); var onView = function () { mobile.setReadOnly(true); mode.enter(); }; var mask = $_ap2ej712tjdud7fjl.build($_ddqihl14vjdud7fvr.sketch(onView, mobile.translate)); mobile.alloy.add(mask); var maskApi = { show: function () { mobile.alloy.add(mask); }, hide: function () { mobile.alloy.remove(mask); } }; var mode = $_39i30915mjdud7g0i.create(mobile, maskApi); return { setReadOnly: mobile.setReadOnly, refreshStructure: mode.refreshStructure, enter: mode.enter, exit: mode.exit, destroy: $_9njj9iwjjdud7eix.noop }; }; var $_bg5sjd15ljdud7g0d = { produce: produce$1 }; function IosRealm (scrollIntoView) { var alloy = OuterContainer({ classes: [$_5qzh4bzejdud7f0y.resolve('ios-container')] }); var toolbar = ScrollingToolbar(); var webapp = $_9fhyae12ojdud7fij.api(); var switchToEdit = $_enp5ds154jdud7fxb.makeEditSwitch(webapp); var socket = $_enp5ds154jdud7fxb.makeSocket(); var dropup = $_9ihizd155jdud7fxi.build(function () { webapp.run(function (w) { w.refreshStructure(); }); }, scrollIntoView); alloy.add(toolbar.wrapper()); alloy.add(socket); alloy.add(dropup.component()); var setToolbarGroups = function (rawGroups) { var groups = toolbar.createGroups(rawGroups); toolbar.setGroups(groups); }; var setContextToolbar = function (rawGroups) { var groups = toolbar.createGroups(rawGroups); toolbar.setContextToolbar(groups); }; var focusToolbar = function () { toolbar.focus(); }; var restoreToolbar = function () { toolbar.restoreToolbar(); }; var init = function (spec) { webapp.set($_bg5sjd15ljdud7g0d.produce(spec)); }; var exit = function () { webapp.run(function (w) { Replacing.remove(socket, switchToEdit); w.exit(); }); }; var updateMode = function (readOnly) { $_enp5ds154jdud7fxb.updateMode(socket, switchToEdit, readOnly, alloy.root()); }; return { system: $_9njj9iwjjdud7eix.constant(alloy), element: alloy.element, init: init, exit: exit, setToolbarGroups: setToolbarGroups, setContextToolbar: setContextToolbar, focusToolbar: focusToolbar, restoreToolbar: restoreToolbar, updateMode: updateMode, socket: $_9njj9iwjjdud7eix.constant(socket), dropup: $_9njj9iwjjdud7eix.constant(dropup) }; } var EditorManager = tinymce.util.Tools.resolve('tinymce.EditorManager'); var derive$4 = function (editor) { var base = $_ettibkxsjdud7emz.readOptFrom(editor.settings, 'skin_url').fold(function () { return EditorManager.baseURL + '/skins/' + 'lightgray'; }, function (url) { return url; }); return { content: base + '/content.mobile.min.css', ui: base + '/skin.mobile.min.css' }; }; var $_59h54f167jdud7g42 = { derive: derive$4 }; var fontSizes = [ 'x-small', 'small', 'medium', 'large', 'x-large' ]; var fireChange$1 = function (realm, command, state) { realm.system().broadcastOn([$_dlmrcrz1jdud7eyr.formatChanged()], { command: command, state: state }); }; var init$5 = function (realm, editor) { var allFormats = $_2dykn0x0jdud7ekc.keys(editor.formatter.get()); $_1g2cevwsjdud7ejp.each(allFormats, function (command) { editor.formatter.formatChanged(command, function (state) { fireChange$1(realm, command, state); }); }); $_1g2cevwsjdud7ejp.each([ 'ul', 'ol' ], function (command) { editor.selection.selectorChanged(command, function (state, data) { fireChange$1(realm, command, state); }); }); }; var $_3v45zx169jdud7g45 = { init: init$5, fontSizes: $_9njj9iwjjdud7eix.constant(fontSizes) }; var fireSkinLoaded = function (editor) { var done = function () { editor._skinLoaded = true; editor.fire('SkinLoaded'); }; return function () { if (editor.initialized) { done(); } else { editor.on('init', done); } }; }; var $_51lca516ajdud7g48 = { fireSkinLoaded: fireSkinLoaded }; var READING = $_9njj9iwjjdud7eix.constant('toReading'); var EDITING = $_9njj9iwjjdud7eix.constant('toEditing'); ThemeManager.add('mobile', function (editor) { var renderUI = function (args) { var cssUrls = $_59h54f167jdud7g42.derive(editor); if ($_1ue238z0jdud7eyq.isSkinDisabled(editor) === false) { editor.contentCSS.push(cssUrls.content); DOMUtils.DOM.styleSheetLoader.load(cssUrls.ui, $_51lca516ajdud7g48.fireSkinLoaded(editor)); } else { $_51lca516ajdud7g48.fireSkinLoaded(editor)(); } var doScrollIntoView = function () { editor.fire('scrollIntoView'); }; var wrapper = $_eobgtqxfjdud7elu.fromTag('div'); var realm = $_chh2cvwkjdud7ej0.detect().os.isAndroid() ? AndroidRealm(doScrollIntoView) : IosRealm(doScrollIntoView); var original = $_eobgtqxfjdud7elu.fromDom(args.targetNode); $_ftkbb5x2jdud7ekp.after(original, wrapper); $_fesilqx1jdud7ekf.attachSystem(wrapper, realm.system()); var findFocusIn = function (elem) { return $_25580rytjdud7ey7.search(elem).bind(function (focused) { return realm.system().getByDom(focused).toOption(); }); }; var outerWindow = args.targetNode.ownerDocument.defaultView; var orientation = $_9zlehr13wjdud7fqs.onChange(outerWindow, { onChange: function () { var alloy = realm.system(); alloy.broadcastOn([$_dlmrcrz1jdud7eyr.orientationChanged()], { width: $_9zlehr13wjdud7fqs.getActualWidth(outerWindow) }); }, onReady: $_9njj9iwjjdud7eix.noop }); var setReadOnly = function (readOnlyGroups, mainGroups, ro) { if (ro === false) { editor.selection.collapse(); } realm.setToolbarGroups(ro ? readOnlyGroups.get() : mainGroups.get()); editor.setMode(ro === true ? 'readonly' : 'design'); editor.fire(ro === true ? READING() : EDITING()); realm.updateMode(ro); }; var bindHandler = function (label, handler) { editor.on(label, handler); return { unbind: function () { editor.off(label); } }; }; editor.on('init', function () { realm.init({ editor: { getFrame: function () { return $_eobgtqxfjdud7elu.fromDom(editor.contentAreaContainer.querySelector('iframe')); }, onDomChanged: function () { return { unbind: $_9njj9iwjjdud7eix.noop }; }, onToReading: function (handler) { return bindHandler(READING(), handler); }, onToEditing: function (handler) { return bindHandler(EDITING(), handler); }, onScrollToCursor: function (handler) { editor.on('scrollIntoView', function (tinyEvent) { handler(tinyEvent); }); var unbind = function () { editor.off('scrollIntoView'); orientation.destroy(); }; return { unbind: unbind }; }, onTouchToolstrip: function () { hideDropup(); }, onTouchContent: function () { var toolbar = $_eobgtqxfjdud7elu.fromDom(editor.editorContainer.querySelector('.' + $_5qzh4bzejdud7f0y.resolve('toolbar'))); findFocusIn(toolbar).each($_98da6jwgjdud7eil.emitExecute); realm.restoreToolbar(); hideDropup(); }, onTapContent: function (evt) { var target = evt.target(); if ($_50qkdpxkjdud7em6.name(target) === 'img') { editor.selection.select(target.dom()); evt.kill(); } else if ($_50qkdpxkjdud7em6.name(target) === 'a') { var component = realm.system().getByDom($_eobgtqxfjdud7elu.fromDom(editor.editorContainer)); component.each(function (container) { if (Swapping.isAlpha(container)) { $_6cir74yzjdud7eyp.openLink(target.dom()); } }); } } }, container: $_eobgtqxfjdud7elu.fromDom(editor.editorContainer), socket: $_eobgtqxfjdud7elu.fromDom(editor.contentAreaContainer), toolstrip: $_eobgtqxfjdud7elu.fromDom(editor.editorContainer.querySelector('.' + $_5qzh4bzejdud7f0y.resolve('toolstrip'))), toolbar: $_eobgtqxfjdud7elu.fromDom(editor.editorContainer.querySelector('.' + $_5qzh4bzejdud7f0y.resolve('toolbar'))), dropup: realm.dropup(), alloy: realm.system(), translate: $_9njj9iwjjdud7eix.noop, setReadOnly: function (ro) { setReadOnly(readOnlyGroups, mainGroups, ro); } }); var hideDropup = function () { realm.dropup().disappear(function () { realm.system().broadcastOn([$_dlmrcrz1jdud7eyr.dropupDismissed()], {}); }); }; $_efa715xljdud7em8.registerInspector('remove this', realm.system()); var backToMaskGroup = { label: 'The first group', scrollable: false, items: [$_d0l7buzfjdud7f11.forToolbar('back', function () { editor.selection.collapse(); realm.exit(); }, {})] }; var backToReadOnlyGroup = { label: 'Back to read only', scrollable: false, items: [$_d0l7buzfjdud7f11.forToolbar('readonly-back', function () { setReadOnly(readOnlyGroups, mainGroups, true); }, {})] }; var readOnlyGroup = { label: 'The read only mode group', scrollable: true, items: [] }; var features = $_44tgozz2jdud7eyu.setup(realm, editor); var items = $_44tgozz2jdud7eyu.detect(editor.settings, features); var actionGroup = { label: 'the action group', scrollable: true, items: items }; var extraGroup = { label: 'The extra group', scrollable: false, items: [] }; var mainGroups = Cell([ backToReadOnlyGroup, actionGroup, extraGroup ]); var readOnlyGroups = Cell([ backToMaskGroup, readOnlyGroup, extraGroup ]); $_3v45zx169jdud7g45.init(realm, editor); }); return { iframeContainer: realm.socket().element().dom(), editorContainer: realm.element().dom() }; }; return { getNotificationManagerImpl: function () { return { open: $_9njj9iwjjdud7eix.identity, close: $_9njj9iwjjdud7eix.noop, reposition: $_9njj9iwjjdud7eix.noop, getArgs: $_9njj9iwjjdud7eix.identity }; }, renderUI: renderUI }; }); function Theme () { } return Theme; }()); })();