\n Want to find out more about Rallly? Check out the FAQs below.\n
What is Rallly?
\n
\n Rallly is a collaborative scheduling service that makes deciding on a date fast and easy. In other words, Rallly helps you and your friends decide on a date to host an event.\n
\n
Why is it called Rallly?
\n
\n The name is derived from the proper spelling of the word, “rally”. The Webster dictionary defines rally as, “to muster for a common purpose” which accurately describes the goal of this service. The inproper spelling can be attributed to the difficulty of finding short and meaningful domain names.\n
\n')}]),angular.module("rallly").controller("AboutCtrl",["Title",function(e){e.set("About Rallly")}]),angular.module("rallly").controller("AccountCtrl",["$scope","ConfirmModal",function(e){e.showNotice=function(){}}]),angular.module("rallly").controller("DeletionCtrl",["$state","Notification","Event",function(e,n,t){t.destroy({id:e.params.id,code:e.params.code},function(){new n({title:"Event deleted",message:"This event has been deleted",type:"success",timeout:5e3})},function(){new n({title:"Deletion Failed",message:"The event could not be deleted. Make sure that it exists and that the url is correct",type:"error"})}),e.go("event",{id:e.params.id})}]),angular.module("rallly").controller("EditEventCtrl",["$scope","$http","$state","$timeout","Event","ConfirmModal","Notification","Title",function(e,n,t,i,a,s,o,l){var d=t.params.id;e.event=a.get({id:d},function(){l.set("Edit: "+e.event.title),e.master=angular.copy(e.event)},function(){t.go("notfound")}),e.undoChanges=function(){e.event=angular.copy(e.master)},e.didChange=function(){return JSON.stringify(e.master)!=JSON.stringify(e.event)},e.didChangeDates=function(){return JSON.stringify(e.master.dates)!=JSON.stringify(e.event.dates)},e.submit=function(){if(e.form.$valid)if(e.didChangeDates()){new s({title:"Hold up!",message:"Changing the dates will reset all entries by the participants. Are you sure you want to do that?",confirmText:"Yes, I'm sure",isDestructive:!0,confirm:function(){e.event.participants=[],r()}})}else r();else{new o({title:"Not so fast",message:"Make sure you fill in all the required fields and try again.",type:"error"})}};var r=function(){a.update({id:d},e.event,function(){new o({title:"Changes Saved",message:"Your changes have been saved successfully.",type:"success"});e.master=angular.copy(e.event)})}}]),angular.module("rallly").controller("EventCtrl",["$scope","$http","$state","Title","Event","ConfirmModal",function(e,n,t,i,a,s){var o=t.params.id;e.event=a.get({id:o},function(){i.set(e.event.title),e.eventUrl=t.href("event",{id:e.event._id},{absolute:!0})},function(){t.go("notfound")}),e.openEvent=function(){e.event.isClosed=!1,a.update({id:o},e.event,function(){new s({title:"Event Open",message:"People can vote and comment on this event.",cancelText:"OK"})})},e.closeEvent=function(){e.event.isClosed=!0,a.update({id:o},e.event,function(){new s({title:"Event Closed",message:"People can no longer vote or comment on this event.",cancelText:"OK"})})},e.editEvent=function(){t.go("editevent",{id:e.event._id})}}]),angular.module("rallly").controller("HomeCtrl",["$scope","$state","Title",function(e,n,t){t.set("Rallly - Collaborative Scheduling"),e.newEvent=function(){n.go("newevent")}}]),angular.module("rallly").controller("NavigationCtrl",["$scope","$location",function(e,n){e.isActive=function(e){return n.path()==e?!0:!1}}]),angular.module("rallly").controller("NewEventCtrl",["$scope","$http","$state","Event","ConfirmModal","Notification",function(e,n,t,i,a){e.title="Schedule a New Event",e.description="Fill in the form below to create your event and share it with your friends and colleagues.",e.event={};var s=["newevent.general","newevent.datetime","newevent.invite"];e.page=1;var o=function(n){e.page=n,t.go(s[n-1])};o(e.page),e.submit=function(){e.form.$valid&&e.page==s.length?n.post("/api/event",e.event).success(function(n){e.event=n,e.eventUrl=t.href("event",{id:e.event._id},{absolute:!0}),e.page++,t.go("newevent.success")}).error(function(){new a({title:"Uh oh!",message:"There was an error creating your event. Please try again later.",cancelText:"OK"})}):e.form.$valid&&(e.form.$setPristine(),e.nextPage())
-},e.nextPage=function(){o(e.page+1)},e.prevPage=function(){o(e.page-1)}}]),angular.module("rallly").controller("VerificationCtrl",["Event","Notification","$state",function(e,n,t){e.verify({id:t.params.id,code:t.params.code},function(){new n({title:"Email Verified",message:"Your email has been verified. You will now be able to receive email notifications for this event",type:"success",timeout:5e3})},function(){new n({title:"Verification Failed",message:"Your verification code has expired.",type:"error"})}),t.go("event",{id:t.params.id})}]),angular.module("rallly").filter("elapsed",["$filter",function(e){return function(n){if(n){var t=Date.parse(n),i=(new Date).getTime(),a=i-t,s=Math.floor(a/1e3),o=Math.floor(s/60),l=Math.floor(o/60),d=Math.floor(l/24);return d>30?"on "+e("date")(n,"MMMM d"):d>1?d+" days ago":1==d?"1 day ago":l>1?l+" hours ago":1==l?"an hour ago":o>1?o+" minutes ago":1==o?"a minute ago":"a few seconds ago"}}}]),angular.module("rallly").directive("backImg",function(){return function(e,n,t){var i=t.backImg;n.css({"background-image":"url(/images/"+i+".png)"})}}),angular.module("rallly").directive("datepicker",function(){return{restrict:"A",require:"ngModel",scope:{model:"=ngModel",control:"="},templateUrl:"templates/directives/datePicker.html",link:function(e,n,t,i){e.model=e.model||[],e.control=e.control||{},e.$watchCollection("model",function(e){i.$setViewValue(e),i.$validate()}),i.$validators.required=function(e){return e&&0!=e.length?!0:!1};var a=Date.today(),s=a.clone(),o=function(n){s=n;var t=s.clone().moveToFirstDayOfMonth(),i=t.getDay();t.add(i-7).days(),e.title=s.toString("MMMM yyyy");for(var o=new Array(42),l=0;l0)&&(e.model.splice(t,0,n.date),i=!0),t++;while(0==i)}},e.isActive=function(n,t){e.model=e.model||[];for(var i=0;i0;i||n.toggle()};n.toggle=function(){n.open=!n.open,n.open?(t.addClass("open"),e.bind("click",i)):(t.removeClass("open"),e.unbind("click",i))}}}}]),angular.module("rallly").service("FormHelper",function(){this.emailRegexString="^([\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4})?$",this.emailRegex=new RegExp(this.emailRegexString),this.prettyError=function(e,n){return e.required?n+" is required":e.pattern?n+" is invalid":e.maxlength?n+" is too long":!1}}).directive("userForm",["FormHelper",function(e){return{scope:{event:"=",form:"="},templateUrl:"templates/form/userForm.html",link:function(n){n.errors={},n.emailRegex=e.emailRegex,n.$watchCollection("form.name.$error",function(t){n.errors.name=e.prettyError(t,"Name")}),n.$watchCollection("form.email.$error",function(t){n.errors.email=e.prettyError(t,"Email")})}}}]).directive("eventForm",["FormHelper",function(e){return{scope:{event:"=",form:"="},templateUrl:"templates/form/eventForm.html",link:function(n){n.errors={},n.$watchCollection("form.title.$error",function(t){n.errors.title=e.prettyError(t,"Title")}),n.$watchCollection("form.location.$error",function(t){n.errors.location=e.prettyError(t,"Location")})}}}]).directive("dateForm",function(){return{scope:{event:"=",form:"="},templateUrl:"templates/form/dateForm.html"}}).directive("participantsForm",["FormHelper",function(e){return{scope:{event:"=",form:"="},templateUrl:"templates/form/participantsForm.html",link:function(n){n.emailRegex=e.emailRegexString}}}]).directive("settingsForm",["Event","ConfirmModal",function(e,n){return{scope:{event:"=",form:"="},templateUrl:"templates/form/settingsForm.html",link:function(t){t.deleteEvent=function(){t.deleteRequestSent||e.delete({id:t.event._id},function(){t.deleteRequestSent=!0;new n({title:"Delete Request Sent",message:"An email has been sent to the creator of this event with instructions to delete it.",cancelText:"OK"})})}}}}]).directive("switchToggle",function(){return{scope:{model:"=ngModel"},require:"ngModel",link:function(e,n,t,i){n.addClass("switch-toggle");var a=function(){e.model^"undefined"!=typeof t.invert?n.addClass("active"):n.removeClass("active")};e.$watch("model",a),n.bind("click",function(n){e.model=!e.model,i.$setViewValue(e.model,n)})}}}).directive("timeForm",["DatePickerService",function(e){return{scope:{event:"=",form:"="},templateUrl:"templates/form/timeForm.html",link:function(n){var t,i=!1,a=n.$watch("event.dates",function(s){s&&!i&&a(),i=!0,t=new e(n.event.dates),n.unsetDate=function(e){t.removeDate(e)}})}}}]).directive("timePicker",["$timeout",function(){return{scope:{model:"=ngModel"},require:"ngModel",link:function(e,n,t,i){i.$viewChangeListeners.push(function(){e.model=i.$modelValue}),i.$parsers.push(function(e){return e?Date.parse(e):void 0}),i.$validators.time=function(e){if(i.$isEmpty(e))return!0;var n=Date.parse(e);return n?(i.$setViewValue(n.toString("hh:mm tt")),i.$render(),!0):!1}}}}]),angular.module("rallly").directive("poll",["$timeout","Participant","ConfirmModal",function(e,n,t){return{restrict:"A",templateUrl:"templates/directives/poll.html",scope:{event:"="},link:function(e){e.defaults=[],e.participant={};var i=[];e.event.$promise.then(function(a){console.log(a);for(var s=["John Example","Jane Specimen","Mark Instance","Mary Case"],o=[],l=0;ln)return!1;return!0},e.selectedDate=function(n){i[n]=0;for(var t=0;t0)&&(e.model.splice(t,0,n.date),i=!0),t++;while(0==i)}},e.isActive=function(n,t){e.model=e.model||[];for(var i=0;i0;i||n.toggle()};n.toggle=function(){n.open=!n.open,n.open?(t.addClass("open"),e.bind("click",i)):(t.removeClass("open"),e.unbind("click",i))}}}}]),angular.module("rallly").service("FormHelper",function(){this.emailRegexString="^([\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4})?$",this.emailRegex=new RegExp(this.emailRegexString),this.prettyError=function(e,n){return e.required?n+" is required":e.pattern?n+" is invalid":e.maxlength?n+" is too long":!1}}).directive("userForm",["FormHelper",function(e){return{scope:{event:"=",form:"="},templateUrl:"templates/form/userForm.html",link:function(n){n.errors={},n.emailRegex=e.emailRegex,n.$watchCollection("form.name.$error",function(t){n.errors.name=e.prettyError(t,"Name")}),n.$watchCollection("form.email.$error",function(t){n.errors.email=e.prettyError(t,"Email")})}}}]).directive("eventForm",["FormHelper",function(e){return{scope:{event:"=",form:"="},templateUrl:"templates/form/eventForm.html",link:function(n){n.errors={},n.$watchCollection("form.title.$error",function(t){n.errors.title=e.prettyError(t,"Title")}),n.$watchCollection("form.location.$error",function(t){n.errors.location=e.prettyError(t,"Location")})}}}]).directive("dateForm",function(){return{scope:{event:"=",form:"="},templateUrl:"templates/form/dateForm.html"}}).directive("participantsForm",["FormHelper",function(e){return{scope:{event:"=",form:"="},templateUrl:"templates/form/participantsForm.html",link:function(n){n.emailRegex=e.emailRegexString}}}]).directive("settingsForm",["Event","ConfirmModal",function(e,n){return{scope:{event:"=",form:"="},templateUrl:"templates/form/settingsForm.html",link:function(t){t.deleteEvent=function(){t.deleteRequestSent||e.delete({id:t.event._id},function(){t.deleteRequestSent=!0;new n({title:"Delete Request Sent",message:"An email has been sent to the creator of this event with instructions to delete it.",cancelText:"OK"})})}}}}]).directive("switchToggle",function(){return{scope:{model:"=ngModel"},require:"ngModel",link:function(e,n,t,i){n.addClass("switch-toggle");var a=function(){e.model^"undefined"!=typeof t.invert?n.addClass("active"):n.removeClass("active")};e.$watch("model",a),n.bind("click",function(n){e.model=!e.model,i.$setViewValue(e.model,n)})}}}).directive("timeForm",["DatePickerService",function(e){return{scope:{event:"=",form:"="},templateUrl:"templates/form/timeForm.html",link:function(n){var t,i=!1,a=n.$watch("event.dates",function(s){s&&!i&&a(),i=!0,t=new e(n.event.dates),n.unsetDate=function(e){t.removeDate(e)}})}}}]).directive("timePicker",["$timeout",function(){return{scope:{model:"=ngModel"},require:"ngModel",link:function(e,n,t,i){i.$viewChangeListeners.push(function(){e.model=i.$modelValue}),i.$parsers.push(function(e){return e?Date.parse(e):void 0}),i.$validators.time=function(e){if(i.$isEmpty(e))return!0;var n=Date.parse(e);return n?(i.$setViewValue(n.toString("hh:mm tt")),i.$render(),!0):!1}}}}]),angular.module("rallly").directive("poll",["$timeout","Participant","ConfirmModal",function(e,n,t){return{restrict:"A",templateUrl:"templates/directives/poll.html",scope:{event:"="},link:function(e){e.defaults=[],e.participant={};var i=[];e.event.$promise.then(function(n){for(var t=["John Example","Jane Specimen","Mark Instance","Mary Case"],i=[],a=0;an)return!1;return!0},e.selectedDate=function(n){i[n]=0;for(var t=0;t30?"on "+e("date")(n,"MMMM d"):d>1?d+" days ago":1==d?"1 day ago":l>1?l+" hours ago":1==l?"an hour ago":o>1?o+" minutes ago":1==o?"a minute ago":"a few seconds ago"}}}]),angular.module("rallly").factory("ConfirmModal",["btfModal",function(e){return function(n){var t;t=e({templateUrl:"templates/confirmmodal.html",controllerAs:"modal",controller:function(){this.title=n.title,this.message=n.message,this.confirm=n.confirm?function(){n.confirm(),t.deactivate()}:!1,this.cancel=t.deactivate,this.confirmText=n.confirmText||"Confirm",this.cancelText=n.cancelText||"Cancel",this.isDestructive=n.isDestructive}}),t.activate(),this.destroy=function(){t.deactivate()}}}]),angular.module("rallly").factory("Notification",["$timeout","btfModal",function(e,n){return function(t){var i;i=n({templateUrl:"templates/notification.html",controllerAs:"notification",controller:function(){this.title=t.title,this.message=t.message,this.close=i.deactivate,this.type=t.type;var n=t.timeout||5e3;e(i.deactivate,n)}}),i.activate(),this.destroy=function(){i.deactivate()}}}]);
//# sourceMappingURL=app.js.map
\ No newline at end of file
diff --git a/public/build/app.js.map b/public/build/app.js.map
index 9c6e598fa..1658370eb 100644
--- a/public/build/app.js.map
+++ b/public/build/app.js.map
@@ -1 +1 @@
-{"version":3,"sources":["main.js","templates.js","controllers/about.controller.js","controllers/account.controller.js","controllers/deletion.controller.js","controllers/editevent.controller.js","controllers/event.controller.js","controllers/home.controller.js","controllers/navigation.controller.js","controllers/newevent.controller.js","controllers/verification.controller.js","filters/elapsed.filter.js","directives/backImg.directive.js","directives/datepicker.directive.js","directives/discussion.directive.js","directives/dropdown.directive.js","directives/form.directive.js","directives/poll.directive.js","services/modal.service.js","services/notification.service.js"],"names":[],"mappings":"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","file":"app.js","sourcesContent":["angular.module('rallly', ['ui.router','ngResource','btford.modal','ngTagsInput','ngAnimate'])\n .config(function($stateProvider, $urlRouterProvider, $locationProvider){\n $locationProvider.html5Mode(true);\n $urlRouterProvider.otherwise(\"/notfound\")\n $stateProvider\n .state('index',{\n url : '/',\n templateUrl : 'templates/home.html',\n controller : 'HomeCtrl'\n })\n .state('newevent',{\n url : '/new',\n templateUrl : 'templates/newEvent/layout.html',\n controller : 'NewEventCtrl',\n })\n .state('newevent.general', {\n templateUrl : 'templates/newEvent/general.html'\n })\n .state('newevent.datetime', {\n templateUrl : 'templates/newEvent/datetime.html'\n })\n .state('newevent.invite', {\n templateUrl : 'templates/newEvent/invite.html'\n })\n .state('newevent.success', {\n templateUrl : 'templates/newEvent/success.html'\n })\n .state('about', {\n url : '/about',\n templateUrl : 'templates/about.html',\n controller : 'AboutCtrl'\n })\n .state('notfound', {\n url : '/notfound',\n templateUrl : 'templates/notfound.html'\n })\n .state('event',{\n url : '/:id',\n templateUrl : 'templates/event.html',\n controller : 'EventCtrl'\n })\n .state('editevent', {\n url: '/:id/edit',\n templateUrl : 'templates/editevent.html',\n controller : 'EditEventCtrl'\n })\n .state('verifyevent', {\n url : '/verify/:id/code/:code',\n controller : 'VerificationCtrl'\n })\n .state('deleteevent', {\n url : '/delete/:id/code/:code',\n controller : 'DeletionCtrl'\n })\n })\n .factory('Event', function($resource){\n return $resource('/api/event/:id', { id : '@_id' }, {\n 'update' : { method : 'PUT' },\n 'verify' : { method : 'GET', url : '/api/event/:id/code/:code' },\n 'destroy': { method : 'DELETE', url: '/api/event/:id/code/:code' }\n });\n })\n .factory('Participant', function($resource){\n return $resource('/api/event/:id/participant/:pid', { id: '@_id'}, {\n 'update' : { method : 'PUT' }\n });\n })\n .factory('Comment', function($resource){\n return $resource('/api/event/:id/comment/:cid', { id : '@_id' }, {\n 'update' : { method : 'PUT' }\n })\n })\n .factory('Title', function(){\n return {\n set : function(title){\n document.title = title;\n }\n }\n });\n","angular.module(\"rallly\").run([\"$templateCache\", function($templateCache) {$templateCache.put(\"templates/about.html\",\"
\\n
Frequently Asked Questions
\\n
\\n Want to find out more about Rallly? Check out the FAQs below.\\n
What is Rallly?
\\n
\\n Rallly is a collaborative scheduling service that makes deciding on a date fast and easy. In other words, Rallly helps you and your friends decide on a date to host an event.\\n
\\n
Why is it called Rallly?
\\n
\\n The name is derived from the proper spelling of the word, “rally”. The Webster dictionary defines rally as, “to muster for a common purpose” which accurately describes the goal of this service. The inproper spelling can be attributed to the difficulty of finding short and meaningful domain names.\\n
\\n\");}]);","angular.module('rallly')\n.controller('AboutCtrl', function(Title){\n Title.set('About Rallly')\n});\n","angular.module('rallly')\n.controller('AccountCtrl', function($scope, ConfirmModal){\n $scope.showNotice = function(){\n \n }\n})\n","angular.module('rallly')\n.controller('DeletionCtrl', function($state, Notification, Event){\n Event.destroy({id : $state.params.id, code :$state.params.code}, function(){\n var notification = new Notification({\n title : 'Event deleted',\n message : 'This event has been deleted',\n type : 'success',\n timeout : 5000\n });\n }, function(e){\n var notification = new Notification({\n title : 'Deletion Failed',\n message : 'The event could not be deleted. Make sure that it exists and that the url is correct',\n type : 'error'\n });\n });\n $state.go('event', { id : $state.params.id });\n});\n","angular.module('rallly')\n.controller('EditEventCtrl', function($scope, $http, $state, $timeout, Event, ConfirmModal, Notification, Title){\n var id = $state.params.id\n $scope.event = Event.get({id:id}, function(data){\n Title.set(\"Edit: \" + $scope.event.title);\n $scope.master = angular.copy($scope.event);\n }, function(e){\n $state.go('notfound');\n });\n $scope.undoChanges = function(){\n $scope.event = angular.copy($scope.master);\n }\n $scope.didChange = function(){\n return JSON.stringify($scope.master) != JSON.stringify($scope.event);\n }\n $scope.didChangeDates = function(){\n return JSON.stringify($scope.master.dates) != JSON.stringify($scope.event.dates);\n }\n $scope.submit = function(){\n if ($scope.form.$valid){\n if ($scope.didChangeDates() ){\n var modal = new ConfirmModal({\n title : 'Hold up!',\n message : 'Changing the dates will reset all entries by the participants. Are you sure you want to do that?',\n confirmText : 'Yes, I\\'m sure',\n isDestructive : true,\n confirm : function(){\n $scope.event.participants = [];\n update();\n }\n });\n\n } else {\n update();\n }\n } else {\n var notification = new Notification({\n title : 'Not so fast',\n message : 'Make sure you fill in all the required fields and try again.',\n type : 'error'\n });\n }\n }\n var update = function(){\n Event.update({\n id : id\n }, $scope.event,\n function(){\n var notification = new Notification({\n title : 'Changes Saved',\n message : 'Your changes have been saved successfully.',\n type : 'success'\n });\n $scope.master = angular.copy($scope.event);\n });\n }\n});\n","angular.module('rallly')\n.controller('EventCtrl', function($scope, $http, $state, Title, Event, ConfirmModal){\n var id = $state.params.id;\n // Get Event\n $scope.event = Event.get({id:id}, function(data){\n // Set the page title to the event title\n Title.set($scope.event.title);\n // Generate event url - i.e. http://rallly.co/jF9F_Fd\n $scope.eventUrl = $state.href('event', {\n id: $scope.event._id\n }, {\n absolute : true\n });\n }, function(e){\n $state.go('notfound');\n });\n\n $scope.openEvent = function(){\n $scope.event.isClosed = false;\n Event.update({\n id : id\n }, $scope.event,\n function(){\n var modal = new ConfirmModal({\n title : 'Event Open',\n message : 'People can vote and comment on this event.',\n cancelText : 'OK',\n });\n });\n }\n\n $scope.closeEvent = function(){\n $scope.event.isClosed = true;\n Event.update({\n id : id\n }, $scope.event,\n function(){\n var modal = new ConfirmModal({\n title : 'Event Closed',\n message : 'People can no longer vote or comment on this event.',\n cancelText : 'OK',\n });\n });\n }\n\n $scope.editEvent = function(){\n $state.go('editevent', { id : $scope.event._id });\n }\n\n});\n","angular.module('rallly')\n.controller('HomeCtrl', function($scope, $state, Title){\n Title.set('Rallly - Collaborative Scheduling')\n\n $scope.newEvent = function(){\n $state.go('newevent');\n }\n});\n","angular.module('rallly')\n.controller('NavigationCtrl', function($scope, $location){\n $scope.isActive = function(path) {\n if ($location.path() == path) {\n return true;\n } else {\n return false\n }\n }\n})\n","angular.module('rallly')\n.controller('NewEventCtrl', function($scope, $http, $state, Event, ConfirmModal, Notification){\n\n $scope.title = \"Schedule a New Event\";\n $scope.description = \"Fill in the form below to create your event and share it with your friends and colleagues.\";\n $scope.event = {};\n\n var states = [\n 'newevent.general',\n 'newevent.datetime',\n 'newevent.invite'\n ];\n\n $scope.page = 1;\n\n var goTo = function(page){\n $scope.page = page;\n $state.go(states[page-1]);\n }\n\n goTo($scope.page);\n\n\n $scope.submit = function(){\n if ($scope.form.$valid && $scope.page == states.length){\n $http.post('/api/event', $scope.event)\n .success(function(event, status, headers, config){\n $scope.event = event;\n $scope.eventUrl = $state.href('event', {\n id: $scope.event._id\n }, {\n absolute : true\n });\n $scope.page++;\n $state.go('newevent.success');\n })\n .error(function(){\n var modal = new ConfirmModal({\n title : 'Uh oh!',\n message : 'There was an error creating your event. Please try again later.',\n cancelText : 'OK'\n });\n });\n } else if ($scope.form.$valid) {\n $scope.form.$setPristine();\n $scope.nextPage();\n }\n }\n\n $scope.nextPage = function(){\n goTo($scope.page+1);\n }\n\n $scope.prevPage = function(){\n goTo($scope.page-1);\n }\n\n});\n","angular.module('rallly')\n.controller('VerificationCtrl', function(Event, Notification, $state){\n Event.verify({id : $state.params.id, code :$state.params.code}, function(){\n var notification = new Notification({\n title : 'Email Verified',\n message : 'Your email has been verified. You will now be able to receive email notifications for this event',\n type : 'success',\n timeout : 5000\n });\n }, function(e){\n var notification = new Notification({\n title : 'Verification Failed',\n message : 'Your verification code has expired.',\n type : 'error'\n });\n });\n $state.go('event', { id : $state.params.id });\n\n});\n","angular.module('rallly')\n.filter('elapsed', function($filter){\n return function(date){\n if (!date) return;\n var time = Date.parse(date),\n timeNow = new Date().getTime(),\n difference = timeNow - time,\n seconds = Math.floor(difference / 1000),\n minutes = Math.floor(seconds / 60),\n hours = Math.floor(minutes / 60),\n days = Math.floor(hours / 24);\n if (days > 30) {\n return 'on ' + $filter('date')(date, 'MMMM d');\n } else if (days > 1) {\n return days + \" days ago\";\n } else if (days == 1) {\n return \"1 day ago\"\n } else if (hours > 1) {\n return hours + \" hours ago\";\n } else if (hours == 1) {\n return \"an hour ago\";\n } else if (minutes > 1) {\n return minutes + \" minutes ago\";\n } else if (minutes == 1){\n return \"a minute ago\";\n } else {\n return \"a few seconds ago\";\n }\n }\n})\n","angular.module('rallly')\n.directive('backImg', function(){\n return function(scope, element, attrs){\n var url = attrs.backImg;\n element.css({\n 'background-image': 'url(/images/' + url +'.png)'\n });\n };\n})\n","angular.module('rallly')\n.directive('datepicker', function(){\n return {\n restrict : 'A',\n require : 'ngModel',\n scope : {\n model : '=ngModel',\n control : '='\n },\n templateUrl: 'templates/directives/datePicker.html',\n link : function(scope, el, attrs, ngModel){\n scope.model = scope.model || [];\n scope.control = scope.control || {};\n\n scope.$watchCollection('model', function(newValue){\n ngModel.$setViewValue(newValue);\n ngModel.$validate();\n });\n\n ngModel.$validators.required = function(modelValue, viewValue){\n if (!modelValue || modelValue.length == 0){\n return false;\n }\n return true;\n }\n\n var today = Date.today(), activeDate = today.clone();\n var setMonth = function(toDate){\n activeDate = toDate;\n var startDate = activeDate.clone().moveToFirstDayOfMonth(),\n startDateDOW = startDate.getDay();\n startDate.add(startDateDOW - 7).days();\n scope.title = activeDate.toString('MMMM yyyy');\n var days = new Array(42);\n for (var i = 0; i < days.length; i++){\n var date = startDate.clone().add(i).days()\n days[i] = {\n date : date,\n isOutsideMonth : (date.getMonth() != activeDate.getMonth()) ? true : false,\n isToday : (Date.equals(date, today))\n }\n }\n scope.days = days;\n }\n setMonth(activeDate);\n scope.selectDay = function(dayObj){\n if (dayObj.isOutsideMonth) {\n setMonth(dayObj.date);\n }\n if ((index = scope.isActive(dayObj.date, true)) != -1) {\n // Already selected\n scope.model.splice(index, 1); // remove\n } else {\n // Not selected\n var index = 0, inserted = false;\n do {\n if (scope.model[index] == undefined || Date.compare(Date.parse(scope.model[index]), dayObj.date) > 0){\n scope.model.splice(index, 0, dayObj.date);\n inserted = true;\n }\n index++;\n } while (inserted == false);\n }\n }\n scope.isActive = function(date, returnIndex){\n scope.model = scope.model || [];\n for (var i = 0; i < scope.model.length; i++){\n if (Date.equals(Date.parse(scope.model[i]), date)){\n return (returnIndex) ? i : true;\n }\n }\n return (returnIndex) ? -1 : false;\n }\n scope.nextMonth = function(){\n setMonth(activeDate.add(1).months());\n }\n scope.prevMonth = function(){\n setMonth(activeDate.add(-1).months());\n }\n\n scope.control.removeDate = function(date){\n if ((index = scope.isActive(Date.parse(date), true)) != -1) {\n scope.model.splice(index, 1)\n }\n }\n }\n }\n});\n","angular.module('rallly')\n.directive('discussion', function($timeout, Comment, ConfirmModal){\n return {\n restrict : 'A',\n templateUrl : 'templates/directives/discussion.html',\n scope : {\n 'event' : '='\n },\n link : function(scope, el, attrs){\n scope.comment = {};\n var thread = angular.element('.comment-thread');\n $timeout(function(){\n thread.scrollTop(thread.prop('scrollHeight'));\n });\n scope.deleteComment = function(comment){\n var modal = new ConfirmModal({\n title : 'Are you sure?',\n message : 'Are you sure you want to remove this comment?',\n confirmText : 'Yes - delete',\n cancelText : 'No - nevermind',\n isDestructive : true,\n confirm : function(){\n Comment.remove({ id : scope.event._id , cid : comment._id }, function(event){\n scope.event = event;\n });\n }\n });\n }\n scope.postComment = function(){\n if (scope.commentForm.$valid){\n var comment = new Comment(scope.comment);\n comment.$save({id:scope.event._id}, function(event){\n scope.event = event;\n scope.comment = {};\n });\n scope.commentForm.$setPristine();\n }\n }\n }\n }\n});\n","angular.module('rallly')\n.directive('dropdown', function($document){\n return {\n restrict : 'A',\n link : function(scope, el, attrs){\n el.addClass('dropdown');\n scope.open = false;\n\n var clickHandler = function(event){\n var isClickedElementChildOfPopup = el.find(event.target).length > 0;\n if (isClickedElementChildOfPopup) return;\n scope.toggle();\n }\n\n scope.toggle = function(){\n scope.open = !scope.open;\n if (scope.open){\n el.addClass('open');\n $document.bind('click', clickHandler);\n } else {\n el.removeClass('open');\n $document.unbind('click', clickHandler);\n }\n }\n }\n }\n});\n","angular.module('rallly')\n.service('FormHelper', function(){\n this.emailRegexString = '^([\\\\w-\\\\.]+@([\\\\w-]+\\\\.)+[\\\\w-]{2,4})?$';\n this.emailRegex = new RegExp(this.emailRegexString);\n this.prettyError = function(errors, field){\n if (errors.required) return field + \" is required\";\n if (errors.pattern) return field + \" is invalid\" ;\n if (errors.maxlength) return field + \" is too long\";\n return false;\n }\n})\n.directive('userForm', function(FormHelper){\n return {\n scope : {\n event : '=',\n form : '='\n },\n templateUrl : 'templates/form/userForm.html',\n link : function(scope, el, attrs) {\n scope.errors = {};\n\n scope.emailRegex = FormHelper.emailRegex;\n\n scope.$watchCollection('form.name.$error',function(errors){\n scope.errors.name = FormHelper.prettyError(errors, \"Name\");\n });\n\n scope.$watchCollection('form.email.$error',function(errors){\n scope.errors.email = FormHelper.prettyError(errors, \"Email\");\n });\n }\n }\n})\n.directive('eventForm', function(FormHelper){\n return {\n scope : {\n event : '=',\n form : '='\n },\n templateUrl : 'templates/form/eventForm.html',\n link : function(scope, el, attrs) {\n scope.errors = {};\n\n scope.$watchCollection('form.title.$error',function(errors){\n scope.errors.title = FormHelper.prettyError(errors, \"Title\");\n });\n\n scope.$watchCollection('form.location.$error',function(errors){\n scope.errors.location = FormHelper.prettyError(errors, \"Location\");\n });\n\n }\n }\n})\n.directive('dateForm', function(){\n return {\n scope : {\n event : '=',\n form : '='\n },\n templateUrl : 'templates/form/dateForm.html'\n }\n})\n.directive('participantsForm', function(FormHelper){\n return {\n scope : {\n event : '=',\n form : '='\n },\n templateUrl : 'templates/form/participantsForm.html',\n link : function(scope, el, attrs){\n scope.emailRegex = FormHelper.emailRegexString;\n }\n }\n})\n.directive('settingsForm', function(Event, ConfirmModal){\n return {\n scope : {\n event : '=',\n form : '='\n },\n templateUrl : 'templates/form/settingsForm.html',\n link : function(scope, el, attrs){\n scope.deleteEvent = function(){\n if (scope.deleteRequestSent) return;\n Event.delete({'id' : scope.event._id}, function(){\n scope.deleteRequestSent = true;\n var modal = new ConfirmModal({\n title : 'Delete Request Sent',\n message : 'An email has been sent to the creator of this event with instructions to delete it.',\n cancelText : 'OK'\n });\n });\n }\n }\n }\n})\n.directive('switchToggle', function(){\n return {\n scope : {\n model : '=ngModel'\n },\n require : 'ngModel',\n link : function(scope, el, attrs, ngModel) {\n el.addClass('switch-toggle');\n var setClass = function(){\n if (scope.model ^ typeof(attrs.invert) !== 'undefined'){\n el.addClass('active');\n } else {\n el.removeClass('active');\n }\n }\n scope.$watch('model', setClass);\n el.bind('click', function(e){\n scope.model = !scope.model;\n ngModel.$setViewValue(scope.model, e);\n });\n }\n }\n})\n.directive('timeForm', function(DatePickerService){\n return {\n scope : {\n event : '=',\n form : '='\n },\n templateUrl : 'templates/form/timeForm.html',\n link : function(scope, el, attrs){\n var init = false;\n var dateService;\n var deregister = scope.$watch('event.dates', function(value){\n if (value && !init) {\n deregister();\n }\n init = true;\n dateService = new DatePickerService(scope.event.dates);\n scope.unsetDate = function(date){\n dateService.removeDate(date);\n }\n });\n }\n }\n})\n.directive('timePicker', function($timeout){\n return {\n scope : {\n model : '=ngModel'\n },\n require : 'ngModel',\n link : function(scope, el, attrs, ngModel){\n ngModel.$viewChangeListeners.push(function(){\n scope.model = ngModel.$modelValue;\n });\n\n ngModel.$parsers.push(function (value) {\n if (!value) return;\n return Date.parse(value);\n });\n\n ngModel.$validators.time = function(modelValue, viewValue){\n if (ngModel.$isEmpty(modelValue)) return true;\n var time = Date.parse(modelValue);\n if (time) {\n ngModel.$setViewValue(time.toString(\"hh:mm tt\"));\n ngModel.$render();\n return true;\n }\n return false;\n }\n }\n }\n});\n","angular.module('rallly')\n.directive('poll', function($timeout, Participant, ConfirmModal){\n return {\n restrict : 'A',\n templateUrl : 'templates/directives/poll.html',\n scope : {\n 'event' : '='\n },\n link : function(scope, el, attrs){\n scope.defaults = [];\n scope.participant = {};\n var datesCount = [];\n scope.event.$promise.then(function(event){\n console.log(event);\n var examplesNames = ['John Example', 'Jane Specimen','Mark Instance', 'Mary Case'];\n var examples = [];\n for (var i = 0; i < examplesNames.length; i++){\n var example = { name : examplesNames[i] };\n example.dates = [];\n for (var j = 0; j < event.dates.length; j++){\n var answer = Math.random()<.5;\n example.dates[j] = answer;\n }\n examples.push(example);\n }\n scope.examples = examples;\n scope.delete = function(participant){\n var modal = new ConfirmModal({\n title : 'Delete ' + participant.name + '?',\n message : 'Are you sure you want to remove '+participant.name+' from the poll?',\n confirmText : 'Yes - delete',\n cancelText : 'No - nevermind',\n isDestructive : true,\n confirm : function(){\n Participant.remove({ id : scope.event._id , pid : participant._id }, function(event){\n scope.event = event;\n });\n }\n });\n }\n scope.isTopDate = function(index){\n var count = datesCount[index];\n for (var i = 0; i < datesCount.length; i++){\n if (datesCount[i] > count) return false;\n }\n return true;\n }\n scope.selectedDate = function(index){\n datesCount[index] = 0;\n for (var i = 0; i < scope.event.participants.length; i++){\n if (scope.event.participants[i].votes[index]) datesCount[index]++;\n }\n return datesCount[index];\n }\n scope.update = function(participant){\n Participant.update({\n id : scope.event._id,\n pid : participant._id\n }, participant);\n }\n scope.edit = function(participant){\n scope.defaults[scope.event.participants.indexOf(participant)] = angular.copy(participant);\n }\n scope.cancel = function(index){\n scope.event.participants[index] = scope.defaults[index];\n }\n scope.save = function(){\n if (scope.formnew.$valid){\n var participant = new Participant(scope.participant);\n participant.$save({id:scope.event._id}, function(event){\n scope.event = event;\n scope.participant = {};\n });\n scope.formnew.$setPristine();\n }\n }\n })\n }\n }\n});\n","angular.module('rallly')\n.factory('ConfirmModal', function(btfModal){\n\n return function(config){\n var modal;\n modal = btfModal({\n templateUrl : 'templates/confirmmodal.html',\n controllerAs : 'modal',\n controller : function(){\n this.title = config.title\n this.message = config.message;\n this.confirm = (config.confirm) ? function(){config.confirm(); modal.deactivate()} : false;\n this.cancel = modal.deactivate;\n this.confirmText = config.confirmText || 'Confirm';\n this.cancelText = config.cancelText || 'Cancel';\n this.isDestructive = config.isDestructive;\n }\n });\n modal.activate();\n \n this.destroy = function(){\n modal.deactivate();\n }\n }\n});\n","angular.module('rallly')\n.factory('Notification', function($timeout, btfModal){\n return function(config){\n var modal;\n modal = btfModal({\n templateUrl : 'templates/notification.html',\n controllerAs : 'notification',\n controller : function(){\n this.title = config.title\n this.message = config.message;\n this.close = modal.deactivate;\n this.type = config.type;\n var timeout = config.timeout || 5000;\n $timeout(modal.deactivate, timeout);\n }\n });\n modal.activate();\n\n this.destroy = function(){\n modal.deactivate();\n }\n }\n});\n"],"sourceRoot":"/source/"}
\ No newline at end of file
+{"version":3,"sources":["main.js","templates.js","controllers/about.controller.js","controllers/account.controller.js","controllers/deletion.controller.js","controllers/editevent.controller.js","controllers/event.controller.js","controllers/home.controller.js","controllers/navigation.controller.js","controllers/newevent.controller.js","controllers/verification.controller.js","directives/backImg.directive.js","directives/datepicker.directive.js","directives/discussion.directive.js","directives/dropdown.directive.js","directives/form.directive.js","directives/poll.directive.js","filters/elapsed.filter.js","services/modal.service.js","services/notification.service.js"],"names":[],"mappings":"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","file":"app.js","sourcesContent":["angular.module('rallly', ['ui.router','ngResource','btford.modal','ngTagsInput','ngAnimate'])\n .config(function($stateProvider, $urlRouterProvider, $locationProvider){\n $locationProvider.html5Mode(true);\n $urlRouterProvider.otherwise(\"/notfound\")\n $stateProvider\n .state('index',{\n url : '/',\n templateUrl : 'templates/home.html',\n controller : 'HomeCtrl'\n })\n .state('newevent',{\n url : '/new',\n templateUrl : 'templates/newEvent/layout.html',\n controller : 'NewEventCtrl',\n })\n .state('newevent.general', {\n templateUrl : 'templates/newEvent/general.html'\n })\n .state('newevent.datetime', {\n templateUrl : 'templates/newEvent/datetime.html'\n })\n .state('newevent.invite', {\n templateUrl : 'templates/newEvent/invite.html'\n })\n .state('newevent.success', {\n templateUrl : 'templates/newEvent/success.html'\n })\n .state('about', {\n url : '/about',\n templateUrl : 'templates/about.html',\n controller : 'AboutCtrl'\n })\n .state('notfound', {\n url : '/notfound',\n templateUrl : 'templates/notfound.html'\n })\n .state('event',{\n url : '/:id',\n templateUrl : 'templates/event.html',\n controller : 'EventCtrl'\n })\n .state('editevent', {\n url: '/:id/edit',\n templateUrl : 'templates/editevent.html',\n controller : 'EditEventCtrl'\n })\n .state('verifyevent', {\n url : '/verify/:id/code/:code',\n controller : 'VerificationCtrl'\n })\n .state('deleteevent', {\n url : '/delete/:id/code/:code',\n controller : 'DeletionCtrl'\n })\n })\n .factory('Event', function($resource){\n return $resource('/api/event/:id', { id : '@_id' }, {\n 'update' : { method : 'PUT' },\n 'verify' : { method : 'GET', url : '/api/event/:id/code/:code' },\n 'destroy': { method : 'DELETE', url: '/api/event/:id/code/:code' }\n });\n })\n .factory('Participant', function($resource){\n return $resource('/api/event/:id/participant/:pid', { id: '@_id'}, {\n 'update' : { method : 'PUT' }\n });\n })\n .factory('Comment', function($resource){\n return $resource('/api/event/:id/comment/:cid', { id : '@_id' }, {\n 'update' : { method : 'PUT' }\n })\n })\n .factory('Title', function(){\n return {\n set : function(title){\n document.title = title;\n }\n }\n });\n","angular.module(\"rallly\").run([\"$templateCache\", function($templateCache) {$templateCache.put(\"templates/about.html\",\"
\\n
Frequently Asked Questions
\\n
\\n Want to find out more about Rallly? Check out the FAQs below.\\n
What is Rallly?
\\n
\\n Rallly is a collaborative scheduling service that makes deciding on a date fast and easy. In other words, Rallly helps you and your friends decide on a date to host an event.\\n
\\n
Why is it called Rallly?
\\n
\\n The name is derived from the proper spelling of the word, “rally”. The Webster dictionary defines rally as, “to muster for a common purpose” which accurately describes the goal of this service. The inproper spelling can be attributed to the difficulty of finding short and meaningful domain names.\\n