diff --git a/app/assets/javascripts/blacklists.js b/app/assets/javascripts/blacklists.js index fa44618f7..1b919bb33 100644 --- a/app/assets/javascripts/blacklists.js +++ b/app/assets/javascripts/blacklists.js @@ -100,7 +100,7 @@ if (blacklist.require.length > 0 || blacklist.exclude.length > 0) { if (blacklist.require.length === 0 || Danbooru.is_subset(tags, blacklist.require)) { - if (blacklist.exclude.length === 0 || (!Danbooru.is_subset(tags, blacklist.exclude))) { + if (blacklist.exclude.length === 0 || (!Danbooru.intersect(tags, blacklist.exclude).length)) { return true; } } diff --git a/app/assets/javascripts/utility.js b/app/assets/javascripts/utility.js index a32b48a89..873cd8fd2 100644 --- a/app/assets/javascripts/utility.js +++ b/app/assets/javascripts/utility.js @@ -23,6 +23,26 @@ return all; } + Danbooru.intersect = function(a, b) { + a = a.slice(0).sort(); + b = b.slice(0).sort(); + var result = []; + while (a.length > 0 && b.length > 0) + { + if (a[0] < b[0]) { + a.shift(); + } + else if (a[0] > b[0]) { + b.shift(); + } + else { + result.push(a.shift()); + b.shift(); + } + } + return result; + } + Danbooru.without = function(array, element) { var temp = []; $.each(array, function(i, v) {