on master help sign in
Add `timestamp` and `timeOf` functions to Signal library.
commit79d9d4c50926ad54a677be207a0193f6b969bfff authorevancz <info@elm-lang.org> dateMon 3 Dec 2012, 22:21 (14 years ago) parent02cbb61
4 files changed+44−8
core-js/Prelude.js+3−1 core-js/runtime/Dispatcher.js+1−2 core-js/runtime/Signal.js+18−1 elm/elm-runtime-0.5.5.js+22−4
core-js/Prelude.js+3−1
@@ -157,7 +157,9 @@ Elm.Prelude = function() {
157157 keepWhen : Elm.Signal.keepWhen,
158158 dropWhen : Elm.Signal.dropWhen,
159159 dropRepeats : Elm.Signal.dropRepeats,
160− sampleOn : Elm.Signal.sampleOn
160+ sampleOn : Elm.Signal.sampleOn,
161+ timestamp : Elm.Signal.timestamp,
162+ timeOf : Elm.Signal.timeOf
161163 };
162164
163165}();
core-js/runtime/Dispatcher.js+1−2
@@ -1,7 +1,6 @@
11
22var Dispatcher = function() {
33 var program = null;
4− var timestep = 0;
54 var inputs = [];
65 var currentElement = null;
76
@@ -28,7 +27,7 @@ var Dispatcher = function() {
2827 })(program);
2928 };
3029 var notify = function(id, v) {
31− timestep += 1;
30+ var timestep = (new window.Date).getTime();
3231 var hasListener = false;
3332 for (var i = inputs.length; i--; ) {
3433 hasListener = inputs[i].recv(timestep, id, v) || hasListener;
core-js/runtime/Signal.js+18−1
@@ -106,6 +106,21 @@ Elm.Signal = function() {
106106 return new lift(function(p){return p[1];},[dropped]); }; };
107107 };
108108
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+
109124 /**
110125 * @constructor
111126 */
@@ -249,6 +264,8 @@ Elm.Signal = function() {
249264 keepWhen : function(s) { return dropWhen(new lift(function(b){return !b;},[s])); },
250265 dropWhen : dropWhen,
251266 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); }
253270 };
254271}();
elm/elm-runtime-0.5.5.js+22−4
@@ -2386,6 +2386,21 @@ Elm.Signal = function() {
23862386 return new lift(function(p){return p[1];},[dropped]); }; };
23872387 };
23882388
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+
23892404 /**
23902405 * @constructor
23912406 */
@@ -2529,12 +2544,13 @@ Elm.Signal = function() {
25292544 keepWhen : function(s) { return dropWhen(new lift(function(b){return !b;},[s])); },
25302545 dropWhen : dropWhen,
25312546 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); }
25332550 };
25342551}();
25352552var Dispatcher = function() {
25362553 var program = null;
2537− var timestep = 0;
25382554 var inputs = [];
25392555 var currentElement = null;
25402556
@@ -2561,7 +2577,7 @@ var Dispatcher = function() {
25612577 })(program);
25622578 };
25632579 var notify = function(id, v) {
2564− timestep += 1;
2580+ var timestep = (new window.Date).getTime();
25652581 var hasListener = false;
25662582 for (var i = inputs.length; i--; ) {
25672583 hasListener = inputs[i].recv(timestep, id, v) || hasListener;
@@ -3154,7 +3170,9 @@ Elm.Prelude = function() {
31543170 keepWhen : Elm.Signal.keepWhen,
31553171 dropWhen : Elm.Signal.dropWhen,
31563172 dropRepeats : Elm.Signal.dropRepeats,
3157− sampleOn : Elm.Signal.sampleOn
3173+ sampleOn : Elm.Signal.sampleOn,
3174+ timestamp : Elm.Signal.timestamp,
3175+ timeOf : Elm.Signal.timeOf
31583176 };
31593177
31603178}();