Skip to content

Commit

Permalink
First revision
Browse files Browse the repository at this point in the history
  • Loading branch information
siddii committed May 23, 2013
0 parents commit 295f492
Show file tree
Hide file tree
Showing 36 changed files with 45,027 additions and 0 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
logs/*
!.gitkeep
.idea
*.iml
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# angular-timer — Sample AngularJS directive demonstrating re-usability & interoperability

This project is a sample AngularJS directive demonstrating


Empty file added app/css/.gitkeep
Empty file.
30 changes: 30 additions & 0 deletions app/css/app.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/* app css stylesheet */

.menu {
list-style: none;
border-bottom: 0.1em solid black;
margin-bottom: 2em;
padding: 0 0 0.5em;
}

.menu:before {
content: "[";
}

.menu:after {
content: "]";
}

.menu > li {
display: inline;
}

.menu > li:before {
content: "|";
padding-right: 0.3em;
}

.menu > li:nth-child(1):before {
content: "";
padding: 0;
}
Empty file added app/img/.gitkeep
Empty file.
68 changes: 68 additions & 0 deletions app/js/timer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
angular.module('timer', [])
.directive('timer', function ($timeout) {
return {
restrict: 'E',
template: "<h3>{{timeTaken}}</h3>",
replace: false,
scope: {interval: '=interval'},
link: function ($scope, $element, $attrs) {

var startTime = null;
var timeoutId;

$scope.start = $element[0].start = function (){
startTime = new Date();
updateTime();
updateLater();
};

$scope.stop = $element[0].stop = function (){
$timeout.cancel(timeoutId);
};

function updateTime() {
$scope.timeTaken = new Date() - startTime;
$scope.minutes = Math.floor($scope.timeTaken/ (1000 * 60));
$scope.seconds = Math.floor(($scope.timeTaken - ($scope.minutes * 60)) / 1000) % 60;
}

function updateLater() {
timeoutId = $timeout(function () {
updateTime();
updateLater();
}, $scope.interval);
}

$element[0].stop = function (){
$timeout.cancel(timeoutId);
};

$element.bind('$destroy', function () {
$timeout.cancel(timeoutId);
});

$scope.start();
}
};
})
.filter('timerDisplay', function (dateFilter) {
var ONE_SECOND = 1000; //in milliseconds
var ONE_MINUTE = ONE_SECOND * 60;
var TWO_MINUTE = ONE_MINUTE * 2;
var ONE_HOUR = ONE_MINUTE * 60;
return function (elapsedTime) {
if (elapsedTime < ONE_SECOND) {
return dateFilter(elapsedTime, "s 'second'");
}
else if (elapsedTime > ONE_SECOND && elapsedTime < ONE_MINUTE) {
return dateFilter(elapsedTime, "s 'seconds'");
}
else if (elapsedTime > ONE_MINUTE && elapsedTime < TWO_MINUTE) {
return dateFilter(elapsedTime, "m 'minute' & s 'seconds'");
}
else if (elapsedTime > TWO_MINUTE && elapsedTime < ONE_HOUR) {
return dateFilter(elapsedTime, "m 'minutes' & s 'seconds'");
}
return dateFilter(elapsedTime, "h 'hour(s)', m 'minute(s)', s 'second(s)'");
};
});
184 changes: 184 additions & 0 deletions app/lib/angular/angular-cookies.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
/**
* @license AngularJS v1.0.6
* (c) 2010-2012 Google, Inc. http://angularjs.org
* License: MIT
*/
(function(window, angular, undefined) {
'use strict';

/**
* @ngdoc overview
* @name ngCookies
*/


angular.module('ngCookies', ['ng']).
/**
* @ngdoc object
* @name ngCookies.$cookies
* @requires $browser
*
* @description
* Provides read/write access to browser's cookies.
*
* Only a simple Object is exposed and by adding or removing properties to/from
* this object, new cookies are created/deleted at the end of current $eval.
*
* @example
<doc:example>
<doc:source>
<script>
function ExampleController($cookies) {
// Retrieving a cookie
var favoriteCookie = $cookies.myFavorite;
// Setting a cookie
$cookies.myFavorite = 'oatmeal';
}
</script>
</doc:source>
</doc:example>
*/
factory('$cookies', ['$rootScope', '$browser', function ($rootScope, $browser) {
var cookies = {},
lastCookies = {},
lastBrowserCookies,
runEval = false,
copy = angular.copy,
isUndefined = angular.isUndefined;

//creates a poller fn that copies all cookies from the $browser to service & inits the service
$browser.addPollFn(function() {
var currentCookies = $browser.cookies();
if (lastBrowserCookies != currentCookies) { //relies on browser.cookies() impl
lastBrowserCookies = currentCookies;
copy(currentCookies, lastCookies);
copy(currentCookies, cookies);
if (runEval) $rootScope.$apply();
}
})();

runEval = true;

//at the end of each eval, push cookies
//TODO: this should happen before the "delayed" watches fire, because if some cookies are not
// strings or browser refuses to store some cookies, we update the model in the push fn.
$rootScope.$watch(push);

return cookies;


/**
* Pushes all the cookies from the service to the browser and verifies if all cookies were stored.
*/
function push() {
var name,
value,
browserCookies,
updated;

//delete any cookies deleted in $cookies
for (name in lastCookies) {
if (isUndefined(cookies[name])) {
$browser.cookies(name, undefined);
}
}

//update all cookies updated in $cookies
for(name in cookies) {
value = cookies[name];
if (!angular.isString(value)) {
if (angular.isDefined(lastCookies[name])) {
cookies[name] = lastCookies[name];
} else {
delete cookies[name];
}
} else if (value !== lastCookies[name]) {
$browser.cookies(name, value);
updated = true;
}
}

//verify what was actually stored
if (updated){
updated = false;
browserCookies = $browser.cookies();

for (name in cookies) {
if (cookies[name] !== browserCookies[name]) {
//delete or reset all cookies that the browser dropped from $cookies
if (isUndefined(browserCookies[name])) {
delete cookies[name];
} else {
cookies[name] = browserCookies[name];
}
updated = true;
}
}
}
}
}]).


/**
* @ngdoc object
* @name ngCookies.$cookieStore
* @requires $cookies
*
* @description
* Provides a key-value (string-object) storage, that is backed by session cookies.
* Objects put or retrieved from this storage are automatically serialized or
* deserialized by angular's toJson/fromJson.
* @example
*/
factory('$cookieStore', ['$cookies', function($cookies) {

return {
/**
* @ngdoc method
* @name ngCookies.$cookieStore#get
* @methodOf ngCookies.$cookieStore
*
* @description
* Returns the value of given cookie key
*
* @param {string} key Id to use for lookup.
* @returns {Object} Deserialized cookie value.
*/
get: function(key) {
return angular.fromJson($cookies[key]);
},

/**
* @ngdoc method
* @name ngCookies.$cookieStore#put
* @methodOf ngCookies.$cookieStore
*
* @description
* Sets a value for given cookie key
*
* @param {string} key Id for the `value`.
* @param {Object} value Value to be stored.
*/
put: function(key, value) {
$cookies[key] = angular.toJson(value);
},

/**
* @ngdoc method
* @name ngCookies.$cookieStore#remove
* @methodOf ngCookies.$cookieStore
*
* @description
* Remove given cookie
*
* @param {string} key Id of the key-value pair to delete.
*/
remove: function(key) {
delete $cookies[key];
}
};

}]);


})(window, window.angular);
7 changes: 7 additions & 0 deletions app/lib/angular/angular-cookies.min.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
/*
AngularJS v1.0.6
(c) 2010-2012 Google, Inc. http://angularjs.org
License: MIT
*/
(function(m,f,l){'use strict';f.module("ngCookies",["ng"]).factory("$cookies",["$rootScope","$browser",function(d,c){var b={},g={},h,i=!1,j=f.copy,k=f.isUndefined;c.addPollFn(function(){var a=c.cookies();h!=a&&(h=a,j(a,g),j(a,b),i&&d.$apply())})();i=!0;d.$watch(function(){var a,e,d;for(a in g)k(b[a])&&c.cookies(a,l);for(a in b)e=b[a],f.isString(e)?e!==g[a]&&(c.cookies(a,e),d=!0):f.isDefined(g[a])?b[a]=g[a]:delete b[a];if(d)for(a in e=c.cookies(),b)b[a]!==e[a]&&(k(e[a])?delete b[a]:b[a]=e[a])});return b}]).factory("$cookieStore",
["$cookies",function(d){return{get:function(c){return f.fromJson(d[c])},put:function(c,b){d[c]=f.toJson(b)},remove:function(c){delete d[c]}}}])})(window,window.angular);
Loading

0 comments on commit 295f492

Please sign in to comment.