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
128
|
const ActivityFeed = {
user_id : null,
polling: null,
initial: true,
scrolledfrom: null,
maxheight: null,
filter: null,
init() {
STUDIP.ActivityFeed.maxheight = parseInt($('#stream-container').css('max-height').replace(/[^-\d.]/g, ''));
STUDIP.ActivityFeed.loadFeed(STUDIP.ActivityFeed.filter);
$('#stream-container').scroll(() => {
const 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 () {
const toggled = $(this).is(':not(.toggled)');
$(this).toggleClass('toggled', toggled);
STUDIP.ActivityFeed.setToggleStatus();
return false;
});
},
getTemplate: _.memoize(name => {
return _.template($(`script.${name}`).html());
}),
loadFeed(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;
const url = STUDIP.URLHelper.getURL('dispatch.php/activityfeed/load', {
filtertype: JSON.stringify(filtertype),
scrollfrom: STUDIP.ActivityFeed.scrolledfrom,
});
fetch(url).then(
response => response.json(),
).then(activities => {
const stream = STUDIP.ActivityFeed.getTemplate('activity_stream');
const activity = STUDIP.ActivityFeed.getTemplate('activity');
const activity_urls = STUDIP.ActivityFeed.getTemplate('activity-urls');
const num_entries = Object.keys(activities).length;
const 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('');
}
}).catch(() => {
const template = STUDIP.ActivityFeed.getTemplate('activity-load-error');
STUDIP.ActivityFeed.writeToStream(template());
}).finally(() => {
STUDIP.ActivityFeed.polling = false;
});
},
writeToStream(html) {
if (STUDIP.ActivityFeed.initial) {
// replace data in DOM
$('#stream-container').html('');
STUDIP.ActivityFeed.initial = false;
}
$('#stream-container').append(html);
},
setToggleStatus() {
const show_details = $('#toggle-all-activities').is('.toggled');
const 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(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;
|