@@ -2519,6 +2519,12 @@ Elm.Signal = function() {
2519 return Elm.List.foldl1(mrg)(ss);
2519 return Elm.List.foldl1(mrg)(ss);
2522+ function mergeEither(s1) { return function(s2) {
2523+ function f(s) { return function(x) { return [s,x]; }; }
2524+ return new merge(new lift(f,[s1]), new lift(f,[s2]));
2522 function average(sampleSize) { return function(s) {
2528 function average(sampleSize) { return function(s) {
2523 var sample = new Array(sampleSize);
2529 var sample = new Array(sampleSize);
2524 var i = sampleSize;
2530 var i = sampleSize;
@@ -2578,6 +2584,7 @@ Elm.Signal = function() {
2578 delay : delay,
2584 delay : delay,
2579 merge : function(s1) { return function(s2) { return new merge(s1,s2)}; },
2585 merge : function(s1) { return function(s2) { return new merge(s1,s2)}; },
2580 merges : merges,
2586 merges : merges,
2587+ mergeEither : mergeEither,
2581 average : average,
2588 average : average,
2582 count : function(sig) {
2589 count : function(sig) {
2583 var incr = function(_){return function(c){return c+1;};};
2590 var incr = function(_){return function(c){return c+1;};};
@@ -2615,7 +2622,8 @@ var Dispatcher = function() {
2615 content.appendChild(Render.render(currentElement));
2622 content.appendChild(Render.render(currentElement));
2616 var w = document.getElementById('widthChecker').offsetWidth;
2623 var w = document.getElementById('widthChecker').offsetWidth;
2617 if (w !== window.innerWidth) {
2624 if (w !== window.innerWidth) {
2618− Dispatcher.notify(Elm.Window.dimensions.id, Value.Tuple(w, window.innerHeight));
2625+ Dispatcher.notify(Elm.Window.dimensions.id,
2626+ Value.Tuple(w, window.innerHeight));
2620 program = Elm.Signal.lift(function(value) {
2628 program = Elm.Signal.lift(function(value) {
2621 var content = document.getElementById('content');
2629 var content = document.getElementById('content');
@@ -2647,7 +2655,7 @@ var Dispatcher = function() {
2647 function filterDeadInputs() {
2655 function filterDeadInputs() {
2648 var temp = [];
2656 var temp = [];
2649 for (var i = inputs.length; i--; ) {
2657 for (var i = inputs.length; i--; ) {
2650− if (isAlive(inputs[i])) temp.push(inputs[i]);
2658+ if (isAlive(inputs[i])) { temp.push(inputs[i]); }
2652 inputs = temp;
2660 inputs = temp;
@@ -2932,12 +2940,12 @@ Elm.Mouse = function() {
2932 var hasListener2 = Dispatcher.notify(clicks.id, Value.Tuple());
2940 var hasListener2 = Dispatcher.notify(clicks.id, Value.Tuple());
2933 Dispatcher.notify(isClicked.id, false);
2941 Dispatcher.notify(isClicked.id, false);
2934 if (!hasListener1 && !hasListener2)
2942 if (!hasListener1 && !hasListener2)
2935− this.removeEventListener('click',arguments.callee,false);
2943+ this.removeEventListener('click',arguments.callee,false);
2937 Value.addListener(document, 'mousedown', function(e) {
2945 Value.addListener(document, 'mousedown', function(e) {
2938 var hasListener = Dispatcher.notify(isDown.id, true);
2946 var hasListener = Dispatcher.notify(isDown.id, true);
2939 if (!hasListener)
2947 if (!hasListener)
2940− this.removeEventListener('mousedown',arguments.callee,false);
2948+ this.removeEventListener('mousedown',arguments.callee,false);
2942 Value.addListener(document, 'mouseup', function(e) {
2950 Value.addListener(document, 'mouseup', function(e) {
2943 var hasListener = Dispatcher.notify(isDown.id, false);
2951 var hasListener = Dispatcher.notify(isDown.id, false);
@@ -3111,6 +3119,18 @@ Value.addListener(document, 'elm_title', function(e) {document.title = e.value;}
3111Value.addListener(document, 'elm_redirect', function(e) {
3119Value.addListener(document, 'elm_redirect', function(e) {
3112 if (e.value.length > 0) { window.location = e.value; }
3120 if (e.value.length > 0) { window.location = e.value; }
3122+Value.addListener(document, 'elm_viewport', function(e) {
3123+ var node = document.getElementById('elm_viewport');
3125+ node = document.createElement('meta');
3126+ node.id = 'elm_viewport';
3127+ node.name = 'viewport';
3128+ document.head.appendChild(node);
3130+ node.content = e.value;
3131+ Dispatcher.notify(Elm.Window.dimensions.id,
3132+ Value.Tuple(window.innerWidth, window.innerHeight));
3115Elm.Prelude = function() {
3135Elm.Prelude = function() {
3116 var mod = function(x) { return function(y) {
3136 var mod = function(x) { return function(y) {
@@ -3271,6 +3291,8 @@ Elm.Prelude = function() {
3271 foldp$ : Elm.Signal.foldp$,
3291 foldp$ : Elm.Signal.foldp$,
3272 constant : Elm.Signal.constant,
3292 constant : Elm.Signal.constant,
3273 merge : Elm.Signal.merge,
3293 merge : Elm.Signal.merge,
3294+ merges : Elm.Signal.merges,
3295+ mergeEither : Elm.Signal.mergeEither,
3274 count : Elm.Signal.count,
3296 count : Elm.Signal.count,
3275 countIf : Elm.Signal.countIf,
3297 countIf : Elm.Signal.countIf,
3276 average : Elm.Signal.average,
3298 average : Elm.Signal.average,
@@ -3303,16 +3325,6 @@ Elm.Prelude = function() {
3304Elm.Touch = function() {
3326Elm.Touch = function() {
3306− function log(id,msg) {
3307− var e = document.getElementById('logger' + id);
3309− e = document.createElement('div');
3310− e.id = 'logger' + id;
3311− document.body.appendChild(e);
3316 function Dict() {
3328 function Dict() {
3317 this.keys = [];
3329 this.keys = [];
3318 this.values = [];
3330 this.values = [];
@@ -3320,11 +3332,11 @@ Elm.Touch = function() {
3320 this.insert = function(key,value) {
3332 this.insert = function(key,value) {
3321 this.keys.push(key);
3333 this.keys.push(key);
3322 this.values.push(value);
3334 this.values.push(value);
3324 this.lookup = function(key) {
3336 this.lookup = function(key) {
3325 var i = this.keys.indexOf(key)
3337 var i = this.keys.indexOf(key)
3326 return i >= 0 ? this.values[i] : {x:0,y:0,t:0};
3338 return i >= 0 ? this.values[i] : {x:0,y:0,t:0};
3328 this.remove = function(key) {
3340 this.remove = function(key) {
3329 var i = this.keys.indexOf(key);
3341 var i = this.keys.indexOf(key);
3330 if (i < 0) return;
3342 if (i < 0) return;
@@ -3332,7 +3344,7 @@ Elm.Touch = function() {
3332 this.keys.splice(i,1);
3344 this.keys.splice(i,1);
3333 this.values.splice(i,1);
3345 this.values.splice(i,1);
3334 return t;
3346 return t;
3338 var root = Elm.Signal.constant([]),
3350 var root = Elm.Signal.constant([]),
@@ -3340,7 +3352,7 @@ Elm.Touch = function() {
3340 hasTap = false,
3352 hasTap = false,
3341 tap = {_:[true],x:[0],y:[0]},
3353 tap = {_:[true],x:[0],y:[0]},
3342 dict = new Dict();
3354 dict = new Dict();
3344 function touch(t) {
3356 function touch(t) {
3345 var r = dict.lookup(t.identifier);
3357 var r = dict.lookup(t.identifier);
3346 return {_ : [true], id: [t.identifier],
3358 return {_ : [true], id: [t.identifier],
@@ -3366,8 +3378,7 @@ Elm.Touch = function() {
3366 var ts = new Array(e.touches.length);
3378 var ts = new Array(e.touches.length);
3367 for (var i = e.touches.length; i--; ) { ts[i] = touch(e.touches[i]); }
3379 for (var i = e.touches.length; i--; ) { ts[i] = touch(e.touches[i]); }
3368 var hasListener = Dispatcher.notify(root.id, ts);
3380 var hasListener = Dispatcher.notify(root.id, ts);
3370− return this.removeEventListener(name,arguments.callee,false);
3381+ if (!hasListener) return document.removeEventListener(name, update);
3371 e.preventDefault();
3382 e.preventDefault();
3373 Value.addListener(document, name, update);
3384 Value.addListener(document, name, update);
@@ -3380,19 +3391,22 @@ Elm.Touch = function() {
3380 listen("touchleave", end);
3391 listen("touchleave", end);
3382 function dependency(f) {
3393 function dependency(f) {
3383− var signal = Elm.Signal.lift(f)(root);
3394+ var sig = Elm.Signal.lift(f)(root);
3384− root.defaultNumberOfKids += 1;
3395+ root.defaultNumberOfKids += 1;
3385− signal.defaultNumberOfKids = 0;
3396+ sig.defaultNumberOfKids = 0;
3386− return signal;
3397+ return sig;
3389 var touches = dependency(function(ts) {
3400 var touches = dependency(function(ts) {
3390 return Elm.JavaScript.castJSArrayToList(ts);
3401 return Elm.JavaScript.castJSArrayToList(ts);
3392 var taps = function() {
3403 var taps = function() {
3393− function pred(_) { var b = hasTap; hasTap = false; return b; }
3394 var sig = dependency(function(_) { return tap; });
3404 var sig = dependency(function(_) { return tap; });
3405+ sig.defaultNumberOfKids = 1;
3406+ function pred(_) { var b = hasTap; hasTap = false; return b; }
3395− return Elm.Signal.keepIf(pred)({_:[true],x:[0],y:[0]})(sig);
3407+ var sig2 = Elm.Signal.keepIf(pred)({_:[true],x:[0],y:[0]})(sig);
3408+ sig2.defaultNumberOfKids = 0;
3398 return { touches: touches, taps: taps };
3412 return { touches: touches, taps: taps };