cms/app-client/app/components/visu-chrono.js
changeset 233 0ff47a9c5da2
parent 202 0446e07981db
child 234 c928f6190771
equal deleted inserted replaced
232:d5fb6baacbd0 233:0ff47a9c5da2
     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