5 filter: Ember.inject.service(), |
5 filter: Ember.inject.service(), |
6 |
6 |
7 dateObserver: Ember.observer('filter.date', function() { |
7 dateObserver: Ember.observer('filter.date', function() { |
8 var self = this; |
8 var self = this; |
9 this.$('li').removeClass('highlighted'); |
9 this.$('li').removeClass('highlighted'); |
10 this.get('filter.date').forEach(function(date) { |
10 this.get('filter').get('date').forEach(function(date) { |
11 self.$('li#' + date).addClass('highlighted'); |
11 self.$('li#' + date).addClass('highlighted'); |
12 }); |
12 }); |
13 }), |
13 }), |
14 |
14 |
15 elementId: "chrono-table", |
15 elementId: "chrono-table", |
20 if (this.get('filter').get('date') !== null){ |
20 if (this.get('filter').get('date') !== null){ |
21 this.highlightQuery(this.get('filter').get('date')); |
21 this.highlightQuery(this.get('filter').get('date')); |
22 } |
22 } |
23 |
23 |
24 var isMouseDown = false, |
24 var isMouseDown = false, |
25 isHighlighted; |
25 isHighlighted, |
|
26 didHighlight, |
|
27 previousElement; |
26 |
28 |
27 Ember.$("#chrono-table li").mousedown(function () { |
29 Ember.$("#chrono-table li").mousedown(function (event) { |
28 isMouseDown = true; |
30 // Prevent right click selection. |
29 var dates = self.get('filter').get('date').toArray(); |
31 if(event.button === 0) { |
30 var index = dates.indexOf(parseInt(Ember.$(this).attr('id'))); |
32 |
31 if(index === -1) { |
33 isMouseDown = true; |
32 dates.push(parseInt(Ember.$(this).attr('id'))); |
34 var element = parseInt(Ember.$(this).attr('id')); |
33 isHighlighted = true; |
35 var elements = [element]; |
34 } else { |
36 if(event.shiftKey) { |
35 dates.splice(index, 1); |
37 while(previousElement !== element) { |
36 isHighlighted = false; |
38 elements.push(previousElement); |
|
39 if(previousElement < element) { |
|
40 previousElement = previousElement + 1; |
|
41 } else if(previousElement > element) { |
|
42 previousElement = previousElement - 1; |
|
43 } else { |
|
44 break; |
|
45 } |
|
46 } |
|
47 } |
|
48 var dates = self.get('filter').get('date').toArray(); |
|
49 var index = dates.indexOf(element); |
|
50 if((!event.shiftKey && index === -1) || (event.shiftKey && didHighlight)) { |
|
51 dates = dates.concat(elements); |
|
52 isHighlighted = true; |
|
53 } else { |
|
54 elements.forEach(function(el) { |
|
55 var id = dates.indexOf(el); |
|
56 if((!event.shiftKey && index !== -1) || (event.shiftKey && id !== -1)) { |
|
57 dates.splice(id, 1); |
|
58 } |
|
59 }); |
|
60 isHighlighted = false; |
|
61 } |
|
62 // Ascending sorting. |
|
63 dates.sort(function(a, b) { return a - b; }); |
|
64 self.get('filter').set('date', dates); |
|
65 didHighlight = isHighlighted; |
|
66 previousElement = element; |
|
67 // Prevent text selection. |
|
68 return false; |
37 } |
69 } |
38 self.get('filter').set('date', dates); |
|
39 return false; // prevent text selection |
|
40 }).mouseover(function () { |
70 }).mouseover(function () { |
41 if (isMouseDown) { |
71 if (isMouseDown) { |
|
72 var element = parseInt(Ember.$(this).attr('id')); |
42 if(Ember.$(this).hasClass("highlighted") !== isHighlighted) { |
73 if(Ember.$(this).hasClass("highlighted") !== isHighlighted) { |
43 var dates = self.get('filter').get('date').toArray(); |
74 var dates = self.get('filter').get('date').toArray(); |
44 var index = dates.indexOf(parseInt(Ember.$(this).attr('id'))); |
75 var index = dates.indexOf(element); |
45 if(index === -1) { |
76 if(index === -1) { |
46 dates.push(parseInt(Ember.$(this).attr('id'))); |
77 dates.push(element); |
47 } else { |
78 } else { |
48 dates.splice(index, 1); |
79 dates.splice(index, 1); |
49 } |
80 } |
50 self.get('filter').set('date', dates); |
81 self.get('filter').set('date', dates); |
51 } |
82 } |
|
83 previousElement = element; |
52 } |
84 } |
53 }).bind("selectstart", function () { |
85 }).bind("selectstart", function () { |
54 return false; |
86 return false; |
55 }); |
87 }); |
56 |
88 |