$(function(){ // prevent IE8 and below from erroring on any console statements if (!window.console){ console = {log: function() {}} }; var version = "1.0"; $(document).ajaxSend(function(event, request, settings) { request.setRequestHeader("X-Version", version); if (settings.type == "POST") { request.setRequestHeader("X-Xsrftoken", getCookie("_xsrf")); request.setRequestHeader("Content-type", "application/json; charset=utf-8"); } }); var sessionTimedOut = ko.observable(false); var delayed_call = ko.observable(); $(document).ajaxError(function(event, xhr) { if (xhr.status == 401) { delayed_call(xhr); sessionTimedOut(true); } if (xhr.status == 403) { window.location.replace("/logout"); } }); $.ajaxPrefilter(function(options, originalOptions, jqXHR) { if (options.url != "/login") { jqXHR.__kb_opts = originalOptions; } }); function getCookie(name) { var r = document.cookie.match("\\b" + name + "=([^;]*)\\b"); return r ? r[1] : undefined; } /* * global settings * for date/time formating, reference: http://blog.stevenlevithan.com/archives/date-time-format */ var settings = { time_format: 'h:MMtt', duration_format: 'HH:MM', date_format: 'dd/mm/yyyy', datetime_format: 'dd/mm/yyyy h:MMtt', api_date_format: "yyyy-mm-dd", api_time_format: 'HH:MM' }; $('.focusclear').focus(function() { $(this).val(''); }); $.datepicker.setDefaults({ dateFormat: 'dd/mm/yy', showOn: 'button', buttonImage: '/static/images/calendar.gif', buttonImageOnly: true, defaultDate: null }); function shellViewModel() { var self = this; self.loading = ko.observable(false); self.error = ko.observable(); self.message = ko.observable(); self.username = ko.observable(); self.password = ko.observable(); self.passwordconfirm = ko.observable(); self.forgottenpassword = ko.observable(); self.forgottenpasswordsent = ko.observable(); self.forgottenpassword.subscribe(function(val) { if (val) self.forgottenpasswordsent(false); else self.username(undefined); self.error(undefined); self.password(undefined); }); self.requestResetPassword = function() { self.error(undefined); if (!self.username()) { self.error("Enter your account email address"); return false; } self.loading(true); $.ajax({ type: "POST", url: "/api/password/reset", data: ko.toJSON({ username: self.username(), }), success: function(response) { self.loading(false); if (response.result) { self.message(true); self.forgottenpasswordsent(true); } } }); }; self.resetcode = ko.observable(); self.resetPassword = function() { self.error(undefined); if (!self.username()) { self.error("Enter your account email address"); self.retry(true); return false; } if (!self.resetcode()) { self.error("Enter the reset code that was emailed to you"); return false; } if (!self.password()) { self.error("Enter your new password"); return false; } if (!self.passwordconfirm()) { self.error("Confirm your new password"); return false; } if (self.passwordconfirm() != self.password()) { self.error("Passwords do not match"); self.passwordconfirm(undefined); return false; } self.loading(true); $.ajax({ type: "POST", url: "/resetpassword", data: ko.toJSON({ username: self.username(), resetcode: self.resetcode(), password: self.password() }), success: function(response) { self.loading(false); if (response.result) { self.message("You have successfully reset your password. Please login."); } else { self.error(response.errors.error); } } }); }; self.openForgottenPassword = function() { window.location.href = "/forgottenpassword"; }; self.closeForgottenPassword = function() { window.location.href = "/login"; }; self.closeResetPassword = function() { window.location.href = "/login"; }; self.retry = ko.observable(true); self.login = function() { if (!self.username() && !self.password()) { self.error("Please enter your account details"); return false; } if (!self.username()) { self.error("Please enter your username"); return false; } if (!self.password()) { self.error("Please enter your password"); return false; } self.error(undefined); self.loading(true); $.ajax({ type: "POST", url: "/login", data: ko.toJSON({ username: self.username(), password: self.password(), next : $("#next").val() }), success: function(response) { if (response.result) { self.message("Please wait while system loads..."); window.location.replace(response.redirect ? response.redirect : "/"); } else { self.loading(false); self.password(undefined); self.retry(true); self.message(false); self.error("Account details incorrect"); } } }); return false; }; }; var shellModel = new shellViewModel(); ko.applyBindings(shellModel); });