-
Notifications
You must be signed in to change notification settings - Fork 265
/
filterView.js
66 lines (63 loc) · 1.98 KB
/
filterView.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
define(["../../common/events/postal"], function(postal) {
jQuery.Color.fn.contrastColor = function() {
var r = this._rgba[0], g = this._rgba[1], b = this._rgba[2];
return (((r*299)+(g*587)+(b*144))/1000) >= 131.5 ? "#333" : "white";
};
return Backbone.View.extend({
tagName: "li",
className: "filter",
initialize: function(params) {
this.params = params;
this.condition = params.condition;
this.name = params.name;
this.type = params.type || "Simple";
this.state = 0;
this.states = [0,1,2,0];
},
events: {
"click" : "clicked",
"clear" : "clearAndPublish",
"click .iconic" : "clearAndPublish"
},
render: function() {
$(this.el)
.html("<a href='#'>"+ this.name + "<span class='iconic x-alt'></span></a>").addClass("-x" + this.params.color.substring(1) )
.data("filter",this);
return this;
},
clicked : function(ev) {
ev.preventDefault();
switch(this.state = this.states[this.state + 1]) {
case 0:
this.clear();
break;
case 1:
this.fade();
break;
case 2:
this.solid();
break;
}
this.publish();
},
clear: function(){
$(this.el).find("a").removeClass("dim").removeClass("active");
},
publish : function() {
postal.publish("Filter." + this.type, { id: this.cid, condition: this.condition, state:this.state});
},
clearAndPublish: function(ev) {
ev.preventDefault();
this.state = 0;
this.publish();
this.clear();
return false;
},
fade: function(){
$(this.el).find("a").addClass("dim").removeClass("active");
},
solid: function(){
$(this.el).find("a").addClass("active").removeClass("dim");
}
});
});