Просмотр исходного кода

Support reading all filter types from the url

Lucas Stadler лет назад: 9
Родитель
Сommit
a73c3aeda3
1 измененных файлов с 23 добавлено и 13 удалено
  1. 23 13
      go/blog/blog.go

+ 23 - 13
go/blog/blog.go

254
	var currentFilter = null;
254
	var currentFilter = null;
255
255
256
	window.addEventListener("DOMContentLoaded", function(ev) {
256
	window.addEventListener("DOMContentLoaded", function(ev) {
257
		filterFromURL(document.location);
257
		runFilterFromURL(document.location);
258
	});
258
	});
259
259
260
	window.addEventListener("hashchange", function(ev) {
260
	window.addEventListener("hashchange", function(ev) {
261
		filterFromURL(new URL(ev.newURL));
261
		runFilterFromURL(new URL(ev.newURL));
262
	});
262
	});
263
263
264
	window.addEventListener("click", function(ev) {
264
	window.addEventListener("click", function(ev) {
270
			return;
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
			clearFilter();
275
			clearFilter();
276
			location.hash = "";
276
			location.hash = "";
277
			ev.preventDefault();
277
			ev.preventDefault();
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
			clearFilter();
290
			clearFilter();
287
		} else {
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
			return null;
307
			return null;
295
		}
308
		}
296
		return u.hash.substr(5);
297
	}
309
	}
298
310
299
	function filterTag(tag) {
311
	function filterTag(tag) {
300
		currentFilter = tag;
301
302
		var articles = document.querySelectorAll("article");
312
		var articles = document.querySelectorAll("article");
303
		for (var i = 0; i < articles.length; i++) {
313
		for (var i = 0; i < articles.length; i++) {
304
			var article = articles[i];
314
			var article = articles[i];