From 452bde9cb513c643377325fca11d7f6cb7c5a9bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lucas?= Date: Fri, 28 Jun 2013 02:07:32 +0200 Subject: [PATCH] Add filter in the HTML catalog. need UI work. re #46 --- styles/style-default.css | 41 +++++++++++++++++++++---- styles/style-eink.css | 38 ++++++++++++++++++++++- templates/default/header.html | 4 +++ templates/default/main.html | 2 +- util.js | 58 ++++++++++++++++++++++++++++++++++- 5 files changed, 134 insertions(+), 9 deletions(-) diff --git a/styles/style-default.css b/styles/style-default.css index 6875370..1cee6f6 100644 --- a/styles/style-default.css +++ b/styles/style-default.css @@ -55,6 +55,41 @@ a:hover { color:#000; text-decoration: none; } margin: 20px auto; } +.filtered { +display: none; +} + +#filter { +clear:both; +} + +#filter ul { +margin: 0; +padding: 0; +list-style-type: none; +text-align: left; +text-transform:none; +} + +#filter li { +display: inline-block; +padding: .2em 1em; +margin: 2px; +color: black; +background-color: white; +opacity: 0.5; +} + +.filter-include { + border-left:thick solid blue; + opacity: 1; +} + +.filter-exclude { + border-right:thick solid red; + opacity: 1; +} + img { @@ -246,7 +281,6 @@ line-height: 100%; #tool { width:100%; -height:32px; overflow: hidden; } @@ -259,11 +293,6 @@ width: 100%; margin: 3px; } -#tool div, #tool form -{ -height: 32px; -} - .stop select { vertical-align: middle; diff --git a/styles/style-eink.css b/styles/style-eink.css index a3da88e..d1508be 100644 --- a/styles/style-eink.css +++ b/styles/style-eink.css @@ -60,6 +60,43 @@ a:hover { color:#000; text-decoration: none; } margin: 20px auto; } +.filtered { +display: none; +} + +#filter { +clear:both; +} + +#filter ul { +margin: 0; +padding: 0; +list-style-type: none; +text-align: left; +text-transform:none; +font-variant: normal; +} + +#filter li { +display: inline-block; +padding: .2em 1em; +margin: 2px; +color: black; +background-color: #ddd; +opacity: 0.5; +} + +.filter-include { + border-left:thick solid blue; + opacity: 1; +} + +.filter-exclude { + border-right:thick solid red; + opacity: 1; +} + + img { margin:0; @@ -256,7 +293,6 @@ line-height: 100%; #tool { width:100%; -height:32px; overflow: hidden; } diff --git a/templates/default/header.html b/templates/default/header.html index 5c62527..15f3539 100644 --- a/templates/default/header.html +++ b/templates/default/header.html @@ -39,5 +39,9 @@ +
+ +
diff --git a/templates/default/main.html b/templates/default/main.html index 9af16d3..a495b3a 100644 --- a/templates/default/main.html +++ b/templates/default/main.html @@ -33,7 +33,7 @@ {{? entry.book.rating != ""}}{{=entry.book.rating}}{{?}}

{{=it.const.i18n.authorsTitle}} :

{{=htmlEscape (entry.book.authorsName)}}
- {{? entry.book.tagsName != ""}}

{{=it.const.i18n.tagsTitle}} :

{{=htmlEscape (entry.book.tagsName)}}
{{?}} + {{? entry.book.tagsName != ""}}

{{=it.const.i18n.tagsTitle}} :

{{=htmlEscape (entry.book.tagsName)}}
{{?}} {{? entry.book.seriesName != ""}}

{{=it.const.i18n.seriesTitle}} :

{{=htmlEscape (entry.book.seriesName)}}
{{?}} diff --git a/util.js b/util.js index 8f492d7..3ae7758 100644 --- a/util.js +++ b/util.js @@ -1,4 +1,4 @@ -var templatePage, templateBookDetail, templateMain, currentData, before; +var templatePage, templateBookDetail, templateMain, currentData, before, filterList; var cache = new LRUCache(30); @@ -111,8 +111,34 @@ function navigateTo (url) { } } +function doFilter () { + $(".books").removeClass("filtered"); + if (jQuery.isEmptyObject(filterList)) return; + + $(".se").each (function(){ + var taglist = ", " + $(this).text() + ", "; + var toBeFiltered = false; + for (var filter in filterList) { + var onlyThisTag = filterList [filter]; + filter = ', ' + filter + ', '; + var myreg = new RegExp (filter); + if (myreg.test (taglist)) { + if (onlyThisTag === false) { + toBeFiltered = true; + } + } else { + if (onlyThisTag === true) { + toBeFiltered = true; + } + } + } + if (toBeFiltered) $(this).parents (".books").addClass ("filtered"); + }); +} + function updatePage (data) { var result; + filterList = {}; data ["const"] = currentData ["const"]; if (false && $("section").length && currentData.isPaginated == 0 && data.isPaginated == 0) { // Partial update (for now disabled) @@ -133,6 +159,36 @@ function updatePage (data) { if ($.cookie('toolbar') == 1) $("#tool").show (); 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 + "
  • "); + } + } + }); + $("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 (); + }); } else { $("#sortForm").hide (); }