2012-11-04 01:26:19 +00:00
var Guid = function ( ) { var d = 0 ; return { guid : function ( ) { return d += 1 } } } ( ) , Elm = Elm || { } ;
Elm . JavaScript = function ( ) { function d ( a ) { for ( var b = [ "Nil" ] , l = a . length ; l -- ; ) b = [ "Cons" , a [ l ] , b ] ; return b } function a ( a ) { for ( var b = [ ] ; "Cons" === a [ 0 ] ; ) b . push ( a [ 1 ] ) , a = a [ 2 ] ; return b } function g ( a ) { return a . slice ( 1 ) } function i ( a ) { return [ "Tuple" + a . length ] . concat ( a ) } return { castJSBoolToBool : function ( a ) { return a } , castBoolToJSBool : function ( a ) { return a } , castJSNumberToFloat : function ( a ) { return a } , castFloatToJSNumber : function ( a ) { return a } , castJSNumberToInt : function ( a ) { return ~ ~ a } , castIntToJSNumber : function ( a ) { return a } ,
Experimental : { castJSElementToElement : function ( a ) { return function ( b ) { return function ( l ) { return [ "Element" , Guid . guid ( ) , [ "EExternalHtml" , l ] , a , b , 1 , Nothing , Nothing ] } } } , castElementToJSElement : function ( a ) { return Render . render ( a ) } } , castJSArrayToList : d , castListToJSArray : a , castJSStringToString : d , castStringToJSString : function ( g ) { return "string" === typeof g ? g : a ( g ) . join ( "" ) } , castTupleToJSTuple2 : g , castTupleToJSTuple3 : g , castTupleToJSTuple4 : g , castTupleToJSTuple5 : g , castJSTupleToTuple2 : i , castJSTupleToTuple3 : i , castJSTupleToTuple4 : i ,
castJSTupleToTuple5 : i } } ( ) ; var Elm = Elm || { } , JSjson = JSON ;
2012-11-04 23:16:37 +00:00
Elm . JSON = function ( ) { function d ( b , a ) { return function ( h ) { return function ( e ) { var c = i . castStringToJSString ( h ) ; return e [ 1 ] . hasOwnProperty ( c ) && ( e = e [ 1 ] [ c ] , e [ 0 ] === b ) ? e [ 1 ] : a } } } function a ( b ) { return function ( a ) { function h ( b ) { switch ( b [ 0 ] ) { case "JsonNull" : return null ; case "JsonString" : return i . castStringToJSString ( b [ 1 ] ) ; case "JsonObject" : var c = { } , b = b [ 1 ] [ 1 ] , f ; for ( f in b ) c [ f ] = h ( b [ f ] ) ; return c ; case "JsonArray" : c = i . castListToJSArray ( b [ 1 ] ) ; for ( f = c . length ; f -- ; ) c [ f ] = h ( c [ f ] ) ; return c ; default : return b [ 1 ] } } return JSjson . stringify ( h ( [ "JsonObject" ,
2012-11-04 01:26:19 +00:00
a ] ) , null , i . castStringToJSString ( b ) ) } } function g ( b ) { function a ( b ) { switch ( typeof b ) { case "string" : return [ "JsonString" , i . castJSStringToString ( b ) ] ; case "number" : return [ "JsonNumber" , i . castJSNumberToFloat ( b ) ] ; case "boolean" : return [ "JsonBool" , i . castJSBoolToBool ( b ) ] ; case "object" : if ( null === b ) return [ "JsonNull" ] ; for ( var c in b ) b [ c ] = a ( b [ c ] ) ; return b instanceof Array ? [ "JsonArray" , i . castJSArrayToList ( b ) ] : [ "JsonObject" , [ "JSON" , b ] ] } } var b = JSjson . parse ( b ) , h ; for ( h in b ) b [ h ] = a ( b [ h ] ) ; return [ "JSON" , b ] } var i = Elm . JavaScript ,
2012-11-04 23:16:37 +00:00
j = [ "JSON" , { } ] ; return { empty : j , singleton : function ( b ) { return function ( a ) { var h = { } ; h [ i . castStringToJSString ( b ) ] = a ; return [ "JSON" , h ] } } , insert : function ( b ) { return function ( a ) { return function ( h ) { var h = h [ 1 ] , e = { } , c ; for ( c in h ) e [ c ] = h [ c ] ; e [ i . castStringToJSString ( b ) ] = a ; return [ "JSON" , e ] } } } , lookup : function ( b ) { return function ( a ) { var h = i . castStringToJSString ( b ) ; return a [ 1 ] . hasOwnProperty ( h ) ? Just ( a [ 1 ] [ h ] ) : Nothing } } , findString : d ( "JsonString" , [ "Nil" ] ) , findObject : d ( "JsonObject" , j ) , findArray : d ( "JsonArray" , [ "Nil" ] ) , findWithDefault : function ( b ) { return function ( a ) { return function ( h ) { var e =
i . castStringToJSString ( a ) ; return h [ 1 ] . hasOwnProperty ( e ) ? h [ 1 ] [ e ] : b } } } , remove : function ( b ) { return function ( a ) { var a = a [ 1 ] , h = { } , e ; for ( e in a ) h [ e ] = a [ e ] ; delete h [ i . castStringToJSString ( b ) ] ; return [ "JSON" , h ] } } , toPrettyJSString : a , toJSString : a ( "" ) , fromJSString : g , toPrettyString : function ( b ) { return function ( g ) { return i . castJSStringToString ( a ( b ) ( g ) ) } } , toString : function ( b ) { return i . castJSStringToString ( a ( "" ) ( b ) ) } , fromString : function ( b ) { return g ( i . castStringToJSString ( b ) ) } , toList : function ( b ) { var b = b [ 1 ] , a = [ ] , h ; for ( h in b ) a . push ( Value . Tuple ( i . castJSStringToString ( h ) ,
2012-11-04 01:26:19 +00:00
b [ h ] ) ) ; return i . castJSArrayToList ( a ) } , fromList : function ( b ) { for ( var b = i . castListToJSArray ( b ) , a = { } , h = b . length ; h -- ; ) a [ i . castStringToJSString ( b [ h ] [ 1 ] ) ] = b [ h ] [ 2 ] ; return [ "JSON" , a ] } , JsonString : function ( b ) { return [ "JsonString" , b ] } , JsonNumber : function ( b ) { return [ "JsonNumber" , b ] } , JsonBool : function ( b ) { return [ "JsonBool" , b ] } , JsonNull : [ "JsonNull" ] , JsonArray : function ( b ) { return [ "JsonArray" , b ] } , JsonObject : function ( b ) { return [ "JsonObject" , b ] } } } ( ) ;
2012-11-04 23:16:37 +00:00
var Value = function ( ) { function d ( b ) { if ( 0 == b . length ) return b ; for ( var b = b . replace ( /"/g , """ ) . replace ( /'/g , "'" ) . replace ( /</g , "<" ) . replace ( />/g , ">" ) . replace ( /\n/g , "<br/>" ) , b = b . split ( "<br/>" ) , a = b . length ; a -- ; ) { var h = b , e = a , c ; c = b [ a ] ; if ( 0 != c . length ) { c = c . split ( "" ) ; " " == c [ 0 ] && ( c [ 0 ] = " " ) ; for ( var f = c . length ; -- f ; ) " " == c [ f ] [ 0 ] && " " == c [ f - 1 ] && ( c [ f - 1 ] += c [ f ] , c [ f ] = "" ) ; for ( f = c . length ; f -- ; ) if ( 1 < c [ f ] . length && " " == c [ f ] [ 0 ] ) { for ( var n = c [ f ] . split ( "" ) , g = n . length - 2 ; 0 <= g ; g -= 2 ) n [ g ] = " " ; c [ f ] = n . join ( "" ) } c =
c . join ( "" ) ; c = " " === c [ c . length - 1 ] ? c . slice ( 0 , - 1 ) + " " : c } h [ e ] = c } return b . join ( "<br/>" ) } var a = function ( b , g ) { if ( "object" === typeof b ) { if ( b === g ) return ! 0 ; if ( b . length !== g . length ) return ! 1 ; for ( var h = b . length ; h -- ; ) if ( ! a ( b [ h ] , g [ h ] ) ) return ! 1 ; return ! 0 } return b === g } , g = function ( b ) { if ( "boolean" === typeof b ) return b ? "True" : "False" ; if ( "number" !== typeof b ) { if ( "string" === typeof b && 2 > b . length ) return "'" + b + "'" ; if ( b [ 0 ] ) { if ( "Tuple" === b [ 0 ] . substring ( 0 , 5 ) ) { for ( var a = "" , h = b . length ; -- h ; ) a = "," + g ( b [ h ] ) + a ; "," === a [ 0 ] && ( a = a . substring ( 1 ) ) ;
return "(" + a + ")" } if ( "Cons" === b [ 0 ] ) for ( var h = "string" === typeof b [ 1 ] ? '"' : "]" , e = "string" === typeof b [ 1 ] ? "" : "," , c = "string" === typeof b [ 1 ] ? function ( c ) { return c } : g , a = ( "string" === typeof b [ 1 ] ? '"' : "[" ) + c ( b [ 1 ] ) , b = b [ 2 ] ; ; ) if ( "Cons" === b [ 0 ] ) a += e + c ( b [ 1 ] ) , b = b [ 2 ] ; else return a + h ; else { if ( "Nil" === b [ 0 ] ) return "[]" ; if ( "JSON" === b [ 0 ] ) return "(JSON.fromList " + g ( Elm . JSON . toList ( b ) ) + ")" ; if ( "RBNode" === b [ 0 ] || "RBEmpty" === b [ 0 ] ) return "(Map.fromList " + g ( Elm . Dict . fold ( function ( c ) { return function ( b ) { return function ( a ) { return [ "Cons" , [ "Tuple2" ,
2012-11-04 01:26:19 +00:00
c , b ] , a ] } } } ) ( [ "Nil" ] ) ( b ) ) + ")" ; a = "" ; for ( h = b . length ; -- h ; ) a = " " + g ( b [ h ] ) + a ; a = b [ 0 ] + a ; return 1 < b . length ? "(" + a + ")" : a } } } return b + "" } , i = function ( b ) { for ( var a = [ "Nil" ] , h = b . length ; h -- ; ) a = [ "Cons" , b [ h ] , a ] ; return a } , j ; j = document . addEventListener ? function ( b , a , h ) { b . addEventListener ( a , h , ! 1 ) } : function ( b , a , h ) { b . attachEvent ( "on" + a , h ) } ; return { eq : a , str : i , show : function ( b ) { return i ( g ( b ) ) } , Tuple : function ( ) { var b = arguments . length , a = Array ( b + 1 ) ; for ( a [ 0 ] = "Tuple" + arguments . length ; b -- ; ) a [ b + 1 ] = arguments [ b ] ; return a } , append : function ( b ,
2012-11-04 23:16:37 +00:00
a ) { if ( "string" === typeof b && "string" === typeof a ) return b . concat ( a ) ; if ( "Nil" === b [ 0 ] ) return a ; for ( var h = [ "Cons" , b [ 1 ] , [ "Nil" ] ] , e = h , b = b [ 2 ] ; "Cons" === b [ 0 ] ; ) e [ 2 ] = [ "Cons" , b [ 1 ] , [ "Nil" ] ] , b = b [ 2 ] , e = e [ 2 ] ; e [ 2 ] = a ; return h } , listToArray : function ( b ) { for ( var a = [ ] ; "Cons" === b [ 0 ] ; ) a . push ( b [ 1 ] ) , b = b [ 2 ] ; return a } , toText : function ( b ) { if ( "string" === typeof b ) return d ( b ) ; for ( var a = [ ] ; "Cons" === b [ 0 ] ; ) a . push ( b [ 1 ] ) , b = b [ 2 ] ; return d ( a . join ( "" ) ) } , properEscape : d , getTextSize : function ( b , a , h ) { var e = document . createElement ( "div" ) ; e . innerHTML =
h ; e . style . textAlign = "left" ; 0 < b && ( e . style . width = b + "px" ) ; e . style . visibility = "hidden" ; e . style . styleFloat = "left" ; e . style . cssFloat = "left" ; document . body . appendChild ( e ) ; h = window . getComputedStyle ( e ) ; b = h . getPropertyValue ( "width" ) . slice ( 0 , - 2 ) - 0 ; h = h . getPropertyValue ( "height" ) . slice ( 0 , - 2 ) - 0 ; document . body . removeChild ( e ) ; delete e ; return [ Math . ceil ( b ) , Math . ceil ( Math . max ( a , h ) ) ] } , getSize : function ( b ) { b = b . cloneNode ( ! 0 ) ; b . style . visibility = "hidden" ; b . style . styleFloat = "left" ; b . style . cssFloat = "left" ; document . body . appendChild ( b ) ;
var a = b . offsetWidth , h = b . offsetHeight ; document . body . removeChild ( b ) ; delete b ; return [ a , h ] } , getExcess : function ( b ) { b = b . cloneNode ( ! 0 ) ; b . style . visibility = "hidden" ; b . style . styleFloat = "left" ; b . style . cssFloat = "left" ; document . body . appendChild ( b ) ; var a = b . offsetWidth , h = b . offsetHeight , e = window . getComputedStyle ( b ) , c = e . getPropertyValue ( "width" ) . slice ( 0 , - 2 ) - 0 , e = e . getPropertyValue ( "height" ) . slice ( 0 , - 2 ) - 0 ; document . body . removeChild ( b ) ; delete b ; return [ a - c , h - e ] } , groupForms : function ( b ) { for ( var b = Elm . JavaScript . castListToJSArray ( b ) ,
a = [ ] , h = [ ] , e = b . length ; e -- ; ) { var c = b [ e ] ; switch ( c [ 4 ] [ 0 ] ) { case "FElement" : 0 < h . length && ( a . push ( h ) , h = [ ] ) ; a . push ( c ) ; break ; default : h . push ( c ) } } 0 < h . length && a . push ( h ) ; return a } , wrap : function ( a ) { var g = Value . getSize ( a ) ; return [ "Element" , Guid . guid ( ) , [ "EHtml" , a ] , g [ 0 ] , g [ 1 ] , 1 , Nothing , Nothing ] } , addListener : j } } ( ) , Elm = Elm || { } ;
Elm . List = function ( ) { function d ( a ) { return function ( b ) { if ( "Nil" === b [ 0 ] ) return b ; "Cons" !== b [ 0 ] && c ( "map" ) ; for ( var f = [ "Cons" , a ( b [ 1 ] ) , [ "Nil" ] ] , e = f , b = b [ 2 ] ; "Cons" === b [ 0 ] ; ) e [ 2 ] = [ "Cons" , a ( b [ 1 ] ) , [ "Nil" ] ] , b = b [ 2 ] , e = e [ 2 ] ; return f } } function a ( a ) { return function ( b ) { return function ( f ) { var e = b ; if ( "Nil" === f [ 0 ] ) return e ; for ( "Cons" !== f [ 0 ] && c ( "foldl" ) ; "Cons" === f [ 0 ] ; ) e = a ( f [ 1 ] ) ( e ) , f = f [ 2 ] ; return e } } } function g ( a ) { return function ( b ) { return function ( f ) { var e = b ; if ( "Nil" === f [ 0 ] ) return e ; "Cons" !== f [ 0 ] && c ( "foldr" ) ; for ( var n = [ ] ; "Cons" ===
f [ 0 ] ; ) n . push ( f [ 1 ] ) , f = f [ 2 ] ; for ( f = n . length ; f -- ; ) e = a ( n [ f ] ) ( e ) ; return e } } } function i ( c ) { return function ( b ) { var f ; "Cons" !== b [ 0 ] ? f = void 0 : ( f = b [ 1 ] , b = b [ 2 ] , f = a ( c ) ( f ) ( b ) ) ; return f } } function j ( b ) { return function ( a ) { return function ( f ) { if ( "Nil" === f [ 0 ] ) return [ "Cons" , a , [ "Nil" ] ] ; "Cons" !== f [ 0 ] && c ( "scanl" ) ; for ( var e = [ a ] ; "Cons" === f [ 0 ] ; ) a = b ( f [ 1 ] ) ( a ) , e . push ( a ) , f = f [ 2 ] ; for ( var f = [ "Nil" ] , n = e . length ; n -- ; ) f = [ "Cons" , e [ n ] , f ] ; return f } } } function b ( c ) { return function ( a ) { a : { for ( var f = [ function ( c ) { return "Nil" !== c [ 0 ] ? void 0 : [ "Tuple2" ,
[ "Nil" ] , [ "Nil" ] ] } , function ( a ) { if ( "Cons" === a [ 0 ] ) { var f = a [ 1 ] , a = a [ 2 ] ; var e = b ( c ) ( a ) ; "Tuple2" !== e [ 0 ] ? f = void 0 : ( a = e [ 1 ] , e = e [ 2 ] , f = c ( f ) ? [ "Tuple2" , [ "Cons" , f , a ] , e ] : [ "Tuple2" , a , [ "Cons" , f , e ] ] ) ; return f } } ] , e = f . length ; e -- ; ) { var n = f [ e ] ( a ) ; if ( void 0 !== n ) { a = n ; break a } } a = void 0 } return a } } function l ( c ) { a : { for ( var a = [ function ( c ) { return "Nil" !== c [ 0 ] ? void 0 : [ "Tuple2" , [ "Nil" ] , [ "Nil" ] ] } , function ( c ) { if ( "Cons" !== c [ 0 ] ) c = void 0 ; else if ( c = [ "Tuple2" , c [ 1 ] , l ( c [ 2 ] ) ] , "Tuple2" !== c [ 0 ] || "Tuple2" !== c [ 1 ] [ 0 ] ) c = void 0 ; else var a = c [ 1 ] [ 1 ] , b =
c [ 1 ] [ 2 ] , c = "Tuple2" !== c [ 2 ] [ 0 ] ? void 0 : [ "Tuple2" , [ "Cons" , a , c [ 2 ] [ 1 ] ] , [ "Cons" , b , c [ 2 ] [ 2 ] ] ] ; return c } ] , b = a . length ; b -- ; ) { var f = a [ b ] ( c ) ; if ( void 0 !== f ) { c = f ; break a } } c = void 0 } return c } function h ( c ) { return function ( a ) { a : { for ( var b = [ function ( c ) { return "Nil" !== c [ 0 ] ? void 0 : [ "Nil" ] } , function ( c ) { if ( "Cons" === c [ 0 ] ) { var a = c [ 1 ] ; return "Nil" !== c [ 2 ] [ 0 ] ? void 0 : [ "Cons" , a , [ "Nil" ] ] } } , function ( a ) { if ( "Cons" === a [ 0 ] ) { var b = a [ 1 ] ; if ( "Cons" === a [ 2 ] [ 0 ] ) { var f = a [ 2 ] [ 1 ] , a = a [ 2 ] [ 2 ] ; return [ "Cons" , b , [ "Cons" , c , h ( c ) ( [ "Cons" , f , a ] ) ] ] } } } ] , f = b . length ; f -- ; ) { var e =
b [ f ] ( a ) ; if ( void 0 !== e ) { a = e ; break a } } a = void 0 } return a } } function e ( c ) { return function ( a ) { a : { for ( var b = [ function ( c ) { return "Nil" !== c [ 0 ] ? void 0 : [ "Nil" ] } , function ( c ) { if ( "Cons" === c [ 0 ] ) { var a = c [ 1 ] ; return "Nil" !== c [ 2 ] [ 0 ] ? void 0 : a } } , function ( a ) { if ( "Cons" === a [ 0 ] ) { var b = a [ 1 ] ; if ( "Cons" === a [ 2 ] [ 0 ] ) { var f = a [ 2 ] [ 1 ] , a = a [ 2 ] [ 2 ] ; return Value . append ( b , Value . append ( c , e ( c ) ( [ "Cons" , f , a ] ) ) ) } } } ] , f = b . length ; f -- ; ) { var n = b [ f ] ( a ) ; if ( void 0 !== n ) { a = n ; break a } } a = void 0 } return a } } var c = function ( c ) { throw "Function '" + c + "' expecting a list!" ;
} , f = a ( function ( c ) { return function ( a ) { return [ "Cons" , c , a ] } } ) ( [ "Nil" ] ) , n = g ( function ( c ) { return function ( a ) { return Value . append ( c , a ) } } ) ( [ "Nil" ] ) , m = a ( function ( c ) { return function ( a ) { return c && a } } ) ( ! 0 ) , s = a ( function ( c ) { return function ( a ) { return c || a } } ) ( ! 1 ) , p = a ( function ( c ) { return function ( a ) { return c + a } } ) ( 0 ) , k = a ( function ( c ) { return function ( a ) { return c * a } } ) ( 1 ) , u = i ( function ( c ) { return function ( a ) { return Math . max ( c , a ) } } ) , x = i ( function ( c ) { return function ( a ) { return Math . min ( c , a ) } } ) ; return { head : function ( c ) { if ( "Cons" !==
2012-11-04 01:26:19 +00:00
c [ 0 ] ) throw "Error: 'head' only accepts lists of length greater than one." ; return c [ 1 ] } , tail : function ( c ) { if ( "Cons" !== c [ 0 ] ) throw "Error: 'tail' only accepts lists of length greater than one." ; return c [ 2 ] } , last : function ( c ) { if ( "Cons" !== c [ 0 ] ) throw "Error: 'last' only accepts lists of length greater than one." ; for ( var a = c [ 1 ] ; "Cons" === c [ 0 ] ; ) a = c [ 1 ] , c = c [ 2 ] ; return a } , map : d , foldl : a , foldr : g , foldl1 : i , foldr1 : function ( a ) { return function ( b ) { if ( "Nil" === b [ 0 ] ) throw "'foldr1' requires an non-empty list." ; "Cons" !== b [ 0 ] &&
2012-11-04 23:16:37 +00:00
c ( "foldr1" ) ; for ( var f = [ ] ; "Cons" === b [ 0 ] ; ) f . push ( b [ 1 ] ) , b = b [ 2 ] ; for ( var b = f . pop ( ) , e = f . length ; e -- ; ) b = a ( f [ e ] ) ( b ) ; return b } } , scanl : j , scanl1 : function ( c ) { return function ( a ) { if ( "Cons" !== a [ 0 ] ) throw "Error: 'scanl1' requires a list of at least length 1." ; return j ( c ) ( a [ 1 ] ) ( a [ 2 ] ) } } , filter : function ( a ) { return function ( b ) { if ( "Nil" === b [ 0 ] ) return b ; "Cons" !== b [ 0 ] && c ( "filter" ) ; for ( var f = [ ] ; "Cons" === b [ 0 ] ; ) a ( b [ 1 ] ) && f . push ( b [ 1 ] ) , b = b [ 2 ] ; for ( var b = [ "Nil" ] , e = f . length ; e -- ; ) b = [ "Cons" , f [ e ] , b ] ; return b } } , length : function ( c ) { for ( var a =
0 ; "Cons" === c [ 0 ] ; ) a += 1 , c = c [ 2 ] ; return a } , reverse : f , concat : n , concatMap : function ( c ) { return function ( a ) { return n ( d ( c ) ( a ) ) } } , and : m , or : s , all : function ( c ) { return a ( function ( a ) { return function ( b ) { return b && c ( a ) } } ) ( ! 0 ) } , any : function ( c ) { return a ( function ( a ) { return function ( b ) { return b || c ( a ) } } ) ( ! 1 ) } , sum : p , product : k , maximum : u , minimum : x , partition : b , zipWith : function ( a ) { return function ( b ) { return function ( f ) { if ( "Nil" === b [ 0 ] || "Nil" === f [ 0 ] ) return [ "Nil" ] ; ( "Cons" !== b [ 0 ] || "Cons" !== f [ 0 ] ) && c ( "zipWith" ) ; for ( var e = [ ] ; "Cons" ===
b [ 0 ] && "Cons" === f [ 0 ] ; ) e . push ( a ( b [ 1 ] ) ( f [ 1 ] ) ) , b = b [ 2 ] , f = f [ 2 ] ; for ( var f = [ "Nil" ] , n = e . length ; n -- ; ) f = [ "Cons" , e [ n ] , f ] ; return f } } } , zip : function ( a ) { return function ( b ) { if ( "Nil" === a [ 0 ] || "Nil" === b [ 0 ] ) return [ "Nil" ] ; ( "Cons" !== a [ 0 ] || "Cons" !== b [ 0 ] ) && c ( "zip" ) ; for ( var f = [ ] ; "Cons" === a [ 0 ] && "Cons" === b [ 0 ] ; ) f . push ( [ "Tuple2" , a [ 1 ] , b [ 1 ] ] ) , a = a [ 2 ] , b = b [ 2 ] ; for ( var b = [ "Nil" ] , e = f . length ; e -- ; ) b = [ "Cons" , f [ e ] , b ] ; return b } } , unzip : l , intersperse : h , intercalate : e , sort : function ( a ) { if ( "Nil" === a [ 0 ] ) return a ; "Cons" !== a [ 0 ] && c ( "sort" ) ; for ( var b =
[ ] ; "Cons" === a [ 0 ] ; ) b . push ( a [ 1 ] ) , a = a [ 2 ] ; b . sort ( function ( c , a ) { return c - a } ) ; for ( var a = [ "Nil" ] , f = b . length ; f -- ; ) a = [ "Cons" , b [ f ] , a ] ; return a } , take : function ( a ) { return function ( b ) { if ( 0 >= a ) return [ "Nil" ] ; if ( "Nil" === b [ 0 ] ) return b ; "Cons" !== b [ 0 ] && c ( "take" ) ; var f = [ "Cons" , b [ 1 ] , [ "Nil" ] ] , e = f , b = b [ 2 ] ; for ( -- a ; "Cons" === b [ 0 ] && 0 < a ; ) e [ 2 ] = [ "Cons" , b [ 1 ] , [ "Nil" ] ] , e = e [ 2 ] , b = b [ 2 ] , -- a ; return f } } , drop : function ( a ) { return function ( b ) { if ( "Nil" === b [ 0 ] ) return b ; for ( "Cons" !== b [ 0 ] && c ( "drop" ) ; "Cons" === b [ 0 ] && 0 < a ; ) b = b [ 2 ] , -- a ; return b } } } } ( ) ;
2012-11-04 01:26:19 +00:00
Elm = Elm || { } ;
Elm . Maybe = function ( ) { function d ( a ) { return function ( d ) { return "Just" === a [ 0 ] ? [ "Cons" , a [ 1 ] , d ] : d } } function a ( a ) { return function ( d ) { return function ( j ) { var b = a ( d ) ; return "Just" === b [ 0 ] ? [ "Cons" , b [ 1 ] , j ] : j } } } return { Just : function ( a ) { return [ "Just" , a ] } , Nothing : [ "Nothing" ] , catMaybes : Elm . List . foldr ( d ) ( [ "Nil" ] ) , isJust : function ( a ) { return "Just" === a [ 0 ] } , isNothing : function ( a ) { return "Nothing" === a [ 0 ] } , fromMaybe : function ( a ) { return function ( d ) { return "Just" === d [ 0 ] ? d [ 1 ] : a } } , consMaybe : d , mapMaybe : function ( g ) { return Elm . List . foldr ( a ( g ) ) ( [ "Nil" ] ) } , maybe : function ( a ) { return function ( d ) { return function ( j ) { return "Just" ===
j [ 0 ] ? d ( j [ 1 ] ) : a } } } } } ( ) ;
2012-11-04 23:16:37 +00:00
( function ( ) { for ( var d in Elm ) this [ d ] = Elm [ d ] ; if ( Elm . Dict ) throw "Module name collision, 'Dict' is already defined." ; Elm . Dict = function ( ) { function a ( a ) { return function ( c ) { return function ( b ) { return function ( f ) { return function ( e ) { return [ "RBNode" , a , c , b , f , e ] } } } } } function g ( a ) { return function ( ) { switch ( a [ 0 ] ) { case "RBEmpty" : return z ( Value . str ( "(min RBEmpty) is not defined" ) ) ; case "RBNode" : switch ( a [ 4 ] [ 0 ] ) { case "RBEmpty" : return [ "Tuple2" , a [ 2 ] , a [ 3 ] ] } return g ( a [ 4 ] ) } throw "Non-exhaustive pattern match in case" ; } ( ) }
function d ( a ) { return function ( c ) { var b ; a : { switch ( c [ 0 ] ) { case "RBEmpty" : b = Nothing ; break a ; case "RBNode" : b = function ( ) { switch ( compare ( a ) ( c [ 2 ] ) [ 0 ] ) { case "EQ" : return Just ( c [ 3 ] ) ; case "GT" : return d ( a ) ( c [ 5 ] ) ; case "LT" : return d ( a ) ( c [ 4 ] ) } throw "Non-exhaustive pattern match in case" ; } ( ) ; break a } throw "Non-exhaustive pattern match in case" ; } return b } } function j ( a ) { return function ( c ) { return function ( b ) { var f ; a : { switch ( b [ 0 ] ) { case "RBEmpty" : f = a ; break a ; case "RBNode" : f = function ( ) { switch ( compare ( c ) ( b [ 2 ] ) [ 0 ] ) { case "EQ" : return b [ 3 ] ;
case "GT" : return j ( a ) ( c ) ( b [ 5 ] ) ; case "LT" : return j ( a ) ( c ) ( b [ 4 ] ) } throw "Non-exhaustive pattern match in case" ; } ( ) ; break a } throw "Non-exhaustive pattern match in case" ; } return f } } } function b ( a ) { return function ( c ) { return A ( d ( a ) ( c ) ) } } function l ( c ) { a : { switch ( c [ 0 ] ) { case "RBNode" : switch ( c [ 5 ] [ 0 ] ) { case "RBNode" : c = a ( c [ 1 ] ) ( c [ 5 ] [ 2 ] ) ( c [ 5 ] [ 3 ] ) ( a ( w ) ( c [ 2 ] ) ( c [ 3 ] ) ( c [ 4 ] ) ( c [ 5 ] [ 4 ] ) ) ( c [ 5 ] [ 5 ] ) ; break a } } c = z ( Value . str ( "rotateLeft of a node without enough children" ) ) } return c } function h ( c ) { a : { switch ( c [ 0 ] ) { case "RBNode" : switch ( c [ 4 ] [ 0 ] ) { case "RBNode" : c =
a ( c [ 1 ] ) ( c [ 4 ] [ 2 ] ) ( c [ 4 ] [ 3 ] ) ( c [ 4 ] [ 4 ] ) ( a ( w ) ( c [ 2 ] ) ( c [ 3 ] ) ( c [ 4 ] [ 5 ] ) ( c [ 5 ] ) ) ; break a } } c = z ( Value . str ( "rotateRight of a node without enough children" ) ) } return c } function e ( c ) { a : { switch ( c [ 0 ] ) { case "Black" : c = w ; break a ; case "Red" : c = C ; break a } throw "Non-exhaustive pattern match in case" ; } return c } function c ( c ) { a : { switch ( c [ 0 ] ) { case "RBNode" : switch ( c [ 4 ] [ 0 ] ) { case "RBNode" : switch ( c [ 5 ] [ 0 ] ) { case "RBNode" : c = a ( e ( c [ 1 ] ) ) ( c [ 2 ] ) ( c [ 3 ] ) ( a ( e ( c [ 4 ] [ 1 ] ) ) ( c [ 4 ] [ 2 ] ) ( c [ 4 ] [ 3 ] ) ( c [ 4 ] [ 4 ] ) ( c [ 4 ] [ 5 ] ) ) ( a ( e ( c [ 5 ] [ 1 ] ) ) ( c [ 5 ] [ 2 ] ) ( c [ 5 ] [ 3 ] ) ( c [ 5 ] [ 4 ] ) ( c [ 5 ] [ 5 ] ) ) ;
break a } } } c = z ( Value . str ( "color_flip called on a RBEmpty or RBNode with a RBEmpty child" ) ) } return c } function f ( a ) { a : switch ( a [ 0 ] ) { case "RBNode" : switch ( a [ 5 ] [ 0 ] ) { case "RBNode" : switch ( a [ 5 ] [ 1 ] [ 0 ] ) { case "Red" : a = l ( a ) ; break a } } } a : switch ( a [ 0 ] ) { case "RBNode" : switch ( a [ 4 ] [ 0 ] ) { case "RBNode" : switch ( a [ 4 ] [ 1 ] [ 0 ] ) { case "Red" : switch ( a [ 4 ] [ 4 ] [ 0 ] ) { case "RBNode" : switch ( a [ 4 ] [ 4 ] [ 1 ] [ 0 ] ) { case "Red" : a = h ( a ) ; break a } } } } } a : switch ( a [ 0 ] ) { case "RBNode" : switch ( a [ 4 ] [ 0 ] ) { case "RBNode" : switch ( a [ 4 ] [ 1 ] [ 0 ] ) { case "Red" : switch ( a [ 5 ] [ 0 ] ) { case "RBNode" : switch ( a [ 5 ] [ 1 ] [ 0 ] ) { case "Red" : a =
c ( a ) ; break a } } } } } return a } function n ( c ) { a : switch ( c [ 0 ] ) { case "RBNode" : switch ( c [ 1 ] [ 0 ] ) { case "Red" : c = a ( C ) ( c [ 2 ] ) ( c [ 3 ] ) ( c [ 4 ] ) ( c [ 5 ] ) ; break a } } return c } function m ( c ) { return function ( b ) { return function ( e ) { var h = function ( e ) { var n ; a : { switch ( e [ 0 ] ) { case "RBEmpty" : n = a ( w ) ( c ) ( b ) ( y ) ( y ) ; break a ; case "RBNode" : n = function ( ) { switch ( compare ( c ) ( e [ 2 ] ) [ 0 ] ) { case "EQ" : return a ( e [ 1 ] ) ( e [ 2 ] ) ( b ) ( e [ 4 ] ) ( e [ 5 ] ) ; case "GT" : return a ( e [ 1 ] ) ( e [ 2 ] ) ( e [ 3 ] ) ( e [ 4 ] ) ( h ( e [ 5 ] ) ) ; case "LT" : return a ( e [ 1 ] ) ( e [ 2 ] ) ( e [ 3 ] ) ( h ( e [ 4 ] ) ) ( e [ 5 ] ) } throw "Non-exhaustive pattern match in case" ;
} ( ) ; n = f ( n ) ; break a } throw "Non-exhaustive pattern match in case" ; } return n } ; return n ( h ( e ) ) } } } function s ( c ) { a : { switch ( c [ 0 ] ) { case "RBNode" : switch ( c [ 4 ] [ 0 ] ) { case "RBNode" : switch ( c [ 4 ] [ 1 ] [ 0 ] ) { case "Red" : c = ! 0 ; break a } } } c = ! 1 } return c } function p ( c ) { a : { switch ( c [ 0 ] ) { case "RBNode" : switch ( c [ 4 ] [ 0 ] ) { case "RBNode" : switch ( c [ 4 ] [ 4 ] [ 0 ] ) { case "RBNode" : switch ( c [ 4 ] [ 4 ] [ 1 ] [ 0 ] ) { case "Red" : c = ! 0 ; break a } } } } c = ! 1 } return c } function k ( b ) { if ( not ( s ( b ) ) && not ( p ( b ) ) ) { b = c ( b ) ; a : switch ( b [ 0 ] ) { case "RBNode" : b : switch ( b [ 5 ] [ 0 ] ) { case "RBNode" : switch ( b [ 5 ] [ 4 ] [ 0 ] ) { case "RBNode" : switch ( b [ 5 ] [ 4 ] [ 1 ] [ 0 ] ) { case "Red" : b =
c ( l ( a ( b [ 1 ] ) ( b [ 2 ] ) ( b [ 3 ] ) ( b [ 4 ] ) ( h ( b [ 5 ] ) ) ) ) ; break b } } } break a } } return b } function u ( b ) { return function ( e ) { var d ; a : { switch ( e [ 0 ] ) { case "RBEmpty" : d = y ; break a ; case "RBNode" : if ( "LT" === compare ( b ) ( e [ 2 ] ) [ 0 ] ) { d = k ( e ) ; b : { switch ( d [ 0 ] ) { case "RBEmpty" : d = z ( Value . str ( "delLT on RBEmpty" ) ) ; break b ; case "RBNode" : d = f ( a ( d [ 1 ] ) ( d [ 2 ] ) ( d [ 3 ] ) ( del ( d [ 4 ] ) ) ( d [ 5 ] ) ) ; break b } break } } else { e = s ( e ) ? h ( e ) : e ; b : { switch ( e [ 0 ] ) { case "RBNode" : switch ( e [ 5 ] [ 0 ] ) { case "RBEmpty" : e = eq ( b , e [ 2 ] ) ; break b } } e = ! 1 } if ( e ) d = y ; else { var e = not , i ; b : { switch ( d [ 0 ] ) { case "RBNode" : switch ( d [ 5 ] [ 0 ] ) { case "RBNode" : switch ( d [ 5 ] [ 1 ] [ 0 ] ) { case "Red" : i =
! 0 ; break b } } } i = ! 1 } if ( e = e ( i ) ) { e = not ; b : { switch ( d [ 0 ] ) { case "RBNode" : switch ( d [ 5 ] [ 0 ] ) { case "RBNode" : switch ( d [ 5 ] [ 4 ] [ 0 ] ) { case "RBNode" : switch ( d [ 5 ] [ 4 ] [ 1 ] [ 0 ] ) { case "Red" : i = ! 0 ; break b } } } } i = ! 1 } e = e ( i ) } e && ( d = c ( d ) , d = p ( d ) ? c ( h ( d ) ) : d ) ; b : { switch ( d [ 0 ] ) { case "RBNode" : e = eq ( b , d [ 2 ] ) ; break b } e = ! 1 } if ( e ) b : { switch ( d [ 0 ] ) { case "RBEmpty" : d = z ( Value . str ( "delEQ called on a RBEmpty" ) ) ; break b ; case "RBNode" : i = g ( d [ 5 ] ) ; c : { switch ( i [ 0 ] ) { case "Tuple2" : e = i [ 1 ] ; break c } break } c : { switch ( i [ 0 ] ) { case "Tuple2" : i = i [ 2 ] ; break c } break } var e = a ( d [ 1 ] ) ( e ) ( i ) ( d [ 4 ] ) ,
j = function ( c ) { a : { switch ( c [ 0 ] ) { case "RBNode" : switch ( c [ 4 ] [ 0 ] ) { case "RBEmpty" : c = y ; break a } } c = k ( c ) ; b : { switch ( c [ 0 ] ) { case "RBEmpty" : c = y ; break b ; case "RBNode" : c = f ( a ( c [ 1 ] ) ( c [ 2 ] ) ( c [ 3 ] ) ( j ( c [ 4 ] ) ) ( c [ 5 ] ) ) ; break b } throw "Non-exhaustive pattern match in case" ; } } return c } ; d = n ( j ( d [ 5 ] ) ) ; d = f ( e ( d ) ) ; break b } break } else b : { switch ( d [ 0 ] ) { case "RBEmpty" : d = z ( Value . str ( "delGT called on a RBEmpty" ) ) ; break b ; case "RBNode" : d = f ( a ( d [ 1 ] ) ( d [ 2 ] ) ( d [ 3 ] ) ( d [ 4 ] ) ( del ( d [ 5 ] ) ) ) ; break b } break } } } break a } throw "Non-exhaustive pattern match in case" ;
2012-11-04 01:26:19 +00:00
} return n ( d ) } } function x ( c ) { return function ( b ) { a : { switch ( b [ 0 ] ) { case "RBEmpty" : b = y ; break a ; case "RBNode" : b = a ( b [ 1 ] ) ( b [ 2 ] ) ( c ( b [ 3 ] ) ) ( x ( c ) ( b [ 4 ] ) ) ( x ( c ) ( b [ 5 ] ) ) ; break a } throw "Non-exhaustive pattern match in case" ; } return b } } function q ( c ) { return function ( a ) { return function ( b ) { a : { switch ( b [ 0 ] ) { case "RBEmpty" : b = a ; break a ; case "RBNode" : b = q ( c ) ( c ( b [ 2 ] ) ( b [ 3 ] ) ( q ( c ) ( a ) ( b [ 4 ] ) ) ) ( b [ 5 ] ) ; break a } throw "Non-exhaustive pattern match in case" ; } return b } } } function r ( c ) { return function ( a ) { return function ( b ) { a : { switch ( b [ 0 ] ) { case "RBEmpty" : b =
2012-11-04 23:16:37 +00:00
a ; break a ; case "RBNode" : b = r ( c ) ( c ( b [ 2 ] ) ( b [ 3 ] ) ( r ( c ) ( a ) ( b [ 5 ] ) ) ) ( b [ 4 ] ) ; break a } throw "Non-exhaustive pattern match in case" ; } return b } } } var t = [ ] , v ; for ( v in Elm . Prelude ) 0 <= t . indexOf ( v ) || ( this [ v ] = Elm . Prelude [ v ] ) ; var A = Elm . Maybe . isJust , w = [ "Red" ] , C = [ "Black" ] , y = [ "RBEmpty" ] , B = y , z = console . log ; return { empty : B , lookup : d , findWithDefault : j , member : b , insert : m , singleton : function ( c ) { return function ( a ) { return m ( c ) ( a ) ( y ) } } , remove : u , map : x , foldl : q , foldr : r , union : function ( c ) { return function ( a ) { return q ( m ) ( a ) ( c ) } } , intersect : function ( c ) { return function ( a ) { return q ( function ( c ) { return function ( f ) { return function ( e ) { return b ( c ) ( a ) ?
m ( c ) ( f ) ( e ) : e } } } ) ( B ) ( c ) } } , diff : function ( c ) { return function ( a ) { return q ( function ( c ) { return function ( ) { return function ( a ) { return u ( c ) ( a ) } } } ) ( c ) ( a ) } } , keys : function ( c ) { return q ( function ( c ) { return function ( ) { return function ( a ) { return [ "Cons" , c , a ] } } } ) ( [ "Nil" ] ) ( c ) } , values : function ( c ) { return q ( function ( ) { return function ( c ) { return function ( a ) { return [ "Cons" , c , a ] } } } ) ( [ "Nil" ] ) ( c ) } , toList : function ( c ) { return q ( function ( c ) { return function ( a ) { return function ( b ) { return [ "Cons" , [ "Tuple2" , c , a ] , b ] } } } ) ( [ "Nil" ] ) ( c ) } , fromList : function ( c ) { return List . foldl ( uncurry ( m ) ) ( B ) ( c ) } } } ( ) } ) ( ) ;
( function ( ) { for ( var d in Elm ) this [ d ] = Elm [ d ] ; Elm . Set = function ( ) { var a = [ ] , d ; for ( d in Elm . Prelude ) 0 <= a . indexOf ( d ) || ( this [ d ] = Elm . Prelude [ d ] ) ; a = Dict . empty ; d = Dict . remove ; var i = Dict . member , j = Dict . union , b = Dict . intersect , l = Dict . diff , h = Dict . keys , e = List . foldl ( function ( c ) { return function ( a ) { return Dict . insert ( c ) ( [ "Tuple0" ] ) ( a ) } } ) ( a ) ; return { empty : a , singleton : function ( c ) { return Dict . singleton ( c ) ( [ "Tuple0" ] ) } , insert : function ( c ) { return Dict . insert ( c ) ( [ "Tuple0" ] ) } , remove : d , member : i , union : j , intersect : b , diff : l , toList : h ,
fromList : e , foldl : function ( c ) { return Dict . foldl ( function ( a ) { return function ( ) { return function ( b ) { return c ( a ) ( b ) } } } ) } , foldr : function ( c ) { return Dict . foldr ( function ( a ) { return function ( ) { return function ( b ) { return c ( a ) ( b ) } } } ) } , map : function ( c ) { return function ( a ) { a = h ( a ) ; return e ( List . map ( c ) ( a ) ) } } } } ( ) } ) ( ) ; Elm = Elm || { } ;
2012-11-04 01:26:19 +00:00
Elm . Char = function ( ) { function d ( a , b ) { return function ( d ) { d = d . charCodeAt ( 0 ) ; return a <= d && d <= b } } var a = d ( 48 , 57 ) , g = d ( 97 , 102 ) , i = d ( 65 , 70 ) ; return { fromCode : function ( a ) { return String . fromCharCode ( a ) } , toCode : function ( a ) { return a . charCodeAt ( 0 ) } , toUpper : function ( a ) { return a . toUpperCase ( ) } , toLower : function ( a ) { return a . toLowerCase ( ) } , toLocaleUpper : function ( a ) { return a . toLocaleUpperCase ( ) } , toLocaleLower : function ( a ) { return a . toLocaleLowerCase ( ) } , isLower : d ( 97 , 122 ) , isUpper : d ( 65 , 90 ) , isDigit : a , isOctDigit : d ( 48 , 55 ) , isHexDigit : function ( d ) { return a ( d ) ||
g ( d ) || i ( d ) } } } ( ) ; Elm = Elm || { } ;
Elm . Color = function ( ) { return { rgba : function ( d ) { return function ( a ) { return function ( g ) { return function ( i ) { return [ "Color" , d , a , g , i ] } } } } , rgb : function ( d ) { return function ( a ) { return function ( g ) { return [ "Color" , d , a , g , 1 ] } } } , red : [ "Color" , 255 , 0 , 0 , 1 ] , green : [ "Color" , 0 , 255 , 0 , 1 ] , blue : [ "Color" , 0 , 0 , 255 , 1 ] , yellow : [ "Color" , 255 , 255 , 0 , 1 ] , cyan : [ "Color" , 0 , 255 , 255 , 1 ] , magenta : [ "Color" , 255 , 0 , 255 , 1 ] , black : [ "Color" , 0 , 0 , 0 , 1 ] , white : [ "Color" , 255 , 255 , 255 , 1 ] , gray : [ "Color" , 128 , 128 , 128 , 1 ] , grey : [ "Color" , 128 , 128 , 128 , 1 ] , complement : function ( d ) { var a ,
g = d [ 1 ] / 255 ; a = d [ 2 ] / 255 ; var i = d [ 3 ] / 255 , d = Math . max ( g , a , i ) , j = Math . min ( g , a , i ) , j = d - j , b = 0 ; 0 === j ? b = 0 : d === g ? b = ( a - i ) / j % 6 : d === a ? b = ( i - g ) / j + 2 : d === i && ( b = ( g - a ) / j + 4 ) ; a = 60 * b ; var g = d * ( 0 === d ? 0 : j / d ) , b = ( a + 180 ) % 360 / 60 , l = g * ( 1 - Math . abs ( b % 2 - 1 ) ) , j = i = a = 0 ; 0 <= b && 1 > b ? ( a = g , i = l , j = 0 ) : 1 <= b && 2 > b ? ( a = l , i = g , j = 0 ) : 2 <= b && 3 > b ? ( a = 0 , i = g , j = l ) : 3 <= b && 4 > b ? ( a = 0 , i = l , j = g ) : 4 <= b && 5 > b ? ( a = l , i = 0 , j = g ) : 5 <= b && 6 > b && ( a = g , i = 0 , j = l ) ; d -= g ; return [ "Color" , Math . round ( 255 * ( a + d ) ) , Math . round ( 255 * ( i + d ) ) , Math . round ( 255 * ( j + d ) ) , 1 ] } , extract : function ( d ) { return 1 === d [ 4 ] ? "rgb(" +
d [ 1 ] + "," + d [ 2 ] + "," + d [ 3 ] + ")" : "rgba(" + d [ 1 ] + "," + d [ 2 ] + "," + d [ 3 ] + "," + d [ 4 ] + ")" } } } ( ) ;
var Collage = function ( ) { function d ( a , c ) { var b = c . length - 1 ; if ( ! ( 0 >= b ) ) for ( a . moveTo ( c [ b ] [ 1 ] , c [ b ] [ 2 ] ) ; b -- ; ) a . lineTo ( c [ b ] [ 1 ] , c [ b ] [ 2 ] ) } function a ( a , c , b , d ) { 0 === a . length && ( a = [ 8 , 4 ] ) ; var h = d . length - 1 ; if ( ! ( 0 >= h ) ) { var g = d [ h ] [ 1 ] , i = d [ h ] [ 2 ] , k = 0 , j = 0 , l = 0 , q = 0 , r = 0 , t = 0 , v = a . length , A = ! 0 , w = a [ 0 ] ; for ( c . moveTo ( g , i ) ; h -- ; ) { k = d [ h ] [ 1 ] ; j = d [ h ] [ 2 ] ; l = k - g ; q = j - i ; for ( r = Math . sqrt ( l * l + q * q ) ; w <= r ; ) g += l * w / r , i += q * w / r , c [ A ? "lineTo" : "moveTo" ] ( g , i ) , l = k - g , q = j - i , r = Math . sqrt ( l * l + q * q ) , A = ! A , t = ( t + 1 ) % v , w = a [ t ] ; 0 < r && ( c [ A ? "lineTo" : "moveTo" ] ( k , j ) , w -= r ) ; g =
2012-11-04 23:16:37 +00:00
k ; i = j } } c . strokeStyle = Elm . Color . extract ( b ) ; c . stroke ( ) } function g ( b , c , f , n , g ) { c . clearRect ( 0 , 0 , f , n ) ; for ( f = g . length ; f -- ; ) { var i = g [ f ] , p = b , n = c , k = i [ 1 ] , j = i [ 2 ] , l = i [ 3 ] [ 1 ] , q = i [ 3 ] [ 2 ] , i = i [ 4 ] ; n . save ( ) ; ( 0 !== l || 0 !== q ) && n . translate ( l , q ) ; k !== ~ ~ k && n . rotate ( 2 * Math . PI * k ) ; 1 !== j && n . scale ( j , j ) ; n . beginPath ( ) ; switch ( i [ 0 ] ) { case "FLine" : a : switch ( p = n , k = i , i = k [ 3 ] [ 1 ] , k [ 1 ] [ 0 ] ) { case "Solid" : k = k [ 2 ] ; d ( p , i ) ; p . strokeStyle = Elm . Color . extract ( k ) ; p . stroke ( ) ; break ; case "Dotted" : a ( [ 3 , 3 ] , p , k [ 2 ] , i ) ; break a ; case "Dashed" : a ( [ 8 , 4 ] , p , k [ 2 ] , i ) ; break a ;
2012-11-04 01:26:19 +00:00
case "Custom" : a ( k [ 1 ] [ 1 ] , p , k [ 2 ] , i ) } break ; case "FShape" : a : switch ( l = p , j = n , p = i [ 1 ] , k = i [ 2 ] , i = i [ 3 ] [ 1 ] , p [ 0 ] ) { case "Filled" : p = j ; d ( p , i ) ; p . fillStyle = Elm . Color . extract ( k ) ; p . fill ( ) ; break a ; case "Outlined" : p = j ; d ( p , i ) ; p . strokeStyle = Elm . Color . extract ( k ) ; p . stroke ( ) ; break a ; case "Textured" : k = l ; p = p [ 1 ] ; l = new Image ; l . src = h . castStringToJSString ( p ) ; l . onload = k ; d ( j , i ) ; j . fillStyle = j . createPattern ( l , "repeat" ) ; j . fill ( ) ; break a ; case "CustomOutline" : a ( p [ 1 ] , j , k , i ) } break ; case "FImage" : k = n , j = i [ 1 ] , l = i [ 2 ] , i = i [ 3 ] , q = new Image , q . onload =
p , q . src = h . castStringToJSString ( i ) , k . drawImage ( q , - j / 2 , - l / 2 , j , l ) } n . restore ( ) } } function i ( a , c , b ) { var d = Render . newElement ( "canvas" ) ; d . style . width = ~ ~ a + "px" ; d . style . height = ~ ~ c + "px" ; d . style . display = "block" ; d . width = ~ ~ a ; d . height = ~ ~ c ; if ( d . getContext ) { var h = d . getContext ( "2d" ) , a = d . width , c = d . height ; g ( function ( ) { g ( this , h , a , c , b ) } , h , a , c , b ) ; return d } d . innerHTML = "Your browser does not support the canvas element." ; return d } function j ( a , c , b , d , h , i , g ) { var k = Render . render ( g ) , b = "translate(" + ( h - g [ 3 ] / 2 ) + "px," + ( i - g [ 4 ] / 2 ) + "px) " +
( 1 === d ? "" : "scale(" + d + "," + d + ")" ) + " " + ( b === ~ ~ b ? "" : "rotate(" + 360 * b + "deg)" ) ; k . style . transform = b ; k . style . msTransform = b ; k . style . MozTransform = b ; k . style . webkitTransform = b ; k . style . OTransform = b ; b = Render . newElement ( "div" ) ; Render . addTo ( b , k ) ; b . style . width = ~ ~ a + "px" ; b . style . height = ~ ~ c + "px" ; b . style . overflow = "hidden" ; return b } function b ( a , c , b ) { if ( ! Value . eq ( b , c ) ) { var d = a . style . width . slice ( 0 , - 2 ) - 0 , h = a . style . height . slice ( 0 , - 2 ) - 0 ; if ( "object" === typeof b [ 0 ] ) { if ( "object" === typeof c [ 0 ] && a . getContext ) { var l = a . getContext ( "2d" ) ;
return g ( function ( ) { g ( this , l , d , h , b ) } , l , d , h , b ) } c = i ( d , h , b ) ; c . style . position = "absolute" ; return a . parentNode . replaceChild ( c , a ) } c = j ( d , h , b [ 1 ] , b [ 2 ] , b [ 3 ] [ 1 ] , b [ 3 ] [ 2 ] , b [ 4 ] [ 1 ] ) ; c . style . position = "absolute" ; return a . parentNode . replaceChild ( c , a ) } } function l ( a , c , b , d , h ) { var i = 0 , g , k = ( a [ 1 ] - d [ 1 ] ) / b , a = ( a [ 2 ] - d [ 2 ] ) / b ; 0 !== c && ( c *= - 2 * Math . PI , b = k * Math . cos ( c ) - a * Math . sin ( c ) , a = k * Math . sin ( c ) + a * Math . cos ( c ) , k = b ) ; if ( 0 === h . length ) return ! 1 ; g = h [ 0 ] ; for ( b = h . length - 1 ; b -- ; ) { c = h [ b ] ; d = g [ 1 ] ; g = g [ 2 ] ; var j = c [ 1 ] , l = c [ 2 ] ; if ( g < l ) var q = g , r = l ; else q =
2012-11-04 23:16:37 +00:00
l , r = g ; if ( d < j ) var t = d , v = j ; else t = j , v = d ; q < a && a <= r && k <= v && ( k <= t || k <= ( a - g ) * ( j - d ) / ( l - g ) + d ) && ++ i ; g = c } return 1 === i % 2 } var h = Elm . JavaScript ; return { collage : function ( a , c , b ) { if ( 0 === b . length ) return i ( a , c , [ ] ) ; for ( var d = Array ( b . length ) , h = b . length ; h -- ; ) { var g = b [ h ] ; d [ h ] = "string" === typeof g [ 0 ] ? j ( a , c , g [ 1 ] , g [ 2 ] , g [ 3 ] [ 1 ] , g [ 3 ] [ 2 ] , g [ 4 ] [ 1 ] ) : i ( a , c , g ) } return 1 === b . length ? d [ 0 ] : Render . flowWith ( Render . goIn , function ( c ) { return c } , d ) } , updateCollage : function ( a , c , f ) { if ( 1 === f . length ) return b ( a , c [ 0 ] , f [ 0 ] ) ; for ( var a = a . childNodes , d = a . length ,
h = d ; h -- ; ) b ( a [ d - h - 1 ] , c [ h ] , f [ h ] ) } , insideForm : function ( a ) { return function ( c ) { var b = a [ 1 ] , d = a [ 2 ] ; if ( 6 > c . length ) { var h = c [ 3 ] [ 1 ] , g = c [ 3 ] [ 2 ] , i = 0 , j = c [ 2 ] ; switch ( c [ 4 ] [ 0 ] ) { case "FShape" : for ( var u = c [ 4 ] [ 3 ] [ 1 ] , x = u . length ; -- x ; ) var q = u [ x ] , i = Math . max ( i , q [ 1 ] * q [ 1 ] + q [ 2 ] * q [ 2 ] ) ; i *= j * j ; break ; case "FImage" : u = j * c [ 4 ] [ 1 ] / 2 ; j = j * c [ 4 ] [ 2 ] / 2 ; i = u * u + j * j ; break ; case "FElement" : u = j * c [ 4 ] [ 1 ] [ 3 ] / 2 , j = j * c [ 4 ] [ 1 ] [ 4 ] / 2 , i = u * u + j * j } c . push ( function ( c , a ) { var b = c - h , f = a - g ; return b * b + f * f < i + 1 } ) } if ( ! c [ 5 ] ( b , d ) ) return ! 1 ; var r , t ; switch ( c [ 4 ] [ 0 ] ) { case "FShape" : return l ( a ,
2012-11-04 01:26:19 +00:00
c [ 1 ] , c [ 2 ] , c [ 3 ] , c [ 4 ] [ 3 ] [ 1 ] ) ; case "FLine" : return ! 1 ; case "FImage" : r = c [ 4 ] [ 1 ] / 2 ; t = c [ 4 ] [ 2 ] / 2 ; break ; case "FElement" : r = c [ 4 ] [ 1 ] [ 3 ] / 2 , t = c [ 4 ] [ 1 ] [ 4 ] / 2 } return l ( a , c [ 1 ] , c [ 2 ] , c [ 3 ] , [ [ null , r , t ] , [ null , - r , t ] , [ null , - r , - t ] , [ null , r , - t ] , [ null , r , t ] ] ) } } } } ( ) , Elm = Elm || { } ;
2012-11-04 23:16:37 +00:00
Elm . Graphics = function ( ) { function d ( c ) { return function ( a ) { return [ "Position" , c , a ] } } function a ( c ) { return function ( a ) { return [ "EText" , c , a ] } } function g ( c ) { return function ( a ) { return [ "EFlow" , c , k . castListToJSArray ( a ) ] } } function i ( c ) { return [ "Line" , k . castListToJSArray ( c ) ] } function j ( c ) { return function ( a ) { var b = k . castListToJSArray ( c ) ; 0 < b . length && b . push ( b [ 0 ] ) ; return [ "Shape" , b , a ] } } function b ( c ) { return function ( a ) { return function ( b ) { return function ( f ) { return [ "Form" , c , a , b , f ] } } } } function l ( c ) { return function ( a ) { return function ( b ) { return [ "FLine" ,
c , a , b ] } } } function h ( c ) { return function ( a ) { return function ( b ) { return [ "FShape" , c , a , b ] } } } function e ( c , a , b , f , d , e ) { return [ "Element" , Guid . guid ( ) , c , a , b , f , d , e ] } function c ( c , a , b ) { return [ "Element" , Guid . guid ( ) , c , a , b , 1 , Nothing , Nothing ] } function f ( c ) { return ~ ~ c [ 3 ] } function n ( c ) { return ~ ~ c [ 4 ] } function m ( a ) { return function ( b ) { return function ( f ) { return c ( [ "EImage" , k . castStringToJSString ( f ) ] , a , b ) } } } function s ( a ) { return function ( b ) { return c ( A , a , b ) } } function p ( c ) { return function ( a ) { return function ( b ) { var f = map ( function ( b ) { return [ "Tuple2" ,
c / 2 * cos ( 2 * ( pi / 50 ) * b ) , a / 2 * sin ( 2 * ( pi / 50 ) * b ) ] } ) , d = 49 , e = [ "Nil" ] ; if ( 0 <= d ) { do e = [ "Cons" , d , e ] ; while ( 0 < d -- ) } return j ( f ( e ) ) ( b ) } } } var k = Elm . JavaScript , u = [ "DRight" ] , x = [ "DDown" ] , q = [ "DOut" ] , r = [ "Near" ] , t = [ "Mid" ] , v = [ "Far" ] , A = [ "EEmpty" ] , w = [ "Solid" ] , C = [ "Dotted" ] , y = [ "Dashed" ] , B = [ "Filled" ] , z = [ "Outlined" ] , D = d ( r ) ( r ) , E = d ( v ) ( r ) , F = d ( r ) ( v ) , G = d ( v ) ( v ) , H = d ( r ) ( t ) , I = d ( v ) ( t ) , r = d ( t ) ( r ) , v = d ( t ) ( v ) , t = d ( t ) ( t ) ; return { left : [ "DLeft" ] , right : u , down : x , up : [ "DUp" ] , inward : [ "DIn" ] , outward : q , topLeft : D , topRight : E , bottomLeft : F , bottomRight : G , midLeft : H ,
2012-11-04 01:26:19 +00:00
midRight : I , midTop : r , midBottom : v , middle : t , middleAt : function ( c ) { return function ( a ) { return [ "PositionAt" , c , a ] } } , topLeftAt : function ( c ) { return function ( a ) { return [ "PositionTL" , c , a ] } } , topRightAt : function ( c ) { return function ( a ) { return [ "PositionTR" , c , a ] } } , bottomLeftAt : function ( c ) { return function ( a ) { return [ "PositionBL" , c , a ] } } , bottomRightAt : function ( c ) { return function ( a ) { return [ "PositionBR" , c , a ] } } , absolute : function ( c ) { return [ "Absolute" , c ] } , relative : function ( c ) { return [ "Relative" , c ] } , width : function ( c ) { return function ( a ) { var b =
2012-11-04 23:16:37 +00:00
a [ 2 ] ; switch ( b [ 0 ] ) { case "EImage" : case "EVideo" : return e ( a [ 2 ] , c , a [ 4 ] * c / a [ 3 ] , a [ 5 ] , a [ 6 ] , a [ 7 ] ) ; case "EText" : return b = Value . getTextSize ( c , a [ 4 ] , b [ 2 ] ) , e ( a [ 2 ] , c , b [ 1 ] , a [ 5 ] , a [ 6 ] , a [ 7 ] ) } return e ( a [ 2 ] , c , a [ 4 ] , a [ 5 ] , a [ 6 ] , a [ 7 ] ) } } , height : function ( a ) { return function ( c ) { switch ( c [ 2 ] [ 0 ] ) { case "EImage" : case "EVideo" : return e ( c [ 2 ] , c [ 3 ] * a / c [ 4 ] , a , c [ 5 ] , c [ 6 ] , c [ 7 ] ) } return e ( c [ 2 ] , c [ 3 ] , a , c [ 5 ] , c [ 6 ] , c [ 7 ] ) } } , size : function ( c ) { return function ( a ) { return function ( b ) { return e ( b [ 2 ] , c , a , b [ 5 ] , b [ 6 ] , b [ 7 ] ) } } } , opacity : function ( c ) { return function ( a ) { return e ( a [ 2 ] ,
a [ 3 ] , a [ 4 ] , c , a [ 6 ] , a [ 7 ] ) } } , color : function ( c ) { return function ( a ) { return e ( a [ 2 ] , a [ 3 ] , a [ 4 ] , a [ 5 ] , Just ( c ) , a [ 7 ] ) } } , link : function ( a ) { return function ( c ) { return e ( c [ 2 ] , c [ 3 ] , c [ 4 ] , c [ 5 ] , c [ 6 ] , Just ( k . castStringToJSString ( a ) ) ) } } , widthOf : f , heightOf : n , sizeOf : function ( c ) { return [ "Tuple2" , ~ ~ c [ 3 ] , ~ ~ c [ 4 ] ] } , text : function ( b ) { var f = Value . getTextSize ( 0 , 0 , b ) ; return c ( a ( "left" ) ( b ) , f [ 0 ] , f [ 1 ] ) } , asText : function ( b ) { var b = monospace ( Value . toText ( Value . show ( b ) ) ) , f = Value . getTextSize ( 0 , 0 , b ) ; return c ( a ( "left" ) ( b ) , f [ 0 ] , f [ 1 ] ) } , plainText : function ( b ) { var b =
Value . toText ( b ) , f = Value . getTextSize ( 0 , 0 , b ) ; return c ( a ( "left" ) ( b ) , f [ 0 ] , f [ 1 ] ) } , centeredText : function ( b ) { var f = Value . getTextSize ( 0 , 0 , b ) ; return c ( a ( "center" ) ( b ) , f [ 0 ] , f [ 1 ] ) } , justifiedText : function ( b ) { var f = Value . getTextSize ( 0 , 0 , b ) ; return c ( a ( "justify" ) ( b ) , f [ 0 ] , f [ 1 ] ) } , rightedText : function ( b ) { var f = Value . getTextSize ( 0 , 0 , b ) ; return c ( a ( "right" ) ( b ) , f [ 0 ] , f [ 1 ] ) } , image : m , images : function ( c ) { var a = Elm . Signal . constant ( s ( 0 ) ( 0 ) ) , c = Elm . Signal . lift ( function ( c ) { var c = k . castStringToJSString ( c ) , b = new Image ; b . onload = function ( ) { Dispatcher . notify ( a . id ,
m ( this . width ) ( this . height ) ( c ) ) } ; b . src = c } ) ( c ) ; return Elm . Signal . lift2 ( function ( c ) { return function ( ) { return c } } ) ( a ) ( c ) } , video : function ( a ) { return function ( b ) { return function ( f ) { return c ( [ "EVideo" , k . castStringToJSString ( f ) ] , a , b ) } } } , fittedImage : function ( a ) { return function ( b ) { return function ( f ) { return c ( [ "EFittedImage" , k . castStringToJSString ( f ) ] , a , b ) } } } , flow : function ( a ) { return function ( b ) { var d ; d = map ( f ) ( b ) ; a : { switch ( a [ 0 ] ) { case "DLeft" : d = sum ( d ) ; break a ; case "DRight" : d = sum ( d ) ; break a } d = maximum ( d ) } var e ; e =
map ( n ) ( b ) ; a : { switch ( a [ 0 ] ) { case "DDown" : e = sum ( e ) ; break a ; case "DUp" : e = sum ( e ) ; break a } e = maximum ( e ) } return c ( g ( a ) ( b ) , d , e ) } } , above : function ( a ) { return function ( b ) { return c ( g ( x ) ( [ "Cons" , a , [ "Cons" , b , [ "Nil" ] ] ] ) , max ( ~ ~ a [ 3 ] ) ( ~ ~ b [ 3 ] ) , ~ ~ a [ 4 ] + ~ ~ b [ 4 ] ) } } , below : function ( a ) { return function ( b ) { return c ( g ( x ) ( [ "Cons" , b , [ "Cons" , a , [ "Nil" ] ] ] ) , max ( ~ ~ a [ 3 ] ) ( ~ ~ b [ 3 ] ) , ~ ~ a [ 4 ] + ~ ~ b [ 4 ] ) } } , beside : function ( a ) { return function ( b ) { return c ( g ( u ) ( [ "Cons" , a , [ "Cons" , b , [ "Nil" ] ] ] ) , ~ ~ a [ 3 ] + ~ ~ b [ 3 ] , max ( ~ ~ a [ 4 ] ) ( ~ ~ b [ 4 ] ) ) } } , layers : function ( a ) { return c ( g ( q ) ( a ) ,
maximum ( map ( f ) ( a ) ) , maximum ( map ( n ) ( a ) ) ) } , collage : function ( a ) { return function ( b ) { return function ( f ) { return c ( [ "ECollage" , a , b , Value . groupForms ( f ) ] , a , b ) } } } , spacer : s , container : function ( a ) { return function ( b ) { return function ( f ) { return function ( d ) { return c ( [ "EContainer" , f , d ] , a , b ) } } } } , line : i , segment : function ( a ) { return function ( c ) { return i ( [ "Cons" , a , [ "Cons" , c , [ "Nil" ] ] ] ) } } , polygon : j , rect : function ( a ) { return function ( c ) { return function ( b ) { return j ( [ "Cons" , [ "Tuple2" , 0 - a / 2 , 0 - c / 2 ] , [ "Cons" , [ "Tuple2" , 0 - a / 2 , c / 2 ] , [ "Cons" ,
[ "Tuple2" , a / 2 , c / 2 ] , [ "Cons" , [ "Tuple2" , a / 2 , 0 - c / 2 ] , [ "Nil" ] ] ] ] ] ) ( b ) } } } , oval : p , circle : function ( a ) { return p ( 2 * a ) ( 2 * a ) } , ngon : function ( a ) { return function ( c ) { return function ( b ) { var f = toFloat ( a ) , d = map ( function ( a ) { return [ "Tuple2" , c * cos ( 2 * ( pi / f ) * a ) , c * sin ( 2 * ( pi / f ) * a ) ] } ) , e = a - 1 , h = [ "Nil" ] ; if ( 0 <= e ) { do h = [ "Cons" , e , h ] ; while ( 0 < e -- ) } return j ( d ( h ) ) ( b ) } } } , solid : function ( a ) { return function ( c ) { return b ( 0 ) ( 1 ) ( [ "Tuple2" , 0 , 0 ] ) ( l ( w ) ( a ) ( c ) ) } } , dotted : function ( a ) { return function ( c ) { return b ( 0 ) ( 1 ) ( [ "Tuple2" , 0 , 0 ] ) ( l ( C ) ( a ) ( c ) ) } } , dashed : function ( a ) { return function ( c ) { return b ( 0 ) ( 1 ) ( [ "Tuple2" ,
0 , 0 ] ) ( l ( y ) ( a ) ( c ) ) } } , customLine : function ( a ) { return function ( c ) { return function ( f ) { return b ( 0 ) ( 1 ) ( [ "Tuple2" , 0 , 0 ] ) ( l ( [ "Custom" , k . castListToJSArray ( a ) ] ) ( c ) ( f ) ) } } } , filled : function ( a ) { return function ( c ) { return b ( 0 ) ( 1 ) ( c [ 2 ] ) ( h ( B ) ( a ) ( c ) ) } } , outlined : function ( a ) { return function ( c ) { return b ( 0 ) ( 1 ) ( c [ 2 ] ) ( h ( z ) ( a ) ( c ) ) } } , customOutline : function ( a ) { return function ( c ) { return function ( f ) { return b ( 0 ) ( 1 ) ( f [ 2 ] ) ( h ( [ "CustomOutline" , k . castListToJSArray ( a ) ] ) ( c ) ( f ) ) } } } , textured : function ( a ) { return function ( c ) { return b ( 0 ) ( 1 ) ( c [ 2 ] ) ( h ( [ "Textured" ,
a ] ) ( null ) ( c ) ) } } , sprite : function ( a ) { return function ( c ) { return function ( f ) { return function ( d ) { return b ( 0 ) ( 1 ) ( d ) ( [ "FImage" , c , f , k . castStringToJSString ( a ) ] ) } } } } , toForm : function ( a ) { return function ( c ) { return b ( 0 ) ( 1 ) ( a ) ( [ "FElement" , c ] ) } } , rotate : function ( a ) { return function ( c ) { a : { switch ( c [ 0 ] ) { case "Form" : var f = c [ 2 ] , d = c [ 3 ] , e = c [ 4 ] , c = b ( a + c [ 1 ] ) ( f ) ( d ) ( e ) ; break a } throw "Non-exhaustive pattern match in case" ; } return c } } , scale : function ( a ) { return function ( c ) { return b ( c [ 1 ] ) ( a * c [ 2 ] ) ( c [ 3 ] ) ( c [ 4 ] ) } } , move : function ( a ) { return function ( c ) { return function ( f ) { var d ;
a : { switch ( f [ 0 ] ) { case "Form" : d = f [ 1 ] ; var e = f [ 2 ] , h = f [ 3 ] , f = f [ 4 ] ; switch ( h [ 0 ] ) { case "Tuple2" : var g = h [ 1 ] , h = h [ 2 ] ; d = b ( d ) ( e ) ( [ "Tuple2" , a + g , c + h ] ) ( f ) ; break a } } throw "Non-exhaustive pattern match in case" ; } return d } } } , isWithin : Collage . insideForm } } ( ) ; Elm = Elm || { } ;
Elm . Text = function ( ) { function d ( a ) { return Value . toText ( a ) } var a = function ( a ) { return function ( b ) { return "<" + a + ' style="padding:0;margin:0">' + b + "</" + a + ">" } } , g = function ( a , b ) { return function ( d ) { return "<span style='" + a + ":" + b + "'>" + d + "</span>" } } , i = function ( a ) { a = Elm . JavaScript . castStringToJSString ( a ) ; return g ( "font-family" , a ) } , j = a ( "h1" ) , b = g ( "font-style" , "italic" ) , a = a ( "b" ) , l = g ( "text-decoration" , "underline" ) , h = g ( "text-decoration" , "overline" ) , e = g ( "text-decoration" , "line-through" ) ; return { fromString : d , toText : d , header : j ,
height : function ( a ) { return g ( "font-size" , a + "em" ) } , italic : b , bold : a , underline : l , overline : h , strikeThrough : e , monospace : i ( "monospace" ) , typeface : i , color : function ( a ) { return g ( "color" , Elm . Color . extract ( a ) ) } , link : function ( a ) { return function ( b ) { return "<a href='" + d ( a ) + "'>" + b + "</a>" } } } } ( ) ;
var Render = function ( ) { function d ( a ) { a = document . createElement ( a ) ; a . style . padding = "0" ; a . style . margin = "0" ; return a } function a ( a ) { return a } function g ( a ) { a . style . styleFloat = "left" ; a . style . cssFloat = "left" ; return a } function i ( a ) { a . style . position = "absolute" ; return a } function j ( a , b , e ) { for ( var h = d ( "div" ) , g = e . length ; g -- ; ) { var i = a ( b ( e [ g ] ) ) ; h . appendChild ( i ) } return h } function b ( a ) { switch ( a [ 0 ] ) { case "Absolute" : return a [ 1 ] + "px" ; case "Relative" : return 100 * a [ 1 ] + "%" } } function l ( a , f ) { f . style . position = "absolute" ; f . style . margin =
"auto" ; switch ( a [ 0 ] ) { case "Position" : "Far" !== a [ 1 ] [ 0 ] && ( f . style . left = 0 ) ; "Near" !== a [ 1 ] [ 0 ] && ( f . style . right = 0 ) ; "Far" !== a [ 2 ] [ 0 ] && ( f . style . top = 0 ) ; "Near" !== a [ 2 ] [ 0 ] && ( f . style . bottom = 0 ) ; break ; case "PositionAt" : f . style . top = b ( a [ 2 ] ) ; f . style . left = b ( a [ 1 ] ) ; var d = "translate(" + - elem [ 3 ] / 2 + "px," + - elem [ 4 ] / 2 + "px)" ; f . style . transform = d ; f . style . msTransform = d ; f . style . MozTransform = d ; f . style . webkitTransform = d ; f . style . OTransform = d ; break ; default : d = a [ 0 ] . slice ( - 2 ) , f . style [ "T" === d [ 0 ] ? "top" : "bottom" ] = b ( a [ 2 ] ) , f . style [ "L" === d [ 1 ] ? "left" :
"right" ] = b ( a [ 1 ] ) } } function h ( c ) { var b = { } ; switch ( c [ 2 ] [ 0 ] ) { case "EText" : var b = c [ 2 ] [ 1 ] , e = c [ 2 ] [ 2 ] , m = d ( "div" ) ; m . innerHTML = e ; m . style . textAlign = b ; b = m ; break ; case "EImage" : b = c [ 2 ] [ 1 ] ; e = d ( "img" ) ; e . src = b ; e . name = b ; e . style . display = "block" ; b = e ; break ; case "EVideo" : m = c [ 2 ] [ 1 ] ; b = d ( "video" ) ; b . controls = "controls" ; e = d ( "source" ) ; e . src = m ; m = m . split ( "." ) ; e . type = "video/" + m [ m . length - 1 ] ; b . appendChild ( e ) ; b . style . display = "block" ; break ; case "EFittedImage" : var s = c [ 3 ] , p = c [ 4 ] , b = c [ 2 ] [ 1 ] , e = d ( "div" ) ; e . style . width = s + "px" ; e . style . height =
p + "px" ; e . style . position = "relative" ; e . style . overflow = "hidden" ; var k = d ( "img" ) ; k . onload = function ( ) { k . style . position = "absolute" ; k . style . margin = "auto" ; var a = s , b = p ; s / p > this . width / this . height ? b = Math . round ( this . height * s / this . width ) : a = Math . round ( this . width * p / this . height ) ; k . style . width = a + "px" ; k . style . height = b + "px" ; k . style . left = ( s - a ) / 2 + "px" ; k . style . top = ( p - b ) / 2 + "px" } ; k . src = b ; k . name = b ; e . appendChild ( k ) ; b = e ; break ; case "EFlow" : a : { b = c [ 2 ] [ 2 ] ; switch ( c [ 2 ] [ 1 ] [ 0 ] ) { case "DDown" : b = b . slice ( 0 ) . reverse ( ) ; case "DUp" : b = j ( a , h ,
b ) ; break a ; case "DRight" : b = b . slice ( 0 ) . reverse ( ) ; case "DLeft" : b = j ( g , h , b ) ; break a ; case "DOut" : b = b . slice ( 0 ) . reverse ( ) ; case "DIn" : b = j ( i , h , b ) ; break a } b = void 0 } break ; case "ECollage" : b = Collage . collage ( c [ 2 ] [ 1 ] , c [ 2 ] [ 2 ] , c [ 2 ] [ 3 ] ) ; break ; case "EEmpty" : b = d ( "div" ) ; break ; case "EContainer" : e = c [ 2 ] [ 1 ] ; b = h ( c [ 2 ] [ 2 ] ) ; l ( e , b ) ; e = d ( "div" ) ; e . style . position = "relative" ; e . style . overflow = "hidden" ; e . appendChild ( b ) ; b = e ; break ; case "EHtml" : b = c [ 2 ] [ 1 ] ; "button" !== b . type && ( e = Value . getExcess ( b ) , c [ 3 ] -= e [ 0 ] , c [ 4 ] -= e [ 1 ] ) ; break ; case "EExternalHtml" : b =
d ( "div" ) , b . appendChild ( c [ 2 ] [ 1 ] ) } b . id = c [ 1 ] ; b . style . width = ~ ~ c [ 3 ] + "px" ; b . style . height = ~ ~ c [ 4 ] + "px" ; 1 !== c [ 5 ] && ( b . style . opacity = c [ 5 ] ) ; "Just" === c [ 6 ] [ 0 ] && ( b . style . backgroundColor = Elm . Color . extract ( c [ 6 ] [ 1 ] ) ) ; return "Just" === c [ 7 ] [ 0 ] ? ( e = d ( "a" ) , e . href = c [ 7 ] [ 1 ] , e . appendChild ( b ) , e ) : b } function e ( b , d , j ) { "A" === b . tagName && ( b = b . firstChild ) ; if ( d [ 1 ] !== j [ 1 ] ) { if ( d [ 2 ] [ 0 ] !== j [ 2 ] [ 0 ] ) return b . parentNode . replaceChild ( h ( j ) , b ) ; var m = j [ 2 ] , s = d [ 2 ] ; switch ( m [ 0 ] ) { case "EText" : m [ 1 ] !== s [ 1 ] && ( b . style . textAlign = m [ 1 ] ) ; m [ 2 ] !== s [ 2 ] && ( b . innerHTML =
2012-11-04 01:26:19 +00:00
m [ 2 ] ) ; break ; case "EImage" : m [ 1 ] !== s [ 1 ] && ( b . src = m [ 1 ] ) ; break ; case "EVideo" : case "EFittedImage" : if ( ! Value . eq ( m , s ) || j [ 3 ] !== d [ 3 ] || j [ 4 ] !== d [ 4 ] ) return b . parentNode . replaceChild ( h ( j ) , b ) ; break ; case "ECollage" : if ( m [ 1 ] !== s [ 1 ] || m [ 2 ] !== s [ 2 ] || m [ 3 ] . length !== s [ 3 ] . length ) return b . parentNode . replaceChild ( h ( j ) , b ) ; Collage . updateCollage ( b , s [ 3 ] , m [ 3 ] ) ; break ; case "EFlow" : if ( m [ 1 ] !== s [ 1 ] ) return b . parentNode . replaceChild ( h ( j ) , b ) ; var p = m [ 2 ] , k = b . childNodes ; if ( p . length !== k . length ) return b . parentNode . replaceChild ( h ( j ) , b ) ; var s =
2012-11-04 23:16:37 +00:00
s [ 2 ] , u = { } ; switch ( m [ 1 ] [ 0 ] ) { case "DDown" : case "DUp" : u = a ; break ; case "DRight" : case "DLeft" : u = g ; break ; case "DOut" : case "DIn" : u = i } for ( m = k . length ; m -- ; ) e ( k [ m ] , s [ m ] , p [ m ] ) , u ( k [ m ] ) ; break ; case "EContainer" : e ( b . childNodes [ 0 ] , s [ 2 ] , m [ 2 ] ) ; l ( m [ 1 ] , b . childNodes [ 0 ] ) ; break ; case "EHtml" : j [ 1 ] !== d [ 1 ] && ( p = h ( j ) , b . parentNode . replaceChild ( p , b ) , b = p ) ; "button" !== p . type && ( m = Value . getExcess ( b ) , j [ 3 ] -= m [ 0 ] , j [ 4 ] -= m [ 1 ] ) ; break ; case "EExternalHtml" : j [ 1 ] !== d [ 1 ] && b . parentNode . replaceChild ( h ( j ) , b ) } j [ 3 ] !== d [ 3 ] && ( b . style . width = ~ ~ j [ 3 ] + "px" ) ;
j [ 4 ] !== d [ 4 ] && ( b . style . height = ~ ~ j [ 4 ] + "px" ) ; j [ 5 ] !== d [ 5 ] && ( b . style . opacity = j [ 5 ] ) ; 2 === j [ 6 ] . length && ( m = Elm . Color . extract ( j [ 6 ] [ 1 ] ) , m !== b . style . backgroundColor && ( b . style . backgroundColor = m ) ) ; if ( 2 === j [ 7 ] . length && ( 1 === d [ 7 ] . length || j [ 7 ] [ 1 ] !== d [ 7 ] [ 1 ] ) ) b . parentNode . href = j [ 7 ] [ 1 ] ; j [ 1 ] = d [ 1 ] } } return { render : h , update : e , addTo : function ( a , b ) { a . appendChild ( b ) } , newElement : d , flowWith : j , goIn : i } } ( ) , Elm = Elm || { } ;
Elm . Signal = function ( ) { var d = function ( a , b , d ) { for ( var h = a . kids , g = h . length ; g -- ; ) h [ g ] . recv ( b , d , a . id ) } , a = function ( a ) { this . id = Guid . guid ( ) ; this . value = a ; this . kids = [ ] ; this . defaultNumberOfKids = 0 ; this . recv = function ( a , b , e ) { if ( b = b === this . id ) this . value = e ; d ( this , a , b ) ; return b } ; Dispatcher . inputs . push ( this ) } , g = function ( a , b ) { this . id = Guid . guid ( ) ; this . value = null ; this . kids = [ ] ; this . count = 0 ; this . changed = ! 1 ; b . reverse ( ) ; this . recalc = function ( ) { for ( var d = a , f = b . length ; f -- ; ) d = d ( b [ f ] . value ) ; this . value = d } ; this . recalc ( ) ; this . recv =
function ( a , e ) { this . count += 1 ; e && ( this . changed = ! 0 ) ; this . count == b . length && ( this . changed && this . recalc ( ) , d ( this , a , this . changed ) , this . changed = ! 1 , this . count = 0 ) } ; for ( var f = b . length ; f -- ; ) b [ f ] . kids . push ( this ) } , i = function ( a , b , f , h ) { this . id = Guid . guid ( ) ; this . value = f ? b ( h . value ) : b ; this . kids = [ ] ; this . recv = function ( b , c ) { c && ( this . value = a ( h . value ) ( this . value ) ) ; d ( this , b , c ) } ; h . kids . push ( this ) } , j = function ( a , b , f ) { this . id = Guid . guid ( ) ; this . value = a ( f . value ) ? b : f . value ; this . kids = [ ] ; this . recv = function ( b , c ) { var h = c && ! a ( f . value ) ;
h && ( this . value = f . value ) ; d ( this , b , h ) } ; f . kids . push ( this ) } , b = function ( a ) { this . id = Guid . guid ( ) ; this . value = a . value ; this . kids = [ ] ; this . recv = function ( b , f ) { var h = f && ! eq ( this . value , a . value ) ; h && ( this . value = a . value ) ; d ( this , b , h ) } ; a . kids . push ( this ) } , l = function ( a ) { return function ( b ) { return function ( d ) { d = new g ( function ( a ) { return function ( b ) { return [ a , b ] } } , [ a , d ] ) ; d = new j ( function ( a ) { return a [ 0 ] } , [ ! 0 , b ] , d ) ; return new g ( function ( a ) { return a [ 1 ] } , [ d ] ) } } } , h = function ( a , b ) { this . id = Guid . guid ( ) ; this . value = b . value ; this . kids =
[ ] ; this . count = 0 ; this . changed = ! 1 ; this . recv = function ( f , h , g ) { g === a . id && ( this . changed = h ) ; this . count += 1 ; 2 == this . count && ( this . changed && ( this . value = b . value ) , d ( this , f , this . changed ) , this . count = 0 , this . changed = ! 1 ) } ; a . kids . push ( this ) ; b . kids . push ( this ) } ; return { constant : function ( b ) { return new a ( b ) } , lift : function ( a ) { return function ( b ) { return new g ( a , [ b ] ) } } , lift2 : function ( a ) { return function ( b ) { return function ( d ) { return new g ( a , [ b , d ] ) } } } , lift3 : function ( a ) { return function ( b ) { return function ( d ) { return function ( h ) { return new g ( a ,
2012-11-04 01:26:19 +00:00
[ b , d , h ] ) } } } } , lift4 : function ( a ) { return function ( b ) { return function ( d ) { return function ( h ) { return function ( i ) { return new g ( a , [ b , d , h , i ] ) } } } } } , foldp : function ( a ) { return function ( b ) { return function ( d ) { return new i ( a , b , ! 1 , d ) } } } , foldp _ : function ( a ) { return function ( b ) { return function ( d ) { return new i ( a , b , ! 0 , d ) } } } , foldp1 : function ( a ) { return function ( b ) { return new i ( a , function ( a ) { return a } , ! 0 , b ) } } , count : function ( a ) { return new i ( function ( ) { return function ( a ) { return a + 1 } } , 0 , ! 1 , a ) } , keepIf : function ( a ) { return function ( b ) { return function ( d ) { return new j ( function ( b ) { return ! a ( b ) } ,
b , d ) } } } , dropIf : function ( a ) { return function ( b ) { return function ( d ) { return new j ( a , b , d ) } } } , keepWhen : function ( a ) { return l ( new g ( function ( a ) { return ! a } , [ a ] ) ) } , dropWhen : l , dropRepeats : function ( a ) { return new b ( a ) } , sampleOn : function ( a ) { return function ( b ) { return new h ( a , b ) } } } } ( ) ;
var Dispatcher = function ( ) { function d ( a ) { if ( ! a . hasOwnProperty ( "defaultNumberOfKids" ) ) return ! 0 ; var g = a . kids . length ; if ( 0 == g ) return ! 1 ; if ( g > a . defaultNumberOfKids ) return ! 0 ; for ( var h = ! 1 ; g -- ; ) h = h || d ( a . kids [ g ] ) ; return h } var a = null , g = 0 , i = [ ] , j = null ; return { initialize : function ( ) { a = Elm . main ( ) ; a . hasOwnProperty ( "recv" ) || ( a = Elm . Signal . constant ( a ) ) ; j = a . value ; for ( var b = [ ] , g = i . length ; g -- ; ) d ( i [ g ] ) && b . push ( i [ g ] ) ; i = b ; document . getElementById ( "content" ) . appendChild ( Render . render ( j ) ) ; b = document . getElementById ( "widthChecker" ) . offsetWidth ;
2012-11-04 23:16:37 +00:00
b !== window . innerWidth && Dispatcher . notify ( Window . dimensions . id , Value . Tuple ( b , window . innerHeight ) ) ; a = Elm . Signal . lift ( function ( a ) { var b = document . getElementById ( "content" ) ; Render . update ( b . firstChild , j , a ) ; return j = a } ) ( a ) } , notify : function ( a , d ) { g += 1 ; for ( var h = ! 1 , e = i . length ; e -- ; ) h = i [ e ] . recv ( g , a , d ) || h ; return h } , inputs : i } } ( ) ;
Elm . HTTP = function ( ) { function d ( a ) { return function ( d ) { return function ( c ) { return function ( f ) { return { "0" : "Request" , length : 1 , verb : b . castStringToJSString ( a ) , url : b . castStringToJSString ( d ) , data : null === c ? null : b . castStringToJSString ( c ) , headers : f } } } } } function a ( a ) { return d ( "GET" ) ( a ) ( null ) ( [ "Nil" ] ) } function g ( a , d ) { return function ( c ) { if ( "" !== c . url ) { var f = { value : [ "Waiting" ] } ; a . push ( f ) ; var g = null ; window . ActiveXObject && ( g = new ActiveXObject ( "Microsoft.XMLHTTP" ) ) ; window . XMLHttpRequest && ( g = new XMLHttpRequest ) ; g . onreadystatechange =
function ( ) { 4 === g . readyState && ( f . value = 200 === g . status ? [ "Success" , l ( g . responseText ) ] : [ "Failure" , g . status , l ( g . statusText ) ] , setTimeout ( function ( ) { i ( a , d ) } , 0 ) ) } ; g . open ( c . verb , c . url , ! 0 ) ; Elm . List . map ( function ( a ) { g . setRequestHeader ( b . castStringToJSString ( a [ 1 ] ) , b . castStringToJSString ( a [ 2 ] ) ) } ) ( c . headers ) ; g . send ( c . data ) } } } function i ( a , b ) { 0 < a . length && ( Dispatcher . notify ( b . id , a [ 0 ] . value ) , "Waiting" !== a [ 0 ] . value [ 0 ] && ( a . shift ( ) , setTimeout ( function ( ) { i ( a , b ) } , 0 ) ) ) } function j ( a ) { var b = Elm . Signal . constant ( [ "Waiting" ] ) ,
2012-11-04 01:26:19 +00:00
a = Elm . Signal . lift ( g ( [ ] , b ) ) ( a ) ; return Elm . Signal . lift2 ( function ( a ) { return function ( ) { return a } } ) ( b ) ( a ) } var b = Elm . JavaScript , l = Elm . JavaScript . castJSStringToString ; return { get : a , post : function ( a ) { return function ( b ) { return d ( "POST" ) ( a ) ( b ) ( [ "Nil" ] ) } } , request : d , send : j , sendGet : function ( b ) { return j ( Elm . Signal . lift ( a ) ( b ) ) } } } ( ) ;
2012-11-04 23:16:37 +00:00
Elm . Input = function ( ) { var d = Elm . JavaScript , a = Elm . JavaScript . castJSStringToString , g = function ( b , g ) { b . placeholder = d . castStringToJSString ( g ) ; var h = Elm . Signal . constant ( [ "Nil" ] ) ; Value . addListener ( b , "keyup" , function ( ) { Dispatcher . notify ( h . id , a ( b . value ) ) ; b . focus ( ) } ) ; b . style . padding = "1px" ; return Value . Tuple ( Value . wrap ( b ) , h ) } , i = function ( a ) { a = document . createElement ( a ) ; a . style . padding = "0" ; a . style . margin = "0" ; return a } , j = function ( a ) { for ( var d = i ( "select" ) , g = [ ] ; "Cons" === a [ 0 ] ; ) { var e = i ( "option" ) , c = Value . toText ( a [ 1 ] [ 1 ] ) ;
e . value = c ; e . innerHTML = c ; d . appendChild ( e ) ; g . push ( a [ 1 ] [ 2 ] ) ; a = a [ 2 ] } var f = Elm . Signal . constant ( g [ 0 ] ) ; Value . addListener ( d , "change" , function ( ) { Dispatcher . notify ( f . id , g [ d . selectedIndex ] ) } ) ; return Value . Tuple ( Value . wrap ( d ) , f ) } ; return { textArea : function ( a ) { return function ( d ) { var h = i ( "textarea" ) ; h . rows = d ; h . cols = a ; return g ( h , "" ) } } , textField : function ( a ) { var d = i ( "input" ) ; d . type = "text" ; return g ( d , a ) } , password : function ( a ) { var d = i ( "input" ) ; d . type = "password" ; return g ( d , a ) } , checkbox : function ( a ) { var d = i ( "input" ) ; d . type =
2012-11-04 01:26:19 +00:00
"checkbox" ; d . checked = a ; var g = Elm . Signal . constant ( a ) ; Value . addListener ( d , "change" , function ( ) { Dispatcher . notify ( g . id , d . checked ) } ) ; return Value . Tuple ( Value . wrap ( d ) , g ) } , dropDown : j , stringDropDown : function ( a ) { return j ( Elm . List . map ( function ( a ) { return Value . Tuple ( a , a ) } ) ( a ) ) } , button : function ( a ) { var g = i ( "input" ) ; g . type = "button" ; g . value = d . castStringToJSString ( a ) ; var h = Elm . Signal . constant ( ! 1 ) ; Value . addListener ( g , "click" , function ( ) { Dispatcher . notify ( h . id , ! 0 ) ; Dispatcher . notify ( h . id , ! 1 ) } ) ; return Value . Tuple ( Value . wrap ( g ) ,
h ) } } } ( ) ;
Elm . Keyboard = { Raw : function ( ) { function d ( a , g ) { return "Nil" === g [ 0 ] ? g : g [ 1 ] === a ? g [ 2 ] : [ "Cons" , g [ 1 ] , d ( a , g [ 2 ] ) ] } var a = Elm . Signal . constant ( [ "Nil" ] ) , g = Elm . Signal . constant ( [ "Nothing" ] ) ; Value . addListener ( document , "keydown" , function ( d ) { var g ; a : { for ( g = a . value ; "Nil" !== g [ 0 ] ; ) { if ( g [ 1 ] === d . keyCode ) { g = ! 0 ; break a } g = g [ 2 ] } g = ! 1 } g || Dispatcher . notify ( a . id , [ "Cons" , d . keyCode , a . value ] ) || this . removeEventListener ( "keydown" , arguments . callee , ! 1 ) } ) ; Value . addListener ( document , "keyup" , function ( g ) { var j = d ( g . keyCode , a . value ) ; Dispatcher . notify ( a . id ,
j ) || this . removeEventListener ( "keyup" , arguments . callee , ! 1 ) } ) ; Value . addListener ( window , "blur" , function ( d ) { Dispatcher . notify ( a . id , [ "Nil" ] ) || this . removeEventListener ( "blur" , arguments . callee , ! 1 ) } ) ; Value . addListener ( document , "keypress" , function ( a ) { var d = Dispatcher . notify ( g . id , [ "Just" , a . charCode || a . keyCode ] ) ; Dispatcher . notify ( g . id , [ "Nothing" ] ) ; d || this . removeEventListener ( "keypress" , arguments . callee , ! 1 ) } ) ; return { keysDown : a , charPressed : g } } ( ) } ;
Elm . Mouse = function ( ) { function d ( a ) { var b = 0 , c = 0 ; a || ( a = window . event ) ; if ( a . pageX || a . pageY ) b = a . pageX , c = a . pageY ; else if ( a . clientX || a . clientY ) b = a . clientX + document . body . scrollLeft + document . documentElement . scrollLeft , c = a . clientY + document . body . scrollTop + document . documentElement . scrollTop ; return Value . Tuple ( b , c ) } var a = Elm . Signal . constant ( Value . Tuple ( 0 , 0 ) ) ; a . defaultNumberOfKids = 2 ; var g = Elm . Signal . lift ( function ( a ) { return a [ 1 ] } ) ( a ) ; g . defaultNumberOfKids = 0 ; var i = Elm . Signal . lift ( function ( a ) { return a [ 2 ] } ) ( a ) ; i . defaultNumberOfKids =
0 ; var j = Elm . Signal . constant ( ! 1 ) , b = Elm . Signal . constant ( ! 1 ) , l = Elm . Signal . constant ( Value . Tuple ( ) ) ; Value . addListener ( document , "click" , function ( a ) { var d = Dispatcher . notify ( b . id , ! 0 ) , c = Dispatcher . notify ( l . id , Value . Tuple ( ) ) ; Dispatcher . notify ( b . id , ! 1 ) ; ! d && ! c && this . removeEventListener ( "click" , arguments . callee , ! 1 ) } ) ; Value . addListener ( document , "mousedown" , function ( a ) { Dispatcher . notify ( j . id , ! 0 ) || this . removeEventListener ( "mousedown" , arguments . callee , ! 1 ) } ) ; Value . addListener ( document , "mouseup" , function ( a ) { Dispatcher . notify ( j . id ,
! 1 ) || this . removeEventListener ( "mouseup" , arguments . callee , ! 1 ) } ) ; Value . addListener ( document , "mousemove" , function ( b ) { Dispatcher . notify ( a . id , d ( b ) ) || this . removeEventListener ( "mousemove" , arguments . callee , ! 1 ) } ) ; return { position : a , x : g , y : i , isClicked : b , isDown : j , clicks : l , isClickedOn : function ( a ) { var a = Render . render ( a ) , b = Elm . Signal . constant ( ! 1 ) ; Value . addListener ( a , "click" , function ( ) { Dispatcher . notify ( b . id , ! 0 ) ; Dispatcher . notify ( b . id , ! 1 ) } ) ; return Value . Tuple ( Value . wrap ( a ) , b ) } } } ( ) ;
Elm . Random = function ( ) { return { inRange : function ( d ) { return function ( a ) { return Elm . Signal . constant ( Math . floor ( Math . random ( ) * ( a - d + 1 ) ) + d ) } } , randomize : function ( d ) { return function ( a ) { return function ( g ) { return Elm . Signal . lift ( function ( ) { return Math . floor ( Math . random ( ) * ( a - d + 1 ) ) + d } ) ( g ) } } } } } ( ) ;
Elm . Time = function ( ) { return { every : function ( d ) { var d = 1E3 * d , a = Elm . Signal . constant ( 0 ) , g = 0 ; setInterval ( function ( ) { g += d ; Dispatcher . notify ( a . id , g / 1E3 ) } , d ) ; return a } , after : function ( d ) { var d = 1E3 * d , a = Elm . Signal . constant ( ! 1 ) ; setTimeout ( function ( ) { Dispatcher . notify ( a . id , ! 0 ) } , d ) ; return a } , before : function ( d ) { var d = 1E3 * d , a = Elm . Signal . constant ( ! 0 ) ; setTimeout ( function ( ) { Dispatcher . notify ( a . id , ! 1 ) } , d ) ; return a } } } ( ) ;
Elm . Window = function ( ) { var d = Elm . Signal . constant ( Value . Tuple ( window . innerWidth , window . innerHeight ) ) ; d . defaultNumberOfKids = 2 ; var a = Elm . Signal . lift ( function ( a ) { return a [ 1 ] } ) ( d ) ; a . defaultNumberOfKids = 0 ; var g = Elm . Signal . lift ( function ( a ) { return a [ 2 ] } ) ( d ) ; g . defaultNumberOfKids = 0 ; Value . addListener ( window , "resize" , function ( a ) { var g = document . getElementById ( "widthChecker" ) . offsetWidth ; Dispatcher . notify ( d . id , Value . Tuple ( g , window . innerHeight ) ) || this . removeEventListener ( "resize" , arguments . callee , ! 1 ) } ) ; return { dimensions : d ,
width : a , height : g } } ( ) ; Value . addListener ( document , "elm_log" , function ( d ) { console . log ( d . value ) } ) ; Value . addListener ( document , "elm_title" , function ( d ) { document . title = d . value } ) ; Value . addListener ( document , "elm_redirect" , function ( d ) { 0 < d . value . length && ( window . location = d . value ) } ) ; Elm = Elm || { } ;
Elm . Prelude = function ( ) { var d = function ( a ) { return function ( g ) { var i = a % g , i = 0 == a ? 0 : 0 < g ? 0 <= a ? i : i + g : - d ( - a ) ( - g ) ; return i == g ? 0 : i } } ; return { eq : Value . eq , id : function ( a ) { return a } , not : function ( a ) { return ! a } , fst : function ( a ) { return a [ 1 ] } , snd : function ( a ) { return a [ 2 ] } , rem : function ( a ) { return function ( d ) { return a % d } } , div : function ( a ) { return function ( d ) { return ~ ~ ( a / d ) } } , compare : function ( a ) { return function ( d ) { a = "object" === typeof a ? toText ( a ) : a ; d = "object" === typeof d ? toText ( d ) : d ; return [ a === d ? "EQ" : a < d ? "LT" : "GT" ] } } , toFloat : function ( a ) { return a } ,
round : function ( a ) { return Math . round ( a ) } , floor : function ( a ) { return Math . floor ( a ) } , ceiling : function ( a ) { return Math . ceil ( a ) } , truncate : function ( a ) { return ~ ~ a } , readInt : function ( a ) { var a = JavaScript . castStringToJSString ( a ) , d = a . length ; if ( 0 === d ) return Nothing ; var i = 0 ; if ( "-" == a [ 0 ] ) { if ( 1 === d ) return Nothing ; i = 1 } for ( ; i < d ; ++ i ) if ( ! Char . isDigit ( a [ i ] ) ) return Nothing ; return Just ( parseInt ( a ) ) } , readFloat : function ( a ) { var a = JavaScript . castStringToJSString ( a ) , d = a . length ; if ( 0 === d ) return Nothing ; var i = 0 ; if ( "-" == a [ 0 ] ) { if ( 1 ===
d ) return Nothing ; i = 1 } for ( var j = 0 ; i < d ; ++ i ) if ( ! Char . isDigit ( a [ i ] ) ) { if ( "." === a [ i ] && ( j += 1 , 1 >= j ) ) continue ; return Nothing } return Just ( parseFloat ( a ) ) } , sqrt : Math . sqrt , abs : Math . abs , pi : Math . PI , e : Math . E , sin : Math . sin , cos : Math . cos , tan : Math . tan , asin : Math . asin , acos : Math . acos , atan : Math . atan , atan2 : function ( a ) { return function ( d ) { return Math . atan2 ( a , d ) } } , mod : d , min : function ( a ) { return function ( d ) { return Math . min ( a , d ) } } , max : function ( a ) { return function ( d ) { return Math . max ( a , d ) } } , flip : function ( a ) { return function ( d ) { return function ( i ) { return a ( i ) ( d ) } } } ,
clamp : function ( a ) { return function ( d ) { return function ( i ) { return Math . min ( d , Math . max ( a , i ) ) } } } , curry : function ( a ) { return function ( d ) { return function ( i ) { return a ( [ "Tuple2" , d , i ] ) } } } , uncurry : function ( a ) { return function ( d ) { if ( "Tuple2" !== d [ 0 ] ) throw "Function was uncurry'd but was not given a pair." ; return a ( d [ 1 ] ) ( d [ 2 ] ) } } , logBase : function ( a ) { return function ( d ) { return Math . log ( d ) / Math . log ( a ) } } , Just : Elm . Maybe . Just , Nothing : Elm . Maybe . Nothing , maybe : Elm . Maybe . maybe , map : Elm . List . map , filter : Elm . List . filter , head : Elm . List . head ,
tail : Elm . List . tail , last : Elm . List . last , length : Elm . List . length , reverse : Elm . List . reverse , foldr : Elm . List . foldr , foldr1 : Elm . List . foldr1 , foldl : Elm . List . foldl , foldl1 : Elm . List . foldl1 , and : Elm . List . and , or : Elm . List . or , all : Elm . List . all , any : Elm . List . any , sum : Elm . List . sum , product : Elm . List . product , concat : Elm . List . concat , concatMap : Elm . List . concatMap , maximum : Elm . List . maximum , minimum : Elm . List . minimum , scanl : Elm . List . scanl , scanl1 : Elm . List . scanl1 , take : Elm . List . take , drop : Elm . List . drop , zip : Elm . List . zip , unzip : Elm . List . unzip ,
lift : Elm . Signal . lift , lift2 : Elm . Signal . lift2 , lift3 : Elm . Signal . lift3 , lift4 : Elm . Signal . lift4 , foldp : Elm . Signal . foldp , foldp1 : Elm . Signal . foldp1 , foldp _ : Elm . Signal . foldp _ , constant : Elm . Signal . constant , count : Elm . Signal . count , keepIf : Elm . Signal . keepIf , dropIf : Elm . Signal . dropIf , keepWhen : Elm . Signal . keepWhen , dropWhen : Elm . Signal . dropWhen , dropRepeats : Elm . Signal . dropRepeats , sampleOn : Elm . Signal . sampleOn } } ( ) ;
( function ( ) { var d = function ( a ) { for ( var d in a ) Elm . Prelude [ d ] = a [ d ] } ; d ( Elm . Color ) ; d ( Elm . Text ) ; d ( Elm . Graphics ) ; show = Value . show } ) ( ) ;
( function ( ) { for ( var d in Elm ) this [ d ] = Elm [ d ] ; Elm . Automaton = function ( ) { function a ( a ) { return [ "Automaton" , a ] } function d ( a ) { return [ "DragFrom" , a ] } function i ( b ) { return function ( c ) { var d ; a : { switch ( b [ 0 ] ) { case "Automaton" : d = b [ 1 ] ; break a } throw "Non-exhaustive pattern match in case" ; } var e ; a : { switch ( c [ 0 ] ) { case "Automaton" : e = c [ 1 ] ; break a } throw "Non-exhaustive pattern match in case" ; } return a ( function ( a ) { var a = d ( a ) , b ; a : { switch ( a [ 0 ] ) { case "Tuple2" : b = a [ 1 ] ; break a } throw "Non-exhaustive pattern match in case" ; } a : { switch ( a [ 0 ] ) { case "Tuple2" : a =
a [ 2 ] ; break a } throw "Non-exhaustive pattern match in case" ; } var c = e ( b ) ; a : { switch ( c [ 0 ] ) { case "Tuple2" : b = c [ 1 ] ; break a } throw "Non-exhaustive pattern match in case" ; } a : { switch ( c [ 0 ] ) { case "Tuple2" : c = c [ 2 ] ; break a } throw "Non-exhaustive pattern match in case" ; } return [ "Tuple2" , b , i ( a ) ( c ) ] } ) } } function j ( b ) { return a ( function ( a ) { var c = unzip ( map ( function ( b ) { a : { switch ( b [ 0 ] ) { case "Automaton" : b = b [ 1 ] ( a ) ; break a } throw "Non-exhaustive pattern match in case" ; } return b } ) ( b ) ) , d ; a : { switch ( c [ 0 ] ) { case "Tuple2" : d = c [ 1 ] ; break a } throw "Non-exhaustive pattern match in case" ;
} a : { switch ( c [ 0 ] ) { case "Tuple2" : c = c [ 2 ] ; break a } throw "Non-exhaustive pattern match in case" ; } return [ "Tuple2" , d , j ( c ) ] } ) } function b ( c ) { return a ( function ( a ) { return [ "Tuple2" , c ( a ) , b ( c ) ] } ) } function l ( b ) { return function ( c ) { return a ( function ( a ) { a = c ( a ) ( b ) ; return [ "Tuple2" , a , l ( a ) ( c ) ] } ) } } function h ( b ) { return function ( c ) { return a ( function ( a ) { var d = c ( a ) ( b ) ; a : { switch ( d [ 0 ] ) { case "Tuple2" : a = d [ 1 ] ; break a } throw "Non-exhaustive pattern match in case" ; } a : { switch ( d [ 0 ] ) { case "Tuple2" : d = d [ 2 ] ; break a } throw "Non-exhaustive pattern match in case" ;
2012-11-04 23:16:37 +00:00
} return [ "Tuple2" , a , h ( d ) ( c ) ] } ) } } function e ( a ) { return function ( b ) { a : { switch ( a [ 0 ] ) { case "Tuple2" : b : { switch ( b [ 0 ] ) { case "Tuple2" : b = [ "Tuple2" , a [ 1 ] - b [ 1 ] , a [ 2 ] - b [ 2 ] ] ; break b } break } break a } throw "Non-exhaustive pattern match in case" ; } return b } } function c ( a ) { return function ( b ) { var c ; a : { switch ( a [ 0 ] ) { case "Tuple2" : b : { switch ( b [ 0 ] ) { case "Tuple2" : var f = function ( a ) { return [ "Tuple2" , b [ 2 ] , [ "Tuple2" , a , b [ 2 ] ] ] } ; c = function ( ) { switch ( b [ 1 ] [ 0 ] ) { case "DragFrom" : var c ; a [ 1 ] ? c = [ "Tuple2" , uncurry ( move ) ( e ( a [ 2 ] ) ( b [ 1 ] [ 1 ] ) ) ( b [ 2 ] ) , [ "Tuple2" ,
d ( b [ 1 ] [ 1 ] ) , b [ 2 ] ] ] : ( c = uncurry ( move ) ( e ( a [ 2 ] ) ( b [ 1 ] [ 1 ] ) ) ( b [ 2 ] ) , c = [ "Tuple2" , c , [ "Tuple2" , m , c ] ] ) ; return c ; case "Ignore" : return f ( a [ 1 ] ? s : m ) ; case "Listen" : return f ( not ( a [ 1 ] ) ? m : isWithin ( a [ 2 ] ) ( b [ 2 ] ) ? d ( a [ 2 ] ) : s ) } throw "Non-exhaustive pattern match in case" ; } ( ) ; break b } break } break a } throw "Non-exhaustive pattern match in case" ; } return c } } var f = [ ] , n ; for ( n in Elm . Prelude ) 0 <= f . indexOf ( n ) || ( this [ n ] = Elm . Prelude [ n ] ) ; var m = [ "Listen" ] , s = [ "Ignore" ] , f = l ( 0 ) ( function ( ) { return function ( a ) { return 1 + a } } ) ; return { Automaton : a , run : function ( a ) { return function ( b ) { a : { switch ( a [ 0 ] ) { case "Automaton" : b =
lift ( fst ) ( foldp _ ( function ( a ) { return function ( b ) { a : { switch ( b [ 0 ] ) { case "Tuple2" : switch ( b [ 2 ] [ 0 ] ) { case "Automaton" : b = b [ 2 ] [ 1 ] ( a ) ; break a } } throw "Non-exhaustive pattern match in case" ; } return b } } ) ( a [ 1 ] ) ( b ) ) ; break a } throw "Non-exhaustive pattern match in case" ; } return b } } , step : function ( a ) { return function ( b ) { a : { switch ( a [ 0 ] ) { case "Automaton" : b = a [ 1 ] ( b ) ; break a } throw "Non-exhaustive pattern match in case" ; } return b } } , composeAuto : i , combine : j , pure : b , init : l , init _ : h , count : f , Listen : m , Ignore : s , DragFrom : d , vecSub : e , stepDrag : c ,
2012-11-04 01:26:19 +00:00
draggable : function ( a ) { return h ( [ "Tuple2" , m , a ] ) ( c ) } } } ( ) } ) ( ) ;