Skip to content

Commit 00795c1

Browse files
committed
Added expand/collapse support for feeds
1 parent b423b0c commit 00795c1

3 files changed

Lines changed: 225 additions & 74 deletions

File tree

templates/_feed.html

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,30 @@
1+
<div class="feed-block feed-block-{{ feed_index }}" id="feed-block-{{ feed.id }}">
2+
<div class="feed-header-wrapper">
3+
<a href="{{ feed.website_link }}" target="_blank" class="feed-head">
4+
{{ feed.title }}
5+
</a>
6+
<span class="feed-toggle" id="toggle-{{ feed.id }}"
7+
onclick="toggle_feed('{{ feed.id }}', '{{ feed.rss_link }}')">-</span>
8+
</div>
19

2-
<div class="feed-block feed-block-{{ feed_index }}">
3-
<a href="{{ feed.website_link }}" target="_blank" class="feed-head">
4-
{{ feed.title }}
5-
</a>
6-
710
<div class="feed-body">
811
<ul id="{{ feed.id }}_link">
912

1013
<div class="loading-container">
1114
<div class="loading">
1215

13-
<div class="shape1"></div>
14-
<div class="shape2"></div>
15-
<div class="shape3"></div>
16-
<div class="shape4"></div>
17-
<div class="shape3"></div>
18-
</div>
19-
16+
<div class="shape1"></div>
17+
<div class="shape2"></div>
18+
<div class="shape3"></div>
19+
<div class="shape4"></div>
20+
<div class="shape3"></div>
21+
</div>
22+
2023
</ul>
2124

2225
<script type="text/javascript">
23-
read_rss_into_element("{{ feed.id }}_link", "{{ feed.rss_link }}");
26+
init_rss_feed("{{ feed.id }}_link", "{{ feed.rss_link }}", "{{ feed.id }}");
2427
</script>
2528
</div>
2629

27-
</div>
30+
</div>

templates/resources/scripts.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,46 @@ function read_rss_into_element(elementName, url) {
66
rss_queue.push({ elementName, url });
77
}
88

9+
function init_rss_feed(elementName, url, feedId) {
10+
const isCollapsed = localStorage.getItem('feed_collapsed_' + feedId) === 'true';
11+
if (isCollapsed) {
12+
const feedBlock = document.getElementById('feed-block-' + feedId);
13+
if (feedBlock) {
14+
feedBlock.classList.add('collapsed');
15+
}
16+
const toggle = document.getElementById('toggle-' + feedId);
17+
if (toggle) {
18+
toggle.innerHTML = '+';
19+
}
20+
} else {
21+
read_rss_into_element(elementName, url);
22+
}
23+
}
24+
25+
function toggle_feed(feedId, rssUrl) {
26+
const feedBlock = document.getElementById('feed-block-' + feedId);
27+
const toggle = document.getElementById('toggle-' + feedId);
28+
if (!feedBlock) return;
29+
30+
const isCollapsed = feedBlock.classList.toggle('collapsed');
31+
localStorage.setItem('feed_collapsed_' + feedId, isCollapsed);
32+
33+
if (isCollapsed) {
34+
if (toggle) toggle.innerHTML = '+';
35+
} else {
36+
if (toggle) toggle.innerHTML = '-';
37+
// If not loaded yet (has loading indicator), add to queue
38+
const content = document.getElementById(feedId + '_link');
39+
if (content && content.querySelector('.loading-container')) {
40+
read_rss_into_element(feedId + '_link', rssUrl);
41+
// If queue was empty, restart processing
42+
if (rss_queue.length === 1) {
43+
process_rss_queue();
44+
}
45+
}
46+
}
47+
}
48+
949
/**
1050
* Randomize array element order in-place.
1151
* Using Durstenfeld shuffle algorithm.
@@ -59,9 +99,12 @@ function process_rss_queue() {
5999

60100
if (rss_queue.length <= 0) {
61101
// all done!
102+
is_processing = false;
62103
return;
63104
}
64105

106+
is_processing = true;
107+
65108
const MAX_ITEMS = 8;
66109

67110
const { elementName, url } = rss_queue[0];
@@ -138,6 +181,13 @@ function process_rss_queue() {
138181
counter += 1;
139182
}
140183

184+
var is_processing = false;
185+
function start_process_rss_queue() {
186+
if (is_processing) return;
187+
shuffleArray(rss_queue);
188+
process_rss_queue();
189+
}
190+
141191
// https://stackoverflow.com/questions/11381673/detecting-a-mobile-browser
142192
window.mobilecheck = function () {
143193
var check = false;

0 commit comments

Comments
 (0)