From f8cd043341ef3a5701736cadb9280ce674b6daee Mon Sep 17 00:00:00 2001 From: David Vilchez Date: Tue, 19 May 2015 10:49:15 +0200 Subject: [PATCH 1/4] Removed unnecessary recursive call --- build/react-countdown-clock.js | 40 ++++++++++++----------------- build/react-countdown-clock.js.map | 2 +- coffee/react-countdown-clock.coffee | 1 - 3 files changed, 17 insertions(+), 26 deletions(-) diff --git a/build/react-countdown-clock.js b/build/react-countdown-clock.js index daf61e0..ede895b 100644 --- a/build/react-countdown-clock.js +++ b/build/react-countdown-clock.js @@ -52,22 +52,12 @@ return /******/ (function(modules) { // webpackBootstrap /************************************************************************/ /******/ ([ /* 0 */ -/*!**************************************!*\ - !*** ./react-countdown-clock.coffee ***! - \**************************************/ /***/ function(module, exports, __webpack_require__) { var React, _canvas, _context, _fraction, _radius; - React = __webpack_require__(/*! react */ 1); + React = __webpack_require__(1); - _radius = null; - - _fraction = null; - - _context = null; - - _canvas = null; module.exports = React.createClass({ propTypes: { @@ -78,6 +68,7 @@ return /******/ (function(modules) { // webpackBootstrap onComplete: React.PropTypes.func }, getDefaultProps: function() { + console.log('get default props'); return { seconds: 60, size: 300, @@ -86,26 +77,33 @@ return /******/ (function(modules) { // webpackBootstrap }; }, getInitialState: function() { + console.log('get initial state'); return { seconds: this.props.seconds }; }, componentWillReceiveProps: function(props) { + console.log('componnet will receive props'); + this._setScale(); + this._setupCanvas(); + this._drawTimer(); + this._startTimer(); return this.setState({ seconds: props.seconds }); }, componentWillMount: function() { - return this._setScale(); + console.log('component will mount'); }, componentDidMount: function() { - if (!_canvas) { + console.log('component did mount'); + this._setScale(); this._setupCanvas(); - } this._drawTimer(); return this._startTimer(); }, componentDidUpdate: function() { + console.log('componnet did update'); this._setScale(); this._clearTimer(); this._drawTimer(); @@ -148,9 +146,6 @@ return /******/ (function(modules) { // webpackBootstrap })(this)), 30); }, _handleComplete: function() { - this.setState({ - seconds: 0 - }); if (this.props.onComplete) { return this.props.onComplete(); } @@ -167,9 +162,9 @@ return /******/ (function(modules) { // webpackBootstrap return _context.fill(); }, _drawTimer: function() { - var decimals, percent, _ref; + var decimals, percent, ref; percent = _fraction * this.state.seconds + 1.5; - decimals = (_ref = this.state.seconds <= 9.9) != null ? _ref : { + decimals = (ref = this.state.seconds <= 9.9) != null ? ref : { 1: 0 }; _context.globalAlpha = this.props.alpha; @@ -192,9 +187,6 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, /* 1 */ -/*!**************************************************************************************!*\ - !*** external {"root":"React","commonjs":"react","commonjs2":"react","amd":"react"} ***! - \**************************************************************************************/ /***/ function(module, exports, __webpack_require__) { module.exports = __WEBPACK_EXTERNAL_MODULE_1__; @@ -202,5 +194,5 @@ return /******/ (function(modules) { // webpackBootstrap /***/ } /******/ ]) }); - -//# sourceMappingURL=react-countdown-clock.js.map \ No newline at end of file +; +//# sourceMappingURL=react-countdown-clock.js.map diff --git a/build/react-countdown-clock.js.map b/build/react-countdown-clock.js.map index 5960a39..d5dba2b 100644 --- a/build/react-countdown-clock.js.map +++ b/build/react-countdown-clock.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap a137c8f6c241a817d775","webpack:///./react-countdown-clock.coffee","webpack:///external {\"root\":\"React\",\"commonjs\":\"react\",\"commonjs2\":\"react\",\"amd\":\"react\"}"],"names":[],"mappings":"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","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ReactCountdownClock\"] = factory(require(\"react\"));\n\telse\n\t\troot[\"ReactCountdownClock\"] = factory(root[\"React\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/build/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap a137c8f6c241a817d775\n **/","React = require 'react'\n\n_radius = null\n_fraction = null\n_context = null\n_canvas = null\n\nmodule.exports = React.createClass\n propTypes:\n seconds: React.PropTypes.number\n size: React.PropTypes.number\n color: React.PropTypes.string\n alpha: React.PropTypes.number\n onComplete: React.PropTypes.func\n\n getDefaultProps: ->\n seconds: 60\n size: 300\n color: '#000'\n alpha: 1\n\n getInitialState: ->\n seconds: @props.seconds\n\n componentWillReceiveProps: (props) ->\n @setState seconds: props.seconds\n\n componentWillMount: ->\n @_setScale()\n\n componentDidMount: ->\n @_setupCanvas() if !_canvas\n @_drawTimer()\n @_startTimer()\n\n componentDidUpdate: ->\n @_setScale()\n @_clearTimer()\n @_drawTimer()\n if @state.seconds <= 0\n @_handleComplete()\n\n _setScale: ->\n _radius = @props.size / 2\n _fraction = 2 / @props.seconds\n\n _setupCanvas: ->\n _canvas = @getDOMNode()\n _context = _canvas.getContext '2d'\n _context.textAlign = 'center'\n _context.textBaseline = 'middle'\n _context.font = \"bold #{_radius/2}px Arial\"\n\n _startTimer: ->\n # Give it a moment to collect it's thoughts for smoother render\n setTimeout ( => @_tick() ), 200\n\n _tick: ->\n start = Date.now()\n setTimeout ( =>\n duration = Date.now() - start\n @setState\n seconds: @state.seconds - duration / 1000\n @_tick() unless @state.seconds <= 0\n ), 30\n\n _handleComplete: ->\n @setState seconds: 0\n if @props.onComplete\n @props.onComplete()\n\n _clearTimer: ->\n _context.clearRect 0, 0, _canvas.width, _canvas.height\n @_drawBackground()\n\n _drawBackground: ->\n _context.beginPath()\n _context.globalAlpha = @props.alpha / 3\n _context.arc _radius, _radius, _radius, 0, Math.PI * 2, false\n _context.arc _radius, _radius, _radius/1.8, Math.PI * 2, 0, true\n _context.fill()\n\n _drawTimer: ->\n percent = _fraction * @state.seconds + 1.5\n decimals = (@state.seconds <= 9.9) ? 1 : 0\n _context.globalAlpha = @props.alpha\n _context.fillStyle = @props.color\n _context.fillText @state.seconds.toFixed(decimals), _radius, _radius\n _context.beginPath()\n _context.arc _radius, _radius, _radius, Math.PI * 1.5, Math.PI * percent, false\n _context.arc _radius, _radius, _radius/1.8, Math.PI * percent, Math.PI * 1.5, true\n _context.fill()\n\n render: ->\n React.createElement(\"canvas\", {\"className\": \"react-countdown-clock\", \"width\": (@props.size), \"height\": (@props.size)})\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/cjsx-loader!./react-countdown-clock.coffee\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"root\":\"React\",\"commonjs\":\"react\",\"commonjs2\":\"react\",\"amd\":\"react\"}\n ** module id = 1\n ** module chunks = 0\n **/"],"sourceRoot":"","file":"react-countdown-clock.js"} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 519e771a1e8f907b828d","webpack:///./react-countdown-clock.coffee","webpack:///external {\"root\":\"React\",\"commonjs\":\"react\",\"commonjs2\":\"react\",\"amd\":\"react\"}"],"names":[],"mappings":"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","file":"react-countdown-clock.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ReactCountdownClock\"] = factory(require(\"react\"));\n\telse\n\t\troot[\"ReactCountdownClock\"] = factory(root[\"React\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/build/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 519e771a1e8f907b828d\n **/","React = require 'react'\n\n_radius = null\n_fraction = null\n_context = null\n_canvas = null\n\nmodule.exports = React.createClass\n propTypes:\n seconds: React.PropTypes.number\n size: React.PropTypes.number\n color: React.PropTypes.string\n alpha: React.PropTypes.number\n onComplete: React.PropTypes.func\n\n getDefaultProps: ->\n seconds: 60\n size: 300\n color: '#000'\n alpha: 1\n\n getInitialState: ->\n seconds: @props.seconds\n\n componentWillReceiveProps: (props) ->\n @setState seconds: props.seconds\n\n componentWillMount: ->\n @_setScale()\n\n componentDidMount: ->\n @_setupCanvas() if !_canvas\n @_drawTimer()\n @_startTimer()\n\n componentDidUpdate: ->\n @_setScale()\n @_clearTimer()\n @_drawTimer()\n if @state.seconds <= 0\n @_handleComplete()\n\n _setScale: ->\n _radius = @props.size / 2\n _fraction = 2 / @props.seconds\n\n _setupCanvas: ->\n _canvas = @getDOMNode()\n _context = _canvas.getContext '2d'\n _context.textAlign = 'center'\n _context.textBaseline = 'middle'\n _context.font = \"bold #{_radius/2}px Arial\"\n\n _startTimer: ->\n # Give it a moment to collect it's thoughts for smoother render\n setTimeout ( => @_tick() ), 200\n\n _tick: ->\n start = Date.now()\n setTimeout ( =>\n duration = Date.now() - start\n @setState\n seconds: @state.seconds - duration / 1000\n @_tick() unless @state.seconds <= 0\n ), 30\n\n _handleComplete: ->\n if @props.onComplete\n @props.onComplete()\n\n _clearTimer: ->\n _context.clearRect 0, 0, _canvas.width, _canvas.height\n @_drawBackground()\n\n _drawBackground: ->\n _context.beginPath()\n _context.globalAlpha = @props.alpha / 3\n _context.arc _radius, _radius, _radius, 0, Math.PI * 2, false\n _context.arc _radius, _radius, _radius/1.8, Math.PI * 2, 0, true\n _context.fill()\n\n _drawTimer: ->\n percent = _fraction * @state.seconds + 1.5\n decimals = (@state.seconds <= 9.9) ? 1 : 0\n _context.globalAlpha = @props.alpha\n _context.fillStyle = @props.color\n _context.fillText @state.seconds.toFixed(decimals), _radius, _radius\n _context.beginPath()\n _context.arc _radius, _radius, _radius, Math.PI * 1.5, Math.PI * percent, false\n _context.arc _radius, _radius, _radius/1.8, Math.PI * percent, Math.PI * 1.5, true\n _context.fill()\n\n render: ->\n React.createElement(\"canvas\", {\"className\": \"react-countdown-clock\", \"width\": (@props.size), \"height\": (@props.size)})\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/cjsx-loader!./react-countdown-clock.coffee\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"root\":\"React\",\"commonjs\":\"react\",\"commonjs2\":\"react\",\"amd\":\"react\"}\n ** module id = 1\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/coffee/react-countdown-clock.coffee b/coffee/react-countdown-clock.coffee index 5301af8..821a3d8 100644 --- a/coffee/react-countdown-clock.coffee +++ b/coffee/react-countdown-clock.coffee @@ -65,7 +65,6 @@ module.exports = React.createClass ), 30 _handleComplete: -> - @setState seconds: 0 if @props.onComplete @props.onComplete() From 00a7531fce2197217dec5d9e39b539864a5a936e Mon Sep 17 00:00:00 2001 From: David Vilchez Date: Tue, 19 May 2015 10:54:42 +0200 Subject: [PATCH 2/4] Initialilzed clock when component receive prop too If you want restart clock but it is yet mounted it did't work. --- coffee/react-countdown-clock.coffee | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/coffee/react-countdown-clock.coffee b/coffee/react-countdown-clock.coffee index 821a3d8..2c32bf5 100644 --- a/coffee/react-countdown-clock.coffee +++ b/coffee/react-countdown-clock.coffee @@ -23,13 +23,15 @@ module.exports = React.createClass seconds: @props.seconds componentWillReceiveProps: (props) -> - @setState seconds: props.seconds - - componentWillMount: -> @_setScale() + @_setupCanvas() + @_drawTimer() + @_startTimer() + @setState seconds: props.seconds componentDidMount: -> - @_setupCanvas() if !_canvas + @_setScale() + @_setupCanvas() @_drawTimer() @_startTimer() From a7088aa2ee4fcab32e55ca3ceaeb8562b62c4b08 Mon Sep 17 00:00:00 2001 From: David Vilchez Date: Tue, 19 May 2015 11:04:32 +0200 Subject: [PATCH 3/4] Ensured it is never less than 0 --- coffee/react-countdown-clock.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coffee/react-countdown-clock.coffee b/coffee/react-countdown-clock.coffee index 2c32bf5..192b180 100644 --- a/coffee/react-countdown-clock.coffee +++ b/coffee/react-countdown-clock.coffee @@ -62,7 +62,7 @@ module.exports = React.createClass setTimeout ( => duration = Date.now() - start @setState - seconds: @state.seconds - duration / 1000 + seconds: Math.max(0,@state.seconds - duration / 1000) @_tick() unless @state.seconds <= 0 ), 30 From ce6cc21f371c9dc1b7c3ef8f22c8d1ef59c6a068 Mon Sep 17 00:00:00 2001 From: David Vilchez Date: Tue, 19 May 2015 11:07:06 +0200 Subject: [PATCH 4/4] updated js files --- build/react-countdown-clock.js | 25 ++++++++++++------------- build/react-countdown-clock.js.map | 2 +- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/build/react-countdown-clock.js b/build/react-countdown-clock.js index ede895b..f96c530 100644 --- a/build/react-countdown-clock.js +++ b/build/react-countdown-clock.js @@ -58,6 +58,13 @@ return /******/ (function(modules) { // webpackBootstrap React = __webpack_require__(1); + _radius = null; + + _fraction = null; + + _context = null; + + _canvas = null; module.exports = React.createClass({ propTypes: { @@ -68,7 +75,6 @@ return /******/ (function(modules) { // webpackBootstrap onComplete: React.PropTypes.func }, getDefaultProps: function() { - console.log('get default props'); return { seconds: 60, size: 300, @@ -77,33 +83,26 @@ return /******/ (function(modules) { // webpackBootstrap }; }, getInitialState: function() { - console.log('get initial state'); return { seconds: this.props.seconds }; }, componentWillReceiveProps: function(props) { - console.log('componnet will receive props'); this._setScale(); - this._setupCanvas(); + this._setupCanvas(); this._drawTimer(); - this._startTimer(); + this._startTimer(); return this.setState({ seconds: props.seconds }); }, - componentWillMount: function() { - console.log('component will mount'); - }, componentDidMount: function() { - console.log('component did mount'); this._setScale(); - this._setupCanvas(); + this._setupCanvas(); this._drawTimer(); return this._startTimer(); }, componentDidUpdate: function() { - console.log('componnet did update'); this._setScale(); this._clearTimer(); this._drawTimer(); @@ -137,7 +136,7 @@ return /******/ (function(modules) { // webpackBootstrap var duration; duration = Date.now() - start; _this.setState({ - seconds: _this.state.seconds - duration / 1000 + seconds: Math.max(0, _this.state.seconds - duration / 1000) }); if (!(_this.state.seconds <= 0)) { return _this._tick(); @@ -195,4 +194,4 @@ return /******/ (function(modules) { // webpackBootstrap /******/ ]) }); ; -//# sourceMappingURL=react-countdown-clock.js.map +//# sourceMappingURL=react-countdown-clock.js.map \ No newline at end of file diff --git a/build/react-countdown-clock.js.map b/build/react-countdown-clock.js.map index d5dba2b..fbc3029 100644 --- a/build/react-countdown-clock.js.map +++ b/build/react-countdown-clock.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 519e771a1e8f907b828d","webpack:///./react-countdown-clock.coffee","webpack:///external {\"root\":\"React\",\"commonjs\":\"react\",\"commonjs2\":\"react\",\"amd\":\"react\"}"],"names":[],"mappings":"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","file":"react-countdown-clock.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ReactCountdownClock\"] = factory(require(\"react\"));\n\telse\n\t\troot[\"ReactCountdownClock\"] = factory(root[\"React\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/build/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 519e771a1e8f907b828d\n **/","React = require 'react'\n\n_radius = null\n_fraction = null\n_context = null\n_canvas = null\n\nmodule.exports = React.createClass\n propTypes:\n seconds: React.PropTypes.number\n size: React.PropTypes.number\n color: React.PropTypes.string\n alpha: React.PropTypes.number\n onComplete: React.PropTypes.func\n\n getDefaultProps: ->\n seconds: 60\n size: 300\n color: '#000'\n alpha: 1\n\n getInitialState: ->\n seconds: @props.seconds\n\n componentWillReceiveProps: (props) ->\n @setState seconds: props.seconds\n\n componentWillMount: ->\n @_setScale()\n\n componentDidMount: ->\n @_setupCanvas() if !_canvas\n @_drawTimer()\n @_startTimer()\n\n componentDidUpdate: ->\n @_setScale()\n @_clearTimer()\n @_drawTimer()\n if @state.seconds <= 0\n @_handleComplete()\n\n _setScale: ->\n _radius = @props.size / 2\n _fraction = 2 / @props.seconds\n\n _setupCanvas: ->\n _canvas = @getDOMNode()\n _context = _canvas.getContext '2d'\n _context.textAlign = 'center'\n _context.textBaseline = 'middle'\n _context.font = \"bold #{_radius/2}px Arial\"\n\n _startTimer: ->\n # Give it a moment to collect it's thoughts for smoother render\n setTimeout ( => @_tick() ), 200\n\n _tick: ->\n start = Date.now()\n setTimeout ( =>\n duration = Date.now() - start\n @setState\n seconds: @state.seconds - duration / 1000\n @_tick() unless @state.seconds <= 0\n ), 30\n\n _handleComplete: ->\n if @props.onComplete\n @props.onComplete()\n\n _clearTimer: ->\n _context.clearRect 0, 0, _canvas.width, _canvas.height\n @_drawBackground()\n\n _drawBackground: ->\n _context.beginPath()\n _context.globalAlpha = @props.alpha / 3\n _context.arc _radius, _radius, _radius, 0, Math.PI * 2, false\n _context.arc _radius, _radius, _radius/1.8, Math.PI * 2, 0, true\n _context.fill()\n\n _drawTimer: ->\n percent = _fraction * @state.seconds + 1.5\n decimals = (@state.seconds <= 9.9) ? 1 : 0\n _context.globalAlpha = @props.alpha\n _context.fillStyle = @props.color\n _context.fillText @state.seconds.toFixed(decimals), _radius, _radius\n _context.beginPath()\n _context.arc _radius, _radius, _radius, Math.PI * 1.5, Math.PI * percent, false\n _context.arc _radius, _radius, _radius/1.8, Math.PI * percent, Math.PI * 1.5, true\n _context.fill()\n\n render: ->\n React.createElement(\"canvas\", {\"className\": \"react-countdown-clock\", \"width\": (@props.size), \"height\": (@props.size)})\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/cjsx-loader!./react-countdown-clock.coffee\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"root\":\"React\",\"commonjs\":\"react\",\"commonjs2\":\"react\",\"amd\":\"react\"}\n ** module id = 1\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 85368f9c2448bd184d00","webpack:///./react-countdown-clock.coffee","webpack:///external {\"root\":\"React\",\"commonjs\":\"react\",\"commonjs2\":\"react\",\"amd\":\"react\"}"],"names":[],"mappings":"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","file":"react-countdown-clock.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ReactCountdownClock\"] = factory(require(\"react\"));\n\telse\n\t\troot[\"ReactCountdownClock\"] = factory(root[\"React\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/build/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 85368f9c2448bd184d00\n **/","React = require 'react'\n\n_radius = null\n_fraction = null\n_context = null\n_canvas = null\n\nmodule.exports = React.createClass\n propTypes:\n seconds: React.PropTypes.number\n size: React.PropTypes.number\n color: React.PropTypes.string\n alpha: React.PropTypes.number\n onComplete: React.PropTypes.func\n\n getDefaultProps: ->\n seconds: 60\n size: 300\n color: '#000'\n alpha: 1\n\n getInitialState: ->\n seconds: @props.seconds\n\n componentWillReceiveProps: (props) ->\n @_setScale()\n @_setupCanvas()\n @_drawTimer()\n @_startTimer()\n @setState seconds: props.seconds\n\n componentDidMount: ->\n @_setScale()\n @_setupCanvas()\n @_drawTimer()\n @_startTimer()\n\n componentDidUpdate: ->\n @_setScale()\n @_clearTimer()\n @_drawTimer()\n if @state.seconds <= 0\n @_handleComplete()\n\n _setScale: ->\n _radius = @props.size / 2\n _fraction = 2 / @props.seconds\n\n _setupCanvas: ->\n _canvas = @getDOMNode()\n _context = _canvas.getContext '2d'\n _context.textAlign = 'center'\n _context.textBaseline = 'middle'\n _context.font = \"bold #{_radius/2}px Arial\"\n\n _startTimer: ->\n # Give it a moment to collect it's thoughts for smoother render\n setTimeout ( => @_tick() ), 200\n\n _tick: ->\n start = Date.now()\n setTimeout ( =>\n duration = Date.now() - start\n @setState\n seconds: Math.max(0,@state.seconds - duration / 1000)\n @_tick() unless @state.seconds <= 0\n ), 30\n\n _handleComplete: ->\n if @props.onComplete\n @props.onComplete()\n\n _clearTimer: ->\n _context.clearRect 0, 0, _canvas.width, _canvas.height\n @_drawBackground()\n\n _drawBackground: ->\n _context.beginPath()\n _context.globalAlpha = @props.alpha / 3\n _context.arc _radius, _radius, _radius, 0, Math.PI * 2, false\n _context.arc _radius, _radius, _radius/1.8, Math.PI * 2, 0, true\n _context.fill()\n\n _drawTimer: ->\n percent = _fraction * @state.seconds + 1.5\n decimals = (@state.seconds <= 9.9) ? 1 : 0\n _context.globalAlpha = @props.alpha\n _context.fillStyle = @props.color\n _context.fillText @state.seconds.toFixed(decimals), _radius, _radius\n _context.beginPath()\n _context.arc _radius, _radius, _radius, Math.PI * 1.5, Math.PI * percent, false\n _context.arc _radius, _radius, _radius/1.8, Math.PI * percent, Math.PI * 1.5, true\n _context.fill()\n\n render: ->\n React.createElement(\"canvas\", {\"className\": \"react-countdown-clock\", \"width\": (@props.size), \"height\": (@props.size)})\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/cjsx-loader!./react-countdown-clock.coffee\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"root\":\"React\",\"commonjs\":\"react\",\"commonjs2\":\"react\",\"amd\":\"react\"}\n ** module id = 1\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file