\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){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;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").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;t\\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 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","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