1
var sharePage = (function () {
2
var currentUsername, currentDb, currentShareName, cancelChanges;
4
function queryOpts(shareName) {
5
return {startkey: [currentShareName], endkey: [currentShareName, {}, {}]};
8
function retranslate() {
9
$("#back-to-shares").text(_("Back to the shares page"));
10
$("#share-lists .last-edited-label").text(_("Last edited:"));
11
$("#share-lists .view-link").text(_("View"));
12
$("#share-lists .take-over-link").text(_("Take over"));
13
//TRANSLATORS: as in ATOM/RSS feeds.
14
//TRANSLATORS: (https://en.wikipedia.org/wiki/Web_feed)
15
$("#share-feed-link").attr("title", _("Feed"));
17
session.languageChanged.handle(retranslate);
19
function onSharedListsChange() {
20
currentDb.query("shares/by_name", queryOpts(), function (err, resp) {
21
$("#share-lists").empty();
22
$.each(resp.rows, function (i, row) {
23
var list = tmpl("share-list-template", {
25
shareName: currentShareName,
26
username: currentUsername,
27
dbName: currentDbName(),
28
classes: i % 2 ? "even" : "odd"
30
$("#share-lists").append(list);
32
//update ui translation
38
$("#back-to-shares").click(function () {
39
//calling directly doesn't work it seems.
44
function currentDbName() {
45
return "shared_lists_" + currentUsername;
48
function onSyncError() {
49
if (err.status === 404) {
50
//'bypassed' means 'not routed' -> gives the 404 page.
51
crossroads.bypassed.dispatch("shares/" + username + "/" + shareName);
55
var shareRoute = crossroads.addRoute("shares/{username}/{shareName}");
56
shareRoute.matched.add(function (username, shareName) {
57
currentUsername = username;
58
currentShareName = shareName;
59
currentDb = new PouchDB(currentDbName());
61
sync.start(currentDbName());
62
sync.errorsFor(currentDbName()).handle(onSyncError);
63
cancelChanges = sync.onChangesFor(currentDbName(), onSharedListsChange);
65
$("#share-page .subheader").text(shareName);
67
$("#share-feed-link").attr(
69
COUCHDB_HOST + "/" + currentDbName() + "/_design/shares/_list/feed/by_name?startkey=" + JSON.stringify(queryOpts().startkey) + "&endkey=" + JSON.stringify(queryOpts().endkey)
74
shareRoute.switched.add(function () {
75
sync.errorsFor(currentDbName()).unhandle(onSyncError);
77
sync.stop(currentDbName());
80
crossroads.addRoute("shares/{username}/{shareName}/{docId}/take-over", function (username, shareName, docId) {
81
//first set up the base page
82
crossroads.parse("shares/" + username + "/" + shareName);
84
var url = "shares/" + username + "/" + shareName + "/" + docId + "/take-over";
85
if (!session.loggedIn) {
87
hasher.replaceHash("login");
90
var db = new PouchDB(currentDbName());
91
db.get(docId, function (err, resp) {
93
//make it act like a new doc. This way, we don't get
94
//conflicts when user a shares a doc which user b takes
95
//over and shares which user a takes over again.
96
//(yeah, pretty unlikely. :P)
99
session.userDbs.private.post(resp);
101
//somehow the doc isn't found -> 404.
102
crossroads.bypassed.dispatch(url);