From 6ad493a0799eb7cf884bb61b72f41e7990dc97a8 Mon Sep 17 00:00:00 2001 From: Luke Vella Date: Wed, 14 Jan 2015 00:21:39 +0100 Subject: [PATCH] Added custom confirm modal dialog box --- api/event/event.model.js | 5 +- bower.json | 3 +- public/build/app.js | 4 +- public/css/style.css | 2 +- public/css/style.css.map | 2 +- public/js/controllers/editevent.controller.js | 17 +- public/js/controllers/event.controller.js | 23 +- public/js/controllers/newevent.controller.js | 6 +- public/js/filters/elapsed.filter.js | 28 ++ public/js/main.js | 2 +- public/js/services/modal.service.js | 29 ++ public/scss/partials/_buttons.scss | 2 +- public/scss/partials/_modal.scss | 42 +++ public/scss/style.scss | 1 + public/templates/about.html | 7 +- public/templates/confirmmodal.html | 12 + public/templates/editevent.html | 3 +- public/templates/event.html | 8 +- public/templates/modal.html | 7 - public/vendor/angular-modal/.bower.json | 30 ++ public/vendor/angular-modal/README.md | 211 +++++++++++++ public/vendor/angular-modal/bower.json | 19 ++ public/vendor/angular-modal/gulpfile.js | 20 ++ public/vendor/angular-modal/karma.conf.js | 30 ++ public/vendor/angular-modal/modal.css | 20 ++ public/vendor/angular-modal/modal.js | 89 ++++++ public/vendor/angular-modal/modal.min.js | 7 + public/vendor/angular-modal/modal.min.js.map | 1 + public/vendor/angular-modal/modal.spec.js | 286 ++++++++++++++++++ public/vendor/angular-modal/package.json | 33 ++ views/index.ejs | 1 + 31 files changed, 909 insertions(+), 41 deletions(-) create mode 100644 public/js/filters/elapsed.filter.js create mode 100644 public/js/services/modal.service.js create mode 100644 public/scss/partials/_modal.scss create mode 100644 public/templates/confirmmodal.html delete mode 100644 public/templates/modal.html create mode 100644 public/vendor/angular-modal/.bower.json create mode 100644 public/vendor/angular-modal/README.md create mode 100644 public/vendor/angular-modal/bower.json create mode 100644 public/vendor/angular-modal/gulpfile.js create mode 100644 public/vendor/angular-modal/karma.conf.js create mode 100644 public/vendor/angular-modal/modal.css create mode 100644 public/vendor/angular-modal/modal.js create mode 100644 public/vendor/angular-modal/modal.min.js create mode 100644 public/vendor/angular-modal/modal.min.js.map create mode 100644 public/vendor/angular-modal/modal.spec.js create mode 100644 public/vendor/angular-modal/package.json diff --git a/api/event/event.model.js b/api/event/event.model.js index 7f5b4684f..4425cc302 100644 --- a/api/event/event.model.js +++ b/api/event/event.model.js @@ -14,10 +14,7 @@ var EventSchema = new Schema({ type : Date, default : Date.now }, - updated : { - type : Date, - default : Date.now - }, + updated : Date, title : String, dates : [Date], emails : [String], diff --git a/bower.json b/bower.json index d949c5574..e5b194ee7 100644 --- a/bower.json +++ b/bower.json @@ -20,6 +20,7 @@ "bootstrap-datepicker": "~1.3.0", "angular-ui-router": "~0.2.13", "angular-resource": "~1.3.6", - "ngFx": "~1.0.5" + "ngFx": "~1.0.5", + "angular-modal": "~0.4.0" } } diff --git a/public/build/app.js b/public/build/app.js index f0d8f8840..27d708b2c 100644 --- a/public/build/app.js +++ b/public/build/app.js @@ -1,2 +1,2 @@ -angular.module("rallly",["ui.router","ngResource","ngFx"]).config(["$stateProvider","$urlRouterProvider","$locationProvider",function(t,e,n){n.html5Mode(!0),e.otherwise("/notfound"),t.state("index",{url:"/",templateUrl:"templates/newevent.html",controller:"NewEventCtrl"}).state("about",{url:"/about",templateUrl:"templates/about.html",controller:"AboutCtrl"}).state("notfound",{url:"/notfound",templateUrl:"templates/notfound.html"}).state("editevent",{url:"/:id/edit",templateUrl:"templates/editevent.html",controller:"EditEventCtrl"}).state("event",{url:"/:id",templateUrl:"templates/event.html",controller:"EventCtrl"})}]).factory("Event",["$resource",function(t){return t("/api/event/:id",{id:"@_id"},{update:{method:"PUT"}})}]).factory("Participant",["$resource",function(t){return t("/api/event/:id/participant/:pid",{id:"@_id",pid:"@pid"},{update:{method:"PUT"}})}]),angular.module("rallly").controller("AboutCtrl",function(){$(".nav-link").removeClass("active"),$(".nav-link[href='/about']").addClass("active")}),angular.module("rallly").controller("EditEventCtrl",["$scope","$http","$state","$timeout","Event",function(t,e,n,a,i){var r=n.params.id;t.event=i.get({id:r},function(e){for(var n=[],a=0;ae.getTime()?!0:!1}),a.$setViewValue(e,t)}),t.clearDates=function(){$(e).datepicker("setDate",null)},t.unsetDate=function(n){$(e).datepicker("setDates",t.event.dates.filter(function(t){return t!=n}))}}}}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1haW4uanMiLCJjb250cm9sbGVycy9hYm91dC5jb250cm9sbGVyLmpzIiwiY29udHJvbGxlcnMvZWRpdGV2ZW50LmNvbnRyb2xsZXIuanMiLCJjb250cm9sbGVycy9ldmVudC5jb250cm9sbGVyLmpzIiwiY29udHJvbGxlcnMvbmV3ZXZlbnQuY29udHJvbGxlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxRQUFBLE9BQUEsVUFBQSxZQUFBLGFBQUEsU0FDQSxRQUFBLGlCQUFBLHFCQUFBLG9CQUFBLFNBQUEsRUFBQSxFQUFBLEdBQ0EsRUFBQSxXQUFBLEdBQ0EsRUFBQSxVQUFBLGFBQ0EsRUFDQSxNQUFBLFNBQ0EsSUFBQSxJQUNBLFlBQUEsMEJBQ0EsV0FBQSxpQkFFQSxNQUFBLFNBQ0EsSUFBQSxTQUNBLFlBQUEsdUJBQ0EsV0FBQSxjQUVBLE1BQUEsWUFDQSxJQUFBLFlBQ0EsWUFBQSw0QkFFQSxNQUFBLGFBQ0EsSUFBQSxZQUNBLFlBQUEsMkJBQ0EsV0FBQSxrQkFFQSxNQUFBLFNBQ0EsSUFBQSxPQUNBLFlBQUEsdUJBQ0EsV0FBQSxpQkFHQSxRQUFBLFNBQUEsWUFBQSxTQUFBLEdBQ0EsTUFBQSxHQUFBLGtCQUFBLEdBQUEsU0FDQSxRQUFBLE9BQUEsWUFHQSxRQUFBLGVBQUEsWUFBQSxTQUFBLEdBQ0EsTUFBQSxHQUFBLG1DQUFBLEdBQUEsT0FBQSxJQUFBLFNBQ0EsUUFBQSxPQUFBLFlDckNBLFFBQUEsT0FBQSxVQUNBLFdBQUEsWUFBQSxXQUNBLEVBQUEsYUFBQSxZQUFBLFVBQ0EsRUFBQSw0QkFBQSxTQUFBLFlDSEEsUUFBQSxPQUFBLFVBQ0EsV0FBQSxpQkFBQSxTQUFBLFFBQUEsU0FBQSxXQUFBLFFBQUEsU0FBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEdBQ0EsR0FBQSxHQUFBLEVBQUEsT0FBQSxFQUNBLEdBQUEsTUFBQSxFQUFBLEtBQUEsR0FBQSxHQUFBLFNBQUEsR0FFQSxJQUFBLEdBREEsTUFDQSxFQUFBLEVBQUEsRUFBQSxFQUFBLE1BQUEsT0FBQSxJQUNBLEVBQUEsS0FBQSxHQUFBLE1BQUEsRUFBQSxNQUFBLElBRUEsR0FBQSxxQkFBQSxXQUFBLFdBQUEsR0FDQSxFQUFBLE9BQUEsUUFBQSxLQUFBLEVBQUEsUUFDQSxXQUNBLEVBQUEsR0FBQSxjQUVBLEVBQUEsVUFBQSxXQUNBLE1BQUEsTUFBQSxVQUFBLEVBQUEsU0FBQSxLQUFBLFVBQUEsRUFBQSxRQUVBLEVBQUEsZUFBQSxXQUNBLE1BQUEsTUFBQSxVQUFBLEVBQUEsT0FBQSxRQUFBLEtBQUEsVUFBQSxFQUFBLE1BQUEsUUFFQSxFQUFBLE9BQUEsV0FDQSxFQUFBLGNBQ0EsRUFBQSxpQkFDQSxRQUFBLHFHQUNBLElBR0EsS0FJQSxJQUFBLEdBQUEsV0FDQSxFQUFBLE1BQUEsZ0JBQ0EsRUFBQSxRQUNBLEdBQUEsR0FDQSxFQUFBLE1BQ0EsV0FDQSxFQUFBLE9BQUEsRUFBQSxTQUNBLEVBQUEsT0FBQSxRQUFBLEtBQUEsRUFBQSxPQUNBLEVBQUEsUUFBQSxFQUFBLFdBQ0EsRUFBQSxTQUFBLEdBQ0EsV0N4Q0EsUUFBQSxPQUFBLFVBQ0EsV0FBQSxhQUFBLFNBQUEsUUFBQSxTQUFBLFFBQUEsY0FBQSxTQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsR0FDQSxFQUFBLGFBQUEsWUFBQSxTQUNBLElBQUEsR0FBQSxFQUFBLE9BQUEsRUFDQSxHQUFBLGVBQ0EsRUFBQSxNQUFBLEVBQUEsS0FBQSxHQUFBLEdBQUEsV0FDQSxFQUFBLFNBQUEsRUFBQSxLQUFBLFNBQ0EsR0FBQSxFQUFBLE1BQUEsTUFFQSxVQUFBLEtBRUEsV0FDQSxFQUFBLEdBQUEsY0FFQSxFQUFBLE9BQUEsU0FBQSxHQUNBLFFBQUEsbUNBQUEsRUFBQSxLQUFBLE1BQ0EsRUFBQSxRQUFBLEdBQUEsRUFBQSxJQUFBLEVBQUEsS0FBQSxTQUFBLEdBQ0EsRUFBQSxNQUFBLEtBSUEsRUFBQSxZQUVBLEVBQUEsVUFBQSxXQUNBLEVBQUEsR0FBQSxhQUFBLEdBQUEsRUFBQSxNQUFBLE9BR0EsRUFBQSxPQUFBLFNBQUEsR0FDQSxFQUFBLFFBQ0EsR0FBQSxFQUFBLE1BQUEsSUFDQSxJQUFBLEVBQUEsS0FDQSxJQUVBLEVBQUEsS0FBQSxTQUFBLEdBQ0EsRUFBQSxTQUFBLEVBQUEsTUFBQSxhQUFBLFFBQUEsSUFBQSxRQUFBLEtBQUEsSUFHQSxFQUFBLE9BQUEsU0FBQSxHQUNBLEVBQUEsTUFBQSxhQUFBLEdBQUEsRUFBQSxTQUFBLElBR0EsRUFBQSxLQUFBLFNBQUEsR0FDQSxHQUFBLEdBQUEsR0FBQSxHQUFBLEVBQ0EsR0FBQSxPQUFBLEdBQUEsR0FBQSxTQUFBLEdBQ0EsRUFBQSxNQUFBLEVBQ0EsRUFBQSxxQkM3Q0EsUUFBQSxPQUFBLFVBQ0EsV0FBQSxnQkFBQSxTQUFBLFFBQUEsU0FBQSxRQUFBLFNBQUEsRUFBQSxFQUFBLEdBQ0EsRUFBQSxhQUFBLFlBQUEsVUFDQSxFQUFBLHVCQUFBLFNBQUEsVUFFQSxFQUFBLE9BQUEsV0FDQSxFQUFBLEtBQUEsYUFBQSxFQUFBLE9BQ0EsUUFBQSxTQUFBLEdBQ0EsRUFBQSxNQUFBLEVBQ0EsRUFBQSxTQUFBLEVBQUEsS0FBQSxTQUNBLEdBQUEsRUFBQSxNQUFBLE1BRUEsVUFBQSxNQUlBLE1BQUEsU0FBQSxHQUNBLEVBQUEsT0FBQSxFQUFBLFVBR0EsRUFBQSxXQUFBLFFBRUEsVUFBQSxhQUFBLFdBQ0EsT0FDQSxTQUFBLElBQ0EsUUFBQSxVQUNBLEtBQUEsU0FBQSxFQUFBLEVBQUEsRUFBQSxHQUNBLEVBQUEsR0FBQSxZQUNBLFdBQUEsRUFDQSxnQkFBQSxFQUNBLE9BQUEsZUFFQSxHQUFBLGFBQUEsU0FBQSxHQUNBLEdBQUEsR0FBQSxFQUFBLEtBQ0EsR0FBQSxLQUFBLFNBQUEsRUFBQSxHQUNBLE1BQUEsR0FBQSxVQUFBLEVBQUEsV0FBQSxHQUNBLElBRUEsRUFBQSxjQUFBLEVBQUEsS0FHQSxFQUFBLFdBQUEsV0FDQSxFQUFBLEdBQUEsV0FBQSxVQUFBLE9BRUEsRUFBQSxVQUFBLFNBQUEsR0FDQSxFQUFBLEdBQUEsV0FBQSxXQUFBLEVBQUEsTUFBQSxNQUFBLE9BQUEsU0FBQSxHQUNBLE1BQUEsSUFBQSIsImZpbGUiOiJwdWJsaWMvYnVpbGQvYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiYW5ndWxhci5tb2R1bGUoJ3JhbGxseScsIFsndWkucm91dGVyJywnbmdSZXNvdXJjZScsJ25nRngnXSlcbiAgICAuY29uZmlnKGZ1bmN0aW9uKCRzdGF0ZVByb3ZpZGVyLCAkdXJsUm91dGVyUHJvdmlkZXIsICRsb2NhdGlvblByb3ZpZGVyKXtcbiAgICAgICAgJGxvY2F0aW9uUHJvdmlkZXIuaHRtbDVNb2RlKHRydWUpO1xuICAgICAgICAkdXJsUm91dGVyUHJvdmlkZXIub3RoZXJ3aXNlKFwiL25vdGZvdW5kXCIpXG4gICAgICAgICRzdGF0ZVByb3ZpZGVyXG4gICAgICAgIC5zdGF0ZSgnaW5kZXgnLHtcbiAgICAgICAgICAgIHVybCA6ICcvJyxcbiAgICAgICAgICAgIHRlbXBsYXRlVXJsIDogJ3RlbXBsYXRlcy9uZXdldmVudC5odG1sJyxcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgOiAnTmV3RXZlbnRDdHJsJ1xuICAgICAgICB9KVxuICAgICAgICAuc3RhdGUoJ2Fib3V0Jywge1xuICAgICAgICAgICAgdXJsIDogJy9hYm91dCcsXG4gICAgICAgICAgICB0ZW1wbGF0ZVVybCA6ICd0ZW1wbGF0ZXMvYWJvdXQuaHRtbCcsXG4gICAgICAgICAgICBjb250cm9sbGVyIDogJ0Fib3V0Q3RybCdcbiAgICAgICAgfSlcbiAgICAgICAgLnN0YXRlKCdub3Rmb3VuZCcsIHtcbiAgICAgICAgICAgIHVybCA6ICcvbm90Zm91bmQnLFxuICAgICAgICAgICAgdGVtcGxhdGVVcmwgOiAndGVtcGxhdGVzL25vdGZvdW5kLmh0bWwnXG4gICAgICAgIH0pXG4gICAgICAgIC5zdGF0ZSgnZWRpdGV2ZW50Jywge1xuICAgICAgICAgICAgdXJsOiAnLzppZC9lZGl0JyxcbiAgICAgICAgICAgIHRlbXBsYXRlVXJsIDogJ3RlbXBsYXRlcy9lZGl0ZXZlbnQuaHRtbCcsXG4gICAgICAgICAgICBjb250cm9sbGVyIDogJ0VkaXRFdmVudEN0cmwnXG4gICAgICAgIH0pXG4gICAgICAgIC5zdGF0ZSgnZXZlbnQnLHtcbiAgICAgICAgICAgIHVybCA6ICcvOmlkJyxcbiAgICAgICAgICAgIHRlbXBsYXRlVXJsIDogJ3RlbXBsYXRlcy9ldmVudC5odG1sJyxcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgOiAnRXZlbnRDdHJsJ1xuICAgICAgICB9KVxuICAgIH0pXG4gICAgLmZhY3RvcnkoJ0V2ZW50JywgZnVuY3Rpb24oJHJlc291cmNlKXtcbiAgICAgICAgcmV0dXJuICRyZXNvdXJjZSgnL2FwaS9ldmVudC86aWQnLCB7IGlkIDogJ0BfaWQnIH0sIHtcbiAgICAgICAgICAgICd1cGRhdGUnIDogeyBtZXRob2QgOiAnUFVUJyB9XG4gICAgICAgIH0pO1xuICAgIH0pXG4gICAgLmZhY3RvcnkoJ1BhcnRpY2lwYW50JywgZnVuY3Rpb24oJHJlc291cmNlKXtcbiAgICAgICAgcmV0dXJuICRyZXNvdXJjZSgnL2FwaS9ldmVudC86aWQvcGFydGljaXBhbnQvOnBpZCcsIHsgaWQ6ICdAX2lkJywgcGlkIDogJ0BwaWQnfSwge1xuICAgICAgICAgICAgJ3VwZGF0ZScgOiB7IG1ldGhvZCA6ICdQVVQnIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4iLCJhbmd1bGFyLm1vZHVsZSgncmFsbGx5Jylcbi5jb250cm9sbGVyKCdBYm91dEN0cmwnLCBmdW5jdGlvbigpe1xuICAgICQoXCIubmF2LWxpbmtcIikucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICQoXCIubmF2LWxpbmtbaHJlZj0nL2Fib3V0J11cIikuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xufSk7XG4iLCJhbmd1bGFyLm1vZHVsZSgncmFsbGx5Jylcbi5jb250cm9sbGVyKCdFZGl0RXZlbnRDdHJsJywgZnVuY3Rpb24oJHNjb3BlLCAkaHR0cCwgJHN0YXRlLCAkdGltZW91dCwgRXZlbnQpe1xuICAgIHZhciBpZCA9ICRzdGF0ZS5wYXJhbXMuaWRcbiAgICAkc2NvcGUuZXZlbnQgPSBFdmVudC5nZXQoe2lkOmlkfSwgZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgIHZhciBkYXRlcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEuZGF0ZXMubGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgZGF0ZXMucHVzaChuZXcgRGF0ZShkYXRhLmRhdGVzW2ldKSk7XG4gICAgICAgIH1cbiAgICAgICAgJChcIltkYXRhLWRhdGVwaWNrZXJdXCIpLmRhdGVwaWNrZXIoJ3NldERhdGVzJyxkYXRlcyk7XG4gICAgICAgICRzY29wZS5tYXN0ZXIgPSBhbmd1bGFyLmNvcHkoJHNjb3BlLmV2ZW50KTtcbiAgICB9LCBmdW5jdGlvbihlKXtcbiAgICAgICAgJHN0YXRlLmdvKCdub3Rmb3VuZCcpO1xuICAgIH0pO1xuICAgICRzY29wZS5kaWRDaGFuZ2UgPSBmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoJHNjb3BlLm1hc3RlcikgIT0gSlNPTi5zdHJpbmdpZnkoJHNjb3BlLmV2ZW50KTtcbiAgICB9XG4gICAgJHNjb3BlLmRpZENoYW5nZURhdGVzID0gZnVuY3Rpb24oKXtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KCRzY29wZS5tYXN0ZXIuZGF0ZXMpICE9IEpTT04uc3RyaW5naWZ5KCRzY29wZS5ldmVudC5kYXRlcyk7XG4gICAgfVxuICAgICRzY29wZS5zdWJtaXQgPSBmdW5jdGlvbigpe1xuICAgICAgICBpZiAoJHNjb3BlLmRpZENoYW5nZSgpKXtcbiAgICAgICAgICAgIGlmICgkc2NvcGUuZGlkQ2hhbmdlRGF0ZXMoKSApe1xuICAgICAgICAgICAgICAgIGlmIChjb25maXJtKFwiQ2hhbmdpbmcgdGhlIGRhdGVzIHdpbGwgcmVzZXQgYWxsIGVudHJpZXMgYnkgdGhlIHBhcnRpY2lwYW50cy4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHByb2NlZWQ/XCIpKXtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1cGRhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgdXBkYXRlID0gZnVuY3Rpb24oKXtcbiAgICAgICAgJHNjb3BlLmV2ZW50LnBhcnRpY2lwYW50cyA9IFtdO1xuICAgICAgICBFdmVudC51cGRhdGUoe1xuICAgICAgICAgICAgaWQgOiBpZFxuICAgICAgICB9LCAkc2NvcGUuZXZlbnQsXG4gICAgICAgIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAkdGltZW91dC5jYW5jZWwoJHNjb3BlLmRpZFNhdmUpO1xuICAgICAgICAgICAgJHNjb3BlLm1hc3RlciA9IGFuZ3VsYXIuY29weSgkc2NvcGUuZXZlbnQpO1xuICAgICAgICAgICAgJHNjb3BlLmRpZFNhdmUgPSAkdGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICRzY29wZS5kaWRTYXZlID0gZmFsc2U7XG4gICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgfSk7XG4gICAgfVxufSk7XG4iLCJhbmd1bGFyLm1vZHVsZSgncmFsbGx5Jylcbi5jb250cm9sbGVyKCdFdmVudEN0cmwnLCBmdW5jdGlvbigkc2NvcGUsICRodHRwLCAkc3RhdGUsIEV2ZW50LCBQYXJ0aWNpcGFudCl7XG4gICAgJChcIi5uYXYtbGlua1wiKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgdmFyIGlkID0gJHN0YXRlLnBhcmFtcy5pZDtcbiAgICAkc2NvcGUucGFydGljaXBhbnQgPSB7fTtcbiAgICAkc2NvcGUuZXZlbnQgPSBFdmVudC5nZXQoe2lkOmlkfSwgZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgICRzY29wZS5ldmVudFVybCA9ICRzdGF0ZS5ocmVmKCdldmVudCcsIHtcbiAgICAgICAgICAgIGlkOiAkc2NvcGUuZXZlbnQuX2lkXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIGFic29sdXRlIDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICB9LCBmdW5jdGlvbihlKXtcbiAgICAgICAgJHN0YXRlLmdvKCdub3Rmb3VuZCcpO1xuICAgIH0pO1xuICAgICRzY29wZS5kZWxldGUgPSBmdW5jdGlvbihwYXJ0aWNpcGFudCl7XG4gICAgICAgIGlmIChjb25maXJtKFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbW92ZSBcIitwYXJ0aWNpcGFudC5uYW1lK1wiP1wiKSl7XG4gICAgICAgICAgICBQYXJ0aWNpcGFudC5yZW1vdmUoeyBpZCA6IGlkICwgcGlkIDogcGFydGljaXBhbnQuX2lkIH0sIGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgICAgICAgICAgICAkc2NvcGUuZXZlbnQgPSBldmVudDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgICRzY29wZS5kZWZhdWx0cyA9IFtdO1xuXG4gICAgJHNjb3BlLmVkaXRFdmVudCA9IGZ1bmN0aW9uKCl7XG4gICAgICAgICRzdGF0ZS5nbygnZWRpdGV2ZW50JywgeyBpZCA6ICRzY29wZS5ldmVudC5faWQgfSk7XG4gICAgfVxuXG4gICAgJHNjb3BlLnVwZGF0ZSA9IGZ1bmN0aW9uKHBhcnRpY2lwYW50KXtcbiAgICAgICAgUGFydGljaXBhbnQudXBkYXRlKHtcbiAgICAgICAgICAgIGlkIDogJHNjb3BlLmV2ZW50Ll9pZCxcbiAgICAgICAgICAgIHBpZCA6IHBhcnRpY2lwYW50Ll9pZFxuICAgICAgICB9LCBwYXJ0aWNpcGFudCk7XG4gICAgfVxuICAgICRzY29wZS5lZGl0ID0gZnVuY3Rpb24ocGFydGljaXBhbnQpe1xuICAgICAgICAkc2NvcGUuZGVmYXVsdHNbJHNjb3BlLmV2ZW50LnBhcnRpY2lwYW50cy5pbmRleE9mKHBhcnRpY2lwYW50KV0gPSBhbmd1bGFyLmNvcHkocGFydGljaXBhbnQpO1xuICAgIH1cblxuICAgICRzY29wZS5jYW5jZWwgPSBmdW5jdGlvbihpbmRleCl7XG4gICAgICAgICRzY29wZS5ldmVudC5wYXJ0aWNpcGFudHNbaW5kZXhdID0gJHNjb3BlLmRlZmF1bHRzW2luZGV4XTtcbiAgICB9XG5cbiAgICAkc2NvcGUuc2F2ZSA9IGZ1bmN0aW9uKHBhcnRpY2lwYW50KXtcbiAgICAgICAgdmFyIHBhcnRpY2lwYW50ID0gbmV3IFBhcnRpY2lwYW50KHBhcnRpY2lwYW50KTtcbiAgICAgICAgcGFydGljaXBhbnQuJHNhdmUoe2lkOmlkfSwgZnVuY3Rpb24oZXZlbnQpe1xuICAgICAgICAgICAgJHNjb3BlLmV2ZW50ID0gZXZlbnQ7XG4gICAgICAgICAgICAkc2NvcGUucGFydGljaXBhbnQgPSB7fTtcbiAgICAgICAgfSk7XG4gICAgfVxufSk7XG4iLCJhbmd1bGFyLm1vZHVsZSgncmFsbGx5Jylcbi5jb250cm9sbGVyKCdOZXdFdmVudEN0cmwnLCBmdW5jdGlvbigkc2NvcGUsICRodHRwLCAkc3RhdGUsIEV2ZW50KXtcbiAgICAkKFwiLm5hdi1saW5rXCIpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAkKFwiLm5hdi1saW5rW2hyZWY9Jy8nXVwiKS5hZGRDbGFzcygnYWN0aXZlJyk7XG5cbiAgICAkc2NvcGUuc3VibWl0ID0gZnVuY3Rpb24oKXtcbiAgICAgICAgJGh0dHAucG9zdCgnL2FwaS9ldmVudCcsICRzY29wZS5ldmVudClcbiAgICAgICAgLnN1Y2Nlc3MoZnVuY3Rpb24oZXZlbnQsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKXtcbiAgICAgICAgICAgICRzY29wZS5ldmVudCA9IGV2ZW50O1xuICAgICAgICAgICAgJHNjb3BlLmV2ZW50VXJsID0gJHN0YXRlLmhyZWYoJ2V2ZW50Jywge1xuICAgICAgICAgICAgICAgIGlkOiAkc2NvcGUuZXZlbnQuX2lkXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgYWJzb2x1dGUgOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vICRzdGF0ZS5nbygnZXZlbnQnLHtpZCA6IGRhdGEuZXZlbnQuX2lkfSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5lcnJvcihmdW5jdGlvbihkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZyl7XG4gICAgICAgICAgICAkc2NvcGUuZXJyb3JzID0gZGF0YS5lcnJvcnM7XG4gICAgICAgIH0pXG4gICAgfVxuICAgICRzY29wZS5jbGVhckRhdGVzID0gbnVsbFxufSlcbi5kaXJlY3RpdmUoJ2RhdGVwaWNrZXInLCBmdW5jdGlvbigpe1xuICAgIHJldHVybiB7XG4gICAgICAgIHJlc3RyaWN0IDogJ0EnLFxuICAgICAgICByZXF1aXJlIDogJ25nTW9kZWwnLFxuICAgICAgICBsaW5rIDogZnVuY3Rpb24oc2NvcGUsIGVsLCBhdHRycywgbmdNb2RlbCl7XG4gICAgICAgICAgICAkKGVsKS5kYXRlcGlja2VyKHtcbiAgICAgICAgICAgICAgICBtdWx0aWRhdGUgOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRvZGF5SGlnaGxpZ2h0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGZvcm1hdCA6ICdkZC9tbS95eXl5J1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5vbignY2hhbmdlRGF0ZScsIGZ1bmN0aW9uKGUpe1xuICAgICAgICAgICAgICAgIHZhciBkYXRlcyA9IGUuZGF0ZXM7XG4gICAgICAgICAgICAgICAgZGF0ZXMuc29ydChmdW5jdGlvbihhLCBiKXtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEuZ2V0VGltZSgpID4gYi5nZXRUaW1lKCkpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgbmdNb2RlbC4kc2V0Vmlld1ZhbHVlKGRhdGVzLCBlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzY29wZS5jbGVhckRhdGVzID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAkKGVsKS5kYXRlcGlja2VyKCdzZXREYXRlJywgbnVsbClcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzY29wZS51bnNldERhdGUgPSBmdW5jdGlvbihkYXRlKXtcbiAgICAgICAgICAgICAgICAkKGVsKS5kYXRlcGlja2VyKCdzZXREYXRlcycsIHNjb3BlLmV2ZW50LmRhdGVzLmZpbHRlcihmdW5jdGlvbihlbCl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbCAhPSBkYXRlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== \ No newline at end of file +angular.module("rallly",["ui.router","ngResource","ngFx","btford.modal"]).config(["$stateProvider","$urlRouterProvider","$locationProvider",function(e,t,n){n.html5Mode(!0),t.otherwise("/notfound"),e.state("index",{url:"/",templateUrl:"templates/newevent.html",controller:"NewEventCtrl"}).state("about",{url:"/about",templateUrl:"templates/about.html",controller:"AboutCtrl"}).state("notfound",{url:"/notfound",templateUrl:"templates/notfound.html"}).state("editevent",{url:"/:id/edit",templateUrl:"templates/editevent.html",controller:"EditEventCtrl"}).state("event",{url:"/:id",templateUrl:"templates/event.html",controller:"EventCtrl"})}]).factory("Event",["$resource",function(e){return e("/api/event/:id",{id:"@_id"},{update:{method:"PUT"}})}]).factory("Participant",["$resource",function(e){return e("/api/event/:id/participant/:pid",{id:"@_id",pid:"@pid"},{update:{method:"PUT"}})}]),angular.module("rallly").filter("elapsed",function(){return function(e){if(e){var t=Date.parse(e),n=(new Date).getTime(),a=n-t,i=Math.floor(a/1e3),r=Math.floor(i/60),o=Math.floor(r/60),l=Math.floor(o/24);return l>1?l+" days ago":1==l?"1 day ago":o>1?o+" hours ago":1==o?"an hour ago":r>1?r+" minutes ago":1==r?"a minute ago":"a few seconds ago"}}}),angular.module("rallly").controller("AboutCtrl",function(){$(".nav-link").removeClass("active"),$(".nav-link[href='/about']").addClass("active")}),angular.module("rallly").controller("EditEventCtrl",["$scope","$http","$state","$timeout","Event","ConfirmModal",function(e,t,n,a,i,r){var o=n.params.id;e.event=i.get({id:o},function(t){for(var n=[],a=0;at.getTime()?!0:!1}),a.$setViewValue(t,e)}),e.clearDates=function(){angular.element(t).datepicker("setDate",null)},e.unsetDate=function(n){angular.element(t).datepicker("setDates",e.event.dates.filter(function(e){return e!=n}))}}}}),angular.module("rallly").factory("ConfirmModal",["btfModal",function(e){return function(t){var n;n=e({templateUrl:"templates/confirmmodal.html",controllerAs:"modal",controller:function(){this.title=t.title,this.message=t.message,this.confirm=function(){t.confirm&&t.confirm(),n.deactivate()},this.cancel=n.deactivate,this.confirmText=t.confirmText||"Confirm",this.cancelText=t.cancelText||"Cancel",this.isDestructive=t.isDestructive}}),this.show=function(){n.activate()},this.destroy=function(){n.deactivate()}}}]); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1haW4uanMiLCJmaWx0ZXJzL2VsYXBzZWQuZmlsdGVyLmpzIiwiY29udHJvbGxlcnMvYWJvdXQuY29udHJvbGxlci5qcyIsImNvbnRyb2xsZXJzL2VkaXRldmVudC5jb250cm9sbGVyLmpzIiwiY29udHJvbGxlcnMvZXZlbnQuY29udHJvbGxlci5qcyIsImNvbnRyb2xsZXJzL25ld2V2ZW50LmNvbnRyb2xsZXIuanMiLCJzZXJ2aWNlcy9tb2RhbC5zZXJ2aWNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFFBQUEsT0FBQSxVQUFBLFlBQUEsYUFBQSxPQUFBLGlCQUNBLFFBQUEsaUJBQUEscUJBQUEsb0JBQUEsU0FBQSxFQUFBLEVBQUEsR0FDQSxFQUFBLFdBQUEsR0FDQSxFQUFBLFVBQUEsYUFDQSxFQUNBLE1BQUEsU0FDQSxJQUFBLElBQ0EsWUFBQSwwQkFDQSxXQUFBLGlCQUVBLE1BQUEsU0FDQSxJQUFBLFNBQ0EsWUFBQSx1QkFDQSxXQUFBLGNBRUEsTUFBQSxZQUNBLElBQUEsWUFDQSxZQUFBLDRCQUVBLE1BQUEsYUFDQSxJQUFBLFlBQ0EsWUFBQSwyQkFDQSxXQUFBLGtCQUVBLE1BQUEsU0FDQSxJQUFBLE9BQ0EsWUFBQSx1QkFDQSxXQUFBLGlCQUdBLFFBQUEsU0FBQSxZQUFBLFNBQUEsR0FDQSxNQUFBLEdBQUEsa0JBQUEsR0FBQSxTQUNBLFFBQUEsT0FBQSxZQUdBLFFBQUEsZUFBQSxZQUFBLFNBQUEsR0FDQSxNQUFBLEdBQUEsbUNBQUEsR0FBQSxPQUFBLElBQUEsU0FDQSxRQUFBLE9BQUEsWUNyQ0EsUUFBQSxPQUFBLFVBQ0EsT0FBQSxVQUFBLFdBQ0EsTUFBQSxVQUFBLEdBQ0EsR0FBQSxFQUFBLENBQ0EsR0FBQSxHQUFBLEtBQUEsTUFBQSxHQUNBLEdBQUEsR0FBQSxPQUFBLFVBQ0EsRUFBQSxFQUFBLEVBQ0EsRUFBQSxLQUFBLE1BQUEsRUFBQSxLQUNBLEVBQUEsS0FBQSxNQUFBLEVBQUEsSUFDQSxFQUFBLEtBQUEsTUFBQSxFQUFBLElBQ0EsRUFBQSxLQUFBLE1BQUEsRUFBQSxHQUNBLE9BQUEsR0FBQSxFQUNBLEVBQUEsWUFDQSxHQUFBLEVBQ0EsWUFDQSxFQUFBLEVBQ0EsRUFBQSxhQUNBLEdBQUEsRUFDQSxjQUNBLEVBQUEsRUFDQSxFQUFBLGVBQ0EsR0FBQSxFQUNBLGVBRUEsd0JDeEJBLFFBQUEsT0FBQSxVQUNBLFdBQUEsWUFBQSxXQUNBLEVBQUEsYUFBQSxZQUFBLFVBQ0EsRUFBQSw0QkFBQSxTQUFBLFlDSEEsUUFBQSxPQUFBLFVBQ0EsV0FBQSxpQkFBQSxTQUFBLFFBQUEsU0FBQSxXQUFBLFFBQUEsZUFBQSxTQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxHQUNBLEdBQUEsR0FBQSxFQUFBLE9BQUEsRUFDQSxHQUFBLE1BQUEsRUFBQSxLQUFBLEdBQUEsR0FBQSxTQUFBLEdBRUEsSUFBQSxHQURBLE1BQ0EsRUFBQSxFQUFBLEVBQUEsRUFBQSxNQUFBLE9BQUEsSUFDQSxFQUFBLEtBQUEsR0FBQSxNQUFBLEVBQUEsTUFBQSxJQUVBLEdBQUEscUJBQUEsV0FBQSxXQUFBLEdBQ0EsRUFBQSxPQUFBLFFBQUEsS0FBQSxFQUFBLFFBQ0EsV0FDQSxFQUFBLEdBQUEsY0FFQSxFQUFBLFVBQUEsV0FDQSxNQUFBLE1BQUEsVUFBQSxFQUFBLFNBQUEsS0FBQSxVQUFBLEVBQUEsUUFFQSxFQUFBLGVBQUEsV0FDQSxNQUFBLE1BQUEsVUFBQSxFQUFBLE9BQUEsUUFBQSxLQUFBLFVBQUEsRUFBQSxNQUFBLFFBRUEsRUFBQSxPQUFBLFdBQ0EsR0FBQSxFQUFBLFlBQ0EsR0FBQSxFQUFBLGlCQUFBLENBQ0EsR0FBQSxHQUFBLEdBQUEsSUFDQSxNQUFBLFdBQ0EsUUFBQSxtR0FDQSxZQUFBLGdCQUNBLGVBQUEsRUFDQSxRQUFBLFdBQ0EsTUFHQSxHQUFBLFdBR0EsS0FJQSxJQUFBLEdBQUEsV0FDQSxFQUFBLFFBQ0EsR0FBQSxHQUNBLEVBQUEsTUFDQSxXQUNBLEVBQUEsT0FBQSxFQUFBLFNBQ0EsRUFBQSxPQUFBLFFBQUEsS0FBQSxFQUFBLE9BQ0EsRUFBQSxRQUFBLEVBQUEsV0FDQSxFQUFBLFNBQUEsR0FDQSxXQy9DQSxRQUFBLE9BQUEsVUFDQSxXQUFBLGFBQUEsU0FBQSxRQUFBLFNBQUEsUUFBQSxjQUFBLGVBQUEsU0FBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsR0FDQSxFQUFBLGFBQUEsWUFBQSxTQUNBLElBQUEsR0FBQSxFQUFBLE9BQUEsRUFDQSxHQUFBLGVBQ0EsRUFBQSxNQUFBLEVBQUEsS0FBQSxHQUFBLEdBQUEsV0FDQSxFQUFBLFNBQUEsRUFBQSxLQUFBLFNBQ0EsR0FBQSxFQUFBLE1BQUEsTUFFQSxVQUFBLEtBRUEsV0FDQSxFQUFBLEdBQUEsY0FFQSxFQUFBLE9BQUEsU0FBQSxHQUNBLEdBQUEsR0FBQSxHQUFBLElBQ0EsTUFBQSxXQUFBLEVBQUEsS0FBQSxLQUNBLFFBQUEsbUNBQUEsRUFBQSxLQUFBLGtCQUNBLFlBQUEsZUFDQSxXQUFBLGlCQUNBLGVBQUEsRUFDQSxRQUFBLFdBQ0EsRUFBQSxRQUFBLEdBQUEsRUFBQSxJQUFBLEVBQUEsS0FBQSxTQUFBLEdBQ0EsRUFBQSxNQUFBLE1BSUEsR0FBQSxRQUdBLEVBQUEsWUFFQSxFQUFBLFVBQUEsV0FDQSxFQUFBLEdBQUEsYUFBQSxHQUFBLEVBQUEsTUFBQSxPQUdBLEVBQUEsT0FBQSxTQUFBLEdBQ0EsRUFBQSxRQUNBLEdBQUEsRUFBQSxNQUFBLElBQ0EsSUFBQSxFQUFBLEtBQ0EsSUFFQSxFQUFBLEtBQUEsU0FBQSxHQUNBLEVBQUEsU0FBQSxFQUFBLE1BQUEsYUFBQSxRQUFBLElBQUEsUUFBQSxLQUFBLElBR0EsRUFBQSxPQUFBLFNBQUEsR0FDQSxFQUFBLE1BQUEsYUFBQSxHQUFBLEVBQUEsU0FBQSxJQUdBLEVBQUEsS0FBQSxTQUFBLEdBQ0EsR0FBQSxHQUFBLEdBQUEsR0FBQSxFQUNBLEdBQUEsT0FBQSxHQUFBLEdBQUEsU0FBQSxHQUNBLEVBQUEsTUFBQSxFQUNBLEVBQUEscUJBR0EsV0FBQSxrQkFBQSxjQ3pEQSxRQUFBLE9BQUEsVUFDQSxXQUFBLGdCQUFBLFNBQUEsUUFBQSxTQUFBLFFBQUEsU0FBQSxFQUFBLEVBQUEsR0FDQSxFQUFBLGFBQUEsWUFBQSxVQUNBLEVBQUEsdUJBQUEsU0FBQSxVQUVBLEVBQUEsT0FBQSxXQUNBLEVBQUEsS0FBQSxhQUFBLEVBQUEsT0FDQSxRQUFBLFNBQUEsR0FDQSxFQUFBLE1BQUEsRUFDQSxFQUFBLFNBQUEsRUFBQSxLQUFBLFNBQ0EsR0FBQSxFQUFBLE1BQUEsTUFFQSxVQUFBLE1BSUEsTUFBQSxTQUFBLEdBQ0EsRUFBQSxPQUFBLEVBQUEsVUFHQSxFQUFBLFdBQUEsUUFFQSxVQUFBLGFBQUEsV0FDQSxPQUNBLFNBQUEsSUFDQSxRQUFBLFVBQ0EsS0FBQSxTQUFBLEVBQUEsRUFBQSxFQUFBLEdBQ0EsUUFBQSxRQUFBLEdBQUEsWUFDQSxXQUFBLEVBQ0EsZ0JBQUEsRUFDQSxPQUFBLGVBRUEsR0FBQSxhQUFBLFNBQUEsR0FDQSxHQUFBLEdBQUEsRUFBQSxLQUNBLEdBQUEsS0FBQSxTQUFBLEVBQUEsR0FDQSxNQUFBLEdBQUEsVUFBQSxFQUFBLFdBQUEsR0FDQSxJQUVBLEVBQUEsY0FBQSxFQUFBLEtBR0EsRUFBQSxXQUFBLFdBQ0EsUUFBQSxRQUFBLEdBQUEsV0FBQSxVQUFBLE9BRUEsRUFBQSxVQUFBLFNBQUEsR0FDQSxRQUFBLFFBQUEsR0FBQSxXQUFBLFdBQUEsRUFBQSxNQUFBLE1BQUEsT0FBQSxTQUFBLEdBQ0EsTUFBQSxJQUFBLFVDOUNBLFFBQUEsT0FBQSxVQUNBLFFBQUEsZ0JBQUEsV0FBQSxTQUFBLEdBRUEsTUFBQSxVQUFBLEdBQ0EsR0FBQSxFQUNBLEdBQUEsR0FDQSxZQUFBLDhCQUNBLGFBQUEsUUFDQSxXQUFBLFdBQ0EsS0FBQSxNQUFBLEVBQUEsTUFDQSxLQUFBLFFBQUEsRUFBQSxRQUNBLEtBQUEsUUFBQSxXQUNBLEVBQUEsU0FBQSxFQUFBLFVBQ0EsRUFBQSxjQUVBLEtBQUEsT0FBQSxFQUFBLFdBQ0EsS0FBQSxZQUFBLEVBQUEsYUFBQSxVQUNBLEtBQUEsV0FBQSxFQUFBLFlBQUEsU0FDQSxLQUFBLGNBQUEsRUFBQSxpQkFHQSxLQUFBLEtBQUEsV0FDQSxFQUFBLFlBRUEsS0FBQSxRQUFBLFdBQ0EsRUFBQSIsImZpbGUiOiJwdWJsaWMvYnVpbGQvYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiYW5ndWxhci5tb2R1bGUoJ3JhbGxseScsIFsndWkucm91dGVyJywnbmdSZXNvdXJjZScsJ25nRngnLCdidGZvcmQubW9kYWwnXSlcbiAgICAuY29uZmlnKGZ1bmN0aW9uKCRzdGF0ZVByb3ZpZGVyLCAkdXJsUm91dGVyUHJvdmlkZXIsICRsb2NhdGlvblByb3ZpZGVyKXtcbiAgICAgICAgJGxvY2F0aW9uUHJvdmlkZXIuaHRtbDVNb2RlKHRydWUpO1xuICAgICAgICAkdXJsUm91dGVyUHJvdmlkZXIub3RoZXJ3aXNlKFwiL25vdGZvdW5kXCIpXG4gICAgICAgICRzdGF0ZVByb3ZpZGVyXG4gICAgICAgIC5zdGF0ZSgnaW5kZXgnLHtcbiAgICAgICAgICAgIHVybCA6ICcvJyxcbiAgICAgICAgICAgIHRlbXBsYXRlVXJsIDogJ3RlbXBsYXRlcy9uZXdldmVudC5odG1sJyxcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgOiAnTmV3RXZlbnRDdHJsJ1xuICAgICAgICB9KVxuICAgICAgICAuc3RhdGUoJ2Fib3V0Jywge1xuICAgICAgICAgICAgdXJsIDogJy9hYm91dCcsXG4gICAgICAgICAgICB0ZW1wbGF0ZVVybCA6ICd0ZW1wbGF0ZXMvYWJvdXQuaHRtbCcsXG4gICAgICAgICAgICBjb250cm9sbGVyIDogJ0Fib3V0Q3RybCdcbiAgICAgICAgfSlcbiAgICAgICAgLnN0YXRlKCdub3Rmb3VuZCcsIHtcbiAgICAgICAgICAgIHVybCA6ICcvbm90Zm91bmQnLFxuICAgICAgICAgICAgdGVtcGxhdGVVcmwgOiAndGVtcGxhdGVzL25vdGZvdW5kLmh0bWwnXG4gICAgICAgIH0pXG4gICAgICAgIC5zdGF0ZSgnZWRpdGV2ZW50Jywge1xuICAgICAgICAgICAgdXJsOiAnLzppZC9lZGl0JyxcbiAgICAgICAgICAgIHRlbXBsYXRlVXJsIDogJ3RlbXBsYXRlcy9lZGl0ZXZlbnQuaHRtbCcsXG4gICAgICAgICAgICBjb250cm9sbGVyIDogJ0VkaXRFdmVudEN0cmwnXG4gICAgICAgIH0pXG4gICAgICAgIC5zdGF0ZSgnZXZlbnQnLHtcbiAgICAgICAgICAgIHVybCA6ICcvOmlkJyxcbiAgICAgICAgICAgIHRlbXBsYXRlVXJsIDogJ3RlbXBsYXRlcy9ldmVudC5odG1sJyxcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgOiAnRXZlbnRDdHJsJ1xuICAgICAgICB9KVxuICAgIH0pXG4gICAgLmZhY3RvcnkoJ0V2ZW50JywgZnVuY3Rpb24oJHJlc291cmNlKXtcbiAgICAgICAgcmV0dXJuICRyZXNvdXJjZSgnL2FwaS9ldmVudC86aWQnLCB7IGlkIDogJ0BfaWQnIH0sIHtcbiAgICAgICAgICAgICd1cGRhdGUnIDogeyBtZXRob2QgOiAnUFVUJyB9XG4gICAgICAgIH0pO1xuICAgIH0pXG4gICAgLmZhY3RvcnkoJ1BhcnRpY2lwYW50JywgZnVuY3Rpb24oJHJlc291cmNlKXtcbiAgICAgICAgcmV0dXJuICRyZXNvdXJjZSgnL2FwaS9ldmVudC86aWQvcGFydGljaXBhbnQvOnBpZCcsIHsgaWQ6ICdAX2lkJywgcGlkIDogJ0BwaWQnfSwge1xuICAgICAgICAgICAgJ3VwZGF0ZScgOiB7IG1ldGhvZCA6ICdQVVQnIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4iLCJhbmd1bGFyLm1vZHVsZSgncmFsbGx5Jylcbi5maWx0ZXIoJ2VsYXBzZWQnLCBmdW5jdGlvbigpe1xuICAgIHJldHVybiBmdW5jdGlvbihkYXRlKXtcbiAgICAgICAgaWYgKCFkYXRlKSByZXR1cm47XG4gICAgICAgIHZhciB0aW1lID0gRGF0ZS5wYXJzZShkYXRlKSxcbiAgICAgICAgICAgIHRpbWVOb3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSxcbiAgICAgICAgICAgIGRpZmZlcmVuY2UgPSB0aW1lTm93IC0gdGltZSxcbiAgICAgICAgICAgIHNlY29uZHMgPSBNYXRoLmZsb29yKGRpZmZlcmVuY2UgLyAxMDAwKSxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSBNYXRoLmZsb29yKHNlY29uZHMgLyA2MCksXG4gICAgICAgICAgICBob3VycyA9IE1hdGguZmxvb3IobWludXRlcyAvIDYwKSxcbiAgICAgICAgICAgIGRheXMgPSBNYXRoLmZsb29yKGhvdXJzIC8gMjQpO1xuICAgICAgICBpZiAoZGF5cyA+IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXlzICsgXCIgZGF5cyBhZ29cIjtcbiAgICAgICAgfSBlbHNlIGlmIChkYXlzID09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBcIjEgZGF5IGFnb1wiXG4gICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPiAxKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91cnMgKyBcIiBob3VycyBhZ29cIjtcbiAgICAgICAgfSBlbHNlIGlmIChob3VycyA9PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJhbiBob3VyIGFnb1wiO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbnV0ZXMgPiAxKSB7XG4gICAgICAgICAgICByZXR1cm4gbWludXRlcyArIFwiIG1pbnV0ZXMgYWdvXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobWludXRlcyA9PSAxKXtcbiAgICAgICAgICAgIHJldHVybiBcImEgbWludXRlIGFnb1wiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFwiYSBmZXcgc2Vjb25kcyBhZ29cIjtcbiAgICAgICAgfVxuICAgIH1cbn0pXG4iLCJhbmd1bGFyLm1vZHVsZSgncmFsbGx5Jylcbi5jb250cm9sbGVyKCdBYm91dEN0cmwnLCBmdW5jdGlvbigpe1xuICAgICQoXCIubmF2LWxpbmtcIikucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICQoXCIubmF2LWxpbmtbaHJlZj0nL2Fib3V0J11cIikuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xufSk7XG4iLCJhbmd1bGFyLm1vZHVsZSgncmFsbGx5Jylcbi5jb250cm9sbGVyKCdFZGl0RXZlbnRDdHJsJywgZnVuY3Rpb24oJHNjb3BlLCAkaHR0cCwgJHN0YXRlLCAkdGltZW91dCwgRXZlbnQsIENvbmZpcm1Nb2RhbCl7XG4gICAgdmFyIGlkID0gJHN0YXRlLnBhcmFtcy5pZFxuICAgICRzY29wZS5ldmVudCA9IEV2ZW50LmdldCh7aWQ6aWR9LCBmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgdmFyIGRhdGVzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5kYXRlcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICBkYXRlcy5wdXNoKG5ldyBEYXRlKGRhdGEuZGF0ZXNbaV0pKTtcbiAgICAgICAgfVxuICAgICAgICAkKFwiW2RhdGEtZGF0ZXBpY2tlcl1cIikuZGF0ZXBpY2tlcignc2V0RGF0ZXMnLGRhdGVzKTtcbiAgICAgICAgJHNjb3BlLm1hc3RlciA9IGFuZ3VsYXIuY29weSgkc2NvcGUuZXZlbnQpO1xuICAgIH0sIGZ1bmN0aW9uKGUpe1xuICAgICAgICAkc3RhdGUuZ28oJ25vdGZvdW5kJyk7XG4gICAgfSk7XG4gICAgJHNjb3BlLmRpZENoYW5nZSA9IGZ1bmN0aW9uKCl7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSgkc2NvcGUubWFzdGVyKSAhPSBKU09OLnN0cmluZ2lmeSgkc2NvcGUuZXZlbnQpO1xuICAgIH1cbiAgICAkc2NvcGUuZGlkQ2hhbmdlRGF0ZXMgPSBmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoJHNjb3BlLm1hc3Rlci5kYXRlcykgIT0gSlNPTi5zdHJpbmdpZnkoJHNjb3BlLmV2ZW50LmRhdGVzKTtcbiAgICB9XG4gICAgJHNjb3BlLnN1Ym1pdCA9IGZ1bmN0aW9uKCl7XG4gICAgICAgIGlmICgkc2NvcGUuZGlkQ2hhbmdlKCkpe1xuICAgICAgICAgICAgaWYgKCRzY29wZS5kaWRDaGFuZ2VEYXRlcygpICl7XG4gICAgICAgICAgICAgICAgdmFyIG1vZGFsID0gbmV3IENvbmZpcm1Nb2RhbCh7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlIDogJ0hvbGQgdXAhJyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA6ICdDaGFuZ2luZyB0aGUgZGF0ZXMgd2lsbCByZXNldCBhbGwgZW50cmllcyBieSB0aGUgcGFydGljaXBhbnRzLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZG8gdGhhdD8nLFxuICAgICAgICAgICAgICAgICAgICBjb25maXJtVGV4dCA6ICdZZXMsIElcXCdtIHN1cmUnLFxuICAgICAgICAgICAgICAgICAgICBpc0Rlc3RydWN0aXZlIDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlybSA6IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG1vZGFsLnNob3coKTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1cGRhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgdXBkYXRlID0gZnVuY3Rpb24oKXtcbiAgICAgICAgRXZlbnQudXBkYXRlKHtcbiAgICAgICAgICAgIGlkIDogaWRcbiAgICAgICAgfSwgJHNjb3BlLmV2ZW50LFxuICAgICAgICBmdW5jdGlvbigpe1xuICAgICAgICAgICAgJHRpbWVvdXQuY2FuY2VsKCRzY29wZS5kaWRTYXZlKTtcbiAgICAgICAgICAgICRzY29wZS5tYXN0ZXIgPSBhbmd1bGFyLmNvcHkoJHNjb3BlLmV2ZW50KTtcbiAgICAgICAgICAgICRzY29wZS5kaWRTYXZlID0gJHRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAkc2NvcGUuZGlkU2F2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn0pO1xuIiwiYW5ndWxhci5tb2R1bGUoJ3JhbGxseScpXG4uY29udHJvbGxlcignRXZlbnRDdHJsJywgZnVuY3Rpb24oJHNjb3BlLCAkaHR0cCwgJHN0YXRlLCBFdmVudCwgUGFydGljaXBhbnQsIENvbmZpcm1Nb2RhbCl7XG4gICAgJChcIi5uYXYtbGlua1wiKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgdmFyIGlkID0gJHN0YXRlLnBhcmFtcy5pZDtcbiAgICAkc2NvcGUucGFydGljaXBhbnQgPSB7fTtcbiAgICAkc2NvcGUuZXZlbnQgPSBFdmVudC5nZXQoe2lkOmlkfSwgZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgICRzY29wZS5ldmVudFVybCA9ICRzdGF0ZS5ocmVmKCdldmVudCcsIHtcbiAgICAgICAgICAgIGlkOiAkc2NvcGUuZXZlbnQuX2lkXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIGFic29sdXRlIDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICB9LCBmdW5jdGlvbihlKXtcbiAgICAgICAgJHN0YXRlLmdvKCdub3Rmb3VuZCcpO1xuICAgIH0pO1xuICAgICRzY29wZS5kZWxldGUgPSBmdW5jdGlvbihwYXJ0aWNpcGFudCl7XG4gICAgICAgIHZhciBtb2RhbCA9IG5ldyBDb25maXJtTW9kYWwoe1xuICAgICAgICAgICAgdGl0bGUgOiAnRGVsZXRlIFwiJytwYXJ0aWNpcGFudC5uYW1lKydcIj8nLFxuICAgICAgICAgICAgbWVzc2FnZSA6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVtb3ZlICcrcGFydGljaXBhbnQubmFtZSsnIGZyb20gdGhlIHBvbGw/JyxcbiAgICAgICAgICAgIGNvbmZpcm1UZXh0IDogJ1llcyAtIGRlbGV0ZScsXG4gICAgICAgICAgICBjYW5jZWxUZXh0IDogJ05vIC0gbmV2ZXJtaW5kJyxcbiAgICAgICAgICAgIGlzRGVzdHJ1Y3RpdmUgOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlybSA6IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgUGFydGljaXBhbnQucmVtb3ZlKHsgaWQgOiBpZCAsIHBpZCA6IHBhcnRpY2lwYW50Ll9pZCB9LCBmdW5jdGlvbihldmVudCl7XG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5ldmVudCA9IGV2ZW50O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbW9kYWwuc2hvdygpO1xuICAgIH1cblxuICAgICRzY29wZS5kZWZhdWx0cyA9IFtdO1xuXG4gICAgJHNjb3BlLmVkaXRFdmVudCA9IGZ1bmN0aW9uKCl7XG4gICAgICAgICRzdGF0ZS5nbygnZWRpdGV2ZW50JywgeyBpZCA6ICRzY29wZS5ldmVudC5faWQgfSk7XG4gICAgfVxuXG4gICAgJHNjb3BlLnVwZGF0ZSA9IGZ1bmN0aW9uKHBhcnRpY2lwYW50KXtcbiAgICAgICAgUGFydGljaXBhbnQudXBkYXRlKHtcbiAgICAgICAgICAgIGlkIDogJHNjb3BlLmV2ZW50Ll9pZCxcbiAgICAgICAgICAgIHBpZCA6IHBhcnRpY2lwYW50Ll9pZFxuICAgICAgICB9LCBwYXJ0aWNpcGFudCk7XG4gICAgfVxuICAgICRzY29wZS5lZGl0ID0gZnVuY3Rpb24ocGFydGljaXBhbnQpe1xuICAgICAgICAkc2NvcGUuZGVmYXVsdHNbJHNjb3BlLmV2ZW50LnBhcnRpY2lwYW50cy5pbmRleE9mKHBhcnRpY2lwYW50KV0gPSBhbmd1bGFyLmNvcHkocGFydGljaXBhbnQpO1xuICAgIH1cblxuICAgICRzY29wZS5jYW5jZWwgPSBmdW5jdGlvbihpbmRleCl7XG4gICAgICAgICRzY29wZS5ldmVudC5wYXJ0aWNpcGFudHNbaW5kZXhdID0gJHNjb3BlLmRlZmF1bHRzW2luZGV4XTtcbiAgICB9XG5cbiAgICAkc2NvcGUuc2F2ZSA9IGZ1bmN0aW9uKHBhcnRpY2lwYW50KXtcbiAgICAgICAgdmFyIHBhcnRpY2lwYW50ID0gbmV3IFBhcnRpY2lwYW50KHBhcnRpY2lwYW50KTtcbiAgICAgICAgcGFydGljaXBhbnQuJHNhdmUoe2lkOmlkfSwgZnVuY3Rpb24oZXZlbnQpe1xuICAgICAgICAgICAgJHNjb3BlLmV2ZW50ID0gZXZlbnQ7XG4gICAgICAgICAgICAkc2NvcGUucGFydGljaXBhbnQgPSB7fTtcbiAgICAgICAgfSk7XG4gICAgfVxufSkuY29udHJvbGxlcignRGVsZXRlTW9kYWxDdHJsJywgZnVuY3Rpb24oKXtcblxufSk7XG4iLCJhbmd1bGFyLm1vZHVsZSgncmFsbGx5Jylcbi5jb250cm9sbGVyKCdOZXdFdmVudEN0cmwnLCBmdW5jdGlvbigkc2NvcGUsICRodHRwLCAkc3RhdGUsIEV2ZW50KXtcbiAgICAkKFwiLm5hdi1saW5rXCIpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAkKFwiLm5hdi1saW5rW2hyZWY9Jy8nXVwiKS5hZGRDbGFzcygnYWN0aXZlJyk7XG5cbiAgICAkc2NvcGUuc3VibWl0ID0gZnVuY3Rpb24oKXtcbiAgICAgICAgJGh0dHAucG9zdCgnL2FwaS9ldmVudCcsICRzY29wZS5ldmVudClcbiAgICAgICAgLnN1Y2Nlc3MoZnVuY3Rpb24oZXZlbnQsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKXtcbiAgICAgICAgICAgICRzY29wZS5ldmVudCA9IGV2ZW50O1xuICAgICAgICAgICAgJHNjb3BlLmV2ZW50VXJsID0gJHN0YXRlLmhyZWYoJ2V2ZW50Jywge1xuICAgICAgICAgICAgICAgIGlkOiAkc2NvcGUuZXZlbnQuX2lkXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgYWJzb2x1dGUgOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vICRzdGF0ZS5nbygnZXZlbnQnLHtpZCA6IGRhdGEuZXZlbnQuX2lkfSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5lcnJvcihmdW5jdGlvbihkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZyl7XG4gICAgICAgICAgICAkc2NvcGUuZXJyb3JzID0gZGF0YS5lcnJvcnM7XG4gICAgICAgIH0pXG4gICAgfVxuICAgICRzY29wZS5jbGVhckRhdGVzID0gbnVsbFxufSlcbi5kaXJlY3RpdmUoJ2RhdGVwaWNrZXInLCBmdW5jdGlvbigpe1xuICAgIHJldHVybiB7XG4gICAgICAgIHJlc3RyaWN0IDogJ0EnLFxuICAgICAgICByZXF1aXJlIDogJ25nTW9kZWwnLFxuICAgICAgICBsaW5rIDogZnVuY3Rpb24oc2NvcGUsIGVsLCBhdHRycywgbmdNb2RlbCl7XG4gICAgICAgICAgICBhbmd1bGFyLmVsZW1lbnQoZWwpLmRhdGVwaWNrZXIoe1xuICAgICAgICAgICAgICAgIG11bHRpZGF0ZSA6IHRydWUsXG4gICAgICAgICAgICAgICAgdG9kYXlIaWdobGlnaHQ6IHRydWUsXG4gICAgICAgICAgICAgICAgZm9ybWF0IDogJ2RkL21tL3l5eXknXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm9uKCdjaGFuZ2VEYXRlJywgZnVuY3Rpb24oZSl7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGVzID0gZS5kYXRlcztcbiAgICAgICAgICAgICAgICBkYXRlcy5zb3J0KGZ1bmN0aW9uKGEsIGIpe1xuICAgICAgICAgICAgICAgICAgICBpZiAoYS5nZXRUaW1lKCkgPiBiLmdldFRpbWUoKSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBuZ01vZGVsLiRzZXRWaWV3VmFsdWUoZGF0ZXMsIGUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHNjb3BlLmNsZWFyRGF0ZXMgPSBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIGFuZ3VsYXIuZWxlbWVudChlbCkuZGF0ZXBpY2tlcignc2V0RGF0ZScsIG51bGwpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgc2NvcGUudW5zZXREYXRlID0gZnVuY3Rpb24oZGF0ZSl7XG4gICAgICAgICAgICAgICAgYW5ndWxhci5lbGVtZW50KGVsKS5kYXRlcGlja2VyKCdzZXREYXRlcycsIHNjb3BlLmV2ZW50LmRhdGVzLmZpbHRlcihmdW5jdGlvbihlbCl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbCAhPSBkYXRlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsImFuZ3VsYXIubW9kdWxlKCdyYWxsbHknKVxuLmZhY3RvcnkoJ0NvbmZpcm1Nb2RhbCcsIGZ1bmN0aW9uKGJ0Zk1vZGFsKXtcblxuICAgIHJldHVybiBmdW5jdGlvbihjb25maWcpe1xuICAgICAgICB2YXIgbW9kYWw7XG4gICAgICAgIG1vZGFsID0gYnRmTW9kYWwoe1xuICAgICAgICAgICAgdGVtcGxhdGVVcmwgOiAndGVtcGxhdGVzL2NvbmZpcm1tb2RhbC5odG1sJyxcbiAgICAgICAgICAgIGNvbnRyb2xsZXJBcyA6ICdtb2RhbCcsXG4gICAgICAgICAgICBjb250cm9sbGVyIDogZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB0aGlzLnRpdGxlID0gY29uZmlnLnRpdGxlXG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gY29uZmlnLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maXJtID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5jb25maXJtKSBjb25maWcuY29uZmlybSgpO1xuICAgICAgICAgICAgICAgICAgICBtb2RhbC5kZWFjdGl2YXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsID0gbW9kYWwuZGVhY3RpdmF0ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpcm1UZXh0ID0gY29uZmlnLmNvbmZpcm1UZXh0IHx8ICdDb25maXJtJztcbiAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbFRleHQgPSBjb25maWcuY2FuY2VsVGV4dCB8fCAnQ2FuY2VsJztcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGVzdHJ1Y3RpdmUgPSBjb25maWcuaXNEZXN0cnVjdGl2ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2hvdyA9IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBtb2RhbC5hY3RpdmF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBtb2RhbC5kZWFjdGl2YXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== \ No newline at end of file diff --git a/public/css/style.css b/public/css/style.css index 693e7958a..01294f613 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -1,2 +1,2 @@ -@import url(http://fonts.googleapis.com/css?family=Source+Sans+Pro:400,600,700,400italic);/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}html{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*,*:before,*:after{-webkit-box-sizing:inherit;-moz-box-sizing:inherit;box-sizing:inherit}body{font-size:1.125em;font-family:"Source Sans Pro","Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;color:#3D4752}@media screen and (max-width: 768px) {body{font-size:0.9375em;}}.header{float:left;display:block;margin-right:2.35765%;width:23.23176%}.header:last-child{margin-right:0}.header .fixed{position:fixed}.header .primary-section{margin:2.1875em 0}.header .nav-links{font-size:1em;font-weight:normal;line-height:1.5em}.header .nav-links .nav-link{display:block;text-decoration:none;color:#969FA9}.header .nav-links .nav-link:hover{color:#3D4752}.header .nav-links .nav-link.active{color:#5AC4E5}.btn-flat{color:white;background:#60DF9D;text-decoration:none;padding: 0.625em 1.25em;border-radius:3px}.btn-primary{border:1px solid #E0E3E9;border-radius:2px;box-shadow:inset 0 1px 0 white,0 1px 1px rgba(0,0,0,0.1);background-image:-webkit-linear-gradient(#FAFAFA, #EFF1F3);background-image:linear-gradient(#FAFAFA, #EFF1F3);font-size:0.75em;font-weight:600;color:#969FA9;text-decoration:none;padding:0.5em 1.25em}.btn-primary.disabled{cursor:default;opacity:0.5}.btn-primary.disabled:active{box-shadow:inset 0 1px 0 white,0 1px 1px rgba(0,0,0,0.1)}.btn-primary.danger{color:#E55A5A}.btn-primary:focus{outline:0}.btn-primary:active{box-shadow:inset 0 0 5px rgba(0,0,0,0.1)}h1{font-weight:bold;font-size:2.25em;color:#3D4752}h1 small{font-size:0.75em}h2{font-weight:600;font-size:0.875em;color:#3D4752;padding-bottom:5px}h2 small{margin-left:0.625em;display:inline-block}h2 small,h2 small a{font-size:0.75em;color:#969FA9;font-weight:normal}h2 small a{text-decoration:none}h2 small a:hover{color:#E55A84;border-bottom:1px solid #ddd}p{color:#798490}p a{color:#60DF9D}.form-container{width:100%}.form-row{display:block;margin-bottom:10px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.form-row:after{content:"";display:table;clear:both}.form-col{float:left;display:block;margin-right:2.35765%;width:48.82117%}.form-col:last-child{margin-right:0}.form-col.padded:first-child{padding:0 20px 0 0}.form-col.padded:last-child{padding:0 0 0 20px}.form-big-col{float:left;display:block;margin-right:2.35765%;width:100%}.form-big-col:last-child{margin-right:0}.form-small-col{float:left;display:block;margin-right:2.35765%;width:14.70196%}.form-small-col:last-child{margin-right:0}.form-error-msg{color:#E55A84;font-size:0.75em;padding:0.3125em}.form-group>label{font-size:0.75em;color:#969FA9;display:block;line-height:1.875em}.form-group>label:after{content:"*";color:#E55A84;margin-left:5px}.form-group>label.optional:after{content:""}.form-group input.form-control,.form-group textarea.form-control{border-radius:3px;border:1px solid #ddd;font-size:1.125em;-webkit-transition:border-color 0.1s ease-in-out;-moz-transition:border-color 0.1s ease-in-out;transition:border-color 0.1s ease-in-out}.form-group input.form-control:focus,.form-group textarea.form-control:focus{border-color:#5AC4E5;outline:none}.form-group input.form-control.extend,.form-group textarea.form-control.extend{width:100%}.form-group input.form-control::-webkit-input-placeholder,.form-group textarea.form-control::-webkit-input-placeholder{color:rgba(150,159,169,0.7)}.form-group input.form-control::-moz-placeholder,.form-group textarea.form-control::-moz-placeholder{color:rgba(150,159,169,0.7)}.form-group input.form-control:-moz-placeholder,.form-group textarea.form-control:-moz-placeholder{color:rgba(150,159,169,0.7)}.form-group input.form-control:-ms-input-placeholder,.form-group textarea.form-control:-ms-input-placeholder{color:rgba(150,159,169,0.7)}.form-group.error input.form-control,.form-group.error textarea.form-control{border-color:#E55A84;background:rgba(229,90,132,0.02)}.form-group input.form-control{padding:0.3125em 0.625em}.form-group textarea.form-control{min-height:100px;font-size:1.125em;padding:0.5em 0.625em}.form-submit-message{display:inline-block;margin-left:0.3125em;font-size:0.75em}.form-submit-message.error{color:#E55A84}.form-submit-message img{vertical-align:middle;margin-right:0.3125em}.error>.datepicker{border-color:#E55A84}.datepicker{width:100%;border:1px solid #eee;border-radius:3px;background:white;padding:0.625em;-webkit-transition:border-color 0.1s ease-in-out;-moz-transition:border-color 0.1s ease-in-out;transition:border-color 0.1s ease-in-out}.datepicker table{width:100%;font-size:1em}.datepicker tbody:before{content:'';display:block;height:0.625em}.datepicker .prev,.datepicker .next{opacity:0.5;cursor:pointer;border-radius:5px;position:relative}.datepicker .prev:hover,.datepicker .next:hover{opacity:1}.datepicker .prev:hover:after,.datepicker .next:hover:after{opacity:1;background:rgba(61,71,82,0.1)}.datepicker .prev:after,.datepicker .next:after{content:" ";cursor:pointer;opacity:0;position:absolute;width:1.75em;height:1.75em;margin-left:-0.875em;margin-top:-0.875em;left:50%;top:50%;border-radius:100%}.datepicker .datepicker-switch{padding:10px;font-weight:600;font-size:1.125em;border-radius:3px;cursor:pointer}.datepicker .datepicker-switch:hover{background:rgba(61,71,82,0.1)}.datepicker .dow{padding:10px;font-weight:normal;text-transform:uppercase;color:#E55A84;font-size:0.875em;border-bottom:2px solid #eee}.datepicker .dow,.datepicker .day{padding:0.9375em}.datepicker .day{text-align:center;font-weight:600;position:relative;font-size:0.875em}.datepicker .day.today{color:#818176}.datepicker .day.today:after{opacity:1;background:rgba(255,255,0,0.1)}.datepicker .day:hover{cursor:pointer}.datepicker .day:hover:after{opacity:1;background:rgba(61,71,82,0.1)}.datepicker .day.new,.datepicker .day.old{font-weight:normal;color:rgba(61,71,82,0.3)}.datepicker .day.active{background:white;color:#60DF9D}.datepicker .day.active:after{opacity:1;background:rgba(96,223,157,0.1)}.datepicker .day:active:after{opacity:0.8}.datepicker .day:after{content:" ";cursor:pointer;opacity:0;position:absolute;width:2.1875em;height:2.1875em;margin-left:-1.09375em;margin-top:-1.09375em;left:50%;top:50%;border-radius:100%}.datepicker .month,.datepicker .year{width:33.3%;display:inline-block;text-align:center;font-size:0.875em;padding:1.25em;cursor:pointer;border-radius:3px;text-transform:uppercase}.datepicker .month:hover,.datepicker .year:hover{background:rgba(61,71,82,0.1)}.daticon-list{margin:0;margin-left:-10px;list-style:none;padding:5px;text-align:left}.daticon-list .placeholder{line-height:1.125em;font-size:0.75em;color:#ccc}.daticon-list li{margin:5px;display:inline-block}.daticon{box-shadow:0 0 0 1px rgba(61,71,82,0.1);border-radius:3px;display:inline-block;padding:0.5em 1em;text-align:center;position:relative;cursor:default;background:white}.daticon .dow{font-size:0.375em;margin-top:-1.5em;background:white;color:#aaa;margin-bottom:0.25em;font-weight:normal;text-transform:uppercase}.daticon .day{font-size:1.25em;font-weight:normal;color:#E55A84;line-height:1em}.daticon .month{font-weight:600;font-size:0.75em;text-transform:uppercase}.daticon .delete{text-align:center;width:1.125em;height:1.125em;position:absolute;top:-7.2px;right:-7.2px;background:rgba(61,71,82,0.1);border-radius:100%;display:inline-block;background:rgba(61,71,82,0.1) url(../images/close@2x.png) no-repeat center center;background-size:7px 8px;cursor:pointer;opacity:0}.daticon .delete:hover{background-color:rgba(61,71,82,0.2)}.daticon:hover .delete{opacity:1}.event-description{font-size:1.125em;line-height:1.3125em;color:#798490;white-space:pre-wrap}.event-poll{width:100%;margin-top:-0.625em;margin-bottom:0.625em}.event-poll th{text-align:center;border-bottom:1px solid #ddd;padding-bottom:0.625em;box-shadow:0 3px 0 rgba(0,0,0,0.05)}.event-poll tr:nth-child(even) td{background:#F9FAFA}.event-poll tr:hover .hover{visibility:visible}.event-poll .hover{visibility:hidden}.event-poll td{padding:0.625em;border-bottom:1px solid #ddd}.event-poll td.center{text-align:center}.event-poll .event-poll-name{padding:0.375em 0.6875em;display:inline-block}.event-poll .event-poll-user{text-align:left;font-size:0.875em;padding:0.75em 1.25em}.event-poll .event-poll-user img{margin-right:5px}.event-poll .event-poll-user input{border:1px solid #ddd;padding:0.3125em 0.625em;border-radius:3px;color:#3D4752}.event-poll .event-poll-user input:focus{outline:0;border-color:#5AC4E5}.event-poll .event-poll-input{padding:0}.event-poll .event-poll-participants{text-align:left;padding:0 0.625em}.event-poll .event-entry-button{font-size:0.75em;text-decoration:none;color:#aaa;border-radius:3px;margin-left:0.3125em}.event-poll .event-entry-button:hover{color:#60DF9D}.event-poll .event-entry-button:hover.danger{color:#E55A84}.event-poll-buttons{text-align:right;padding:0 0.625em}.event-detail-list{list-style:none;margin-top:-1.25em;margin-bottom:1.25em;padding:0;color:#798490;font-size:0.75em}.event-detail-list li{display:inline-block;margin-right:2.5em}.event-detail-list a{color:#3D4752;text-decoration:none}.event-detail-list a:hover{color:#60DF9D}.event-details{margin-bottom:2.5em}.event-button-tip{font-size:0.6875em;color:#C4CAD2;display:inline-block;margin-right:0.625em}.form-success{text-align:center}.form-success-url{font-size:1.5em;text-align:center;padding:10px;border-radius:3px;border:1px solid #eee;color:#3D4752}.container{max-width:68em;margin-left:auto;margin-right:auto;padding:1.875em 2.5em}.container:after{content:"";display:table;clear:both}.main-content{float:left;display:block;margin-right:2.35765%;width:65.88078%;margin-left:17.05961%}.main-content:last-child{margin-right:0}.rl-section{max-width:800px;margin-left:auto;margin-right:auto;border-top:1px solid #ddd;padding-top:1.25em;margin-bottom:1.25em}.rl-section:after{content:"";display:table;clear:both}.rl-section-details{float:left;display:block;margin-right:2.35765%;width:23.23176%}.rl-section-details:last-child{margin-right:0}.rl-section-details h2{margin-top:0.3125em}.rl-section-main{float:left;display:block;margin-right:2.35765%;width:74.41059%}.rl-section-main:last-child{margin-right:0}.rl-page-desc{font-size:1.3125em;color:#798490;margin-bottom:1.25em} +@import url(http://fonts.googleapis.com/css?family=Source+Sans+Pro:400,600,700,400italic);/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}html{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*,*:before,*:after{-webkit-box-sizing:inherit;-moz-box-sizing:inherit;box-sizing:inherit}body{font-size:1.125em;font-family:"Source Sans Pro","Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;color:#3D4752}@media screen and (max-width: 768px) {body{font-size:0.9375em;}}.header{float:left;display:block;margin-right:2.35765%;width:23.23176%}.header:last-child{margin-right:0}.header .fixed{position:fixed}.header .primary-section{margin:2.1875em 0}.header .nav-links{font-size:1em;font-weight:normal;line-height:1.5em}.header .nav-links .nav-link{display:block;text-decoration:none;color:#969FA9}.header .nav-links .nav-link:hover{color:#3D4752}.header .nav-links .nav-link.active{color:#5AC4E5}.btn-flat{color:white;background:#60DF9D;text-decoration:none;padding: 0.625em 1.25em;border-radius:3px}.btn-primary{border:1px solid #E0E3E9;border-radius:2px;box-shadow:inset 0 1px 0 white,0 1px 1px rgba(0,0,0,0.1);background-image:-webkit-linear-gradient(#FAFAFA, #EFF1F3);background-image:linear-gradient(#FAFAFA, #EFF1F3);font-size:0.75em;font-weight:600;color:#969FA9;text-decoration:none;padding:0.5em 0.9375em}.btn-primary.disabled{cursor:default;opacity:0.5}.btn-primary.disabled:active{box-shadow:inset 0 1px 0 white,0 1px 1px rgba(0,0,0,0.1)}.btn-primary.danger{color:#E55A5A}.btn-primary:focus{outline:0}.btn-primary:active{box-shadow:inset 0 0 5px rgba(0,0,0,0.1)}h1{font-weight:bold;font-size:2.25em;color:#3D4752}h1 small{font-size:0.75em}h2{font-weight:600;font-size:0.875em;color:#3D4752;padding-bottom:5px}h2 small{margin-left:0.625em;display:inline-block}h2 small,h2 small a{font-size:0.75em;color:#969FA9;font-weight:normal}h2 small a{text-decoration:none}h2 small a:hover{color:#E55A84;border-bottom:1px solid #ddd}p{color:#798490}p a{color:#60DF9D}.form-container{width:100%}.form-row{display:block;margin-bottom:10px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.form-row:after{content:"";display:table;clear:both}.form-col{float:left;display:block;margin-right:2.35765%;width:48.82117%}.form-col:last-child{margin-right:0}.form-col.padded:first-child{padding:0 20px 0 0}.form-col.padded:last-child{padding:0 0 0 20px}.form-big-col{float:left;display:block;margin-right:2.35765%;width:100%}.form-big-col:last-child{margin-right:0}.form-small-col{float:left;display:block;margin-right:2.35765%;width:14.70196%}.form-small-col:last-child{margin-right:0}.form-error-msg{color:#E55A84;font-size:0.75em;padding:0.3125em}.form-group>label{font-size:0.75em;color:#969FA9;display:block;line-height:1.875em}.form-group>label:after{content:"*";color:#E55A84;margin-left:5px}.form-group>label.optional:after{content:""}.form-group input.form-control,.form-group textarea.form-control{border-radius:3px;border:1px solid #ddd;font-size:1.125em;-webkit-transition:border-color 0.1s ease-in-out;-moz-transition:border-color 0.1s ease-in-out;transition:border-color 0.1s ease-in-out}.form-group input.form-control:focus,.form-group textarea.form-control:focus{border-color:#5AC4E5;outline:none}.form-group input.form-control.extend,.form-group textarea.form-control.extend{width:100%}.form-group input.form-control::-webkit-input-placeholder,.form-group textarea.form-control::-webkit-input-placeholder{color:rgba(150,159,169,0.7)}.form-group input.form-control::-moz-placeholder,.form-group textarea.form-control::-moz-placeholder{color:rgba(150,159,169,0.7)}.form-group input.form-control:-moz-placeholder,.form-group textarea.form-control:-moz-placeholder{color:rgba(150,159,169,0.7)}.form-group input.form-control:-ms-input-placeholder,.form-group textarea.form-control:-ms-input-placeholder{color:rgba(150,159,169,0.7)}.form-group.error input.form-control,.form-group.error textarea.form-control{border-color:#E55A84;background:rgba(229,90,132,0.02)}.form-group input.form-control{padding:0.3125em 0.625em}.form-group textarea.form-control{min-height:100px;font-size:1.125em;padding:0.5em 0.625em}.form-submit-message{display:inline-block;margin-left:0.3125em;font-size:0.75em}.form-submit-message.error{color:#E55A84}.form-submit-message img{vertical-align:middle;margin-right:0.3125em}.rl-modal{background:white;position:fixed;top:50%;box-shadow:0 0 5px rgba(0,0,0,0.5);left:50%;width:50%;max-width:400px;display:inline-block;min-width:200px;height:auto;z-index:2000;overflow:hidden;border-radius:5px;-webkit-transform:translateX(-50%) translateY(-50%);-moz-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);-o-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.rl-modal .rl-modal-message{padding:0 20px 20px 20px;font-size:0.75em;color:#798490}.rl-modal .rl-modal-title{padding:20px 20px 5px 20px;font-size:1.125em}.rl-modal .rl-modal-actions{border-top:1px solid #ddd;background:#F9FAFA;text-align:right;padding:0.625em 1.25em}.rl-modal-overlay{position:fixed;z-index:1000;top:0;left:0;width:100%;height:100%;background:transparent}.error>.datepicker{border-color:#E55A84}.datepicker{width:100%;border:1px solid #eee;border-radius:3px;background:white;padding:0.625em;-webkit-transition:border-color 0.1s ease-in-out;-moz-transition:border-color 0.1s ease-in-out;transition:border-color 0.1s ease-in-out}.datepicker table{width:100%;font-size:1em}.datepicker tbody:before{content:'';display:block;height:0.625em}.datepicker .prev,.datepicker .next{opacity:0.5;cursor:pointer;border-radius:5px;position:relative}.datepicker .prev:hover,.datepicker .next:hover{opacity:1}.datepicker .prev:hover:after,.datepicker .next:hover:after{opacity:1;background:rgba(61,71,82,0.1)}.datepicker .prev:after,.datepicker .next:after{content:" ";cursor:pointer;opacity:0;position:absolute;width:1.75em;height:1.75em;margin-left:-0.875em;margin-top:-0.875em;left:50%;top:50%;border-radius:100%}.datepicker .datepicker-switch{padding:10px;font-weight:600;font-size:1.125em;border-radius:3px;cursor:pointer}.datepicker .datepicker-switch:hover{background:rgba(61,71,82,0.1)}.datepicker .dow{padding:10px;font-weight:normal;text-transform:uppercase;color:#E55A84;font-size:0.875em;border-bottom:2px solid #eee}.datepicker .dow,.datepicker .day{padding:0.9375em}.datepicker .day{text-align:center;font-weight:600;position:relative;font-size:0.875em}.datepicker .day.today{color:#818176}.datepicker .day.today:after{opacity:1;background:rgba(255,255,0,0.1)}.datepicker .day:hover{cursor:pointer}.datepicker .day:hover:after{opacity:1;background:rgba(61,71,82,0.1)}.datepicker .day.new,.datepicker .day.old{font-weight:normal;color:rgba(61,71,82,0.3)}.datepicker .day.active{background:white;color:#60DF9D}.datepicker .day.active:after{opacity:1;background:rgba(96,223,157,0.1)}.datepicker .day:active:after{opacity:0.8}.datepicker .day:after{content:" ";cursor:pointer;opacity:0;position:absolute;width:2.1875em;height:2.1875em;margin-left:-1.09375em;margin-top:-1.09375em;left:50%;top:50%;border-radius:100%}.datepicker .month,.datepicker .year{width:33.3%;display:inline-block;text-align:center;font-size:0.875em;padding:1.25em;cursor:pointer;border-radius:3px;text-transform:uppercase}.datepicker .month:hover,.datepicker .year:hover{background:rgba(61,71,82,0.1)}.daticon-list{margin:0;margin-left:-10px;list-style:none;padding:5px;text-align:left}.daticon-list .placeholder{line-height:1.125em;font-size:0.75em;color:#ccc}.daticon-list li{margin:5px;display:inline-block}.daticon{box-shadow:0 0 0 1px rgba(61,71,82,0.1);border-radius:3px;display:inline-block;padding:0.5em 1em;text-align:center;position:relative;cursor:default;background:white}.daticon .dow{font-size:0.375em;margin-top:-1.5em;background:white;color:#aaa;margin-bottom:0.25em;font-weight:normal;text-transform:uppercase}.daticon .day{font-size:1.25em;font-weight:normal;color:#E55A84;line-height:1em}.daticon .month{font-weight:600;font-size:0.75em;text-transform:uppercase}.daticon .delete{text-align:center;width:1.125em;height:1.125em;position:absolute;top:-7.2px;right:-7.2px;background:rgba(61,71,82,0.1);border-radius:100%;display:inline-block;background:rgba(61,71,82,0.1) url(../images/close@2x.png) no-repeat center center;background-size:7px 8px;cursor:pointer;opacity:0}.daticon .delete:hover{background-color:rgba(61,71,82,0.2)}.daticon:hover .delete{opacity:1}.event-description{font-size:1.125em;line-height:1.3125em;color:#798490;white-space:pre-wrap}.event-poll{width:100%;margin-top:-0.625em;margin-bottom:0.625em}.event-poll th{text-align:center;border-bottom:1px solid #ddd;padding-bottom:0.625em;box-shadow:0 3px 0 rgba(0,0,0,0.05)}.event-poll tr:nth-child(even) td{background:#F9FAFA}.event-poll tr:hover .hover{visibility:visible}.event-poll .hover{visibility:hidden}.event-poll td{padding:0.625em;border-bottom:1px solid #ddd}.event-poll td.center{text-align:center}.event-poll .event-poll-name{padding:0.375em 0.6875em;display:inline-block}.event-poll .event-poll-user{text-align:left;font-size:0.875em;padding:0.75em 1.25em}.event-poll .event-poll-user img{margin-right:5px}.event-poll .event-poll-user input{border:1px solid #ddd;padding:0.3125em 0.625em;border-radius:3px;color:#3D4752}.event-poll .event-poll-user input:focus{outline:0;border-color:#5AC4E5}.event-poll .event-poll-input{padding:0}.event-poll .event-poll-participants{text-align:left;padding:0 0.625em}.event-poll .event-entry-button{font-size:0.75em;text-decoration:none;color:#aaa;border-radius:3px;margin-left:0.3125em}.event-poll .event-entry-button:hover{color:#60DF9D}.event-poll .event-entry-button:hover.danger{color:#E55A84}.event-poll-buttons{text-align:right;padding:0 0.625em}.event-detail-list{list-style:none;margin-top:-1.25em;margin-bottom:1.25em;padding:0;color:#798490;font-size:0.75em}.event-detail-list li{display:inline-block;margin-right:2.5em}.event-detail-list a{color:#3D4752;text-decoration:none}.event-detail-list a:hover{color:#60DF9D}.event-details{margin-bottom:2.5em}.event-button-tip{font-size:0.6875em;color:#C4CAD2;display:inline-block;margin-right:0.625em}.form-success{text-align:center}.form-success-url{font-size:1.5em;text-align:center;padding:10px;border-radius:3px;border:1px solid #eee;color:#3D4752}.container{max-width:68em;margin-left:auto;margin-right:auto;padding:1.875em 2.5em}.container:after{content:"";display:table;clear:both}.main-content{float:left;display:block;margin-right:2.35765%;width:65.88078%;margin-left:17.05961%}.main-content:last-child{margin-right:0}.rl-section{max-width:800px;margin-left:auto;margin-right:auto;border-top:1px solid #ddd;padding-top:1.25em;margin-bottom:1.25em}.rl-section:after{content:"";display:table;clear:both}.rl-section-details{float:left;display:block;margin-right:2.35765%;width:23.23176%}.rl-section-details:last-child{margin-right:0}.rl-section-details h2{margin-top:0.3125em}.rl-section-main{float:left;display:block;margin-right:2.35765%;width:74.41059%}.rl-section-main:last-child{margin-right:0}.rl-page-desc{font-size:1.3125em;color:#798490;margin-bottom:1.25em} /*# sourceMappingURL=style.css.map */ \ No newline at end of file diff --git a/public/css/style.css.map b/public/css/style.css.map index 5dd848671..50b9ef61d 100644 --- a/public/css/style.css.map +++ b/public/css/style.css.map @@ -1 +1 @@ -{"version":3,"sources":["style.scss","partials/_normalize.scss","neat/grid/_box-sizing.scss","bourbon/addons/_prefixer.scss","partials/_mixins.scss","partials/_vars.scss","neat/grid/_media.scss","partials/_header.scss","neat/grid/_span-columns.scss","partials/_buttons.scss","neat/grid/_pad.scss","bourbon/css3/_background-image.scss","partials/_type.scss","partials/_form.scss","neat/grid/_row.scss","bourbon/addons/_clearfix.scss","bourbon/css3/_transition.scss","bourbon/css3/_placeholder.scss","partials/_datepicker.scss","partials/_event.scss","partials/_eventsuccess.scss","neat/grid/_outer-container.scss","neat/settings/_grid.scss","neat/grid/_shift.scss"],"names":[],"mappings":"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","file":"style.css","sourcesContent":["@import url(http://fonts.googleapis.com/css?family=Source+Sans+Pro:400,600,700,400italic);\n@import \"partials/vars\";\n@import \"partials/mixins\";\n@import \"partials/normalize\";\n@import \"bourbon/bourbon\";\n@import \"neat/neat\";\n$mobile: new-breakpoint(max-width 768px 4);\n\nbody {\n font-size: em(18px);\n @include font();\n color: $text-clr;\n @include media($mobile) {\n font-size: em(15px);\n }\n}\n@import \"partials/header\";\n@import \"partials/buttons\";\n@import \"partials/type\";\n@import \"partials/form\";\n@import \"partials/datepicker\";\n@import \"partials/event\";\n@import \"partials/newevent\";\n@import \"partials/eventsuccess\";\n\n.container {\n @include outer-container();\n padding: em(30px) em(40px);\n}\n\n.main-content {\n @include span-columns(8);\n @include shift(2);\n}\n\n.rl-section {\n @include outer-container(800px);\n border-top:1px solid #ddd;\n padding-top: em(20px);\n margin-bottom: em(20px);\n}\n\n.rl-section-details {\n @include span-columns(3);\n h2 {\n margin-top: em(5px);\n }\n}\n\n.rl-section-main {\n @include span-columns(9);\n}\n\n.rl-page-desc {\n font-size: em(21px);\n color: $body-clr;\n margin-bottom: em(20px);\n}\n","/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\n\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n * user zoom.\n */\n\nhtml {\n font-family: sans-serif; /* 1 */\n -ms-text-size-adjust: 100%; /* 2 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n margin: 0;\n}\n\n/* HTML5 display definitions\n ========================================================================== */\n\n/**\n * Correct `block` display not defined for any HTML5 element in IE 8/9.\n * Correct `block` display not defined for `details` or `summary` in IE 10/11\n * and Firefox.\n * Correct `block` display not defined for `main` in IE 11.\n */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; /* 1 */\n vertical-align: baseline; /* 2 */\n}\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n/**\n * Address `[hidden]` styling not present in IE 8/9/10.\n * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n */\n\n[hidden],\ntemplate {\n display: none;\n}\n\n/* Links\n ========================================================================== */\n\n/**\n * Remove the gray background color from active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * Improve readability when focused and also mouse hovered in all browsers.\n */\n\na:active,\na:hover {\n outline: 0;\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n */\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n */\n\nb,\nstrong {\n font-weight: bold;\n}\n\n/**\n * Address styling not present in Safari and Chrome.\n */\n\ndfn {\n font-style: italic;\n}\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari, and Chrome.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove border when inside `a` element in IE 8/9/10.\n */\n\nimg {\n border: 0;\n}\n\n/**\n * Correct overflow not hidden in IE 9/10/11.\n */\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari.\n */\n\nfigure {\n margin: 1em 40px;\n}\n\n/**\n * Address differences between Firefox and other browsers.\n */\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n/**\n * Contain overflow in all browsers.\n */\n\npre {\n overflow: auto;\n}\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n\n/**\n * 1. Correct color not being inherited.\n * Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; /* 1 */\n font: inherit; /* 2 */\n margin: 0; /* 3 */\n}\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10/11.\n */\n\nbutton {\n overflow: visible;\n}\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n * Correct `select` style inheritance in Firefox.\n */\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n * and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n * `input` and others.\n */\n\nbutton,\nhtml input[type=\"button\"], /* 1 */\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; /* 2 */\n cursor: pointer; /* 3 */\n}\n\n/**\n * Re-set default cursor for disabled elements.\n */\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\ninput {\n line-height: normal;\n}\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n * (include `-moz` to future-proof).\n */\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; /* 2 */\n box-sizing: content-box;\n}\n\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * Define consistent border, margin, and padding.\n */\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9/10/11.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n\nlegend {\n border: 0; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Remove default vertical scrollbar in IE 8/9/10/11.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\n\noptgroup {\n font-weight: bold;\n}\n\n/* Tables\n ========================================================================== */\n\n/**\n * Remove most spacing between table cells.\n */\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","@if $border-box-sizing == true {\n html { // http://bit.ly/1qk2tVR\n @include box-sizing(border-box);\n }\n\n * {\n &, &:before, &:after {\n @include box-sizing(inherit);\n }\n }\n}\n","//************************************************************************//\n// Example: @include prefixer(border-radius, $radii, webkit ms spec);\n//************************************************************************//\n// Variables located in /settings/_prefixer.scss\n\n@mixin prefixer ($property, $value, $prefixes) {\n @each $prefix in $prefixes {\n @if $prefix == webkit {\n @if $prefix-for-webkit {\n -webkit-#{$property}: $value;\n }\n }\n @else if $prefix == moz {\n @if $prefix-for-mozilla {\n -moz-#{$property}: $value;\n }\n }\n @else if $prefix == ms {\n @if $prefix-for-microsoft {\n -ms-#{$property}: $value;\n }\n }\n @else if $prefix == o {\n @if $prefix-for-opera {\n -o-#{$property}: $value;\n }\n }\n @else if $prefix == spec {\n @if $prefix-for-spec {\n #{$property}: $value;\n }\n }\n @else {\n @warn \"Unrecognized prefix: #{$prefix}\";\n }\n }\n}\n\n@mixin disable-prefix-for-all() {\n $prefix-for-webkit: false !global;\n $prefix-for-mozilla: false !global;\n $prefix-for-microsoft: false !global;\n $prefix-for-opera: false !global;\n $prefix-for-spec: false !global;\n}\n","@mixin font($font : $primary-font){\n font-family: $font, $helvetica;\n}\n","/****** BASIC *******/\n$em-base: 16px;\n$primary-font: \"Source Sans Pro\";\n/****** BASIC *******/\n\n/****** COLORS *******/\n$primary-clr: #60DF9D;\n$dark-gray-clr: #969FA9;\n$light-gray-clr: #f9f9f9;\n$text-clr: #3D4752;\n$danger-clr: #E55A5A;\n$red-clr: #E55A84;\n$blue-clr: #5AC4E5;\n$medium-gray-clr: #798490;\n$body-clr: $medium-gray-clr;\n/****** COLORS *******/\n","/// Outputs a media-query block with an optional grid context (the total number of columns used in the grid).\n///\n/// @param {List} $query\n/// A list of media query features and values, where each `$feature` should have a corresponding `$value`.\n/// For a list of valid values for `$feature`, click [here](http://www.w3.org/TR/css3-mediaqueries/#media1).\n///\n/// If there is only a single `$value` in `$query`, `$default-feature` is going to be used.\n///\n/// The number of total columns in the grid can be set by passing `$columns` at the end of the list (overrides `$total-columns`).\n///\n///\n/// @param {Number (unitless)} $total-columns ($grid-columns)\n/// - Number of columns to use in the new grid context. Can be set as a shorthand in the first parameter.\n///\n/// @example scss - Usage\n/// .responsive-element {\n/// @include media(769px) {\n/// @include span-columns(6);\n/// }\n/// }\n///\n/// .new-context-element {\n/// @include media(min-width 320px max-width 480px, 6) {\n/// @include span-columns(6);\n/// }\n/// }\n///\n/// @example css - CSS Output\n/// @media screen and (min-width: 769px) {\n/// .responsive-element {\n/// display: block;\n/// float: left;\n/// margin-right: 2.35765%;\n/// width: 48.82117%;\n/// }\n///\n/// .responsive-element:last-child {\n/// margin-right: 0;\n/// }\n/// }\n///\n/// @media screen and (min-width: 320px) and (max-width: 480px) {\n/// .new-context-element {\n/// display: block;\n/// float: left;\n/// margin-right: 4.82916%;\n/// width: 100%;\n/// }\n///\n/// .new-context-element:last-child {\n/// margin-right: 0;\n/// }\n/// }\n\n@mixin media($query: $feature $value $columns, $total-columns: $grid-columns) {\n @if length($query) == 1 {\n @media screen and ($default-feature: nth($query, 1)) {\n $default-grid-columns: $grid-columns;\n $grid-columns: $total-columns !global;\n @content;\n $grid-columns: $default-grid-columns !global;\n }\n }\n\n @else {\n $loop-to: length($query);\n $media-query: 'screen and ';\n $default-grid-columns: $grid-columns;\n $grid-columns: $total-columns !global;\n\n @if not is-even(length($query)) {\n $grid-columns: nth($query, $loop-to) !global;\n $loop-to: $loop-to - 1;\n }\n\n $i: 1;\n @while $i <= $loop-to {\n $media-query: $media-query + '(' + nth($query, $i) + ': ' + nth($query, $i + 1) + ') ';\n\n @if ($i + 1) != $loop-to {\n $media-query: $media-query + 'and ';\n }\n\n $i: $i + 2;\n }\n\n @media #{$media-query} {\n @content;\n $grid-columns: $default-grid-columns !global;\n }\n }\n}\n",".header {\n @include span-columns(3);\n .fixed {\n position: fixed;\n }\n .primary-section {\n margin: em(35px) 0;\n }\n .secondary-section {\n\n }\n .nav-links {\n font-size: em(16px);\n font-weight: normal;\n line-height: em(24px);\n .nav-link {\n display:block;\n text-decoration:none;\n color: $dark-gray-clr;\n &:hover {\n color: $text-clr;\n }\n &.active {\n color: $blue-clr;\n }\n }\n }\n}\n","/// Specifies the number of columns an element should span. If the selector is nested the number of columns of its parent element should be passed as an argument as well.\n///\n/// @param {List} $span\n/// A list containing `$columns`, the unitless number of columns the element spans (required), and `$container-columns`, the number of columns the parent element spans (optional).\n///\n/// If only one value is passed, it is assumed that it's `$columns` and that that `$container-columns` is equal to `$grid-columns`, the total number of columns in the grid.\n///\n/// The values can be separated with any string such as `of`, `/`, etc.\n///\n/// @param {String} $display (block)\n/// Sets the display property of the element. By default it sets the display propert of the element to `block`.\n///\n/// If passed `block-collapse`, it also removes the margin gutter by adding it to the element width.\n///\n/// If passed `table`, it sets the display property to `table-cell` and calculates the width of the element without taking gutters into consideration. The result does not align with the block-based grid.\n///\n/// @example scss - Usage\n/// .element {\n/// @include span-columns(6);\n///\n/// .nested-element {\n/// @include span-columns(2 of 6);\n/// }\n/// }\n///\n/// @example css - CSS Output\n/// .element {\n/// display: block;\n/// float: left;\n/// margin-right: 2.35765%;\n/// width: 48.82117%;\n/// }\n///\n/// .element:last-child {\n/// margin-right: 0;\n/// }\n///\n/// .element .nested-element {\n/// display: block;\n/// float: left;\n/// margin-right: 4.82916%;\n/// width: 30.11389%;\n/// }\n///\n/// .element .nested-element:last-child {\n/// margin-right: 0;\n/// }\n\n@mixin span-columns($span: $columns of $container-columns, $display: block) {\n $columns: nth($span, 1);\n $container-columns: container-span($span);\n\n $parent-columns: get-parent-columns($container-columns) !global;\n\n $direction: get-direction($layout-direction, $default-layout-direction);\n $opposite-direction: get-opposite-direction($direction);\n\n $display-table: is-display-table($container-display-table, $display);\n\n @if $display-table {\n display: table-cell;\n width: percentage($columns / $container-columns);\n } @else {\n float: #{$opposite-direction};\n\n @if $display != no-display {\n display: block;\n }\n\n @if $display == collapse {\n @include -neat-warn(\"The 'collapse' argument will be deprecated. Use 'block-collapse' instead.\");\n }\n\n @if $display == collapse or $display == block-collapse {\n width: flex-grid($columns, $container-columns) + flex-gutter($container-columns);\n\n &:last-child {\n width: flex-grid($columns, $container-columns);\n }\n\n } @else {\n margin-#{$direction}: flex-gutter($container-columns);\n width: flex-grid($columns, $container-columns);\n\n &:last-child {\n margin-#{$direction}: 0;\n }\n }\n }\n}\n",".btn-flat {\n color:white;\n background: $primary-clr;\n text-decoration:none;\n @include pad(em(10px) em(20px));\n border-radius: 3px;\n}\n\n.btn-primary {\n border:1px solid #E0E3E9;\n border-radius: 2px;\n box-shadow: inset 0 1px 0 white, 0 1px 1px rgba(black, 0.1);\n @include background-image(linear-gradient(#FAFAFA, #EFF1F3));\n font-size: em(12px);\n font-weight:600;\n color: $dark-gray-clr;\n text-decoration:none;\n padding: em(8px) em(20px);\n &.disabled {\n cursor:default;\n opacity: 0.5;\n &:active {\n box-shadow: inset 0 1px 0 white, 0 1px 1px rgba(black, 0.1);\n }\n }\n &.danger {\n color: $danger-clr;\n }\n &:focus {\n outline:0;\n }\n &:active {\n box-shadow: inset 0 0 5px rgba(black, 0.1);\n }\n}\n","/// Adds padding to the element.\n///\n/// @param {List} $padding (flex-gutter())\n/// A list of padding value(s) to use. Passing `default` in the list will result in using the gutter width as a padding value.\n///\n/// @example scss - Usage\n/// .element {\n/// @include pad(30px -20px 10px default);\n/// }\n///\n/// @example css - CSS Output\n/// .element {\n/// padding: 30px -20px 10px 2.35765%;\n/// }\n\n@mixin pad($padding: flex-gutter()) {\n $padding-list: null;\n @each $value in $padding {\n $value: if($value == 'default', flex-gutter(), $value);\n $padding-list: join($padding-list, $value);\n }\n padding: $padding-list;\n}\n","//************************************************************************//\n// Background-image property for adding multiple background images with\n// gradients, or for stringing multiple gradients together.\n//************************************************************************//\n\n@mixin background-image($images...) {\n $webkit-images: ();\n $spec-images: ();\n\n @each $image in $images {\n $webkit-image: ();\n $spec-image: ();\n\n @if (type-of($image) == string) {\n $url-str: str-slice($image, 0, 3);\n $gradient-type: str-slice($image, 0, 6);\n\n @if $url-str == \"url\" {\n $webkit-image: $image;\n $spec-image: $image;\n }\n\n @else if $gradient-type == \"linear\" {\n $gradients: _linear-gradient-parser($image);\n $webkit-image: map-get($gradients, webkit-image);\n $spec-image: map-get($gradients, spec-image);\n }\n\n @else if $gradient-type == \"radial\" {\n $gradients: _radial-gradient-parser($image);\n $webkit-image: map-get($gradients, webkit-image);\n $spec-image: map-get($gradients, spec-image);\n }\n }\n\n $webkit-images: append($webkit-images, $webkit-image, comma);\n $spec-images: append($spec-images, $spec-image, comma);\n }\n\n background-image: $webkit-images;\n background-image: $spec-images;\n}\n","h1 {\n font-weight:bold;\n font-size: em(36px);\n color: $text-clr;\n small {\n font-size: em(12px);\n }\n}\n\nh2 {\n font-weight:600;\n font-size:em(14px);\n color: $text-clr;\n padding-bottom:5px;\n small {\n margin-left: em(10px);\n display:inline-block;\n }\n small, small a {\n font-size: em(12px);\n color: $dark-gray-clr;\n font-weight:normal;\n }\n small a {\n text-decoration:none;\n &:hover {\n color: $red-clr;\n border-bottom: 1px solid #ddd;\n }\n }\n}\n\np {\n color: $body-clr;\n a {\n color: $primary-clr;\n }\n}\n",".form-container {\n width:100%;\n}\n\n.form-row {\n @include row();\n margin-bottom:10px;\n @include user-select(none);\n}\n\n.form-col {\n @include span-columns(6);\n &.padded {\n &:first-child {\n padding: 0 20px 0 0;\n }\n &:last-child {\n padding: 0 0 0 20px;\n }\n }\n}\n\n.form-big-col {\n @include span-columns(12);\n}\n\n.form-small-col {\n @include span-columns(2);\n}\n\n.form-error-msg {\n color: $red-clr;\n font-size: em(12px);\n padding: em(5px);\n}\n\n.form-group {\n & > label {\n font-size:em(12px);\n color: $dark-gray-clr;\n display:block;\n line-height:em(30px);\n &:after {\n content: \"*\";\n color: $red-clr;\n margin-left:5px;\n }\n &.optional:after {\n content: \"\";\n }\n }\n input.form-control, textarea.form-control {\n border-radius: 3px;\n border: 1px solid #ddd;\n font-size:em(18px);\n @include transition(border-color 0.1s ease-in-out);\n &:focus {\n border-color: $blue-clr;\n outline:none;\n }\n &.extend {\n width:100%;\n }\n @include placeholder {\n color: rgba($dark-gray-clr,0.7);\n }\n }\n &.error {\n input.form-control, textarea.form-control {\n\n border-color: $red-clr;\n background: rgba($red-clr,0.02);\n }\n }\n input.form-control {\n padding: em(5px) em(10px);\n }\n textarea.form-control {\n min-height: 100px;\n font-size: em(18px);\n padding: em(8px) em(10px);\n }\n}\n\n.form-submit-message {\n display:inline-block;\n margin-left: em(5px);\n font-size: em(12px);\n &.error {\n color: $red-clr;\n }\n img {\n vertical-align:middle;\n margin-right: em(5px);\n }\n}\n","/// Designates the element as a row of columns in the grid layout. It clears the floats on the element and sets its display property. Rows can't be nested, but there can be more than one row element—with different display properties—per layout.\n///\n/// @param {String} $display (default)\n/// Sets the display property of the element and the display context that will be used by its children. Can be `block` or `table`.\n///\n/// @param {String} $direction ($default-layout-direction)\n/// Sets the layout direction. Can be `LTR` (left-to-right) or `RTL` (right-to-left).\n///\n/// @example scss - Usage\n/// .element {\n/// @include row();\n/// }\n///\n/// @example css - CSS Output\n/// .element {\n/// *zoom: 1;\n/// display: block;\n/// }\n///\n/// .element:before, .element:after {\n/// content: \" \";\n/// display: table;\n/// }\n///\n/// .element:after {\n/// clear: both;\n/// }\n\n@mixin row($display: default, $direction: $default-layout-direction) {\n @if $direction != $default-layout-direction {\n @include -neat-warn(\"The $direction argument will be deprecated in future versions in favor of the direction(){...} mixin.\");\n }\n\n $layout-direction: $direction !global;\n\n @if $display != default {\n @include -neat-warn(\"The $display argument will be deprecated in future versions in favor of the display(){...} mixin.\");\n }\n\n @if $display == table {\n display: table;\n @include fill-parent;\n table-layout: fixed;\n $container-display-table: true !global;\n }\n\n @else {\n @include clearfix;\n display: block;\n $container-display-table: false !global;\n }\n}\n\n","// Modern micro clearfix provides an easy way to contain floats without adding additional markup.\n//\n// Example usage:\n//\n// // Contain all floats within .wrapper\n// .wrapper {\n// @include clearfix;\n// .content,\n// .sidebar {\n// float : left;\n// }\n// }\n\n@mixin clearfix {\n &:after {\n content:\"\";\n display:table;\n clear:both;\n }\n}\n\n// Acknowledgements\n// Beat *that* clearfix: [Thierry Koblentz](http://www.css-101.org/articles/clearfix/latest-new-clearfix-so-far.php)\n","// Shorthand mixin. Supports multiple parentheses-deliminated values for each variable.\n// Example: @include transition (all 2s ease-in-out);\n// @include transition (opacity 1s ease-in 2s, width 2s ease-out);\n// @include transition-property (transform, opacity);\n\n@mixin transition ($properties...) {\n // Fix for vendor-prefix transform property\n $needs-prefixes: false;\n $webkit: ();\n $moz: ();\n $spec: ();\n\n // Create lists for vendor-prefixed transform\n @each $list in $properties {\n @if nth($list, 1) == \"transform\" {\n $needs-prefixes: true;\n $list1: -webkit-transform;\n $list2: -moz-transform;\n $list3: ();\n\n @each $var in $list {\n $list3: join($list3, $var);\n\n @if $var != \"transform\" {\n $list1: join($list1, $var);\n $list2: join($list2, $var);\n }\n }\n\n $webkit: append($webkit, $list1);\n $moz: append($moz, $list2);\n $spec: append($spec, $list3);\n }\n\n // Create lists for non-prefixed transition properties\n @else {\n $webkit: append($webkit, $list, comma);\n $moz: append($moz, $list, comma);\n $spec: append($spec, $list, comma);\n }\n }\n\n @if $needs-prefixes {\n -webkit-transition: $webkit;\n -moz-transition: $moz;\n transition: $spec;\n }\n @else {\n @if length($properties) >= 1 {\n @include prefixer(transition, $properties, webkit moz spec);\n }\n\n @else {\n $properties: all 0.15s ease-out 0s;\n @include prefixer(transition, $properties, webkit moz spec);\n }\n }\n}\n\n@mixin transition-property ($properties...) {\n -webkit-transition-property: transition-property-names($properties, 'webkit');\n -moz-transition-property: transition-property-names($properties, 'moz');\n transition-property: transition-property-names($properties, false);\n}\n\n@mixin transition-duration ($times...) {\n @include prefixer(transition-duration, $times, webkit moz spec);\n}\n\n@mixin transition-timing-function ($motions...) {\n// ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier()\n @include prefixer(transition-timing-function, $motions, webkit moz spec);\n}\n\n@mixin transition-delay ($times...) {\n @include prefixer(transition-delay, $times, webkit moz spec);\n}\n","@mixin placeholder {\n $placeholders: \":-webkit-input\" \":-moz\" \"-moz\" \"-ms-input\";\n @each $placeholder in $placeholders {\n &:#{$placeholder}-placeholder {\n @content;\n }\n }\n}\n",".error > .datepicker {\n border-color: $red-clr;\n}\n.datepicker {\n width:100%;\n border:1px solid #eee;\n border-radius: 3px;\n background:white;\n padding: em(10px);\n @include transition(border-color 0.1s ease-in-out);\n table {\n width:100%;\n font-size: em($em-base);\n }\n thead {\n\n }\n tbody {\n &:before {\n content: '';\n display:block;\n height: em(10px);\n }\n }\n .prev, .next {\n opacity: 0.5;\n cursor: pointer;\n border-radius:5px;\n position:relative;\n &:hover {\n opacity: 1;\n &:after {\n opacity: 1;\n background: rgba($text-clr, 0.1);\n }\n }\n &:after {\n content: \" \";\n cursor:pointer;\n opacity: 0;\n position:absolute;\n $size: em(28px);\n width:$size;\n height:$size;\n margin-left:$size * -0.5;\n margin-top:$size * -0.5;\n left:50%;\n top:50%;\n border-radius:100%;\n }\n }\n .datepicker-switch {\n padding: 10px;\n font-weight:600;\n font-size:em(18px);\n border-radius: 3px;\n cursor: pointer;\n &:hover {\n background: rgba($text-clr, 0.1);\n }\n }\n .dow {\n padding:10px;\n font-weight:normal;\n text-transform: uppercase;\n color: $red-clr;\n font-size: em(14px);\n border-bottom: 2px solid #eee;\n }\n .dow, .day {\n padding:em(15px);\n }\n .day {\n text-align:center;\n font-weight:600;\n position:relative;\n font-size:em(14px);\n &.today {\n color:#818176;\n &:after {\n opacity:1;\n background: rgba(yellow, 0.1);\n }\n }\n &:hover {\n &:after {\n opacity:1;\n background: rgba($text-clr,0.1);\n }\n cursor: pointer;\n }\n &.new, &.old {\n font-weight:normal;\n color: rgba($text-clr,0.3);\n }\n &.active {\n background:white;\n color: $primary-clr;\n &:after {\n opacity:1;\n background: rgba($primary-clr,0.1);\n }\n }\n &:active {\n &:after {\n opacity: 0.8;\n }\n }\n &:after {\n content: \" \";\n cursor:pointer;\n opacity: 0;\n position:absolute;\n $size: em(35px);\n width:$size;\n height:$size;\n margin-left:$size * -0.5;\n margin-top:$size * -0.5;\n left:50%;\n top:50%;\n border-radius:100%;\n }\n }\n .month, .year {\n width: 33.3%;\n display:inline-block;\n text-align:center;\n font-size: em(14px);\n padding:em(20px);\n cursor:pointer;\n border-radius: 3px;\n text-transform: uppercase;\n &:hover {\n background: rgba($text-clr, 0.1);\n }\n }\n}\n\n.daticon-list {\n margin:0;\n margin-left:-10px;\n list-style:none;\n padding:5px;\n text-align:left;\n .placeholder {\n line-height: em(18px);\n font-size: em(12px);\n color: #ccc;\n }\n li {\n margin: 5px;\n display:inline-block;\n }\n}\n\n.daticon {\n box-shadow: 0 0 0 1px rgba($text-clr,0.1);\n border-radius: 3px;\n display:inline-block;\n padding:em(8px) em(16px);\n text-align:center;\n position:relative;\n cursor:default;\n background:white;\n .dow {\n font-size: em(6px);\n margin-top:em(-24px);\n background:white;\n color: #aaa;\n margin-bottom: em(4px);\n font-weight:normal;\n text-transform: uppercase;\n }\n .day {\n font-size: em(20px);\n font-weight:normal;\n color: $red-clr;\n line-height: em(16px);\n }\n .month {\n font-weight: 600;\n font-size: em(12px);\n text-transform: uppercase;\n }\n .delete {\n text-align:center;\n $size: 18px;\n width: em($size);\n height: em($size);\n position:absolute;\n top: $size * -0.4;\n right: $size * -0.4;\n background: rgba($text-clr,0.1);\n border-radius:100%;\n display:inline-block;\n background: rgba($text-clr, 0.1) url(../images/close@2x.png) no-repeat center center;\n background-size: 7px 8px;\n cursor:pointer;\n opacity:0;\n &:hover {\n background-color: rgba($text-clr, 0.2)\n }\n }\n &:hover {\n .delete {\n opacity: 1;\n }\n }\n}\n",".event-description {\n font-size: em(18px);\n line-height: em(21px);\n color: $body-clr;\n white-space: pre-wrap;\n}\n\n.event-poll {\n width:100%;\n margin-top:em(-10px);\n margin-bottom: em(10px);\n th {\n text-align:center;\n border-bottom:1px solid #ddd;\n padding-bottom:em(10px);\n box-shadow: 0 3px 0 rgba(black, 0.05);\n }\n tr:nth-child(even){\n td {\n background: #F9FAFA;\n }\n }\n tr:hover {\n .hover {\n visibility:visible;\n }\n }\n .hover {\n visibility: hidden;\n }\n td {\n &.center {\n text-align:center;\n }\n padding: em(10px);\n border-bottom:1px solid #ddd;\n }\n .event-poll-name {\n padding: em(6px) em(11px);\n display:inline-block;\n }\n .event-poll-user {\n text-align:left;\n font-size: em(14px);\n padding: em(12px) em(20px);\n img {\n margin-right: 5px;\n }\n input {\n border:1px solid #ddd;\n padding: em(5px) em(10px);\n border-radius: 3px;\n color: $text-clr;\n &:focus {\n outline:0;\n border-color: $blue-clr;\n }\n }\n }\n .event-poll-input {\n padding:0;\n }\n .event-poll-participants {\n text-align:left;\n padding:0 em(10px);\n }\n\n .event-entry-button {\n font-size: em(12px);\n text-decoration:none;\n color: #aaa;\n border-radius: 3px;\n margin-left: em(5px);\n &:hover {\n color: $primary-clr;\n &.danger {\n color: $red-clr;\n }\n }\n }\n}\n\n\n.event-poll-buttons {\n text-align:right;\n padding: 0 em(10px);\n}\n\n.event-detail-list {\n list-style:none;\n margin-top:em(-20px);\n margin-bottom:em(20px);\n padding:0;\n color: $body-clr;\n font-size: em(12px);\n li {\n display:inline-block;\n margin-right: em(40px);\n }\n a {\n color: $text-clr;\n text-decoration:none;\n &:hover {\n color: $primary-clr;\n }\n }\n}\n\n.event-details {\n margin-bottom: em(40px);\n}\n.event-button-tip {\n font-size: em(11px);\n color: #C4CAD2;\n display:inline-block;\n margin-right: em(10px);\n}\n",".form-success {\n text-align:center;\n}\n\n.form-success-url {\n font-size: em(24px);\n text-align:center;\n padding: 10px;\n border-radius: 3px;\n border: 1px solid #eee;\n color: $text-clr;\n}\n","/// Makes an element a outer container by centring it in the viewport, clearing its floats, and setting its `max-width`.\n/// Although optional, using `outer-container` is recommended. The mixin can be called on more than one element per page, as long as they are not nested.\n///\n/// @param {Number (unit)} $local-max-width ($max-width)\n/// Max width to be applied to the element. Can be a percentage or a measure.\n///\n/// @example scss - Usage\n/// .element {\n/// @include outer-container(100%);\n/// }\n///\n/// @example css - CSS Output\n/// .element {\n/// *zoom: 1;\n/// max-width: 100%;\n/// margin-left: auto;\n/// margin-right: auto;\n/// }\n///\n/// .element:before, .element:after {\n/// content: \" \";\n/// display: table;\n/// }\n///\n/// .element:after {\n/// clear: both;\n/// }\n\n@mixin outer-container($local-max-width: $max-width) {\n @include clearfix;\n max-width: $local-max-width;\n margin: {\n left: auto;\n right: auto;\n }\n}\n","/// Sets the relative width of a single grid column. The unit used should be the same one used to define `$gutter`. To learn more about golden-ratio() see [Bourbon docs](http://bourbon.io/docs/#golden-ratio). Set with a `!global` flag.\n///\n/// @type Number (Unit)\n\n$column: golden-ratio(1em, 3) !default;\n\n/// Sets the relative width of a single grid gutter. The unit used should be the same one used to define `$column`. To learn more about golden-ratio() see [Bourbon docs](http://bourbon.io/docs/#golden-ratio). Set with the `!global` flag.\n///\n/// @type Number (Unit)\n\n$gutter: golden-ratio(1em, 1) !default;\n\n/// Sets the total number of columns in the grid. Its value can be overridden inside a media query using the `media()` mixin. Set with the `!global` flag.\n///\n/// @type Number (Unitless)\n\n$grid-columns: 12 !default;\n\n/// Sets the max-width property of the element that includes `outer-container()`. To learn more about `em()` see [Bourbon docs](http://bourbon.io/docs/#px-to-em). Set with the `!global` flag.\n///\n/// @type Number (Unit)\n///\n$max-width: em(1088) !default;\n\n/// When set to true, it sets the box-sizing property of all elements to `border-box`. Set with a `!global` flag.\n///\n/// @type Bool\n///\n/// @example css - CSS Output\n/// html {\n/// -webkit-box-sizing: border-box;\n/// -moz-box-sizing: border-box;\n/// box-sizing: border-box; }\n///\n/// *, *:before, *:after {\n/// -webkit-box-sizing: inherit;\n/// -moz-box-sizing: inherit;\n/// box-sizing: inherit;\n/// }\n\n$border-box-sizing: true !default;\n\n/// Sets the default [media feature](http://www.w3.org/TR/css3-mediaqueries/#media) that `media()` and `new-breakpoint()` revert to when only a breakpoint value is passed. Set with a `!global` flag.\n///\n/// @type String\n\n$default-feature: min-width; // Default @media feature for the breakpoint() mixin\n\n///Sets the default layout direction of the grid. Can be `LTR` or `RTL`. Set with a `!global` flag.\n///\n///@type String\n\n$default-layout-direction: LTR !default;\n","/// Translates an element horizontally by a number of columns. Positive arguments shift the element to the active layout direction, while negative ones shift it to the opposite direction.\n///\n/// @param {Number (unitless)} $n-columns (1)\n/// Number of columns by which the element shifts.\n///\n/// @example scss - Usage\n/// .element {\n/// @include shift(-3);\n/// }\n///\n/// @example css - CSS output\n/// .element {\n/// margin-left: -25.58941%;\n/// }\n\n@mixin shift($n-columns: 1) {\n @include shift-in-context($n-columns);\n}\n\n/// Translates an element horizontally by a number of columns, in a specific nesting context.\n///\n/// @param {List} $shift\n/// A list containing the number of columns to shift (`$columns`) and the number of columns of the parent element (`$container-columns`).\n///\n/// The two values can be separated with any string such as `of`, `/`, etc.\n///\n/// @example scss - Usage\n/// .element {\n/// @include shift(-3 of 6);\n/// }\n///\n/// @example css - CSS output\n/// .element {\n/// margin-left: -52.41458%;\n/// }\n\n@mixin shift-in-context($shift: $columns of $container-columns) {\n $n-columns: nth($shift, 1);\n $parent-columns: container-shift($shift) !global;\n\n $direction: get-direction($layout-direction, $default-layout-direction);\n $opposite-direction: get-opposite-direction($direction);\n\n margin-#{$opposite-direction}: $n-columns * flex-grid(1, $parent-columns) + $n-columns * flex-gutter($parent-columns);\n\n // Reset nesting context\n $parent-columns: $grid-columns !global;\n}\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["style.scss","partials/_normalize.scss","neat/grid/_box-sizing.scss","bourbon/addons/_prefixer.scss","partials/_mixins.scss","partials/_vars.scss","neat/grid/_media.scss","partials/_header.scss","neat/grid/_span-columns.scss","partials/_buttons.scss","neat/grid/_pad.scss","bourbon/css3/_background-image.scss","partials/_type.scss","partials/_form.scss","neat/grid/_row.scss","bourbon/addons/_clearfix.scss","bourbon/css3/_transition.scss","bourbon/css3/_placeholder.scss","partials/_modal.scss","partials/_datepicker.scss","partials/_event.scss","partials/_eventsuccess.scss","neat/grid/_outer-container.scss","neat/settings/_grid.scss","neat/grid/_shift.scss"],"names":[],"mappings":"ynBAAA,sJCQA,KACE,YAAa,WACb,qBAAsB,KACtB,yBAA0B,MAO5B,KACE,OAAQ,GAaV,QAAS,MAAO,QAAS,WAAY,OAAQ,OAAQ,OAAQ,OAAQ,KAAM,KAAM,IAAK,QAAS,QAa7F,QAAS,OAQX,MAAO,OAAQ,SAAU,MAIvB,QAAS,aACT,eAAgB,UAQlB,KAAK,KAAK,YACR,QAAS,KACT,OAAQ,GAQV,SAAU,SAER,QAAS,MAUX,EACE,iBAAkB,aAOpB,CAAC,QAAS,CAAC,OAET,QAAS,GAUX,IAAI,QACF,cAAe,YAOjB,EAAG,OAED,YAAa,MAOf,IACE,WAAY,QAQd,GACE,UAAW,IACX,OAAQ,UAOV,KACE,WAAY,KACZ,MAAO,MAOT,MACE,UAAW,KAOb,IAAK,IAEH,UAAW,IACX,YAAa,EACb,SAAU,SACV,eAAgB,UAGlB,IACE,IAAK,QAGP,IACE,OAAQ,SAUV,IACE,OAAQ,GAOV,GAAG,KAAK,OACN,SAAU,QAUZ,OACE,OAAQ,UAOV,GACE,gBAAiB,YACjB,WAAY,YACZ,OAAQ,GAOV,IACE,SAAU,MAOZ,KAAM,IAAK,IAAK,KAId,YAAa,oBACb,UAAW,KAkBb,OAAQ,MAAO,SAAU,OAAQ,SAK/B,MAAO,QACP,KAAM,QACN,OAAQ,GAOV,OACE,SAAU,SAUZ,OAAQ,OAEN,eAAgB,MAWlB,OAAQ,KAAK,KAAK,gBAAiB,KAAK,eAAgB,KAAK,gBAI3D,mBAAoB,OACpB,OAAQ,SAOV,MAAM,WAAY,KAAK,KAAK,WAE1B,OAAQ,SAOV,MAAM,mBAAoB,KAAK,mBAE7B,OAAQ,EACR,QAAS,GAQX,MACE,YAAa,QAWf,KAAK,kBAAmB,KAAK,eAE3B,WAAY,WACZ,QAAS,GASX,KAAK,eAAe,4BAA6B,KAAK,eAAe,4BAEnE,OAAQ,MASV,KAAK,gBACH,mBAAoB,UACpB,gBAAiB,YACjB,mBAAoB,YACpB,WAAY,aASd,KAAK,eAAe,+BAAgC,KAAK,eAAe,4BAEtE,mBAAoB,MAOtB,SACE,OAAQ,kBACR,OAAQ,MACR,QAAS,uBAQX,OACE,OAAQ,EACR,QAAS,GAOX,SACE,SAAU,MAQZ,SACE,YAAa,MAUf,MACE,gBAAiB,SACjB,eAAgB,GAGlB,GAAI,GAEF,QAAS,GCzaX,KCSQ,mBDPgB,WCYhB,gBDZgB,WC2BhB,WD3BgB,YAGxB,EAAG,CAAC,QAAS,CAAC,OCIN,mBDFkB,QCOlB,gBDPkB,QCsBlB,WDtBkB,SFC1B,KACI,UAAW,QIRX,YAAa,qEJUb,MKFO,SC6EP,sCN9EJ,KAKQ,UAAW,WObnB,QC+DI,MAAO,KAGL,QAAS,MAeT,aAAsB,SACtB,MAAO,WAAb,OAAO,YAGC,aAAsB,GDpF9B,QAAQ,OAEA,SAAU,OAClB,QAAQ,iBAEA,OAAe,YAIvB,QAAQ,WAEA,UAAW,IACX,YAAa,OACb,YAAa,OAArB,QAAQ,WAAW,UAEP,QAAQ,MACR,gBAAgB,KAChB,MFXI,SEWhB,QAAQ,WAAW,SAAS,OAEZ,MFXL,SEYX,QAAQ,WAAW,SAAS,QAEZ,MFXL,SIZX,UACI,MAAM,MACN,WJIU,QIHV,gBAAgB,KCkBlB,QAFiB,gBDdf,cAAe,KAGnB,aACI,OAAO,kBACP,cAAe,IACf,WAA0B,8CE4B5B,iBAJkB,0CAKlB,iBAJkB,kCFvBhB,UAAW,OACX,YAAY,IACZ,MJRY,QISZ,gBAAgB,KAChB,QAAe,gBAAnB,YAAY,UAEJ,OAAO,QACP,QAAS,KAAjB,YAAY,SAAS,QAET,WAA0B,+CAEtC,YAAY,QAEJ,MJhBK,SIiBb,YAAY,OAEJ,QAAQ,GAChB,YAAY,QAEJ,WAAY,+BGhCpB,GACI,YAAY,KACZ,UAAW,OACX,MPMO,SONX,GAAG,MAEK,UAAW,QAInB,GACI,YAAY,IACZ,UAAU,QACV,MPHO,QOIP,eAAe,KAAnB,GAAG,MAEK,YAAa,QACb,QAAQ,cAChB,GAAG,MAAO,GAAG,MAAM,EAEX,UAAW,OACX,MPbQ,QOcR,YAAY,QACpB,GAAG,MAAM,EAED,gBAAgB,MAAxB,GAAG,MAAM,CAAC,OAEE,MPfF,QOgBE,cAAe,gBAK3B,EACI,MPpBc,SOoBlB,EAAE,EAEM,MP7BM,SQNd,gBACI,MAAM,MAGV,UC4CI,QAAS,MD1CT,cAAc,KVGV,oBUFiB,KVOjB,iBUPiB,KVYjB,gBUZiB,KVsBjB,YUtBiB,MEMzB,SAAS,OAEL,QAAQ,GACR,QAAQ,MACR,MAAM,MFPV,ULqDI,MAAO,KAGL,QAAS,MAeT,aAAsB,SACtB,MAAO,WAAb,SAAS,YAGD,aAAsB,GKzE9B,SAAS,OAAO,aAEJ,QAAS,YACrB,SAAS,OAAO,YAEJ,QAAS,YAKrB,cLyCI,MAAO,KAGL,QAAS,MAeT,aAAsB,SACtB,MAAO,MAAb,aAAa,YAGL,aAAsB,GK3D9B,gBLqCI,MAAO,KAGL,QAAS,MAeT,aAAsB,SACtB,MAAO,WAAb,eAAe,YAGP,aAAsB,GKvD9B,gBACI,MRpBM,QQqBN,UAAW,OACX,QAAS,UAGb,YAAc,MAEN,UAAU,OACV,MRhCQ,QQiCR,QAAQ,MACR,YAAY,SAApB,YAAc,KAAK,OAEP,QAAS,IACT,MRjCF,QQkCE,YAAY,KACxB,YAAc,KAAK,SAAS,OAEhB,QAAS,IAErB,YAAY,KAAK,cAAe,YAAY,QAAQ,cAE5C,cAAe,IACf,OAAQ,eACR,UAAU,QV7CV,mBaJW,8BbSX,gBaTW,8BbwBX,WaxBW,+BHkDnB,YAAY,KAAK,aAAa,OAAQ,YAAY,QAAQ,aAAa,OAE3D,aR7CD,QQ8CC,QAAQ,MACpB,YAAY,KAAK,aAAa,QAAS,YAAY,QAAQ,aAAa,QAE5D,MAAM,MI1DlB,YAAY,KAAK,aAAa,4BAA6B,YAAY,QAAQ,aAAa,4BJ6DhF,MAAO,uBI7DnB,YAAY,KAAK,aAAa,mBAAoB,YAAY,QAAQ,aAAa,mBJ6DvE,MAAO,uBI7DnB,YAAY,KAAK,aAAa,kBAAmB,YAAY,QAAQ,aAAa,kBJ6DtE,MAAO,uBI7DnB,YAAY,KAAK,aAAa,uBAAwB,YAAY,QAAQ,aAAa,uBJ6D3E,MAAO,uBAGnB,WAAW,OAAO,KAAK,cAAe,WAAW,OAAO,QAAQ,cAGpD,aR3DF,QQ4DE,WAAY,uBAExB,YAAY,KAAK,cAET,QAAe,kBACvB,YAAY,QAAQ,cAEZ,WAAY,MACZ,UAAW,QACX,QAAe,eAIvB,qBACI,QAAQ,aACR,YAAa,SACb,UAAW,QAAf,oBAAoB,OAEZ,MR9EE,SQ+EV,qBAAqB,IAEb,eAAe,OACf,aAAc,UK7FtB,UACI,WAAW,MACX,SAAU,MACV,IAAK,IACL,WAAY,wBACZ,KAAM,IACN,MAAO,IACP,UAAW,MACX,QAAQ,aACR,UAAW,MACX,OAAQ,KACR,QAAS,KACT,SAAS,OACT,cAAe,IfJX,kBeK8B,kCfA9B,eeA8B,kCfK9B,ceL8B,kCfU9B,aeV8B,kCfe9B,Uef8B,mCAAtC,UAAU,kBAEF,QAAS,iBACT,UAAW,OACX,MbLU,SaMlB,UAAU,gBAEF,QAAQ,mBACR,UAAW,SACnB,UAAU,kBAEF,WAAW,eACX,WAAY,QACZ,WAAW,MACX,QAAgB,gBAIxB,kBACI,SAAS,MACT,QAAS,KACT,IAAI,EACJ,KAAK,EACL,MAAM,KACN,OAAO,KACP,WAAW,aCvCf,OAAS,YACL,adUM,ScRV,YACI,MAAM,KACN,OAAO,eACP,cAAe,IACf,WAAW,MACX,QAAS,QhBCL,mBaJW,8BbSX,gBaTW,8BbwBX,WaxBW,+BGInB,YAAY,MAEJ,MAAM,KACN,UAAW,KAKnB,YAAY,KAAK,QAEL,QAAS,GACT,QAAQ,MACR,OAAQ,SAEpB,YAAY,MAAO,YAAY,MAEvB,QAAS,IACT,OAAQ,QACR,cAAc,IACd,SAAS,UAAjB,YAAY,KAAK,OAAQ,YAAY,KAAK,OAE9B,QAAS,GAArB,YAAY,KAAK,MAAM,OAAQ,YAAY,KAAK,MAAM,OAEtC,QAAS,EACT,WAAY,oBAE5B,YAAY,KAAK,OAAQ,YAAY,KAAK,OAE9B,QAAS,IACT,OAAO,QACP,QAAS,EACT,SAAS,SAET,MADO,OAEP,OAFO,OAGP,YAAY,SACZ,WAAW,SACX,KAAK,IACL,IAAI,IACJ,cAAc,MAE1B,YAAY,mBAEJ,QAAS,KACT,YAAY,IACZ,UAAU,QACV,cAAe,IACf,OAAQ,SAAhB,YAAY,kBAAkB,OAElB,WAAY,oBAExB,YAAY,KAEJ,QAAQ,KACR,YAAY,OACZ,eAAgB,UAChB,MdtDE,QcuDF,UAAW,QACX,cAAe,gBACvB,YAAY,KAAM,YAAY,KAEtB,QAAQ,UAChB,YAAY,KAEJ,WAAW,OACX,YAAY,IACZ,SAAS,SACT,UAAU,SAAlB,YAAY,IAAI,OAEJ,MAAM,SAAlB,YAAY,IAAI,MAAM,OAEN,QAAQ,EACR,WAAY,qBAE5B,YAAY,IAAI,OAMJ,OAAQ,SALpB,YAAY,IAAI,MAAM,OAEN,QAAQ,EACR,WAAY,oBAG5B,YAAY,IAAI,KAAM,YAAY,IAAI,KAE1B,YAAY,OACZ,MAAO,oBACnB,YAAY,IAAI,QAEJ,WAAW,MACX,Md3FE,Sc2Fd,YAAY,IAAI,OAAO,OAEP,QAAQ,EACR,WAAY,sBAG5B,YAAY,IAAI,OAAO,OAEP,QAAS,KAEzB,YAAY,IAAI,OAEJ,QAAS,IACT,OAAO,QACP,QAAS,EACT,SAAS,SAET,MADO,SAEP,OAFO,SAGP,YAAY,WACZ,WAAW,WACX,KAAK,IACL,IAAI,IACJ,cAAc,MAE1B,YAAY,OAAQ,YAAY,MAExB,MAAO,MACP,QAAQ,aACR,WAAW,OACX,UAAW,QACX,QAAQ,OACR,OAAO,QACP,cAAe,IACf,eAAgB,WAAxB,YAAY,MAAM,OAAQ,YAAY,KAAK,OAE/B,WAAY,oBAKxB,cACI,OAAO,EACP,YAAY,MACZ,WAAW,KACX,QAAQ,IACR,WAAW,MAAf,cAAc,aAEN,YAAa,QACb,UAAW,OACX,MAAO,MACf,cAAc,GAEN,OAAQ,IACR,QAAQ,cAIhB,SACI,WAAY,6BACZ,cAAe,IACf,QAAQ,aACR,QAAc,UACd,WAAW,OACX,SAAS,SACT,OAAO,QACP,WAAW,OAAf,SAAS,KAED,UAAW,QACX,WAAW,OACX,WAAW,MACX,MAAO,KACP,cAAe,OACf,YAAY,OACZ,eAAgB,WACxB,SAAS,KAED,UAAW,OACX,YAAY,OACZ,MdrKE,QcsKF,YAAa,KACrB,SAAS,OAED,YAAa,IACb,UAAW,OACX,eAAgB,WACxB,SAAS,QAED,WAAW,OAEX,MAAO,QACP,OAAQ,QACR,SAAS,SACT,IAAK,OACL,MAAO,OACP,WAAY,mBACZ,cAAc,KACd,QAAQ,aACR,WAA+B,uEAC/B,gBAAiB,QACjB,OAAO,QACP,QAAQ,GAAhB,SAAS,OAAO,OAEJ,iBAAkB,oBAG9B,QAAQ,OAAO,QAEH,QAAS,GC7MrB,mBACI,UAAW,QACX,YAAa,SACb,MfUc,QeTd,YAAa,UAGjB,YACI,MAAM,KACN,WAAW,SACX,cAAe,SAAnB,YAAY,GAEJ,WAAW,OACX,cAAc,eACd,eAAe,QACf,WAAY,0BAEpB,YAAY,EAAE,iBAAiB,GAEnB,WAAY,SAGxB,YAAY,EAAE,OAAO,OAET,WAAW,SAEvB,YAAY,OAEJ,WAAY,QACpB,YAAY,GAKJ,QAAS,QACT,cAAc,gBALtB,YAAY,EAAE,QAEF,WAAW,QAIvB,YAAY,iBAEJ,QAAe,iBACf,QAAQ,cAChB,YAAY,iBAEJ,WAAW,KACX,UAAW,QACX,QAAgB,eAAxB,YAAY,iBAAiB,IAEjB,aAAc,KAC1B,YAAY,iBAAiB,MAEjB,OAAO,eACP,QAAe,iBACf,cAAe,IACf,Mf3CD,Se2CX,YAAY,iBAAiB,KAAK,OAElB,QAAQ,EACR,af3CL,Se8CX,YAAY,kBAEJ,QAAQ,GAChB,YAAY,yBAEJ,WAAW,KACX,QAAQ,WAChB,YAAY,oBAGJ,UAAW,OACX,gBAAgB,KAChB,MAAO,KACP,cAAe,IACf,YAAa,UAArB,YAAY,mBAAmB,OAEnB,MfpEE,SeoEd,YAAY,mBAAmB,MAAM,QAErB,MfjEN,SewEV,oBACI,WAAW,MACX,QAAS,WAGb,mBACI,WAAW,KACX,WAAW,QACX,cAAc,OACd,QAAQ,EACR,MfhFc,QeiFd,UAAW,QAAf,mBAAmB,GAEX,QAAQ,aACR,aAAc,OACtB,mBAAmB,EAEX,Mf3FG,Qe4FH,gBAAgB,MAAxB,mBAAmB,CAAC,OAER,MfjGE,SesGd,eACI,cAAe,OAEnB,kBACI,UAAW,SACX,MAAO,QACP,QAAQ,aACR,aAAc,SCnHlB,cACI,WAAW,QAGf,kBACI,UAAW,MACX,WAAW,OACX,QAAS,KACT,cAAe,IACf,OAAQ,eACR,MhBDO,SLiBX,WsBIE,UCRU,KDSV,YACQ,KADR,aAES,KtBLP,QAAgB,eefpB,UAAU,OAEN,QAAQ,GACR,QAAQ,MACR,MAAM,MfcV,cQgCI,MAAO,KAGL,QAAS,MAeT,aAAsB,SACtB,MAAO,UgBvCX,YAA+B,WhBuCjC,aAAa,YAGL,aAAsB,GRjD9B,YsBNE,UtBO2B,MsBN3B,YACQ,KADR,aAES,KtBKP,WAAW,eACX,YAAa,OACb,cAAe,Qe3BnB,WAAW,OAEP,QAAQ,GACR,QAAQ,MACR,MAAM,Mf0BV,oBQoBI,MAAO,KAGL,QAAS,MAeT,aAAsB,SACtB,MAAO,WAAb,mBAAmB,YAGX,aAAsB,GRzC9B,oBAAoB,GAEZ,WAAY,UAIpB,iBQaI,MAAO,KAGL,QAAS,MAeT,aAAsB,SACtB,MAAO,WAAb,gBAAgB,YAGR,aAAsB,GR/B9B,cACI,UAAW,SACX,MK3Cc,QL4Cd,cAAe","file":"style.css","sourcesContent":["@import url(http://fonts.googleapis.com/css?family=Source+Sans+Pro:400,600,700,400italic);\n@import \"partials/vars\";\n@import \"partials/mixins\";\n@import \"partials/normalize\";\n@import \"bourbon/bourbon\";\n@import \"neat/neat\";\n$mobile: new-breakpoint(max-width 768px 4);\n\nbody {\n font-size: em(18px);\n @include font();\n color: $text-clr;\n @include media($mobile) {\n font-size: em(15px);\n }\n}\n@import \"partials/header\";\n@import \"partials/buttons\";\n@import \"partials/type\";\n@import \"partials/form\";\n@import \"partials/modal\";\n@import \"partials/datepicker\";\n@import \"partials/event\";\n@import \"partials/newevent\";\n@import \"partials/eventsuccess\";\n\n.container {\n @include outer-container();\n padding: em(30px) em(40px);\n}\n\n.main-content {\n @include span-columns(8);\n @include shift(2);\n}\n\n.rl-section {\n @include outer-container(800px);\n border-top:1px solid #ddd;\n padding-top: em(20px);\n margin-bottom: em(20px);\n}\n\n.rl-section-details {\n @include span-columns(3);\n h2 {\n margin-top: em(5px);\n }\n}\n\n.rl-section-main {\n @include span-columns(9);\n}\n\n.rl-page-desc {\n font-size: em(21px);\n color: $body-clr;\n margin-bottom: em(20px);\n}\n","/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\n\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n * user zoom.\n */\n\nhtml {\n font-family: sans-serif; /* 1 */\n -ms-text-size-adjust: 100%; /* 2 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n margin: 0;\n}\n\n/* HTML5 display definitions\n ========================================================================== */\n\n/**\n * Correct `block` display not defined for any HTML5 element in IE 8/9.\n * Correct `block` display not defined for `details` or `summary` in IE 10/11\n * and Firefox.\n * Correct `block` display not defined for `main` in IE 11.\n */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; /* 1 */\n vertical-align: baseline; /* 2 */\n}\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n/**\n * Address `[hidden]` styling not present in IE 8/9/10.\n * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n */\n\n[hidden],\ntemplate {\n display: none;\n}\n\n/* Links\n ========================================================================== */\n\n/**\n * Remove the gray background color from active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * Improve readability when focused and also mouse hovered in all browsers.\n */\n\na:active,\na:hover {\n outline: 0;\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n */\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n */\n\nb,\nstrong {\n font-weight: bold;\n}\n\n/**\n * Address styling not present in Safari and Chrome.\n */\n\ndfn {\n font-style: italic;\n}\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari, and Chrome.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove border when inside `a` element in IE 8/9/10.\n */\n\nimg {\n border: 0;\n}\n\n/**\n * Correct overflow not hidden in IE 9/10/11.\n */\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari.\n */\n\nfigure {\n margin: 1em 40px;\n}\n\n/**\n * Address differences between Firefox and other browsers.\n */\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n/**\n * Contain overflow in all browsers.\n */\n\npre {\n overflow: auto;\n}\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n\n/**\n * 1. Correct color not being inherited.\n * Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; /* 1 */\n font: inherit; /* 2 */\n margin: 0; /* 3 */\n}\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10/11.\n */\n\nbutton {\n overflow: visible;\n}\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n * Correct `select` style inheritance in Firefox.\n */\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n * and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n * `input` and others.\n */\n\nbutton,\nhtml input[type=\"button\"], /* 1 */\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; /* 2 */\n cursor: pointer; /* 3 */\n}\n\n/**\n * Re-set default cursor for disabled elements.\n */\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\ninput {\n line-height: normal;\n}\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n * (include `-moz` to future-proof).\n */\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; /* 2 */\n box-sizing: content-box;\n}\n\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * Define consistent border, margin, and padding.\n */\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9/10/11.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n\nlegend {\n border: 0; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Remove default vertical scrollbar in IE 8/9/10/11.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\n\noptgroup {\n font-weight: bold;\n}\n\n/* Tables\n ========================================================================== */\n\n/**\n * Remove most spacing between table cells.\n */\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","@if $border-box-sizing == true {\n html { // http://bit.ly/1qk2tVR\n @include box-sizing(border-box);\n }\n\n * {\n &, &:before, &:after {\n @include box-sizing(inherit);\n }\n }\n}\n","//************************************************************************//\n// Example: @include prefixer(border-radius, $radii, webkit ms spec);\n//************************************************************************//\n// Variables located in /settings/_prefixer.scss\n\n@mixin prefixer ($property, $value, $prefixes) {\n @each $prefix in $prefixes {\n @if $prefix == webkit {\n @if $prefix-for-webkit {\n -webkit-#{$property}: $value;\n }\n }\n @else if $prefix == moz {\n @if $prefix-for-mozilla {\n -moz-#{$property}: $value;\n }\n }\n @else if $prefix == ms {\n @if $prefix-for-microsoft {\n -ms-#{$property}: $value;\n }\n }\n @else if $prefix == o {\n @if $prefix-for-opera {\n -o-#{$property}: $value;\n }\n }\n @else if $prefix == spec {\n @if $prefix-for-spec {\n #{$property}: $value;\n }\n }\n @else {\n @warn \"Unrecognized prefix: #{$prefix}\";\n }\n }\n}\n\n@mixin disable-prefix-for-all() {\n $prefix-for-webkit: false !global;\n $prefix-for-mozilla: false !global;\n $prefix-for-microsoft: false !global;\n $prefix-for-opera: false !global;\n $prefix-for-spec: false !global;\n}\n","@mixin font($font : $primary-font){\n font-family: $font, $helvetica;\n}\n","/****** BASIC *******/\n$em-base: 16px;\n$primary-font: \"Source Sans Pro\";\n/****** BASIC *******/\n\n/****** COLORS *******/\n$primary-clr: #60DF9D;\n$dark-gray-clr: #969FA9;\n$light-gray-clr: #f9f9f9;\n$text-clr: #3D4752;\n$danger-clr: #E55A5A;\n$red-clr: #E55A84;\n$blue-clr: #5AC4E5;\n$medium-gray-clr: #798490;\n$body-clr: $medium-gray-clr;\n/****** COLORS *******/\n","/// Outputs a media-query block with an optional grid context (the total number of columns used in the grid).\n///\n/// @param {List} $query\n/// A list of media query features and values, where each `$feature` should have a corresponding `$value`.\n/// For a list of valid values for `$feature`, click [here](http://www.w3.org/TR/css3-mediaqueries/#media1).\n///\n/// If there is only a single `$value` in `$query`, `$default-feature` is going to be used.\n///\n/// The number of total columns in the grid can be set by passing `$columns` at the end of the list (overrides `$total-columns`).\n///\n///\n/// @param {Number (unitless)} $total-columns ($grid-columns)\n/// - Number of columns to use in the new grid context. Can be set as a shorthand in the first parameter.\n///\n/// @example scss - Usage\n/// .responsive-element {\n/// @include media(769px) {\n/// @include span-columns(6);\n/// }\n/// }\n///\n/// .new-context-element {\n/// @include media(min-width 320px max-width 480px, 6) {\n/// @include span-columns(6);\n/// }\n/// }\n///\n/// @example css - CSS Output\n/// @media screen and (min-width: 769px) {\n/// .responsive-element {\n/// display: block;\n/// float: left;\n/// margin-right: 2.35765%;\n/// width: 48.82117%;\n/// }\n///\n/// .responsive-element:last-child {\n/// margin-right: 0;\n/// }\n/// }\n///\n/// @media screen and (min-width: 320px) and (max-width: 480px) {\n/// .new-context-element {\n/// display: block;\n/// float: left;\n/// margin-right: 4.82916%;\n/// width: 100%;\n/// }\n///\n/// .new-context-element:last-child {\n/// margin-right: 0;\n/// }\n/// }\n\n@mixin media($query: $feature $value $columns, $total-columns: $grid-columns) {\n @if length($query) == 1 {\n @media screen and ($default-feature: nth($query, 1)) {\n $default-grid-columns: $grid-columns;\n $grid-columns: $total-columns !global;\n @content;\n $grid-columns: $default-grid-columns !global;\n }\n }\n\n @else {\n $loop-to: length($query);\n $media-query: 'screen and ';\n $default-grid-columns: $grid-columns;\n $grid-columns: $total-columns !global;\n\n @if not is-even(length($query)) {\n $grid-columns: nth($query, $loop-to) !global;\n $loop-to: $loop-to - 1;\n }\n\n $i: 1;\n @while $i <= $loop-to {\n $media-query: $media-query + '(' + nth($query, $i) + ': ' + nth($query, $i + 1) + ') ';\n\n @if ($i + 1) != $loop-to {\n $media-query: $media-query + 'and ';\n }\n\n $i: $i + 2;\n }\n\n @media #{$media-query} {\n @content;\n $grid-columns: $default-grid-columns !global;\n }\n }\n}\n",".header {\n @include span-columns(3);\n .fixed {\n position: fixed;\n }\n .primary-section {\n margin: em(35px) 0;\n }\n .secondary-section {\n\n }\n .nav-links {\n font-size: em(16px);\n font-weight: normal;\n line-height: em(24px);\n .nav-link {\n display:block;\n text-decoration:none;\n color: $dark-gray-clr;\n &:hover {\n color: $text-clr;\n }\n &.active {\n color: $blue-clr;\n }\n }\n }\n}\n","/// Specifies the number of columns an element should span. If the selector is nested the number of columns of its parent element should be passed as an argument as well.\n///\n/// @param {List} $span\n/// A list containing `$columns`, the unitless number of columns the element spans (required), and `$container-columns`, the number of columns the parent element spans (optional).\n///\n/// If only one value is passed, it is assumed that it's `$columns` and that that `$container-columns` is equal to `$grid-columns`, the total number of columns in the grid.\n///\n/// The values can be separated with any string such as `of`, `/`, etc.\n///\n/// @param {String} $display (block)\n/// Sets the display property of the element. By default it sets the display propert of the element to `block`.\n///\n/// If passed `block-collapse`, it also removes the margin gutter by adding it to the element width.\n///\n/// If passed `table`, it sets the display property to `table-cell` and calculates the width of the element without taking gutters into consideration. The result does not align with the block-based grid.\n///\n/// @example scss - Usage\n/// .element {\n/// @include span-columns(6);\n///\n/// .nested-element {\n/// @include span-columns(2 of 6);\n/// }\n/// }\n///\n/// @example css - CSS Output\n/// .element {\n/// display: block;\n/// float: left;\n/// margin-right: 2.35765%;\n/// width: 48.82117%;\n/// }\n///\n/// .element:last-child {\n/// margin-right: 0;\n/// }\n///\n/// .element .nested-element {\n/// display: block;\n/// float: left;\n/// margin-right: 4.82916%;\n/// width: 30.11389%;\n/// }\n///\n/// .element .nested-element:last-child {\n/// margin-right: 0;\n/// }\n\n@mixin span-columns($span: $columns of $container-columns, $display: block) {\n $columns: nth($span, 1);\n $container-columns: container-span($span);\n\n $parent-columns: get-parent-columns($container-columns) !global;\n\n $direction: get-direction($layout-direction, $default-layout-direction);\n $opposite-direction: get-opposite-direction($direction);\n\n $display-table: is-display-table($container-display-table, $display);\n\n @if $display-table {\n display: table-cell;\n width: percentage($columns / $container-columns);\n } @else {\n float: #{$opposite-direction};\n\n @if $display != no-display {\n display: block;\n }\n\n @if $display == collapse {\n @include -neat-warn(\"The 'collapse' argument will be deprecated. Use 'block-collapse' instead.\");\n }\n\n @if $display == collapse or $display == block-collapse {\n width: flex-grid($columns, $container-columns) + flex-gutter($container-columns);\n\n &:last-child {\n width: flex-grid($columns, $container-columns);\n }\n\n } @else {\n margin-#{$direction}: flex-gutter($container-columns);\n width: flex-grid($columns, $container-columns);\n\n &:last-child {\n margin-#{$direction}: 0;\n }\n }\n }\n}\n",".btn-flat {\n color:white;\n background: $primary-clr;\n text-decoration:none;\n @include pad(em(10px) em(20px));\n border-radius: 3px;\n}\n\n.btn-primary {\n border:1px solid #E0E3E9;\n border-radius: 2px;\n box-shadow: inset 0 1px 0 white, 0 1px 1px rgba(black, 0.1);\n @include background-image(linear-gradient(#FAFAFA, #EFF1F3));\n font-size: em(12px);\n font-weight:600;\n color: $dark-gray-clr;\n text-decoration:none;\n padding: em(8px) em(15px);\n &.disabled {\n cursor:default;\n opacity: 0.5;\n &:active {\n box-shadow: inset 0 1px 0 white, 0 1px 1px rgba(black, 0.1);\n }\n }\n &.danger {\n color: $danger-clr;\n }\n &:focus {\n outline:0;\n }\n &:active {\n box-shadow: inset 0 0 5px rgba(black, 0.1);\n }\n}\n","/// Adds padding to the element.\n///\n/// @param {List} $padding (flex-gutter())\n/// A list of padding value(s) to use. Passing `default` in the list will result in using the gutter width as a padding value.\n///\n/// @example scss - Usage\n/// .element {\n/// @include pad(30px -20px 10px default);\n/// }\n///\n/// @example css - CSS Output\n/// .element {\n/// padding: 30px -20px 10px 2.35765%;\n/// }\n\n@mixin pad($padding: flex-gutter()) {\n $padding-list: null;\n @each $value in $padding {\n $value: if($value == 'default', flex-gutter(), $value);\n $padding-list: join($padding-list, $value);\n }\n padding: $padding-list;\n}\n","//************************************************************************//\n// Background-image property for adding multiple background images with\n// gradients, or for stringing multiple gradients together.\n//************************************************************************//\n\n@mixin background-image($images...) {\n $webkit-images: ();\n $spec-images: ();\n\n @each $image in $images {\n $webkit-image: ();\n $spec-image: ();\n\n @if (type-of($image) == string) {\n $url-str: str-slice($image, 0, 3);\n $gradient-type: str-slice($image, 0, 6);\n\n @if $url-str == \"url\" {\n $webkit-image: $image;\n $spec-image: $image;\n }\n\n @else if $gradient-type == \"linear\" {\n $gradients: _linear-gradient-parser($image);\n $webkit-image: map-get($gradients, webkit-image);\n $spec-image: map-get($gradients, spec-image);\n }\n\n @else if $gradient-type == \"radial\" {\n $gradients: _radial-gradient-parser($image);\n $webkit-image: map-get($gradients, webkit-image);\n $spec-image: map-get($gradients, spec-image);\n }\n }\n\n $webkit-images: append($webkit-images, $webkit-image, comma);\n $spec-images: append($spec-images, $spec-image, comma);\n }\n\n background-image: $webkit-images;\n background-image: $spec-images;\n}\n","h1 {\n font-weight:bold;\n font-size: em(36px);\n color: $text-clr;\n small {\n font-size: em(12px);\n }\n}\n\nh2 {\n font-weight:600;\n font-size:em(14px);\n color: $text-clr;\n padding-bottom:5px;\n small {\n margin-left: em(10px);\n display:inline-block;\n }\n small, small a {\n font-size: em(12px);\n color: $dark-gray-clr;\n font-weight:normal;\n }\n small a {\n text-decoration:none;\n &:hover {\n color: $red-clr;\n border-bottom: 1px solid #ddd;\n }\n }\n}\n\np {\n color: $body-clr;\n a {\n color: $primary-clr;\n }\n}\n",".form-container {\n width:100%;\n}\n\n.form-row {\n @include row();\n margin-bottom:10px;\n @include user-select(none);\n}\n\n.form-col {\n @include span-columns(6);\n &.padded {\n &:first-child {\n padding: 0 20px 0 0;\n }\n &:last-child {\n padding: 0 0 0 20px;\n }\n }\n}\n\n.form-big-col {\n @include span-columns(12);\n}\n\n.form-small-col {\n @include span-columns(2);\n}\n\n.form-error-msg {\n color: $red-clr;\n font-size: em(12px);\n padding: em(5px);\n}\n\n.form-group {\n & > label {\n font-size:em(12px);\n color: $dark-gray-clr;\n display:block;\n line-height:em(30px);\n &:after {\n content: \"*\";\n color: $red-clr;\n margin-left:5px;\n }\n &.optional:after {\n content: \"\";\n }\n }\n input.form-control, textarea.form-control {\n border-radius: 3px;\n border: 1px solid #ddd;\n font-size:em(18px);\n @include transition(border-color 0.1s ease-in-out);\n &:focus {\n border-color: $blue-clr;\n outline:none;\n }\n &.extend {\n width:100%;\n }\n @include placeholder {\n color: rgba($dark-gray-clr,0.7);\n }\n }\n &.error {\n input.form-control, textarea.form-control {\n\n border-color: $red-clr;\n background: rgba($red-clr,0.02);\n }\n }\n input.form-control {\n padding: em(5px) em(10px);\n }\n textarea.form-control {\n min-height: 100px;\n font-size: em(18px);\n padding: em(8px) em(10px);\n }\n}\n\n.form-submit-message {\n display:inline-block;\n margin-left: em(5px);\n font-size: em(12px);\n &.error {\n color: $red-clr;\n }\n img {\n vertical-align:middle;\n margin-right: em(5px);\n }\n}\n","/// Designates the element as a row of columns in the grid layout. It clears the floats on the element and sets its display property. Rows can't be nested, but there can be more than one row element—with different display properties—per layout.\n///\n/// @param {String} $display (default)\n/// Sets the display property of the element and the display context that will be used by its children. Can be `block` or `table`.\n///\n/// @param {String} $direction ($default-layout-direction)\n/// Sets the layout direction. Can be `LTR` (left-to-right) or `RTL` (right-to-left).\n///\n/// @example scss - Usage\n/// .element {\n/// @include row();\n/// }\n///\n/// @example css - CSS Output\n/// .element {\n/// *zoom: 1;\n/// display: block;\n/// }\n///\n/// .element:before, .element:after {\n/// content: \" \";\n/// display: table;\n/// }\n///\n/// .element:after {\n/// clear: both;\n/// }\n\n@mixin row($display: default, $direction: $default-layout-direction) {\n @if $direction != $default-layout-direction {\n @include -neat-warn(\"The $direction argument will be deprecated in future versions in favor of the direction(){...} mixin.\");\n }\n\n $layout-direction: $direction !global;\n\n @if $display != default {\n @include -neat-warn(\"The $display argument will be deprecated in future versions in favor of the display(){...} mixin.\");\n }\n\n @if $display == table {\n display: table;\n @include fill-parent;\n table-layout: fixed;\n $container-display-table: true !global;\n }\n\n @else {\n @include clearfix;\n display: block;\n $container-display-table: false !global;\n }\n}\n\n","// Modern micro clearfix provides an easy way to contain floats without adding additional markup.\n//\n// Example usage:\n//\n// // Contain all floats within .wrapper\n// .wrapper {\n// @include clearfix;\n// .content,\n// .sidebar {\n// float : left;\n// }\n// }\n\n@mixin clearfix {\n &:after {\n content:\"\";\n display:table;\n clear:both;\n }\n}\n\n// Acknowledgements\n// Beat *that* clearfix: [Thierry Koblentz](http://www.css-101.org/articles/clearfix/latest-new-clearfix-so-far.php)\n","// Shorthand mixin. Supports multiple parentheses-deliminated values for each variable.\n// Example: @include transition (all 2s ease-in-out);\n// @include transition (opacity 1s ease-in 2s, width 2s ease-out);\n// @include transition-property (transform, opacity);\n\n@mixin transition ($properties...) {\n // Fix for vendor-prefix transform property\n $needs-prefixes: false;\n $webkit: ();\n $moz: ();\n $spec: ();\n\n // Create lists for vendor-prefixed transform\n @each $list in $properties {\n @if nth($list, 1) == \"transform\" {\n $needs-prefixes: true;\n $list1: -webkit-transform;\n $list2: -moz-transform;\n $list3: ();\n\n @each $var in $list {\n $list3: join($list3, $var);\n\n @if $var != \"transform\" {\n $list1: join($list1, $var);\n $list2: join($list2, $var);\n }\n }\n\n $webkit: append($webkit, $list1);\n $moz: append($moz, $list2);\n $spec: append($spec, $list3);\n }\n\n // Create lists for non-prefixed transition properties\n @else {\n $webkit: append($webkit, $list, comma);\n $moz: append($moz, $list, comma);\n $spec: append($spec, $list, comma);\n }\n }\n\n @if $needs-prefixes {\n -webkit-transition: $webkit;\n -moz-transition: $moz;\n transition: $spec;\n }\n @else {\n @if length($properties) >= 1 {\n @include prefixer(transition, $properties, webkit moz spec);\n }\n\n @else {\n $properties: all 0.15s ease-out 0s;\n @include prefixer(transition, $properties, webkit moz spec);\n }\n }\n}\n\n@mixin transition-property ($properties...) {\n -webkit-transition-property: transition-property-names($properties, 'webkit');\n -moz-transition-property: transition-property-names($properties, 'moz');\n transition-property: transition-property-names($properties, false);\n}\n\n@mixin transition-duration ($times...) {\n @include prefixer(transition-duration, $times, webkit moz spec);\n}\n\n@mixin transition-timing-function ($motions...) {\n// ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier()\n @include prefixer(transition-timing-function, $motions, webkit moz spec);\n}\n\n@mixin transition-delay ($times...) {\n @include prefixer(transition-delay, $times, webkit moz spec);\n}\n","@mixin placeholder {\n $placeholders: \":-webkit-input\" \":-moz\" \"-moz\" \"-ms-input\";\n @each $placeholder in $placeholders {\n &:#{$placeholder}-placeholder {\n @content;\n }\n }\n}\n",".rl-modal {\n background:white;\n position: fixed;\n top: 50%;\n box-shadow: 0 0 5px rgba(black, 0.5);\n left: 50%;\n width: 50%;\n max-width: 400px;\n display:inline-block;\n min-width: 200px;\n height: auto;\n z-index: 2000;\n overflow:hidden;\n border-radius: 5px;\n @include transform(translateX(-50%) translateY(-50%));\n .rl-modal-message {\n padding: 0 20px 20px 20px;\n font-size: em(12px);\n color: $body-clr;\n }\n .rl-modal-title {\n padding:20px 20px 5px 20px;\n font-size: em(18px);\n }\n .rl-modal-actions {\n border-top:1px solid #ddd;\n background: #F9FAFA;\n text-align:right;\n padding: em(10px) em(20px);\n }\n}\n\n.rl-modal-overlay {\n position:fixed;\n z-index: 1000;\n top:0;\n left:0;\n width:100%;\n height:100%;\n background:transparent;\n\n}\n",".error > .datepicker {\n border-color: $red-clr;\n}\n.datepicker {\n width:100%;\n border:1px solid #eee;\n border-radius: 3px;\n background:white;\n padding: em(10px);\n @include transition(border-color 0.1s ease-in-out);\n table {\n width:100%;\n font-size: em($em-base);\n }\n thead {\n\n }\n tbody {\n &:before {\n content: '';\n display:block;\n height: em(10px);\n }\n }\n .prev, .next {\n opacity: 0.5;\n cursor: pointer;\n border-radius:5px;\n position:relative;\n &:hover {\n opacity: 1;\n &:after {\n opacity: 1;\n background: rgba($text-clr, 0.1);\n }\n }\n &:after {\n content: \" \";\n cursor:pointer;\n opacity: 0;\n position:absolute;\n $size: em(28px);\n width:$size;\n height:$size;\n margin-left:$size * -0.5;\n margin-top:$size * -0.5;\n left:50%;\n top:50%;\n border-radius:100%;\n }\n }\n .datepicker-switch {\n padding: 10px;\n font-weight:600;\n font-size:em(18px);\n border-radius: 3px;\n cursor: pointer;\n &:hover {\n background: rgba($text-clr, 0.1);\n }\n }\n .dow {\n padding:10px;\n font-weight:normal;\n text-transform: uppercase;\n color: $red-clr;\n font-size: em(14px);\n border-bottom: 2px solid #eee;\n }\n .dow, .day {\n padding:em(15px);\n }\n .day {\n text-align:center;\n font-weight:600;\n position:relative;\n font-size:em(14px);\n &.today {\n color:#818176;\n &:after {\n opacity:1;\n background: rgba(yellow, 0.1);\n }\n }\n &:hover {\n &:after {\n opacity:1;\n background: rgba($text-clr,0.1);\n }\n cursor: pointer;\n }\n &.new, &.old {\n font-weight:normal;\n color: rgba($text-clr,0.3);\n }\n &.active {\n background:white;\n color: $primary-clr;\n &:after {\n opacity:1;\n background: rgba($primary-clr,0.1);\n }\n }\n &:active {\n &:after {\n opacity: 0.8;\n }\n }\n &:after {\n content: \" \";\n cursor:pointer;\n opacity: 0;\n position:absolute;\n $size: em(35px);\n width:$size;\n height:$size;\n margin-left:$size * -0.5;\n margin-top:$size * -0.5;\n left:50%;\n top:50%;\n border-radius:100%;\n }\n }\n .month, .year {\n width: 33.3%;\n display:inline-block;\n text-align:center;\n font-size: em(14px);\n padding:em(20px);\n cursor:pointer;\n border-radius: 3px;\n text-transform: uppercase;\n &:hover {\n background: rgba($text-clr, 0.1);\n }\n }\n}\n\n.daticon-list {\n margin:0;\n margin-left:-10px;\n list-style:none;\n padding:5px;\n text-align:left;\n .placeholder {\n line-height: em(18px);\n font-size: em(12px);\n color: #ccc;\n }\n li {\n margin: 5px;\n display:inline-block;\n }\n}\n\n.daticon {\n box-shadow: 0 0 0 1px rgba($text-clr,0.1);\n border-radius: 3px;\n display:inline-block;\n padding:em(8px) em(16px);\n text-align:center;\n position:relative;\n cursor:default;\n background:white;\n .dow {\n font-size: em(6px);\n margin-top:em(-24px);\n background:white;\n color: #aaa;\n margin-bottom: em(4px);\n font-weight:normal;\n text-transform: uppercase;\n }\n .day {\n font-size: em(20px);\n font-weight:normal;\n color: $red-clr;\n line-height: em(16px);\n }\n .month {\n font-weight: 600;\n font-size: em(12px);\n text-transform: uppercase;\n }\n .delete {\n text-align:center;\n $size: 18px;\n width: em($size);\n height: em($size);\n position:absolute;\n top: $size * -0.4;\n right: $size * -0.4;\n background: rgba($text-clr,0.1);\n border-radius:100%;\n display:inline-block;\n background: rgba($text-clr, 0.1) url(../images/close@2x.png) no-repeat center center;\n background-size: 7px 8px;\n cursor:pointer;\n opacity:0;\n &:hover {\n background-color: rgba($text-clr, 0.2)\n }\n }\n &:hover {\n .delete {\n opacity: 1;\n }\n }\n}\n",".event-description {\n font-size: em(18px);\n line-height: em(21px);\n color: $body-clr;\n white-space: pre-wrap;\n}\n\n.event-poll {\n width:100%;\n margin-top:em(-10px);\n margin-bottom: em(10px);\n th {\n text-align:center;\n border-bottom:1px solid #ddd;\n padding-bottom:em(10px);\n box-shadow: 0 3px 0 rgba(black, 0.05);\n }\n tr:nth-child(even){\n td {\n background: #F9FAFA;\n }\n }\n tr:hover {\n .hover {\n visibility:visible;\n }\n }\n .hover {\n visibility: hidden;\n }\n td {\n &.center {\n text-align:center;\n }\n padding: em(10px);\n border-bottom:1px solid #ddd;\n }\n .event-poll-name {\n padding: em(6px) em(11px);\n display:inline-block;\n }\n .event-poll-user {\n text-align:left;\n font-size: em(14px);\n padding: em(12px) em(20px);\n img {\n margin-right: 5px;\n }\n input {\n border:1px solid #ddd;\n padding: em(5px) em(10px);\n border-radius: 3px;\n color: $text-clr;\n &:focus {\n outline:0;\n border-color: $blue-clr;\n }\n }\n }\n .event-poll-input {\n padding:0;\n }\n .event-poll-participants {\n text-align:left;\n padding:0 em(10px);\n }\n\n .event-entry-button {\n font-size: em(12px);\n text-decoration:none;\n color: #aaa;\n border-radius: 3px;\n margin-left: em(5px);\n &:hover {\n color: $primary-clr;\n &.danger {\n color: $red-clr;\n }\n }\n }\n}\n\n\n.event-poll-buttons {\n text-align:right;\n padding: 0 em(10px);\n}\n\n.event-detail-list {\n list-style:none;\n margin-top:em(-20px);\n margin-bottom:em(20px);\n padding:0;\n color: $body-clr;\n font-size: em(12px);\n li {\n display:inline-block;\n margin-right: em(40px);\n }\n a {\n color: $text-clr;\n text-decoration:none;\n &:hover {\n color: $primary-clr;\n }\n }\n}\n\n.event-details {\n margin-bottom: em(40px);\n}\n.event-button-tip {\n font-size: em(11px);\n color: #C4CAD2;\n display:inline-block;\n margin-right: em(10px);\n}\n",".form-success {\n text-align:center;\n}\n\n.form-success-url {\n font-size: em(24px);\n text-align:center;\n padding: 10px;\n border-radius: 3px;\n border: 1px solid #eee;\n color: $text-clr;\n}\n","/// Makes an element a outer container by centring it in the viewport, clearing its floats, and setting its `max-width`.\n/// Although optional, using `outer-container` is recommended. The mixin can be called on more than one element per page, as long as they are not nested.\n///\n/// @param {Number (unit)} $local-max-width ($max-width)\n/// Max width to be applied to the element. Can be a percentage or a measure.\n///\n/// @example scss - Usage\n/// .element {\n/// @include outer-container(100%);\n/// }\n///\n/// @example css - CSS Output\n/// .element {\n/// *zoom: 1;\n/// max-width: 100%;\n/// margin-left: auto;\n/// margin-right: auto;\n/// }\n///\n/// .element:before, .element:after {\n/// content: \" \";\n/// display: table;\n/// }\n///\n/// .element:after {\n/// clear: both;\n/// }\n\n@mixin outer-container($local-max-width: $max-width) {\n @include clearfix;\n max-width: $local-max-width;\n margin: {\n left: auto;\n right: auto;\n }\n}\n","/// Sets the relative width of a single grid column. The unit used should be the same one used to define `$gutter`. To learn more about golden-ratio() see [Bourbon docs](http://bourbon.io/docs/#golden-ratio). Set with a `!global` flag.\n///\n/// @type Number (Unit)\n\n$column: golden-ratio(1em, 3) !default;\n\n/// Sets the relative width of a single grid gutter. The unit used should be the same one used to define `$column`. To learn more about golden-ratio() see [Bourbon docs](http://bourbon.io/docs/#golden-ratio). Set with the `!global` flag.\n///\n/// @type Number (Unit)\n\n$gutter: golden-ratio(1em, 1) !default;\n\n/// Sets the total number of columns in the grid. Its value can be overridden inside a media query using the `media()` mixin. Set with the `!global` flag.\n///\n/// @type Number (Unitless)\n\n$grid-columns: 12 !default;\n\n/// Sets the max-width property of the element that includes `outer-container()`. To learn more about `em()` see [Bourbon docs](http://bourbon.io/docs/#px-to-em). Set with the `!global` flag.\n///\n/// @type Number (Unit)\n///\n$max-width: em(1088) !default;\n\n/// When set to true, it sets the box-sizing property of all elements to `border-box`. Set with a `!global` flag.\n///\n/// @type Bool\n///\n/// @example css - CSS Output\n/// html {\n/// -webkit-box-sizing: border-box;\n/// -moz-box-sizing: border-box;\n/// box-sizing: border-box; }\n///\n/// *, *:before, *:after {\n/// -webkit-box-sizing: inherit;\n/// -moz-box-sizing: inherit;\n/// box-sizing: inherit;\n/// }\n\n$border-box-sizing: true !default;\n\n/// Sets the default [media feature](http://www.w3.org/TR/css3-mediaqueries/#media) that `media()` and `new-breakpoint()` revert to when only a breakpoint value is passed. Set with a `!global` flag.\n///\n/// @type String\n\n$default-feature: min-width; // Default @media feature for the breakpoint() mixin\n\n///Sets the default layout direction of the grid. Can be `LTR` or `RTL`. Set with a `!global` flag.\n///\n///@type String\n\n$default-layout-direction: LTR !default;\n","/// Translates an element horizontally by a number of columns. Positive arguments shift the element to the active layout direction, while negative ones shift it to the opposite direction.\n///\n/// @param {Number (unitless)} $n-columns (1)\n/// Number of columns by which the element shifts.\n///\n/// @example scss - Usage\n/// .element {\n/// @include shift(-3);\n/// }\n///\n/// @example css - CSS output\n/// .element {\n/// margin-left: -25.58941%;\n/// }\n\n@mixin shift($n-columns: 1) {\n @include shift-in-context($n-columns);\n}\n\n/// Translates an element horizontally by a number of columns, in a specific nesting context.\n///\n/// @param {List} $shift\n/// A list containing the number of columns to shift (`$columns`) and the number of columns of the parent element (`$container-columns`).\n///\n/// The two values can be separated with any string such as `of`, `/`, etc.\n///\n/// @example scss - Usage\n/// .element {\n/// @include shift(-3 of 6);\n/// }\n///\n/// @example css - CSS output\n/// .element {\n/// margin-left: -52.41458%;\n/// }\n\n@mixin shift-in-context($shift: $columns of $container-columns) {\n $n-columns: nth($shift, 1);\n $parent-columns: container-shift($shift) !global;\n\n $direction: get-direction($layout-direction, $default-layout-direction);\n $opposite-direction: get-opposite-direction($direction);\n\n margin-#{$opposite-direction}: $n-columns * flex-grid(1, $parent-columns) + $n-columns * flex-gutter($parent-columns);\n\n // Reset nesting context\n $parent-columns: $grid-columns !global;\n}\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/public/js/controllers/editevent.controller.js b/public/js/controllers/editevent.controller.js index 7279b97fd..bd05f9d9a 100644 --- a/public/js/controllers/editevent.controller.js +++ b/public/js/controllers/editevent.controller.js @@ -1,5 +1,5 @@ angular.module('rallly') -.controller('EditEventCtrl', function($scope, $http, $state, $timeout, Event){ +.controller('EditEventCtrl', function($scope, $http, $state, $timeout, Event, ConfirmModal){ var id = $state.params.id $scope.event = Event.get({id:id}, function(data){ var dates = []; @@ -20,16 +20,23 @@ angular.module('rallly') $scope.submit = function(){ if ($scope.didChange()){ if ($scope.didChangeDates() ){ - if (confirm("Changing the dates will reset all entries by the participants. Are you sure you want to proceed?")){ - update(); - } + var modal = new ConfirmModal({ + 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 : true, + confirm : function(){ + update(); + } + }); + modal.show(); + } else { update(); } } } var update = function(){ - $scope.event.participants = []; Event.update({ id : id }, $scope.event, diff --git a/public/js/controllers/event.controller.js b/public/js/controllers/event.controller.js index 6f8c8ff53..1ccc8066a 100644 --- a/public/js/controllers/event.controller.js +++ b/public/js/controllers/event.controller.js @@ -1,5 +1,5 @@ angular.module('rallly') -.controller('EventCtrl', function($scope, $http, $state, Event, Participant){ +.controller('EventCtrl', function($scope, $http, $state, Event, Participant, ConfirmModal){ $(".nav-link").removeClass('active'); var id = $state.params.id; $scope.participant = {}; @@ -13,12 +13,21 @@ angular.module('rallly') $state.go('notfound'); }); $scope.delete = function(participant){ - if (confirm("Are you sure you want to remove "+participant.name+"?")){ - Participant.remove({ id : id , pid : participant._id }, function(event){ - $scope.event = event; - }); - } + var modal = new ConfirmModal({ + title : 'Delete "'+participant.name+'"?', + message : 'Are you sure you want to remove '+participant.name+' from the poll?', + confirmText : 'Yes - delete', + cancelText : 'No - nevermind', + isDestructive : true, + confirm : function(){ + Participant.remove({ id : id , pid : participant._id }, function(event){ + $scope.event = event; + }); + } + }); + modal.show(); } + $scope.defaults = []; $scope.editEvent = function(){ @@ -46,4 +55,6 @@ angular.module('rallly') $scope.participant = {}; }); } +}).controller('DeleteModalCtrl', function(){ + }); diff --git a/public/js/controllers/newevent.controller.js b/public/js/controllers/newevent.controller.js index 821a5d3b0..4154110b9 100644 --- a/public/js/controllers/newevent.controller.js +++ b/public/js/controllers/newevent.controller.js @@ -25,7 +25,7 @@ angular.module('rallly') restrict : 'A', require : 'ngModel', link : function(scope, el, attrs, ngModel){ - $(el).datepicker({ + angular.element(el).datepicker({ multidate : true, todayHighlight: true, format : 'dd/mm/yyyy' @@ -40,10 +40,10 @@ angular.module('rallly') }); scope.clearDates = function(){ - $(el).datepicker('setDate', null) + angular.element(el).datepicker('setDate', null) }; scope.unsetDate = function(date){ - $(el).datepicker('setDates', scope.event.dates.filter(function(el){ + angular.element(el).datepicker('setDates', scope.event.dates.filter(function(el){ return el != date; })); }; diff --git a/public/js/filters/elapsed.filter.js b/public/js/filters/elapsed.filter.js new file mode 100644 index 000000000..85d74136a --- /dev/null +++ b/public/js/filters/elapsed.filter.js @@ -0,0 +1,28 @@ +angular.module('rallly') +.filter('elapsed', function(){ + return function(date){ + if (!date) return; + var time = Date.parse(date), + timeNow = new Date().getTime(), + difference = timeNow - time, + seconds = Math.floor(difference / 1000), + minutes = Math.floor(seconds / 60), + hours = Math.floor(minutes / 60), + days = Math.floor(hours / 24); + if (days > 1) { + return days + " days ago"; + } else if (days == 1) { + return "1 day ago" + } else if (hours > 1) { + return hours + " hours ago"; + } else if (hours == 1) { + return "an hour ago"; + } else if (minutes > 1) { + return minutes + " minutes ago"; + } else if (minutes == 1){ + return "a minute ago"; + } else { + return "a few seconds ago"; + } + } +}) diff --git a/public/js/main.js b/public/js/main.js index 88a68b16d..c3adb5404 100644 --- a/public/js/main.js +++ b/public/js/main.js @@ -1,4 +1,4 @@ -angular.module('rallly', ['ui.router','ngResource','ngFx']) +angular.module('rallly', ['ui.router','ngResource','ngFx','btford.modal']) .config(function($stateProvider, $urlRouterProvider, $locationProvider){ $locationProvider.html5Mode(true); $urlRouterProvider.otherwise("/notfound") diff --git a/public/js/services/modal.service.js b/public/js/services/modal.service.js new file mode 100644 index 000000000..e60dee660 --- /dev/null +++ b/public/js/services/modal.service.js @@ -0,0 +1,29 @@ +angular.module('rallly') +.factory('ConfirmModal', function(btfModal){ + + return function(config){ + var modal; + modal = btfModal({ + templateUrl : 'templates/confirmmodal.html', + controllerAs : 'modal', + controller : function(){ + this.title = config.title + this.message = config.message; + this.confirm = function(){ + if (config.confirm) config.confirm(); + modal.deactivate(); + } + this.cancel = modal.deactivate; + this.confirmText = config.confirmText || 'Confirm'; + this.cancelText = config.cancelText || 'Cancel'; + this.isDestructive = config.isDestructive; + } + }); + this.show = function(){ + modal.activate(); + } + this.destroy = function(){ + modal.deactivate(); + } + } +}); diff --git a/public/scss/partials/_buttons.scss b/public/scss/partials/_buttons.scss index 1a3964c39..a17516c7c 100644 --- a/public/scss/partials/_buttons.scss +++ b/public/scss/partials/_buttons.scss @@ -15,7 +15,7 @@ font-weight:600; color: $dark-gray-clr; text-decoration:none; - padding: em(8px) em(20px); + padding: em(8px) em(15px); &.disabled { cursor:default; opacity: 0.5; diff --git a/public/scss/partials/_modal.scss b/public/scss/partials/_modal.scss new file mode 100644 index 000000000..876babce9 --- /dev/null +++ b/public/scss/partials/_modal.scss @@ -0,0 +1,42 @@ +.rl-modal { + background:white; + position: fixed; + top: 50%; + box-shadow: 0 0 5px rgba(black, 0.5); + left: 50%; + width: 50%; + max-width: 400px; + display:inline-block; + min-width: 200px; + height: auto; + z-index: 2000; + overflow:hidden; + border-radius: 5px; + @include transform(translateX(-50%) translateY(-50%)); + .rl-modal-message { + padding: 0 20px 20px 20px; + font-size: em(12px); + color: $body-clr; + } + .rl-modal-title { + padding:20px 20px 5px 20px; + font-size: em(18px); + } + .rl-modal-actions { + border-top:1px solid #ddd; + background: #F9FAFA; + text-align:right; + padding: em(10px) em(20px); + } +} + +.rl-modal-overlay { + position:fixed; + z-index: 1000; + top:0; + left:0; + width:100%; + height:100%; + background:transparent; + +} diff --git a/public/scss/style.scss b/public/scss/style.scss index ac87cc0ee..ce0bd5e38 100644 --- a/public/scss/style.scss +++ b/public/scss/style.scss @@ -18,6 +18,7 @@ body { @import "partials/buttons"; @import "partials/type"; @import "partials/form"; +@import "partials/modal"; @import "partials/datepicker"; @import "partials/event"; @import "partials/newevent"; diff --git a/public/templates/about.html b/public/templates/about.html index 617bba6be..e2c97c9d8 100644 --- a/public/templates/about.html +++ b/public/templates/about.html @@ -1,7 +1,8 @@ -
+

What is Rallly?

-

Rallly is a collaborative scheduling service that makes deciding on a date fast and easy.

+
Rallly is a collaborative scheduling service that makes deciding on a date fast and easy.
+

Hi, I'm Luke!

- Hi, my name is Luke and I created Rallly as side project to help me learn some new technologies. I decided to publish it because I thought other people might find it useful. Rallly is a completely free service. In fact it is even open source. You can look at the latest source code on Github. + I created Rallly as side project to help me learn some new technologies. I decided to publish it because I thought other people might find it useful. Rallly is a completely free service. In fact it is even open source. You can look at the latest source code on Github.

diff --git a/public/templates/confirmmodal.html b/public/templates/confirmmodal.html new file mode 100644 index 000000000..2df1732df --- /dev/null +++ b/public/templates/confirmmodal.html @@ -0,0 +1,12 @@ +
+ +
+
{{modal.title}}
+
+ {{modal.message}} +
+
+ + +
+
diff --git a/public/templates/editevent.html b/public/templates/editevent.html index b722273ad..4ba39573f 100644 --- a/public/templates/editevent.html +++ b/public/templates/editevent.html @@ -1,5 +1,4 @@ - -

Editing: {{event.title}}

+

Edit Event

You can makes changes to your existing event by changing the fields in the form below. When you're ready click save.
diff --git a/public/templates/event.html b/public/templates/event.html index 0d858f1d3..e0ead027c 100644 --- a/public/templates/event.html +++ b/public/templates/event.html @@ -3,10 +3,10 @@

{{event.title}}

  • - Created by {{event.creator.name}} on {{event.created | date : 'medium'}} + Created by {{event.creator.name}} - {{event.created | elapsed}}
  • -
  • - Last updated {{event.updated | date : 'medium'}} +
  • + Updated {{event.updated | elapsed}}
  • {{event.location}} @@ -24,7 +24,7 @@ {{event.participants.length}} participants - +
    {{date | date: 'EEE'}} diff --git a/public/templates/modal.html b/public/templates/modal.html deleted file mode 100644 index e8c825e10..000000000 --- a/public/templates/modal.html +++ /dev/null @@ -1,7 +0,0 @@ -

    Good Job!

    -

    - Your event has been created. An email has been sent to all the participants with a link to the event page. Make sure you visit the page and vote on the dates yourself. -

    -

    Here's the link

    -

    {{eventUrl}}

    -Go to Event Page diff --git a/public/vendor/angular-modal/.bower.json b/public/vendor/angular-modal/.bower.json new file mode 100644 index 000000000..14dd475ae --- /dev/null +++ b/public/vendor/angular-modal/.bower.json @@ -0,0 +1,30 @@ +{ + "name": "angular-modal", + "version": "0.4.0", + "main": "modal.js", + "ignore": [ + "**/.*", + "node_modules", + "components", + "bower_components", + "test", + "tests" + ], + "dependencies": { + "angular": "~1.2.13" + }, + "devDependencies": { + "angular-mocks": "~1.2.13" + }, + "homepage": "https://github.com/btford/angular-modal", + "_release": "0.4.0", + "_resolution": { + "type": "version", + "tag": "v0.4.0", + "commit": "ecbdc657bfe0c4ad6281aee0c1432278f10c5026" + }, + "_source": "git://github.com/btford/angular-modal.git", + "_target": "~0.4.0", + "_originalSource": "angular-modal", + "_direct": true +} \ No newline at end of file diff --git a/public/vendor/angular-modal/README.md b/public/vendor/angular-modal/README.md new file mode 100644 index 000000000..625ca8fc3 --- /dev/null +++ b/public/vendor/angular-modal/README.md @@ -0,0 +1,211 @@ +# angular-modal [![Build Status](https://travis-ci.org/btford/angular-modal.png)](https://travis-ci.org/btford/angular-modal) + +A modal factory service for AngularJS that makes it easy to add modals to your app. + + +## Install + +```shell +bower install angular-modal +``` + +## Usage +1. Include the `modal.js` script provided by this component into your app. +2. *Optional:* Include the `modal.css` style provided by this component into your html. +3. Add `btford.modal` as a module dependency to your app. + + +## Examples + +[Plunker demo](http://plnkr.co/edit/lJDNqafSCKdpMI8AjR0B?p=preview) + +### Typical Use + +> app.js + +```javascript +angular.module('myApp', ['btford.modal']). + +// let's make a modal called `myModal` +factory('myModal', function (btfModal) { + return btfModal({ + controller: 'MyModalCtrl', + controllerAs: 'modal', + templateUrl: 'my-modal.html' + }); +}). + +// typically you'll inject the modal service into its own +// controller so that the modal can close itself +controller('MyModalCtrl', function (myModal) { + this.closeMe = myModal.deactivate; +}). + +controller('MyCtrl', function (myModal) { + this.showModal = myModal.activate; +}); +``` + +> my-modal.html + +```html +
    +

    Hello {{name}}

    +

    Close Me

    +
    +``` + +> index.html + +```html + +``` + +### Cleaning up + +If you add any listeners within the modal's controller that are **outside the modal's `scope`**, +you should remove them with `$scope.$on('$destroy', fn () { ... })` to avoid creating a memory leak. + +Building on the example above: + +> app.js + +```javascript +// ... +controller('MyModalCtrl', function (myModal, $timeout) { + + var ctrl = this, + timeoutId; + + ctrl.tickCount = 5; + + ctrl.closeMe = function () { + cancelTick(); + myModal.deactivate(); + }; + + function tick() { + timeoutId = $timeout(function() { + ctrl.tickCount -= 1; + if (ctrl.tickCount <= 0) { + ctrl.closeMe(); + } else { + tick(); + } + }, 1000); + } + + function cancelTick() { + $timeout.cancel(timeoutId); + } + + $scope.$on('$destroy', cancelTick); + + tick(); +}). +// ... +``` + + +### Inline Options + +**Note:** The best practice is to use a separate file for the template and a separate declaration for +the controller, but inlining these options might be more pragmatic for cases where the template or +controller is just a couple lines. + +```javascript +angular.module('myApp', []). + +// let's make a modal called myModal +factory('myModal', function (btfModal) { + return btfModal({ + controller: function () { + this.name = 'World'; + }, + controllerAs: 'ctrl', + template: '
    Hello {{ctrl.name}}
    ' + }); +}). + +controller('MyCtrl', function (myModal) { + this.showModal = myModal.activate; +}); +``` + +```html + +``` + + +## API + +### `btfModal` + +The modal `factory`. Takes a configuration object as a parameter: + +```javascript +var modalService = btfModal({ + /* options */ +}) +``` + +And returns a `modalService` object that you can use to show/hide the modal (described below). + +The config object **must** either have a `template` or a `templateUrl` option. + +These options work just like the [route configuration in Angular's +`$routeProvider`](http://docs.angularjs.org/api/ngRoute.$routeProvider#methods_when). + + +#### `config.template` +**string:** HTML string of the template to be used for this modal. +Unless the template is very simple, you should probably use `config.templateUrl` instead. + +#### `config.templateUrl` +**string (recommended):** URL to the HTML template to be used for this modal. + +#### `config.controller` +**string|function (optional):** The name of a controller or a controller function. + +#### `config.controllerAs` +**string (optional, recommended):** Makes the controller available on the scope of the modal as the given name. + +#### `config.container` +**DOM Node (optional):** DOM node to prepend . Defaults to `document.body`. + + +### `modalService` + +A `modalService` has just two methods: `activate` and `deactivate`. + +#### `modalService.activate` + +Takes a hash of objects to add to the scope of the modal as locals. +Adds the modal to the DOM by prepending it to the ``. +Returns a promise that resolves once the modal is active. + +#### `modalService.deactivate` + +Removes the modal (DOM and scope) from the DOM. +Returns a promise that resolves once the modal is removed. + +#### `modalService.active` + +Returns whether or not the modal is currently activated. + + +## Tests + +You can run the tests with [`karma`](http://karma-runner.github.io/0.10/index.html): + +```shell +karma start karma.conf.js +``` + + +## License +MIT diff --git a/public/vendor/angular-modal/bower.json b/public/vendor/angular-modal/bower.json new file mode 100644 index 000000000..db3e25ec2 --- /dev/null +++ b/public/vendor/angular-modal/bower.json @@ -0,0 +1,19 @@ +{ + "name": "angular-modal", + "version": "0.4.0", + "main": "modal.js", + "ignore": [ + "**/.*", + "node_modules", + "components", + "bower_components", + "test", + "tests" + ], + "dependencies": { + "angular": "~1.2.13" + }, + "devDependencies": { + "angular-mocks": "~1.2.13" + } +} diff --git a/public/vendor/angular-modal/gulpfile.js b/public/vendor/angular-modal/gulpfile.js new file mode 100644 index 000000000..8345a2ed3 --- /dev/null +++ b/public/vendor/angular-modal/gulpfile.js @@ -0,0 +1,20 @@ +var gulp = require('gulp'), + gutil = require('gulp-util'), + uglify = require('gulp-uglify'), + rename = require("gulp-rename"), + ngmin = require('gulp-ngmin'); + +gulp.task('scripts', function() { + return gulp.src('modal.js'). + pipe(rename('modal.min.js')). + pipe(ngmin()). + pipe(uglify({ + preserveComments: 'some', + outSourceMap: true + })). + pipe(gulp.dest('.')); +}); + +gulp.task('default', function() { + gulp.start('scripts'); +}); diff --git a/public/vendor/angular-modal/karma.conf.js b/public/vendor/angular-modal/karma.conf.js new file mode 100644 index 000000000..4e59691a2 --- /dev/null +++ b/public/vendor/angular-modal/karma.conf.js @@ -0,0 +1,30 @@ +module.exports = function(config){ + config.set({ + basePath : './', + + files : [ + 'bower_components/angular/angular.js', + 'bower_components/angular-mocks/angular-mocks.js', + 'modal.js', + 'modal.spec.js' + ], + + autoWatch : true, + + frameworks: ['jasmine'], + + browsers : ['Chrome'], + + plugins : [ + 'karma-junit-reporter', + 'karma-chrome-launcher', + 'karma-firefox-launcher', + 'karma-jasmine' + ], + + junitReporter : { + outputFile: 'test_out/unit.xml', + suite: 'unit' + } + +})} \ No newline at end of file diff --git a/public/vendor/angular-modal/modal.css b/public/vendor/angular-modal/modal.css new file mode 100644 index 000000000..cc22d730a --- /dev/null +++ b/public/vendor/angular-modal/modal.css @@ -0,0 +1,20 @@ +/* + * angular-modal v0.1.0 + * (c) 2013 Brian Ford http://briantford.com + * License: MIT + */ + +.btf-modal { + position: fixed; + top: 50%; + left: 50%; + width: 50%; + max-width: 550px; + min-width: 330px; + height: auto; + z-index: 2000; + -webkit-transform: translateX(-50%) translateY(-50%); + -moz-transform: translateX(-50%) translateY(-50%); + -ms-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); +} diff --git a/public/vendor/angular-modal/modal.js b/public/vendor/angular-modal/modal.js new file mode 100644 index 000000000..6c295df69 --- /dev/null +++ b/public/vendor/angular-modal/modal.js @@ -0,0 +1,89 @@ +/* + * @license + * angular-modal v0.4.0 + * (c) 2013 Brian Ford http://briantford.com + * License: MIT + */ + +'use strict'; + +angular.module('btford.modal', []). +factory('btfModal', function ($animate, $compile, $rootScope, $controller, $q, $http, $templateCache) { + return function modalFactory (config) { + if (!(!config.template ^ !config.templateUrl)) { + throw new Error('Expected modal to have exacly one of either `template` or `templateUrl`'); + } + + var template = config.template, + controller = config.controller || angular.noop, + controllerAs = config.controllerAs, + container = angular.element(config.container || document.body), + element = null, + html, + scope; + + if (config.template) { + var deferred = $q.defer(); + deferred.resolve(config.template); + html = deferred.promise; + } else { + html = $http.get(config.templateUrl, { + cache: $templateCache + }). + then(function (response) { + return response.data; + }); + } + + function activate (locals) { + return html.then(function (html) { + if (!element) { + attach(html, locals); + } + }); + } + + function attach (html, locals) { + element = angular.element(html); + if (element.length === 0) { + throw new Error('The template contains no elements; you need to wrap text nodes') + } + $animate.enter(element, container); + scope = $rootScope.$new(); + if (locals) { + for (var prop in locals) { + scope[prop] = locals[prop]; + } + } + var ctrl = $controller(controller, { $scope: scope }); + if (controllerAs) { + scope[controllerAs] = ctrl; + } + $compile(element)(scope); + } + + function deactivate () { + var deferred = $q.defer(); + if (element) { + $animate.leave(element, function () { + scope.$destroy(); + element = null; + deferred.resolve(); + }); + } else { + deferred.resolve(); + } + return deferred.promise; + } + + function active () { + return !!element; + } + + return { + activate: activate, + deactivate: deactivate, + active: active + }; + }; +}); diff --git a/public/vendor/angular-modal/modal.min.js b/public/vendor/angular-modal/modal.min.js new file mode 100644 index 000000000..b357950a2 --- /dev/null +++ b/public/vendor/angular-modal/modal.min.js @@ -0,0 +1,7 @@ +/* + * @license + * angular-modal v0.4.0 + * (c) 2013 Brian Ford http://briantford.com + * License: MIT + */ +"use strict";angular.module("btford.modal",[]).factory("btfModal",["$animate","$compile","$rootScope","$controller","$q","$http","$templateCache",function(e,t,r,n,o,a,l){return function(c){function i(e){return p.then(function(t){$||u(t,e)})}function u(o,a){if($=angular.element(o),0===$.length)throw new Error("The template contains no elements; you need to wrap text nodes");if(e.enter($,h),d=r.$new(),a)for(var l in a)d[l]=a[l];var c=n(s,{$scope:d});v&&(d[v]=c),t($)(d)}function m(){var t=o.defer();return $?e.leave($,function(){d.$destroy(),$=null,t.resolve()}):t.resolve(),t.promise}function f(){return!!$}if(!(!c.template^!c.templateUrl))throw new Error("Expected modal to have exacly one of either `template` or `templateUrl`");var p,d,s=(c.template,c.controller||angular.noop),v=c.controllerAs,h=angular.element(c.container||document.body),$=null;if(c.template){var g=o.defer();g.resolve(c.template),p=g.promise}else p=a.get(c.templateUrl,{cache:l}).then(function(e){return e.data});return{activate:i,deactivate:m,active:f}}}]); \ No newline at end of file diff --git a/public/vendor/angular-modal/modal.min.js.map b/public/vendor/angular-modal/modal.min.js.map new file mode 100644 index 000000000..545a1867a --- /dev/null +++ b/public/vendor/angular-modal/modal.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"modal.min.js.map","sources":["modal.min.js"],"names":["angular","module","factory","$animate","$compile","$rootScope","$controller","$q","$http","$templateCache","config","activate","locals","html","then","element","attach","length","Error","enter","container","scope","$new","prop","ctrl","controller","$scope","controllerAs","deactivate","deferred","defer","leave","$destroy","resolve","promise","active","template","templateUrl","noop","document","body","get","cache","response","data"],"mappings":";;;;;;AAMA,YACAA,SAAQC,OAAO,mBAAoBC,QAAQ,YACzC,WACA,WACA,aACA,cACA,KACA,QACA,iBACA,SAAUC,EAAUC,EAAUC,EAAYC,EAAaC,EAAIC,EAAOC,GAChE,MAAO,UAAsBC,GAc3B,QAASC,GAASC,GAChB,MAAOC,GAAKC,KAAK,SAAUD,GACpBE,GACHC,EAAOH,EAAMD,KAInB,QAASI,GAAOH,EAAMD,GAEpB,GADAG,EAAUf,QAAQe,QAAQF,GACH,IAAnBE,EAAQE,OACV,KAAM,IAAIC,OAAM,iEAIlB,IAFAf,EAASgB,MAAMJ,EAASK,GACxBC,EAAQhB,EAAWiB,OACfV,EACF,IAAK,GAAIW,KAAQX,GACfS,EAAME,GAAQX,EAAOW,EAGzB,IAAIC,GAAOlB,EAAYmB,GAAcC,OAAQL,GACzCM,KACFN,EAAMM,GAAgBH,GAExBpB,EAASW,GAASM,GAEpB,QAASO,KACP,GAAIC,GAAWtB,EAAGuB,OAUlB,OATIf,GACFZ,EAAS4B,MAAMhB,EAAS,WACtBM,EAAMW,WACNjB,EAAU,KACVc,EAASI,YAGXJ,EAASI,UAEJJ,EAASK,QAElB,QAASC,KACP,QAASpB,EApDX,MAAOL,EAAO0B,UAAY1B,EAAO2B,aAC/B,KAAM,IAAInB,OAAM,0EAElB,IAAoML,GAAMQ,EAA1KI,GAAjBf,EAAO0B,SAAuB1B,EAAOe,YAAczB,QAAQsC,MAAMX,EAAejB,EAAOiB,aAAcP,EAAYpB,QAAQe,QAAQL,EAAOU,WAAamB,SAASC,MAAOzB,EAAU,IAC9L,IAAIL,EAAO0B,SAAU,CACnB,GAAIP,GAAWtB,EAAGuB,OAClBD,GAASI,QAAQvB,EAAO0B,UACxBvB,EAAOgB,EAASK,YAEhBrB,GAAOL,EAAMiC,IAAI/B,EAAO2B,aAAeK,MAAOjC,IAAkBK,KAAK,SAAU6B,GAC7E,MAAOA,GAASC,MA4CpB,QACEjC,SAAUA,EACViB,WAAYA,EACZO,OAAQA"} \ No newline at end of file diff --git a/public/vendor/angular-modal/modal.spec.js b/public/vendor/angular-modal/modal.spec.js new file mode 100644 index 000000000..2b184b60b --- /dev/null +++ b/public/vendor/angular-modal/modal.spec.js @@ -0,0 +1,286 @@ +'use strict'; + +describe('btfModal', function() { + var container, + btfModal, + $rootScope; + + beforeEach(module('btford.modal')); + + beforeEach(function () { + container = angular.element('
    '); + }); + + afterEach(function() { + container = null; + }); + + describe('without animations', function () { + beforeEach(inject(function(_btfModal_, _$rootScope_, $templateCache) { + btfModal = _btfModal_; + $rootScope = _$rootScope_; + $rootScope.greeting = 'こんばんは'; + + $templateCache.put('test.html', [200, '
    {{greeting}}
    ', {}]); + })); + + it('should not show a modal initially', function() { + var modal = btfModal({ + templateUrl: 'test.html', + container: container + }); + + $rootScope.$digest(); + + expect(container.text()).toBe(''); + }); + + + it('should throw if called without a `template` or `templateUrl` option', function() { + expect(function () { btfModal({}); }).toThrow(); + }); + + it('should throw if called with a text node', function() { + var modal = btfModal({ + template: 'hey' + }); + expect(function () { + modal.activate(); + $rootScope.$digest(); + }).toThrow(); + }); + + it('should throw if called with both `template` and `templateUrl` options', function() { + expect(function () { + btfModal({ + template: 'foo', + templateUrl: 'foo.html' + }); + }).toThrow(); + }); + + describe('#activate', function () { + it('should show a modal when activated with `templateUrl`', function() { + var modal = btfModal({ + templateUrl: 'test.html', + container: container + }); + modal.activate(); + $rootScope.$digest(); + + expect(container.text()).toBe('こんばんは'); + }); + + it('should show a modal when activated with `template`', function() { + var modal = btfModal({ + template: '{{greeting}}', + container: container + }); + + modal.activate(); + $rootScope.$digest(); + + expect(container.text()).toBe('こんばんは'); + }); + + it('should instantiate a controller via the `controller` option', function() { + var modal = btfModal({ + template: '{{greeting}}', + controller: function ($scope) { + $scope.greeting = 'goodnight' + }, + container: container + }); + + modal.activate(); + $rootScope.$digest(); + + expect(container.text()).toBe('goodnight'); + }); + + it('should expose a controller to the scope via the `controllerAs` option', function() { + var modal = btfModal({ + template: '{{ctrl.greeting}}', + controller: function () { + this.greeting = 'boa noite' + }, + controllerAs: 'ctrl', + container: container + }); + + modal.activate(); + $rootScope.$digest(); + + expect(container.text()).toBe('boa noite'); + }); + + it('should pass locals to the modal scope', function() { + var modal = btfModal({ + template: '{{greeting}}', + container: container + }); + + modal.activate({ + greeting: 'bon soir' + }); + $rootScope.$digest(); + + expect(container.text()).toBe('bon soir'); + }); + + it('should not activate multiple times', function() { + var modal = btfModal({ + template: 'x', + container: container + }); + + modal.activate(); + $rootScope.$digest(); + modal.activate(); + $rootScope.$digest(); + + expect(container.text()).toBe('x'); + }); + + it('should resolve a promise after activating', function() { + var spy = jasmine.createSpy('activated'); + + var modal = btfModal({ + template: 'x', + container: container + }); + + modal.activate().then(spy); + expect(spy).not.toHaveBeenCalled(); + + $rootScope.$digest(); + expect(spy).toHaveBeenCalled(); + }); + }); + + + describe('#deactivate', function () { + it('should remove a modal when deactivated', function() { + + var modal = btfModal({ + template: '{{greeting}}', + container: container + }); + + modal.activate(); + $rootScope.$digest(); + + modal.deactivate(); + $rootScope.$digest(); + + expect(container.text()).toBe(''); + }); + + it('should destroy the scope when deactivated', inject(function($$asyncCallback) { + var destroySpy = jasmine.createSpy('onDestroy'); + + var modal = btfModal({ + template: '{{greeting}}', + container: container, + controller: function ($scope) { + $scope.$on('$destroy', destroySpy); + } + }); + + modal.activate(); + $rootScope.$digest(); + + expect(destroySpy).not.toHaveBeenCalled(); + + modal.deactivate(); + $rootScope.$digest(); + $$asyncCallback.flush(); + + expect(destroySpy).toHaveBeenCalled(); + })); + + it('should resolve a promise after deactivating', inject(function($$asyncCallback) { + var spy = jasmine.createSpy('deactivated'); + + var modal = btfModal({ + template: 'x', + container: container + }); + + modal.activate(); + $rootScope.$digest(); + + modal.deactivate().then(spy); + expect(spy).not.toHaveBeenCalled(); + + $$asyncCallback.flush(); + $rootScope.$digest(); + expect(spy).toHaveBeenCalled(); + })); + + }); + + + describe('#active', function () { + it('should return the state of the modal', inject(function($$asyncCallback) { + + var modal = btfModal({ + template: '{{greeting}}', + container: container + }); + + $rootScope.$digest(); + expect(modal.active()).toBe(false); + + modal.activate(); + $rootScope.$digest(); + expect(modal.active()).toBe(true); + + modal.deactivate(); + $rootScope.$digest(); + $$asyncCallback.flush(); + + expect(modal.active()).toBe(false); + })); + }); + }); + + + describe('with animations', function () { + var $animate, + modal; + + beforeEach(module('ngAnimateMock')); + + beforeEach(inject(function(btfModal, _$rootScope_, _$animate_) { + $rootScope = _$rootScope_; + $animate = _$animate_; + + modal = btfModal({ + template: 'animations!', + container: container + }); + })); + + it('should trigger an enter animation when activated', function () { + modal.activate(); + $rootScope.$digest(); + + var item = $animate.queue.shift(); + expect(item.event).toBe('enter'); + }); + + it('should trigger a leave animation when deactivated', function () { + modal.activate(); + $rootScope.$digest(); + $animate.queue.shift(); + + modal.deactivate(); + $rootScope.$digest(); + + var item = $animate.queue.shift(); + expect(item.event).toBe('leave'); + }); + }); + +}); diff --git a/public/vendor/angular-modal/package.json b/public/vendor/angular-modal/package.json new file mode 100644 index 000000000..e4bccc306 --- /dev/null +++ b/public/vendor/angular-modal/package.json @@ -0,0 +1,33 @@ +{ + "name": "angular-modal", + "version": "0.4.0", + "description": "easily add a modal to your angular app", + "main": "modal.js", + "scripts": { + "test": "./node_modules/.bin/bower install && ./node_modules/.bin/karma start karma.conf.js --browsers Firefox --single-run" + }, + "repository": { + "type": "git", + "url": "git://github.com/btford/angular-modal.git" + }, + "keywords": [ + "angular", + "angularjs", + "modal" + ], + "author": "Brian Ford", + "license": "MIT", + "bugs": { + "url": "https://github.com/btford/angular-modal/issues" + }, + "devDependencies": { + "karma": "~0.10", + "karma-junit-reporter": "~0.1.0", + "bower": "~1.2.7", + "gulp": "~3.5.5", + "gulp-util": "~2.2.14", + "gulp-uglify": "~0.2.1", + "gulp-rename": "~1.2.0", + "gulp-ngmin": "~0.1.2" + } +} diff --git a/views/index.ejs b/views/index.ejs index 8cadbca32..2df4591c4 100644 --- a/views/index.ejs +++ b/views/index.ejs @@ -9,6 +9,7 @@ +