mirror of
https://github.com/wassname/side-by-side.git
synced 2026-09-11 12:44:22 +08:00
Make filtering work
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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' ]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user