A minimal web player written in Elm, just for fun. The goals was a minimal web-app that can be hosted on my Minio (s3) next to the video content.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
minimal-webplayer/index.html

6497 lines
140 KiB

<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>Main</title>
<style>body { padding: 0; margin: 0; }</style>
</head>
<body>
<pre id="elm"></pre>
<script>
try {
(function(scope){
'use strict';
function F(arity, fun, wrapper) {
wrapper.a = arity;
wrapper.f = fun;
return wrapper;
}
function F2(fun) {
return F(2, fun, function(a) { return function(b) { return fun(a,b); }; })
}
function F3(fun) {
return F(3, fun, function(a) {
return function(b) { return function(c) { return fun(a, b, c); }; };
});
}
function F4(fun) {
return F(4, fun, function(a) { return function(b) { return function(c) {
return function(d) { return fun(a, b, c, d); }; }; };
});
}
function F5(fun) {
return F(5, fun, function(a) { return function(b) { return function(c) {
return function(d) { return function(e) { return fun(a, b, c, d, e); }; }; }; };
});
}
function F6(fun) {
return F(6, fun, function(a) { return function(b) { return function(c) {
return function(d) { return function(e) { return function(f) {
return fun(a, b, c, d, e, f); }; }; }; }; };
});
}
function F7(fun) {
return F(7, fun, function(a) { return function(b) { return function(c) {
return function(d) { return function(e) { return function(f) {
return function(g) { return fun(a, b, c, d, e, f, g); }; }; }; }; }; };
});
}
function F8(fun) {
return F(8, fun, function(a) { return function(b) { return function(c) {
return function(d) { return function(e) { return function(f) {
return function(g) { return function(h) {
return fun(a, b, c, d, e, f, g, h); }; }; }; }; }; }; };
});
}
function F9(fun) {
return F(9, fun, function(a) { return function(b) { return function(c) {
return function(d) { return function(e) { return function(f) {
return function(g) { return function(h) { return function(i) {
return fun(a, b, c, d, e, f, g, h, i); }; }; }; }; }; }; }; };
});
}
function A2(fun, a, b) {
return fun.a === 2 ? fun.f(a, b) : fun(a)(b);
}
function A3(fun, a, b, c) {
return fun.a === 3 ? fun.f(a, b, c) : fun(a)(b)(c);
}
function A4(fun, a, b, c, d) {
return fun.a === 4 ? fun.f(a, b, c, d) : fun(a)(b)(c)(d);
}
function A5(fun, a, b, c, d, e) {
return fun.a === 5 ? fun.f(a, b, c, d, e) : fun(a)(b)(c)(d)(e);
}
function A6(fun, a, b, c, d, e, f) {
return fun.a === 6 ? fun.f(a, b, c, d, e, f) : fun(a)(b)(c)(d)(e)(f);
}
function A7(fun, a, b, c, d, e, f, g) {
return fun.a === 7 ? fun.f(a, b, c, d, e, f, g) : fun(a)(b)(c)(d)(e)(f)(g);
}
function A8(fun, a, b, c, d, e, f, g, h) {
return fun.a === 8 ? fun.f(a, b, c, d, e, f, g, h) : fun(a)(b)(c)(d)(e)(f)(g)(h);
}
function A9(fun, a, b, c, d, e, f, g, h, i) {
return fun.a === 9 ? fun.f(a, b, c, d, e, f, g, h, i) : fun(a)(b)(c)(d)(e)(f)(g)(h)(i);
}
console.warn('Compiled in DEV mode. Follow the advice at https://elm-lang.org/0.19.1/optimize for better performance and smaller assets.');
var _JsArray_empty = [];
function _JsArray_singleton(value)
{
return [value];
}
function _JsArray_length(array)
{
return array.length;
}
var _JsArray_initialize = F3(function(size, offset, func)
{
var result = new Array(size);
for (var i = 0; i < size; i++)
{
result[i] = func(offset + i);
}
return result;
});
var _JsArray_initializeFromList = F2(function (max, ls)
{
var result = new Array(max);
for (var i = 0; i < max && ls.b; i++)
{
result[i] = ls.a;
ls = ls.b;
}
result.length = i;
return _Utils_Tuple2(result, ls);
});
var _JsArray_unsafeGet = F2(function(index, array)
{
return array[index];
});
var _JsArray_unsafeSet = F3(function(index, value, array)
{
var length = array.length;
var result = new Array(length);
for (var i = 0; i < length; i++)
{
result[i] = array[i];
}
result[index] = value;
return result;
});
var _JsArray_push = F2(function(value, array)
{
var length = array.length;
var result = new Array(length + 1);
for (var i = 0; i < length; i++)
{
result[i] = array[i];
}
result[length] = value;
return result;
});
var _JsArray_foldl = F3(function(func, acc, array)
{
var length = array.length;
for (var i = 0; i < length; i++)
{
acc = A2(func, array[i], acc);
}
return acc;
});
var _JsArray_foldr = F3(function(func, acc, array)
{
for (var i = array.length - 1; i >= 0; i--)
{
acc = A2(func, array[i], acc);
}
return acc;
});
var _JsArray_map = F2(function(func, array)
{
var length = array.length;
var result = new Array(length);
for (var i = 0; i < length; i++)
{
result[i] = func(array[i]);
}
return result;
});
var _JsArray_indexedMap = F3(function(func, offset, array)
{
var length = array.length;
var result = new Array(length);
for (var i = 0; i < length; i++)
{
result[i] = A2(func, offset + i, array[i]);
}
return result;
});
var _JsArray_slice = F3(function(from, to, array)
{
return array.slice(from, to);
});
var _JsArray_appendN = F3(function(n, dest, source)
{
var destLen = dest.length;
var itemsToCopy = n - destLen;
if (itemsToCopy > source.length)
{
itemsToCopy = source.length;
}
var size = destLen + itemsToCopy;
var result = new Array(size);
for (var i = 0; i < destLen; i++)
{
result[i] = dest[i];
}
for (var i = 0; i < itemsToCopy; i++)
{
result[i + destLen] = source[i];
}
return result;
});
// LOG
var _Debug_log_UNUSED = F2(function(tag, value)
{
return value;
});
var _Debug_log = F2(function(tag, value)
{
console.log(tag + ': ' + _Debug_toString(value));
return value;
});
// TODOS
function _Debug_todo(moduleName, region)
{
return function(message) {
_Debug_crash(8, moduleName, region, message);
};
}
function _Debug_todoCase(moduleName, region, value)
{
return function(message) {
_Debug_crash(9, moduleName, region, value, message);
};
}
// TO STRING
function _Debug_toString_UNUSED(value)
{
return '<internals>';
}
function _Debug_toString(value)
{
return _Debug_toAnsiString(false, value);
}
function _Debug_toAnsiString(ansi, value)
{
if (typeof value === 'function')
{
return _Debug_internalColor(ansi, '<function>');
}
if (typeof value === 'boolean')
{
return _Debug_ctorColor(ansi, value ? 'True' : 'False');
}
if (typeof value === 'number')
{
return _Debug_numberColor(ansi, value + '');
}
if (value instanceof String)
{
return _Debug_charColor(ansi, "'" + _Debug_addSlashes(value, true) + "'");
}
if (typeof value === 'string')
{
return _Debug_stringColor(ansi, '"' + _Debug_addSlashes(value, false) + '"');
}
if (typeof value === 'object' && '$' in value)
{
var tag = value.$;
if (typeof tag === 'number')
{
return _Debug_internalColor(ansi, '<internals>');
}
if (tag[0] === '#')
{
var output = [];
for (var k in value)
{
if (k === '$') continue;
output.push(_Debug_toAnsiString(ansi, value[k]));
}
return '(' + output.join(',') + ')';
}
if (tag === 'Set_elm_builtin')
{
return _Debug_ctorColor(ansi, 'Set')
+ _Debug_fadeColor(ansi, '.fromList') + ' '
+ _Debug_toAnsiString(ansi, $elm$core$Set$toList(value));
}
if (tag === 'RBNode_elm_builtin' || tag === 'RBEmpty_elm_builtin')
{
return _Debug_ctorColor(ansi, 'Dict')
+ _Debug_fadeColor(ansi, '.fromList') + ' '
+ _Debug_toAnsiString(ansi, $elm$core$Dict$toList(value));
}
if (tag === 'Array_elm_builtin')
{
return _Debug_ctorColor(ansi, 'Array')
+ _Debug_fadeColor(ansi, '.fromList') + ' '
+ _Debug_toAnsiString(ansi, $elm$core$Array$toList(value));
}
if (tag === '::' || tag === '[]')
{
var output = '[';
value.b && (output += _Debug_toAnsiString(ansi, value.a), value = value.b)
for (; value.b; value = value.b) // WHILE_CONS
{
output += ',' + _Debug_toAnsiString(ansi, value.a);
}
return output + ']';
}
var output = '';
for (var i in value)
{
if (i === '$') continue;
var str = _Debug_toAnsiString(ansi, value[i]);
var c0 = str[0];
var parenless = c0 === '{' || c0 === '(' || c0 === '[' || c0 === '<' || c0 === '"' || str.indexOf(' ') < 0;
output += ' ' + (parenless ? str : '(' + str + ')');
}
return _Debug_ctorColor(ansi, tag) + output;
}
if (typeof DataView === 'function' && value instanceof DataView)
{
return _Debug_stringColor(ansi, '<' + value.byteLength + ' bytes>');
}
if (typeof File !== 'undefined' && value instanceof File)
{
return _Debug_internalColor(ansi, '<' + value.name + '>');
}
if (typeof value === 'object')
{
var output = [];
for (var key in value)
{
var field = key[0] === '_' ? key.slice(1) : key;
output.push(_Debug_fadeColor(ansi, field) + ' = ' + _Debug_toAnsiString(ansi, value[key]));
}
if (output.length === 0)
{
return '{}';
}
return '{ ' + output.join(', ') + ' }';
}
return _Debug_internalColor(ansi, '<internals>');
}
function _Debug_addSlashes(str, isChar)
{
var s = str
.replace(/\\/g, '\\\\')
.replace(/\n/g, '\\n')
.replace(/\t/g, '\\t')
.replace(/\r/g, '\\r')
.replace(/\v/g, '\\v')
.replace(/\0/g, '\\0');
if (isChar)
{
return s.replace(/\'/g, '\\\'');
}
else
{
return s.replace(/\"/g, '\\"');
}
}
function _Debug_ctorColor(ansi, string)
{
return ansi ? '\x1b[96m' + string + '\x1b[0m' : string;
}
function _Debug_numberColor(ansi, string)
{
return ansi ? '\x1b[95m' + string + '\x1b[0m' : string;
}
function _Debug_stringColor(ansi, string)
{
return ansi ? '\x1b[93m' + string + '\x1b[0m' : string;
}
function _Debug_charColor(ansi, string)
{
return ansi ? '\x1b[92m' + string + '\x1b[0m' : string;
}
function _Debug_fadeColor(ansi, string)
{
return ansi ? '\x1b[37m' + string + '\x1b[0m' : string;
}
function _Debug_internalColor(ansi, string)
{
return ansi ? '\x1b[36m' + string + '\x1b[0m' : string;
}
function _Debug_toHexDigit(n)
{
return String.fromCharCode(n < 10 ? 48 + n : 55 + n);
}
// CRASH
function _Debug_crash_UNUSED(identifier)
{
throw new Error('https://github.com/elm/core/blob/1.0.0/hints/' + identifier + '.md');
}
function _Debug_crash(identifier, fact1, fact2, fact3, fact4)
{
switch(identifier)
{
case 0:
throw new Error('What node should I take over? In JavaScript I need something like:\n\n Elm.Main.init({\n node: document.getElementById("elm-node")\n })\n\nYou need to do this with any Browser.sandbox or Browser.element program.');
case 1:
throw new Error('Browser.application programs cannot handle URLs like this:\n\n ' + document.location.href + '\n\nWhat is the root? The root of your file system? Try looking at this program with `elm reactor` or some other server.');
case 2:
var jsonErrorString = fact1;
throw new Error('Problem with the flags given to your Elm program on initialization.\n\n' + jsonErrorString);
case 3:
var portName = fact1;
throw new Error('There can only be one port named `' + portName + '`, but your program has multiple.');
case 4:
var portName = fact1;
var problem = fact2;
throw new Error('Trying to send an unexpected type of value through port `' + portName + '`:\n' + problem);
case 5:
throw new Error('Trying to use `(==)` on functions.\nThere is no way to know if functions are "the same" in the Elm sense.\nRead more about this at https://package.elm-lang.org/packages/elm/core/latest/Basics#== which describes why it is this way and what the better version will look like.');
case 6:
var moduleName = fact1;
throw new Error('Your page is loading multiple Elm scripts with a module named ' + moduleName + '. Maybe a duplicate script is getting loaded accidentally? If not, rename one of them so I know which is which!');
case 8:
var moduleName = fact1;
var region = fact2;
var message = fact3;
throw new Error('TODO in module `' + moduleName + '` ' + _Debug_regionToString(region) + '\n\n' + message);
case 9:
var moduleName = fact1;
var region = fact2;
var value = fact3;
var message = fact4;
throw new Error(
'TODO in module `' + moduleName + '` from the `case` expression '
+ _Debug_regionToString(region) + '\n\nIt received the following value:\n\n '
+ _Debug_toString(value).replace('\n', '\n ')
+ '\n\nBut the branch that handles it says:\n\n ' + message.replace('\n', '\n ')
);
case 10:
throw new Error('Bug in https://github.com/elm/virtual-dom/issues');
case 11:
throw new Error('Cannot perform mod 0. Division by zero error.');
}
}
function _Debug_regionToString(region)
{
if (region.start.line === region.end.line)
{
return 'on line ' + region.start.line;
}
return 'on lines ' + region.start.line + ' through ' + region.end.line;
}
// EQUALITY
function _Utils_eq(x, y)
{
for (
var pair, stack = [], isEqual = _Utils_eqHelp(x, y, 0, stack);
isEqual && (pair = stack.pop());
isEqual = _Utils_eqHelp(pair.a, pair.b, 0, stack)
)
{}
return isEqual;
}
function _Utils_eqHelp(x, y, depth, stack)
{
if (x === y)
{
return true;
}
if (typeof x !== 'object' || x === null || y === null)
{
typeof x === 'function' && _Debug_crash(5);
return false;
}
if (depth > 100)
{
stack.push(_Utils_Tuple2(x,y));
return true;
}
/**/
if (x.$ === 'Set_elm_builtin')
{
x = $elm$core$Set$toList(x);
y = $elm$core$Set$toList(y);
}
if (x.$ === 'RBNode_elm_builtin' || x.$ === 'RBEmpty_elm_builtin')
{
x = $elm$core$Dict$toList(x);
y = $elm$core$Dict$toList(y);
}
//*/
/**_UNUSED/
if (x.$ < 0)
{
x = $elm$core$Dict$toList(x);
y = $elm$core$Dict$toList(y);
}
//*/
for (var key in x)
{
if (!_Utils_eqHelp(x[key], y[key], depth + 1, stack))
{
return false;
}
}
return true;
}
var _Utils_equal = F2(_Utils_eq);
var _Utils_notEqual = F2(function(a, b) { return !_Utils_eq(a,b); });
// COMPARISONS
// Code in Generate/JavaScript.hs, Basics.js, and List.js depends on
// the particular integer values assigned to LT, EQ, and GT.
function _Utils_cmp(x, y, ord)
{
if (typeof x !== 'object')
{
return x === y ? /*EQ*/ 0 : x < y ? /*LT*/ -1 : /*GT*/ 1;
}
/**/
if (x instanceof String)
{
var a = x.valueOf();
var b = y.valueOf();
return a === b ? 0 : a < b ? -1 : 1;
}
//*/
/**_UNUSED/
if (typeof x.$ === 'undefined')
//*/
/**/
if (x.$[0] === '#')
//*/
{
return (ord = _Utils_cmp(x.a, y.a))
? ord
: (ord = _Utils_cmp(x.b, y.b))
? ord
: _Utils_cmp(x.c, y.c);
}
// traverse conses until end of a list or a mismatch
for (; x.b && y.b && !(ord = _Utils_cmp(x.a, y.a)); x = x.b, y = y.b) {} // WHILE_CONSES
return ord || (x.b ? /*GT*/ 1 : y.b ? /*LT*/ -1 : /*EQ*/ 0);
}
var _Utils_lt = F2(function(a, b) { return _Utils_cmp(a, b) < 0; });
var _Utils_le = F2(function(a, b) { return _Utils_cmp(a, b) < 1; });
var _Utils_gt = F2(function(a, b) { return _Utils_cmp(a, b) > 0; });
var _Utils_ge = F2(function(a, b) { return _Utils_cmp(a, b) >= 0; });
var _Utils_compare = F2(function(x, y)
{
var n = _Utils_cmp(x, y);
return n < 0 ? $elm$core$Basics$LT : n ? $elm$core$Basics$GT : $elm$core$Basics$EQ;
});
// COMMON VALUES
var _Utils_Tuple0_UNUSED = 0;
var _Utils_Tuple0 = { $: '#0' };
function _Utils_Tuple2_UNUSED(a, b) { return { a: a, b: b }; }
function _Utils_Tuple2(a, b) { return { $: '#2', a: a, b: b }; }
function _Utils_Tuple3_UNUSED(a, b, c) { return { a: a, b: b, c: c }; }
function _Utils_Tuple3(a, b, c) { return { $: '#3', a: a, b: b, c: c }; }
function _Utils_chr_UNUSED(c) { return c; }
function _Utils_chr(c) { return new String(c); }
// RECORDS
function _Utils_update(oldRecord, updatedFields)
{
var newRecord = {};
for (var key in oldRecord)
{
newRecord[key] = oldRecord[key];
}
for (var key in updatedFields)
{
newRecord[key] = updatedFields[key];
}
return newRecord;
}
// APPEND
var _Utils_append = F2(_Utils_ap);
function _Utils_ap(xs, ys)
{
// append Strings
if (typeof xs === 'string')
{
return xs + ys;
}
// append Lists
if (!xs.b)
{
return ys;
}
var root = _List_Cons(xs.a, ys);
xs = xs.b
for (var curr = root; xs.b; xs = xs.b) // WHILE_CONS
{
curr = curr.b = _List_Cons(xs.a, ys);
}
return root;
}
var _List_Nil_UNUSED = { $: 0 };
var _List_Nil = { $: '[]' };
function _List_Cons_UNUSED(hd, tl) { return { $: 1, a: hd, b: tl }; }
function _List_Cons(hd, tl) { return { $: '::', a: hd, b: tl }; }
var _List_cons = F2(_List_Cons);
function _List_fromArray(arr)
{
var out = _List_Nil;
for (var i = arr.length; i--; )
{
out = _List_Cons(arr[i], out);
}
return out;
}
function _List_toArray(xs)
{
for (var out = []; xs.b; xs = xs.b) // WHILE_CONS
{
out.push(xs.a);
}
return out;
}
var _List_map2 = F3(function(f, xs, ys)
{
for (var arr = []; xs.b && ys.b; xs = xs.b, ys = ys.b) // WHILE_CONSES
{
arr.push(A2(f, xs.a, ys.a));
}
return _List_fromArray(arr);
});
var _List_map3 = F4(function(f, xs, ys, zs)
{
for (var arr = []; xs.b && ys.b && zs.b; xs = xs.b, ys = ys.b, zs = zs.b) // WHILE_CONSES
{
arr.push(A3(f, xs.a, ys.a, zs.a));
}
return _List_fromArray(arr);
});
var _List_map4 = F5(function(f, ws, xs, ys, zs)
{
for (var arr = []; ws.b && xs.b && ys.b && zs.b; ws = ws.b, xs = xs.b, ys = ys.b, zs = zs.b) // WHILE_CONSES
{
arr.push(A4(f, ws.a, xs.a, ys.a, zs.a));
}
return _List_fromArray(arr);
});
var _List_map5 = F6(function(f, vs, ws, xs, ys, zs)
{
for (var arr = []; vs.b && ws.b && xs.b && ys.b && zs.b; vs = vs.b, ws = ws.b, xs = xs.b, ys = ys.b, zs = zs.b) // WHILE_CONSES
{
arr.push(A5(f, vs.a, ws.a, xs.a, ys.a, zs.a));
}
return _List_fromArray(arr);
});
var _List_sortBy = F2(function(f, xs)
{
return _List_fromArray(_List_toArray(xs).sort(function(a, b) {
return _Utils_cmp(f(a), f(b));
}));
});
var _List_sortWith = F2(function(f, xs)
{
return _List_fromArray(_List_toArray(xs).sort(function(a, b) {
var ord = A2(f, a, b);
return ord === $elm$core$Basics$EQ ? 0 : ord === $elm$core$Basics$LT ? -1 : 1;
}));
});
// MATH
var _Basics_add = F2(function(a, b) { return a + b; });
var _Basics_sub = F2(function(a, b) { return a - b; });
var _Basics_mul = F2(function(a, b) { return a * b; });
var _Basics_fdiv = F2(function(a, b) { return a / b; });
var _Basics_idiv = F2(function(a, b) { return (a / b) | 0; });
var _Basics_pow = F2(Math.pow);
var _Basics_remainderBy = F2(function(b, a) { return a % b; });
// https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/divmodnote-letter.pdf
var _Basics_modBy = F2(function(modulus, x)
{
var answer = x % modulus;
return modulus === 0
? _Debug_crash(11)
:
((answer > 0 && modulus < 0) || (answer < 0 && modulus > 0))
? answer + modulus
: answer;
});
// TRIGONOMETRY
var _Basics_pi = Math.PI;
var _Basics_e = Math.E;
var _Basics_cos = Math.cos;
var _Basics_sin = Math.sin;
var _Basics_tan = Math.tan;
var _Basics_acos = Math.acos;
var _Basics_asin = Math.asin;
var _Basics_atan = Math.atan;
var _Basics_atan2 = F2(Math.atan2);
// MORE MATH
function _Basics_toFloat(x) { return x; }
function _Basics_truncate(n) { return n | 0; }
function _Basics_isInfinite(n) { return n === Infinity || n === -Infinity; }
var _Basics_ceiling = Math.ceil;
var _Basics_floor = Math.floor;
var _Basics_round = Math.round;
var _Basics_sqrt = Math.sqrt;
var _Basics_log = Math.log;
var _Basics_isNaN = isNaN;
// BOOLEANS
function _Basics_not(bool) { return !bool; }
var _Basics_and = F2(function(a, b) { return a && b; });
var _Basics_or = F2(function(a, b) { return a || b; });
var _Basics_xor = F2(function(a, b) { return a !== b; });
var _String_cons = F2(function(chr, str)
{
return chr + str;
});
function _String_uncons(string)
{
var word = string.charCodeAt(0);
return !isNaN(word)
? $elm$core$Maybe$Just(
0xD800 <= word && word <= 0xDBFF
? _Utils_Tuple2(_Utils_chr(string[0] + string[1]), string.slice(2))
: _Utils_Tuple2(_Utils_chr(string[0]), string.slice(1))
)
: $elm$core$Maybe$Nothing;
}
var _String_append = F2(function(a, b)
{
return a + b;
});
function _String_length(str)
{
return str.length;
}
var _String_map = F2(function(func, string)
{
var len = string.length;
var array = new Array(len);
var i = 0;
while (i < len)
{
var word = string.charCodeAt(i);
if (0xD800 <= word && word <= 0xDBFF)
{
array[i] = func(_Utils_chr(string[i] + string[i+1]));
i += 2;
continue;
}
array[i] = func(_Utils_chr(string[i]));
i++;
}
return array.join('');
});
var _String_filter = F2(function(isGood, str)
{
var arr = [];
var len = str.length;
var i = 0;
while (i < len)
{
var char = str[i];
var word = str.charCodeAt(i);
i++;
if (0xD800 <= word && word <= 0xDBFF)
{
char += str[i];
i++;
}
if (isGood(_Utils_chr(char)))
{
arr.push(char);
}
}
return arr.join('');
});
function _String_reverse(str)
{
var len = str.length;
var arr = new Array(len);
var i = 0;
while (i < len)
{
var word = str.charCodeAt(i);
if (0xD800 <= word && word <= 0xDBFF)
{
arr[len - i] = str[i + 1];
i++;
arr[len - i] = str[i - 1];
i++;
}
else
{
arr[len - i] = str[i];
i++;
}
}
return arr.join('');
}
var _String_foldl = F3(function(func, state, string)
{
var len = string.length;
var i = 0;
while (i < len)
{
var char = string[i];
var word = string.charCodeAt(i);
i++;
if (0xD800 <= word && word <= 0xDBFF)
{
char += string[i];
i++;
}
state = A2(func, _Utils_chr(char), state);
}
return state;
});
var _String_foldr = F3(function(func, state, string)
{
var i = string.length;
while (i--)
{
var char = string[i];
var word = string.charCodeAt(i);
if (0xDC00 <= word && word <= 0xDFFF)
{
i--;
char = string[i] + char;
}
state = A2(func, _Utils_chr(char), state);
}
return state;
});
var _String_split = F2(function(sep, str)
{
return str.split(sep);
});
var _String_join = F2(function(sep, strs)
{
return strs.join(sep);
});
var _String_slice = F3(function(start, end, str) {
return str.slice(start, end);
});
function _String_trim(str)
{
return str.trim();
}
function _String_trimLeft(str)
{
return str.replace(/^\s+/, '');
}
function _String_trimRight(str)
{
return str.replace(/\s+$/, '');
}
function _String_words(str)
{
return _List_fromArray(str.trim().split(/\s+/g));
}
function _String_lines(str)
{
return _List_fromArray(str.split(/\r\n|\r|\n/g));
}
function _String_toUpper(str)
{
return str.toUpperCase();
}
function _String_toLower(str)
{
return str.toLowerCase();
}
var _String_any = F2(function(isGood, string)
{
var i = string.length;
while (i--)
{
var char = string[i];
var word = string.charCodeAt(i);
if (0xDC00 <= word && word <= 0xDFFF)
{
i--;
char = string[i] + char;
}
if (isGood(_Utils_chr(char)))
{
return true;
}
}
return false;
});
var _String_all = F2(function(isGood, string)
{
var i = string.length;
while (i--)
{
var char = string[i];
var word = string.charCodeAt(i);
if (0xDC00 <= word && word <= 0xDFFF)
{
i--;
char = string[i] + char;
}
if (!isGood(_Utils_chr(char)))
{
return false;
}
}
return true;
});
var _String_contains = F2(function(sub, str)
{
return str.indexOf(sub) > -1;
});
var _String_startsWith = F2(function(sub, str)
{
return str.indexOf(sub) === 0;
});
var _String_endsWith = F2(function(sub, str)
{
return str.length >= sub.length &&
str.lastIndexOf(sub) === str.length - sub.length;
});
var _String_indexes = F2(function(sub, str)
{
var subLen = sub.length;
if (subLen < 1)
{
return _List_Nil;
}
var i = 0;
var is = [];
while ((i = str.indexOf(sub, i)) > -1)
{
is.push(i);
i = i + subLen;
}
return _List_fromArray(is);
});
// TO STRING
function _String_fromNumber(number)
{
return number + '';
}
// INT CONVERSIONS
function _String_toInt(str)
{
var total = 0;
var code0 = str.charCodeAt(0);
var start = code0 == 0x2B /* + */ || code0 == 0x2D /* - */ ? 1 : 0;
for (var i = start; i < str.length; ++i)
{
var code = str.charCodeAt(i);
if (code < 0x30 || 0x39 < code)
{
return $elm$core$Maybe$Nothing;
}
total = 10 * total + code - 0x30;
}
return i == start
? $elm$core$Maybe$Nothing
: $elm$core$Maybe$Just(code0 == 0x2D ? -total : total);
}
// FLOAT CONVERSIONS
function _String_toFloat(s)
{
// check if it is a hex, octal, or binary number
if (s.length === 0 || /[\sxbo]/.test(s))
{
return $elm$core$Maybe$Nothing;
}
var n = +s;
// faster isNaN check
return n === n ? $elm$core$Maybe$Just(n) : $elm$core$Maybe$Nothing;
}
function _String_fromList(chars)
{
return _List_toArray(chars).join('');
}
function _Char_toCode(char)
{
var code = char.charCodeAt(0);
if (0xD800 <= code && code <= 0xDBFF)
{
return (code - 0xD800) * 0x400 + char.charCodeAt(1) - 0xDC00 + 0x10000
}
return code;
}
function _Char_fromCode(code)
{
return _Utils_chr(
(code < 0 || 0x10FFFF < code)
? '\uFFFD'
:
(code <= 0xFFFF)
? String.fromCharCode(code)
:
(code -= 0x10000,
String.fromCharCode(Math.floor(code / 0x400) + 0xD800, code % 0x400 + 0xDC00)
)
);
}
function _Char_toUpper(char)
{
return _Utils_chr(char.toUpperCase());
}
function _Char_toLower(char)
{
return _Utils_chr(char.toLowerCase());
}
function _Char_toLocaleUpper(char)
{
return _Utils_chr(char.toLocaleUpperCase());
}
function _Char_toLocaleLower(char)
{
return _Utils_chr(char.toLocaleLowerCase());
}
/**/
function _Json_errorToString(error)
{
return $elm$json$Json$Decode$errorToString(error);
}
//*/
// CORE DECODERS
function _Json_succeed(msg)
{
return {
$: 0,
a: msg
};
}
function _Json_fail(msg)
{
return {
$: 1,
a: msg
};
}
function _Json_decodePrim(decoder)
{
return { $: 2, b: decoder };
}
var _Json_decodeInt = _Json_decodePrim(function(value) {
return (typeof value !== 'number')
? _Json_expecting('an INT', value)
:
(-2147483647 < value && value < 2147483647 && (value | 0) === value)
? $elm$core$Result$Ok(value)
:
(isFinite(value) && !(value % 1))
? $elm$core$Result$Ok(value)
: _Json_expecting('an INT', value);
});
var _Json_decodeBool = _Json_decodePrim(function(value) {
return (typeof value === 'boolean')
? $elm$core$Result$Ok(value)
: _Json_expecting('a BOOL', value);
});
var _Json_decodeFloat = _Json_decodePrim(function(value) {
return (typeof value === 'number')
? $elm$core$Result$Ok(value)
: _Json_expecting('a FLOAT', value);
});
var _Json_decodeValue = _Json_decodePrim(function(value) {
return $elm$core$Result$Ok(_Json_wrap(value));
});
var _Json_decodeString = _Json_decodePrim(function(value) {
return (typeof value === 'string')
? $elm$core$Result$Ok(value)
: (value instanceof String)
? $elm$core$Result$Ok(value + '')
: _Json_expecting('a STRING', value);
});
function _Json_decodeList(decoder) { return { $: 3, b: decoder }; }
function _Json_decodeArray(decoder) { return { $: 4, b: decoder }; }
function _Json_decodeNull(value) { return { $: 5, c: value }; }
var _Json_decodeField = F2(function(field, decoder)
{
return {
$: 6,
d: field,
b: decoder
};
});
var _Json_decodeIndex = F2(function(index, decoder)
{
return {
$: 7,
e: index,
b: decoder
};
});
function _Json_decodeKeyValuePairs(decoder)
{
return {
$: 8,
b: decoder
};
}
function _Json_mapMany(f, decoders)
{
return {
$: 9,
f: f,
g: decoders
};
}
var _Json_andThen = F2(function(callback, decoder)
{
return {
$: 10,
b: decoder,
h: callback
};
});
function _Json_oneOf(decoders)
{
return {
$: 11,
g: decoders
};
}
// DECODING OBJECTS
var _Json_map1 = F2(function(f, d1)
{
return _Json_mapMany(f, [d1]);
});
var _Json_map2 = F3(function(f, d1, d2)
{
return _Json_mapMany(f, [d1, d2]);
});
var _Json_map3 = F4(function(f, d1, d2, d3)
{
return _Json_mapMany(f, [d1, d2, d3]);
});
var _Json_map4 = F5(function(f, d1, d2, d3, d4)
{
return _Json_mapMany(f, [d1, d2, d3, d4]);
});
var _Json_map5 = F6(function(f, d1, d2, d3, d4, d5)
{
return _Json_mapMany(f, [d1, d2, d3, d4, d5]);
});
var _Json_map6 = F7(function(f, d1, d2, d3, d4, d5, d6)
{
return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6]);
});
var _Json_map7 = F8(function(f, d1, d2, d3, d4, d5, d6, d7)
{
return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6, d7]);
});
var _Json_map8 = F9(function(f, d1, d2, d3, d4, d5, d6, d7, d8)
{
return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6, d7, d8]);
});
// DECODE
var _Json_runOnString = F2(function(decoder, string)
{
try
{
var value = JSON.parse(string);
return _Json_runHelp(decoder, value);
}
catch (e)
{
return $elm$core$Result$Err(A2($elm$json$Json$Decode$Failure, 'This is not valid JSON! ' + e.message, _Json_wrap(string)));
}
});
var _Json_run = F2(function(decoder, value)
{
return _Json_runHelp(decoder, _Json_unwrap(value));
});
function _Json_runHelp(decoder, value)
{
switch (decoder.$)
{
case 2:
return decoder.b(value);
case 5:
return (value === null)
? $elm$core$Result$Ok(decoder.c)
: _Json_expecting('null', value);
case 3:
if (!_Json_isArray(value))
{
return _Json_expecting('a LIST', value);
}
return _Json_runArrayDecoder(decoder.b, value, _List_fromArray);
case 4:
if (!_Json_isArray(value))
{
return _Json_expecting('an ARRAY', value);
}
return _Json_runArrayDecoder(decoder.b, value, _Json_toElmArray);
case 6:
var field = decoder.d;
if (typeof value !== 'object' || value === null || !(field in value))
{
return _Json_expecting('an OBJECT with a field named `' + field + '`', value);
}
var result = _Json_runHelp(decoder.b, value[field]);
return ($elm$core$Result$isOk(result)) ? result : $elm$core$Result$Err(A2($elm$json$Json$Decode$Field, field, result.a));
case 7:
var index = decoder.e;
if (!_Json_isArray(value))
{
return _Json_expecting('an ARRAY', value);
}
if (index >= value.length)
{
return _Json_expecting('a LONGER array. Need index ' + index + ' but only see ' + value.length + ' entries', value);
}
var result = _Json_runHelp(decoder.b, value[index]);
return ($elm$core$Result$isOk(result)) ? result : $elm$core$Result$Err(A2($elm$json$Json$Decode$Index, index, result.a));
case 8:
if (typeof value !== 'object' || value === null || _Json_isArray(value))
{
return _Json_expecting('an OBJECT', value);
}
var keyValuePairs = _List_Nil;
// TODO test perf of Object.keys and switch when support is good enough
for (var key in value)
{
if (value.hasOwnProperty(key))
{
var result = _Json_runHelp(decoder.b, value[key]);
if (!$elm$core$Result$isOk(result))
{
return $elm$core$Result$Err(A2($elm$json$Json$Decode$Field, key, result.a));
}
keyValuePairs = _List_Cons(_Utils_Tuple2(key, result.a), keyValuePairs);
}
}
return $elm$core$Result$Ok($elm$core$List$reverse(keyValuePairs));
case 9:
var answer = decoder.f;
var decoders = decoder.g;
for (var i = 0; i < decoders.length; i++)
{
var result = _Json_runHelp(decoders[i], value);
if (!$elm$core$Result$isOk(result))
{
return result;
}
answer = answer(result.a);
}
return $elm$core$Result$Ok(answer);
case 10:
var result = _Json_runHelp(decoder.b, value);
return (!$elm$core$Result$isOk(result))
? result
: _Json_runHelp(decoder.h(result.a), value);
case 11:
var errors = _List_Nil;
for (var temp = decoder.g; temp.b; temp = temp.b) // WHILE_CONS
{
var result = _Json_runHelp(temp.a, value);
if ($elm$core$Result$isOk(result))
{
return result;
}
errors = _List_Cons(result.a, errors);
}
return $elm$core$Result$Err($elm$json$Json$Decode$OneOf($elm$core$List$reverse(errors)));
case 1:
return $elm$core$Result$Err(A2($elm$json$Json$Decode$Failure, decoder.a, _Json_wrap(value)));
case 0:
return $elm$core$Result$Ok(decoder.a);
}
}
function _Json_runArrayDecoder(decoder, value, toElmValue)
{
var len = value.length;
var array = new Array(len);
for (var i = 0; i < len; i++)
{
var result = _Json_runHelp(decoder, value[i]);
if (!$elm$core$Result$isOk(result))
{
return $elm$core$Result$Err(A2($elm$json$Json$Decode$Index, i, result.a));
}
array[i] = result.a;
}
return $elm$core$Result$Ok(toElmValue(array));
}
function _Json_isArray(value)
{
return Array.isArray(value) || (typeof FileList !== 'undefined' && value instanceof FileList);
}
function _Json_toElmArray(array)
{
return A2($elm$core$Array$initialize, array.length, function(i) { return array[i]; });
}
function _Json_expecting(type, value)
{
return $elm$core$Result$Err(A2($elm$json$Json$Decode$Failure, 'Expecting ' + type, _Json_wrap(value)));
}
// EQUALITY
function _Json_equality(x, y)
{
if (x === y)
{
return true;
}
if (x.$ !== y.$)
{
return false;
}
switch (x.$)
{
case 0:
case 1:
return x.a === y.a;
case 2:
return x.b === y.b;
case 5:
return x.c === y.c;
case 3:
case 4:
case 8:
return _Json_equality(x.b, y.b);
case 6:
return x.d === y.d && _Json_equality(x.b, y.b);
case 7:
return x.e === y.e && _Json_equality(x.b, y.b);
case 9:
return x.f === y.f && _Json_listEquality(x.g, y.g);
case 10:
return x.h === y.h && _Json_equality(x.b, y.b);
case 11:
return _Json_listEquality(x.g, y.g);
}
}
function _Json_listEquality(aDecoders, bDecoders)
{
var len = aDecoders.length;
if (len !== bDecoders.length)
{
return false;
}
for (var i = 0; i < len; i++)
{
if (!_Json_equality(aDecoders[i], bDecoders[i]))
{
return false;
}
}
return true;
}
// ENCODE
var _Json_encode = F2(function(indentLevel, value)
{
return JSON.stringify(_Json_unwrap(value), null, indentLevel) + '';
});
function _Json_wrap(value) { return { $: 0, a: value }; }
function _Json_unwrap(value) { return value.a; }
function _Json_wrap_UNUSED(value) { return value; }
function _Json_unwrap_UNUSED(value) { return value; }
function _Json_emptyArray() { return []; }
function _Json_emptyObject() { return {}; }
var _Json_addField = F3(function(key, value, object)
{
object[key] = _Json_unwrap(value);
return object;
});
function _Json_addEntry(func)
{
return F2(function(entry, array)
{
array.push(_Json_unwrap(func(entry)));
return array;
});
}
var _Json_encodeNull = _Json_wrap(null);
// TASKS
function _Scheduler_succeed(value)
{
return {
$: 0,
a: value
};
}
function _Scheduler_fail(error)
{
return {
$: 1,
a: error
};
}
function _Scheduler_binding(callback)
{
return {
$: 2,
b: callback,
c: null
};
}
var _Scheduler_andThen = F2(function(callback, task)
{
return {
$: 3,
b: callback,
d: task
};
});
var _Scheduler_onError = F2(function(callback, task)
{
return {
$: 4,
b: callback,
d: task
};
});
function _Scheduler_receive(callback)
{
return {
$: 5,
b: callback
};
}
// PROCESSES
var _Scheduler_guid = 0;
function _Scheduler_rawSpawn(task)
{
var proc = {
$: 0,
e: _Scheduler_guid++,
f: task,
g: null,
h: []
};
_Scheduler_enqueue(proc);
return proc;
}
function _Scheduler_spawn(task)
{
return _Scheduler_binding(function(callback) {
callback(_Scheduler_succeed(_Scheduler_rawSpawn(task)));
});
}
function _Scheduler_rawSend(proc, msg)
{
proc.h.push(msg);
_Scheduler_enqueue(proc);
}
var _Scheduler_send = F2(function(proc, msg)
{
return _Scheduler_binding(function(callback) {
_Scheduler_rawSend(proc, msg);
callback(_Scheduler_succeed(_Utils_Tuple0));
});
});
function _Scheduler_kill(proc)
{
return _Scheduler_binding(function(callback) {
var task = proc.f;
if (task.$ === 2 && task.c)
{
task.c();
}
proc.f = null;
callback(_Scheduler_succeed(_Utils_Tuple0));
});
}
/* STEP PROCESSES
type alias Process =
{ $ : tag
, id : unique_id
, root : Task
, stack : null | { $: SUCCEED | FAIL, a: callback, b: stack }
, mailbox : [msg]
}
*/
var _Scheduler_working = false;
var _Scheduler_queue = [];
function _Scheduler_enqueue(proc)
{
_Scheduler_queue.push(proc);
if (_Scheduler_working)
{
return;
}
_Scheduler_working = true;
while (proc = _Scheduler_queue.shift())
{
_Scheduler_step(proc);
}
_Scheduler_working = false;
}
function _Scheduler_step(proc)
{
while (proc.f)
{
var rootTag = proc.f.$;
if (rootTag === 0 || rootTag === 1)
{
while (proc.g && proc.g.$ !== rootTag)
{
proc.g = proc.g.i;
}
if (!proc.g)
{
return;
}
proc.f = proc.g.b(proc.f.a);
proc.g = proc.g.i;
}
else if (rootTag === 2)
{
proc.f.c = proc.f.b(function(newRoot) {
proc.f = newRoot;
_Scheduler_enqueue(proc);
});
return;
}
else if (rootTag === 5)
{
if (proc.h.length === 0)
{
return;
}
proc.f = proc.f.b(proc.h.shift());
}
else // if (rootTag === 3 || rootTag === 4)
{
proc.g = {
$: rootTag === 3 ? 0 : 1,
b: proc.f.b,
i: proc.g
};
proc.f = proc.f.d;
}
}
}
function _Process_sleep(time)
{
return _Scheduler_binding(function(callback) {
var id = setTimeout(function() {
callback(_Scheduler_succeed(_Utils_Tuple0));
}, time);
return function() { clearTimeout(id); };
});
}
// PROGRAMS
var _Platform_worker = F4(function(impl, flagDecoder, debugMetadata, args)
{
return _Platform_initialize(
flagDecoder,
args,
impl.init,
impl.update,
impl.subscriptions,
function() { return function() {} }
);
});
// INITIALIZE A PROGRAM
function _Platform_initialize(flagDecoder, args, init, update, subscriptions, stepperBuilder)
{
var result = A2(_Json_run, flagDecoder, _Json_wrap(args ? args['flags'] : undefined));
$elm$core$Result$isOk(result) || _Debug_crash(2 /**/, _Json_errorToString(result.a) /**/);
var managers = {};
var initPair = init(result.a);
var model = initPair.a;
var stepper = stepperBuilder(sendToApp, model);
var ports = _Platform_setupEffects(managers, sendToApp);
function sendToApp(msg, viewMetadata)
{
var pair = A2(update, msg, model);
stepper(model = pair.a, viewMetadata);
_Platform_enqueueEffects(managers, pair.b, subscriptions(model));
}
_Platform_enqueueEffects(managers, initPair.b, subscriptions(model));
return ports ? { ports: ports } : {};
}
// TRACK PRELOADS
//
// This is used by code in elm/browser and elm/http
// to register any HTTP requests that are triggered by init.
//
var _Platform_preload;
function _Platform_registerPreload(url)
{
_Platform_preload.add(url);
}
// EFFECT MANAGERS
var _Platform_effectManagers = {};
function _Platform_setupEffects(managers, sendToApp)
{
var ports;
// setup all necessary effect managers
for (var key in _Platform_effectManagers)
{
var manager = _Platform_effectManagers[key];
if (manager.a)
{
ports = ports || {};
ports[key] = manager.a(key, sendToApp);
}
managers[key] = _Platform_instantiateManager(manager, sendToApp);
}
return ports;
}
function _Platform_createManager(init, onEffects, onSelfMsg, cmdMap, subMap)
{
return {
b: init,
c: onEffects,
d: onSelfMsg,
e: cmdMap,
f: subMap
};
}
function _Platform_instantiateManager(info, sendToApp)
{
var router = {
g: sendToApp,
h: undefined
};
var onEffects = info.c;
var onSelfMsg = info.d;
var cmdMap = info.e;
var subMap = info.f;
function loop(state)
{
return A2(_Scheduler_andThen, loop, _Scheduler_receive(function(msg)
{
var value = msg.a;
if (msg.$ === 0)
{
return A3(onSelfMsg, router, value, state);
}
return cmdMap && subMap
? A4(onEffects, router, value.i, value.j, state)
: A3(onEffects, router, cmdMap ? value.i : value.j, state);
}));
}
return router.h = _Scheduler_rawSpawn(A2(_Scheduler_andThen, loop, info.b));
}
// ROUTING
var _Platform_sendToApp = F2(function(router, msg)
{
return _Scheduler_binding(function(callback)
{
router.g(msg);
callback(_Scheduler_succeed(_Utils_Tuple0));
});
});
var _Platform_sendToSelf = F2(function(router, msg)
{
return A2(_Scheduler_send, router.h, {
$: 0,
a: msg
});
});
// BAGS
function _Platform_leaf(home)
{
return function(value)
{
return {
$: 1,
k: home,
l: value
};
};
}
function _Platform_batch(list)
{
return {
$: 2,
m: list
};
}
var _Platform_map = F2(function(tagger, bag)
{
return {
$: 3,
n: tagger,
o: bag
}
});
// PIPE BAGS INTO EFFECT MANAGERS
//
// Effects must be queued!
//
// Say your init contains a synchronous command, like Time.now or Time.here
//
// - This will produce a batch of effects (FX_1)
// - The synchronous task triggers the subsequent `update` call
// - This will produce a batch of effects (FX_2)
//
// If we just start dispatching FX_2, subscriptions from FX_2 can be processed
// before subscriptions from FX_1. No good! Earlier versions of this code had
// this problem, leading to these reports:
//
// https://github.com/elm/core/issues/980
// https://github.com/elm/core/pull/981
// https://github.com/elm/compiler/issues/1776
//
// The queue is necessary to avoid ordering issues for synchronous commands.
// Why use true/false here? Why not just check the length of the queue?
// The goal is to detect "are we currently dispatching effects?" If we
// are, we need to bail and let the ongoing while loop handle things.
//
// Now say the queue has 1 element. When we dequeue the final element,
// the queue will be empty, but we are still actively dispatching effects.
// So you could get queue jumping in a really tricky category of cases.
//
var _Platform_effectsQueue = [];
var _Platform_effectsActive = false;
function _Platform_enqueueEffects(managers, cmdBag, subBag)
{
_Platform_effectsQueue.push({ p: managers, q: cmdBag, r: subBag });
if (_Platform_effectsActive) return;
_Platform_effectsActive = true;
for (var fx; fx = _Platform_effectsQueue.shift(); )
{
_Platform_dispatchEffects(fx.p, fx.q, fx.r);
}
_Platform_effectsActive = false;
}
function _Platform_dispatchEffects(managers, cmdBag, subBag)
{
var effectsDict = {};
_Platform_gatherEffects(true, cmdBag, effectsDict, null);
_Platform_gatherEffects(false, subBag, effectsDict, null);
for (var home in managers)
{
_Scheduler_rawSend(managers[home], {
$: 'fx',
a: effectsDict[home] || { i: _List_Nil, j: _List_Nil }
});
}
}
function _Platform_gatherEffects(isCmd, bag, effectsDict, taggers)
{
switch (bag.$)
{
case 1:
var home = bag.k;
var effect = _Platform_toEffect(isCmd, home, taggers, bag.l);
effectsDict[home] = _Platform_insert(isCmd, effect, effectsDict[home]);
return;
case 2:
for (var list = bag.m; list.b; list = list.b) // WHILE_CONS
{
_Platform_gatherEffects(isCmd, list.a, effectsDict, taggers);
}
return;
case 3:
_Platform_gatherEffects(isCmd, bag.o, effectsDict, {
s: bag.n,
t: taggers
});
return;
}
}
function _Platform_toEffect(isCmd, home, taggers, value)
{
function applyTaggers(x)
{
for (var temp = taggers; temp; temp = temp.t)
{
x = temp.s(x);
}
return x;
}
var map = isCmd
? _Platform_effectManagers[home].e
: _Platform_effectManagers[home].f;
return A2(map, applyTaggers, value)
}
function _Platform_insert(isCmd, newEffect, effects)
{
effects = effects || { i: _List_Nil, j: _List_Nil };
isCmd
? (effects.i = _List_Cons(newEffect, effects.i))
: (effects.j = _List_Cons(newEffect, effects.j));
return effects;
}
// PORTS
function _Platform_checkPortName(name)
{
if (_Platform_effectManagers[name])
{
_Debug_crash(3, name)
}
}
// OUTGOING PORTS
function _Platform_outgoingPort(name, converter)
{
_Platform_checkPortName(name);
_Platform_effectManagers[name] = {
e: _Platform_outgoingPortMap,
u: converter,
a: _Platform_setupOutgoingPort
};
return _Platform_leaf(name);
}
var _Platform_outgoingPortMap = F2(function(tagger, value) { return value; });
function _Platform_setupOutgoingPort(name)
{
var subs = [];
var converter = _Platform_effectManagers[name].u;
// CREATE MANAGER
var init = _Process_sleep(0);
_Platform_effectManagers[name].b = init;
_Platform_effectManagers[name].c = F3(function(router, cmdList, state)
{
for ( ; cmdList.b; cmdList = cmdList.b) // WHILE_CONS
{
// grab a separate reference to subs in case unsubscribe is called
var currentSubs = subs;
var value = _Json_unwrap(converter(cmdList.a));
for (var i = 0; i < currentSubs.length; i++)
{
currentSubs[i](value);
}
}
return init;
});
// PUBLIC API
function subscribe(callback)
{
subs.push(callback);
}
function unsubscribe(callback)
{
// copy subs into a new array in case unsubscribe is called within a
// subscribed callback
subs = subs.slice();
var index = subs.indexOf(callback);
if (index >= 0)
{
subs.splice(index, 1);
}
}
return {
subscribe: subscribe,
unsubscribe: unsubscribe
};
}
// INCOMING PORTS
function _Platform_incomingPort(name, converter)
{
_Platform_checkPortName(name);
_Platform_effectManagers[name] = {
f: _Platform_incomingPortMap,
u: converter,
a: _Platform_setupIncomingPort
};
return _Platform_leaf(name);
}
var _Platform_incomingPortMap = F2(function(tagger, finalTagger)
{
return function(value)
{
return tagger(finalTagger(value));
};
});
function _Platform_setupIncomingPort(name, sendToApp)
{
var subs = _List_Nil;
var converter = _Platform_effectManagers[name].u;
// CREATE MANAGER
var init = _Scheduler_succeed(null);
_Platform_effectManagers[name].b = init;
_Platform_effectManagers[name].c = F3(function(router, subList, state)
{
subs = subList;
return init;
});
// PUBLIC API
function send(incomingValue)
{
var result = A2(_Json_run, converter, _Json_wrap(incomingValue));
$elm$core$Result$isOk(result) || _Debug_crash(4, name, result.a);
var value = result.a;
for (var temp = subs; temp.b; temp = temp.b) // WHILE_CONS
{
sendToApp(temp.a(value));
}
}
return { send: send };
}
// EXPORT ELM MODULES
//
// Have DEBUG and PROD versions so that we can (1) give nicer errors in
// debug mode and (2) not pay for the bits needed for that in prod mode.
//
function _Platform_export_UNUSED(exports)
{
scope['Elm']
? _Platform_mergeExportsProd(scope['Elm'], exports)
: scope['Elm'] = exports;
}
function _Platform_mergeExportsProd(obj, exports)
{
for (var name in exports)
{
(name in obj)
? (name == 'init')
? _Debug_crash(6)
: _Platform_mergeExportsProd(obj[name], exports[name])
: (obj[name] = exports[name]);
}
}
function _Platform_export(exports)
{
scope['Elm']
? _Platform_mergeExportsDebug('Elm', scope['Elm'], exports)
: scope['Elm'] = exports;
}
function _Platform_mergeExportsDebug(moduleName, obj, exports)
{
for (var name in exports)
{
(name in obj)
? (name == 'init')
? _Debug_crash(6, moduleName)
: _Platform_mergeExportsDebug(moduleName + '.' + name, obj[name], exports[name])
: (obj[name] = exports[name]);
}
}
// HELPERS
var _VirtualDom_divertHrefToApp;
var _VirtualDom_doc = typeof document !== 'undefined' ? document : {};
function _VirtualDom_appendChild(parent, child)
{
parent.appendChild(child);
}
var _VirtualDom_init = F4(function(virtualNode, flagDecoder, debugMetadata, args)
{
// NOTE: this function needs _Platform_export available to work
/**_UNUSED/
var node = args['node'];
//*/
/**/
var node = args && args['node'] ? args['node'] : _Debug_crash(0);
//*/
node.parentNode.replaceChild(
_VirtualDom_render(virtualNode, function() {}),
node
);
return {};
});
// TEXT
function _VirtualDom_text(string)
{
return {
$: 0,
a: string
};
}
// NODE
var _VirtualDom_nodeNS = F2(function(namespace, tag)
{
return F2(function(factList, kidList)
{
for (var kids = [], descendantsCount = 0; kidList.b; kidList = kidList.b) // WHILE_CONS
{
var kid = kidList.a;
descendantsCount += (kid.b || 0);
kids.push(kid);
}
descendantsCount += kids.length;
return {
$: 1,
c: tag,
d: _VirtualDom_organizeFacts(factList),
e: kids,
f: namespace,
b: descendantsCount
};
});
});
var _VirtualDom_node = _VirtualDom_nodeNS(undefined);
// KEYED NODE
var _VirtualDom_keyedNodeNS = F2(function(namespace, tag)
{
return F2(function(factList, kidList)
{
for (var kids = [], descendantsCount = 0; kidList.b; kidList = kidList.b) // WHILE_CONS
{
var kid = kidList.a;
descendantsCount += (kid.b.b || 0);
kids.push(kid);
}
descendantsCount += kids.length;
return {
$: 2,
c: tag,
d: _VirtualDom_organizeFacts(factList),
e: kids,
f: namespace,
b: descendantsCount
};
});
});
var _VirtualDom_keyedNode = _VirtualDom_keyedNodeNS(undefined);
// CUSTOM
function _VirtualDom_custom(factList, model, render, diff)
{
return {
$: 3,
d: _VirtualDom_organizeFacts(factList),
g: model,
h: render,
i: diff
};
}
// MAP
var _VirtualDom_map = F2(function(tagger, node)
{
return {
$: 4,
j: tagger,
k: node,
b: 1 + (node.b || 0)
};
});
// LAZY
function _VirtualDom_thunk(refs, thunk)
{
return {
$: 5,
l: refs,
m: thunk,
k: undefined
};
}
var _VirtualDom_lazy = F2(function(func, a)
{
return _VirtualDom_thunk([func, a], function() {
return func(a);
});
});
var _VirtualDom_lazy2 = F3(function(func, a, b)
{
return _VirtualDom_thunk([func, a, b], function() {
return A2(func, a, b);
});
});
var _VirtualDom_lazy3 = F4(function(func, a, b, c)
{
return _VirtualDom_thunk([func, a, b, c], function() {
return A3(func, a, b, c);
});
});
var _VirtualDom_lazy4 = F5(function(func, a, b, c, d)
{
return _VirtualDom_thunk([func, a, b, c, d], function() {
return A4(func, a, b, c, d);
});
});
var _VirtualDom_lazy5 = F6(function(func, a, b, c, d, e)
{
return _VirtualDom_thunk([func, a, b, c, d, e], function() {
return A5(func, a, b, c, d, e);
});
});
var _VirtualDom_lazy6 = F7(function(func, a, b, c, d, e, f)
{
return _VirtualDom_thunk([func, a, b, c, d, e, f], function() {
return A6(func, a, b, c, d, e, f);
});
});
var _VirtualDom_lazy7 = F8(function(func, a, b, c, d, e, f, g)
{
return _VirtualDom_thunk([func, a, b, c, d, e, f, g], function() {
return A7(func, a, b, c, d, e, f, g);
});
});
var _VirtualDom_lazy8 = F9(function(func, a, b, c, d, e, f, g, h)
{
return _VirtualDom_thunk([func, a, b, c, d, e, f, g, h], function() {
return A8(func, a, b, c, d, e, f, g, h);
});
});
// FACTS
var _VirtualDom_on = F2(function(key, handler)
{
return {
$: 'a0',
n: key,
o: handler
};
});
var _VirtualDom_style = F2(function(key, value)
{
return {
$: 'a1',
n: key,
o: value
};
});
var _VirtualDom_property = F2(function(key, value)
{
return {
$: 'a2',
n: key,
o: value
};
});
var _VirtualDom_attribute = F2(function(key, value)
{
return {
$: 'a3',
n: key,
o: value
};
});
var _VirtualDom_attributeNS = F3(function(namespace, key, value)
{
return {
$: 'a4',
n: key,
o: { f: namespace, o: value }
};
});
// XSS ATTACK VECTOR CHECKS
function _VirtualDom_noScript(tag)
{
return tag == 'script' ? 'p' : tag;
}
function _VirtualDom_noOnOrFormAction(key)
{
return /^(on|formAction$)/i.test(key) ? 'data-' + key : key;
}
function _VirtualDom_noInnerHtmlOrFormAction(key)
{
return key == 'innerHTML' || key == 'formAction' ? 'data-' + key : key;
}
function _VirtualDom_noJavaScriptUri_UNUSED(value)
{
return /^javascript:/i.test(value.replace(/\s/g,'')) ? '' : value;
}
function _VirtualDom_noJavaScriptUri(value)
{
return /^javascript:/i.test(value.replace(/\s/g,''))
? 'javascript:alert("This is an XSS vector. Please use ports or web components instead.")'
: value;
}
function _VirtualDom_noJavaScriptOrHtmlUri_UNUSED(value)
{
return /^\s*(javascript:|data:text\/html)/i.test(value) ? '' : value;
}
function _VirtualDom_noJavaScriptOrHtmlUri(value)
{
return /^\s*(javascript:|data:text\/html)/i.test(value)
? 'javascript:alert("This is an XSS vector. Please use ports or web components instead.")'
: value;
}
// MAP FACTS
var _VirtualDom_mapAttribute = F2(function(func, attr)
{
return (attr.$ === 'a0')
? A2(_VirtualDom_on, attr.n, _VirtualDom_mapHandler(func, attr.o))
: attr;
});
function _VirtualDom_mapHandler(func, handler)
{
var tag = $elm$virtual_dom$VirtualDom$toHandlerInt(handler);
// 0 = Normal
// 1 = MayStopPropagation
// 2 = MayPreventDefault
// 3 = Custom
return {
$: handler.$,
a:
!tag
? A2($elm$json$Json$Decode$map, func, handler.a)
:
A3($elm$json$Json$Decode$map2,
tag < 3
? _VirtualDom_mapEventTuple
: _VirtualDom_mapEventRecord,
$elm$json$Json$Decode$succeed(func),
handler.a
)
};
}
var _VirtualDom_mapEventTuple = F2(function(func, tuple)
{
return _Utils_Tuple2(func(tuple.a), tuple.b);
});
var _VirtualDom_mapEventRecord = F2(function(func, record)
{
return {
message: func(record.message),
stopPropagation: record.stopPropagation,
preventDefault: record.preventDefault
}
});
// ORGANIZE FACTS
function _VirtualDom_organizeFacts(factList)
{
for (var facts = {}; factList.b; factList = factList.b) // WHILE_CONS
{
var entry = factList.a;
var tag = entry.$;
var key = entry.n;
var value = entry.o;
if (tag === 'a2')
{
(key === 'className')
? _VirtualDom_addClass(facts, key, _Json_unwrap(value))
: facts[key] = _Json_unwrap(value);
continue;
}
var subFacts = facts[tag] || (facts[tag] = {});
(tag === 'a3' && key === 'class')
? _VirtualDom_addClass(subFacts, key, value)
: subFacts[key] = value;
}
return facts;
}
function _VirtualDom_addClass(object, key, newClass)
{
var classes = object[key];
object[key] = classes ? classes + ' ' + newClass : newClass;
}
// RENDER
function _VirtualDom_render(vNode, eventNode)
{
var tag = vNode.$;
if (tag === 5)
{
return _VirtualDom_render(vNode.k || (vNode.k = vNode.m()), eventNode);
}
if (tag === 0)
{
return _VirtualDom_doc.createTextNode(vNode.a);
}
if (tag === 4)
{
var subNode = vNode.k;
var tagger = vNode.j;
while (subNode.$ === 4)
{
typeof tagger !== 'object'
? tagger = [tagger, subNode.j]
: tagger.push(subNode.j);
subNode = subNode.k;
}
var subEventRoot = { j: tagger, p: eventNode };
var domNode = _VirtualDom_render(subNode, subEventRoot);
domNode.elm_event_node_ref = subEventRoot;
return domNode;
}
if (tag === 3)
{
var domNode = vNode.h(vNode.g);
_VirtualDom_applyFacts(domNode, eventNode, vNode.d);
return domNode;
}
// at this point `tag` must be 1 or 2
var domNode = vNode.f