diff --git a/source/scripts/services/filter.js.coffee b/source/scripts/services/filter.js.coffee index 21567a2..68b86c7 100644 --- a/source/scripts/services/filter.js.coffee +++ b/source/scripts/services/filter.js.coffee @@ -5,22 +5,25 @@ angular.module("sideBySide").service "filter", ['poems', (poems) -> extractHeaders(poems.all) @getFilter = () -> + encodings = [] for header in headers activeHeaderValues = _.uniq(poems.getActive().map((item) -> item.meta[header] )) - if (activeHeaderValues.length > 1) - continue # header value differs - inactiveMatching = poems.getInactive().filter((item) -> - item.meta[header] == activeHeaderValues[0] + item.meta[header] in activeHeaderValues ) if (inactiveMatching.length > 0) continue # inactive poems have same header value - ret = {} - ret[header] = activeHeaderValues - return ret + encodings.push({ 'header': header, 'values': activeHeaderValues }) + + minlength = _.min(encodings.map((item) -> item.values.length)) + filtered = _.first(encodings.filter((item) -> item.values.length == minlength)) + + ret = {} + ret[filtered.header] = filtered.values + return ret extractHeaders = (all) -> fieldLengths = all diff --git a/source/tests/services/filter.js.coffee b/source/tests/services/filter.js.coffee index b403b5a..5101fad 100644 --- a/source/tests/services/filter.js.coffee +++ b/source/tests/services/filter.js.coffee @@ -63,3 +63,12 @@ test "get filter for poems that share a common property", () -> deepEqual filter.getFilter(), { 'Language': [ 'Czech' ] } + +test "get filter for arbitrary poems using shortest key", () -> + poemList.vrch.meta.Active = true + poemList.muz.meta.Active = true + filter.update() + + deepEqual filter.getFilter(), { + 'Code': [ 'vrch', 'muz' ] + }