~openteachermaintainers/openteacher/3.x

« back to all changes in this revision

Viewing changes to modules/org/openteacher/profileRunners/webGenerator/static/scr/share.js

  • Committer: Marten de Vries
  • Date: 2017-06-28 18:05:48 UTC
  • Revision ID: git-v1:b4c406307aa345c58b9904b76580f15c5bff2a4e
Move JS into npm modules

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
var sharePage = (function () {
2
 
        var currentUsername, currentDb, currentShareName, cancelChanges;
3
 
 
4
 
        function queryOpts(shareName) {
5
 
                return {startkey: [currentShareName], endkey: [currentShareName, {}, {}]};
6
 
        }
7
 
 
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"));
16
 
        }
17
 
        session.languageChanged.handle(retranslate);
18
 
 
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", {
24
 
                                        doc: row.value,
25
 
                                        shareName: currentShareName,
26
 
                                        username: currentUsername,
27
 
                                        dbName: currentDbName(),
28
 
                                        classes: i % 2 ? "even" : "odd"
29
 
                                });
30
 
                                $("#share-lists").append(list);
31
 
                        });
32
 
                        //update ui translation
33
 
                        retranslate();
34
 
                });
35
 
        }
36
 
 
37
 
        $(function () {
38
 
                $("#back-to-shares").click(function () {
39
 
                        //calling directly doesn't work it seems.
40
 
                        history.back();
41
 
                });
42
 
        });
43
 
 
44
 
        function currentDbName() {
45
 
                return "shared_lists_" + currentUsername;
46
 
        }
47
 
 
48
 
        function onSyncError() {
49
 
                if (err.status === 404) {
50
 
                        //'bypassed' means 'not routed' -> gives the 404 page.
51
 
                        crossroads.bypassed.dispatch("shares/" + username + "/" + shareName);
52
 
                }
53
 
        }
54
 
 
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());
60
 
 
61
 
                sync.start(currentDbName());
62
 
                sync.errorsFor(currentDbName()).handle(onSyncError);
63
 
                cancelChanges = sync.onChangesFor(currentDbName(), onSharedListsChange);
64
 
 
65
 
                $("#share-page .subheader").text(shareName);
66
 
 
67
 
                $("#share-feed-link").attr(
68
 
                        "href",
69
 
                        COUCHDB_HOST + "/" + currentDbName() + "/_design/shares/_list/feed/by_name?startkey=" + JSON.stringify(queryOpts().startkey) + "&endkey=" + JSON.stringify(queryOpts().endkey)
70
 
                );
71
 
 
72
 
                show("#share-page");
73
 
        });
74
 
        shareRoute.switched.add(function () {
75
 
                sync.errorsFor(currentDbName()).unhandle(onSyncError);
76
 
                cancelChanges();
77
 
                sync.stop(currentDbName());
78
 
        });
79
 
 
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);
83
 
 
84
 
                var url = "shares/" + username + "/" + shareName + "/" + docId + "/take-over";
85
 
                if (!session.loggedIn) {
86
 
                        session.next = url;
87
 
                        hasher.replaceHash("login");
88
 
                        return;
89
 
                }
90
 
                var db = new PouchDB(currentDbName());
91
 
                db.get(docId, function (err, resp) {
92
 
                        if (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)
97
 
                                delete resp._id;
98
 
                                delete resp._rev;
99
 
                                session.userDbs.private.post(resp);
100
 
                        } else {
101
 
                                //somehow the doc isn't found -> 404.
102
 
                                crossroads.bypassed.dispatch(url);
103
 
                        }
104
 
                });
105
 
        });
106
 
}());