Skip to content

Commit 72a1930

Browse files
committed
rewrite feed navigation
1 parent e339354 commit 72a1930

File tree

2 files changed

+25
-11
lines changed

2 files changed

+25
-11
lines changed

src/assets/index.html

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -143,10 +143,8 @@
143143
</label>
144144
<div v-for="folder in foldersWithFeeds">
145145
<label class="selectgroup mt-1"
146-
:class="{'d-none': filterSelected
147-
&& !(current.folder.id == folder.id || current.feed.folder_id == folder.id)
148-
&& !filteredFolderStats[folder.id]
149-
&& (!itemSelectedDetails || (feedsById[itemSelectedDetails.feed_id] || {}).folder_id != folder.id)}">
146+
:class="{'d-none': mustHideFolder(folder)}"
147+
v-if="folder.id">
150148
<input type="radio" name="feed" :value="'folder:'+folder.id" v-model="feedSelected" v-if="folder.id">
151149
<div class="selectgroup-label d-flex align-items-center w-100" v-if="folder.id">
152150
<span class="icon mr-2"
@@ -160,10 +158,7 @@
160158
</label>
161159
<div v-show="!folder.id || folder.is_expanded" class="mt-1" :class="{'pl-3': folder.id}">
162160
<label class="selectgroup"
163-
:class="{'d-none': filterSelected
164-
&& !(current.feed.id == feed.id)
165-
&& !filteredFeedStats[feed.id]
166-
&& (!itemSelectedDetails || itemSelectedDetails.feed_id != feed.id)}"
161+
:class="{'d-none': mustHideFeed(feed)}"
167162
v-for="feed in folder.feeds">
168163
<input type="radio" name="feed" :value="'feed:'+feed.id" v-model="feedSelected">
169164
<div class="selectgroup-label d-flex align-items-center w-100">

src/assets/javascripts/app.js

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -768,9 +768,16 @@ var vm = new Vue({
768768
// navigation helper, navigate relative to selected feed
769769
navigateToFeed: function(relativePosition) {
770770
let vm = this
771-
var navigationList = Array.from(document.querySelectorAll('#col-feed-list input[name=feed]'))
772-
.filter(function(r) { return r.offsetParent !== null && r.value !== 'folder:null' })
773-
.map(function(r) { return r.value })
771+
const navigationList = this.foldersWithFeeds
772+
.filter(folder => !folder.id || !vm.mustHideFolder(folder))
773+
.map((folder) => {
774+
if (this.mustHideFolder(folder)) return []
775+
const folds = folder.id ? [`folder:${folder.id}`] : []
776+
const feeds = (folder.is_expanded || !folder.id) ? folder.feeds.filter(f => !vm.mustHideFeed(f)).map(f => `feed:${f.id}`) : []
777+
return folds.concat(feeds)
778+
})
779+
.flat()
780+
navigationList.unshift('')
774781

775782
var currentFeedPosition = navigationList.indexOf(vm.feedSelected)
776783

@@ -799,6 +806,18 @@ var vm = new Vue({
799806
if (curIdx >= (this.refreshRateOptions.length - 1) && offset > 0) return
800807
this.refreshRate = this.refreshRateOptions[curIdx + offset].value
801808
},
809+
mustHideFolder: function (folder) {
810+
return this.filterSelected
811+
&& !(this.current.folder.id == folder.id || this.current.feed.folder_id == folder.id)
812+
&& !this.filteredFolderStats[folder.id]
813+
&& (!this.itemSelectedDetails || (this.feedsById[itemSelectedDetails.feed_id] || {}).folder_id != folder.id)
814+
},
815+
mustHideFeed: function (feed) {
816+
return this.filterSelected
817+
&& !(this.current.feed.id == feed.id)
818+
&& !this.filteredFeedStats[feed.id]
819+
&& (!this.itemSelectedDetails || this.itemSelectedDetails.feed_id != feed.id)
820+
},
802821
}
803822
})
804823

0 commit comments

Comments
 (0)