diff --git a/util.js b/util.js index ea984e8..9334ca3 100644 --- a/util.js +++ b/util.js @@ -95,21 +95,10 @@ function htmlEscape(str) { .replace(/>/g, '>'); } -function navigateTo (url) { - before = new Date (); - var jsonurl = url.replace ("index", "getJSON"); - var cachedData = cache.get (jsonurl); - if (cachedData) { - history.pushState(jsonurl, "", url); - updatePage (cachedData); - } else { - $.getJSON(jsonurl, function(data) { - history.pushState(jsonurl, "", url); - cache.put (jsonurl, data); - updatePage (data); - }); - } -} +/************************************************ + * All functions needed to filter the book list by tags + ************************************************ + */ function getTagList () { var tagList = {}; @@ -149,7 +138,13 @@ function doFilter () { } if (toBeFiltered) $(this).parents (".books").addClass ("filtered"); }); + updateFilters (); +} + +function updateFilters () { var tagList = getTagList (); + + // If there is already some filters then let's prepare to update the list $("#filter ul li").each (function () { var text = $(this).text (); if (isDefined (tagList [text]) || $(this).attr ('class')) { @@ -158,6 +153,8 @@ function doFilter () { tagList [text] = -1; } }); + + // Update the filter -1 to remove, 1 to add, 0 already there for (var tag in tagList) { var tagValue = tagList [tag]; if (tagValue == -1) { @@ -167,11 +164,52 @@ function doFilter () { $("#filter ul").append ("
  • " + tag + "
  • "); } } + + // Sort the list alphabetically $('#filter ul li').sortElements(function(a, b){ return $(a).text() > $(b).text() ? 1 : -1; }); } +function handleFilterEvents () { + $("#filter ul").on ("click", "li", function(){ + var filter = $(this).text (); + switch ($(this).attr("class")) { + case "filter-include" : + $(this).attr("class", "filter-exclude"); + filterList [filter] = false; + break; + case "filter-exclude" : + $(this).removeClass ("filter-exclude");; + delete filterList [filter];; + break; + default : + $(this).attr("class", "filter-include"); + filterList [filter] = true; + break; + } + doFilter (); + }); +} + + + +function navigateTo (url) { + before = new Date (); + var jsonurl = url.replace ("index", "getJSON"); + var cachedData = cache.get (jsonurl); + if (cachedData) { + history.pushState(jsonurl, "", url); + updatePage (cachedData); + } else { + $.getJSON(jsonurl, function(data) { + history.pushState(jsonurl, "", url); + cache.put (jsonurl, data); + updatePage (data); + }); + } +} + function updatePage (data) { var result; filterList = {}; @@ -196,38 +234,8 @@ function updatePage (data) { if (currentData.containsBook == 1) { $("#sortForm").show (); $("#filter ul").empty (); - $(".se").each (function(){ - var taglist = $(this).text(); - - var tagarray = taglist.split (",") - for (i in tagarray) { - var tag = tagarray [i].replace(/^\s+/g,'').replace(/\s+$/g,''); - if ( $('#filter ul li:contains("' + tag + '")').length == 0 ) { - $("#filter ul").append ("
  • " + tag + "
  • "); - } - } - }); - $('#filter ul li').sortElements(function(a, b){ - return $(a).text() > $(b).text() ? 1 : -1; - }); - $("li").click(function(){ - var filter = $(this).text (); - switch ($(this).attr("class")) { - case "filter-include" : - $(this).attr("class", "filter-exclude"); - filterList [filter] = false; - break; - case "filter-exclude" : - $(this).removeClass ("filter-exclude");; - delete filterList [filter];; - break; - default : - $(this).attr("class", "filter-include"); - filterList [filter] = true; - break; - } - doFilter (); - }); + updateFilters (); + handleFilterEvents () } else { $("#sortForm").hide (); }