From 0a8acdb43aabecaf491d9c487679f47803ce3f01 Mon Sep 17 00:00:00 2001 From: Vit Brunner Date: Tue, 6 Jan 2015 18:55:42 +0100 Subject: [PATCH] Custom top filtering links --- source/index.html.jade | 2 ++ source/scripts/controllers/app.js.coffee | 15 +++++++++++++-- source/scripts/services/filter.js.coffee | 7 +++++++ source/tests/services/filter.js.coffee | 14 ++++++++++++++ source/tests/the_raven/config.json | 14 +++++++++++--- 5 files changed, 47 insertions(+), 5 deletions(-) diff --git a/source/index.html.jade b/source/index.html.jade index 5028275..5fe8082 100644 --- a/source/index.html.jade +++ b/source/index.html.jade @@ -21,6 +21,8 @@ html(ng-app="sideBySide" ng-controller="AppController") // top menu .pure-menu.pure-menu-open.pure-menu-horizontal.menu-main ul + li(ng-repeat="link in links") + a(href="" ng-click="display(link.display)" ng-bind-html="link.text") li a(href="" ng-click="showPage('help')") Help li diff --git a/source/scripts/controllers/app.js.coffee b/source/scripts/controllers/app.js.coffee index ffa264f..8fff650 100644 --- a/source/scripts/controllers/app.js.coffee +++ b/source/scripts/controllers/app.js.coffee @@ -1,6 +1,6 @@ angular.module("sideBySide").controller "AppController", -['$scope', 'ngDialog', 'poems' -($scope, ngDialog, poems) -> +['$scope', 'ngDialog', 'filter', 'poems' +($scope, ngDialog, filter, poems) -> $scope.title = => sbs = 'Side By Side viewer' if poems.config.title @@ -8,6 +8,17 @@ angular.module("sideBySide").controller "AppController", else sbs + $scope.$watchCollection -> + poems.config + , -> + if 'links' of poems.config + $scope.links = poems.config.links.map (link) -> + link.display = JSON.stringify link.display + link + + $scope.display = (encoded) -> + filter.setFilter JSON.parse encoded + $scope.showPage = (page) -> ngDialog.open { template: 'partials/' + page + '.html' diff --git a/source/scripts/services/filter.js.coffee b/source/scripts/services/filter.js.coffee index 0bce439..4b3c6a2 100644 --- a/source/scripts/services/filter.js.coffee +++ b/source/scripts/services/filter.js.coffee @@ -5,6 +5,13 @@ angular.module("sideBySide").service "filter", @update = -> extractHeaders poems.all + @setFilter = (filter) -> + for key, values of filter + null + + poems.all.map (poem) -> + poem.meta.Active = poem.meta[key] in values + @getFilter = -> encodings = [] for header in headers diff --git a/source/tests/services/filter.js.coffee b/source/tests/services/filter.js.coffee index 56d3c23..804a940 100644 --- a/source/tests/services/filter.js.coffee +++ b/source/tests/services/filter.js.coffee @@ -70,3 +70,17 @@ test "get filter for arbitrary poems using shortest key", -> deepEqual filter.getFilter(), { 'Code': [ 'vrch', 'muz' ] } + +test "set filter", -> + setPoems() + poemList.vrch.meta.Active = true + filter.update() + filter.setFilter { + 'Language': [ 'English' ] + } + + equal poemList.vrch.meta.Active, false + equal poemList.poe.meta.Active, true + deepEqual filter.getFilter(), { + 'Code': [ 'poe' ] + } diff --git a/source/tests/the_raven/config.json b/source/tests/the_raven/config.json index e531368..f632cd6 100644 --- a/source/tests/the_raven/config.json +++ b/source/tests/the_raven/config.json @@ -1,5 +1,15 @@ { "title": "The Raven", + "links": [{ + "text": "English", + "display": { "Language": [ "en" ] } + }, { + "text": "Česky", + "display": { "Language": [ "cs" ] } + }, { + "text": "Polski", + "display": { "Language": [ "pl" ] } + }], "files": [ "1845-poe.md", "1881-vrchlicky.md", @@ -9,7 +19,5 @@ "1910-barbara-beaupre.md", "1970-baranczak.md" ], - "display": { - "Language": [ "cs" ] - } + "display": { "Language": [ "cs" ] } }