16720 lines
485 KiB
JavaScript
16720 lines
485 KiB
JavaScript
|
|
(function() {
|
|
'use strict';
|
|
|
|
function F2(fun)
|
|
{
|
|
function wrapper(a) { return function(b) { return fun(a,b); }; }
|
|
wrapper.arity = 2;
|
|
wrapper.func = fun;
|
|
return wrapper;
|
|
}
|
|
|
|
function F3(fun)
|
|
{
|
|
function wrapper(a) {
|
|
return function(b) { return function(c) { return fun(a, b, c); }; };
|
|
}
|
|
wrapper.arity = 3;
|
|
wrapper.func = fun;
|
|
return wrapper;
|
|
}
|
|
|
|
function F4(fun)
|
|
{
|
|
function wrapper(a) { return function(b) { return function(c) {
|
|
return function(d) { return fun(a, b, c, d); }; }; };
|
|
}
|
|
wrapper.arity = 4;
|
|
wrapper.func = fun;
|
|
return wrapper;
|
|
}
|
|
|
|
function F5(fun)
|
|
{
|
|
function wrapper(a) { return function(b) { return function(c) {
|
|
return function(d) { return function(e) { return fun(a, b, c, d, e); }; }; }; };
|
|
}
|
|
wrapper.arity = 5;
|
|
wrapper.func = fun;
|
|
return wrapper;
|
|
}
|
|
|
|
function F6(fun)
|
|
{
|
|
function wrapper(a) { return function(b) { return function(c) {
|
|
return function(d) { return function(e) { return function(f) {
|
|
return fun(a, b, c, d, e, f); }; }; }; }; };
|
|
}
|
|
wrapper.arity = 6;
|
|
wrapper.func = fun;
|
|
return wrapper;
|
|
}
|
|
|
|
function F7(fun)
|
|
{
|
|
function wrapper(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); }; }; }; }; }; };
|
|
}
|
|
wrapper.arity = 7;
|
|
wrapper.func = fun;
|
|
return wrapper;
|
|
}
|
|
|
|
function F8(fun)
|
|
{
|
|
function wrapper(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); }; }; }; }; }; }; };
|
|
}
|
|
wrapper.arity = 8;
|
|
wrapper.func = fun;
|
|
return wrapper;
|
|
}
|
|
|
|
function F9(fun)
|
|
{
|
|
function wrapper(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); }; }; }; }; }; }; }; };
|
|
}
|
|
wrapper.arity = 9;
|
|
wrapper.func = fun;
|
|
return wrapper;
|
|
}
|
|
|
|
function A2(fun, a, b)
|
|
{
|
|
return fun.arity === 2
|
|
? fun.func(a, b)
|
|
: fun(a)(b);
|
|
}
|
|
function A3(fun, a, b, c)
|
|
{
|
|
return fun.arity === 3
|
|
? fun.func(a, b, c)
|
|
: fun(a)(b)(c);
|
|
}
|
|
function A4(fun, a, b, c, d)
|
|
{
|
|
return fun.arity === 4
|
|
? fun.func(a, b, c, d)
|
|
: fun(a)(b)(c)(d);
|
|
}
|
|
function A5(fun, a, b, c, d, e)
|
|
{
|
|
return fun.arity === 5
|
|
? fun.func(a, b, c, d, e)
|
|
: fun(a)(b)(c)(d)(e);
|
|
}
|
|
function A6(fun, a, b, c, d, e, f)
|
|
{
|
|
return fun.arity === 6
|
|
? fun.func(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.arity === 7
|
|
? fun.func(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.arity === 8
|
|
? fun.func(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.arity === 9
|
|
? fun.func(a, b, c, d, e, f, g, h, i)
|
|
: fun(a)(b)(c)(d)(e)(f)(g)(h)(i);
|
|
}
|
|
|
|
//import Native.Utils //
|
|
|
|
var _elm_lang$core$Native_Basics = function() {
|
|
|
|
function div(a, b)
|
|
{
|
|
return (a / b) | 0;
|
|
}
|
|
function rem(a, b)
|
|
{
|
|
return a % b;
|
|
}
|
|
function mod(a, b)
|
|
{
|
|
if (b === 0)
|
|
{
|
|
throw new Error('Cannot perform mod 0. Division by zero error.');
|
|
}
|
|
var r = a % b;
|
|
var m = a === 0 ? 0 : (b > 0 ? (a >= 0 ? r : r + b) : -mod(-a, -b));
|
|
|
|
return m === b ? 0 : m;
|
|
}
|
|
function logBase(base, n)
|
|
{
|
|
return Math.log(n) / Math.log(base);
|
|
}
|
|
function negate(n)
|
|
{
|
|
return -n;
|
|
}
|
|
function abs(n)
|
|
{
|
|
return n < 0 ? -n : n;
|
|
}
|
|
|
|
function min(a, b)
|
|
{
|
|
return _elm_lang$core$Native_Utils.cmp(a, b) < 0 ? a : b;
|
|
}
|
|
function max(a, b)
|
|
{
|
|
return _elm_lang$core$Native_Utils.cmp(a, b) > 0 ? a : b;
|
|
}
|
|
function clamp(lo, hi, n)
|
|
{
|
|
return _elm_lang$core$Native_Utils.cmp(n, lo) < 0
|
|
? lo
|
|
: _elm_lang$core$Native_Utils.cmp(n, hi) > 0
|
|
? hi
|
|
: n;
|
|
}
|
|
|
|
var ord = ['LT', 'EQ', 'GT'];
|
|
|
|
function compare(x, y)
|
|
{
|
|
return { ctor: ord[_elm_lang$core$Native_Utils.cmp(x, y) + 1] };
|
|
}
|
|
|
|
function xor(a, b)
|
|
{
|
|
return a !== b;
|
|
}
|
|
function not(b)
|
|
{
|
|
return !b;
|
|
}
|
|
function isInfinite(n)
|
|
{
|
|
return n === Infinity || n === -Infinity;
|
|
}
|
|
|
|
function truncate(n)
|
|
{
|
|
return n | 0;
|
|
}
|
|
|
|
function degrees(d)
|
|
{
|
|
return d * Math.PI / 180;
|
|
}
|
|
function turns(t)
|
|
{
|
|
return 2 * Math.PI * t;
|
|
}
|
|
function fromPolar(point)
|
|
{
|
|
var r = point._0;
|
|
var t = point._1;
|
|
return _elm_lang$core$Native_Utils.Tuple2(r * Math.cos(t), r * Math.sin(t));
|
|
}
|
|
function toPolar(point)
|
|
{
|
|
var x = point._0;
|
|
var y = point._1;
|
|
return _elm_lang$core$Native_Utils.Tuple2(Math.sqrt(x * x + y * y), Math.atan2(y, x));
|
|
}
|
|
|
|
return {
|
|
div: F2(div),
|
|
rem: F2(rem),
|
|
mod: F2(mod),
|
|
|
|
pi: Math.PI,
|
|
e: Math.E,
|
|
cos: Math.cos,
|
|
sin: Math.sin,
|
|
tan: Math.tan,
|
|
acos: Math.acos,
|
|
asin: Math.asin,
|
|
atan: Math.atan,
|
|
atan2: F2(Math.atan2),
|
|
|
|
degrees: degrees,
|
|
turns: turns,
|
|
fromPolar: fromPolar,
|
|
toPolar: toPolar,
|
|
|
|
sqrt: Math.sqrt,
|
|
logBase: F2(logBase),
|
|
negate: negate,
|
|
abs: abs,
|
|
min: F2(min),
|
|
max: F2(max),
|
|
clamp: F3(clamp),
|
|
compare: F2(compare),
|
|
|
|
xor: F2(xor),
|
|
not: not,
|
|
|
|
truncate: truncate,
|
|
ceiling: Math.ceil,
|
|
floor: Math.floor,
|
|
round: Math.round,
|
|
toFloat: function(x) { return x; },
|
|
isNaN: isNaN,
|
|
isInfinite: isInfinite
|
|
};
|
|
|
|
}();
|
|
//import //
|
|
|
|
var _elm_lang$core$Native_Utils = function() {
|
|
|
|
// COMPARISONS
|
|
|
|
function eq(rootX, rootY)
|
|
{
|
|
var stack = [{ x: rootX, y: rootY }];
|
|
while (stack.length > 0)
|
|
{
|
|
var front = stack.pop();
|
|
var x = front.x;
|
|
var y = front.y;
|
|
if (x === y)
|
|
{
|
|
continue;
|
|
}
|
|
if (typeof x === 'object')
|
|
{
|
|
var c = 0;
|
|
for (var key in x)
|
|
{
|
|
++c;
|
|
if (!(key in y))
|
|
{
|
|
return false;
|
|
}
|
|
if (key === 'ctor')
|
|
{
|
|
continue;
|
|
}
|
|
stack.push({ x: x[key], y: y[key] });
|
|
}
|
|
if ('ctor' in x)
|
|
{
|
|
stack.push({ x: x.ctor, y: y.ctor});
|
|
}
|
|
if (c !== Object.keys(y).length)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
else if (typeof x === 'function')
|
|
{
|
|
throw new Error('Equality error: general function equality is ' +
|
|
'undecidable, and therefore, unsupported');
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// Code in Generate/JavaScript.hs, Basics.js, and List.js depends on
|
|
// the particular integer values assigned to LT, EQ, and GT.
|
|
|
|
var LT = -1, EQ = 0, GT = 1;
|
|
|
|
function cmp(x, y)
|
|
{
|
|
var ord;
|
|
if (typeof x !== 'object')
|
|
{
|
|
return x === y ? EQ : x < y ? LT : GT;
|
|
}
|
|
else if (x instanceof String)
|
|
{
|
|
var a = x.valueOf();
|
|
var b = y.valueOf();
|
|
return a === b
|
|
? EQ
|
|
: a < b
|
|
? LT
|
|
: GT;
|
|
}
|
|
else if (x.ctor === '::' || x.ctor === '[]')
|
|
{
|
|
while (true)
|
|
{
|
|
if (x.ctor === '[]' && y.ctor === '[]')
|
|
{
|
|
return EQ;
|
|
}
|
|
if (x.ctor !== y.ctor)
|
|
{
|
|
return x.ctor === '[]' ? LT : GT;
|
|
}
|
|
ord = cmp(x._0, y._0);
|
|
if (ord !== EQ)
|
|
{
|
|
return ord;
|
|
}
|
|
x = x._1;
|
|
y = y._1;
|
|
}
|
|
}
|
|
else if (x.ctor.slice(0, 6) === '_Tuple')
|
|
{
|
|
var n = x.ctor.slice(6) - 0;
|
|
var err = 'cannot compare tuples with more than 6 elements.';
|
|
if (n === 0) return EQ;
|
|
if (n >= 1) { ord = cmp(x._0, y._0); if (ord !== EQ) return ord;
|
|
if (n >= 2) { ord = cmp(x._1, y._1); if (ord !== EQ) return ord;
|
|
if (n >= 3) { ord = cmp(x._2, y._2); if (ord !== EQ) return ord;
|
|
if (n >= 4) { ord = cmp(x._3, y._3); if (ord !== EQ) return ord;
|
|
if (n >= 5) { ord = cmp(x._4, y._4); if (ord !== EQ) return ord;
|
|
if (n >= 6) { ord = cmp(x._5, y._5); if (ord !== EQ) return ord;
|
|
if (n >= 7) throw new Error('Comparison error: ' + err); } } } } } }
|
|
return EQ;
|
|
}
|
|
else
|
|
{
|
|
throw new Error('Comparison error: comparison is only defined on ints, ' +
|
|
'floats, times, chars, strings, lists of comparable values, ' +
|
|
'and tuples of comparable values.');
|
|
}
|
|
}
|
|
|
|
|
|
// COMMON VALUES
|
|
|
|
var Tuple0 = {
|
|
ctor: '_Tuple0'
|
|
};
|
|
|
|
function Tuple2(x, y)
|
|
{
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: x,
|
|
_1: y
|
|
};
|
|
}
|
|
|
|
function chr(c)
|
|
{
|
|
return new String(c);
|
|
}
|
|
|
|
|
|
// GUID
|
|
|
|
var count = 0;
|
|
function guid(_)
|
|
{
|
|
return count++;
|
|
}
|
|
|
|
|
|
// RECORDS
|
|
|
|
function update(oldRecord, updatedFields)
|
|
{
|
|
var newRecord = {};
|
|
for (var key in oldRecord)
|
|
{
|
|
var value = (key in updatedFields) ? updatedFields[key] : oldRecord[key];
|
|
newRecord[key] = value;
|
|
}
|
|
return newRecord;
|
|
}
|
|
|
|
|
|
//// LIST STUFF ////
|
|
|
|
var Nil = { ctor: '[]' };
|
|
|
|
function Cons(hd, tl)
|
|
{
|
|
return {
|
|
ctor: '::',
|
|
_0: hd,
|
|
_1: tl
|
|
};
|
|
}
|
|
|
|
function append(xs, ys)
|
|
{
|
|
// append Strings
|
|
if (typeof xs === 'string')
|
|
{
|
|
return xs + ys;
|
|
}
|
|
|
|
// append Lists
|
|
if (xs.ctor === '[]')
|
|
{
|
|
return ys;
|
|
}
|
|
var root = Cons(xs._0, Nil);
|
|
var curr = root;
|
|
xs = xs._1;
|
|
while (xs.ctor !== '[]')
|
|
{
|
|
curr._1 = Cons(xs._0, Nil);
|
|
xs = xs._1;
|
|
curr = curr._1;
|
|
}
|
|
curr._1 = ys;
|
|
return root;
|
|
}
|
|
|
|
|
|
// CRASHES
|
|
|
|
function crash(moduleName, region)
|
|
{
|
|
return function(message) {
|
|
throw new Error(
|
|
'Ran into a `Debug.crash` in module `' + moduleName + '` ' + regionToString(region) + '\n'
|
|
+ 'The message provided by the code author is:\n\n '
|
|
+ message
|
|
);
|
|
};
|
|
}
|
|
|
|
function crashCase(moduleName, region, value)
|
|
{
|
|
return function(message) {
|
|
throw new Error(
|
|
'Ran into a `Debug.crash` in module `' + moduleName + '`\n\n'
|
|
+ 'This was caused by the `case` expression ' + regionToString(region) + '.\n'
|
|
+ 'One of the branches ended with a crash and the following value got through:\n\n ' + toString(value) + '\n\n'
|
|
+ 'The message provided by the code author is:\n\n '
|
|
+ message
|
|
);
|
|
};
|
|
}
|
|
|
|
function regionToString(region)
|
|
{
|
|
if (region.start.line == region.end.line)
|
|
{
|
|
return 'on line ' + region.start.line;
|
|
}
|
|
return 'between lines ' + region.start.line + ' and ' + region.end.line;
|
|
}
|
|
|
|
|
|
// TO STRING
|
|
|
|
function toString(v)
|
|
{
|
|
var type = typeof v;
|
|
if (type === 'function')
|
|
{
|
|
var name = v.func ? v.func.name : v.name;
|
|
return '<function' + (name === '' ? '' : ':') + name + '>';
|
|
}
|
|
|
|
if (type === 'boolean')
|
|
{
|
|
return v ? 'True' : 'False';
|
|
}
|
|
|
|
if (type === 'number')
|
|
{
|
|
return v + '';
|
|
}
|
|
|
|
if (v instanceof String)
|
|
{
|
|
return '\'' + addSlashes(v, true) + '\'';
|
|
}
|
|
|
|
if (type === 'string')
|
|
{
|
|
return '"' + addSlashes(v, false) + '"';
|
|
}
|
|
|
|
if (v === null)
|
|
{
|
|
return 'null';
|
|
}
|
|
|
|
if (type === 'object' && 'ctor' in v)
|
|
{
|
|
var ctorStarter = v.ctor.substring(0, 5);
|
|
|
|
if (ctorStarter === '_Tupl')
|
|
{
|
|
var output = [];
|
|
for (var k in v)
|
|
{
|
|
if (k === 'ctor') continue;
|
|
output.push(toString(v[k]));
|
|
}
|
|
return '(' + output.join(',') + ')';
|
|
}
|
|
|
|
if (ctorStarter === '_Task')
|
|
{
|
|
return '<task>'
|
|
}
|
|
|
|
if (v.ctor === '_Array')
|
|
{
|
|
var list = _elm_lang$core$Array$toList(v);
|
|
return 'Array.fromList ' + toString(list);
|
|
}
|
|
|
|
if (v.ctor === '<decoder>')
|
|
{
|
|
return '<decoder>';
|
|
}
|
|
|
|
if (v.ctor === '_Process')
|
|
{
|
|
return '<process:' + v.id + '>';
|
|
}
|
|
|
|
if (v.ctor === '::')
|
|
{
|
|
var output = '[' + toString(v._0);
|
|
v = v._1;
|
|
while (v.ctor === '::')
|
|
{
|
|
output += ',' + toString(v._0);
|
|
v = v._1;
|
|
}
|
|
return output + ']';
|
|
}
|
|
|
|
if (v.ctor === '[]')
|
|
{
|
|
return '[]';
|
|
}
|
|
|
|
if (v.ctor === 'RBNode_elm_builtin' || v.ctor === 'RBEmpty_elm_builtin' || v.ctor === 'Set_elm_builtin')
|
|
{
|
|
var name, list;
|
|
if (v.ctor === 'Set_elm_builtin')
|
|
{
|
|
name = 'Set';
|
|
list = A2(
|
|
_elm_lang$core$List$map,
|
|
function(x) {return x._0; },
|
|
_elm_lang$core$Dict$toList(v._0)
|
|
);
|
|
}
|
|
else
|
|
{
|
|
name = 'Dict';
|
|
list = _elm_lang$core$Dict$toList(v);
|
|
}
|
|
return name + '.fromList ' + toString(list);
|
|
}
|
|
|
|
var output = '';
|
|
for (var i in v)
|
|
{
|
|
if (i === 'ctor') continue;
|
|
var str = toString(v[i]);
|
|
var c0 = str[0];
|
|
var parenless = c0 === '{' || c0 === '(' || c0 === '<' || c0 === '"' || str.indexOf(' ') < 0;
|
|
output += ' ' + (parenless ? str : '(' + str + ')');
|
|
}
|
|
return v.ctor + output;
|
|
}
|
|
|
|
if (type === 'object')
|
|
{
|
|
var output = [];
|
|
for (var k in v)
|
|
{
|
|
output.push(k + ' = ' + toString(v[k]));
|
|
}
|
|
if (output.length === 0)
|
|
{
|
|
return '{}';
|
|
}
|
|
return '{ ' + output.join(', ') + ' }';
|
|
}
|
|
|
|
return '<internal structure>';
|
|
}
|
|
|
|
function 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, '\\"');
|
|
}
|
|
}
|
|
|
|
|
|
return {
|
|
eq: eq,
|
|
cmp: cmp,
|
|
Tuple0: Tuple0,
|
|
Tuple2: Tuple2,
|
|
chr: chr,
|
|
update: update,
|
|
guid: guid,
|
|
|
|
append: F2(append),
|
|
|
|
crash: crash,
|
|
crashCase: crashCase,
|
|
|
|
toString: toString
|
|
};
|
|
|
|
}();
|
|
var _elm_lang$core$Basics$uncurry = F2(
|
|
function (f, _p0) {
|
|
var _p1 = _p0;
|
|
return A2(f, _p1._0, _p1._1);
|
|
});
|
|
var _elm_lang$core$Basics$curry = F3(
|
|
function (f, a, b) {
|
|
return f(
|
|
{ctor: '_Tuple2', _0: a, _1: b});
|
|
});
|
|
var _elm_lang$core$Basics$flip = F3(
|
|
function (f, b, a) {
|
|
return A2(f, a, b);
|
|
});
|
|
var _elm_lang$core$Basics$snd = function (_p2) {
|
|
var _p3 = _p2;
|
|
return _p3._1;
|
|
};
|
|
var _elm_lang$core$Basics$fst = function (_p4) {
|
|
var _p5 = _p4;
|
|
return _p5._0;
|
|
};
|
|
var _elm_lang$core$Basics$always = F2(
|
|
function (a, _p6) {
|
|
return a;
|
|
});
|
|
var _elm_lang$core$Basics$identity = function (x) {
|
|
return x;
|
|
};
|
|
var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};
|
|
_elm_lang$core$Basics_ops['<|'] = F2(
|
|
function (f, x) {
|
|
return f(x);
|
|
});
|
|
var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};
|
|
_elm_lang$core$Basics_ops['|>'] = F2(
|
|
function (x, f) {
|
|
return f(x);
|
|
});
|
|
var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};
|
|
_elm_lang$core$Basics_ops['>>'] = F3(
|
|
function (f, g, x) {
|
|
return g(
|
|
f(x));
|
|
});
|
|
var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};
|
|
_elm_lang$core$Basics_ops['<<'] = F3(
|
|
function (g, f, x) {
|
|
return g(
|
|
f(x));
|
|
});
|
|
var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};
|
|
_elm_lang$core$Basics_ops['++'] = _elm_lang$core$Native_Utils.append;
|
|
var _elm_lang$core$Basics$toString = _elm_lang$core$Native_Utils.toString;
|
|
var _elm_lang$core$Basics$isInfinite = _elm_lang$core$Native_Basics.isInfinite;
|
|
var _elm_lang$core$Basics$isNaN = _elm_lang$core$Native_Basics.isNaN;
|
|
var _elm_lang$core$Basics$toFloat = _elm_lang$core$Native_Basics.toFloat;
|
|
var _elm_lang$core$Basics$ceiling = _elm_lang$core$Native_Basics.ceiling;
|
|
var _elm_lang$core$Basics$floor = _elm_lang$core$Native_Basics.floor;
|
|
var _elm_lang$core$Basics$truncate = _elm_lang$core$Native_Basics.truncate;
|
|
var _elm_lang$core$Basics$round = _elm_lang$core$Native_Basics.round;
|
|
var _elm_lang$core$Basics$not = _elm_lang$core$Native_Basics.not;
|
|
var _elm_lang$core$Basics$xor = _elm_lang$core$Native_Basics.xor;
|
|
var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};
|
|
_elm_lang$core$Basics_ops['||'] = _elm_lang$core$Native_Basics.or;
|
|
var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};
|
|
_elm_lang$core$Basics_ops['&&'] = _elm_lang$core$Native_Basics.and;
|
|
var _elm_lang$core$Basics$max = _elm_lang$core$Native_Basics.max;
|
|
var _elm_lang$core$Basics$min = _elm_lang$core$Native_Basics.min;
|
|
var _elm_lang$core$Basics$compare = _elm_lang$core$Native_Basics.compare;
|
|
var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};
|
|
_elm_lang$core$Basics_ops['>='] = _elm_lang$core$Native_Basics.ge;
|
|
var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};
|
|
_elm_lang$core$Basics_ops['<='] = _elm_lang$core$Native_Basics.le;
|
|
var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};
|
|
_elm_lang$core$Basics_ops['>'] = _elm_lang$core$Native_Basics.gt;
|
|
var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};
|
|
_elm_lang$core$Basics_ops['<'] = _elm_lang$core$Native_Basics.lt;
|
|
var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};
|
|
_elm_lang$core$Basics_ops['/='] = _elm_lang$core$Native_Basics.neq;
|
|
var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};
|
|
_elm_lang$core$Basics_ops['=='] = _elm_lang$core$Native_Basics.eq;
|
|
var _elm_lang$core$Basics$e = _elm_lang$core$Native_Basics.e;
|
|
var _elm_lang$core$Basics$pi = _elm_lang$core$Native_Basics.pi;
|
|
var _elm_lang$core$Basics$clamp = _elm_lang$core$Native_Basics.clamp;
|
|
var _elm_lang$core$Basics$logBase = _elm_lang$core$Native_Basics.logBase;
|
|
var _elm_lang$core$Basics$abs = _elm_lang$core$Native_Basics.abs;
|
|
var _elm_lang$core$Basics$negate = _elm_lang$core$Native_Basics.negate;
|
|
var _elm_lang$core$Basics$sqrt = _elm_lang$core$Native_Basics.sqrt;
|
|
var _elm_lang$core$Basics$atan2 = _elm_lang$core$Native_Basics.atan2;
|
|
var _elm_lang$core$Basics$atan = _elm_lang$core$Native_Basics.atan;
|
|
var _elm_lang$core$Basics$asin = _elm_lang$core$Native_Basics.asin;
|
|
var _elm_lang$core$Basics$acos = _elm_lang$core$Native_Basics.acos;
|
|
var _elm_lang$core$Basics$tan = _elm_lang$core$Native_Basics.tan;
|
|
var _elm_lang$core$Basics$sin = _elm_lang$core$Native_Basics.sin;
|
|
var _elm_lang$core$Basics$cos = _elm_lang$core$Native_Basics.cos;
|
|
var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};
|
|
_elm_lang$core$Basics_ops['^'] = _elm_lang$core$Native_Basics.exp;
|
|
var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};
|
|
_elm_lang$core$Basics_ops['%'] = _elm_lang$core$Native_Basics.mod;
|
|
var _elm_lang$core$Basics$rem = _elm_lang$core$Native_Basics.rem;
|
|
var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};
|
|
_elm_lang$core$Basics_ops['//'] = _elm_lang$core$Native_Basics.div;
|
|
var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};
|
|
_elm_lang$core$Basics_ops['/'] = _elm_lang$core$Native_Basics.floatDiv;
|
|
var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};
|
|
_elm_lang$core$Basics_ops['*'] = _elm_lang$core$Native_Basics.mul;
|
|
var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};
|
|
_elm_lang$core$Basics_ops['-'] = _elm_lang$core$Native_Basics.sub;
|
|
var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};
|
|
_elm_lang$core$Basics_ops['+'] = _elm_lang$core$Native_Basics.add;
|
|
var _elm_lang$core$Basics$toPolar = _elm_lang$core$Native_Basics.toPolar;
|
|
var _elm_lang$core$Basics$fromPolar = _elm_lang$core$Native_Basics.fromPolar;
|
|
var _elm_lang$core$Basics$turns = _elm_lang$core$Native_Basics.turns;
|
|
var _elm_lang$core$Basics$degrees = _elm_lang$core$Native_Basics.degrees;
|
|
var _elm_lang$core$Basics$radians = function (t) {
|
|
return t;
|
|
};
|
|
var _elm_lang$core$Basics$GT = {ctor: 'GT'};
|
|
var _elm_lang$core$Basics$EQ = {ctor: 'EQ'};
|
|
var _elm_lang$core$Basics$LT = {ctor: 'LT'};
|
|
var _elm_lang$core$Basics$Never = function (a) {
|
|
return {ctor: 'Never', _0: a};
|
|
};
|
|
|
|
//import Native.Utils //
|
|
|
|
var _elm_lang$core$Native_Debug = function() {
|
|
|
|
function log(tag, value)
|
|
{
|
|
var msg = tag + ': ' + _elm_lang$core$Native_Utils.toString(value);
|
|
var process = process || {};
|
|
if (process.stdout)
|
|
{
|
|
process.stdout.write(msg);
|
|
}
|
|
else
|
|
{
|
|
console.log(msg);
|
|
}
|
|
return value;
|
|
}
|
|
|
|
function crash(message)
|
|
{
|
|
throw new Error(message);
|
|
}
|
|
|
|
return {
|
|
crash: crash,
|
|
log: F2(log)
|
|
};
|
|
|
|
}();
|
|
var _elm_lang$core$Debug$crash = _elm_lang$core$Native_Debug.crash;
|
|
var _elm_lang$core$Debug$log = _elm_lang$core$Native_Debug.log;
|
|
|
|
var _elm_lang$core$Maybe$withDefault = F2(
|
|
function ($default, maybe) {
|
|
var _p0 = maybe;
|
|
if (_p0.ctor === 'Just') {
|
|
return _p0._0;
|
|
} else {
|
|
return $default;
|
|
}
|
|
});
|
|
var _elm_lang$core$Maybe$Nothing = {ctor: 'Nothing'};
|
|
var _elm_lang$core$Maybe$oneOf = function (maybes) {
|
|
oneOf:
|
|
while (true) {
|
|
var _p1 = maybes;
|
|
if (_p1.ctor === '[]') {
|
|
return _elm_lang$core$Maybe$Nothing;
|
|
} else {
|
|
var _p3 = _p1._0;
|
|
var _p2 = _p3;
|
|
if (_p2.ctor === 'Nothing') {
|
|
var _v3 = _p1._1;
|
|
maybes = _v3;
|
|
continue oneOf;
|
|
} else {
|
|
return _p3;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var _elm_lang$core$Maybe$andThen = F2(
|
|
function (maybeValue, callback) {
|
|
var _p4 = maybeValue;
|
|
if (_p4.ctor === 'Just') {
|
|
return callback(_p4._0);
|
|
} else {
|
|
return _elm_lang$core$Maybe$Nothing;
|
|
}
|
|
});
|
|
var _elm_lang$core$Maybe$Just = function (a) {
|
|
return {ctor: 'Just', _0: a};
|
|
};
|
|
var _elm_lang$core$Maybe$map = F2(
|
|
function (f, maybe) {
|
|
var _p5 = maybe;
|
|
if (_p5.ctor === 'Just') {
|
|
return _elm_lang$core$Maybe$Just(
|
|
f(_p5._0));
|
|
} else {
|
|
return _elm_lang$core$Maybe$Nothing;
|
|
}
|
|
});
|
|
var _elm_lang$core$Maybe$map2 = F3(
|
|
function (func, ma, mb) {
|
|
var _p6 = {ctor: '_Tuple2', _0: ma, _1: mb};
|
|
if (((_p6.ctor === '_Tuple2') && (_p6._0.ctor === 'Just')) && (_p6._1.ctor === 'Just')) {
|
|
return _elm_lang$core$Maybe$Just(
|
|
A2(func, _p6._0._0, _p6._1._0));
|
|
} else {
|
|
return _elm_lang$core$Maybe$Nothing;
|
|
}
|
|
});
|
|
var _elm_lang$core$Maybe$map3 = F4(
|
|
function (func, ma, mb, mc) {
|
|
var _p7 = {ctor: '_Tuple3', _0: ma, _1: mb, _2: mc};
|
|
if ((((_p7.ctor === '_Tuple3') && (_p7._0.ctor === 'Just')) && (_p7._1.ctor === 'Just')) && (_p7._2.ctor === 'Just')) {
|
|
return _elm_lang$core$Maybe$Just(
|
|
A3(func, _p7._0._0, _p7._1._0, _p7._2._0));
|
|
} else {
|
|
return _elm_lang$core$Maybe$Nothing;
|
|
}
|
|
});
|
|
var _elm_lang$core$Maybe$map4 = F5(
|
|
function (func, ma, mb, mc, md) {
|
|
var _p8 = {ctor: '_Tuple4', _0: ma, _1: mb, _2: mc, _3: md};
|
|
if (((((_p8.ctor === '_Tuple4') && (_p8._0.ctor === 'Just')) && (_p8._1.ctor === 'Just')) && (_p8._2.ctor === 'Just')) && (_p8._3.ctor === 'Just')) {
|
|
return _elm_lang$core$Maybe$Just(
|
|
A4(func, _p8._0._0, _p8._1._0, _p8._2._0, _p8._3._0));
|
|
} else {
|
|
return _elm_lang$core$Maybe$Nothing;
|
|
}
|
|
});
|
|
var _elm_lang$core$Maybe$map5 = F6(
|
|
function (func, ma, mb, mc, md, me) {
|
|
var _p9 = {ctor: '_Tuple5', _0: ma, _1: mb, _2: mc, _3: md, _4: me};
|
|
if ((((((_p9.ctor === '_Tuple5') && (_p9._0.ctor === 'Just')) && (_p9._1.ctor === 'Just')) && (_p9._2.ctor === 'Just')) && (_p9._3.ctor === 'Just')) && (_p9._4.ctor === 'Just')) {
|
|
return _elm_lang$core$Maybe$Just(
|
|
A5(func, _p9._0._0, _p9._1._0, _p9._2._0, _p9._3._0, _p9._4._0));
|
|
} else {
|
|
return _elm_lang$core$Maybe$Nothing;
|
|
}
|
|
});
|
|
|
|
//import Native.Utils //
|
|
|
|
var _elm_lang$core$Native_List = function() {
|
|
|
|
var Nil = { ctor: '[]' };
|
|
|
|
function Cons(hd, tl)
|
|
{
|
|
return { ctor: '::', _0: hd, _1: tl };
|
|
}
|
|
|
|
function fromArray(arr)
|
|
{
|
|
var out = Nil;
|
|
for (var i = arr.length; i--; )
|
|
{
|
|
out = Cons(arr[i], out);
|
|
}
|
|
return out;
|
|
}
|
|
|
|
function toArray(xs)
|
|
{
|
|
var out = [];
|
|
while (xs.ctor !== '[]')
|
|
{
|
|
out.push(xs._0);
|
|
xs = xs._1;
|
|
}
|
|
return out;
|
|
}
|
|
|
|
|
|
function range(lo, hi)
|
|
{
|
|
var list = Nil;
|
|
if (lo <= hi)
|
|
{
|
|
do
|
|
{
|
|
list = Cons(hi, list);
|
|
}
|
|
while (hi-- > lo);
|
|
}
|
|
return list;
|
|
}
|
|
|
|
function foldr(f, b, xs)
|
|
{
|
|
var arr = toArray(xs);
|
|
var acc = b;
|
|
for (var i = arr.length; i--; )
|
|
{
|
|
acc = A2(f, arr[i], acc);
|
|
}
|
|
return acc;
|
|
}
|
|
|
|
function map2(f, xs, ys)
|
|
{
|
|
var arr = [];
|
|
while (xs.ctor !== '[]' && ys.ctor !== '[]')
|
|
{
|
|
arr.push(A2(f, xs._0, ys._0));
|
|
xs = xs._1;
|
|
ys = ys._1;
|
|
}
|
|
return fromArray(arr);
|
|
}
|
|
|
|
function map3(f, xs, ys, zs)
|
|
{
|
|
var arr = [];
|
|
while (xs.ctor !== '[]' && ys.ctor !== '[]' && zs.ctor !== '[]')
|
|
{
|
|
arr.push(A3(f, xs._0, ys._0, zs._0));
|
|
xs = xs._1;
|
|
ys = ys._1;
|
|
zs = zs._1;
|
|
}
|
|
return fromArray(arr);
|
|
}
|
|
|
|
function map4(f, ws, xs, ys, zs)
|
|
{
|
|
var arr = [];
|
|
while ( ws.ctor !== '[]'
|
|
&& xs.ctor !== '[]'
|
|
&& ys.ctor !== '[]'
|
|
&& zs.ctor !== '[]')
|
|
{
|
|
arr.push(A4(f, ws._0, xs._0, ys._0, zs._0));
|
|
ws = ws._1;
|
|
xs = xs._1;
|
|
ys = ys._1;
|
|
zs = zs._1;
|
|
}
|
|
return fromArray(arr);
|
|
}
|
|
|
|
function map5(f, vs, ws, xs, ys, zs)
|
|
{
|
|
var arr = [];
|
|
while ( vs.ctor !== '[]'
|
|
&& ws.ctor !== '[]'
|
|
&& xs.ctor !== '[]'
|
|
&& ys.ctor !== '[]'
|
|
&& zs.ctor !== '[]')
|
|
{
|
|
arr.push(A5(f, vs._0, ws._0, xs._0, ys._0, zs._0));
|
|
vs = vs._1;
|
|
ws = ws._1;
|
|
xs = xs._1;
|
|
ys = ys._1;
|
|
zs = zs._1;
|
|
}
|
|
return fromArray(arr);
|
|
}
|
|
|
|
function sortBy(f, xs)
|
|
{
|
|
return fromArray(toArray(xs).sort(function(a, b) {
|
|
return _elm_lang$core$Native_Utils.cmp(f(a), f(b));
|
|
}));
|
|
}
|
|
|
|
function sortWith(f, xs)
|
|
{
|
|
return fromArray(toArray(xs).sort(function(a, b) {
|
|
var ord = f(a)(b).ctor;
|
|
return ord === 'EQ' ? 0 : ord === 'LT' ? -1 : 1;
|
|
}));
|
|
}
|
|
|
|
return {
|
|
Nil: Nil,
|
|
Cons: Cons,
|
|
cons: F2(Cons),
|
|
toArray: toArray,
|
|
fromArray: fromArray,
|
|
range: range,
|
|
|
|
foldr: F3(foldr),
|
|
|
|
map2: F3(map2),
|
|
map3: F4(map3),
|
|
map4: F5(map4),
|
|
map5: F6(map5),
|
|
sortBy: F2(sortBy),
|
|
sortWith: F2(sortWith)
|
|
};
|
|
|
|
}();
|
|
var _elm_lang$core$List$sortWith = _elm_lang$core$Native_List.sortWith;
|
|
var _elm_lang$core$List$sortBy = _elm_lang$core$Native_List.sortBy;
|
|
var _elm_lang$core$List$sort = function (xs) {
|
|
return A2(_elm_lang$core$List$sortBy, _elm_lang$core$Basics$identity, xs);
|
|
};
|
|
var _elm_lang$core$List$drop = F2(
|
|
function (n, list) {
|
|
drop:
|
|
while (true) {
|
|
if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) {
|
|
return list;
|
|
} else {
|
|
var _p0 = list;
|
|
if (_p0.ctor === '[]') {
|
|
return list;
|
|
} else {
|
|
var _v1 = n - 1,
|
|
_v2 = _p0._1;
|
|
n = _v1;
|
|
list = _v2;
|
|
continue drop;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
var _elm_lang$core$List$map5 = _elm_lang$core$Native_List.map5;
|
|
var _elm_lang$core$List$map4 = _elm_lang$core$Native_List.map4;
|
|
var _elm_lang$core$List$map3 = _elm_lang$core$Native_List.map3;
|
|
var _elm_lang$core$List$map2 = _elm_lang$core$Native_List.map2;
|
|
var _elm_lang$core$List$any = F2(
|
|
function (isOkay, list) {
|
|
any:
|
|
while (true) {
|
|
var _p1 = list;
|
|
if (_p1.ctor === '[]') {
|
|
return false;
|
|
} else {
|
|
if (isOkay(_p1._0)) {
|
|
return true;
|
|
} else {
|
|
var _v4 = isOkay,
|
|
_v5 = _p1._1;
|
|
isOkay = _v4;
|
|
list = _v5;
|
|
continue any;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
var _elm_lang$core$List$all = F2(
|
|
function (isOkay, list) {
|
|
return _elm_lang$core$Basics$not(
|
|
A2(
|
|
_elm_lang$core$List$any,
|
|
function (_p2) {
|
|
return _elm_lang$core$Basics$not(
|
|
isOkay(_p2));
|
|
},
|
|
list));
|
|
});
|
|
var _elm_lang$core$List$foldr = _elm_lang$core$Native_List.foldr;
|
|
var _elm_lang$core$List$foldl = F3(
|
|
function (func, acc, list) {
|
|
foldl:
|
|
while (true) {
|
|
var _p3 = list;
|
|
if (_p3.ctor === '[]') {
|
|
return acc;
|
|
} else {
|
|
var _v7 = func,
|
|
_v8 = A2(func, _p3._0, acc),
|
|
_v9 = _p3._1;
|
|
func = _v7;
|
|
acc = _v8;
|
|
list = _v9;
|
|
continue foldl;
|
|
}
|
|
}
|
|
});
|
|
var _elm_lang$core$List$length = function (xs) {
|
|
return A3(
|
|
_elm_lang$core$List$foldl,
|
|
F2(
|
|
function (_p4, i) {
|
|
return i + 1;
|
|
}),
|
|
0,
|
|
xs);
|
|
};
|
|
var _elm_lang$core$List$sum = function (numbers) {
|
|
return A3(
|
|
_elm_lang$core$List$foldl,
|
|
F2(
|
|
function (x, y) {
|
|
return x + y;
|
|
}),
|
|
0,
|
|
numbers);
|
|
};
|
|
var _elm_lang$core$List$product = function (numbers) {
|
|
return A3(
|
|
_elm_lang$core$List$foldl,
|
|
F2(
|
|
function (x, y) {
|
|
return x * y;
|
|
}),
|
|
1,
|
|
numbers);
|
|
};
|
|
var _elm_lang$core$List$maximum = function (list) {
|
|
var _p5 = list;
|
|
if (_p5.ctor === '::') {
|
|
return _elm_lang$core$Maybe$Just(
|
|
A3(_elm_lang$core$List$foldl, _elm_lang$core$Basics$max, _p5._0, _p5._1));
|
|
} else {
|
|
return _elm_lang$core$Maybe$Nothing;
|
|
}
|
|
};
|
|
var _elm_lang$core$List$minimum = function (list) {
|
|
var _p6 = list;
|
|
if (_p6.ctor === '::') {
|
|
return _elm_lang$core$Maybe$Just(
|
|
A3(_elm_lang$core$List$foldl, _elm_lang$core$Basics$min, _p6._0, _p6._1));
|
|
} else {
|
|
return _elm_lang$core$Maybe$Nothing;
|
|
}
|
|
};
|
|
var _elm_lang$core$List$indexedMap = F2(
|
|
function (f, xs) {
|
|
return A3(
|
|
_elm_lang$core$List$map2,
|
|
f,
|
|
_elm_lang$core$Native_List.range(
|
|
0,
|
|
_elm_lang$core$List$length(xs) - 1),
|
|
xs);
|
|
});
|
|
var _elm_lang$core$List$member = F2(
|
|
function (x, xs) {
|
|
return A2(
|
|
_elm_lang$core$List$any,
|
|
function (a) {
|
|
return _elm_lang$core$Native_Utils.eq(a, x);
|
|
},
|
|
xs);
|
|
});
|
|
var _elm_lang$core$List$isEmpty = function (xs) {
|
|
var _p7 = xs;
|
|
if (_p7.ctor === '[]') {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
};
|
|
var _elm_lang$core$List$tail = function (list) {
|
|
var _p8 = list;
|
|
if (_p8.ctor === '::') {
|
|
return _elm_lang$core$Maybe$Just(_p8._1);
|
|
} else {
|
|
return _elm_lang$core$Maybe$Nothing;
|
|
}
|
|
};
|
|
var _elm_lang$core$List$head = function (list) {
|
|
var _p9 = list;
|
|
if (_p9.ctor === '::') {
|
|
return _elm_lang$core$Maybe$Just(_p9._0);
|
|
} else {
|
|
return _elm_lang$core$Maybe$Nothing;
|
|
}
|
|
};
|
|
var _elm_lang$core$List_ops = _elm_lang$core$List_ops || {};
|
|
_elm_lang$core$List_ops['::'] = _elm_lang$core$Native_List.cons;
|
|
var _elm_lang$core$List$map = F2(
|
|
function (f, xs) {
|
|
return A3(
|
|
_elm_lang$core$List$foldr,
|
|
F2(
|
|
function (x, acc) {
|
|
return A2(
|
|
_elm_lang$core$List_ops['::'],
|
|
f(x),
|
|
acc);
|
|
}),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
xs);
|
|
});
|
|
var _elm_lang$core$List$filter = F2(
|
|
function (pred, xs) {
|
|
var conditionalCons = F2(
|
|
function (x, xs$) {
|
|
return pred(x) ? A2(_elm_lang$core$List_ops['::'], x, xs$) : xs$;
|
|
});
|
|
return A3(
|
|
_elm_lang$core$List$foldr,
|
|
conditionalCons,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
xs);
|
|
});
|
|
var _elm_lang$core$List$maybeCons = F3(
|
|
function (f, mx, xs) {
|
|
var _p10 = f(mx);
|
|
if (_p10.ctor === 'Just') {
|
|
return A2(_elm_lang$core$List_ops['::'], _p10._0, xs);
|
|
} else {
|
|
return xs;
|
|
}
|
|
});
|
|
var _elm_lang$core$List$filterMap = F2(
|
|
function (f, xs) {
|
|
return A3(
|
|
_elm_lang$core$List$foldr,
|
|
_elm_lang$core$List$maybeCons(f),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
xs);
|
|
});
|
|
var _elm_lang$core$List$reverse = function (list) {
|
|
return A3(
|
|
_elm_lang$core$List$foldl,
|
|
F2(
|
|
function (x, y) {
|
|
return A2(_elm_lang$core$List_ops['::'], x, y);
|
|
}),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
list);
|
|
};
|
|
var _elm_lang$core$List$scanl = F3(
|
|
function (f, b, xs) {
|
|
var scan1 = F2(
|
|
function (x, accAcc) {
|
|
var _p11 = accAcc;
|
|
if (_p11.ctor === '::') {
|
|
return A2(
|
|
_elm_lang$core$List_ops['::'],
|
|
A2(f, x, _p11._0),
|
|
accAcc);
|
|
} else {
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[]);
|
|
}
|
|
});
|
|
return _elm_lang$core$List$reverse(
|
|
A3(
|
|
_elm_lang$core$List$foldl,
|
|
scan1,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[b]),
|
|
xs));
|
|
});
|
|
var _elm_lang$core$List$append = F2(
|
|
function (xs, ys) {
|
|
var _p12 = ys;
|
|
if (_p12.ctor === '[]') {
|
|
return xs;
|
|
} else {
|
|
return A3(
|
|
_elm_lang$core$List$foldr,
|
|
F2(
|
|
function (x, y) {
|
|
return A2(_elm_lang$core$List_ops['::'], x, y);
|
|
}),
|
|
ys,
|
|
xs);
|
|
}
|
|
});
|
|
var _elm_lang$core$List$concat = function (lists) {
|
|
return A3(
|
|
_elm_lang$core$List$foldr,
|
|
_elm_lang$core$List$append,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
lists);
|
|
};
|
|
var _elm_lang$core$List$concatMap = F2(
|
|
function (f, list) {
|
|
return _elm_lang$core$List$concat(
|
|
A2(_elm_lang$core$List$map, f, list));
|
|
});
|
|
var _elm_lang$core$List$partition = F2(
|
|
function (pred, list) {
|
|
var step = F2(
|
|
function (x, _p13) {
|
|
var _p14 = _p13;
|
|
var _p16 = _p14._0;
|
|
var _p15 = _p14._1;
|
|
return pred(x) ? {
|
|
ctor: '_Tuple2',
|
|
_0: A2(_elm_lang$core$List_ops['::'], x, _p16),
|
|
_1: _p15
|
|
} : {
|
|
ctor: '_Tuple2',
|
|
_0: _p16,
|
|
_1: A2(_elm_lang$core$List_ops['::'], x, _p15)
|
|
};
|
|
});
|
|
return A3(
|
|
_elm_lang$core$List$foldr,
|
|
step,
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_1: _elm_lang$core$Native_List.fromArray(
|
|
[])
|
|
},
|
|
list);
|
|
});
|
|
var _elm_lang$core$List$unzip = function (pairs) {
|
|
var step = F2(
|
|
function (_p18, _p17) {
|
|
var _p19 = _p18;
|
|
var _p20 = _p17;
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: A2(_elm_lang$core$List_ops['::'], _p19._0, _p20._0),
|
|
_1: A2(_elm_lang$core$List_ops['::'], _p19._1, _p20._1)
|
|
};
|
|
});
|
|
return A3(
|
|
_elm_lang$core$List$foldr,
|
|
step,
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_1: _elm_lang$core$Native_List.fromArray(
|
|
[])
|
|
},
|
|
pairs);
|
|
};
|
|
var _elm_lang$core$List$intersperse = F2(
|
|
function (sep, xs) {
|
|
var _p21 = xs;
|
|
if (_p21.ctor === '[]') {
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[]);
|
|
} else {
|
|
var step = F2(
|
|
function (x, rest) {
|
|
return A2(
|
|
_elm_lang$core$List_ops['::'],
|
|
sep,
|
|
A2(_elm_lang$core$List_ops['::'], x, rest));
|
|
});
|
|
var spersed = A3(
|
|
_elm_lang$core$List$foldr,
|
|
step,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_p21._1);
|
|
return A2(_elm_lang$core$List_ops['::'], _p21._0, spersed);
|
|
}
|
|
});
|
|
var _elm_lang$core$List$take = F2(
|
|
function (n, list) {
|
|
if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) {
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[]);
|
|
} else {
|
|
var _p22 = list;
|
|
if (_p22.ctor === '[]') {
|
|
return list;
|
|
} else {
|
|
return A2(
|
|
_elm_lang$core$List_ops['::'],
|
|
_p22._0,
|
|
A2(_elm_lang$core$List$take, n - 1, _p22._1));
|
|
}
|
|
}
|
|
});
|
|
var _elm_lang$core$List$repeatHelp = F3(
|
|
function (result, n, value) {
|
|
repeatHelp:
|
|
while (true) {
|
|
if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) {
|
|
return result;
|
|
} else {
|
|
var _v23 = A2(_elm_lang$core$List_ops['::'], value, result),
|
|
_v24 = n - 1,
|
|
_v25 = value;
|
|
result = _v23;
|
|
n = _v24;
|
|
value = _v25;
|
|
continue repeatHelp;
|
|
}
|
|
}
|
|
});
|
|
var _elm_lang$core$List$repeat = F2(
|
|
function (n, value) {
|
|
return A3(
|
|
_elm_lang$core$List$repeatHelp,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
n,
|
|
value);
|
|
});
|
|
|
|
var _elm_lang$core$Result$toMaybe = function (result) {
|
|
var _p0 = result;
|
|
if (_p0.ctor === 'Ok') {
|
|
return _elm_lang$core$Maybe$Just(_p0._0);
|
|
} else {
|
|
return _elm_lang$core$Maybe$Nothing;
|
|
}
|
|
};
|
|
var _elm_lang$core$Result$withDefault = F2(
|
|
function (def, result) {
|
|
var _p1 = result;
|
|
if (_p1.ctor === 'Ok') {
|
|
return _p1._0;
|
|
} else {
|
|
return def;
|
|
}
|
|
});
|
|
var _elm_lang$core$Result$Err = function (a) {
|
|
return {ctor: 'Err', _0: a};
|
|
};
|
|
var _elm_lang$core$Result$andThen = F2(
|
|
function (result, callback) {
|
|
var _p2 = result;
|
|
if (_p2.ctor === 'Ok') {
|
|
return callback(_p2._0);
|
|
} else {
|
|
return _elm_lang$core$Result$Err(_p2._0);
|
|
}
|
|
});
|
|
var _elm_lang$core$Result$Ok = function (a) {
|
|
return {ctor: 'Ok', _0: a};
|
|
};
|
|
var _elm_lang$core$Result$map = F2(
|
|
function (func, ra) {
|
|
var _p3 = ra;
|
|
if (_p3.ctor === 'Ok') {
|
|
return _elm_lang$core$Result$Ok(
|
|
func(_p3._0));
|
|
} else {
|
|
return _elm_lang$core$Result$Err(_p3._0);
|
|
}
|
|
});
|
|
var _elm_lang$core$Result$map2 = F3(
|
|
function (func, ra, rb) {
|
|
var _p4 = {ctor: '_Tuple2', _0: ra, _1: rb};
|
|
if (_p4._0.ctor === 'Ok') {
|
|
if (_p4._1.ctor === 'Ok') {
|
|
return _elm_lang$core$Result$Ok(
|
|
A2(func, _p4._0._0, _p4._1._0));
|
|
} else {
|
|
return _elm_lang$core$Result$Err(_p4._1._0);
|
|
}
|
|
} else {
|
|
return _elm_lang$core$Result$Err(_p4._0._0);
|
|
}
|
|
});
|
|
var _elm_lang$core$Result$map3 = F4(
|
|
function (func, ra, rb, rc) {
|
|
var _p5 = {ctor: '_Tuple3', _0: ra, _1: rb, _2: rc};
|
|
if (_p5._0.ctor === 'Ok') {
|
|
if (_p5._1.ctor === 'Ok') {
|
|
if (_p5._2.ctor === 'Ok') {
|
|
return _elm_lang$core$Result$Ok(
|
|
A3(func, _p5._0._0, _p5._1._0, _p5._2._0));
|
|
} else {
|
|
return _elm_lang$core$Result$Err(_p5._2._0);
|
|
}
|
|
} else {
|
|
return _elm_lang$core$Result$Err(_p5._1._0);
|
|
}
|
|
} else {
|
|
return _elm_lang$core$Result$Err(_p5._0._0);
|
|
}
|
|
});
|
|
var _elm_lang$core$Result$map4 = F5(
|
|
function (func, ra, rb, rc, rd) {
|
|
var _p6 = {ctor: '_Tuple4', _0: ra, _1: rb, _2: rc, _3: rd};
|
|
if (_p6._0.ctor === 'Ok') {
|
|
if (_p6._1.ctor === 'Ok') {
|
|
if (_p6._2.ctor === 'Ok') {
|
|
if (_p6._3.ctor === 'Ok') {
|
|
return _elm_lang$core$Result$Ok(
|
|
A4(func, _p6._0._0, _p6._1._0, _p6._2._0, _p6._3._0));
|
|
} else {
|
|
return _elm_lang$core$Result$Err(_p6._3._0);
|
|
}
|
|
} else {
|
|
return _elm_lang$core$Result$Err(_p6._2._0);
|
|
}
|
|
} else {
|
|
return _elm_lang$core$Result$Err(_p6._1._0);
|
|
}
|
|
} else {
|
|
return _elm_lang$core$Result$Err(_p6._0._0);
|
|
}
|
|
});
|
|
var _elm_lang$core$Result$map5 = F6(
|
|
function (func, ra, rb, rc, rd, re) {
|
|
var _p7 = {ctor: '_Tuple5', _0: ra, _1: rb, _2: rc, _3: rd, _4: re};
|
|
if (_p7._0.ctor === 'Ok') {
|
|
if (_p7._1.ctor === 'Ok') {
|
|
if (_p7._2.ctor === 'Ok') {
|
|
if (_p7._3.ctor === 'Ok') {
|
|
if (_p7._4.ctor === 'Ok') {
|
|
return _elm_lang$core$Result$Ok(
|
|
A5(func, _p7._0._0, _p7._1._0, _p7._2._0, _p7._3._0, _p7._4._0));
|
|
} else {
|
|
return _elm_lang$core$Result$Err(_p7._4._0);
|
|
}
|
|
} else {
|
|
return _elm_lang$core$Result$Err(_p7._3._0);
|
|
}
|
|
} else {
|
|
return _elm_lang$core$Result$Err(_p7._2._0);
|
|
}
|
|
} else {
|
|
return _elm_lang$core$Result$Err(_p7._1._0);
|
|
}
|
|
} else {
|
|
return _elm_lang$core$Result$Err(_p7._0._0);
|
|
}
|
|
});
|
|
var _elm_lang$core$Result$formatError = F2(
|
|
function (f, result) {
|
|
var _p8 = result;
|
|
if (_p8.ctor === 'Ok') {
|
|
return _elm_lang$core$Result$Ok(_p8._0);
|
|
} else {
|
|
return _elm_lang$core$Result$Err(
|
|
f(_p8._0));
|
|
}
|
|
});
|
|
var _elm_lang$core$Result$fromMaybe = F2(
|
|
function (err, maybe) {
|
|
var _p9 = maybe;
|
|
if (_p9.ctor === 'Just') {
|
|
return _elm_lang$core$Result$Ok(_p9._0);
|
|
} else {
|
|
return _elm_lang$core$Result$Err(err);
|
|
}
|
|
});
|
|
|
|
//import //
|
|
|
|
var _elm_lang$core$Native_Platform = function() {
|
|
|
|
|
|
// PROGRAMS
|
|
|
|
function addPublicModule(object, name, main)
|
|
{
|
|
var init = main ? makeEmbed(name, main) : mainIsUndefined(name);
|
|
|
|
object['worker'] = function worker(flags)
|
|
{
|
|
return init(undefined, flags, false);
|
|
}
|
|
|
|
object['embed'] = function embed(domNode, flags)
|
|
{
|
|
return init(domNode, flags, true);
|
|
}
|
|
|
|
object['fullscreen'] = function fullscreen(flags)
|
|
{
|
|
return init(document.body, flags, true);
|
|
};
|
|
}
|
|
|
|
|
|
// PROGRAM FAIL
|
|
|
|
function mainIsUndefined(name)
|
|
{
|
|
return function(domNode)
|
|
{
|
|
var message = 'Cannot initialize module `' + name +
|
|
'` because it has no `main` value!\nWhat should I show on screen?';
|
|
domNode.innerHTML = errorHtml(message);
|
|
throw new Error(message);
|
|
};
|
|
}
|
|
|
|
function errorHtml(message)
|
|
{
|
|
return '<div style="padding-left:1em;">'
|
|
+ '<h2 style="font-weight:normal;"><b>Oops!</b> Something went wrong when starting your Elm program.</h2>'
|
|
+ '<pre style="padding-left:1em;">' + message + '</pre>'
|
|
+ '</div>';
|
|
}
|
|
|
|
|
|
// PROGRAM SUCCESS
|
|
|
|
function makeEmbed(moduleName, main)
|
|
{
|
|
return function embed(rootDomNode, flags, withRenderer)
|
|
{
|
|
try
|
|
{
|
|
var program = mainToProgram(moduleName, main);
|
|
if (!withRenderer)
|
|
{
|
|
program.renderer = dummyRenderer;
|
|
}
|
|
return makeEmbedHelp(moduleName, program, rootDomNode, flags);
|
|
}
|
|
catch (e)
|
|
{
|
|
rootDomNode.innerHTML = errorHtml(e.message);
|
|
throw e;
|
|
}
|
|
};
|
|
}
|
|
|
|
function dummyRenderer()
|
|
{
|
|
return { update: function() {} };
|
|
}
|
|
|
|
|
|
// MAIN TO PROGRAM
|
|
|
|
function mainToProgram(moduleName, wrappedMain)
|
|
{
|
|
var main = wrappedMain.main;
|
|
|
|
if (typeof main.init === 'undefined')
|
|
{
|
|
var emptyBag = batch(_elm_lang$core$Native_List.Nil);
|
|
var noChange = _elm_lang$core$Native_Utils.Tuple2(
|
|
_elm_lang$core$Native_Utils.Tuple0,
|
|
emptyBag
|
|
);
|
|
|
|
return _elm_lang$virtual_dom$VirtualDom$programWithFlags({
|
|
init: function() { return noChange; },
|
|
view: function() { return main; },
|
|
update: F2(function() { return noChange; }),
|
|
subscriptions: function () { return emptyBag; }
|
|
});
|
|
}
|
|
|
|
var flags = wrappedMain.flags;
|
|
var init = flags
|
|
? initWithFlags(moduleName, main.init, flags)
|
|
: initWithoutFlags(moduleName, main.init);
|
|
|
|
return _elm_lang$virtual_dom$VirtualDom$programWithFlags({
|
|
init: init,
|
|
view: main.view,
|
|
update: main.update,
|
|
subscriptions: main.subscriptions,
|
|
});
|
|
}
|
|
|
|
function initWithoutFlags(moduleName, realInit)
|
|
{
|
|
return function init(flags)
|
|
{
|
|
if (typeof flags !== 'undefined')
|
|
{
|
|
throw new Error(
|
|
'You are giving module `' + moduleName + '` an argument in JavaScript.\n'
|
|
+ 'This module does not take arguments though! You probably need to change the\n'
|
|
+ 'initialization code to something like `Elm.' + moduleName + '.fullscreen()`'
|
|
);
|
|
}
|
|
return realInit();
|
|
};
|
|
}
|
|
|
|
function initWithFlags(moduleName, realInit, flagDecoder)
|
|
{
|
|
return function init(flags)
|
|
{
|
|
var result = A2(_elm_lang$core$Native_Json.run, flagDecoder, flags);
|
|
if (result.ctor === 'Err')
|
|
{
|
|
throw new Error(
|
|
'You are trying to initialize module `' + moduleName + '` with an unexpected argument.\n'
|
|
+ 'When trying to convert it to a usable Elm value, I run into this problem:\n\n'
|
|
+ result._0
|
|
);
|
|
}
|
|
return realInit(result._0);
|
|
};
|
|
}
|
|
|
|
|
|
// SETUP RUNTIME SYSTEM
|
|
|
|
function makeEmbedHelp(moduleName, program, rootDomNode, flags)
|
|
{
|
|
var init = program.init;
|
|
var update = program.update;
|
|
var subscriptions = program.subscriptions;
|
|
var view = program.view;
|
|
var makeRenderer = program.renderer;
|
|
|
|
// ambient state
|
|
var managers = {};
|
|
var renderer;
|
|
|
|
// init and update state in main process
|
|
var initApp = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) {
|
|
var results = init(flags);
|
|
var model = results._0;
|
|
renderer = makeRenderer(rootDomNode, enqueue, view(model));
|
|
var cmds = results._1;
|
|
var subs = subscriptions(model);
|
|
dispatchEffects(managers, cmds, subs);
|
|
callback(_elm_lang$core$Native_Scheduler.succeed(model));
|
|
});
|
|
|
|
function onMessage(msg, model)
|
|
{
|
|
return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) {
|
|
var results = A2(update, msg, model);
|
|
model = results._0;
|
|
renderer.update(view(model));
|
|
var cmds = results._1;
|
|
var subs = subscriptions(model);
|
|
dispatchEffects(managers, cmds, subs);
|
|
callback(_elm_lang$core$Native_Scheduler.succeed(model));
|
|
});
|
|
}
|
|
|
|
var mainProcess = spawnLoop(initApp, onMessage);
|
|
|
|
function enqueue(msg)
|
|
{
|
|
_elm_lang$core$Native_Scheduler.rawSend(mainProcess, msg);
|
|
}
|
|
|
|
var ports = setupEffects(managers, enqueue);
|
|
|
|
return ports ? { ports: ports } : {};
|
|
}
|
|
|
|
|
|
// EFFECT MANAGERS
|
|
|
|
var effectManagers = {};
|
|
|
|
function setupEffects(managers, callback)
|
|
{
|
|
var ports;
|
|
|
|
// setup all necessary effect managers
|
|
for (var key in effectManagers)
|
|
{
|
|
var manager = effectManagers[key];
|
|
|
|
if (manager.isForeign)
|
|
{
|
|
ports = ports || {};
|
|
ports[key] = manager.tag === 'cmd'
|
|
? setupOutgoingPort(key)
|
|
: setupIncomingPort(key, callback);
|
|
}
|
|
|
|
managers[key] = makeManager(manager, callback);
|
|
}
|
|
|
|
return ports;
|
|
}
|
|
|
|
function makeManager(info, callback)
|
|
{
|
|
var router = {
|
|
main: callback,
|
|
self: undefined
|
|
};
|
|
|
|
var tag = info.tag;
|
|
var onEffects = info.onEffects;
|
|
var onSelfMsg = info.onSelfMsg;
|
|
|
|
function onMessage(msg, state)
|
|
{
|
|
if (msg.ctor === 'self')
|
|
{
|
|
return A3(onSelfMsg, router, msg._0, state);
|
|
}
|
|
|
|
var fx = msg._0;
|
|
switch (tag)
|
|
{
|
|
case 'cmd':
|
|
return A3(onEffects, router, fx.cmds, state);
|
|
|
|
case 'sub':
|
|
return A3(onEffects, router, fx.subs, state);
|
|
|
|
case 'fx':
|
|
return A4(onEffects, router, fx.cmds, fx.subs, state);
|
|
}
|
|
}
|
|
|
|
var process = spawnLoop(info.init, onMessage);
|
|
router.self = process;
|
|
return process;
|
|
}
|
|
|
|
function sendToApp(router, msg)
|
|
{
|
|
return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)
|
|
{
|
|
router.main(msg);
|
|
callback(_elm_lang$core$Native_Scheduler.succeed(_elm_lang$core$Native_Utils.Tuple0));
|
|
});
|
|
}
|
|
|
|
function sendToSelf(router, msg)
|
|
{
|
|
return A2(_elm_lang$core$Native_Scheduler.send, router.self, {
|
|
ctor: 'self',
|
|
_0: msg
|
|
});
|
|
}
|
|
|
|
|
|
// HELPER for STATEFUL LOOPS
|
|
|
|
function spawnLoop(init, onMessage)
|
|
{
|
|
var andThen = _elm_lang$core$Native_Scheduler.andThen;
|
|
|
|
function loop(state)
|
|
{
|
|
var handleMsg = _elm_lang$core$Native_Scheduler.receive(function(msg) {
|
|
return onMessage(msg, state);
|
|
});
|
|
return A2(andThen, handleMsg, loop);
|
|
}
|
|
|
|
var task = A2(andThen, init, loop);
|
|
|
|
return _elm_lang$core$Native_Scheduler.rawSpawn(task);
|
|
}
|
|
|
|
|
|
// BAGS
|
|
|
|
function leaf(home)
|
|
{
|
|
return function(value)
|
|
{
|
|
return {
|
|
type: 'leaf',
|
|
home: home,
|
|
value: value
|
|
};
|
|
};
|
|
}
|
|
|
|
function batch(list)
|
|
{
|
|
return {
|
|
type: 'node',
|
|
branches: list
|
|
};
|
|
}
|
|
|
|
function map(tagger, bag)
|
|
{
|
|
return {
|
|
type: 'map',
|
|
tagger: tagger,
|
|
tree: bag
|
|
}
|
|
}
|
|
|
|
|
|
// PIPE BAGS INTO EFFECT MANAGERS
|
|
|
|
function dispatchEffects(managers, cmdBag, subBag)
|
|
{
|
|
var effectsDict = {};
|
|
gatherEffects(true, cmdBag, effectsDict, null);
|
|
gatherEffects(false, subBag, effectsDict, null);
|
|
|
|
for (var home in managers)
|
|
{
|
|
var fx = home in effectsDict
|
|
? effectsDict[home]
|
|
: {
|
|
cmds: _elm_lang$core$Native_List.Nil,
|
|
subs: _elm_lang$core$Native_List.Nil
|
|
};
|
|
|
|
_elm_lang$core$Native_Scheduler.rawSend(managers[home], { ctor: 'fx', _0: fx });
|
|
}
|
|
}
|
|
|
|
function gatherEffects(isCmd, bag, effectsDict, taggers)
|
|
{
|
|
switch (bag.type)
|
|
{
|
|
case 'leaf':
|
|
var home = bag.home;
|
|
var effect = toEffect(isCmd, home, taggers, bag.value);
|
|
effectsDict[home] = insert(isCmd, effect, effectsDict[home]);
|
|
return;
|
|
|
|
case 'node':
|
|
var list = bag.branches;
|
|
while (list.ctor !== '[]')
|
|
{
|
|
gatherEffects(isCmd, list._0, effectsDict, taggers);
|
|
list = list._1;
|
|
}
|
|
return;
|
|
|
|
case 'map':
|
|
gatherEffects(isCmd, bag.tree, effectsDict, {
|
|
tagger: bag.tagger,
|
|
rest: taggers
|
|
});
|
|
return;
|
|
}
|
|
}
|
|
|
|
function toEffect(isCmd, home, taggers, value)
|
|
{
|
|
function applyTaggers(x)
|
|
{
|
|
var temp = taggers;
|
|
while (temp)
|
|
{
|
|
x = temp.tagger(x);
|
|
temp = temp.rest;
|
|
}
|
|
return x;
|
|
}
|
|
|
|
var map = isCmd
|
|
? effectManagers[home].cmdMap
|
|
: effectManagers[home].subMap;
|
|
|
|
return A2(map, applyTaggers, value)
|
|
}
|
|
|
|
function insert(isCmd, newEffect, effects)
|
|
{
|
|
effects = effects || {
|
|
cmds: _elm_lang$core$Native_List.Nil,
|
|
subs: _elm_lang$core$Native_List.Nil
|
|
};
|
|
if (isCmd)
|
|
{
|
|
effects.cmds = _elm_lang$core$Native_List.Cons(newEffect, effects.cmds);
|
|
return effects;
|
|
}
|
|
effects.subs = _elm_lang$core$Native_List.Cons(newEffect, effects.subs);
|
|
return effects;
|
|
}
|
|
|
|
|
|
// PORTS
|
|
|
|
function checkPortName(name)
|
|
{
|
|
if (name in effectManagers)
|
|
{
|
|
throw new Error('There can only be one port named `' + name + '`, but your program has multiple.');
|
|
}
|
|
}
|
|
|
|
|
|
// OUTGOING PORTS
|
|
|
|
function outgoingPort(name, converter)
|
|
{
|
|
checkPortName(name);
|
|
effectManagers[name] = {
|
|
tag: 'cmd',
|
|
cmdMap: outgoingPortMap,
|
|
converter: converter,
|
|
isForeign: true
|
|
};
|
|
return leaf(name);
|
|
}
|
|
|
|
var outgoingPortMap = F2(function cmdMap(tagger, value) {
|
|
return value;
|
|
});
|
|
|
|
function setupOutgoingPort(name)
|
|
{
|
|
var subs = [];
|
|
var converter = effectManagers[name].converter;
|
|
|
|
// CREATE MANAGER
|
|
|
|
var init = _elm_lang$core$Native_Scheduler.succeed(null);
|
|
|
|
function onEffects(router, cmdList, state)
|
|
{
|
|
while (cmdList.ctor !== '[]')
|
|
{
|
|
var value = converter(cmdList._0);
|
|
for (var i = 0; i < subs.length; i++)
|
|
{
|
|
subs[i](value);
|
|
}
|
|
cmdList = cmdList._1;
|
|
}
|
|
return init;
|
|
}
|
|
|
|
effectManagers[name].init = init;
|
|
effectManagers[name].onEffects = F3(onEffects);
|
|
|
|
// PUBLIC API
|
|
|
|
function subscribe(callback)
|
|
{
|
|
subs.push(callback);
|
|
}
|
|
|
|
function unsubscribe(callback)
|
|
{
|
|
var index = subs.indexOf(callback);
|
|
if (index >= 0)
|
|
{
|
|
subs.splice(index, 1);
|
|
}
|
|
}
|
|
|
|
return {
|
|
subscribe: subscribe,
|
|
unsubscribe: unsubscribe
|
|
};
|
|
}
|
|
|
|
|
|
// INCOMING PORTS
|
|
|
|
function incomingPort(name, converter)
|
|
{
|
|
checkPortName(name);
|
|
effectManagers[name] = {
|
|
tag: 'sub',
|
|
subMap: incomingPortMap,
|
|
converter: converter,
|
|
isForeign: true
|
|
};
|
|
return leaf(name);
|
|
}
|
|
|
|
var incomingPortMap = F2(function subMap(tagger, finalTagger)
|
|
{
|
|
return function(value)
|
|
{
|
|
return tagger(finalTagger(value));
|
|
};
|
|
});
|
|
|
|
function setupIncomingPort(name, callback)
|
|
{
|
|
var subs = _elm_lang$core$Native_List.Nil;
|
|
var converter = effectManagers[name].converter;
|
|
|
|
// CREATE MANAGER
|
|
|
|
var init = _elm_lang$core$Native_Scheduler.succeed(null);
|
|
|
|
function onEffects(router, subList, state)
|
|
{
|
|
subs = subList;
|
|
return init;
|
|
}
|
|
|
|
effectManagers[name].init = init;
|
|
effectManagers[name].onEffects = F3(onEffects);
|
|
|
|
// PUBLIC API
|
|
|
|
function send(value)
|
|
{
|
|
var result = A2(_elm_lang$core$Json_Decode$decodeValue, converter, value);
|
|
if (result.ctor === 'Err')
|
|
{
|
|
throw new Error('Trying to send an unexpected type of value through port `' + name + '`:\n' + result._0);
|
|
}
|
|
|
|
var value = result._0;
|
|
var temp = subs;
|
|
while (temp.ctor !== '[]')
|
|
{
|
|
callback(temp._0(value));
|
|
temp = temp._1;
|
|
}
|
|
}
|
|
|
|
return { send: send };
|
|
}
|
|
|
|
return {
|
|
// routers
|
|
sendToApp: F2(sendToApp),
|
|
sendToSelf: F2(sendToSelf),
|
|
|
|
// global setup
|
|
mainToProgram: mainToProgram,
|
|
effectManagers: effectManagers,
|
|
outgoingPort: outgoingPort,
|
|
incomingPort: incomingPort,
|
|
addPublicModule: addPublicModule,
|
|
|
|
// effect bags
|
|
leaf: leaf,
|
|
batch: batch,
|
|
map: F2(map)
|
|
};
|
|
|
|
}();
|
|
//import Native.Utils //
|
|
|
|
var _elm_lang$core$Native_Scheduler = function() {
|
|
|
|
var MAX_STEPS = 10000;
|
|
|
|
|
|
// TASKS
|
|
|
|
function succeed(value)
|
|
{
|
|
return {
|
|
ctor: '_Task_succeed',
|
|
value: value
|
|
};
|
|
}
|
|
|
|
function fail(error)
|
|
{
|
|
return {
|
|
ctor: '_Task_fail',
|
|
value: error
|
|
};
|
|
}
|
|
|
|
function nativeBinding(callback)
|
|
{
|
|
return {
|
|
ctor: '_Task_nativeBinding',
|
|
callback: callback,
|
|
cancel: null
|
|
};
|
|
}
|
|
|
|
function andThen(task, callback)
|
|
{
|
|
return {
|
|
ctor: '_Task_andThen',
|
|
task: task,
|
|
callback: callback
|
|
};
|
|
}
|
|
|
|
function onError(task, callback)
|
|
{
|
|
return {
|
|
ctor: '_Task_onError',
|
|
task: task,
|
|
callback: callback
|
|
};
|
|
}
|
|
|
|
function receive(callback)
|
|
{
|
|
return {
|
|
ctor: '_Task_receive',
|
|
callback: callback
|
|
};
|
|
}
|
|
|
|
|
|
// PROCESSES
|
|
|
|
function rawSpawn(task)
|
|
{
|
|
var process = {
|
|
ctor: '_Process',
|
|
id: _elm_lang$core$Native_Utils.guid(),
|
|
root: task,
|
|
stack: null,
|
|
mailbox: []
|
|
};
|
|
|
|
enqueue(process);
|
|
|
|
return process;
|
|
}
|
|
|
|
function spawn(task)
|
|
{
|
|
return nativeBinding(function(callback) {
|
|
var process = rawSpawn(task);
|
|
callback(succeed(process));
|
|
});
|
|
}
|
|
|
|
function rawSend(process, msg)
|
|
{
|
|
process.mailbox.push(msg);
|
|
enqueue(process);
|
|
}
|
|
|
|
function send(process, msg)
|
|
{
|
|
return nativeBinding(function(callback) {
|
|
rawSend(process, msg);
|
|
callback(succeed(_elm_lang$core$Native_Utils.Tuple0));
|
|
});
|
|
}
|
|
|
|
function kill(process)
|
|
{
|
|
return nativeBinding(function(callback) {
|
|
var root = process.root;
|
|
if (root.ctor === '_Task_nativeBinding' && root.cancel)
|
|
{
|
|
root.cancel();
|
|
}
|
|
|
|
process.root = null;
|
|
|
|
callback(succeed(_elm_lang$core$Native_Utils.Tuple0));
|
|
});
|
|
}
|
|
|
|
function sleep(time)
|
|
{
|
|
return nativeBinding(function(callback) {
|
|
var id = setTimeout(function() {
|
|
callback(succeed(_elm_lang$core$Native_Utils.Tuple0));
|
|
}, time);
|
|
|
|
return function() { clearTimeout(id); };
|
|
});
|
|
}
|
|
|
|
|
|
// STEP PROCESSES
|
|
|
|
function step(numSteps, process)
|
|
{
|
|
while (numSteps < MAX_STEPS)
|
|
{
|
|
var ctor = process.root.ctor;
|
|
|
|
if (ctor === '_Task_succeed')
|
|
{
|
|
while (process.stack && process.stack.ctor === '_Task_onError')
|
|
{
|
|
process.stack = process.stack.rest;
|
|
}
|
|
if (process.stack === null)
|
|
{
|
|
break;
|
|
}
|
|
process.root = process.stack.callback(process.root.value);
|
|
process.stack = process.stack.rest;
|
|
++numSteps;
|
|
continue;
|
|
}
|
|
|
|
if (ctor === '_Task_fail')
|
|
{
|
|
while (process.stack && process.stack.ctor === '_Task_andThen')
|
|
{
|
|
process.stack = process.stack.rest;
|
|
}
|
|
if (process.stack === null)
|
|
{
|
|
break;
|
|
}
|
|
process.root = process.stack.callback(process.root.value);
|
|
process.stack = process.stack.rest;
|
|
++numSteps;
|
|
continue;
|
|
}
|
|
|
|
if (ctor === '_Task_andThen')
|
|
{
|
|
process.stack = {
|
|
ctor: '_Task_andThen',
|
|
callback: process.root.callback,
|
|
rest: process.stack
|
|
};
|
|
process.root = process.root.task;
|
|
++numSteps;
|
|
continue;
|
|
}
|
|
|
|
if (ctor === '_Task_onError')
|
|
{
|
|
process.stack = {
|
|
ctor: '_Task_onError',
|
|
callback: process.root.callback,
|
|
rest: process.stack
|
|
};
|
|
process.root = process.root.task;
|
|
++numSteps;
|
|
continue;
|
|
}
|
|
|
|
if (ctor === '_Task_nativeBinding')
|
|
{
|
|
process.root.cancel = process.root.callback(function(newRoot) {
|
|
process.root = newRoot;
|
|
enqueue(process);
|
|
});
|
|
|
|
break;
|
|
}
|
|
|
|
if (ctor === '_Task_receive')
|
|
{
|
|
var mailbox = process.mailbox;
|
|
if (mailbox.length === 0)
|
|
{
|
|
break;
|
|
}
|
|
|
|
process.root = process.root.callback(mailbox.shift());
|
|
++numSteps;
|
|
continue;
|
|
}
|
|
|
|
throw new Error(ctor);
|
|
}
|
|
|
|
if (numSteps < MAX_STEPS)
|
|
{
|
|
return numSteps + 1;
|
|
}
|
|
enqueue(process);
|
|
|
|
return numSteps;
|
|
}
|
|
|
|
|
|
// WORK QUEUE
|
|
|
|
var working = false;
|
|
var workQueue = [];
|
|
|
|
function enqueue(process)
|
|
{
|
|
workQueue.push(process);
|
|
|
|
if (!working)
|
|
{
|
|
setTimeout(work, 0);
|
|
working = true;
|
|
}
|
|
}
|
|
|
|
function work()
|
|
{
|
|
var numSteps = 0;
|
|
var process;
|
|
while (numSteps < MAX_STEPS && (process = workQueue.shift()))
|
|
{
|
|
numSteps = step(numSteps, process);
|
|
}
|
|
if (!process)
|
|
{
|
|
working = false;
|
|
return;
|
|
}
|
|
setTimeout(work, 0);
|
|
}
|
|
|
|
|
|
return {
|
|
succeed: succeed,
|
|
fail: fail,
|
|
nativeBinding: nativeBinding,
|
|
andThen: F2(andThen),
|
|
onError: F2(onError),
|
|
receive: receive,
|
|
|
|
spawn: spawn,
|
|
kill: kill,
|
|
sleep: sleep,
|
|
send: F2(send),
|
|
|
|
rawSpawn: rawSpawn,
|
|
rawSend: rawSend
|
|
};
|
|
|
|
}();
|
|
var _elm_lang$core$Platform$hack = _elm_lang$core$Native_Scheduler.succeed;
|
|
var _elm_lang$core$Platform$sendToSelf = _elm_lang$core$Native_Platform.sendToSelf;
|
|
var _elm_lang$core$Platform$sendToApp = _elm_lang$core$Native_Platform.sendToApp;
|
|
var _elm_lang$core$Platform$Program = {ctor: 'Program'};
|
|
var _elm_lang$core$Platform$Task = {ctor: 'Task'};
|
|
var _elm_lang$core$Platform$ProcessId = {ctor: 'ProcessId'};
|
|
var _elm_lang$core$Platform$Router = {ctor: 'Router'};
|
|
|
|
var _elm_lang$core$Platform_Cmd$batch = _elm_lang$core$Native_Platform.batch;
|
|
var _elm_lang$core$Platform_Cmd$none = _elm_lang$core$Platform_Cmd$batch(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]));
|
|
var _elm_lang$core$Platform_Cmd_ops = _elm_lang$core$Platform_Cmd_ops || {};
|
|
_elm_lang$core$Platform_Cmd_ops['!'] = F2(
|
|
function (model, commands) {
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: model,
|
|
_1: _elm_lang$core$Platform_Cmd$batch(commands)
|
|
};
|
|
});
|
|
var _elm_lang$core$Platform_Cmd$map = _elm_lang$core$Native_Platform.map;
|
|
var _elm_lang$core$Platform_Cmd$Cmd = {ctor: 'Cmd'};
|
|
|
|
var _elm_lang$core$Platform_Sub$batch = _elm_lang$core$Native_Platform.batch;
|
|
var _elm_lang$core$Platform_Sub$none = _elm_lang$core$Platform_Sub$batch(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]));
|
|
var _elm_lang$core$Platform_Sub$map = _elm_lang$core$Native_Platform.map;
|
|
var _elm_lang$core$Platform_Sub$Sub = {ctor: 'Sub'};
|
|
|
|
//import Native.List //
|
|
|
|
var _elm_lang$core$Native_Array = function() {
|
|
|
|
// A RRB-Tree has two distinct data types.
|
|
// Leaf -> "height" is always 0
|
|
// "table" is an array of elements
|
|
// Node -> "height" is always greater than 0
|
|
// "table" is an array of child nodes
|
|
// "lengths" is an array of accumulated lengths of the child nodes
|
|
|
|
// M is the maximal table size. 32 seems fast. E is the allowed increase
|
|
// of search steps when concatting to find an index. Lower values will
|
|
// decrease balancing, but will increase search steps.
|
|
var M = 32;
|
|
var E = 2;
|
|
|
|
// An empty array.
|
|
var empty = {
|
|
ctor: '_Array',
|
|
height: 0,
|
|
table: []
|
|
};
|
|
|
|
|
|
function get(i, array)
|
|
{
|
|
if (i < 0 || i >= length(array))
|
|
{
|
|
throw new Error(
|
|
'Index ' + i + ' is out of range. Check the length of ' +
|
|
'your array first or use getMaybe or getWithDefault.');
|
|
}
|
|
return unsafeGet(i, array);
|
|
}
|
|
|
|
|
|
function unsafeGet(i, array)
|
|
{
|
|
for (var x = array.height; x > 0; x--)
|
|
{
|
|
var slot = i >> (x * 5);
|
|
while (array.lengths[slot] <= i)
|
|
{
|
|
slot++;
|
|
}
|
|
if (slot > 0)
|
|
{
|
|
i -= array.lengths[slot - 1];
|
|
}
|
|
array = array.table[slot];
|
|
}
|
|
return array.table[i];
|
|
}
|
|
|
|
|
|
// Sets the value at the index i. Only the nodes leading to i will get
|
|
// copied and updated.
|
|
function set(i, item, array)
|
|
{
|
|
if (i < 0 || length(array) <= i)
|
|
{
|
|
return array;
|
|
}
|
|
return unsafeSet(i, item, array);
|
|
}
|
|
|
|
|
|
function unsafeSet(i, item, array)
|
|
{
|
|
array = nodeCopy(array);
|
|
|
|
if (array.height === 0)
|
|
{
|
|
array.table[i] = item;
|
|
}
|
|
else
|
|
{
|
|
var slot = getSlot(i, array);
|
|
if (slot > 0)
|
|
{
|
|
i -= array.lengths[slot - 1];
|
|
}
|
|
array.table[slot] = unsafeSet(i, item, array.table[slot]);
|
|
}
|
|
return array;
|
|
}
|
|
|
|
|
|
function initialize(len, f)
|
|
{
|
|
if (len <= 0)
|
|
{
|
|
return empty;
|
|
}
|
|
var h = Math.floor( Math.log(len) / Math.log(M) );
|
|
return initialize_(f, h, 0, len);
|
|
}
|
|
|
|
function initialize_(f, h, from, to)
|
|
{
|
|
if (h === 0)
|
|
{
|
|
var table = new Array((to - from) % (M + 1));
|
|
for (var i = 0; i < table.length; i++)
|
|
{
|
|
table[i] = f(from + i);
|
|
}
|
|
return {
|
|
ctor: '_Array',
|
|
height: 0,
|
|
table: table
|
|
};
|
|
}
|
|
|
|
var step = Math.pow(M, h);
|
|
var table = new Array(Math.ceil((to - from) / step));
|
|
var lengths = new Array(table.length);
|
|
for (var i = 0; i < table.length; i++)
|
|
{
|
|
table[i] = initialize_(f, h - 1, from + (i * step), Math.min(from + ((i + 1) * step), to));
|
|
lengths[i] = length(table[i]) + (i > 0 ? lengths[i-1] : 0);
|
|
}
|
|
return {
|
|
ctor: '_Array',
|
|
height: h,
|
|
table: table,
|
|
lengths: lengths
|
|
};
|
|
}
|
|
|
|
function fromList(list)
|
|
{
|
|
if (list.ctor === '[]')
|
|
{
|
|
return empty;
|
|
}
|
|
|
|
// Allocate M sized blocks (table) and write list elements to it.
|
|
var table = new Array(M);
|
|
var nodes = [];
|
|
var i = 0;
|
|
|
|
while (list.ctor !== '[]')
|
|
{
|
|
table[i] = list._0;
|
|
list = list._1;
|
|
i++;
|
|
|
|
// table is full, so we can push a leaf containing it into the
|
|
// next node.
|
|
if (i === M)
|
|
{
|
|
var leaf = {
|
|
ctor: '_Array',
|
|
height: 0,
|
|
table: table
|
|
};
|
|
fromListPush(leaf, nodes);
|
|
table = new Array(M);
|
|
i = 0;
|
|
}
|
|
}
|
|
|
|
// Maybe there is something left on the table.
|
|
if (i > 0)
|
|
{
|
|
var leaf = {
|
|
ctor: '_Array',
|
|
height: 0,
|
|
table: table.splice(0, i)
|
|
};
|
|
fromListPush(leaf, nodes);
|
|
}
|
|
|
|
// Go through all of the nodes and eventually push them into higher nodes.
|
|
for (var h = 0; h < nodes.length - 1; h++)
|
|
{
|
|
if (nodes[h].table.length > 0)
|
|
{
|
|
fromListPush(nodes[h], nodes);
|
|
}
|
|
}
|
|
|
|
var head = nodes[nodes.length - 1];
|
|
if (head.height > 0 && head.table.length === 1)
|
|
{
|
|
return head.table[0];
|
|
}
|
|
else
|
|
{
|
|
return head;
|
|
}
|
|
}
|
|
|
|
// Push a node into a higher node as a child.
|
|
function fromListPush(toPush, nodes)
|
|
{
|
|
var h = toPush.height;
|
|
|
|
// Maybe the node on this height does not exist.
|
|
if (nodes.length === h)
|
|
{
|
|
var node = {
|
|
ctor: '_Array',
|
|
height: h + 1,
|
|
table: [],
|
|
lengths: []
|
|
};
|
|
nodes.push(node);
|
|
}
|
|
|
|
nodes[h].table.push(toPush);
|
|
var len = length(toPush);
|
|
if (nodes[h].lengths.length > 0)
|
|
{
|
|
len += nodes[h].lengths[nodes[h].lengths.length - 1];
|
|
}
|
|
nodes[h].lengths.push(len);
|
|
|
|
if (nodes[h].table.length === M)
|
|
{
|
|
fromListPush(nodes[h], nodes);
|
|
nodes[h] = {
|
|
ctor: '_Array',
|
|
height: h + 1,
|
|
table: [],
|
|
lengths: []
|
|
};
|
|
}
|
|
}
|
|
|
|
// Pushes an item via push_ to the bottom right of a tree.
|
|
function push(item, a)
|
|
{
|
|
var pushed = push_(item, a);
|
|
if (pushed !== null)
|
|
{
|
|
return pushed;
|
|
}
|
|
|
|
var newTree = create(item, a.height);
|
|
return siblise(a, newTree);
|
|
}
|
|
|
|
// Recursively tries to push an item to the bottom-right most
|
|
// tree possible. If there is no space left for the item,
|
|
// null will be returned.
|
|
function push_(item, a)
|
|
{
|
|
// Handle resursion stop at leaf level.
|
|
if (a.height === 0)
|
|
{
|
|
if (a.table.length < M)
|
|
{
|
|
var newA = {
|
|
ctor: '_Array',
|
|
height: 0,
|
|
table: a.table.slice()
|
|
};
|
|
newA.table.push(item);
|
|
return newA;
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
// Recursively push
|
|
var pushed = push_(item, botRight(a));
|
|
|
|
// There was space in the bottom right tree, so the slot will
|
|
// be updated.
|
|
if (pushed !== null)
|
|
{
|
|
var newA = nodeCopy(a);
|
|
newA.table[newA.table.length - 1] = pushed;
|
|
newA.lengths[newA.lengths.length - 1]++;
|
|
return newA;
|
|
}
|
|
|
|
// When there was no space left, check if there is space left
|
|
// for a new slot with a tree which contains only the item
|
|
// at the bottom.
|
|
if (a.table.length < M)
|
|
{
|
|
var newSlot = create(item, a.height - 1);
|
|
var newA = nodeCopy(a);
|
|
newA.table.push(newSlot);
|
|
newA.lengths.push(newA.lengths[newA.lengths.length - 1] + length(newSlot));
|
|
return newA;
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
// Converts an array into a list of elements.
|
|
function toList(a)
|
|
{
|
|
return toList_(_elm_lang$core$Native_List.Nil, a);
|
|
}
|
|
|
|
function toList_(list, a)
|
|
{
|
|
for (var i = a.table.length - 1; i >= 0; i--)
|
|
{
|
|
list =
|
|
a.height === 0
|
|
? _elm_lang$core$Native_List.Cons(a.table[i], list)
|
|
: toList_(list, a.table[i]);
|
|
}
|
|
return list;
|
|
}
|
|
|
|
// Maps a function over the elements of an array.
|
|
function map(f, a)
|
|
{
|
|
var newA = {
|
|
ctor: '_Array',
|
|
height: a.height,
|
|
table: new Array(a.table.length)
|
|
};
|
|
if (a.height > 0)
|
|
{
|
|
newA.lengths = a.lengths;
|
|
}
|
|
for (var i = 0; i < a.table.length; i++)
|
|
{
|
|
newA.table[i] =
|
|
a.height === 0
|
|
? f(a.table[i])
|
|
: map(f, a.table[i]);
|
|
}
|
|
return newA;
|
|
}
|
|
|
|
// Maps a function over the elements with their index as first argument.
|
|
function indexedMap(f, a)
|
|
{
|
|
return indexedMap_(f, a, 0);
|
|
}
|
|
|
|
function indexedMap_(f, a, from)
|
|
{
|
|
var newA = {
|
|
ctor: '_Array',
|
|
height: a.height,
|
|
table: new Array(a.table.length)
|
|
};
|
|
if (a.height > 0)
|
|
{
|
|
newA.lengths = a.lengths;
|
|
}
|
|
for (var i = 0; i < a.table.length; i++)
|
|
{
|
|
newA.table[i] =
|
|
a.height === 0
|
|
? A2(f, from + i, a.table[i])
|
|
: indexedMap_(f, a.table[i], i == 0 ? from : from + a.lengths[i - 1]);
|
|
}
|
|
return newA;
|
|
}
|
|
|
|
function foldl(f, b, a)
|
|
{
|
|
if (a.height === 0)
|
|
{
|
|
for (var i = 0; i < a.table.length; i++)
|
|
{
|
|
b = A2(f, a.table[i], b);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (var i = 0; i < a.table.length; i++)
|
|
{
|
|
b = foldl(f, b, a.table[i]);
|
|
}
|
|
}
|
|
return b;
|
|
}
|
|
|
|
function foldr(f, b, a)
|
|
{
|
|
if (a.height === 0)
|
|
{
|
|
for (var i = a.table.length; i--; )
|
|
{
|
|
b = A2(f, a.table[i], b);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (var i = a.table.length; i--; )
|
|
{
|
|
b = foldr(f, b, a.table[i]);
|
|
}
|
|
}
|
|
return b;
|
|
}
|
|
|
|
// TODO: currently, it slices the right, then the left. This can be
|
|
// optimized.
|
|
function slice(from, to, a)
|
|
{
|
|
if (from < 0)
|
|
{
|
|
from += length(a);
|
|
}
|
|
if (to < 0)
|
|
{
|
|
to += length(a);
|
|
}
|
|
return sliceLeft(from, sliceRight(to, a));
|
|
}
|
|
|
|
function sliceRight(to, a)
|
|
{
|
|
if (to === length(a))
|
|
{
|
|
return a;
|
|
}
|
|
|
|
// Handle leaf level.
|
|
if (a.height === 0)
|
|
{
|
|
var newA = { ctor:'_Array', height:0 };
|
|
newA.table = a.table.slice(0, to);
|
|
return newA;
|
|
}
|
|
|
|
// Slice the right recursively.
|
|
var right = getSlot(to, a);
|
|
var sliced = sliceRight(to - (right > 0 ? a.lengths[right - 1] : 0), a.table[right]);
|
|
|
|
// Maybe the a node is not even needed, as sliced contains the whole slice.
|
|
if (right === 0)
|
|
{
|
|
return sliced;
|
|
}
|
|
|
|
// Create new node.
|
|
var newA = {
|
|
ctor: '_Array',
|
|
height: a.height,
|
|
table: a.table.slice(0, right),
|
|
lengths: a.lengths.slice(0, right)
|
|
};
|
|
if (sliced.table.length > 0)
|
|
{
|
|
newA.table[right] = sliced;
|
|
newA.lengths[right] = length(sliced) + (right > 0 ? newA.lengths[right - 1] : 0);
|
|
}
|
|
return newA;
|
|
}
|
|
|
|
function sliceLeft(from, a)
|
|
{
|
|
if (from === 0)
|
|
{
|
|
return a;
|
|
}
|
|
|
|
// Handle leaf level.
|
|
if (a.height === 0)
|
|
{
|
|
var newA = { ctor:'_Array', height:0 };
|
|
newA.table = a.table.slice(from, a.table.length + 1);
|
|
return newA;
|
|
}
|
|
|
|
// Slice the left recursively.
|
|
var left = getSlot(from, a);
|
|
var sliced = sliceLeft(from - (left > 0 ? a.lengths[left - 1] : 0), a.table[left]);
|
|
|
|
// Maybe the a node is not even needed, as sliced contains the whole slice.
|
|
if (left === a.table.length - 1)
|
|
{
|
|
return sliced;
|
|
}
|
|
|
|
// Create new node.
|
|
var newA = {
|
|
ctor: '_Array',
|
|
height: a.height,
|
|
table: a.table.slice(left, a.table.length + 1),
|
|
lengths: new Array(a.table.length - left)
|
|
};
|
|
newA.table[0] = sliced;
|
|
var len = 0;
|
|
for (var i = 0; i < newA.table.length; i++)
|
|
{
|
|
len += length(newA.table[i]);
|
|
newA.lengths[i] = len;
|
|
}
|
|
|
|
return newA;
|
|
}
|
|
|
|
// Appends two trees.
|
|
function append(a,b)
|
|
{
|
|
if (a.table.length === 0)
|
|
{
|
|
return b;
|
|
}
|
|
if (b.table.length === 0)
|
|
{
|
|
return a;
|
|
}
|
|
|
|
var c = append_(a, b);
|
|
|
|
// Check if both nodes can be crunshed together.
|
|
if (c[0].table.length + c[1].table.length <= M)
|
|
{
|
|
if (c[0].table.length === 0)
|
|
{
|
|
return c[1];
|
|
}
|
|
if (c[1].table.length === 0)
|
|
{
|
|
return c[0];
|
|
}
|
|
|
|
// Adjust .table and .lengths
|
|
c[0].table = c[0].table.concat(c[1].table);
|
|
if (c[0].height > 0)
|
|
{
|
|
var len = length(c[0]);
|
|
for (var i = 0; i < c[1].lengths.length; i++)
|
|
{
|
|
c[1].lengths[i] += len;
|
|
}
|
|
c[0].lengths = c[0].lengths.concat(c[1].lengths);
|
|
}
|
|
|
|
return c[0];
|
|
}
|
|
|
|
if (c[0].height > 0)
|
|
{
|
|
var toRemove = calcToRemove(a, b);
|
|
if (toRemove > E)
|
|
{
|
|
c = shuffle(c[0], c[1], toRemove);
|
|
}
|
|
}
|
|
|
|
return siblise(c[0], c[1]);
|
|
}
|
|
|
|
// Returns an array of two nodes; right and left. One node _may_ be empty.
|
|
function append_(a, b)
|
|
{
|
|
if (a.height === 0 && b.height === 0)
|
|
{
|
|
return [a, b];
|
|
}
|
|
|
|
if (a.height !== 1 || b.height !== 1)
|
|
{
|
|
if (a.height === b.height)
|
|
{
|
|
a = nodeCopy(a);
|
|
b = nodeCopy(b);
|
|
var appended = append_(botRight(a), botLeft(b));
|
|
|
|
insertRight(a, appended[1]);
|
|
insertLeft(b, appended[0]);
|
|
}
|
|
else if (a.height > b.height)
|
|
{
|
|
a = nodeCopy(a);
|
|
var appended = append_(botRight(a), b);
|
|
|
|
insertRight(a, appended[0]);
|
|
b = parentise(appended[1], appended[1].height + 1);
|
|
}
|
|
else
|
|
{
|
|
b = nodeCopy(b);
|
|
var appended = append_(a, botLeft(b));
|
|
|
|
var left = appended[0].table.length === 0 ? 0 : 1;
|
|
var right = left === 0 ? 1 : 0;
|
|
insertLeft(b, appended[left]);
|
|
a = parentise(appended[right], appended[right].height + 1);
|
|
}
|
|
}
|
|
|
|
// Check if balancing is needed and return based on that.
|
|
if (a.table.length === 0 || b.table.length === 0)
|
|
{
|
|
return [a, b];
|
|
}
|
|
|
|
var toRemove = calcToRemove(a, b);
|
|
if (toRemove <= E)
|
|
{
|
|
return [a, b];
|
|
}
|
|
return shuffle(a, b, toRemove);
|
|
}
|
|
|
|
// Helperfunctions for append_. Replaces a child node at the side of the parent.
|
|
function insertRight(parent, node)
|
|
{
|
|
var index = parent.table.length - 1;
|
|
parent.table[index] = node;
|
|
parent.lengths[index] = length(node);
|
|
parent.lengths[index] += index > 0 ? parent.lengths[index - 1] : 0;
|
|
}
|
|
|
|
function insertLeft(parent, node)
|
|
{
|
|
if (node.table.length > 0)
|
|
{
|
|
parent.table[0] = node;
|
|
parent.lengths[0] = length(node);
|
|
|
|
var len = length(parent.table[0]);
|
|
for (var i = 1; i < parent.lengths.length; i++)
|
|
{
|
|
len += length(parent.table[i]);
|
|
parent.lengths[i] = len;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
parent.table.shift();
|
|
for (var i = 1; i < parent.lengths.length; i++)
|
|
{
|
|
parent.lengths[i] = parent.lengths[i] - parent.lengths[0];
|
|
}
|
|
parent.lengths.shift();
|
|
}
|
|
}
|
|
|
|
// Returns the extra search steps for E. Refer to the paper.
|
|
function calcToRemove(a, b)
|
|
{
|
|
var subLengths = 0;
|
|
for (var i = 0; i < a.table.length; i++)
|
|
{
|
|
subLengths += a.table[i].table.length;
|
|
}
|
|
for (var i = 0; i < b.table.length; i++)
|
|
{
|
|
subLengths += b.table[i].table.length;
|
|
}
|
|
|
|
var toRemove = a.table.length + b.table.length;
|
|
return toRemove - (Math.floor((subLengths - 1) / M) + 1);
|
|
}
|
|
|
|
// get2, set2 and saveSlot are helpers for accessing elements over two arrays.
|
|
function get2(a, b, index)
|
|
{
|
|
return index < a.length
|
|
? a[index]
|
|
: b[index - a.length];
|
|
}
|
|
|
|
function set2(a, b, index, value)
|
|
{
|
|
if (index < a.length)
|
|
{
|
|
a[index] = value;
|
|
}
|
|
else
|
|
{
|
|
b[index - a.length] = value;
|
|
}
|
|
}
|
|
|
|
function saveSlot(a, b, index, slot)
|
|
{
|
|
set2(a.table, b.table, index, slot);
|
|
|
|
var l = (index === 0 || index === a.lengths.length)
|
|
? 0
|
|
: get2(a.lengths, a.lengths, index - 1);
|
|
|
|
set2(a.lengths, b.lengths, index, l + length(slot));
|
|
}
|
|
|
|
// Creates a node or leaf with a given length at their arrays for perfomance.
|
|
// Is only used by shuffle.
|
|
function createNode(h, length)
|
|
{
|
|
if (length < 0)
|
|
{
|
|
length = 0;
|
|
}
|
|
var a = {
|
|
ctor: '_Array',
|
|
height: h,
|
|
table: new Array(length)
|
|
};
|
|
if (h > 0)
|
|
{
|
|
a.lengths = new Array(length);
|
|
}
|
|
return a;
|
|
}
|
|
|
|
// Returns an array of two balanced nodes.
|
|
function shuffle(a, b, toRemove)
|
|
{
|
|
var newA = createNode(a.height, Math.min(M, a.table.length + b.table.length - toRemove));
|
|
var newB = createNode(a.height, newA.table.length - (a.table.length + b.table.length - toRemove));
|
|
|
|
// Skip the slots with size M. More precise: copy the slot references
|
|
// to the new node
|
|
var read = 0;
|
|
while (get2(a.table, b.table, read).table.length % M === 0)
|
|
{
|
|
set2(newA.table, newB.table, read, get2(a.table, b.table, read));
|
|
set2(newA.lengths, newB.lengths, read, get2(a.lengths, b.lengths, read));
|
|
read++;
|
|
}
|
|
|
|
// Pulling items from left to right, caching in a slot before writing
|
|
// it into the new nodes.
|
|
var write = read;
|
|
var slot = new createNode(a.height - 1, 0);
|
|
var from = 0;
|
|
|
|
// If the current slot is still containing data, then there will be at
|
|
// least one more write, so we do not break this loop yet.
|
|
while (read - write - (slot.table.length > 0 ? 1 : 0) < toRemove)
|
|
{
|
|
// Find out the max possible items for copying.
|
|
var source = get2(a.table, b.table, read);
|
|
var to = Math.min(M - slot.table.length, source.table.length);
|
|
|
|
// Copy and adjust size table.
|
|
slot.table = slot.table.concat(source.table.slice(from, to));
|
|
if (slot.height > 0)
|
|
{
|
|
var len = slot.lengths.length;
|
|
for (var i = len; i < len + to - from; i++)
|
|
{
|
|
slot.lengths[i] = length(slot.table[i]);
|
|
slot.lengths[i] += (i > 0 ? slot.lengths[i - 1] : 0);
|
|
}
|
|
}
|
|
|
|
from += to;
|
|
|
|
// Only proceed to next slots[i] if the current one was
|
|
// fully copied.
|
|
if (source.table.length <= to)
|
|
{
|
|
read++; from = 0;
|
|
}
|
|
|
|
// Only create a new slot if the current one is filled up.
|
|
if (slot.table.length === M)
|
|
{
|
|
saveSlot(newA, newB, write, slot);
|
|
slot = createNode(a.height - 1, 0);
|
|
write++;
|
|
}
|
|
}
|
|
|
|
// Cleanup after the loop. Copy the last slot into the new nodes.
|
|
if (slot.table.length > 0)
|
|
{
|
|
saveSlot(newA, newB, write, slot);
|
|
write++;
|
|
}
|
|
|
|
// Shift the untouched slots to the left
|
|
while (read < a.table.length + b.table.length )
|
|
{
|
|
saveSlot(newA, newB, write, get2(a.table, b.table, read));
|
|
read++;
|
|
write++;
|
|
}
|
|
|
|
return [newA, newB];
|
|
}
|
|
|
|
// Navigation functions
|
|
function botRight(a)
|
|
{
|
|
return a.table[a.table.length - 1];
|
|
}
|
|
function botLeft(a)
|
|
{
|
|
return a.table[0];
|
|
}
|
|
|
|
// Copies a node for updating. Note that you should not use this if
|
|
// only updating only one of "table" or "lengths" for performance reasons.
|
|
function nodeCopy(a)
|
|
{
|
|
var newA = {
|
|
ctor: '_Array',
|
|
height: a.height,
|
|
table: a.table.slice()
|
|
};
|
|
if (a.height > 0)
|
|
{
|
|
newA.lengths = a.lengths.slice();
|
|
}
|
|
return newA;
|
|
}
|
|
|
|
// Returns how many items are in the tree.
|
|
function length(array)
|
|
{
|
|
if (array.height === 0)
|
|
{
|
|
return array.table.length;
|
|
}
|
|
else
|
|
{
|
|
return array.lengths[array.lengths.length - 1];
|
|
}
|
|
}
|
|
|
|
// Calculates in which slot of "table" the item probably is, then
|
|
// find the exact slot via forward searching in "lengths". Returns the index.
|
|
function getSlot(i, a)
|
|
{
|
|
var slot = i >> (5 * a.height);
|
|
while (a.lengths[slot] <= i)
|
|
{
|
|
slot++;
|
|
}
|
|
return slot;
|
|
}
|
|
|
|
// Recursively creates a tree with a given height containing
|
|
// only the given item.
|
|
function create(item, h)
|
|
{
|
|
if (h === 0)
|
|
{
|
|
return {
|
|
ctor: '_Array',
|
|
height: 0,
|
|
table: [item]
|
|
};
|
|
}
|
|
return {
|
|
ctor: '_Array',
|
|
height: h,
|
|
table: [create(item, h - 1)],
|
|
lengths: [1]
|
|
};
|
|
}
|
|
|
|
// Recursively creates a tree that contains the given tree.
|
|
function parentise(tree, h)
|
|
{
|
|
if (h === tree.height)
|
|
{
|
|
return tree;
|
|
}
|
|
|
|
return {
|
|
ctor: '_Array',
|
|
height: h,
|
|
table: [parentise(tree, h - 1)],
|
|
lengths: [length(tree)]
|
|
};
|
|
}
|
|
|
|
// Emphasizes blood brotherhood beneath two trees.
|
|
function siblise(a, b)
|
|
{
|
|
return {
|
|
ctor: '_Array',
|
|
height: a.height + 1,
|
|
table: [a, b],
|
|
lengths: [length(a), length(a) + length(b)]
|
|
};
|
|
}
|
|
|
|
function toJSArray(a)
|
|
{
|
|
var jsArray = new Array(length(a));
|
|
toJSArray_(jsArray, 0, a);
|
|
return jsArray;
|
|
}
|
|
|
|
function toJSArray_(jsArray, i, a)
|
|
{
|
|
for (var t = 0; t < a.table.length; t++)
|
|
{
|
|
if (a.height === 0)
|
|
{
|
|
jsArray[i + t] = a.table[t];
|
|
}
|
|
else
|
|
{
|
|
var inc = t === 0 ? 0 : a.lengths[t - 1];
|
|
toJSArray_(jsArray, i + inc, a.table[t]);
|
|
}
|
|
}
|
|
}
|
|
|
|
function fromJSArray(jsArray)
|
|
{
|
|
if (jsArray.length === 0)
|
|
{
|
|
return empty;
|
|
}
|
|
var h = Math.floor(Math.log(jsArray.length) / Math.log(M));
|
|
return fromJSArray_(jsArray, h, 0, jsArray.length);
|
|
}
|
|
|
|
function fromJSArray_(jsArray, h, from, to)
|
|
{
|
|
if (h === 0)
|
|
{
|
|
return {
|
|
ctor: '_Array',
|
|
height: 0,
|
|
table: jsArray.slice(from, to)
|
|
};
|
|
}
|
|
|
|
var step = Math.pow(M, h);
|
|
var table = new Array(Math.ceil((to - from) / step));
|
|
var lengths = new Array(table.length);
|
|
for (var i = 0; i < table.length; i++)
|
|
{
|
|
table[i] = fromJSArray_(jsArray, h - 1, from + (i * step), Math.min(from + ((i + 1) * step), to));
|
|
lengths[i] = length(table[i]) + (i > 0 ? lengths[i - 1] : 0);
|
|
}
|
|
return {
|
|
ctor: '_Array',
|
|
height: h,
|
|
table: table,
|
|
lengths: lengths
|
|
};
|
|
}
|
|
|
|
return {
|
|
empty: empty,
|
|
fromList: fromList,
|
|
toList: toList,
|
|
initialize: F2(initialize),
|
|
append: F2(append),
|
|
push: F2(push),
|
|
slice: F3(slice),
|
|
get: F2(get),
|
|
set: F3(set),
|
|
map: F2(map),
|
|
indexedMap: F2(indexedMap),
|
|
foldl: F3(foldl),
|
|
foldr: F3(foldr),
|
|
length: length,
|
|
|
|
toJSArray: toJSArray,
|
|
fromJSArray: fromJSArray
|
|
};
|
|
|
|
}();
|
|
var _elm_lang$core$Array$append = _elm_lang$core$Native_Array.append;
|
|
var _elm_lang$core$Array$length = _elm_lang$core$Native_Array.length;
|
|
var _elm_lang$core$Array$isEmpty = function (array) {
|
|
return _elm_lang$core$Native_Utils.eq(
|
|
_elm_lang$core$Array$length(array),
|
|
0);
|
|
};
|
|
var _elm_lang$core$Array$slice = _elm_lang$core$Native_Array.slice;
|
|
var _elm_lang$core$Array$set = _elm_lang$core$Native_Array.set;
|
|
var _elm_lang$core$Array$get = F2(
|
|
function (i, array) {
|
|
return ((_elm_lang$core$Native_Utils.cmp(0, i) < 1) && (_elm_lang$core$Native_Utils.cmp(
|
|
i,
|
|
_elm_lang$core$Native_Array.length(array)) < 0)) ? _elm_lang$core$Maybe$Just(
|
|
A2(_elm_lang$core$Native_Array.get, i, array)) : _elm_lang$core$Maybe$Nothing;
|
|
});
|
|
var _elm_lang$core$Array$push = _elm_lang$core$Native_Array.push;
|
|
var _elm_lang$core$Array$empty = _elm_lang$core$Native_Array.empty;
|
|
var _elm_lang$core$Array$filter = F2(
|
|
function (isOkay, arr) {
|
|
var update = F2(
|
|
function (x, xs) {
|
|
return isOkay(x) ? A2(_elm_lang$core$Native_Array.push, x, xs) : xs;
|
|
});
|
|
return A3(_elm_lang$core$Native_Array.foldl, update, _elm_lang$core$Native_Array.empty, arr);
|
|
});
|
|
var _elm_lang$core$Array$foldr = _elm_lang$core$Native_Array.foldr;
|
|
var _elm_lang$core$Array$foldl = _elm_lang$core$Native_Array.foldl;
|
|
var _elm_lang$core$Array$indexedMap = _elm_lang$core$Native_Array.indexedMap;
|
|
var _elm_lang$core$Array$map = _elm_lang$core$Native_Array.map;
|
|
var _elm_lang$core$Array$toIndexedList = function (array) {
|
|
return A3(
|
|
_elm_lang$core$List$map2,
|
|
F2(
|
|
function (v0, v1) {
|
|
return {ctor: '_Tuple2', _0: v0, _1: v1};
|
|
}),
|
|
_elm_lang$core$Native_List.range(
|
|
0,
|
|
_elm_lang$core$Native_Array.length(array) - 1),
|
|
_elm_lang$core$Native_Array.toList(array));
|
|
};
|
|
var _elm_lang$core$Array$toList = _elm_lang$core$Native_Array.toList;
|
|
var _elm_lang$core$Array$fromList = _elm_lang$core$Native_Array.fromList;
|
|
var _elm_lang$core$Array$initialize = _elm_lang$core$Native_Array.initialize;
|
|
var _elm_lang$core$Array$repeat = F2(
|
|
function (n, e) {
|
|
return A2(
|
|
_elm_lang$core$Array$initialize,
|
|
n,
|
|
_elm_lang$core$Basics$always(e));
|
|
});
|
|
var _elm_lang$core$Array$Array = {ctor: 'Array'};
|
|
|
|
//import Maybe, Native.List, Native.Utils, Result //
|
|
|
|
var _elm_lang$core$Native_String = function() {
|
|
|
|
function isEmpty(str)
|
|
{
|
|
return str.length === 0;
|
|
}
|
|
function cons(chr, str)
|
|
{
|
|
return chr + str;
|
|
}
|
|
function uncons(str)
|
|
{
|
|
var hd = str[0];
|
|
if (hd)
|
|
{
|
|
return _elm_lang$core$Maybe$Just(_elm_lang$core$Native_Utils.Tuple2(_elm_lang$core$Native_Utils.chr(hd), str.slice(1)));
|
|
}
|
|
return _elm_lang$core$Maybe$Nothing;
|
|
}
|
|
function append(a, b)
|
|
{
|
|
return a + b;
|
|
}
|
|
function concat(strs)
|
|
{
|
|
return _elm_lang$core$Native_List.toArray(strs).join('');
|
|
}
|
|
function length(str)
|
|
{
|
|
return str.length;
|
|
}
|
|
function map(f, str)
|
|
{
|
|
var out = str.split('');
|
|
for (var i = out.length; i--; )
|
|
{
|
|
out[i] = f(_elm_lang$core$Native_Utils.chr(out[i]));
|
|
}
|
|
return out.join('');
|
|
}
|
|
function filter(pred, str)
|
|
{
|
|
return str.split('').map(_elm_lang$core$Native_Utils.chr).filter(pred).join('');
|
|
}
|
|
function reverse(str)
|
|
{
|
|
return str.split('').reverse().join('');
|
|
}
|
|
function foldl(f, b, str)
|
|
{
|
|
var len = str.length;
|
|
for (var i = 0; i < len; ++i)
|
|
{
|
|
b = A2(f, _elm_lang$core$Native_Utils.chr(str[i]), b);
|
|
}
|
|
return b;
|
|
}
|
|
function foldr(f, b, str)
|
|
{
|
|
for (var i = str.length; i--; )
|
|
{
|
|
b = A2(f, _elm_lang$core$Native_Utils.chr(str[i]), b);
|
|
}
|
|
return b;
|
|
}
|
|
function split(sep, str)
|
|
{
|
|
return _elm_lang$core$Native_List.fromArray(str.split(sep));
|
|
}
|
|
function join(sep, strs)
|
|
{
|
|
return _elm_lang$core$Native_List.toArray(strs).join(sep);
|
|
}
|
|
function repeat(n, str)
|
|
{
|
|
var result = '';
|
|
while (n > 0)
|
|
{
|
|
if (n & 1)
|
|
{
|
|
result += str;
|
|
}
|
|
n >>= 1, str += str;
|
|
}
|
|
return result;
|
|
}
|
|
function slice(start, end, str)
|
|
{
|
|
return str.slice(start, end);
|
|
}
|
|
function left(n, str)
|
|
{
|
|
return n < 1 ? '' : str.slice(0, n);
|
|
}
|
|
function right(n, str)
|
|
{
|
|
return n < 1 ? '' : str.slice(-n);
|
|
}
|
|
function dropLeft(n, str)
|
|
{
|
|
return n < 1 ? str : str.slice(n);
|
|
}
|
|
function dropRight(n, str)
|
|
{
|
|
return n < 1 ? str : str.slice(0, -n);
|
|
}
|
|
function pad(n, chr, str)
|
|
{
|
|
var half = (n - str.length) / 2;
|
|
return repeat(Math.ceil(half), chr) + str + repeat(half | 0, chr);
|
|
}
|
|
function padRight(n, chr, str)
|
|
{
|
|
return str + repeat(n - str.length, chr);
|
|
}
|
|
function padLeft(n, chr, str)
|
|
{
|
|
return repeat(n - str.length, chr) + str;
|
|
}
|
|
|
|
function trim(str)
|
|
{
|
|
return str.trim();
|
|
}
|
|
function trimLeft(str)
|
|
{
|
|
return str.replace(/^\s+/, '');
|
|
}
|
|
function trimRight(str)
|
|
{
|
|
return str.replace(/\s+$/, '');
|
|
}
|
|
|
|
function words(str)
|
|
{
|
|
return _elm_lang$core$Native_List.fromArray(str.trim().split(/\s+/g));
|
|
}
|
|
function lines(str)
|
|
{
|
|
return _elm_lang$core$Native_List.fromArray(str.split(/\r\n|\r|\n/g));
|
|
}
|
|
|
|
function toUpper(str)
|
|
{
|
|
return str.toUpperCase();
|
|
}
|
|
function toLower(str)
|
|
{
|
|
return str.toLowerCase();
|
|
}
|
|
|
|
function any(pred, str)
|
|
{
|
|
for (var i = str.length; i--; )
|
|
{
|
|
if (pred(_elm_lang$core$Native_Utils.chr(str[i])))
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function all(pred, str)
|
|
{
|
|
for (var i = str.length; i--; )
|
|
{
|
|
if (!pred(_elm_lang$core$Native_Utils.chr(str[i])))
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function contains(sub, str)
|
|
{
|
|
return str.indexOf(sub) > -1;
|
|
}
|
|
function startsWith(sub, str)
|
|
{
|
|
return str.indexOf(sub) === 0;
|
|
}
|
|
function endsWith(sub, str)
|
|
{
|
|
return str.length >= sub.length &&
|
|
str.lastIndexOf(sub) === str.length - sub.length;
|
|
}
|
|
function indexes(sub, str)
|
|
{
|
|
var subLen = sub.length;
|
|
var i = 0;
|
|
var is = [];
|
|
while ((i = str.indexOf(sub, i)) > -1)
|
|
{
|
|
is.push(i);
|
|
i = i + subLen;
|
|
}
|
|
return _elm_lang$core$Native_List.fromArray(is);
|
|
}
|
|
|
|
function toInt(s)
|
|
{
|
|
var len = s.length;
|
|
if (len === 0)
|
|
{
|
|
return _elm_lang$core$Result$Err("could not convert string '" + s + "' to an Int" );
|
|
}
|
|
var start = 0;
|
|
if (s[0] === '-')
|
|
{
|
|
if (len === 1)
|
|
{
|
|
return _elm_lang$core$Result$Err("could not convert string '" + s + "' to an Int" );
|
|
}
|
|
start = 1;
|
|
}
|
|
for (var i = start; i < len; ++i)
|
|
{
|
|
var c = s[i];
|
|
if (c < '0' || '9' < c)
|
|
{
|
|
return _elm_lang$core$Result$Err("could not convert string '" + s + "' to an Int" );
|
|
}
|
|
}
|
|
return _elm_lang$core$Result$Ok(parseInt(s, 10));
|
|
}
|
|
|
|
function toFloat(s)
|
|
{
|
|
var len = s.length;
|
|
if (len === 0)
|
|
{
|
|
return _elm_lang$core$Result$Err("could not convert string '" + s + "' to a Float" );
|
|
}
|
|
var start = 0;
|
|
if (s[0] === '-')
|
|
{
|
|
if (len === 1)
|
|
{
|
|
return _elm_lang$core$Result$Err("could not convert string '" + s + "' to a Float" );
|
|
}
|
|
start = 1;
|
|
}
|
|
var dotCount = 0;
|
|
for (var i = start; i < len; ++i)
|
|
{
|
|
var c = s[i];
|
|
if ('0' <= c && c <= '9')
|
|
{
|
|
continue;
|
|
}
|
|
if (c === '.')
|
|
{
|
|
dotCount += 1;
|
|
if (dotCount <= 1)
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
return _elm_lang$core$Result$Err("could not convert string '" + s + "' to a Float" );
|
|
}
|
|
return _elm_lang$core$Result$Ok(parseFloat(s));
|
|
}
|
|
|
|
function toList(str)
|
|
{
|
|
return _elm_lang$core$Native_List.fromArray(str.split('').map(_elm_lang$core$Native_Utils.chr));
|
|
}
|
|
function fromList(chars)
|
|
{
|
|
return _elm_lang$core$Native_List.toArray(chars).join('');
|
|
}
|
|
|
|
return {
|
|
isEmpty: isEmpty,
|
|
cons: F2(cons),
|
|
uncons: uncons,
|
|
append: F2(append),
|
|
concat: concat,
|
|
length: length,
|
|
map: F2(map),
|
|
filter: F2(filter),
|
|
reverse: reverse,
|
|
foldl: F3(foldl),
|
|
foldr: F3(foldr),
|
|
|
|
split: F2(split),
|
|
join: F2(join),
|
|
repeat: F2(repeat),
|
|
|
|
slice: F3(slice),
|
|
left: F2(left),
|
|
right: F2(right),
|
|
dropLeft: F2(dropLeft),
|
|
dropRight: F2(dropRight),
|
|
|
|
pad: F3(pad),
|
|
padLeft: F3(padLeft),
|
|
padRight: F3(padRight),
|
|
|
|
trim: trim,
|
|
trimLeft: trimLeft,
|
|
trimRight: trimRight,
|
|
|
|
words: words,
|
|
lines: lines,
|
|
|
|
toUpper: toUpper,
|
|
toLower: toLower,
|
|
|
|
any: F2(any),
|
|
all: F2(all),
|
|
|
|
contains: F2(contains),
|
|
startsWith: F2(startsWith),
|
|
endsWith: F2(endsWith),
|
|
indexes: F2(indexes),
|
|
|
|
toInt: toInt,
|
|
toFloat: toFloat,
|
|
toList: toList,
|
|
fromList: fromList
|
|
};
|
|
|
|
}();
|
|
//import Native.Utils //
|
|
|
|
var _elm_lang$core$Native_Char = function() {
|
|
|
|
return {
|
|
fromCode: function(c) { return _elm_lang$core$Native_Utils.chr(String.fromCharCode(c)); },
|
|
toCode: function(c) { return c.charCodeAt(0); },
|
|
toUpper: function(c) { return _elm_lang$core$Native_Utils.chr(c.toUpperCase()); },
|
|
toLower: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLowerCase()); },
|
|
toLocaleUpper: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLocaleUpperCase()); },
|
|
toLocaleLower: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLocaleLowerCase()); }
|
|
};
|
|
|
|
}();
|
|
var _elm_lang$core$Char$fromCode = _elm_lang$core$Native_Char.fromCode;
|
|
var _elm_lang$core$Char$toCode = _elm_lang$core$Native_Char.toCode;
|
|
var _elm_lang$core$Char$toLocaleLower = _elm_lang$core$Native_Char.toLocaleLower;
|
|
var _elm_lang$core$Char$toLocaleUpper = _elm_lang$core$Native_Char.toLocaleUpper;
|
|
var _elm_lang$core$Char$toLower = _elm_lang$core$Native_Char.toLower;
|
|
var _elm_lang$core$Char$toUpper = _elm_lang$core$Native_Char.toUpper;
|
|
var _elm_lang$core$Char$isBetween = F3(
|
|
function (low, high, $char) {
|
|
var code = _elm_lang$core$Char$toCode($char);
|
|
return (_elm_lang$core$Native_Utils.cmp(
|
|
code,
|
|
_elm_lang$core$Char$toCode(low)) > -1) && (_elm_lang$core$Native_Utils.cmp(
|
|
code,
|
|
_elm_lang$core$Char$toCode(high)) < 1);
|
|
});
|
|
var _elm_lang$core$Char$isUpper = A2(
|
|
_elm_lang$core$Char$isBetween,
|
|
_elm_lang$core$Native_Utils.chr('A'),
|
|
_elm_lang$core$Native_Utils.chr('Z'));
|
|
var _elm_lang$core$Char$isLower = A2(
|
|
_elm_lang$core$Char$isBetween,
|
|
_elm_lang$core$Native_Utils.chr('a'),
|
|
_elm_lang$core$Native_Utils.chr('z'));
|
|
var _elm_lang$core$Char$isDigit = A2(
|
|
_elm_lang$core$Char$isBetween,
|
|
_elm_lang$core$Native_Utils.chr('0'),
|
|
_elm_lang$core$Native_Utils.chr('9'));
|
|
var _elm_lang$core$Char$isOctDigit = A2(
|
|
_elm_lang$core$Char$isBetween,
|
|
_elm_lang$core$Native_Utils.chr('0'),
|
|
_elm_lang$core$Native_Utils.chr('7'));
|
|
var _elm_lang$core$Char$isHexDigit = function ($char) {
|
|
return _elm_lang$core$Char$isDigit($char) || (A3(
|
|
_elm_lang$core$Char$isBetween,
|
|
_elm_lang$core$Native_Utils.chr('a'),
|
|
_elm_lang$core$Native_Utils.chr('f'),
|
|
$char) || A3(
|
|
_elm_lang$core$Char$isBetween,
|
|
_elm_lang$core$Native_Utils.chr('A'),
|
|
_elm_lang$core$Native_Utils.chr('F'),
|
|
$char));
|
|
};
|
|
|
|
var _elm_lang$core$String$fromList = _elm_lang$core$Native_String.fromList;
|
|
var _elm_lang$core$String$toList = _elm_lang$core$Native_String.toList;
|
|
var _elm_lang$core$String$toFloat = _elm_lang$core$Native_String.toFloat;
|
|
var _elm_lang$core$String$toInt = _elm_lang$core$Native_String.toInt;
|
|
var _elm_lang$core$String$indices = _elm_lang$core$Native_String.indexes;
|
|
var _elm_lang$core$String$indexes = _elm_lang$core$Native_String.indexes;
|
|
var _elm_lang$core$String$endsWith = _elm_lang$core$Native_String.endsWith;
|
|
var _elm_lang$core$String$startsWith = _elm_lang$core$Native_String.startsWith;
|
|
var _elm_lang$core$String$contains = _elm_lang$core$Native_String.contains;
|
|
var _elm_lang$core$String$all = _elm_lang$core$Native_String.all;
|
|
var _elm_lang$core$String$any = _elm_lang$core$Native_String.any;
|
|
var _elm_lang$core$String$toLower = _elm_lang$core$Native_String.toLower;
|
|
var _elm_lang$core$String$toUpper = _elm_lang$core$Native_String.toUpper;
|
|
var _elm_lang$core$String$lines = _elm_lang$core$Native_String.lines;
|
|
var _elm_lang$core$String$words = _elm_lang$core$Native_String.words;
|
|
var _elm_lang$core$String$trimRight = _elm_lang$core$Native_String.trimRight;
|
|
var _elm_lang$core$String$trimLeft = _elm_lang$core$Native_String.trimLeft;
|
|
var _elm_lang$core$String$trim = _elm_lang$core$Native_String.trim;
|
|
var _elm_lang$core$String$padRight = _elm_lang$core$Native_String.padRight;
|
|
var _elm_lang$core$String$padLeft = _elm_lang$core$Native_String.padLeft;
|
|
var _elm_lang$core$String$pad = _elm_lang$core$Native_String.pad;
|
|
var _elm_lang$core$String$dropRight = _elm_lang$core$Native_String.dropRight;
|
|
var _elm_lang$core$String$dropLeft = _elm_lang$core$Native_String.dropLeft;
|
|
var _elm_lang$core$String$right = _elm_lang$core$Native_String.right;
|
|
var _elm_lang$core$String$left = _elm_lang$core$Native_String.left;
|
|
var _elm_lang$core$String$slice = _elm_lang$core$Native_String.slice;
|
|
var _elm_lang$core$String$repeat = _elm_lang$core$Native_String.repeat;
|
|
var _elm_lang$core$String$join = _elm_lang$core$Native_String.join;
|
|
var _elm_lang$core$String$split = _elm_lang$core$Native_String.split;
|
|
var _elm_lang$core$String$foldr = _elm_lang$core$Native_String.foldr;
|
|
var _elm_lang$core$String$foldl = _elm_lang$core$Native_String.foldl;
|
|
var _elm_lang$core$String$reverse = _elm_lang$core$Native_String.reverse;
|
|
var _elm_lang$core$String$filter = _elm_lang$core$Native_String.filter;
|
|
var _elm_lang$core$String$map = _elm_lang$core$Native_String.map;
|
|
var _elm_lang$core$String$length = _elm_lang$core$Native_String.length;
|
|
var _elm_lang$core$String$concat = _elm_lang$core$Native_String.concat;
|
|
var _elm_lang$core$String$append = _elm_lang$core$Native_String.append;
|
|
var _elm_lang$core$String$uncons = _elm_lang$core$Native_String.uncons;
|
|
var _elm_lang$core$String$cons = _elm_lang$core$Native_String.cons;
|
|
var _elm_lang$core$String$fromChar = function ($char) {
|
|
return A2(_elm_lang$core$String$cons, $char, '');
|
|
};
|
|
var _elm_lang$core$String$isEmpty = _elm_lang$core$Native_String.isEmpty;
|
|
|
|
var _elm_lang$core$Dict$foldr = F3(
|
|
function (f, acc, t) {
|
|
foldr:
|
|
while (true) {
|
|
var _p0 = t;
|
|
if (_p0.ctor === 'RBEmpty_elm_builtin') {
|
|
return acc;
|
|
} else {
|
|
var _v1 = f,
|
|
_v2 = A3(
|
|
f,
|
|
_p0._1,
|
|
_p0._2,
|
|
A3(_elm_lang$core$Dict$foldr, f, acc, _p0._4)),
|
|
_v3 = _p0._3;
|
|
f = _v1;
|
|
acc = _v2;
|
|
t = _v3;
|
|
continue foldr;
|
|
}
|
|
}
|
|
});
|
|
var _elm_lang$core$Dict$keys = function (dict) {
|
|
return A3(
|
|
_elm_lang$core$Dict$foldr,
|
|
F3(
|
|
function (key, value, keyList) {
|
|
return A2(_elm_lang$core$List_ops['::'], key, keyList);
|
|
}),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
dict);
|
|
};
|
|
var _elm_lang$core$Dict$values = function (dict) {
|
|
return A3(
|
|
_elm_lang$core$Dict$foldr,
|
|
F3(
|
|
function (key, value, valueList) {
|
|
return A2(_elm_lang$core$List_ops['::'], value, valueList);
|
|
}),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
dict);
|
|
};
|
|
var _elm_lang$core$Dict$toList = function (dict) {
|
|
return A3(
|
|
_elm_lang$core$Dict$foldr,
|
|
F3(
|
|
function (key, value, list) {
|
|
return A2(
|
|
_elm_lang$core$List_ops['::'],
|
|
{ctor: '_Tuple2', _0: key, _1: value},
|
|
list);
|
|
}),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
dict);
|
|
};
|
|
var _elm_lang$core$Dict$foldl = F3(
|
|
function (f, acc, dict) {
|
|
foldl:
|
|
while (true) {
|
|
var _p1 = dict;
|
|
if (_p1.ctor === 'RBEmpty_elm_builtin') {
|
|
return acc;
|
|
} else {
|
|
var _v5 = f,
|
|
_v6 = A3(
|
|
f,
|
|
_p1._1,
|
|
_p1._2,
|
|
A3(_elm_lang$core$Dict$foldl, f, acc, _p1._3)),
|
|
_v7 = _p1._4;
|
|
f = _v5;
|
|
acc = _v6;
|
|
dict = _v7;
|
|
continue foldl;
|
|
}
|
|
}
|
|
});
|
|
var _elm_lang$core$Dict$merge = F6(
|
|
function (leftStep, bothStep, rightStep, leftDict, rightDict, initialResult) {
|
|
var stepState = F3(
|
|
function (rKey, rValue, _p2) {
|
|
var _p3 = _p2;
|
|
var _p9 = _p3._1;
|
|
var _p8 = _p3._0;
|
|
var _p4 = _p8;
|
|
if (_p4.ctor === '[]') {
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _p8,
|
|
_1: A3(rightStep, rKey, rValue, _p9)
|
|
};
|
|
} else {
|
|
var _p7 = _p4._1;
|
|
var _p6 = _p4._0._1;
|
|
var _p5 = _p4._0._0;
|
|
return (_elm_lang$core$Native_Utils.cmp(_p5, rKey) < 0) ? {
|
|
ctor: '_Tuple2',
|
|
_0: _p7,
|
|
_1: A3(leftStep, _p5, _p6, _p9)
|
|
} : ((_elm_lang$core$Native_Utils.cmp(_p5, rKey) > 0) ? {
|
|
ctor: '_Tuple2',
|
|
_0: _p8,
|
|
_1: A3(rightStep, rKey, rValue, _p9)
|
|
} : {
|
|
ctor: '_Tuple2',
|
|
_0: _p7,
|
|
_1: A4(bothStep, _p5, _p6, rValue, _p9)
|
|
});
|
|
}
|
|
});
|
|
var _p10 = A3(
|
|
_elm_lang$core$Dict$foldl,
|
|
stepState,
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Dict$toList(leftDict),
|
|
_1: initialResult
|
|
},
|
|
rightDict);
|
|
var leftovers = _p10._0;
|
|
var intermediateResult = _p10._1;
|
|
return A3(
|
|
_elm_lang$core$List$foldl,
|
|
F2(
|
|
function (_p11, result) {
|
|
var _p12 = _p11;
|
|
return A3(leftStep, _p12._0, _p12._1, result);
|
|
}),
|
|
intermediateResult,
|
|
leftovers);
|
|
});
|
|
var _elm_lang$core$Dict$reportRemBug = F4(
|
|
function (msg, c, lgot, rgot) {
|
|
return _elm_lang$core$Native_Debug.crash(
|
|
_elm_lang$core$String$concat(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
'Internal red-black tree invariant violated, expected ',
|
|
msg,
|
|
' and got ',
|
|
_elm_lang$core$Basics$toString(c),
|
|
'/',
|
|
lgot,
|
|
'/',
|
|
rgot,
|
|
'\nPlease report this bug to <https://github.com/elm-lang/core/issues>'
|
|
])));
|
|
});
|
|
var _elm_lang$core$Dict$isBBlack = function (dict) {
|
|
var _p13 = dict;
|
|
_v11_2:
|
|
do {
|
|
if (_p13.ctor === 'RBNode_elm_builtin') {
|
|
if (_p13._0.ctor === 'BBlack') {
|
|
return true;
|
|
} else {
|
|
break _v11_2;
|
|
}
|
|
} else {
|
|
if (_p13._0.ctor === 'LBBlack') {
|
|
return true;
|
|
} else {
|
|
break _v11_2;
|
|
}
|
|
}
|
|
} while(false);
|
|
return false;
|
|
};
|
|
var _elm_lang$core$Dict$sizeHelp = F2(
|
|
function (n, dict) {
|
|
sizeHelp:
|
|
while (true) {
|
|
var _p14 = dict;
|
|
if (_p14.ctor === 'RBEmpty_elm_builtin') {
|
|
return n;
|
|
} else {
|
|
var _v13 = A2(_elm_lang$core$Dict$sizeHelp, n + 1, _p14._4),
|
|
_v14 = _p14._3;
|
|
n = _v13;
|
|
dict = _v14;
|
|
continue sizeHelp;
|
|
}
|
|
}
|
|
});
|
|
var _elm_lang$core$Dict$size = function (dict) {
|
|
return A2(_elm_lang$core$Dict$sizeHelp, 0, dict);
|
|
};
|
|
var _elm_lang$core$Dict$get = F2(
|
|
function (targetKey, dict) {
|
|
get:
|
|
while (true) {
|
|
var _p15 = dict;
|
|
if (_p15.ctor === 'RBEmpty_elm_builtin') {
|
|
return _elm_lang$core$Maybe$Nothing;
|
|
} else {
|
|
var _p16 = A2(_elm_lang$core$Basics$compare, targetKey, _p15._1);
|
|
switch (_p16.ctor) {
|
|
case 'LT':
|
|
var _v17 = targetKey,
|
|
_v18 = _p15._3;
|
|
targetKey = _v17;
|
|
dict = _v18;
|
|
continue get;
|
|
case 'EQ':
|
|
return _elm_lang$core$Maybe$Just(_p15._2);
|
|
default:
|
|
var _v19 = targetKey,
|
|
_v20 = _p15._4;
|
|
targetKey = _v19;
|
|
dict = _v20;
|
|
continue get;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
var _elm_lang$core$Dict$member = F2(
|
|
function (key, dict) {
|
|
var _p17 = A2(_elm_lang$core$Dict$get, key, dict);
|
|
if (_p17.ctor === 'Just') {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
});
|
|
var _elm_lang$core$Dict$maxWithDefault = F3(
|
|
function (k, v, r) {
|
|
maxWithDefault:
|
|
while (true) {
|
|
var _p18 = r;
|
|
if (_p18.ctor === 'RBEmpty_elm_builtin') {
|
|
return {ctor: '_Tuple2', _0: k, _1: v};
|
|
} else {
|
|
var _v23 = _p18._1,
|
|
_v24 = _p18._2,
|
|
_v25 = _p18._4;
|
|
k = _v23;
|
|
v = _v24;
|
|
r = _v25;
|
|
continue maxWithDefault;
|
|
}
|
|
}
|
|
});
|
|
var _elm_lang$core$Dict$NBlack = {ctor: 'NBlack'};
|
|
var _elm_lang$core$Dict$BBlack = {ctor: 'BBlack'};
|
|
var _elm_lang$core$Dict$Black = {ctor: 'Black'};
|
|
var _elm_lang$core$Dict$blackish = function (t) {
|
|
var _p19 = t;
|
|
if (_p19.ctor === 'RBNode_elm_builtin') {
|
|
var _p20 = _p19._0;
|
|
return _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$Black) || _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$BBlack);
|
|
} else {
|
|
return true;
|
|
}
|
|
};
|
|
var _elm_lang$core$Dict$Red = {ctor: 'Red'};
|
|
var _elm_lang$core$Dict$moreBlack = function (color) {
|
|
var _p21 = color;
|
|
switch (_p21.ctor) {
|
|
case 'Black':
|
|
return _elm_lang$core$Dict$BBlack;
|
|
case 'Red':
|
|
return _elm_lang$core$Dict$Black;
|
|
case 'NBlack':
|
|
return _elm_lang$core$Dict$Red;
|
|
default:
|
|
return _elm_lang$core$Native_Debug.crash('Can\'t make a double black node more black!');
|
|
}
|
|
};
|
|
var _elm_lang$core$Dict$lessBlack = function (color) {
|
|
var _p22 = color;
|
|
switch (_p22.ctor) {
|
|
case 'BBlack':
|
|
return _elm_lang$core$Dict$Black;
|
|
case 'Black':
|
|
return _elm_lang$core$Dict$Red;
|
|
case 'Red':
|
|
return _elm_lang$core$Dict$NBlack;
|
|
default:
|
|
return _elm_lang$core$Native_Debug.crash('Can\'t make a negative black node less black!');
|
|
}
|
|
};
|
|
var _elm_lang$core$Dict$LBBlack = {ctor: 'LBBlack'};
|
|
var _elm_lang$core$Dict$LBlack = {ctor: 'LBlack'};
|
|
var _elm_lang$core$Dict$RBEmpty_elm_builtin = function (a) {
|
|
return {ctor: 'RBEmpty_elm_builtin', _0: a};
|
|
};
|
|
var _elm_lang$core$Dict$empty = _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack);
|
|
var _elm_lang$core$Dict$isEmpty = function (dict) {
|
|
return _elm_lang$core$Native_Utils.eq(dict, _elm_lang$core$Dict$empty);
|
|
};
|
|
var _elm_lang$core$Dict$RBNode_elm_builtin = F5(
|
|
function (a, b, c, d, e) {
|
|
return {ctor: 'RBNode_elm_builtin', _0: a, _1: b, _2: c, _3: d, _4: e};
|
|
});
|
|
var _elm_lang$core$Dict$ensureBlackRoot = function (dict) {
|
|
var _p23 = dict;
|
|
if ((_p23.ctor === 'RBNode_elm_builtin') && (_p23._0.ctor === 'Red')) {
|
|
return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p23._1, _p23._2, _p23._3, _p23._4);
|
|
} else {
|
|
return dict;
|
|
}
|
|
};
|
|
var _elm_lang$core$Dict$lessBlackTree = function (dict) {
|
|
var _p24 = dict;
|
|
if (_p24.ctor === 'RBNode_elm_builtin') {
|
|
return A5(
|
|
_elm_lang$core$Dict$RBNode_elm_builtin,
|
|
_elm_lang$core$Dict$lessBlack(_p24._0),
|
|
_p24._1,
|
|
_p24._2,
|
|
_p24._3,
|
|
_p24._4);
|
|
} else {
|
|
return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack);
|
|
}
|
|
};
|
|
var _elm_lang$core$Dict$balancedTree = function (col) {
|
|
return function (xk) {
|
|
return function (xv) {
|
|
return function (yk) {
|
|
return function (yv) {
|
|
return function (zk) {
|
|
return function (zv) {
|
|
return function (a) {
|
|
return function (b) {
|
|
return function (c) {
|
|
return function (d) {
|
|
return A5(
|
|
_elm_lang$core$Dict$RBNode_elm_builtin,
|
|
_elm_lang$core$Dict$lessBlack(col),
|
|
yk,
|
|
yv,
|
|
A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, xk, xv, a, b),
|
|
A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, zk, zv, c, d));
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
var _elm_lang$core$Dict$blacken = function (t) {
|
|
var _p25 = t;
|
|
if (_p25.ctor === 'RBEmpty_elm_builtin') {
|
|
return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack);
|
|
} else {
|
|
return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p25._1, _p25._2, _p25._3, _p25._4);
|
|
}
|
|
};
|
|
var _elm_lang$core$Dict$redden = function (t) {
|
|
var _p26 = t;
|
|
if (_p26.ctor === 'RBEmpty_elm_builtin') {
|
|
return _elm_lang$core$Native_Debug.crash('can\'t make a Leaf red');
|
|
} else {
|
|
return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, _p26._1, _p26._2, _p26._3, _p26._4);
|
|
}
|
|
};
|
|
var _elm_lang$core$Dict$balanceHelp = function (tree) {
|
|
var _p27 = tree;
|
|
_v33_6:
|
|
do {
|
|
_v33_5:
|
|
do {
|
|
_v33_4:
|
|
do {
|
|
_v33_3:
|
|
do {
|
|
_v33_2:
|
|
do {
|
|
_v33_1:
|
|
do {
|
|
_v33_0:
|
|
do {
|
|
if (_p27.ctor === 'RBNode_elm_builtin') {
|
|
if (_p27._3.ctor === 'RBNode_elm_builtin') {
|
|
if (_p27._4.ctor === 'RBNode_elm_builtin') {
|
|
switch (_p27._3._0.ctor) {
|
|
case 'Red':
|
|
switch (_p27._4._0.ctor) {
|
|
case 'Red':
|
|
if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) {
|
|
break _v33_0;
|
|
} else {
|
|
if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) {
|
|
break _v33_1;
|
|
} else {
|
|
if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) {
|
|
break _v33_2;
|
|
} else {
|
|
if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) {
|
|
break _v33_3;
|
|
} else {
|
|
break _v33_6;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
case 'NBlack':
|
|
if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) {
|
|
break _v33_0;
|
|
} else {
|
|
if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) {
|
|
break _v33_1;
|
|
} else {
|
|
if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) {
|
|
break _v33_4;
|
|
} else {
|
|
break _v33_6;
|
|
}
|
|
}
|
|
}
|
|
default:
|
|
if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) {
|
|
break _v33_0;
|
|
} else {
|
|
if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) {
|
|
break _v33_1;
|
|
} else {
|
|
break _v33_6;
|
|
}
|
|
}
|
|
}
|
|
case 'NBlack':
|
|
switch (_p27._4._0.ctor) {
|
|
case 'Red':
|
|
if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) {
|
|
break _v33_2;
|
|
} else {
|
|
if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) {
|
|
break _v33_3;
|
|
} else {
|
|
if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) {
|
|
break _v33_5;
|
|
} else {
|
|
break _v33_6;
|
|
}
|
|
}
|
|
}
|
|
case 'NBlack':
|
|
if (_p27._0.ctor === 'BBlack') {
|
|
if ((((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) {
|
|
break _v33_4;
|
|
} else {
|
|
if ((((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) {
|
|
break _v33_5;
|
|
} else {
|
|
break _v33_6;
|
|
}
|
|
}
|
|
} else {
|
|
break _v33_6;
|
|
}
|
|
default:
|
|
if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) {
|
|
break _v33_5;
|
|
} else {
|
|
break _v33_6;
|
|
}
|
|
}
|
|
default:
|
|
switch (_p27._4._0.ctor) {
|
|
case 'Red':
|
|
if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) {
|
|
break _v33_2;
|
|
} else {
|
|
if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) {
|
|
break _v33_3;
|
|
} else {
|
|
break _v33_6;
|
|
}
|
|
}
|
|
case 'NBlack':
|
|
if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) {
|
|
break _v33_4;
|
|
} else {
|
|
break _v33_6;
|
|
}
|
|
default:
|
|
break _v33_6;
|
|
}
|
|
}
|
|
} else {
|
|
switch (_p27._3._0.ctor) {
|
|
case 'Red':
|
|
if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) {
|
|
break _v33_0;
|
|
} else {
|
|
if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) {
|
|
break _v33_1;
|
|
} else {
|
|
break _v33_6;
|
|
}
|
|
}
|
|
case 'NBlack':
|
|
if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) {
|
|
break _v33_5;
|
|
} else {
|
|
break _v33_6;
|
|
}
|
|
default:
|
|
break _v33_6;
|
|
}
|
|
}
|
|
} else {
|
|
if (_p27._4.ctor === 'RBNode_elm_builtin') {
|
|
switch (_p27._4._0.ctor) {
|
|
case 'Red':
|
|
if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) {
|
|
break _v33_2;
|
|
} else {
|
|
if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) {
|
|
break _v33_3;
|
|
} else {
|
|
break _v33_6;
|
|
}
|
|
}
|
|
case 'NBlack':
|
|
if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) {
|
|
break _v33_4;
|
|
} else {
|
|
break _v33_6;
|
|
}
|
|
default:
|
|
break _v33_6;
|
|
}
|
|
} else {
|
|
break _v33_6;
|
|
}
|
|
}
|
|
} else {
|
|
break _v33_6;
|
|
}
|
|
} while(false);
|
|
return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._3._1)(_p27._3._3._2)(_p27._3._1)(_p27._3._2)(_p27._1)(_p27._2)(_p27._3._3._3)(_p27._3._3._4)(_p27._3._4)(_p27._4);
|
|
} while(false);
|
|
return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._1)(_p27._3._2)(_p27._3._4._1)(_p27._3._4._2)(_p27._1)(_p27._2)(_p27._3._3)(_p27._3._4._3)(_p27._3._4._4)(_p27._4);
|
|
} while(false);
|
|
return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._3._1)(_p27._4._3._2)(_p27._4._1)(_p27._4._2)(_p27._3)(_p27._4._3._3)(_p27._4._3._4)(_p27._4._4);
|
|
} while(false);
|
|
return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._1)(_p27._4._2)(_p27._4._4._1)(_p27._4._4._2)(_p27._3)(_p27._4._3)(_p27._4._4._3)(_p27._4._4._4);
|
|
} while(false);
|
|
return A5(
|
|
_elm_lang$core$Dict$RBNode_elm_builtin,
|
|
_elm_lang$core$Dict$Black,
|
|
_p27._4._3._1,
|
|
_p27._4._3._2,
|
|
A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3, _p27._4._3._3),
|
|
A5(
|
|
_elm_lang$core$Dict$balance,
|
|
_elm_lang$core$Dict$Black,
|
|
_p27._4._1,
|
|
_p27._4._2,
|
|
_p27._4._3._4,
|
|
_elm_lang$core$Dict$redden(_p27._4._4)));
|
|
} while(false);
|
|
return A5(
|
|
_elm_lang$core$Dict$RBNode_elm_builtin,
|
|
_elm_lang$core$Dict$Black,
|
|
_p27._3._4._1,
|
|
_p27._3._4._2,
|
|
A5(
|
|
_elm_lang$core$Dict$balance,
|
|
_elm_lang$core$Dict$Black,
|
|
_p27._3._1,
|
|
_p27._3._2,
|
|
_elm_lang$core$Dict$redden(_p27._3._3),
|
|
_p27._3._4._3),
|
|
A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3._4._4, _p27._4));
|
|
} while(false);
|
|
return tree;
|
|
};
|
|
var _elm_lang$core$Dict$balance = F5(
|
|
function (c, k, v, l, r) {
|
|
var tree = A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r);
|
|
return _elm_lang$core$Dict$blackish(tree) ? _elm_lang$core$Dict$balanceHelp(tree) : tree;
|
|
});
|
|
var _elm_lang$core$Dict$bubble = F5(
|
|
function (c, k, v, l, r) {
|
|
return (_elm_lang$core$Dict$isBBlack(l) || _elm_lang$core$Dict$isBBlack(r)) ? A5(
|
|
_elm_lang$core$Dict$balance,
|
|
_elm_lang$core$Dict$moreBlack(c),
|
|
k,
|
|
v,
|
|
_elm_lang$core$Dict$lessBlackTree(l),
|
|
_elm_lang$core$Dict$lessBlackTree(r)) : A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r);
|
|
});
|
|
var _elm_lang$core$Dict$removeMax = F5(
|
|
function (c, k, v, l, r) {
|
|
var _p28 = r;
|
|
if (_p28.ctor === 'RBEmpty_elm_builtin') {
|
|
return A3(_elm_lang$core$Dict$rem, c, l, r);
|
|
} else {
|
|
return A5(
|
|
_elm_lang$core$Dict$bubble,
|
|
c,
|
|
k,
|
|
v,
|
|
l,
|
|
A5(_elm_lang$core$Dict$removeMax, _p28._0, _p28._1, _p28._2, _p28._3, _p28._4));
|
|
}
|
|
});
|
|
var _elm_lang$core$Dict$rem = F3(
|
|
function (c, l, r) {
|
|
var _p29 = {ctor: '_Tuple2', _0: l, _1: r};
|
|
if (_p29._0.ctor === 'RBEmpty_elm_builtin') {
|
|
if (_p29._1.ctor === 'RBEmpty_elm_builtin') {
|
|
var _p30 = c;
|
|
switch (_p30.ctor) {
|
|
case 'Red':
|
|
return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack);
|
|
case 'Black':
|
|
return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBBlack);
|
|
default:
|
|
return _elm_lang$core$Native_Debug.crash('cannot have bblack or nblack nodes at this point');
|
|
}
|
|
} else {
|
|
var _p33 = _p29._1._0;
|
|
var _p32 = _p29._0._0;
|
|
var _p31 = {ctor: '_Tuple3', _0: c, _1: _p32, _2: _p33};
|
|
if ((((_p31.ctor === '_Tuple3') && (_p31._0.ctor === 'Black')) && (_p31._1.ctor === 'LBlack')) && (_p31._2.ctor === 'Red')) {
|
|
return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._1._1, _p29._1._2, _p29._1._3, _p29._1._4);
|
|
} else {
|
|
return A4(
|
|
_elm_lang$core$Dict$reportRemBug,
|
|
'Black/LBlack/Red',
|
|
c,
|
|
_elm_lang$core$Basics$toString(_p32),
|
|
_elm_lang$core$Basics$toString(_p33));
|
|
}
|
|
}
|
|
} else {
|
|
if (_p29._1.ctor === 'RBEmpty_elm_builtin') {
|
|
var _p36 = _p29._1._0;
|
|
var _p35 = _p29._0._0;
|
|
var _p34 = {ctor: '_Tuple3', _0: c, _1: _p35, _2: _p36};
|
|
if ((((_p34.ctor === '_Tuple3') && (_p34._0.ctor === 'Black')) && (_p34._1.ctor === 'Red')) && (_p34._2.ctor === 'LBlack')) {
|
|
return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._0._1, _p29._0._2, _p29._0._3, _p29._0._4);
|
|
} else {
|
|
return A4(
|
|
_elm_lang$core$Dict$reportRemBug,
|
|
'Black/Red/LBlack',
|
|
c,
|
|
_elm_lang$core$Basics$toString(_p35),
|
|
_elm_lang$core$Basics$toString(_p36));
|
|
}
|
|
} else {
|
|
var _p40 = _p29._0._2;
|
|
var _p39 = _p29._0._4;
|
|
var _p38 = _p29._0._1;
|
|
var l$ = A5(_elm_lang$core$Dict$removeMax, _p29._0._0, _p38, _p40, _p29._0._3, _p39);
|
|
var _p37 = A3(_elm_lang$core$Dict$maxWithDefault, _p38, _p40, _p39);
|
|
var k = _p37._0;
|
|
var v = _p37._1;
|
|
return A5(_elm_lang$core$Dict$bubble, c, k, v, l$, r);
|
|
}
|
|
}
|
|
});
|
|
var _elm_lang$core$Dict$map = F2(
|
|
function (f, dict) {
|
|
var _p41 = dict;
|
|
if (_p41.ctor === 'RBEmpty_elm_builtin') {
|
|
return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack);
|
|
} else {
|
|
var _p42 = _p41._1;
|
|
return A5(
|
|
_elm_lang$core$Dict$RBNode_elm_builtin,
|
|
_p41._0,
|
|
_p42,
|
|
A2(f, _p42, _p41._2),
|
|
A2(_elm_lang$core$Dict$map, f, _p41._3),
|
|
A2(_elm_lang$core$Dict$map, f, _p41._4));
|
|
}
|
|
});
|
|
var _elm_lang$core$Dict$Same = {ctor: 'Same'};
|
|
var _elm_lang$core$Dict$Remove = {ctor: 'Remove'};
|
|
var _elm_lang$core$Dict$Insert = {ctor: 'Insert'};
|
|
var _elm_lang$core$Dict$update = F3(
|
|
function (k, alter, dict) {
|
|
var up = function (dict) {
|
|
var _p43 = dict;
|
|
if (_p43.ctor === 'RBEmpty_elm_builtin') {
|
|
var _p44 = alter(_elm_lang$core$Maybe$Nothing);
|
|
if (_p44.ctor === 'Nothing') {
|
|
return {ctor: '_Tuple2', _0: _elm_lang$core$Dict$Same, _1: _elm_lang$core$Dict$empty};
|
|
} else {
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Dict$Insert,
|
|
_1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, k, _p44._0, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty)
|
|
};
|
|
}
|
|
} else {
|
|
var _p55 = _p43._2;
|
|
var _p54 = _p43._4;
|
|
var _p53 = _p43._3;
|
|
var _p52 = _p43._1;
|
|
var _p51 = _p43._0;
|
|
var _p45 = A2(_elm_lang$core$Basics$compare, k, _p52);
|
|
switch (_p45.ctor) {
|
|
case 'EQ':
|
|
var _p46 = alter(
|
|
_elm_lang$core$Maybe$Just(_p55));
|
|
if (_p46.ctor === 'Nothing') {
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Dict$Remove,
|
|
_1: A3(_elm_lang$core$Dict$rem, _p51, _p53, _p54)
|
|
};
|
|
} else {
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Dict$Same,
|
|
_1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p46._0, _p53, _p54)
|
|
};
|
|
}
|
|
case 'LT':
|
|
var _p47 = up(_p53);
|
|
var flag = _p47._0;
|
|
var newLeft = _p47._1;
|
|
var _p48 = flag;
|
|
switch (_p48.ctor) {
|
|
case 'Same':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Dict$Same,
|
|
_1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, newLeft, _p54)
|
|
};
|
|
case 'Insert':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Dict$Insert,
|
|
_1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, newLeft, _p54)
|
|
};
|
|
default:
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Dict$Remove,
|
|
_1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, newLeft, _p54)
|
|
};
|
|
}
|
|
default:
|
|
var _p49 = up(_p54);
|
|
var flag = _p49._0;
|
|
var newRight = _p49._1;
|
|
var _p50 = flag;
|
|
switch (_p50.ctor) {
|
|
case 'Same':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Dict$Same,
|
|
_1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, _p53, newRight)
|
|
};
|
|
case 'Insert':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Dict$Insert,
|
|
_1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, _p53, newRight)
|
|
};
|
|
default:
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Dict$Remove,
|
|
_1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, _p53, newRight)
|
|
};
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var _p56 = up(dict);
|
|
var flag = _p56._0;
|
|
var updatedDict = _p56._1;
|
|
var _p57 = flag;
|
|
switch (_p57.ctor) {
|
|
case 'Same':
|
|
return updatedDict;
|
|
case 'Insert':
|
|
return _elm_lang$core$Dict$ensureBlackRoot(updatedDict);
|
|
default:
|
|
return _elm_lang$core$Dict$blacken(updatedDict);
|
|
}
|
|
});
|
|
var _elm_lang$core$Dict$insert = F3(
|
|
function (key, value, dict) {
|
|
return A3(
|
|
_elm_lang$core$Dict$update,
|
|
key,
|
|
_elm_lang$core$Basics$always(
|
|
_elm_lang$core$Maybe$Just(value)),
|
|
dict);
|
|
});
|
|
var _elm_lang$core$Dict$singleton = F2(
|
|
function (key, value) {
|
|
return A3(_elm_lang$core$Dict$insert, key, value, _elm_lang$core$Dict$empty);
|
|
});
|
|
var _elm_lang$core$Dict$union = F2(
|
|
function (t1, t2) {
|
|
return A3(_elm_lang$core$Dict$foldl, _elm_lang$core$Dict$insert, t2, t1);
|
|
});
|
|
var _elm_lang$core$Dict$filter = F2(
|
|
function (predicate, dictionary) {
|
|
var add = F3(
|
|
function (key, value, dict) {
|
|
return A2(predicate, key, value) ? A3(_elm_lang$core$Dict$insert, key, value, dict) : dict;
|
|
});
|
|
return A3(_elm_lang$core$Dict$foldl, add, _elm_lang$core$Dict$empty, dictionary);
|
|
});
|
|
var _elm_lang$core$Dict$intersect = F2(
|
|
function (t1, t2) {
|
|
return A2(
|
|
_elm_lang$core$Dict$filter,
|
|
F2(
|
|
function (k, _p58) {
|
|
return A2(_elm_lang$core$Dict$member, k, t2);
|
|
}),
|
|
t1);
|
|
});
|
|
var _elm_lang$core$Dict$partition = F2(
|
|
function (predicate, dict) {
|
|
var add = F3(
|
|
function (key, value, _p59) {
|
|
var _p60 = _p59;
|
|
var _p62 = _p60._1;
|
|
var _p61 = _p60._0;
|
|
return A2(predicate, key, value) ? {
|
|
ctor: '_Tuple2',
|
|
_0: A3(_elm_lang$core$Dict$insert, key, value, _p61),
|
|
_1: _p62
|
|
} : {
|
|
ctor: '_Tuple2',
|
|
_0: _p61,
|
|
_1: A3(_elm_lang$core$Dict$insert, key, value, _p62)
|
|
};
|
|
});
|
|
return A3(
|
|
_elm_lang$core$Dict$foldl,
|
|
add,
|
|
{ctor: '_Tuple2', _0: _elm_lang$core$Dict$empty, _1: _elm_lang$core$Dict$empty},
|
|
dict);
|
|
});
|
|
var _elm_lang$core$Dict$fromList = function (assocs) {
|
|
return A3(
|
|
_elm_lang$core$List$foldl,
|
|
F2(
|
|
function (_p63, dict) {
|
|
var _p64 = _p63;
|
|
return A3(_elm_lang$core$Dict$insert, _p64._0, _p64._1, dict);
|
|
}),
|
|
_elm_lang$core$Dict$empty,
|
|
assocs);
|
|
};
|
|
var _elm_lang$core$Dict$remove = F2(
|
|
function (key, dict) {
|
|
return A3(
|
|
_elm_lang$core$Dict$update,
|
|
key,
|
|
_elm_lang$core$Basics$always(_elm_lang$core$Maybe$Nothing),
|
|
dict);
|
|
});
|
|
var _elm_lang$core$Dict$diff = F2(
|
|
function (t1, t2) {
|
|
return A3(
|
|
_elm_lang$core$Dict$foldl,
|
|
F3(
|
|
function (k, v, t) {
|
|
return A2(_elm_lang$core$Dict$remove, k, t);
|
|
}),
|
|
t1,
|
|
t2);
|
|
});
|
|
|
|
//import Maybe, Native.Array, Native.List, Native.Utils, Result //
|
|
|
|
var _elm_lang$core$Native_Json = function() {
|
|
|
|
|
|
// CORE DECODERS
|
|
|
|
function succeed(msg)
|
|
{
|
|
return {
|
|
ctor: '<decoder>',
|
|
tag: 'succeed',
|
|
msg: msg
|
|
};
|
|
}
|
|
|
|
function fail(msg)
|
|
{
|
|
return {
|
|
ctor: '<decoder>',
|
|
tag: 'fail',
|
|
msg: msg
|
|
};
|
|
}
|
|
|
|
function decodePrimitive(tag)
|
|
{
|
|
return {
|
|
ctor: '<decoder>',
|
|
tag: tag
|
|
};
|
|
}
|
|
|
|
function decodeContainer(tag, decoder)
|
|
{
|
|
return {
|
|
ctor: '<decoder>',
|
|
tag: tag,
|
|
decoder: decoder
|
|
};
|
|
}
|
|
|
|
function decodeNull(value)
|
|
{
|
|
return {
|
|
ctor: '<decoder>',
|
|
tag: 'null',
|
|
value: value
|
|
};
|
|
}
|
|
|
|
function decodeField(field, decoder)
|
|
{
|
|
return {
|
|
ctor: '<decoder>',
|
|
tag: 'field',
|
|
field: field,
|
|
decoder: decoder
|
|
};
|
|
}
|
|
|
|
function decodeKeyValuePairs(decoder)
|
|
{
|
|
return {
|
|
ctor: '<decoder>',
|
|
tag: 'key-value',
|
|
decoder: decoder
|
|
};
|
|
}
|
|
|
|
function decodeObject(f, decoders)
|
|
{
|
|
return {
|
|
ctor: '<decoder>',
|
|
tag: 'map-many',
|
|
func: f,
|
|
decoders: decoders
|
|
};
|
|
}
|
|
|
|
function decodeTuple(f, decoders)
|
|
{
|
|
return {
|
|
ctor: '<decoder>',
|
|
tag: 'tuple',
|
|
func: f,
|
|
decoders: decoders
|
|
};
|
|
}
|
|
|
|
function andThen(decoder, callback)
|
|
{
|
|
return {
|
|
ctor: '<decoder>',
|
|
tag: 'andThen',
|
|
decoder: decoder,
|
|
callback: callback
|
|
};
|
|
}
|
|
|
|
function customAndThen(decoder, callback)
|
|
{
|
|
return {
|
|
ctor: '<decoder>',
|
|
tag: 'customAndThen',
|
|
decoder: decoder,
|
|
callback: callback
|
|
};
|
|
}
|
|
|
|
function oneOf(decoders)
|
|
{
|
|
return {
|
|
ctor: '<decoder>',
|
|
tag: 'oneOf',
|
|
decoders: decoders
|
|
};
|
|
}
|
|
|
|
|
|
// DECODING OBJECTS
|
|
|
|
function decodeObject1(f, d1)
|
|
{
|
|
return decodeObject(f, [d1]);
|
|
}
|
|
|
|
function decodeObject2(f, d1, d2)
|
|
{
|
|
return decodeObject(f, [d1, d2]);
|
|
}
|
|
|
|
function decodeObject3(f, d1, d2, d3)
|
|
{
|
|
return decodeObject(f, [d1, d2, d3]);
|
|
}
|
|
|
|
function decodeObject4(f, d1, d2, d3, d4)
|
|
{
|
|
return decodeObject(f, [d1, d2, d3, d4]);
|
|
}
|
|
|
|
function decodeObject5(f, d1, d2, d3, d4, d5)
|
|
{
|
|
return decodeObject(f, [d1, d2, d3, d4, d5]);
|
|
}
|
|
|
|
function decodeObject6(f, d1, d2, d3, d4, d5, d6)
|
|
{
|
|
return decodeObject(f, [d1, d2, d3, d4, d5, d6]);
|
|
}
|
|
|
|
function decodeObject7(f, d1, d2, d3, d4, d5, d6, d7)
|
|
{
|
|
return decodeObject(f, [d1, d2, d3, d4, d5, d6, d7]);
|
|
}
|
|
|
|
function decodeObject8(f, d1, d2, d3, d4, d5, d6, d7, d8)
|
|
{
|
|
return decodeObject(f, [d1, d2, d3, d4, d5, d6, d7, d8]);
|
|
}
|
|
|
|
|
|
// DECODING TUPLES
|
|
|
|
function decodeTuple1(f, d1)
|
|
{
|
|
return decodeTuple(f, [d1]);
|
|
}
|
|
|
|
function decodeTuple2(f, d1, d2)
|
|
{
|
|
return decodeTuple(f, [d1, d2]);
|
|
}
|
|
|
|
function decodeTuple3(f, d1, d2, d3)
|
|
{
|
|
return decodeTuple(f, [d1, d2, d3]);
|
|
}
|
|
|
|
function decodeTuple4(f, d1, d2, d3, d4)
|
|
{
|
|
return decodeTuple(f, [d1, d2, d3, d4]);
|
|
}
|
|
|
|
function decodeTuple5(f, d1, d2, d3, d4, d5)
|
|
{
|
|
return decodeTuple(f, [d1, d2, d3, d4, d5]);
|
|
}
|
|
|
|
function decodeTuple6(f, d1, d2, d3, d4, d5, d6)
|
|
{
|
|
return decodeTuple(f, [d1, d2, d3, d4, d5, d6]);
|
|
}
|
|
|
|
function decodeTuple7(f, d1, d2, d3, d4, d5, d6, d7)
|
|
{
|
|
return decodeTuple(f, [d1, d2, d3, d4, d5, d6, d7]);
|
|
}
|
|
|
|
function decodeTuple8(f, d1, d2, d3, d4, d5, d6, d7, d8)
|
|
{
|
|
return decodeTuple(f, [d1, d2, d3, d4, d5, d6, d7, d8]);
|
|
}
|
|
|
|
|
|
// DECODE HELPERS
|
|
|
|
function ok(value)
|
|
{
|
|
return { tag: 'ok', value: value };
|
|
}
|
|
|
|
function badPrimitive(type, value)
|
|
{
|
|
return { tag: 'primitive', type: type, value: value };
|
|
}
|
|
|
|
function badIndex(index, nestedProblems)
|
|
{
|
|
return { tag: 'index', index: index, rest: nestedProblems };
|
|
}
|
|
|
|
function badField(field, nestedProblems)
|
|
{
|
|
return { tag: 'field', field: field, rest: nestedProblems };
|
|
}
|
|
|
|
function badOneOf(problems)
|
|
{
|
|
return { tag: 'oneOf', problems: problems };
|
|
}
|
|
|
|
function bad(msg)
|
|
{
|
|
return { tag: 'fail', msg: msg };
|
|
}
|
|
|
|
function badToString(problem)
|
|
{
|
|
var context = '_';
|
|
while (problem)
|
|
{
|
|
switch (problem.tag)
|
|
{
|
|
case 'primitive':
|
|
return 'Expecting ' + problem.type
|
|
+ (context === '_' ? '' : ' at ' + context)
|
|
+ ' but instead got: ' + jsToString(problem.value);
|
|
|
|
case 'index':
|
|
context += '[' + problem.index + ']';
|
|
problem = problem.rest;
|
|
break;
|
|
|
|
case 'field':
|
|
context += '.' + problem.field;
|
|
problem = problem.rest;
|
|
break;
|
|
|
|
case 'oneOf':
|
|
var problems = problem.problems;
|
|
for (var i = 0; i < problems.length; i++)
|
|
{
|
|
problems[i] = badToString(problems[i]);
|
|
}
|
|
return 'I ran into the following problems'
|
|
+ (context === '_' ? '' : ' at ' + context)
|
|
+ ':\n\n' + problems.join('\n');
|
|
|
|
case 'fail':
|
|
return 'I ran into a `fail` decoder'
|
|
+ (context === '_' ? '' : ' at ' + context)
|
|
+ ': ' + problem.msg;
|
|
}
|
|
}
|
|
}
|
|
|
|
function jsToString(value)
|
|
{
|
|
return value === undefined
|
|
? 'undefined'
|
|
: JSON.stringify(value);
|
|
}
|
|
|
|
|
|
// DECODE
|
|
|
|
function runOnString(decoder, string)
|
|
{
|
|
var json;
|
|
try
|
|
{
|
|
json = JSON.parse(string);
|
|
}
|
|
catch (e)
|
|
{
|
|
return _elm_lang$core$Result$Err('Given an invalid JSON: ' + e.message);
|
|
}
|
|
return run(decoder, json);
|
|
}
|
|
|
|
function run(decoder, value)
|
|
{
|
|
var result = runHelp(decoder, value);
|
|
return (result.tag === 'ok')
|
|
? _elm_lang$core$Result$Ok(result.value)
|
|
: _elm_lang$core$Result$Err(badToString(result));
|
|
}
|
|
|
|
function runHelp(decoder, value)
|
|
{
|
|
switch (decoder.tag)
|
|
{
|
|
case 'bool':
|
|
return (typeof value === 'boolean')
|
|
? ok(value)
|
|
: badPrimitive('a Bool', value);
|
|
|
|
case 'int':
|
|
if (typeof value !== 'number') {
|
|
return badPrimitive('an Int', value);
|
|
}
|
|
|
|
if (-2147483647 < value && value < 2147483647 && (value | 0) === value) {
|
|
return ok(value);
|
|
}
|
|
|
|
if (isFinite(value) && !(value % 1)) {
|
|
return ok(value);
|
|
}
|
|
|
|
return badPrimitive('an Int', value);
|
|
|
|
case 'float':
|
|
return (typeof value === 'number')
|
|
? ok(value)
|
|
: badPrimitive('a Float', value);
|
|
|
|
case 'string':
|
|
return (typeof value === 'string')
|
|
? ok(value)
|
|
: (value instanceof String)
|
|
? ok(value + '')
|
|
: badPrimitive('a String', value);
|
|
|
|
case 'null':
|
|
return (value === null)
|
|
? ok(decoder.value)
|
|
: badPrimitive('null', value);
|
|
|
|
case 'value':
|
|
return ok(value);
|
|
|
|
case 'list':
|
|
if (!(value instanceof Array))
|
|
{
|
|
return badPrimitive('a List', value);
|
|
}
|
|
|
|
var list = _elm_lang$core$Native_List.Nil;
|
|
for (var i = value.length; i--; )
|
|
{
|
|
var result = runHelp(decoder.decoder, value[i]);
|
|
if (result.tag !== 'ok')
|
|
{
|
|
return badIndex(i, result)
|
|
}
|
|
list = _elm_lang$core$Native_List.Cons(result.value, list);
|
|
}
|
|
return ok(list);
|
|
|
|
case 'array':
|
|
if (!(value instanceof Array))
|
|
{
|
|
return badPrimitive('an Array', value);
|
|
}
|
|
|
|
var len = value.length;
|
|
var array = new Array(len);
|
|
for (var i = len; i--; )
|
|
{
|
|
var result = runHelp(decoder.decoder, value[i]);
|
|
if (result.tag !== 'ok')
|
|
{
|
|
return badIndex(i, result);
|
|
}
|
|
array[i] = result.value;
|
|
}
|
|
return ok(_elm_lang$core$Native_Array.fromJSArray(array));
|
|
|
|
case 'maybe':
|
|
var result = runHelp(decoder.decoder, value);
|
|
return (result.tag === 'ok')
|
|
? ok(_elm_lang$core$Maybe$Just(result.value))
|
|
: ok(_elm_lang$core$Maybe$Nothing);
|
|
|
|
case 'field':
|
|
var field = decoder.field;
|
|
if (typeof value !== 'object' || value === null || !(field in value))
|
|
{
|
|
return badPrimitive('an object with a field named `' + field + '`', value);
|
|
}
|
|
|
|
var result = runHelp(decoder.decoder, value[field]);
|
|
return (result.tag === 'ok')
|
|
? result
|
|
: badField(field, result);
|
|
|
|
case 'key-value':
|
|
if (typeof value !== 'object' || value === null || value instanceof Array)
|
|
{
|
|
return badPrimitive('an object', value);
|
|
}
|
|
|
|
var keyValuePairs = _elm_lang$core$Native_List.Nil;
|
|
for (var key in value)
|
|
{
|
|
var result = runHelp(decoder.decoder, value[key]);
|
|
if (result.tag !== 'ok')
|
|
{
|
|
return badField(key, result);
|
|
}
|
|
var pair = _elm_lang$core$Native_Utils.Tuple2(key, result.value);
|
|
keyValuePairs = _elm_lang$core$Native_List.Cons(pair, keyValuePairs);
|
|
}
|
|
return ok(keyValuePairs);
|
|
|
|
case 'map-many':
|
|
var answer = decoder.func;
|
|
var decoders = decoder.decoders;
|
|
for (var i = 0; i < decoders.length; i++)
|
|
{
|
|
var result = runHelp(decoders[i], value);
|
|
if (result.tag !== 'ok')
|
|
{
|
|
return result;
|
|
}
|
|
answer = answer(result.value);
|
|
}
|
|
return ok(answer);
|
|
|
|
case 'tuple':
|
|
var decoders = decoder.decoders;
|
|
var len = decoders.length;
|
|
|
|
if ( !(value instanceof Array) || value.length !== len )
|
|
{
|
|
return badPrimitive('a Tuple with ' + len + ' entries', value);
|
|
}
|
|
|
|
var answer = decoder.func;
|
|
for (var i = 0; i < len; i++)
|
|
{
|
|
var result = runHelp(decoders[i], value[i]);
|
|
if (result.tag !== 'ok')
|
|
{
|
|
return badIndex(i, result);
|
|
}
|
|
answer = answer(result.value);
|
|
}
|
|
return ok(answer);
|
|
|
|
case 'customAndThen':
|
|
var result = runHelp(decoder.decoder, value);
|
|
if (result.tag !== 'ok')
|
|
{
|
|
return result;
|
|
}
|
|
var realResult = decoder.callback(result.value);
|
|
if (realResult.ctor === 'Err')
|
|
{
|
|
return badPrimitive('something custom', value);
|
|
}
|
|
return ok(realResult._0);
|
|
|
|
case 'andThen':
|
|
var result = runHelp(decoder.decoder, value);
|
|
return (result.tag !== 'ok')
|
|
? result
|
|
: runHelp(decoder.callback(result.value), value);
|
|
|
|
case 'oneOf':
|
|
var errors = [];
|
|
var temp = decoder.decoders;
|
|
while (temp.ctor !== '[]')
|
|
{
|
|
var result = runHelp(temp._0, value);
|
|
|
|
if (result.tag === 'ok')
|
|
{
|
|
return result;
|
|
}
|
|
|
|
errors.push(result);
|
|
|
|
temp = temp._1;
|
|
}
|
|
return badOneOf(errors);
|
|
|
|
case 'fail':
|
|
return bad(decoder.msg);
|
|
|
|
case 'succeed':
|
|
return ok(decoder.msg);
|
|
}
|
|
}
|
|
|
|
|
|
// EQUALITY
|
|
|
|
function equality(a, b)
|
|
{
|
|
if (a === b)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
if (a.tag !== b.tag)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
switch (a.tag)
|
|
{
|
|
case 'succeed':
|
|
case 'fail':
|
|
return a.msg === b.msg;
|
|
|
|
case 'bool':
|
|
case 'int':
|
|
case 'float':
|
|
case 'string':
|
|
case 'value':
|
|
return true;
|
|
|
|
case 'null':
|
|
return a.value === b.value;
|
|
|
|
case 'list':
|
|
case 'array':
|
|
case 'maybe':
|
|
case 'key-value':
|
|
return equality(a.decoder, b.decoder);
|
|
|
|
case 'field':
|
|
return a.field === b.field && equality(a.decoder, b.decoder);
|
|
|
|
case 'map-many':
|
|
case 'tuple':
|
|
if (a.func !== b.func)
|
|
{
|
|
return false;
|
|
}
|
|
return listEquality(a.decoders, b.decoders);
|
|
|
|
case 'andThen':
|
|
case 'customAndThen':
|
|
return a.callback === b.callback && equality(a.decoder, b.decoder);
|
|
|
|
case 'oneOf':
|
|
return listEquality(a.decoders, b.decoders);
|
|
}
|
|
}
|
|
|
|
function listEquality(aDecoders, bDecoders)
|
|
{
|
|
var len = aDecoders.length;
|
|
if (len !== bDecoders.length)
|
|
{
|
|
return false;
|
|
}
|
|
for (var i = 0; i < len; i++)
|
|
{
|
|
if (!equality(aDecoders[i], bDecoders[i]))
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
// ENCODE
|
|
|
|
function encode(indentLevel, value)
|
|
{
|
|
return JSON.stringify(value, null, indentLevel);
|
|
}
|
|
|
|
function identity(value)
|
|
{
|
|
return value;
|
|
}
|
|
|
|
function encodeObject(keyValuePairs)
|
|
{
|
|
var obj = {};
|
|
while (keyValuePairs.ctor !== '[]')
|
|
{
|
|
var pair = keyValuePairs._0;
|
|
obj[pair._0] = pair._1;
|
|
keyValuePairs = keyValuePairs._1;
|
|
}
|
|
return obj;
|
|
}
|
|
|
|
return {
|
|
encode: F2(encode),
|
|
runOnString: F2(runOnString),
|
|
run: F2(run),
|
|
|
|
decodeNull: decodeNull,
|
|
decodePrimitive: decodePrimitive,
|
|
decodeContainer: F2(decodeContainer),
|
|
|
|
decodeField: F2(decodeField),
|
|
|
|
decodeObject1: F2(decodeObject1),
|
|
decodeObject2: F3(decodeObject2),
|
|
decodeObject3: F4(decodeObject3),
|
|
decodeObject4: F5(decodeObject4),
|
|
decodeObject5: F6(decodeObject5),
|
|
decodeObject6: F7(decodeObject6),
|
|
decodeObject7: F8(decodeObject7),
|
|
decodeObject8: F9(decodeObject8),
|
|
decodeKeyValuePairs: decodeKeyValuePairs,
|
|
|
|
decodeTuple1: F2(decodeTuple1),
|
|
decodeTuple2: F3(decodeTuple2),
|
|
decodeTuple3: F4(decodeTuple3),
|
|
decodeTuple4: F5(decodeTuple4),
|
|
decodeTuple5: F6(decodeTuple5),
|
|
decodeTuple6: F7(decodeTuple6),
|
|
decodeTuple7: F8(decodeTuple7),
|
|
decodeTuple8: F9(decodeTuple8),
|
|
|
|
andThen: F2(andThen),
|
|
customAndThen: F2(customAndThen),
|
|
fail: fail,
|
|
succeed: succeed,
|
|
oneOf: oneOf,
|
|
|
|
identity: identity,
|
|
encodeNull: null,
|
|
encodeArray: _elm_lang$core$Native_Array.toJSArray,
|
|
encodeList: _elm_lang$core$Native_List.toArray,
|
|
encodeObject: encodeObject,
|
|
|
|
equality: equality
|
|
};
|
|
|
|
}();
|
|
|
|
var _elm_lang$core$Json_Encode$list = _elm_lang$core$Native_Json.encodeList;
|
|
var _elm_lang$core$Json_Encode$array = _elm_lang$core$Native_Json.encodeArray;
|
|
var _elm_lang$core$Json_Encode$object = _elm_lang$core$Native_Json.encodeObject;
|
|
var _elm_lang$core$Json_Encode$null = _elm_lang$core$Native_Json.encodeNull;
|
|
var _elm_lang$core$Json_Encode$bool = _elm_lang$core$Native_Json.identity;
|
|
var _elm_lang$core$Json_Encode$float = _elm_lang$core$Native_Json.identity;
|
|
var _elm_lang$core$Json_Encode$int = _elm_lang$core$Native_Json.identity;
|
|
var _elm_lang$core$Json_Encode$string = _elm_lang$core$Native_Json.identity;
|
|
var _elm_lang$core$Json_Encode$encode = _elm_lang$core$Native_Json.encode;
|
|
var _elm_lang$core$Json_Encode$Value = {ctor: 'Value'};
|
|
|
|
var _elm_lang$core$Json_Decode$tuple8 = _elm_lang$core$Native_Json.decodeTuple8;
|
|
var _elm_lang$core$Json_Decode$tuple7 = _elm_lang$core$Native_Json.decodeTuple7;
|
|
var _elm_lang$core$Json_Decode$tuple6 = _elm_lang$core$Native_Json.decodeTuple6;
|
|
var _elm_lang$core$Json_Decode$tuple5 = _elm_lang$core$Native_Json.decodeTuple5;
|
|
var _elm_lang$core$Json_Decode$tuple4 = _elm_lang$core$Native_Json.decodeTuple4;
|
|
var _elm_lang$core$Json_Decode$tuple3 = _elm_lang$core$Native_Json.decodeTuple3;
|
|
var _elm_lang$core$Json_Decode$tuple2 = _elm_lang$core$Native_Json.decodeTuple2;
|
|
var _elm_lang$core$Json_Decode$tuple1 = _elm_lang$core$Native_Json.decodeTuple1;
|
|
var _elm_lang$core$Json_Decode$succeed = _elm_lang$core$Native_Json.succeed;
|
|
var _elm_lang$core$Json_Decode$fail = _elm_lang$core$Native_Json.fail;
|
|
var _elm_lang$core$Json_Decode$andThen = _elm_lang$core$Native_Json.andThen;
|
|
var _elm_lang$core$Json_Decode$customDecoder = _elm_lang$core$Native_Json.customAndThen;
|
|
var _elm_lang$core$Json_Decode$decodeValue = _elm_lang$core$Native_Json.run;
|
|
var _elm_lang$core$Json_Decode$value = _elm_lang$core$Native_Json.decodePrimitive('value');
|
|
var _elm_lang$core$Json_Decode$maybe = function (decoder) {
|
|
return A2(_elm_lang$core$Native_Json.decodeContainer, 'maybe', decoder);
|
|
};
|
|
var _elm_lang$core$Json_Decode$null = _elm_lang$core$Native_Json.decodeNull;
|
|
var _elm_lang$core$Json_Decode$array = function (decoder) {
|
|
return A2(_elm_lang$core$Native_Json.decodeContainer, 'array', decoder);
|
|
};
|
|
var _elm_lang$core$Json_Decode$list = function (decoder) {
|
|
return A2(_elm_lang$core$Native_Json.decodeContainer, 'list', decoder);
|
|
};
|
|
var _elm_lang$core$Json_Decode$bool = _elm_lang$core$Native_Json.decodePrimitive('bool');
|
|
var _elm_lang$core$Json_Decode$int = _elm_lang$core$Native_Json.decodePrimitive('int');
|
|
var _elm_lang$core$Json_Decode$float = _elm_lang$core$Native_Json.decodePrimitive('float');
|
|
var _elm_lang$core$Json_Decode$string = _elm_lang$core$Native_Json.decodePrimitive('string');
|
|
var _elm_lang$core$Json_Decode$oneOf = _elm_lang$core$Native_Json.oneOf;
|
|
var _elm_lang$core$Json_Decode$keyValuePairs = _elm_lang$core$Native_Json.decodeKeyValuePairs;
|
|
var _elm_lang$core$Json_Decode$object8 = _elm_lang$core$Native_Json.decodeObject8;
|
|
var _elm_lang$core$Json_Decode$object7 = _elm_lang$core$Native_Json.decodeObject7;
|
|
var _elm_lang$core$Json_Decode$object6 = _elm_lang$core$Native_Json.decodeObject6;
|
|
var _elm_lang$core$Json_Decode$object5 = _elm_lang$core$Native_Json.decodeObject5;
|
|
var _elm_lang$core$Json_Decode$object4 = _elm_lang$core$Native_Json.decodeObject4;
|
|
var _elm_lang$core$Json_Decode$object3 = _elm_lang$core$Native_Json.decodeObject3;
|
|
var _elm_lang$core$Json_Decode$object2 = _elm_lang$core$Native_Json.decodeObject2;
|
|
var _elm_lang$core$Json_Decode$object1 = _elm_lang$core$Native_Json.decodeObject1;
|
|
var _elm_lang$core$Json_Decode_ops = _elm_lang$core$Json_Decode_ops || {};
|
|
_elm_lang$core$Json_Decode_ops[':='] = _elm_lang$core$Native_Json.decodeField;
|
|
var _elm_lang$core$Json_Decode$at = F2(
|
|
function (fields, decoder) {
|
|
return A3(
|
|
_elm_lang$core$List$foldr,
|
|
F2(
|
|
function (x, y) {
|
|
return A2(_elm_lang$core$Json_Decode_ops[':='], x, y);
|
|
}),
|
|
decoder,
|
|
fields);
|
|
});
|
|
var _elm_lang$core$Json_Decode$decodeString = _elm_lang$core$Native_Json.runOnString;
|
|
var _elm_lang$core$Json_Decode$map = _elm_lang$core$Native_Json.decodeObject1;
|
|
var _elm_lang$core$Json_Decode$dict = function (decoder) {
|
|
return A2(
|
|
_elm_lang$core$Json_Decode$map,
|
|
_elm_lang$core$Dict$fromList,
|
|
_elm_lang$core$Json_Decode$keyValuePairs(decoder));
|
|
};
|
|
var _elm_lang$core$Json_Decode$Decoder = {ctor: 'Decoder'};
|
|
|
|
//import Native.Json //
|
|
|
|
var _elm_lang$virtual_dom$Native_VirtualDom = function() {
|
|
|
|
var STYLE_KEY = 'STYLE';
|
|
var EVENT_KEY = 'EVENT';
|
|
var ATTR_KEY = 'ATTR';
|
|
var ATTR_NS_KEY = 'ATTR_NS';
|
|
|
|
|
|
|
|
//////////// VIRTUAL DOM NODES ////////////
|
|
|
|
|
|
function text(string)
|
|
{
|
|
return {
|
|
type: 'text',
|
|
text: string
|
|
};
|
|
}
|
|
|
|
|
|
function node(tag)
|
|
{
|
|
return F2(function(factList, kidList) {
|
|
return nodeHelp(tag, factList, kidList);
|
|
});
|
|
}
|
|
|
|
|
|
function nodeHelp(tag, factList, kidList)
|
|
{
|
|
var organized = organizeFacts(factList);
|
|
var namespace = organized.namespace;
|
|
var facts = organized.facts;
|
|
|
|
var children = [];
|
|
var descendantsCount = 0;
|
|
while (kidList.ctor !== '[]')
|
|
{
|
|
var kid = kidList._0;
|
|
descendantsCount += (kid.descendantsCount || 0);
|
|
children.push(kid);
|
|
kidList = kidList._1;
|
|
}
|
|
descendantsCount += children.length;
|
|
|
|
return {
|
|
type: 'node',
|
|
tag: tag,
|
|
facts: facts,
|
|
children: children,
|
|
namespace: namespace,
|
|
descendantsCount: descendantsCount
|
|
};
|
|
}
|
|
|
|
|
|
function custom(factList, model, impl)
|
|
{
|
|
var facts = organizeFacts(factList).facts;
|
|
|
|
return {
|
|
type: 'custom',
|
|
facts: facts,
|
|
model: model,
|
|
impl: impl
|
|
};
|
|
}
|
|
|
|
|
|
function map(tagger, node)
|
|
{
|
|
return {
|
|
type: 'tagger',
|
|
tagger: tagger,
|
|
node: node,
|
|
descendantsCount: 1 + (node.descendantsCount || 0)
|
|
};
|
|
}
|
|
|
|
|
|
function thunk(func, args, thunk)
|
|
{
|
|
return {
|
|
type: 'thunk',
|
|
func: func,
|
|
args: args,
|
|
thunk: thunk,
|
|
node: null
|
|
};
|
|
}
|
|
|
|
function lazy(fn, a)
|
|
{
|
|
return thunk(fn, [a], function() {
|
|
return fn(a);
|
|
});
|
|
}
|
|
|
|
function lazy2(fn, a, b)
|
|
{
|
|
return thunk(fn, [a,b], function() {
|
|
return A2(fn, a, b);
|
|
});
|
|
}
|
|
|
|
function lazy3(fn, a, b, c)
|
|
{
|
|
return thunk(fn, [a,b,c], function() {
|
|
return A3(fn, a, b, c);
|
|
});
|
|
}
|
|
|
|
|
|
|
|
// FACTS
|
|
|
|
|
|
function organizeFacts(factList)
|
|
{
|
|
var namespace, facts = {};
|
|
|
|
while (factList.ctor !== '[]')
|
|
{
|
|
var entry = factList._0;
|
|
var key = entry.key;
|
|
|
|
if (key === ATTR_KEY || key === ATTR_NS_KEY || key === EVENT_KEY)
|
|
{
|
|
var subFacts = facts[key] || {};
|
|
subFacts[entry.realKey] = entry.value;
|
|
facts[key] = subFacts;
|
|
}
|
|
else if (key === STYLE_KEY)
|
|
{
|
|
var styles = facts[key] || {};
|
|
var styleList = entry.value;
|
|
while (styleList.ctor !== '[]')
|
|
{
|
|
var style = styleList._0;
|
|
styles[style._0] = style._1;
|
|
styleList = styleList._1;
|
|
}
|
|
facts[key] = styles;
|
|
}
|
|
else if (key === 'namespace')
|
|
{
|
|
namespace = entry.value;
|
|
}
|
|
else
|
|
{
|
|
facts[key] = entry.value;
|
|
}
|
|
factList = factList._1;
|
|
}
|
|
|
|
return {
|
|
facts: facts,
|
|
namespace: namespace
|
|
};
|
|
}
|
|
|
|
|
|
|
|
//////////// PROPERTIES AND ATTRIBUTES ////////////
|
|
|
|
|
|
function style(value)
|
|
{
|
|
return {
|
|
key: STYLE_KEY,
|
|
value: value
|
|
};
|
|
}
|
|
|
|
|
|
function property(key, value)
|
|
{
|
|
return {
|
|
key: key,
|
|
value: value
|
|
};
|
|
}
|
|
|
|
|
|
function attribute(key, value)
|
|
{
|
|
return {
|
|
key: ATTR_KEY,
|
|
realKey: key,
|
|
value: value
|
|
};
|
|
}
|
|
|
|
|
|
function attributeNS(namespace, key, value)
|
|
{
|
|
return {
|
|
key: ATTR_NS_KEY,
|
|
realKey: key,
|
|
value: {
|
|
value: value,
|
|
namespace: namespace
|
|
}
|
|
};
|
|
}
|
|
|
|
|
|
function on(name, options, decoder)
|
|
{
|
|
return {
|
|
key: EVENT_KEY,
|
|
realKey: name,
|
|
value: {
|
|
options: options,
|
|
decoder: decoder
|
|
}
|
|
};
|
|
}
|
|
|
|
|
|
function equalEvents(a, b)
|
|
{
|
|
if (!a.options === b.options)
|
|
{
|
|
if (a.stopPropagation !== b.stopPropagation || a.preventDefault !== b.preventDefault)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
return _elm_lang$core$Native_Json.equality(a.decoder, b.decoder);
|
|
}
|
|
|
|
|
|
|
|
//////////// RENDERER ////////////
|
|
|
|
|
|
function renderer(parent, tagger, initialVirtualNode)
|
|
{
|
|
var eventNode = { tagger: tagger, parent: null };
|
|
|
|
var domNode = render(initialVirtualNode, eventNode);
|
|
parent.appendChild(domNode);
|
|
|
|
var state = 'NO_REQUEST';
|
|
var currentVirtualNode = initialVirtualNode;
|
|
var nextVirtualNode = initialVirtualNode;
|
|
|
|
function registerVirtualNode(vNode)
|
|
{
|
|
if (state === 'NO_REQUEST')
|
|
{
|
|
rAF(updateIfNeeded);
|
|
}
|
|
state = 'PENDING_REQUEST';
|
|
nextVirtualNode = vNode;
|
|
}
|
|
|
|
function updateIfNeeded()
|
|
{
|
|
switch (state)
|
|
{
|
|
case 'NO_REQUEST':
|
|
throw new Error(
|
|
'Unexpected draw callback.\n' +
|
|
'Please report this to <https://github.com/elm-lang/core/issues>.'
|
|
);
|
|
|
|
case 'PENDING_REQUEST':
|
|
rAF(updateIfNeeded);
|
|
state = 'EXTRA_REQUEST';
|
|
|
|
var patches = diff(currentVirtualNode, nextVirtualNode);
|
|
domNode = applyPatches(domNode, currentVirtualNode, patches, eventNode);
|
|
currentVirtualNode = nextVirtualNode;
|
|
|
|
return;
|
|
|
|
case 'EXTRA_REQUEST':
|
|
state = 'NO_REQUEST';
|
|
return;
|
|
}
|
|
}
|
|
|
|
return { update: registerVirtualNode };
|
|
}
|
|
|
|
|
|
var rAF =
|
|
typeof requestAnimationFrame !== 'undefined'
|
|
? requestAnimationFrame
|
|
: function(cb) { setTimeout(cb, 1000 / 60); };
|
|
|
|
|
|
|
|
//////////// RENDER ////////////
|
|
|
|
|
|
function render(vNode, eventNode)
|
|
{
|
|
switch (vNode.type)
|
|
{
|
|
case 'thunk':
|
|
if (!vNode.node)
|
|
{
|
|
vNode.node = vNode.thunk();
|
|
}
|
|
return render(vNode.node, eventNode);
|
|
|
|
case 'tagger':
|
|
var subNode = vNode.node;
|
|
var tagger = vNode.tagger;
|
|
|
|
while (subNode.type === 'tagger')
|
|
{
|
|
typeof tagger !== 'object'
|
|
? tagger = [tagger, subNode.tagger]
|
|
: tagger.push(subNode.tagger);
|
|
|
|
subNode = subNode.node;
|
|
}
|
|
|
|
var subEventRoot = {
|
|
tagger: tagger,
|
|
parent: eventNode
|
|
};
|
|
|
|
var domNode = render(subNode, subEventRoot);
|
|
domNode.elm_event_node_ref = subEventRoot;
|
|
return domNode;
|
|
|
|
case 'text':
|
|
return document.createTextNode(vNode.text);
|
|
|
|
case 'node':
|
|
var domNode = vNode.namespace
|
|
? document.createElementNS(vNode.namespace, vNode.tag)
|
|
: document.createElement(vNode.tag);
|
|
|
|
applyFacts(domNode, eventNode, vNode.facts);
|
|
|
|
var children = vNode.children;
|
|
|
|
for (var i = 0; i < children.length; i++)
|
|
{
|
|
domNode.appendChild(render(children[i], eventNode));
|
|
}
|
|
|
|
return domNode;
|
|
|
|
case 'custom':
|
|
var domNode = vNode.impl.render(vNode.model);
|
|
applyFacts(domNode, eventNode, vNode.facts);
|
|
return domNode;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//////////// APPLY FACTS ////////////
|
|
|
|
|
|
function applyFacts(domNode, eventNode, facts)
|
|
{
|
|
for (var key in facts)
|
|
{
|
|
var value = facts[key];
|
|
|
|
switch (key)
|
|
{
|
|
case STYLE_KEY:
|
|
applyStyles(domNode, value);
|
|
break;
|
|
|
|
case EVENT_KEY:
|
|
applyEvents(domNode, eventNode, value);
|
|
break;
|
|
|
|
case ATTR_KEY:
|
|
applyAttrs(domNode, value);
|
|
break;
|
|
|
|
case ATTR_NS_KEY:
|
|
applyAttrsNS(domNode, value);
|
|
break;
|
|
|
|
case 'value':
|
|
if (domNode[key] !== value)
|
|
{
|
|
domNode[key] = value;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
domNode[key] = value;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
function applyStyles(domNode, styles)
|
|
{
|
|
var domNodeStyle = domNode.style;
|
|
|
|
for (var key in styles)
|
|
{
|
|
domNodeStyle[key] = styles[key];
|
|
}
|
|
}
|
|
|
|
function applyEvents(domNode, eventNode, events)
|
|
{
|
|
var allHandlers = domNode.elm_handlers || {};
|
|
|
|
for (var key in events)
|
|
{
|
|
var handler = allHandlers[key];
|
|
var value = events[key];
|
|
|
|
if (typeof value === 'undefined')
|
|
{
|
|
domNode.removeEventListener(key, handler);
|
|
allHandlers[key] = undefined;
|
|
}
|
|
else if (typeof handler === 'undefined')
|
|
{
|
|
var handler = makeEventHandler(eventNode, value);
|
|
domNode.addEventListener(key, handler);
|
|
allHandlers[key] = handler;
|
|
}
|
|
else
|
|
{
|
|
handler.info = value;
|
|
}
|
|
}
|
|
|
|
domNode.elm_handlers = allHandlers;
|
|
}
|
|
|
|
function makeEventHandler(eventNode, info)
|
|
{
|
|
function eventHandler(event)
|
|
{
|
|
var info = eventHandler.info;
|
|
|
|
var value = A2(_elm_lang$core$Native_Json.run, info.decoder, event);
|
|
|
|
if (value.ctor === 'Ok')
|
|
{
|
|
var options = info.options;
|
|
if (options.stopPropagation)
|
|
{
|
|
event.stopPropagation();
|
|
}
|
|
if (options.preventDefault)
|
|
{
|
|
event.preventDefault();
|
|
}
|
|
|
|
var message = value._0;
|
|
|
|
var currentEventNode = eventNode;
|
|
while (currentEventNode)
|
|
{
|
|
var tagger = currentEventNode.tagger;
|
|
if (typeof tagger === 'function')
|
|
{
|
|
message = tagger(message);
|
|
}
|
|
else
|
|
{
|
|
for (var i = tagger.length; i--; )
|
|
{
|
|
message = tagger[i](message);
|
|
}
|
|
}
|
|
currentEventNode = currentEventNode.parent;
|
|
}
|
|
}
|
|
};
|
|
|
|
eventHandler.info = info;
|
|
|
|
return eventHandler;
|
|
}
|
|
|
|
function applyAttrs(domNode, attrs)
|
|
{
|
|
for (var key in attrs)
|
|
{
|
|
var value = attrs[key];
|
|
if (typeof value === 'undefined')
|
|
{
|
|
domNode.removeAttribute(key);
|
|
}
|
|
else
|
|
{
|
|
domNode.setAttribute(key, value);
|
|
}
|
|
}
|
|
}
|
|
|
|
function applyAttrsNS(domNode, nsAttrs)
|
|
{
|
|
for (var key in nsAttrs)
|
|
{
|
|
var pair = nsAttrs[key];
|
|
var namespace = pair.namespace;
|
|
var value = pair.value;
|
|
|
|
if (typeof value === 'undefined')
|
|
{
|
|
domNode.removeAttributeNS(namespace, key);
|
|
}
|
|
else
|
|
{
|
|
domNode.setAttributeNS(namespace, key, value);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//////////// DIFF ////////////
|
|
|
|
|
|
function diff(a, b)
|
|
{
|
|
var patches = [];
|
|
diffHelp(a, b, patches, 0);
|
|
return patches;
|
|
}
|
|
|
|
|
|
function makePatch(type, index, data)
|
|
{
|
|
return {
|
|
index: index,
|
|
type: type,
|
|
data: data,
|
|
domNode: null,
|
|
eventNode: null
|
|
};
|
|
}
|
|
|
|
|
|
function diffHelp(a, b, patches, index)
|
|
{
|
|
if (a === b)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var aType = a.type;
|
|
var bType = b.type;
|
|
|
|
// Bail if you run into different types of nodes. Implies that the
|
|
// structure has changed significantly and it's not worth a diff.
|
|
if (aType !== bType)
|
|
{
|
|
patches.push(makePatch('p-redraw', index, b));
|
|
return;
|
|
}
|
|
|
|
// Now we know that both nodes are the same type.
|
|
switch (bType)
|
|
{
|
|
case 'thunk':
|
|
var aArgs = a.args;
|
|
var bArgs = b.args;
|
|
var i = aArgs.length;
|
|
var same = a.func === b.func && i === bArgs.length;
|
|
while (same && i--)
|
|
{
|
|
same = aArgs[i] === bArgs[i];
|
|
}
|
|
if (same)
|
|
{
|
|
b.node = a.node;
|
|
return;
|
|
}
|
|
b.node = b.thunk();
|
|
var subPatches = [];
|
|
diffHelp(a.node, b.node, subPatches, 0);
|
|
if (subPatches.length > 0)
|
|
{
|
|
patches.push(makePatch('p-thunk', index, subPatches));
|
|
}
|
|
return;
|
|
|
|
case 'tagger':
|
|
// gather nested taggers
|
|
var aTaggers = a.tagger;
|
|
var bTaggers = b.tagger;
|
|
var nesting = false;
|
|
|
|
var aSubNode = a.node;
|
|
while (aSubNode.type === 'tagger')
|
|
{
|
|
nesting = true;
|
|
|
|
typeof aTaggers !== 'object'
|
|
? aTaggers = [aTaggers, aSubNode.tagger]
|
|
: aTaggers.push(aSubNode.tagger);
|
|
|
|
aSubNode = aSubNode.node;
|
|
}
|
|
|
|
var bSubNode = b.node;
|
|
while (bSubNode.type === 'tagger')
|
|
{
|
|
nesting = true;
|
|
|
|
typeof bTaggers !== 'object'
|
|
? bTaggers = [bTaggers, bSubNode.tagger]
|
|
: bTaggers.push(bSubNode.tagger);
|
|
|
|
bSubNode = bSubNode.node;
|
|
}
|
|
|
|
// Just bail if different numbers of taggers. This implies the
|
|
// structure of the virtual DOM has changed.
|
|
if (nesting && aTaggers.length !== bTaggers.length)
|
|
{
|
|
patches.push(makePatch('p-redraw', index, b));
|
|
return;
|
|
}
|
|
|
|
// check if taggers are "the same"
|
|
if (nesting ? !pairwiseRefEqual(aTaggers, bTaggers) : aTaggers !== bTaggers)
|
|
{
|
|
patches.push(makePatch('p-tagger', index, bTaggers));
|
|
}
|
|
|
|
// diff everything below the taggers
|
|
diffHelp(aSubNode, bSubNode, patches, index + 1);
|
|
return;
|
|
|
|
case 'text':
|
|
if (a.text !== b.text)
|
|
{
|
|
patches.push(makePatch('p-text', index, b.text));
|
|
return;
|
|
}
|
|
|
|
return;
|
|
|
|
case 'node':
|
|
// Bail if obvious indicators have changed. Implies more serious
|
|
// structural changes such that it's not worth it to diff.
|
|
if (a.tag !== b.tag || a.namespace !== b.namespace)
|
|
{
|
|
patches.push(makePatch('p-redraw', index, b));
|
|
return;
|
|
}
|
|
|
|
var factsDiff = diffFacts(a.facts, b.facts);
|
|
|
|
if (typeof factsDiff !== 'undefined')
|
|
{
|
|
patches.push(makePatch('p-facts', index, factsDiff));
|
|
}
|
|
|
|
diffChildren(a, b, patches, index);
|
|
return;
|
|
|
|
case 'custom':
|
|
if (a.impl !== b.impl)
|
|
{
|
|
patches.push(makePatch('p-redraw', index, b));
|
|
return;
|
|
}
|
|
|
|
var factsDiff = diffFacts(a.facts, b.facts);
|
|
if (typeof factsDiff !== 'undefined')
|
|
{
|
|
patches.push(makePatch('p-facts', index, factsDiff));
|
|
}
|
|
|
|
var patch = b.impl.diff(a,b);
|
|
if (patch)
|
|
{
|
|
patches.push(makePatch('p-custom', index, patch));
|
|
return;
|
|
}
|
|
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
// assumes the incoming arrays are the same length
|
|
function pairwiseRefEqual(as, bs)
|
|
{
|
|
for (var i = 0; i < as.length; i++)
|
|
{
|
|
if (as[i] !== bs[i])
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
// TODO Instead of creating a new diff object, it's possible to just test if
|
|
// there *is* a diff. During the actual patch, do the diff again and make the
|
|
// modifications directly. This way, there's no new allocations. Worth it?
|
|
function diffFacts(a, b, category)
|
|
{
|
|
var diff;
|
|
|
|
// look for changes and removals
|
|
for (var aKey in a)
|
|
{
|
|
if (aKey === STYLE_KEY || aKey === EVENT_KEY || aKey === ATTR_KEY || aKey === ATTR_NS_KEY)
|
|
{
|
|
var subDiff = diffFacts(a[aKey], b[aKey] || {}, aKey);
|
|
if (subDiff)
|
|
{
|
|
diff = diff || {};
|
|
diff[aKey] = subDiff;
|
|
}
|
|
continue;
|
|
}
|
|
|
|
// remove if not in the new facts
|
|
if (!(aKey in b))
|
|
{
|
|
diff = diff || {};
|
|
diff[aKey] =
|
|
(typeof category === 'undefined')
|
|
? (typeof a[aKey] === 'string' ? '' : null)
|
|
:
|
|
(category === STYLE_KEY)
|
|
? ''
|
|
:
|
|
(category === EVENT_KEY || category === ATTR_KEY)
|
|
? undefined
|
|
:
|
|
{ namespace: a[aKey].namespace, value: undefined };
|
|
|
|
continue;
|
|
}
|
|
|
|
var aValue = a[aKey];
|
|
var bValue = b[aKey];
|
|
|
|
// reference equal, so don't worry about it
|
|
if (aValue === bValue && aKey !== 'value'
|
|
|| category === EVENT_KEY && equalEvents(aValue, bValue))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
diff = diff || {};
|
|
diff[aKey] = bValue;
|
|
}
|
|
|
|
// add new stuff
|
|
for (var bKey in b)
|
|
{
|
|
if (!(bKey in a))
|
|
{
|
|
diff = diff || {};
|
|
diff[bKey] = b[bKey];
|
|
}
|
|
}
|
|
|
|
return diff;
|
|
}
|
|
|
|
|
|
function diffChildren(aParent, bParent, patches, rootIndex)
|
|
{
|
|
var aChildren = aParent.children;
|
|
var bChildren = bParent.children;
|
|
|
|
var aLen = aChildren.length;
|
|
var bLen = bChildren.length;
|
|
|
|
// FIGURE OUT IF THERE ARE INSERTS OR REMOVALS
|
|
|
|
if (aLen > bLen)
|
|
{
|
|
patches.push(makePatch('p-remove', rootIndex, aLen - bLen));
|
|
}
|
|
else if (aLen < bLen)
|
|
{
|
|
patches.push(makePatch('p-insert', rootIndex, bChildren.slice(aLen)));
|
|
}
|
|
|
|
// PAIRWISE DIFF EVERYTHING ELSE
|
|
|
|
var index = rootIndex;
|
|
var minLen = aLen < bLen ? aLen : bLen;
|
|
for (var i = 0; i < minLen; i++)
|
|
{
|
|
index++;
|
|
var aChild = aChildren[i];
|
|
diffHelp(aChild, bChildren[i], patches, index);
|
|
index += aChild.descendantsCount || 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//////////// ADD DOM NODES ////////////
|
|
//
|
|
// Each DOM node has an "index" assigned in order of traversal. It is important
|
|
// to minimize our crawl over the actual DOM, so these indexes (along with the
|
|
// descendantsCount of virtual nodes) let us skip touching entire subtrees of
|
|
// the DOM if we know there are no patches there.
|
|
|
|
|
|
function addDomNodes(domNode, vNode, patches, eventNode)
|
|
{
|
|
addDomNodesHelp(domNode, vNode, patches, 0, 0, vNode.descendantsCount, eventNode);
|
|
}
|
|
|
|
|
|
// assumes `patches` is non-empty and indexes increase monotonically.
|
|
function addDomNodesHelp(domNode, vNode, patches, i, low, high, eventNode)
|
|
{
|
|
var patch = patches[i];
|
|
var index = patch.index;
|
|
|
|
while (index === low)
|
|
{
|
|
var patchType = patch.type;
|
|
|
|
if (patchType === 'p-thunk')
|
|
{
|
|
addDomNodes(domNode, vNode.node, patch.data, eventNode);
|
|
}
|
|
else
|
|
{
|
|
patch.domNode = domNode;
|
|
patch.eventNode = eventNode;
|
|
}
|
|
|
|
i++;
|
|
|
|
if (!(patch = patches[i]) || (index = patch.index) > high)
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
switch (vNode.type)
|
|
{
|
|
case 'tagger':
|
|
var subNode = vNode.node;
|
|
|
|
while (subNode.type === "tagger")
|
|
{
|
|
subNode = subNode.node;
|
|
}
|
|
|
|
return addDomNodesHelp(domNode, subNode, patches, i, low + 1, high, domNode.elm_event_node_ref);
|
|
|
|
case 'node':
|
|
var vChildren = vNode.children;
|
|
var childNodes = domNode.childNodes;
|
|
for (var j = 0; j < vChildren.length; j++)
|
|
{
|
|
low++;
|
|
var vChild = vChildren[j];
|
|
var nextLow = low + (vChild.descendantsCount || 0);
|
|
if (low <= index && index <= nextLow)
|
|
{
|
|
i = addDomNodesHelp(childNodes[j], vChild, patches, i, low, nextLow, eventNode);
|
|
if (!(patch = patches[i]) || (index = patch.index) > high)
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
low = nextLow;
|
|
}
|
|
return i;
|
|
|
|
case 'text':
|
|
case 'thunk':
|
|
throw new Error('should never traverse `text` or `thunk` nodes like this');
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//////////// APPLY PATCHES ////////////
|
|
|
|
|
|
function applyPatches(rootDomNode, oldVirtualNode, patches, eventNode)
|
|
{
|
|
if (patches.length === 0)
|
|
{
|
|
return rootDomNode;
|
|
}
|
|
|
|
addDomNodes(rootDomNode, oldVirtualNode, patches, eventNode);
|
|
return applyPatchesHelp(rootDomNode, patches);
|
|
}
|
|
|
|
function applyPatchesHelp(rootDomNode, patches)
|
|
{
|
|
for (var i = 0; i < patches.length; i++)
|
|
{
|
|
var patch = patches[i];
|
|
var localDomNode = patch.domNode
|
|
var newNode = applyPatch(localDomNode, patch);
|
|
if (localDomNode === rootDomNode)
|
|
{
|
|
rootDomNode = newNode;
|
|
}
|
|
}
|
|
return rootDomNode;
|
|
}
|
|
|
|
function applyPatch(domNode, patch)
|
|
{
|
|
switch (patch.type)
|
|
{
|
|
case 'p-redraw':
|
|
return redraw(domNode, patch.data, patch.eventNode);
|
|
|
|
case 'p-facts':
|
|
applyFacts(domNode, patch.eventNode, patch.data);
|
|
return domNode;
|
|
|
|
case 'p-text':
|
|
domNode.replaceData(0, domNode.length, patch.data);
|
|
return domNode;
|
|
|
|
case 'p-thunk':
|
|
return applyPatchesHelp(domNode, patch.data);
|
|
|
|
case 'p-tagger':
|
|
domNode.elm_event_node_ref.tagger = patch.data;
|
|
return domNode;
|
|
|
|
case 'p-remove':
|
|
var i = patch.data;
|
|
while (i--)
|
|
{
|
|
domNode.removeChild(domNode.lastChild);
|
|
}
|
|
return domNode;
|
|
|
|
case 'p-insert':
|
|
var newNodes = patch.data;
|
|
for (var i = 0; i < newNodes.length; i++)
|
|
{
|
|
domNode.appendChild(render(newNodes[i], patch.eventNode));
|
|
}
|
|
return domNode;
|
|
|
|
case 'p-custom':
|
|
var impl = patch.data;
|
|
return impl.applyPatch(domNode, impl.data);
|
|
|
|
default:
|
|
throw new Error('Ran into an unknown patch!');
|
|
}
|
|
}
|
|
|
|
|
|
function redraw(domNode, vNode, eventNode)
|
|
{
|
|
var parentNode = domNode.parentNode;
|
|
var newNode = render(vNode, eventNode);
|
|
|
|
if (typeof newNode.elm_event_node_ref === 'undefined')
|
|
{
|
|
newNode.elm_event_node_ref = domNode.elm_event_node_ref;
|
|
}
|
|
|
|
if (parentNode && newNode !== domNode)
|
|
{
|
|
parentNode.replaceChild(newNode, domNode);
|
|
}
|
|
return newNode;
|
|
}
|
|
|
|
|
|
|
|
//////////// PROGRAMS ////////////
|
|
|
|
|
|
function programWithFlags(details)
|
|
{
|
|
return {
|
|
init: details.init,
|
|
update: details.update,
|
|
subscriptions: details.subscriptions,
|
|
view: details.view,
|
|
renderer: renderer
|
|
};
|
|
}
|
|
|
|
|
|
return {
|
|
node: node,
|
|
text: text,
|
|
|
|
custom: custom,
|
|
|
|
map: F2(map),
|
|
|
|
on: F3(on),
|
|
style: style,
|
|
property: F2(property),
|
|
attribute: F2(attribute),
|
|
attributeNS: F3(attributeNS),
|
|
|
|
lazy: F2(lazy),
|
|
lazy2: F3(lazy2),
|
|
lazy3: F4(lazy3),
|
|
|
|
programWithFlags: programWithFlags
|
|
};
|
|
|
|
}();
|
|
var _elm_lang$virtual_dom$VirtualDom$programWithFlags = _elm_lang$virtual_dom$Native_VirtualDom.programWithFlags;
|
|
var _elm_lang$virtual_dom$VirtualDom$lazy3 = _elm_lang$virtual_dom$Native_VirtualDom.lazy3;
|
|
var _elm_lang$virtual_dom$VirtualDom$lazy2 = _elm_lang$virtual_dom$Native_VirtualDom.lazy2;
|
|
var _elm_lang$virtual_dom$VirtualDom$lazy = _elm_lang$virtual_dom$Native_VirtualDom.lazy;
|
|
var _elm_lang$virtual_dom$VirtualDom$defaultOptions = {stopPropagation: false, preventDefault: false};
|
|
var _elm_lang$virtual_dom$VirtualDom$onWithOptions = _elm_lang$virtual_dom$Native_VirtualDom.on;
|
|
var _elm_lang$virtual_dom$VirtualDom$on = F2(
|
|
function (eventName, decoder) {
|
|
return A3(_elm_lang$virtual_dom$VirtualDom$onWithOptions, eventName, _elm_lang$virtual_dom$VirtualDom$defaultOptions, decoder);
|
|
});
|
|
var _elm_lang$virtual_dom$VirtualDom$style = _elm_lang$virtual_dom$Native_VirtualDom.style;
|
|
var _elm_lang$virtual_dom$VirtualDom$attributeNS = _elm_lang$virtual_dom$Native_VirtualDom.attributeNS;
|
|
var _elm_lang$virtual_dom$VirtualDom$attribute = _elm_lang$virtual_dom$Native_VirtualDom.attribute;
|
|
var _elm_lang$virtual_dom$VirtualDom$property = _elm_lang$virtual_dom$Native_VirtualDom.property;
|
|
var _elm_lang$virtual_dom$VirtualDom$map = _elm_lang$virtual_dom$Native_VirtualDom.map;
|
|
var _elm_lang$virtual_dom$VirtualDom$text = _elm_lang$virtual_dom$Native_VirtualDom.text;
|
|
var _elm_lang$virtual_dom$VirtualDom$node = _elm_lang$virtual_dom$Native_VirtualDom.node;
|
|
var _elm_lang$virtual_dom$VirtualDom$Options = F2(
|
|
function (a, b) {
|
|
return {stopPropagation: a, preventDefault: b};
|
|
});
|
|
var _elm_lang$virtual_dom$VirtualDom$Node = {ctor: 'Node'};
|
|
var _elm_lang$virtual_dom$VirtualDom$Property = {ctor: 'Property'};
|
|
|
|
var _elm_lang$html$Html$text = _elm_lang$virtual_dom$VirtualDom$text;
|
|
var _elm_lang$html$Html$node = _elm_lang$virtual_dom$VirtualDom$node;
|
|
var _elm_lang$html$Html$body = _elm_lang$html$Html$node('body');
|
|
var _elm_lang$html$Html$section = _elm_lang$html$Html$node('section');
|
|
var _elm_lang$html$Html$nav = _elm_lang$html$Html$node('nav');
|
|
var _elm_lang$html$Html$article = _elm_lang$html$Html$node('article');
|
|
var _elm_lang$html$Html$aside = _elm_lang$html$Html$node('aside');
|
|
var _elm_lang$html$Html$h1 = _elm_lang$html$Html$node('h1');
|
|
var _elm_lang$html$Html$h2 = _elm_lang$html$Html$node('h2');
|
|
var _elm_lang$html$Html$h3 = _elm_lang$html$Html$node('h3');
|
|
var _elm_lang$html$Html$h4 = _elm_lang$html$Html$node('h4');
|
|
var _elm_lang$html$Html$h5 = _elm_lang$html$Html$node('h5');
|
|
var _elm_lang$html$Html$h6 = _elm_lang$html$Html$node('h6');
|
|
var _elm_lang$html$Html$header = _elm_lang$html$Html$node('header');
|
|
var _elm_lang$html$Html$footer = _elm_lang$html$Html$node('footer');
|
|
var _elm_lang$html$Html$address = _elm_lang$html$Html$node('address');
|
|
var _elm_lang$html$Html$main$ = _elm_lang$html$Html$node('main');
|
|
var _elm_lang$html$Html$p = _elm_lang$html$Html$node('p');
|
|
var _elm_lang$html$Html$hr = _elm_lang$html$Html$node('hr');
|
|
var _elm_lang$html$Html$pre = _elm_lang$html$Html$node('pre');
|
|
var _elm_lang$html$Html$blockquote = _elm_lang$html$Html$node('blockquote');
|
|
var _elm_lang$html$Html$ol = _elm_lang$html$Html$node('ol');
|
|
var _elm_lang$html$Html$ul = _elm_lang$html$Html$node('ul');
|
|
var _elm_lang$html$Html$li = _elm_lang$html$Html$node('li');
|
|
var _elm_lang$html$Html$dl = _elm_lang$html$Html$node('dl');
|
|
var _elm_lang$html$Html$dt = _elm_lang$html$Html$node('dt');
|
|
var _elm_lang$html$Html$dd = _elm_lang$html$Html$node('dd');
|
|
var _elm_lang$html$Html$figure = _elm_lang$html$Html$node('figure');
|
|
var _elm_lang$html$Html$figcaption = _elm_lang$html$Html$node('figcaption');
|
|
var _elm_lang$html$Html$div = _elm_lang$html$Html$node('div');
|
|
var _elm_lang$html$Html$a = _elm_lang$html$Html$node('a');
|
|
var _elm_lang$html$Html$em = _elm_lang$html$Html$node('em');
|
|
var _elm_lang$html$Html$strong = _elm_lang$html$Html$node('strong');
|
|
var _elm_lang$html$Html$small = _elm_lang$html$Html$node('small');
|
|
var _elm_lang$html$Html$s = _elm_lang$html$Html$node('s');
|
|
var _elm_lang$html$Html$cite = _elm_lang$html$Html$node('cite');
|
|
var _elm_lang$html$Html$q = _elm_lang$html$Html$node('q');
|
|
var _elm_lang$html$Html$dfn = _elm_lang$html$Html$node('dfn');
|
|
var _elm_lang$html$Html$abbr = _elm_lang$html$Html$node('abbr');
|
|
var _elm_lang$html$Html$time = _elm_lang$html$Html$node('time');
|
|
var _elm_lang$html$Html$code = _elm_lang$html$Html$node('code');
|
|
var _elm_lang$html$Html$var = _elm_lang$html$Html$node('var');
|
|
var _elm_lang$html$Html$samp = _elm_lang$html$Html$node('samp');
|
|
var _elm_lang$html$Html$kbd = _elm_lang$html$Html$node('kbd');
|
|
var _elm_lang$html$Html$sub = _elm_lang$html$Html$node('sub');
|
|
var _elm_lang$html$Html$sup = _elm_lang$html$Html$node('sup');
|
|
var _elm_lang$html$Html$i = _elm_lang$html$Html$node('i');
|
|
var _elm_lang$html$Html$b = _elm_lang$html$Html$node('b');
|
|
var _elm_lang$html$Html$u = _elm_lang$html$Html$node('u');
|
|
var _elm_lang$html$Html$mark = _elm_lang$html$Html$node('mark');
|
|
var _elm_lang$html$Html$ruby = _elm_lang$html$Html$node('ruby');
|
|
var _elm_lang$html$Html$rt = _elm_lang$html$Html$node('rt');
|
|
var _elm_lang$html$Html$rp = _elm_lang$html$Html$node('rp');
|
|
var _elm_lang$html$Html$bdi = _elm_lang$html$Html$node('bdi');
|
|
var _elm_lang$html$Html$bdo = _elm_lang$html$Html$node('bdo');
|
|
var _elm_lang$html$Html$span = _elm_lang$html$Html$node('span');
|
|
var _elm_lang$html$Html$br = _elm_lang$html$Html$node('br');
|
|
var _elm_lang$html$Html$wbr = _elm_lang$html$Html$node('wbr');
|
|
var _elm_lang$html$Html$ins = _elm_lang$html$Html$node('ins');
|
|
var _elm_lang$html$Html$del = _elm_lang$html$Html$node('del');
|
|
var _elm_lang$html$Html$img = _elm_lang$html$Html$node('img');
|
|
var _elm_lang$html$Html$iframe = _elm_lang$html$Html$node('iframe');
|
|
var _elm_lang$html$Html$embed = _elm_lang$html$Html$node('embed');
|
|
var _elm_lang$html$Html$object = _elm_lang$html$Html$node('object');
|
|
var _elm_lang$html$Html$param = _elm_lang$html$Html$node('param');
|
|
var _elm_lang$html$Html$video = _elm_lang$html$Html$node('video');
|
|
var _elm_lang$html$Html$audio = _elm_lang$html$Html$node('audio');
|
|
var _elm_lang$html$Html$source = _elm_lang$html$Html$node('source');
|
|
var _elm_lang$html$Html$track = _elm_lang$html$Html$node('track');
|
|
var _elm_lang$html$Html$canvas = _elm_lang$html$Html$node('canvas');
|
|
var _elm_lang$html$Html$svg = _elm_lang$html$Html$node('svg');
|
|
var _elm_lang$html$Html$math = _elm_lang$html$Html$node('math');
|
|
var _elm_lang$html$Html$table = _elm_lang$html$Html$node('table');
|
|
var _elm_lang$html$Html$caption = _elm_lang$html$Html$node('caption');
|
|
var _elm_lang$html$Html$colgroup = _elm_lang$html$Html$node('colgroup');
|
|
var _elm_lang$html$Html$col = _elm_lang$html$Html$node('col');
|
|
var _elm_lang$html$Html$tbody = _elm_lang$html$Html$node('tbody');
|
|
var _elm_lang$html$Html$thead = _elm_lang$html$Html$node('thead');
|
|
var _elm_lang$html$Html$tfoot = _elm_lang$html$Html$node('tfoot');
|
|
var _elm_lang$html$Html$tr = _elm_lang$html$Html$node('tr');
|
|
var _elm_lang$html$Html$td = _elm_lang$html$Html$node('td');
|
|
var _elm_lang$html$Html$th = _elm_lang$html$Html$node('th');
|
|
var _elm_lang$html$Html$form = _elm_lang$html$Html$node('form');
|
|
var _elm_lang$html$Html$fieldset = _elm_lang$html$Html$node('fieldset');
|
|
var _elm_lang$html$Html$legend = _elm_lang$html$Html$node('legend');
|
|
var _elm_lang$html$Html$label = _elm_lang$html$Html$node('label');
|
|
var _elm_lang$html$Html$input = _elm_lang$html$Html$node('input');
|
|
var _elm_lang$html$Html$button = _elm_lang$html$Html$node('button');
|
|
var _elm_lang$html$Html$select = _elm_lang$html$Html$node('select');
|
|
var _elm_lang$html$Html$datalist = _elm_lang$html$Html$node('datalist');
|
|
var _elm_lang$html$Html$optgroup = _elm_lang$html$Html$node('optgroup');
|
|
var _elm_lang$html$Html$option = _elm_lang$html$Html$node('option');
|
|
var _elm_lang$html$Html$textarea = _elm_lang$html$Html$node('textarea');
|
|
var _elm_lang$html$Html$keygen = _elm_lang$html$Html$node('keygen');
|
|
var _elm_lang$html$Html$output = _elm_lang$html$Html$node('output');
|
|
var _elm_lang$html$Html$progress = _elm_lang$html$Html$node('progress');
|
|
var _elm_lang$html$Html$meter = _elm_lang$html$Html$node('meter');
|
|
var _elm_lang$html$Html$details = _elm_lang$html$Html$node('details');
|
|
var _elm_lang$html$Html$summary = _elm_lang$html$Html$node('summary');
|
|
var _elm_lang$html$Html$menuitem = _elm_lang$html$Html$node('menuitem');
|
|
var _elm_lang$html$Html$menu = _elm_lang$html$Html$node('menu');
|
|
|
|
var _elm_lang$html$Html_App$programWithFlags = _elm_lang$virtual_dom$VirtualDom$programWithFlags;
|
|
var _elm_lang$html$Html_App$program = function (app) {
|
|
return _elm_lang$html$Html_App$programWithFlags(
|
|
_elm_lang$core$Native_Utils.update(
|
|
app,
|
|
{
|
|
init: function (_p0) {
|
|
return app.init;
|
|
}
|
|
}));
|
|
};
|
|
var _elm_lang$html$Html_App$beginnerProgram = function (_p1) {
|
|
var _p2 = _p1;
|
|
return _elm_lang$html$Html_App$programWithFlags(
|
|
{
|
|
init: function (_p3) {
|
|
return A2(
|
|
_elm_lang$core$Platform_Cmd_ops['!'],
|
|
_p2.model,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]));
|
|
},
|
|
update: F2(
|
|
function (msg, model) {
|
|
return A2(
|
|
_elm_lang$core$Platform_Cmd_ops['!'],
|
|
A2(_p2.update, msg, model),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]));
|
|
}),
|
|
view: _p2.view,
|
|
subscriptions: function (_p4) {
|
|
return _elm_lang$core$Platform_Sub$none;
|
|
}
|
|
});
|
|
};
|
|
var _elm_lang$html$Html_App$map = _elm_lang$virtual_dom$VirtualDom$map;
|
|
|
|
var _elm_lang$core$Task$onError = _elm_lang$core$Native_Scheduler.onError;
|
|
var _elm_lang$core$Task$andThen = _elm_lang$core$Native_Scheduler.andThen;
|
|
var _elm_lang$core$Task$spawnCmd = F2(
|
|
function (router, _p0) {
|
|
var _p1 = _p0;
|
|
return _elm_lang$core$Native_Scheduler.spawn(
|
|
A2(
|
|
_elm_lang$core$Task$andThen,
|
|
_p1._0,
|
|
_elm_lang$core$Platform$sendToApp(router)));
|
|
});
|
|
var _elm_lang$core$Task$fail = _elm_lang$core$Native_Scheduler.fail;
|
|
var _elm_lang$core$Task$mapError = F2(
|
|
function (f, task) {
|
|
return A2(
|
|
_elm_lang$core$Task$onError,
|
|
task,
|
|
function (err) {
|
|
return _elm_lang$core$Task$fail(
|
|
f(err));
|
|
});
|
|
});
|
|
var _elm_lang$core$Task$succeed = _elm_lang$core$Native_Scheduler.succeed;
|
|
var _elm_lang$core$Task$map = F2(
|
|
function (func, taskA) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
taskA,
|
|
function (a) {
|
|
return _elm_lang$core$Task$succeed(
|
|
func(a));
|
|
});
|
|
});
|
|
var _elm_lang$core$Task$map2 = F3(
|
|
function (func, taskA, taskB) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
taskA,
|
|
function (a) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
taskB,
|
|
function (b) {
|
|
return _elm_lang$core$Task$succeed(
|
|
A2(func, a, b));
|
|
});
|
|
});
|
|
});
|
|
var _elm_lang$core$Task$map3 = F4(
|
|
function (func, taskA, taskB, taskC) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
taskA,
|
|
function (a) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
taskB,
|
|
function (b) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
taskC,
|
|
function (c) {
|
|
return _elm_lang$core$Task$succeed(
|
|
A3(func, a, b, c));
|
|
});
|
|
});
|
|
});
|
|
});
|
|
var _elm_lang$core$Task$map4 = F5(
|
|
function (func, taskA, taskB, taskC, taskD) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
taskA,
|
|
function (a) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
taskB,
|
|
function (b) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
taskC,
|
|
function (c) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
taskD,
|
|
function (d) {
|
|
return _elm_lang$core$Task$succeed(
|
|
A4(func, a, b, c, d));
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
var _elm_lang$core$Task$map5 = F6(
|
|
function (func, taskA, taskB, taskC, taskD, taskE) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
taskA,
|
|
function (a) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
taskB,
|
|
function (b) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
taskC,
|
|
function (c) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
taskD,
|
|
function (d) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
taskE,
|
|
function (e) {
|
|
return _elm_lang$core$Task$succeed(
|
|
A5(func, a, b, c, d, e));
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
var _elm_lang$core$Task$andMap = F2(
|
|
function (taskFunc, taskValue) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
taskFunc,
|
|
function (func) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
taskValue,
|
|
function (value) {
|
|
return _elm_lang$core$Task$succeed(
|
|
func(value));
|
|
});
|
|
});
|
|
});
|
|
var _elm_lang$core$Task$sequence = function (tasks) {
|
|
var _p2 = tasks;
|
|
if (_p2.ctor === '[]') {
|
|
return _elm_lang$core$Task$succeed(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]));
|
|
} else {
|
|
return A3(
|
|
_elm_lang$core$Task$map2,
|
|
F2(
|
|
function (x, y) {
|
|
return A2(_elm_lang$core$List_ops['::'], x, y);
|
|
}),
|
|
_p2._0,
|
|
_elm_lang$core$Task$sequence(_p2._1));
|
|
}
|
|
};
|
|
var _elm_lang$core$Task$onEffects = F3(
|
|
function (router, commands, state) {
|
|
return A2(
|
|
_elm_lang$core$Task$map,
|
|
function (_p3) {
|
|
return {ctor: '_Tuple0'};
|
|
},
|
|
_elm_lang$core$Task$sequence(
|
|
A2(
|
|
_elm_lang$core$List$map,
|
|
_elm_lang$core$Task$spawnCmd(router),
|
|
commands)));
|
|
});
|
|
var _elm_lang$core$Task$toMaybe = function (task) {
|
|
return A2(
|
|
_elm_lang$core$Task$onError,
|
|
A2(_elm_lang$core$Task$map, _elm_lang$core$Maybe$Just, task),
|
|
function (_p4) {
|
|
return _elm_lang$core$Task$succeed(_elm_lang$core$Maybe$Nothing);
|
|
});
|
|
};
|
|
var _elm_lang$core$Task$fromMaybe = F2(
|
|
function ($default, maybe) {
|
|
var _p5 = maybe;
|
|
if (_p5.ctor === 'Just') {
|
|
return _elm_lang$core$Task$succeed(_p5._0);
|
|
} else {
|
|
return _elm_lang$core$Task$fail($default);
|
|
}
|
|
});
|
|
var _elm_lang$core$Task$toResult = function (task) {
|
|
return A2(
|
|
_elm_lang$core$Task$onError,
|
|
A2(_elm_lang$core$Task$map, _elm_lang$core$Result$Ok, task),
|
|
function (msg) {
|
|
return _elm_lang$core$Task$succeed(
|
|
_elm_lang$core$Result$Err(msg));
|
|
});
|
|
};
|
|
var _elm_lang$core$Task$fromResult = function (result) {
|
|
var _p6 = result;
|
|
if (_p6.ctor === 'Ok') {
|
|
return _elm_lang$core$Task$succeed(_p6._0);
|
|
} else {
|
|
return _elm_lang$core$Task$fail(_p6._0);
|
|
}
|
|
};
|
|
var _elm_lang$core$Task$init = _elm_lang$core$Task$succeed(
|
|
{ctor: '_Tuple0'});
|
|
var _elm_lang$core$Task$onSelfMsg = F3(
|
|
function (_p9, _p8, _p7) {
|
|
return _elm_lang$core$Task$succeed(
|
|
{ctor: '_Tuple0'});
|
|
});
|
|
var _elm_lang$core$Task$command = _elm_lang$core$Native_Platform.leaf('Task');
|
|
var _elm_lang$core$Task$T = function (a) {
|
|
return {ctor: 'T', _0: a};
|
|
};
|
|
var _elm_lang$core$Task$perform = F3(
|
|
function (onFail, onSuccess, task) {
|
|
return _elm_lang$core$Task$command(
|
|
_elm_lang$core$Task$T(
|
|
A2(
|
|
_elm_lang$core$Task$onError,
|
|
A2(_elm_lang$core$Task$map, onSuccess, task),
|
|
function (x) {
|
|
return _elm_lang$core$Task$succeed(
|
|
onFail(x));
|
|
})));
|
|
});
|
|
var _elm_lang$core$Task$cmdMap = F2(
|
|
function (tagger, _p10) {
|
|
var _p11 = _p10;
|
|
return _elm_lang$core$Task$T(
|
|
A2(_elm_lang$core$Task$map, tagger, _p11._0));
|
|
});
|
|
_elm_lang$core$Native_Platform.effectManagers['Task'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Task$init, onEffects: _elm_lang$core$Task$onEffects, onSelfMsg: _elm_lang$core$Task$onSelfMsg, tag: 'cmd', cmdMap: _elm_lang$core$Task$cmdMap};
|
|
|
|
//import Native.Scheduler //
|
|
|
|
var _elm_lang$core$Native_Time = function() {
|
|
|
|
var now = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)
|
|
{
|
|
callback(_elm_lang$core$Native_Scheduler.succeed(Date.now()));
|
|
});
|
|
|
|
function setInterval_(interval, task)
|
|
{
|
|
return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)
|
|
{
|
|
var id = setInterval(function() {
|
|
_elm_lang$core$Native_Scheduler.rawSpawn(task);
|
|
}, interval);
|
|
|
|
return function() { clearInterval(id); };
|
|
});
|
|
}
|
|
|
|
return {
|
|
now: now,
|
|
setInterval_: F2(setInterval_)
|
|
};
|
|
|
|
}();
|
|
var _elm_lang$core$Time$setInterval = _elm_lang$core$Native_Time.setInterval_;
|
|
var _elm_lang$core$Time$spawnHelp = F3(
|
|
function (router, intervals, processes) {
|
|
var _p0 = intervals;
|
|
if (_p0.ctor === '[]') {
|
|
return _elm_lang$core$Task$succeed(processes);
|
|
} else {
|
|
var _p1 = _p0._0;
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
_elm_lang$core$Native_Scheduler.spawn(
|
|
A2(
|
|
_elm_lang$core$Time$setInterval,
|
|
_p1,
|
|
A2(_elm_lang$core$Platform$sendToSelf, router, _p1))),
|
|
function (id) {
|
|
return A3(
|
|
_elm_lang$core$Time$spawnHelp,
|
|
router,
|
|
_p0._1,
|
|
A3(_elm_lang$core$Dict$insert, _p1, id, processes));
|
|
});
|
|
}
|
|
});
|
|
var _elm_lang$core$Time$addMySub = F2(
|
|
function (_p2, state) {
|
|
var _p3 = _p2;
|
|
var _p6 = _p3._1;
|
|
var _p5 = _p3._0;
|
|
var _p4 = A2(_elm_lang$core$Dict$get, _p5, state);
|
|
if (_p4.ctor === 'Nothing') {
|
|
return A3(
|
|
_elm_lang$core$Dict$insert,
|
|
_p5,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[_p6]),
|
|
state);
|
|
} else {
|
|
return A3(
|
|
_elm_lang$core$Dict$insert,
|
|
_p5,
|
|
A2(_elm_lang$core$List_ops['::'], _p6, _p4._0),
|
|
state);
|
|
}
|
|
});
|
|
var _elm_lang$core$Time$inMilliseconds = function (t) {
|
|
return t;
|
|
};
|
|
var _elm_lang$core$Time$millisecond = 1;
|
|
var _elm_lang$core$Time$second = 1000 * _elm_lang$core$Time$millisecond;
|
|
var _elm_lang$core$Time$minute = 60 * _elm_lang$core$Time$second;
|
|
var _elm_lang$core$Time$hour = 60 * _elm_lang$core$Time$minute;
|
|
var _elm_lang$core$Time$inHours = function (t) {
|
|
return t / _elm_lang$core$Time$hour;
|
|
};
|
|
var _elm_lang$core$Time$inMinutes = function (t) {
|
|
return t / _elm_lang$core$Time$minute;
|
|
};
|
|
var _elm_lang$core$Time$inSeconds = function (t) {
|
|
return t / _elm_lang$core$Time$second;
|
|
};
|
|
var _elm_lang$core$Time$now = _elm_lang$core$Native_Time.now;
|
|
var _elm_lang$core$Time$onSelfMsg = F3(
|
|
function (router, interval, state) {
|
|
var _p7 = A2(_elm_lang$core$Dict$get, interval, state.taggers);
|
|
if (_p7.ctor === 'Nothing') {
|
|
return _elm_lang$core$Task$succeed(state);
|
|
} else {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
_elm_lang$core$Time$now,
|
|
function (time) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
_elm_lang$core$Task$sequence(
|
|
A2(
|
|
_elm_lang$core$List$map,
|
|
function (tagger) {
|
|
return A2(
|
|
_elm_lang$core$Platform$sendToApp,
|
|
router,
|
|
tagger(time));
|
|
},
|
|
_p7._0)),
|
|
function (_p8) {
|
|
return _elm_lang$core$Task$succeed(state);
|
|
});
|
|
});
|
|
}
|
|
});
|
|
var _elm_lang$core$Time$subscription = _elm_lang$core$Native_Platform.leaf('Time');
|
|
var _elm_lang$core$Time$State = F2(
|
|
function (a, b) {
|
|
return {taggers: a, processes: b};
|
|
});
|
|
var _elm_lang$core$Time$init = _elm_lang$core$Task$succeed(
|
|
A2(_elm_lang$core$Time$State, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty));
|
|
var _elm_lang$core$Time$onEffects = F3(
|
|
function (router, subs, _p9) {
|
|
var _p10 = _p9;
|
|
var rightStep = F3(
|
|
function (_p12, id, _p11) {
|
|
var _p13 = _p11;
|
|
return {
|
|
ctor: '_Tuple3',
|
|
_0: _p13._0,
|
|
_1: _p13._1,
|
|
_2: A2(
|
|
_elm_lang$core$Task$andThen,
|
|
_elm_lang$core$Native_Scheduler.kill(id),
|
|
function (_p14) {
|
|
return _p13._2;
|
|
})
|
|
};
|
|
});
|
|
var bothStep = F4(
|
|
function (interval, taggers, id, _p15) {
|
|
var _p16 = _p15;
|
|
return {
|
|
ctor: '_Tuple3',
|
|
_0: _p16._0,
|
|
_1: A3(_elm_lang$core$Dict$insert, interval, id, _p16._1),
|
|
_2: _p16._2
|
|
};
|
|
});
|
|
var leftStep = F3(
|
|
function (interval, taggers, _p17) {
|
|
var _p18 = _p17;
|
|
return {
|
|
ctor: '_Tuple3',
|
|
_0: A2(_elm_lang$core$List_ops['::'], interval, _p18._0),
|
|
_1: _p18._1,
|
|
_2: _p18._2
|
|
};
|
|
});
|
|
var newTaggers = A3(_elm_lang$core$List$foldl, _elm_lang$core$Time$addMySub, _elm_lang$core$Dict$empty, subs);
|
|
var _p19 = A6(
|
|
_elm_lang$core$Dict$merge,
|
|
leftStep,
|
|
bothStep,
|
|
rightStep,
|
|
newTaggers,
|
|
_p10.processes,
|
|
{
|
|
ctor: '_Tuple3',
|
|
_0: _elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_1: _elm_lang$core$Dict$empty,
|
|
_2: _elm_lang$core$Task$succeed(
|
|
{ctor: '_Tuple0'})
|
|
});
|
|
var spawnList = _p19._0;
|
|
var existingDict = _p19._1;
|
|
var killTask = _p19._2;
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
killTask,
|
|
function (_p20) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
A3(_elm_lang$core$Time$spawnHelp, router, spawnList, existingDict),
|
|
function (newProcesses) {
|
|
return _elm_lang$core$Task$succeed(
|
|
A2(_elm_lang$core$Time$State, newTaggers, newProcesses));
|
|
});
|
|
});
|
|
});
|
|
var _elm_lang$core$Time$Every = F2(
|
|
function (a, b) {
|
|
return {ctor: 'Every', _0: a, _1: b};
|
|
});
|
|
var _elm_lang$core$Time$every = F2(
|
|
function (interval, tagger) {
|
|
return _elm_lang$core$Time$subscription(
|
|
A2(_elm_lang$core$Time$Every, interval, tagger));
|
|
});
|
|
var _elm_lang$core$Time$subMap = F2(
|
|
function (f, _p21) {
|
|
var _p22 = _p21;
|
|
return A2(
|
|
_elm_lang$core$Time$Every,
|
|
_p22._0,
|
|
function (_p23) {
|
|
return f(
|
|
_p22._1(_p23));
|
|
});
|
|
});
|
|
_elm_lang$core$Native_Platform.effectManagers['Time'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Time$init, onEffects: _elm_lang$core$Time$onEffects, onSelfMsg: _elm_lang$core$Time$onSelfMsg, tag: 'sub', subMap: _elm_lang$core$Time$subMap};
|
|
|
|
var _elm_lang$core$Process$kill = _elm_lang$core$Native_Scheduler.kill;
|
|
var _elm_lang$core$Process$sleep = _elm_lang$core$Native_Scheduler.sleep;
|
|
var _elm_lang$core$Process$spawn = _elm_lang$core$Native_Scheduler.spawn;
|
|
|
|
var _elm_lang$html$Html_Events$keyCode = A2(_elm_lang$core$Json_Decode_ops[':='], 'keyCode', _elm_lang$core$Json_Decode$int);
|
|
var _elm_lang$html$Html_Events$targetChecked = A2(
|
|
_elm_lang$core$Json_Decode$at,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
['target', 'checked']),
|
|
_elm_lang$core$Json_Decode$bool);
|
|
var _elm_lang$html$Html_Events$targetValue = A2(
|
|
_elm_lang$core$Json_Decode$at,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
['target', 'value']),
|
|
_elm_lang$core$Json_Decode$string);
|
|
var _elm_lang$html$Html_Events$defaultOptions = _elm_lang$virtual_dom$VirtualDom$defaultOptions;
|
|
var _elm_lang$html$Html_Events$onWithOptions = _elm_lang$virtual_dom$VirtualDom$onWithOptions;
|
|
var _elm_lang$html$Html_Events$on = _elm_lang$virtual_dom$VirtualDom$on;
|
|
var _elm_lang$html$Html_Events$onFocus = function (msg) {
|
|
return A2(
|
|
_elm_lang$html$Html_Events$on,
|
|
'focus',
|
|
_elm_lang$core$Json_Decode$succeed(msg));
|
|
};
|
|
var _elm_lang$html$Html_Events$onBlur = function (msg) {
|
|
return A2(
|
|
_elm_lang$html$Html_Events$on,
|
|
'blur',
|
|
_elm_lang$core$Json_Decode$succeed(msg));
|
|
};
|
|
var _elm_lang$html$Html_Events$onSubmitOptions = _elm_lang$core$Native_Utils.update(
|
|
_elm_lang$html$Html_Events$defaultOptions,
|
|
{preventDefault: true});
|
|
var _elm_lang$html$Html_Events$onSubmit = function (msg) {
|
|
return A3(
|
|
_elm_lang$html$Html_Events$onWithOptions,
|
|
'submit',
|
|
_elm_lang$html$Html_Events$onSubmitOptions,
|
|
_elm_lang$core$Json_Decode$succeed(msg));
|
|
};
|
|
var _elm_lang$html$Html_Events$onCheck = function (tagger) {
|
|
return A2(
|
|
_elm_lang$html$Html_Events$on,
|
|
'change',
|
|
A2(_elm_lang$core$Json_Decode$map, tagger, _elm_lang$html$Html_Events$targetChecked));
|
|
};
|
|
var _elm_lang$html$Html_Events$onInput = function (tagger) {
|
|
return A2(
|
|
_elm_lang$html$Html_Events$on,
|
|
'input',
|
|
A2(_elm_lang$core$Json_Decode$map, tagger, _elm_lang$html$Html_Events$targetValue));
|
|
};
|
|
var _elm_lang$html$Html_Events$onMouseOut = function (msg) {
|
|
return A2(
|
|
_elm_lang$html$Html_Events$on,
|
|
'mouseout',
|
|
_elm_lang$core$Json_Decode$succeed(msg));
|
|
};
|
|
var _elm_lang$html$Html_Events$onMouseOver = function (msg) {
|
|
return A2(
|
|
_elm_lang$html$Html_Events$on,
|
|
'mouseover',
|
|
_elm_lang$core$Json_Decode$succeed(msg));
|
|
};
|
|
var _elm_lang$html$Html_Events$onMouseLeave = function (msg) {
|
|
return A2(
|
|
_elm_lang$html$Html_Events$on,
|
|
'mouseleave',
|
|
_elm_lang$core$Json_Decode$succeed(msg));
|
|
};
|
|
var _elm_lang$html$Html_Events$onMouseEnter = function (msg) {
|
|
return A2(
|
|
_elm_lang$html$Html_Events$on,
|
|
'mouseenter',
|
|
_elm_lang$core$Json_Decode$succeed(msg));
|
|
};
|
|
var _elm_lang$html$Html_Events$onMouseUp = function (msg) {
|
|
return A2(
|
|
_elm_lang$html$Html_Events$on,
|
|
'mouseup',
|
|
_elm_lang$core$Json_Decode$succeed(msg));
|
|
};
|
|
var _elm_lang$html$Html_Events$onMouseDown = function (msg) {
|
|
return A2(
|
|
_elm_lang$html$Html_Events$on,
|
|
'mousedown',
|
|
_elm_lang$core$Json_Decode$succeed(msg));
|
|
};
|
|
var _elm_lang$html$Html_Events$onDoubleClick = function (msg) {
|
|
return A2(
|
|
_elm_lang$html$Html_Events$on,
|
|
'dblclick',
|
|
_elm_lang$core$Json_Decode$succeed(msg));
|
|
};
|
|
var _elm_lang$html$Html_Events$onClick = function (msg) {
|
|
return A2(
|
|
_elm_lang$html$Html_Events$on,
|
|
'click',
|
|
_elm_lang$core$Json_Decode$succeed(msg));
|
|
};
|
|
var _elm_lang$html$Html_Events$Options = F2(
|
|
function (a, b) {
|
|
return {stopPropagation: a, preventDefault: b};
|
|
});
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Util$ifIdDecoder = A2(
|
|
_elm_lang$core$Json_Decode$at,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
['target', 'id']),
|
|
_elm_lang$core$Json_Decode$string);
|
|
var _Lattyware$massivedecks$MassiveDecks_Util$onClickIfId = F3(
|
|
function (targetId, message, noOp) {
|
|
return A2(
|
|
_elm_lang$html$Html_Events$on,
|
|
'click',
|
|
A2(
|
|
_elm_lang$core$Json_Decode$map,
|
|
function (clickedId) {
|
|
return _elm_lang$core$Native_Utils.eq(clickedId, targetId) ? message : noOp;
|
|
},
|
|
_Lattyware$massivedecks$MassiveDecks_Util$ifIdDecoder));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Util$onKeyDown = F3(
|
|
function (key, message, noOp) {
|
|
return A2(
|
|
_elm_lang$html$Html_Events$on,
|
|
'keydown',
|
|
A2(
|
|
_elm_lang$core$Json_Decode$map,
|
|
function (pressed) {
|
|
return _elm_lang$core$Native_Utils.eq(pressed, key) ? message : noOp;
|
|
},
|
|
A2(
|
|
_elm_lang$core$Json_Decode$at,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
['key']),
|
|
_elm_lang$core$Json_Decode$string)));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Util$isNothing = function (m) {
|
|
var _p0 = m;
|
|
if (_p0.ctor === 'Just') {
|
|
return false;
|
|
} else {
|
|
return true;
|
|
}
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Util$after = F2(
|
|
function (waitFor, task) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
_elm_lang$core$Process$sleep(waitFor),
|
|
function (_p1) {
|
|
return task;
|
|
});
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Util$apply = F2(
|
|
function (fs, value) {
|
|
return A2(
|
|
_elm_lang$core$List$map,
|
|
function (f) {
|
|
return f(value);
|
|
},
|
|
fs);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Util$joinWithAnd = function (items) {
|
|
var _p2 = items;
|
|
if (_p2.ctor === '[]') {
|
|
return _elm_lang$core$Maybe$Nothing;
|
|
} else {
|
|
if (_p2._1.ctor === '[]') {
|
|
return _elm_lang$core$Maybe$Just(_p2._0);
|
|
} else {
|
|
if (_p2._1._1.ctor === '[]') {
|
|
return _elm_lang$core$Maybe$Just(
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_p2._0,
|
|
A2(_elm_lang$core$Basics_ops['++'], ' and ', _p2._1._0)));
|
|
} else {
|
|
return _elm_lang$core$Maybe$Just(
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_p2._0,
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
', ',
|
|
A2(
|
|
_elm_lang$core$Maybe$withDefault,
|
|
'',
|
|
_Lattyware$massivedecks$MassiveDecks_Util$joinWithAnd(_p2._1)))));
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Util$pluralHas = function (items) {
|
|
var _p3 = _elm_lang$core$List$length(items);
|
|
if (_p3 === 1) {
|
|
return 'has';
|
|
} else {
|
|
return 'have';
|
|
}
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Util$mapFirst = F2(
|
|
function (f, xs) {
|
|
return A2(
|
|
_elm_lang$core$List$indexedMap,
|
|
F2(
|
|
function (index, x) {
|
|
return _elm_lang$core$Native_Utils.eq(index, 0) ? f(x) : x;
|
|
}),
|
|
xs);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Util$firstLetterToUpper = function (str) {
|
|
return A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_elm_lang$core$String$toUpper(
|
|
A2(_elm_lang$core$String$left, 1, str)),
|
|
A2(_elm_lang$core$String$dropLeft, 1, str));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Util$get = F2(
|
|
function (list, index) {
|
|
var _p4 = A2(_elm_lang$core$List$drop, index, list);
|
|
if (_p4.ctor === '[]') {
|
|
return _elm_lang$core$Maybe$Nothing;
|
|
} else {
|
|
return _elm_lang$core$Maybe$Just(_p4._0);
|
|
}
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Util$getAll = F2(
|
|
function (list, indices) {
|
|
return A2(
|
|
_elm_lang$core$List$filterMap,
|
|
_Lattyware$massivedecks$MassiveDecks_Util$get(list),
|
|
indices);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Util$getAllWithIndex = F2(
|
|
function (list, indices) {
|
|
return A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Util$getAll,
|
|
A2(
|
|
_elm_lang$core$List$indexedMap,
|
|
F2(
|
|
function (v0, v1) {
|
|
return {ctor: '_Tuple2', _0: v0, _1: v1};
|
|
}),
|
|
list),
|
|
indices);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Util_ops = _Lattyware$massivedecks$MassiveDecks_Util_ops || {};
|
|
_Lattyware$massivedecks$MassiveDecks_Util_ops[':>'] = F3(
|
|
function (a, b, model) {
|
|
var _p5 = a(model);
|
|
var aModel = _p5._0;
|
|
var aMsg = _p5._1;
|
|
var _p6 = b(aModel);
|
|
var bModel = _p6._0;
|
|
var bMsg = _p6._1;
|
|
return A2(
|
|
_elm_lang$core$Platform_Cmd_ops['!'],
|
|
bModel,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[aMsg, bMsg]));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Util$cmd = function (message) {
|
|
return A3(
|
|
_elm_lang$core$Task$perform,
|
|
_elm_lang$core$Basics$identity,
|
|
function (_p7) {
|
|
return message;
|
|
},
|
|
_elm_lang$core$Task$succeed(message));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Util$lobbyUrl = F2(
|
|
function (url, lobbyId) {
|
|
return A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
url,
|
|
A2(_elm_lang$core$Basics_ops['++'], '#', lobbyId));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Util$interleave = F2(
|
|
function (list1, list2) {
|
|
var _p8 = list1;
|
|
if (_p8.ctor === '[]') {
|
|
return list2;
|
|
} else {
|
|
var _p9 = list2;
|
|
if (_p9.ctor === '[]') {
|
|
return list1;
|
|
} else {
|
|
return A2(
|
|
_elm_lang$core$List_ops['::'],
|
|
_p9._0,
|
|
A2(
|
|
_elm_lang$core$List_ops['::'],
|
|
_p8._0,
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Util$interleave, _p8._1, _p9._1)));
|
|
}
|
|
}
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Util$find = F2(
|
|
function (check, items) {
|
|
return _elm_lang$core$List$head(
|
|
A2(_elm_lang$core$List$filter, check, items));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Util$andMaybe = F2(
|
|
function (values, maybeExtra) {
|
|
return A2(
|
|
_elm_lang$core$List$append,
|
|
values,
|
|
A2(
|
|
_elm_lang$core$Maybe$withDefault,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
A2(
|
|
_elm_lang$core$Maybe$map,
|
|
function (value) {
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[value]);
|
|
},
|
|
maybeExtra)));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Util$impossible = function (n) {
|
|
impossible:
|
|
while (true) {
|
|
var _v6 = n;
|
|
n = _v6;
|
|
continue impossible;
|
|
}
|
|
};
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Player$byId = F2(
|
|
function (id, players) {
|
|
return A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Util$find,
|
|
function (player) {
|
|
return _elm_lang$core$Native_Utils.eq(player.id, id);
|
|
},
|
|
players);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Player$statusName = function (status) {
|
|
var _p0 = status;
|
|
switch (_p0.ctor) {
|
|
case 'NotPlayed':
|
|
return 'not-played';
|
|
case 'Played':
|
|
return 'played';
|
|
case 'Czar':
|
|
return 'czar';
|
|
case 'Ai':
|
|
return 'ai';
|
|
case 'Neutral':
|
|
return 'neutral';
|
|
default:
|
|
return 'skipping';
|
|
}
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Player$Player = F6(
|
|
function (a, b, c, d, e, f) {
|
|
return {id: a, name: b, status: c, score: d, disconnected: e, left: f};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Player$PlayedByAndWinner = F2(
|
|
function (a, b) {
|
|
return {playedBy: a, winner: b};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Player$Secret = F2(
|
|
function (a, b) {
|
|
return {id: a, secret: b};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Player$Skipping = {ctor: 'Skipping'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Player$Neutral = {ctor: 'Neutral'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Player$Ai = {ctor: 'Ai'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Player$Czar = {ctor: 'Czar'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Player$Played = {ctor: 'Played'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Player$NotPlayed = {ctor: 'NotPlayed'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Player$nameToStatus = function (name) {
|
|
var _p1 = name;
|
|
switch (_p1) {
|
|
case 'not-played':
|
|
return _elm_lang$core$Maybe$Just(_Lattyware$massivedecks$MassiveDecks_Models_Player$NotPlayed);
|
|
case 'played':
|
|
return _elm_lang$core$Maybe$Just(_Lattyware$massivedecks$MassiveDecks_Models_Player$Played);
|
|
case 'czar':
|
|
return _elm_lang$core$Maybe$Just(_Lattyware$massivedecks$MassiveDecks_Models_Player$Czar);
|
|
case 'ai':
|
|
return _elm_lang$core$Maybe$Just(_Lattyware$massivedecks$MassiveDecks_Models_Player$Ai);
|
|
case 'neutral':
|
|
return _elm_lang$core$Maybe$Just(_Lattyware$massivedecks$MassiveDecks_Models_Player$Neutral);
|
|
case 'skipping':
|
|
return _elm_lang$core$Maybe$Just(_Lattyware$massivedecks$MassiveDecks_Models_Player$Skipping);
|
|
default:
|
|
return _elm_lang$core$Maybe$Nothing;
|
|
}
|
|
};
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Card$playedCardsByPlayer = F2(
|
|
function (players, cards) {
|
|
return _elm_lang$core$Dict$fromList(
|
|
A3(
|
|
_elm_lang$core$List$map2,
|
|
F2(
|
|
function (v0, v1) {
|
|
return {ctor: '_Tuple2', _0: v0, _1: v1};
|
|
}),
|
|
players,
|
|
cards));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Card$winningCards = F2(
|
|
function (cards, playedByAndWinner) {
|
|
var winner = playedByAndWinner.winner;
|
|
var cardsByPlayer = A2(_Lattyware$massivedecks$MassiveDecks_Models_Card$playedCardsByPlayer, playedByAndWinner.playedBy, cards);
|
|
return A2(_elm_lang$core$Dict$get, winner, cardsByPlayer);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Card$filled = F2(
|
|
function (call, playedCards) {
|
|
return _elm_lang$core$String$concat(
|
|
A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Util$interleave,
|
|
A2(
|
|
_elm_lang$core$List$map,
|
|
function (_) {
|
|
return _.text;
|
|
},
|
|
playedCards),
|
|
call.parts));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Card$slots = function (call) {
|
|
return _elm_lang$core$List$length(call.parts) - 1;
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Card$Call = F2(
|
|
function (a, b) {
|
|
return {id: a, parts: b};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Card$Response = F2(
|
|
function (a, b) {
|
|
return {id: a, text: b};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Card$RevealedResponses = F2(
|
|
function (a, b) {
|
|
return {cards: a, playedByAndWinner: b};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Card$Hand = function (a) {
|
|
return {hand: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Card$Revealed = function (a) {
|
|
return {ctor: 'Revealed', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Card$Hidden = function (a) {
|
|
return {ctor: 'Hidden', _0: a};
|
|
};
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_HouseRule_Id$toString = function (id) {
|
|
var _p0 = id;
|
|
return 'reboot';
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_HouseRule_Id$Reboot = {ctor: 'Reboot'};
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Game$GameCodeAndSecret = F2(
|
|
function (a, b) {
|
|
return {gameCode: a, secret: b};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Game$Config = F2(
|
|
function (a, b) {
|
|
return {decks: a, houseRules: b};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Game$DeckInfo = F4(
|
|
function (a, b, c, d) {
|
|
return {id: a, name: b, calls: c, responses: d};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Game$Round = F3(
|
|
function (a, b, c) {
|
|
return {czar: a, call: b, responses: c};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Game$FinishedRound = F4(
|
|
function (a, b, c, d) {
|
|
return {czar: a, call: b, responses: c, playedByAndWinner: d};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Game$Lobby = F4(
|
|
function (a, b, c, d) {
|
|
return {gameCode: a, config: b, players: c, round: d};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Game$LobbyAndHand = F2(
|
|
function (a, b) {
|
|
return {lobby: a, hand: b};
|
|
});
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Models$Init = F5(
|
|
function (a, b, c, d, e) {
|
|
return {url: a, gameCode: b, existingGame: c, seed: d, browserNotificationsSupported: e};
|
|
});
|
|
|
|
var _elm_lang$html$Html_Attributes$attribute = _elm_lang$virtual_dom$VirtualDom$attribute;
|
|
var _elm_lang$html$Html_Attributes$contextmenu = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$attribute, 'contextmenu', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$property = _elm_lang$virtual_dom$VirtualDom$property;
|
|
var _elm_lang$html$Html_Attributes$stringProperty = F2(
|
|
function (name, string) {
|
|
return A2(
|
|
_elm_lang$html$Html_Attributes$property,
|
|
name,
|
|
_elm_lang$core$Json_Encode$string(string));
|
|
});
|
|
var _elm_lang$html$Html_Attributes$class = function (name) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'className', name);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$id = function (name) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'id', name);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$title = function (name) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'title', name);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$accesskey = function ($char) {
|
|
return A2(
|
|
_elm_lang$html$Html_Attributes$stringProperty,
|
|
'accessKey',
|
|
_elm_lang$core$String$fromChar($char));
|
|
};
|
|
var _elm_lang$html$Html_Attributes$dir = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'dir', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$draggable = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'draggable', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$dropzone = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'dropzone', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$itemprop = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'itemprop', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$lang = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'lang', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$tabindex = function (n) {
|
|
return A2(
|
|
_elm_lang$html$Html_Attributes$stringProperty,
|
|
'tabIndex',
|
|
_elm_lang$core$Basics$toString(n));
|
|
};
|
|
var _elm_lang$html$Html_Attributes$charset = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'charset', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$content = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'content', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$httpEquiv = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'httpEquiv', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$language = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'language', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$src = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'src', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$height = function (value) {
|
|
return A2(
|
|
_elm_lang$html$Html_Attributes$stringProperty,
|
|
'height',
|
|
_elm_lang$core$Basics$toString(value));
|
|
};
|
|
var _elm_lang$html$Html_Attributes$width = function (value) {
|
|
return A2(
|
|
_elm_lang$html$Html_Attributes$stringProperty,
|
|
'width',
|
|
_elm_lang$core$Basics$toString(value));
|
|
};
|
|
var _elm_lang$html$Html_Attributes$alt = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'alt', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$preload = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'preload', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$poster = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'poster', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$kind = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'kind', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$srclang = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'srclang', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$sandbox = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'sandbox', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$srcdoc = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'srcdoc', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$type$ = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'type', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$value = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'value', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$defaultValue = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'defaultValue', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$placeholder = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'placeholder', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$accept = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'accept', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$acceptCharset = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'acceptCharset', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$action = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'action', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$autocomplete = function (bool) {
|
|
return A2(
|
|
_elm_lang$html$Html_Attributes$stringProperty,
|
|
'autocomplete',
|
|
bool ? 'on' : 'off');
|
|
};
|
|
var _elm_lang$html$Html_Attributes$autosave = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'autosave', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$enctype = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'enctype', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$formaction = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'formAction', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$list = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'list', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$minlength = function (n) {
|
|
return A2(
|
|
_elm_lang$html$Html_Attributes$stringProperty,
|
|
'minLength',
|
|
_elm_lang$core$Basics$toString(n));
|
|
};
|
|
var _elm_lang$html$Html_Attributes$maxlength = function (n) {
|
|
return A2(
|
|
_elm_lang$html$Html_Attributes$stringProperty,
|
|
'maxLength',
|
|
_elm_lang$core$Basics$toString(n));
|
|
};
|
|
var _elm_lang$html$Html_Attributes$method = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'method', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$name = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'name', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$pattern = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'pattern', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$size = function (n) {
|
|
return A2(
|
|
_elm_lang$html$Html_Attributes$stringProperty,
|
|
'size',
|
|
_elm_lang$core$Basics$toString(n));
|
|
};
|
|
var _elm_lang$html$Html_Attributes$for = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'htmlFor', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$form = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'form', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$max = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'max', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$min = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'min', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$step = function (n) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'step', n);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$cols = function (n) {
|
|
return A2(
|
|
_elm_lang$html$Html_Attributes$stringProperty,
|
|
'cols',
|
|
_elm_lang$core$Basics$toString(n));
|
|
};
|
|
var _elm_lang$html$Html_Attributes$rows = function (n) {
|
|
return A2(
|
|
_elm_lang$html$Html_Attributes$stringProperty,
|
|
'rows',
|
|
_elm_lang$core$Basics$toString(n));
|
|
};
|
|
var _elm_lang$html$Html_Attributes$wrap = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'wrap', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$usemap = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'useMap', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$shape = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'shape', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$coords = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'coords', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$challenge = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'challenge', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$keytype = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'keytype', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$align = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'align', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$cite = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'cite', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$href = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'href', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$target = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'target', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$downloadAs = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'download', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$hreflang = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'hreflang', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$media = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'media', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$ping = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'ping', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$rel = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'rel', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$datetime = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'datetime', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$pubdate = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'pubdate', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$start = function (n) {
|
|
return A2(
|
|
_elm_lang$html$Html_Attributes$stringProperty,
|
|
'start',
|
|
_elm_lang$core$Basics$toString(n));
|
|
};
|
|
var _elm_lang$html$Html_Attributes$colspan = function (n) {
|
|
return A2(
|
|
_elm_lang$html$Html_Attributes$stringProperty,
|
|
'colSpan',
|
|
_elm_lang$core$Basics$toString(n));
|
|
};
|
|
var _elm_lang$html$Html_Attributes$headers = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'headers', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$rowspan = function (n) {
|
|
return A2(
|
|
_elm_lang$html$Html_Attributes$stringProperty,
|
|
'rowSpan',
|
|
_elm_lang$core$Basics$toString(n));
|
|
};
|
|
var _elm_lang$html$Html_Attributes$scope = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'scope', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$manifest = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$stringProperty, 'manifest', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$boolProperty = F2(
|
|
function (name, bool) {
|
|
return A2(
|
|
_elm_lang$html$Html_Attributes$property,
|
|
name,
|
|
_elm_lang$core$Json_Encode$bool(bool));
|
|
});
|
|
var _elm_lang$html$Html_Attributes$hidden = function (bool) {
|
|
return A2(_elm_lang$html$Html_Attributes$boolProperty, 'hidden', bool);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$contenteditable = function (bool) {
|
|
return A2(_elm_lang$html$Html_Attributes$boolProperty, 'contentEditable', bool);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$spellcheck = function (bool) {
|
|
return A2(_elm_lang$html$Html_Attributes$boolProperty, 'spellcheck', bool);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$async = function (bool) {
|
|
return A2(_elm_lang$html$Html_Attributes$boolProperty, 'async', bool);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$defer = function (bool) {
|
|
return A2(_elm_lang$html$Html_Attributes$boolProperty, 'defer', bool);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$scoped = function (bool) {
|
|
return A2(_elm_lang$html$Html_Attributes$boolProperty, 'scoped', bool);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$autoplay = function (bool) {
|
|
return A2(_elm_lang$html$Html_Attributes$boolProperty, 'autoplay', bool);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$controls = function (bool) {
|
|
return A2(_elm_lang$html$Html_Attributes$boolProperty, 'controls', bool);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$loop = function (bool) {
|
|
return A2(_elm_lang$html$Html_Attributes$boolProperty, 'loop', bool);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$default = function (bool) {
|
|
return A2(_elm_lang$html$Html_Attributes$boolProperty, 'default', bool);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$seamless = function (bool) {
|
|
return A2(_elm_lang$html$Html_Attributes$boolProperty, 'seamless', bool);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$checked = function (bool) {
|
|
return A2(_elm_lang$html$Html_Attributes$boolProperty, 'checked', bool);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$selected = function (bool) {
|
|
return A2(_elm_lang$html$Html_Attributes$boolProperty, 'selected', bool);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$autofocus = function (bool) {
|
|
return A2(_elm_lang$html$Html_Attributes$boolProperty, 'autofocus', bool);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$disabled = function (bool) {
|
|
return A2(_elm_lang$html$Html_Attributes$boolProperty, 'disabled', bool);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$multiple = function (bool) {
|
|
return A2(_elm_lang$html$Html_Attributes$boolProperty, 'multiple', bool);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$novalidate = function (bool) {
|
|
return A2(_elm_lang$html$Html_Attributes$boolProperty, 'noValidate', bool);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$readonly = function (bool) {
|
|
return A2(_elm_lang$html$Html_Attributes$boolProperty, 'readOnly', bool);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$required = function (bool) {
|
|
return A2(_elm_lang$html$Html_Attributes$boolProperty, 'required', bool);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$ismap = function (value) {
|
|
return A2(_elm_lang$html$Html_Attributes$boolProperty, 'isMap', value);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$download = function (bool) {
|
|
return A2(_elm_lang$html$Html_Attributes$boolProperty, 'download', bool);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$reversed = function (bool) {
|
|
return A2(_elm_lang$html$Html_Attributes$boolProperty, 'reversed', bool);
|
|
};
|
|
var _elm_lang$html$Html_Attributes$classList = function (list) {
|
|
return _elm_lang$html$Html_Attributes$class(
|
|
A2(
|
|
_elm_lang$core$String$join,
|
|
' ',
|
|
A2(
|
|
_elm_lang$core$List$map,
|
|
_elm_lang$core$Basics$fst,
|
|
A2(_elm_lang$core$List$filter, _elm_lang$core$Basics$snd, list))));
|
|
};
|
|
var _elm_lang$html$Html_Attributes$style = _elm_lang$virtual_dom$VirtualDom$style;
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Tabs$viewPane = F3(
|
|
function (current, renderer, model) {
|
|
return A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$classList(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{ctor: '_Tuple2', _0: 'mui-tabs__pane', _1: true},
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: 'mui--is-active',
|
|
_1: _elm_lang$core$Native_Utils.eq(current, model.id)
|
|
}
|
|
]))
|
|
]),
|
|
renderer(model.id));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Tabs$update = F2(
|
|
function (message, model) {
|
|
var _p0 = message;
|
|
return _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{current: _p0._0});
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Tabs$Model = F3(
|
|
function (a, b, c) {
|
|
return {tabs: a, current: b, tagger: c};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Tabs$init = _Lattyware$massivedecks$MassiveDecks_Components_Tabs$Model;
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Tabs$Tab = F2(
|
|
function (a, b) {
|
|
return {id: a, title: b};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Tabs$SetTab = function (a) {
|
|
return {ctor: 'SetTab', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Tabs$viewTab = F3(
|
|
function (tagger, current, model) {
|
|
return A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$classList(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: 'mui--is-active',
|
|
_1: _elm_lang$core$Native_Utils.eq(current, model.id)
|
|
}
|
|
]))
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Events$onClick(
|
|
tagger(
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Tabs$SetTab(model.id)))
|
|
]),
|
|
model.title)
|
|
]));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Tabs$view = F2(
|
|
function (renderer, model) {
|
|
return A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$ul,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui-tabs__bar mui-tabs__bar--justified')
|
|
]),
|
|
A2(
|
|
_elm_lang$core$List$map,
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Components_Tabs$viewTab, model.tagger, model.current),
|
|
model.tabs))
|
|
]),
|
|
A2(
|
|
_elm_lang$core$List$map,
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Components_Tabs$viewPane, model.current, renderer),
|
|
model.tabs));
|
|
});
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Storage$existingGame = _elm_lang$core$Native_Platform.outgoingPort(
|
|
'existingGame',
|
|
function (v) {
|
|
return (v.ctor === 'Nothing') ? null : {
|
|
gameCode: v._0.gameCode,
|
|
secret: {id: v._0.secret.id, secret: v._0.secret.secret}
|
|
};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Storage$storeInGame = function (gameCodeAndSecret) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Components_Storage$existingGame(
|
|
_elm_lang$core$Maybe$Just(gameCodeAndSecret));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Storage$storeLeftGame = _Lattyware$massivedecks$MassiveDecks_Components_Storage$existingGame(_elm_lang$core$Maybe$Nothing);
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Icon$spinner = A2(
|
|
_elm_lang$html$Html$i,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('fa fa-circle-o-notch fa-spin')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]));
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Icon$fwIcon = function (name) {
|
|
return A2(
|
|
_elm_lang$html$Html$i,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class(
|
|
A2(_elm_lang$core$Basics_ops['++'], 'fa fa-fw fa-', name))
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Icon$icon = function (name) {
|
|
return A2(
|
|
_elm_lang$html$Html$i,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class(
|
|
A2(_elm_lang$core$Basics_ops['++'], 'fa fa-', name))
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]));
|
|
};
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Input$update = F2(
|
|
function (message, model) {
|
|
var _p0 = message;
|
|
var identity = _p0._0;
|
|
var change = _p0._1;
|
|
if (_elm_lang$core$Native_Utils.eq(identity, model.identity)) {
|
|
var _p1 = change;
|
|
switch (_p1.ctor) {
|
|
case 'Changed':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{value: _p1._0}),
|
|
_1: _elm_lang$core$Platform_Cmd$none
|
|
};
|
|
case 'Error':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{error: _p1._0}),
|
|
_1: _elm_lang$core$Platform_Cmd$none
|
|
};
|
|
case 'Submit':
|
|
return {ctor: '_Tuple2', _0: model, _1: model.submit};
|
|
case 'SetEnabled':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{enabled: _p1._0}),
|
|
_1: _elm_lang$core$Platform_Cmd$none
|
|
};
|
|
default:
|
|
return {ctor: '_Tuple2', _0: model, _1: _elm_lang$core$Platform_Cmd$none};
|
|
}
|
|
} else {
|
|
return {ctor: '_Tuple2', _0: model, _1: _elm_lang$core$Platform_Cmd$none};
|
|
}
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Input$error = function (message) {
|
|
return A2(
|
|
_elm_lang$core$Maybe$map,
|
|
function (error) {
|
|
return A2(
|
|
_elm_lang$html$Html$span,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('input-error')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('exclamation'),
|
|
_elm_lang$html$Html$text(' '),
|
|
_elm_lang$html$Html$text(error)
|
|
]));
|
|
},
|
|
message);
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Input$subscriptions = function (model) {
|
|
return _elm_lang$core$Platform_Sub$none;
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Input$initWithExtra = F8(
|
|
function (identity, $class, label, value, placeholder, extra, submit, embedMethod) {
|
|
return {identity: identity, $class: $class, label: label, value: value, placeholder: placeholder, error: _elm_lang$core$Maybe$Nothing, extra: extra, embedMethod: embedMethod, submit: submit, enabled: true};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Input$init = F7(
|
|
function (identity, $class, label, value, placeholder, submit, embedMethod) {
|
|
return A8(
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Input$initWithExtra,
|
|
identity,
|
|
$class,
|
|
label,
|
|
value,
|
|
placeholder,
|
|
function (_p2) {
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[]);
|
|
},
|
|
submit,
|
|
embedMethod);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Input$Model = 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 function (j) {
|
|
return {identity: a, $class: b, label: c, placeholder: d, value: e, error: f, extra: g, embedMethod: h, submit: i, enabled: j};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Input$NoOp = {ctor: 'NoOp'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Input$SetEnabled = function (a) {
|
|
return {ctor: 'SetEnabled', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Input$Submit = {ctor: 'Submit'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Input$Error = function (a) {
|
|
return {ctor: 'Error', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Input$Changed = function (a) {
|
|
return {ctor: 'Changed', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Input$view = function (model) {
|
|
return A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class(model.$class)
|
|
]),
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui-textfield')
|
|
]),
|
|
A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Util$andMaybe,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$input,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$type$('text'),
|
|
_elm_lang$html$Html_Attributes$defaultValue(model.value),
|
|
_elm_lang$html$Html_Attributes$placeholder(model.placeholder),
|
|
_elm_lang$html$Html_Attributes$disabled(
|
|
_elm_lang$core$Basics$not(model.enabled)),
|
|
A2(
|
|
_elm_lang$html$Html_Events$on,
|
|
'input',
|
|
A2(
|
|
_elm_lang$core$Json_Decode$map,
|
|
function (value) {
|
|
return model.embedMethod(
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: model.identity,
|
|
_1: _Lattyware$massivedecks$MassiveDecks_Components_Input$Changed(value)
|
|
});
|
|
},
|
|
_elm_lang$html$Html_Events$targetValue)),
|
|
A3(
|
|
_Lattyware$massivedecks$MassiveDecks_Util$onKeyDown,
|
|
'Enter',
|
|
model.embedMethod(
|
|
{ctor: '_Tuple2', _0: model.identity, _1: _Lattyware$massivedecks$MassiveDecks_Components_Input$Submit}),
|
|
model.embedMethod(
|
|
{ctor: '_Tuple2', _0: model.identity, _1: _Lattyware$massivedecks$MassiveDecks_Components_Input$NoOp}))
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[])),
|
|
A2(
|
|
_elm_lang$html$Html$label,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
A2(
|
|
_elm_lang$core$List$append,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('info-circle'),
|
|
_elm_lang$html$Html$text(' ')
|
|
]),
|
|
model.label))
|
|
]),
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Input$error(model.error)))
|
|
]),
|
|
model.extra(model.value)));
|
|
};
|
|
|
|
//import Dict, List, Maybe, Native.Scheduler //
|
|
|
|
var _evancz$elm_http$Native_Http = function() {
|
|
|
|
function send(settings, request)
|
|
{
|
|
return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) {
|
|
var req = new XMLHttpRequest();
|
|
|
|
// start
|
|
if (settings.onStart.ctor === 'Just')
|
|
{
|
|
req.addEventListener('loadStart', function() {
|
|
var task = settings.onStart._0;
|
|
_elm_lang$core$Native_Scheduler.rawSpawn(task);
|
|
});
|
|
}
|
|
|
|
// progress
|
|
if (settings.onProgress.ctor === 'Just')
|
|
{
|
|
req.addEventListener('progress', function(event) {
|
|
var progress = !event.lengthComputable
|
|
? _elm_lang$core$Maybe$Nothing
|
|
: _elm_lang$core$Maybe$Just({
|
|
loaded: event.loaded,
|
|
total: event.total
|
|
});
|
|
var task = settings.onProgress._0(progress);
|
|
_elm_lang$core$Native_Scheduler.rawSpawn(task);
|
|
});
|
|
}
|
|
|
|
// end
|
|
req.addEventListener('error', function() {
|
|
return callback(_elm_lang$core$Native_Scheduler.fail({ ctor: 'RawNetworkError' }));
|
|
});
|
|
|
|
req.addEventListener('timeout', function() {
|
|
return callback(_elm_lang$core$Native_Scheduler.fail({ ctor: 'RawTimeout' }));
|
|
});
|
|
|
|
req.addEventListener('load', function() {
|
|
return callback(_elm_lang$core$Native_Scheduler.succeed(toResponse(req)));
|
|
});
|
|
|
|
req.open(request.verb, request.url, true);
|
|
|
|
// set all the headers
|
|
function setHeader(pair) {
|
|
req.setRequestHeader(pair._0, pair._1);
|
|
}
|
|
A2(_elm_lang$core$List$map, setHeader, request.headers);
|
|
|
|
// set the timeout
|
|
req.timeout = settings.timeout;
|
|
|
|
// enable this withCredentials thing
|
|
req.withCredentials = settings.withCredentials;
|
|
|
|
// ask for a specific MIME type for the response
|
|
if (settings.desiredResponseType.ctor === 'Just')
|
|
{
|
|
req.overrideMimeType(settings.desiredResponseType._0);
|
|
}
|
|
|
|
// actuall send the request
|
|
if(request.body.ctor === "BodyFormData")
|
|
{
|
|
req.send(request.body.formData)
|
|
}
|
|
else
|
|
{
|
|
req.send(request.body._0);
|
|
}
|
|
|
|
return function() {
|
|
req.abort();
|
|
};
|
|
});
|
|
}
|
|
|
|
|
|
// deal with responses
|
|
|
|
function toResponse(req)
|
|
{
|
|
var tag = req.responseType === 'blob' ? 'Blob' : 'Text'
|
|
var response = tag === 'Blob' ? req.response : req.responseText;
|
|
return {
|
|
status: req.status,
|
|
statusText: req.statusText,
|
|
headers: parseHeaders(req.getAllResponseHeaders()),
|
|
url: req.responseURL,
|
|
value: { ctor: tag, _0: response }
|
|
};
|
|
}
|
|
|
|
|
|
function parseHeaders(rawHeaders)
|
|
{
|
|
var headers = _elm_lang$core$Dict$empty;
|
|
|
|
if (!rawHeaders)
|
|
{
|
|
return headers;
|
|
}
|
|
|
|
var headerPairs = rawHeaders.split('\u000d\u000a');
|
|
for (var i = headerPairs.length; i--; )
|
|
{
|
|
var headerPair = headerPairs[i];
|
|
var index = headerPair.indexOf('\u003a\u0020');
|
|
if (index > 0)
|
|
{
|
|
var key = headerPair.substring(0, index);
|
|
var value = headerPair.substring(index + 2);
|
|
|
|
headers = A3(_elm_lang$core$Dict$update, key, function(oldValue) {
|
|
if (oldValue.ctor === 'Just')
|
|
{
|
|
return _elm_lang$core$Maybe$Just(value + ', ' + oldValue._0);
|
|
}
|
|
return _elm_lang$core$Maybe$Just(value);
|
|
}, headers);
|
|
}
|
|
}
|
|
|
|
return headers;
|
|
}
|
|
|
|
|
|
function multipart(dataList)
|
|
{
|
|
var formData = new FormData();
|
|
|
|
while (dataList.ctor !== '[]')
|
|
{
|
|
var data = dataList._0;
|
|
if (data.ctor === 'StringData')
|
|
{
|
|
formData.append(data._0, data._1);
|
|
}
|
|
else
|
|
{
|
|
var fileName = data._1.ctor === 'Nothing'
|
|
? undefined
|
|
: data._1._0;
|
|
formData.append(data._0, data._2, fileName);
|
|
}
|
|
dataList = dataList._1;
|
|
}
|
|
|
|
return { ctor: 'BodyFormData', formData: formData };
|
|
}
|
|
|
|
|
|
function uriEncode(string)
|
|
{
|
|
return encodeURIComponent(string);
|
|
}
|
|
|
|
function uriDecode(string)
|
|
{
|
|
return decodeURIComponent(string);
|
|
}
|
|
|
|
return {
|
|
send: F2(send),
|
|
multipart: multipart,
|
|
uriEncode: uriEncode,
|
|
uriDecode: uriDecode
|
|
};
|
|
|
|
}();
|
|
|
|
var _evancz$elm_http$Http$send = _evancz$elm_http$Native_Http.send;
|
|
var _evancz$elm_http$Http$defaultSettings = {timeout: 0, onStart: _elm_lang$core$Maybe$Nothing, onProgress: _elm_lang$core$Maybe$Nothing, desiredResponseType: _elm_lang$core$Maybe$Nothing, withCredentials: false};
|
|
var _evancz$elm_http$Http$multipart = _evancz$elm_http$Native_Http.multipart;
|
|
var _evancz$elm_http$Http$uriDecode = _evancz$elm_http$Native_Http.uriDecode;
|
|
var _evancz$elm_http$Http$uriEncode = _evancz$elm_http$Native_Http.uriEncode;
|
|
var _evancz$elm_http$Http$queryEscape = function (string) {
|
|
return A2(
|
|
_elm_lang$core$String$join,
|
|
'+',
|
|
A2(
|
|
_elm_lang$core$String$split,
|
|
'%20',
|
|
_evancz$elm_http$Http$uriEncode(string)));
|
|
};
|
|
var _evancz$elm_http$Http$queryPair = function (_p0) {
|
|
var _p1 = _p0;
|
|
return A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_evancz$elm_http$Http$queryEscape(_p1._0),
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
'=',
|
|
_evancz$elm_http$Http$queryEscape(_p1._1)));
|
|
};
|
|
var _evancz$elm_http$Http$url = F2(
|
|
function (baseUrl, args) {
|
|
var _p2 = args;
|
|
if (_p2.ctor === '[]') {
|
|
return baseUrl;
|
|
} else {
|
|
return A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
baseUrl,
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
'?',
|
|
A2(
|
|
_elm_lang$core$String$join,
|
|
'&',
|
|
A2(_elm_lang$core$List$map, _evancz$elm_http$Http$queryPair, args))));
|
|
}
|
|
});
|
|
var _evancz$elm_http$Http$Request = F4(
|
|
function (a, b, c, d) {
|
|
return {verb: a, headers: b, url: c, body: d};
|
|
});
|
|
var _evancz$elm_http$Http$Settings = F5(
|
|
function (a, b, c, d, e) {
|
|
return {timeout: a, onStart: b, onProgress: c, desiredResponseType: d, withCredentials: e};
|
|
});
|
|
var _evancz$elm_http$Http$Response = F5(
|
|
function (a, b, c, d, e) {
|
|
return {status: a, statusText: b, headers: c, url: d, value: e};
|
|
});
|
|
var _evancz$elm_http$Http$TODO_implement_blob_in_another_library = {ctor: 'TODO_implement_blob_in_another_library'};
|
|
var _evancz$elm_http$Http$TODO_implement_file_in_another_library = {ctor: 'TODO_implement_file_in_another_library'};
|
|
var _evancz$elm_http$Http$BodyBlob = function (a) {
|
|
return {ctor: 'BodyBlob', _0: a};
|
|
};
|
|
var _evancz$elm_http$Http$BodyFormData = {ctor: 'BodyFormData'};
|
|
var _evancz$elm_http$Http$ArrayBuffer = {ctor: 'ArrayBuffer'};
|
|
var _evancz$elm_http$Http$BodyString = function (a) {
|
|
return {ctor: 'BodyString', _0: a};
|
|
};
|
|
var _evancz$elm_http$Http$string = _evancz$elm_http$Http$BodyString;
|
|
var _evancz$elm_http$Http$Empty = {ctor: 'Empty'};
|
|
var _evancz$elm_http$Http$empty = _evancz$elm_http$Http$Empty;
|
|
var _evancz$elm_http$Http$FileData = F3(
|
|
function (a, b, c) {
|
|
return {ctor: 'FileData', _0: a, _1: b, _2: c};
|
|
});
|
|
var _evancz$elm_http$Http$BlobData = F3(
|
|
function (a, b, c) {
|
|
return {ctor: 'BlobData', _0: a, _1: b, _2: c};
|
|
});
|
|
var _evancz$elm_http$Http$blobData = _evancz$elm_http$Http$BlobData;
|
|
var _evancz$elm_http$Http$StringData = F2(
|
|
function (a, b) {
|
|
return {ctor: 'StringData', _0: a, _1: b};
|
|
});
|
|
var _evancz$elm_http$Http$stringData = _evancz$elm_http$Http$StringData;
|
|
var _evancz$elm_http$Http$Blob = function (a) {
|
|
return {ctor: 'Blob', _0: a};
|
|
};
|
|
var _evancz$elm_http$Http$Text = function (a) {
|
|
return {ctor: 'Text', _0: a};
|
|
};
|
|
var _evancz$elm_http$Http$RawNetworkError = {ctor: 'RawNetworkError'};
|
|
var _evancz$elm_http$Http$RawTimeout = {ctor: 'RawTimeout'};
|
|
var _evancz$elm_http$Http$BadResponse = F2(
|
|
function (a, b) {
|
|
return {ctor: 'BadResponse', _0: a, _1: b};
|
|
});
|
|
var _evancz$elm_http$Http$UnexpectedPayload = function (a) {
|
|
return {ctor: 'UnexpectedPayload', _0: a};
|
|
};
|
|
var _evancz$elm_http$Http$handleResponse = F2(
|
|
function (handle, response) {
|
|
if ((_elm_lang$core$Native_Utils.cmp(200, response.status) < 1) && (_elm_lang$core$Native_Utils.cmp(response.status, 300) < 0)) {
|
|
var _p3 = response.value;
|
|
if (_p3.ctor === 'Text') {
|
|
return handle(_p3._0);
|
|
} else {
|
|
return _elm_lang$core$Task$fail(
|
|
_evancz$elm_http$Http$UnexpectedPayload('Response body is a blob, expecting a string.'));
|
|
}
|
|
} else {
|
|
return _elm_lang$core$Task$fail(
|
|
A2(_evancz$elm_http$Http$BadResponse, response.status, response.statusText));
|
|
}
|
|
});
|
|
var _evancz$elm_http$Http$NetworkError = {ctor: 'NetworkError'};
|
|
var _evancz$elm_http$Http$Timeout = {ctor: 'Timeout'};
|
|
var _evancz$elm_http$Http$promoteError = function (rawError) {
|
|
var _p4 = rawError;
|
|
if (_p4.ctor === 'RawTimeout') {
|
|
return _evancz$elm_http$Http$Timeout;
|
|
} else {
|
|
return _evancz$elm_http$Http$NetworkError;
|
|
}
|
|
};
|
|
var _evancz$elm_http$Http$getString = function (url) {
|
|
var request = {
|
|
verb: 'GET',
|
|
headers: _elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
url: url,
|
|
body: _evancz$elm_http$Http$empty
|
|
};
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
A2(
|
|
_elm_lang$core$Task$mapError,
|
|
_evancz$elm_http$Http$promoteError,
|
|
A2(_evancz$elm_http$Http$send, _evancz$elm_http$Http$defaultSettings, request)),
|
|
_evancz$elm_http$Http$handleResponse(_elm_lang$core$Task$succeed));
|
|
};
|
|
var _evancz$elm_http$Http$fromJson = F2(
|
|
function (decoder, response) {
|
|
var decode = function (str) {
|
|
var _p5 = A2(_elm_lang$core$Json_Decode$decodeString, decoder, str);
|
|
if (_p5.ctor === 'Ok') {
|
|
return _elm_lang$core$Task$succeed(_p5._0);
|
|
} else {
|
|
return _elm_lang$core$Task$fail(
|
|
_evancz$elm_http$Http$UnexpectedPayload(_p5._0));
|
|
}
|
|
};
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
A2(_elm_lang$core$Task$mapError, _evancz$elm_http$Http$promoteError, response),
|
|
_evancz$elm_http$Http$handleResponse(decode));
|
|
});
|
|
var _evancz$elm_http$Http$get = F2(
|
|
function (decoder, url) {
|
|
var request = {
|
|
verb: 'GET',
|
|
headers: _elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
url: url,
|
|
body: _evancz$elm_http$Http$empty
|
|
};
|
|
return A2(
|
|
_evancz$elm_http$Http$fromJson,
|
|
decoder,
|
|
A2(_evancz$elm_http$Http$send, _evancz$elm_http$Http$defaultSettings, request));
|
|
});
|
|
var _evancz$elm_http$Http$post = F3(
|
|
function (decoder, url, body) {
|
|
var request = {
|
|
verb: 'POST',
|
|
headers: _elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
url: url,
|
|
body: body
|
|
};
|
|
return A2(
|
|
_evancz$elm_http$Http$fromJson,
|
|
decoder,
|
|
A2(_evancz$elm_http$Http$send, _evancz$elm_http$Http$defaultSettings, request));
|
|
});
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Errors$reportText = function (message) {
|
|
return A2(_elm_lang$core$Basics_ops['++'], 'I was [a short explanation of what you were doing] when I got the following error: \n\n', message);
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Errors$update = F2(
|
|
function (message, model) {
|
|
var _p0 = message;
|
|
if (_p0.ctor === 'New') {
|
|
var $new = {id: model.currentId, message: _p0._0, bugReport: _p0._1};
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{
|
|
errors: A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
model.errors,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[$new])),
|
|
currentId: model.currentId + 1
|
|
}),
|
|
_1: _elm_lang$core$Platform_Cmd$none
|
|
};
|
|
} else {
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{
|
|
errors: A2(
|
|
_elm_lang$core$List$filter,
|
|
function (error) {
|
|
return !_elm_lang$core$Native_Utils.eq(error.id, _p0._0);
|
|
},
|
|
model.errors)
|
|
}),
|
|
_1: _elm_lang$core$Platform_Cmd$none
|
|
};
|
|
}
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Errors$init = {
|
|
currentId: 0,
|
|
errors: _elm_lang$core$Native_List.fromArray(
|
|
[])
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Errors$Model = F2(
|
|
function (a, b) {
|
|
return {currentId: a, errors: b};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Errors$Error = F3(
|
|
function (a, b, c) {
|
|
return {id: a, message: b, bugReport: c};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Errors$Remove = function (a) {
|
|
return {ctor: 'Remove', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Errors$errorMessage = function (error) {
|
|
var reportUrl = A2(
|
|
_evancz$elm_http$Http$url,
|
|
'https://github.com/Lattyware/massivedecks/issues/new',
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: 'body',
|
|
_1: _Lattyware$massivedecks$MassiveDecks_Components_Errors$reportText(error.message)
|
|
}
|
|
]));
|
|
var bugReportLink = error.bugReport ? _elm_lang$core$Maybe$Just(
|
|
A2(
|
|
_elm_lang$html$Html$p,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$href(reportUrl),
|
|
_elm_lang$html$Html_Attributes$target('_blank')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('bug'),
|
|
_elm_lang$html$Html$text(' Report this as a bug.')
|
|
]))
|
|
]))) : _elm_lang$core$Maybe$Nothing;
|
|
return A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('error')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Util$andMaybe,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('link'),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'tabindex', '0'),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'role', 'button'),
|
|
_elm_lang$html$Html_Events$onClick(
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Errors$Remove(error.id))
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('times')
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$h5,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('exclamation-triangle'),
|
|
_elm_lang$html$Html$text(' Error')
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui-divider')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[])),
|
|
A2(
|
|
_elm_lang$html$Html$p,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text(error.message)
|
|
]))
|
|
]),
|
|
bugReportLink))
|
|
]));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Errors$view = function (model) {
|
|
return A2(
|
|
_elm_lang$html$Html$ol,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$id('error-panel')
|
|
]),
|
|
A2(_elm_lang$core$List$map, _Lattyware$massivedecks$MassiveDecks_Components_Errors$errorMessage, model.errors));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Errors$New = F2(
|
|
function (a, b) {
|
|
return {ctor: 'New', _0: a, _1: b};
|
|
});
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Overlay$update = F2(
|
|
function (message, model) {
|
|
var _p0 = message;
|
|
switch (_p0.ctor) {
|
|
case 'Show':
|
|
return _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{
|
|
overlay: _elm_lang$core$Maybe$Just(_p0._0)
|
|
});
|
|
case 'Hide':
|
|
return _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{overlay: _elm_lang$core$Maybe$Nothing});
|
|
default:
|
|
return model;
|
|
}
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Overlay$init = function (wrap) {
|
|
return {overlay: _elm_lang$core$Maybe$Nothing, wrap: wrap};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Overlay$Model = F2(
|
|
function (a, b) {
|
|
return {overlay: a, wrap: b};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Overlay$Overlay = F3(
|
|
function (a, b, c) {
|
|
return {icon: a, title: b, contents: c};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Overlay$NoOp = {ctor: 'NoOp'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Overlay$Hide = {ctor: 'Hide'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Overlay$view = function (model) {
|
|
var _p1 = model.overlay;
|
|
if (_p1.ctor === 'Just') {
|
|
var _p2 = _p1._0;
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$id('mui-overlay'),
|
|
A3(
|
|
_Lattyware$massivedecks$MassiveDecks_Util$onClickIfId,
|
|
'mui-overlay',
|
|
model.wrap(_Lattyware$massivedecks$MassiveDecks_Components_Overlay$Hide),
|
|
model.wrap(_Lattyware$massivedecks$MassiveDecks_Components_Overlay$NoOp)),
|
|
A3(
|
|
_Lattyware$massivedecks$MassiveDecks_Util$onKeyDown,
|
|
'Escape',
|
|
model.wrap(_Lattyware$massivedecks$MassiveDecks_Components_Overlay$Hide),
|
|
model.wrap(_Lattyware$massivedecks$MassiveDecks_Components_Overlay$NoOp)),
|
|
_elm_lang$html$Html_Attributes$tabindex(0)
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('overlay mui-panel')
|
|
]),
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$h1,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon(_p2.icon),
|
|
_elm_lang$html$Html$text(' '),
|
|
_elm_lang$html$Html$text(_p2.title)
|
|
]))
|
|
]),
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_p2.contents,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$p,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('close-link')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('link'),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'tabindex', '0'),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'role', 'button'),
|
|
_elm_lang$html$Html_Events$onClick(
|
|
model.wrap(_Lattyware$massivedecks$MassiveDecks_Components_Overlay$Hide))
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('times'),
|
|
_elm_lang$html$Html$text(' Close')
|
|
]))
|
|
]))
|
|
]))))
|
|
]))
|
|
]);
|
|
} else {
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[]);
|
|
}
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Overlay$Show = function (a) {
|
|
return {ctor: 'Show', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_Overlay$map = F2(
|
|
function (mapper, message) {
|
|
var _p3 = message;
|
|
switch (_p3.ctor) {
|
|
case 'Show':
|
|
var _p4 = _p3._0;
|
|
return _Lattyware$massivedecks$MassiveDecks_Components_Overlay$Show(
|
|
A3(
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Overlay$Overlay,
|
|
_p4.icon,
|
|
_p4.title,
|
|
A2(
|
|
_elm_lang$core$List$map,
|
|
_elm_lang$html$Html_App$map(mapper),
|
|
_p4.contents)));
|
|
case 'Hide':
|
|
return _Lattyware$massivedecks$MassiveDecks_Components_Overlay$Hide;
|
|
default:
|
|
return _Lattyware$massivedecks$MassiveDecks_Components_Overlay$NoOp;
|
|
}
|
|
});
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Notification$hide = function (notification) {
|
|
return _elm_lang$core$Native_Utils.update(
|
|
notification,
|
|
{visible: false});
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Notification$Notification = F4(
|
|
function (a, b, c, d) {
|
|
return {icon: a, name: b, description: c, visible: d};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Notification$playerFromIdAndPlayers = F4(
|
|
function (id, players, icon, suffix) {
|
|
return A2(
|
|
_elm_lang$core$Maybe$map,
|
|
function (name) {
|
|
return A4(
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Notification$Notification,
|
|
icon,
|
|
name,
|
|
A2(_elm_lang$core$Basics_ops['++'], name, suffix),
|
|
true);
|
|
},
|
|
A2(
|
|
_elm_lang$core$Maybe$map,
|
|
function (_) {
|
|
return _.name;
|
|
},
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Models_Player$byId, id, players)));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Notification$playerJoin = F2(
|
|
function (id, players) {
|
|
return A4(_Lattyware$massivedecks$MassiveDecks_Models_Notification$playerFromIdAndPlayers, id, players, 'sign-in', ' has joined the game.');
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Notification$playerReconnect = F2(
|
|
function (id, players) {
|
|
return A4(_Lattyware$massivedecks$MassiveDecks_Models_Notification$playerFromIdAndPlayers, id, players, 'sign-in', ' has reconnected to the game.');
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Notification$playerDisconnect = F2(
|
|
function (id, players) {
|
|
return A4(_Lattyware$massivedecks$MassiveDecks_Models_Notification$playerFromIdAndPlayers, id, players, 'minus-circle', ' has disconnected from the game.');
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Notification$playerLeft = F2(
|
|
function (id, players) {
|
|
return A4(_Lattyware$massivedecks$MassiveDecks_Models_Notification$playerFromIdAndPlayers, id, players, 'sign-out', ' has left the game.');
|
|
});
|
|
|
|
var _elm_lang$dom$Native_Dom = function() {
|
|
|
|
function on(node)
|
|
{
|
|
return function(eventName, decoder, toTask)
|
|
{
|
|
return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) {
|
|
|
|
function performTask(event)
|
|
{
|
|
var result = A2(_elm_lang$core$Json_Decode$decodeValue, decoder, event);
|
|
if (result.ctor === 'Ok')
|
|
{
|
|
_elm_lang$core$Native_Scheduler.rawSpawn(toTask(result._0));
|
|
}
|
|
}
|
|
|
|
node.addEventListener(eventName, performTask);
|
|
|
|
return function()
|
|
{
|
|
node.removeEventListener(eventName, performTask);
|
|
};
|
|
});
|
|
};
|
|
}
|
|
|
|
return {
|
|
onDocument: F3(on(document)),
|
|
onWindow: F3(on(window))
|
|
};
|
|
|
|
}();
|
|
|
|
var _elm_lang$dom$Dom_LowLevel$onWindow = _elm_lang$dom$Native_Dom.onWindow;
|
|
var _elm_lang$dom$Dom_LowLevel$onDocument = _elm_lang$dom$Native_Dom.onDocument;
|
|
|
|
var _elm_lang$window$Native_Window = function()
|
|
{
|
|
|
|
var size = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) {
|
|
callback(_elm_lang$core$Native_Scheduler.succeed({
|
|
width: window.innerWidth,
|
|
height: window.innerHeight
|
|
}));
|
|
});
|
|
|
|
return {
|
|
size: size
|
|
};
|
|
|
|
}();
|
|
var _elm_lang$window$Window_ops = _elm_lang$window$Window_ops || {};
|
|
_elm_lang$window$Window_ops['&>'] = F2(
|
|
function (t1, t2) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
t1,
|
|
function (_p0) {
|
|
return t2;
|
|
});
|
|
});
|
|
var _elm_lang$window$Window$onSelfMsg = F3(
|
|
function (router, dimensions, state) {
|
|
var _p1 = state;
|
|
if (_p1.ctor === 'Nothing') {
|
|
return _elm_lang$core$Task$succeed(state);
|
|
} else {
|
|
var send = function (_p2) {
|
|
var _p3 = _p2;
|
|
return A2(
|
|
_elm_lang$core$Platform$sendToApp,
|
|
router,
|
|
_p3._0(dimensions));
|
|
};
|
|
return A2(
|
|
_elm_lang$window$Window_ops['&>'],
|
|
_elm_lang$core$Task$sequence(
|
|
A2(_elm_lang$core$List$map, send, _p1._0.subs)),
|
|
_elm_lang$core$Task$succeed(state));
|
|
}
|
|
});
|
|
var _elm_lang$window$Window$init = _elm_lang$core$Task$succeed(_elm_lang$core$Maybe$Nothing);
|
|
var _elm_lang$window$Window$size = _elm_lang$window$Native_Window.size;
|
|
var _elm_lang$window$Window$width = A2(
|
|
_elm_lang$core$Task$map,
|
|
function (_) {
|
|
return _.width;
|
|
},
|
|
_elm_lang$window$Window$size);
|
|
var _elm_lang$window$Window$height = A2(
|
|
_elm_lang$core$Task$map,
|
|
function (_) {
|
|
return _.height;
|
|
},
|
|
_elm_lang$window$Window$size);
|
|
var _elm_lang$window$Window$onEffects = F3(
|
|
function (router, newSubs, oldState) {
|
|
var _p4 = {ctor: '_Tuple2', _0: oldState, _1: newSubs};
|
|
if (_p4._0.ctor === 'Nothing') {
|
|
if (_p4._1.ctor === '[]') {
|
|
return _elm_lang$core$Task$succeed(_elm_lang$core$Maybe$Nothing);
|
|
} else {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
_elm_lang$core$Process$spawn(
|
|
A3(
|
|
_elm_lang$dom$Dom_LowLevel$onWindow,
|
|
'resize',
|
|
_elm_lang$core$Json_Decode$succeed(
|
|
{ctor: '_Tuple0'}),
|
|
function (_p5) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
_elm_lang$window$Window$size,
|
|
_elm_lang$core$Platform$sendToSelf(router));
|
|
})),
|
|
function (pid) {
|
|
return _elm_lang$core$Task$succeed(
|
|
_elm_lang$core$Maybe$Just(
|
|
{subs: newSubs, pid: pid}));
|
|
});
|
|
}
|
|
} else {
|
|
if (_p4._1.ctor === '[]') {
|
|
return A2(
|
|
_elm_lang$window$Window_ops['&>'],
|
|
_elm_lang$core$Process$kill(_p4._0._0.pid),
|
|
_elm_lang$core$Task$succeed(_elm_lang$core$Maybe$Nothing));
|
|
} else {
|
|
return _elm_lang$core$Task$succeed(
|
|
_elm_lang$core$Maybe$Just(
|
|
{subs: newSubs, pid: _p4._0._0.pid}));
|
|
}
|
|
}
|
|
});
|
|
var _elm_lang$window$Window$subscription = _elm_lang$core$Native_Platform.leaf('Window');
|
|
var _elm_lang$window$Window$Size = F2(
|
|
function (a, b) {
|
|
return {width: a, height: b};
|
|
});
|
|
var _elm_lang$window$Window$MySub = function (a) {
|
|
return {ctor: 'MySub', _0: a};
|
|
};
|
|
var _elm_lang$window$Window$resizes = function (tagger) {
|
|
return _elm_lang$window$Window$subscription(
|
|
_elm_lang$window$Window$MySub(tagger));
|
|
};
|
|
var _elm_lang$window$Window$subMap = F2(
|
|
function (func, _p6) {
|
|
var _p7 = _p6;
|
|
return _elm_lang$window$Window$MySub(
|
|
function (_p8) {
|
|
return func(
|
|
_p7._0(_p8));
|
|
});
|
|
});
|
|
_elm_lang$core$Native_Platform.effectManagers['Window'] = {pkg: 'elm-lang/window', init: _elm_lang$window$Window$init, onEffects: _elm_lang$window$Window$onEffects, onSelfMsg: _elm_lang$window$Window$onSelfMsg, tag: 'sub', subMap: _elm_lang$window$Window$subMap};
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Sidebar$init = function (enhanceWidth) {
|
|
return {enhanceWidth: enhanceWidth, hidden: false, shownAsOverlay: false};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Sidebar$Model = F3(
|
|
function (a, b, c) {
|
|
return {enhanceWidth: a, hidden: b, shownAsOverlay: c};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Sidebar$Hide = {ctor: 'Hide'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Sidebar$Show = function (a) {
|
|
return {ctor: 'Show', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Sidebar$update = F2(
|
|
function (message, model) {
|
|
var _p0 = message;
|
|
switch (_p0.ctor) {
|
|
case 'Toggle':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: model,
|
|
_1: A3(_elm_lang$core$Task$perform, _Lattyware$massivedecks$MassiveDecks_Util$impossible, _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Sidebar$Show, _elm_lang$window$Window$width)
|
|
};
|
|
case 'Show':
|
|
return model.shownAsOverlay ? {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{shownAsOverlay: false}),
|
|
_1: _elm_lang$core$Platform_Cmd$none
|
|
} : ((_elm_lang$core$Native_Utils.cmp(_p0._0, model.enhanceWidth) > 0) ? {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{
|
|
hidden: _elm_lang$core$Basics$not(model.hidden)
|
|
}),
|
|
_1: _elm_lang$core$Platform_Cmd$none
|
|
} : {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{shownAsOverlay: true}),
|
|
_1: _elm_lang$core$Platform_Cmd$none
|
|
});
|
|
default:
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{shownAsOverlay: false}),
|
|
_1: _elm_lang$core$Platform_Cmd$none
|
|
};
|
|
}
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Sidebar$Toggle = {ctor: 'Toggle'};
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$LocalMessage = function (a) {
|
|
return {ctor: 'LocalMessage', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$ErrorMessage = function (a) {
|
|
return {ctor: 'ErrorMessage', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$HandUpdate = function (a) {
|
|
return {ctor: 'HandUpdate', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$NoOp = {ctor: 'NoOp'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$DisableRule = function (a) {
|
|
return {ctor: 'DisableRule', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$EnableRule = function (a) {
|
|
return {ctor: 'EnableRule', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$StartGame = {ctor: 'StartGame'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$AddAi = {ctor: 'AddAi'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$InputMessage = function (a) {
|
|
return {ctor: 'InputMessage', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$ConfigureDecks = function (a) {
|
|
return {ctor: 'ConfigureDecks', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$AddDeck = {ctor: 'AddDeck'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$Fail = F2(
|
|
function (a, b) {
|
|
return {ctor: 'Fail', _0: a, _1: b};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$Add = function (a) {
|
|
return {ctor: 'Add', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$Request = function (a) {
|
|
return {ctor: 'Request', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$DeckId = {ctor: 'DeckId'};
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_History_Messages$LocalMessage = function (a) {
|
|
return {ctor: 'LocalMessage', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_History_Messages$Close = {ctor: 'Close'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_History_Messages$ErrorMessage = function (a) {
|
|
return {ctor: 'ErrorMessage', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_History_Messages$Load = function (a) {
|
|
return {ctor: 'Load', _0: a};
|
|
};
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$LocalMessage = function (a) {
|
|
return {ctor: 'LocalMessage', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$ErrorMessage = function (a) {
|
|
return {ctor: 'ErrorMessage', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$HandUpdate = function (a) {
|
|
return {ctor: 'HandUpdate', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$NoOp = {ctor: 'NoOp'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$HistoryMessage = function (a) {
|
|
return {ctor: 'HistoryMessage', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$ViewHistory = {ctor: 'ViewHistory'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$FinishRound = function (a) {
|
|
return {ctor: 'FinishRound', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$Redraw = {ctor: 'Redraw'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$Back = {ctor: 'Back'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$Skip = function (a) {
|
|
return {ctor: 'Skip', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$AnimatePlayedCards = {ctor: 'AnimatePlayedCards'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$NextRound = {ctor: 'NextRound'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$Choose = function (a) {
|
|
return {ctor: 'Choose', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$Consider = function (a) {
|
|
return {ctor: 'Consider', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$Play = {ctor: 'Play'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$Withdraw = function (a) {
|
|
return {ctor: 'Withdraw', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$Pick = function (a) {
|
|
return {ctor: 'Pick', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$LobbyAndHandUpdated = {ctor: 'LobbyAndHandUpdated'};
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$init = F2(
|
|
function (supported, enabled) {
|
|
return {supported: supported, enabled: enabled, permission: _elm_lang$core$Maybe$Nothing};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$permissions = _elm_lang$core$Native_Platform.incomingPort('permissions', _elm_lang$core$Json_Decode$string);
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$notifications = _elm_lang$core$Native_Platform.outgoingPort(
|
|
'notifications',
|
|
function (v) {
|
|
return {
|
|
title: v.title,
|
|
icon: (v.icon.ctor === 'Nothing') ? null : v.icon._0
|
|
};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$requestPermission = _elm_lang$core$Native_Platform.outgoingPort(
|
|
'requestPermission',
|
|
function (v) {
|
|
return null;
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$Model = F3(
|
|
function (a, b, c) {
|
|
return {supported: a, enabled: b, permission: c};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$Notification = F2(
|
|
function (a, b) {
|
|
return {title: a, icon: b};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$Default = {ctor: 'Default'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$Denied = {ctor: 'Denied'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$Granted = {ctor: 'Granted'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$PermissionChanged = function (a) {
|
|
return {ctor: 'PermissionChanged', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$update = F2(
|
|
function (message, model) {
|
|
var _p0 = message;
|
|
switch (_p0.ctor) {
|
|
case 'PermissionGiven':
|
|
var _p1 = _p0._0;
|
|
return {
|
|
ctor: '_Tuple3',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{
|
|
permission: _elm_lang$core$Maybe$Just(_p1)
|
|
}),
|
|
_1: _elm_lang$core$Platform_Cmd$none,
|
|
_2: _Lattyware$massivedecks$MassiveDecks_Util$cmd(
|
|
_Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$PermissionChanged(_p1))
|
|
};
|
|
case 'SendNotification':
|
|
return (model.supported && model.enabled) ? {
|
|
ctor: '_Tuple3',
|
|
_0: model,
|
|
_1: _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$notifications(_p0._0),
|
|
_2: _elm_lang$core$Platform_Cmd$none
|
|
} : {ctor: '_Tuple3', _0: model, _1: _elm_lang$core$Platform_Cmd$none, _2: _elm_lang$core$Platform_Cmd$none};
|
|
case 'EnableNotifications':
|
|
return {
|
|
ctor: '_Tuple3',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{enabled: true}),
|
|
_1: _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$requestPermission(
|
|
{ctor: '_Tuple0'}),
|
|
_2: _elm_lang$core$Platform_Cmd$none
|
|
};
|
|
default:
|
|
return {
|
|
ctor: '_Tuple3',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{enabled: false}),
|
|
_1: _elm_lang$core$Platform_Cmd$none,
|
|
_2: _elm_lang$core$Platform_Cmd$none
|
|
};
|
|
}
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$DisableNotifications = {ctor: 'DisableNotifications'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$disable = _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$DisableNotifications;
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$EnableNotifications = {ctor: 'EnableNotifications'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$enable = _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$EnableNotifications;
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$SendNotification = function (a) {
|
|
return {ctor: 'SendNotification', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$notify = function (notification) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$SendNotification(notification);
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$PermissionGiven = function (a) {
|
|
return {ctor: 'PermissionGiven', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$permission = function (name) {
|
|
var permission = function () {
|
|
var _p2 = name;
|
|
switch (_p2) {
|
|
case 'granted':
|
|
return _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$Granted;
|
|
case 'denied':
|
|
return _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$Denied;
|
|
case 'default':
|
|
return _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$Default;
|
|
default:
|
|
var _p3 = A2(_elm_lang$core$Debug$log, 'Unexpected permission for browser notifications, assuming denied', name);
|
|
return _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$Denied;
|
|
}
|
|
}();
|
|
return _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$PermissionGiven(permission);
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$subscriptions = function (model) {
|
|
return (model.supported && (model.enabled && _elm_lang$core$Native_Utils.eq(model.permission, _elm_lang$core$Maybe$Nothing))) ? _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$permissions(_Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$permission) : _elm_lang$core$Platform_Sub$none;
|
|
};
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage = function (a) {
|
|
return {ctor: 'LocalMessage', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$Leave = {ctor: 'Leave'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$OverlayMessage = function (a) {
|
|
return {ctor: 'OverlayMessage', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$ErrorMessage = function (a) {
|
|
return {ctor: 'ErrorMessage', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$SidebarMessage = function (a) {
|
|
return {ctor: 'SidebarMessage', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$PlayingMessage = function (a) {
|
|
return {ctor: 'PlayingMessage', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$ConfigMessage = function (a) {
|
|
return {ctor: 'ConfigMessage', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$BrowserNotificationsMessage = function (a) {
|
|
return {ctor: 'BrowserNotificationsMessage', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$NoOp = {ctor: 'NoOp'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$Batch = function (a) {
|
|
return {ctor: 'Batch', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$RenderQr = {ctor: 'RenderQr'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$BrowserNotificationForUser = F3(
|
|
function (a, b, c) {
|
|
return {ctor: 'BrowserNotificationForUser', _0: a, _1: b, _2: c};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$DisplayInviteOverlay = {ctor: 'DisplayInviteOverlay'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$Identify = {ctor: 'Identify'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$UpdateHand = function (a) {
|
|
return {ctor: 'UpdateHand', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$UpdateLobby = function (a) {
|
|
return {ctor: 'UpdateLobby', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$UpdateLobbyAndHand = function (a) {
|
|
return {ctor: 'UpdateLobbyAndHand', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$SetNotification = function (a) {
|
|
return {ctor: 'SetNotification', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$DismissNotification = function (a) {
|
|
return {ctor: 'DismissNotification', _0: a};
|
|
};
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$NoOp = {ctor: 'NoOp'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$Batch = function (a) {
|
|
return {ctor: 'Batch', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$TabsMessage = function (a) {
|
|
return {ctor: 'TabsMessage', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$OverlayMessage = function (a) {
|
|
return {ctor: 'OverlayMessage', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$ErrorMessage = function (a) {
|
|
return {ctor: 'ErrorMessage', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$LobbyMessage = function (a) {
|
|
return {ctor: 'LobbyMessage', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$InputMessage = function (a) {
|
|
return {ctor: 'InputMessage', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$ClearExistingGame = {ctor: 'ClearExistingGame'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$JoinLobby = F2(
|
|
function (a, b) {
|
|
return {ctor: 'JoinLobby', _0: a, _1: b};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$JoinLobbyAsExistingPlayer = F2(
|
|
function (a, b) {
|
|
return {ctor: 'JoinLobbyAsExistingPlayer', _0: a, _1: b};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$JoinGivenLobbyAsNewPlayer = function (a) {
|
|
return {ctor: 'JoinGivenLobbyAsNewPlayer', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$JoinLobbyAsNewPlayer = {ctor: 'JoinLobbyAsNewPlayer'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$ShowInfoMessage = function (a) {
|
|
return {ctor: 'ShowInfoMessage', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$SetButtonsEnabled = function (a) {
|
|
return {ctor: 'SetButtonsEnabled', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$CreateLobby = {ctor: 'CreateLobby'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$SubmitCurrentTab = {ctor: 'SubmitCurrentTab'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$GameCode = {ctor: 'GameCode'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$Name = {ctor: 'Name'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$Join = {ctor: 'Join'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$Create = {ctor: 'Create'};
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Models$Model = F3(
|
|
function (a, b, c) {
|
|
return {decks: a, deckIdInput: b, loadingDecks: c};
|
|
});
|
|
|
|
var _elm_lang$core$Random$onSelfMsg = F3(
|
|
function (_p1, _p0, seed) {
|
|
return _elm_lang$core$Task$succeed(seed);
|
|
});
|
|
var _elm_lang$core$Random$magicNum8 = 2147483562;
|
|
var _elm_lang$core$Random$range = function (_p2) {
|
|
return {ctor: '_Tuple2', _0: 0, _1: _elm_lang$core$Random$magicNum8};
|
|
};
|
|
var _elm_lang$core$Random$magicNum7 = 2137383399;
|
|
var _elm_lang$core$Random$magicNum6 = 2147483563;
|
|
var _elm_lang$core$Random$magicNum5 = 3791;
|
|
var _elm_lang$core$Random$magicNum4 = 40692;
|
|
var _elm_lang$core$Random$magicNum3 = 52774;
|
|
var _elm_lang$core$Random$magicNum2 = 12211;
|
|
var _elm_lang$core$Random$magicNum1 = 53668;
|
|
var _elm_lang$core$Random$magicNum0 = 40014;
|
|
var _elm_lang$core$Random$step = F2(
|
|
function (_p3, seed) {
|
|
var _p4 = _p3;
|
|
return _p4._0(seed);
|
|
});
|
|
var _elm_lang$core$Random$onEffects = F3(
|
|
function (router, commands, seed) {
|
|
var _p5 = commands;
|
|
if (_p5.ctor === '[]') {
|
|
return _elm_lang$core$Task$succeed(seed);
|
|
} else {
|
|
var _p6 = A2(_elm_lang$core$Random$step, _p5._0._0, seed);
|
|
var value = _p6._0;
|
|
var newSeed = _p6._1;
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
A2(_elm_lang$core$Platform$sendToApp, router, value),
|
|
function (_p7) {
|
|
return A3(_elm_lang$core$Random$onEffects, router, _p5._1, newSeed);
|
|
});
|
|
}
|
|
});
|
|
var _elm_lang$core$Random$listHelp = F4(
|
|
function (list, n, generate, seed) {
|
|
listHelp:
|
|
while (true) {
|
|
if (_elm_lang$core$Native_Utils.cmp(n, 1) < 0) {
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$List$reverse(list),
|
|
_1: seed
|
|
};
|
|
} else {
|
|
var _p8 = generate(seed);
|
|
var value = _p8._0;
|
|
var newSeed = _p8._1;
|
|
var _v2 = A2(_elm_lang$core$List_ops['::'], value, list),
|
|
_v3 = n - 1,
|
|
_v4 = generate,
|
|
_v5 = newSeed;
|
|
list = _v2;
|
|
n = _v3;
|
|
generate = _v4;
|
|
seed = _v5;
|
|
continue listHelp;
|
|
}
|
|
}
|
|
});
|
|
var _elm_lang$core$Random$minInt = -2147483648;
|
|
var _elm_lang$core$Random$maxInt = 2147483647;
|
|
var _elm_lang$core$Random$iLogBase = F2(
|
|
function (b, i) {
|
|
return (_elm_lang$core$Native_Utils.cmp(i, b) < 0) ? 1 : (1 + A2(_elm_lang$core$Random$iLogBase, b, (i / b) | 0));
|
|
});
|
|
var _elm_lang$core$Random$command = _elm_lang$core$Native_Platform.leaf('Random');
|
|
var _elm_lang$core$Random$Generator = function (a) {
|
|
return {ctor: 'Generator', _0: a};
|
|
};
|
|
var _elm_lang$core$Random$list = F2(
|
|
function (n, _p9) {
|
|
var _p10 = _p9;
|
|
return _elm_lang$core$Random$Generator(
|
|
function (seed) {
|
|
return A4(
|
|
_elm_lang$core$Random$listHelp,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
n,
|
|
_p10._0,
|
|
seed);
|
|
});
|
|
});
|
|
var _elm_lang$core$Random$map = F2(
|
|
function (func, _p11) {
|
|
var _p12 = _p11;
|
|
return _elm_lang$core$Random$Generator(
|
|
function (seed0) {
|
|
var _p13 = _p12._0(seed0);
|
|
var a = _p13._0;
|
|
var seed1 = _p13._1;
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: func(a),
|
|
_1: seed1
|
|
};
|
|
});
|
|
});
|
|
var _elm_lang$core$Random$map2 = F3(
|
|
function (func, _p15, _p14) {
|
|
var _p16 = _p15;
|
|
var _p17 = _p14;
|
|
return _elm_lang$core$Random$Generator(
|
|
function (seed0) {
|
|
var _p18 = _p16._0(seed0);
|
|
var a = _p18._0;
|
|
var seed1 = _p18._1;
|
|
var _p19 = _p17._0(seed1);
|
|
var b = _p19._0;
|
|
var seed2 = _p19._1;
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: A2(func, a, b),
|
|
_1: seed2
|
|
};
|
|
});
|
|
});
|
|
var _elm_lang$core$Random$pair = F2(
|
|
function (genA, genB) {
|
|
return A3(
|
|
_elm_lang$core$Random$map2,
|
|
F2(
|
|
function (v0, v1) {
|
|
return {ctor: '_Tuple2', _0: v0, _1: v1};
|
|
}),
|
|
genA,
|
|
genB);
|
|
});
|
|
var _elm_lang$core$Random$map3 = F4(
|
|
function (func, _p22, _p21, _p20) {
|
|
var _p23 = _p22;
|
|
var _p24 = _p21;
|
|
var _p25 = _p20;
|
|
return _elm_lang$core$Random$Generator(
|
|
function (seed0) {
|
|
var _p26 = _p23._0(seed0);
|
|
var a = _p26._0;
|
|
var seed1 = _p26._1;
|
|
var _p27 = _p24._0(seed1);
|
|
var b = _p27._0;
|
|
var seed2 = _p27._1;
|
|
var _p28 = _p25._0(seed2);
|
|
var c = _p28._0;
|
|
var seed3 = _p28._1;
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: A3(func, a, b, c),
|
|
_1: seed3
|
|
};
|
|
});
|
|
});
|
|
var _elm_lang$core$Random$map4 = F5(
|
|
function (func, _p32, _p31, _p30, _p29) {
|
|
var _p33 = _p32;
|
|
var _p34 = _p31;
|
|
var _p35 = _p30;
|
|
var _p36 = _p29;
|
|
return _elm_lang$core$Random$Generator(
|
|
function (seed0) {
|
|
var _p37 = _p33._0(seed0);
|
|
var a = _p37._0;
|
|
var seed1 = _p37._1;
|
|
var _p38 = _p34._0(seed1);
|
|
var b = _p38._0;
|
|
var seed2 = _p38._1;
|
|
var _p39 = _p35._0(seed2);
|
|
var c = _p39._0;
|
|
var seed3 = _p39._1;
|
|
var _p40 = _p36._0(seed3);
|
|
var d = _p40._0;
|
|
var seed4 = _p40._1;
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: A4(func, a, b, c, d),
|
|
_1: seed4
|
|
};
|
|
});
|
|
});
|
|
var _elm_lang$core$Random$map5 = F6(
|
|
function (func, _p45, _p44, _p43, _p42, _p41) {
|
|
var _p46 = _p45;
|
|
var _p47 = _p44;
|
|
var _p48 = _p43;
|
|
var _p49 = _p42;
|
|
var _p50 = _p41;
|
|
return _elm_lang$core$Random$Generator(
|
|
function (seed0) {
|
|
var _p51 = _p46._0(seed0);
|
|
var a = _p51._0;
|
|
var seed1 = _p51._1;
|
|
var _p52 = _p47._0(seed1);
|
|
var b = _p52._0;
|
|
var seed2 = _p52._1;
|
|
var _p53 = _p48._0(seed2);
|
|
var c = _p53._0;
|
|
var seed3 = _p53._1;
|
|
var _p54 = _p49._0(seed3);
|
|
var d = _p54._0;
|
|
var seed4 = _p54._1;
|
|
var _p55 = _p50._0(seed4);
|
|
var e = _p55._0;
|
|
var seed5 = _p55._1;
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: A5(func, a, b, c, d, e),
|
|
_1: seed5
|
|
};
|
|
});
|
|
});
|
|
var _elm_lang$core$Random$andThen = F2(
|
|
function (_p56, callback) {
|
|
var _p57 = _p56;
|
|
return _elm_lang$core$Random$Generator(
|
|
function (seed) {
|
|
var _p58 = _p57._0(seed);
|
|
var result = _p58._0;
|
|
var newSeed = _p58._1;
|
|
var _p59 = callback(result);
|
|
var genB = _p59._0;
|
|
return genB(newSeed);
|
|
});
|
|
});
|
|
var _elm_lang$core$Random$State = F2(
|
|
function (a, b) {
|
|
return {ctor: 'State', _0: a, _1: b};
|
|
});
|
|
var _elm_lang$core$Random$initState = function (s$) {
|
|
var s = A2(_elm_lang$core$Basics$max, s$, 0 - s$);
|
|
var q = (s / (_elm_lang$core$Random$magicNum6 - 1)) | 0;
|
|
var s2 = A2(_elm_lang$core$Basics_ops['%'], q, _elm_lang$core$Random$magicNum7 - 1);
|
|
var s1 = A2(_elm_lang$core$Basics_ops['%'], s, _elm_lang$core$Random$magicNum6 - 1);
|
|
return A2(_elm_lang$core$Random$State, s1 + 1, s2 + 1);
|
|
};
|
|
var _elm_lang$core$Random$next = function (_p60) {
|
|
var _p61 = _p60;
|
|
var _p63 = _p61._1;
|
|
var _p62 = _p61._0;
|
|
var k$ = (_p63 / _elm_lang$core$Random$magicNum3) | 0;
|
|
var s2$ = (_elm_lang$core$Random$magicNum4 * (_p63 - (k$ * _elm_lang$core$Random$magicNum3))) - (k$ * _elm_lang$core$Random$magicNum5);
|
|
var s2$$ = (_elm_lang$core$Native_Utils.cmp(s2$, 0) < 0) ? (s2$ + _elm_lang$core$Random$magicNum7) : s2$;
|
|
var k = (_p62 / _elm_lang$core$Random$magicNum1) | 0;
|
|
var s1$ = (_elm_lang$core$Random$magicNum0 * (_p62 - (k * _elm_lang$core$Random$magicNum1))) - (k * _elm_lang$core$Random$magicNum2);
|
|
var s1$$ = (_elm_lang$core$Native_Utils.cmp(s1$, 0) < 0) ? (s1$ + _elm_lang$core$Random$magicNum6) : s1$;
|
|
var z = s1$$ - s2$$;
|
|
var z$ = (_elm_lang$core$Native_Utils.cmp(z, 1) < 0) ? (z + _elm_lang$core$Random$magicNum8) : z;
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: z$,
|
|
_1: A2(_elm_lang$core$Random$State, s1$$, s2$$)
|
|
};
|
|
};
|
|
var _elm_lang$core$Random$split = function (_p64) {
|
|
var _p65 = _p64;
|
|
var _p68 = _p65._1;
|
|
var _p67 = _p65._0;
|
|
var _p66 = _elm_lang$core$Basics$snd(
|
|
_elm_lang$core$Random$next(_p65));
|
|
var t1 = _p66._0;
|
|
var t2 = _p66._1;
|
|
var new_s2 = _elm_lang$core$Native_Utils.eq(_p68, 1) ? (_elm_lang$core$Random$magicNum7 - 1) : (_p68 - 1);
|
|
var new_s1 = _elm_lang$core$Native_Utils.eq(_p67, _elm_lang$core$Random$magicNum6 - 1) ? 1 : (_p67 + 1);
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: A2(_elm_lang$core$Random$State, new_s1, t2),
|
|
_1: A2(_elm_lang$core$Random$State, t1, new_s2)
|
|
};
|
|
};
|
|
var _elm_lang$core$Random$Seed = function (a) {
|
|
return {ctor: 'Seed', _0: a};
|
|
};
|
|
var _elm_lang$core$Random$int = F2(
|
|
function (a, b) {
|
|
return _elm_lang$core$Random$Generator(
|
|
function (_p69) {
|
|
var _p70 = _p69;
|
|
var _p75 = _p70._0;
|
|
var base = 2147483561;
|
|
var f = F3(
|
|
function (n, acc, state) {
|
|
f:
|
|
while (true) {
|
|
var _p71 = n;
|
|
if (_p71 === 0) {
|
|
return {ctor: '_Tuple2', _0: acc, _1: state};
|
|
} else {
|
|
var _p72 = _p75.next(state);
|
|
var x = _p72._0;
|
|
var state$ = _p72._1;
|
|
var _v27 = n - 1,
|
|
_v28 = x + (acc * base),
|
|
_v29 = state$;
|
|
n = _v27;
|
|
acc = _v28;
|
|
state = _v29;
|
|
continue f;
|
|
}
|
|
}
|
|
});
|
|
var _p73 = (_elm_lang$core$Native_Utils.cmp(a, b) < 0) ? {ctor: '_Tuple2', _0: a, _1: b} : {ctor: '_Tuple2', _0: b, _1: a};
|
|
var lo = _p73._0;
|
|
var hi = _p73._1;
|
|
var k = (hi - lo) + 1;
|
|
var n = A2(_elm_lang$core$Random$iLogBase, base, k);
|
|
var _p74 = A3(f, n, 1, _p75.state);
|
|
var v = _p74._0;
|
|
var state$ = _p74._1;
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: lo + A2(_elm_lang$core$Basics_ops['%'], v, k),
|
|
_1: _elm_lang$core$Random$Seed(
|
|
_elm_lang$core$Native_Utils.update(
|
|
_p75,
|
|
{state: state$}))
|
|
};
|
|
});
|
|
});
|
|
var _elm_lang$core$Random$bool = A2(
|
|
_elm_lang$core$Random$map,
|
|
F2(
|
|
function (x, y) {
|
|
return _elm_lang$core$Native_Utils.eq(x, y);
|
|
})(1),
|
|
A2(_elm_lang$core$Random$int, 0, 1));
|
|
var _elm_lang$core$Random$float = F2(
|
|
function (a, b) {
|
|
return _elm_lang$core$Random$Generator(
|
|
function (seed) {
|
|
var _p76 = A2(
|
|
_elm_lang$core$Random$step,
|
|
A2(_elm_lang$core$Random$int, _elm_lang$core$Random$minInt, _elm_lang$core$Random$maxInt),
|
|
seed);
|
|
var number = _p76._0;
|
|
var newSeed = _p76._1;
|
|
var negativeOneToOne = _elm_lang$core$Basics$toFloat(number) / _elm_lang$core$Basics$toFloat(_elm_lang$core$Random$maxInt - _elm_lang$core$Random$minInt);
|
|
var _p77 = (_elm_lang$core$Native_Utils.cmp(a, b) < 0) ? {ctor: '_Tuple2', _0: a, _1: b} : {ctor: '_Tuple2', _0: b, _1: a};
|
|
var lo = _p77._0;
|
|
var hi = _p77._1;
|
|
var scaled = ((lo + hi) / 2) + ((hi - lo) * negativeOneToOne);
|
|
return {ctor: '_Tuple2', _0: scaled, _1: newSeed};
|
|
});
|
|
});
|
|
var _elm_lang$core$Random$initialSeed = function (n) {
|
|
return _elm_lang$core$Random$Seed(
|
|
{
|
|
state: _elm_lang$core$Random$initState(n),
|
|
next: _elm_lang$core$Random$next,
|
|
split: _elm_lang$core$Random$split,
|
|
range: _elm_lang$core$Random$range
|
|
});
|
|
};
|
|
var _elm_lang$core$Random$init = A2(
|
|
_elm_lang$core$Task$andThen,
|
|
_elm_lang$core$Time$now,
|
|
function (t) {
|
|
return _elm_lang$core$Task$succeed(
|
|
_elm_lang$core$Random$initialSeed(
|
|
_elm_lang$core$Basics$round(t)));
|
|
});
|
|
var _elm_lang$core$Random$Generate = function (a) {
|
|
return {ctor: 'Generate', _0: a};
|
|
};
|
|
var _elm_lang$core$Random$generate = F2(
|
|
function (tagger, generator) {
|
|
return _elm_lang$core$Random$command(
|
|
_elm_lang$core$Random$Generate(
|
|
A2(_elm_lang$core$Random$map, tagger, generator)));
|
|
});
|
|
var _elm_lang$core$Random$cmdMap = F2(
|
|
function (func, _p78) {
|
|
var _p79 = _p78;
|
|
return _elm_lang$core$Random$Generate(
|
|
A2(_elm_lang$core$Random$map, func, _p79._0));
|
|
});
|
|
_elm_lang$core$Native_Platform.effectManagers['Random'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Random$init, onEffects: _elm_lang$core$Random$onEffects, onSelfMsg: _elm_lang$core$Random$onSelfMsg, tag: 'cmd', cmdMap: _elm_lang$core$Random$cmdMap};
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_History_Models$Model = function (a) {
|
|
return {rounds: a};
|
|
};
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Models$Model = F6(
|
|
function (a, b, c, d, e, f) {
|
|
return {picked: a, considering: b, finishedRound: c, shownPlayed: d, seed: e, history: f};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Models$ShownPlayedCards = F2(
|
|
function (a, b) {
|
|
return {animated: a, toAnimate: b};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Models$ShownCard = F4(
|
|
function (a, b, c, d) {
|
|
return {rotation: a, horizontalPos: b, isLeft: c, verticalPos: d};
|
|
});
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Models$Model = 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 function (j) {
|
|
return {lobby: a, hand: b, config: c, playing: d, browserNotifications: e, secret: f, init: g, notification: h, qrNeedsRendering: i, sidebar: j};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Models$Model = F9(
|
|
function (a, b, c, d, e, f, g, h, i) {
|
|
return {lobby: a, init: b, nameInput: c, gameCodeInput: d, info: e, errors: f, overlay: g, buttonsEnabled: h, tabs: i};
|
|
});
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_About$contents = _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$p,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Massive Decks is a web game based on the excellent '),
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$href('https://cardsagainsthumanity.com/'),
|
|
_elm_lang$html$Html_Attributes$target('_blank')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Cards against Humanity')
|
|
])),
|
|
_elm_lang$html$Html$text(' - a party game where you play white cards to try and produce the most amusing outcome when '),
|
|
_elm_lang$html$Html$text('combined with the given black card.')
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$p,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Massive Decks is also inspired by: '),
|
|
A2(
|
|
_elm_lang$html$Html$ul,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$href('https://www.cardcastgame.com/'),
|
|
_elm_lang$html$Html_Attributes$target('_blank')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Cardcast')
|
|
])),
|
|
_elm_lang$html$Html$text(' - an app that allows you to play on a ChromeCast.')
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$href('http://pretendyoure.xyz/zy/'),
|
|
_elm_lang$html$Html_Attributes$target('_blank')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Pretend You\'re Xyzzy')
|
|
])),
|
|
_elm_lang$html$Html$text(' - a web game where you can jump in with people you don\'t know.')
|
|
]))
|
|
]))
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$p,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('This is an open source game developed in '),
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$href('http://elm-lang.org/'),
|
|
_elm_lang$html$Html_Attributes$target('_blank')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Elm')
|
|
])),
|
|
_elm_lang$html$Html$text(' for the client and '),
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$href('http://www.scala-lang.org/'),
|
|
_elm_lang$html$Html_Attributes$target('_blank')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Scala')
|
|
])),
|
|
_elm_lang$html$Html$text(' for the server.')
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$p,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('We also use: '),
|
|
A2(
|
|
_elm_lang$html$Html$ul,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$href('https://www.cardcastgame.com/'),
|
|
_elm_lang$html$Html_Attributes$target('_blank')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Cardcast')
|
|
])),
|
|
_elm_lang$html$Html$text('\'s APIs for getting decks of cards (you can go there to make your own!).')
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('The '),
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$href('https://www.playframework.com/'),
|
|
_elm_lang$html$Html_Attributes$target('_blank')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Play framework')
|
|
]))
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$href('http://lesscss.org/'),
|
|
_elm_lang$html$Html_Attributes$target('_blank')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Less')
|
|
]))
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$href('https://fortawesome.github.io/Font-Awesome/'),
|
|
_elm_lang$html$Html_Attributes$target('_blank')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Font Awesome')
|
|
]))
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$href('https://www.muicss.com'),
|
|
_elm_lang$html$Html_Attributes$target('_blank')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('MUI')
|
|
]))
|
|
]))
|
|
]))
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$p,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Bug reports and contributions are welcome on the '),
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$href('https://github.com/Lattyware/massivedecks'),
|
|
_elm_lang$html$Html_Attributes$target('_blank')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('GitHub repository')
|
|
])),
|
|
_elm_lang$html$Html$text(', where you can find the complete source to the game, under the GPLv3 license. The game concept '),
|
|
_elm_lang$html$Html$text('\'Cards against Humanity\' is used under a '),
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$href('https://creativecommons.org/licenses/by-nc-sa/2.0/'),
|
|
_elm_lang$html$Html_Attributes$target('_blank')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Creative Commons BY-NC-SA 2.0 license')
|
|
])),
|
|
_elm_lang$html$Html$text(' granted by '),
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$href('https://cardsagainsthumanity.com/'),
|
|
_elm_lang$html$Html_Attributes$target('_blank')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Cards against Humanity')
|
|
]))
|
|
]))
|
|
]);
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_About$title = 'About';
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_About$icon = 'info-circle';
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_About$show = _Lattyware$massivedecks$MassiveDecks_Components_Overlay$Show(
|
|
A3(_Lattyware$massivedecks$MassiveDecks_Components_Overlay$Overlay, _Lattyware$massivedecks$MassiveDecks_Components_About$icon, _Lattyware$massivedecks$MassiveDecks_Components_About$title, _Lattyware$massivedecks$MassiveDecks_Components_About$contents));
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start_UI$createLobbyButton = function (enabled) {
|
|
return A2(
|
|
_elm_lang$html$Html$button,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui-btn mui-btn--large mui-btn--primary'),
|
|
_elm_lang$html$Html_Events$onClick(_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$CreateLobby),
|
|
_elm_lang$html$Html_Attributes$disabled(
|
|
_elm_lang$core$Basics$not(enabled))
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Create Game')
|
|
]));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start_UI$joinLobbyButton = function (enabled) {
|
|
return A2(
|
|
_elm_lang$html$Html$button,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui-btn mui-btn--large mui-btn--primary'),
|
|
_elm_lang$html$Html_Events$onClick(_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$JoinLobbyAsNewPlayer),
|
|
_elm_lang$html$Html_Attributes$disabled(
|
|
_elm_lang$core$Basics$not(enabled))
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Join Game')
|
|
]));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start_UI$renderTab = F4(
|
|
function (nameEntered, gameCodeEntered, model, tab) {
|
|
var _p0 = tab;
|
|
if (_p0.ctor === 'Create') {
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start_UI$createLobbyButton(nameEntered && model.buttonsEnabled)
|
|
]);
|
|
} else {
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Input$view(model.gameCodeInput),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start_UI$joinLobbyButton(nameEntered && (gameCodeEntered && model.buttonsEnabled))
|
|
]);
|
|
}
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start_UI$view = function (model) {
|
|
var inactive = {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_1: ''
|
|
};
|
|
var active = {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui--is-active')
|
|
]),
|
|
_1: ' mui--is-active'
|
|
};
|
|
var _p1 = (!_elm_lang$core$Native_Utils.eq(model.init.gameCode, _elm_lang$core$Maybe$Nothing)) ? {ctor: '_Tuple2', _0: inactive, _1: active} : {ctor: '_Tuple2', _0: active, _1: inactive};
|
|
var createLiClass = _p1._0._0;
|
|
var createDivClass = _p1._0._1;
|
|
var joinLiClass = _p1._1._0;
|
|
var joinDivClass = _p1._1._1;
|
|
var gameCodeEntered = _elm_lang$core$Basics$not(
|
|
_elm_lang$core$String$isEmpty(model.gameCodeInput.value));
|
|
var nameEntered = _elm_lang$core$Basics$not(
|
|
_elm_lang$core$String$isEmpty(model.nameInput.value));
|
|
return A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$id('start-screen')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$id('start-screen-content'),
|
|
_elm_lang$html$Html_Attributes$class('mui-panel')
|
|
]),
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$h1,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui--divider-bottom')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Massive Decks')
|
|
]))
|
|
]),
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
A2(
|
|
_elm_lang$core$Maybe$withDefault,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
A2(
|
|
_elm_lang$core$Maybe$map,
|
|
function (message) {
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('info-message mui--divider-bottom')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('info-circle'),
|
|
_elm_lang$html$Html$text(' '),
|
|
_elm_lang$html$Html$text(message)
|
|
]))
|
|
]);
|
|
},
|
|
model.info)),
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Input$view(model.nameInput)
|
|
]),
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Tabs$view,
|
|
A3(_Lattyware$massivedecks$MassiveDecks_Scenes_Start_UI$renderTab, nameEntered, gameCodeEntered, model),
|
|
model.tabs),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('about-link mui--divider-top link'),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'tabindex', '0'),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'role', 'button'),
|
|
_elm_lang$html$Html_Events$onClick(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$OverlayMessage(_Lattyware$massivedecks$MassiveDecks_Components_About$show))
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('question-circle'),
|
|
_elm_lang$html$Html$text(' About')
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$id('forkongithub')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$href('https://github.com/lattyware/massivedecks'),
|
|
_elm_lang$html$Html_Attributes$target('_blank')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('github'),
|
|
_elm_lang$html$Html$text(' Fork me on GitHub')
|
|
]))
|
|
]))
|
|
]))
|
|
]))))))
|
|
]));
|
|
};
|
|
|
|
var _elm_lang$websocket$Native_WebSocket = function() {
|
|
|
|
function open(url, settings)
|
|
{
|
|
return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)
|
|
{
|
|
try
|
|
{
|
|
var socket = new WebSocket(url);
|
|
}
|
|
catch(err)
|
|
{
|
|
return callback(_elm_lang$core$Native_Scheduler.fail({
|
|
ctor: err.name === 'SecurityError' ? 'BadSecurity' : 'BadArgs',
|
|
_0: err.message
|
|
}));
|
|
}
|
|
|
|
socket.addEventListener("open", function(event) {
|
|
callback(_elm_lang$core$Native_Scheduler.succeed(socket));
|
|
});
|
|
|
|
socket.addEventListener("message", function(event) {
|
|
_elm_lang$core$Native_Scheduler.rawSpawn(A2(settings.onMessage, socket, event.data));
|
|
});
|
|
|
|
socket.addEventListener("close", function(event) {
|
|
_elm_lang$core$Native_Scheduler.rawSpawn(settings.onClose({
|
|
code: event.code,
|
|
reason: event.reason,
|
|
wasClean: event.wasClean
|
|
}));
|
|
});
|
|
|
|
return function()
|
|
{
|
|
if (socket && socket.close)
|
|
{
|
|
socket.close();
|
|
}
|
|
};
|
|
});
|
|
}
|
|
|
|
function send(socket, string)
|
|
{
|
|
return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)
|
|
{
|
|
var result =
|
|
socket.readyState === WebSocket.OPEN
|
|
? _elm_lang$core$Maybe$Nothing
|
|
: _elm_lang$core$Maybe$Just({ ctor: 'NotOpen' });
|
|
|
|
try
|
|
{
|
|
socket.send(string);
|
|
}
|
|
catch(err)
|
|
{
|
|
result = _elm_lang$core$Maybe$Just({ ctor: 'BadString' });
|
|
}
|
|
|
|
callback(_elm_lang$core$Native_Scheduler.succeed(result));
|
|
});
|
|
}
|
|
|
|
function close(code, reason, socket)
|
|
{
|
|
return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) {
|
|
try
|
|
{
|
|
socket.close(code, reason);
|
|
}
|
|
catch(err)
|
|
{
|
|
return callback(_elm_lang$core$Native_Scheduler.fail(_elm_lang$core$Maybe$Just({
|
|
ctor: err.name === 'SyntaxError' ? 'BadReason' : 'BadCode'
|
|
})));
|
|
}
|
|
callback(_elm_lang$core$Native_Scheduler.succeed(_elm_lang$core$Maybe$Nothing));
|
|
});
|
|
}
|
|
|
|
function bytesQueued(socket)
|
|
{
|
|
return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) {
|
|
callback(_elm_lang$core$Native_Scheduler.succeed(socket.bufferedAmount));
|
|
});
|
|
}
|
|
|
|
return {
|
|
open: F2(open),
|
|
send: F2(send),
|
|
close: F3(close),
|
|
bytesQueued: bytesQueued
|
|
};
|
|
|
|
}();
|
|
|
|
var _elm_lang$websocket$WebSocket_LowLevel$bytesQueued = _elm_lang$websocket$Native_WebSocket.bytesQueued;
|
|
var _elm_lang$websocket$WebSocket_LowLevel$send = _elm_lang$websocket$Native_WebSocket.send;
|
|
var _elm_lang$websocket$WebSocket_LowLevel$closeWith = _elm_lang$websocket$Native_WebSocket.close;
|
|
var _elm_lang$websocket$WebSocket_LowLevel$close = function (socket) {
|
|
return A2(
|
|
_elm_lang$core$Task$map,
|
|
_elm_lang$core$Basics$always(
|
|
{ctor: '_Tuple0'}),
|
|
A3(_elm_lang$websocket$WebSocket_LowLevel$closeWith, 1000, '', socket));
|
|
};
|
|
var _elm_lang$websocket$WebSocket_LowLevel$open = _elm_lang$websocket$Native_WebSocket.open;
|
|
var _elm_lang$websocket$WebSocket_LowLevel$Settings = F2(
|
|
function (a, b) {
|
|
return {onMessage: a, onClose: b};
|
|
});
|
|
var _elm_lang$websocket$WebSocket_LowLevel$WebSocket = {ctor: 'WebSocket'};
|
|
var _elm_lang$websocket$WebSocket_LowLevel$BadArgs = {ctor: 'BadArgs'};
|
|
var _elm_lang$websocket$WebSocket_LowLevel$BadSecurity = {ctor: 'BadSecurity'};
|
|
var _elm_lang$websocket$WebSocket_LowLevel$BadReason = {ctor: 'BadReason'};
|
|
var _elm_lang$websocket$WebSocket_LowLevel$BadCode = {ctor: 'BadCode'};
|
|
var _elm_lang$websocket$WebSocket_LowLevel$BadString = {ctor: 'BadString'};
|
|
var _elm_lang$websocket$WebSocket_LowLevel$NotOpen = {ctor: 'NotOpen'};
|
|
|
|
var _elm_lang$websocket$WebSocket$closeConnection = function (connection) {
|
|
var _p0 = connection;
|
|
if (_p0.ctor === 'Opening') {
|
|
return _elm_lang$core$Process$kill(_p0._1);
|
|
} else {
|
|
return _elm_lang$websocket$WebSocket_LowLevel$close(_p0._0);
|
|
}
|
|
};
|
|
var _elm_lang$websocket$WebSocket$after = function (backoff) {
|
|
return (_elm_lang$core$Native_Utils.cmp(backoff, 1) < 0) ? _elm_lang$core$Task$succeed(
|
|
{ctor: '_Tuple0'}) : _elm_lang$core$Process$sleep(
|
|
_elm_lang$core$Basics$toFloat(
|
|
10 * Math.pow(2, backoff)));
|
|
};
|
|
var _elm_lang$websocket$WebSocket$removeQueue = F2(
|
|
function (name, state) {
|
|
return _elm_lang$core$Native_Utils.update(
|
|
state,
|
|
{
|
|
queues: A2(_elm_lang$core$Dict$remove, name, state.queues)
|
|
});
|
|
});
|
|
var _elm_lang$websocket$WebSocket$updateSocket = F3(
|
|
function (name, connection, state) {
|
|
return _elm_lang$core$Native_Utils.update(
|
|
state,
|
|
{
|
|
sockets: A3(_elm_lang$core$Dict$insert, name, connection, state.sockets)
|
|
});
|
|
});
|
|
var _elm_lang$websocket$WebSocket$add = F2(
|
|
function (value, maybeList) {
|
|
var _p1 = maybeList;
|
|
if (_p1.ctor === 'Nothing') {
|
|
return _elm_lang$core$Maybe$Just(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[value]));
|
|
} else {
|
|
return _elm_lang$core$Maybe$Just(
|
|
A2(_elm_lang$core$List_ops['::'], value, _p1._0));
|
|
}
|
|
});
|
|
var _elm_lang$websocket$WebSocket$buildSubDict = F2(
|
|
function (subs, dict) {
|
|
buildSubDict:
|
|
while (true) {
|
|
var _p2 = subs;
|
|
if (_p2.ctor === '[]') {
|
|
return dict;
|
|
} else {
|
|
if (_p2._0.ctor === 'Listen') {
|
|
var _v3 = _p2._1,
|
|
_v4 = A3(
|
|
_elm_lang$core$Dict$update,
|
|
_p2._0._0,
|
|
_elm_lang$websocket$WebSocket$add(_p2._0._1),
|
|
dict);
|
|
subs = _v3;
|
|
dict = _v4;
|
|
continue buildSubDict;
|
|
} else {
|
|
var _v5 = _p2._1,
|
|
_v6 = A3(
|
|
_elm_lang$core$Dict$update,
|
|
_p2._0._0,
|
|
function (_p3) {
|
|
return _elm_lang$core$Maybe$Just(
|
|
A2(
|
|
_elm_lang$core$Maybe$withDefault,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_p3));
|
|
},
|
|
dict);
|
|
subs = _v5;
|
|
dict = _v6;
|
|
continue buildSubDict;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
var _elm_lang$websocket$WebSocket_ops = _elm_lang$websocket$WebSocket_ops || {};
|
|
_elm_lang$websocket$WebSocket_ops['&>'] = F2(
|
|
function (t1, t2) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
t1,
|
|
function (_p4) {
|
|
return t2;
|
|
});
|
|
});
|
|
var _elm_lang$websocket$WebSocket$sendMessagesHelp = F3(
|
|
function (cmds, socketsDict, queuesDict) {
|
|
sendMessagesHelp:
|
|
while (true) {
|
|
var _p5 = cmds;
|
|
if (_p5.ctor === '[]') {
|
|
return _elm_lang$core$Task$succeed(queuesDict);
|
|
} else {
|
|
var _p9 = _p5._1;
|
|
var _p8 = _p5._0._0;
|
|
var _p7 = _p5._0._1;
|
|
var _p6 = A2(_elm_lang$core$Dict$get, _p8, socketsDict);
|
|
if ((_p6.ctor === 'Just') && (_p6._0.ctor === 'Connected')) {
|
|
return A2(
|
|
_elm_lang$websocket$WebSocket_ops['&>'],
|
|
A2(_elm_lang$websocket$WebSocket_LowLevel$send, _p6._0._0, _p7),
|
|
A3(_elm_lang$websocket$WebSocket$sendMessagesHelp, _p9, socketsDict, queuesDict));
|
|
} else {
|
|
var _v9 = _p9,
|
|
_v10 = socketsDict,
|
|
_v11 = A3(
|
|
_elm_lang$core$Dict$update,
|
|
_p8,
|
|
_elm_lang$websocket$WebSocket$add(_p7),
|
|
queuesDict);
|
|
cmds = _v9;
|
|
socketsDict = _v10;
|
|
queuesDict = _v11;
|
|
continue sendMessagesHelp;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
var _elm_lang$websocket$WebSocket$subscription = _elm_lang$core$Native_Platform.leaf('WebSocket');
|
|
var _elm_lang$websocket$WebSocket$command = _elm_lang$core$Native_Platform.leaf('WebSocket');
|
|
var _elm_lang$websocket$WebSocket$State = F3(
|
|
function (a, b, c) {
|
|
return {sockets: a, queues: b, subs: c};
|
|
});
|
|
var _elm_lang$websocket$WebSocket$init = _elm_lang$core$Task$succeed(
|
|
A3(_elm_lang$websocket$WebSocket$State, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty));
|
|
var _elm_lang$websocket$WebSocket$Send = F2(
|
|
function (a, b) {
|
|
return {ctor: 'Send', _0: a, _1: b};
|
|
});
|
|
var _elm_lang$websocket$WebSocket$send = F2(
|
|
function (url, message) {
|
|
return _elm_lang$websocket$WebSocket$command(
|
|
A2(_elm_lang$websocket$WebSocket$Send, url, message));
|
|
});
|
|
var _elm_lang$websocket$WebSocket$cmdMap = F2(
|
|
function (_p11, _p10) {
|
|
var _p12 = _p10;
|
|
return A2(_elm_lang$websocket$WebSocket$Send, _p12._0, _p12._1);
|
|
});
|
|
var _elm_lang$websocket$WebSocket$KeepAlive = function (a) {
|
|
return {ctor: 'KeepAlive', _0: a};
|
|
};
|
|
var _elm_lang$websocket$WebSocket$keepAlive = function (url) {
|
|
return _elm_lang$websocket$WebSocket$subscription(
|
|
_elm_lang$websocket$WebSocket$KeepAlive(url));
|
|
};
|
|
var _elm_lang$websocket$WebSocket$Listen = F2(
|
|
function (a, b) {
|
|
return {ctor: 'Listen', _0: a, _1: b};
|
|
});
|
|
var _elm_lang$websocket$WebSocket$listen = F2(
|
|
function (url, tagger) {
|
|
return _elm_lang$websocket$WebSocket$subscription(
|
|
A2(_elm_lang$websocket$WebSocket$Listen, url, tagger));
|
|
});
|
|
var _elm_lang$websocket$WebSocket$subMap = F2(
|
|
function (func, sub) {
|
|
var _p13 = sub;
|
|
if (_p13.ctor === 'Listen') {
|
|
return A2(
|
|
_elm_lang$websocket$WebSocket$Listen,
|
|
_p13._0,
|
|
function (_p14) {
|
|
return func(
|
|
_p13._1(_p14));
|
|
});
|
|
} else {
|
|
return _elm_lang$websocket$WebSocket$KeepAlive(_p13._0);
|
|
}
|
|
});
|
|
var _elm_lang$websocket$WebSocket$Connected = function (a) {
|
|
return {ctor: 'Connected', _0: a};
|
|
};
|
|
var _elm_lang$websocket$WebSocket$Opening = F2(
|
|
function (a, b) {
|
|
return {ctor: 'Opening', _0: a, _1: b};
|
|
});
|
|
var _elm_lang$websocket$WebSocket$BadOpen = function (a) {
|
|
return {ctor: 'BadOpen', _0: a};
|
|
};
|
|
var _elm_lang$websocket$WebSocket$GoodOpen = F2(
|
|
function (a, b) {
|
|
return {ctor: 'GoodOpen', _0: a, _1: b};
|
|
});
|
|
var _elm_lang$websocket$WebSocket$Die = function (a) {
|
|
return {ctor: 'Die', _0: a};
|
|
};
|
|
var _elm_lang$websocket$WebSocket$Receive = F2(
|
|
function (a, b) {
|
|
return {ctor: 'Receive', _0: a, _1: b};
|
|
});
|
|
var _elm_lang$websocket$WebSocket$open = F2(
|
|
function (name, router) {
|
|
return A2(
|
|
_elm_lang$websocket$WebSocket_LowLevel$open,
|
|
name,
|
|
{
|
|
onMessage: F2(
|
|
function (_p15, msg) {
|
|
return A2(
|
|
_elm_lang$core$Platform$sendToSelf,
|
|
router,
|
|
A2(_elm_lang$websocket$WebSocket$Receive, name, msg));
|
|
}),
|
|
onClose: function (details) {
|
|
return A2(
|
|
_elm_lang$core$Platform$sendToSelf,
|
|
router,
|
|
_elm_lang$websocket$WebSocket$Die(name));
|
|
}
|
|
});
|
|
});
|
|
var _elm_lang$websocket$WebSocket$attemptOpen = F3(
|
|
function (router, backoff, name) {
|
|
var badOpen = function (_p16) {
|
|
return A2(
|
|
_elm_lang$core$Platform$sendToSelf,
|
|
router,
|
|
_elm_lang$websocket$WebSocket$BadOpen(name));
|
|
};
|
|
var goodOpen = function (ws) {
|
|
return A2(
|
|
_elm_lang$core$Platform$sendToSelf,
|
|
router,
|
|
A2(_elm_lang$websocket$WebSocket$GoodOpen, name, ws));
|
|
};
|
|
var actuallyAttemptOpen = A2(
|
|
_elm_lang$core$Task$onError,
|
|
A2(
|
|
_elm_lang$core$Task$andThen,
|
|
A2(_elm_lang$websocket$WebSocket$open, name, router),
|
|
goodOpen),
|
|
badOpen);
|
|
return _elm_lang$core$Process$spawn(
|
|
A2(
|
|
_elm_lang$websocket$WebSocket_ops['&>'],
|
|
_elm_lang$websocket$WebSocket$after(backoff),
|
|
actuallyAttemptOpen));
|
|
});
|
|
var _elm_lang$websocket$WebSocket$onEffects = F4(
|
|
function (router, cmds, subs, state) {
|
|
var newSubs = A2(_elm_lang$websocket$WebSocket$buildSubDict, subs, _elm_lang$core$Dict$empty);
|
|
var cleanup = function (newQueues) {
|
|
var rightStep = F3(
|
|
function (name, connection, getNewSockets) {
|
|
return A2(
|
|
_elm_lang$websocket$WebSocket_ops['&>'],
|
|
_elm_lang$websocket$WebSocket$closeConnection(connection),
|
|
getNewSockets);
|
|
});
|
|
var bothStep = F4(
|
|
function (name, _p17, connection, getNewSockets) {
|
|
return A2(
|
|
_elm_lang$core$Task$map,
|
|
A2(_elm_lang$core$Dict$insert, name, connection),
|
|
getNewSockets);
|
|
});
|
|
var leftStep = F3(
|
|
function (name, _p18, getNewSockets) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
getNewSockets,
|
|
function (newSockets) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
A3(_elm_lang$websocket$WebSocket$attemptOpen, router, 0, name),
|
|
function (pid) {
|
|
return _elm_lang$core$Task$succeed(
|
|
A3(
|
|
_elm_lang$core$Dict$insert,
|
|
name,
|
|
A2(_elm_lang$websocket$WebSocket$Opening, 0, pid),
|
|
newSockets));
|
|
});
|
|
});
|
|
});
|
|
var newEntries = A2(
|
|
_elm_lang$core$Dict$union,
|
|
newQueues,
|
|
A2(
|
|
_elm_lang$core$Dict$map,
|
|
F2(
|
|
function (k, v) {
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[]);
|
|
}),
|
|
newSubs));
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
A6(
|
|
_elm_lang$core$Dict$merge,
|
|
leftStep,
|
|
bothStep,
|
|
rightStep,
|
|
newEntries,
|
|
state.sockets,
|
|
_elm_lang$core$Task$succeed(_elm_lang$core$Dict$empty)),
|
|
function (newSockets) {
|
|
return _elm_lang$core$Task$succeed(
|
|
A3(_elm_lang$websocket$WebSocket$State, newSockets, newQueues, newSubs));
|
|
});
|
|
};
|
|
var sendMessagesGetNewQueues = A3(_elm_lang$websocket$WebSocket$sendMessagesHelp, cmds, state.sockets, state.queues);
|
|
return A2(_elm_lang$core$Task$andThen, sendMessagesGetNewQueues, cleanup);
|
|
});
|
|
var _elm_lang$websocket$WebSocket$onSelfMsg = F3(
|
|
function (router, selfMsg, state) {
|
|
var _p19 = selfMsg;
|
|
switch (_p19.ctor) {
|
|
case 'Receive':
|
|
var sends = A2(
|
|
_elm_lang$core$List$map,
|
|
function (tagger) {
|
|
return A2(
|
|
_elm_lang$core$Platform$sendToApp,
|
|
router,
|
|
tagger(_p19._1));
|
|
},
|
|
A2(
|
|
_elm_lang$core$Maybe$withDefault,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
A2(_elm_lang$core$Dict$get, _p19._0, state.subs)));
|
|
return A2(
|
|
_elm_lang$websocket$WebSocket_ops['&>'],
|
|
_elm_lang$core$Task$sequence(sends),
|
|
_elm_lang$core$Task$succeed(state));
|
|
case 'Die':
|
|
var _p21 = _p19._0;
|
|
var _p20 = A2(_elm_lang$core$Dict$get, _p21, state.sockets);
|
|
if (_p20.ctor === 'Nothing') {
|
|
return _elm_lang$core$Task$succeed(state);
|
|
} else {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
A3(_elm_lang$websocket$WebSocket$attemptOpen, router, 0, _p21),
|
|
function (pid) {
|
|
return _elm_lang$core$Task$succeed(
|
|
A3(
|
|
_elm_lang$websocket$WebSocket$updateSocket,
|
|
_p21,
|
|
A2(_elm_lang$websocket$WebSocket$Opening, 0, pid),
|
|
state));
|
|
});
|
|
}
|
|
case 'GoodOpen':
|
|
var _p24 = _p19._1;
|
|
var _p23 = _p19._0;
|
|
var _p22 = A2(_elm_lang$core$Dict$get, _p23, state.queues);
|
|
if (_p22.ctor === 'Nothing') {
|
|
return _elm_lang$core$Task$succeed(
|
|
A3(
|
|
_elm_lang$websocket$WebSocket$updateSocket,
|
|
_p23,
|
|
_elm_lang$websocket$WebSocket$Connected(_p24),
|
|
state));
|
|
} else {
|
|
return A3(
|
|
_elm_lang$core$List$foldl,
|
|
F2(
|
|
function (msg, task) {
|
|
return A2(
|
|
_elm_lang$websocket$WebSocket_ops['&>'],
|
|
A2(_elm_lang$websocket$WebSocket_LowLevel$send, _p24, msg),
|
|
task);
|
|
}),
|
|
_elm_lang$core$Task$succeed(
|
|
A2(
|
|
_elm_lang$websocket$WebSocket$removeQueue,
|
|
_p23,
|
|
A3(
|
|
_elm_lang$websocket$WebSocket$updateSocket,
|
|
_p23,
|
|
_elm_lang$websocket$WebSocket$Connected(_p24),
|
|
state))),
|
|
_p22._0);
|
|
}
|
|
default:
|
|
var _p27 = _p19._0;
|
|
var _p25 = A2(_elm_lang$core$Dict$get, _p27, state.sockets);
|
|
if (_p25.ctor === 'Nothing') {
|
|
return _elm_lang$core$Task$succeed(state);
|
|
} else {
|
|
if (_p25._0.ctor === 'Opening') {
|
|
var _p26 = _p25._0._0;
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
A3(_elm_lang$websocket$WebSocket$attemptOpen, router, _p26 + 1, _p27),
|
|
function (pid) {
|
|
return _elm_lang$core$Task$succeed(
|
|
A3(
|
|
_elm_lang$websocket$WebSocket$updateSocket,
|
|
_p27,
|
|
A2(_elm_lang$websocket$WebSocket$Opening, _p26 + 1, pid),
|
|
state));
|
|
});
|
|
} else {
|
|
return _elm_lang$core$Task$succeed(state);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
_elm_lang$core$Native_Platform.effectManagers['WebSocket'] = {pkg: 'elm-lang/websocket', init: _elm_lang$websocket$WebSocket$init, onEffects: _elm_lang$websocket$WebSocket$onEffects, onSelfMsg: _elm_lang$websocket$WebSocket$onSelfMsg, tag: 'fx', cmdMap: _elm_lang$websocket$WebSocket$cmdMap, subMap: _elm_lang$websocket$WebSocket$subMap};
|
|
|
|
var _elm_lang$animation_frame$Native_AnimationFrame = function()
|
|
{
|
|
|
|
var hasStartTime =
|
|
window.performance &&
|
|
window.performance.timing &&
|
|
window.performance.timing.navigationStart;
|
|
|
|
var navStart = hasStartTime
|
|
? window.performance.timing.navigationStart
|
|
: Date.now();
|
|
|
|
var rAF = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)
|
|
{
|
|
var id = requestAnimationFrame(function(time) {
|
|
var timeNow = time
|
|
? (time > navStart ? time : time + navStart)
|
|
: Date.now();
|
|
|
|
callback(_elm_lang$core$Native_Scheduler.succeed(timeNow));
|
|
});
|
|
|
|
return function() {
|
|
cancelAnimationFrame(id);
|
|
};
|
|
});
|
|
|
|
return {
|
|
rAF: rAF
|
|
};
|
|
|
|
}();
|
|
|
|
var _elm_lang$animation_frame$AnimationFrame$rAF = _elm_lang$animation_frame$Native_AnimationFrame.rAF;
|
|
var _elm_lang$animation_frame$AnimationFrame$subscription = _elm_lang$core$Native_Platform.leaf('AnimationFrame');
|
|
var _elm_lang$animation_frame$AnimationFrame$State = F3(
|
|
function (a, b, c) {
|
|
return {subs: a, request: b, oldTime: c};
|
|
});
|
|
var _elm_lang$animation_frame$AnimationFrame$init = _elm_lang$core$Task$succeed(
|
|
A3(
|
|
_elm_lang$animation_frame$AnimationFrame$State,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Maybe$Nothing,
|
|
0));
|
|
var _elm_lang$animation_frame$AnimationFrame$onEffects = F3(
|
|
function (router, subs, _p0) {
|
|
var _p1 = _p0;
|
|
var _p5 = _p1.request;
|
|
var _p4 = _p1.oldTime;
|
|
var _p2 = {ctor: '_Tuple2', _0: _p5, _1: subs};
|
|
if (_p2._0.ctor === 'Nothing') {
|
|
if (_p2._1.ctor === '[]') {
|
|
return _elm_lang$core$Task$succeed(
|
|
A3(
|
|
_elm_lang$animation_frame$AnimationFrame$State,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Maybe$Nothing,
|
|
_p4));
|
|
} else {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
_elm_lang$core$Process$spawn(
|
|
A2(
|
|
_elm_lang$core$Task$andThen,
|
|
_elm_lang$animation_frame$AnimationFrame$rAF,
|
|
_elm_lang$core$Platform$sendToSelf(router))),
|
|
function (pid) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
_elm_lang$core$Time$now,
|
|
function (time) {
|
|
return _elm_lang$core$Task$succeed(
|
|
A3(
|
|
_elm_lang$animation_frame$AnimationFrame$State,
|
|
subs,
|
|
_elm_lang$core$Maybe$Just(pid),
|
|
time));
|
|
});
|
|
});
|
|
}
|
|
} else {
|
|
if (_p2._1.ctor === '[]') {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
_elm_lang$core$Process$kill(_p2._0._0),
|
|
function (_p3) {
|
|
return _elm_lang$core$Task$succeed(
|
|
A3(
|
|
_elm_lang$animation_frame$AnimationFrame$State,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Maybe$Nothing,
|
|
_p4));
|
|
});
|
|
} else {
|
|
return _elm_lang$core$Task$succeed(
|
|
A3(_elm_lang$animation_frame$AnimationFrame$State, subs, _p5, _p4));
|
|
}
|
|
}
|
|
});
|
|
var _elm_lang$animation_frame$AnimationFrame$onSelfMsg = F3(
|
|
function (router, newTime, _p6) {
|
|
var _p7 = _p6;
|
|
var _p10 = _p7.subs;
|
|
var diff = newTime - _p7.oldTime;
|
|
var send = function (sub) {
|
|
var _p8 = sub;
|
|
if (_p8.ctor === 'Time') {
|
|
return A2(
|
|
_elm_lang$core$Platform$sendToApp,
|
|
router,
|
|
_p8._0(newTime));
|
|
} else {
|
|
return A2(
|
|
_elm_lang$core$Platform$sendToApp,
|
|
router,
|
|
_p8._0(diff));
|
|
}
|
|
};
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
_elm_lang$core$Process$spawn(
|
|
A2(
|
|
_elm_lang$core$Task$andThen,
|
|
_elm_lang$animation_frame$AnimationFrame$rAF,
|
|
_elm_lang$core$Platform$sendToSelf(router))),
|
|
function (pid) {
|
|
return A2(
|
|
_elm_lang$core$Task$andThen,
|
|
_elm_lang$core$Task$sequence(
|
|
A2(_elm_lang$core$List$map, send, _p10)),
|
|
function (_p9) {
|
|
return _elm_lang$core$Task$succeed(
|
|
A3(
|
|
_elm_lang$animation_frame$AnimationFrame$State,
|
|
_p10,
|
|
_elm_lang$core$Maybe$Just(pid),
|
|
newTime));
|
|
});
|
|
});
|
|
});
|
|
var _elm_lang$animation_frame$AnimationFrame$Diff = function (a) {
|
|
return {ctor: 'Diff', _0: a};
|
|
};
|
|
var _elm_lang$animation_frame$AnimationFrame$diffs = function (tagger) {
|
|
return _elm_lang$animation_frame$AnimationFrame$subscription(
|
|
_elm_lang$animation_frame$AnimationFrame$Diff(tagger));
|
|
};
|
|
var _elm_lang$animation_frame$AnimationFrame$Time = function (a) {
|
|
return {ctor: 'Time', _0: a};
|
|
};
|
|
var _elm_lang$animation_frame$AnimationFrame$times = function (tagger) {
|
|
return _elm_lang$animation_frame$AnimationFrame$subscription(
|
|
_elm_lang$animation_frame$AnimationFrame$Time(tagger));
|
|
};
|
|
var _elm_lang$animation_frame$AnimationFrame$subMap = F2(
|
|
function (func, sub) {
|
|
var _p11 = sub;
|
|
if (_p11.ctor === 'Time') {
|
|
return _elm_lang$animation_frame$AnimationFrame$Time(
|
|
function (_p12) {
|
|
return func(
|
|
_p11._0(_p12));
|
|
});
|
|
} else {
|
|
return _elm_lang$animation_frame$AnimationFrame$Diff(
|
|
function (_p13) {
|
|
return func(
|
|
_p11._0(_p13));
|
|
});
|
|
}
|
|
});
|
|
_elm_lang$core$Native_Platform.effectManagers['AnimationFrame'] = {pkg: 'elm-lang/animation-frame', init: _elm_lang$animation_frame$AnimationFrame$init, onEffects: _elm_lang$animation_frame$AnimationFrame$onEffects, onSelfMsg: _elm_lang$animation_frame$AnimationFrame$onSelfMsg, tag: 'sub', subMap: _elm_lang$animation_frame$AnimationFrame$subMap};
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_QR$view = function (containerId) {
|
|
return A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$id(containerId)
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_QR$qr = _elm_lang$core$Native_Platform.outgoingPort(
|
|
'qr',
|
|
function (v) {
|
|
return {id: v.id, value: v.value};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Components_QR$encodeAndRender = F2(
|
|
function (containerId, value) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Components_QR$qr(
|
|
{id: containerId, value: value});
|
|
});
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$ruleNameToId = function (name) {
|
|
var _p0 = name;
|
|
if (_p0 === 'reboot') {
|
|
return _elm_lang$core$Maybe$Just(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_HouseRule_Id$Reboot);
|
|
} else {
|
|
return _elm_lang$core$Maybe$Nothing;
|
|
}
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$houseRuleDecoder = A2(
|
|
_elm_lang$core$Json_Decode$customDecoder,
|
|
_elm_lang$core$Json_Decode$string,
|
|
function (name) {
|
|
return A2(
|
|
_elm_lang$core$Result$fromMaybe,
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
'Unknown house rule \'',
|
|
A2(_elm_lang$core$Basics_ops['++'], name, '\'.')),
|
|
_Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$ruleNameToId(name));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$playerIdDecoder = _elm_lang$core$Json_Decode$int;
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$playerSecretDecoder = A3(
|
|
_elm_lang$core$Json_Decode$object2,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Player$Secret,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'id', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$playerIdDecoder),
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'secret', _elm_lang$core$Json_Decode$string));
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$responseDecoder = A3(
|
|
_elm_lang$core$Json_Decode$object2,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Card$Response,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'id', _elm_lang$core$Json_Decode$string),
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'text', _elm_lang$core$Json_Decode$string));
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$callDecoder = A3(
|
|
_elm_lang$core$Json_Decode$object2,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Card$Call,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'id', _elm_lang$core$Json_Decode$string),
|
|
A2(
|
|
_elm_lang$core$Json_Decode_ops[':='],
|
|
'parts',
|
|
_elm_lang$core$Json_Decode$list(_elm_lang$core$Json_Decode$string)));
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$playedByAndWinnerDecoder = A3(
|
|
_elm_lang$core$Json_Decode$object2,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Player$PlayedByAndWinner,
|
|
A2(
|
|
_elm_lang$core$Json_Decode_ops[':='],
|
|
'playedBy',
|
|
_elm_lang$core$Json_Decode$list(_Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$playerIdDecoder)),
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'winner', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$playerIdDecoder));
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$revealedResponsesDecoder = A3(
|
|
_elm_lang$core$Json_Decode$object2,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Card$RevealedResponses,
|
|
A2(
|
|
_elm_lang$core$Json_Decode_ops[':='],
|
|
'cards',
|
|
_elm_lang$core$Json_Decode$list(
|
|
_elm_lang$core$Json_Decode$list(_Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$responseDecoder))),
|
|
_elm_lang$core$Json_Decode$maybe(
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'playedByAndWinner', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$playedByAndWinnerDecoder)));
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$finishedRoundDecoder = A5(
|
|
_elm_lang$core$Json_Decode$object4,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Game$FinishedRound,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'czar', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$playerIdDecoder),
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'call', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$callDecoder),
|
|
A2(
|
|
_elm_lang$core$Json_Decode_ops[':='],
|
|
'cards',
|
|
_elm_lang$core$Json_Decode$list(
|
|
_elm_lang$core$Json_Decode$list(_Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$responseDecoder))),
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'playedByAndWinner', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$playedByAndWinnerDecoder));
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$playerStatusDecoder = A2(
|
|
_elm_lang$core$Json_Decode$customDecoder,
|
|
_elm_lang$core$Json_Decode$string,
|
|
function (name) {
|
|
return A2(
|
|
_elm_lang$core$Result$fromMaybe,
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
'Unknown player status \'',
|
|
A2(_elm_lang$core$Basics_ops['++'], name, '\'.')),
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Player$nameToStatus(name));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$playerDecoder = A7(
|
|
_elm_lang$core$Json_Decode$object6,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Player$Player,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'id', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$playerIdDecoder),
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'name', _elm_lang$core$Json_Decode$string),
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'status', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$playerStatusDecoder),
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'score', _elm_lang$core$Json_Decode$int),
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'disconnected', _elm_lang$core$Json_Decode$bool),
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'left', _elm_lang$core$Json_Decode$bool));
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$handDecoder = A2(
|
|
_elm_lang$core$Json_Decode$object1,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Card$Hand,
|
|
A2(
|
|
_elm_lang$core$Json_Decode_ops[':='],
|
|
'hand',
|
|
_elm_lang$core$Json_Decode$list(_Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$responseDecoder)));
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$deckInfoDecoder = A5(
|
|
_elm_lang$core$Json_Decode$object4,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Game$DeckInfo,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'id', _elm_lang$core$Json_Decode$string),
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'name', _elm_lang$core$Json_Decode$string),
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'calls', _elm_lang$core$Json_Decode$int),
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'responses', _elm_lang$core$Json_Decode$int));
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$configDecoder = A3(
|
|
_elm_lang$core$Json_Decode$object2,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Game$Config,
|
|
A2(
|
|
_elm_lang$core$Json_Decode_ops[':='],
|
|
'decks',
|
|
_elm_lang$core$Json_Decode$list(_Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$deckInfoDecoder)),
|
|
A2(
|
|
_elm_lang$core$Json_Decode_ops[':='],
|
|
'houseRules',
|
|
_elm_lang$core$Json_Decode$list(_Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$houseRuleDecoder)));
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$ResponsesTransport = F2(
|
|
function (a, b) {
|
|
return {hidden: a, revealed: b};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$responsesTransportDecoder = A3(
|
|
_elm_lang$core$Json_Decode$object2,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$ResponsesTransport,
|
|
_elm_lang$core$Json_Decode$maybe(
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'hidden', _elm_lang$core$Json_Decode$int)),
|
|
_elm_lang$core$Json_Decode$maybe(
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'revealed', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$revealedResponsesDecoder)));
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$responsesDecoder = A2(
|
|
_elm_lang$core$Json_Decode$customDecoder,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$responsesTransportDecoder,
|
|
function (transport) {
|
|
var _p1 = transport.hidden;
|
|
if (_p1.ctor === 'Just') {
|
|
var _p2 = transport.revealed;
|
|
if (_p2.ctor === 'Just') {
|
|
return _elm_lang$core$Result$Err('Got both count and cards.');
|
|
} else {
|
|
return _elm_lang$core$Result$Ok(
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Card$Hidden(_p1._0));
|
|
}
|
|
} else {
|
|
var _p3 = transport.revealed;
|
|
if (_p3.ctor === 'Just') {
|
|
return _elm_lang$core$Result$Ok(
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Card$Revealed(_p3._0));
|
|
} else {
|
|
return _elm_lang$core$Result$Err('Got neither count nor cards.');
|
|
}
|
|
}
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$roundDecoder = A4(
|
|
_elm_lang$core$Json_Decode$object3,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Game$Round,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'czar', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$playerIdDecoder),
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'call', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$callDecoder),
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'responses', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$responsesDecoder));
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$lobbyDecoder = A5(
|
|
_elm_lang$core$Json_Decode$object4,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Game$Lobby,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'gameCode', _elm_lang$core$Json_Decode$string),
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'config', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$configDecoder),
|
|
A2(
|
|
_elm_lang$core$Json_Decode_ops[':='],
|
|
'players',
|
|
_elm_lang$core$Json_Decode$list(_Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$playerDecoder)),
|
|
_elm_lang$core$Json_Decode$maybe(
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'round', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$roundDecoder)));
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$lobbyAndHandDecoder = A3(
|
|
_elm_lang$core$Json_Decode$object2,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Game$LobbyAndHand,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'lobby', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$lobbyDecoder),
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'hand', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$handDecoder));
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Event$ConfigChange = function (a) {
|
|
return {ctor: 'ConfigChange', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Event$GameEnd = {ctor: 'GameEnd'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Event$GameStart = {ctor: 'GameStart'};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Event$RoundEnd = function (a) {
|
|
return {ctor: 'RoundEnd', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Event$RoundJudging = function (a) {
|
|
return {ctor: 'RoundJudging', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Event$RoundPlayed = function (a) {
|
|
return {ctor: 'RoundPlayed', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Event$RoundStart = F2(
|
|
function (a, b) {
|
|
return {ctor: 'RoundStart', _0: a, _1: b};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Event$HandChange = function (a) {
|
|
return {ctor: 'HandChange', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Event$PlayerScoreChange = F2(
|
|
function (a, b) {
|
|
return {ctor: 'PlayerScoreChange', _0: a, _1: b};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Event$PlayerReconnect = function (a) {
|
|
return {ctor: 'PlayerReconnect', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Event$PlayerDisconnect = function (a) {
|
|
return {ctor: 'PlayerDisconnect', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Event$PlayerLeft = function (a) {
|
|
return {ctor: 'PlayerLeft', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Event$PlayerStatus = F2(
|
|
function (a, b) {
|
|
return {ctor: 'PlayerStatus', _0: a, _1: b};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Event$PlayerJoin = function (a) {
|
|
return {ctor: 'PlayerJoin', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Event$Sync = function (a) {
|
|
return {ctor: 'Sync', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Event$specificEventDecoder = function (name) {
|
|
var _p0 = name;
|
|
switch (_p0) {
|
|
case 'Sync':
|
|
return A2(
|
|
_elm_lang$core$Json_Decode$object1,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Event$Sync,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'lobbyAndHand', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$lobbyAndHandDecoder));
|
|
case 'PlayerJoin':
|
|
return A2(
|
|
_elm_lang$core$Json_Decode$object1,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Event$PlayerJoin,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'player', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$playerDecoder));
|
|
case 'PlayerStatus':
|
|
return A3(
|
|
_elm_lang$core$Json_Decode$object2,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Event$PlayerStatus,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'player', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$playerIdDecoder),
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'status', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$playerStatusDecoder));
|
|
case 'PlayerLeft':
|
|
return A2(
|
|
_elm_lang$core$Json_Decode$object1,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Event$PlayerLeft,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'player', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$playerIdDecoder));
|
|
case 'PlayerDisconnect':
|
|
return A2(
|
|
_elm_lang$core$Json_Decode$object1,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Event$PlayerDisconnect,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'player', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$playerIdDecoder));
|
|
case 'PlayerReconnect':
|
|
return A2(
|
|
_elm_lang$core$Json_Decode$object1,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Event$PlayerReconnect,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'player', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$playerIdDecoder));
|
|
case 'PlayerScoreChange':
|
|
return A3(
|
|
_elm_lang$core$Json_Decode$object2,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Event$PlayerScoreChange,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'player', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$playerIdDecoder),
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'score', _elm_lang$core$Json_Decode$int));
|
|
case 'HandChange':
|
|
return A2(
|
|
_elm_lang$core$Json_Decode$object1,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Event$HandChange,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'hand', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$handDecoder));
|
|
case 'RoundStart':
|
|
return A3(
|
|
_elm_lang$core$Json_Decode$object2,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Event$RoundStart,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'czar', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$playerIdDecoder),
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'call', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$callDecoder));
|
|
case 'RoundPlayed':
|
|
return A2(
|
|
_elm_lang$core$Json_Decode$object1,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Event$RoundPlayed,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'playedCards', _elm_lang$core$Json_Decode$int));
|
|
case 'RoundJudging':
|
|
return A2(
|
|
_elm_lang$core$Json_Decode$object1,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Event$RoundJudging,
|
|
A2(
|
|
_elm_lang$core$Json_Decode_ops[':='],
|
|
'playedCards',
|
|
_elm_lang$core$Json_Decode$list(
|
|
_elm_lang$core$Json_Decode$list(_Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$responseDecoder))));
|
|
case 'RoundEnd':
|
|
return A2(
|
|
_elm_lang$core$Json_Decode$object1,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Event$RoundEnd,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'finishedRound', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$finishedRoundDecoder));
|
|
case 'GameStart':
|
|
return _elm_lang$core$Json_Decode$succeed(_Lattyware$massivedecks$MassiveDecks_Models_Event$GameStart);
|
|
case 'GameEnd':
|
|
return _elm_lang$core$Json_Decode$succeed(_Lattyware$massivedecks$MassiveDecks_Models_Event$GameEnd);
|
|
case 'ConfigChange':
|
|
return A2(
|
|
_elm_lang$core$Json_Decode$object1,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Event$ConfigChange,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'config', _Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$configDecoder));
|
|
default:
|
|
return _elm_lang$core$Json_Decode$fail(
|
|
A2(_elm_lang$core$Basics_ops['++'], _p0, ' is not a recognised event.'));
|
|
}
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Event$eventDecoder = A2(
|
|
_elm_lang$core$Json_Decode$andThen,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'event', _elm_lang$core$Json_Decode$string),
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Event$specificEventDecoder);
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_Event$fromJson = function (json) {
|
|
return A2(_elm_lang$core$Json_Decode$decodeString, _Lattyware$massivedecks$MassiveDecks_Models_Event$eventDecoder, json);
|
|
};
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_JSON_Encode$encodeName = function (name) {
|
|
return _elm_lang$core$Json_Encode$object(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: 'name',
|
|
_1: _elm_lang$core$Json_Encode$string(name)
|
|
}
|
|
]));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_JSON_Encode$encodePlayerId = function (playerId) {
|
|
return _elm_lang$core$Json_Encode$int(playerId);
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_JSON_Encode$encodePlayerSecret = function (playerSecret) {
|
|
return _elm_lang$core$Json_Encode$object(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: 'id',
|
|
_1: _Lattyware$massivedecks$MassiveDecks_Models_JSON_Encode$encodePlayerId(playerSecret.id)
|
|
},
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: 'secret',
|
|
_1: _elm_lang$core$Json_Encode$string(playerSecret.secret)
|
|
}
|
|
]));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_JSON_Encode$encodeDeckId = function (id) {
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: 'deckId',
|
|
_1: _elm_lang$core$Json_Encode$string(id)
|
|
};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Models_JSON_Encode$encodeCommand = F3(
|
|
function (action, playerSecret, rest) {
|
|
return _elm_lang$core$Json_Encode$object(
|
|
A2(
|
|
_elm_lang$core$List$append,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: 'command',
|
|
_1: _elm_lang$core$Json_Encode$string(action)
|
|
},
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: 'secret',
|
|
_1: _Lattyware$massivedecks$MassiveDecks_Models_JSON_Encode$encodePlayerSecret(playerSecret)
|
|
}
|
|
]),
|
|
rest));
|
|
});
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_API_Request$errorKeyDecoder = A2(
|
|
_elm_lang$core$Json_Decode$at,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
['error']),
|
|
_elm_lang$core$Json_Decode$string);
|
|
var _Lattyware$massivedecks$MassiveDecks_API_Request$jsonBody = function (value) {
|
|
return _evancz$elm_http$Http$string(
|
|
A2(_elm_lang$core$Json_Encode$encode, 0, value));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_API_Request$jsonContentType = _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{ctor: '_Tuple2', _0: 'Content-Type', _1: 'application/json'}
|
|
]);
|
|
var _Lattyware$massivedecks$MassiveDecks_API_Request$genericErrorHandler = function (error) {
|
|
var _p0 = error;
|
|
switch (_p0.ctor) {
|
|
case 'Known':
|
|
return A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Errors$New,
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
'An error was not correctly handled: ',
|
|
_elm_lang$core$Basics$toString(_p0._0)),
|
|
true);
|
|
case 'Communication':
|
|
if (_p0._0.ctor === 'RawTimeout') {
|
|
return A2(_Lattyware$massivedecks$MassiveDecks_Components_Errors$New, 'Timed out trying to connect to the server.', false);
|
|
} else {
|
|
return A2(_Lattyware$massivedecks$MassiveDecks_Components_Errors$New, 'There was a network error trying to connect to the server.', false);
|
|
}
|
|
case 'Malformed':
|
|
return A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Errors$New,
|
|
A2(_elm_lang$core$Basics_ops['++'], 'The response recieved from the server was incorrect: ', _p0._0),
|
|
true);
|
|
default:
|
|
return A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Errors$New,
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
'Recieved an unexpected response (',
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_elm_lang$core$Basics$toString(_p0._0),
|
|
A2(_elm_lang$core$Basics_ops['++'], ') from the server: ', _p0._1))),
|
|
true);
|
|
}
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_API_Request$errorHandler = F3(
|
|
function (knownHandler, errorMessageWrapper, error) {
|
|
var _p1 = error;
|
|
if (_p1.ctor === 'Known') {
|
|
return knownHandler(_p1._0);
|
|
} else {
|
|
return errorMessageWrapper(
|
|
_Lattyware$massivedecks$MassiveDecks_API_Request$genericErrorHandler(error));
|
|
}
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_API_Request$Request = F5(
|
|
function (a, b, c, d, e) {
|
|
return {verb: a, url: b, body: c, errors: d, resultDecoder: e};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_API_Request$request = F5(
|
|
function (verb, url, body, errors, resultDecoder) {
|
|
return A5(
|
|
_Lattyware$massivedecks$MassiveDecks_API_Request$Request,
|
|
verb,
|
|
url,
|
|
body,
|
|
_elm_lang$core$Dict$fromList(errors),
|
|
resultDecoder);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_API_Request$Unknown = F2(
|
|
function (a, b) {
|
|
return {ctor: 'Unknown', _0: a, _1: b};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_API_Request$Known = function (a) {
|
|
return {ctor: 'Known', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_API_Request$Malformed = function (a) {
|
|
return {ctor: 'Malformed', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_API_Request$handleSuccess = F2(
|
|
function (resultDecoder, response) {
|
|
var _p2 = response.value;
|
|
if (_p2.ctor === 'Text') {
|
|
return A2(
|
|
_elm_lang$core$Result$formatError,
|
|
_Lattyware$massivedecks$MassiveDecks_API_Request$Malformed,
|
|
A2(_elm_lang$core$Json_Decode$decodeString, resultDecoder, _p2._0));
|
|
} else {
|
|
return _elm_lang$core$Result$Err(
|
|
_Lattyware$massivedecks$MassiveDecks_API_Request$Malformed('Recieved binary data instead of expected JSON.'));
|
|
}
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_API_Request$handleFailure = F2(
|
|
function (errors, response) {
|
|
var _p3 = response.value;
|
|
if (_p3.ctor === 'Text') {
|
|
var _p7 = _p3._0;
|
|
var _p4 = A2(_elm_lang$core$Json_Decode$decodeString, _Lattyware$massivedecks$MassiveDecks_API_Request$errorKeyDecoder, _p7);
|
|
if (_p4.ctor === 'Ok') {
|
|
var decoder = A2(
|
|
_elm_lang$core$Dict$get,
|
|
{ctor: '_Tuple2', _0: response.status, _1: _p4._0},
|
|
errors);
|
|
var _p5 = decoder;
|
|
if (_p5.ctor === 'Just') {
|
|
var _p6 = A2(_elm_lang$core$Json_Decode$decodeString, _p5._0, _p7);
|
|
if (_p6.ctor === 'Ok') {
|
|
return _Lattyware$massivedecks$MassiveDecks_API_Request$Known(_p6._0);
|
|
} else {
|
|
return _Lattyware$massivedecks$MassiveDecks_API_Request$Malformed(_p6._0);
|
|
}
|
|
} else {
|
|
return A2(_Lattyware$massivedecks$MassiveDecks_API_Request$Unknown, response.status, _p7);
|
|
}
|
|
} else {
|
|
return _Lattyware$massivedecks$MassiveDecks_API_Request$Malformed(_p4._0);
|
|
}
|
|
} else {
|
|
return _Lattyware$massivedecks$MassiveDecks_API_Request$Malformed('Recieved binary data instead of expected JSON in error.');
|
|
}
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_API_Request$handleResponse = F3(
|
|
function (errors, resultDecoder, response) {
|
|
return ((_elm_lang$core$Native_Utils.cmp(response.status, 200) > -1) && (_elm_lang$core$Native_Utils.cmp(response.status, 300) < 0)) ? A2(_Lattyware$massivedecks$MassiveDecks_API_Request$handleSuccess, resultDecoder, response) : _elm_lang$core$Result$Err(
|
|
A2(_Lattyware$massivedecks$MassiveDecks_API_Request$handleFailure, errors, response));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_API_Request$Communication = function (a) {
|
|
return {ctor: 'Communication', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_API_Request$send = F4(
|
|
function (request, onSpecificError, onGeneralError, onSuccess) {
|
|
var task = A2(
|
|
_elm_lang$core$Task$map,
|
|
A2(_Lattyware$massivedecks$MassiveDecks_API_Request$handleResponse, request.errors, request.resultDecoder),
|
|
A2(
|
|
_evancz$elm_http$Http$send,
|
|
_evancz$elm_http$Http$defaultSettings,
|
|
{
|
|
verb: request.verb,
|
|
url: request.url,
|
|
headers: _elm_lang$core$Native_Utils.eq(request.body, _elm_lang$core$Maybe$Nothing) ? _elm_lang$core$Native_List.fromArray(
|
|
[]) : _Lattyware$massivedecks$MassiveDecks_API_Request$jsonContentType,
|
|
body: function () {
|
|
var _p8 = request.body;
|
|
if (_p8.ctor === 'Just') {
|
|
return _Lattyware$massivedecks$MassiveDecks_API_Request$jsonBody(_p8._0);
|
|
} else {
|
|
return _evancz$elm_http$Http$empty;
|
|
}
|
|
}()
|
|
}));
|
|
var errorMapped = A2(
|
|
_elm_lang$core$Task$andThen,
|
|
A2(_elm_lang$core$Task$mapError, _Lattyware$massivedecks$MassiveDecks_API_Request$Communication, task),
|
|
_elm_lang$core$Task$fromResult);
|
|
var errorToMessage = A2(_Lattyware$massivedecks$MassiveDecks_API_Request$errorHandler, onSpecificError, onGeneralError);
|
|
return A3(_elm_lang$core$Task$perform, errorToMessage, onSuccess, errorMapped);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_API_Request$send$ = F3(
|
|
function (request, onGeneralError, onSuccess) {
|
|
return A4(_Lattyware$massivedecks$MassiveDecks_API_Request$send, request, _Lattyware$massivedecks$MassiveDecks_Util$impossible, onGeneralError, onSuccess);
|
|
});
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_API$commandRequest = F6(
|
|
function (name, args, errors, decoder, gameCode, secret) {
|
|
return A5(
|
|
_Lattyware$massivedecks$MassiveDecks_API_Request$request,
|
|
'POST',
|
|
A2(_elm_lang$core$Basics_ops['++'], '/lobbies/', gameCode),
|
|
_elm_lang$core$Maybe$Just(
|
|
A3(_Lattyware$massivedecks$MassiveDecks_Models_JSON_Encode$encodeCommand, name, secret, args)),
|
|
errors,
|
|
decoder);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_API$disableRule = F3(
|
|
function (rule, gameCode, secret) {
|
|
return A6(
|
|
_Lattyware$massivedecks$MassiveDecks_API$commandRequest,
|
|
'disableRule',
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: 'rule',
|
|
_1: _elm_lang$core$Json_Encode$string(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_HouseRule_Id$toString(rule))
|
|
}
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Json_Decode$succeed(
|
|
{ctor: '_Tuple0'}),
|
|
gameCode,
|
|
secret);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_API$enableRule = F3(
|
|
function (rule, gameCode, secret) {
|
|
return A6(
|
|
_Lattyware$massivedecks$MassiveDecks_API$commandRequest,
|
|
'enableRule',
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: 'rule',
|
|
_1: _elm_lang$core$Json_Encode$string(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_HouseRule_Id$toString(rule))
|
|
}
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Json_Decode$succeed(
|
|
{ctor: '_Tuple0'}),
|
|
gameCode,
|
|
secret);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_API$leave = F2(
|
|
function (gameCode, secret) {
|
|
return A5(
|
|
_Lattyware$massivedecks$MassiveDecks_API_Request$request,
|
|
'POST',
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
'/lobbies/',
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
gameCode,
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
'/players/',
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_elm_lang$core$Basics$toString(secret.id),
|
|
'/leave')))),
|
|
_elm_lang$core$Maybe$Just(
|
|
_Lattyware$massivedecks$MassiveDecks_Models_JSON_Encode$encodePlayerSecret(secret)),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Json_Decode$succeed(
|
|
{ctor: '_Tuple0'}));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_API$back = A4(
|
|
_Lattyware$massivedecks$MassiveDecks_API$commandRequest,
|
|
'back',
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Json_Decode$succeed(
|
|
{ctor: '_Tuple0'}));
|
|
var _Lattyware$massivedecks$MassiveDecks_API$newAi = F2(
|
|
function (gameCode, secret) {
|
|
return A5(
|
|
_Lattyware$massivedecks$MassiveDecks_API_Request$request,
|
|
'POST',
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
'/lobbies/',
|
|
A2(_elm_lang$core$Basics_ops['++'], gameCode, '/players/newAi')),
|
|
_elm_lang$core$Maybe$Just(
|
|
_Lattyware$massivedecks$MassiveDecks_Models_JSON_Encode$encodePlayerSecret(secret)),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Json_Decode$succeed(
|
|
{ctor: '_Tuple0'}));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_API$getHistory = function (gameCode) {
|
|
return A5(
|
|
_Lattyware$massivedecks$MassiveDecks_API_Request$request,
|
|
'GET',
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
'/lobbies/',
|
|
A2(_elm_lang$core$Basics_ops['++'], gameCode, '/history')),
|
|
_elm_lang$core$Maybe$Nothing,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Json_Decode$list(_Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$finishedRoundDecoder));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_API$getHand = F2(
|
|
function (gameCode, secret) {
|
|
return A5(
|
|
_Lattyware$massivedecks$MassiveDecks_API_Request$request,
|
|
'POST',
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
'/lobbies/',
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
gameCode,
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
'/players/',
|
|
_elm_lang$core$Basics$toString(secret.id)))),
|
|
_elm_lang$core$Maybe$Just(
|
|
_Lattyware$massivedecks$MassiveDecks_Models_JSON_Encode$encodePlayerSecret(secret)),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$handDecoder);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_API$createLobby = A5(
|
|
_Lattyware$massivedecks$MassiveDecks_API_Request$request,
|
|
'POST',
|
|
'/lobbies',
|
|
_elm_lang$core$Maybe$Nothing,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$lobbyDecoder);
|
|
var _Lattyware$massivedecks$MassiveDecks_API$NewPlayerLobbyNotFound = {ctor: 'NewPlayerLobbyNotFound'};
|
|
var _Lattyware$massivedecks$MassiveDecks_API$NameInUse = {ctor: 'NameInUse'};
|
|
var _Lattyware$massivedecks$MassiveDecks_API$newPlayer = F2(
|
|
function (gameCode, name) {
|
|
return A5(
|
|
_Lattyware$massivedecks$MassiveDecks_API_Request$request,
|
|
'POST',
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
'/lobbies/',
|
|
A2(_elm_lang$core$Basics_ops['++'], gameCode, '/players')),
|
|
_elm_lang$core$Maybe$Just(
|
|
_Lattyware$massivedecks$MassiveDecks_Models_JSON_Encode$encodeName(name)),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: {ctor: '_Tuple2', _0: 400, _1: 'name-in-use'},
|
|
_1: _elm_lang$core$Json_Decode$succeed(_Lattyware$massivedecks$MassiveDecks_API$NameInUse)
|
|
},
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: {ctor: '_Tuple2', _0: 404, _1: 'lobby-not-found'},
|
|
_1: _elm_lang$core$Json_Decode$succeed(_Lattyware$massivedecks$MassiveDecks_API$NewPlayerLobbyNotFound)
|
|
}
|
|
]),
|
|
_Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$playerSecretDecoder);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_API$LobbyNotFound = {ctor: 'LobbyNotFound'};
|
|
var _Lattyware$massivedecks$MassiveDecks_API$getLobbyAndHand = A4(
|
|
_Lattyware$massivedecks$MassiveDecks_API$commandRequest,
|
|
'getLobbyAndHand',
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: {ctor: '_Tuple2', _0: 404, _1: 'lobby-not-found'},
|
|
_1: _elm_lang$core$Json_Decode$succeed(_Lattyware$massivedecks$MassiveDecks_API$LobbyNotFound)
|
|
}
|
|
]),
|
|
_Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$lobbyAndHandDecoder);
|
|
var _Lattyware$massivedecks$MassiveDecks_API$DeckNotFound = {ctor: 'DeckNotFound'};
|
|
var _Lattyware$massivedecks$MassiveDecks_API$CardcastTimeout = {ctor: 'CardcastTimeout'};
|
|
var _Lattyware$massivedecks$MassiveDecks_API$addDeck = F3(
|
|
function (gameCode, secret, playCode) {
|
|
return A6(
|
|
_Lattyware$massivedecks$MassiveDecks_API$commandRequest,
|
|
'addDeck',
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: 'playCode',
|
|
_1: _elm_lang$core$Json_Encode$string(playCode)
|
|
}
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: {ctor: '_Tuple2', _0: 502, _1: 'cardcast-timeout'},
|
|
_1: _elm_lang$core$Json_Decode$succeed(_Lattyware$massivedecks$MassiveDecks_API$CardcastTimeout)
|
|
},
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: {ctor: '_Tuple2', _0: 400, _1: 'deck-not-found'},
|
|
_1: _elm_lang$core$Json_Decode$succeed(_Lattyware$massivedecks$MassiveDecks_API$DeckNotFound)
|
|
}
|
|
]),
|
|
_elm_lang$core$Json_Decode$succeed(
|
|
{ctor: '_Tuple0'}),
|
|
gameCode,
|
|
secret);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_API$GameInProgress = {ctor: 'GameInProgress'};
|
|
var _Lattyware$massivedecks$MassiveDecks_API$NotEnoughPlayers = function (a) {
|
|
return {ctor: 'NotEnoughPlayers', _0: a};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_API$newGame = F2(
|
|
function (gameCode, secret) {
|
|
return A6(
|
|
_Lattyware$massivedecks$MassiveDecks_API$commandRequest,
|
|
'newGame',
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: {ctor: '_Tuple2', _0: 400, _1: 'game-in-progress'},
|
|
_1: _elm_lang$core$Json_Decode$succeed(_Lattyware$massivedecks$MassiveDecks_API$GameInProgress)
|
|
},
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: {ctor: '_Tuple2', _0: 400, _1: 'not-enough-players'},
|
|
_1: A2(
|
|
_elm_lang$core$Json_Decode$object1,
|
|
_Lattyware$massivedecks$MassiveDecks_API$NotEnoughPlayers,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'required', _elm_lang$core$Json_Decode$int))
|
|
}
|
|
]),
|
|
_Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$handDecoder,
|
|
gameCode,
|
|
secret);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_API$NotCzar = {ctor: 'NotCzar'};
|
|
var _Lattyware$massivedecks$MassiveDecks_API$choose = F3(
|
|
function (gameCode, secret, winner) {
|
|
return A6(
|
|
_Lattyware$massivedecks$MassiveDecks_API$commandRequest,
|
|
'choose',
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: 'winner',
|
|
_1: _elm_lang$core$Json_Encode$int(winner)
|
|
}
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: {ctor: '_Tuple2', _0: 400, _1: 'not-czar'},
|
|
_1: _elm_lang$core$Json_Decode$succeed(_Lattyware$massivedecks$MassiveDecks_API$NotCzar)
|
|
}
|
|
]),
|
|
_elm_lang$core$Json_Decode$succeed(
|
|
{ctor: '_Tuple0'}),
|
|
gameCode,
|
|
secret);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_API$WrongNumberOfCards = F2(
|
|
function (a, b) {
|
|
return {ctor: 'WrongNumberOfCards', _0: a, _1: b};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_API$AlreadyJudging = {ctor: 'AlreadyJudging'};
|
|
var _Lattyware$massivedecks$MassiveDecks_API$AlreadyPlayed = {ctor: 'AlreadyPlayed'};
|
|
var _Lattyware$massivedecks$MassiveDecks_API$NotInRound = {ctor: 'NotInRound'};
|
|
var _Lattyware$massivedecks$MassiveDecks_API$play = F3(
|
|
function (gameCode, secret, ids) {
|
|
return A6(
|
|
_Lattyware$massivedecks$MassiveDecks_API$commandRequest,
|
|
'play',
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: 'ids',
|
|
_1: _elm_lang$core$Json_Encode$list(
|
|
A2(_elm_lang$core$List$map, _elm_lang$core$Json_Encode$string, ids))
|
|
}
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: {ctor: '_Tuple2', _0: 400, _1: 'not-in-round'},
|
|
_1: _elm_lang$core$Json_Decode$succeed(_Lattyware$massivedecks$MassiveDecks_API$NotInRound)
|
|
},
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: {ctor: '_Tuple2', _0: 400, _1: 'already-played'},
|
|
_1: _elm_lang$core$Json_Decode$succeed(_Lattyware$massivedecks$MassiveDecks_API$AlreadyPlayed)
|
|
},
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: {ctor: '_Tuple2', _0: 400, _1: 'already-judging'},
|
|
_1: _elm_lang$core$Json_Decode$succeed(_Lattyware$massivedecks$MassiveDecks_API$AlreadyJudging)
|
|
},
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: {ctor: '_Tuple2', _0: 400, _1: 'wrong-number-of-cards-played'},
|
|
_1: A3(
|
|
_elm_lang$core$Json_Decode$object2,
|
|
_Lattyware$massivedecks$MassiveDecks_API$WrongNumberOfCards,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'got', _elm_lang$core$Json_Decode$int),
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'expected', _elm_lang$core$Json_Decode$int))
|
|
}
|
|
]),
|
|
_Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$handDecoder,
|
|
gameCode,
|
|
secret);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_API$PlayersNotSkippable = {ctor: 'PlayersNotSkippable'};
|
|
var _Lattyware$massivedecks$MassiveDecks_API$NotEnoughPlayersToSkip = {ctor: 'NotEnoughPlayersToSkip'};
|
|
var _Lattyware$massivedecks$MassiveDecks_API$skip = F3(
|
|
function (gameCode, secret, players) {
|
|
return A6(
|
|
_Lattyware$massivedecks$MassiveDecks_API$commandRequest,
|
|
'skip',
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: 'players',
|
|
_1: _elm_lang$core$Json_Encode$list(
|
|
A2(_elm_lang$core$List$map, _elm_lang$core$Json_Encode$int, players))
|
|
}
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: {ctor: '_Tuple2', _0: 400, _1: 'not-enough-players-to-skip'},
|
|
_1: _elm_lang$core$Json_Decode$succeed(_Lattyware$massivedecks$MassiveDecks_API$NotEnoughPlayersToSkip)
|
|
},
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: {ctor: '_Tuple2', _0: 400, _1: 'players-must-be-skippable'},
|
|
_1: _elm_lang$core$Json_Decode$succeed(_Lattyware$massivedecks$MassiveDecks_API$PlayersNotSkippable)
|
|
}
|
|
]),
|
|
_elm_lang$core$Json_Decode$succeed(
|
|
{ctor: '_Tuple0'}),
|
|
gameCode,
|
|
secret);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_API$NotEnoughPoints = {ctor: 'NotEnoughPoints'};
|
|
var _Lattyware$massivedecks$MassiveDecks_API$redraw = A4(
|
|
_Lattyware$massivedecks$MassiveDecks_API$commandRequest,
|
|
'redraw',
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: {ctor: '_Tuple2', _0: 400, _1: 'not-enough-points-to-redraw'},
|
|
_1: _elm_lang$core$Json_Decode$succeed(_Lattyware$massivedecks$MassiveDecks_API$NotEnoughPoints)
|
|
}
|
|
]),
|
|
_Lattyware$massivedecks$MassiveDecks_Models_JSON_Decode$handDecoder);
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI_Cards$response = F3(
|
|
function (picked, attributes, response) {
|
|
var classes = _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$classList(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{ctor: '_Tuple2', _0: 'card', _1: true},
|
|
{ctor: '_Tuple2', _0: 'response', _1: true},
|
|
{ctor: '_Tuple2', _0: 'mui-panel', _1: true},
|
|
{ctor: '_Tuple2', _0: 'picked', _1: picked}
|
|
]))
|
|
]);
|
|
return A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$List$concat(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[classes, attributes])),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('response-text')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text(
|
|
_Lattyware$massivedecks$MassiveDecks_Util$firstLetterToUpper(response.text)),
|
|
_elm_lang$html$Html$text('.')
|
|
]))
|
|
]));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI_Cards$slot = function (value) {
|
|
return A2(
|
|
_elm_lang$html$Html$span,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('slot')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text(value)
|
|
]));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI_Cards$slots = F3(
|
|
function (count, placeholder, picked) {
|
|
var extra = count - _elm_lang$core$List$length(picked);
|
|
return A2(
|
|
_elm_lang$core$List$map,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI_Cards$slot,
|
|
_elm_lang$core$List$concat(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
picked,
|
|
A2(_elm_lang$core$List$repeat, extra, placeholder)
|
|
])));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI_Cards$call = F2(
|
|
function (call, picked) {
|
|
var spanned = A2(
|
|
_elm_lang$core$List$map,
|
|
function (part) {
|
|
return A2(
|
|
_elm_lang$html$Html$span,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text(part)
|
|
]));
|
|
},
|
|
call.parts);
|
|
var pickedText = A2(
|
|
_elm_lang$core$List$map,
|
|
function (_) {
|
|
return _.text;
|
|
},
|
|
picked);
|
|
var responseFirst = A2(
|
|
_elm_lang$core$Maybe$withDefault,
|
|
false,
|
|
A2(
|
|
_elm_lang$core$Maybe$map,
|
|
F2(
|
|
function (x, y) {
|
|
return _elm_lang$core$Native_Utils.eq(x, y);
|
|
})(''),
|
|
_elm_lang$core$List$head(call.parts)));
|
|
var _p0 = responseFirst ? {
|
|
ctor: '_Tuple2',
|
|
_0: call.parts,
|
|
_1: A2(_Lattyware$massivedecks$MassiveDecks_Util$mapFirst, _Lattyware$massivedecks$MassiveDecks_Util$firstLetterToUpper, pickedText)
|
|
} : {
|
|
ctor: '_Tuple2',
|
|
_0: A2(_Lattyware$massivedecks$MassiveDecks_Util$mapFirst, _Lattyware$massivedecks$MassiveDecks_Util$firstLetterToUpper, call.parts),
|
|
_1: pickedText
|
|
};
|
|
var parts = _p0._0;
|
|
var responses = _p0._1;
|
|
var withSlots = A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Util$interleave,
|
|
A3(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI_Cards$slots,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Card$slots(call),
|
|
'',
|
|
responses),
|
|
spanned);
|
|
var callContents = responseFirst ? A2(
|
|
_elm_lang$core$Maybe$withDefault,
|
|
withSlots,
|
|
_elm_lang$core$List$tail(withSlots)) : withSlots;
|
|
return A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('card call mui-panel')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('call-text')
|
|
]),
|
|
callContents)
|
|
]));
|
|
});
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_History_UI$closeButton = A2(
|
|
_elm_lang$html$Html$button,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui-btn mui-btn--small mui-btn--fab'),
|
|
_elm_lang$html$Html_Events$onClick(_Lattyware$massivedecks$MassiveDecks_Scenes_History_Messages$Close)
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('times')
|
|
]));
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_History_UI$responses = F3(
|
|
function (players, winnerId, idAndResponses) {
|
|
var _p0 = idAndResponses;
|
|
var playerId = _p0._0;
|
|
var responses = _p0._1;
|
|
var winner = _elm_lang$core$Native_Utils.eq(playerId, winnerId);
|
|
var winnerPrefix = winner ? _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('trophy'),
|
|
_elm_lang$html$Html$text(' ')
|
|
]) : _elm_lang$core$Native_List.fromArray(
|
|
[]);
|
|
var player = A2(
|
|
_elm_lang$core$Maybe$withDefault,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
A2(
|
|
_elm_lang$core$Maybe$map,
|
|
function (player) {
|
|
return A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
winnerPrefix,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text(player.name)
|
|
]));
|
|
},
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Models_Player$byId, playerId, players)));
|
|
return A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('responses')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$classList(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{ctor: '_Tuple2', _0: 'who', _1: true},
|
|
{ctor: '_Tuple2', _0: 'won', _1: winner}
|
|
]))
|
|
]),
|
|
player),
|
|
A2(
|
|
_elm_lang$html$Html$ul,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
A2(
|
|
_elm_lang$core$List$map,
|
|
function (r) {
|
|
return A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A3(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI_Cards$response,
|
|
false,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
r)
|
|
]));
|
|
},
|
|
responses))
|
|
]))
|
|
]));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_History_UI$finishedRound = F2(
|
|
function (players, round) {
|
|
var playedCardsByPlayer = _elm_lang$core$Dict$toList(
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Models_Card$playedCardsByPlayer, round.playedByAndWinner.playedBy, round.responses));
|
|
var czar = A2(
|
|
_elm_lang$core$Maybe$withDefault,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
A2(
|
|
_elm_lang$core$Maybe$map,
|
|
function (player) {
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('gavel'),
|
|
_elm_lang$html$Html$text(' '),
|
|
_elm_lang$html$Html$text(player.name)
|
|
]);
|
|
},
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Models_Player$byId, round.czar, players)));
|
|
return A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('round')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('who')
|
|
]),
|
|
czar),
|
|
A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI_Cards$call,
|
|
round.call,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]))
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$ul,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('plays')
|
|
]),
|
|
A2(
|
|
_elm_lang$core$List$map,
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Scenes_History_UI$responses, players, round.playedByAndWinner.winner),
|
|
playedCardsByPlayer))
|
|
]));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_History_UI$view = F2(
|
|
function (model, players) {
|
|
var content = function () {
|
|
var _p1 = model.rounds;
|
|
if (_p1.ctor === 'Just') {
|
|
return A2(
|
|
_elm_lang$html$Html$ul,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
A2(
|
|
_elm_lang$core$List$map,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_History_UI$finishedRound(players),
|
|
_p1._0));
|
|
} else {
|
|
return _Lattyware$massivedecks$MassiveDecks_Components_Icon$spinner;
|
|
}
|
|
}();
|
|
return A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$id('history')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$h1,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui--divider-bottom')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Previous Rounds')
|
|
])),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_History_UI$closeButton,
|
|
content
|
|
]));
|
|
});
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_History$update = F2(
|
|
function (message, model) {
|
|
var _p0 = message;
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{
|
|
rounds: _elm_lang$core$Maybe$Just(_p0._0)
|
|
}),
|
|
_1: _elm_lang$core$Platform_Cmd$none
|
|
};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_History$view = _Lattyware$massivedecks$MassiveDecks_Scenes_History_UI$view;
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_History$subscriptions = function (model) {
|
|
return _elm_lang$core$Platform_Sub$none;
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_History$init = function (gameCode) {
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: {rounds: _elm_lang$core$Maybe$Nothing},
|
|
_1: A3(
|
|
_Lattyware$massivedecks$MassiveDecks_API_Request$send$,
|
|
_Lattyware$massivedecks$MassiveDecks_API$getHistory(gameCode),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_History_Messages$ErrorMessage,
|
|
function (_p1) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_History_Messages$LocalMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_History_Messages$Load(_p1));
|
|
})
|
|
};
|
|
};
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_HouseRule$HouseRule = F5(
|
|
function (a, b, c, d, e) {
|
|
return {id: a, icon: b, name: c, description: d, actions: e};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_HouseRule$Action = F5(
|
|
function (a, b, c, d, e) {
|
|
return {icon: a, text: b, description: c, onClick: d, enabled: e};
|
|
});
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_HouseRule_Reboot$checkEnabled = function (lobbyModel) {
|
|
return A2(
|
|
_elm_lang$core$Maybe$withDefault,
|
|
false,
|
|
A2(
|
|
_elm_lang$core$Maybe$map,
|
|
function (player) {
|
|
return _elm_lang$core$Native_Utils.cmp(player.score, 0) > 0;
|
|
},
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Models_Player$byId, lobbyModel.secret.id, lobbyModel.lobby.players)));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_HouseRule_Reboot$rebootAction = {icon: 'recycle', text: 'Redraw', description: 'Lose one point to discard your hand and draw a new one.', onClick: _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$Redraw, enabled: _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_HouseRule_Reboot$checkEnabled};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_HouseRule_Reboot$rule = {
|
|
id: _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_HouseRule_Id$Reboot,
|
|
icon: 'recycle',
|
|
name: 'Rebooting the Universe',
|
|
description: 'At any time, players may trade in a point to discard their hand and redraw.',
|
|
actions: _elm_lang$core$Native_List.fromArray(
|
|
[_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_HouseRule_Reboot$rebootAction])
|
|
};
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_HouseRule_Available$houseRules = _elm_lang$core$Native_List.fromArray(
|
|
[_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_HouseRule_Reboot$rule]);
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$renderDisconnectedNotice = F3(
|
|
function (ids, has, disconnectedNames) {
|
|
return A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('notice')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$h3,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('minus-circle')
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$span,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text(disconnectedNames),
|
|
_elm_lang$html$Html$text(' '),
|
|
_elm_lang$html$Html$text(has),
|
|
_elm_lang$html$Html$text(' disconnected from the game.')
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('actions')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$button,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui-btn mui-btn--small'),
|
|
_elm_lang$html$Html_Events$onClick(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$Skip(ids)),
|
|
_elm_lang$html$Html_Attributes$title('They will be removed from this round, and won\'t be in future rounds until they reconnect.')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('fast-forward'),
|
|
_elm_lang$html$Html$text(' Skip')
|
|
]))
|
|
]))
|
|
]));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$disconnectedNotice = function (players) {
|
|
var disconnected = A2(
|
|
_elm_lang$core$List$filter,
|
|
function (player) {
|
|
return player.disconnected && _elm_lang$core$Basics$not(
|
|
_elm_lang$core$Native_Utils.eq(player.status, _Lattyware$massivedecks$MassiveDecks_Models_Player$Skipping));
|
|
},
|
|
players);
|
|
var disconnectedNames = _Lattyware$massivedecks$MassiveDecks_Util$joinWithAnd(
|
|
A2(
|
|
_elm_lang$core$List$map,
|
|
function (_) {
|
|
return _.name;
|
|
},
|
|
disconnected));
|
|
var disconnectedIds = A2(
|
|
_elm_lang$core$List$map,
|
|
function (_) {
|
|
return _.id;
|
|
},
|
|
disconnected);
|
|
return A2(
|
|
_elm_lang$core$Maybe$withDefault,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
A2(
|
|
_elm_lang$core$Maybe$map,
|
|
function (item) {
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[item]);
|
|
},
|
|
A2(
|
|
_elm_lang$core$Maybe$map,
|
|
A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$renderDisconnectedNotice,
|
|
disconnectedIds,
|
|
_Lattyware$massivedecks$MassiveDecks_Util$pluralHas(disconnected)),
|
|
disconnectedNames)));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$renderTimeoutNotice = F3(
|
|
function (ids, has, names) {
|
|
return A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('notice')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$h3,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('minus-circle')
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$span,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text(names),
|
|
_elm_lang$html$Html$text(' '),
|
|
_elm_lang$html$Html$text(has),
|
|
_elm_lang$html$Html$text(' not played into the round before the round timer ran out.')
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('actions')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$button,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui-btn mui-btn--small'),
|
|
_elm_lang$html$Html_Events$onClick(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$Skip(ids)),
|
|
_elm_lang$html$Html_Attributes$title('They will be removed from this round, and won\'t be in future rounds until they come back.')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('fast-forward'),
|
|
_elm_lang$html$Html$text(' Skip')
|
|
]))
|
|
]))
|
|
]));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$timeoutNotice = F2(
|
|
function (players, timeout) {
|
|
var timedOutPlayers = A2(
|
|
_elm_lang$core$List$filter,
|
|
function (player) {
|
|
return _elm_lang$core$Native_Utils.eq(player.status, _Lattyware$massivedecks$MassiveDecks_Models_Player$NotPlayed);
|
|
},
|
|
players);
|
|
var timedOutNames = _Lattyware$massivedecks$MassiveDecks_Util$joinWithAnd(
|
|
A2(
|
|
_elm_lang$core$List$map,
|
|
function (_) {
|
|
return _.name;
|
|
},
|
|
timedOutPlayers));
|
|
var timedOutIds = A2(
|
|
_elm_lang$core$List$map,
|
|
function (_) {
|
|
return _.id;
|
|
},
|
|
timedOutPlayers);
|
|
return timeout ? A2(
|
|
_elm_lang$core$Maybe$withDefault,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
A2(
|
|
_elm_lang$core$Maybe$map,
|
|
function (item) {
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[item]);
|
|
},
|
|
A2(
|
|
_elm_lang$core$Maybe$map,
|
|
A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$renderTimeoutNotice,
|
|
timedOutIds,
|
|
_Lattyware$massivedecks$MassiveDecks_Util$pluralHas(timedOutPlayers)),
|
|
timedOutNames))) : _elm_lang$core$Native_List.fromArray(
|
|
[]);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$renderSkippingNotice = _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('notice')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$h3,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('fast-forward')
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$span,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('You are currently being skipped because you took too long to play. '),
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('link'),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'tabindex', '0'),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'role', 'button')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$fwIcon('bell'),
|
|
_elm_lang$html$Html$text('Enable Notifications?')
|
|
]))
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('actions')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$button,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui-btn mui-btn--small'),
|
|
_elm_lang$html$Html_Events$onClick(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$Back),
|
|
_elm_lang$html$Html_Attributes$title('Rejoin the game.')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('sign-in'),
|
|
_elm_lang$html$Html$text(' Rejoin')
|
|
]))
|
|
]))
|
|
]))
|
|
]);
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$skippingNotice = F2(
|
|
function (players, id) {
|
|
var renderSkippingNoticeIfSkipping = function (status) {
|
|
var _p0 = status;
|
|
if (_p0.ctor === 'Skipping') {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$renderSkippingNotice;
|
|
} else {
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[]);
|
|
}
|
|
};
|
|
var status = A2(
|
|
_elm_lang$core$Maybe$map,
|
|
function (_) {
|
|
return _.status;
|
|
},
|
|
A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Util$find,
|
|
function (player) {
|
|
return _elm_lang$core$Native_Utils.eq(player.id, id);
|
|
},
|
|
players));
|
|
return A2(
|
|
_elm_lang$core$Maybe$withDefault,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
A2(_elm_lang$core$Maybe$map, renderSkippingNoticeIfSkipping, status));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$warningDrawer = function (contents) {
|
|
var hidden = _elm_lang$core$List$isEmpty(contents);
|
|
var classes = _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{ctor: '_Tuple2', _0: 'hidden', _1: hidden}
|
|
]);
|
|
return A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$id('warning-drawer'),
|
|
_elm_lang$html$Html_Attributes$classList(classes)
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$button,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'onClick', 'toggleWarningDrawer()'),
|
|
_elm_lang$html$Html_Attributes$class('toggle mui-btn mui-btn--small mui-btn--fab'),
|
|
_elm_lang$html$Html_Attributes$title('Warning notices.')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('exclamation-triangle')
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('top')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[])),
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('contents')
|
|
]),
|
|
contents)
|
|
]));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$stateInfo = function (round) {
|
|
return A2(
|
|
_elm_lang$core$Maybe$andThen,
|
|
round,
|
|
function (round) {
|
|
var _p1 = round.responses;
|
|
if (_p1.ctor === 'Hidden') {
|
|
return _elm_lang$core$Maybe$Nothing;
|
|
} else {
|
|
return _elm_lang$core$Maybe$Just('The card czar is now picking a winner.');
|
|
}
|
|
});
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$statusInfo = F2(
|
|
function (players, id) {
|
|
var _p2 = A2(
|
|
_elm_lang$core$Maybe$map,
|
|
function (_) {
|
|
return _.status;
|
|
},
|
|
A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Util$find,
|
|
function (player) {
|
|
return _elm_lang$core$Native_Utils.eq(player.id, id);
|
|
},
|
|
players));
|
|
if (_p2.ctor === 'Just') {
|
|
var _p3 = _p2._0;
|
|
switch (_p3.ctor) {
|
|
case 'Skipping':
|
|
return _elm_lang$core$Maybe$Nothing;
|
|
case 'Neutral':
|
|
return _elm_lang$core$Maybe$Just('You joined while this round was already in play, you will be able to play next round.');
|
|
case 'Czar':
|
|
return _elm_lang$core$Maybe$Just('As card czar for this round - you don\'t play into the round, you pick the winner.');
|
|
default:
|
|
return _elm_lang$core$Maybe$Nothing;
|
|
}
|
|
} else {
|
|
return _elm_lang$core$Maybe$Nothing;
|
|
}
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$infoBar = F2(
|
|
function (lobby, secret) {
|
|
var content = _elm_lang$core$Maybe$oneOf(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$statusInfo, lobby.players, secret.id),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$stateInfo(lobby.round)
|
|
]));
|
|
var _p4 = content;
|
|
if (_p4.ctor === 'Just') {
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$id('info-bar')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('info-circle'),
|
|
_elm_lang$html$Html$text(' '),
|
|
_elm_lang$html$Html$text(_p4._0)
|
|
]))
|
|
]);
|
|
} else {
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[]);
|
|
}
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$chooseButton = function (playedId) {
|
|
return A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('choose-button')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$button,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui-btn mui-btn--small mui-btn--accent mui-btn--fab'),
|
|
_elm_lang$html$Html_Events$onClick(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$Choose(playedId))
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('trophy')
|
|
]))
|
|
]));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$playedResponse = function (response) {
|
|
return A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('card response mui-panel')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('response-text')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text(
|
|
_Lattyware$massivedecks$MassiveDecks_Util$firstLetterToUpper(response.text)),
|
|
_elm_lang$html$Html$text('.')
|
|
]))
|
|
]));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$playedCards = F3(
|
|
function (isCzar, playedId, cards) {
|
|
return A2(
|
|
_elm_lang$html$Html$ol,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Events$onClick(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$Consider(playedId))
|
|
]),
|
|
A2(
|
|
_elm_lang$core$List$map,
|
|
function (card) {
|
|
return A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$playedResponse(card)
|
|
]));
|
|
},
|
|
cards));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$playedView = F2(
|
|
function (isCzar, responses) {
|
|
return A2(
|
|
_elm_lang$html$Html$ol,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('played mui--divider-top')
|
|
]),
|
|
A2(
|
|
_elm_lang$core$List$indexedMap,
|
|
F2(
|
|
function (index, pc) {
|
|
return A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A3(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$playedCards, isCzar, index, pc)
|
|
]));
|
|
}),
|
|
responses.cards));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$playButton = A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('play-button')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$button,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui-btn mui-btn--small mui-btn--accent mui-btn--fab'),
|
|
_elm_lang$html$Html_Attributes$title('Play these responses.'),
|
|
_elm_lang$html$Html_Events$onClick(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$Play)
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('check')
|
|
]))
|
|
]));
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$withdrawButton = function (id) {
|
|
return A2(
|
|
_elm_lang$html$Html$button,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('withdraw-button mui-btn mui-btn--small mui-btn--danger mui-btn--fab'),
|
|
_elm_lang$html$Html_Attributes$title('Take back this response.'),
|
|
_elm_lang$html$Html_Events$onClick(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$Withdraw(id))
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('times')
|
|
]));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$pickedResponse = function (response) {
|
|
return A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('card response mui-panel')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('response-text')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text(
|
|
_Lattyware$massivedecks$MassiveDecks_Util$firstLetterToUpper(response.text)),
|
|
_elm_lang$html$Html$text('.')
|
|
])),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$withdrawButton(response.id)
|
|
]))
|
|
]));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$handRender = F2(
|
|
function (disabled, contents) {
|
|
var classes = A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
'hand mui--divider-top',
|
|
disabled ? ' disabled' : '');
|
|
return A2(
|
|
_elm_lang$html$Html$ul,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class(classes)
|
|
]),
|
|
A2(
|
|
_elm_lang$core$List$map,
|
|
function (item) {
|
|
return A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[item]));
|
|
},
|
|
contents));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$positioning = function (shownCard) {
|
|
var horizontalDirection = shownCard.isLeft ? 'left' : 'right';
|
|
return _elm_lang$html$Html_Attributes$style(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: 'transform',
|
|
_1: A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
'rotate(',
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_elm_lang$core$Basics$toString(shownCard.rotation),
|
|
'deg)'))
|
|
},
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: horizontalDirection,
|
|
_1: A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_elm_lang$core$Basics$toString(shownCard.horizontalPos),
|
|
'%')
|
|
},
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: 'top',
|
|
_1: A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_elm_lang$core$Basics$toString(shownCard.verticalPos),
|
|
'%')
|
|
}
|
|
]));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$blankResponse = function (shownCard) {
|
|
return A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('card mui-panel'),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$positioning(shownCard)
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$pickedView = F3(
|
|
function (picked, slots, shownPlayed) {
|
|
var pickedResponses = A2(_elm_lang$core$List$map, _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$pickedResponse, picked);
|
|
var numberPicked = _elm_lang$core$List$length(picked);
|
|
var pb = (_elm_lang$core$Native_Utils.cmp(numberPicked, slots) < 0) ? _elm_lang$core$Native_List.fromArray(
|
|
[]) : _elm_lang$core$Native_List.fromArray(
|
|
[_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$playButton]);
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$ol,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('picked')
|
|
]),
|
|
_elm_lang$core$List$concat(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[pickedResponses, pb]))),
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('others-picked')
|
|
]),
|
|
A2(_elm_lang$core$List$map, _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$blankResponse, shownPlayed))
|
|
]);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$response = F3(
|
|
function (picked, disabled, response) {
|
|
var isPicked = A2(_elm_lang$core$List$member, response.id, picked);
|
|
var clickHandler = (isPicked || disabled) ? _elm_lang$core$Native_List.fromArray(
|
|
[]) : _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Events$onClick(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$Pick(response.id))
|
|
]);
|
|
return A3(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI_Cards$response, isPicked, clickHandler, response);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$handView = F3(
|
|
function (picked, disabled, responses) {
|
|
return A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$handRender,
|
|
disabled,
|
|
A2(
|
|
_elm_lang$core$List$map,
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$response, picked, disabled),
|
|
responses));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$playArea = function (contents) {
|
|
return A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('play-area')
|
|
]),
|
|
contents);
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$czarName = F2(
|
|
function (players, czarId) {
|
|
return A2(
|
|
_elm_lang$core$Maybe$withDefault,
|
|
'',
|
|
A2(
|
|
_elm_lang$core$Maybe$map,
|
|
function (_) {
|
|
return _.name;
|
|
},
|
|
_elm_lang$core$List$head(
|
|
A2(
|
|
_elm_lang$core$List$filter,
|
|
function (player) {
|
|
return _elm_lang$core$Native_Utils.eq(player.id, czarId);
|
|
},
|
|
players))));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$winnerHeaderAndContents = F2(
|
|
function (round, players) {
|
|
var winner = A2(
|
|
_elm_lang$core$Maybe$withDefault,
|
|
'',
|
|
A2(
|
|
_elm_lang$core$Maybe$map,
|
|
function (_) {
|
|
return _.name;
|
|
},
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Util$get, players, round.playedByAndWinner.winner)));
|
|
var cards = round.responses;
|
|
var winning = A2(
|
|
_elm_lang$core$Maybe$withDefault,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Models_Card$winningCards, cards, round.playedByAndWinner));
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('trophy'),
|
|
_elm_lang$html$Html$text(
|
|
A2(_elm_lang$core$Basics_ops['++'], ' ', winner))
|
|
]),
|
|
_1: _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('winner mui-panel')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$h1,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('trophy')
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$h2,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text(
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
' ',
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Models_Card$filled, round.call, winning)))
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$h3,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text(
|
|
A2(_elm_lang$core$Basics_ops['++'], '- ', winner))
|
|
]))
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$button,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$id('next-round-button'),
|
|
_elm_lang$html$Html_Attributes$class('mui-btn mui-btn--primary mui-btn--raised'),
|
|
_elm_lang$html$Html_Events$onClick(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$NextRound)
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Next Round')
|
|
]))
|
|
])
|
|
};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$consideringView = F3(
|
|
function (considering, consideringCards, isCzar) {
|
|
var extra = isCzar ? _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$chooseButton(considering)
|
|
]) : _elm_lang$core$Native_List.fromArray(
|
|
[]);
|
|
return A2(
|
|
_elm_lang$html$Html$ol,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('considering')
|
|
]),
|
|
A2(
|
|
_elm_lang$core$List$append,
|
|
A2(
|
|
_elm_lang$core$List$map,
|
|
function (card) {
|
|
return A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$playedResponse(card)
|
|
]));
|
|
},
|
|
consideringCards),
|
|
extra));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$getById = F2(
|
|
function (cards, id) {
|
|
return _elm_lang$core$List$head(
|
|
A2(
|
|
_elm_lang$core$List$filter,
|
|
function (card) {
|
|
return _elm_lang$core$Native_Utils.eq(card.id, id);
|
|
},
|
|
cards));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$getAllById = F2(
|
|
function (ids, cards) {
|
|
return A2(
|
|
_elm_lang$core$List$filterMap,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$getById(cards),
|
|
ids);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$gameMenuItem = F3(
|
|
function (lobbyModel, rule, action) {
|
|
var enabled = action.enabled(lobbyModel);
|
|
var message = enabled ? action.onClick : _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$NoOp;
|
|
return A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$classList(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{ctor: '_Tuple2', _0: 'link', _1: true},
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: 'disabled',
|
|
_1: _elm_lang$core$Basics$not(enabled)
|
|
}
|
|
])),
|
|
_elm_lang$html$Html_Attributes$title(action.description),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'tabindex', '0'),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'role', 'button'),
|
|
_elm_lang$html$Html_Events$onClick(message)
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$fwIcon(action.icon),
|
|
_elm_lang$html$Html$text(' '),
|
|
_elm_lang$html$Html$text(action.text)
|
|
]))
|
|
]));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$gameMenuItems = F2(
|
|
function (lobbyModel, rule) {
|
|
return A2(
|
|
_elm_lang$core$List$map,
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$gameMenuItem, lobbyModel, rule),
|
|
rule.actions);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$gameMenu = function (lobbyModel) {
|
|
var enabled = A2(
|
|
_elm_lang$core$List$filter,
|
|
function (rule) {
|
|
return A2(_elm_lang$core$List$member, rule.id, lobbyModel.lobby.config.houseRules);
|
|
},
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_HouseRule_Available$houseRules);
|
|
return A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('action-menu mui-dropdown')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$button,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui-btn mui-btn--small mui-btn--fab'),
|
|
_elm_lang$html$Html_Attributes$title('Game actions.'),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'data-mui-toggle', 'dropdown')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('bars')
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$ul,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui-dropdown__menu mui-dropdown__menu--right')
|
|
]),
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$classList(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{ctor: '_Tuple2', _0: 'link', _1: true}
|
|
])),
|
|
_elm_lang$html$Html_Attributes$title('View previous rounds from the game.'),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'tabindex', '0'),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'role', 'button'),
|
|
_elm_lang$html$Html_Events$onClick(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$ViewHistory)
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$fwIcon('history'),
|
|
_elm_lang$html$Html$text(' '),
|
|
_elm_lang$html$Html$text('Game History')
|
|
]))
|
|
]))
|
|
]),
|
|
A2(
|
|
_elm_lang$core$List$concatMap,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$gameMenuItems(lobbyModel),
|
|
enabled)))
|
|
]));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$roundContents = F2(
|
|
function (lobbyModel, round) {
|
|
var id = lobbyModel.secret.id;
|
|
var isCzar = _elm_lang$core$Native_Utils.eq(round.czar, id);
|
|
var model = lobbyModel.playing;
|
|
var hand = lobbyModel.hand.hand;
|
|
var picked = A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$getAllById, model.picked, hand);
|
|
var callFill = function () {
|
|
var _p5 = round.responses;
|
|
if (_p5.ctor === 'Revealed') {
|
|
return A2(
|
|
_elm_lang$core$Maybe$withDefault,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
A2(
|
|
_elm_lang$core$Maybe$andThen,
|
|
model.considering,
|
|
_Lattyware$massivedecks$MassiveDecks_Util$get(_p5._0.cards)));
|
|
} else {
|
|
return picked;
|
|
}
|
|
}();
|
|
var pickedOrChosen = function () {
|
|
var _p6 = round.responses;
|
|
if (_p6.ctor === 'Revealed') {
|
|
var _p7 = model.considering;
|
|
if (_p7.ctor === 'Just') {
|
|
var _p9 = _p7._0;
|
|
var _p8 = A2(_Lattyware$massivedecks$MassiveDecks_Util$get, _p6._0.cards, _p9);
|
|
if (_p8.ctor === 'Just') {
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A3(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$consideringView, _p9, _p8._0, isCzar)
|
|
]);
|
|
} else {
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[]);
|
|
}
|
|
} else {
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[]);
|
|
}
|
|
} else {
|
|
return A3(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$pickedView,
|
|
picked,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Card$slots(round.call),
|
|
A2(_elm_lang$core$Basics_ops['++'], model.shownPlayed.animated, model.shownPlayed.toAnimate));
|
|
}
|
|
}();
|
|
var lobby = lobbyModel.lobby;
|
|
var canPlay = A2(
|
|
_elm_lang$core$List$all,
|
|
function (player) {
|
|
return _elm_lang$core$Native_Utils.eq(player.status, _Lattyware$massivedecks$MassiveDecks_Models_Player$NotPlayed);
|
|
},
|
|
A2(
|
|
_elm_lang$core$List$filter,
|
|
function (player) {
|
|
return _elm_lang$core$Native_Utils.eq(player.id, id);
|
|
},
|
|
lobby.players));
|
|
var playedOrHand = function () {
|
|
var _p10 = round.responses;
|
|
if (_p10.ctor === 'Revealed') {
|
|
return A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$playedView, isCzar, _p10._0);
|
|
} else {
|
|
return A3(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$handView,
|
|
model.picked,
|
|
_elm_lang$core$Basics$not(canPlay),
|
|
hand);
|
|
}
|
|
}();
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$playArea(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('round-area')
|
|
]),
|
|
_elm_lang$core$List$concat(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI_Cards$call, round.call, callFill)
|
|
]),
|
|
pickedOrChosen
|
|
]))),
|
|
playedOrHand,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$gameMenu(lobbyModel)
|
|
]))
|
|
]);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$view = function (lobbyModel) {
|
|
var lobby = lobbyModel.lobby;
|
|
var model = lobbyModel.playing;
|
|
var _p11 = function () {
|
|
var _p12 = model.finishedRound;
|
|
if (_p12.ctor === 'Just') {
|
|
return A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$winnerHeaderAndContents, _p12._0, lobby.players);
|
|
} else {
|
|
var _p13 = lobby.round;
|
|
if (_p13.ctor === 'Just') {
|
|
var _p14 = _p13._0;
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('gavel'),
|
|
_elm_lang$html$Html$text(
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
' ',
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$czarName, lobby.players, _p14.czar)))
|
|
]),
|
|
_1: A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$roundContents, lobbyModel, _p14)
|
|
};
|
|
} else {
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_1: _elm_lang$core$Native_List.fromArray(
|
|
[])
|
|
};
|
|
}
|
|
}
|
|
}();
|
|
var header = _p11._0;
|
|
var content = _p11._1;
|
|
var _p15 = model.history;
|
|
if (_p15.ctor === 'Nothing') {
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: header,
|
|
_1: _elm_lang$core$List$concat(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$infoBar, lobby, lobbyModel.secret),
|
|
content,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$warningDrawer(
|
|
_elm_lang$core$List$concat(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$skippingNotice, lobby.players, lobbyModel.secret.id),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$disconnectedNotice(lobby.players)
|
|
])))
|
|
])
|
|
]))
|
|
};
|
|
} else {
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_1: _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html_App$map,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$HistoryMessage,
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Scenes_History$view, _p15._0, lobbyModel.lobby.players))
|
|
])
|
|
};
|
|
}
|
|
};
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing$initialRandomPositioning = A4(
|
|
_elm_lang$core$Random$map3,
|
|
F3(
|
|
function (r, h, l) {
|
|
return A4(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Models$ShownCard, r, h, l, -100);
|
|
}),
|
|
A2(_elm_lang$core$Random$int, -75, 75),
|
|
A2(_elm_lang$core$Random$int, 0, 50),
|
|
_elm_lang$core$Random$bool);
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing$randomPositioning = A5(
|
|
_elm_lang$core$Random$map4,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Models$ShownCard,
|
|
A2(_elm_lang$core$Random$int, -90, 90),
|
|
A2(_elm_lang$core$Random$int, 0, 50),
|
|
_elm_lang$core$Random$bool,
|
|
A2(_elm_lang$core$Random$int, -5, 1));
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing$updatePositioning = F2(
|
|
function (shownPlayed, seed) {
|
|
var _p0 = A2(
|
|
_elm_lang$core$Random$step,
|
|
A2(
|
|
_elm_lang$core$Random$list,
|
|
_elm_lang$core$List$length(shownPlayed.toAnimate),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing$randomPositioning),
|
|
seed);
|
|
var newAnimated = _p0._0;
|
|
var newSeed = _p0._1;
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Models$ShownPlayedCards,
|
|
A2(_elm_lang$core$Basics_ops['++'], shownPlayed.animated, newAnimated),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[])),
|
|
_1: newSeed
|
|
};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing$addShownPlayed = F2(
|
|
function ($new, seed) {
|
|
return A2(
|
|
_elm_lang$core$Random$step,
|
|
A2(_elm_lang$core$Random$list, $new, _Lattyware$massivedecks$MassiveDecks_Scenes_Playing$initialRandomPositioning),
|
|
seed);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing$skipErrorHandler = function (error) {
|
|
var _p1 = error;
|
|
if (_p1.ctor === 'NotEnoughPlayersToSkip') {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$ErrorMessage(
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Components_Errors$New, 'There are not enough players in the game to skip.', false));
|
|
} else {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$ErrorMessage(
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Components_Errors$New, 'The players can\'t be skipped as they are not inactive.', false));
|
|
}
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing$playErrorHandler = function (error) {
|
|
var _p2 = error;
|
|
switch (_p2.ctor) {
|
|
case 'NotInRound':
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$ErrorMessage(
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Components_Errors$New, 'You can\'t play as you are not in this round.', false));
|
|
case 'AlreadyPlayed':
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$ErrorMessage(
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Components_Errors$New, 'You can\'t play as you have already played in this round.', false));
|
|
case 'AlreadyJudging':
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$ErrorMessage(
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Components_Errors$New, 'You can\'t play as the round is already in it\'s judging phase.', false));
|
|
default:
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$ErrorMessage(
|
|
A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Errors$New,
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
'You played the wrong number of cards - you played ',
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_elm_lang$core$Basics$toString(_p2._0),
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
' cards, but the call needs ',
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_elm_lang$core$Basics$toString(_p2._1),
|
|
'cards.')))),
|
|
false));
|
|
}
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing$chooseErrorHandler = function (error) {
|
|
var _p3 = error;
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$ErrorMessage(
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Components_Errors$New, 'You can\'t pick a winner as you are not the card czar this round.', false));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing$redrawErrorHandler = function (error) {
|
|
var _p4 = error;
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$ErrorMessage(
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Components_Errors$New, 'You do not have enough points to redraw your hand.', false));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing$lobbyAndHandUpdated = function (lobbyModel) {
|
|
var model = lobbyModel.playing;
|
|
var shownPlayed = model.shownPlayed;
|
|
var lobby = lobbyModel.lobby;
|
|
var playedCards = A2(
|
|
_elm_lang$core$Maybe$andThen,
|
|
lobby.round,
|
|
function (round) {
|
|
var _p5 = round.responses;
|
|
if (_p5.ctor === 'Hidden') {
|
|
return _elm_lang$core$Maybe$Just(_p5._0);
|
|
} else {
|
|
return _elm_lang$core$Maybe$Nothing;
|
|
}
|
|
});
|
|
var _p6 = function () {
|
|
var _p7 = playedCards;
|
|
if (_p7.ctor === 'Just') {
|
|
var existing = _elm_lang$core$List$length(shownPlayed.animated) + _elm_lang$core$List$length(shownPlayed.toAnimate);
|
|
var _p8 = A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing$addShownPlayed, _p7._0 - existing, model.seed);
|
|
var $new = _p8._0;
|
|
var seed = _p8._1;
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Models$ShownPlayedCards,
|
|
shownPlayed.animated,
|
|
A2(_elm_lang$core$Basics_ops['++'], shownPlayed.toAnimate, $new)),
|
|
_1: seed
|
|
};
|
|
} else {
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Models$ShownPlayedCards,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[])),
|
|
_1: model.seed
|
|
};
|
|
}
|
|
}();
|
|
var newShownPlayed = _p6._0;
|
|
var seed = _p6._1;
|
|
var newModel = _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{shownPlayed: newShownPlayed, seed: seed});
|
|
return {ctor: '_Tuple2', _0: newModel, _1: _elm_lang$core$Platform_Cmd$none};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing$ignore = function (_p9) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$LocalMessage(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$NoOp);
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing$update = F2(
|
|
function (message, lobbyModel) {
|
|
var secret = lobbyModel.secret;
|
|
var lobby = lobbyModel.lobby;
|
|
var gameCode = lobby.gameCode;
|
|
var model = lobbyModel.playing;
|
|
var _p10 = message;
|
|
switch (_p10.ctor) {
|
|
case 'Pick':
|
|
var playing = A2(
|
|
_elm_lang$core$Maybe$withDefault,
|
|
false,
|
|
A2(
|
|
_elm_lang$core$Maybe$map,
|
|
function (round) {
|
|
var _p11 = round.responses;
|
|
if (_p11.ctor === 'Revealed') {
|
|
return false;
|
|
} else {
|
|
return true;
|
|
}
|
|
},
|
|
lobby.round));
|
|
var slots = A2(
|
|
_elm_lang$core$Maybe$withDefault,
|
|
0,
|
|
A2(
|
|
_elm_lang$core$Maybe$map,
|
|
function (round) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Models_Card$slots(round.call);
|
|
},
|
|
lobby.round));
|
|
var canPlay = _elm_lang$core$Native_Utils.cmp(
|
|
_elm_lang$core$List$length(model.picked),
|
|
slots) < 0;
|
|
return (playing && canPlay) ? {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{
|
|
picked: A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
model.picked,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[_p10._0]))
|
|
}),
|
|
_1: _elm_lang$core$Platform_Cmd$none
|
|
} : {ctor: '_Tuple2', _0: model, _1: _elm_lang$core$Platform_Cmd$none};
|
|
case 'Withdraw':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{
|
|
picked: A2(
|
|
_elm_lang$core$List$filter,
|
|
F2(
|
|
function (x, y) {
|
|
return !_elm_lang$core$Native_Utils.eq(x, y);
|
|
})(_p10._0),
|
|
model.picked)
|
|
}),
|
|
_1: _elm_lang$core$Platform_Cmd$none
|
|
};
|
|
case 'Play':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{
|
|
picked: _elm_lang$core$Native_List.fromArray(
|
|
[])
|
|
}),
|
|
_1: A4(
|
|
_Lattyware$massivedecks$MassiveDecks_API_Request$send,
|
|
A3(_Lattyware$massivedecks$MassiveDecks_API$play, gameCode, secret, model.picked),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing$playErrorHandler,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$ErrorMessage,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$HandUpdate)
|
|
};
|
|
case 'Consider':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{
|
|
considering: _elm_lang$core$Maybe$Just(_p10._0)
|
|
}),
|
|
_1: _elm_lang$core$Platform_Cmd$none
|
|
};
|
|
case 'Choose':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{considering: _elm_lang$core$Maybe$Nothing}),
|
|
_1: A4(
|
|
_Lattyware$massivedecks$MassiveDecks_API_Request$send,
|
|
A3(_Lattyware$massivedecks$MassiveDecks_API$choose, gameCode, secret, _p10._0),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing$chooseErrorHandler,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$ErrorMessage,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing$ignore)
|
|
};
|
|
case 'NextRound':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{considering: _elm_lang$core$Maybe$Nothing, finishedRound: _elm_lang$core$Maybe$Nothing}),
|
|
_1: _elm_lang$core$Platform_Cmd$none
|
|
};
|
|
case 'AnimatePlayedCards':
|
|
var _p12 = A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing$updatePositioning, model.shownPlayed, model.seed);
|
|
var shownPlayed = _p12._0;
|
|
var seed = _p12._1;
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{seed: seed, shownPlayed: shownPlayed}),
|
|
_1: _elm_lang$core$Platform_Cmd$none
|
|
};
|
|
case 'Skip':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: model,
|
|
_1: A4(
|
|
_Lattyware$massivedecks$MassiveDecks_API_Request$send,
|
|
A3(_Lattyware$massivedecks$MassiveDecks_API$skip, gameCode, secret, _p10._0),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing$skipErrorHandler,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$ErrorMessage,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing$ignore)
|
|
};
|
|
case 'Back':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: model,
|
|
_1: A3(
|
|
_Lattyware$massivedecks$MassiveDecks_API_Request$send$,
|
|
A2(_Lattyware$massivedecks$MassiveDecks_API$back, gameCode, secret),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$ErrorMessage,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing$ignore)
|
|
};
|
|
case 'LobbyAndHandUpdated':
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Playing$lobbyAndHandUpdated(lobbyModel);
|
|
case 'Redraw':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: model,
|
|
_1: A4(
|
|
_Lattyware$massivedecks$MassiveDecks_API_Request$send,
|
|
A2(_Lattyware$massivedecks$MassiveDecks_API$redraw, lobbyModel.lobby.gameCode, lobbyModel.secret),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing$redrawErrorHandler,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$ErrorMessage,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$HandUpdate)
|
|
};
|
|
case 'FinishRound':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{
|
|
finishedRound: _elm_lang$core$Maybe$Just(_p10._0)
|
|
}),
|
|
_1: _elm_lang$core$Platform_Cmd$none
|
|
};
|
|
case 'HistoryMessage':
|
|
var _p13 = model.history;
|
|
if (_p13.ctor === 'Just') {
|
|
var _p14 = _p10._0;
|
|
switch (_p14.ctor) {
|
|
case 'ErrorMessage':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: model,
|
|
_1: _Lattyware$massivedecks$MassiveDecks_Util$cmd(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$ErrorMessage(_p14._0))
|
|
};
|
|
case 'Close':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{history: _elm_lang$core$Maybe$Nothing}),
|
|
_1: _elm_lang$core$Platform_Cmd$none
|
|
};
|
|
default:
|
|
var _p15 = A2(_Lattyware$massivedecks$MassiveDecks_Scenes_History$update, _p14._0, _p13._0);
|
|
var newHistory = _p15._0;
|
|
var cmd = _p15._1;
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{
|
|
history: _elm_lang$core$Maybe$Just(newHistory)
|
|
}),
|
|
_1: A2(
|
|
_elm_lang$core$Platform_Cmd$map,
|
|
function (_p16) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$LocalMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$HistoryMessage(_p16));
|
|
},
|
|
cmd)
|
|
};
|
|
}
|
|
} else {
|
|
return {ctor: '_Tuple2', _0: model, _1: _elm_lang$core$Platform_Cmd$none};
|
|
}
|
|
case 'ViewHistory':
|
|
var _p17 = _Lattyware$massivedecks$MassiveDecks_Scenes_History$init(lobbyModel.lobby.gameCode);
|
|
var historyModel = _p17._0;
|
|
var command = _p17._1;
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{
|
|
history: _elm_lang$core$Maybe$Just(historyModel)
|
|
}),
|
|
_1: A2(
|
|
_elm_lang$core$Platform_Cmd$map,
|
|
function (_p18) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$LocalMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$HistoryMessage(_p18));
|
|
},
|
|
command)
|
|
};
|
|
default:
|
|
return {ctor: '_Tuple2', _0: model, _1: _elm_lang$core$Platform_Cmd$none};
|
|
}
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing$view = function (model) {
|
|
var _p19 = _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_UI$view(model);
|
|
var header = _p19._0;
|
|
var content = _p19._1;
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: A2(
|
|
_elm_lang$core$List$map,
|
|
_elm_lang$html$Html_App$map(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$LocalMessage),
|
|
header),
|
|
_1: A2(
|
|
_elm_lang$core$List$map,
|
|
_elm_lang$html$Html_App$map(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$LocalMessage),
|
|
content)
|
|
};
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing$subscriptions = function (model) {
|
|
return _elm_lang$core$List$isEmpty(model.shownPlayed.toAnimate) ? _elm_lang$core$Platform_Sub$none : _elm_lang$animation_frame$AnimationFrame$diffs(
|
|
function (_p20) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$LocalMessage(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$AnimatePlayedCards);
|
|
});
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing$hack = function (seed) {
|
|
return A2(
|
|
_elm_lang$core$Result$withDefault,
|
|
0,
|
|
_elm_lang$core$String$toInt(seed));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing$houseRule = function (id) {
|
|
var _p21 = id;
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Playing_HouseRule_Reboot$rule;
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Playing$init = function (init) {
|
|
return {
|
|
picked: _elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
considering: _elm_lang$core$Maybe$Nothing,
|
|
finishedRound: _elm_lang$core$Maybe$Nothing,
|
|
shownPlayed: {
|
|
animated: _elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
toAnimate: _elm_lang$core$Native_List.fromArray(
|
|
[])
|
|
},
|
|
seed: _elm_lang$core$Random$initialSeed(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing$hack(init.seed)),
|
|
history: _elm_lang$core$Maybe$Nothing
|
|
};
|
|
};
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_UI$startGameWarning = function (canStart) {
|
|
return canStart ? _elm_lang$html$Html$text('') : A2(
|
|
_elm_lang$html$Html$span,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('info-circle'),
|
|
_elm_lang$html$Html$text(' You will need at least two players to start the game.')
|
|
]));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_UI$startGameButton = F2(
|
|
function (enoughPlayers, enoughCards) {
|
|
return A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$id('start-game')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_UI$startGameWarning(enoughPlayers),
|
|
A2(
|
|
_elm_lang$html$Html$button,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui-btn mui-btn--primary mui-btn--raised'),
|
|
_elm_lang$html$Html_Events$onClick(_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$StartGame),
|
|
_elm_lang$html$Html_Attributes$disabled(
|
|
_elm_lang$core$Basics$not(enoughPlayers && enoughCards))
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Start Game')
|
|
]))
|
|
]));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_UI$houseRuleTemplate = F6(
|
|
function (id$, title, icon, description, buttonText, message) {
|
|
return A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$id(id$),
|
|
_elm_lang$html$Html_Attributes$class('house-rule')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$h3,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon(icon),
|
|
_elm_lang$html$Html$text(' '),
|
|
_elm_lang$html$Html$text(title)
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$button,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui-btn mui-btn--small mui-btn--primary'),
|
|
_elm_lang$html$Html_Events$onClick(message)
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text(buttonText)
|
|
]))
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$p,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text(description)
|
|
]))
|
|
]));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_UI$rando = A6(_Lattyware$massivedecks$MassiveDecks_Scenes_Config_UI$houseRuleTemplate, 'rando', 'Rando Cardrissian', 'cogs', 'Every round, one random card will be played for an imaginary player named Rando Cardrissian, if he wins, all players go home in a state of everlasting shame.', 'Add an AI player', _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$AddAi);
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_UI$houseRule = F2(
|
|
function (enabled, rule) {
|
|
var _p0 = enabled ? {
|
|
ctor: '_Tuple2',
|
|
_0: 'Disable',
|
|
_1: _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$DisableRule(rule.id)
|
|
} : {
|
|
ctor: '_Tuple2',
|
|
_0: 'Enable',
|
|
_1: _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$EnableRule(rule.id)
|
|
};
|
|
var buttonText = _p0._0;
|
|
var command = _p0._1;
|
|
return A6(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_UI$houseRuleTemplate,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_HouseRule_Id$toString(rule.id),
|
|
rule.name,
|
|
rule.icon,
|
|
rule.description,
|
|
buttonText,
|
|
command);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_UI$emptyDeckListInfo = function (display) {
|
|
return display ? _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$tr,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$td,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$colspan(4)
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('info-circle'),
|
|
_elm_lang$html$Html$text(' You will need to add at least one '),
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$href('https://www.cardcastgame.com/browse'),
|
|
_elm_lang$html$Html_Attributes$target('_blank')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Cardcast deck')
|
|
])),
|
|
_elm_lang$html$Html$text(' to the game.'),
|
|
_elm_lang$html$Html$text(' Not sure? Try '),
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('link'),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'tabindex', '0'),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'role', 'button'),
|
|
_elm_lang$html$Html_Events$onClick(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$ConfigureDecks(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$Request('CAHBS')))
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('clicking here to add the Cards Against Humanity base set')
|
|
])),
|
|
_elm_lang$html$Html$text('.')
|
|
]))
|
|
]))
|
|
]) : _elm_lang$core$Native_List.fromArray(
|
|
[]);
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_UI$deckLink = function (id) {
|
|
return A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$href(
|
|
A2(_elm_lang$core$Basics_ops['++'], 'https://www.cardcastgame.com/browse/deck/', id)),
|
|
_elm_lang$html$Html_Attributes$target('_blank')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text(id)
|
|
]));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_UI$deckList = F3(
|
|
function (decks, loadingDecks, deckId) {
|
|
return A2(
|
|
_elm_lang$html$Html$table,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('decks mui-table')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$thead,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$tr,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$th,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Id')
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$th,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Name')
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$th,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$title('Calls')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('square')
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$th,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$title('Responses')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('square-o')
|
|
]))
|
|
]))
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$tbody,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$List$concat(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_UI$emptyDeckListInfo(
|
|
_elm_lang$core$List$isEmpty(decks) && _elm_lang$core$List$isEmpty(loadingDecks)),
|
|
A2(
|
|
_elm_lang$core$List$map,
|
|
function (deck) {
|
|
return A2(
|
|
_elm_lang$html$Html$tr,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$td,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_UI$deckLink(deck.id)
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$td,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$title(deck.name)
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text(deck.name)
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$td,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text(
|
|
_elm_lang$core$Basics$toString(deck.calls))
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$td,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text(
|
|
_elm_lang$core$Basics$toString(deck.responses))
|
|
]))
|
|
]));
|
|
},
|
|
decks),
|
|
A2(
|
|
_elm_lang$core$List$map,
|
|
function (deck) {
|
|
return A2(
|
|
_elm_lang$html$Html$tr,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$td,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_UI$deckLink(deck)
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$td,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$colspan(3)
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[_Lattyware$massivedecks$MassiveDecks_Components_Icon$spinner]))
|
|
]));
|
|
},
|
|
loadingDecks),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$tr,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$td,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$colspan(4)
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Input$view(deckId)
|
|
]))
|
|
]))
|
|
])
|
|
])))
|
|
]));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_UI$addDeckButton = function (deckId) {
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$button,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui-btn mui-btn--small mui-btn--primary mui-btn--fab'),
|
|
_elm_lang$html$Html_Attributes$disabled(
|
|
_elm_lang$core$String$isEmpty(deckId)),
|
|
_elm_lang$html$Html_Events$onClick(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$ConfigureDecks(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$Request(deckId))),
|
|
_elm_lang$html$Html_Attributes$title('Add deck to game.')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('plus')
|
|
]))
|
|
]);
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_UI$deckIdInputLabel = _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text(' A '),
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$href('https://www.cardcastgame.com/browse'),
|
|
_elm_lang$html$Html_Attributes$target('_blank')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Cardcast')
|
|
])),
|
|
_elm_lang$html$Html$text(' Play Code')
|
|
]);
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_UI$invite = F2(
|
|
function (appUrl, lobbyId) {
|
|
var url = A2(_Lattyware$massivedecks$MassiveDecks_Util$lobbyUrl, appUrl, lobbyId);
|
|
return A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$p,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Invite others to the game with the code \''),
|
|
A2(
|
|
_elm_lang$html$Html$strong,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('game-code')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text(lobbyId)
|
|
])),
|
|
_elm_lang$html$Html$text('\' to enter on the main page, or give them this link: ')
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$p,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$href(url)
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text(url)
|
|
]))
|
|
]))
|
|
]));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config_UI$view = function (lobbyModel) {
|
|
var lobby = lobbyModel.lobby;
|
|
var decks = lobby.config.decks;
|
|
var enoughCards = _elm_lang$core$Basics$not(
|
|
_elm_lang$core$List$isEmpty(decks));
|
|
var enoughPlayers = _elm_lang$core$Native_Utils.cmp(
|
|
_elm_lang$core$List$length(lobby.players),
|
|
1) > 0;
|
|
var model = lobbyModel.config;
|
|
return A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$id('config')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$id('config-content'),
|
|
_elm_lang$html$Html_Attributes$class('mui-panel')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Config_UI$invite, lobbyModel.init.url, lobby.gameCode),
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui-divider')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[])),
|
|
A2(
|
|
_elm_lang$html$Html$h1,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Game Setup')
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$ul,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui-tabs__bar')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui--is-active')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'data-mui-toggle', 'tab'),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'data-mui-controls', 'decks')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Decks')
|
|
]))
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'data-mui-toggle', 'tab'),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'data-mui-controls', 'house-rules')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('House Rules')
|
|
]))
|
|
]))
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$id('decks'),
|
|
_elm_lang$html$Html_Attributes$class('mui-tabs__pane mui--is-active')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A3(_Lattyware$massivedecks$MassiveDecks_Scenes_Config_UI$deckList, decks, model.loadingDecks, model.deckIdInput)
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$id('house-rules'),
|
|
_elm_lang$html$Html_Attributes$class('mui-tabs__pane')
|
|
]),
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[_Lattyware$massivedecks$MassiveDecks_Scenes_Config_UI$rando]),
|
|
A2(
|
|
_elm_lang$core$List$map,
|
|
function (rule) {
|
|
return A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_UI$houseRule,
|
|
A2(_elm_lang$core$List$member, rule.id, lobbyModel.lobby.config.houseRules),
|
|
rule);
|
|
},
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_HouseRule_Available$houseRules))),
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui-divider')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[])),
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Config_UI$startGameButton, enoughPlayers, enoughCards)
|
|
]))
|
|
]));
|
|
};
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config$newGameErrorHandler = function (error) {
|
|
var _p0 = error;
|
|
if (_p0.ctor === 'GameInProgress') {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$ErrorMessage(
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Components_Errors$New, 'Can\'t start the game - it is already in progress.', false));
|
|
} else {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$ErrorMessage(
|
|
A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Errors$New,
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
'Can\'t start the game - you need at least ',
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_elm_lang$core$Basics$toString(_p0._0),
|
|
' players to start the game.')),
|
|
false));
|
|
}
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config$addDeckErrorHandler = F2(
|
|
function (deckId, error) {
|
|
var _p1 = error;
|
|
if (_p1.ctor === 'CardcastTimeout') {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$LocalMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$ConfigureDecks(
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$Fail, deckId, 'There was a problem accessing CardCast, please try again after a short wait.')));
|
|
} else {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$LocalMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$ConfigureDecks(
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$Fail, deckId, 'The given play code doesn\'t exist, please check you have the correct code.')));
|
|
}
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config$removeDeckLoadingSpinner = F2(
|
|
function (deckId, model) {
|
|
return _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{
|
|
loadingDecks: A2(
|
|
_elm_lang$core$List$filter,
|
|
F2(
|
|
function (x, y) {
|
|
return !_elm_lang$core$Native_Utils.eq(x, y);
|
|
})(deckId),
|
|
model.loadingDecks)
|
|
});
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config$inputSetErrorCmd = F2(
|
|
function (inputId, error) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Util$cmd(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$LocalMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$InputMessage(
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: inputId,
|
|
_1: _Lattyware$massivedecks$MassiveDecks_Components_Input$Error(
|
|
_elm_lang$core$Maybe$Just(error))
|
|
})));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config$inputClearErrorCmd = function (inputId) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Util$cmd(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$LocalMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$InputMessage(
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: inputId,
|
|
_1: _Lattyware$massivedecks$MassiveDecks_Components_Input$Error(_elm_lang$core$Maybe$Nothing)
|
|
})));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config$ignore = function (_p2) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$LocalMessage(_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$NoOp);
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config$update = F2(
|
|
function (message, lobbyModel) {
|
|
var model = lobbyModel.config;
|
|
var secret = lobbyModel.secret;
|
|
var gameCode = lobbyModel.lobby.gameCode;
|
|
var lobby = lobbyModel.lobby;
|
|
var _p3 = message;
|
|
switch (_p3.ctor) {
|
|
case 'AddDeck':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: model,
|
|
_1: _Lattyware$massivedecks$MassiveDecks_Util$cmd(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$LocalMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$ConfigureDecks(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$Request(model.deckIdInput.value))))
|
|
};
|
|
case 'ConfigureDecks':
|
|
switch (_p3._0.ctor) {
|
|
case 'Request':
|
|
var deckId = _elm_lang$core$String$toUpper(_p3._0._0);
|
|
return A2(
|
|
_elm_lang$core$Platform_Cmd_ops['!'],
|
|
_elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{
|
|
loadingDecks: A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
model.loadingDecks,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[deckId]))
|
|
}),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A4(
|
|
_Lattyware$massivedecks$MassiveDecks_API_Request$send,
|
|
A3(_Lattyware$massivedecks$MassiveDecks_API$addDeck, gameCode, secret, deckId),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config$addDeckErrorHandler(deckId),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$ErrorMessage,
|
|
function (_p4) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$LocalMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$ConfigureDecks(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$Add(deckId)));
|
|
}),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config$inputClearErrorCmd(_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$DeckId)
|
|
]));
|
|
case 'Add':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Config$removeDeckLoadingSpinner, _p3._0._0, model),
|
|
_1: _elm_lang$core$Platform_Cmd$none
|
|
};
|
|
default:
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Config$removeDeckLoadingSpinner, _p3._0._0, model),
|
|
_1: A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Config$inputSetErrorCmd, _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$DeckId, _p3._0._1)
|
|
};
|
|
}
|
|
case 'InputMessage':
|
|
var _p5 = A2(_Lattyware$massivedecks$MassiveDecks_Components_Input$update, _p3._0, lobbyModel.config.deckIdInput);
|
|
var deckIdInput = _p5._0;
|
|
var msg = _p5._1;
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{deckIdInput: deckIdInput}),
|
|
_1: A2(_elm_lang$core$Platform_Cmd$map, _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$LocalMessage, msg)
|
|
};
|
|
case 'AddAi':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: model,
|
|
_1: A3(
|
|
_Lattyware$massivedecks$MassiveDecks_API_Request$send$,
|
|
A2(_Lattyware$massivedecks$MassiveDecks_API$newAi, gameCode, secret),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$ErrorMessage,
|
|
function (_p6) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$LocalMessage(_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$NoOp);
|
|
})
|
|
};
|
|
case 'StartGame':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: model,
|
|
_1: A4(
|
|
_Lattyware$massivedecks$MassiveDecks_API_Request$send,
|
|
A2(_Lattyware$massivedecks$MassiveDecks_API$newGame, gameCode, secret),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config$newGameErrorHandler,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$ErrorMessage,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$HandUpdate)
|
|
};
|
|
case 'EnableRule':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: model,
|
|
_1: A3(
|
|
_Lattyware$massivedecks$MassiveDecks_API_Request$send$,
|
|
A3(_Lattyware$massivedecks$MassiveDecks_API$enableRule, _p3._0, gameCode, secret),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$ErrorMessage,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config$ignore)
|
|
};
|
|
case 'DisableRule':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: model,
|
|
_1: A3(
|
|
_Lattyware$massivedecks$MassiveDecks_API_Request$send$,
|
|
A3(_Lattyware$massivedecks$MassiveDecks_API$disableRule, _p3._0, gameCode, secret),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$ErrorMessage,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config$ignore)
|
|
};
|
|
default:
|
|
return {ctor: '_Tuple2', _0: model, _1: _elm_lang$core$Platform_Cmd$none};
|
|
}
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config$view = function (lobbyModel) {
|
|
return A2(
|
|
_elm_lang$html$Html_App$map,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$LocalMessage,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_UI$view(lobbyModel));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config$subscriptions = function (model) {
|
|
return _elm_lang$core$Platform_Sub$none;
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Config$init = {
|
|
decks: _elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
deckIdInput: A8(
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Input$initWithExtra,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$DeckId,
|
|
'deck-id-input',
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_UI$deckIdInputLabel,
|
|
'',
|
|
'Play Code',
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_UI$addDeckButton,
|
|
_Lattyware$massivedecks$MassiveDecks_Util$cmd(_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$AddDeck),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config_Messages$InputMessage),
|
|
loadingDecks: _elm_lang$core$Native_List.fromArray(
|
|
[])
|
|
};
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$notificationsMenuItem = function (model) {
|
|
var _p0 = _elm_lang$core$Basics$not(model.supported) ? {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Maybe$Just('Your browser does not support desktop notifications.'),
|
|
_1: false
|
|
} : (_elm_lang$core$Native_Utils.eq(
|
|
model.permission,
|
|
_elm_lang$core$Maybe$Just(_Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$Denied)) ? {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Maybe$Just('You have denied Massive Decks permission to display desktop notifications.'),
|
|
_1: false
|
|
} : {ctor: '_Tuple2', _0: _elm_lang$core$Maybe$Nothing, _1: model.enabled});
|
|
var notClickable = _p0._0;
|
|
var enabled = _p0._1;
|
|
var classes = _elm_lang$html$Html_Attributes$classList(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{ctor: '_Tuple2', _0: 'link', _1: true},
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: 'disabled',
|
|
_1: _elm_lang$core$Basics$not(
|
|
_Lattyware$massivedecks$MassiveDecks_Util$isNothing(notClickable))
|
|
}
|
|
]));
|
|
var extraAttrs = function () {
|
|
var _p1 = notClickable;
|
|
if (_p1.ctor === 'Nothing') {
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Events$onClick(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$BrowserNotificationsMessage(
|
|
enabled ? _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$disable : _Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$enable)))
|
|
]);
|
|
} else {
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$title(_p1._0)
|
|
]);
|
|
}
|
|
}();
|
|
var attributes = A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
classes,
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'tabindex', '0'),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'role', 'button')
|
|
]),
|
|
extraAttrs);
|
|
var description = A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
' ',
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
enabled ? 'Disable' : 'Enable',
|
|
' Notifications'));
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
attributes,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$fwIcon(
|
|
enabled ? 'bell-slash' : 'bell'),
|
|
_elm_lang$html$Html$text(description)
|
|
]))
|
|
]))
|
|
]);
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$gameMenu = function (model) {
|
|
return A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('menu mui-dropdown')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$button,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui-btn mui-btn--small mui-btn--primary'),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'data-mui-toggle', 'dropdown'),
|
|
_elm_lang$html$Html_Attributes$title('Game menu.')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$fwIcon('ellipsis-h')
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$ul,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui-dropdown__menu mui-dropdown__menu--right')
|
|
]),
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('link'),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'tabindex', '0'),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'role', 'button'),
|
|
_elm_lang$html$Html_Events$onClick(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage(_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$DisplayInviteOverlay))
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$fwIcon('bullhorn'),
|
|
_elm_lang$html$Html$text(' Invite Players')
|
|
]))
|
|
]))
|
|
]),
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$notificationsMenuItem(model.browserNotifications),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('link'),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'tabindex', '0'),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'role', 'button'),
|
|
_elm_lang$html$Html_Events$onClick(_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$Leave)
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$fwIcon('sign-out'),
|
|
_elm_lang$html$Html$text(' Leave Game')
|
|
]))
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui-divider')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[])),
|
|
A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('link'),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'tabindex', '0'),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'role', 'button'),
|
|
_elm_lang$html$Html_Events$onClick(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$OverlayMessage(_Lattyware$massivedecks$MassiveDecks_Components_About$show))
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$fwIcon('info-circle'),
|
|
_elm_lang$html$Html$text(' About')
|
|
]))
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$li,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$href('https://github.com/Lattyware/massivedecks/issues/new'),
|
|
_elm_lang$html$Html_Attributes$target('_blank')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$fwIcon('bug'),
|
|
_elm_lang$html$Html$text(' Report a bug')
|
|
]))
|
|
]))
|
|
]))))
|
|
]));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$inviteOverlay = F2(
|
|
function (appUrl, gameCode) {
|
|
var url = A2(_Lattyware$massivedecks$MassiveDecks_Util$lobbyUrl, appUrl, gameCode);
|
|
var contents = _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$p,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('To invite other players, simply send them this link: ')
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$p,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$href(url)
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text(url)
|
|
]))
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$p,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Have them scan this QR code: ')
|
|
])),
|
|
_Lattyware$massivedecks$MassiveDecks_Components_QR$view('invite-qr-code'),
|
|
A2(
|
|
_elm_lang$html$Html$p,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Or give them this game code to enter on the start page: ')
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$p,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$input,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$readonly(true),
|
|
_elm_lang$html$Html_Attributes$value(gameCode)
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]))
|
|
]))
|
|
]);
|
|
return _Lattyware$massivedecks$MassiveDecks_Components_Overlay$Show(
|
|
{icon: 'bullhorn', title: 'Invite Players', contents: contents});
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$statusIconName = function (status) {
|
|
var _p2 = status;
|
|
switch (_p2.ctor) {
|
|
case 'NotPlayed':
|
|
return _elm_lang$core$Maybe$Just('hourglass');
|
|
case 'Played':
|
|
return _elm_lang$core$Maybe$Just('check');
|
|
case 'Czar':
|
|
return _elm_lang$core$Maybe$Just('gavel');
|
|
case 'Ai':
|
|
return _elm_lang$core$Maybe$Just('cogs');
|
|
case 'Neutral':
|
|
return _elm_lang$core$Maybe$Nothing;
|
|
default:
|
|
return _elm_lang$core$Maybe$Just('fast-forward');
|
|
}
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$statusIcon = function (status) {
|
|
return A2(
|
|
_elm_lang$core$Maybe$withDefault,
|
|
_elm_lang$html$Html$text(''),
|
|
A2(
|
|
_elm_lang$core$Maybe$map,
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$fwIcon,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$statusIconName(status)));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$playerIcon = function (player) {
|
|
return player.left ? _Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('sign-out') : _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$statusIcon(player.status);
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$statusDescription = function (player) {
|
|
return A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
function () {
|
|
var _p3 = player.status;
|
|
switch (_p3.ctor) {
|
|
case 'NotPlayed':
|
|
return 'Choosing';
|
|
case 'Played':
|
|
return 'Played';
|
|
case 'Czar':
|
|
return 'Round Czar';
|
|
case 'Ai':
|
|
return 'A Computer';
|
|
case 'Neutral':
|
|
return '';
|
|
default:
|
|
return 'Being Skipped';
|
|
}
|
|
}(),
|
|
player.disconnected ? ' (Disconnected)' : '');
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$notificationPopup = function (notification) {
|
|
var _p4 = notification;
|
|
if (_p4.ctor === 'Just') {
|
|
var _p5 = _p4._0;
|
|
var hidden = _p5.visible ? '' : 'hide';
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class(
|
|
A2(_elm_lang$core$Basics_ops['++'], 'badge mui--z2 ', hidden)),
|
|
_elm_lang$html$Html_Attributes$title(_p5.description),
|
|
_elm_lang$html$Html_Events$onClick(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$DismissNotification(_p5)))
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon(_p5.icon),
|
|
_elm_lang$html$Html$text(
|
|
A2(_elm_lang$core$Basics_ops['++'], ' ', _p5.name))
|
|
]))
|
|
]);
|
|
} else {
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('badge mui--z2 hide')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]))
|
|
]);
|
|
}
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$scoresButton = A2(
|
|
_elm_lang$html$Html$button,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('scores-toggle mui-btn mui-btn--small mui-btn--primary badged'),
|
|
_elm_lang$html$Html_Attributes$title('Players.'),
|
|
_elm_lang$html$Html_Events$onClick(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$SidebarMessage(_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Sidebar$Toggle)))
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$fwIcon('users')
|
|
]));
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$appHeader = F2(
|
|
function (contents, model) {
|
|
return A2(
|
|
_elm_lang$html$Html$header,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui-appbar mui--appbar-line-height')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui--appbar-line-height')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$span,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('score-buttons')
|
|
]),
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$scoresButton]),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$notificationPopup(model.notification))),
|
|
A2(
|
|
_elm_lang$html$Html$span,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$id('title'),
|
|
_elm_lang$html$Html_Attributes$class('mui--text-title mui--visible-xs-inline-block')
|
|
]),
|
|
contents),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$gameMenu(model)
|
|
]))
|
|
]))
|
|
]));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$score = function (player) {
|
|
var prename = player.disconnected ? _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('minus-circle'),
|
|
_elm_lang$html$Html$text(' ')
|
|
]) : _elm_lang$core$Native_List.fromArray(
|
|
[]);
|
|
var classes = _elm_lang$html$Html_Attributes$classList(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: _Lattyware$massivedecks$MassiveDecks_Models_Player$statusName(player.status),
|
|
_1: true
|
|
},
|
|
{ctor: '_Tuple2', _0: 'disconnected', _1: player.disconnected},
|
|
{ctor: '_Tuple2', _0: 'left', _1: player.left}
|
|
]));
|
|
return A2(
|
|
_elm_lang$html$Html$tr,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[classes]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$td,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('state'),
|
|
_elm_lang$html$Html_Attributes$title(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$statusDescription(player))
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$playerIcon(player)
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$td,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('name'),
|
|
_elm_lang$html$Html_Attributes$title(player.name)
|
|
]),
|
|
A2(
|
|
_elm_lang$core$List$append,
|
|
prename,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text(player.name)
|
|
]))),
|
|
A2(
|
|
_elm_lang$html$Html$td,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('score')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text(
|
|
_elm_lang$core$Basics$toString(player.score))
|
|
]))
|
|
]));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$scores = F2(
|
|
function (shownAsOverlay, players) {
|
|
var hideMessage = _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$SidebarMessage(_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Sidebar$Hide));
|
|
var closeLink = shownAsOverlay ? _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$a,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('link close-link'),
|
|
_elm_lang$html$Html_Attributes$title('Hide.'),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'tabindex', '0'),
|
|
A2(_elm_lang$html$Html_Attributes$attribute, 'role', 'button'),
|
|
_elm_lang$html$Html_Events$onClick(hideMessage)
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('times')
|
|
]))
|
|
]) : _elm_lang$core$Native_List.fromArray(
|
|
[]);
|
|
var sidebar = A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$id('scores'),
|
|
_elm_lang$html$Html_Attributes$classList(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{ctor: '_Tuple2', _0: 'shownAsOverlay', _1: shownAsOverlay}
|
|
]))
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$id('scores-title'),
|
|
_elm_lang$html$Html_Attributes$class('mui--appbar-line-height mui--text-headline')
|
|
]),
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Players')
|
|
]),
|
|
closeLink)),
|
|
A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui-divider')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[])),
|
|
A2(
|
|
_elm_lang$html$Html$table,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui-table')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$thead,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$tr,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html$th,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('state'),
|
|
_elm_lang$html$Html_Attributes$title('State')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('tasks')
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$th,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('name')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Player')
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$th,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('score'),
|
|
_elm_lang$html$Html_Attributes$title('Score')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Icon$icon('star')
|
|
]))
|
|
]))
|
|
])),
|
|
A2(
|
|
_elm_lang$html$Html$tbody,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
A2(_elm_lang$core$List$map, _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$score, players))
|
|
]))
|
|
]));
|
|
return shownAsOverlay ? A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$id('mui-overlay'),
|
|
A3(
|
|
_Lattyware$massivedecks$MassiveDecks_Util$onClickIfId,
|
|
'mui-overlay',
|
|
hideMessage,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage(_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$NoOp)),
|
|
A3(
|
|
_Lattyware$massivedecks$MassiveDecks_Util$onKeyDown,
|
|
'Escape',
|
|
hideMessage,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage(_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$NoOp)),
|
|
_elm_lang$html$Html_Attributes$tabindex(0)
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[sidebar])) : sidebar;
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$spacer = A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$class('mui--appbar-height')
|
|
]),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]));
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$contentWrapper = function (contents) {
|
|
return A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$id('content-wrapper')
|
|
]),
|
|
contents);
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$root = F2(
|
|
function (hideScores, contents) {
|
|
return A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html_Attributes$classList(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
{ctor: '_Tuple2', _0: 'content', _1: true},
|
|
{ctor: '_Tuple2', _0: 'hide-scores', _1: hideScores}
|
|
]))
|
|
]),
|
|
contents);
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$view = function (model) {
|
|
var url = model.init.url;
|
|
var lobby = model.lobby;
|
|
var gameCode = lobby.gameCode;
|
|
var players = lobby.players;
|
|
var _p6 = function () {
|
|
var _p7 = lobby.round;
|
|
if (_p7.ctor === 'Nothing') {
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
_1: _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$html$Html_App$map,
|
|
function (_p8) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$ConfigMessage(_p8));
|
|
},
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config$view(model))
|
|
])
|
|
};
|
|
} else {
|
|
var _p9 = _Lattyware$massivedecks$MassiveDecks_Scenes_Playing$view(model);
|
|
var h = _p9._0;
|
|
var c = _p9._1;
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: A2(
|
|
_elm_lang$core$List$map,
|
|
_elm_lang$html$Html_App$map(
|
|
function (_p10) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$PlayingMessage(_p10));
|
|
}),
|
|
h),
|
|
_1: A2(
|
|
_elm_lang$core$List$map,
|
|
_elm_lang$html$Html_App$map(
|
|
function (_p11) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$PlayingMessage(_p11));
|
|
}),
|
|
c)
|
|
};
|
|
}
|
|
}();
|
|
var header = _p6._0;
|
|
var contents = _p6._1;
|
|
return A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$root,
|
|
model.sidebar.hidden,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$appHeader, header, model),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$spacer,
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$scores, model.sidebar.shownAsOverlay, players),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$contentWrapper(contents)
|
|
]));
|
|
};
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$notificationChange = F2(
|
|
function (model, notification) {
|
|
var newNotification = _elm_lang$core$Maybe$oneOf(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[notification, model.notification]));
|
|
var cmd = function () {
|
|
var _p0 = newNotification;
|
|
if (_p0.ctor === 'Just') {
|
|
var dismiss = A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Util$after,
|
|
_elm_lang$core$Time$second * 5,
|
|
_elm_lang$core$Task$succeed(_p0._0));
|
|
return A3(
|
|
_elm_lang$core$Task$perform,
|
|
_Lattyware$massivedecks$MassiveDecks_Util$impossible,
|
|
function (_p1) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$DismissNotification(_p1));
|
|
},
|
|
dismiss);
|
|
} else {
|
|
return _elm_lang$core$Platform_Cmd$none;
|
|
}
|
|
}();
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{notification: newNotification}),
|
|
_1: cmd
|
|
};
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$updateLobbyAndHand = F2(
|
|
function (lobbyAndHand, model) {
|
|
return A2(
|
|
_elm_lang$core$Platform_Cmd_ops['!'],
|
|
_elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{lobby: lobbyAndHand.lobby, hand: lobbyAndHand.hand}),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Util$cmd(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$PlayingMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$LocalMessage(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$LobbyAndHandUpdated))))
|
|
]));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$icon = F2(
|
|
function (model, name) {
|
|
return _elm_lang$core$Maybe$Just(
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
model.init.url,
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
'assets/images/icons/',
|
|
A2(_elm_lang$core$Basics_ops['++'], name, '.png'))));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$overlayAlert = function (message) {
|
|
var _p2 = message;
|
|
var _p3 = _p2._0;
|
|
if (_p3.ctor === 'Denied') {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$OverlayMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Overlay$Show(
|
|
A3(
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Overlay$Overlay,
|
|
'times-circle',
|
|
'Can\'t enable desktop notifications.',
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('You did not give Massive Decks permission to give you desktop notifications.')
|
|
]))));
|
|
} else {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage(_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$NoOp);
|
|
}
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$updateRound = function (roundUpdate) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$UpdateLobby(
|
|
function (lobby) {
|
|
return _elm_lang$core$Native_Utils.update(
|
|
lobby,
|
|
{
|
|
round: A2(_elm_lang$core$Maybe$map, roundUpdate, lobby.round)
|
|
});
|
|
});
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$updatePlayer = F2(
|
|
function (playerId, playerUpdate) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$UpdateLobby(
|
|
function (lobby) {
|
|
return _elm_lang$core$Native_Utils.update(
|
|
lobby,
|
|
{
|
|
players: A2(
|
|
_elm_lang$core$List$map,
|
|
function (player) {
|
|
return _elm_lang$core$Native_Utils.eq(player.id, playerId) ? playerUpdate(player) : player;
|
|
},
|
|
lobby.players)
|
|
});
|
|
});
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$handleEvent = function (event) {
|
|
var _p4 = event;
|
|
switch (_p4.ctor) {
|
|
case 'Sync':
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$UpdateLobbyAndHand(_p4._0)
|
|
]);
|
|
case 'PlayerJoin':
|
|
var _p5 = _p4._0;
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$SetNotification(
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Notification$playerJoin(_p5.id)),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$UpdateLobby(
|
|
function (lobby) {
|
|
return _elm_lang$core$Native_Utils.update(
|
|
lobby,
|
|
{
|
|
players: A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
lobby.players,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[_p5]))
|
|
});
|
|
})
|
|
]);
|
|
case 'PlayerStatus':
|
|
var _p10 = _p4._1;
|
|
var _p9 = _p4._0;
|
|
var browserNotification = function () {
|
|
var _p6 = _p10;
|
|
switch (_p6.ctor) {
|
|
case 'NotPlayed':
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A3(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$BrowserNotificationForUser,
|
|
function (_p7) {
|
|
return _elm_lang$core$Maybe$Just(_p9);
|
|
},
|
|
'You need to play a card for the round.',
|
|
'hourglass')
|
|
]);
|
|
case 'Skipping':
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A3(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$BrowserNotificationForUser,
|
|
function (_p8) {
|
|
return _elm_lang$core$Maybe$Just(_p9);
|
|
},
|
|
'You are being skipped due to inactivity.',
|
|
'fast-forward')
|
|
]);
|
|
default:
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[]);
|
|
}
|
|
}();
|
|
return A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$updatePlayer,
|
|
_p9,
|
|
function (player) {
|
|
return _elm_lang$core$Native_Utils.update(
|
|
player,
|
|
{status: _p10});
|
|
})
|
|
]),
|
|
browserNotification);
|
|
case 'PlayerLeft':
|
|
var _p11 = _p4._0;
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$SetNotification(
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Notification$playerLeft(_p11)),
|
|
A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$updatePlayer,
|
|
_p11,
|
|
function (player) {
|
|
return _elm_lang$core$Native_Utils.update(
|
|
player,
|
|
{left: true});
|
|
})
|
|
]);
|
|
case 'PlayerDisconnect':
|
|
var _p12 = _p4._0;
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$SetNotification(
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Notification$playerDisconnect(_p12)),
|
|
A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$updatePlayer,
|
|
_p12,
|
|
function (player) {
|
|
return _elm_lang$core$Native_Utils.update(
|
|
player,
|
|
{disconnected: true});
|
|
})
|
|
]);
|
|
case 'PlayerReconnect':
|
|
var _p13 = _p4._0;
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$SetNotification(
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Notification$playerReconnect(_p13)),
|
|
A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$updatePlayer,
|
|
_p13,
|
|
function (player) {
|
|
return _elm_lang$core$Native_Utils.update(
|
|
player,
|
|
{disconnected: false});
|
|
})
|
|
]);
|
|
case 'PlayerScoreChange':
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$updatePlayer,
|
|
_p4._0,
|
|
function (player) {
|
|
return _elm_lang$core$Native_Utils.update(
|
|
player,
|
|
{score: _p4._1});
|
|
})
|
|
]);
|
|
case 'HandChange':
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$UpdateHand(_p4._0)
|
|
]);
|
|
case 'RoundStart':
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$UpdateLobby(
|
|
function (lobby) {
|
|
return _elm_lang$core$Native_Utils.update(
|
|
lobby,
|
|
{
|
|
round: _elm_lang$core$Maybe$Just(
|
|
A3(
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Game$Round,
|
|
_p4._0,
|
|
_p4._1,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Card$Hidden(0)))
|
|
});
|
|
})
|
|
]);
|
|
case 'RoundPlayed':
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$updateRound(
|
|
function (round) {
|
|
return _elm_lang$core$Native_Utils.update(
|
|
round,
|
|
{
|
|
responses: _Lattyware$massivedecks$MassiveDecks_Models_Card$Hidden(_p4._0)
|
|
});
|
|
})
|
|
]);
|
|
case 'RoundJudging':
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$updateRound(
|
|
function (round) {
|
|
return _elm_lang$core$Native_Utils.update(
|
|
round,
|
|
{
|
|
responses: _Lattyware$massivedecks$MassiveDecks_Models_Card$Revealed(
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Models_Card$RevealedResponses, _p4._0, _elm_lang$core$Maybe$Nothing))
|
|
});
|
|
}),
|
|
A3(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$BrowserNotificationForUser,
|
|
function (lobby) {
|
|
return A2(
|
|
_elm_lang$core$Maybe$map,
|
|
function (_) {
|
|
return _.czar;
|
|
},
|
|
lobby.round);
|
|
},
|
|
'You need to pick a winner for the round.',
|
|
'gavel')
|
|
]);
|
|
case 'RoundEnd':
|
|
var _p14 = _p4._0;
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$updateRound(
|
|
function (round) {
|
|
return _elm_lang$core$Native_Utils.update(
|
|
round,
|
|
{
|
|
responses: _Lattyware$massivedecks$MassiveDecks_Models_Card$Revealed(
|
|
A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Card$RevealedResponses,
|
|
_p14.responses,
|
|
_elm_lang$core$Maybe$Just(_p14.playedByAndWinner)))
|
|
});
|
|
}),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$PlayingMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$LocalMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing_Messages$FinishRound(_p14)))
|
|
]);
|
|
case 'GameStart':
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[]);
|
|
case 'GameEnd':
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$UpdateLobby(
|
|
function (lobby) {
|
|
return _elm_lang$core$Native_Utils.update(
|
|
lobby,
|
|
{round: _elm_lang$core$Maybe$Nothing});
|
|
}),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$UpdateHand(
|
|
{
|
|
hand: _elm_lang$core$Native_List.fromArray(
|
|
[])
|
|
})
|
|
]);
|
|
default:
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$UpdateLobby(
|
|
function (lobby) {
|
|
return _elm_lang$core$Native_Utils.update(
|
|
lobby,
|
|
{config: _p4._0});
|
|
})
|
|
]);
|
|
}
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$view = function (model) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$view(model);
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$webSocketResponseDecoder = function (response) {
|
|
if (_elm_lang$core$Native_Utils.eq(response, 'identify')) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage(_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$Identify);
|
|
} else {
|
|
var _p15 = _Lattyware$massivedecks$MassiveDecks_Models_Event$fromJson(response);
|
|
if (_p15.ctor === 'Ok') {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$Batch(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$handleEvent(_p15._0)));
|
|
} else {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$ErrorMessage(
|
|
A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Errors$New,
|
|
A2(_elm_lang$core$Basics_ops['++'], 'Error handling notification: ', _p15._0),
|
|
true));
|
|
}
|
|
}
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$webSocketUrl = F2(
|
|
function (url, gameCode) {
|
|
var _p16 = function () {
|
|
var _p17 = A2(_elm_lang$core$String$split, ':', url);
|
|
if (_p17.ctor === '[]') {
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: 'No protocol.',
|
|
_1: _elm_lang$core$Native_List.fromArray(
|
|
[])
|
|
};
|
|
} else {
|
|
return {ctor: '_Tuple2', _0: _p17._0, _1: _p17._1};
|
|
}
|
|
}();
|
|
var protocol = _p16._0;
|
|
var rest = _p16._1;
|
|
var host = A2(_elm_lang$core$String$join, ':', rest);
|
|
var baseUrl = function () {
|
|
var _p18 = protocol;
|
|
switch (_p18) {
|
|
case 'http':
|
|
return A2(_elm_lang$core$Basics_ops['++'], 'ws:', host);
|
|
case 'https':
|
|
return A2(_elm_lang$core$Basics_ops['++'], 'wss:', host);
|
|
default:
|
|
var _p19 = A2(_elm_lang$core$Debug$log, 'Assuming https due to unknown protocol for URL', _p18);
|
|
return A2(_elm_lang$core$Basics_ops['++'], 'wss:', host);
|
|
}
|
|
}();
|
|
return A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
baseUrl,
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
'lobbies/',
|
|
A2(_elm_lang$core$Basics_ops['++'], gameCode, '/notifications')));
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$update = F2(
|
|
function (message, model) {
|
|
var lobby = model.lobby;
|
|
var _p20 = message;
|
|
switch (_p20.ctor) {
|
|
case 'ConfigMessage':
|
|
var _p21 = _p20._0;
|
|
switch (_p21.ctor) {
|
|
case 'ErrorMessage':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: model,
|
|
_1: _Lattyware$massivedecks$MassiveDecks_Util$cmd(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$ErrorMessage(_p21._0))
|
|
};
|
|
case 'HandUpdate':
|
|
return A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$updateLobbyAndHand,
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Models_Game$LobbyAndHand, model.lobby, _p21._0),
|
|
model);
|
|
default:
|
|
var _p22 = A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Config$update, _p21._0, model);
|
|
var config = _p22._0;
|
|
var cmd = _p22._1;
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{config: config}),
|
|
_1: A2(
|
|
_elm_lang$core$Platform_Cmd$map,
|
|
function (_p23) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$ConfigMessage(_p23));
|
|
},
|
|
cmd)
|
|
};
|
|
}
|
|
case 'PlayingMessage':
|
|
var _p24 = _p20._0;
|
|
switch (_p24.ctor) {
|
|
case 'ErrorMessage':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: model,
|
|
_1: _Lattyware$massivedecks$MassiveDecks_Util$cmd(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$ErrorMessage(_p24._0))
|
|
};
|
|
case 'HandUpdate':
|
|
return A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$updateLobbyAndHand,
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Models_Game$LobbyAndHand, model.lobby, _p24._0),
|
|
model);
|
|
default:
|
|
var _p25 = A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Playing$update, _p24._0, model);
|
|
var playing = _p25._0;
|
|
var cmd = _p25._1;
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{playing: playing}),
|
|
_1: A2(
|
|
_elm_lang$core$Platform_Cmd$map,
|
|
function (_p26) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$PlayingMessage(_p26));
|
|
},
|
|
cmd)
|
|
};
|
|
}
|
|
case 'SidebarMessage':
|
|
var _p27 = A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Sidebar$update, _p20._0, model.sidebar);
|
|
var sidebarModel = _p27._0;
|
|
var cmd = _p27._1;
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{sidebar: sidebarModel}),
|
|
_1: A2(
|
|
_elm_lang$core$Platform_Cmd$map,
|
|
function (_p28) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$SidebarMessage(_p28));
|
|
},
|
|
cmd)
|
|
};
|
|
case 'BrowserNotificationsMessage':
|
|
var _p29 = A2(_Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$update, _p20._0, model.browserNotifications);
|
|
var browserNotifications = _p29._0;
|
|
var localCmd = _p29._1;
|
|
var cmd = _p29._2;
|
|
return A2(
|
|
_elm_lang$core$Platform_Cmd_ops['!'],
|
|
_elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{browserNotifications: browserNotifications}),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_elm_lang$core$Platform_Cmd$map,
|
|
function (_p30) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$BrowserNotificationsMessage(_p30));
|
|
},
|
|
localCmd),
|
|
A2(_elm_lang$core$Platform_Cmd$map, _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$overlayAlert, cmd)
|
|
]));
|
|
case 'BrowserNotificationForUser':
|
|
var cmd = function () {
|
|
var _p31 = _p20._0(lobby);
|
|
if (_p31.ctor === 'Just') {
|
|
return _elm_lang$core$Native_Utils.eq(_p31._0, model.secret.id) ? _Lattyware$massivedecks$MassiveDecks_Util$cmd(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$BrowserNotificationsMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$notify(
|
|
{
|
|
title: _p20._1,
|
|
icon: A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$icon, model, _p20._2)
|
|
})))) : _elm_lang$core$Platform_Cmd$none;
|
|
} else {
|
|
return _elm_lang$core$Platform_Cmd$none;
|
|
}
|
|
}();
|
|
return {ctor: '_Tuple2', _0: model, _1: cmd};
|
|
case 'UpdateLobbyAndHand':
|
|
return A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$updateLobbyAndHand, _p20._0, model);
|
|
case 'UpdateLobby':
|
|
return A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$updateLobbyAndHand,
|
|
A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Models_Game$LobbyAndHand,
|
|
_p20._0(lobby),
|
|
model.hand),
|
|
model);
|
|
case 'UpdateHand':
|
|
return A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$updateLobbyAndHand,
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Models_Game$LobbyAndHand, model.lobby, _p20._0),
|
|
model);
|
|
case 'SetNotification':
|
|
return A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$notificationChange,
|
|
model,
|
|
_p20._0(lobby.players));
|
|
case 'Identify':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: model,
|
|
_1: A2(
|
|
_elm_lang$core$Platform_Cmd$map,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage,
|
|
A2(
|
|
_elm_lang$websocket$WebSocket$send,
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$webSocketUrl, model.init.url, model.lobby.gameCode),
|
|
A2(
|
|
_elm_lang$core$Json_Encode$encode,
|
|
0,
|
|
_Lattyware$massivedecks$MassiveDecks_Models_JSON_Encode$encodePlayerSecret(model.secret))))
|
|
};
|
|
case 'DisplayInviteOverlay':
|
|
return A2(
|
|
_elm_lang$core$Platform_Cmd_ops['!'],
|
|
_elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{qrNeedsRendering: true}),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Util$cmd(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$OverlayMessage(
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_UI$inviteOverlay, model.init.url, model.lobby.gameCode)))
|
|
]));
|
|
case 'RenderQr':
|
|
return A2(
|
|
_elm_lang$core$Platform_Cmd_ops['!'],
|
|
_elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{qrNeedsRendering: false}),
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Components_QR$encodeAndRender,
|
|
'invite-qr-code',
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Util$lobbyUrl, model.init.url, model.lobby.gameCode))
|
|
]));
|
|
case 'DismissNotification':
|
|
var newModel = _elm_lang$core$Native_Utils.eq(
|
|
model.notification,
|
|
_elm_lang$core$Maybe$Just(_p20._0)) ? _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{
|
|
notification: A2(_elm_lang$core$Maybe$map, _Lattyware$massivedecks$MassiveDecks_Models_Notification$hide, model.notification)
|
|
}) : model;
|
|
return {ctor: '_Tuple2', _0: newModel, _1: _elm_lang$core$Platform_Cmd$none};
|
|
case 'Batch':
|
|
return A2(
|
|
_elm_lang$core$Platform_Cmd_ops['!'],
|
|
model,
|
|
A2(
|
|
_elm_lang$core$List$map,
|
|
function (_p32) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Util$cmd(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage(_p32));
|
|
},
|
|
_p20._0));
|
|
default:
|
|
return {ctor: '_Tuple2', _0: model, _1: _elm_lang$core$Platform_Cmd$none};
|
|
}
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$subscriptions = function (model) {
|
|
var render = model.qrNeedsRendering ? _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$animation_frame$AnimationFrame$diffs(
|
|
function (_p33) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage(_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$RenderQr);
|
|
})
|
|
]) : _elm_lang$core$Native_List.fromArray(
|
|
[]);
|
|
var browserNotifications = A2(
|
|
_elm_lang$core$Platform_Sub$map,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$BrowserNotificationsMessage,
|
|
_Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$subscriptions(model.browserNotifications));
|
|
var websocket = A2(
|
|
_elm_lang$websocket$WebSocket$listen,
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$webSocketUrl, model.init.url, model.lobby.gameCode),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$webSocketResponseDecoder);
|
|
var delegated = function () {
|
|
var _p34 = model.lobby.round;
|
|
if (_p34.ctor === 'Nothing') {
|
|
return A2(
|
|
_elm_lang$core$Platform_Sub$map,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$ConfigMessage,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Config$subscriptions(model.config));
|
|
} else {
|
|
return A2(
|
|
_elm_lang$core$Platform_Sub$map,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$PlayingMessage,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Playing$subscriptions(model.playing));
|
|
}
|
|
}();
|
|
return _elm_lang$core$Platform_Sub$batch(
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(_elm_lang$core$Platform_Sub$map, _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage, delegated),
|
|
websocket,
|
|
A2(_elm_lang$core$Platform_Sub$map, _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage, browserNotifications)
|
|
]),
|
|
render));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$init = F3(
|
|
function (init, lobbyAndHand, secret) {
|
|
return A2(
|
|
_elm_lang$core$Platform_Cmd_ops['!'],
|
|
{
|
|
lobby: lobbyAndHand.lobby,
|
|
hand: lobbyAndHand.hand,
|
|
config: _Lattyware$massivedecks$MassiveDecks_Scenes_Config$init,
|
|
playing: _Lattyware$massivedecks$MassiveDecks_Scenes_Playing$init(init),
|
|
browserNotifications: A2(_Lattyware$massivedecks$MassiveDecks_Components_BrowserNotifications$init, init.browserNotificationsSupported, false),
|
|
secret: secret,
|
|
init: init,
|
|
notification: _elm_lang$core$Maybe$Nothing,
|
|
qrNeedsRendering: false,
|
|
sidebar: _Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Sidebar$init(768)
|
|
},
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]));
|
|
});
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start$getLobbyAndHandErrorHandler = function (error) {
|
|
var errorMessage = function () {
|
|
var _p0 = error;
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$ClearExistingGame;
|
|
}();
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$Batch(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$SetButtonsEnabled(true),
|
|
errorMessage
|
|
]));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start$newPlayerErrorHandler = function (error) {
|
|
var errorMessage = function () {
|
|
var _p1 = error;
|
|
if (_p1.ctor === 'NameInUse') {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$InputMessage(
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$Name,
|
|
_1: _Lattyware$massivedecks$MassiveDecks_Components_Input$Error(
|
|
_elm_lang$core$Maybe$Just('This name is already in use in this game, try something else.'))
|
|
});
|
|
} else {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$InputMessage(
|
|
{
|
|
ctor: '_Tuple2',
|
|
_0: _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$GameCode,
|
|
_1: _Lattyware$massivedecks$MassiveDecks_Components_Input$Error(
|
|
_elm_lang$core$Maybe$Just('This game doesn\'t exist - check you have the right code.'))
|
|
});
|
|
}
|
|
}();
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$Batch(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$SetButtonsEnabled(true),
|
|
errorMessage
|
|
]));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start$update = F2(
|
|
function (message, model) {
|
|
var _p2 = message;
|
|
switch (_p2.ctor) {
|
|
case 'ErrorMessage':
|
|
var _p3 = A2(_Lattyware$massivedecks$MassiveDecks_Components_Errors$update, _p2._0, model.errors);
|
|
var newErrors = _p3._0;
|
|
var cmd = _p3._1;
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{errors: newErrors}),
|
|
_1: A2(_elm_lang$core$Platform_Cmd$map, _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$ErrorMessage, cmd)
|
|
};
|
|
case 'TabsMessage':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{
|
|
tabs: A2(_Lattyware$massivedecks$MassiveDecks_Components_Tabs$update, _p2._0, model.tabs)
|
|
}),
|
|
_1: _elm_lang$core$Platform_Cmd$none
|
|
};
|
|
case 'ShowInfoMessage':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{
|
|
info: _elm_lang$core$Maybe$Just(_p2._0)
|
|
}),
|
|
_1: _elm_lang$core$Platform_Cmd$none
|
|
};
|
|
case 'ClearExistingGame':
|
|
return A2(
|
|
_elm_lang$core$Platform_Cmd_ops['!'],
|
|
model,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_Lattyware$massivedecks$MassiveDecks_Util$cmd(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$ShowInfoMessage('The game you were in has ended.')),
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Storage$storeLeftGame
|
|
]));
|
|
case 'CreateLobby':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{buttonsEnabled: false}),
|
|
_1: A3(
|
|
_Lattyware$massivedecks$MassiveDecks_API_Request$send$,
|
|
_Lattyware$massivedecks$MassiveDecks_API$createLobby,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$ErrorMessage,
|
|
function (lobby) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$JoinGivenLobbyAsNewPlayer(lobby.gameCode);
|
|
})
|
|
};
|
|
case 'SubmitCurrentTab':
|
|
var _p4 = model.tabs.current;
|
|
if (_p4.ctor === 'Create') {
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: model,
|
|
_1: _Lattyware$massivedecks$MassiveDecks_Util$cmd(_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$CreateLobby)
|
|
};
|
|
} else {
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: model,
|
|
_1: _Lattyware$massivedecks$MassiveDecks_Util$cmd(_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$JoinLobbyAsNewPlayer)
|
|
};
|
|
}
|
|
case 'SetButtonsEnabled':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{buttonsEnabled: _p2._0}),
|
|
_1: _elm_lang$core$Platform_Cmd$none
|
|
};
|
|
case 'JoinLobbyAsNewPlayer':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{buttonsEnabled: false}),
|
|
_1: _Lattyware$massivedecks$MassiveDecks_Util$cmd(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$JoinGivenLobbyAsNewPlayer(model.gameCodeInput.value))
|
|
};
|
|
case 'JoinGivenLobbyAsNewPlayer':
|
|
var _p5 = _p2._0;
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: model,
|
|
_1: A4(
|
|
_Lattyware$massivedecks$MassiveDecks_API_Request$send,
|
|
A2(_Lattyware$massivedecks$MassiveDecks_API$newPlayer, _p5, model.nameInput.value),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start$newPlayerErrorHandler,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$ErrorMessage,
|
|
function (secret) {
|
|
return A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$JoinLobbyAsExistingPlayer, secret, _p5);
|
|
})
|
|
};
|
|
case 'JoinLobbyAsExistingPlayer':
|
|
var _p7 = _p2._0;
|
|
var _p6 = _p2._1;
|
|
return A2(
|
|
_elm_lang$core$Platform_Cmd_ops['!'],
|
|
model,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A4(
|
|
_Lattyware$massivedecks$MassiveDecks_API_Request$send,
|
|
A2(_Lattyware$massivedecks$MassiveDecks_API$getLobbyAndHand, _p6, _p7),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start$getLobbyAndHandErrorHandler,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$ErrorMessage,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$JoinLobby(_p7)),
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Storage$storeInGame(
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Models_Game$GameCodeAndSecret, _p6, _p7))
|
|
]));
|
|
case 'JoinLobby':
|
|
var _p8 = A3(_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$init, model.init, _p2._1, _p2._0);
|
|
var lobby = _p8._0;
|
|
var cmd = _p8._1;
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{
|
|
lobby: _elm_lang$core$Maybe$Just(lobby)
|
|
}),
|
|
_1: A2(_elm_lang$core$Platform_Cmd$map, _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$LobbyMessage, cmd)
|
|
};
|
|
case 'InputMessage':
|
|
var _p11 = _p2._0;
|
|
var _p9 = A2(_Lattyware$massivedecks$MassiveDecks_Components_Input$update, _p11, model.gameCodeInput);
|
|
var gameCodeInput = _p9._0;
|
|
var gameCodeCmd = _p9._1;
|
|
var _p10 = A2(_Lattyware$massivedecks$MassiveDecks_Components_Input$update, _p11, model.nameInput);
|
|
var nameInput = _p10._0;
|
|
var nameCmd = _p10._1;
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{nameInput: nameInput, gameCodeInput: gameCodeInput}),
|
|
_1: _elm_lang$core$Platform_Cmd$batch(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[nameCmd, gameCodeCmd]))
|
|
};
|
|
case 'OverlayMessage':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{
|
|
overlay: A2(_Lattyware$massivedecks$MassiveDecks_Components_Overlay$update, _p2._0, model.overlay)
|
|
}),
|
|
_1: _elm_lang$core$Platform_Cmd$none
|
|
};
|
|
case 'LobbyMessage':
|
|
var _p12 = _p2._0;
|
|
switch (_p12.ctor) {
|
|
case 'ErrorMessage':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: model,
|
|
_1: _Lattyware$massivedecks$MassiveDecks_Util$cmd(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$ErrorMessage(_p12._0))
|
|
};
|
|
case 'OverlayMessage':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: model,
|
|
_1: _Lattyware$massivedecks$MassiveDecks_Util$cmd(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$OverlayMessage(
|
|
A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Overlay$map,
|
|
function (_p13) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$LobbyMessage(
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby_Messages$LocalMessage(_p13));
|
|
},
|
|
_p12._0)))
|
|
};
|
|
case 'Leave':
|
|
var leave = function () {
|
|
var _p14 = model.lobby;
|
|
if (_p14.ctor === 'Nothing') {
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[]);
|
|
} else {
|
|
var _p16 = _p14._0;
|
|
return _elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A3(
|
|
_Lattyware$massivedecks$MassiveDecks_API_Request$send$,
|
|
A2(_Lattyware$massivedecks$MassiveDecks_API$leave, _p16.lobby.gameCode, _p16.secret),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$ErrorMessage,
|
|
function (_p15) {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$NoOp;
|
|
})
|
|
]);
|
|
}
|
|
}();
|
|
return A2(
|
|
_elm_lang$core$Platform_Cmd_ops['!'],
|
|
_elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{lobby: _elm_lang$core$Maybe$Nothing, buttonsEnabled: true}),
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[_Lattyware$massivedecks$MassiveDecks_Components_Storage$storeLeftGame]),
|
|
leave));
|
|
default:
|
|
var _p17 = model.lobby;
|
|
if (_p17.ctor === 'Nothing') {
|
|
return {ctor: '_Tuple2', _0: model, _1: _elm_lang$core$Platform_Cmd$none};
|
|
} else {
|
|
var _p18 = A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$update, _p12._0, _p17._0);
|
|
var newLobby = _p18._0;
|
|
var cmd = _p18._1;
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: _elm_lang$core$Native_Utils.update(
|
|
model,
|
|
{
|
|
lobby: _elm_lang$core$Maybe$Just(newLobby)
|
|
}),
|
|
_1: A2(_elm_lang$core$Platform_Cmd$map, _Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$LobbyMessage, cmd)
|
|
};
|
|
}
|
|
}
|
|
case 'Batch':
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: model,
|
|
_1: _elm_lang$core$Platform_Cmd$batch(
|
|
A2(_elm_lang$core$List$map, _Lattyware$massivedecks$MassiveDecks_Util$cmd, _p2._0))
|
|
};
|
|
default:
|
|
return {ctor: '_Tuple2', _0: model, _1: _elm_lang$core$Platform_Cmd$none};
|
|
}
|
|
});
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start$view = function (model) {
|
|
var contents = function () {
|
|
var _p19 = model.lobby;
|
|
if (_p19.ctor === 'Nothing') {
|
|
return _Lattyware$massivedecks$MassiveDecks_Scenes_Start_UI$view(model);
|
|
} else {
|
|
return A2(
|
|
_elm_lang$html$Html_App$map,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$LobbyMessage,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$view(_p19._0));
|
|
}
|
|
}();
|
|
return A2(
|
|
_elm_lang$html$Html$div,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[]),
|
|
A2(
|
|
_elm_lang$core$Basics_ops['++'],
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
contents,
|
|
A2(
|
|
_elm_lang$html$Html_App$map,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$ErrorMessage,
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Errors$view(model.errors))
|
|
]),
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Overlay$view(model.overlay)));
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start$subscriptions = function (model) {
|
|
var _p20 = model.lobby;
|
|
if (_p20.ctor === 'Nothing') {
|
|
return _elm_lang$core$Platform_Sub$none;
|
|
} else {
|
|
return A2(
|
|
_elm_lang$core$Platform_Sub$map,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$LobbyMessage,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Lobby$subscriptions(_p20._0));
|
|
}
|
|
};
|
|
var _Lattyware$massivedecks$MassiveDecks_Scenes_Start$init = function (init) {
|
|
var command = function () {
|
|
var _p21 = init.existingGame;
|
|
if (_p21.ctor === 'Just') {
|
|
var _p22 = _p21._0;
|
|
return _Lattyware$massivedecks$MassiveDecks_Util$cmd(
|
|
A2(_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$JoinLobbyAsExistingPlayer, _p22.secret, _p22.gameCode));
|
|
} else {
|
|
return _elm_lang$core$Platform_Cmd$none;
|
|
}
|
|
}();
|
|
return {
|
|
ctor: '_Tuple2',
|
|
_0: {
|
|
lobby: _elm_lang$core$Maybe$Nothing,
|
|
init: init,
|
|
nameInput: A7(
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Input$init,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$Name,
|
|
'name-input',
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Your name in the game.')
|
|
]),
|
|
'',
|
|
'Nickname',
|
|
_Lattyware$massivedecks$MassiveDecks_Util$cmd(_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$SubmitCurrentTab),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$InputMessage),
|
|
gameCodeInput: A7(
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Input$init,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$GameCode,
|
|
'game-code-input',
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('The code for the game to join.')
|
|
]),
|
|
A2(_elm_lang$core$Maybe$withDefault, '', init.gameCode),
|
|
'',
|
|
_Lattyware$massivedecks$MassiveDecks_Util$cmd(_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$JoinLobbyAsNewPlayer),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$InputMessage),
|
|
info: _elm_lang$core$Maybe$Nothing,
|
|
errors: _Lattyware$massivedecks$MassiveDecks_Components_Errors$init,
|
|
overlay: _Lattyware$massivedecks$MassiveDecks_Components_Overlay$init(_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$OverlayMessage),
|
|
buttonsEnabled: true,
|
|
tabs: A3(
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Tabs$init,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Tabs$Tab,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$Create,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Create')
|
|
])),
|
|
A2(
|
|
_Lattyware$massivedecks$MassiveDecks_Components_Tabs$Tab,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$Join,
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$html$Html$text('Join')
|
|
]))
|
|
]),
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$Create,
|
|
_Lattyware$massivedecks$MassiveDecks_Scenes_Start_Messages$TabsMessage)
|
|
},
|
|
_1: command
|
|
};
|
|
};
|
|
|
|
var _Lattyware$massivedecks$MassiveDecks$main = {
|
|
main: _elm_lang$html$Html_App$programWithFlags(
|
|
{init: _Lattyware$massivedecks$MassiveDecks_Scenes_Start$init, update: _Lattyware$massivedecks$MassiveDecks_Scenes_Start$update, subscriptions: _Lattyware$massivedecks$MassiveDecks_Scenes_Start$subscriptions, view: _Lattyware$massivedecks$MassiveDecks_Scenes_Start$view}),
|
|
flags: A2(
|
|
_elm_lang$core$Json_Decode$andThen,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'browserNotificationsSupported', _elm_lang$core$Json_Decode$bool),
|
|
function (browserNotificationsSupported) {
|
|
return A2(
|
|
_elm_lang$core$Json_Decode$andThen,
|
|
A2(
|
|
_elm_lang$core$Json_Decode_ops[':='],
|
|
'existingGame',
|
|
_elm_lang$core$Json_Decode$oneOf(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$core$Json_Decode$null(_elm_lang$core$Maybe$Nothing),
|
|
A2(
|
|
_elm_lang$core$Json_Decode$map,
|
|
_elm_lang$core$Maybe$Just,
|
|
A2(
|
|
_elm_lang$core$Json_Decode$andThen,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'gameCode', _elm_lang$core$Json_Decode$string),
|
|
function (gameCode) {
|
|
return A2(
|
|
_elm_lang$core$Json_Decode$andThen,
|
|
A2(
|
|
_elm_lang$core$Json_Decode_ops[':='],
|
|
'secret',
|
|
A2(
|
|
_elm_lang$core$Json_Decode$andThen,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'id', _elm_lang$core$Json_Decode$int),
|
|
function (id) {
|
|
return A2(
|
|
_elm_lang$core$Json_Decode$andThen,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'secret', _elm_lang$core$Json_Decode$string),
|
|
function (secret) {
|
|
return _elm_lang$core$Json_Decode$succeed(
|
|
{id: id, secret: secret});
|
|
});
|
|
})),
|
|
function (secret) {
|
|
return _elm_lang$core$Json_Decode$succeed(
|
|
{gameCode: gameCode, secret: secret});
|
|
});
|
|
}))
|
|
]))),
|
|
function (existingGame) {
|
|
return A2(
|
|
_elm_lang$core$Json_Decode$andThen,
|
|
A2(
|
|
_elm_lang$core$Json_Decode_ops[':='],
|
|
'gameCode',
|
|
_elm_lang$core$Json_Decode$oneOf(
|
|
_elm_lang$core$Native_List.fromArray(
|
|
[
|
|
_elm_lang$core$Json_Decode$null(_elm_lang$core$Maybe$Nothing),
|
|
A2(_elm_lang$core$Json_Decode$map, _elm_lang$core$Maybe$Just, _elm_lang$core$Json_Decode$string)
|
|
]))),
|
|
function (gameCode) {
|
|
return A2(
|
|
_elm_lang$core$Json_Decode$andThen,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'seed', _elm_lang$core$Json_Decode$string),
|
|
function (seed) {
|
|
return A2(
|
|
_elm_lang$core$Json_Decode$andThen,
|
|
A2(_elm_lang$core$Json_Decode_ops[':='], 'url', _elm_lang$core$Json_Decode$string),
|
|
function (url) {
|
|
return _elm_lang$core$Json_Decode$succeed(
|
|
{browserNotificationsSupported: browserNotificationsSupported, existingGame: existingGame, gameCode: gameCode, seed: seed, url: url});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
})
|
|
};
|
|
|
|
var Elm = {};
|
|
Elm['MassiveDecks'] = Elm['MassiveDecks'] || {};
|
|
_elm_lang$core$Native_Platform.addPublicModule(Elm['MassiveDecks'], 'MassiveDecks', typeof _Lattyware$massivedecks$MassiveDecks$main === 'undefined' ? null : _Lattyware$massivedecks$MassiveDecks$main);
|
|
|
|
if (typeof define === "function" && define['amd'])
|
|
{
|
|
define([], function() { return Elm; });
|
|
return;
|
|
}
|
|
|
|
if (typeof module === "object")
|
|
{
|
|
module['exports'] = Elm;
|
|
return;
|
|
}
|
|
|
|
var globalElm = this['Elm'];
|
|
if (typeof globalElm === "undefined")
|
|
{
|
|
this['Elm'] = Elm;
|
|
return;
|
|
}
|
|
|
|
for (var publicModule in Elm)
|
|
{
|
|
if (publicModule in globalElm)
|
|
{
|
|
throw new Error('There are two Elm modules called `' + publicModule + '` on this page! Rename one of them.');
|
|
}
|
|
globalElm[publicModule] = Elm[publicModule];
|
|
}
|
|
|
|
}).call(this);
|
|
|