Skip to content

Commit 2469643

Browse files
committed
Removed old filter system and add version to output file
1 parent 3d3d0cd commit 2469643

4 files changed

Lines changed: 110 additions & 226 deletions

File tree

Gruntfile.coffee

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@ module.exports = (grunt) ->
33
pattern: ['grunt-*', '!grunt-template-jasmine-istanbul']
44
}
55
# Read package.json to make sure it's there
6-
grunt.file.readJSON('package.json')
6+
pkg = grunt.file.readJSON('package.json')
77

88
# !! Compile configurations
9-
LICENSE = '/*!Copyright(c) CommentCoreLibrary (//github.com/jabbany/CommentCoreLibrary) - Licensed under the MIT License */'
9+
LICENSE = '/*!Copyright(c) CommentCoreLibrary v' + pkg.version +
10+
' (//github.com/jabbany/CommentCoreLibrary) - Licensed under the MIT License */'
1011
# !! End of config area
1112

1213
CSS = [
@@ -24,7 +25,7 @@ module.exports = (grunt) ->
2425
]
2526

2627
SRC_MODULES =
27-
'filter': ['src/filter/SimpleFilter.js']
28+
'filter': ['src/filter/CommentFilter.js']
2829
'provider': ['src/CommentProvider.js', 'src/Promises.js']
2930
'format-bilibili': ['src/parsers/BilibiliFormat.js']
3031
'format-acfun': ['src/parsers/AcfunFormat.js']

dist/CommentCoreLibrary.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/filter/CommentFilter.js

