Explorar el Código

Support reading all filter types from the url

Lucas Stadler %!s(int64=9) %!d(string=hace) años
padre
commit
a73c3aeda3
Se han modificado 1 ficheros con 23 adiciones y 13 borrados
  1. 23 13
      go/blog/blog.go

+ 23 - 13
go/blog/blog.go

@ -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];