2023-04-30 07:00:30 -06:00
( function ( scope ) {
'use strict' ;
function F ( arity , fun , wrapper ) {
wrapper . a = arity ;
wrapper . f = fun ;
return wrapper ;
}
function F2 ( fun ) {
return F ( 2 , fun , function ( a ) { return function ( b ) { return fun ( a , b ) ; } ; } )
}
function F3 ( fun ) {
return F ( 3 , fun , function ( a ) {
return function ( b ) { return function ( c ) { return fun ( a , b , c ) ; } ; } ;
} ) ;
}
function F4 ( fun ) {
return F ( 4 , fun , function ( a ) { return function ( b ) { return function ( c ) {
return function ( d ) { return fun ( a , b , c , d ) ; } ; } ; } ;
} ) ;
}
function F5 ( fun ) {
return F ( 5 , fun , function ( a ) { return function ( b ) { return function ( c ) {
return function ( d ) { return function ( e ) { return fun ( a , b , c , d , e ) ; } ; } ; } ; } ;
} ) ;
}
function F6 ( fun ) {
return F ( 6 , fun , function ( a ) { return function ( b ) { return function ( c ) {
return function ( d ) { return function ( e ) { return function ( f ) {
return fun ( a , b , c , d , e , f ) ; } ; } ; } ; } ; } ;
} ) ;
}
function F7 ( fun ) {
return F ( 7 , fun , function ( a ) { return function ( b ) { return function ( c ) {
return function ( d ) { return function ( e ) { return function ( f ) {
return function ( g ) { return fun ( a , b , c , d , e , f , g ) ; } ; } ; } ; } ; } ; } ;
} ) ;
}
function F8 ( fun ) {
return F ( 8 , fun , function ( a ) { return function ( b ) { return function ( c ) {
return function ( d ) { return function ( e ) { return function ( f ) {
return function ( g ) { return function ( h ) {
return fun ( a , b , c , d , e , f , g , h ) ; } ; } ; } ; } ; } ; } ; } ;
} ) ;
}
function F9 ( fun ) {
return F ( 9 , fun , function ( a ) { return function ( b ) { return function ( c ) {
return function ( d ) { return function ( e ) { return function ( f ) {
return function ( g ) { return function ( h ) { return function ( i ) {
return fun ( a , b , c , d , e , f , g , h , i ) ; } ; } ; } ; } ; } ; } ; } ; } ;
} ) ;
}
function A2 ( fun , a , b ) {
return fun . a === 2 ? fun . f ( a , b ) : fun ( a ) ( b ) ;
}
function A3 ( fun , a , b , c ) {
return fun . a === 3 ? fun . f ( a , b , c ) : fun ( a ) ( b ) ( c ) ;
}
function A4 ( fun , a , b , c , d ) {
return fun . a === 4 ? fun . f ( a , b , c , d ) : fun ( a ) ( b ) ( c ) ( d ) ;
}
function A5 ( fun , a , b , c , d , e ) {
return fun . a === 5 ? fun . f ( a , b , c , d , e ) : fun ( a ) ( b ) ( c ) ( d ) ( e ) ;
}
function A6 ( fun , a , b , c , d , e , f ) {
return fun . a === 6 ? fun . f ( a , b , c , d , e , f ) : fun ( a ) ( b ) ( c ) ( d ) ( e ) ( f ) ;
}
function A7 ( fun , a , b , c , d , e , f , g ) {
return fun . a === 7 ? fun . f ( a , b , c , d , e , f , g ) : fun ( a ) ( b ) ( c ) ( d ) ( e ) ( f ) ( g ) ;
}
function A8 ( fun , a , b , c , d , e , f , g , h ) {
return fun . a === 8 ? fun . f ( a , b , c , d , e , f , g , h ) : fun ( a ) ( b ) ( c ) ( d ) ( e ) ( f ) ( g ) ( h ) ;
}
function A9 ( fun , a , b , c , d , e , f , g , h , i ) {
return fun . a === 9 ? fun . f ( a , b , c , d , e , f , g , h , i ) : fun ( a ) ( b ) ( c ) ( d ) ( e ) ( f ) ( g ) ( h ) ( i ) ;
}
console . warn ( 'Compiled in DEV mode. Follow the advice at https://elm-lang.org/0.19.1/optimize for better performance and smaller assets.' ) ;
// EQUALITY
function _Utils _eq ( x , y )
{
for (
var pair , stack = [ ] , isEqual = _Utils _eqHelp ( x , y , 0 , stack ) ;
isEqual && ( pair = stack . pop ( ) ) ;
isEqual = _Utils _eqHelp ( pair . a , pair . b , 0 , stack )
)
{ }
return isEqual ;
}
function _Utils _eqHelp ( x , y , depth , stack )
{
if ( x === y )
{
return true ;
}
if ( typeof x !== 'object' || x === null || y === null )
{
typeof x === 'function' && _Debug _crash ( 5 ) ;
return false ;
}
if ( depth > 100 )
{
stack . push ( _Utils _Tuple2 ( x , y ) ) ;
return true ;
}
/**/
if ( x . $ === 'Set_elm_builtin' )
{
x = $elm$core$Set$toList ( x ) ;
y = $elm$core$Set$toList ( y ) ;
}
if ( x . $ === 'RBNode_elm_builtin' || x . $ === 'RBEmpty_elm_builtin' )
{
x = $elm$core$Dict$toList ( x ) ;
y = $elm$core$Dict$toList ( y ) ;
}
//*/
/**_UNUSED/
if ( x . $ < 0 )
{
x = $elm$core$Dict$toList ( x ) ;
y = $elm$core$Dict$toList ( y ) ;
}
//*/
for ( var key in x )
{
if ( ! _Utils _eqHelp ( x [ key ] , y [ key ] , depth + 1 , stack ) )
{
return false ;
}
}
return true ;
}
var _Utils _equal = F2 ( _Utils _eq ) ;
var _Utils _notEqual = F2 ( function ( a , b ) { return ! _Utils _eq ( a , b ) ; } ) ;
// COMPARISONS
// Code in Generate/JavaScript.hs, Basics.js, and List.js depends on
// the particular integer values assigned to LT, EQ, and GT.
function _Utils _cmp ( x , y , ord )
{
if ( typeof x !== 'object' )
{
return x === y ? /*EQ*/ 0 : x < y ? /*LT*/ - 1 : /*GT*/ 1 ;
}
/**/
if ( x instanceof String )
{
var a = x . valueOf ( ) ;
var b = y . valueOf ( ) ;
return a === b ? 0 : a < b ? - 1 : 1 ;
}
//*/
/**_UNUSED/
if ( typeof x . $ === 'undefined' )
//*/
/**/
if ( x . $ [ 0 ] === '#' )
//*/
{
return ( ord = _Utils _cmp ( x . a , y . a ) )
? ord
: ( ord = _Utils _cmp ( x . b , y . b ) )
? ord
: _Utils _cmp ( x . c , y . c ) ;
}
// traverse conses until end of a list or a mismatch
for ( ; x . b && y . b && ! ( ord = _Utils _cmp ( x . a , y . a ) ) ; x = x . b , y = y . b ) { } // WHILE_CONSES
return ord || ( x . b ? /*GT*/ 1 : y . b ? /*LT*/ - 1 : /*EQ*/ 0 ) ;
}
var _Utils _lt = F2 ( function ( a , b ) { return _Utils _cmp ( a , b ) < 0 ; } ) ;
var _Utils _le = F2 ( function ( a , b ) { return _Utils _cmp ( a , b ) < 1 ; } ) ;
var _Utils _gt = F2 ( function ( a , b ) { return _Utils _cmp ( a , b ) > 0 ; } ) ;
var _Utils _ge = F2 ( function ( a , b ) { return _Utils _cmp ( a , b ) >= 0 ; } ) ;
var _Utils _compare = F2 ( function ( x , y )
{
var n = _Utils _cmp ( x , y ) ;
return n < 0 ? $elm$core$Basics$LT : n ? $elm$core$Basics$GT : $elm$core$Basics$EQ ;
} ) ;
// COMMON VALUES
var _Utils _Tuple0 _UNUSED = 0 ;
var _Utils _Tuple0 = { $ : '#0' } ;
function _Utils _Tuple2 _UNUSED ( a , b ) { return { a : a , b : b } ; }
function _Utils _Tuple2 ( a , b ) { return { $ : '#2' , a : a , b : b } ; }
function _Utils _Tuple3 _UNUSED ( a , b , c ) { return { a : a , b : b , c : c } ; }
function _Utils _Tuple3 ( a , b , c ) { return { $ : '#3' , a : a , b : b , c : c } ; }
function _Utils _chr _UNUSED ( c ) { return c ; }
function _Utils _chr ( c ) { return new String ( c ) ; }
// RECORDS
function _Utils _update ( oldRecord , updatedFields )
{
var newRecord = { } ;
for ( var key in oldRecord )
{
newRecord [ key ] = oldRecord [ key ] ;
}
for ( var key in updatedFields )
{
newRecord [ key ] = updatedFields [ key ] ;
}
return newRecord ;
}
// APPEND
var _Utils _append = F2 ( _Utils _ap ) ;
function _Utils _ap ( xs , ys )
{
// append Strings
if ( typeof xs === 'string' )
{
return xs + ys ;
}
// append Lists
if ( ! xs . b )
{
return ys ;
}
var root = _List _Cons ( xs . a , ys ) ;
xs = xs . b
for ( var curr = root ; xs . b ; xs = xs . b ) // WHILE_CONS
{
curr = curr . b = _List _Cons ( xs . a , ys ) ;
}
return root ;
}
var _List _Nil _UNUSED = { $ : 0 } ;
var _List _Nil = { $ : '[]' } ;
function _List _Cons _UNUSED ( hd , tl ) { return { $ : 1 , a : hd , b : tl } ; }
function _List _Cons ( hd , tl ) { return { $ : '::' , a : hd , b : tl } ; }
var _List _cons = F2 ( _List _Cons ) ;
function _List _fromArray ( arr )
{
var out = _List _Nil ;
for ( var i = arr . length ; i -- ; )
{
out = _List _Cons ( arr [ i ] , out ) ;
}
return out ;
}
function _List _toArray ( xs )
{
for ( var out = [ ] ; xs . b ; xs = xs . b ) // WHILE_CONS
{
out . push ( xs . a ) ;
}
return out ;
}
var _List _map2 = F3 ( function ( f , xs , ys )
{
for ( var arr = [ ] ; xs . b && ys . b ; xs = xs . b , ys = ys . b ) // WHILE_CONSES
{
arr . push ( A2 ( f , xs . a , ys . a ) ) ;
}
return _List _fromArray ( arr ) ;
} ) ;
var _List _map3 = F4 ( function ( f , xs , ys , zs )
{
for ( var arr = [ ] ; xs . b && ys . b && zs . b ; xs = xs . b , ys = ys . b , zs = zs . b ) // WHILE_CONSES
{
arr . push ( A3 ( f , xs . a , ys . a , zs . a ) ) ;
}
return _List _fromArray ( arr ) ;
} ) ;
var _List _map4 = F5 ( function ( f , ws , xs , ys , zs )
{
for ( var arr = [ ] ; ws . b && xs . b && ys . b && zs . b ; ws = ws . b , xs = xs . b , ys = ys . b , zs = zs . b ) // WHILE_CONSES
{
arr . push ( A4 ( f , ws . a , xs . a , ys . a , zs . a ) ) ;
}
return _List _fromArray ( arr ) ;
} ) ;
var _List _map5 = F6 ( function ( f , vs , ws , xs , ys , zs )
{
for ( var arr = [ ] ; vs . b && ws . b && xs . b && ys . b && zs . b ; vs = vs . b , ws = ws . b , xs = xs . b , ys = ys . b , zs = zs . b ) // WHILE_CONSES
{
arr . push ( A5 ( f , vs . a , ws . a , xs . a , ys . a , zs . a ) ) ;
}
return _List _fromArray ( arr ) ;
} ) ;
var _List _sortBy = F2 ( function ( f , xs )
{
return _List _fromArray ( _List _toArray ( xs ) . sort ( function ( a , b ) {
return _Utils _cmp ( f ( a ) , f ( b ) ) ;
} ) ) ;
} ) ;
var _List _sortWith = F2 ( function ( f , xs )
{
return _List _fromArray ( _List _toArray ( xs ) . sort ( function ( a , b ) {
var ord = A2 ( f , a , b ) ;
return ord === $elm$core$Basics$EQ ? 0 : ord === $elm$core$Basics$LT ? - 1 : 1 ;
} ) ) ;
} ) ;
var _JsArray _empty = [ ] ;
function _JsArray _singleton ( value )
{
return [ value ] ;
}
function _JsArray _length ( array )
{
return array . length ;
}
var _JsArray _initialize = F3 ( function ( size , offset , func )
{
var result = new Array ( size ) ;
for ( var i = 0 ; i < size ; i ++ )
{
result [ i ] = func ( offset + i ) ;
2022-12-02 20:53:05 -07:00
}
2023-04-30 07:00:30 -06:00
return result ;
} ) ;
var _JsArray _initializeFromList = F2 ( function ( max , ls )
{
var result = new Array ( max ) ;
for ( var i = 0 ; i < max && ls . b ; i ++ )
{
result [ i ] = ls . a ;
ls = ls . b ;
}
result . length = i ;
return _Utils _Tuple2 ( result , ls ) ;
} ) ;
var _JsArray _unsafeGet = F2 ( function ( index , array )
{
return array [ index ] ;
} ) ;
var _JsArray _unsafeSet = F3 ( function ( index , value , array )
{
var length = array . length ;
var result = new Array ( length ) ;
for ( var i = 0 ; i < length ; i ++ )
{
result [ i ] = array [ i ] ;
}
result [ index ] = value ;
return result ;
} ) ;
var _JsArray _push = F2 ( function ( value , array )
{
var length = array . length ;
var result = new Array ( length + 1 ) ;
for ( var i = 0 ; i < length ; i ++ )
{
result [ i ] = array [ i ] ;
}
result [ length ] = value ;
return result ;
} ) ;
var _JsArray _foldl = F3 ( function ( func , acc , array )
{
var length = array . length ;
for ( var i = 0 ; i < length ; i ++ )
{
acc = A2 ( func , array [ i ] , acc ) ;
}
return acc ;
} ) ;
var _JsArray _foldr = F3 ( function ( func , acc , array )
{
for ( var i = array . length - 1 ; i >= 0 ; i -- )
{
acc = A2 ( func , array [ i ] , acc ) ;
}
return acc ;
} ) ;
var _JsArray _map = F2 ( function ( func , array )
{
var length = array . length ;
var result = new Array ( length ) ;
for ( var i = 0 ; i < length ; i ++ )
{
result [ i ] = func ( array [ i ] ) ;
}
return result ;
} ) ;
var _JsArray _indexedMap = F3 ( function ( func , offset , array )
{
var length = array . length ;
var result = new Array ( length ) ;
for ( var i = 0 ; i < length ; i ++ )
{
result [ i ] = A2 ( func , offset + i , array [ i ] ) ;
}
return result ;
} ) ;
var _JsArray _slice = F3 ( function ( from , to , array )
{
return array . slice ( from , to ) ;
} ) ;
var _JsArray _appendN = F3 ( function ( n , dest , source )
{
var destLen = dest . length ;
var itemsToCopy = n - destLen ;
if ( itemsToCopy > source . length )
{
itemsToCopy = source . length ;
}
var size = destLen + itemsToCopy ;
var result = new Array ( size ) ;
for ( var i = 0 ; i < destLen ; i ++ )
{
result [ i ] = dest [ i ] ;
}
for ( var i = 0 ; i < itemsToCopy ; i ++ )
{
result [ i + destLen ] = source [ i ] ;
}
return result ;
} ) ;
// LOG
var _Debug _log _UNUSED = F2 ( function ( tag , value )
{
return value ;
} ) ;
var _Debug _log = F2 ( function ( tag , value )
{
console . log ( tag + ': ' + _Debug _toString ( value ) ) ;
return value ;
} ) ;
// TODOS
function _Debug _todo ( moduleName , region )
{
return function ( message ) {
_Debug _crash ( 8 , moduleName , region , message ) ;
} ;
}
function _Debug _todoCase ( moduleName , region , value )
{
return function ( message ) {
_Debug _crash ( 9 , moduleName , region , value , message ) ;
} ;
}
// TO STRING
function _Debug _toString _UNUSED ( value )
{
return '<internals>' ;
}
function _Debug _toString ( value )
{
return _Debug _toAnsiString ( false , value ) ;
}
function _Debug _toAnsiString ( ansi , value )
{
if ( typeof value === 'function' )
{
return _Debug _internalColor ( ansi , '<function>' ) ;
}
if ( typeof value === 'boolean' )
{
return _Debug _ctorColor ( ansi , value ? 'True' : 'False' ) ;
}
if ( typeof value === 'number' )
{
return _Debug _numberColor ( ansi , value + '' ) ;
}
if ( value instanceof String )
{
return _Debug _charColor ( ansi , "'" + _Debug _addSlashes ( value , true ) + "'" ) ;
}
if ( typeof value === 'string' )
{
return _Debug _stringColor ( ansi , '"' + _Debug _addSlashes ( value , false ) + '"' ) ;
}
if ( typeof value === 'object' && '$' in value )
{
var tag = value . $ ;
if ( typeof tag === 'number' )
{
return _Debug _internalColor ( ansi , '<internals>' ) ;
}
if ( tag [ 0 ] === '#' )
{
var output = [ ] ;
for ( var k in value )
{
if ( k === '$' ) continue ;
output . push ( _Debug _toAnsiString ( ansi , value [ k ] ) ) ;
}
return '(' + output . join ( ',' ) + ')' ;
}
if ( tag === 'Set_elm_builtin' )
{
return _Debug _ctorColor ( ansi , 'Set' )
+ _Debug _fadeColor ( ansi , '.fromList' ) + ' '
+ _Debug _toAnsiString ( ansi , $elm$core$Set$toList ( value ) ) ;
}
if ( tag === 'RBNode_elm_builtin' || tag === 'RBEmpty_elm_builtin' )
{
return _Debug _ctorColor ( ansi , 'Dict' )
+ _Debug _fadeColor ( ansi , '.fromList' ) + ' '
+ _Debug _toAnsiString ( ansi , $elm$core$Dict$toList ( value ) ) ;
}
if ( tag === 'Array_elm_builtin' )
{
return _Debug _ctorColor ( ansi , 'Array' )
+ _Debug _fadeColor ( ansi , '.fromList' ) + ' '
+ _Debug _toAnsiString ( ansi , $elm$core$Array$toList ( value ) ) ;
}
if ( tag === '::' || tag === '[]' )
{
var output = '[' ;
value . b && ( output += _Debug _toAnsiString ( ansi , value . a ) , value = value . b )
for ( ; value . b ; value = value . b ) // WHILE_CONS
{
output += ',' + _Debug _toAnsiString ( ansi , value . a ) ;
}
return output + ']' ;
}
var output = '' ;
for ( var i in value )
{
if ( i === '$' ) continue ;
var str = _Debug _toAnsiString ( ansi , value [ i ] ) ;
var c0 = str [ 0 ] ;
var parenless = c0 === '{' || c0 === '(' || c0 === '[' || c0 === '<' || c0 === '"' || str . indexOf ( ' ' ) < 0 ;
output += ' ' + ( parenless ? str : '(' + str + ')' ) ;
}
return _Debug _ctorColor ( ansi , tag ) + output ;
}
if ( typeof DataView === 'function' && value instanceof DataView )
{
return _Debug _stringColor ( ansi , '<' + value . byteLength + ' bytes>' ) ;
}
if ( typeof File !== 'undefined' && value instanceof File )
{
return _Debug _internalColor ( ansi , '<' + value . name + '>' ) ;
}
if ( typeof value === 'object' )
{
var output = [ ] ;
for ( var key in value )
{
var field = key [ 0 ] === '_' ? key . slice ( 1 ) : key ;
output . push ( _Debug _fadeColor ( ansi , field ) + ' = ' + _Debug _toAnsiString ( ansi , value [ key ] ) ) ;
}
if ( output . length === 0 )
{
return '{}' ;
}
return '{ ' + output . join ( ', ' ) + ' }' ;
}
return _Debug _internalColor ( ansi , '<internals>' ) ;
}
function _Debug _addSlashes ( str , isChar )
{
var s = str
. replace ( /\\/g , '\\\\' )
. replace ( /\n/g , '\\n' )
. replace ( /\t/g , '\\t' )
. replace ( /\r/g , '\\r' )
. replace ( /\v/g , '\\v' )
. replace ( /\0/g , '\\0' ) ;
if ( isChar )
{
return s . replace ( /\'/g , '\\\'' ) ;
}
else
{
return s . replace ( /\"/g , '\\"' ) ;
}
}
function _Debug _ctorColor ( ansi , string )
{
return ansi ? '\x1b[96m' + string + '\x1b[0m' : string ;
}
function _Debug _numberColor ( ansi , string )
{
return ansi ? '\x1b[95m' + string + '\x1b[0m' : string ;
}
function _Debug _stringColor ( ansi , string )
{
return ansi ? '\x1b[93m' + string + '\x1b[0m' : string ;
}
function _Debug _charColor ( ansi , string )
{
return ansi ? '\x1b[92m' + string + '\x1b[0m' : string ;
}
function _Debug _fadeColor ( ansi , string )
{
return ansi ? '\x1b[37m' + string + '\x1b[0m' : string ;
}
function _Debug _internalColor ( ansi , string )
{
return ansi ? '\x1b[36m' + string + '\x1b[0m' : string ;
}
function _Debug _toHexDigit ( n )
{
return String . fromCharCode ( n < 10 ? 48 + n : 55 + n ) ;
}
// CRASH
function _Debug _crash _UNUSED ( identifier )
{
throw new Error ( 'https://github.com/elm/core/blob/1.0.0/hints/' + identifier + '.md' ) ;
}
function _Debug _crash ( identifier , fact1 , fact2 , fact3 , fact4 )
{
switch ( identifier )
{
case 0 :
throw new Error ( 'What node should I take over? In JavaScript I need something like:\n\n Elm.Main.init({\n node: document.getElementById("elm-node")\n })\n\nYou need to do this with any Browser.sandbox or Browser.element program.' ) ;
case 1 :
throw new Error ( 'Browser.application programs cannot handle URLs like this:\n\n ' + document . location . href + '\n\nWhat is the root? The root of your file system? Try looking at this program with `elm reactor` or some other server.' ) ;
case 2 :
var jsonErrorString = fact1 ;
throw new Error ( 'Problem with the flags given to your Elm program on initialization.\n\n' + jsonErrorString ) ;
case 3 :
var portName = fact1 ;
throw new Error ( 'There can only be one port named `' + portName + '`, but your program has multiple.' ) ;
case 4 :
var portName = fact1 ;
var problem = fact2 ;
throw new Error ( 'Trying to send an unexpected type of value through port `' + portName + '`:\n' + problem ) ;
case 5 :
throw new Error ( 'Trying to use `(==)` on functions.\nThere is no way to know if functions are "the same" in the Elm sense.\nRead more about this at https://package.elm-lang.org/packages/elm/core/latest/Basics#== which describes why it is this way and what the better version will look like.' ) ;
case 6 :
var moduleName = fact1 ;
throw new Error ( 'Your page is loading multiple Elm scripts with a module named ' + moduleName + '. Maybe a duplicate script is getting loaded accidentally? If not, rename one of them so I know which is which!' ) ;
case 8 :
var moduleName = fact1 ;
var region = fact2 ;
var message = fact3 ;
throw new Error ( 'TODO in module `' + moduleName + '` ' + _Debug _regionToString ( region ) + '\n\n' + message ) ;
case 9 :
var moduleName = fact1 ;
var region = fact2 ;
var value = fact3 ;
var message = fact4 ;
throw new Error (
'TODO in module `' + moduleName + '` from the `case` expression '
+ _Debug _regionToString ( region ) + '\n\nIt received the following value:\n\n '
+ _Debug _toString ( value ) . replace ( '\n' , '\n ' )
+ '\n\nBut the branch that handles it says:\n\n ' + message . replace ( '\n' , '\n ' )
) ;
case 10 :
throw new Error ( 'Bug in https://github.com/elm/virtual-dom/issues' ) ;
case 11 :
throw new Error ( 'Cannot perform mod 0. Division by zero error.' ) ;
}
}
function _Debug _regionToString ( region )
{
if ( region . start . line === region . end . line )
{
return 'on line ' + region . start . line ;
}
return 'on lines ' + region . start . line + ' through ' + region . end . line ;
}
// MATH
var _Basics _add = F2 ( function ( a , b ) { return a + b ; } ) ;
var _Basics _sub = F2 ( function ( a , b ) { return a - b ; } ) ;
var _Basics _mul = F2 ( function ( a , b ) { return a * b ; } ) ;
var _Basics _fdiv = F2 ( function ( a , b ) { return a / b ; } ) ;
var _Basics _idiv = F2 ( function ( a , b ) { return ( a / b ) | 0 ; } ) ;
var _Basics _pow = F2 ( Math . pow ) ;
var _Basics _remainderBy = F2 ( function ( b , a ) { return a % b ; } ) ;
// https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/divmodnote-letter.pdf
var _Basics _modBy = F2 ( function ( modulus , x )
{
var answer = x % modulus ;
return modulus === 0
? _Debug _crash ( 11 )
:
( ( answer > 0 && modulus < 0 ) || ( answer < 0 && modulus > 0 ) )
? answer + modulus
: answer ;
} ) ;
// TRIGONOMETRY
var _Basics _pi = Math . PI ;
var _Basics _e = Math . E ;
var _Basics _cos = Math . cos ;
var _Basics _sin = Math . sin ;
var _Basics _tan = Math . tan ;
var _Basics _acos = Math . acos ;
var _Basics _asin = Math . asin ;
var _Basics _atan = Math . atan ;
var _Basics _atan2 = F2 ( Math . atan2 ) ;
// MORE MATH
function _Basics _toFloat ( x ) { return x ; }
function _Basics _truncate ( n ) { return n | 0 ; }
function _Basics _isInfinite ( n ) { return n === Infinity || n === - Infinity ; }
var _Basics _ceiling = Math . ceil ;
var _Basics _floor = Math . floor ;
var _Basics _round = Math . round ;
var _Basics _sqrt = Math . sqrt ;
var _Basics _log = Math . log ;
var _Basics _isNaN = isNaN ;
// BOOLEANS
function _Basics _not ( bool ) { return ! bool ; }
var _Basics _and = F2 ( function ( a , b ) { return a && b ; } ) ;
var _Basics _or = F2 ( function ( a , b ) { return a || b ; } ) ;
var _Basics _xor = F2 ( function ( a , b ) { return a !== b ; } ) ;
var _String _cons = F2 ( function ( chr , str )
{
return chr + str ;
} ) ;
function _String _uncons ( string )
{
var word = string . charCodeAt ( 0 ) ;
return ! isNaN ( word )
? $elm$core$Maybe$Just (
0xD800 <= word && word <= 0xDBFF
? _Utils _Tuple2 ( _Utils _chr ( string [ 0 ] + string [ 1 ] ) , string . slice ( 2 ) )
: _Utils _Tuple2 ( _Utils _chr ( string [ 0 ] ) , string . slice ( 1 ) )
)
: $elm$core$Maybe$Nothing ;
}
var _String _append = F2 ( function ( a , b )
{
return a + b ;
} ) ;
function _String _length ( str )
{
return str . length ;
}
var _String _map = F2 ( function ( func , string )
{
var len = string . length ;
var array = new Array ( len ) ;
var i = 0 ;
while ( i < len )
{
var word = string . charCodeAt ( i ) ;
if ( 0xD800 <= word && word <= 0xDBFF )
{
array [ i ] = func ( _Utils _chr ( string [ i ] + string [ i + 1 ] ) ) ;
i += 2 ;
continue ;
}
array [ i ] = func ( _Utils _chr ( string [ i ] ) ) ;
i ++ ;
}
return array . join ( '' ) ;
} ) ;
var _String _filter = F2 ( function ( isGood , str )
{
var arr = [ ] ;
var len = str . length ;
var i = 0 ;
while ( i < len )
{
var char = str [ i ] ;
var word = str . charCodeAt ( i ) ;
i ++ ;
if ( 0xD800 <= word && word <= 0xDBFF )
{
char += str [ i ] ;
i ++ ;
}
if ( isGood ( _Utils _chr ( char ) ) )
{
arr . push ( char ) ;
}
}
return arr . join ( '' ) ;
} ) ;
function _String _reverse ( str )
{
var len = str . length ;
var arr = new Array ( len ) ;
var i = 0 ;
while ( i < len )
{
var word = str . charCodeAt ( i ) ;
if ( 0xD800 <= word && word <= 0xDBFF )
{
arr [ len - i ] = str [ i + 1 ] ;
i ++ ;
arr [ len - i ] = str [ i - 1 ] ;
i ++ ;
}
else
{
arr [ len - i ] = str [ i ] ;
i ++ ;
}
}
return arr . join ( '' ) ;
}
var _String _foldl = F3 ( function ( func , state , string )
{
var len = string . length ;
var i = 0 ;
while ( i < len )
{
var char = string [ i ] ;
var word = string . charCodeAt ( i ) ;
i ++ ;
if ( 0xD800 <= word && word <= 0xDBFF )
{
char += string [ i ] ;
i ++ ;
}
state = A2 ( func , _Utils _chr ( char ) , state ) ;
}
return state ;
} ) ;
var _String _foldr = F3 ( function ( func , state , string )
{
var i = string . length ;
while ( i -- )
{
var char = string [ i ] ;
var word = string . charCodeAt ( i ) ;
if ( 0xDC00 <= word && word <= 0xDFFF )
{
i -- ;
char = string [ i ] + char ;
}
state = A2 ( func , _Utils _chr ( char ) , state ) ;
}
return state ;
} ) ;
var _String _split = F2 ( function ( sep , str )
{
return str . split ( sep ) ;
} ) ;
var _String _join = F2 ( function ( sep , strs )
{
return strs . join ( sep ) ;
} ) ;
var _String _slice = F3 ( function ( start , end , str ) {
return str . slice ( start , end ) ;
} ) ;
function _String _trim ( str )
{
return str . trim ( ) ;
}
function _String _trimLeft ( str )
{
return str . replace ( /^\s+/ , '' ) ;
}
function _String _trimRight ( str )
{
return str . replace ( /\s+$/ , '' ) ;
}
function _String _words ( str )
{
return _List _fromArray ( str . trim ( ) . split ( /\s+/g ) ) ;
}
function _String _lines ( str )
{
return _List _fromArray ( str . split ( /\r\n|\r|\n/g ) ) ;
}
function _String _toUpper ( str )
{
return str . toUpperCase ( ) ;
}
function _String _toLower ( str )
{
return str . toLowerCase ( ) ;
}
var _String _any = F2 ( function ( isGood , string )
{
var i = string . length ;
while ( i -- )
{
var char = string [ i ] ;
var word = string . charCodeAt ( i ) ;
if ( 0xDC00 <= word && word <= 0xDFFF )
{
i -- ;
char = string [ i ] + char ;
}
if ( isGood ( _Utils _chr ( char ) ) )
{
return true ;
}
}
return false ;
} ) ;
var _String _all = F2 ( function ( isGood , string )
{
var i = string . length ;
while ( i -- )
{
var char = string [ i ] ;
var word = string . charCodeAt ( i ) ;
if ( 0xDC00 <= word && word <= 0xDFFF )
{
i -- ;
char = string [ i ] + char ;
}
if ( ! isGood ( _Utils _chr ( char ) ) )
{
return false ;
}
}
return true ;
} ) ;
var _String _contains = F2 ( function ( sub , str )
{
return str . indexOf ( sub ) > - 1 ;
} ) ;
var _String _startsWith = F2 ( function ( sub , str )
{
return str . indexOf ( sub ) === 0 ;
} ) ;
var _String _endsWith = F2 ( function ( sub , str )
{
return str . length >= sub . length &&
str . lastIndexOf ( sub ) === str . length - sub . length ;
} ) ;
var _String _indexes = F2 ( function ( sub , str )
{
var subLen = sub . length ;
if ( subLen < 1 )
{
return _List _Nil ;
}
var i = 0 ;
var is = [ ] ;
while ( ( i = str . indexOf ( sub , i ) ) > - 1 )
{
is . push ( i ) ;
i = i + subLen ;
}
return _List _fromArray ( is ) ;
} ) ;
// TO STRING
function _String _fromNumber ( number )
{
return number + '' ;
}
// INT CONVERSIONS
function _String _toInt ( str )
{
var total = 0 ;
var code0 = str . charCodeAt ( 0 ) ;
var start = code0 == 0x2B /* + */ || code0 == 0x2D /* - */ ? 1 : 0 ;
for ( var i = start ; i < str . length ; ++ i )
{
var code = str . charCodeAt ( i ) ;
if ( code < 0x30 || 0x39 < code )
{
return $elm$core$Maybe$Nothing ;
}
total = 10 * total + code - 0x30 ;
}
return i == start
? $elm$core$Maybe$Nothing
: $elm$core$Maybe$Just ( code0 == 0x2D ? - total : total ) ;
}
// FLOAT CONVERSIONS
function _String _toFloat ( s )
{
// check if it is a hex, octal, or binary number
if ( s . length === 0 || /[\sxbo]/ . test ( s ) )
{
return $elm$core$Maybe$Nothing ;
}
var n = + s ;
// faster isNaN check
return n === n ? $elm$core$Maybe$Just ( n ) : $elm$core$Maybe$Nothing ;
}
function _String _fromList ( chars )
{
return _List _toArray ( chars ) . join ( '' ) ;
}
function _Char _toCode ( char )
{
var code = char . charCodeAt ( 0 ) ;
if ( 0xD800 <= code && code <= 0xDBFF )
{
return ( code - 0xD800 ) * 0x400 + char . charCodeAt ( 1 ) - 0xDC00 + 0x10000
}
return code ;
}
function _Char _fromCode ( code )
{
return _Utils _chr (
( code < 0 || 0x10FFFF < code )
? '\uFFFD'
:
( code <= 0xFFFF )
? String . fromCharCode ( code )
:
( code -= 0x10000 ,
String . fromCharCode ( Math . floor ( code / 0x400 ) + 0xD800 , code % 0x400 + 0xDC00 )
)
) ;
}
function _Char _toUpper ( char )
{
return _Utils _chr ( char . toUpperCase ( ) ) ;
}
function _Char _toLower ( char )
{
return _Utils _chr ( char . toLowerCase ( ) ) ;
}
function _Char _toLocaleUpper ( char )
{
return _Utils _chr ( char . toLocaleUpperCase ( ) ) ;
}
function _Char _toLocaleLower ( char )
{
return _Utils _chr ( char . toLocaleLowerCase ( ) ) ;
}
/**/
function _Json _errorToString ( error )
{
return $elm$json$Json$Decode$errorToString ( error ) ;
}
//*/
// CORE DECODERS
function _Json _succeed ( msg )
{
return {
$ : 0 ,
a : msg
} ;
}
function _Json _fail ( msg )
{
return {
$ : 1 ,
a : msg
} ;
}
function _Json _decodePrim ( decoder )
{
return { $ : 2 , b : decoder } ;
}
var _Json _decodeInt = _Json _decodePrim ( function ( value ) {
return ( typeof value !== 'number' )
? _Json _expecting ( 'an INT' , value )
:
( - 2147483647 < value && value < 2147483647 && ( value | 0 ) === value )
? $elm$core$Result$Ok ( value )
:
( isFinite ( value ) && ! ( value % 1 ) )
? $elm$core$Result$Ok ( value )
: _Json _expecting ( 'an INT' , value ) ;
} ) ;
var _Json _decodeBool = _Json _decodePrim ( function ( value ) {
return ( typeof value === 'boolean' )
? $elm$core$Result$Ok ( value )
: _Json _expecting ( 'a BOOL' , value ) ;
} ) ;
var _Json _decodeFloat = _Json _decodePrim ( function ( value ) {
return ( typeof value === 'number' )
? $elm$core$Result$Ok ( value )
: _Json _expecting ( 'a FLOAT' , value ) ;
} ) ;
var _Json _decodeValue = _Json _decodePrim ( function ( value ) {
return $elm$core$Result$Ok ( _Json _wrap ( value ) ) ;
} ) ;
var _Json _decodeString = _Json _decodePrim ( function ( value ) {
return ( typeof value === 'string' )
? $elm$core$Result$Ok ( value )
: ( value instanceof String )
? $elm$core$Result$Ok ( value + '' )
: _Json _expecting ( 'a STRING' , value ) ;
} ) ;
function _Json _decodeList ( decoder ) { return { $ : 3 , b : decoder } ; }
function _Json _decodeArray ( decoder ) { return { $ : 4 , b : decoder } ; }
function _Json _decodeNull ( value ) { return { $ : 5 , c : value } ; }
var _Json _decodeField = F2 ( function ( field , decoder )
{
return {
$ : 6 ,
d : field ,
b : decoder
} ;
} ) ;
var _Json _decodeIndex = F2 ( function ( index , decoder )
{
return {
$ : 7 ,
e : index ,
b : decoder
} ;
} ) ;
function _Json _decodeKeyValuePairs ( decoder )
{
return {
$ : 8 ,
b : decoder
} ;
}
function _Json _mapMany ( f , decoders )
{
return {
$ : 9 ,
f : f ,
g : decoders
} ;
}
var _Json _andThen = F2 ( function ( callback , decoder )
{
return {
$ : 10 ,
b : decoder ,
h : callback
} ;
} ) ;
function _Json _oneOf ( decoders )
{
return {
$ : 11 ,
g : decoders
} ;
}
// DECODING OBJECTS
var _Json _map1 = F2 ( function ( f , d1 )
{
return _Json _mapMany ( f , [ d1 ] ) ;
} ) ;
var _Json _map2 = F3 ( function ( f , d1 , d2 )
{
return _Json _mapMany ( f , [ d1 , d2 ] ) ;
} ) ;
var _Json _map3 = F4 ( function ( f , d1 , d2 , d3 )
{
return _Json _mapMany ( f , [ d1 , d2 , d3 ] ) ;
} ) ;
var _Json _map4 = F5 ( function ( f , d1 , d2 , d3 , d4 )
{
return _Json _mapMany ( f , [ d1 , d2 , d3 , d4 ] ) ;
} ) ;
var _Json _map5 = F6 ( function ( f , d1 , d2 , d3 , d4 , d5 )
{
return _Json _mapMany ( f , [ d1 , d2 , d3 , d4 , d5 ] ) ;
} ) ;
var _Json _map6 = F7 ( function ( f , d1 , d2 , d3 , d4 , d5 , d6 )
{
return _Json _mapMany ( f , [ d1 , d2 , d3 , d4 , d5 , d6 ] ) ;
} ) ;
var _Json _map7 = F8 ( function ( f , d1 , d2 , d3 , d4 , d5 , d6 , d7 )
{
return _Json _mapMany ( f , [ d1 , d2 , d3 , d4 , d5 , d6 , d7 ] ) ;
} ) ;
var _Json _map8 = F9 ( function ( f , d1 , d2 , d3 , d4 , d5 , d6 , d7 , d8 )
{
return _Json _mapMany ( f , [ d1 , d2 , d3 , d4 , d5 , d6 , d7 , d8 ] ) ;
} ) ;
// DECODE
var _Json _runOnString = F2 ( function ( decoder , string )
{
try
{
var value = JSON . parse ( string ) ;
return _Json _runHelp ( decoder , value ) ;
}
catch ( e )
{
return $elm$core$Result$Err ( A2 ( $elm$json$Json$Decode$Failure , 'This is not valid JSON! ' + e . message , _Json _wrap ( string ) ) ) ;
}
} ) ;
var _Json _run = F2 ( function ( decoder , value )
{
return _Json _runHelp ( decoder , _Json _unwrap ( value ) ) ;
} ) ;
function _Json _runHelp ( decoder , value )
{
switch ( decoder . $ )
{
case 2 :
return decoder . b ( value ) ;
case 5 :
return ( value === null )
? $elm$core$Result$Ok ( decoder . c )
: _Json _expecting ( 'null' , value ) ;
case 3 :
if ( ! _Json _isArray ( value ) )
{
return _Json _expecting ( 'a LIST' , value ) ;
}
return _Json _runArrayDecoder ( decoder . b , value , _List _fromArray ) ;
case 4 :
if ( ! _Json _isArray ( value ) )
{
return _Json _expecting ( 'an ARRAY' , value ) ;
}
return _Json _runArrayDecoder ( decoder . b , value , _Json _toElmArray ) ;
case 6 :
var field = decoder . d ;
if ( typeof value !== 'object' || value === null || ! ( field in value ) )
{
return _Json _expecting ( 'an OBJECT with a field named `' + field + '`' , value ) ;
}
var result = _Json _runHelp ( decoder . b , value [ field ] ) ;
return ( $elm$core$Result$isOk ( result ) ) ? result : $elm$core$Result$Err ( A2 ( $elm$json$Json$Decode$Field , field , result . a ) ) ;
case 7 :
var index = decoder . e ;
if ( ! _Json _isArray ( value ) )
{
return _Json _expecting ( 'an ARRAY' , value ) ;
}
if ( index >= value . length )
{
return _Json _expecting ( 'a LONGER array. Need index ' + index + ' but only see ' + value . length + ' entries' , value ) ;
}
var result = _Json _runHelp ( decoder . b , value [ index ] ) ;
return ( $elm$core$Result$isOk ( result ) ) ? result : $elm$core$Result$Err ( A2 ( $elm$json$Json$Decode$Index , index , result . a ) ) ;
case 8 :
if ( typeof value !== 'object' || value === null || _Json _isArray ( value ) )
{
return _Json _expecting ( 'an OBJECT' , value ) ;
}
var keyValuePairs = _List _Nil ;
// TODO test perf of Object.keys and switch when support is good enough
for ( var key in value )
{
if ( value . hasOwnProperty ( key ) )
{
var result = _Json _runHelp ( decoder . b , value [ key ] ) ;
if ( ! $elm$core$Result$isOk ( result ) )
{
return $elm$core$Result$Err ( A2 ( $elm$json$Json$Decode$Field , key , result . a ) ) ;
}
keyValuePairs = _List _Cons ( _Utils _Tuple2 ( key , result . a ) , keyValuePairs ) ;
}
}
return $elm$core$Result$Ok ( $elm$core$List$reverse ( keyValuePairs ) ) ;
case 9 :
var answer = decoder . f ;
var decoders = decoder . g ;
for ( var i = 0 ; i < decoders . length ; i ++ )
{
var result = _Json _runHelp ( decoders [ i ] , value ) ;
if ( ! $elm$core$Result$isOk ( result ) )
{
return result ;
}
answer = answer ( result . a ) ;
}
return $elm$core$Result$Ok ( answer ) ;
case 10 :
var result = _Json _runHelp ( decoder . b , value ) ;
return ( ! $elm$core$Result$isOk ( result ) )
? result
: _Json _runHelp ( decoder . h ( result . a ) , value ) ;
case 11 :
var errors = _List _Nil ;
for ( var temp = decoder . g ; temp . b ; temp = temp . b ) // WHILE_CONS
{
var result = _Json _runHelp ( temp . a , value ) ;
if ( $elm$core$Result$isOk ( result ) )
{
return result ;
}
errors = _List _Cons ( result . a , errors ) ;
}
return $elm$core$Result$Err ( $elm$json$Json$Decode$OneOf ( $elm$core$List$reverse ( errors ) ) ) ;
case 1 :
return $elm$core$Result$Err ( A2 ( $elm$json$Json$Decode$Failure , decoder . a , _Json _wrap ( value ) ) ) ;
case 0 :
return $elm$core$Result$Ok ( decoder . a ) ;
}
}
function _Json _runArrayDecoder ( decoder , value , toElmValue )
{
var len = value . length ;
var array = new Array ( len ) ;
for ( var i = 0 ; i < len ; i ++ )
{
var result = _Json _runHelp ( decoder , value [ i ] ) ;
if ( ! $elm$core$Result$isOk ( result ) )
{
return $elm$core$Result$Err ( A2 ( $elm$json$Json$Decode$Index , i , result . a ) ) ;
}
array [ i ] = result . a ;
}
return $elm$core$Result$Ok ( toElmValue ( array ) ) ;
}
function _Json _isArray ( value )
{
return Array . isArray ( value ) || ( typeof FileList !== 'undefined' && value instanceof FileList ) ;
}
function _Json _toElmArray ( array )
{
return A2 ( $elm$core$Array$initialize , array . length , function ( i ) { return array [ i ] ; } ) ;
}
function _Json _expecting ( type , value )
{
return $elm$core$Result$Err ( A2 ( $elm$json$Json$Decode$Failure , 'Expecting ' + type , _Json _wrap ( value ) ) ) ;
}
// EQUALITY
function _Json _equality ( x , y )
{
if ( x === y )
{
return true ;
}
if ( x . $ !== y . $ )
{
return false ;
}
switch ( x . $ )
{
case 0 :
case 1 :
return x . a === y . a ;
case 2 :
return x . b === y . b ;
case 5 :
return x . c === y . c ;
case 3 :
case 4 :
case 8 :
return _Json _equality ( x . b , y . b ) ;
case 6 :
return x . d === y . d && _Json _equality ( x . b , y . b ) ;
case 7 :
return x . e === y . e && _Json _equality ( x . b , y . b ) ;
case 9 :
return x . f === y . f && _Json _listEquality ( x . g , y . g ) ;
case 10 :
return x . h === y . h && _Json _equality ( x . b , y . b ) ;
case 11 :
return _Json _listEquality ( x . g , y . g ) ;
}
}
function _Json _listEquality ( aDecoders , bDecoders )
{
var len = aDecoders . length ;
if ( len !== bDecoders . length )
{
return false ;
}
for ( var i = 0 ; i < len ; i ++ )
{
if ( ! _Json _equality ( aDecoders [ i ] , bDecoders [ i ] ) )
{
return false ;
}
}
return true ;
}
// ENCODE
var _Json _encode = F2 ( function ( indentLevel , value )
{
return JSON . stringify ( _Json _unwrap ( value ) , null , indentLevel ) + '' ;
} ) ;
function _Json _wrap ( value ) { return { $ : 0 , a : value } ; }
function _Json _unwrap ( value ) { return value . a ; }
function _Json _wrap _UNUSED ( value ) { return value ; }
function _Json _unwrap _UNUSED ( value ) { return value ; }
function _Json _emptyArray ( ) { return [ ] ; }
function _Json _emptyObject ( ) { return { } ; }
var _Json _addField = F3 ( function ( key , value , object )
{
object [ key ] = _Json _unwrap ( value ) ;
return object ;
} ) ;
function _Json _addEntry ( func )
{
return F2 ( function ( entry , array )
{
array . push ( _Json _unwrap ( func ( entry ) ) ) ;
return array ;
} ) ;
}
var _Json _encodeNull = _Json _wrap ( null ) ;
// TASKS
function _Scheduler _succeed ( value )
{
return {
$ : 0 ,
a : value
} ;
}
function _Scheduler _fail ( error )
{
return {
$ : 1 ,
a : error
} ;
}
function _Scheduler _binding ( callback )
{
return {
$ : 2 ,
b : callback ,
c : null
} ;
}
var _Scheduler _andThen = F2 ( function ( callback , task )
{
return {
$ : 3 ,
b : callback ,
d : task
} ;
} ) ;
var _Scheduler _onError = F2 ( function ( callback , task )
{
return {
$ : 4 ,
b : callback ,
d : task
} ;
} ) ;
function _Scheduler _receive ( callback )
{
return {
$ : 5 ,
b : callback
} ;
}
// PROCESSES
var _Scheduler _guid = 0 ;
function _Scheduler _rawSpawn ( task )
{
var proc = {
$ : 0 ,
e : _Scheduler _guid ++ ,
f : task ,
g : null ,
h : [ ]
} ;
_Scheduler _enqueue ( proc ) ;
return proc ;
}
function _Scheduler _spawn ( task )
{
return _Scheduler _binding ( function ( callback ) {
callback ( _Scheduler _succeed ( _Scheduler _rawSpawn ( task ) ) ) ;
} ) ;
}
function _Scheduler _rawSend ( proc , msg )
{
proc . h . push ( msg ) ;
_Scheduler _enqueue ( proc ) ;
}
var _Scheduler _send = F2 ( function ( proc , msg )
{
return _Scheduler _binding ( function ( callback ) {
_Scheduler _rawSend ( proc , msg ) ;
callback ( _Scheduler _succeed ( _Utils _Tuple0 ) ) ;
} ) ;
} ) ;
function _Scheduler _kill ( proc )
{
return _Scheduler _binding ( function ( callback ) {
var task = proc . f ;
if ( task . $ === 2 && task . c )
{
task . c ( ) ;
}
proc . f = null ;
callback ( _Scheduler _succeed ( _Utils _Tuple0 ) ) ;
} ) ;
}
/ * S T E P P R O C E S S E S
type alias Process =
{ $ : tag
, id : unique _id
, root : Task
, stack : null | { $ : SUCCEED | FAIL , a : callback , b : stack }
, mailbox : [ msg ]
}
* /
var _Scheduler _working = false ;
var _Scheduler _queue = [ ] ;
function _Scheduler _enqueue ( proc )
{
_Scheduler _queue . push ( proc ) ;
if ( _Scheduler _working )
{
return ;
}
_Scheduler _working = true ;
while ( proc = _Scheduler _queue . shift ( ) )
{
_Scheduler _step ( proc ) ;
}
_Scheduler _working = false ;
}
function _Scheduler _step ( proc )
{
while ( proc . f )
{
var rootTag = proc . f . $ ;
if ( rootTag === 0 || rootTag === 1 )
{
while ( proc . g && proc . g . $ !== rootTag )
{
proc . g = proc . g . i ;
}
if ( ! proc . g )
{
return ;
}
proc . f = proc . g . b ( proc . f . a ) ;
proc . g = proc . g . i ;
}
else if ( rootTag === 2 )
{
proc . f . c = proc . f . b ( function ( newRoot ) {
proc . f = newRoot ;
_Scheduler _enqueue ( proc ) ;
} ) ;
return ;
}
else if ( rootTag === 5 )
{
if ( proc . h . length === 0 )
{
return ;
}
proc . f = proc . f . b ( proc . h . shift ( ) ) ;
}
else // if (rootTag === 3 || rootTag === 4)
{
proc . g = {
$ : rootTag === 3 ? 0 : 1 ,
b : proc . f . b ,
i : proc . g
} ;
proc . f = proc . f . d ;
}
}
}
function _Process _sleep ( time )
{
return _Scheduler _binding ( function ( callback ) {
var id = setTimeout ( function ( ) {
callback ( _Scheduler _succeed ( _Utils _Tuple0 ) ) ;
} , time ) ;
return function ( ) { clearTimeout ( id ) ; } ;
} ) ;
}
// PROGRAMS
var _Platform _worker = F4 ( function ( impl , flagDecoder , debugMetadata , args )
{
return _Platform _initialize (
flagDecoder ,
args ,
impl . init ,
impl . update ,
impl . subscriptions ,
function ( ) { return function ( ) { } }
) ;
} ) ;
// INITIALIZE A PROGRAM
function _Platform _initialize ( flagDecoder , args , init , update , subscriptions , stepperBuilder )
{
var result = A2 ( _Json _run , flagDecoder , _Json _wrap ( args ? args [ 'flags' ] : undefined ) ) ;
$elm$core$Result$isOk ( result ) || _Debug _crash ( 2 /**/ , _Json _errorToString ( result . a ) /**/ ) ;
var managers = { } ;
var initPair = init ( result . a ) ;
var model = initPair . a ;
var stepper = stepperBuilder ( sendToApp , model ) ;
var ports = _Platform _setupEffects ( managers , sendToApp ) ;
function sendToApp ( msg , viewMetadata )
{
var pair = A2 ( update , msg , model ) ;
stepper ( model = pair . a , viewMetadata ) ;
_Platform _enqueueEffects ( managers , pair . b , subscriptions ( model ) ) ;
}
_Platform _enqueueEffects ( managers , initPair . b , subscriptions ( model ) ) ;
return ports ? { ports : ports } : { } ;
}
// TRACK PRELOADS
//
// This is used by code in elm/browser and elm/http
// to register any HTTP requests that are triggered by init.
//
var _Platform _preload ;
function _Platform _registerPreload ( url )
{
_Platform _preload . add ( url ) ;
}
// EFFECT MANAGERS
var _Platform _effectManagers = { } ;
function _Platform _setupEffects ( managers , sendToApp )
{
var ports ;
// setup all necessary effect managers
for ( var key in _Platform _effectManagers )
{
var manager = _Platform _effectManagers [ key ] ;
if ( manager . a )
{
ports = ports || { } ;
ports [ key ] = manager . a ( key , sendToApp ) ;
}
managers [ key ] = _Platform _instantiateManager ( manager , sendToApp ) ;
}
return ports ;
}
function _Platform _createManager ( init , onEffects , onSelfMsg , cmdMap , subMap )
{
return {
b : init ,
c : onEffects ,
d : onSelfMsg ,
e : cmdMap ,
f : subMap
} ;
}
function _Platform _instantiateManager ( info , sendToApp )
{
var router = {
g : sendToApp ,
h : undefined
} ;
var onEffects = info . c ;
var onSelfMsg = info . d ;
var cmdMap = info . e ;
var subMap = info . f ;
function loop ( state )
{
return A2 ( _Scheduler _andThen , loop , _Scheduler _receive ( function ( msg )
{
var value = msg . a ;
if ( msg . $ === 0 )
{
return A3 ( onSelfMsg , router , value , state ) ;
}
return cmdMap && subMap
? A4 ( onEffects , router , value . i , value . j , state )
: A3 ( onEffects , router , cmdMap ? value . i : value . j , state ) ;
} ) ) ;
}
return router . h = _Scheduler _rawSpawn ( A2 ( _Scheduler _andThen , loop , info . b ) ) ;
}
// ROUTING
var _Platform _sendToApp = F2 ( function ( router , msg )
{
return _Scheduler _binding ( function ( callback )
{
router . g ( msg ) ;
callback ( _Scheduler _succeed ( _Utils _Tuple0 ) ) ;
} ) ;
} ) ;
var _Platform _sendToSelf = F2 ( function ( router , msg )
{
return A2 ( _Scheduler _send , router . h , {
$ : 0 ,
a : msg
} ) ;
} ) ;
// BAGS
function _Platform _leaf ( home )
{
return function ( value )
{
return {
$ : 1 ,
k : home ,
l : value
} ;
} ;
}
function _Platform _batch ( list )
{
return {
$ : 2 ,
m : list
} ;
}
var _Platform _map = F2 ( function ( tagger , bag )
{
return {
$ : 3 ,
n : tagger ,
o : bag
}
} ) ;
// PIPE BAGS INTO EFFECT MANAGERS
//
// Effects must be queued!
//
// Say your init contains a synchronous command, like Time.now or Time.here
//
// - This will produce a batch of effects (FX_1)
// - The synchronous task triggers the subsequent `update` call
// - This will produce a batch of effects (FX_2)
//
// If we just start dispatching FX_2, subscriptions from FX_2 can be processed
// before subscriptions from FX_1. No good! Earlier versions of this code had
// this problem, leading to these reports:
//
// https://github.com/elm/core/issues/980
// https://github.com/elm/core/pull/981
// https://github.com/elm/compiler/issues/1776
//
// The queue is necessary to avoid ordering issues for synchronous commands.
// Why use true/false here? Why not just check the length of the queue?
// The goal is to detect "are we currently dispatching effects?" If we
// are, we need to bail and let the ongoing while loop handle things.
//
// Now say the queue has 1 element. When we dequeue the final element,
// the queue will be empty, but we are still actively dispatching effects.
// So you could get queue jumping in a really tricky category of cases.
//
var _Platform _effectsQueue = [ ] ;
var _Platform _effectsActive = false ;
function _Platform _enqueueEffects ( managers , cmdBag , subBag )
{
_Platform _effectsQueue . push ( { p : managers , q : cmdBag , r : subBag } ) ;
if ( _Platform _effectsActive ) return ;
_Platform _effectsActive = true ;
for ( var fx ; fx = _Platform _effectsQueue . shift ( ) ; )
{
_Platform _dispatchEffects ( fx . p , fx . q , fx . r ) ;
}
_Platform _effectsActive = false ;
}
function _Platform _dispatchEffects ( managers , cmdBag , subBag )
{
var effectsDict = { } ;
_Platform _gatherEffects ( true , cmdBag , effectsDict , null ) ;
_Platform _gatherEffects ( false , subBag , effectsDict , null ) ;
for ( var home in managers )
{
_Scheduler _rawSend ( managers [ home ] , {
$ : 'fx' ,
a : effectsDict [ home ] || { i : _List _Nil , j : _List _Nil }
} ) ;
}
}
function _Platform _gatherEffects ( isCmd , bag , effectsDict , taggers )
{
switch ( bag . $ )
{
case 1 :
var home = bag . k ;
var effect = _Platform _toEffect ( isCmd , home , taggers , bag . l ) ;
effectsDict [ home ] = _Platform _insert ( isCmd , effect , effectsDict [ home ] ) ;
return ;
case 2 :
for ( var list = bag . m ; list . b ; list = list . b ) // WHILE_CONS
{
_Platform _gatherEffects ( isCmd , list . a , effectsDict , taggers ) ;
}
return ;
case 3 :
_Platform _gatherEffects ( isCmd , bag . o , effectsDict , {
s : bag . n ,
t : taggers
} ) ;
return ;
}
}
function _Platform _toEffect ( isCmd , home , taggers , value )
{
function applyTaggers ( x )
{
for ( var temp = taggers ; temp ; temp = temp . t )
{
x = temp . s ( x ) ;
}
return x ;
}
var map = isCmd
? _Platform _effectManagers [ home ] . e
: _Platform _effectManagers [ home ] . f ;
return A2 ( map , applyTaggers , value )
}
function _Platform _insert ( isCmd , newEffect , effects )
{
effects = effects || { i : _List _Nil , j : _List _Nil } ;
isCmd
? ( effects . i = _List _Cons ( newEffect , effects . i ) )
: ( effects . j = _List _Cons ( newEffect , effects . j ) ) ;
return effects ;
}
// PORTS
function _Platform _checkPortName ( name )
{
if ( _Platform _effectManagers [ name ] )
{
_Debug _crash ( 3 , name )
}
}
// OUTGOING PORTS
function _Platform _outgoingPort ( name , converter )
{
_Platform _checkPortName ( name ) ;
_Platform _effectManagers [ name ] = {
e : _Platform _outgoingPortMap ,
u : converter ,
a : _Platform _setupOutgoingPort
} ;
return _Platform _leaf ( name ) ;
}
var _Platform _outgoingPortMap = F2 ( function ( tagger , value ) { return value ; } ) ;
function _Platform _setupOutgoingPort ( name )
{
var subs = [ ] ;
var converter = _Platform _effectManagers [ name ] . u ;
// CREATE MANAGER
var init = _Process _sleep ( 0 ) ;
_Platform _effectManagers [ name ] . b = init ;
_Platform _effectManagers [ name ] . c = F3 ( function ( router , cmdList , state )
{
for ( ; cmdList . b ; cmdList = cmdList . b ) // WHILE_CONS
{
// grab a separate reference to subs in case unsubscribe is called
var currentSubs = subs ;
var value = _Json _unwrap ( converter ( cmdList . a ) ) ;
for ( var i = 0 ; i < currentSubs . length ; i ++ )
{
currentSubs [ i ] ( value ) ;
}
}
return init ;
} ) ;
// PUBLIC API
function subscribe ( callback )
{
subs . push ( callback ) ;
}
function unsubscribe ( callback )
{
// copy subs into a new array in case unsubscribe is called within a
// subscribed callback
subs = subs . slice ( ) ;
var index = subs . indexOf ( callback ) ;
if ( index >= 0 )
{
subs . splice ( index , 1 ) ;
}
}
return {
subscribe : subscribe ,
unsubscribe : unsubscribe
} ;
}
// INCOMING PORTS
function _Platform _incomingPort ( name , converter )
{
_Platform _checkPortName ( name ) ;
_Platform _effectManagers [ name ] = {
f : _Platform _incomingPortMap ,
u : converter ,
a : _Platform _setupIncomingPort
} ;
return _Platform _leaf ( name ) ;
}
var _Platform _incomingPortMap = F2 ( function ( tagger , finalTagger )
{
return function ( value )
{
return tagger ( finalTagger ( value ) ) ;
} ;
} ) ;
function _Platform _setupIncomingPort ( name , sendToApp )
{
var subs = _List _Nil ;
var converter = _Platform _effectManagers [ name ] . u ;
// CREATE MANAGER
var init = _Scheduler _succeed ( null ) ;
_Platform _effectManagers [ name ] . b = init ;
_Platform _effectManagers [ name ] . c = F3 ( function ( router , subList , state )
{
subs = subList ;
return init ;
} ) ;
// PUBLIC API
function send ( incomingValue )
{
var result = A2 ( _Json _run , converter , _Json _wrap ( incomingValue ) ) ;
$elm$core$Result$isOk ( result ) || _Debug _crash ( 4 , name , result . a ) ;
var value = result . a ;
for ( var temp = subs ; temp . b ; temp = temp . b ) // WHILE_CONS
{
sendToApp ( temp . a ( value ) ) ;
}
}
return { send : send } ;
}
// EXPORT ELM MODULES
//
// Have DEBUG and PROD versions so that we can (1) give nicer errors in
// debug mode and (2) not pay for the bits needed for that in prod mode.
//
function _Platform _export _UNUSED ( exports )
{
scope [ 'Elm' ]
? _Platform _mergeExportsProd ( scope [ 'Elm' ] , exports )
: scope [ 'Elm' ] = exports ;
}
function _Platform _mergeExportsProd ( obj , exports )
{
for ( var name in exports )
{
( name in obj )
? ( name == 'init' )
? _Debug _crash ( 6 )
: _Platform _mergeExportsProd ( obj [ name ] , exports [ name ] )
: ( obj [ name ] = exports [ name ] ) ;
}
}
function _Platform _export ( exports )
{
scope [ 'Elm' ]
? _Platform _mergeExportsDebug ( 'Elm' , scope [ 'Elm' ] , exports )
: scope [ 'Elm' ] = exports ;
}
function _Platform _mergeExportsDebug ( moduleName , obj , exports )
{
for ( var name in exports )
{
( name in obj )
? ( name == 'init' )
? _Debug _crash ( 6 , moduleName )
: _Platform _mergeExportsDebug ( moduleName + '.' + name , obj [ name ] , exports [ name ] )
: ( obj [ name ] = exports [ name ] ) ;
}
}
// HELPERS
var _VirtualDom _divertHrefToApp ;
var _VirtualDom _doc = typeof document !== 'undefined' ? document : { } ;
function _VirtualDom _appendChild ( parent , child )
{
parent . appendChild ( child ) ;
2022-12-05 09:14:30 -07:00
}
2023-04-30 07:00:30 -06:00
var _VirtualDom _init = F4 ( function ( virtualNode , flagDecoder , debugMetadata , args )
{
// NOTE: this function needs _Platform_export available to work
/**_UNUSED/
var node = args [ 'node' ] ;
//*/
/**/
var node = args && args [ 'node' ] ? args [ 'node' ] : _Debug _crash ( 0 ) ;
//*/
node . parentNode . replaceChild (
_VirtualDom _render ( virtualNode , function ( ) { } ) ,
node
) ;
return { } ;
} ) ;
// TEXT
function _VirtualDom _text ( string )
{
return {
$ : 0 ,
a : string
} ;
}
// NODE
var _VirtualDom _nodeNS = F2 ( function ( namespace , tag )
{
return F2 ( function ( factList , kidList )
{
for ( var kids = [ ] , descendantsCount = 0 ; kidList . b ; kidList = kidList . b ) // WHILE_CONS
{
var kid = kidList . a ;
descendantsCount += ( kid . b || 0 ) ;
kids . push ( kid ) ;
}
descendantsCount += kids . length ;
return {
$ : 1 ,
c : tag ,
d : _VirtualDom _organizeFacts ( factList ) ,
e : kids ,
f : namespace ,
b : descendantsCount
} ;
} ) ;
} ) ;
var _VirtualDom _node = _VirtualDom _nodeNS ( undefined ) ;
// KEYED NODE
var _VirtualDom _keyedNodeNS = F2 ( function ( namespace , tag )
{
return F2 ( function ( factList , kidList )
{
for ( var kids = [ ] , descendantsCount = 0 ; kidList . b ; kidList = kidList . b ) // WHILE_CONS
{
var kid = kidList . a ;
descendantsCount += ( kid . b . b || 0 ) ;
kids . push ( kid ) ;
}
descendantsCount += kids . length ;
return {
$ : 2 ,
c : tag ,
d : _VirtualDom _organizeFacts ( factList ) ,
e : kids ,
f : namespace ,
b : descendantsCount
} ;
} ) ;
} ) ;
var _VirtualDom _keyedNode = _VirtualDom _keyedNodeNS ( undefined ) ;
// CUSTOM
function _VirtualDom _custom ( factList , model , render , diff )
{
return {
$ : 3 ,
d : _VirtualDom _organizeFacts ( factList ) ,
g : model ,
h : render ,
i : diff
} ;
}
// MAP
var _VirtualDom _map = F2 ( function ( tagger , node )
{
return {
$ : 4 ,
j : tagger ,
k : node ,
b : 1 + ( node . b || 0 )
} ;
} ) ;
// LAZY
function _VirtualDom _thunk ( refs , thunk )
{
return {
$ : 5 ,
l : refs ,
m : thunk ,
k : undefined
} ;
}
var _VirtualDom _lazy = F2 ( function ( func , a )
{
return _VirtualDom _thunk ( [ func , a ] , function ( ) {
return func ( a ) ;
} ) ;
} ) ;
var _VirtualDom _lazy2 = F3 ( function ( func , a , b )
{
return _VirtualDom _thunk ( [ func , a , b ] , function ( ) {
return A2 ( func , a , b ) ;
} ) ;
} ) ;
var _VirtualDom _lazy3 = F4 ( function ( func , a , b , c )
{
return _VirtualDom _thunk ( [ func , a , b , c ] , function ( ) {
return A3 ( func , a , b , c ) ;
} ) ;
} ) ;
var _VirtualDom _lazy4 = F5 ( function ( func , a , b , c , d )
{
return _VirtualDom _thunk ( [ func , a , b , c , d ] , function ( ) {
return A4 ( func , a , b , c , d ) ;
} ) ;
} ) ;
var _VirtualDom _lazy5 = F6 ( function ( func , a , b , c , d , e )
{
return _VirtualDom _thunk ( [ func , a , b , c , d , e ] , function ( ) {
return A5 ( func , a , b , c , d , e ) ;
} ) ;
} ) ;
var _VirtualDom _lazy6 = F7 ( function ( func , a , b , c , d , e , f )
{
return _VirtualDom _thunk ( [ func , a , b , c , d , e , f ] , function ( ) {
return A6 ( func , a , b , c , d , e , f ) ;
} ) ;
} ) ;
var _VirtualDom _lazy7 = F8 ( function ( func , a , b , c , d , e , f , g )
{
return _VirtualDom _thunk ( [ func , a , b , c , d , e , f , g ] , function ( ) {
return A7 ( func , a , b , c , d , e , f , g ) ;
} ) ;
} ) ;
var _VirtualDom _lazy8 = F9 ( function ( func , a , b , c , d , e , f , g , h )
{
return _VirtualDom _thunk ( [ func , a , b , c , d , e , f , g , h ] , function ( ) {
return A8 ( func , a , b , c , d , e , f , g , h ) ;
} ) ;
} ) ;
// FACTS
var _VirtualDom _on = F2 ( function ( key , handler )
{
return {
$ : 'a0' ,
n : key ,
o : handler
} ;
} ) ;
var _VirtualDom _style = F2 ( function ( key , value )
{
return {
$ : 'a1' ,
n : key ,
o : value
} ;
} ) ;
var _VirtualDom _property = F2 ( function ( key , value )
{
return {
$ : 'a2' ,
n : key ,
o : value
} ;
} ) ;
var _VirtualDom _attribute = F2 ( function ( key , value )
{
return {
$ : 'a3' ,
n : key ,
o : value
} ;
} ) ;
var _VirtualDom _attributeNS = F3 ( function ( namespace , key , value )
{
return {
$ : 'a4' ,
n : key ,
o : { f : namespace , o : value }
} ;
} ) ;
// XSS ATTACK VECTOR CHECKS
//
// For some reason, tabs can appear in href protocols and it still works.
// So '\tjava\tSCRIPT:alert("!!!")' and 'javascript:alert("!!!")' are the same
// in practice. That is why _VirtualDom_RE_js and _VirtualDom_RE_js_html look
// so freaky.
//
// Pulling the regular expressions out to the top level gives a slight speed
// boost in small benchmarks (4-10%) but hoisting values to reduce allocation
// can be unpredictable in large programs where JIT may have a harder time with
// functions are not fully self-contained. The benefit is more that the js and
// js_html ones are so weird that I prefer to see them near each other.
var _VirtualDom _RE _script = /^script$/i ;
var _VirtualDom _RE _on _formAction = /^(on|formAction$)/i ;
var _VirtualDom _RE _js = /^\s*j\s*a\s*v\s*a\s*s\s*c\s*r\s*i\s*p\s*t\s*:/i ;
var _VirtualDom _RE _js _html = /^\s*(j\s*a\s*v\s*a\s*s\s*c\s*r\s*i\s*p\s*t\s*:|d\s*a\s*t\s*a\s*:\s*t\s*e\s*x\s*t\s*\/\s*h\s*t\s*m\s*l\s*(,|;))/i ;
function _VirtualDom _noScript ( tag )
{
return _VirtualDom _RE _script . test ( tag ) ? 'p' : tag ;
}
function _VirtualDom _noOnOrFormAction ( key )
{
return _VirtualDom _RE _on _formAction . test ( key ) ? 'data-' + key : key ;
}
function _VirtualDom _noInnerHtmlOrFormAction ( key )
{
return key == 'innerHTML' || key == 'formAction' ? 'data-' + key : key ;
}
function _VirtualDom _noJavaScriptUri ( value )
{
return _VirtualDom _RE _js . test ( value )
? /**_UNUSED/''//*/ /**/ 'javascript:alert("This is an XSS vector. Please use ports or web components instead.")' //*/
: value ;
}
function _VirtualDom _noJavaScriptOrHtmlUri ( value )
{
return _VirtualDom _RE _js _html . test ( value )
? /**_UNUSED/''//*/ /**/ 'javascript:alert("This is an XSS vector. Please use ports or web components instead.")' //*/
: value ;
}
function _VirtualDom _noJavaScriptOrHtmlJson ( value )
{
return ( typeof _Json _unwrap ( value ) === 'string' && _VirtualDom _RE _js _html . test ( _Json _unwrap ( value ) ) )
? _Json _wrap (
/**_UNUSED/''//*/ /**/ 'javascript:alert("This is an XSS vector. Please use ports or web components instead.")' //*/
) : value ;
}
// MAP FACTS
var _VirtualDom _mapAttribute = F2 ( function ( func , attr )
{
return ( attr . $ === 'a0' )
? A2 ( _VirtualDom _on , attr . n , _VirtualDom _mapHandler ( func , attr . o ) )
: attr ;
} ) ;
function _VirtualDom _mapHandler ( func , handler )
{
var tag = $elm$virtual _dom$VirtualDom$toHandlerInt ( handler ) ;
// 0 = Normal
// 1 = MayStopPropagation
// 2 = MayPreventDefault
// 3 = Custom
return {
$ : handler . $ ,
a :
! tag
? A2 ( $elm$json$Json$Decode$map , func , handler . a )
:
A3 ( $elm$json$Json$Decode$map2 ,
tag < 3
? _VirtualDom _mapEventTuple
: _VirtualDom _mapEventRecord ,
$elm$json$Json$Decode$succeed ( func ) ,
handler . a
)
} ;
}
var _VirtualDom _mapEventTuple = F2 ( function ( func , tuple )
{
return _Utils _Tuple2 ( func ( tuple . a ) , tuple . b ) ;
} ) ;
var _VirtualDom _mapEventRecord = F2 ( function ( func , record )
{
return {
message : func ( record . message ) ,
stopPropagation : record . stopPropagation ,
preventDefault : record . preventDefault
}
} ) ;
// ORGANIZE FACTS
function _VirtualDom _organizeFacts ( factList )
{
for ( var facts = { } ; factList . b ; factList = factList . b ) // WHILE_CONS
{
var entry = factList . a ;
var tag = entry . $ ;
var key = entry . n ;
var value = entry . o ;
if ( tag === 'a2' )
{
( key === 'className' )
? _VirtualDom _addClass ( facts , key , _Json _unwrap ( value ) )
: facts [ key ] = _Json _unwrap ( value ) ;
continue ;
}
var subFacts = facts [ tag ] || ( facts [ tag ] = { } ) ;
( tag === 'a3' && key === 'class' )
? _VirtualDom _addClass ( subFacts , key , value )
: subFacts [ key ] = value ;
}
return facts ;
}
function _VirtualDom _addClass ( object , key , newClass )
{
var classes = object [ key ] ;
object [ key ] = classes ? classes + ' ' + newClass : newClass ;
}
// RENDER
function _VirtualDom _render ( vNode , eventNode )
{
var tag = vNode . $ ;
if ( tag === 5 )
{
return _VirtualDom _render ( vNode . k || ( vNode . k = vNode . m ( ) ) , eventNode ) ;
}
if ( tag === 0 )
{
return _VirtualDom _doc . createTextNode ( vNode . a ) ;
}
if ( tag === 4 )
{
var subNode = vNode . k ;
var tagger = vNode . j ;
while ( subNode . $ === 4 )
{
typeof tagger !== 'object'
? tagger = [ tagger , subNode . j ]
: tagger . push ( subNode . j ) ;
subNode = subNode . k ;
}
var subEventRoot = { j : tagger , p : eventNode } ;
var domNode = _VirtualDom _render ( subNode , subEventRoot ) ;
domNode . elm _event _node _ref = subEventRoot ;
return domNode ;
}
if ( tag === 3 )
{
var domNode = vNode . h ( vNode . g ) ;
_VirtualDom _applyFacts ( domNode , eventNode , vNode . d ) ;
return domNode ;
}
// at this point `tag` must be 1 or 2
var domNode = vNode . f
? _VirtualDom _doc . createElementNS ( vNode . f , vNode . c )
: _VirtualDom _doc . createElement ( vNode . c ) ;
if ( _VirtualDom _divertHrefToApp && vNode . c == 'a' )
{
domNode . addEventListener ( 'click' , _VirtualDom _divertHrefToApp ( domNode ) ) ;
}
_VirtualDom _applyFacts ( domNode , eventNode , vNode . d ) ;
for ( var kids = vNode . e , i = 0 ; i < kids . length ; i ++ )
{
_VirtualDom _appendChild ( domNode , _VirtualDom _render ( tag === 1 ? kids [ i ] : kids [ i ] . b , eventNode ) ) ;
}
return domNode ;
}
// APPLY FACTS
function _VirtualDom _applyFacts ( domNode , eventNode , facts )
{
for ( var key in facts )
{
var value = facts [ key ] ;
key === 'a1'
? _VirtualDom _applyStyles ( domNode , value )
:
key === 'a0'
? _VirtualDom _applyEvents ( domNode , eventNode , value )
:
key === 'a3'
? _VirtualDom _applyAttrs ( domNode , value )
:
key === 'a4'
? _VirtualDom _applyAttrsNS ( domNode , value )
:
( ( key !== 'value' && key !== 'checked' ) || domNode [ key ] !== value ) && ( domNode [ key ] = value ) ;
}
}
// APPLY STYLES
function _VirtualDom _applyStyles ( domNode , styles )
{
var domNodeStyle = domNode . style ;
for ( var key in styles )
{
domNodeStyle [ key ] = styles [ key ] ;
}
}
// APPLY ATTRS
function _VirtualDom _applyAttrs ( domNode , attrs )
{
for ( var key in attrs )
{
var value = attrs [ key ] ;
typeof value !== 'undefined'
? domNode . setAttribute ( key , value )
: domNode . removeAttribute ( key ) ;
}
}
// APPLY NAMESPACED ATTRS
function _VirtualDom _applyAttrsNS ( domNode , nsAttrs )
{
for ( var key in nsAttrs )
{
var pair = nsAttrs [ key ] ;
var namespace = pair . f ;
var value = pair . o ;
typeof value !== 'undefined'
? domNode . setAttributeNS ( namespace , key , value )
: domNode . removeAttributeNS ( namespace , key ) ;
}
}
// APPLY EVENTS
function _VirtualDom _applyEvents ( domNode , eventNode , events )
{
var allCallbacks = domNode . elmFs || ( domNode . elmFs = { } ) ;
for ( var key in events )
{
var newHandler = events [ key ] ;
var oldCallback = allCallbacks [ key ] ;
if ( ! newHandler )
{
domNode . removeEventListener ( key , oldCallback ) ;
allCallbacks [ key ] = undefined ;
continue ;
}
if ( oldCallback )
{
var oldHandler = oldCallback . q ;
if ( oldHandler . $ === newHandler . $ )
{
oldCallback . q = newHandler ;
continue ;
}
domNode . removeEventListener ( key , oldCallback ) ;
}
oldCallback = _VirtualDom _makeCallback ( eventNode , newHandler ) ;
domNode . addEventListener ( key , oldCallback ,
_VirtualDom _passiveSupported
&& { passive : $elm$virtual _dom$VirtualDom$toHandlerInt ( newHandler ) < 2 }
) ;
allCallbacks [ key ] = oldCallback ;
}
}
// PASSIVE EVENTS
var _VirtualDom _passiveSupported ;
try
{
window . addEventListener ( 't' , null , Object . defineProperty ( { } , 'passive' , {
get : function ( ) { _VirtualDom _passiveSupported = true ; }
} ) ) ;
}
catch ( e ) { }
// EVENT HANDLERS
function _VirtualDom _makeCallback ( eventNode , initialHandler )
{
function callback ( event )
{
var handler = callback . q ;
var result = _Json _runHelp ( handler . a , event ) ;
if ( ! $elm$core$Result$isOk ( result ) )
{
return ;
}
var tag = $elm$virtual _dom$VirtualDom$toHandlerInt ( handler ) ;
// 0 = Normal
// 1 = MayStopPropagation
// 2 = MayPreventDefault
// 3 = Custom
var value = result . a ;
var message = ! tag ? value : tag < 3 ? value . a : value . message ;
var stopPropagation = tag == 1 ? value . b : tag == 3 && value . stopPropagation ;
var currentEventNode = (
stopPropagation && event . stopPropagation ( ) ,
( tag == 2 ? value . b : tag == 3 && value . preventDefault ) && event . preventDefault ( ) ,
eventNode
) ;
var tagger ;
var i ;
while ( tagger = currentEventNode . j )
{
if ( typeof tagger == 'function' )
{
message = tagger ( message ) ;
}
else
{
for ( var i = tagger . length ; i -- ; )
{
message = tagger [ i ] ( message ) ;
}
}
currentEventNode = currentEventNode . p ;
}
currentEventNode ( message , stopPropagation ) ; // stopPropagation implies isSync
}
callback . q = initialHandler ;
return callback ;
}
function _VirtualDom _equalEvents ( x , y )
{
return x . $ == y . $ && _Json _equality ( x . a , y . a ) ;
}
// DIFF
// TODO: Should we do patches like in iOS?
//
// type Patch
// = At Int Patch
// | Batch (List Patch)
// | Change ...
//
// How could it not be better?
//
function _VirtualDom _diff ( x , y )
{
var patches = [ ] ;
_VirtualDom _diffHelp ( x , y , patches , 0 ) ;
return patches ;
}
function _VirtualDom _pushPatch ( patches , type , index , data )
{
var patch = {
$ : type ,
r : index ,
s : data ,
t : undefined ,
u : undefined
} ;
patches . push ( patch ) ;
return patch ;
}
function _VirtualDom _diffHelp ( x , y , patches , index )
{
if ( x === y )
{
return ;
}
var xType = x . $ ;
var yType = y . $ ;
// Bail if you run into different types of nodes. Implies that the
// structure has changed significantly and it's not worth a diff.
if ( xType !== yType )
{
if ( xType === 1 && yType === 2 )
{
y = _VirtualDom _dekey ( y ) ;
yType = 1 ;
}
else
{
_VirtualDom _pushPatch ( patches , 0 , index , y ) ;
return ;
}
}
// Now we know that both nodes are the same $.
switch ( yType )
{
case 5 :
var xRefs = x . l ;
var yRefs = y . l ;
var i = xRefs . length ;
var same = i === yRefs . length ;
while ( same && i -- )
{
same = xRefs [ i ] === yRefs [ i ] ;
}
if ( same )
{
y . k = x . k ;
return ;
}
y . k = y . m ( ) ;
var subPatches = [ ] ;
_VirtualDom _diffHelp ( x . k , y . k , subPatches , 0 ) ;
subPatches . length > 0 && _VirtualDom _pushPatch ( patches , 1 , index , subPatches ) ;
return ;
case 4 :
// gather nested taggers
var xTaggers = x . j ;
var yTaggers = y . j ;
var nesting = false ;
var xSubNode = x . k ;
while ( xSubNode . $ === 4 )
{
nesting = true ;
typeof xTaggers !== 'object'
? xTaggers = [ xTaggers , xSubNode . j ]
: xTaggers . push ( xSubNode . j ) ;
xSubNode = xSubNode . k ;
}
var ySubNode = y . k ;
while ( ySubNode . $ === 4 )
{
nesting = true ;
typeof yTaggers !== 'object'
? yTaggers = [ yTaggers , ySubNode . j ]
: yTaggers . push ( ySubNode . j ) ;
ySubNode = ySubNode . k ;
}
// Just bail if different numbers of taggers. This implies the
// structure of the virtual DOM has changed.
if ( nesting && xTaggers . length !== yTaggers . length )
{
_VirtualDom _pushPatch ( patches , 0 , index , y ) ;
return ;
}
// check if taggers are "the same"
if ( nesting ? ! _VirtualDom _pairwiseRefEqual ( xTaggers , yTaggers ) : xTaggers !== yTaggers )
{
_VirtualDom _pushPatch ( patches , 2 , index , yTaggers ) ;
}
// diff everything below the taggers
_VirtualDom _diffHelp ( xSubNode , ySubNode , patches , index + 1 ) ;
return ;
case 0 :
if ( x . a !== y . a )
{
_VirtualDom _pushPatch ( patches , 3 , index , y . a ) ;
}
return ;
case 1 :
_VirtualDom _diffNodes ( x , y , patches , index , _VirtualDom _diffKids ) ;
return ;
case 2 :
_VirtualDom _diffNodes ( x , y , patches , index , _VirtualDom _diffKeyedKids ) ;
return ;
case 3 :
if ( x . h !== y . h )
{
_VirtualDom _pushPatch ( patches , 0 , index , y ) ;
return ;
}
var factsDiff = _VirtualDom _diffFacts ( x . d , y . d ) ;
factsDiff && _VirtualDom _pushPatch ( patches , 4 , index , factsDiff ) ;
var patch = y . i ( x . g , y . g ) ;
patch && _VirtualDom _pushPatch ( patches , 5 , index , patch ) ;
return ;
}
}
// assumes the incoming arrays are the same length
function _VirtualDom _pairwiseRefEqual ( as , bs )
{
for ( var i = 0 ; i < as . length ; i ++ )
{
if ( as [ i ] !== bs [ i ] )
{
return false ;
}
}
return true ;
}
function _VirtualDom _diffNodes ( x , y , patches , index , diffKids )
{
// Bail if obvious indicators have changed. Implies more serious
// structural changes such that it's not worth it to diff.
if ( x . c !== y . c || x . f !== y . f )
{
_VirtualDom _pushPatch ( patches , 0 , index , y ) ;
return ;
}
var factsDiff = _VirtualDom _diffFacts ( x . d , y . d ) ;
factsDiff && _VirtualDom _pushPatch ( patches , 4 , index , factsDiff ) ;
diffKids ( x , y , patches , index ) ;
}
// DIFF FACTS
// 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 _VirtualDom _diffFacts ( x , y , category )
{
var diff ;
// look for changes and removals
for ( var xKey in x )
{
if ( xKey === 'a1' || xKey === 'a0' || xKey === 'a3' || xKey === 'a4' )
{
var subDiff = _VirtualDom _diffFacts ( x [ xKey ] , y [ xKey ] || { } , xKey ) ;
if ( subDiff )
{
diff = diff || { } ;
diff [ xKey ] = subDiff ;
}
continue ;
}
// remove if not in the new facts
if ( ! ( xKey in y ) )
{
diff = diff || { } ;
diff [ xKey ] =
! category
? ( typeof x [ xKey ] === 'string' ? '' : null )
:
( category === 'a1' )
? ''
:
( category === 'a0' || category === 'a3' )
? undefined
:
{ f : x [ xKey ] . f , o : undefined } ;
continue ;
}
var xValue = x [ xKey ] ;
var yValue = y [ xKey ] ;
// reference equal, so don't worry about it
if ( xValue === yValue && xKey !== 'value' && xKey !== 'checked'
|| category === 'a0' && _VirtualDom _equalEvents ( xValue , yValue ) )
{
continue ;
}
diff = diff || { } ;
diff [ xKey ] = yValue ;
}
// add new stuff
for ( var yKey in y )
{
if ( ! ( yKey in x ) )
{
diff = diff || { } ;
diff [ yKey ] = y [ yKey ] ;
}
}
return diff ;
}
// DIFF KIDS
function _VirtualDom _diffKids ( xParent , yParent , patches , index )
{
var xKids = xParent . e ;
var yKids = yParent . e ;
var xLen = xKids . length ;
var yLen = yKids . length ;
// FIGURE OUT IF THERE ARE INSERTS OR REMOVALS
if ( xLen > yLen )
{
_VirtualDom _pushPatch ( patches , 6 , index , {
v : yLen ,
i : xLen - yLen
} ) ;
}
else if ( xLen < yLen )
{
_VirtualDom _pushPatch ( patches , 7 , index , {
v : xLen ,
e : yKids
} ) ;
}
// PAIRWISE DIFF EVERYTHING ELSE
for ( var minLen = xLen < yLen ? xLen : yLen , i = 0 ; i < minLen ; i ++ )
{
var xKid = xKids [ i ] ;
_VirtualDom _diffHelp ( xKid , yKids [ i ] , patches , ++ index ) ;
index += xKid . b || 0 ;
}
}
// KEYED DIFF
function _VirtualDom _diffKeyedKids ( xParent , yParent , patches , rootIndex )
{
var localPatches = [ ] ;
var changes = { } ; // Dict String Entry
var inserts = [ ] ; // Array { index : Int, entry : Entry }
// type Entry = { tag : String, vnode : VNode, index : Int, data : _ }
var xKids = xParent . e ;
var yKids = yParent . e ;
var xLen = xKids . length ;
var yLen = yKids . length ;
var xIndex = 0 ;
var yIndex = 0 ;
var index = rootIndex ;
while ( xIndex < xLen && yIndex < yLen )
{
var x = xKids [ xIndex ] ;
var y = yKids [ yIndex ] ;
var xKey = x . a ;
var yKey = y . a ;
var xNode = x . b ;
var yNode = y . b ;
var newMatch = undefined ;
var oldMatch = undefined ;
// check if keys match
if ( xKey === yKey )
{
index ++ ;
_VirtualDom _diffHelp ( xNode , yNode , localPatches , index ) ;
index += xNode . b || 0 ;
xIndex ++ ;
yIndex ++ ;
continue ;
}
// look ahead 1 to detect insertions and removals.
var xNext = xKids [ xIndex + 1 ] ;
var yNext = yKids [ yIndex + 1 ] ;
if ( xNext )
{
var xNextKey = xNext . a ;
var xNextNode = xNext . b ;
oldMatch = yKey === xNextKey ;
}
if ( yNext )
{
var yNextKey = yNext . a ;
var yNextNode = yNext . b ;
newMatch = xKey === yNextKey ;
}
// swap x and y
if ( newMatch && oldMatch )
{
index ++ ;
_VirtualDom _diffHelp ( xNode , yNextNode , localPatches , index ) ;
_VirtualDom _insertNode ( changes , localPatches , xKey , yNode , yIndex , inserts ) ;
index += xNode . b || 0 ;
index ++ ;
_VirtualDom _removeNode ( changes , localPatches , xKey , xNextNode , index ) ;
index += xNextNode . b || 0 ;
xIndex += 2 ;
yIndex += 2 ;
continue ;
}
// insert y
if ( newMatch )
{
index ++ ;
_VirtualDom _insertNode ( changes , localPatches , yKey , yNode , yIndex , inserts ) ;
_VirtualDom _diffHelp ( xNode , yNextNode , localPatches , index ) ;
index += xNode . b || 0 ;
xIndex += 1 ;
yIndex += 2 ;
continue ;
}
// remove x
if ( oldMatch )
{
index ++ ;
_VirtualDom _removeNode ( changes , localPatches , xKey , xNode , index ) ;
index += xNode . b || 0 ;
index ++ ;
_VirtualDom _diffHelp ( xNextNode , yNode , localPatches , index ) ;
index += xNextNode . b || 0 ;
xIndex += 2 ;
yIndex += 1 ;
continue ;
}
// remove x, insert y
if ( xNext && xNextKey === yNextKey )
{
index ++ ;
_VirtualDom _removeNode ( changes , localPatches , xKey , xNode , index ) ;
_VirtualDom _insertNode ( changes , localPatches , yKey , yNode , yIndex , inserts ) ;
index += xNode . b || 0 ;
index ++ ;
_VirtualDom _diffHelp ( xNextNode , yNextNode , localPatches , index ) ;
index += xNextNode . b || 0 ;
xIndex += 2 ;
yIndex += 2 ;
continue ;
}
break ;
}
// eat up any remaining nodes with removeNode and insertNode
while ( xIndex < xLen )
{
index ++ ;
var x = xKids [ xIndex ] ;
var xNode = x . b ;
_VirtualDom _removeNode ( changes , localPatches , x . a , xNode , index ) ;
index += xNode . b || 0 ;
xIndex ++ ;
}
while ( yIndex < yLen )
{
var endInserts = endInserts || [ ] ;
var y = yKids [ yIndex ] ;
_VirtualDom _insertNode ( changes , localPatches , y . a , y . b , undefined , endInserts ) ;
yIndex ++ ;
}
if ( localPatches . length > 0 || inserts . length > 0 || endInserts )
{
_VirtualDom _pushPatch ( patches , 8 , rootIndex , {
w : localPatches ,
x : inserts ,
y : endInserts
} ) ;
}
}
// CHANGES FROM KEYED DIFF
var _VirtualDom _POSTFIX = '_elmW6BL' ;
function _VirtualDom _insertNode ( changes , localPatches , key , vnode , yIndex , inserts )
{
var entry = changes [ key ] ;
// never seen this key before
if ( ! entry )
{
entry = {
c : 0 ,
z : vnode ,
r : yIndex ,
s : undefined
} ;
inserts . push ( { r : yIndex , A : entry } ) ;
changes [ key ] = entry ;
return ;
}
// this key was removed earlier, a match!
if ( entry . c === 1 )
{
inserts . push ( { r : yIndex , A : entry } ) ;
entry . c = 2 ;
var subPatches = [ ] ;
_VirtualDom _diffHelp ( entry . z , vnode , subPatches , entry . r ) ;
entry . r = yIndex ;
entry . s . s = {
w : subPatches ,
A : entry
} ;
return ;
}
// this key has already been inserted or moved, a duplicate!
_VirtualDom _insertNode ( changes , localPatches , key + _VirtualDom _POSTFIX , vnode , yIndex , inserts ) ;
}
function _VirtualDom _removeNode ( changes , localPatches , key , vnode , index )
{
var entry = changes [ key ] ;
// never seen this key before
if ( ! entry )
{
var patch = _VirtualDom _pushPatch ( localPatches , 9 , index , undefined ) ;
changes [ key ] = {
c : 1 ,
z : vnode ,
r : index ,
s : patch
} ;
return ;
}
// this key was inserted earlier, a match!
if ( entry . c === 0 )
{
entry . c = 2 ;
var subPatches = [ ] ;
_VirtualDom _diffHelp ( vnode , entry . z , subPatches , index ) ;
_VirtualDom _pushPatch ( localPatches , 9 , index , {
w : subPatches ,
A : entry
} ) ;
return ;
}
// this key has already been removed or moved, a duplicate!
_VirtualDom _removeNode ( changes , localPatches , key + _VirtualDom _POSTFIX , vnode , index ) ;
}
// 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 _VirtualDom _addDomNodes ( domNode , vNode , patches , eventNode )
{
_VirtualDom _addDomNodesHelp ( domNode , vNode , patches , 0 , 0 , vNode . b , eventNode ) ;
}
// assumes `patches` is non-empty and indexes increase monotonically.
function _VirtualDom _addDomNodesHelp ( domNode , vNode , patches , i , low , high , eventNode )
{
var patch = patches [ i ] ;
var index = patch . r ;
while ( index === low )
{
var patchType = patch . $ ;
if ( patchType === 1 )
{
_VirtualDom _addDomNodes ( domNode , vNode . k , patch . s , eventNode ) ;
}
else if ( patchType === 8 )
{
patch . t = domNode ;
patch . u = eventNode ;
var subPatches = patch . s . w ;
if ( subPatches . length > 0 )
{
_VirtualDom _addDomNodesHelp ( domNode , vNode , subPatches , 0 , low , high , eventNode ) ;
}
}
else if ( patchType === 9 )
{
patch . t = domNode ;
patch . u = eventNode ;
var data = patch . s ;
if ( data )
{
data . A . s = domNode ;
var subPatches = data . w ;
if ( subPatches . length > 0 )
{
_VirtualDom _addDomNodesHelp ( domNode , vNode , subPatches , 0 , low , high , eventNode ) ;
}
}
}
else
{
patch . t = domNode ;
patch . u = eventNode ;
}
i ++ ;
if ( ! ( patch = patches [ i ] ) || ( index = patch . r ) > high )
{
return i ;
}
}
var tag = vNode . $ ;
if ( tag === 4 )
{
var subNode = vNode . k ;
while ( subNode . $ === 4 )
{
subNode = subNode . k ;
}
return _VirtualDom _addDomNodesHelp ( domNode , subNode , patches , i , low + 1 , high , domNode . elm _event _node _ref ) ;
}
// tag must be 1 or 2 at this point
var vKids = vNode . e ;
var childNodes = domNode . childNodes ;
for ( var j = 0 ; j < vKids . length ; j ++ )
{
low ++ ;
var vKid = tag === 1 ? vKids [ j ] : vKids [ j ] . b ;
var nextLow = low + ( vKid . b || 0 ) ;
if ( low <= index && index <= nextLow )
{
i = _VirtualDom _addDomNodesHelp ( childNodes [ j ] , vKid , patches , i , low , nextLow , eventNode ) ;
if ( ! ( patch = patches [ i ] ) || ( index = patch . r ) > high )
{
return i ;
}
}
low = nextLow ;
}
return i ;
}
// APPLY PATCHES
function _VirtualDom _applyPatches ( rootDomNode , oldVirtualNode , patches , eventNode )
{
if ( patches . length === 0 )
{
return rootDomNode ;
}
_VirtualDom _addDomNodes ( rootDomNode , oldVirtualNode , patches , eventNode ) ;
return _VirtualDom _applyPatchesHelp ( rootDomNode , patches ) ;
}
function _VirtualDom _applyPatchesHelp ( rootDomNode , patches )
{
for ( var i = 0 ; i < patches . length ; i ++ )
{
var patch = patches [ i ] ;
var localDomNode = patch . t
var newNode = _VirtualDom _applyPatch ( localDomNode , patch ) ;
if ( localDomNode === rootDomNode )
{
rootDomNode = newNode ;
}
}
return rootDomNode ;
}
function _VirtualDom _applyPatch ( domNode , patch )
{
switch ( patch . $ )
{
case 0 :
return _VirtualDom _applyPatchRedraw ( domNode , patch . s , patch . u ) ;
case 4 :
_VirtualDom _applyFacts ( domNode , patch . u , patch . s ) ;
return domNode ;
case 3 :
domNode . replaceData ( 0 , domNode . length , patch . s ) ;
return domNode ;
case 1 :
return _VirtualDom _applyPatchesHelp ( domNode , patch . s ) ;
case 2 :
if ( domNode . elm _event _node _ref )
{
domNode . elm _event _node _ref . j = patch . s ;
}
else
{
domNode . elm _event _node _ref = { j : patch . s , p : patch . u } ;
}
return domNode ;
case 6 :
var data = patch . s ;
for ( var i = 0 ; i < data . i ; i ++ )
{
domNode . removeChild ( domNode . childNodes [ data . v ] ) ;
}
return domNode ;
case 7 :
var data = patch . s ;
var kids = data . e ;
var i = data . v ;
var theEnd = domNode . childNodes [ i ] ;
for ( ; i < kids . length ; i ++ )
{
domNode . insertBefore ( _VirtualDom _render ( kids [ i ] , patch . u ) , theEnd ) ;
}
return domNode ;
case 9 :
var data = patch . s ;
if ( ! data )
{
domNode . parentNode . removeChild ( domNode ) ;
return domNode ;
}
var entry = data . A ;
if ( typeof entry . r !== 'undefined' )
{
domNode . parentNode . removeChild ( domNode ) ;
}
entry . s = _VirtualDom _applyPatchesHelp ( domNode , data . w ) ;
return domNode ;
case 8 :
return _VirtualDom _applyPatchReorder ( domNode , patch ) ;
case 5 :
return patch . s ( domNode ) ;
default :
_Debug _crash ( 10 ) ; // 'Ran into an unknown patch!'
}
}
function _VirtualDom _applyPatchRedraw ( domNode , vNode , eventNode )
{
var parentNode = domNode . parentNode ;
var newNode = _VirtualDom _render ( vNode , eventNode ) ;
if ( ! newNode . elm _event _node _ref )
{
newNode . elm _event _node _ref = domNode . elm _event _node _ref ;
}
if ( parentNode && newNode !== domNode )
{
parentNode . replaceChild ( newNode , domNode ) ;
}
return newNode ;
}
function _VirtualDom _applyPatchReorder ( domNode , patch )
{
var data = patch . s ;
// remove end inserts
var frag = _VirtualDom _applyPatchReorderEndInsertsHelp ( data . y , patch ) ;
// removals
domNode = _VirtualDom _applyPatchesHelp ( domNode , data . w ) ;
// inserts
var inserts = data . x ;
for ( var i = 0 ; i < inserts . length ; i ++ )
{
var insert = inserts [ i ] ;
var entry = insert . A ;
var node = entry . c === 2
? entry . s
: _VirtualDom _render ( entry . z , patch . u ) ;
domNode . insertBefore ( node , domNode . childNodes [ insert . r ] ) ;
}
// add end inserts
if ( frag )
{
_VirtualDom _appendChild ( domNode , frag ) ;
}
return domNode ;
}
function _VirtualDom _applyPatchReorderEndInsertsHelp ( endInserts , patch )
{
if ( ! endInserts )
{
return ;
}
var frag = _VirtualDom _doc . createDocumentFragment ( ) ;
for ( var i = 0 ; i < endInserts . length ; i ++ )
{
var insert = endInserts [ i ] ;
var entry = insert . A ;
_VirtualDom _appendChild ( frag , entry . c === 2
? entry . s
: _VirtualDom _render ( entry . z , patch . u )
) ;
}
return frag ;
}
function _VirtualDom _virtualize ( node )
{
// TEXT NODES
if ( node . nodeType === 3 )
{
return _VirtualDom _text ( node . textContent ) ;
}
// WEIRD NODES
if ( node . nodeType !== 1 )
{
return _VirtualDom _text ( '' ) ;
}
// ELEMENT NODES
var attrList = _List _Nil ;
var attrs = node . attributes ;
for ( var i = attrs . length ; i -- ; )
{
var attr = attrs [ i ] ;
var name = attr . name ;
var value = attr . value ;
attrList = _List _Cons ( A2 ( _VirtualDom _attribute , name , value ) , attrList ) ;
}
var tag = node . tagName . toLowerCase ( ) ;
var kidList = _List _Nil ;
var kids = node . childNodes ;
for ( var i = kids . length ; i -- ; )
{
kidList = _List _Cons ( _VirtualDom _virtualize ( kids [ i ] ) , kidList ) ;
}
return A3 ( _VirtualDom _node , tag , attrList , kidList ) ;
}
function _VirtualDom _dekey ( keyedNode )
{
var keyedKids = keyedNode . e ;
var len = keyedKids . length ;
var kids = new Array ( len ) ;
for ( var i = 0 ; i < len ; i ++ )
{
kids [ i ] = keyedKids [ i ] . b ;
}
return {
$ : 1 ,
c : keyedNode . c ,
d : keyedNode . d ,
e : kids ,
f : keyedNode . f ,
b : keyedNode . b
} ;
}
// ELEMENT
var _Debugger _element ;
var _Browser _element = _Debugger _element || F4 ( function ( impl , flagDecoder , debugMetadata , args )
{
return _Platform _initialize (
flagDecoder ,
args ,
impl . init ,
impl . update ,
impl . subscriptions ,
function ( sendToApp , initialModel ) {
var view = impl . view ;
/**_UNUSED/
var domNode = args [ 'node' ] ;
//*/
/**/
var domNode = args && args [ 'node' ] ? args [ 'node' ] : _Debug _crash ( 0 ) ;
//*/
var currNode = _VirtualDom _virtualize ( domNode ) ;
return _Browser _makeAnimator ( initialModel , function ( model )
{
var nextNode = view ( model ) ;
var patches = _VirtualDom _diff ( currNode , nextNode ) ;
domNode = _VirtualDom _applyPatches ( domNode , currNode , patches , sendToApp ) ;
currNode = nextNode ;
} ) ;
}
) ;
} ) ;
// DOCUMENT
var _Debugger _document ;
var _Browser _document = _Debugger _document || F4 ( function ( impl , flagDecoder , debugMetadata , args )
{
return _Platform _initialize (
flagDecoder ,
args ,
impl . init ,
impl . update ,
impl . subscriptions ,
function ( sendToApp , initialModel ) {
var divertHrefToApp = impl . setup && impl . setup ( sendToApp )
var view = impl . view ;
var title = _VirtualDom _doc . title ;
var bodyNode = _VirtualDom _doc . body ;
var currNode = _VirtualDom _virtualize ( bodyNode ) ;
return _Browser _makeAnimator ( initialModel , function ( model )
{
_VirtualDom _divertHrefToApp = divertHrefToApp ;
var doc = view ( model ) ;
var nextNode = _VirtualDom _node ( 'body' ) ( _List _Nil ) ( doc . body ) ;
var patches = _VirtualDom _diff ( currNode , nextNode ) ;
bodyNode = _VirtualDom _applyPatches ( bodyNode , currNode , patches , sendToApp ) ;
currNode = nextNode ;
_VirtualDom _divertHrefToApp = 0 ;
( title !== doc . title ) && ( _VirtualDom _doc . title = title = doc . title ) ;
} ) ;
}
) ;
} ) ;
// ANIMATION
var _Browser _cancelAnimationFrame =
typeof cancelAnimationFrame !== 'undefined'
? cancelAnimationFrame
: function ( id ) { clearTimeout ( id ) ; } ;
var _Browser _requestAnimationFrame =
typeof requestAnimationFrame !== 'undefined'
? requestAnimationFrame
: function ( callback ) { return setTimeout ( callback , 1000 / 60 ) ; } ;
function _Browser _makeAnimator ( model , draw )
{
draw ( model ) ;
var state = 0 ;
function updateIfNeeded ( )
{
state = state === 1
? 0
: ( _Browser _requestAnimationFrame ( updateIfNeeded ) , draw ( model ) , 1 ) ;
}
return function ( nextModel , isSync )
{
model = nextModel ;
isSync
? ( draw ( model ) ,
state === 2 && ( state = 1 )
)
: ( state === 0 && _Browser _requestAnimationFrame ( updateIfNeeded ) ,
state = 2
) ;
} ;
}
// APPLICATION
function _Browser _application ( impl )
{
var onUrlChange = impl . onUrlChange ;
var onUrlRequest = impl . onUrlRequest ;
var key = function ( ) { key . a ( onUrlChange ( _Browser _getUrl ( ) ) ) ; } ;
return _Browser _document ( {
setup : function ( sendToApp )
{
key . a = sendToApp ;
_Browser _window . addEventListener ( 'popstate' , key ) ;
_Browser _window . navigator . userAgent . indexOf ( 'Trident' ) < 0 || _Browser _window . addEventListener ( 'hashchange' , key ) ;
return F2 ( function ( domNode , event )
{
if ( ! event . ctrlKey && ! event . metaKey && ! event . shiftKey && event . button < 1 && ! domNode . target && ! domNode . hasAttribute ( 'download' ) )
{
event . preventDefault ( ) ;
var href = domNode . href ;
var curr = _Browser _getUrl ( ) ;
var next = $elm$url$Url$fromString ( href ) . a ;
sendToApp ( onUrlRequest (
( next
&& curr . protocol === next . protocol
&& curr . host === next . host
&& curr . port _ . a === next . port _ . a
)
? $elm$browser$Browser$Internal ( next )
: $elm$browser$Browser$External ( href )
) ) ;
}
} ) ;
} ,
init : function ( flags )
{
return A3 ( impl . init , flags , _Browser _getUrl ( ) , key ) ;
} ,
view : impl . view ,
update : impl . update ,
subscriptions : impl . subscriptions
} ) ;
}
function _Browser _getUrl ( )
{
return $elm$url$Url$fromString ( _VirtualDom _doc . location . href ) . a || _Debug _crash ( 1 ) ;
}
var _Browser _go = F2 ( function ( key , n )
{
return A2 ( $elm$core$Task$perform , $elm$core$Basics$never , _Scheduler _binding ( function ( ) {
n && history . go ( n ) ;
key ( ) ;
} ) ) ;
} ) ;
var _Browser _pushUrl = F2 ( function ( key , url )
{
return A2 ( $elm$core$Task$perform , $elm$core$Basics$never , _Scheduler _binding ( function ( ) {
history . pushState ( { } , '' , url ) ;
key ( ) ;
} ) ) ;
} ) ;
var _Browser _replaceUrl = F2 ( function ( key , url )
{
return A2 ( $elm$core$Task$perform , $elm$core$Basics$never , _Scheduler _binding ( function ( ) {
history . replaceState ( { } , '' , url ) ;
key ( ) ;
} ) ) ;
} ) ;
// GLOBAL EVENTS
var _Browser _fakeNode = { addEventListener : function ( ) { } , removeEventListener : function ( ) { } } ;
var _Browser _doc = typeof document !== 'undefined' ? document : _Browser _fakeNode ;
var _Browser _window = typeof window !== 'undefined' ? window : _Browser _fakeNode ;
var _Browser _on = F3 ( function ( node , eventName , sendToSelf )
{
return _Scheduler _spawn ( _Scheduler _binding ( function ( callback )
{
function handler ( event ) { _Scheduler _rawSpawn ( sendToSelf ( event ) ) ; }
node . addEventListener ( eventName , handler , _VirtualDom _passiveSupported && { passive : true } ) ;
return function ( ) { node . removeEventListener ( eventName , handler ) ; } ;
} ) ) ;
} ) ;
var _Browser _decodeEvent = F2 ( function ( decoder , event )
{
var result = _Json _runHelp ( decoder , event ) ;
return $elm$core$Result$isOk ( result ) ? $elm$core$Maybe$Just ( result . a ) : $elm$core$Maybe$Nothing ;
} ) ;
// PAGE VISIBILITY
function _Browser _visibilityInfo ( )
{
return ( typeof _VirtualDom _doc . hidden !== 'undefined' )
? { hidden : 'hidden' , change : 'visibilitychange' }
:
( typeof _VirtualDom _doc . mozHidden !== 'undefined' )
? { hidden : 'mozHidden' , change : 'mozvisibilitychange' }
:
( typeof _VirtualDom _doc . msHidden !== 'undefined' )
? { hidden : 'msHidden' , change : 'msvisibilitychange' }
:
( typeof _VirtualDom _doc . webkitHidden !== 'undefined' )
? { hidden : 'webkitHidden' , change : 'webkitvisibilitychange' }
: { hidden : 'hidden' , change : 'visibilitychange' } ;
}
// ANIMATION FRAMES
function _Browser _rAF ( )
{
return _Scheduler _binding ( function ( callback )
{
var id = _Browser _requestAnimationFrame ( function ( ) {
callback ( _Scheduler _succeed ( Date . now ( ) ) ) ;
} ) ;
return function ( ) {
_Browser _cancelAnimationFrame ( id ) ;
} ;
} ) ;
}
function _Browser _now ( )
{
return _Scheduler _binding ( function ( callback )
{
callback ( _Scheduler _succeed ( Date . now ( ) ) ) ;
} ) ;
}
// DOM STUFF
function _Browser _withNode ( id , doStuff )
{
return _Scheduler _binding ( function ( callback )
{
_Browser _requestAnimationFrame ( function ( ) {
var node = document . getElementById ( id ) ;
callback ( node
? _Scheduler _succeed ( doStuff ( node ) )
: _Scheduler _fail ( $elm$browser$Browser$Dom$NotFound ( id ) )
) ;
} ) ;
} ) ;
}
function _Browser _withWindow ( doStuff )
{
return _Scheduler _binding ( function ( callback )
{
_Browser _requestAnimationFrame ( function ( ) {
callback ( _Scheduler _succeed ( doStuff ( ) ) ) ;
} ) ;
} ) ;
}
// FOCUS and BLUR
var _Browser _call = F2 ( function ( functionName , id )
{
return _Browser _withNode ( id , function ( node ) {
node [ functionName ] ( ) ;
return _Utils _Tuple0 ;
} ) ;
} ) ;
// WINDOW VIEWPORT
function _Browser _getViewport ( )
{
return {
scene : _Browser _getScene ( ) ,
viewport : {
x : _Browser _window . pageXOffset ,
y : _Browser _window . pageYOffset ,
width : _Browser _doc . documentElement . clientWidth ,
height : _Browser _doc . documentElement . clientHeight
}
} ;
}
function _Browser _getScene ( )
{
var body = _Browser _doc . body ;
var elem = _Browser _doc . documentElement ;
return {
width : Math . max ( body . scrollWidth , body . offsetWidth , elem . scrollWidth , elem . offsetWidth , elem . clientWidth ) ,
height : Math . max ( body . scrollHeight , body . offsetHeight , elem . scrollHeight , elem . offsetHeight , elem . clientHeight )
} ;
}
var _Browser _setViewport = F2 ( function ( x , y )
{
return _Browser _withWindow ( function ( )
{
_Browser _window . scroll ( x , y ) ;
return _Utils _Tuple0 ;
} ) ;
} ) ;
// ELEMENT VIEWPORT
function _Browser _getViewportOf ( id )
{
return _Browser _withNode ( id , function ( node )
{
return {
scene : {
width : node . scrollWidth ,
height : node . scrollHeight
} ,
viewport : {
x : node . scrollLeft ,
y : node . scrollTop ,
width : node . clientWidth ,
height : node . clientHeight
}
} ;
} ) ;
}
var _Browser _setViewportOf = F3 ( function ( id , x , y )
{
return _Browser _withNode ( id , function ( node )
{
node . scrollLeft = x ;
node . scrollTop = y ;
return _Utils _Tuple0 ;
} ) ;
} ) ;
// ELEMENT
function _Browser _getElement ( id )
{
return _Browser _withNode ( id , function ( node )
{
var rect = node . getBoundingClientRect ( ) ;
var x = _Browser _window . pageXOffset ;
var y = _Browser _window . pageYOffset ;
return {
scene : _Browser _getScene ( ) ,
viewport : {
x : x ,
y : y ,
width : _Browser _doc . documentElement . clientWidth ,
height : _Browser _doc . documentElement . clientHeight
} ,
element : {
x : x + rect . left ,
y : y + rect . top ,
width : rect . width ,
height : rect . height
}
} ;
} ) ;
}
// LOAD and RELOAD
function _Browser _reload ( skipCache )
{
return A2 ( $elm$core$Task$perform , $elm$core$Basics$never , _Scheduler _binding ( function ( callback )
{
_VirtualDom _doc . location . reload ( skipCache ) ;
} ) ) ;
}
function _Browser _load ( url )
{
return A2 ( $elm$core$Task$perform , $elm$core$Basics$never , _Scheduler _binding ( function ( callback )
{
try
{
_Browser _window . location = url ;
}
catch ( err )
{
// Only Firefox can throw a NS_ERROR_MALFORMED_URI exception here.
// Other browsers reload the page, so let's be consistent about that.
_VirtualDom _doc . location . reload ( false ) ;
}
} ) ) ;
}
// SEND REQUEST
var _Http _toTask = F3 ( function ( router , toTask , request )
{
return _Scheduler _binding ( function ( callback )
{
function done ( response ) {
callback ( toTask ( request . expect . a ( response ) ) ) ;
}
var xhr = new XMLHttpRequest ( ) ;
xhr . addEventListener ( 'error' , function ( ) { done ( $elm$http$Http$NetworkError _ ) ; } ) ;
xhr . addEventListener ( 'timeout' , function ( ) { done ( $elm$http$Http$Timeout _ ) ; } ) ;
xhr . addEventListener ( 'load' , function ( ) { done ( _Http _toResponse ( request . expect . b , xhr ) ) ; } ) ;
$elm$core$Maybe$isJust ( request . tracker ) && _Http _track ( router , xhr , request . tracker . a ) ;
try {
xhr . open ( request . method , request . url , true ) ;
} catch ( e ) {
return done ( $elm$http$Http$BadUrl _ ( request . url ) ) ;
}
_Http _configureRequest ( xhr , request ) ;
request . body . a && xhr . setRequestHeader ( 'Content-Type' , request . body . a ) ;
xhr . send ( request . body . b ) ;
return function ( ) { xhr . c = true ; xhr . abort ( ) ; } ;
} ) ;
} ) ;
// CONFIGURE
function _Http _configureRequest ( xhr , request )
{
for ( var headers = request . headers ; headers . b ; headers = headers . b ) // WHILE_CONS
{
xhr . setRequestHeader ( headers . a . a , headers . a . b ) ;
}
xhr . timeout = request . timeout . a || 0 ;
xhr . responseType = request . expect . d ;
xhr . withCredentials = request . allowCookiesFromOtherDomains ;
}
// RESPONSES
function _Http _toResponse ( toBody , xhr )
{
return A2 (
200 <= xhr . status && xhr . status < 300 ? $elm$http$Http$GoodStatus _ : $elm$http$Http$BadStatus _ ,
_Http _toMetadata ( xhr ) ,
toBody ( xhr . response )
) ;
}
// METADATA
function _Http _toMetadata ( xhr )
{
return {
url : xhr . responseURL ,
statusCode : xhr . status ,
statusText : xhr . statusText ,
headers : _Http _parseHeaders ( xhr . getAllResponseHeaders ( ) )
} ;
}
// HEADERS
function _Http _parseHeaders ( rawHeaders )
{
if ( ! rawHeaders )
{
return $elm$core$Dict$empty ;
}
var headers = $elm$core$Dict$empty ;
var headerPairs = rawHeaders . split ( '\r\n' ) ;
for ( var i = headerPairs . length ; i -- ; )
{
var headerPair = headerPairs [ i ] ;
var index = headerPair . indexOf ( ': ' ) ;
if ( index > 0 )
{
var key = headerPair . substring ( 0 , index ) ;
var value = headerPair . substring ( index + 2 ) ;
headers = A3 ( $elm$core$Dict$update , key , function ( oldValue ) {
return $elm$core$Maybe$Just ( $elm$core$Maybe$isJust ( oldValue )
? value + ', ' + oldValue . a
: value
) ;
} , headers ) ;
}
}
return headers ;
}
// EXPECT
var _Http _expect = F3 ( function ( type , toBody , toValue )
{
return {
$ : 0 ,
d : type ,
b : toBody ,
a : toValue
} ;
} ) ;
var _Http _mapExpect = F2 ( function ( func , expect )
{
return {
$ : 0 ,
d : expect . d ,
b : expect . b ,
a : function ( x ) { return func ( expect . a ( x ) ) ; }
} ;
} ) ;
function _Http _toDataView ( arrayBuffer )
{
return new DataView ( arrayBuffer ) ;
}
// BODY and PARTS
var _Http _emptyBody = { $ : 0 } ;
var _Http _pair = F2 ( function ( a , b ) { return { $ : 0 , a : a , b : b } ; } ) ;
function _Http _toFormData ( parts )
{
for ( var formData = new FormData ( ) ; parts . b ; parts = parts . b ) // WHILE_CONS
{
var part = parts . a ;
formData . append ( part . a , part . b ) ;
}
return formData ;
}
var _Http _bytesToBlob = F2 ( function ( mime , bytes )
{
return new Blob ( [ bytes ] , { type : mime } ) ;
} ) ;
// PROGRESS
function _Http _track ( router , xhr , tracker )
{
// TODO check out lengthComputable on loadstart event
xhr . upload . addEventListener ( 'progress' , function ( event ) {
if ( xhr . c ) { return ; }
_Scheduler _rawSpawn ( A2 ( $elm$core$Platform$sendToSelf , router , _Utils _Tuple2 ( tracker , $elm$http$Http$Sending ( {
sent : event . loaded ,
size : event . total
} ) ) ) ) ;
} ) ;
xhr . addEventListener ( 'progress' , function ( event ) {
if ( xhr . c ) { return ; }
_Scheduler _rawSpawn ( A2 ( $elm$core$Platform$sendToSelf , router , _Utils _Tuple2 ( tracker , $elm$http$Http$Receiving ( {
received : event . loaded ,
size : event . lengthComputable ? $elm$core$Maybe$Just ( event . total ) : $elm$core$Maybe$Nothing
} ) ) ) ) ;
} ) ;
} var $elm$core$Basics$EQ = { $ : 'EQ' } ;
var $elm$core$Basics$GT = { $ : 'GT' } ;
var $elm$core$Basics$LT = { $ : 'LT' } ;
var $elm$core$List$cons = _List _cons ;
var $elm$core$Dict$foldr = F3 (
function ( func , acc , t ) {
foldr :
while ( true ) {
if ( t . $ === 'RBEmpty_elm_builtin' ) {
return acc ;
} else {
var key = t . b ;
var value = t . c ;
var left = t . d ;
var right = t . e ;
var $temp$func = func ,
$temp$acc = A3 (
func ,
key ,
value ,
A3 ( $elm$core$Dict$foldr , func , acc , right ) ) ,
$temp$t = left ;
func = $temp$func ;
acc = $temp$acc ;
t = $temp$t ;
continue foldr ;
}
}
} ) ;
var $elm$core$Dict$toList = function ( dict ) {
return A3 (
$elm$core$Dict$foldr ,
F3 (
function ( key , value , list ) {
return A2 (
$elm$core$List$cons ,
_Utils _Tuple2 ( key , value ) ,
list ) ;
} ) ,
_List _Nil ,
dict ) ;
} ;
var $elm$core$Dict$keys = function ( dict ) {
return A3 (
$elm$core$Dict$foldr ,
F3 (
function ( key , value , keyList ) {
return A2 ( $elm$core$List$cons , key , keyList ) ;
} ) ,
_List _Nil ,
dict ) ;
} ;
var $elm$core$Set$toList = function ( _v0 ) {
var dict = _v0 . a ;
return $elm$core$Dict$keys ( dict ) ;
} ;
var $elm$core$Elm$JsArray$foldr = _JsArray _foldr ;
var $elm$core$Array$foldr = F3 (
function ( func , baseCase , _v0 ) {
var tree = _v0 . c ;
var tail = _v0 . d ;
var helper = F2 (
function ( node , acc ) {
if ( node . $ === 'SubTree' ) {
var subTree = node . a ;
return A3 ( $elm$core$Elm$JsArray$foldr , helper , acc , subTree ) ;
} else {
var values = node . a ;
return A3 ( $elm$core$Elm$JsArray$foldr , func , acc , values ) ;
}
} ) ;
return A3 (
$elm$core$Elm$JsArray$foldr ,
helper ,
A3 ( $elm$core$Elm$JsArray$foldr , func , baseCase , tail ) ,
tree ) ;
} ) ;
var $elm$core$Array$toList = function ( array ) {
return A3 ( $elm$core$Array$foldr , $elm$core$List$cons , _List _Nil , array ) ;
} ;
var $elm$core$Result$Err = function ( a ) {
return { $ : 'Err' , a : a } ;
} ;
var $elm$json$Json$Decode$Failure = F2 (
function ( a , b ) {
return { $ : 'Failure' , a : a , b : b } ;
} ) ;
var $elm$json$Json$Decode$Field = F2 (
function ( a , b ) {
return { $ : 'Field' , a : a , b : b } ;
} ) ;
var $elm$json$Json$Decode$Index = F2 (
function ( a , b ) {
return { $ : 'Index' , a : a , b : b } ;
} ) ;
var $elm$core$Result$Ok = function ( a ) {
return { $ : 'Ok' , a : a } ;
} ;
var $elm$json$Json$Decode$OneOf = function ( a ) {
return { $ : 'OneOf' , a : a } ;
} ;
var $elm$core$Basics$False = { $ : 'False' } ;
var $elm$core$Basics$add = _Basics _add ;
var $elm$core$Maybe$Just = function ( a ) {
return { $ : 'Just' , a : a } ;
} ;
var $elm$core$Maybe$Nothing = { $ : 'Nothing' } ;
var $elm$core$String$all = _String _all ;
var $elm$core$Basics$and = _Basics _and ;
var $elm$core$Basics$append = _Utils _append ;
var $elm$json$Json$Encode$encode = _Json _encode ;
var $elm$core$String$fromInt = _String _fromNumber ;
var $elm$core$String$join = F2 (
function ( sep , chunks ) {
return A2 (
_String _join ,
sep ,
_List _toArray ( chunks ) ) ;
} ) ;
var $elm$core$String$split = F2 (
function ( sep , string ) {
return _List _fromArray (
A2 ( _String _split , sep , string ) ) ;
} ) ;
var $elm$json$Json$Decode$indent = function ( str ) {
return A2 (
$elm$core$String$join ,
'\n ' ,
A2 ( $elm$core$String$split , '\n' , str ) ) ;
} ;
var $elm$core$List$foldl = F3 (
function ( func , acc , list ) {
foldl :
while ( true ) {
if ( ! list . b ) {
return acc ;
} else {
var x = list . a ;
var xs = list . b ;
var $temp$func = func ,
$temp$acc = A2 ( func , x , acc ) ,
$temp$list = xs ;
func = $temp$func ;
acc = $temp$acc ;
list = $temp$list ;
continue foldl ;
}
}
} ) ;
var $elm$core$List$length = function ( xs ) {
return A3 (
$elm$core$List$foldl ,
F2 (
function ( _v0 , i ) {
return i + 1 ;
} ) ,
0 ,
xs ) ;
} ;
var $elm$core$List$map2 = _List _map2 ;
var $elm$core$Basics$le = _Utils _le ;
var $elm$core$Basics$sub = _Basics _sub ;
var $elm$core$List$rangeHelp = F3 (
function ( lo , hi , list ) {
rangeHelp :
while ( true ) {
if ( _Utils _cmp ( lo , hi ) < 1 ) {
var $temp$lo = lo ,
$temp$hi = hi - 1 ,
$temp$list = A2 ( $elm$core$List$cons , hi , list ) ;
lo = $temp$lo ;
hi = $temp$hi ;
list = $temp$list ;
continue rangeHelp ;
} else {
return list ;
}
}
} ) ;
var $elm$core$List$range = F2 (
function ( lo , hi ) {
return A3 ( $elm$core$List$rangeHelp , lo , hi , _List _Nil ) ;
} ) ;
var $elm$core$List$indexedMap = F2 (
function ( f , xs ) {
return A3 (
$elm$core$List$map2 ,
f ,
A2 (
$elm$core$List$range ,
0 ,
$elm$core$List$length ( xs ) - 1 ) ,
xs ) ;
} ) ;
var $elm$core$Char$toCode = _Char _toCode ;
var $elm$core$Char$isLower = function ( _char ) {
var code = $elm$core$Char$toCode ( _char ) ;
return ( 97 <= code ) && ( code <= 122 ) ;
} ;
var $elm$core$Char$isUpper = function ( _char ) {
var code = $elm$core$Char$toCode ( _char ) ;
return ( code <= 90 ) && ( 65 <= code ) ;
} ;
var $elm$core$Basics$or = _Basics _or ;
var $elm$core$Char$isAlpha = function ( _char ) {
return $elm$core$Char$isLower ( _char ) || $elm$core$Char$isUpper ( _char ) ;
} ;
var $elm$core$Char$isDigit = function ( _char ) {
var code = $elm$core$Char$toCode ( _char ) ;
return ( code <= 57 ) && ( 48 <= code ) ;
} ;
var $elm$core$Char$isAlphaNum = function ( _char ) {
return $elm$core$Char$isLower ( _char ) || ( $elm$core$Char$isUpper ( _char ) || $elm$core$Char$isDigit ( _char ) ) ;
} ;
var $elm$core$List$reverse = function ( list ) {
return A3 ( $elm$core$List$foldl , $elm$core$List$cons , _List _Nil , list ) ;
} ;
var $elm$core$String$uncons = _String _uncons ;
var $elm$json$Json$Decode$errorOneOf = F2 (
function ( i , error ) {
return '\n\n(' + ( $elm$core$String$fromInt ( i + 1 ) + ( ') ' + $elm$json$Json$Decode$indent (
$elm$json$Json$Decode$errorToString ( error ) ) ) ) ;
} ) ;
var $elm$json$Json$Decode$errorToString = function ( error ) {
return A2 ( $elm$json$Json$Decode$errorToStringHelp , error , _List _Nil ) ;
} ;
var $elm$json$Json$Decode$errorToStringHelp = F2 (
function ( error , context ) {
errorToStringHelp :
while ( true ) {
switch ( error . $ ) {
case 'Field' :
var f = error . a ;
var err = error . b ;
var isSimple = function ( ) {
var _v1 = $elm$core$String$uncons ( f ) ;
if ( _v1 . $ === 'Nothing' ) {
return false ;
} else {
var _v2 = _v1 . a ;
var _char = _v2 . a ;
var rest = _v2 . b ;
return $elm$core$Char$isAlpha ( _char ) && A2 ( $elm$core$String$all , $elm$core$Char$isAlphaNum , rest ) ;
}
} ( ) ;
var fieldName = isSimple ? ( '.' + f ) : ( '[\'' + ( f + '\']' ) ) ;
var $temp$error = err ,
$temp$context = A2 ( $elm$core$List$cons , fieldName , context ) ;
error = $temp$error ;
context = $temp$context ;
continue errorToStringHelp ;
case 'Index' :
var i = error . a ;
var err = error . b ;
var indexName = '[' + ( $elm$core$String$fromInt ( i ) + ']' ) ;
var $temp$error = err ,
$temp$context = A2 ( $elm$core$List$cons , indexName , context ) ;
error = $temp$error ;
context = $temp$context ;
continue errorToStringHelp ;
case 'OneOf' :
var errors = error . a ;
if ( ! errors . b ) {
return 'Ran into a Json.Decode.oneOf with no possibilities' + function ( ) {
if ( ! context . b ) {
return '!' ;
} else {
return ' at json' + A2 (
$elm$core$String$join ,
'' ,
$elm$core$List$reverse ( context ) ) ;
}
} ( ) ;
} else {
if ( ! errors . b . b ) {
var err = errors . a ;
var $temp$error = err ,
$temp$context = context ;
error = $temp$error ;
context = $temp$context ;
continue errorToStringHelp ;
} else {
var starter = function ( ) {
if ( ! context . b ) {
return 'Json.Decode.oneOf' ;
} else {
return 'The Json.Decode.oneOf at json' + A2 (
$elm$core$String$join ,
'' ,
$elm$core$List$reverse ( context ) ) ;
}
} ( ) ;
var introduction = starter + ( ' failed in the following ' + ( $elm$core$String$fromInt (
$elm$core$List$length ( errors ) ) + ' ways:' ) ) ;
return A2 (
$elm$core$String$join ,
'\n\n' ,
A2 (
$elm$core$List$cons ,
introduction ,
A2 ( $elm$core$List$indexedMap , $elm$json$Json$Decode$errorOneOf , errors ) ) ) ;
}
}
default :
var msg = error . a ;
var json = error . b ;
var introduction = function ( ) {
if ( ! context . b ) {
return 'Problem with the given value:\n\n' ;
} else {
return 'Problem with the value at json' + ( A2 (
$elm$core$String$join ,
'' ,
$elm$core$List$reverse ( context ) ) + ':\n\n ' ) ;
}
} ( ) ;
return introduction + ( $elm$json$Json$Decode$indent (
A2 ( $elm$json$Json$Encode$encode , 4 , json ) ) + ( '\n\n' + msg ) ) ;
}
}
} ) ;
var $elm$core$Array$branchFactor = 32 ;
var $elm$core$Array$Array _elm _builtin = F4 (
function ( a , b , c , d ) {
return { $ : 'Array_elm_builtin' , a : a , b : b , c : c , d : d } ;
} ) ;
var $elm$core$Elm$JsArray$empty = _JsArray _empty ;
var $elm$core$Basics$ceiling = _Basics _ceiling ;
var $elm$core$Basics$fdiv = _Basics _fdiv ;
var $elm$core$Basics$logBase = F2 (
function ( base , number ) {
return _Basics _log ( number ) / _Basics _log ( base ) ;
} ) ;
var $elm$core$Basics$toFloat = _Basics _toFloat ;
var $elm$core$Array$shiftStep = $elm$core$Basics$ceiling (
A2 ( $elm$core$Basics$logBase , 2 , $elm$core$Array$branchFactor ) ) ;
var $elm$core$Array$empty = A4 ( $elm$core$Array$Array _elm _builtin , 0 , $elm$core$Array$shiftStep , $elm$core$Elm$JsArray$empty , $elm$core$Elm$JsArray$empty ) ;
var $elm$core$Elm$JsArray$initialize = _JsArray _initialize ;
var $elm$core$Array$Leaf = function ( a ) {
return { $ : 'Leaf' , a : a } ;
} ;
var $elm$core$Basics$apL = F2 (
function ( f , x ) {
return f ( x ) ;
} ) ;
var $elm$core$Basics$apR = F2 (
function ( x , f ) {
return f ( x ) ;
} ) ;
var $elm$core$Basics$eq = _Utils _equal ;
var $elm$core$Basics$floor = _Basics _floor ;
var $elm$core$Elm$JsArray$length = _JsArray _length ;
var $elm$core$Basics$gt = _Utils _gt ;
var $elm$core$Basics$max = F2 (
function ( x , y ) {
return ( _Utils _cmp ( x , y ) > 0 ) ? x : y ;
} ) ;
var $elm$core$Basics$mul = _Basics _mul ;
var $elm$core$Array$SubTree = function ( a ) {
return { $ : 'SubTree' , a : a } ;
} ;
var $elm$core$Elm$JsArray$initializeFromList = _JsArray _initializeFromList ;
var $elm$core$Array$compressNodes = F2 (
function ( nodes , acc ) {
compressNodes :
while ( true ) {
var _v0 = A2 ( $elm$core$Elm$JsArray$initializeFromList , $elm$core$Array$branchFactor , nodes ) ;
var node = _v0 . a ;
var remainingNodes = _v0 . b ;
var newAcc = A2 (
$elm$core$List$cons ,
$elm$core$Array$SubTree ( node ) ,
acc ) ;
if ( ! remainingNodes . b ) {
return $elm$core$List$reverse ( newAcc ) ;
} else {
var $temp$nodes = remainingNodes ,
$temp$acc = newAcc ;
nodes = $temp$nodes ;
acc = $temp$acc ;
continue compressNodes ;
}
}
} ) ;
var $elm$core$Tuple$first = function ( _v0 ) {
var x = _v0 . a ;
return x ;
} ;
var $elm$core$Array$treeFromBuilder = F2 (
function ( nodeList , nodeListSize ) {
treeFromBuilder :
while ( true ) {
var newNodeSize = $elm$core$Basics$ceiling ( nodeListSize / $elm$core$Array$branchFactor ) ;
if ( newNodeSize === 1 ) {
return A2 ( $elm$core$Elm$JsArray$initializeFromList , $elm$core$Array$branchFactor , nodeList ) . a ;
} else {
var $temp$nodeList = A2 ( $elm$core$Array$compressNodes , nodeList , _List _Nil ) ,
$temp$nodeListSize = newNodeSize ;
nodeList = $temp$nodeList ;
nodeListSize = $temp$nodeListSize ;
continue treeFromBuilder ;
}
}
} ) ;
var $elm$core$Array$builderToArray = F2 (
function ( reverseNodeList , builder ) {
if ( ! builder . nodeListSize ) {
return A4 (
$elm$core$Array$Array _elm _builtin ,
$elm$core$Elm$JsArray$length ( builder . tail ) ,
$elm$core$Array$shiftStep ,
$elm$core$Elm$JsArray$empty ,
builder . tail ) ;
} else {
var treeLen = builder . nodeListSize * $elm$core$Array$branchFactor ;
var depth = $elm$core$Basics$floor (
A2 ( $elm$core$Basics$logBase , $elm$core$Array$branchFactor , treeLen - 1 ) ) ;
var correctNodeList = reverseNodeList ? $elm$core$List$reverse ( builder . nodeList ) : builder . nodeList ;
var tree = A2 ( $elm$core$Array$treeFromBuilder , correctNodeList , builder . nodeListSize ) ;
return A4 (
$elm$core$Array$Array _elm _builtin ,
$elm$core$Elm$JsArray$length ( builder . tail ) + treeLen ,
A2 ( $elm$core$Basics$max , 5 , depth * $elm$core$Array$shiftStep ) ,
tree ,
builder . tail ) ;
}
} ) ;
var $elm$core$Basics$idiv = _Basics _idiv ;
var $elm$core$Basics$lt = _Utils _lt ;
var $elm$core$Array$initializeHelp = F5 (
function ( fn , fromIndex , len , nodeList , tail ) {
initializeHelp :
while ( true ) {
if ( fromIndex < 0 ) {
return A2 (
$elm$core$Array$builderToArray ,
false ,
{ nodeList : nodeList , nodeListSize : ( len / $elm$core$Array$branchFactor ) | 0 , tail : tail } ) ;
} else {
var leaf = $elm$core$Array$Leaf (
A3 ( $elm$core$Elm$JsArray$initialize , $elm$core$Array$branchFactor , fromIndex , fn ) ) ;
var $temp$fn = fn ,
$temp$fromIndex = fromIndex - $elm$core$Array$branchFactor ,
$temp$len = len ,
$temp$nodeList = A2 ( $elm$core$List$cons , leaf , nodeList ) ,
$temp$tail = tail ;
fn = $temp$fn ;
fromIndex = $temp$fromIndex ;
len = $temp$len ;
nodeList = $temp$nodeList ;
tail = $temp$tail ;
continue initializeHelp ;
}
}
} ) ;
var $elm$core$Basics$remainderBy = _Basics _remainderBy ;
var $elm$core$Array$initialize = F2 (
function ( len , fn ) {
if ( len <= 0 ) {
return $elm$core$Array$empty ;
} else {
var tailLen = len % $elm$core$Array$branchFactor ;
var tail = A3 ( $elm$core$Elm$JsArray$initialize , tailLen , len - tailLen , fn ) ;
var initialFromIndex = ( len - tailLen ) - $elm$core$Array$branchFactor ;
return A5 ( $elm$core$Array$initializeHelp , fn , initialFromIndex , len , _List _Nil , tail ) ;
}
} ) ;
var $elm$core$Basics$True = { $ : 'True' } ;
var $elm$core$Result$isOk = function ( result ) {
if ( result . $ === 'Ok' ) {
return true ;
} else {
return false ;
}
} ;
var $elm$json$Json$Decode$map = _Json _map1 ;
var $elm$json$Json$Decode$map2 = _Json _map2 ;
var $elm$json$Json$Decode$succeed = _Json _succeed ;
var $elm$virtual _dom$VirtualDom$toHandlerInt = function ( handler ) {
switch ( handler . $ ) {
case 'Normal' :
return 0 ;
case 'MayStopPropagation' :
return 1 ;
case 'MayPreventDefault' :
return 2 ;
default :
return 3 ;
}
} ;
var $elm$browser$Browser$External = function ( a ) {
return { $ : 'External' , a : a } ;
} ;
var $elm$browser$Browser$Internal = function ( a ) {
return { $ : 'Internal' , a : a } ;
} ;
var $elm$core$Basics$identity = function ( x ) {
return x ;
} ;
var $elm$browser$Browser$Dom$NotFound = function ( a ) {
return { $ : 'NotFound' , a : a } ;
} ;
var $elm$url$Url$Http = { $ : 'Http' } ;
var $elm$url$Url$Https = { $ : 'Https' } ;
var $elm$url$Url$Url = F6 (
function ( protocol , host , port _ , path , query , fragment ) {
return { fragment : fragment , host : host , path : path , port _ : port _ , protocol : protocol , query : query } ;
} ) ;
var $elm$core$String$contains = _String _contains ;
var $elm$core$String$length = _String _length ;
var $elm$core$String$slice = _String _slice ;
var $elm$core$String$dropLeft = F2 (
function ( n , string ) {
return ( n < 1 ) ? string : A3 (
$elm$core$String$slice ,
n ,
$elm$core$String$length ( string ) ,
string ) ;
} ) ;
var $elm$core$String$indexes = _String _indexes ;
var $elm$core$String$isEmpty = function ( string ) {
return string === '' ;
} ;
var $elm$core$String$left = F2 (
function ( n , string ) {
return ( n < 1 ) ? '' : A3 ( $elm$core$String$slice , 0 , n , string ) ;
} ) ;
var $elm$core$String$toInt = _String _toInt ;
var $elm$url$Url$chompBeforePath = F5 (
function ( protocol , path , params , frag , str ) {
if ( $elm$core$String$isEmpty ( str ) || A2 ( $elm$core$String$contains , '@' , str ) ) {
return $elm$core$Maybe$Nothing ;
} else {
var _v0 = A2 ( $elm$core$String$indexes , ':' , str ) ;
if ( ! _v0 . b ) {
return $elm$core$Maybe$Just (
A6 ( $elm$url$Url$Url , protocol , str , $elm$core$Maybe$Nothing , path , params , frag ) ) ;
} else {
if ( ! _v0 . b . b ) {
var i = _v0 . a ;
var _v1 = $elm$core$String$toInt (
A2 ( $elm$core$String$dropLeft , i + 1 , str ) ) ;
if ( _v1 . $ === 'Nothing' ) {
return $elm$core$Maybe$Nothing ;
} else {
var port _ = _v1 ;
return $elm$core$Maybe$Just (
A6 (
$elm$url$Url$Url ,
protocol ,
A2 ( $elm$core$String$left , i , str ) ,
port _ ,
path ,
params ,
frag ) ) ;
}
} else {
return $elm$core$Maybe$Nothing ;
}
}
}
} ) ;
var $elm$url$Url$chompBeforeQuery = F4 (
function ( protocol , params , frag , str ) {
if ( $elm$core$String$isEmpty ( str ) ) {
return $elm$core$Maybe$Nothing ;
} else {
var _v0 = A2 ( $elm$core$String$indexes , '/' , str ) ;
if ( ! _v0 . b ) {
return A5 ( $elm$url$Url$chompBeforePath , protocol , '/' , params , frag , str ) ;
} else {
var i = _v0 . a ;
return A5 (
$elm$url$Url$chompBeforePath ,
protocol ,
A2 ( $elm$core$String$dropLeft , i , str ) ,
params ,
frag ,
A2 ( $elm$core$String$left , i , str ) ) ;
}
}
} ) ;
var $elm$url$Url$chompBeforeFragment = F3 (
function ( protocol , frag , str ) {
if ( $elm$core$String$isEmpty ( str ) ) {
return $elm$core$Maybe$Nothing ;
} else {
var _v0 = A2 ( $elm$core$String$indexes , '?' , str ) ;
if ( ! _v0 . b ) {
return A4 ( $elm$url$Url$chompBeforeQuery , protocol , $elm$core$Maybe$Nothing , frag , str ) ;
} else {
var i = _v0 . a ;
return A4 (
$elm$url$Url$chompBeforeQuery ,
protocol ,
$elm$core$Maybe$Just (
A2 ( $elm$core$String$dropLeft , i + 1 , str ) ) ,
frag ,
A2 ( $elm$core$String$left , i , str ) ) ;
}
}
} ) ;
var $elm$url$Url$chompAfterProtocol = F2 (
function ( protocol , str ) {
if ( $elm$core$String$isEmpty ( str ) ) {
return $elm$core$Maybe$Nothing ;
} else {
var _v0 = A2 ( $elm$core$String$indexes , '#' , str ) ;
if ( ! _v0 . b ) {
return A3 ( $elm$url$Url$chompBeforeFragment , protocol , $elm$core$Maybe$Nothing , str ) ;
} else {
var i = _v0 . a ;
return A3 (
$elm$url$Url$chompBeforeFragment ,
protocol ,
$elm$core$Maybe$Just (
A2 ( $elm$core$String$dropLeft , i + 1 , str ) ) ,
A2 ( $elm$core$String$left , i , str ) ) ;
}
}
} ) ;
var $elm$core$String$startsWith = _String _startsWith ;
var $elm$url$Url$fromString = function ( str ) {
return A2 ( $elm$core$String$startsWith , 'http://' , str ) ? A2 (
$elm$url$Url$chompAfterProtocol ,
$elm$url$Url$Http ,
A2 ( $elm$core$String$dropLeft , 7 , str ) ) : ( A2 ( $elm$core$String$startsWith , 'https://' , str ) ? A2 (
$elm$url$Url$chompAfterProtocol ,
$elm$url$Url$Https ,
A2 ( $elm$core$String$dropLeft , 8 , str ) ) : $elm$core$Maybe$Nothing ) ;
} ;
var $elm$core$Basics$never = function ( _v0 ) {
never :
while ( true ) {
var nvr = _v0 . a ;
var $temp$ _v0 = nvr ;
_v0 = $temp$ _v0 ;
continue never ;
}
} ;
var $elm$core$Task$Perform = function ( a ) {
return { $ : 'Perform' , a : a } ;
} ;
var $elm$core$Task$succeed = _Scheduler _succeed ;
var $elm$core$Task$init = $elm$core$Task$succeed ( _Utils _Tuple0 ) ;
var $elm$core$List$foldrHelper = F4 (
function ( fn , acc , ctr , ls ) {
if ( ! ls . b ) {
return acc ;
} else {
var a = ls . a ;
var r1 = ls . b ;
if ( ! r1 . b ) {
return A2 ( fn , a , acc ) ;
} else {
var b = r1 . a ;
var r2 = r1 . b ;
if ( ! r2 . b ) {
return A2 (
fn ,
a ,
A2 ( fn , b , acc ) ) ;
} else {
var c = r2 . a ;
var r3 = r2 . b ;
if ( ! r3 . b ) {
return A2 (
fn ,
a ,
A2 (
fn ,
b ,
A2 ( fn , c , acc ) ) ) ;
} else {
var d = r3 . a ;
var r4 = r3 . b ;
var res = ( ctr > 500 ) ? A3 (
$elm$core$List$foldl ,
fn ,
acc ,
$elm$core$List$reverse ( r4 ) ) : A4 ( $elm$core$List$foldrHelper , fn , acc , ctr + 1 , r4 ) ;
return A2 (
fn ,
a ,
A2 (
fn ,
b ,
A2 (
fn ,
c ,
A2 ( fn , d , res ) ) ) ) ;
}
}
}
}
} ) ;
var $elm$core$List$foldr = F3 (
function ( fn , acc , ls ) {
return A4 ( $elm$core$List$foldrHelper , fn , acc , 0 , ls ) ;
} ) ;
var $elm$core$List$map = F2 (
function ( f , xs ) {
return A3 (
$elm$core$List$foldr ,
F2 (
function ( x , acc ) {
return A2 (
$elm$core$List$cons ,
f ( x ) ,
acc ) ;
} ) ,
_List _Nil ,
xs ) ;
} ) ;
var $elm$core$Task$andThen = _Scheduler _andThen ;
var $elm$core$Task$map = F2 (
function ( func , taskA ) {
return A2 (
$elm$core$Task$andThen ,
function ( a ) {
return $elm$core$Task$succeed (
func ( a ) ) ;
} ,
taskA ) ;
} ) ;
var $elm$core$Task$map2 = F3 (
function ( func , taskA , taskB ) {
return A2 (
$elm$core$Task$andThen ,
function ( a ) {
return A2 (
$elm$core$Task$andThen ,
function ( b ) {
return $elm$core$Task$succeed (
A2 ( func , a , b ) ) ;
} ,
taskB ) ;
} ,
taskA ) ;
} ) ;
var $elm$core$Task$sequence = function ( tasks ) {
return A3 (
$elm$core$List$foldr ,
$elm$core$Task$map2 ( $elm$core$List$cons ) ,
$elm$core$Task$succeed ( _List _Nil ) ,
tasks ) ;
} ;
var $elm$core$Platform$sendToApp = _Platform _sendToApp ;
var $elm$core$Task$spawnCmd = F2 (
function ( router , _v0 ) {
var task = _v0 . a ;
return _Scheduler _spawn (
A2 (
$elm$core$Task$andThen ,
$elm$core$Platform$sendToApp ( router ) ,
task ) ) ;
} ) ;
var $elm$core$Task$onEffects = F3 (
function ( router , commands , state ) {
return A2 (
$elm$core$Task$map ,
function ( _v0 ) {
return _Utils _Tuple0 ;
} ,
$elm$core$Task$sequence (
A2 (
$elm$core$List$map ,
$elm$core$Task$spawnCmd ( router ) ,
commands ) ) ) ;
} ) ;
var $elm$core$Task$onSelfMsg = F3 (
function ( _v0 , _v1 , _v2 ) {
return $elm$core$Task$succeed ( _Utils _Tuple0 ) ;
} ) ;
var $elm$core$Task$cmdMap = F2 (
function ( tagger , _v0 ) {
var task = _v0 . a ;
return $elm$core$Task$Perform (
A2 ( $elm$core$Task$map , tagger , task ) ) ;
} ) ;
_Platform _effectManagers [ 'Task' ] = _Platform _createManager ( $elm$core$Task$init , $elm$core$Task$onEffects , $elm$core$Task$onSelfMsg , $elm$core$Task$cmdMap ) ;
var $elm$core$Task$command = _Platform _leaf ( 'Task' ) ;
var $elm$core$Task$perform = F2 (
function ( toMessage , task ) {
return $elm$core$Task$command (
$elm$core$Task$Perform (
A2 ( $elm$core$Task$map , toMessage , task ) ) ) ;
} ) ;
var $elm$browser$Browser$element = _Browser _element ;
var $author$project$Main$Loading = { $ : 'Loading' } ;
var $elm$core$Platform$Cmd$batch = _Platform _batch ;
var $author$project$Main$GetWatches = function ( a ) {
return { $ : 'GetWatches' , a : a } ;
} ;
var $elm$json$Json$Decode$decodeString = _Json _runOnString ;
var $elm$http$Http$BadStatus _ = F2 (
function ( a , b ) {
return { $ : 'BadStatus_' , a : a , b : b } ;
} ) ;
var $elm$http$Http$BadUrl _ = function ( a ) {
return { $ : 'BadUrl_' , a : a } ;
} ;
var $elm$http$Http$GoodStatus _ = F2 (
function ( a , b ) {
return { $ : 'GoodStatus_' , a : a , b : b } ;
} ) ;
var $elm$http$Http$NetworkError _ = { $ : 'NetworkError_' } ;
var $elm$http$Http$Receiving = function ( a ) {
return { $ : 'Receiving' , a : a } ;
} ;
var $elm$http$Http$Sending = function ( a ) {
return { $ : 'Sending' , a : a } ;
} ;
var $elm$http$Http$Timeout _ = { $ : 'Timeout_' } ;
var $elm$core$Dict$RBEmpty _elm _builtin = { $ : 'RBEmpty_elm_builtin' } ;
var $elm$core$Dict$empty = $elm$core$Dict$RBEmpty _elm _builtin ;
var $elm$core$Maybe$isJust = function ( maybe ) {
if ( maybe . $ === 'Just' ) {
return true ;
} else {
return false ;
}
} ;
var $elm$core$Platform$sendToSelf = _Platform _sendToSelf ;
var $elm$core$Basics$compare = _Utils _compare ;
var $elm$core$Dict$get = F2 (
function ( targetKey , dict ) {
get :
while ( true ) {
if ( dict . $ === 'RBEmpty_elm_builtin' ) {
return $elm$core$Maybe$Nothing ;
} else {
var key = dict . b ;
var value = dict . c ;
var left = dict . d ;
var right = dict . e ;
var _v1 = A2 ( $elm$core$Basics$compare , targetKey , key ) ;
switch ( _v1 . $ ) {
case 'LT' :
var $temp$targetKey = targetKey ,
$temp$dict = left ;
targetKey = $temp$targetKey ;
dict = $temp$dict ;
continue get ;
case 'EQ' :
return $elm$core$Maybe$Just ( value ) ;
default :
var $temp$targetKey = targetKey ,
$temp$dict = right ;
targetKey = $temp$targetKey ;
dict = $temp$dict ;
continue get ;
}
}
}
} ) ;
var $elm$core$Dict$Black = { $ : 'Black' } ;
var $elm$core$Dict$RBNode _elm _builtin = F5 (
function ( a , b , c , d , e ) {
return { $ : 'RBNode_elm_builtin' , a : a , b : b , c : c , d : d , e : e } ;
} ) ;
var $elm$core$Dict$Red = { $ : 'Red' } ;
var $elm$core$Dict$balance = F5 (
function ( color , key , value , left , right ) {
if ( ( right . $ === 'RBNode_elm_builtin' ) && ( right . a . $ === 'Red' ) ) {
var _v1 = right . a ;
var rK = right . b ;
var rV = right . c ;
var rLeft = right . d ;
var rRight = right . e ;
if ( ( left . $ === 'RBNode_elm_builtin' ) && ( left . a . $ === 'Red' ) ) {
var _v3 = left . a ;
var lK = left . b ;
var lV = left . c ;
var lLeft = left . d ;
var lRight = left . e ;
return A5 (
$elm$core$Dict$RBNode _elm _builtin ,
$elm$core$Dict$Red ,
key ,
value ,
A5 ( $elm$core$Dict$RBNode _elm _builtin , $elm$core$Dict$Black , lK , lV , lLeft , lRight ) ,
A5 ( $elm$core$Dict$RBNode _elm _builtin , $elm$core$Dict$Black , rK , rV , rLeft , rRight ) ) ;
} else {
return A5 (
$elm$core$Dict$RBNode _elm _builtin ,
color ,
rK ,
rV ,
A5 ( $elm$core$Dict$RBNode _elm _builtin , $elm$core$Dict$Red , key , value , left , rLeft ) ,
rRight ) ;
}
} else {
if ( ( ( ( left . $ === 'RBNode_elm_builtin' ) && ( left . a . $ === 'Red' ) ) && ( left . d . $ === 'RBNode_elm_builtin' ) ) && ( left . d . a . $ === 'Red' ) ) {
var _v5 = left . a ;
var lK = left . b ;
var lV = left . c ;
var _v6 = left . d ;
var _v7 = _v6 . a ;
var llK = _v6 . b ;
var llV = _v6 . c ;
var llLeft = _v6 . d ;
var llRight = _v6 . e ;
var lRight = left . e ;
return A5 (
$elm$core$Dict$RBNode _elm _builtin ,
$elm$core$Dict$Red ,
lK ,
lV ,
A5 ( $elm$core$Dict$RBNode _elm _builtin , $elm$core$Dict$Black , llK , llV , llLeft , llRight ) ,
A5 ( $elm$core$Dict$RBNode _elm _builtin , $elm$core$Dict$Black , key , value , lRight , right ) ) ;
} else {
return A5 ( $elm$core$Dict$RBNode _elm _builtin , color , key , value , left , right ) ;
}
}
} ) ;
var $elm$core$Dict$insertHelp = F3 (
function ( key , value , dict ) {
if ( dict . $ === 'RBEmpty_elm_builtin' ) {
return A5 ( $elm$core$Dict$RBNode _elm _builtin , $elm$core$Dict$Red , key , value , $elm$core$Dict$RBEmpty _elm _builtin , $elm$core$Dict$RBEmpty _elm _builtin ) ;
} else {
var nColor = dict . a ;
var nKey = dict . b ;
var nValue = dict . c ;
var nLeft = dict . d ;
var nRight = dict . e ;
var _v1 = A2 ( $elm$core$Basics$compare , key , nKey ) ;
switch ( _v1 . $ ) {
case 'LT' :
return A5 (
$elm$core$Dict$balance ,
nColor ,
nKey ,
nValue ,
A3 ( $elm$core$Dict$insertHelp , key , value , nLeft ) ,
nRight ) ;
case 'EQ' :
return A5 ( $elm$core$Dict$RBNode _elm _builtin , nColor , nKey , value , nLeft , nRight ) ;
default :
return A5 (
$elm$core$Dict$balance ,
nColor ,
nKey ,
nValue ,
nLeft ,
A3 ( $elm$core$Dict$insertHelp , key , value , nRight ) ) ;
}
}
} ) ;
var $elm$core$Dict$insert = F3 (
function ( key , value , dict ) {
var _v0 = A3 ( $elm$core$Dict$insertHelp , key , value , dict ) ;
if ( ( _v0 . $ === 'RBNode_elm_builtin' ) && ( _v0 . a . $ === 'Red' ) ) {
var _v1 = _v0 . a ;
var k = _v0 . b ;
var v = _v0 . c ;
var l = _v0 . d ;
var r = _v0 . e ;
return A5 ( $elm$core$Dict$RBNode _elm _builtin , $elm$core$Dict$Black , k , v , l , r ) ;
} else {
var x = _v0 ;
return x ;
}
} ) ;
var $elm$core$Dict$getMin = function ( dict ) {
getMin :
while ( true ) {
if ( ( dict . $ === 'RBNode_elm_builtin' ) && ( dict . d . $ === 'RBNode_elm_builtin' ) ) {
var left = dict . d ;
var $temp$dict = left ;
dict = $temp$dict ;
continue getMin ;
} else {
return dict ;
}
}
} ;
var $elm$core$Dict$moveRedLeft = function ( dict ) {
if ( ( ( dict . $ === 'RBNode_elm_builtin' ) && ( dict . d . $ === 'RBNode_elm_builtin' ) ) && ( dict . e . $ === 'RBNode_elm_builtin' ) ) {
if ( ( dict . e . d . $ === 'RBNode_elm_builtin' ) && ( dict . e . d . a . $ === 'Red' ) ) {
var clr = dict . a ;
var k = dict . b ;
var v = dict . c ;
var _v1 = dict . d ;
var lClr = _v1 . a ;
var lK = _v1 . b ;
var lV = _v1 . c ;
var lLeft = _v1 . d ;
var lRight = _v1 . e ;
var _v2 = dict . e ;
var rClr = _v2 . a ;
var rK = _v2 . b ;
var rV = _v2 . c ;
var rLeft = _v2 . d ;
var _v3 = rLeft . a ;
var rlK = rLeft . b ;
var rlV = rLeft . c ;
var rlL = rLeft . d ;
var rlR = rLeft . e ;
var rRight = _v2 . e ;
return A5 (
$elm$core$Dict$RBNode _elm _builtin ,
$elm$core$Dict$Red ,
rlK ,
rlV ,
A5 (
$elm$core$Dict$RBNode _elm _builtin ,
$elm$core$Dict$Black ,
k ,
v ,
A5 ( $elm$core$Dict$RBNode _elm _builtin , $elm$core$Dict$Red , lK , lV , lLeft , lRight ) ,
rlL ) ,
A5 ( $elm$core$Dict$RBNode _elm _builtin , $elm$core$Dict$Black , rK , rV , rlR , rRight ) ) ;
} else {
var clr = dict . a ;
var k = dict . b ;
var v = dict . c ;
var _v4 = dict . d ;
var lClr = _v4 . a ;
var lK = _v4 . b ;
var lV = _v4 . c ;
var lLeft = _v4 . d ;
var lRight = _v4 . e ;
var _v5 = dict . e ;
var rClr = _v5 . a ;
var rK = _v5 . b ;
var rV = _v5 . c ;
var rLeft = _v5 . d ;
var rRight = _v5 . e ;
if ( clr . $ === 'Black' ) {
return A5 (
$elm$core$Dict$RBNode _elm _builtin ,
$elm$core$Dict$Black ,
k ,
v ,
A5 ( $elm$core$Dict$RBNode _elm _builtin , $elm$core$Dict$Red , lK , lV , lLeft , lRight ) ,
A5 ( $elm$core$Dict$RBNode _elm _builtin , $elm$core$Dict$Red , rK , rV , rLeft , rRight ) ) ;
} else {
return A5 (
$elm$core$Dict$RBNode _elm _builtin ,
$elm$core$Dict$Black ,
k ,
v ,
A5 ( $elm$core$Dict$RBNode _elm _builtin , $elm$core$Dict$Red , lK , lV , lLeft , lRight ) ,
A5 ( $elm$core$Dict$RBNode _elm _builtin , $elm$core$Dict$Red , rK , rV , rLeft , rRight ) ) ;
}
}
} else {
return dict ;
}
} ;
var $elm$core$Dict$moveRedRight = function ( dict ) {
if ( ( ( dict . $ === 'RBNode_elm_builtin' ) && ( dict . d . $ === 'RBNode_elm_builtin' ) ) && ( dict . e . $ === 'RBNode_elm_builtin' ) ) {
if ( ( dict . d . d . $ === 'RBNode_elm_builtin' ) && ( dict . d . d . a . $ === 'Red' ) ) {
var clr = dict . a ;
var k = dict . b ;
var v = dict . c ;
var _v1 = dict . d ;
var lClr = _v1 . a ;
var lK = _v1 . b ;
var lV = _v1 . c ;
var _v2 = _v1 . d ;
var _v3 = _v2 . a ;
var llK = _v2 . b ;
var llV = _v2 . c ;
var llLeft = _v2 . d ;
var llRight = _v2 . e ;
var lRight = _v1 . e ;
var _v4 = dict . e ;
var rClr = _v4 . a ;
var rK = _v4 . b ;
var rV = _v4 . c ;
var rLeft = _v4 . d ;
var rRight = _v4 . e ;
return A5 (
$elm$core$Dict$RBNode _elm _builtin ,
$elm$core$Dict$Red ,
lK ,
lV ,
A5 ( $elm$core$Dict$RBNode _elm _builtin , $elm$core$Dict$Black , llK , llV , llLeft , llRight ) ,
A5 (
$elm$core$Dict$RBNode _elm _builtin ,
$elm$core$Dict$Black ,
k ,
v ,
lRight ,
A5 ( $elm$core$Dict$RBNode _elm _builtin , $elm$core$Dict$Red , rK , rV , rLeft , rRight ) ) ) ;
} else {
var clr = dict . a ;
var k = dict . b ;
var v = dict . c ;
var _v5 = dict . d ;
var lClr = _v5 . a ;
var lK = _v5 . b ;
var lV = _v5 . c ;
var lLeft = _v5 . d ;
var lRight = _v5 . e ;
var _v6 = dict . e ;
var rClr = _v6 . a ;
var rK = _v6 . b ;
var rV = _v6 . c ;
var rLeft = _v6 . d ;
var rRight = _v6 . e ;
if ( clr . $ === 'Black' ) {
return A5 (
$elm$core$Dict$RBNode _elm _builtin ,
$elm$core$Dict$Black ,
k ,
v ,
A5 ( $elm$core$Dict$RBNode _elm _builtin , $elm$core$Dict$Red , lK , lV , lLeft , lRight ) ,
A5 ( $elm$core$Dict$RBNode _elm _builtin , $elm$core$Dict$Red , rK , rV , rLeft , rRight ) ) ;
} else {
return A5 (
$elm$core$Dict$RBNode _elm _builtin ,
$elm$core$Dict$Black ,
k ,
v ,
A5 ( $elm$core$Dict$RBNode _elm _builtin , $elm$core$Dict$Red , lK , lV , lLeft , lRight ) ,
A5 ( $elm$core$Dict$RBNode _elm _builtin , $elm$core$Dict$Red , rK , rV , rLeft , rRight ) ) ;
}
}
} else {
return dict ;
}
} ;
var $elm$core$Dict$removeHelpPrepEQGT = F7 (
function ( targetKey , dict , color , key , value , left , right ) {
if ( ( left . $ === 'RBNode_elm_builtin' ) && ( left . a . $ === 'Red' ) ) {
var _v1 = left . a ;
var lK = left . b ;
var lV = left . c ;
var lLeft = left . d ;
var lRight = left . e ;
return A5 (
$elm$core$Dict$RBNode _elm _builtin ,
color ,
lK ,
lV ,
lLeft ,
A5 ( $elm$core$Dict$RBNode _elm _builtin , $elm$core$Dict$Red , key , value , lRight , right ) ) ;
} else {
_v2$2 :
while ( true ) {
if ( ( right . $ === 'RBNode_elm_builtin' ) && ( right . a . $ === 'Black' ) ) {
if ( right . d . $ === 'RBNode_elm_builtin' ) {
if ( right . d . a . $ === 'Black' ) {
var _v3 = right . a ;
var _v4 = right . d ;
var _v5 = _v4 . a ;
return $elm$core$Dict$moveRedRight ( dict ) ;
} else {
break _v2$2 ;
}
} else {
var _v6 = right . a ;
var _v7 = right . d ;
return $elm$core$Dict$moveRedRight ( dict ) ;
}
} else {
break _v2$2 ;
}
}
return dict ;
}
} ) ;
var $elm$core$Dict$removeMin = function ( dict ) {
if ( ( dict . $ === 'RBNode_elm_builtin' ) && ( dict . d . $ === 'RBNode_elm_builtin' ) ) {
var color = dict . a ;
var key = dict . b ;
var value = dict . c ;
var left = dict . d ;
var lColor = left . a ;
var lLeft = left . d ;
var right = dict . e ;
if ( lColor . $ === 'Black' ) {
if ( ( lLeft . $ === 'RBNode_elm_builtin' ) && ( lLeft . a . $ === 'Red' ) ) {
var _v3 = lLeft . a ;
return A5 (
$elm$core$Dict$RBNode _elm _builtin ,
color ,
key ,
value ,
$elm$core$Dict$removeMin ( left ) ,
right ) ;
} else {
var _v4 = $elm$core$Dict$moveRedLeft ( dict ) ;
if ( _v4 . $ === 'RBNode_elm_builtin' ) {
var nColor = _v4 . a ;
var nKey = _v4 . b ;
var nValue = _v4 . c ;
var nLeft = _v4 . d ;
var nRight = _v4 . e ;
return A5 (
$elm$core$Dict$balance ,
nColor ,
nKey ,
nValue ,
$elm$core$Dict$removeMin ( nLeft ) ,
nRight ) ;
} else {
return $elm$core$Dict$RBEmpty _elm _builtin ;
}
}
} else {
return A5 (
$elm$core$Dict$RBNode _elm _builtin ,
color ,
key ,
value ,
$elm$core$Dict$removeMin ( left ) ,
right ) ;
}
} else {
return $elm$core$Dict$RBEmpty _elm _builtin ;
}
} ;
var $elm$core$Dict$removeHelp = F2 (
function ( targetKey , dict ) {
if ( dict . $ === 'RBEmpty_elm_builtin' ) {
return $elm$core$Dict$RBEmpty _elm _builtin ;
} else {
var color = dict . a ;
var key = dict . b ;
var value = dict . c ;
var left = dict . d ;
var right = dict . e ;
if ( _Utils _cmp ( targetKey , key ) < 0 ) {
if ( ( left . $ === 'RBNode_elm_builtin' ) && ( left . a . $ === 'Black' ) ) {
var _v4 = left . a ;
var lLeft = left . d ;
if ( ( lLeft . $ === 'RBNode_elm_builtin' ) && ( lLeft . a . $ === 'Red' ) ) {
var _v6 = lLeft . a ;
return A5 (
$elm$core$Dict$RBNode _elm _builtin ,
color ,
key ,
value ,
A2 ( $elm$core$Dict$removeHelp , targetKey , left ) ,
right ) ;
} else {
var _v7 = $elm$core$Dict$moveRedLeft ( dict ) ;
if ( _v7 . $ === 'RBNode_elm_builtin' ) {
var nColor = _v7 . a ;
var nKey = _v7 . b ;
var nValue = _v7 . c ;
var nLeft = _v7 . d ;
var nRight = _v7 . e ;
return A5 (
$elm$core$Dict$balance ,
nColor ,
nKey ,
nValue ,
A2 ( $elm$core$Dict$removeHelp , targetKey , nLeft ) ,
nRight ) ;
} else {
return $elm$core$Dict$RBEmpty _elm _builtin ;
}
}
} else {
return A5 (
$elm$core$Dict$RBNode _elm _builtin ,
color ,
key ,
value ,
A2 ( $elm$core$Dict$removeHelp , targetKey , left ) ,
right ) ;
}
} else {
return A2 (
$elm$core$Dict$removeHelpEQGT ,
targetKey ,
A7 ( $elm$core$Dict$removeHelpPrepEQGT , targetKey , dict , color , key , value , left , right ) ) ;
}
}
} ) ;
var $elm$core$Dict$removeHelpEQGT = F2 (
function ( targetKey , dict ) {
if ( dict . $ === 'RBNode_elm_builtin' ) {
var color = dict . a ;
var key = dict . b ;
var value = dict . c ;
var left = dict . d ;
var right = dict . e ;
if ( _Utils _eq ( targetKey , key ) ) {
var _v1 = $elm$core$Dict$getMin ( right ) ;
if ( _v1 . $ === 'RBNode_elm_builtin' ) {
var minKey = _v1 . b ;
var minValue = _v1 . c ;
return A5 (
$elm$core$Dict$balance ,
color ,
minKey ,
minValue ,
left ,
$elm$core$Dict$removeMin ( right ) ) ;
} else {
return $elm$core$Dict$RBEmpty _elm _builtin ;
}
} else {
return A5 (
$elm$core$Dict$balance ,
color ,
key ,
value ,
left ,
A2 ( $elm$core$Dict$removeHelp , targetKey , right ) ) ;
}
} else {
return $elm$core$Dict$RBEmpty _elm _builtin ;
}
} ) ;
var $elm$core$Dict$remove = F2 (
function ( key , dict ) {
var _v0 = A2 ( $elm$core$Dict$removeHelp , key , dict ) ;
if ( ( _v0 . $ === 'RBNode_elm_builtin' ) && ( _v0 . a . $ === 'Red' ) ) {
var _v1 = _v0 . a ;
var k = _v0 . b ;
var v = _v0 . c ;
var l = _v0 . d ;
var r = _v0 . e ;
return A5 ( $elm$core$Dict$RBNode _elm _builtin , $elm$core$Dict$Black , k , v , l , r ) ;
} else {
var x = _v0 ;
return x ;
}
} ) ;
var $elm$core$Dict$update = F3 (
function ( targetKey , alter , dictionary ) {
var _v0 = alter (
A2 ( $elm$core$Dict$get , targetKey , dictionary ) ) ;
if ( _v0 . $ === 'Just' ) {
var value = _v0 . a ;
return A3 ( $elm$core$Dict$insert , targetKey , value , dictionary ) ;
} else {
return A2 ( $elm$core$Dict$remove , targetKey , dictionary ) ;
}
} ) ;
var $elm$core$Basics$composeR = F3 (
function ( f , g , x ) {
return g (
f ( x ) ) ;
} ) ;
var $elm$http$Http$expectStringResponse = F2 (
function ( toMsg , toResult ) {
return A3 (
_Http _expect ,
'' ,
$elm$core$Basics$identity ,
A2 ( $elm$core$Basics$composeR , toResult , toMsg ) ) ;
} ) ;
var $elm$core$Result$mapError = F2 (
function ( f , result ) {
if ( result . $ === 'Ok' ) {
var v = result . a ;
return $elm$core$Result$Ok ( v ) ;
} else {
var e = result . a ;
return $elm$core$Result$Err (
f ( e ) ) ;
}
} ) ;
var $elm$http$Http$BadBody = function ( a ) {
return { $ : 'BadBody' , a : a } ;
} ;
var $elm$http$Http$BadStatus = function ( a ) {
return { $ : 'BadStatus' , a : a } ;
} ;
var $elm$http$Http$BadUrl = function ( a ) {
return { $ : 'BadUrl' , a : a } ;
} ;
var $elm$http$Http$NetworkError = { $ : 'NetworkError' } ;
var $elm$http$Http$Timeout = { $ : 'Timeout' } ;
var $elm$http$Http$resolve = F2 (
function ( toResult , response ) {
switch ( response . $ ) {
case 'BadUrl_' :
var url = response . a ;
return $elm$core$Result$Err (
$elm$http$Http$BadUrl ( url ) ) ;
case 'Timeout_' :
return $elm$core$Result$Err ( $elm$http$Http$Timeout ) ;
case 'NetworkError_' :
return $elm$core$Result$Err ( $elm$http$Http$NetworkError ) ;
case 'BadStatus_' :
var metadata = response . a ;
return $elm$core$Result$Err (
$elm$http$Http$BadStatus ( metadata . statusCode ) ) ;
default :
var body = response . b ;
return A2 (
$elm$core$Result$mapError ,
$elm$http$Http$BadBody ,
toResult ( body ) ) ;
}
} ) ;
var $elm$http$Http$expectJson = F2 (
function ( toMsg , decoder ) {
return A2 (
$elm$http$Http$expectStringResponse ,
toMsg ,
$elm$http$Http$resolve (
function ( string ) {
return A2 (
$elm$core$Result$mapError ,
$elm$json$Json$Decode$errorToString ,
A2 ( $elm$json$Json$Decode$decodeString , decoder , string ) ) ;
} ) ) ;
} ) ;
var $elm$http$Http$emptyBody = _Http _emptyBody ;
var $elm$http$Http$Request = function ( a ) {
return { $ : 'Request' , a : a } ;
} ;
var $elm$http$Http$State = F2 (
function ( reqs , subs ) {
return { reqs : reqs , subs : subs } ;
} ) ;
var $elm$http$Http$init = $elm$core$Task$succeed (
A2 ( $elm$http$Http$State , $elm$core$Dict$empty , _List _Nil ) ) ;
var $elm$core$Process$kill = _Scheduler _kill ;
var $elm$core$Process$spawn = _Scheduler _spawn ;
var $elm$http$Http$updateReqs = F3 (
function ( router , cmds , reqs ) {
updateReqs :
while ( true ) {
if ( ! cmds . b ) {
return $elm$core$Task$succeed ( reqs ) ;
} else {
var cmd = cmds . a ;
var otherCmds = cmds . b ;
if ( cmd . $ === 'Cancel' ) {
var tracker = cmd . a ;
var _v2 = A2 ( $elm$core$Dict$get , tracker , reqs ) ;
if ( _v2 . $ === 'Nothing' ) {
var $temp$router = router ,
$temp$cmds = otherCmds ,
$temp$reqs = reqs ;
router = $temp$router ;
cmds = $temp$cmds ;
reqs = $temp$reqs ;
continue updateReqs ;
} else {
var pid = _v2 . a ;
return A2 (
$elm$core$Task$andThen ,
function ( _v3 ) {
return A3 (
$elm$http$Http$updateReqs ,
router ,
otherCmds ,
A2 ( $elm$core$Dict$remove , tracker , reqs ) ) ;
} ,
$elm$core$Process$kill ( pid ) ) ;
}
} else {
var req = cmd . a ;
return A2 (
$elm$core$Task$andThen ,
function ( pid ) {
var _v4 = req . tracker ;
if ( _v4 . $ === 'Nothing' ) {
return A3 ( $elm$http$Http$updateReqs , router , otherCmds , reqs ) ;
} else {
var tracker = _v4 . a ;
return A3 (
$elm$http$Http$updateReqs ,
router ,
otherCmds ,
A3 ( $elm$core$Dict$insert , tracker , pid , reqs ) ) ;
}
} ,
$elm$core$Process$spawn (
A3 (
_Http _toTask ,
router ,
$elm$core$Platform$sendToApp ( router ) ,
req ) ) ) ;
}
}
}
} ) ;
var $elm$http$Http$onEffects = F4 (
function ( router , cmds , subs , state ) {
return A2 (
$elm$core$Task$andThen ,
function ( reqs ) {
return $elm$core$Task$succeed (
A2 ( $elm$http$Http$State , reqs , subs ) ) ;
} ,
A3 ( $elm$http$Http$updateReqs , router , cmds , state . reqs ) ) ;
} ) ;
var $elm$core$List$maybeCons = F3 (
function ( f , mx , xs ) {
var _v0 = f ( mx ) ;
if ( _v0 . $ === 'Just' ) {
var x = _v0 . a ;
return A2 ( $elm$core$List$cons , x , xs ) ;
} else {
return xs ;
}
} ) ;
var $elm$core$List$filterMap = F2 (
function ( f , xs ) {
return A3 (
$elm$core$List$foldr ,
$elm$core$List$maybeCons ( f ) ,
_List _Nil ,
xs ) ;
} ) ;
var $elm$http$Http$maybeSend = F4 (
function ( router , desiredTracker , progress , _v0 ) {
var actualTracker = _v0 . a ;
var toMsg = _v0 . b ;
return _Utils _eq ( desiredTracker , actualTracker ) ? $elm$core$Maybe$Just (
A2 (
$elm$core$Platform$sendToApp ,
router ,
toMsg ( progress ) ) ) : $elm$core$Maybe$Nothing ;
} ) ;
var $elm$http$Http$onSelfMsg = F3 (
function ( router , _v0 , state ) {
var tracker = _v0 . a ;
var progress = _v0 . b ;
return A2 (
$elm$core$Task$andThen ,
function ( _v1 ) {
return $elm$core$Task$succeed ( state ) ;
} ,
$elm$core$Task$sequence (
A2 (
$elm$core$List$filterMap ,
A3 ( $elm$http$Http$maybeSend , router , tracker , progress ) ,
state . subs ) ) ) ;
} ) ;
var $elm$http$Http$Cancel = function ( a ) {
return { $ : 'Cancel' , a : a } ;
} ;
var $elm$http$Http$cmdMap = F2 (
function ( func , cmd ) {
if ( cmd . $ === 'Cancel' ) {
var tracker = cmd . a ;
return $elm$http$Http$Cancel ( tracker ) ;
} else {
var r = cmd . a ;
return $elm$http$Http$Request (
{
allowCookiesFromOtherDomains : r . allowCookiesFromOtherDomains ,
body : r . body ,
expect : A2 ( _Http _mapExpect , func , r . expect ) ,
headers : r . headers ,
method : r . method ,
timeout : r . timeout ,
tracker : r . tracker ,
url : r . url
} ) ;
}
} ) ;
var $elm$http$Http$MySub = F2 (
function ( a , b ) {
return { $ : 'MySub' , a : a , b : b } ;
} ) ;
var $elm$http$Http$subMap = F2 (
function ( func , _v0 ) {
var tracker = _v0 . a ;
var toMsg = _v0 . b ;
return A2 (
$elm$http$Http$MySub ,
tracker ,
A2 ( $elm$core$Basics$composeR , toMsg , func ) ) ;
} ) ;
_Platform _effectManagers [ 'Http' ] = _Platform _createManager ( $elm$http$Http$init , $elm$http$Http$onEffects , $elm$http$Http$onSelfMsg , $elm$http$Http$cmdMap , $elm$http$Http$subMap ) ;
var $elm$http$Http$command = _Platform _leaf ( 'Http' ) ;
var $elm$http$Http$subscription = _Platform _leaf ( 'Http' ) ;
var $elm$http$Http$request = function ( r ) {
return $elm$http$Http$command (
$elm$http$Http$Request (
{ allowCookiesFromOtherDomains : false , body : r . body , expect : r . expect , headers : r . headers , method : r . method , timeout : r . timeout , tracker : r . tracker , url : r . url } ) ) ;
} ;
var $elm$http$Http$get = function ( r ) {
return $elm$http$Http$request (
{ body : $elm$http$Http$emptyBody , expect : r . expect , headers : _List _Nil , method : 'GET' , timeout : $elm$core$Maybe$Nothing , tracker : $elm$core$Maybe$Nothing , url : r . url } ) ;
} ;
var $elm$json$Json$Decode$list = _Json _decodeList ;
var $author$project$Data$Watch = F5 (
function ( ownerId , name , repo , resultCount , results ) {
return { name : name , ownerId : ownerId , repo : repo , resultCount : resultCount , results : results } ;
} ) ;
var $elm$json$Json$Decode$field = _Json _decodeField ;
var $elm$json$Json$Decode$int = _Json _decodeInt ;
var $elm$json$Json$Decode$map5 = _Json _map5 ;
var $author$project$Data$Node = F5 (
function ( number , createdAt , repository , title , url ) {
return { createdAt : createdAt , number : number , repository : repository , title : title , url : url } ;
} ) ;
var $author$project$Data$RepoInfo = function ( nameWithOwner ) {
return { nameWithOwner : nameWithOwner } ;
} ;
var $elm$json$Json$Decode$string = _Json _decodeString ;
var $author$project$Main$repoInfoDecoder = A2 (
$elm$json$Json$Decode$map ,
$author$project$Data$RepoInfo ,
A2 ( $elm$json$Json$Decode$field , 'nameWithOwner' , $elm$json$Json$Decode$string ) ) ;
var $author$project$Main$resultsDecoder = A6 (
$elm$json$Json$Decode$map5 ,
$author$project$Data$Node ,
A2 ( $elm$json$Json$Decode$field , 'number' , $elm$json$Json$Decode$int ) ,
A2 ( $elm$json$Json$Decode$field , 'createdAt' , $elm$json$Json$Decode$string ) ,
A2 ( $elm$json$Json$Decode$field , 'repository' , $author$project$Main$repoInfoDecoder ) ,
A2 ( $elm$json$Json$Decode$field , 'title' , $elm$json$Json$Decode$string ) ,
A2 ( $elm$json$Json$Decode$field , 'url' , $elm$json$Json$Decode$string ) ) ;
var $author$project$Main$watchDecoder = A6 (
$elm$json$Json$Decode$map5 ,
$author$project$Data$Watch ,
A2 ( $elm$json$Json$Decode$field , 'owner_id' , $elm$json$Json$Decode$int ) ,
A2 ( $elm$json$Json$Decode$field , 'name' , $elm$json$Json$Decode$string ) ,
A2 ( $elm$json$Json$Decode$field , 'repo' , $elm$json$Json$Decode$string ) ,
A2 ( $elm$json$Json$Decode$field , 'result_count' , $elm$json$Json$Decode$int ) ,
A2 (
$elm$json$Json$Decode$field ,
'results' ,
$elm$json$Json$Decode$list ( $author$project$Main$resultsDecoder ) ) ) ;
var $author$project$Main$watchListDecoder = $elm$json$Json$Decode$list ( $author$project$Main$watchDecoder ) ;
var $author$project$Main$getWatches = $elm$http$Http$get (
{
expect : A2 ( $elm$http$Http$expectJson , $author$project$Main$GetWatches , $author$project$Main$watchListDecoder ) ,
url : '/watches'
} ) ;
var $author$project$Main$init = function ( _v0 ) {
return _Utils _Tuple2 (
$author$project$Main$Loading ,
$elm$core$Platform$Cmd$batch (
_List _fromArray (
[ $author$project$Main$getWatches ] ) ) ) ;
} ;
var $elm$core$Platform$Sub$batch = _Platform _batch ;
var $elm$core$Platform$Sub$none = $elm$core$Platform$Sub$batch ( _List _Nil ) ;
var $author$project$Main$subscriptions = function ( model ) {
return $elm$core$Platform$Sub$none ;
} ;
var $author$project$Main$Failure = { $ : 'Failure' } ;
var $author$project$Main$Success = function ( a ) {
return { $ : 'Success' , a : a } ;
} ;
var $elm$core$Platform$Cmd$none = $elm$core$Platform$Cmd$batch ( _List _Nil ) ;
var $author$project$Main$update = F2 (
function ( msg , model ) {
if ( msg . $ === 'MorePlease' ) {
return _Utils _Tuple2 ( $author$project$Main$Loading , $author$project$Main$getWatches ) ;
} else {
var result = msg . a ;
if ( result . $ === 'Ok' ) {
var watches = result . a ;
return _Utils _Tuple2 (
$author$project$Main$Success ( watches ) ,
$elm$core$Platform$Cmd$none ) ;
} else {
return _Utils _Tuple2 ( $author$project$Main$Failure , $elm$core$Platform$Cmd$none ) ;
}
}
} ) ;
var $elm$html$Html$div = _VirtualDom _node ( 'div' ) ;
var $elm$html$Html$h2 = _VirtualDom _node ( 'h2' ) ;
var $elm$virtual _dom$VirtualDom$text = _VirtualDom _text ;
var $elm$html$Html$text = $elm$virtual _dom$VirtualDom$text ;
var $author$project$Main$MorePlease = { $ : 'MorePlease' } ;
var $elm$html$Html$button = _VirtualDom _node ( 'button' ) ;
var $elm$virtual _dom$VirtualDom$Normal = function ( a ) {
return { $ : 'Normal' , a : a } ;
} ;
var $elm$virtual _dom$VirtualDom$on = _VirtualDom _on ;
var $elm$html$Html$Events$on = F2 (
function ( event , decoder ) {
return A2 (
$elm$virtual _dom$VirtualDom$on ,
event ,
$elm$virtual _dom$VirtualDom$Normal ( decoder ) ) ;
} ) ;
var $elm$html$Html$Events$onClick = function ( msg ) {
return A2 (
$elm$html$Html$Events$on ,
'click' ,
$elm$json$Json$Decode$succeed ( msg ) ) ;
} ;
var $elm$html$Html$a = _VirtualDom _node ( 'a' ) ;
var $elm$json$Json$Encode$string = _Json _wrap ;
var $elm$html$Html$Attributes$stringProperty = F2 (
function ( key , string ) {
return A2 (
_VirtualDom _property ,
key ,
$elm$json$Json$Encode$string ( string ) ) ;
} ) ;
var $elm$html$Html$Attributes$href = function ( url ) {
return A2 (
$elm$html$Html$Attributes$stringProperty ,
'href' ,
_VirtualDom _noJavaScriptUri ( url ) ) ;
} ;
var $elm$html$Html$li = _VirtualDom _node ( 'li' ) ;
var $author$project$Main$displayResult = function ( node ) {
return A2 (
$elm$html$Html$li ,
_List _Nil ,
_List _fromArray (
[
A2 (
$elm$html$Html$a ,
_List _fromArray (
[
$elm$html$Html$Attributes$href ( node . url )
] ) ,
_List _fromArray (
[
$elm$html$Html$text (
$elm$core$String$fromInt ( node . number ) )
] ) ) ,
$elm$html$Html$text ( ' :: ' + node . title )
] ) ) ;
} ;
var $elm$html$Html$ul = _VirtualDom _node ( 'ul' ) ;
var $author$project$Main$viewWatch = function ( watch ) {
var _v0 = watch . results ;
if ( ! _v0 . b ) {
return $elm$html$Html$text ( '' ) ;
} else {
return A2 (
$elm$html$Html$ul ,
_List _Nil ,
_List _fromArray (
[
A2 (
$elm$html$Html$li ,
_List _Nil ,
_List _fromArray (
[
$elm$html$Html$text ( watch . repo + ' :: ' ) ,
$elm$html$Html$text ( watch . name ) ,
A2 (
$elm$html$Html$ul ,
_List _Nil ,
A2 ( $elm$core$List$map , $author$project$Main$displayResult , watch . results ) )
] ) )
] ) ) ;
}
} ;
var $author$project$Main$viewWatches = function ( model ) {
switch ( model . $ ) {
case 'Failure' :
return A2 (
$elm$html$Html$div ,
_List _Nil ,
_List _fromArray (
[
$elm$html$Html$text ( 'I can\'t load the watches' ) ,
A2 (
$elm$html$Html$button ,
_List _fromArray (
[
$elm$html$Html$Events$onClick ( $author$project$Main$MorePlease )
] ) ,
_List _fromArray (
[
$elm$html$Html$text ( 'Try agan!' )
] ) )
] ) ) ;
case 'Loading' :
return $elm$html$Html$text ( 'Loading...' ) ;
default :
var watches = model . a ;
return A2 (
$elm$html$Html$div ,
_List _Nil ,
A2 ( $elm$core$List$map , $author$project$Main$viewWatch , watches ) ) ;
}
} ;
var $author$project$Main$view = function ( model ) {
return A2 (
$elm$html$Html$div ,
_List _Nil ,
_List _fromArray (
[
A2 (
$elm$html$Html$h2 ,
_List _Nil ,
_List _fromArray (
[
$elm$html$Html$text ( 'Watches' )
] ) ) ,
$author$project$Main$viewWatches ( model )
] ) ) ;
} ;
var $author$project$Main$main = $elm$browser$Browser$element (
{ init : $author$project$Main$init , subscriptions : $author$project$Main$subscriptions , update : $author$project$Main$update , view : $author$project$Main$view } ) ;
_Platform _export ( { 'Main' : { 'init' : $author$project$Main$main (
$elm$json$Json$Decode$succeed ( _Utils _Tuple0 ) ) ( 0 ) } } ) ; } ( this ) ) ;