1
var session = require('./main').session;
2
var util = require('./util');
3
var hasher = require('hasher');
4
var crossroads = require('crossroads');
6
var username, password;
8
session.languageChanged.handle(function () {
10
$("#login-part .subheader").text(_("Log in"));
12
$("#register-link").text(_("New? Click here to sign up."));
13
$("#register-success").text(_("You registered succesfully. You can now log in."));
14
$("#register-failure").text(_("You cancelled the registration."));
16
$("#username-label").text(_("Username:"));
17
$("#password-label").text(_("Password:"));
18
$("#login-button").val(_("Log in!"));
20
$("#login-anonymously-link").text(_("Login anonymously"));
21
$("#login-anonymously-link").attr("title", _("All data will only be available locally, and will be gone when your browser's local storage is cleared."));
24
$("#logout-link").text(_("Log out"));
25
$("#deregister-link").text(_("Unsubscribe"));
28
$("#share-part .subheader").text(_("Or view a shared list"));
31
function redirectAfterLogin() {
32
hasher.setHash(session.next || "lists");
36
function onLoginRequested() {
38
username: $("#username").val(),
39
password: $("#password").val()
41
$("#login-form")[0].reset();
43
//FIXME: handle login failing.
44
util.sync.start("private_" + auth.username, auth);
45
util.sync.start("shared_lists_" + auth.username, auth);
48
session.onUserDbChanges = {};
49
$(["private", "shared_lists"]).each(function (i, dbName) {
50
var fullName = dbName + "_" + auth.username;
51
session.userDbs[dbName] = new PouchDB(fullName);
52
session.onUserDbChanges[dbName] = function (callback) {
53
return util.sync.onChangesFor(fullName, callback);
57
session.username = auth.username;
58
session.password = auth.password;
59
session.loggedIn = true;
63
$("#session-box").fadeIn();
64
if (session.username === "anonymous") {
65
$("#deregister-part").hide();
67
$("#deregister-part").show();
73
crossroads.addRoute("register", function () {
74
var pn = document.location.pathname;
75
var emptyFilePath = pn.slice(0, pn.lastIndexOf("/")) + "/empty.html";
76
var registerUrl = SERVICES_HOST + "/register?" + $.param({
77
redirect: document.location.origin + emptyFilePath,
78
language: (navigator.language || "").replace("_", "-") || "C"
81
.attr("src", registerUrl)
85
if (this.contentDocument.location.pathname.indexOf("empty.html") === -1) {
86
//not yet at the redirect path
90
if (e.name === "TypeError") {
91
//Single-origin violation means we're not yet
92
//at the redirect path -> ignore.
97
var iframeQuery = this.contentDocument.location.search;
98
//if here, the register page is 'done'.
99
if (iframeQuery === "?status=ok") {
100
$("#register-success").fadeIn();
101
$("#register-failure").fadeOut();
103
if (iframeQuery === "?status=cancel") {
104
$("#register-failure").show();
105
$("#register-success").fadeOut();
107
//set the src back to the registerUrl, it makes the
108
//slideUp animation look better.
110
.attr("src", registerUrl + "&screenshotonly=true")
112
hasher.setHash("login");
116
crossroads.addRoute("deregister", function () {
117
if (!session.loggedIn) {
118
session.next = "deregister";
119
hasher.replaceHash("login");
122
var sure = window.confirm(_("Are you sure you want to unsubscribe? This will remove your account and all data associated with it. Keep in mind that there's no recovery procedure!"));
124
util.servicesRequest({
127
success: function () {
128
crossroads.parse("logout");
136
crossroads.addRoute("login", function () {
137
if (session.loggedIn) {
138
redirectAfterLogin();
141
util.show("#login-page");
142
$("#username").focus();
145
crossroads.addRoute("login-anonymously", function () {
146
$("#username").val("anonymous");
147
$("#password").val("anonymous");
151
crossroads.addRoute("logout", function () {
152
$("#session-box").fadeOut();
154
util.sync.stop("private_" + session.username);
155
util.sync.stop("shared_lists_" + session.username);
157
delete session.username;
158
delete session.password;
159
delete session.userDbs;
160
delete session.onUserDbChanges;
161
session.loggedIn = false;
163
hasher.replaceHash("login");
167
$("#login-form").submit(onLoginRequested);