diff --git a/AngularFireDemo.zip b/AngularFireDemo.zip
deleted file mode 100644
index b5d5ece..0000000
Binary files a/AngularFireDemo.zip and /dev/null differ
diff --git a/AngularFireDemo/AngularFireDemo/.DS_Store b/AngularFireDemo/AngularFireDemo/.DS_Store
new file mode 100644
index 0000000..6514d22
Binary files /dev/null and b/AngularFireDemo/AngularFireDemo/.DS_Store differ
diff --git a/AngularFireDemo/AngularFireDemo/app.js b/AngularFireDemo/AngularFireDemo/app.js
new file mode 100755
index 0000000..0d05ef5
--- /dev/null
+++ b/AngularFireDemo/AngularFireDemo/app.js
@@ -0,0 +1,75 @@
+/*
+
+Author: Sandeep Panda
+FireBase Demo App
+
+*/
+
+angular.module('firebaseDemo', ['firebase', 'ngSanitize', 'ngRoute']);
+
+angular.module('firebaseDemo').controller('BroadcastController', function($scope, broadcastFactory) {
+ $scope.isEditable = false;
+ $scope.broadcastName='';
+ $scope.isButtonEnabled=function(){
+ return ($scope.broadcastName==='undefined') || ($scope.broadcastName.length<1);
+ };
+ $scope.startBroadcast = function() {
+ $scope.isEditable = true;
+ $scope.broadcastFromFireBase = broadcastFactory.getBroadcast($scope.broadcastName);
+ $scope.broadcastFromFireBase.$set('');
+ $scope.broadcastFromFireBase.$bind($scope, 'broadcast');
+ };
+});
+
+angular.module('firebaseDemo').controller('BroadcastViewerController', function($scope, broadcastFactory) {
+ $scope.dropdownMessage='Retrieving Broadcasts...';
+ $scope.broadcasts = broadcastFactory.getAllBroadcasts();
+ $scope.broadcastSelected = function() {
+ $scope.broadcast = broadcastFactory.getBroadcast($scope.broadcastToView);
+ }
+ $scope.broadcasts.$on('loaded',function(){
+ $scope.dropdownMessage='Select a broadcast';
+ });
+});
+
+angular.module('firebaseDemo').factory('broadcastFactory', function($firebase,FIREBASE_URL) {
+ return {
+ getBroadcast: function(key) {
+ return $firebase(new Firebase(FIREBASE_URL + '/' + key));
+ },
+ getAllBroadcasts: function() {
+ return $firebase(new Firebase(FIREBASE_URL));
+ }
+ };
+});
+
+angular.module('firebaseDemo').directive('demoEditor', function(broadcastFactory) {
+ return {
+ restrict: 'AE',
+ link: function(scope, elem, attrs) {
+ scope.$watch('isEditable', function(newValue) {
+ elem.attr('contenteditable', newValue);
+ });
+ elem.on('keyup keydown', function() {
+ scope.$apply(function() {
+ scope[attrs.model] = elem.html().trim();
+ });
+ });
+ }
+ }
+});
+
+angular.module('firebaseDemo').constant('FIREBASE_URL','https://angularfiredemo.firebaseio.com/broadcasts');
+
+angular.module('firebaseDemo').config(function($routeProvider, $locationProvider) {
+ $routeProvider.when('/write', {
+ controller: 'BroadcastController',
+ templateUrl: '/views/write.html'
+ }).when('/view', {
+ controller: 'BroadcastViewerController',
+ templateUrl: '/views/view.html'
+ }).otherwise({
+ redirectTo: '/write'
+ });
+ $locationProvider.html5Mode(true);
+});
\ No newline at end of file
diff --git a/AngularFireDemo/AngularFireDemo/index.html b/AngularFireDemo/AngularFireDemo/index.html
new file mode 100755
index 0000000..4fe3542
--- /dev/null
+++ b/AngularFireDemo/AngularFireDemo/index.html
@@ -0,0 +1,31 @@
+
+
+
+
+
+ AngularFire Demo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AngularFireDemo/AngularFireDemo/style.css b/AngularFireDemo/AngularFireDemo/style.css
new file mode 100755
index 0000000..0bb8a1b
--- /dev/null
+++ b/AngularFireDemo/AngularFireDemo/style.css
@@ -0,0 +1,10 @@
+#editor{
+ background-color:#f2f2f2;
+ min-height:200px;
+ width:100%;
+ outline: none;
+ box-shadow: inset 0px 0px 15px #CCC;
+ border-radius: 6px;
+ border: .5px solid #CCC;
+ margin-top: 15px;
+}
diff --git a/AngularFireDemo/AngularFireDemo/views/.DS_Store b/AngularFireDemo/AngularFireDemo/views/.DS_Store
new file mode 100644
index 0000000..1af6f93
Binary files /dev/null and b/AngularFireDemo/AngularFireDemo/views/.DS_Store differ
diff --git a/AngularFireDemo/AngularFireDemo/views/view.html b/AngularFireDemo/AngularFireDemo/views/view.html
new file mode 100755
index 0000000..35a01b0
--- /dev/null
+++ b/AngularFireDemo/AngularFireDemo/views/view.html
@@ -0,0 +1,14 @@
+ Live Broadcast
+
+
+
+ {{dropdownMessage}}
+
+
+
+
\ No newline at end of file
diff --git a/AngularFireDemo/AngularFireDemo/views/write.html b/AngularFireDemo/AngularFireDemo/views/write.html
new file mode 100755
index 0000000..94fcb14
--- /dev/null
+++ b/AngularFireDemo/AngularFireDemo/views/write.html
@@ -0,0 +1,16 @@
+
+
+ Write Something. . .
+
\ No newline at end of file
diff --git a/AngularFireDemo/AngularFireDemo/web-server.js b/AngularFireDemo/AngularFireDemo/web-server.js
new file mode 100755
index 0000000..3f74441
--- /dev/null
+++ b/AngularFireDemo/AngularFireDemo/web-server.js
@@ -0,0 +1,244 @@
+#!/usr/bin/env node
+
+var util = require('util'),
+ http = require('http'),
+ fs = require('fs'),
+ url = require('url'),
+ events = require('events');
+
+var DEFAULT_PORT = 8000;
+
+function main(argv) {
+ new HttpServer({
+ 'GET': createServlet(StaticServlet),
+ 'HEAD': createServlet(StaticServlet)
+ }).start(Number(argv[2]) || DEFAULT_PORT);
+}
+
+function escapeHtml(value) {
+ return value.toString().
+ replace('<', '<').
+ replace('>', '>').
+ replace('"', '"');
+}
+
+function createServlet(Class) {
+ var servlet = new Class();
+ return servlet.handleRequest.bind(servlet);
+}
+
+/**
+ * An Http server implementation that uses a map of methods to decide
+ * action routing.
+ *
+ * @param {Object} Map of method => Handler function
+ */
+function HttpServer(handlers) {
+ this.handlers = handlers;
+ this.server = http.createServer(this.handleRequest_.bind(this));
+}
+
+HttpServer.prototype.start = function(port) {
+ this.port = port;
+ this.server.listen(port);
+ util.puts('Http Server running at http://localhost:' + port + '/');
+};
+
+HttpServer.prototype.parseUrl_ = function(urlString) {
+ var parsed = url.parse(urlString);
+ parsed.pathname = url.resolve('/', parsed.pathname);
+ return url.parse(url.format(parsed), true);
+};
+
+HttpServer.prototype.handleRequest_ = function(req, res) {
+ var logEntry = req.method + ' ' + req.url;
+ if (req.headers['user-agent']) {
+ logEntry += ' ' + req.headers['user-agent'];
+ }
+ util.puts(logEntry);
+ req.url = this.parseUrl_(req.url);
+ var handler = this.handlers[req.method];
+ if (!handler) {
+ res.writeHead(501);
+ res.end();
+ } else {
+ handler.call(this, req, res);
+ }
+};
+
+/**
+ * Handles static content.
+ */
+function StaticServlet() {}
+
+StaticServlet.MimeMap = {
+ 'txt': 'text/plain',
+ 'html': 'text/html',
+ 'css': 'text/css',
+ 'xml': 'application/xml',
+ 'json': 'application/json',
+ 'js': 'application/javascript',
+ 'jpg': 'image/jpeg',
+ 'jpeg': 'image/jpeg',
+ 'gif': 'image/gif',
+ 'png': 'image/png',
+ 'svg': 'image/svg+xml'
+};
+
+StaticServlet.prototype.handleRequest = function(req, res) {
+ var self = this;
+ var path = ('./' + req.url.pathname).replace('//','/').replace(/%(..)/g, function(match, hex){
+ return String.fromCharCode(parseInt(hex, 16));
+ });
+ var parts = path.split('/');
+ if (parts[parts.length-1].charAt(0) === '.')
+ return self.sendForbidden_(req, res, path);
+ fs.stat(path, function(err, stat) {
+ if (err)
+ return self.sendMissing_(req, res, path);
+ if (stat.isDirectory())
+ return self.sendDirectory_(req, res, path);
+ return self.sendFile_(req, res, path);
+ });
+}
+
+StaticServlet.prototype.sendError_ = function(req, res, error) {
+ res.writeHead(500, {
+ 'Content-Type': 'text/html'
+ });
+ res.write('\n');
+ res.write('Internal Server Error \n');
+ res.write('Internal Server Error ');
+ res.write('' + escapeHtml(util.inspect(error)) + ' ');
+ util.puts('500 Internal Server Error');
+ util.puts(util.inspect(error));
+};
+
+StaticServlet.prototype.sendMissing_ = function(req, res, path) {
+ path = path.substring(1);
+ res.writeHead(404, {
+ 'Content-Type': 'text/html'
+ });
+ res.write('\n');
+ res.write('404 Not Found \n');
+ res.write('Not Found ');
+ res.write(
+ 'The requested URL ' +
+ escapeHtml(path) +
+ ' was not found on this server.
'
+ );
+ res.end();
+ util.puts('404 Not Found: ' + path);
+};
+
+StaticServlet.prototype.sendForbidden_ = function(req, res, path) {
+ path = path.substring(1);
+ res.writeHead(403, {
+ 'Content-Type': 'text/html'
+ });
+ res.write('\n');
+ res.write('403 Forbidden \n');
+ res.write('Forbidden ');
+ res.write(
+ 'You do not have permission to access ' +
+ escapeHtml(path) + ' on this server.
'
+ );
+ res.end();
+ util.puts('403 Forbidden: ' + path);
+};
+
+StaticServlet.prototype.sendRedirect_ = function(req, res, redirectUrl) {
+ res.writeHead(301, {
+ 'Content-Type': 'text/html',
+ 'Location': redirectUrl
+ });
+ res.write('\n');
+ res.write('301 Moved Permanently \n');
+ res.write('Moved Permanently ');
+ res.write(
+ 'The document has moved here .
'
+ );
+ res.end();
+ util.puts('301 Moved Permanently: ' + redirectUrl);
+};
+
+StaticServlet.prototype.sendFile_ = function(req, res, path) {
+ var self = this;
+ var file = fs.createReadStream(path);
+ res.writeHead(200, {
+ 'Content-Type': StaticServlet.
+ MimeMap[path.split('.').pop()] || 'text/plain'
+ });
+ if (req.method === 'HEAD') {
+ res.end();
+ } else {
+ file.on('data', res.write.bind(res));
+ file.on('close', function() {
+ res.end();
+ });
+ file.on('error', function(error) {
+ self.sendError_(req, res, error);
+ });
+ }
+};
+
+StaticServlet.prototype.sendDirectory_ = function(req, res, path) {
+ var self = this;
+ if (path.match(/[^\/]$/)) {
+ req.url.pathname += '/';
+ var redirectUrl = url.format(url.parse(url.format(req.url)));
+ return self.sendRedirect_(req, res, redirectUrl);
+ }
+ fs.readdir(path, function(err, files) {
+ if (err)
+ return self.sendError_(req, res, error);
+
+ if (!files.length)
+ return self.writeDirectoryIndex_(req, res, path, []);
+
+ var remaining = files.length;
+ files.forEach(function(fileName, index) {
+ fs.stat(path + '/' + fileName, function(err, stat) {
+ if (err)
+ return self.sendError_(req, res, err);
+ if (stat.isDirectory()) {
+ files[index] = fileName + '/';
+ }
+ if (!(--remaining))
+ return self.writeDirectoryIndex_(req, res, path, files);
+ });
+ });
+ });
+};
+
+StaticServlet.prototype.writeDirectoryIndex_ = function(req, res, path, files) {
+ path = path.substring(1);
+ res.writeHead(200, {
+ 'Content-Type': 'text/html'
+ });
+ if (req.method === 'HEAD') {
+ res.end();
+ return;
+ }
+ res.write('\n');
+ res.write('' + escapeHtml(path) + ' \n');
+ res.write('\n');
+ res.write('Directory: ' + escapeHtml(path) + ' ');
+ res.write('');
+ files.forEach(function(fileName) {
+ if (fileName.charAt(0) !== '.') {
+ res.write('' +
+ escapeHtml(fileName) + ' ');
+ }
+ });
+ res.write(' ');
+ res.end();
+};
+
+// Must be last,
+main(process.argv);
diff --git a/AngularFireDemo/__MACOSX/._AngularFireDemo b/AngularFireDemo/__MACOSX/._AngularFireDemo
new file mode 100644
index 0000000..cb4bbe2
Binary files /dev/null and b/AngularFireDemo/__MACOSX/._AngularFireDemo differ
diff --git a/AngularFireDemo/__MACOSX/AngularFireDemo/._.DS_Store b/AngularFireDemo/__MACOSX/AngularFireDemo/._.DS_Store
new file mode 100644
index 0000000..09fa6bd
Binary files /dev/null and b/AngularFireDemo/__MACOSX/AngularFireDemo/._.DS_Store differ
diff --git a/AngularFireDemo/__MACOSX/AngularFireDemo/._app.js b/AngularFireDemo/__MACOSX/AngularFireDemo/._app.js
new file mode 100644
index 0000000..380bb67
Binary files /dev/null and b/AngularFireDemo/__MACOSX/AngularFireDemo/._app.js differ
diff --git a/AngularFireDemo/__MACOSX/AngularFireDemo/._index.html b/AngularFireDemo/__MACOSX/AngularFireDemo/._index.html
new file mode 100644
index 0000000..cc4f984
Binary files /dev/null and b/AngularFireDemo/__MACOSX/AngularFireDemo/._index.html differ
diff --git a/AngularFireDemo/__MACOSX/AngularFireDemo/._style.css b/AngularFireDemo/__MACOSX/AngularFireDemo/._style.css
new file mode 100644
index 0000000..452d132
Binary files /dev/null and b/AngularFireDemo/__MACOSX/AngularFireDemo/._style.css differ
diff --git a/AngularFireDemo/__MACOSX/AngularFireDemo/._web-server.js b/AngularFireDemo/__MACOSX/AngularFireDemo/._web-server.js
new file mode 100644
index 0000000..559c0ee
Binary files /dev/null and b/AngularFireDemo/__MACOSX/AngularFireDemo/._web-server.js differ
diff --git a/AngularFireDemo/__MACOSX/AngularFireDemo/views/._.DS_Store b/AngularFireDemo/__MACOSX/AngularFireDemo/views/._.DS_Store
new file mode 100644
index 0000000..09fa6bd
Binary files /dev/null and b/AngularFireDemo/__MACOSX/AngularFireDemo/views/._.DS_Store differ
diff --git a/AngularFireDemo/__MACOSX/AngularFireDemo/views/._view.html b/AngularFireDemo/__MACOSX/AngularFireDemo/views/._view.html
new file mode 100644
index 0000000..6e2c0f3
Binary files /dev/null and b/AngularFireDemo/__MACOSX/AngularFireDemo/views/._view.html differ
diff --git a/AngularFireDemo/__MACOSX/AngularFireDemo/views/._write.html b/AngularFireDemo/__MACOSX/AngularFireDemo/views/._write.html
new file mode 100644
index 0000000..e2d3b69
Binary files /dev/null and b/AngularFireDemo/__MACOSX/AngularFireDemo/views/._write.html differ
diff --git a/AngularJS-Authentication.zip b/AngularJS-Authentication.zip
deleted file mode 100644
index 9fdcb97..0000000
Binary files a/AngularJS-Authentication.zip and /dev/null differ
diff --git a/AngularJS-Authentication/Home.html b/AngularJS-Authentication/Home.html
new file mode 100644
index 0000000..b7d61c2
--- /dev/null
+++ b/AngularJS-Authentication/Home.html
@@ -0,0 +1,18 @@
+
+
+
+ Home Page
+
+
+
+
+
+
Demonstrating Authentication in Angular JS
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AngularJS-Authentication/app.js b/AngularJS-Authentication/app.js
new file mode 100644
index 0000000..8e56f30
--- /dev/null
+++ b/AngularJS-Authentication/app.js
@@ -0,0 +1,91 @@
+
+/**
+ * Module dependencies.
+ */
+
+var express = require('express');
+var http = require('http');
+var path = require('path');
+var jwt = require('jwt-simple');
+var _ = require('underscore');
+
+var app = express();
+
+// all environments
+app.set('port', process.env.PORT || 3000);
+app.set('jwtTokenSecret', '123456ABCDEF');
+app.use(express.favicon());
+app.use(express.logger('dev'));
+app.use(express.json());
+app.use(express.urlencoded());
+app.use(express.methodOverride());
+app.use(app.router);
+app.use(express.static(path.join(__dirname, 'public')));
+
+var tokens = [];
+
+function requiresAuthentication(request, response, next) {
+ console.log(request.headers);
+ if (request.headers.access_token) {
+ var token = request.headers.access_token;
+ if (_.where(tokens, token).length > 0) {
+ var decodedToken = jwt.decode(token, app.get('jwtTokenSecret'));
+ if (new Date(decodedToken.expires) > new Date()) {
+ next();
+ return;
+ } else {
+ removeFromTokens();
+ response.end(401, "Your session is expired");
+ }
+ }
+ }
+ response.end(401, "No access token found in the request");
+}
+
+function removeFromTokens(token) {
+ for (var counter = 0; counter < tokens.length; counter++) {
+ if (tokens[counter] === token) {
+ tokens.splice(counter, 1);
+ break;
+ }
+ }
+}
+
+// development only
+if ('development' == app.get('env')) {
+ app.use(express.errorHandler());
+}
+
+app.get('/', function(request, response) {
+ response.sendfile("Home.html");
+});
+
+app.post('/api/login', function(request, response) {
+ var userName = request.body.userName;
+ var password = request.body.password;
+
+ if (userName === "Ravi" && password === "kiran") {
+ var expires = new Date();
+ expires.setDate((new Date()).getDate() + 5);
+ var token = jwt.encode({
+ userName: userName,
+ expires: expires
+ }, app.get('jwtTokenSecret'));
+
+ tokens.push(token);
+
+ response.send(200, { access_token: token, userName: userName });
+ } else {
+ response.send(401, "Invalid credentials");
+ }
+});
+
+app.post('/api/logout', requiresAuthentication, function(request, response) {
+ var token= request.headers.access_token;
+ removeFromTokens(token);
+ response.send(200);
+});
+
+http.createServer(app).listen(app.get('port'), function(){
+ console.log('Express server listening on port ' + app.get('port'));
+});
diff --git a/AngularJS-Authentication/package.json b/AngularJS-Authentication/package.json
new file mode 100644
index 0000000..7b07333
--- /dev/null
+++ b/AngularJS-Authentication/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "AngularJS_Authentication",
+ "version": "0.0.0",
+ "description": "AngularJS-Authentication",
+ "main": "app.js",
+ "author": {
+ "name": "srirangr",
+ "email": ""
+ },
+ "dependencies": {
+ "express": "3.4.4",
+ "jade": "*",
+ "stylus": "*",
+ "jwt-simple": "~0.2.0",
+ "underscore": "~1.6.0"
+ }
+}
diff --git a/AngularJS-Authentication/public/javascripts/SecurityApp.js b/AngularJS-Authentication/public/javascripts/SecurityApp.js
new file mode 100644
index 0000000..cdd314d
--- /dev/null
+++ b/AngularJS-Authentication/public/javascripts/SecurityApp.js
@@ -0,0 +1,127 @@
+var app = angular.module("securityApp", ["ngRoute"]);
+
+app.config(["$routeProvider",function ($routeProvider) {
+ $routeProvider.when("/", {
+ templateUrl: "templates/home.html",
+ controller: "HomeController",
+ resolve: {
+ auth: function ($q, authenticationSvc) {
+ var userInfo = authenticationSvc.getUserInfo();
+ if (userInfo) {
+ return $q.when(userInfo);
+ } else {
+ return $q.reject({ authenticated: false });
+ }
+ }
+ }
+ }).when("/login", {
+ templateUrl: "templates/login.html",
+ controller: "LoginController"
+ });
+}]);
+
+app.run(["$rootScope", "$location", function ($rootScope, $location) {
+
+ $rootScope.$on("$routeChangeSuccess", function (userInfo) {
+ console.log(userInfo);
+ });
+
+ $rootScope.$on("$routeChangeError", function (event, current, previous, eventObj) {
+ if (eventObj.authenticated === false) {
+ $location.path("/login");
+ }
+ });
+}]);
+
+app.factory("authenticationSvc", ["$http","$q","$window",function ($http, $q, $window) {
+ var userInfo;
+
+ function login(userName, password) {
+ var deferred = $q.defer();
+
+ $http.post("/api/login", { userName: userName, password: password })
+ .then(function (result) {
+ userInfo = {
+ accessToken: result.data.access_token,
+ userName: result.data.userName
+ };
+ $window.sessionStorage["userInfo"] = JSON.stringify(userInfo);
+ deferred.resolve(userInfo);
+ }, function (error) {
+ deferred.reject(error);
+ });
+
+ return deferred.promise;
+ }
+
+ function logout() {
+ var deferred = $q.defer();
+
+ $http({
+ method: "POST",
+ url: "/api/logout",
+ headers: {
+ "access_token": userInfo.accessToken
+ }
+ }).then(function (result) {
+ userInfo = null;
+ $window.sessionStorage["userInfo"] = null;
+ deferred.resolve(result);
+ }, function (error) {
+ deferred.reject(error);
+ });
+
+ return deferred.promise;
+ }
+
+ function getUserInfo() {
+ return userInfo;
+ }
+
+ function init() {
+ if ($window.sessionStorage["userInfo"]) {
+ userInfo = JSON.parse($window.sessionStorage["userInfo"]);
+ }
+ }
+ init();
+
+ return {
+ login: login,
+ logout: logout,
+ getUserInfo: getUserInfo
+ };
+}]);
+
+app.controller("LoginController", ["$scope", "$location", "$window", "authenticationSvc",function ($scope, $location, $window, authenticationSvc) {
+ $scope.userInfo = null;
+ $scope.login = function () {
+ authenticationSvc.login($scope.userName, $scope.password)
+ .then(function (result) {
+ $scope.userInfo = result;
+ $location.path("/");
+ }, function (error) {
+ $window.alert("Invalid credentials");
+ console.log(error);
+ });
+ };
+
+ $scope.cancel = function () {
+ $scope.userName = "";
+ $scope.password = "";
+ };
+}]);
+
+app.controller("HomeController", ["$scope", "$location", "authenticationSvc", "auth",function ($scope, $location, authenticationSvc, auth) {
+ $scope.userInfo = auth;
+
+ $scope.logout = function () {
+
+ authenticationSvc.logout()
+ .then(function (result) {
+ $scope.userInfo = null;
+ $location.path("/login");
+ }, function (error) {
+ console.log(error);
+ });
+ };
+}]);
\ No newline at end of file
diff --git a/AngularJS-Authentication/public/templates/home.html b/AngularJS-Authentication/public/templates/home.html
new file mode 100644
index 0000000..46018e3
--- /dev/null
+++ b/AngularJS-Authentication/public/templates/home.html
@@ -0,0 +1,8 @@
+
+
+
+
Welcome, {{userInfo.userName}}
+
+
+
Logout
+
\ No newline at end of file
diff --git a/AngularJS-Authentication/public/templates/login.html b/AngularJS-Authentication/public/templates/login.html
new file mode 100644
index 0000000..3234bbf
--- /dev/null
+++ b/AngularJS-Authentication/public/templates/login.html
@@ -0,0 +1,26 @@
+
+
+
+
+
+ Login
+
+
+ Cancel
+
+
+
\ No newline at end of file
diff --git a/AngularJS_Note_Taker-source_code.zip b/AngularJS_Note_Taker-source_code.zip
deleted file mode 100644
index e958c8e..0000000
Binary files a/AngularJS_Note_Taker-source_code.zip and /dev/null differ
diff --git a/AngularJS_Note_Taker-source_code/app.js b/AngularJS_Note_Taker-source_code/app.js
new file mode 100644
index 0000000..6844fa1
--- /dev/null
+++ b/AngularJS_Note_Taker-source_code/app.js
@@ -0,0 +1,69 @@
+var app = angular.module('noteApp', []);
+
+app.directive('notepad', function(notesFactory) {
+ return {
+ restrict: 'AE',
+ scope: {},
+ link: function(scope, elem, attrs) {
+ scope.openEditor = function(index){
+ scope.editMode = true;
+ if (index !== undefined) {
+ scope.noteText = notesFactory.get(index).content;
+ scope.index = index;
+ } else
+ scope.noteText = undefined;
+ };
+ scope.save = function() {
+ if (scope.noteText !== "" && scope.noteText !== undefined) {
+ var note = {};
+ note.title = scope.noteText.length > 10 ? scope.noteText.substring(0, 10) + '. . .' : scope.noteText;
+ note.content = scope.noteText;
+ note.id = scope.index != -1 ? scope.index : localStorage.length;
+ scope.notes = notesFactory.put(note);
+ }
+ scope.restore();
+ };
+
+
+ scope.restore = function() {
+ scope.editMode = false;
+ scope.index = -1;
+ scope.noteText = "";
+ };
+
+ var editor = elem.find('#editor');
+
+ scope.restore();
+
+ scope.notes = notesFactory.getAll();
+
+ editor.bind('keyup keydown', function() {
+ scope.noteText = editor.text().trim();
+ });
+
+ },
+ templateUrl: 'templateurl.html'
+ };
+});
+
+app.factory('notesFactory', function() {
+ return {
+ put: function(note) {
+ localStorage.setItem('note' + note.id, JSON.stringify(note));
+ return this.getAll();
+ },
+ get: function(index) {
+ return JSON.parse(localStorage.getItem('note' + index));
+ },
+ getAll: function() {
+ var notes = [];
+ for (var i = 0; i < localStorage.length; i++) {
+ if (localStorage.key(i).indexOf('note') !== -1) {
+ var note = localStorage.getItem(localStorage.key(i));
+ notes.push(JSON.parse(note));
+ }
+ }
+ return notes;
+ }
+ };
+});
\ No newline at end of file
diff --git a/AngularJS_Note_Taker-source_code/index.html b/AngularJS_Note_Taker-source_code/index.html
new file mode 100644
index 0000000..16f2ba8
--- /dev/null
+++ b/AngularJS_Note_Taker-source_code/index.html
@@ -0,0 +1,21 @@
+
+
+
+
+
+ AngularJS Plunker
+
+
+
+
+
+
+
+
+ The Note Making App
+
+
+
+
diff --git a/AngularJS_Note_Taker-source_code/style.css b/AngularJS_Note_Taker-source_code/style.css
new file mode 100644
index 0000000..31769ed
--- /dev/null
+++ b/AngularJS_Note_Taker-source_code/style.css
@@ -0,0 +1,71 @@
+@import url(http://fonts.googleapis.com/css?family=The+Girl+Next+Door);
+ * {
+ font-family: 'The Girl Next Door', cursive;
+}
+.title {
+ text-align: center;
+}
+notepad {
+ display: block;
+ width: 500px;
+ padding: 10px 10px;
+ margin: auto;
+}
+.note-area {
+ height: 450px;
+ background: url("http://extremecss.com/demos/paper.jpg") center center no-repeat;
+ overflow-y: scroll;
+ margin-bottom: 10px;
+}
+body {
+ background: #f2f2f2;
+}
+#editor {
+ padding: 10px;
+ font-weight: bold;
+ padding-left: 40px;
+ font-size: 20px;
+}
+span a {
+ display: block;
+ margin-top: 10px;
+ border-top: 1px solid #96d1f8;
+ background: #65a9d7;
+ background: -webkit-gradient(linear, left top, left bottom, from(#3e779d), to(#65a9d7));
+ background: -webkit-linear-gradient(top, #3e779d, #65a9d7);
+ background: -moz-linear-gradient(top, #3e779d, #65a9d7);
+ background: -ms-linear-gradient(top, #3e779d, #65a9d7);
+ background: -o-linear-gradient(top, #3e779d, #65a9d7);
+ padding: 10px 20px 5px 20px;
+ -webkit-border-radius: 11px;
+ -moz-border-radius: 11px;
+ border-radius: 11px;
+ -webkit-box-shadow: rgba(0, 0, 0, 1) 0 1px 0;
+ -moz-box-shadow: rgba(0, 0, 0, 1) 0 1px 0;
+ box-shadow: rgba(0, 0, 0, 1) 0 1px 0;
+ text-shadow: rgba(0, 0, 0, .4) 0 1px 0;
+ color: white;
+ font-size: 17px;
+ text-decoration: none;
+ vertical-align: middle;
+ width: 90px;
+ text-align: center;
+}
+span a: hover {
+ border-top-color: #28597a;
+ background: #28597a;
+ color: #ccc;
+}
+span a: active {
+ border-top-color: #1b435e;
+ background: #1b435e;
+}
+ul li {
+ list-style-type: none;
+}
+ul li a {
+ display: block;
+ color: #222222;
+ font-weight: bold;
+ font-size: 22px;
+}
\ No newline at end of file
diff --git a/AngularJS_Note_Taker-source_code/templateurl.html b/AngularJS_Note_Taker-source_code/templateurl.html
new file mode 100644
index 0000000..9832d5d
--- /dev/null
+++ b/AngularJS_Note_Taker-source_code/templateurl.html
@@ -0,0 +1,10 @@
+
+
+Back
+Add Note
\ No newline at end of file
diff --git a/AngularRequireJsSample.zip b/AngularRequireJsSample.zip
deleted file mode 100644
index a2ef237..0000000
Binary files a/AngularRequireJsSample.zip and /dev/null differ
diff --git a/AngularRequireJsSample/AngularRequireJsSample/.DS_Store b/AngularRequireJsSample/AngularRequireJsSample/.DS_Store
new file mode 100644
index 0000000..2792d8b
Binary files /dev/null and b/AngularRequireJsSample/AngularRequireJsSample/.DS_Store differ
diff --git a/AngularRequireJsSample/AngularRequireJsSample/Gruntfile.js b/AngularRequireJsSample/AngularRequireJsSample/Gruntfile.js
new file mode 100755
index 0000000..78d7414
--- /dev/null
+++ b/AngularRequireJsSample/AngularRequireJsSample/Gruntfile.js
@@ -0,0 +1,43 @@
+var path = require('path');
+
+module.exports = function(grunt) {
+ grunt.initConfig({
+ express:{
+ dev: {
+ options: {
+ server: path.resolve('./server'),
+ port:3000,
+ hostname:'*'
+ }
+ }
+ },
+ requirejs: {
+ options: {
+ paths: {
+ 'appFiles': './app'
+ },
+ removeCombined: true,
+ out: './app/requirejs/appIdeas-combined.js',
+ optimize: 'none',
+ name: 'main'
+ },
+ dev:{
+ options:{
+ optimize:'none'
+ }
+ },
+ release:{
+ options:{
+ optimize:'uglify'
+ }
+ }
+ }
+ });
+
+ grunt.loadNpmTasks('grunt-contrib-uglify');
+ grunt.loadNpmTasks('grunt-contrib-requirejs');
+ grunt.loadNpmTasks('grunt-express');
+
+ grunt.registerTask('dev',['requirejs:dev','express:dev','express-keepalive']);
+ grunt.registerTask('release',['requirejs:release','express:dev','express-keepalive']);
+};
\ No newline at end of file
diff --git a/AngularRequireJsSample/AngularRequireJsSample/apis/appIdeas.js b/AngularRequireJsSample/AngularRequireJsSample/apis/appIdeas.js
new file mode 100755
index 0000000..8d6da03
--- /dev/null
+++ b/AngularRequireJsSample/AngularRequireJsSample/apis/appIdeas.js
@@ -0,0 +1,76 @@
+var _ = require('underscore');
+
+var appIdeasArr=[{
+ id:1,
+ name:'Todo List',
+ description:'Maintains the list of tasks that you need to perform today with their current status',
+ technologies:'HTML, CSS, JavaScript, PhoneGap',
+ platform:'iOS, Android, Windows Phone 8',
+ contactMailId:'todolist@ideadumper.com',
+ status:'Under Development',
+ devsNeeded:2,
+ comments:[{name:'Rick',message:'Can I join in?'},
+ {name:'Mark',message:'Enjoying working with this team!'},
+ {name:'Lakshmi',message:'Why another todo list app?'}]
+},
+ {
+ id:2,
+ name:'Appointment Notifier',
+ description:'Have lots of meetings/appointments at your work? We make it easier to manage them.',
+ technologies:'Java',
+ platform:'Android',
+ contactMailId:'appointment_notifier@ideadumper.com',
+ status:'Yet to start',
+ devsNeeded:10,
+ comments:[{name:'Rick',message:'Great idea'},
+ {name:'Daniel',message:'I am learning Android development now. Can I join in?'}]
+ },
+ {
+ id:3,
+ name:'Nutrition tracker',
+ description:'Manage your calorie and protein consumption',
+ technologies:'PhoneGap',
+ platform:'Cross Platform',
+ contactMailId:'nutrition_tracker@ideadumper.com',
+ status:'In Progress',
+ devsNeeded:0,
+ comments:[{name:'James',message:'I need this app'},
+ {name:'Carl',message:'Enjoying working with this team!'}]
+ },
+ {
+ id:4,
+ name:'Run4Health',
+ description:'Run daily? Manage your data without entering even a single digit!',
+ technologies:'Objective C',
+ platform:'iOS',
+ contactMailId:'run4health@ideadumper.com',
+ status:'Completed',
+ devsNeeded:0,
+ comments:[{name:'John',message:'Started using it last week and it is nice so far'},
+ {name:'Jessica',message:'I am running because of this app. Thanks!'}
+ ]
+ },
+ {
+ id:5,
+ name:'Daily Expenses',
+ description:'Finding hard to keep up with your spendings? We make it easier for you!',
+ technologies:'PhoneGap',
+ platform:'Cross Platform',
+ contactMailId:'daily_expenses@ideadumper.com',
+ status:'In Progress',
+ devsNeeded:3,
+ comments:[{name:'Rich',message:'I need this app'},
+ {name:'Sean',message:'I just joined this team and it is awesome so far!'},
+ {name:'Ken',message:'I would like to join this project'}]
+ }];
+
+exports.allIdeas = function(){
+ return appIdeasArr;
+};
+
+exports.getIdea = function(id) {
+ var idea = _.find(appIdeasArr, function (item) {
+ return item.id == id
+ });
+ return idea;
+};
\ No newline at end of file
diff --git a/AngularRequireJsSample/AngularRequireJsSample/app/config.js b/AngularRequireJsSample/AngularRequireJsSample/app/config.js
new file mode 100755
index 0000000..594f468
--- /dev/null
+++ b/AngularRequireJsSample/AngularRequireJsSample/app/config.js
@@ -0,0 +1,13 @@
+define([],function(){
+ 'use strict';
+
+ function config($routeProvider) {
+ $routeProvider.when('/home', {templateUrl: 'templates/home.html', controller: 'ideasHomeController'})
+ .when('/details/:id',{templateUrl:'templates/ideaDetails.html', controller:'ideaDetailsController'})
+ .otherwise({redirectTo: '/home'});
+ }
+
+ config.$inject=['$routeProvider'];
+
+ return config;
+});
\ No newline at end of file
diff --git a/AngularRequireJsSample/AngularRequireJsSample/app/ideaDetailsController.js b/AngularRequireJsSample/AngularRequireJsSample/app/ideaDetailsController.js
new file mode 100755
index 0000000..de26289
--- /dev/null
+++ b/AngularRequireJsSample/AngularRequireJsSample/app/ideaDetailsController.js
@@ -0,0 +1,14 @@
+define([], function(app){
+ 'use strict';
+
+ function ideaDetailsController($scope, $routeParams, ideasDataSvc){
+ ideasDataSvc.ideaDetails($routeParams.id)
+ .then(function(result){
+ $scope.ideaDetails = result;
+ });
+ }
+
+ ideaDetailsController.$inject=['$scope','$routeParams','ideasDataSvc'];
+
+ return ideaDetailsController;
+});
diff --git a/AngularRequireJsSample/AngularRequireJsSample/app/ideasDataSvc.js b/AngularRequireJsSample/AngularRequireJsSample/app/ideasDataSvc.js
new file mode 100755
index 0000000..40ee117
--- /dev/null
+++ b/AngularRequireJsSample/AngularRequireJsSample/app/ideasDataSvc.js
@@ -0,0 +1,28 @@
+define([], function(app){
+ 'use strict';
+
+ function factoryFunc($http, $resource){
+ var Ideas;
+
+ Ideas=$resource('/api/ideas/:id',{id:'@id'});
+
+ var svc= {
+ allIdeas: allIdeas,
+ ideaDetails: ideaDetails
+ };
+
+ return svc;
+
+ function allIdeas(){
+ return Ideas.query().$promise;
+ }
+
+ function ideaDetails(id){
+ return Ideas.get({id:id}).$promise;
+ }
+ }
+
+ factoryFunc.$inject=['$http','$resource'];
+
+ return factoryFunc;
+});
diff --git a/AngularRequireJsSample/AngularRequireJsSample/app/ideasHomeController.js b/AngularRequireJsSample/AngularRequireJsSample/app/ideasHomeController.js
new file mode 100755
index 0000000..3f7247b
--- /dev/null
+++ b/AngularRequireJsSample/AngularRequireJsSample/app/ideasHomeController.js
@@ -0,0 +1,29 @@
+define([], function() {
+ 'use strict';
+
+ function ideasHomeController($scope, ideasDataSvc) {
+ $scope.ideaName = "Todo List";
+
+ $scope.gridOptions = {
+ data: 'ideas',
+ columnDefs: [
+ {field: 'name', displayName: 'Name'},
+ {field: 'technologies', displayName: 'Technologies'},
+ {field: 'platform', displayName: 'Platforms'},
+ {field: 'status', displayName: 'Status'},
+ {field: 'devsNeeded', displayName: 'Vacancies'},
+ {field: 'id', displayName: 'View Details', cellTemplate: 'View Details '}
+ ],
+ enableColumnResize: true
+ };
+
+ ideasDataSvc.allIdeas().then(function(result){
+ $scope.ideas=result;
+ console.log($scope.ideas);
+ });
+ }
+
+ ideasHomeController.$inject=['$scope','ideasDataSvc'];
+
+ return ideasHomeController;
+});
\ No newline at end of file
diff --git a/AngularRequireJsSample/AngularRequireJsSample/app/ideasModule.js b/AngularRequireJsSample/AngularRequireJsSample/app/ideasModule.js
new file mode 100755
index 0000000..7b10230
--- /dev/null
+++ b/AngularRequireJsSample/AngularRequireJsSample/app/ideasModule.js
@@ -0,0 +1,14 @@
+define(['app/config',
+ 'app/ideasDataSvc',
+ 'app/ideasHomeController',
+ 'app/ideaDetailsController'],
+ function(config, ideasDataSvc, ideasHomeController, ideaDetailsController){
+ 'use strict';
+
+ var app = angular.module('ideasApp', ['ngRoute','ngResource','ngGrid']);
+
+ app.config(config);
+ app.factory('ideasDataSvc',ideasDataSvc);
+ app.controller('ideasHomeController', ideasHomeController);
+ app.controller('ideaDetailsController',ideaDetailsController);
+});
\ No newline at end of file
diff --git a/AngularRequireJsSample/AngularRequireJsSample/app/requirejs/appBootstrap.js b/AngularRequireJsSample/AngularRequireJsSample/app/requirejs/appBootstrap.js
new file mode 100755
index 0000000..c0551f2
--- /dev/null
+++ b/AngularRequireJsSample/AngularRequireJsSample/app/requirejs/appBootstrap.js
@@ -0,0 +1,6 @@
+(function(){
+ 'use strict';
+ require(['main', function(){
+
+ }]);
+}());
diff --git a/AngularRequireJsSample/AngularRequireJsSample/app/requirejs/appIdeas-combined.js b/AngularRequireJsSample/AngularRequireJsSample/app/requirejs/appIdeas-combined.js
new file mode 100755
index 0000000..85d2534
--- /dev/null
+++ b/AngularRequireJsSample/AngularRequireJsSample/app/requirejs/appIdeas-combined.js
@@ -0,0 +1,109 @@
+define('app/config',[],function(){
+
+
+ function config($routeProvider) {
+ $routeProvider.when('/home', {templateUrl: 'templates/home.html', controller: 'ideasHomeController'})
+ .when('/details/:id',{templateUrl:'templates/ideaDetails.html', controller:'ideaDetailsController'})
+ .otherwise({redirectTo: '/home'});
+ }
+
+ config.$inject=['$routeProvider'];
+
+ return config;
+});
+define('app/ideasDataSvc',[], function(app){
+
+
+ function factoryFunc($http, $resource){
+ var Ideas;
+
+ Ideas=$resource('/api/ideas/:id',{id:'@id'});
+
+ var svc= {
+ allIdeas: allIdeas,
+ ideaDetails: ideaDetails
+ };
+
+ return svc;
+
+ function allIdeas(){
+ return Ideas.query().$promise;
+ }
+
+ function ideaDetails(id){
+ return Ideas.get({id:id}).$promise;
+ }
+ }
+
+ factoryFunc.$inject=['$http','$resource'];
+
+ return factoryFunc;
+});
+
+define('app/ideasHomeController',[], function() {
+
+
+ function ideasHomeController($scope, ideasDataSvc) {
+ $scope.ideaName = "Todo List";
+
+ $scope.gridOptions = {
+ data: 'ideas',
+ columnDefs: [
+ {field: 'name', displayName: 'Name'},
+ {field: 'technologies', displayName: 'Technologies'},
+ {field: 'platform', displayName: 'Platforms'},
+ {field: 'status', displayName: 'Status'},
+ {field: 'devsNeeded', displayName: 'Vacancies'},
+ {field: 'id', displayName: 'View Details', cellTemplate: 'View Details '}
+ ],
+ enableColumnResize: true
+ };
+
+ ideasDataSvc.allIdeas().then(function(result){
+ $scope.ideas=result;
+ console.log($scope.ideas);
+ });
+ }
+
+ ideasHomeController.$inject=['$scope','ideasDataSvc'];
+
+ return ideasHomeController;
+});
+define('app/ideaDetailsController',[], function(app){
+
+
+ function ideaDetailsController($scope, $routeParams, ideasDataSvc){
+ ideasDataSvc.ideaDetails($routeParams.id)
+ .then(function(result){
+ $scope.ideaDetails = result;
+ });
+ }
+
+ ideaDetailsController.$inject=['$scope','$routeParams','ideasDataSvc'];
+
+ return ideaDetailsController;
+});
+
+define('app/ideasModule',['app/config',
+ 'app/ideasDataSvc',
+ 'app/ideasHomeController',
+ 'app/ideaDetailsController'],
+ function(config, ideasDataSvc, ideasHomeController, ideaDetailsController){
+
+
+ var app = angular.module('ideasApp', ['ngRoute','ngResource','ngGrid']);
+
+ app.config(config);
+ app.factory('ideasDataSvc',ideasDataSvc);
+ app.controller('ideasHomeController', ideasHomeController);
+ app.controller('ideaDetailsController',ideaDetailsController);
+});
+require(['app/ideasModule'],
+ function() {
+
+
+ angular.bootstrap(document, ['ideasApp']);
+ }
+);
+define("main", function(){});
+
diff --git a/AngularRequireJsSample/AngularRequireJsSample/bower.json b/AngularRequireJsSample/AngularRequireJsSample/bower.json
new file mode 100755
index 0000000..ac20e22
--- /dev/null
+++ b/AngularRequireJsSample/AngularRequireJsSample/bower.json
@@ -0,0 +1,17 @@
+{
+ "name": "angular-requirejs",
+ "version": "0.1.0",
+ "dependencies": {
+ "jquery": "~2.1.0",
+ "angular": "~1.3.0",
+ "angular-animate": "~1.3.0",
+ "angular-resource": "~1.3.0",
+ "angular-route": "~1.3.0",
+ "angular-mocks": "~1.3.0",
+ "angular-sanitize": "~1.3.0",
+ "angular-touch": "~1.3.0",
+ "requirejs": "~2.1.15",
+ "bootstrap": "~3.2.0",
+ "ng-grid": "~2.0.13"
+ }
+}
diff --git a/AngularRequireJsSample/AngularRequireJsSample/index.html b/AngularRequireJsSample/AngularRequireJsSample/index.html
new file mode 100755
index 0000000..10a7b39
--- /dev/null
+++ b/AngularRequireJsSample/AngularRequireJsSample/index.html
@@ -0,0 +1,55 @@
+
+
+
+
+ Home
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AngularRequireJsSample/AngularRequireJsSample/main.js b/AngularRequireJsSample/AngularRequireJsSample/main.js
new file mode 100755
index 0000000..8f8080b
--- /dev/null
+++ b/AngularRequireJsSample/AngularRequireJsSample/main.js
@@ -0,0 +1,7 @@
+require(['app/ideasModule'],
+ function() {
+ 'use strict';
+
+ angular.bootstrap(document, ['ideasApp']);
+ }
+);
\ No newline at end of file
diff --git a/AngularRequireJsSample/AngularRequireJsSample/package.json b/AngularRequireJsSample/AngularRequireJsSample/package.json
new file mode 100755
index 0000000..c3fa2de
--- /dev/null
+++ b/AngularRequireJsSample/AngularRequireJsSample/package.json
@@ -0,0 +1,13 @@
+{
+ "name": "application-name",
+ "version": "0.0.1",
+ "dependencies": {
+ "body-parser": "^1.8.2",
+ "express": "^4.9.3",
+ "grunt": "^0.4.5",
+ "grunt-contrib-requirejs": "^0.4.4",
+ "grunt-contrib-uglify": "^0.6.0",
+ "grunt-express": "^1.4.1",
+ "underscore": "^1.7.0"
+ }
+}
diff --git a/AngularRequireJsSample/AngularRequireJsSample/readme.md b/AngularRequireJsSample/AngularRequireJsSample/readme.md
new file mode 100644
index 0000000..5986e8e
--- /dev/null
+++ b/AngularRequireJsSample/AngularRequireJsSample/readme.md
@@ -0,0 +1,10 @@
+Instructions to run the sample code
+-----------------------------------
+
+To run this sample code, you should have [Node.js][1], [NPM][2] and [bower][3] installed. After extracting the zip file on your computer, open a command prompt and change path to the folder containing code. Run the following commands on the command prompt:
+
+ - npm install
+ - bower install
+ - grunt dev
+
+By now, the Node.js application would have been hosted on the port 3000. Open your web browser and change url to http://localhost:3000. This should display home page of the sample code on the browser.
\ No newline at end of file
diff --git a/AngularRequireJsSample/AngularRequireJsSample/server.js b/AngularRequireJsSample/AngularRequireJsSample/server.js
new file mode 100755
index 0000000..bcb82d8
--- /dev/null
+++ b/AngularRequireJsSample/AngularRequireJsSample/server.js
@@ -0,0 +1,26 @@
+var http = require('http');
+var express = require('express');
+var bodyParser = require('body-parser');
+var appIdeas=require('./apis/appIdeas');
+
+var port = process.env.port || 3000;
+
+var app = express();
+app.use(bodyParser());
+app.use(express.static('.'));
+
+app.get('/', function (request, response) {
+ response.sendfile("index.html");
+});
+
+app.get('/api/ideas', function(request, response){
+ response.send(appIdeas.allIdeas());
+});
+
+app.get('/api/ideas/:id', function(request, response){
+ response.send(appIdeas.getIdea(request.params.id));
+});
+
+//app.listen(port);
+
+module.exports=app;
\ No newline at end of file
diff --git a/AngularRequireJsSample/AngularRequireJsSample/styles/site.css b/AngularRequireJsSample/AngularRequireJsSample/styles/site.css
new file mode 100755
index 0000000..79cc88c
--- /dev/null
+++ b/AngularRequireJsSample/AngularRequireJsSample/styles/site.css
@@ -0,0 +1,66 @@
+body {
+ padding-top: 61px;
+}
+
+.navbar-header a.navbar-brand {
+ margin-top: -15px;
+ margin-bottom: -20px;
+}
+
+.navbar-header a.navbar-brand h6 {
+ color: #ccc;
+}
+
+footer {
+ padding-left: 15px;
+ padding-right: 15px;
+}
+
+footer p {
+ border-top: 1px solid #d7e0e2;
+}
+
+.navbar-form .form-group {
+ margin-left: 10px;
+}
+
+.navbar-form button {
+ margin-left: 10px;
+}
+
+.thumbnail {
+ box-shadow: 1px 1px 1px 1px #DBDBDB;
+ padding-bottom: 20px;
+}
+
+.thumbnail:hover {
+ box-shadow: 2px 2px 2px 2px #7f7f7f;
+}
+
+.thumbnail .caption {
+ text-align: center;
+ padding-top: 20px;
+ font-family: 'Trebuchet MS';
+}
+
+.right {
+ clear: right;
+ float: right;
+}
+
+.rowMargin {
+ margin-top: 20px;
+ margin-bottom: 5px;
+}
+
+.voting-button {
+ cursor: pointer;
+ border: none;
+ background: none;
+}
+
+.gridStyle {
+ border: 1px solid rgb(212,212,212);
+ width: 800px;
+ height: 300px
+}
\ No newline at end of file
diff --git a/AngularRequireJsSample/AngularRequireJsSample/templates/home.html b/AngularRequireJsSample/AngularRequireJsSample/templates/home.html
new file mode 100755
index 0000000..52e78ff
--- /dev/null
+++ b/AngularRequireJsSample/AngularRequireJsSample/templates/home.html
@@ -0,0 +1,2 @@
+
+
diff --git a/AngularRequireJsSample/AngularRequireJsSample/templates/ideaDetails.html b/AngularRequireJsSample/AngularRequireJsSample/templates/ideaDetails.html
new file mode 100755
index 0000000..d6f629b
--- /dev/null
+++ b/AngularRequireJsSample/AngularRequireJsSample/templates/ideaDetails.html
@@ -0,0 +1,36 @@
+
+
{{ideaDetails.name}}
+
+
+ Description: {{ideaDetails.description}}
+
+
+
+
+
Technologies:
+
{{ideaDetails.technologies}}
+
+
+
+
Target Platforms:
+
{{ideaDetails.platform}}
+
+
+
+
Status:
+
{{ideaDetails.status}}
+
+
+
+
+
+
+
+
Comments:
+
+ {{comment.name}} says {{comment.message}}
+
+
\ No newline at end of file
diff --git a/AngularRequireJsSample/__MACOSX/._AngularRequireJsSample b/AngularRequireJsSample/__MACOSX/._AngularRequireJsSample
new file mode 100644
index 0000000..18b7a5f
Binary files /dev/null and b/AngularRequireJsSample/__MACOSX/._AngularRequireJsSample differ
diff --git a/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._.DS_Store b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._.DS_Store
new file mode 100644
index 0000000..a9dcab0
Binary files /dev/null and b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._.DS_Store differ
diff --git a/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._Gruntfile.js b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._Gruntfile.js
new file mode 100644
index 0000000..18b7a5f
Binary files /dev/null and b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._Gruntfile.js differ
diff --git a/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._apis b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._apis
new file mode 100644
index 0000000..18b7a5f
Binary files /dev/null and b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._apis differ
diff --git a/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._app b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._app
new file mode 100644
index 0000000..18b7a5f
Binary files /dev/null and b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._app differ
diff --git a/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._bower.json b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._bower.json
new file mode 100644
index 0000000..18b7a5f
Binary files /dev/null and b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._bower.json differ
diff --git a/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._index.html b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._index.html
new file mode 100644
index 0000000..18b7a5f
Binary files /dev/null and b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._index.html differ
diff --git a/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._main.js b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._main.js
new file mode 100644
index 0000000..18b7a5f
Binary files /dev/null and b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._main.js differ
diff --git a/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._package.json b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._package.json
new file mode 100644
index 0000000..18b7a5f
Binary files /dev/null and b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._package.json differ
diff --git a/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._readme.md b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._readme.md
new file mode 100644
index 0000000..364fd1b
Binary files /dev/null and b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._readme.md differ
diff --git a/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._server.js b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._server.js
new file mode 100644
index 0000000..18b7a5f
Binary files /dev/null and b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._server.js differ
diff --git a/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._styles b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._styles
new file mode 100644
index 0000000..18b7a5f
Binary files /dev/null and b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._styles differ
diff --git a/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._templates b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._templates
new file mode 100644
index 0000000..18b7a5f
Binary files /dev/null and b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/._templates differ
diff --git a/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/apis/._appIdeas.js b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/apis/._appIdeas.js
new file mode 100644
index 0000000..18b7a5f
Binary files /dev/null and b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/apis/._appIdeas.js differ
diff --git a/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/app/._config.js b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/app/._config.js
new file mode 100644
index 0000000..18b7a5f
Binary files /dev/null and b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/app/._config.js differ
diff --git a/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/app/._ideaDetailsController.js b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/app/._ideaDetailsController.js
new file mode 100644
index 0000000..18b7a5f
Binary files /dev/null and b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/app/._ideaDetailsController.js differ
diff --git a/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/app/._ideasDataSvc.js b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/app/._ideasDataSvc.js
new file mode 100644
index 0000000..18b7a5f
Binary files /dev/null and b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/app/._ideasDataSvc.js differ
diff --git a/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/app/._ideasHomeController.js b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/app/._ideasHomeController.js
new file mode 100644
index 0000000..18b7a5f
Binary files /dev/null and b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/app/._ideasHomeController.js differ
diff --git a/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/app/._ideasModule.js b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/app/._ideasModule.js
new file mode 100644
index 0000000..18b7a5f
Binary files /dev/null and b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/app/._ideasModule.js differ
diff --git a/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/app/._requirejs b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/app/._requirejs
new file mode 100644
index 0000000..18b7a5f
Binary files /dev/null and b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/app/._requirejs differ
diff --git a/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/app/requirejs/._appBootstrap.js b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/app/requirejs/._appBootstrap.js
new file mode 100644
index 0000000..18b7a5f
Binary files /dev/null and b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/app/requirejs/._appBootstrap.js differ
diff --git a/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/app/requirejs/._appIdeas-combined.js b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/app/requirejs/._appIdeas-combined.js
new file mode 100644
index 0000000..18b7a5f
Binary files /dev/null and b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/app/requirejs/._appIdeas-combined.js differ
diff --git a/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/styles/._site.css b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/styles/._site.css
new file mode 100644
index 0000000..18b7a5f
Binary files /dev/null and b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/styles/._site.css differ
diff --git a/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/templates/._home.html b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/templates/._home.html
new file mode 100644
index 0000000..18b7a5f
Binary files /dev/null and b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/templates/._home.html differ
diff --git a/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/templates/._ideaDetails.html b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/templates/._ideaDetails.html
new file mode 100644
index 0000000..18b7a5f
Binary files /dev/null and b/AngularRequireJsSample/__MACOSX/AngularRequireJsSample/templates/._ideaDetails.html differ
diff --git a/BuildingABoxThatSticksWhileYouScroll.zip b/BuildingABoxThatSticksWhileYouScroll.zip
deleted file mode 100644
index 0ef09ec..0000000
Binary files a/BuildingABoxThatSticksWhileYouScroll.zip and /dev/null differ
diff --git a/BuildingABoxThatSticksWhileYouScroll/__MACOSX/._logos.png b/BuildingABoxThatSticksWhileYouScroll/__MACOSX/._logos.png
new file mode 100644
index 0000000..625eb83
Binary files /dev/null and b/BuildingABoxThatSticksWhileYouScroll/__MACOSX/._logos.png differ
diff --git a/BuildingABoxThatSticksWhileYouScroll/__MACOSX/._lululemon.jpg b/BuildingABoxThatSticksWhileYouScroll/__MACOSX/._lululemon.jpg
new file mode 100644
index 0000000..625eb83
Binary files /dev/null and b/BuildingABoxThatSticksWhileYouScroll/__MACOSX/._lululemon.jpg differ
diff --git a/BuildingABoxThatSticksWhileYouScroll/__MACOSX/._prana.jpg b/BuildingABoxThatSticksWhileYouScroll/__MACOSX/._prana.jpg
new file mode 100644
index 0000000..625eb83
Binary files /dev/null and b/BuildingABoxThatSticksWhileYouScroll/__MACOSX/._prana.jpg differ
diff --git a/BuildingABoxThatSticksWhileYouScroll/__MACOSX/._sticky.js b/BuildingABoxThatSticksWhileYouScroll/__MACOSX/._sticky.js
new file mode 100644
index 0000000..625eb83
Binary files /dev/null and b/BuildingABoxThatSticksWhileYouScroll/__MACOSX/._sticky.js differ
diff --git a/BuildingABoxThatSticksWhileYouScroll/__MACOSX/._th3.jpg b/BuildingABoxThatSticksWhileYouScroll/__MACOSX/._th3.jpg
new file mode 100644
index 0000000..625eb83
Binary files /dev/null and b/BuildingABoxThatSticksWhileYouScroll/__MACOSX/._th3.jpg differ
diff --git a/BuildingABoxThatSticksWhileYouScroll/__MACOSX/._yoga_shops.htm b/BuildingABoxThatSticksWhileYouScroll/__MACOSX/._yoga_shops.htm
new file mode 100644
index 0000000..8e96b00
Binary files /dev/null and b/BuildingABoxThatSticksWhileYouScroll/__MACOSX/._yoga_shops.htm differ
diff --git a/BuildingABoxThatSticksWhileYouScroll/__MACOSX/._zobha.jpg b/BuildingABoxThatSticksWhileYouScroll/__MACOSX/._zobha.jpg
new file mode 100644
index 0000000..625eb83
Binary files /dev/null and b/BuildingABoxThatSticksWhileYouScroll/__MACOSX/._zobha.jpg differ
diff --git a/BuildingABoxThatSticksWhileYouScroll/logos.png b/BuildingABoxThatSticksWhileYouScroll/logos.png
new file mode 100755
index 0000000..fbeab0b
Binary files /dev/null and b/BuildingABoxThatSticksWhileYouScroll/logos.png differ
diff --git a/BuildingABoxThatSticksWhileYouScroll/lululemon.jpg b/BuildingABoxThatSticksWhileYouScroll/lululemon.jpg
new file mode 100755
index 0000000..c6aaa5b
Binary files /dev/null and b/BuildingABoxThatSticksWhileYouScroll/lululemon.jpg differ
diff --git a/BuildingABoxThatSticksWhileYouScroll/prana.jpg b/BuildingABoxThatSticksWhileYouScroll/prana.jpg
new file mode 100755
index 0000000..aaf56c4
Binary files /dev/null and b/BuildingABoxThatSticksWhileYouScroll/prana.jpg differ
diff --git a/BuildingABoxThatSticksWhileYouScroll/sticky.js b/BuildingABoxThatSticksWhileYouScroll/sticky.js
new file mode 100755
index 0000000..dae7965
--- /dev/null
+++ b/BuildingABoxThatSticksWhileYouScroll/sticky.js
@@ -0,0 +1,132 @@
+if( //API check
+ document.querySelectorAll &&
+ document.createElement("b").getBoundingClientRect
+) (function(doc) {
+"use strict";
+
+init();
+
+function init() {
+ if(window.addEventListener) {
+ addEventListener("scroll", onScroll, false);
+ } else {
+ attachEvent("onscroll", onScroll);
+ }
+
+ //inject all our inherited CSS styles here
+ var css = doc.createElement("div");
+ css.innerHTML = ".
+
+
+
+
+Yoga Shops around the World
+
+
+
+
+
+
+
+
+
+Copyright 2013
+
+
+
+
+