53 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
# HG changeset patch
 | 
						|
# Parent 2921a545adc3406d3139be7951f3225e94493466
 | 
						|
diff --git a/static/src/js/first_module.js b/static/src/js/first_module.js
 | 
						|
--- a/static/src/js/first_module.js
 | 
						|
+++ b/static/src/js/first_module.js
 | 
						|
@@ -7,13 +7,46 @@ openerp.web_example = function (instance
 | 
						|
             'click .oe_web_example_start button': 'watch_start',
 | 
						|
             'click .oe_web_example_stop button': 'watch_stop'
 | 
						|
         },
 | 
						|
+        init: function () {
 | 
						|
+            this._super.apply(this, arguments);
 | 
						|
+            this._start = null;
 | 
						|
+            this._watch = null;
 | 
						|
+        },
 | 
						|
+        update_counter: function () {
 | 
						|
+            var h, m, s;
 | 
						|
+            // Subtracting javascript dates returns the difference in milliseconds
 | 
						|
+            var diff = new Date() - this._start;
 | 
						|
+            s = diff / 1000;
 | 
						|
+            m = Math.floor(s / 60);
 | 
						|
+            s -= 60*m;
 | 
						|
+            h = Math.floor(m / 60);
 | 
						|
+            m -= 60*h;
 | 
						|
+            this.$('.oe_web_example_timer').text(
 | 
						|
+                _.str.sprintf("%02d:%02d:%02d", h, m, s));
 | 
						|
+        },
 | 
						|
         watch_start: function () {
 | 
						|
             this.$el.addClass('oe_web_example_started')
 | 
						|
                     .removeClass('oe_web_example_stopped');
 | 
						|
+            this._start = new Date();
 | 
						|
+            // Update the UI to the current time
 | 
						|
+            this.update_counter();
 | 
						|
+            // Update the counter at 30 FPS (33ms/frame)
 | 
						|
+            this._watch = setInterval(
 | 
						|
+                this.proxy('update_counter'),
 | 
						|
+                33);
 | 
						|
         },
 | 
						|
         watch_stop: function () {
 | 
						|
+            clearInterval(this._watch);
 | 
						|
+            this.update_counter();
 | 
						|
+            this._start = this._watch = null;
 | 
						|
             this.$el.removeClass('oe_web_example_started')
 | 
						|
                     .addClass('oe_web_example_stopped');
 | 
						|
         },
 | 
						|
+        destroy: function () {
 | 
						|
+            if (this._watch) {
 | 
						|
+                clearInterval(this._watch);
 | 
						|
+            }
 | 
						|
+            this._super();
 | 
						|
+        }
 | 
						|
     });
 | 
						|
 };
 |