|
|
@ -254,11 +254,11 @@ func main() {
|
|
254
|
254
|
var currentFilter = null;
|
|
255
|
255
|
|
|
256
|
256
|
window.addEventListener("DOMContentLoaded", function(ev) {
|
|
257
|
|
filterFromURL(document.location);
|
|
|
257
|
runFilterFromURL(document.location);
|
|
258
|
258
|
});
|
|
259
|
259
|
|
|
260
|
260
|
window.addEventListener("hashchange", function(ev) {
|
|
261
|
|
filterFromURL(new URL(ev.newURL));
|
|
|
261
|
runFilterFromURL(new URL(ev.newURL));
|
|
262
|
262
|
});
|
|
263
|
263
|
|
|
264
|
264
|
window.addEventListener("click", function(ev) {
|
|
|
@ -270,8 +270,8 @@ func main() {
|
|
270
|
270
|
return;
|
|
271
|
271
|
}
|
|
272
|
272
|
|
|
273
|
|
var tag = tagFromURL(new URL(ev.target.href));
|
|
274
|
|
if (currentFilter == tag) {
|
|
|
273
|
var filter = filterFromURL(new URL(ev.target.href));
|
|
|
274
|
if (isSameFilter(currentFilter, filter)) {
|
|
275
|
275
|
clearFilter();
|
|
276
|
276
|
location.hash = "";
|
|
277
|
277
|
ev.preventDefault();
|
|
|
@ -280,25 +280,35 @@ func main() {
|
|
280
|
280
|
}
|
|
281
|
281
|
});
|
|
282
|
282
|
|
|
283
|
|
function filterFromURL(u) {
|
|
284
|
|
var tag = tagFromURL(u);
|
|
285
|
|
if (tag == null) {
|
|
|
283
|
function isSameFilter(f1, f2) {
|
|
|
284
|
return f1 && f2 && f1.type == f2.type && f1.argument == f2.argument;
|
|
|
285
|
}
|
|
|
286
|
|
|
|
287
|
function runFilterFromURL(u) {
|
|
|
288
|
var filter = filterFromURL(u);
|
|
|
289
|
if (filter == null) {
|
|
286
|
290
|
clearFilter();
|
|
287
|
291
|
} else {
|
|
288
|
|
filterTag(tag);
|
|
|
292
|
filter.run(filter.argument);
|
|
|
293
|
currentFilter = filter;
|
|
289
|
294
|
}
|
|
290
|
295
|
}
|
|
291
|
296
|
|
|
292
|
|
function tagFromURL(u) {
|
|
293
|
|
if (!u.hash.startsWith("#tag:")) {
|
|
|
297
|
function filterFromURL(u) {
|
|
|
298
|
if (u.hash.startsWith("#tag:")) {
|
|
|
299
|
return { type: "tag", run: filterTag, argument: u.hash.substr(5) };
|
|
|
300
|
} else if (u.hash.startsWith("#title:")) {
|
|
|
301
|
return { type: "title", run: filterTitle, argument: u.hash.substr(7) };
|
|
|
302
|
} else if (u.hash.startsWith("#id:")) {
|
|
|
303
|
return { type: "id", run: filterId, argument: u.hash.substr(4) };
|
|
|
304
|
} else if (u.hash.startsWith("#type:")) {
|
|
|
305
|
return { type: "type", run: filterType, argument: u.hash.substr(6) };
|
|
|
306
|
} else {
|
|
294
|
307
|
return null;
|
|
295
|
308
|
}
|
|
296
|
|
return u.hash.substr(5);
|
|
297
|
309
|
}
|
|
298
|
310
|
|
|
299
|
311
|
function filterTag(tag) {
|
|
300
|
|
currentFilter = tag;
|
|
301
|
|
|
|
302
|
312
|
var articles = document.querySelectorAll("article");
|
|
303
|
313
|
for (var i = 0; i < articles.length; i++) {
|
|
304
|
314
|
var article = articles[i];
|