on master help sign in
Add `timestamp` and `timeOf` functions to Signal library.
79d9d4cevancz
core-js/Prelude.js+3−1
@@ -157,7 +157,9 @@ Elm.Prelude = function() {
157 keepWhen : Elm.Signal.keepWhen,
157 keepWhen : Elm.Signal.keepWhen,
158 dropWhen : Elm.Signal.dropWhen,
158 dropWhen : Elm.Signal.dropWhen,
159 dropRepeats : Elm.Signal.dropRepeats,
159 dropRepeats : Elm.Signal.dropRepeats,
160− sampleOn : Elm.Signal.sampleOn
160+ sampleOn : Elm.Signal.sampleOn,
161+ timestamp : Elm.Signal.timestamp,
162+ timeOf : Elm.Signal.timeOf
161 };
163 };
162
164
163}();
165}();
core-js/runtime/Dispatcher.js+1−2
@@ -1,7 +1,6 @@
1
1
2var Dispatcher = function() {
2var Dispatcher = function() {
3 var program = null;
3 var program = null;
4− var timestep = 0;
5 var inputs = [];
4 var inputs = [];
6 var currentElement = null;
5 var currentElement = null;
7
6
@@ -28,7 +27,7 @@ var Dispatcher = function() {
28 })(program);
27 })(program);
29 };
28 };
30 var notify = function(id, v) {
29 var notify = function(id, v) {
31− timestep += 1;
30+ var timestep = (new window.Date).getTime();
32 var hasListener = false;
31 var hasListener = false;
33 for (var i = inputs.length; i--; ) {
32 for (var i = inputs.length; i--; ) {
34 hasListener = inputs[i].recv(timestep, id, v) || hasListener;
33 hasListener = inputs[i].recv(timestep, id, v) || hasListener;
core-js/runtime/Signal.js+18−1
@@ -106,6 +106,21 @@ Elm.Signal = function() {
106 return new lift(function(p){return p[1];},[dropped]); }; };
106 return new lift(function(p){return p[1];},[dropped]); }; };
107 };
107 };
108
108
109+ /**
110+ * @constructor
111+ */
112+ function timeIndex(pair,s) {
113+ this.id = Guid.guid();
114+ var t = (new window.Date).getTime();
115+ this.value = pair ? Value.Tuple(t,s.value) : t;
116+ this.kids = [];
117+ this.recv = function(timestep, changed, parentID) {
118+ if (changed) this.value = pair ? Value.Tuple(timestep, s.value) : timestep;
119+ send(this, timestep, changed);
120+ };
121+ s.kids.push(this);
122+ }
123+
109 /**
124 /**
110 * @constructor
125 * @constructor
111 */
126 */
@@ -249,6 +264,8 @@ Elm.Signal = function() {
249 keepWhen : function(s) { return dropWhen(new lift(function(b){return !b;},[s])); },
264 keepWhen : function(s) { return dropWhen(new lift(function(b){return !b;},[s])); },
250 dropWhen : dropWhen,
265 dropWhen : dropWhen,
251 dropRepeats : function(s) { return new dropRepeats(s);},
266 dropRepeats : function(s) { return new dropRepeats(s);},
252− sampleOn : function(s1){return function(s2){return new sampleOn(s1,s2);};}
267+ sampleOn : function(s1){return function(s2){return new sampleOn(s1,s2);};},
268+ timestamp : function(s) { return new timeIndex(true, s); },
269+ timeOf : function(s) { return new timeIndex(false, s); }
253 };
270 };
254}();
271}();
elm/elm-runtime-0.5.5.js+22−4
@@ -2386,6 +2386,21 @@ Elm.Signal = function() {
2386 return new lift(function(p){return p[1];},[dropped]); }; };
2386 return new lift(function(p){return p[1];},[dropped]); }; };
2387 };
2387 };
2388
2388
2389+ /**
2390+ * @constructor
2391+ */
2392+ function timeIndex(pair,s) {
2393+ this.id = Guid.guid();
2394+ var t = (new window.Date).getTime();
2395+ this.value = pair ? Value.Tuple(t,s.value) : t;
2396+ this.kids = [];
2397+ this.recv = function(timestep, changed, parentID) {
2398+ if (changed) this.value = pair ? Value.Tuple(timestep, s.value) : timestep;
2399+ send(this, timestep, changed);
2400+ };
2401+ s.kids.push(this);
2402+ }
2403+
2389 /**
2404 /**
2390 * @constructor
2405 * @constructor
2391 */
2406 */
@@ -2529,12 +2544,13 @@ Elm.Signal = function() {
2529 keepWhen : function(s) { return dropWhen(new lift(function(b){return !b;},[s])); },
2544 keepWhen : function(s) { return dropWhen(new lift(function(b){return !b;},[s])); },
2530 dropWhen : dropWhen,
2545 dropWhen : dropWhen,
2531 dropRepeats : function(s) { return new dropRepeats(s);},
2546 dropRepeats : function(s) { return new dropRepeats(s);},
2532− sampleOn : function(s1){return function(s2){return new sampleOn(s1,s2);};}
2547+ sampleOn : function(s1){return function(s2){return new sampleOn(s1,s2);};},
2548+ timestamp : function(s) { return new timeIndex(true, s); },
2549+ timeOf : function(s) { return new timeIndex(false, s); }
2533 };
2550 };
2534}();
2551}();
2535var Dispatcher = function() {
2552var Dispatcher = function() {
2536 var program = null;
2553 var program = null;
2537− var timestep = 0;
2538 var inputs = [];
2554 var inputs = [];
2539 var currentElement = null;
2555 var currentElement = null;
2540
2556
@@ -2561,7 +2577,7 @@ var Dispatcher = function() {
2561 })(program);
2577 })(program);
2562 };
2578 };
2563 var notify = function(id, v) {
2579 var notify = function(id, v) {
2564− timestep += 1;
2580+ var timestep = (new window.Date).getTime();
2565 var hasListener = false;
2581 var hasListener = false;
2566 for (var i = inputs.length; i--; ) {
2582 for (var i = inputs.length; i--; ) {
2567 hasListener = inputs[i].recv(timestep, id, v) || hasListener;
2583 hasListener = inputs[i].recv(timestep, id, v) || hasListener;
@@ -3154,7 +3170,9 @@ Elm.Prelude = function() {
3154 keepWhen : Elm.Signal.keepWhen,
3170 keepWhen : Elm.Signal.keepWhen,
3155 dropWhen : Elm.Signal.dropWhen,
3171 dropWhen : Elm.Signal.dropWhen,
3156 dropRepeats : Elm.Signal.dropRepeats,
3172 dropRepeats : Elm.Signal.dropRepeats,
3157− sampleOn : Elm.Signal.sampleOn
3173+ sampleOn : Elm.Signal.sampleOn,
3174+ timestamp : Elm.Signal.timestamp,
3175+ timeOf : Elm.Signal.timeOf
3158 };
3176 };
3159
3177
3160}();
3178}();