Multifile support in Filter. #2171
This commit is contained in:
parent
1bad329294
commit
e2373db508
@ -127,8 +127,8 @@ Filter =
|
|||||||
mask = (mask | (if post.file then 4 else 8))
|
mask = (mask | (if post.file then 4 else 8))
|
||||||
board = "#{post.siteID}/#{post.boardID}"
|
board = "#{post.siteID}/#{post.boardID}"
|
||||||
site = "#{post.siteID}/*"
|
site = "#{post.siteID}/*"
|
||||||
for key of Filter.filters when ((value = Filter.value key, post)?)
|
for key of Filter.filters
|
||||||
# Continue if there's nothing to filter (no tripcode for example).
|
for value in Filter.values(key, post)
|
||||||
for filter in Filter.filters[key]
|
for filter in Filter.filters[key]
|
||||||
continue if (
|
continue if (
|
||||||
(filter.boards and !(filter.boards[board] or filter.boards[site] )) or
|
(filter.boards and !(filter.boards[board] or filter.boards[site] )) or
|
||||||
@ -170,26 +170,31 @@ Filter =
|
|||||||
!!Filter.test(post).hide
|
!!Filter.test(post).hide
|
||||||
|
|
||||||
valueF:
|
valueF:
|
||||||
postID: (post) -> "#{post.ID}"
|
postID: (post) -> ["#{post.ID}"]
|
||||||
name: (post) -> post.info.name
|
name: (post) -> [post.info.name]
|
||||||
uniqueID: (post) -> post.info.uniqueID or ''
|
uniqueID: (post) -> [post.info.uniqueID or '']
|
||||||
tripcode: (post) -> post.info.tripcode
|
tripcode: (post) -> [post.info.tripcode]
|
||||||
capcode: (post) -> post.info.capcode
|
capcode: (post) -> [post.info.capcode]
|
||||||
pass: (post) -> post.info.pass
|
pass: (post) -> [post.info.pass]
|
||||||
email: (post) -> post.info.email
|
email: (post) -> [post.info.email]
|
||||||
subject: (post) -> post.info.subject or (if post.isReply then undefined else '')
|
subject: (post) -> [post.info.subject or (if post.isReply then undefined else '')]
|
||||||
comment: (post) -> (post.info.comment ?= g.sites[post.siteID]?.Build?.parseComment?(post.info.commentHTML.innerHTML))
|
comment: (post) -> [(post.info.comment ?= g.sites[post.siteID]?.Build?.parseComment?(post.info.commentHTML.innerHTML))]
|
||||||
flag: (post) -> post.info.flag
|
flag: (post) -> [post.info.flag]
|
||||||
filename: (post) -> post.file?.name
|
filename: (post) -> post.files.map((f) -> f.name)
|
||||||
dimensions: (post) -> post.file?.dimensions
|
dimensions: (post) -> post.files.map((f) -> f.dimensions)
|
||||||
filesize: (post) -> post.file?.size
|
filesize: (post) -> post.files.map((f) -> f.size)
|
||||||
MD5: (post) -> post.file?.MD5
|
MD5: (post) -> post.files.map((f) -> f.MD5)
|
||||||
|
|
||||||
value: (key, post) ->
|
values: (key, post) ->
|
||||||
if key of Filter.valueF
|
if key of Filter.valueF
|
||||||
Filter.valueF[key](post)
|
Filter.valueF[key](post).filter((v) -> v?)
|
||||||
else
|
else
|
||||||
key.split('+').map((k) -> Filter.valueF[k]?(post) or '').join('\n')
|
[key.split('+').map((k) ->
|
||||||
|
if (f=Filter.valueF[k])
|
||||||
|
f(post).map((v) -> v or '').join('\n')
|
||||||
|
else
|
||||||
|
''
|
||||||
|
).join('\n')]
|
||||||
|
|
||||||
addFilter: (type, re, cb) ->
|
addFilter: (type, re, cb) ->
|
||||||
$.get type, Conf[type], (item) ->
|
$.get type, Conf[type], (item) ->
|
||||||
@ -286,21 +291,22 @@ Filter =
|
|||||||
return {
|
return {
|
||||||
el: el
|
el: el
|
||||||
open: (post) ->
|
open: (post) ->
|
||||||
value = Filter.value type, post
|
Filter.values(type, post).length
|
||||||
value?
|
|
||||||
}
|
}
|
||||||
|
|
||||||
makeFilter: ->
|
makeFilter: ->
|
||||||
{type} = @dataset
|
{type} = @dataset
|
||||||
# Convert value -> regexp, unless type is MD5
|
# Convert value -> regexp, unless type is MD5
|
||||||
value = Filter.value type, Filter.menu.post
|
values = Filter.values type, Filter.menu.post
|
||||||
|
res = values.map((value) ->
|
||||||
re = if type in ['uniqueID', 'MD5'] then value else Filter.escape(value)
|
re = if type in ['uniqueID', 'MD5'] then value else Filter.escape(value)
|
||||||
re = if type in ['uniqueID', 'MD5']
|
if type in ['uniqueID', 'MD5']
|
||||||
"/#{re}/"
|
"/#{re}/"
|
||||||
else
|
else
|
||||||
"/^#{re}$/"
|
"/^#{re}$/"
|
||||||
|
).join('\n')
|
||||||
|
|
||||||
Filter.addFilter type, re, ->
|
Filter.addFilter type, res, ->
|
||||||
# Open the settings and display & focus the relevant filter textarea.
|
# Open the settings and display & focus the relevant filter textarea.
|
||||||
Settings.open 'Filter'
|
Settings.open 'Filter'
|
||||||
section = $ '.section-container'
|
section = $ '.section-container'
|
||||||
|
|||||||
@ -944,7 +944,7 @@ Index =
|
|||||||
catch
|
catch
|
||||||
return []
|
return []
|
||||||
return Index.sortedThreadIDs.filter (ID) ->
|
return Index.sortedThreadIDs.filter (ID) ->
|
||||||
regexp.test(Filter.value(match[1], Index.parsedThreads[ID]) or '')
|
regexp.test(Filter.values(match[1], Index.parsedThreads[ID]).join('\n'))
|
||||||
return if not (keywords = query.toLowerCase().match /\S+/g)
|
return if not (keywords = query.toLowerCase().match /\S+/g)
|
||||||
Index.sortedThreadIDs.filter (ID) ->
|
Index.sortedThreadIDs.filter (ID) ->
|
||||||
Index.searchMatch Index.parsedThreads[ID], keywords
|
Index.searchMatch Index.parsedThreads[ID], keywords
|
||||||
|
|||||||
@ -91,9 +91,9 @@ Test =
|
|||||||
c.log y.outerHTML
|
c.log y.outerHTML
|
||||||
|
|
||||||
for key of Config.filter when not key is 'General' and not (key is 'MD5' and post.board.ID is 'f')
|
for key of Config.filter when not key is 'General' and not (key is 'MD5' and post.board.ID is 'f')
|
||||||
val1 = Filter.value key, obj
|
val1 = Filter.values key, obj
|
||||||
val2 = Filter.value key, post2
|
val2 = Filter.values key, post2
|
||||||
if val1 isnt val2
|
unless val1.length is val2.length and val1.every((x, i) -> x is val2[i])
|
||||||
fail = true
|
fail = true
|
||||||
c.log "#{post.fullID} has filter bug in #{key}"
|
c.log "#{post.fullID} has filter bug in #{key}"
|
||||||
c.log val1
|
c.log val1
|
||||||
|
|||||||
@ -45,7 +45,7 @@ ArchiveLink =
|
|||||||
value = if type is 'country'
|
value = if type is 'country'
|
||||||
post.info.flagCode or post.info.flagCodeTroll
|
post.info.flagCode or post.info.flagCodeTroll
|
||||||
else
|
else
|
||||||
Filter.value type, post
|
Filter.values(type, post)[0]
|
||||||
# We want to parse the exact same stuff as the filter does already.
|
# We want to parse the exact same stuff as the filter does already.
|
||||||
return false unless value
|
return false unless value
|
||||||
el.href = Redirect.to 'search',
|
el.href = Redirect.to 'search',
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user