Lines changed: 105 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -1,117 +1,109 @@
11
/**
2-
* Comment Filters Module
2+
* Comment Filters Module Simplified
33
* @license MIT
44
* @author Jim Chen
55
*/
6-
function CommentFilter(){
7-
this.rulebook = {"all":[]};
8-
this.modifiers = [];
9-
this.runtime = null;
10-
this.allowTypes = {
11-
"1":true,
12-
"4":true,
13-
"5":true,
14-
"6":true,
15-
"7":true,
16-
"8":true,
17-
"17":true
18-
};
19-
this.doModify = function(cmt){
20-
for(var k=0;k<this.modifiers.length;k++){
21-
cmt = this.modifiers[k](cmt);
22-
}
23-
return cmt;
24-
};
25-
this.isMatchRule = function(cmtData,rule){
26-
switch(rule['operator']){
27-
case '==':if(cmtData[rule['subject']] == rule['value']){return false;};break;
28-
case '>':if(cmtData[rule['subject']] > rule['value']){return false;};break;
29-
case '<':if(cmtData[rule['subject']] < rule['value']){return false;};break;
30-
case 'range':if(cmtData[rule['subject']] > rule.value.min && cmtData[rule['subject']] < rule.value.max){return false;};break;
31-
case '!=':if(cmtData[rule['subject']] != rule.value){return false;}break;
32-
case '~':if(new RegExp(rule.value).test(cmtData[rule[subject]])){return false;}break;
33-
case '!~':if(!(new RegExp(rule.value).test(cmtData[rule[subject]]))){return false;}break;
34-
}
35-
return true;
36-
};
37-
this.beforeSend = function(cmt){
38-
//Check with the rules upon size
39-
var cmtMode = cmt.data.mode;
40-
if(this.rulebook[cmtMode]!=null){
41-
for(var i=0;i<this.rulebook[cmtMode].length;i++){
42-
if(this.rulebook[cmtMode][i].subject == 'width' || this.rulebook[cmtMode][i].subject == 'height'){
43-
if(this.rulebook[cmtMode][i].subject == 'width'){
44-
switch(this.rulebook[cmtMode][i].operator){
45-
case '>':if(this.rulebook[cmtMode][i].value < cmt.offsetWidth)return false;break;
46-
case '<':if(this.rulebook[cmtMode][i].value > cmt.offsetWidth)return false;break;
47-
case 'range':if(this.rulebook[cmtMode][i].value.max > cmt.offsetWidth && this.rulebook[cmtMode][i].min < cmt.offsetWidth)return false;break;
48-
case '==':if(this.rulebook[cmtMode][i].value == cmt.offsetWidth)return false;break;
49-
default:break;
50-
}
51-
}else{
52-
switch(this.rulebook[cmtMode][i].operator){
53-
case '>':if(this.rulebook[cmtMode][i].value < cmt.offsetHeight)return false;break;
54-
case '<':if(this.rulebook[cmtMode][i].value > cmt.offsetHeight)return false;break;
55-
case 'range':if(this.rulebook[cmtMode][i].value.max > cmt.offsetHeight && this.rulebook[cmtMode][i].min < cmt.offsetHeight)return false;break;
56-
case '==':if(this.rulebook[cmtMode][i].value == cmt.offsetHeight)return false;break;
57-
default:break;
58-
}
59-
}
60-
}
61-
}
62-
return true;
63-
}else{return true;}
64-
}
65-
this.doValidate = function(cmtData){
66-
if(!this.allowTypes[cmtData.mode])
67-
return false;
68-
/** Create abstract cmt data **/
69-
var abstCmtData = {
70-
text:cmtData.text,
71-
mode:cmtData.mode,
72-
color:cmtData.color,
73-
size:cmtData.size,
74-
stime:cmtData.stime,
75-
hash:cmtData.hash,
76-
};
77-
if(this.rulebook[cmtData.mode] != null && this.rulebook[cmtData.mode].length > 0){
78-
for(var i=0;i<this.rulebook[cmtData.mode];i++){
79-
if(!this.isMatchRule(abstCmtData,this.rulebook[cmtData.mode][i]))
80-
return false;
81-
}
82-
}
83-
for(var i=0;i<this.rulebook[cmtData.mode];i++){
84-
if(!this.isMatchRule(abstCmtData,this.rulebook[cmtData.mode][i]))
85-
return false;
86-
}
87-
return true;
88-
};
89-
this.addRule = function(rule){
90-
if(this.rulebook[rule.mode + ""] == null)
91-
this.rulebook[rule.mode + ""] = [];
92-
/** Normalize Operators **/
93-
switch(rule.operator){
94-
case 'eq':
95-
case 'equals':
96-
case '=':rule.operator='==';break;
97-
case 'ineq':rule.operator='!=';break;
98-
case 'regex':
99-
case 'matches':rule.operator='~';break;
100-
case 'notmatch':
101-
case 'iregex':rule.operator='!~';break;
102-
}
103-
this.rulebook[rule.mode].push(rule);
104-
return (this.rulebook[rule.mode].length - 1);
105-
};
106-
this.addModifier = function(f){
107-
this.modifiers.push(f);
108-
};
109-
this.runtimeFilter = function(cmt){
110-
if(this.runtime == null)
111-
return cmt;
112-
return this.runtime(cmt);
113-
};
114-
this.setRuntimeFilter = function(f){
115-
this.runtime = f;
116-
}
117-
}
6+
var CommentFilter = (function () {
7+
8+
function _match (rule, cmtData) {
9+
var path = rule.subject.split('.');
10+
var extracted = cmtData;
11+
while (path.length > 0) {
12+
var item = path.shift();
13+
if (item === '') {
14+
continue;
15+
}
16+
if (extracted.hasOwnProperty(item)) {
17+
extracted = extracted[item];
18+
}
19+
if (extracted === null || typeof extracted === 'undefined') {
20+
extracted = null;
21+
break;
22+
}
23+
}
24+
if (extracted === null) {
25+
// Null precondition implies anything
26+
return true;
27+
}
28+
switch (rule.op) {
29+
case '~':
30+
case 'regexp':
31+
return (new RegExp(rule.value)).test(extracted.toString());
32+
case '=':
33+
case 'eq':
34+
return rule.value === extracted.toString();
35+
case 'NOT':
36+
return !_match(rule.value, cmtData);
37+
case 'AND':
38+
if (Array.isArray(rule.value)) {
39+
return rule.value.every(function (r) {
40+
return _match(r, cmtData);
41+
});
42+
} else {
43+
return false;
44+
}
45+
case 'OR':
46+
if (Array.isArray(rule.value)) {
47+
return rule.value.some(function (r) {
48+
return _match(r, cmtData);
49+
});
50+
} else {
51+
return false;
52+
}
53+
default:
54+
return false;
55+
}
56+
}
57+
58+
function CommentFilter() {
59+
this.rules = [];
60+
this.modifiers = [];
61+
this.allowUnknownTypes = true;
62+
this.allowTypes = {
63+
'1': true,
64+
'2': true,
65+
'4': true,
66+
'5': true,
67+
'6': true,
68+
'7': true,
69+
'8': true,
70+
'17': true
71+
};
72+
}
73+
74+
CommentFilter.prototype.doModify = function (cmt) {
75+
for (var k=0; k < this.modifiers.length; k++) {
76+
cmt = this.modifiers[k](cmt);
77+
}
78+
return cmt;
79+
};
80+
81+
CommentFilter.prototype.beforeSend = function (cmt) {
82+
return cmt;
83+
}
84+
85+
CommentFilter.prototype.doValidate = function (cmtData) {
86+
if (cmtData.mode.toString() in this.allowTypes &&
87+
!this.allowTypes[cmtData.mode.toString()]) {
88+
return false;
89+
}
90+
return this.rules.every(function (rule) {
91+
// Decide if matched
92+
var matched = _match(rule, cmtData);
93+
return rule.mode === 'accept' ? matched : !matched;
94+
});
95+
};
96+
97+
CommentFilter.prototype.addRule = function (rule) {
98+
if (rule.mode !== 'accept' && rule.mode !== 'reject') {
99+
throw new Error('Rule must be of accept type or reject type.');
100+
}
101+
this.rules.push(rule);
102+
};
103+
104+
CommentFilter.prototype.addModifier = function (f) {
105+
this.modifiers.push(f);
106+
};
107+
108+
return CommentFilter;
109+
})();

src/filter/SimpleFilter.js

Lines changed: 0 additions & 109 deletions
This file was deleted.

0 commit comments

Comments
 (0)