{"version":3,"sources":["app/application.coffee","app/collections/common/appointment-collection.coffee","app/collections/common/appointment-history-collection.coffee","app/collections/common/group-collection.coffee","app/collections/common/location-collection.coffee","app/collections/common/practitioner-collection.coffee","app/collections/common/service-collection.coffee","app/collections/common/session-collection.coffee","app/controllers/base/auth_controller.coffee","app/controllers/base/controller.coffee","app/controllers/base/non_auth_controller.coffee","app/initialize.coffee","app/lib/ValidationMachine.coffee","app/lib/ajax-helper.coffee","app/lib/alert.coffee","app/lib/auth-helper.coffee","app/lib/confirm.coffee","app/lib/deep-model.js","app/lib/guid-helper.coffee","app/lib/jquery.number.js","app/lib/mix/LoadMore.jade","app/lib/rivets.coffee","app/lib/templates/AlertDialog.jade","app/lib/templates/ConfirmDialog.jade","app/lib/underscore.mixin.deepExtend.js","app/mediator.coffee","app/models/base/collection.coffee","app/models/base/deep_model.coffee","app/models/base/model.coffee","app/models/base/paging_collection.coffee","app/models/common/user.coffee","app/modules/authentication/authentication_controller.coffee","app/modules/authentication/views/authenticate-screen/index.coffee","app/modules/authentication/views/authenticate-screen/template.jade","app/modules/authentication/views/authenticate-screen/validator.coffee","app/modules/authentication/views/reset-password-screen/index.coffee","app/modules/authentication/views/reset-password-screen/template.jade","app/modules/authentication/views/reset-password-screen/validator.coffee","app/modules/booking/booking_controller.coffee","app/modules/booking/searching_controller.coffee","app/modules/booking/views/availability-screen/index.coffee","app/modules/booking/views/availability-screen/template.jade","app/modules/booking/views/confirmation-screen/index.coffee","app/modules/booking/views/confirmation-screen/template.jade","app/modules/booking/views/payment-screen/index.coffee","app/modules/booking/views/payment-screen/template.jade","app/modules/booking/views/problem-screen/index.coffee","app/modules/booking/views/problem-screen/template.jade","app/modules/booking/views/service-screen/index.coffee","app/modules/booking/views/service-screen/template.jade","app/modules/booking/views/terms-screen/index.coffee","app/modules/booking/views/terms-screen/template.jade","app/modules/client/client_controller.coffee","app/modules/client/models/client.coffee","app/modules/client/views/edit-screen/index.coffee","app/modules/client/views/edit-screen/template.jade","app/modules/client/views/edit-screen/validator.coffee","app/modules/client/views/summary-screen/index.coffee","app/modules/client/views/summary-screen/template.jade","app/modules/history/history_controller.coffee","app/modules/history/views/cancellation-dialog/index.coffee","app/modules/history/views/cancellation-dialog/template.jade","app/modules/history/views/history-screen/index.coffee","app/modules/history/views/history-screen/template.jade","app/modules/history/views/move-dialog/index.coffee","app/modules/history/views/move-dialog/template.jade","app/modules/home/home_controller.coffee","app/modules/home/views/home-screen/index.coffee","app/modules/home/views/home-screen/template.jade","app/modules/home/views/not-found-screen/index.coffee","app/modules/home/views/not-found-screen/template.jade","app/modules/invoice/invoice_controller.coffee","app/modules/invoice/models/invoice-collection.coffee","app/modules/invoice/views/invoice-screen/index.coffee","app/modules/invoice/views/invoice-screen/template.jade","app/modules/support/support_controller.coffee","app/modules/support/views/support-screen/index.coffee","app/modules/support/views/support-screen/template.jade","app/routes.coffee","app/views/base/collection-view.coffee","app/views/base/dialog_view.coffee","app/views/base/view.coffee","app/views/home/header-view.coffee","app/views/home/templates/header.jade","app/views/site-view.coffee","app/views/templates/site.jade"],"names":[],"mappings":"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A8C,EAA9C;CAAA,IAAa,EAAN,CAAP;CAAyB,CAAK,CAAL,CAAM,MAAN;CAAzB;OAVF;MAAA;CAYE,GAAG,EAAH;CACE,GAAa,IAAb;CACE,CAAgB,GAAhB;CAAA,CACa,GADb,KACA;CAFF;OADF;CAAA,EAIA,CAAM,EAAN,EAAqB;CAJrB,GAKA;CAAO,CAAI,CAAJ;CALP,OAKA;CACA,YAAO;KAlBT;CAoBS,GAAI,GAAb,CAAQ,GAAR;CAxBF,EAGM;;CAHN;;CALF;;;;ACAA;GAAA;;kSAAA;;AAAA,GAAQ,EAAR,EAAQ;;AACR,CADA,EACa,OAAb,cAAa;;AAEP,CAHN;CAIE;;;;;;CAAA;;CAAA,EAAS,KAAT,mBAAS;;CAAT,EAES,IAAT,EAAS;CACP;CACC,IAAD;CAJF,EAES;;CAFT;;CAD0B;;AAO5B,CAVA,CAUwB,CAAP,GAAX,CAAN,CAAiB,CAAC;CAChB,GAAI,IAAJ;CACK,CAA6B,EAA9B,GAAJ,MAAkC,EAAlC;CACE,CAAW,EAAX;CACE,CAAM,GAAN;CAAA,CACQ,IAAR;CAFF,KAAW;CADb,GAAkC;CAFnB;;;CCVjB;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA/UA;AAAA;;ACAA;;AAAA,GAAI;;AAEJ,CAFA,EAEuB,GAAjB,CAAN;CACE;;CAAA,EAAO,EAAP,IAAO;CACL;CAAC,IAAD;CACE,CAAa,IAAb,GAAc,EAAd;CACE,GAAmB,IAAnB;CAAA,gBAAO;SAAP;CACA,CAAO,GAAK,UAAL,mBAAP;CAFF,MAAa;CAFV,KACL;CADF,EAAO;;CAAP;;CAHF;;;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A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Y,IAAZ,KAAmB;CACnB,EAAe,CAAR;CAFH,QAAc;OApBtB;AAyBO,CAAP;CACE,CAAE,CAAa,KAAf;CAUI,EAAD,KAAH;MAXF;CAaE,CAAE,CAAa,KAAf;CAYI,EAAD,KAAH;OAnD0B;CAxnBzB,IAwnByB;CAxnBhC,EAAO;;CAAP;;CAVF;;;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAfA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAfA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAhHA;AAAA;;ACAA;;AAAA,GAAU,IAAV,EAAU;;AAEV,CAFA,EAEW,GAAM,CAAN,CAAX;;;;ACFA;GAAA;;;qBAAA;;AAAA,GAAU,IAAV,EAAU;;AACV,CADA,EACQ,EAAR,EAAQ;;AACR,CAFA,EAEI;;AAEJ,CAJA,EAIW,KAAX,EAAW;;AAEX,CANA,EAMuB,GAAjB,CAAN;CAEE;;;;;;;;;;;CAAA;;CAAA,MAA4B,EAA5B,CAAG,CAAH;;CA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","file":"public/javascripts/app.js","sourcesContent":["Chaplin = require 'chaplin'\nmediator = require 'mediator'\n\nModel = require 'models/base/model'\nDeepModel = require 'models/base/deep_model'\nRivetsHelper = require 'lib/rivets'\nAjaxHelper = require 'lib/ajax-helper'\nGuidHelper = require 'lib/guid-helper'\nDeepExtend = require 'lib/underscore.mixin.deepExtend'\njqueryNumeric = require 'lib/jquery.number'\n$ = require 'jquery'\n\nUser = require 'models/common/user'\n# The application object.\n\nmodule.exports = class Application extends Chaplin.Application\n start: ->\n # You can fetch some data here and start app\n # (by calling `super`) after that.\n Foundation.libs.reveal.settings.close_on_background_click = false;\n \n new RivetsHelper().setup()\n new AjaxHelper().setup()\n new GuidHelper().setup()\n super\n $(document).ajaxError (err) ->\n Airbrake?.push(error:err)\n\n initMediator: ->\n DeepExtend()\n mediator.user = new User()\n mediator.provider = new DeepModel()\n mediator.booking = new DeepModel()\n mediator.device = new Model\n isTouch: 'ontouchstart' of window\n super\n","DeepModel = require 'models/base/deep_model'\r\nCollection = require 'models/base/collection'\r\n\r\nmodule.exports = class AppointmentCollection extends Collection\r\n url: '/api/pronto/appointments/distinct'\r\n model: DeepModel","DeepModel = require 'models/base/deep_model'\nCollection = require 'models/base/collection'\n\nmodule.exports = class AppointmentHistoryCollection extends Collection\n url: '/api/pronto/clients/history'\n model: DeepModel","Model = require 'models/base/model'\nCollection = require 'models/base/collection'\n\nclass Group extends Model\n idAttribute: 'groupLocationId'\n\nmodule.exports = class GroupCollection extends Collection\n url: '/api/pronto/groups'\n model: Group\n","Collection = require 'models/base/collection'\r\nmediator = require 'mediator'\r\n\r\nmodule.exports = class LocationCollection extends Collection\r\n url: =>\r\n base = '/api/pronto/locations'\r\n serviceId = mediator.booking?.get(\"service.networkServiceId\")\r\n networkId = mediator.booking?.get(\"service.networkId\")\r\n query = \"?networkId=#{networkId}&serviceId=#{serviceId}\"\r\n return base + query if serviceId? && networkId?\r\n return base","Collection = require 'models/base/collection'\r\nmediator = require 'mediator'\r\nModel = require 'models/base/model'\r\n\r\n\r\nmodule.exports = class PractitionerCollection extends Collection\r\n url: =>\r\n base = \"/api/pronto/system/targets/practitioners/info\"\r\n serviceId = mediator.booking?.get(\"service.networkServiceId\")\r\n networkId = mediator.booking?.get(\"service.networkId\")\r\n query = \"?networkId=#{networkId}&serviceId=#{serviceId}\"\r\n return base + query if serviceId? && networkId?\r\n return base","Collection = require 'models/base/collection'\r\nDeepModel = require 'models/base/deep_model'\r\n\r\nmodule.exports = class ServiceCollection extends Collection\r\n url: '/api/pronto/system/targets/services'\r\n model: DeepModel","Collection = require 'models/base/collection'\r\nmoment = require 'moment'\r\n_ = require 'underscore'\r\n\r\nmodule.exports = class SessionCollection extends Collection\r\n url: => \"/api/pronto/online/sessions\"\r\n\r\n initialize: =>\r\n super\r\n @filterEndDate = new moment()\r\n @dates = []\r\n @hasLess = false\r\n @hasMore = false\r\n @sort_key = 'date'\r\n @listenTo @, 'sort', @nextDate\r\n\r\n getDistinctDates: =>\r\n return _.uniq(\r\n @map((m)=>\r\n return m.get(\"date\").match(/^\\d{4}\\-\\d{2}\\-\\d{2}/)[0]\r\n ).sort(), true\r\n )\r\n\r\n nextDate: =>\r\n @dates = []\r\n res = []\r\n all_dates = @getDistinctDates()\r\n\r\n i = 0\r\n\r\n while i < all_dates.length and @dates.length < 4\r\n date = new moment(all_dates[i]).toDate()\r\n @dates.push(all_dates[i]) if date >= @filterEndDate.startOf('day').toDate()\r\n i++\r\n\r\n @setStats(all_dates)\r\n\r\n prevDate: =>\r\n @dates = []\r\n res = []\r\n all_dates = @getDistinctDates()\r\n\r\n i = all_dates.length - 1\r\n while i > -1 and @dates.length < 4\r\n date = new moment(all_dates[i]).toDate()\r\n @dates.push(all_dates[i]) if date <= @filterStartDate.startOf('day').toDate()\r\n i--\r\n\r\n @dates.reverse()\r\n @setStats(all_dates)\r\n\r\n setStats: (all_dates)=>\r\n if @dates.length > 0\r\n last = _.last(@dates)\r\n @filterStartDate = new moment(@dates[0])\r\n @filterEndDate = new moment(last)\r\n @hasMore = all_dates.indexOf(last) < all_dates.length - 1\r\n @hasLess = all_dates.indexOf(@dates[0]) > 0\r\n @trigger 'filter'\r\n","$ = require 'jquery'\nChaplin = require 'chaplin'\nmediator = require 'mediator'\n\nAuthHelper = require 'lib/auth-helper'\nController = require './controller'\n\n_ = require 'underscore'\n\nmodule.exports = class AuthController extends Controller\n\n beforeAction: ()->\n super\n if mediator.user.get('stateUnknown')\n # if state is unknown then the page is loading\n # fresh and will not have a booking object\n # window.location.pathname || window.location.hash\n authHelper = new AuthHelper()\n\n _.get(\n url:'/api/user/current'\n success: (res)=>\n if res.isAuthenticated is true\n authHelper.done(res)\n else\n @unauthorized()\n error: =>\n @unauthorized()\n )\n else unless mediator.user.get(\"isAuthenticated\")\n @unauthorized()\n\n unauthorized: =>\n mediator.user.set\n isAuthenticated:false\n stateUnknown:false\n permissions: []\n Chaplin.utils.redirectTo url: \"#{mediator.provider.get('path')}/login\"\n","Chaplin = require 'chaplin'\nSiteView = require 'views/site-view'\nHeaderView = require 'views/home/header-view'\n\n_ = require 'underscore'\nmediator = require 'mediator'\nload = require('scriptloader');\n\nGoogleAnalyticsPath = \"https://www.googletagmanager.com/gtag/js?id=\"\n\nLoadGoogleAnalytics = (googleTrackingId) ->\n return if !googleTrackingId;\n\n fullpath = \"#{GoogleAnalyticsPath}#{googleTrackingId}\"\n return if $(\"script[src='#{fullpath}']\").length > 0\n\n $(\"script[src*='#{GoogleAnalyticsPath}'\").remove();\n load(fullpath, -> \n gtag('js', new Date());\n gtag('config', googleTrackingId);\n )\n\nmodule.exports = class Controller extends Chaplin.Controller\n menuTitle: ''\n\n initialize: =>\n super\n $(\"body\").removeClass((index, css) -> return (css.match(/(^|\\s)bg-\\S+/g) || []).join(' '))\n .addClass(\"bg-#{@menuTitle}\")\n\n beforeAction: (p, r, o)->\n super\n @reuse 'site', SiteView\n @reuse 'header', HeaderView, region: 'header'\n\n unless p.provider?\n console.error \"Valid provider name has not been provided\"\n # goto 404\n return\n\n provider = mediator.provider.toJSON()\n if p.provider isnt provider.path\n mediator.provider.clear()\n mediator.provider.set\n path: p.provider\n\n _.get(\n url: \"/api/system/provider/info\"\n success: (res)=>\n res.message = sanitizeHtml(res.message, { allowedTags, allowedAttributes});\n mediator.provider.set(res)\n $(\"body\").addClass(\"skin-#{res.skin || 'default'}\")\n LoadGoogleAnalytics(res.googleTrackingId)\n error: (res)=>\n if res.status is 401\n Chaplin.utils.redirectTo(\n controller: 'modules/booking/searching',\n action: 'service',\n params: { provider: p.provider }\n )\n else\n mediator.provider.clear()\n\n Chaplin.utils.redirectTo(\n controller: 'modules/home/home',\n action: 'notfound'\n )\n )\n","$ = require 'jquery'\n_ = require 'underscore'\nmediator = require 'mediator'\n\nAuthHelper = require 'lib/auth-helper'\nController = require './controller'\n\nmodule.exports = class NonAuthController extends Controller\n beforeAction: (p, r, o)->\n super\n if mediator.user.get('stateUnknown')\n # if state is unknown then the page is loading\n # fresh and will not have a booking object\n # window.location.pathname || window.location.hash\n authHelper = new AuthHelper()\n _.get(\n url:'/api/user/current'\n success: (res)=>\n if res.isAuthenticated is true\n authHelper.done(res)\n else\n mediator.user.set\n isAuthenticated:false\n stateUnknown:false\n permissions: []\n error: =>\n mediator.user.set\n isAuthenticated:false\n stateUnknown:false\n permissions: []\n )\n","$ = require 'jquery'\n# Hookup jQuery to Backbone.\nBackbone = require 'backbone'\nBackbone.$ = $\nrequire('lib/deep-model')\nwindow.$ = window.jQuery = $\nfoundation = require 'foundation'\n\n# Initialize the application on DOM ready event.\nApplication = require 'application'\nroutes = require 'routes'\n$ ->\n $(document).foundation()\n new Application {\n title: 'Pronto Portal',\n controllerSuffix: '_controller',\n controllerPath:'',\n routes\n }\n","_ = require 'underscore'\nmediator = require 'mediator'\n\nModel = require 'models/base/model'\nmodule.exports = class ValidationMachine\n\n rule: (key, fn)->\n @rules.push(key)\n @[key] = fn\n\n isValid: (name) ->\n if @rules?\n if name?\n return @[name]()?.isValid is true\n\n for key in @rules\n result = @[key]()\n continue if result?.skip\n return false unless result?.isValid\n return true\n\n getValidationResults: (name) ->\n if @rules?\n if name?\n return @[name]() || false\n\n applyRules: =>\n @view ?= new Model()\n @rules ?= []\n\n applyGraphics: (selector = \"[rv-validate]\")->\n valid = @$(selector)\n _.each(valid, (e) =>\n $e = @$(e)\n $e.wrap(\"
\")\n $e.before(\"
 
\")\n if mediator.device.get(\"isTouch\")\n $e.after(\"
\")\n $e.parent().attr(\"rv-validate\", $e.attr(\"rv-validate\"))\n $e.removeAttr(\"rv-validate\")\n )\n\n required: (field, message, model) =>\n @rule field, =>\n model ?= \"model\"\n val = (@[model]?.get(field) || \"\")?.trim()\n return null if @[model]?.isNew() && !@view.get(\"submitted\") && val is \"\"\n return { isValid:false, message: message || \"Enter a #{field.replace(/([A-Z])/g, ' $1').toLowerCase()}\" } if val is \"\"\n return { isValid:true, message:\"\" }\n\n requiredIf: (field, ifCallback, message) =>\n @rule field, =>\n return { isValid:true, message:\"\" } unless ifCallback()\n model = \"model\"\n val = (@[model]?.get(field) || \"\")?.trim()\n return null if @[model]?.isNew() && !@view.get(\"submitted\") && val is \"\"\n return { isValid:false, message: message || \"Enter a #{field.replace(/([A-Z])/g, ' $1').toLowerCase()}\" } if val is \"\"\n return { isValid:true, message:\"\" }\n\n min: (field, minValue, message, model) =>\n @rule field, =>\n model ?= \"model\"\n val = (@[model]?.get(field) || 0)\n return null if @[model]?.isNew() && !@view.get(\"submitted\") && val < minValue\n return { isValid:false, message: message || \"Make sure #{field} is higher than #{minValue}\" } if val < minValue\n return { isValid:true, message:\"\" }\n\n requiredDate: (field) =>\n @rule field, =>\n val = @model.get(field)\n return null if @model?.isNew() && !@view.get(\"submitted\") && !val?\n return { isValid:false, message:\"Enter a #{field}\" } if !val?\n return { isValid:true, message:\"\" }\n\n requiredDateOfBirth: (field) =>\n @rule field, =>\n val = @model.get(field)\n return null if @model?.isNew() && !@view.get(\"submitted\") && !val?\n return { isValid:false, message:\"Enter a #{field}\" } if !val?\n return { isValid:false, message:\"Date of Birth cannot be in the future.\" } if val > new Date()\n return { isValid:true, message:\"\" }\n\n clearRules:=>\n @rules = []\n delete @rules\n","$ = require 'jquery'\r\n_ = require 'underscore'\r\nBackbone = require 'backbone'\r\nmediator = require 'mediator'\r\n\r\nmodule.exports = class AjaxHelper\r\n setup: ->\r\n $.ajaxSetup(cache:false)\r\n\r\n _.mixin\r\n get: (args) =>\r\n args.type = \"GET\"\r\n @ajaxJSON(args)\r\n\r\n post: (args) =>\r\n args.type = \"POST\"\r\n @ajaxJSON(args)\r\n\r\n put: (args) =>\r\n args.type = \"PUT\"\r\n @ajaxJSON(args)\r\n\r\n del: (args) =>\r\n args.type = \"DELETE\"\r\n @ajaxJSON(args)\r\n\r\n originalSync = Backbone.sync;\r\n Backbone.sync = (method, model, options) ->\r\n options.headers = options.headers || {}\r\n _.extend(options.headers, { \"x-provider-name\": mediator.provider.get(\"path\")})\r\n originalSync.call(model, method, model, options)\r\n\r\n ajaxJSON: (args)=>\r\n if mediator.provider?.get(\"path\")?\r\n header = { \"x-provider-name\": mediator.provider.get(\"path\") }\r\n\r\n args.headers = _.extend(header, args.headers)\r\n\r\n $.ajax\r\n type: args.type || \"GET\"\r\n cache: false\r\n async: args.async || true\r\n dataType: \"json\"\r\n url: args.url || \"\"\r\n beforeSend: (request)->\r\n for k, v of args.headers\r\n request.setRequestHeader(k, v);\r\n\r\n data: JSON.stringify(args.data || {})\r\n contentType: \"application/json; charset=utf-8\"\r\n success: args.success || =>\r\n error: args.error || =>\r\n","Model = require 'models/base/model'\r\nDialogView = require 'views/base/dialog_view'\r\n\r\nclass AlertDialog extends DialogView\r\n template:require './templates/AlertDialog'\r\n\r\n confirm: =>\r\n @publishEvent 'alert:confirmed'\r\n @close()\r\n\r\nmodule.exports = (view, title, message, callback) ->\r\n view.subscribeEvent 'alert:confirmed', callback\r\n view.subview 'alertDialog', new AlertDialog\r\n model: new Model\r\n title:title\r\n message:message\r\n","mediator = require 'mediator'\nChaplin = require 'chaplin'\n_ = require 'underscore'\n\nmodule.exports = class AuthHelper\n constructor: (redirectUrl) ->\n @redirectUrl = redirectUrl\n\n done: (res) =>\n if res.isAuthenticated\n mediator.user.set\n name: res.displayName\n email: res.email\n isAuthenticated:true\n stateUnknown:false\n displayName: res.displayName\n userName: res.userName\n client: res.client\n\n Chaplin.utils.redirectTo url: @redirectUrl if @redirectUrl?\n else\n if mediator.user?\n mediator.user.set\n isAuthenticated:false\n stateUnknown:false\n url = window.location.href || window.location.pathname\n _.post(url:'/api/auth/logout');\n return false\n\n mediator.user.trigger 'change'\n","Model = require 'models/base/model'\nDialogView = require 'views/base/dialog_view'\n\nclass ConfirmDialog extends DialogView\n template:require './templates/ConfirmDialog'\n \n confirm: =>\n @publishEvent 'confirm:confirmed'\n @close()\n\nmodule.exports = (view, title, message, callback) ->\n view.subscribeEvent 'confirm:confirmed', callback\n view.subview 'confirmDialog', new ConfirmDialog\n model: new Model\n title:title\n message:message\n","/**\n * Main source\n */\n\n;(function(factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD\n define(['underscore', 'backbone'], factory);\n } else if (typeof exports === 'object') {\n // CommonJS\n module.exports = factory(require('underscore'), require('backbone'));\n } else {\n // globals\n factory(_, Backbone);\n }\n}(function(_, Backbone) {\n /**\n * Takes a nested object and returns a shallow object keyed with the path names\n * e.g. { \"level1.level2\": \"value\" }\n *\n * @param {Object} Nested object e.g. { level1: { level2: 'value' } }\n * @return {Object} Shallow object with path names e.g. { 'level1.level2': 'value' }\n */\n function objToPaths(obj) {\n var ret = {},\n separator = DeepModel.keyPathSeparator;\n\n for (var key in obj) {\n var val = obj[key];\n\n if (val && (val.constructor === Object || val.constructor === Array) && !_.isEmpty(val)) {\n //Recursion for embedded objects\n var obj2 = objToPaths(val);\n\n for (var key2 in obj2) {\n var val2 = obj2[key2];\n\n ret[key + separator + key2] = val2;\n }\n } else {\n ret[key] = val;\n }\n }\n\n return ret;\n }\n\n /**\n * @param {Object} Object to fetch attribute from\n * @param {String} Object path e.g. 'user.name'\n * @return {Mixed}\n */\n function getNested(obj, path, return_exists) {\n var separator = DeepModel.keyPathSeparator;\n\n var fields = path ? path.split(separator) : [];\n var result = obj;\n return_exists || (return_exists === false);\n for (var i = 0, n = fields.length; i < n; i++) {\n if (return_exists && !_.has(result, fields[i])) {\n return false;\n }\n result = result[fields[i]];\n\n if (result == null && i < n - 1) {\n result = {};\n }\n\n if (typeof result === 'undefined') {\n if (return_exists)\n {\n return true;\n }\n return result;\n }\n }\n if (return_exists)\n {\n return true;\n }\n return result;\n }\n\n /**\n * @param {Object} obj Object to fetch attribute from\n * @param {String} path Object path e.g. 'user.name'\n * @param {Object} [options] Options\n * @param {Boolean} [options.unset] Whether to delete the value\n * @param {Mixed} Value to set\n */\n function setNested(obj, path, val, options) {\n options = options || {};\n\n var separator = DeepModel.keyPathSeparator;\n\n var fields = path ? path.split(separator) : [];\n var result = obj;\n for (var i = 0, n = fields.length; i < n && result !== undefined ; i++) {\n var field = fields[i];\n\n //If the last in the path, set the value\n if (i === n - 1) {\n options.unset ? delete result[field] : result[field] = val;\n } else {\n //Create the child object if it doesn't exist, or isn't an object\n if (typeof result[field] === 'undefined' || ! _.isObject(result[field])) {\n var nextField = fields[i+1];\n\n // create array if next field is integer, else create object\n result[field] = /^\\d+$/.test(nextField) ? [] : {};\n }\n\n //Move onto the next part of the path\n result = result[field];\n }\n }\n }\n\n function deleteNested(obj, path) {\n setNested(obj, path, null, { unset: true });\n }\n\n var DeepModel = Backbone.Model.extend({\n\n // Override constructor\n // Support having nested defaults by using _.deepExtend instead of _.extend\n constructor: function(attributes, options) {\n var defaults;\n var attrs = attributes || {};\n this.cid = _.uniqueId('c');\n this.attributes = {};\n if (options && options.collection) this.collection = options.collection;\n if (options && options.parse) attrs = this.parse(attrs, options) || {};\n if (defaults = _.result(this, 'defaults')) {\n //\n // Replaced the call to _.defaults with _.deepExtend.\n attrs = _.deepExtend({}, defaults, attrs);\n //\n }\n this.set(attrs, options);\n this.changed = {};\n this.initialize.apply(this, arguments);\n },\n\n // Return a copy of the model's `attributes` object.\n toJSON: function(options) {\n return _.deepClone(this.attributes);\n },\n\n // Override get\n // Supports nested attributes via the syntax 'obj.attr' e.g. 'author.user.name'\n get: function(attr) {\n return getNested(this.attributes, attr);\n },\n\n // Override set\n // Supports nested attributes via the syntax 'obj.attr' e.g. 'author.user.name'\n set: function(key, val, options) {\n var attr, attrs, unset, changes, silent, changing, prev, current;\n if (key == null) return this;\n\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n if (typeof key === 'object') {\n attrs = key;\n options = val || {};\n } else {\n (attrs = {})[key] = val;\n }\n\n options || (options = {});\n\n // Run validation.\n if (!this._validate(attrs, options)) return false;\n\n // Extract attributes and options.\n unset = options.unset;\n silent = options.silent;\n changes = [];\n changing = this._changing;\n this._changing = true;\n\n if (!changing) {\n this._previousAttributes = _.deepClone(this.attributes); //: Replaced _.clone with _.deepClone\n this.changed = {};\n }\n current = this.attributes, prev = this._previousAttributes;\n\n // Check for changes of `id`.\n if (this.idAttribute in attrs) this.id = attrs[this.idAttribute];\n\n //\n attrs = objToPaths(attrs);\n //\n\n // For each `set` attribute, update or delete the current value.\n for (attr in attrs) {\n val = attrs[attr];\n\n //: Using getNested, setNested and deleteNested\n if (!_.isEqual(getNested(current, attr), val)) changes.push(attr);\n if (!_.isEqual(getNested(prev, attr), val)) {\n setNested(this.changed, attr, val);\n } else {\n deleteNested(this.changed, attr);\n }\n unset ? deleteNested(current, attr) : setNested(current, attr, val);\n //\n }\n\n // Trigger all relevant attribute changes.\n if (!silent) {\n if (changes.length) this._pending = true;\n\n //\n var separator = DeepModel.keyPathSeparator;\n var alreadyTriggered = {}; // * @restorer\n\n for (var i = 0, l = changes.length; i < l; i++) {\n var key = changes[i];\n\n if (!alreadyTriggered.hasOwnProperty(key) || !alreadyTriggered[key]) { // * @restorer\n alreadyTriggered[key] = true; // * @restorer\n this.trigger('change:' + key, this, getNested(current, key), options);\n } // * @restorer\n\n var fields = key.split(separator);\n\n //Trigger change events for parent keys with wildcard (*) notation\n for(var n = fields.length - 1; n > 0; n--) {\n var parentKey = _.first(fields, n).join(separator),\n wildcardKey = parentKey + separator + '*';\n\n if (!alreadyTriggered.hasOwnProperty(wildcardKey) || !alreadyTriggered[wildcardKey]) { // * @restorer\n alreadyTriggered[wildcardKey] = true; // * @restorer\n this.trigger('change:' + wildcardKey, this, getNested(current, parentKey), options);\n } // * @restorer\n\n // + @restorer\n if (!alreadyTriggered.hasOwnProperty(parentKey) || !alreadyTriggered[parentKey]) {\n alreadyTriggered[parentKey] = true;\n this.trigger('change:' + parentKey, this, getNested(current, parentKey), options);\n }\n // - @restorer\n }\n //\n }\n }\n\n if (changing) return this;\n if (!silent) {\n while (this._pending) {\n this._pending = false;\n this.trigger('change', this, options);\n }\n }\n this._pending = false;\n this._changing = false;\n return this;\n },\n\n // Clear all attributes on the model, firing `\"change\"` unless you choose\n // to silence it.\n clear: function(options) {\n var attrs = {};\n var shallowAttributes = objToPaths(this.attributes);\n for (var key in shallowAttributes) attrs[key] = void 0;\n return this.set(attrs, _.extend({}, options, {unset: true}));\n },\n\n // Determine if the model has changed since the last `\"change\"` event.\n // If you specify an attribute name, determine if that attribute has changed.\n hasChanged: function(attr) {\n if (attr == null) return !_.isEmpty(this.changed);\n return getNested(this.changed, attr) !== undefined;\n },\n\n // Return an object containing all the attributes that have changed, or\n // false if there are no changed attributes. Useful for determining what\n // parts of a view need to be updated and/or what attributes need to be\n // persisted to the server. Unset attributes will be set to undefined.\n // You can also pass an attributes object to diff against the model,\n // determining if there *would be* a change.\n changedAttributes: function(diff) {\n //: objToPaths\n if (!diff) return this.hasChanged() ? objToPaths(this.changed) : false;\n //\n\n var old = this._changing ? this._previousAttributes : this.attributes;\n\n //\n diff = objToPaths(diff);\n old = objToPaths(old);\n //\n\n var val, changed = false;\n for (var attr in diff) {\n if (_.isEqual(old[attr], (val = diff[attr]))) continue;\n (changed || (changed = {}))[attr] = val;\n }\n return changed;\n },\n\n // Get the previous value of an attribute, recorded at the time the last\n // `\"change\"` event was fired.\n previous: function(attr) {\n if (attr == null || !this._previousAttributes) return null;\n\n //\n return getNested(this._previousAttributes, attr);\n //\n },\n\n // Get all of the attributes of the model at the time of the previous\n // `\"change\"` event.\n previousAttributes: function() {\n //\n return _.deepClone(this._previousAttributes);\n //\n }\n });\n\n\n //Config; override in your app to customise\n DeepModel.keyPathSeparator = '.';\n\n\n //Exports\n Backbone.DeepModel = DeepModel;\n\n //For use in NodeJS\n if (typeof module != 'undefined') module.exports = DeepModel;\n\n return Backbone;\n\n}));\n","_ = require 'underscore'\n\nmodule.exports = class GuidHelper\n setup: ->\n _.mixin\n isEmptyGuid: (value) =>\n return true unless value?\n return value.split(\"-\").join(\"\") is \"00000000000000000000000000000000\"\n","/**\n * jQuery number plug-in 2.1.3\n * Copyright 2012, Digital Fusion\n * Licensed under the MIT license.\n * http://opensource.teamdf.com/license/\n *\n * A jQuery plugin which implements a permutation of phpjs.org's number_format to provide\n * simple number formatting, insertion, and as-you-type masking of a number.\n * \n * @author Sam Sehnert\n * @docs http://www.teamdf.com/web/jquery-number-format-redux/196/\n */\n var jQuery = require('jquery');\n(function($){\n \"use strict\";\n \n /**\n * Method for selecting a range of characters in an input/textarea.\n *\n * @param int rangeStart : Where we want the selection to start.\n * @param int rangeEnd : Where we want the selection to end.\n *\n * @return void;\n */\n function setSelectionRange( rangeStart, rangeEnd )\n {\n // Check which way we need to define the text range.\n if( this.createTextRange )\n {\n var range = this.createTextRange();\n range.collapse( true );\n range.moveStart( 'character', rangeStart );\n range.moveEnd( 'character', rangeEnd-rangeStart );\n range.select();\n }\n \n // Alternate setSelectionRange method for supporting browsers.\n else if( this.setSelectionRange )\n {\n this.focus();\n this.setSelectionRange( rangeStart, rangeEnd );\n }\n }\n \n /**\n * Get the selection position for the given part.\n * \n * @param string part : Options, 'Start' or 'End'. The selection position to get.\n *\n * @return int : The index position of the selection part.\n */\n function getSelection( part )\n {\n var pos = this.value.length;\n \n // Work out the selection part.\n part = ( part.toLowerCase() == 'start' ? 'Start' : 'End' );\n \n if( document.selection ){\n // The current selection\n var range = document.selection.createRange(), stored_range, selectionStart, selectionEnd;\n // We'll use this as a 'dummy'\n stored_range = range.duplicate();\n // Select all text\n //stored_range.moveToElementText( this );\n stored_range.expand('textedit');\n // Now move 'dummy' end point to end point of original range\n stored_range.setEndPoint( 'EndToEnd', range );\n // Now we can calculate start and end points\n selectionStart = stored_range.text.length - range.text.length;\n selectionEnd = selectionStart + range.text.length;\n return part == 'Start' ? selectionStart : selectionEnd;\n }\n \n else if(typeof(this['selection'+part])!=\"undefined\")\n {\n pos = this['selection'+part];\n }\n return pos;\n }\n \n /**\n * Substitutions for keydown keycodes.\n * Allows conversion from e.which to ascii characters.\n */\n var _keydown = {\n codes : {\n 188 : 44, //comma\n 109 : 45, //numpad minus\n 190 : 46, //dot\n 191 : 47, //slash\n 192 : 96, //`\n 220 : 92, // back slash\n 222 : 39, //apostroph\n 221 : 93, // ]\n 219 : 91, // [\n 173 : 45, //minus\n 187 : 61, //IE Key codes\n 186 : 59, //IE Key codes\n 189 : 45 //minus IE Key codes\n },\n shifts : {\n 96 : \"~\",\n 49 : \"!\",\n 50 : \"@\",\n 51 : \"#\",\n 52 : \"$\",\n 53 : \"%\",\n 54 : \"^\",\n 55 : \"&\",\n 56 : \"*\",\n 57 : \"(\",\n 48 : \")\",\n 45 : \"_\",\n 61 : \"+\",\n 91 : \"{\",\n 93 : \"}\",\n 92 : \"|\",\n 59 : \":\",\n 39 : \"\\\"\",\n 44 : \"<\",\n 46 : \">\",\n 47 : \"?\"\n }\n };\n \n /**\n * jQuery number formatter plugin. This will allow you to format numbers on an element.\n *\n * @params proxied for format_number method.\n *\n * @return : The jQuery collection the method was called with.\n */\n $.fn.number = function( number, decimals, dec_point, thousands_sep ){\n \n // Enter the default thousands separator, and the decimal placeholder.\n thousands_sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep;\n dec_point = (typeof dec_point === 'undefined') ? '.' : dec_point;\n decimals = (typeof decimals === 'undefined' ) ? 0 : decimals;\n \n // Work out the unicode character for the decimal placeholder.\n var u_dec = ('\\\\u'+('0000'+(dec_point.charCodeAt(0).toString(16))).slice(-4)),\n regex_dec_num = new RegExp('[^'+u_dec+'0-9]','g'),\n regex_dec = new RegExp(u_dec,'g');\n \n // If we've specified to take the number from the target element,\n // we loop over the collection, and get the number.\n if( number === true )\n {\n // If this element is a number, then we add a keyup\n if( this.is('input:text') )\n {\n // Return the jquery collection.\n return this.on({\n \n /**\n * Handles keyup events, re-formatting numbers.\n *\n * @param object e : the keyup event object.s\n *\n * @return void;\n */\n 'keydown.format' : function(e){\n \n // Define variables used in the code below.\n var $this = $(this),\n data = $this.data('numFormat'),\n code = (e.keyCode ? e.keyCode : e.which),\n chara = '', //unescape(e.originalEvent.keyIdentifier.replace('U+','%u')),\n start = getSelection.apply(this,['start']),\n end = getSelection.apply(this,['end']),\n val = '',\n setPos = false;\n\n // Webkit (Chrome & Safari) on windows screws up the keyIdentifier detection\n // for numpad characters. I've disabled this for now, because while keyCode munging\n // below is hackish and ugly, it actually works cross browser & platform.\n \n// if( typeof e.originalEvent.keyIdentifier !== 'undefined' )\n// {\n// chara = unescape(e.originalEvent.keyIdentifier.replace('U+','%u'));\n// }\n// else\n// {\n if (_keydown.codes.hasOwnProperty(code)) {\n code = _keydown.codes[code];\n }\n if (!e.shiftKey && (code >= 65 && code <= 90)){\n code += 32;\n } else if (!e.shiftKey && (code >= 69 && code <= 105)){\n code -= 48;\n } else if (e.shiftKey && _keydown.shifts.hasOwnProperty(code)){\n //get shifted keyCode value\n chara = _keydown.shifts[code];\n }\n\n if( e.keyCode === 110 ) chara = dec_point; // Numpad dot key\n if( chara == '' ) chara = String.fromCharCode(code);\n if( e.keyCode === 46 ) chara = ''; // Delete key\n// }\n\n\n \n\n // Stop executing if the user didn't type a number key, a decimal character, or backspace.\n if( code !== 46 && code !== 8 && e.keyCode !== 110 && chara != dec_point && !chara.match(/[0-9]/) )\n {\n // We need the original keycode now...\n var key = (e.keyCode ? e.keyCode : e.which);\n if( // Allow control keys to go through... (delete, etc)\n key == 46 || key == 8 || key == 9 || key == 27 || key == 13 ||\n // Allow: Ctrl+A, Ctrl+R\n ( (key == 65 || key == 82 ) && ( e.ctrlKey || e.metaKey ) === true ) || \n // Allow: Ctrl+V, Ctrl+C\n ( (key == 86 || key == 67 ) && ( e.ctrlKey || e.metaKey ) === true ) || \n // Allow: home, end, left, right\n ( (key >= 35 && key <= 39) )\n ){\n return;\n }\n // But prevent all other keys.\n e.preventDefault();\n return false;\n }\n\n // The whole lot has been selected, or if the field is empty...\n if( start == 0 && end == this.value.length || $this.val() == 0 )\n {\n if( code === 8 )\n {\n // Blank out the field, but only if the data object has already been instanciated.\n start = end = 1;\n this.value = '';\n \n // Reset the cursor position.\n data.init = (decimals>0?-1:0);\n data.c = (decimals>0?-(decimals+1):0);\n setSelectionRange.apply(this, [0,0]);\n }\n else if( chara === dec_point && decimals>0 )\n {\n start = end = 1;\n this.value = '0'+ dec_point + (new Array(decimals+1).join('0'));\n\n // Reset the cursor position.\n data.init = (decimals>0?1:0);\n data.c = (decimals>0?-(decimals+1):0);\n }\n else //CMcV\n {\n // Reset the cursor position.\n data.init = (decimals>0?-1:0);\n data.c = (decimals>0?-(decimals):0);\n }\n }\n\n // Otherwise, we need to reset the caret position\n // based on the users selection.\n else\n {\n data.c = end-this.value.length;\n }\n\n // If the start position is before the decimal point,\n // and the user has typed a decimal point, we need to move the caret\n // past the decimal place.\n if( decimals > 0 && chara == dec_point && start == this.value.length-decimals-1 )\n {\n data.c++;\n data.init = Math.max(0,data.init);\n e.preventDefault();\n \n // Set the selection position.\n setPos = this.value.length+data.c;\n }\n \n // If the user is just typing the decimal place,\n // we simply ignore it.\n else if( chara == dec_point )\n {\n data.init = Math.max(0,data.init);\n e.preventDefault();\n }\n \n // If hitting the delete key, and the cursor is behind a decimal place,\n // we simply move the cursor to the other side of the decimal place.\n else if( decimals > 0 && code == 8 && start == this.value.length-decimals )\n {\n e.preventDefault();\n data.c--;\n \n // Set the selection position.\n setPos = this.value.length+data.c;\n }\n \n // If hitting the delete key, and the cursor is to the right of the decimal\n // (but not directly to the right) we replace the character preceeding the\n // caret with a 0.\n else if( decimals > 0 && code == 8 && start > this.value.length-decimals )\n {\n if( this.value === '' ) return;\n \n // If the character preceeding is not already a 0,\n // replace it with one.\n if( this.value.slice(start-1, start) != '0' )\n {\n val = this.value.slice(0, start-1) + '0' + this.value.slice(start);\n $this.val(val.replace(regex_dec_num,'').replace(regex_dec,dec_point));\n }\n \n e.preventDefault();\n data.c--;\n \n // Set the selection position.\n setPos = this.value.length+data.c;\n }\n \n // If the delete key was pressed, and the character immediately\n // before the caret is a thousands_separator character, simply\n // step over it.\n else if( code == 8 && this.value.slice(start-1, start) == thousands_sep )\n {\n e.preventDefault();\n data.c--;\n \n // Set the selection position.\n setPos = this.value.length+data.c;\n }\n else if( 46 === code ) // pressed Delete key\n {\n if ( end === start )\n {\n if( this.value.slice(start, start+1) == thousands_sep )\n {\n e.preventDefault();\n data.c++;\n setPos = this.value.length + data.c;\n } else\n {\n // Set the selection position.\n setPos = this.value.length + data.c;\n }\n }\n }\n\n // If the caret is to the right of the decimal place, and the user is entering a\n // number, remove the following character before putting in the new one. \n else if(\n decimals > 0 &&\n start == end &&\n this.value.length > decimals+1 &&\n start > this.value.length-decimals-1 && isFinite(+chara) &&\n !e.metaKey && !e.ctrlKey && !e.altKey && chara.length === 1\n )\n {\n // If the character preceeding is not already a 0,\n // replace it with one.\n if( end === this.value.length )\n {\n val = this.value.slice(0, start-1);\n }\n else\n {\n val = this.value.slice(0, start)+this.value.slice(start+1);\n }\n \n // Reset the position.\n this.value = val;\n setPos = start;\n }\n \n // If we need to re-position the characters.\n if( setPos !== false )\n {\n //console.log('Setpos keydown: ', setPos );\n setSelectionRange.apply(this, [setPos, setPos]);\n }\n \n // Store the data on the element.\n $this.data('numFormat', data);\n \n },\n \n /**\n * Handles keyup events, re-formatting numbers.\n *\n * @param object e : the keyup event object.s\n *\n * @return void;\n */\n 'keyup.format' : function(e){\n \n // Store these variables for use below.\n var $this = $(this),\n data = $this.data('numFormat'),\n code = (e.keyCode ? e.keyCode : e.which),\n start = getSelection.apply(this,['start']),\n setPos;\n\n // Stop executing if the user didn't type a number key, a decimal, or a comma.\n if( this.value === '' || (code < 48 || code > 57) && (code < 96 || code > 105 ) && code !== 8 && code !== 46 ) return;\n\n if( typeof data.init === 'boolean' && $this.val() === 0)\n {\n data.init = (decimals>0?-1:0);\n if( decimals > 0 )\n {\n data.c =-decimals -1;\n }\n }\n // Re-format the textarea.\n $this.val($this.val());\n // CMcV added little chec here...\n if (this.value.length == 1)\n data.init = 0;\n\n if( typeof data.init === 'boolean' && this.value.length > 0)\n {\n data.init = (decimals>0?1:0);\n data.c = start - this.value.length;\n if( decimals > 0 && start > 0 )\n {\n data.c--;\n }\n }\n if( decimals > 0 )\n {\n // If we haven't marked this item as 'initialised'\n // then do so now. It means we should place the caret just \n // before the decimal. This will never be un-initialised before\n // the decimal character itself is entered.\n if( typeof data.init === 'number' && data.init < 1 )\n {\n start = this.value.length-decimals-( data.init < 0 ? 1 : 0 );\n data.c = start-this.value.length;\n data.init = 1;\n \n $this.data('numFormat', data);\n }\n // if enter '0'\n else if( typeof data.init === 'boolean' )\n {\n data.init = 1;\n data.c =-decimals -1;\n }\n\n // Increase the cursor position if the caret is to the right\n // of the decimal place, and the character pressed isn't the backspace key.\n else if( start > this.value.length - decimals && code != 8 && code != 46 )\n {\n data.c++;\n \n // Store the data, now that it's changed.\n $this.data('numFormat', data);\n }\n else if( code == 46 && start < this.value.length - decimals && start > 0 )\n {\n if( this.value.slice(start-1, start) != thousands_sep )\n {\n data.c++;\n }\n }\n }\n // integer number\n else if( code == 46 && this.value.slice(start-1, start) !== thousands_sep && start > 0 )\n {\n data.c++;\n }\n \n //console.log( 'Setting pos: ', start, decimals, this.value.length + data.c, this.value.length, data.c );\n\n // Set the selection position.\n setPos = this.value.length+data.c;\n setSelectionRange.apply(this, [setPos, setPos]);\n },\n \n /**\n * Reformat when pasting into the field.\n *\n * @param object e : jQuery event object.\n *\n * @return false : prevent default action.\n */\n 'paste.format' : function(e){\n \n // Defint $this. It's used twice!.\n var $this = $(this),\n original = e.originalEvent,\n val = null;\n \n // Get the text content stream.\n if (window.clipboardData && window.clipboardData.getData) { // IE\n val = window.clipboardData.getData('Text');\n } else if (original.clipboardData && original.clipboardData.getData) {\n val = original.clipboardData.getData('text/plain');\n }\n \n // Do the reformat operation.\n $this.val(val);\n \n // Stop the actual content from being pasted.\n e.preventDefault();\n return false;\n }\n \n })\n \n // Loop each element (which isn't blank) and do the format.\n .each(function(){\n \n var $this = $(this).data('numFormat',{\n c : -(decimals+1),\n decimals : decimals,\n thousands_sep : thousands_sep,\n dec_point : dec_point,\n regex_dec_num : regex_dec_num,\n regex_dec : regex_dec,\n init : false\n });\n \n // Return if the element is empty.\n if( this.value === '' ) return;\n \n // Otherwise... format!!\n $this.val($this.val());\n });\n }\n else\n {\n // return the collection.\n return this.each(function(){\n var $this = $(this), num = +$this.text().replace(regex_dec_num,'').replace(regex_dec,'.');\n $this.number( !isFinite(num) ? 0 : +num, decimals, dec_point, thousands_sep );\n });\n }\n }\n \n // Add this number to the element as text.\n return this.text( $.number.apply(window,arguments) );\n };\n \n //\n // Create .val() hooks to get and set formatted numbers in inputs.\n //\n \n // We check if any hooks already exist, and cache\n // them in case we need to re-use them later on.\n var origHookGet = null, origHookSet = null;\n \n // Check if a text valHook already exists.\n if( $.isPlainObject( $.valHooks.text ) )\n {\n // Preserve the original valhook function\n // we'll call this for values we're not \n // explicitly handling.\n if( $.isFunction( $.valHooks.text.get ) ) origHookGet = $.valHooks.text.get;\n if( $.isFunction( $.valHooks.text.set ) ) origHookSet = $.valHooks.text.set;\n }\n else\n {\n // Define an object for the new valhook.\n $.valHooks.text = {};\n } \n \n /**\n * Define the valHook to return normalised field data against an input\n * which has been tagged by the number formatter.\n *\n * @param object el : The raw DOM element that we're getting the value from.\n *\n * @return mixed : Returns the value that was written to the element as a\n * javascript number, or undefined to let jQuery handle it normally.\n */\n $.valHooks.text.get = function( el ){\n \n // Get the element, and its data.\n var $this = $(el), num,\n data = $this.data('numFormat');\n \n // Does this element have our data field?\n if( !data )\n {\n // Check if the valhook function already existed\n if( $.isFunction( origHookGet ) )\n {\n // There was, so go ahead and call it\n return origHookGet(el);\n }\n else\n {\n // No previous function, return undefined to have jQuery\n // take care of retrieving the value\n return undefined;\n }\n }\n else\n { \n // Remove formatting, and return as number.\n if( el.value === '' ) return '';\n \n // Convert to a number.\n num = +(el.value\n .replace( data.regex_dec_num, '' )\n .replace( data.regex_dec, '.' ));\n \n // If we've got a finite number, return it.\n // Otherwise, simply return 0.\n // Return as a string... thats what we're\n // used to with .val()\n return ''+( isFinite( num ) ? num : 0 );\n }\n };\n \n /**\n * A valhook which formats a number when run against an input\n * which has been tagged by the number formatter.\n *\n * @param object el : The raw DOM element (input element).\n * @param float : The number to set into the value field.\n *\n * @return mixed : Returns the value that was written to the element,\n * or undefined to let jQuery handle it normally. \n */\n $.valHooks.text.set = function( el, val )\n {\n // Get the element, and its data.\n var $this = $(el),\n data = $this.data('numFormat');\n \n // Does this element have our data field?\n if( !data )\n {\n \n // Check if the valhook function already exists\n if( $.isFunction( origHookSet ) )\n {\n // There was, so go ahead and call it\n return origHookSet(el,val);\n }\n else\n {\n // No previous function, return undefined to have jQuery\n // take care of retrieving the value\n return undefined;\n }\n }\n else\n {\n // Otherwise, don't worry about other valhooks, just run ours.\n return el.value = $.number( val, data.decimals, data.dec_point, data.thousands_sep );\n }\n };\n \n /**\n * The (modified) excellent number formatting method from PHPJS.org.\n * http://phpjs.org/functions/number_format/\n *\n * @modified by Sam Sehnert (teamdf.com)\n * - don't redefine dec_point, thousands_sep... just overwrite with defaults.\n * - don't redefine decimals, just overwrite as numeric.\n * - Generate regex for normalizing pre-formatted numbers.\n *\n * @param float number : The number you wish to format, or TRUE to use the text contents\n * of the element as the number. Please note that this won't work for\n * elements which have child nodes with text content.\n * @param int decimals : The number of decimal places that should be displayed. Defaults to 0.\n * @param string dec_point : The character to use as a decimal point. Defaults to '.'.\n * @param string thousands_sep : The character to use as a thousands separator. Defaults to ','.\n *\n * @return string : The formatted number as a string.\n */\n $.number = function( number, decimals, dec_point, thousands_sep ){\n // Set the default values here, instead so we can use them in the replace below.\n thousands_sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep;\n dec_point = (typeof dec_point === 'undefined') ? '.' : dec_point;\n decimals = !isFinite(+decimals) ? 0 : Math.abs(decimals);\n \n // Work out the unicode representation for the decimal place and thousand sep. \n var u_dec = ('\\\\u'+('0000'+(dec_point.charCodeAt(0).toString(16))).slice(-4));\n var u_sep = ('\\\\u'+('0000'+(thousands_sep.charCodeAt(0).toString(16))).slice(-4));\n \n // Fix the number, so that it's an actual number.\n number = (number + '')\n .replace('\\.', dec_point) // because the number if passed in as a float (having . as decimal point per definition) we need to replace this with the passed in decimal point character\n .replace(new RegExp(u_sep,'g'),'')\n .replace(new RegExp(u_dec,'g'),'.')\n .replace(new RegExp('[^0-9+\\-Ee.]','g'),'');\n \n var n = !isFinite(+number) ? 0 : +number,\n s = '',\n toFixedFix = function (n, decimals) {\n var k = Math.pow(10, decimals);\n return '' + Math.round(n * k) / k;\n };\n \n // Fix for IE parseFloat(0.55).toFixed(0) = 0;\n s = (decimals ? toFixedFix(n, decimals) : '' + Math.round(n)).split('.');\n if (s[0].length > 3) {\n s[0] = s[0].replace(/\\B(?=(?:\\d{3})+(?!\\d))/g, thousands_sep);\n }\n if ((s[1] || '').length < decimals) {\n s[1] = s[1] || '';\n s[1] += new Array(decimals - s[1].length + 1).join('0');\n }\n return s.join(dec_point);\n }\n \n})(jQuery);","var __templateData = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\n\n\n\n\n\n\n\n;return buf.join(\"\");\n};\nif (typeof define === 'function' && define.amd) {\n define([], function() {\n return __templateData;\n });\n} else if (typeof module === 'object' && module && module.exports) {\n module.exports = __templateData;\n} else {\n __templateData;\n}","rivets = require 'rivets'\nCollection = require 'models/base/collection'\nmoment = require 'moment'\n_ = require 'underscore'\nmediator = require 'mediator'\nBackbone = require 'backbone'\nModel = require 'models/base/model'\nBaseModel = Backbone.Model\nmodule.exports = class RivetsHelper\n\n setup: ->\n getKeyPathRoot = (model, keypath) ->\n keypath = keypath.split(\":\")\n model = model.get(keypath.shift()) while keypath.length > 1\n return { model: model, key: keypath.shift() }\n\n getterSetter = (model, keypath, value) ->\n root = getKeyPathRoot(model, keypath)\n model = root.model\n unless model instanceof BaseModel\n return model\n if arguments.length is 2\n if keypath is '_syncState' #hack for model.fetch hookup\n return model._syncState\n return model.get(root.key)\n model.set root.key, value\n return\n\n read = (obj, keypath) ->\n return obj[keypath] if obj instanceof Backbone.Collection\n value = getterSetter(obj, keypath)\n\n # rivets cant iterate over Backbone.Collection -> return Array\n return value.models if value instanceof Backbone.Collection\n value\n\n publish = (obj, keypath, value) ->\n if obj instanceof Collection\n obj[keypath] = value\n else\n getterSetter obj, keypath, value\n return\n\n onOffFactory = (action) ->\n (model, keypath, callback) ->\n return unless (model instanceof BaseModel or model instanceof Collection)\n root = getKeyPathRoot(model, keypath)\n collection = root.model.get(root.key) || root.model\n if collection instanceof Collection\n collection[action] \"add remove reset filter sort syncStateChange\", callback\n else\n root.model[action] \"change:\" + root.key, callback\n return\n\n rivets.adapters[\":\"] =\n subscribe: onOffFactory(\"on\")\n unsubscribe: onOffFactory(\"off\")\n read: read\n publish: publish\n\n rivets.config.rootInterface = '>'\n rivets.adapters['>'] = rivets.adapters['.']\n delete rivets.adapters['.']\n\n rivets.formatters.pre = (value, pre) ->\n pre + value\n\n rivets.formatters.hasItems = (value) ->\n value? and value instanceof Array and value.length > 0\n\n rivets.formatters.fallback = (value, fb...) ->\n value || fb.join(' ')\n\n rivets.formatters.eq = (value, test) ->\n value?.toString() is test?.toString()\n \n rivets.formatters.any = (value, test...) ->\n _.some(test, (t)-> \n value?.toString() is t?.toString()\n )\n\n rivets.formatters.fallback = (value, words...) ->\n if !value? || (typeof value is 'string' && value.trim() is \"\")\n return words.join ' '\n return value\n\n rivets.formatters.bracketify = (value) ->\n return \"(#{value})\" if !!value\n return \"\"\n\n rivets.formatters.toJSON = (value) ->\n return value.toJSON() if value.toJSON?\n return \"\"\n\n rivets.formatters.parseAsJson = (value) ->\n return {}unless value?\n return JSON.parse(value)\n\n rivets.formatters.before = (value, words...) ->\n words = words.join ' '\n return if value? then \"#{words}#{value}\" else \"\"\n\n rivets.formatters.after = (value, words...) ->\n words = words.join ' '\n return if value? then \"#{value}#{words}\" else \"\"\n\n rivets.formatters.date = (value, words...) ->\n return words.join ' ' unless value?\n return words.join ' ' if $.isEmptyObject(value)\n return new moment(value).format(\"DD/MM/YYYY\")\n\n rivets.formatters.fromNow = (value) ->\n if not value?\n return words.join ' '\n if $.isEmptyObject(value)\n return words.join ' '\n moment(value).fromNow()\n\n rivets.formatters.calendar = (value) ->\n return unless value?\n moment.lang('en',\n calendar :\n lastDay : '[Yesterday]',\n sameDay : '[Today]',\n nextDay : '[Tomorrow]',\n lastWeek : '[last] dddd',\n nextWeek : 'dddd',\n sameElse : 'L'\n )\n\n return new moment(value).calendar()\n\n rivets.formatters.isPast = (value) ->\n if not value?\n return words.join ' '\n if $.isEmptyObject(value)\n return words.join ' '\n return if value.parseDate() < moment() then true else false\n\n rivets.formatters.age = (value) ->\n return moment().diff(value, 'years') + \" years\"\n return moment(value).fromNow(true);\n\n rivets.formatters.addDays = (value, days) ->\n return new Date() unless value?\n return new moment(value).add(\"days\", parseInt(days) || 0).toDate()\n\n rivets.formatters.paymentStatus = (value) ->\n return \"Unreconciled\" if value is 'Unreconciled' or 'U'\n return \"Part Reconciled\" if value is 'PartReconciled' or 'P'\n return \"Fully Reconciled\" if value is 'FullyReconciled' or 'R'\n return \"\"\n\n rivets.formatters.invoiceStatus = (value) ->\n return \"Unpaid\" if value is'Unpaid'\n return \"Part Paid\" if value is 'PartPaid'\n return \"Fully Paid\" if value is 'FullyPaid'\n return value\n\n rivets.formatters.gender = (value) ->\n return 'Male' if value is 'M'\n return \"Female\" if value is 'F'\n return \"Not Specified\" if value is 'N'\n return value\n\n rivets.formatters.currency = (value, trim) ->\n symbol = mediator.provider.toJSON()?.currency\n result = symbol + parseFloat(value).toFixed(2)\n if result.indexOf(\".00\") > 0 and trim\n return symbol + parseFloat(value).toFixed(0)\n return result\n\n rivets.formatters.percentage = (value) ->\n return parseFloat(value).toFixed(2) + \"%\"\n\n rivets.formatters.toFixed = {\n read: (value, args) ->\n return parseFloat(value).toFixed(args)\n publish: (value, args)->\n return parseFloat(value)\n }\n\n rivets.formatters.capitalize = {\n read: (value) ->\n return value?.replace(/(?:^|\\s)\\S/g, (a) -> return a.toUpperCase());\n publish: (value)->\n return value?.replace(/(?:^|\\s)\\S/g, (a) -> return a.toUpperCase());\n }\n\n rivets.formatters.provider = (value) =>\n operator = if value.indexOf(\"?\") < 0 then \"?\" else \"&\"\n return value + operator + \"x-provider-name=#{mediator.provider.get('path')}\"\n\n rivets.formatters.prepend = (value, pre) ->\n return pre + value\n\n rivets.formatters.append = (value, pre) ->\n return value + pre\n\n rivets.formatters.invert = (value) ->\n return !value\n\n rivets.formatters.trueif = (value, value2) ->\n if typeof value is \"boolean\"\n return value.toString() is value2\n return value is value2\n\n rivets.formatters.falseif = (value, value2) ->\n if typeof value is \"boolean\"\n return value.toString() isnt value2\n return value isnt value2\n\n rivets.formatters.isGreater = (value, value2) =>\n return value > parseInt(value2)\n\n rivets.formatters.isLess = (value, value2) =>\n return value < parseInt(value2)\n\n rivets.formatters.LTE = (value, value2) =>\n return value <= parseInt(value2)\n\n rivets.formatters.GTE = (value, value2) =>\n return value >= parseInt(value2)\n\n rivets.formatters.isEqual = (value, value2) ->\n return parseInt(value) is parseInt(value2)\n\n rivets.formatters.hasMore = (collection) ->\n console.log \"hasMore\"\n return false unless collection and collection.total?\n return collection.total > collection.length\n\n rivets.formatters.remainingCountOr = (collection, step) ->\n return 0 unless collection and collection.total?\n return Math.min(collection.total - collection.length, 25)\n\n rivets.formatters.limit = {\n read: (value, args) ->\n return value\n publish: (value, args...)->\n min = if args[0]? then parseFloat(args[0]) else -Infinity\n max = if args[1]? then parseFloat(args[1]) else Infinity\n\n return min if value < min || _.isNaN(value)\n return max if value > max\n return value\n }\n\n rivets.formatters.empty = (value) ->\n return not value?\n\n rivets.formatters.isBetween = (value, args...) ->\n return value >= parseInt(args[0]) and value <= parseInt(args[1])\n\n rivets.formatters.valueIn = (value, args...) ->\n valueIn = args.join \"\"\n return valueIn.indexOf(value ) >= 0\n\n rivets.formatters.hasItems = (value, min, max) ->\n return false unless value? and _.isArray(value)\n min = parseInt(min || 1)\n max = parseInt(max || value.length)\n return !(value.length < min || value.length > max)\n\n rivets.formatters.length = (value) ->\n return 0 unless value? and _.isArray(value)\n return value.length\n\n rivets.formatters.min = (value, other) ->\n Math.min(value || 0, other || 0)\n\n rivets.formatters.toArray = (collection) ->\n return [] if !collection?\n collection.models\n\n rivets.formatters.firstValues = (collection) ->\n if collection? and collection.length > 0\n return collection[0].values\n return []\n\n rivets.formatters.modelAt = (collection, idx, prop) ->\n idx = parseInt(idx)\n if collection? && collection.length > 0 && collection.length > idx\n obj = collection[idx].toJSON()\n return if prop? then obj[prop] else obj\n return null\n\n rivets.formatters.appointmentStatus = (value) =>\n switch value\n when 0, 7\n return \"Booked\"\n when 1\n return \"Arrived\"\n when 2\n return \"Complete\"\n when 3\n return \"DNA\"\n when 4\n return \"Cancelled\"\n\n rivets.formatters.practitionerOption = (value) =>\n return \"#{value.get('name')} (#{value.get('gender')})\"\n\n rivets.formatters.stringToBool = (value) ->\n return value is \"true\" || value is true\n\n rivets.formatters.toExternalLink = (value) ->\n return \"\" unless value?\n return value if value.substring(0, 7) is 'http://'\n return \"http://#{value}\"\n\n rivets.formatters.YesNo = (value, yes_word, no_word) ->\n return yes_word if value\n return no_word\n\n rivets.formatters.YesNoPhrase = (value, args...) ->\n phrases = args.join(\" \").split(\"::\")\n return phrases[0] if value is true\n return phrases[1]\n\n rivets.formatters.dateFormat = (value, args...) =>\n return null unless value?\n return new moment(value).format(args.join(' '))\n\n rivets.formatters.dateOnly = (value) =>\n return null unless value?\n if typeof value is \"string\"\n regex = /^\\d{4}\\-\\d{2}\\-\\d{2}/\n val = value.match(regex)\n return null if val.length < 1\n return new moment(val[0]).toDate()\n\n return value\n\n rivets.formatters.status = (value) =>\n if value == \"InProgress\"\n return \"In Progress\"\n else\n return value\n\n rivets.formatters.toKeyValuePair = (value) =>\n dictionary = []\n _.each(_.pairs(value), (kvp) =>\n dictionary.push({ key:kvp[0], value:kvp[1] })\n )\n return dictionary\n\n rivets.formatters.isToday = (value) =>\n val = new moment(value)\n today = new moment()\n\n return false unless value? && val.isValid()\n return val.isSame(today, \"day\")\n\n rivets.formatters.toTimeOfDay = (value) =>\n val = new moment(value)\n date = new moment(value).startOf(\"day\")\n\n date.add(\"hour\", 12)\n return \"morning\" if val.toDate() < date.toDate()\n date.add(\"hour\", 6)\n return \"evening\" if val.toDate() >= date.toDate()\n return \"afternoon\"\n\n rivets.formatters.daysInMonth = (value) ->\n return 0 unless value?\n return new moment(value).daysInMonth();\n\n rivets.formatters.toFriendlyDay = (value) =>\n val = new moment(value).startOf(\"day\")\n diff = val.diff(new moment().startOf(\"day\"), \"day\")\n\n return val.format(\"dddd\") if diff < 0 || diff > 1\n return \"Today\" if diff is 0\n return \"Tomorrow\" if diff is 1\n\n rivets.formatters.toDay = (value) =>\n return \"\" unless value >= 0 && value < 7\n return new moment().day(value).format(\"dddd\")\n\n rivets.formatters.toDate = (value) =>\n return \"\" unless value > 0\n return new moment().date(value).format(\"Do\")\n\n rivets.formatters.toNumeric = (value) =>\n return if $.isNumeric(value) then parseFloat(value) else NaN\n\n rivets.formatters.toString = (value) =>\n return value.toString()\n\n rivets.formatters.substring = (value, args...) =>\n return value.substring(parseInt(args[0]), parseInt(args[1]))\n\n rivets.formatters.flatText = (value) =>\n return value.replace(/\\n/g, \" \")\n\n rivets.formatters.nullOrWhiteSpace = (value)=>\n return !value? or value.trim().length < 1\n\n rivets.formatters.nullOrUndefined = (value) =>\n return !value?\n\n rivets.formatters.hasProperty = (value, args) =>\n return value? and args? and value[args]?\n\n rivets.formatters.toLower = (value) ->\n return \"\" unless value?\n return value.toLowerCase()\n\n rivets.formatters.uncamel = (s) ->\n return \"\" if !s\n return s\n .replace(/([A-Z])/g, ' $1')\n .replace(/^./, (str) -> str.toUpperCase())\n\n rivets.formatters.toColour = (c) =>\n return unless c?\n keys = [\"r\", \"g\", \"b\", \"a\"]\n vals = []\n\n if(c.substring(0, 3).toLowerCase() is \"rgb\")\n vals = c.substring(c.indexOf(\"(\") + 1, c.lastIndexOf(\")\")).split(\",\")\n vals.push(\"255\") if vals.length < 4\n\n for i in [0..3]\n vals[i] = parseInt(vals[i])\n return _.object(keys, vals)\n\n c = c.substring(1, c.length) if (c.charAt(0) is '#')\n\n for i in [0..(c.length/2)-1]\n vals.push(parseInt(c.substring(i*2, (i*2)+2), 16))\n vals.push(255) if vals.length < 4\n return _.object(keys, vals)\n\n rivets.formatters.toHSL = (c) =>\n return unless c?\n c.r /= 255\n c.g /= 255\n c.b /= 255\n max = Math.max(c.r, c.g, c.b)\n min = Math.min(c.r, c.g, c.b)\n l = (max + min) / 2\n if max == min\n h = s = 0\n else\n d = max - min\n s = if l > 0.5 then d / (2 - max - min) else d / (max + min)\n switch max\n when c.r\n h = (c.g - c.b) / d + (if c.g < c.b then 6 else 0)\n when c.g\n h = (c.b - c.r) / d + 2\n when c.b\n h = (c.r - c.g) / d + 4\n h /= 6\n\n return {h:h, s:s, l:l}\n\n rivets.formatters.fromHSL = (c) =>\n return unless c?\n hue2rgb = (p, q, t) ->\n t += 1 if t < 0\n t -= 1 if t > 1\n\n if t < 1 / 6\n return p + (q - p) * 6 * t\n if t < 1 / 2\n return q\n if t < 2 / 3\n return p + (q - p) * (2 / 3 - t) * 6\n return p\n\n if c.s == 0\n r = g = b = c.l\n else\n q = if c.l < 0.5 then c.l * (1 + c.s) else c.l + c.s - c.l * c.s\n p = 2 * c.l - q\n r = hue2rgb(p, q, c.h + 1 / 3)\n g = hue2rgb(p, q, c.h)\n b = hue2rgb(p, q, c.h - (1 / 3))\n\n return {\n r: Math.round(r * 255)\n g: Math.round(g * 255)\n b: Math.round(b * 255)\n }\n\n rivets.formatters.toRGBA= (c) =>\n return unless c?\n c.a = 255 unless c.a?\n return \"rgba(#{c.r}, #{c.g}, #{c.b}, #{c.a})\"\n\n rivets.formatters.lightenHSL = (c, percentage) =>\n return unless c?\n percentage = percentage || 0\n c.l = Math.min(c.l + (percentage/100), 1)\n return c\n\n rivets.formatters.darkenHSL = (c, percentage) =>\n return unless c?\n percentage = percentage || 0\n c.l = Math.max(c.l - (percentage/100), 0)\n return c\n\n rivets.formatters.lighten = (c, percentage) =>\n return unless c?\n percentage = percentage || 0\n c.r = Math.min(c.r + Math.round(percentage * 2.55), 255)\n c.g = Math.min(c.g + Math.round(percentage * 2.55), 255)\n c.b = Math.min(c.b + Math.round(percentage * 2.55), 255)\n return c\n\n rivets.formatters.darken = (c, percentage) =>\n return unless c?\n percentage = percentage || 0\n c.r = Math.max(c.r - Math.round(percentage * 2.55), 0)\n c.g = Math.max(c.g - Math.round(percentage * 2.55), 0)\n c.b = Math.max(c.b - Math.round(percentage * 2.55), 0)\n return c\n\n rivets.formatters.commaSeparate = (value) ->\n if value instanceof Array\n return value.join(\", \").slice 0, -2\n return \"\"\n\n rivets.formatters.toList = (value) =>\n return unless (value? && value instanceof Array && value.length > 0)\n return value[0] if value.length is 1\n return value.slice(0, value.length-1).join(\", \") + \" and \" + value[value.length-1]\n\n rivets.formatters.join = (value, prop, seperator) ->\n seperator ?= \", \"\n return _.pluck(value, prop).join(seperator)\n\n rivets.formatters.modelize = (value) ->\n if value instanceof Array\n new Collection(value).models\n else\n new Model(value)\n\n rivets.formatters.dekey = (svc) ->\n c = new Collection\n for key in _.keys(svc)\n c.add({id:key, name:svc[key]})\n c.models\n\n rivets.formatters.invoiceStatus = (value) ->\n return if value == 'P' then 'Paid' else 'Unpaid'\n\n rivets.formatters.formatInvoicePeriod = (value) ->\n if value?\n return value.name + \" (Running on #{value.dayOfWeek} every #{value.intervalInWeeks} weeks)\"\n\n rivets.formatters.filepath = (value) =>\n return value.replace(/\\//g,\"%2f\")\n .replace(/\\\\/g,\"%2f\")\n\n #Binders\n\n rivets.binders.selected = (el, value) =>\n return false unless value?\n val = el.value || el.getAttribute(\"value\")\n if value.toString() is val\n el.setAttribute(\"selected\", \"selected\")\n else\n el.removeAttribute(\"selected\")\n\n rivets.binders.emphasize = (el, value) ->\n return false unless value?\n if value.toString() is el.getAttribute(\"index\")\n el.classList.add(\"emphasize\")\n else\n el.classList.remove(\"emphasize\")\n\n rivets.binders.min = (el, value) =>\n return unless value?\n value = parseFloat(value)\n el.min = value\n if value > el.value\n el.value = value\n $(el).trigger(\"change\")\n\n rivets.binders.active = (el, value)=>\n index = el.getAttribute(\"index\")\n\n if value? && value.toString() is index\n el.classList.add(\"active\")\n $(el).find(\".item-body\").slideDown()\n else\n el.classList.remove(\"active\")\n $(el).find(\".item-body\").slideUp()\n\n rivets.binders.validate = (el, value) ->\n $el = $(el)\n $el.removeClass(\"valid invalid unvalidated\")\n\n tooltips = Foundation.libs.tooltip\n\n $input = $el.find('input, select')\n\n if (!value? || value.isValid is true)\n $el.addClass(if !value? then \"unvalidated\" else \"valid\")\n $tip = tooltips.getTip($input)\n\n $input.removeClass(\"has-tip tip-top open\")\n .removeAttr(\"data-tooltip\")\n .removeAttr(\"data-selector\")\n .removeData()\n\n $tip?.remove();\n\n return\n\n if value.isValid is false\n $el.addClass(\"invalid\")\n\n unless mediator.device.get(\"isTouch\")\n $input.addClass(\"has-tip tip-top\")\n $input.attr(\"data-tooltip\": \"\")\n $input.attr(title: value.message)\n tooltips.init()\n else\n $el.find(\".error-message > .message\").text(value.message)\n\n return\n\n rivets.binders[\"style-*\"] = (el, value) ->\n return unless value?\n $(el).css(@args[0], value)\n\n rivets.binders.sort = (el, value) ->\n $el = $(el)\n key = $el.data(\"sort-key\")\n\n if (key is value)\n $(\"[data-sort]\").find(\".sort-indicator\").remove()\n $el.append('
')\n if (key + \" DESC\" is value)\n $(\"[data-sort]\").find(\".sort-indicator\").remove()\n $el.append('
')\n\n rivets.binders.availability = (el, value) ->\n $el = $(el)\n period = $el.parents(\"[data-period]\").data(\"period\")\n $el.removeClass(\"success secondary disabled\")\n\n if period?\n date = new moment($el.attr(\"data-date\")).startOf(\"day\")\n mStart = new moment(date)\n mEnd = new moment(date)\n\n switch period\n when \"morning\"\n _start = mStart.toDate()\n _end = mEnd.add(\"hour\", 12).toDate()\n when \"afternoon\"\n _start = mStart.add(\"hour\", 12).toDate()\n _end = mEnd.add(\"hour\", 18).toDate()\n when \"evening\"\n _start = mStart.add(\"hour\", 18).toDate()\n _end = mEnd.endOf(\"day\").toDate()\n\n any = _.some(value, (appt)=>\n start = new moment(appt.get(\"startDateTime\")).toDate()\n return start < _end && start >= _start && start > new Date()\n )\n\n unless any\n el.innerHTML = \"
\n
No
\n
\n
Appointments
\n
Available
\n
\n
\n
Appts
\n
\n
\"\n $el.addClass(\"secondary disabled\")\n else\n el.innerHTML = \"
\n
\n \n
\n
\n
Appointments
\n
Available
\n
\n
\n
Appts
\n
\n
\"\n $el.addClass(\"success\")\n","var __templateData = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\n\nbuf.push(\"
×



\");;return buf.join(\"\");\n};\nif (typeof define === 'function' && define.amd) {\n define([], function() {\n return __templateData;\n });\n} else if (typeof module === 'object' && module && module.exports) {\n module.exports = __templateData;\n} else {\n __templateData;\n}","var __templateData = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\n\nbuf.push(\"
×



\");;return buf.join(\"\");\n};\nif (typeof define === 'function' && define.amd) {\n define([], function() {\n return __templateData;\n });\n} else if (typeof module === 'object' && module && module.exports) {\n module.exports = __templateData;\n} else {\n __templateData;\n}","/**\n * Underscore mixins for deep objects\n *\n * Based on https://gist.github.com/echong/3861963\n */\nvar _ = require('underscore')\nvar Backbone = require('backbone')\n\nmodule.exports = function() {\n\n var arrays, basicObjects, deepClone, deepExtend, deepExtendCouple, isBasicObject,\n __slice = [].slice;\n\n deepClone = function(obj) {\n var func, isArr;\n if (!_.isObject(obj) || _.isFunction(obj)) {\n return obj;\n }\n if (obj instanceof Backbone.Collection || obj instanceof Backbone.Model) {\n return obj;\n }\n if (_.isDate(obj)) {\n return new Date(obj.getTime());\n }\n if (_.isRegExp(obj)) {\n return new RegExp(obj.source, obj.toString().replace(/.*\\//, \"\"));\n }\n isArr = _.isArray(obj || _.isArguments(obj));\n func = function(memo, value, key) {\n if (isArr) {\n memo.push(deepClone(value));\n } else {\n memo[key] = deepClone(value);\n }\n return memo;\n };\n return _.reduce(obj, func, isArr ? [] : {});\n };\n\n isBasicObject = function(object) {\n if (object == null) return false;\n return (object.prototype === {}.prototype || object.prototype === Object.prototype) && _.isObject(object) && !_.isArray(object) && !_.isFunction(object) && !_.isDate(object) && !_.isRegExp(object) && !_.isArguments(object);\n };\n\n basicObjects = function(object) {\n return _.filter(_.keys(object), function(key) {\n return isBasicObject(object[key]);\n });\n };\n\n arrays = function(object) {\n return _.filter(_.keys(object), function(key) {\n return _.isArray(object[key]);\n });\n };\n\n deepExtendCouple = function(destination, source, maxDepth) {\n var combine, recurse, sharedArrayKey, sharedArrayKeys, sharedObjectKey, sharedObjectKeys, _i, _j, _len, _len1;\n if (maxDepth == null) {\n maxDepth = 20;\n }\n if (maxDepth <= 0) {\n console.warn('_.deepExtend(): Maximum depth of recursion hit.');\n return _.extend(destination, source);\n }\n sharedObjectKeys = _.intersection(basicObjects(destination), basicObjects(source));\n recurse = function(key) {\n return source[key] = deepExtendCouple(destination[key], source[key], maxDepth - 1);\n };\n for (_i = 0, _len = sharedObjectKeys.length; _i < _len; _i++) {\n sharedObjectKey = sharedObjectKeys[_i];\n recurse(sharedObjectKey);\n }\n sharedArrayKeys = _.intersection(arrays(destination), arrays(source));\n combine = function(key) {\n return source[key] = _.union(destination[key], source[key]);\n };\n for (_j = 0, _len1 = sharedArrayKeys.length; _j < _len1; _j++) {\n sharedArrayKey = sharedArrayKeys[_j];\n combine(sharedArrayKey);\n }\n return _.extend(destination, source);\n };\n\n deepExtend = function() {\n var finalObj, maxDepth, objects, _i;\n objects = 2 <= arguments.length ? __slice.call(arguments, 0, _i = arguments.length - 1) : (_i = 0, []), maxDepth = arguments[_i++];\n if (!_.isNumber(maxDepth)) {\n objects.push(maxDepth);\n maxDepth = 20;\n }\n if (objects.length <= 1) {\n return objects[0];\n }\n if (maxDepth <= 0) {\n return _.extend.apply(this, objects);\n }\n finalObj = objects.shift();\n while (objects.length > 0) {\n finalObj = deepExtendCouple(finalObj, deepClone(objects.shift()), maxDepth);\n }\n return finalObj;\n };\n _.mixin({\n deepClone: deepClone,\n isBasicObject: isBasicObject,\n basicObjects: basicObjects,\n arrays: arrays,\n deepExtend: deepExtend\n });\n\n};\n","Chaplin = require 'chaplin'\n\nmediator = module.exports = Chaplin.mediator\n","Chaplin = require 'chaplin'\nModel = require './model'\n_ = require 'underscore'\n\nmediator = require 'mediator'\n\nmodule.exports = class Collection extends Chaplin.Collection\n # Mixin a synchronization state machine.\n _(@prototype).extend Chaplin.SyncMachine\n sort_key: undefined\n # Use the project base model per default, not Chaplin.Model\n model: Model\n\n initialize: =>\n super\n @_previousSync = null\n @_syncState = \"unsynced\"\n @filtered = @models\n @on 'add remove reset sort', => \n @finishSync() \n\n applyFilter: (args...)=>\n @filterArgs = args\n @filtered = _.filter(@models, @filterFn, this)\n @trigger(\"filter\")\n\n filterFn: ()=>\n return true\n\n fetch: (options) =>\n @beginSync() \n options ?= {}\n options.silent = true\n # options.beforeSend = (xhr)->\n # if mediator.provider?.get(\"name\")?\n # xhr.setRequestHeader(\"x-provider-name\", mediator.provider.get(\"name\"))\n\n options.success = _.wrap (options.success ? ->), (func, args...) =>\n func args...\n @sort()\n return super(options)\n\n reset:=>\n #safety method incase not called in post\n @beginSync() unless @isSyncing()\n super\n\n parse: (resp, xhr) ->\n resp.result or resp.results or resp\n\n comparator: (a, b) =>\n return 0 unless @sort_key?\n keys = @sort_key.split(\" \");\n sortKey = keys[0];\n fallback_a = '0'\n fallback_b = '0'\n if sortKey is 'reference'\n fallback_a = a.id\n fallback_b = b.id\n\n \n ## If sort key is property of an array, then just sort by that first element in the array for each model.\n isArray = if sortKey.indexOf('[') >= 0 then true else false\n if isArray\n arrayName = sortKey.substring(0, sortKey.indexOf('['))\n arrayProperty = sortKey.substring(sortKey.indexOf(']') + 2)\n if a.get(arrayName)? and a.get(arrayName).length > 0 and b.get(arrayName)? and b.get(arrayName).length > 0\n a = a.get(arrayName)[0][arrayProperty] || fallback_a\n b = b.get(arrayName)[0][arrayProperty] || fallback_b\n else\n a = a.get(sortKey) || fallback_a\n b = b.get(sortKey) || fallback_b\n unless isNaN(a) or isNaN(b)\n a = parseFloat(a) || 0\n b = parseFloat(b) || 0\n aIsDate = a isnt '0' and not isNaN(Date.parse(a))\n bIsDate = b isnt '0' and not isNaN(Date.parse(b))\n\n if aIsDate or bIsDate\n a = if aIsDate then new Date(a) else new Date()\n b = if bIsDate then new Date(b) else new Date()\n\n\n if keys.length > 1 and keys[1] = 'DESC'\n return 1 if a < b \n return -1 if a > b\n return 0\n else\n return 1 if a > b \n return -1 if a < b\n return 0\n","Chaplin = require 'chaplin'\nmediator = require 'mediator'\n_ = require 'underscore'\nBackbone = require 'backbone'\n\nmodule.exports = class DeepModel extends Backbone.DeepModel\n# module.exports = class DeepModel extends Backbone.Model\n # Mixin an Event Broker\n _(@prototype).extend Chaplin.SyncMachine\n _(@prototype).extend Chaplin.EventBroker\n\n attributes = ['getAttributes', 'serialize', 'disposed']\n for attr in attributes\n @::[attr] = Chaplin.Model::[attr]\n \n initialize: =>\n super\n @_previousSync = null\n @_syncState = \"unsynced\"\n @on 'syncStateChange', (args...) =>\n @trigger 'change:_syncState', args\n dispose: ->\n return if @disposed\n Chaplin.Model::dispose.call(this)\n\n # fetch: (options) =>\n # @beginSync() \n # options ?= {}\n\n # options.beforeSend = (xhr)->\n # if mediator.provider?.get(\"name\")?\n # xhr.setRequestHeader(\"x-provider-name\", mediator.provider.get(\"name\"))\n\n # super(options).done =>\n # @finishSync()\n\n parse: (resp, xhr) ->\n resp.result or resp.results or resp","Chaplin = require 'chaplin'\nmediator = require 'mediator'\n_ = require 'underscore'\n\nmodule.exports = class Model extends Chaplin.Model\n _(@prototype).extend Chaplin.SyncMachine\n \n initialize: =>\n super\n @_previousSync = null\n @_syncState = \"unsynced\"\n @on 'syncStateChange', (args...) =>\n @trigger 'change:_syncState', args\n \n # fetch: (options) =>\n # @beginSync() \n # options ?= {}\n\n # options.beforeSend = (xhr)->\n # if mediator.provider?.get(\"name\")?\n # xhr.setRequestHeader(\"x-provider-name\", mediator.provider.get(\"name\"))\n\n # super(options).done =>\n # @finishSync()\n\n parse: (resp, xhr) ->\n resp.result or resp.results or resp","Collection = require './collection'\n\nmodule.exports = class PagingCollection extends Collection\n model: require './model'\n\n parse: (res) =>\n @total = res?.total\n @hasMore = (@total || -1) > (@length + (res.results || res).length)\n @remaining = @total - (@length + (res.results || res).length)\n return res.results or res\n","DeepModel = require 'models/base/deep_model'\r\n\r\nmodule.exports = class User extends DeepModel\r\n defaults:\r\n stateUnknown: true\r\n isAuthenticated: false","NonAuthController = require 'controllers/base/non_auth_controller'\r\n\r\nAuthenticateScreen = require 'modules/authentication/views/authenticate-screen'\r\nResetPasswordScreen = require 'modules/authentication/views/reset-password-screen'\r\n\r\nmodule.exports = class AuthenicationController extends NonAuthController\r\n\r\n login: (p, r, o)->\r\n @view = new AuthenticateScreen\r\n region: 'main'\r\n redirect: if(p.redirect?) then \"/#{p.provider}#{p.redirect}\" else r.previous?.path\r\n\r\n reset: (p, r, o)=>\r\n @view = new ResetPasswordScreen\r\n region: 'main'\r\n process: p.process\r\n","Chaplin = require 'chaplin'\r\nmediator = require 'mediator'\r\nView = require 'views/base/view'\r\n$ = require 'jquery'\r\n_ = require 'underscore'\r\nmoment = require 'moment'\r\nAuthHelper = require 'lib/auth-helper'\r\nalert = require 'lib/alert'\r\nmediator: require 'mediator'\r\nModel = require 'models/base/model'\r\nDeepModel = require 'models/base/deep_model'\r\nCollection = require 'models/base/collection'\r\n\r\nmodule.exports = class AuthenticateScreen extends View\r\n template: require './template'\r\n validator: require './validator'\r\n className: 'authenticate'\r\n optionNames: View::optionNames.concat ['redirect']\r\n\r\n initialize: =>\r\n super\r\n @model ?= new Model()\r\n @view ?= new Model\r\n term: \"\"\r\n code: \"\"\r\n register: false\r\n\r\n extraBindings: =>\r\n user: mediator.user\r\n booking: mediator.booking\r\n\r\n search: =>\r\n window.scrollTo(0,0)\r\n @model.clear()\r\n if @getValidationResults(\"username\").validMobile then @model.set(\"mobileTelephone\", @view.get(\"term\"))\r\n if @getValidationResults(\"username\").validEmail then @model.set(\"email\", @view.get(\"term\"))\r\n\r\n @view.set(submitted:true)\r\n\r\n return unless @isValid(\"username\")\r\n\r\n @publishEvent 'loading:start'\r\n _.post\r\n url: \"/api/pronto/register/quick\"\r\n data: {term: @view.get('term')}\r\n success: (count)=>\r\n @view.set\r\n isSynced: true\r\n usersFound: count\r\n register: count is 0\r\n allowRegister: mediator.provider.get('allowRegister') || count is 1\r\n submitted: false\r\n\r\n @$(\".panel.active:visible input:first\").focus()\r\n @publishEvent 'loading:finish'\r\n\r\n error: (xhr, err, status) =>\r\n alert(@, \"Quick Search Failed\", xhr?.responseJSON?.responseStatus?.message || \"\", () => @publishEvent 'loading:finish')\r\n\r\n submit: (e)=>\r\n return unless e.which is 13\r\n @login()\r\n\r\n login: =>\r\n @publishEvent 'loading:start'\r\n @authenticate(@view.get(\"term\"), @model.get(\"password\"))\r\n\r\n authenticate: (username, password)=>\r\n _.post\r\n url: \"/api/auth/credentials\"\r\n data:\r\n username: username\r\n password: password\r\n success: (res)=>\r\n authHelper = new AuthHelper(@redirect || \"/#{mediator.provider.get('path')}/booking/service\")\r\n if not authHelper.done(res)\r\n @authenticate(username, password)\r\n @publishEvent 'loading:finish'\r\n\r\n error: (xhr, err, status) =>\r\n alert(@, \"Login Failed\", xhr?.responseJSON?.responseStatus?.message || \"\", () => @publishEvent 'loading:finish')\r\n\r\n resetPassword: =>\r\n @publishEvent 'loading:start'\r\n l = window.location\r\n\r\n _.post\r\n url: \"/api/pronto/user/online/reset\"\r\n data:\r\n username: @view.get(\"term\")\r\n host: \"#{l.protocol}//#{l.host}\"\r\n path: mediator.provider.get(\"path\")\r\n\r\n success: (res)=>\r\n alert(@, \"Reset Sent\", \"A reset confirmation message has been sent to either your email address or mobile phone number\", () => @publishEvent 'loading:finish')\r\n\r\n error: (xhr, err, status)=>\r\n alert(@, \"Password Reset Request Failed\", xhr?.responseJSON?.responseStatus?.message || \"\", () => @publishEvent 'loading:finish')\r\n\r\n verify: =>\r\n @publishEvent 'loading:start'\r\n _.post\r\n url: \"/api/pronto/register/verify\"\r\n data:\r\n code: @view.get(\"code\")\r\n\r\n success: (res)=>\r\n @model.set(res)\r\n @view.set(register:true)\r\n @publishEvent 'loading:finish'\r\n\r\n error: (xhr, err, status)=>\r\n alert(@, \"Verification Failed\", xhr?.responseJSON?.responseStatus?.message || \"\", () => @publishEvent 'loading:finish')\r\n\r\n register: =>\r\n window.scrollTo(0,0)\r\n @model.set\r\n locationId: mediator.booking?.get(\"appointment.location.id\") || null\r\n @view.set(submitted:true)\r\n return unless @isValid()\r\n @publishEvent 'loading:start'\r\n _.post\r\n url: \"/api/pronto/register/full\"\r\n data: @model.toJSON()\r\n success: (res)=>\r\n @publishEvent 'loading:finish'\r\n @authenticate(@model.get(\"email\"), @model.get(\"password\"))\r\n\r\n error: (xhr) =>\r\n alert(@, \"Registration Failed\", xhr?.responseJSON?.responseStatus?.message || \"\", () => @publishEvent 'loading:finish')\r\n","var __templateData = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\n\nbuf.push(\"

You have selected  at  on  at 

\\nWe now need you to log in or register to continue with your booking.
Please enter your email  or mobile number to login or register

If you have an account we will ask you for your password in the next step.

If you don't already have an account we will take you through the registration process.

Please Enter your password
Help! I've forgotten my password
Great news. The clinic already has your details so we can 'quick register' you.

we have sent a code to 

Verify
Please enter your details below to register
You don't appear to be on our system. Please ask at reception to set up an online registration
Please ensure your details are correct, enter a password and click register
Online registrations are currently disabled. Please ask at the clinic for a username


More than one client has been registered with this user name.
\");;return buf.join(\"\");\n};\nif (typeof define === 'function' && define.amd) {\n define([], function() {\n return __templateData;\n });\n} else if (typeof module === 'object' && module && module.exports) {\n module.exports = __templateData;\n} else {\n __templateData;\n}","ValidationMachine = require 'lib/ValidationMachine'\r\nmediator = require 'mediator'\r\n\r\nmodule.exports = class Validator extends ValidationMachine\r\n applyRules: =>\r\n super\r\n\r\n @requiredIf 'title', => return @view.get(\"register\") is true\r\n @requiredIf 'forename', => return @view.get(\"register\") is true\r\n @requiredIf 'surname', => return @view.get(\"register\") is true\r\n @requiredIf 'password', => return @view.get(\"register\") is true\r\n\r\n @rule 'confirm', =>\r\n return { isValid:true, message:\"\" } unless @view.get(\"register\") is true\r\n val = @model?.get(\"confirm\") || \"\"\r\n return null if (@model?.isNew() && !@view.get(\"submitted\") && val is \"\")\r\n return { isValid:false, message:\"Passwords do not match\" } unless @model.get(\"password\") is @model.get(\"confirm\")\r\n return { isValid:true, message:\"\" }\r\n\r\n @rule 'username', =>\r\n val = (@view.get(\"term\") || \"\").trim()\r\n return null unless @view.get(\"submitted\") || val isnt \"\"\r\n email = /^([a-zA-Z0-9_\\.\\-\\+])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z0-9]{2,4})+$/\r\n mobile = /^\\d+$/\r\n provider = mediator.provider?.toJSON()\r\n if provider?.license?.hasText is true && provider?.allowSMS\r\n return { isValid:false, message:\"Enter an email or mobile number. e.g. example@email.com or 07123456789\" } unless (email.test(val) || mobile.test(val))\r\n else\r\n return { isValid:false, message:\"Enter an email address. e.g. example@email.com\" } unless email.test(val)\r\n\r\n return { isValid:true, validEmail:email.test(val), validMobile:mobile.test(val), message:\"\" }\r\n\r\n @rule \"mobileTelephone\", =>\r\n return { isValid:true, message:\"\" } unless @view.get(\"register\") is true\r\n val = (@model?.get(\"mobileTelephone\") || \"\")?.trim()\r\n mobile = /^\\d+$/\r\n return null if @model?.isNew() && !@view.get(\"submitted\") && val is \"\"\r\n return { isValid:false, message:\"Enter a mobile number. e.g. 07123456789\" } unless mobile.test(val)\r\n return { isValid:true, message:\"\" }\r\n\r\n @rule \"email\", =>\r\n return { isValid:true, message:\"\" } unless @view.get(\"register\") is true\r\n val = (@model?.get(\"email\") || \"\")?.trim()\r\n email = /^([a-zA-Z0-9_\\.\\-\\+])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z0-9]{2,4})+$/\r\n return null if @model?.isNew() && !@view.get(\"submitted\") && val is \"\"\r\n return { isValid:false, message:\"Enter an email address. e.g. example@email.com\" } unless email.test(val)\r\n return { isValid:true, message:\"\" }\r\n","View = require 'views/base/view'\r\nModel = require 'models/base/model'\r\nmediator = require 'mediator'\r\n\r\nalert = require 'lib/alert'\r\nAuthHelper = require 'lib/auth-helper'\r\n\r\n_ = require 'underscore'\r\n\r\nmodule.exports = class ResetPasswordScreen extends View\r\n template: require './template'\r\n validator: require './validator'\r\n\r\n optionNames: View::optionNames.concat ['process']\r\n\r\n initialize: =>\r\n super\r\n @model = new Model()\r\n @view = new Model\r\n submitted:false\r\n mode: if @process? then \"reset\" else \"change\"\r\n\r\n submit: =>\r\n @view.set(submitted:true)\r\n return unless @isValid()\r\n\r\n _.post(\r\n url: \"/api/user/online/update\"\r\n data:\r\n password: @model.get(\"password\")\r\n resetCode: @process\r\n\r\n success: (res)=>\r\n @model.set(res)\r\n alert(@, \"Password Change Successful\", \"Your password has been successfully changed\", @login)\r\n\r\n error: (xhr, err, status)=>\r\n alert(@, \"Login Failed\", xhr?.responseJSON?.responseStatus?.message || \"\", () =>)\r\n )\r\n\r\n login: =>\r\n if mediator.user.get(\"isAuthenticated\")\r\n @redirectTo(\r\n controller: 'modules/booking/searching',\r\n action: 'service',\r\n )\r\n return\r\n\r\n _.post\r\n url: \"/api/auth/credentials\"\r\n data: @model.toJSON()\r\n success: (res)=>\r\n authHelper = new AuthHelper(\"/#{mediator.provider.get('path')}/booking/service\")\r\n authHelper.done(res)\r\n\r\n error: (xhr, err, status) =>\r\n alert(@, \"Login Failed\", xhr?.responseJSON?.responseStatus?.message || \"\", () =>)\r\n","var __templateData = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\n\nbuf.push(\"

To   your password enter and confirm it in the boxes below

Reset
\");;return buf.join(\"\");\n};\nif (typeof define === 'function' && define.amd) {\n define([], function() {\n return __templateData;\n });\n} else if (typeof module === 'object' && module && module.exports) {\n module.exports = __templateData;\n} else {\n __templateData;\n}","ValidationMachine = require 'lib/ValidationMachine'\r\n\r\nmodule.exports = class Validator extends ValidationMachine\r\n applyRules: =>\r\n super\r\n @required 'password'\r\n\r\n @rule 'confirm', =>\r\n val = @model.get(\"password\") || \"\"\r\n retype = @model.get(\"confirm\") || \"\"\r\n return null unless @view.get(\"submitted\") || val isnt \"\"\r\n return { isValid:false, message:\"Cannot be empty\" } if retype == \"\"\r\n return { isValid:false, message:\"Passwords do not match\" } if val != retype\r\n return { isValid:true, message:\"\" }","Chaplin = require 'chaplin'\r\nmediator = require 'mediator'\r\n\r\nDeepModel = require 'models/base/deep_model'\r\nAuthController = require 'controllers/base/auth_controller'\r\n\r\nProblemScreen = require 'modules/booking/views/problem-screen'\r\nPaymentScreen = require 'modules/booking/views/payment-screen'\r\nConfirmationScreen = require 'modules/booking/views/confirmation-screen'\r\n\r\nmodule.exports = class BookingController extends AuthController\r\n menuTitle: 'booking'\r\n\r\n beforeAction: (p, r, o)->\r\n super\r\n return if r.action is \"service\"\r\n\r\n unless mediator.booking.has(\"service\")\r\n Chaplin.utils.redirectTo(\r\n controller: 'modules/booking/searching',\r\n action: 'service',\r\n params:\r\n provider: p.provider\r\n )\r\n\r\n clinical = mediator.provider.get('clinical') is true\r\n payments = mediator.provider.get('payments') is true\r\n\r\n r.action = \"payment\" if r.action is \"problem\" && !clinical\r\n r.action = \"confirmation\" if r.action is \"payment\" && !payments\r\n\r\n r.name = \"modules/booking/booking##{r.action}\"\r\n r.path = mediator.provider.get('path') + \"/booking/#{r.action}\"\r\n\r\n problem: ->\r\n @view = new ProblemScreen region: 'main'\r\n\r\n payment: ->\r\n @view = new PaymentScreen region: 'main'\r\n\r\n confirmation: ->\r\n @view = new ConfirmationScreen region: 'main'\r\n","Chaplin = require 'chaplin'\r\nmediator = require 'mediator'\r\n\r\nDeepModel = require 'models/base/deep_model'\r\nNonAuthController = require 'controllers/base/non_auth_controller'\r\n\r\nServiceScreen = require 'modules/booking/views/service-screen'\r\nAvailabilityScreen = require 'modules/booking/views/availability-screen'\r\n\r\nmodule.exports = class SearchingController extends NonAuthController\r\n menuTitle: 'booking'\r\n\r\n beforeAction: (p, r, o)->\r\n super\r\n unless (mediator.booking.has(\"service\") || r.action is \"service\")\r\n Chaplin.utils.redirectTo(\r\n controller: 'modules/booking/searching',\r\n action: 'service',\r\n params:\r\n provider: p.provider\r\n )\r\n\r\n service: (args)->\r\n @view = new ServiceScreen\r\n region: 'main'\r\n booking: new DeepModel(args.booking)\r\n\r\n availability: (args)->\r\n @view = new AvailabilityScreen\r\n region: 'main'\r\n booking: new DeepModel(args.booking)\r\n","Chaplin = require 'chaplin'\r\nmediator = require 'mediator'\r\nView = require 'views/base/view'\r\n$ = require 'jquery'\r\n_ = require 'underscore'\r\nmoment = require 'moment'\r\n\r\nalert = require 'lib/alert'\r\n\r\nModel = require 'models/base/model'\r\nDeepModel = require 'models/base/deep_model'\r\nCollection = require 'models/base/collection'\r\n\r\nLocationCollection = require 'collections/common/location-collection'\r\nPractitionerCollection = require 'collections/common/practitioner-collection'\r\nAppointmentsCollection = require 'collections/common/appointment-collection'\r\nSessionCollection = require 'collections/common/session-collection'\r\n\r\nmodule.exports = class AvailabilityScreen extends View\r\n template: require './template'\r\n hidefilter: true\r\n\r\n initialize: =>\r\n super\r\n appt = mediator.booking.get(\"appointment\")\r\n if appt?\r\n _.del(url: \"/api/pronto/appointments/provisional/#{appt.id}\").done( =>\r\n mediator.booking.set(appointment:null)\r\n )\r\n\r\n @serviceId = mediator.booking.get(\"service.networkServiceId\")\r\n @networkId = mediator.booking.get(\"service.networkId\")\r\n\r\n @view = new Model\r\n mode: \"filter\"\r\n\r\n @filter = new Model\r\n location: mediator.booking.get(\"appointment.locationGuid\") || mediator.user.get(\"client.locationGuid\") || \"\"\r\n practitioner: \"\"\r\n gender: \"X\"\r\n\r\n @sessions = new SessionCollection()\r\n @locations = new LocationCollection()\r\n @appointments = new AppointmentsCollection()\r\n @practitioners = new PractitionerCollection()\r\n\r\n @locations.fetch(\r\n success: (collection, resp) =>\r\n if collection.length is 1\r\n return @locate(null, {location:collection.at(0)})\r\n if @filter.get(\"location\") isnt \"\"\r\n return @locate(null, {location:collection.find((l) => l.get(\"onlineGuid\") is @filter.get(\"location\"))})\r\n )\r\n\r\n @practitioners.filterFn = (pract) ->\r\n params = @filterArgs[0]\r\n return true unless params?\r\n return (params.gender is pract.get(\"gender\") || params.gender is \"X\") &&\r\n params.location is pract.get(\"locationId\")\r\n\r\n @practitioners.fetch().done(=> @practitioners.applyFilter(@filter.toJSON()))\r\n\r\n @appointments.comparator = \"startDateTime\"\r\n\r\n @appointments.filterFn = (appt)->\r\n params = @filterArgs[0]\r\n return true unless params?\r\n loc = params.location || \"\"\r\n prac = params.practitioner || \"\"\r\n params.gender = \"X\" if params.gender is \"N\"\r\n\r\n return (loc is appt.get(\"location.id\") || loc is \"\") &&\r\n (prac is appt.get(\"practitioner.id\") || prac is \"\") &&\r\n (params.gender is appt.get(\"practitioner.gender\") || params.gender is \"X\")\r\n\r\n @listenTo @filter, 'change:practitioner', (m, v, o)=>\r\n return if o.isRecursive\r\n @filter.set\r\n gender: \"X\"\r\n practitionerName: @practitioners.find((p) -> p.get(\"practitionerId\") is v)?.get(\"name\")\r\n {isRecursive: true}\r\n\r\n @appointments.applyFilter(m.toJSON())\r\n\r\n @listenTo @sessions, 'filter', @search\r\n\r\n\r\n extraBindings: =>\r\n filter: @filter\r\n booking: mediator.booking\r\n locations: @locations\r\n sessions: @sessions\r\n appointments: @appointments\r\n practitioners: @practitioners\r\n vm: @\r\n user:mediator.user\r\n\r\n attach: =>\r\n super\r\n $(\".filter-row\").hide()\r\n\r\n showfilter: (e, v) =>\r\n if @hidefilter is true\r\n $(\".filter-row\").slideDown()\r\n @hidefilter = false\r\n else\r\n $(\".filter-row\").slideUp()\r\n @hidefilter = true\r\n\r\n gender: (e, v)=>\r\n @filter.set\r\n gender: @$(e.currentTarget).data(\"gender\")\r\n practitioner: \"\"\r\n practitionerName: \"\"\r\n {isRecursive: true}\r\n\r\n @appointments.applyFilter(@filter.toJSON())\r\n\r\n moveTo: (e, v)=>\r\n $target = @$(e.currentTarget)\r\n\r\n # Internet explorer fix as it dosent do pointer events\r\n if($target.hasClass(\"disabled\"))\r\n e.preventDefault()\r\n return\r\n\r\n date = v.session\r\n period = $target.parents(\"[data-period]\").data(\"period\")\r\n\r\n @$(\".appointment\").hide()\r\n @$(\".appointment[data-date=#{date}][data-period=#{period}]\").show()\r\n\r\n @view.set\r\n mode:\"results\"\r\n period: period\r\n date: date\r\n\r\n back: =>\r\n @view.set\r\n mode:\"filter\"\r\n date: null\r\n\r\n search: =>\r\n @view.set\r\n hasMore: !@sessions.hasMore\r\n hasLess: !@sessions.hasLess\r\n\r\n location = @filter.get(\"location\")\r\n\r\n if location is \"\"\r\n location = null\r\n @appointments.unsync()\r\n return\r\n\r\n @appointments.fetch(\r\n type:\"POST\"\r\n contentType: \"application/json\"\r\n data: JSON.stringify(\r\n From: new moment(@sessions.dates[0]).startOf(\"day\").toDate()\r\n To: new moment(@sessions.dates[@sessions.dates.length - 1]).endOf(\"day\").toDate()\r\n ServiceId: @serviceId\r\n NetworkId: @networkId\r\n Groupings: [\r\n { GroupBy: 0, MaxNumberOfResults: -1, Randomise:false }\r\n { GroupBy: 1, MaxNumberOfResults: -1, Randomise:false }\r\n { GroupBy: 2, MaxNumberOfResults: -1, Randomise:true }\r\n ]\r\n )\r\n success: =>\r\n @appointments.applyFilter(@filter.toJSON())\r\n )\r\n\r\n locate: (e, v)=>\r\n @sessions.unsync()\r\n @filter.set\r\n locationName: v.location?.get(\"name\") || \"\"\r\n location: v.location?.get(\"onlineGuid\") || \"\"\r\n practitioner: \"\"\r\n @appointments.applyFilter(@filter.toJSON())\r\n @practitioners.applyFilter(@filter.toJSON())\r\n\r\n return unless v.location?\r\n\r\n @sessions.filterStartDate = new moment()\r\n @sessions.filterEndDate = new moment()\r\n @sessions.fetch(\r\n type:\"POST\"\r\n contentType: \"application/json\"\r\n data:JSON.stringify\r\n from: new moment().toDate()\r\n to: new moment().add('days', 200).toDate()\r\n locationId: v.location.get('onlineGuid')\r\n )\r\n\r\n reserve: (e, v)=>\r\n window.scrollTo(0,0)\r\n @publishEvent 'loading:start'\r\n @view.set(loading:true)\r\n _.post\r\n url: \"/api/pronto/appointments/provisional\"\r\n data: _.extend(v.appointment.toJSON(), {patientId: mediator?.user?.get(\"client.id\")})\r\n success: (res)=>\r\n mediator.booking.set\r\n appointment: _.extend(v.appointment.toJSON(), res.appointment)\r\n\r\n if(mediator?.user?.get(\"client.id\")?)\r\n @redirectTo(\r\n controller: 'modules/booking/booking',\r\n action: 'problem'\r\n )\r\n else\r\n @redirectTo(\r\n controller: 'modules/authentication/authentication',\r\n action: 'login'\r\n params:\r\n redirect: \"/booking/problem\"\r\n )\r\n @publishEvent 'loading:finish'\r\n\r\n error: (xhr, err, status) =>\r\n @publishEvent 'loading:finish'\r\n alert(@, \"Reservation Failed\", xhr?.responseJSON?.responseStatus?.message || \"\", () =>)\r\n\r\n forward: =>\r\n @sessions.nextDate()\r\n @search()\r\n\r\n backward: =>\r\n @sessions.prevDate()\r\n @search()\r\n","var __templateData = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\n\nbuf.push(\"

You have selected  at  on 


Loading...

\\nPlease select the location you wish to have your  appointment at.


or


Please click on one of the availability options below to select an appointment

Loading...
(to 12pm)
There is currently no availability at this location

 appointments for  any male female practitioner

\");;return buf.join(\"\");\n};\nif (typeof define === 'function' && define.amd) {\n define([], function() {\n return __templateData;\n });\n} else if (typeof module === 'object' && module && module.exports) {\n module.exports = __templateData;\n} else {\n __templateData;\n}","$ = require 'jquery'\r\n_ = require 'underscore'\r\nChaplin = require 'chaplin'\r\nmediator = require 'mediator'\r\nView = require 'views/base/view'\r\n\r\nalert = require 'lib/alert'\r\n\r\nModel = require 'models/base/model'\r\nCollection = require 'models/base/collection'\r\n\r\nmodule.exports = class ConfirmationScreen extends View\r\n template: require './template'\r\n\r\n initialize: =>\r\n super\r\n @model ?= new Model()\r\n @view = new Model({\r\n terms: false\r\n fixed: false\r\n })\r\n\r\n if(mediator.user.get(\"stateUnknown\"))\r\n @listenTo mediator.user, 'change:stateUnknown', @load\r\n else\r\n @load()\r\n\r\n load: =>\r\n @publishEvent 'loading:start'\r\n if mediator.user.get('client.data')?.smsEnabled\r\n mediator.user.get(\"client\").smsEnabled = mediator.user.get('client.data').smsEnabled\r\n @view.set(sms: mediator.user.get(\"client\").smsEnabled)\r\n\r\n _.get\r\n url: \"/api/pronto/content/bykey/cancellation-policy\"\r\n success: (res) => \r\n res.content = sanitizeHtml(res.content, { allowedTags, allowedAttributes});\r\n @view.set(policy: res.content)\r\n\r\n _.post(\r\n url: '/api/pronto/clients/history/limit'\r\n data: { id: mediator.user?.get(\"client.id\") }\r\n success: (res)=>\r\n @view.set(limited: res.result)\r\n appt = mediator.booking.get(\"appointment\")\r\n if @view.get(\"limited\") is true\r\n _.del(url: \"/api/pronto/appointments/provisional/#{appt.id}\").done( =>\r\n mediator.booking.set(appointment:null)\r\n )\r\n @publishEvent 'loading:finish'\r\n error: (err) =>\r\n console.log err\r\n )\r\n\r\n extraBindings: =>\r\n booking: mediator.booking\r\n user: mediator.user\r\n\r\n book: =>\r\n window.scrollTo(0,0)\r\n unless @view.get(\"terms\")\r\n alert(@, \"More information required\", \"Please accept the terms and conditions\", () =>)\r\n return\r\n\r\n @publishEvent 'loading:start'\r\n\r\n id = mediator.booking.get(\"appointment.id\")\r\n\r\n _.put(\r\n url: \"/api/appointments/#{id}/confirm\"\r\n data:\r\n id: id\r\n locationId: mediator.booking.get(\"appointment.locationId\")\r\n practitionerId: mediator.booking.get(\"appointment.practitionerId\")\r\n customer: mediator.user.get(\"client\")\r\n case: mediator.booking.get(\"problem\")\r\n sms: @view.get(\"sms\")\r\n\r\n success: (res)=>\r\n if _.isEmptyGuid(mediator.user.get(\"client.locationGuid\"))\r\n mediator.user.set(\"client.locationGuid\", mediator.booking.get(\"appointment.locationId\"))\r\n\r\n @view.set \"terms\", false\r\n\r\n alert(@, \"Appointment Booked\", \"Your appointment has been successfully booked, you will receive a confirmation email shortly.\", () =>\r\n @publishEvent 'loading:finish'\r\n mediator.booking.clear()\r\n @redirectTo\r\n controller: 'modules/history/history'\r\n action: 'history'\r\n )\r\n\r\n error: (xhr, err, status) =>\r\n @view.set(loading: false)\r\n\r\n message = xhr?.responseJSON?.responseStatus?.message || \"A system issue occurred and the appointment could not be booked\"\r\n message = \"The system is busy, please try again later\" if xhr.status is 429\r\n message = \"Sorry we seem to be having some technical problems. Please try again later.\" if xhr.status is 500\r\n\r\n alert(@, \"There was a problem making your booking\", message, () =>\r\n @publishEvent 'loading:finish'\r\n @redirectTo(\r\n controller: 'modules/booking/searching',\r\n action: 'service',\r\n )\r\n )\r\n )\r\n\r\n attach: =>\r\n super\r\n $(window).on('scroll', @onScroll)\r\n\r\n dispose: =>\r\n super\r\n $(window).off('scroll')\r\n\r\n onScroll: () =>\r\n state = $('.inline-confirmation')[0].getBoundingClientRect().top < 0\r\n return if @view.fixed is state\r\n @view.set(fixed: state)\r\n","var __templateData = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\n\nbuf.push(\"

You have exceeded your appointment limit

If you would like to book this new appointment please cancel one of your previously booked appointments


Nearly there! Please click 'Book Now' to confirm your appointment!

Nearly there! Please click 'Book Now' to confirm your appointment!

 @ 


For

At

From

This appointment is charged at  . Payment will be arranged at clinic.

Cancellation Policy



\");;return buf.join(\"\");\n};\nif (typeof define === 'function' && define.amd) {\n define([], function() {\n return __templateData;\n });\n} else if (typeof module === 'object' && module && module.exports) {\n module.exports = __templateData;\n} else {\n __templateData;\n}","Chaplin = require 'chaplin'\r\nmediator = require 'mediator'\r\nView = require 'views/base/view'\r\n$ = require 'jquery'\r\n\r\nModel = require 'models/base/model'\r\nDeepModel = require 'models/base/deep_model'\r\nCollection = require 'models/base/collection'\r\n\r\nmodule.exports = class PaymentScreen extends View\r\n template: require './template'\r\n optionNames: View::optionNames.concat ['booking']\r\n\r\n initialize: =>\r\n super\r\n @model ?= new Model()\r\n @publishEvent 'loading:finish'\r\n \r\n select: (e, v)=>\r\n mediator.booking.set\r\n payment:v.model.toJSON()\r\n\r\n @redirectTo(\r\n controller: 'modules/booking/booking',\r\n action: 'confirmation',\r\n # params:\r\n # booking: @booking.toJSON()\r\n )\r\n","var __templateData = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\n\nbuf.push(\"\");;return buf.join(\"\");\n};\nif (typeof define === 'function' && define.amd) {\n define([], function() {\n return __templateData;\n });\n} else if (typeof module === 'object' && module && module.exports) {\n module.exports = __templateData;\n} else {\n __templateData;\n}","Chaplin = require 'chaplin'\r\nmediator = require 'mediator'\r\nView = require 'views/base/view'\r\n$ = require 'jquery'\r\n\r\nModel = require 'models/base/model'\r\nDeepModel = require 'models/base/deep_model'\r\nCollection = require 'models/base/collection'\r\n\r\nclass BodySites extends Collection\r\n url: \"/api/pronto/lookup/bodysite\"\r\n\r\nclass InjuryCauses extends Collection\r\n url: \"/api/pronto/lookup/cause\"\r\n\r\nmodule.exports = class ProblemScreen extends View\r\n template: require './template'\r\n\r\n initialize: =>\r\n super\r\n @model ?= new Model\r\n timePresent: 1\r\n timePresentUnit: \"Days\"\r\n\r\n @bodysites = new BodySites()\r\n @causes = new InjuryCauses()\r\n\r\n $.when(\r\n @bodysites.fetch()\r\n @causes.fetch()\r\n ).then =>\r\n @publishEvent 'loading:finish'\r\n\r\n extraBindings: =>\r\n causes: @causes\r\n bodysites: @bodysites\r\n\r\n skip: =>\r\n @redirectTo(\r\n controller: 'modules/booking/booking',\r\n action: 'payment'\r\n )\r\n\r\n select: (e, v)=>\r\n mediator.booking.set\r\n problem:v.model.toJSON()\r\n\r\n @skip()\r\n","var __templateData = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\n\nbuf.push(\"

In order to help us prepare for your visit, can you please provide us with the reason for your appointment.

 
\");;return buf.join(\"\");\n};\nif (typeof define === 'function' && define.amd) {\n define([], function() {\n return __templateData;\n });\n} else if (typeof module === 'object' && module && module.exports) {\n module.exports = __templateData;\n} else {\n __templateData;\n}","Chaplin = require 'chaplin'\r\nmediator = require 'mediator'\r\nView = require 'views/base/view'\r\n$ = require 'jquery'\r\ndefer = require 'jquery'\r\n_ = require 'underscore'\r\n\r\nalert = require 'lib/alert'\r\n\r\nModel = require 'models/base/model'\r\nDeepModel = require 'models/base/deep_model'\r\nCollection = require 'models/base/collection'\r\n\r\nLocationCollection = require 'collections/common/location-collection'\r\nServiceCollection = require 'collections/common/service-collection'\r\n\r\nmodule.exports = class ServiceScreen extends View\r\n autoRender: true\r\n className: 'home-page'\r\n template: require './template'\r\n\r\n initialize: =>\r\n super\r\n @booking ?= new DeepModel()\r\n\r\n @locations = new LocationCollection()\r\n @services = new ServiceCollection()\r\n @services.comparator = \"sortIndex\"\r\n @services.fetch(\r\n data: {onlineOnly: true}\r\n )\r\n\r\n mediator.provider.on 'change', => @services.reset(@services.toJSON())\r\n\r\n @classes = new Collection()\r\n @classes.url = \"/api/pronto/classes/search\"\r\n @classes.fetch(\r\n type: \"POST\"\r\n )\r\n\r\n extraBindings: =>\r\n classes: @classes\r\n services: @services\r\n device: mediator.device\r\n\r\n select: (e, v)=>\r\n mediator.booking.set\r\n service:v.service.toJSON()\r\n\r\n @redirectTo(\r\n controller: 'modules/booking/searching',\r\n action: 'availability',\r\n )\r\n\r\n register: =>\r\n alert(@, \"Not Implement\", \"Class booking has not yet been implement\", () =>)\r\n","var __templateData = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\n\nbuf.push(\"



Loading

Please select a service to start booking an appointment

from

Book A Class

Loading

from
£45.00
\");;return buf.join(\"\");\n};\nif (typeof define === 'function' && define.amd) {\n define([], function() {\n return __templateData;\n });\n} else if (typeof module === 'object' && module && module.exports) {\n module.exports = __templateData;\n} else {\n __templateData;\n}","_ = require 'underscore'\r\nmediator = require 'mediator'\r\n\r\nView = require 'views/base/view'\r\n\r\nmodule.exports = class TermsScreen extends View\r\n template: require './template'\r\n region: 'main'\r\n\r\n initialize: =>\r\n super\r\n\r\n _.get\r\n url: \"/api/pronto/content/bykey/terms\"\r\n success: (res) =>\r\n res.content = sanitizeHtml(res.content, { allowedTags, allowedAttributes});\r\n @$(\".terms-and-conditions\").append(res.content)\r\n","var __templateData = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\n\nbuf.push(\"
\");;return buf.join(\"\");\n};\nif (typeof define === 'function' && define.amd) {\n define([], function() {\n return __templateData;\n });\n} else if (typeof module === 'object' && module && module.exports) {\n module.exports = __templateData;\n} else {\n __templateData;\n}","DeepModel = require 'models/base/deep_model'\nAuthController = require 'controllers/base/auth_controller'\n\nEditScreen = require 'modules/client/views/edit-screen'\nSummaryScreen = require 'modules/client/views/summary-screen'\n\nmodule.exports = class ClientController extends AuthController\n menuTitle: 'details'\n\n summary: ->\n @view = new SummaryScreen \n region: 'main'\n\n edit: ->\n @view = new EditScreen \n region: 'main'","DeepModel = require 'models/base/deep_model'\n\nmodule.exports = class Client extends DeepModel\n urlRoot: '/api/pronto/patients'\n\n defaults: \n gender: 'X'\n","View = require 'views/base/view'\n$ = require 'jquery'\n_ = require 'underscore'\nModel = require 'models/base/model'\nChaplin = require 'chaplin'\nmediator = require 'mediator'\nmoment = require 'moment'\n\nalert = require 'lib/alert'\n\nClient = require 'modules/client/models/client'\nLocationCollection = require 'collections/common/location-collection'\nGroupCollection = require 'collections/common/group-collection'\n\nmodule.exports = class EditScreen extends View\n template: require './template'\n validator: require './validator'\n autoRender: true\n\n initialize:(args) =>\n super\n @model = new Client(mediator.user.get('client'))\n if mediator.user.get('client.data')?.smsEnabled?\n @model.set\n smsEnabled: mediator.user.get('client.data')?.smsEnabled\n @listenTo @model, 'change:smsEnabled', (m,v) =>\n @model.set(\"data.smsEnabled\", @model.get(\"smsEnabled\"))\n\n @view = new Model\n submitted: true\n hasGroup: @model.get(\"group.id\") > 0\n profile1: false\n profile2: false\n\n dob = new moment(@model.get(\"dateOfBirth\")).startOf(\"day\").add(12, 'h')\n @model.set(\"dateOfBirth\", dob.toDate())\n\n @dob = new Model\n day: dob.get(\"date\")\n month: dob.get(\"month\")\n year: dob.get(\"year\")\n\n @locations = new LocationCollection()\n @locations.fetch()\n\n @groups = new GroupCollection()\n @groups.filterFn = (group) ->\n params = @filterArgs[0]\n return true unless params?\n return params == group.get(\"locationGuid\")\n\n @groups.fetch(\n success: (collection)=>\n @setGroup(@model.get(\"group.id\") || 0)\n collection.applyFilter(@model.get(\"locationGuid\"))\n )\n\n @listenTo @dob, 'change', (m, v)=>\n @model.set(dateOfBirth: new moment(m.toJSON()).add(12, 'h').toDate())\n\n @listenTo @model, 'change:locationGuid', (m, v)=>\n @groups.applyFilter(v)\n\n @listenTo @model, 'change:title', (m, v)=>\n if v is \"Mr\"\n @model.set(gender: \"M\")\n if v is \"Ms\" || v is \"Mrs\" || v is \"Miss\"\n @model.set(gender: \"F\")\n\n @listenTo @model, 'change:group.id', (m, v)=> @setGroup(v)\n\n extraBindings: =>\n locations: @locations\n groups: @groups\n dob: @dob\n\n gender: (e, v)=>\n @model.set\n gender: e.currentTarget.dataset[\"gender\"]\n\n setGroup: (v) =>\n group = @groups.get(v)?.toJSON() || {}\n @model.set\n \"group.name\": group.name\n\n @view.set\n profile1: group.profile1 || false\n profile2: group.profile2 || false\n\n save: =>\n return unless @isValid()\n\n if @view.get(\"hasGroup\") is \"false\"\n @model.set(group: null)\n\n _.put(\n url: \"/api/pronto/online/client\"\n data:\n @model.toJSON()\n success: =>\n mediator.user.set(\n client: @model.toJSON()\n )\n @redirectTo(\n controller: 'modules/client/client',\n action: 'summary'\n )\n error: (r) =>\n if r.responseText\n r = $.parseJSON(r.responseText)\n err = if r.responseStatus?.errorCode then r.responseStatus.errorCode else \"Could Not Save Correctly\"\n alert(@, \"Saving Error\", err, =>)\n )\n","var __templateData = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\n;var locals_for_with = (locals || {});(function (Date) {\nbuf.push(\"

Change Password\\n
No location selected
This location has no groups - All patients will default to private
\");}.call(this,\"Date\" in locals_for_with?locals_for_with.Date:typeof Date!==\"undefined\"?Date:undefined));;return buf.join(\"\");\n};\nif (typeof define === 'function' && define.amd) {\n define([], function() {\n return __templateData;\n });\n} else if (typeof module === 'object' && module && module.exports) {\n module.exports = __templateData;\n} else {\n __templateData;\n}","ValidationMachine = require 'lib/ValidationMachine'\nmediator = require 'mediator'\n\nmodule.exports = class Validator extends ValidationMachine\n applyRules: =>\n super\n @required 'title'\n @required 'forename'\n @required 'surname'\n @required 'addressLine1'\n @required 'postcode'\n\n @requiredIf 'homeTelephone', =>\n work = (@model.get(\"workTelephone\") || \"\").trim()\n mobile = (@model.get(\"mobileTelephone\") || \"\").trim()\n return work is \"\" && mobile is \"\"\n\n @requiredIf 'workTelephone', =>\n home = (@model.get(\"homeTelephone\") || \"\").trim()\n mobile = (@model.get(\"mobileTelephone\") || \"\").trim()\n return home is \"\" && mobile is \"\"\n\n @requiredIf 'mobileTelephone', =>\n work = (@model.get(\"workTelephone\") || \"\").trim()\n home = (@model.get(\"homeTelephone\") || \"\").trim()\n\n provider = mediator.provider.toJSON()\n sms = provider?.license?.hasText && provider?.allowSMS && @model.get(\"smsEnabled\")\n\n return work is \"\" && home is \"\" || sms\n\n @requiredIf 'group.id', => return @view.get(\"hasGroup\") is \"true\"\n @requiredIf 'groupReference', => return @view.get(\"profile1\")\n @requiredIf 'insuranceNumber', => return @view.get(\"profile2\")\n\n @rule 'email', =>\n val = @model.get(\"email\") || \"\"\n emailValFilter = /^([a-zA-Z0-9_\\.\\-\\+])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z0-9]{2,4})+$/\n return { isValid:false, message:\"Alternative email is not formatted correctly. e.g. example@email.com\" } unless emailValFilter.test(val)\n return { isValid:true, message:\"\" }\n","View = require 'views/base/view'\n$ = require 'jquery'\nChaplin = require 'chaplin'\n\nmediator = require 'mediator'\nmoment = require 'moment'\n\nClient = require 'modules/client/models/client'\n\nmodule.exports = class SummaryScreen extends View\n template: require './template'\n\n initialize: =>\n super\n @model = new Client(mediator.user.get(\"client\"))","var __templateData = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\n\nbuf.push(\"

 

MaleFemaleNot Specified ,   old, born on
You pay for your own treatments
 pays for your treatments
Policy No: 
Membership No: 

\");;return buf.join(\"\");\n};\nif (typeof define === 'function' && define.amd) {\n define([], function() {\n return __templateData;\n });\n} else if (typeof module === 'object' && module && module.exports) {\n module.exports = __templateData;\n} else {\n __templateData;\n}","AuthController = require 'controllers/base/auth_controller'\r\n\r\nHistoryScreen = require 'modules/history/views/history-screen'\r\n\r\nmodule.exports = class HistoryController extends AuthController\r\n menuTitle: 'history'\r\n\r\n history: ->\r\n @view = new HistoryScreen \r\n region: 'main'","_ = require 'underscore'\r\nModel = require 'models/base/model'\r\nmediator = require 'mediator'\r\n\r\nDialogView = require 'views/base/dialog_view'\r\n\r\nmodule.exports = class CancellationDialog extends DialogView\r\n template: require './template'\r\n\r\n initialize: =>\r\n @view = new Model\r\n\r\n _.get\r\n url: \"/api/pronto/content/bykey/cancellation-policy\"\r\n success: (res) => @view.set(policy: res.content)\r\n\r\n cancel: =>\r\n @model.set(customerID: mediator.user.get(\"client.id\"))\r\n _.post(\r\n url: \"/api/appointments/#{@model.get('id')}/cancel\"\r\n data: @model.toJSON()\r\n success: (model, response) =>\r\n @publishEvent \"appointment:cancelled\", model\r\n @close()\r\n error: =>\r\n console.log \"errored\"\r\n )\r\n","var __templateData = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\n\nbuf.push(\"

Confirm Cancellation.


Are you sure you want to make this cancellation?

By cancelling an appoinment this may invoke a cancellation charge.


×\");;return buf.join(\"\");\n};\nif (typeof define === 'function' && define.amd) {\n define([], function() {\n return __templateData;\n });\n} else if (typeof module === 'object' && module && module.exports) {\n module.exports = __templateData;\n} else {\n __templateData;\n}","View = require 'views/base/view'\n$ = require 'jquery'\nChaplin = require 'chaplin'\nmediator = require 'mediator'\nmoment = require 'moment'\nMoveDialog = require 'modules/history/views/move-dialog'\nCancellationDialog = require 'modules/history/views/cancellation-dialog'\n\nClient = require 'modules/client/models/client'\n\nAppointmentsHistoryCollection = require 'collections/common/appointment-history-collection'\nAppointmentsCollection = require 'collections/common/appointment-collection'\n\nmodule.exports = class HistoryScreen extends View\n template: require './template'\n\n initialize: =>\n super\n @subscribeEvent \"appointment:cancelled\", (model)=>\n @history.set([{id: model.id, status:model.status}], {add:false, remove:false})\n\n @history = new AppointmentsHistoryCollection()\n @history.comparator = 'startDateTime desc'\n\n if(mediator.user.get(\"stateUnknown\"))\n @listenTo mediator.user, 'change:stateUnknown', @load\n else\n @load()\n\n load: =>\n @model = new Client(mediator.user.get(\"client\"))\n @history.fetch(\n data:\n id: @model.get(\"id\")\n )\n\n extraBindings: =>\n history: @history\n\n cancel: (e,v) =>\n @subview 'cancellation', new CancellationDialog(\n model: v.appointment\n )\n\n move: =>\n @subview 'move', new MoveDialog()\n\n rebookAppointment: =>\n location.reload()\n","var __templateData = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\n\nbuf.push(\"

My Bookings

There are no items to display.

At
With
  • Cancel  Appointment
\");;return buf.join(\"\");\n};\nif (typeof define === 'function' && define.amd) {\n define([], function() {\n return __templateData;\n });\n} else if (typeof module === 'object' && module && module.exports) {\n module.exports = __templateData;\n} else {\n __templateData;\n}","DialogView = require 'views/base/dialog_view'\r\n\r\nmodule.exports = class MoveDialog extends DialogView\r\n template: require './template'","var __templateData = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\n\nbuf.push(\"

Move Appointment.

Are you sure you want to reschedule this appointment?

By moving this appointment, this may result in a cancellation charge.

  • Yes
  • No
×\");;return buf.join(\"\");\n};\nif (typeof define === 'function' && define.amd) {\n define([], function() {\n return __templateData;\n });\n} else if (typeof module === 'object' && module && module.exports) {\n module.exports = __templateData;\n} else {\n __templateData;\n}","Controller = require 'controllers/base/controller'\r\n\r\nHomeScreen = require 'modules/home/views/home-screen'\r\nTermsScreen = require 'modules/booking/views/terms-screen'\r\nNotFoundScreen = require 'modules/home/views/not-found-screen'\r\n\r\nmodule.exports = class HomeController extends Controller\r\n\r\n index: ->\r\n @view = new HomeScreen\r\n region: 'main'\r\n\r\n terms: ->\r\n @view = new TermsScreen\r\n region: 'main'\r\n\r\n notfound: ->\r\n @view = new NotFoundScreen\r\n region: 'main'\r\n","View = require 'views/base/view'\r\n\r\nmodule.exports = class HomeScreen extends View\r\n template: require './template'","var __templateData = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\n\nbuf.push(\"

Welcome to the Online Bookings, powered by Pronto.

\\nFor further information about how to get this Portal for your business, please go to this website.
\");;return buf.join(\"\");\n};\nif (typeof define === 'function' && define.amd) {\n define([], function() {\n return __templateData;\n });\n} else if (typeof module === 'object' && module && module.exports) {\n module.exports = __templateData;\n} else {\n __templateData;\n}","View = require 'views/base/view'\n\nmodule.exports = class NotFoundScreen extends View\n template: require './template'\n","var __templateData = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\n\nbuf.push(\"

Sorry we could not find the page you requested.

Please make sure that you have typed the address correctly

\");;return buf.join(\"\");\n};\nif (typeof define === 'function' && define.amd) {\n define([], function() {\n return __templateData;\n });\n} else if (typeof module === 'object' && module && module.exports) {\n module.exports = __templateData;\n} else {\n __templateData;\n}","AuthController = require 'controllers/base/auth_controller'\r\n\r\nInvoiceScreen = require 'modules/invoice/views/invoice-screen'\r\n\r\nmodule.exports = class InvoiceController extends AuthController\r\n menuTitle: 'invoice'\r\n\r\n invoice: ->\r\n @view = new InvoiceScreen \r\n region: 'main'","Collection = require 'models/base/collection'\r\n\r\nmodule.exports = class InvoiceCollection extends Collection\r\n url: '/api/pronto/invoices'","View = require 'views/base/view'\r\nCollection = require 'models/base/collection'\r\n\r\n_ = require 'underscore'\r\nmediator = require 'mediator'\r\n\r\nmodule.exports = class InvoiceScreen extends View\r\n template: require './template'\r\n\r\n initialize: =>\r\n super\r\n @invoices = new Collection()\r\n @invoices.url = \"/api/pronto/invoices/#{mediator.user.get('client')?.id}\"\r\n @invoices.comparator = 'reference'\r\n #@history.comparator = 'startDateTime desc'\r\n @invoices.fetch(\r\n success: (collection) =>\r\n collection.sort()\r\n )\r\n\r\n extraBindings: =>\r\n invoices: @invoices\r\n","var __templateData = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\n\nbuf.push(\"

My Invoices

RefDateTotalAmount PaidStatus
PaidPart PaidUnpaidDownload
\");;return buf.join(\"\");\n};\nif (typeof define === 'function' && define.amd) {\n define([], function() {\n return __templateData;\n });\n} else if (typeof module === 'object' && module && module.exports) {\n module.exports = __templateData;\n} else {\n __templateData;\n}","NonAuthController = require 'controllers/base/non_auth_controller'\n\nSupportScreen = require 'modules/support/views/support-screen'\n\nmodule.exports = class SupportController extends NonAuthController\n menuTitle: 'support'\n\n support: (p, r, o)->\n @view = new SupportScreen\n region: 'main'\n","View = require 'views/base/view'\n\nmodule.exports = class SupportScreen extends View\n template: require './template'\n className: 'support'\n","var __templateData = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\n\nbuf.push(\"

This is a placeholder for the support page....

\");;return buf.join(\"\");\n};\nif (typeof define === 'function' && define.amd) {\n define([], function() {\n return __templateData;\n });\n} else if (typeof module === 'object' && module && module.exports) {\n module.exports = __templateData;\n} else {\n __templateData;\n}","home = 'modules/home/home'\nbookings = 'modules/booking/booking'\nsearching = 'modules/booking/searching'\ninvoice = 'modules/invoice/invoice'\nhistory = 'modules/history/history'\nclient = 'modules/client/client'\nsupport = 'modules/support/support'\nauthentication = 'modules/authentication/authentication'\n\n# Application routes.\nmodule.exports = (match) ->\n match '', controller: home, action: 'index'\n match '/404', controller: home, action: 'notfound'\n match ':provider/terms', controller: home, action: 'terms'\n\n match ':provider', controller: searching, action: 'service'\n match ':provider/booking', controller: searching, action: 'service'\n match ':provider/booking/service', controller: searching, action: 'service'\n match ':provider/booking/availability', controller: searching, action: 'availability'\n match ':provider/booking/problem', controller: bookings, action: 'problem'\n match ':provider/booking/payment', controller: bookings, action: 'payment'\n match ':provider/booking/confirmation', controller: bookings, action: 'confirmation'\n\n match ':provider/client/summary', controller: client, action: 'summary'\n match ':provider/client/edit', controller: client, action: 'edit'\n\n match ':provider/client/history', controller: history, action: 'history'\n\n match ':provider/invoice', controller: invoice, action: 'invoice'\n\n match ':provider/login', controller: authentication, action: 'login'\n match ':provider/login/update', controller: authentication, action: 'reset'\n match ':provider/login/reset/:process', controller: authentication, action: 'reset'\n\n match ':provider/support', controller: support, action: 'support'\n","Chaplin = require 'chaplin'\nView = require './view'\n\nmodule.exports = class CollectionView extends Chaplin.CollectionView\n # This class doesn’t inherit from the application-specific View class,\n # so we need to borrow the method from the View prototype:\n getTemplateFunction: View::getTemplateFunction\n","View = require './view'\n$ = require 'jquery'\n\nmodule.exports = class DialogView extends View\n autoRender:true\n autoAttach:true\n className: 'reveal-modal'\n attributes:\n 'data-reveal':1\n 'data-offset':10\n 'data-css-top':20\n\n attach: =>\n super\n @$el.foundation()\n @$el.on('close', '[data-reveal]', @close)\n @$el.foundation('reveal', 'open')\n #cant remember why this was added but breaks other things\n #$('body').scrollTop(0);\n\n close: =>\n otherModals = $(\".reveal-modal\").not(@$el)\n if otherModals.length > 0\n otherModals.foundation('reveal', 'open')\n else\n @$el.foundation(\"reveal\", \"close\")\n @dispose()\n","Chaplin = require 'chaplin'\nrivets = require 'rivets'\n_ = require 'underscore'\nmediator = require 'mediator'\n\nmodule.exports = class View extends Chaplin.View\n # Auto-save `template` option passed to any view as `@template`.\n optionNames: Chaplin.View::optionNames.concat ['template', 'model']\n template: =>\n debugger\n\n autoRender:true\n autoAttach:true\n\n extraBindings: -> {}\n\n constructor: ->\n _(@).extend @validator.prototype if @validator?\n super\n @subviews ?= []\n\n initialize: (options) ->\n # This is standard in new chaplin\n super\n\n if _.isFunction(@applyRules)\n @applyRules()\n\n @on 'addedToDOM', @applyFocus\n\n # Precompiled templates function initializer.\n getTemplateFunction: ->\n @template\n\n renderSubviews: ->\n return\n\n render: ->\n super\n @bindings.unbind() if @bindings?\n if _.isFunction(@applyGraphics)\n @applyGraphics()\n\n @applyBindings()\n\n unless @renderedSubviews\n @renderSubviews()\n @renderedSubviews = yes\n\n attach: =>\n super\n @$el.foundation()\n\n applyBindings: =>\n hash = _.defaults @extraBindings(),\n model:@model\n vm:@\n view:@view\n provider: mediator.provider\n @bindings = rivets.bind @$el, hash\n\n dispose: =>\n @bindings.unbind()\n @validator.clearRules() if @validator?.clearRules?\n @clearRules() if @clearRules\n super\n\n redirectTo:(args)=>\n args.params = _.extend(args.params || {}, {provider: mediator.provider?.get(\"path\")})\n Chaplin.utils.redirectTo(args)\n\n stopPropagation: (e)=>\n e.preventDefault()\n e.stopPropagation()\n\n immediateSync: (e) =>\n $target = @$(e.target)\n\n if $target.hasClass(\"money\") || $target.hasClass(\"percentage\")\n $target.val(0) if _.isNaN(parseFloat(e.target.value.replace(\",\", \"\")))\n\n $target.trigger(\"change\")\n\n sync: (e) =>\n $target = @$(e.target)\n\n if $target.hasClass(\"money\") || $target.hasClass(\"percentage\")\n $target.val(0) if _.isNaN(parseFloat(e.target.value))\n\n $target.trigger(\"change\")\n\n syncOrSubmit: (e) =>\n if e.keyCode is 13\n return @[e.currentTarget.dataset[\"submit\"]]()\n\n @sync(e)\n\n applyFocus: =>\n @$el.find(\".initial-focus:visible\").first().focus()\n\n money: (selector)=>\n return unless @$el?\n symbol = mediator.user.get(\"systemSettings\")?[\"currencySymbol\"] || \"£\"\n selector ?= '.money'\n\n @$(selector)\n # .on 'mousedown', (e) =>\n # if @$(e.currentTarget).val() is '0'\n # @$(e.currentTarget)[0].setSelectionRange(1,1)\n # return false\n .number( true, 2 )\n .wrap(\"\").parent().append(\"#{symbol}\")\n","View = require 'views/base/view'\n$ = require 'jquery'\n_ = require 'underscore'\nmediator = require 'mediator'\nCollection = require 'models/base/collection'\nModel = require 'models/base/model'\n\nmodule.exports = class HeaderView extends View\n autoRender: true\n className: 'header'\n tagName: 'header'\n template: require './templates/header'\n\n extraBindings: =>\n user: mediator.user\n provider: mediator.provider\n\n navigate: =>\n #hack because when would u ever use a link to navigate\n @$('.toggle-topbar').click();\n\n logout: =>\n @navigate()\n\n _.get(\n url: '/api/auth/logout',\n ).done =>\n mediator.user.clear()\n @redirectTo\n controller: \"modules/booking/searching\"\n action: \"service\"\n","var __templateData = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\n\nbuf.push(\"

\");;return buf.join(\"\");\n};\nif (typeof define === 'function' && define.amd) {\n define([], function() {\n return __templateData;\n });\n} else if (typeof module === 'object' && module && module.exports) {\n module.exports = __templateData;\n} else {\n __templateData;\n}","_ = require 'underscore'\nView = require 'views/base/view'\nModel = require 'models/base/model'\nmediator = require 'mediator'\nChaplin = require 'chaplin'\nalert = require 'lib/alert'\n\n# Site view is a top-level view which is bound to body.\nmodule.exports = class SiteView extends View\n container: 'body'\n id: 'site-container'\n regions:\n header: '#header-container'\n main: '#page-container'\n template: require './templates/site'\n\n initialize: =>\n super\n $(document).ajaxError((e, xhr)=>\n errorCode = xhr?.responseJSON?.responseStatus?.errorCode\n if xhr.status is 401 && errorCode is \"External Auth Failure\"\n mediator.user.set\n isAuthenticated:false\n stateUnknown:false\n message = xhr?.responseJSON?.responseStatus?.message\n message = (message || \"\") + \". This may be due to the page being inactive for too long and logging out for security\"\n alert(@, \"Unauthorised\", message, () => @publishEvent 'loading:finish')\n Chaplin.utils.redirectTo url: \"#{mediator.provider.get('path')}/login\"\n\n )\n @subscribeEvent 'loading:start', => @view.set loading:true\n @subscribeEvent 'loading:finish', => @view.set loading:false\n\n @view = new Model\n notify:false\n loading:false\n\n @listenTo mediator.user, \"change:isAuthenticated\", (m, v)=>\n return unless v is true\n @view.set(notify:true)\n _.delay((()=> @view.set(notify: false)), 2000)\n","var __templateData = function template(locals) {\nvar buf = [];\nvar jade_mixins = {};\nvar jade_interp;\n\nbuf.push(\"
You have successfully logged in


© Copyright Blue Zinc IT Ltd 2017
Loading...
\");;return buf.join(\"\");\n};\nif (typeof define === 'function' && define.amd) {\n define([], function() {\n return __templateData;\n });\n} else if (typeof module === 'object' && module && module.exports) {\n module.exports = __templateData;\n} else {\n __templateData;\n}"]}