@@ -124,19 +124,35 @@ const hideLoader = () => {
124
124
document . querySelector ( "#loading-indicator-container" ) . style . display = "none" ;
125
125
} ;
126
126
127
+ const createTagInstance = ( element , tags , selectedTags ) => {
128
+ const tagsHierarchy = tags . reduce ( ( acc , tag ) => ( { ...acc , [ tag . slug ] : tag . sub_tags } ) , { } ) ;
129
+
130
+ return Tags . init ( element , {
131
+ allowNew : true ,
132
+ allowClear : true ,
133
+ items : tags . reduce ( ( acc , tag ) => ( { ...acc , [ tag . slug ] : tag . title } ) , { } ) ,
134
+ selected : selectedTags . map ( ( tag ) => tag . slug ) ,
135
+ onSelectItem ( item , instance ) {
136
+ if ( ! Array . isArray ( tagsHierarchy [ item . value ] ) ) {
137
+ return ;
138
+ }
139
+
140
+ const alreadyAddedItems = instance . getSelectedValues ( ) ;
141
+ tagsHierarchy [ item . value ]
142
+ . filter ( ( tag ) => ! alreadyAddedItems . includes ( tag . slug ) )
143
+ . forEach ( ( tag ) => instance . addItem ( tag . title , tag . slug ) ) ;
144
+ } ,
145
+ } ) ;
146
+ } ;
147
+
127
148
const displayArticle = ( article , tags ) => {
128
149
document . querySelector ( "#article-container" ) . style . display = "block" ;
129
150
130
151
document . querySelector ( "#saved-article-title" ) . value = article . title ;
131
152
document . querySelector ( "#saved-article-reading-time" ) . value = article . reading_time ;
132
153
133
154
if ( articleTagsInstance === null ) {
134
- articleTagsInstance = Tags . init ( "#saved-article-tags" , {
135
- allowNew : true ,
136
- allowClear : true ,
137
- items : tags . reduce ( ( acc , tag ) => ( { ...acc , [ tag . slug ] : tag . title } ) , { } ) ,
138
- selected : article . tags . map ( ( tag ) => tag . slug ) ,
139
- } ) ;
155
+ articleTagsInstance = createTagInstance ( "#saved-article-tags" , tags , article . tags ) ;
140
156
}
141
157
142
158
if ( article . is_read ) {
@@ -160,6 +176,8 @@ const displayArticle = (article, tags) => {
160
176
document . querySelector ( "#mark-article-as-for-later" ) . style . display = "block" ;
161
177
document . querySelector ( "#unmark-article-as-for-later" ) . style . display = "none" ;
162
178
}
179
+
180
+ document . querySelector ( "#open-article-details" ) . href = article . details_url ;
163
181
} ;
164
182
165
183
const hideArticle = ( ) => {
@@ -173,6 +191,8 @@ const displayFeed = (feed, tags, categories) => {
173
191
document . querySelector ( "#feed-refresh-delay" ) . value = feed . refresh_delay ;
174
192
document . querySelector ( "#feed-article-retention-time" ) . value = feed . article_retention_time ;
175
193
194
+ document . querySelector ( "#open-feed-details" ) . href = feed . details_url ;
195
+
176
196
const categorySelector = document . querySelector ( "#feed-category" ) ;
177
197
// Clean all existing choices.
178
198
categorySelector . innerHTML = "" ;
@@ -189,12 +209,7 @@ const displayFeed = (feed, tags, categories) => {
189
209
categorySelector . value = feed . category ? feed . category . id : "" ;
190
210
191
211
if ( feedTagsInstance === null ) {
192
- feedTagsInstance = Tags . init ( "#feed-tags" , {
193
- allowNew : true ,
194
- allowClear : true ,
195
- items : tags . reduce ( ( acc , tag ) => ( { ...acc , [ tag . slug ] : tag . title } ) , { } ) ,
196
- selected : feed . tags . map ( ( tag ) => tag . slug ) ,
197
- } ) ;
212
+ feedTagsInstance = createTagInstance ( "#feed-tags" , tags , feed . tags ) ;
198
213
}
199
214
200
215
document . querySelector ( "#update-feed-form" ) . addEventListener ( "submit" , ( event ) => {
0 commit comments