aboutsummaryrefslogtreecommitdiff
path: root/resources/assets/javascripts/lib/activityfeed.js
blob: 74c27f9f2606ff316d6328d7ef6bbe42f0e7cc85 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
const ActivityFeed = {
    user_id : null,
    polling: null,
    initial: true,
    scrolledfrom: null,
    maxheight: null,
    filter: null,

    init: function() {
        STUDIP.ActivityFeed.maxheight = parseInt($('#stream-container').css('max-height').replace(/[^-\d.]/g, ''));

        STUDIP.ActivityFeed.loadFeed(STUDIP.ActivityFeed.filter);

        $('#stream-container').scroll(function () {
            var scrollBottom = $('#stream-container').scrollTop() + $('#stream-container').height() + 250;

            if ($('#stream-container').prop('scrollHeight') < scrollBottom) {
                STUDIP.ActivityFeed.loadFeed(STUDIP.ActivityFeed.filter);
            }
        });


        $(document).on('click', '.provider_circle', function () {
            $(this).parent().parent().children('.activity-content').toggle();
        }).on('click', '#toggle-all-activities,#toggle-user-activities', function () {
            var toggled = $(this).is(':not(.toggled)');
            $(this).toggleClass('toggled', toggled);

            STUDIP.ActivityFeed.setToggleStatus();

            return false;
        });
    },

    getTemplate: _.memoize(function(name) {
        return _.template($("script." + name).html());
    }),

    loadFeed: function(filtertype) {
        if (STUDIP.ActivityFeed.user_id === null) {
            console.log('Could not retrieve activities, no valid user id found!');
            return false;
        }

        if (STUDIP.ActivityFeed.polling || !STUDIP.ActivityFeed.scrolledfrom) {
            return false;
        }

        STUDIP.ActivityFeed.polling = true;

        STUDIP.api.GET(['user', STUDIP.ActivityFeed.user_id, 'activitystream'], {
            data: {
                filtertype: JSON.stringify(filtertype),
                scrollfrom: STUDIP.ActivityFeed.scrolledfrom
            }
        }).done(function (activities) {
            var stream        = STUDIP.ActivityFeed.getTemplate('activity_stream');
            var activity      = STUDIP.ActivityFeed.getTemplate('activity');
            var activity_urls = STUDIP.ActivityFeed.getTemplate('activity-urls');
            var num_entries   = Object.keys(activities).length;
            var lastelem      = $(activities).last();

            if (lastelem[0]) {
                STUDIP.ActivityFeed.scrolledfrom  = lastelem[0].mkdate;
            } else {
                STUDIP.ActivityFeed.scrolledfrom = false;
            }

            STUDIP.ActivityFeed.writeToStream(stream({
                stream        : activities,
                num_entries   : num_entries,
                activity      : activity,
                activity_urls : activity_urls,
                user_id       :  STUDIP.ActivityFeed.user_id
            }));

            STUDIP.ActivityFeed.setToggleStatus();

            if ($('#stream-container').height() < STUDIP.ActivityFeed.maxheight) {
                STUDIP.ActivityFeed.loadFeed('');
            }
        }).fail(function () {
            var template = STUDIP.ActivityFeed.getTemplate('activity-load-error');
            STUDIP.ActivityFeed.writeToStream(template());
        }).always(function () {
            STUDIP.ActivityFeed.polling = false;
        });
    },

    writeToStream: function (html) {
        if (STUDIP.ActivityFeed.initial) {
            // replace data in DOM
            $('#stream-container').html('');

            STUDIP.ActivityFeed.initial = false;
        }

        $('#stream-container').append(html);
    },

    setToggleStatus: function() {
        var show_details = $('#toggle-all-activities').is('.toggled'),
            show_own     = $('#toggle-user-activities').is('.toggled');

        // update toggle status fir activity contents
        $('.activity-content').toggle(show_details);

        // update toggle status for user's own activities
        $('.activity:has(.provider_circle.right)').toggle(show_own);
    },

    updateFilter: function(filter) {
        STUDIP.ActivityFeed.filter = filter;
        STUDIP.ActivityFeed.initial = true;
        STUDIP.ActivityFeed.scrolledfrom = Math.floor(Date.now() / 1000);

        $('#stream-container').html('<div class="loading-indicator">'
            + '<span class="load-1"></span>'
            + '<span class="load-2"></span>'
            + '<span class="load-3"></span>'
            + '</div>');

        STUDIP.ActivityFeed.init();
    }
};

export default ActivityFeed;