cms/app-client/app/components/visu-chrono.js
author Chloe Laisne <chloe.laisne@gmail.com>
Sun, 17 Jul 2016 22:17:24 +0200
changeset 242 523ca6e73353
parent 234 c928f6190771
child 392 4fbe94af93e8
permissions -rw-r--r--
Add video player Hide/show video player from toolbar
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
48
9ef0952033e0 add example of visualisation for "chonologie"
nowmad@nowmads-macbook-pro.local
parents:
diff changeset
     1
import Ember from 'ember';
9ef0952033e0 add example of visualisation for "chonologie"
nowmad@nowmads-macbook-pro.local
parents:
diff changeset
     2
197
7b266ccf6d3d Setup filter service
Chloe Laisne <chloe.laisne@gmail.com>
parents: 195
diff changeset
     3
export default Ember.Component.extend({
120
e5e15547ffb1 correct deprecation warning
ymh <ymh.work@gmail.com>
parents: 98
diff changeset
     4
197
7b266ccf6d3d Setup filter service
Chloe Laisne <chloe.laisne@gmail.com>
parents: 195
diff changeset
     5
    filter: Ember.inject.service(),
189
21b30ee23191 /langue endpoint: 1. Date interval 2. Delete date
Chloe Laisne <chloe.laisne@gmail.com>
parents: 120
diff changeset
     6
202
0446e07981db Add interval to filter component
Chloe Laisne <chloe.laisne@gmail.com>
parents: 197
diff changeset
     7
    dateObserver: Ember.observer('filter.date', function() {
0446e07981db Add interval to filter component
Chloe Laisne <chloe.laisne@gmail.com>
parents: 197
diff changeset
     8
        var self = this;
0446e07981db Add interval to filter component
Chloe Laisne <chloe.laisne@gmail.com>
parents: 197
diff changeset
     9
        this.$('li').removeClass('highlighted');
233
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    10
        this.get('filter').get('date').forEach(function(date) {
202
0446e07981db Add interval to filter component
Chloe Laisne <chloe.laisne@gmail.com>
parents: 197
diff changeset
    11
            self.$('li#' + date).addClass('highlighted');
0446e07981db Add interval to filter component
Chloe Laisne <chloe.laisne@gmail.com>
parents: 197
diff changeset
    12
        });
0446e07981db Add interval to filter component
Chloe Laisne <chloe.laisne@gmail.com>
parents: 197
diff changeset
    13
    }),
0446e07981db Add interval to filter component
Chloe Laisne <chloe.laisne@gmail.com>
parents: 197
diff changeset
    14
195
9d083636bd99 Layout and style of the /chronologie endpoint
Chloe Laisne <chloe.laisne@gmail.com>
parents: 189
diff changeset
    15
    elementId: "chrono-table",
9d083636bd99 Layout and style of the /chronologie endpoint
Chloe Laisne <chloe.laisne@gmail.com>
parents: 189
diff changeset
    16
189
21b30ee23191 /langue endpoint: 1. Date interval 2. Delete date
Chloe Laisne <chloe.laisne@gmail.com>
parents: 120
diff changeset
    17
    didInsertElement: function(){
21b30ee23191 /langue endpoint: 1. Date interval 2. Delete date
Chloe Laisne <chloe.laisne@gmail.com>
parents: 120
diff changeset
    18
        var self = this;
21b30ee23191 /langue endpoint: 1. Date interval 2. Delete date
Chloe Laisne <chloe.laisne@gmail.com>
parents: 120
diff changeset
    19
197
7b266ccf6d3d Setup filter service
Chloe Laisne <chloe.laisne@gmail.com>
parents: 195
diff changeset
    20
        if (this.get('filter').get('date') !== null){
7b266ccf6d3d Setup filter service
Chloe Laisne <chloe.laisne@gmail.com>
parents: 195
diff changeset
    21
            this.highlightQuery(this.get('filter').get('date'));
189
21b30ee23191 /langue endpoint: 1. Date interval 2. Delete date
Chloe Laisne <chloe.laisne@gmail.com>
parents: 120
diff changeset
    22
        }
21b30ee23191 /langue endpoint: 1. Date interval 2. Delete date
Chloe Laisne <chloe.laisne@gmail.com>
parents: 120
diff changeset
    23
21b30ee23191 /langue endpoint: 1. Date interval 2. Delete date
Chloe Laisne <chloe.laisne@gmail.com>
parents: 120
diff changeset
    24
        var isMouseDown = false,
233
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    25
            isHighlighted,
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    26
            didHighlight,
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    27
            previousElement;
77
0889740f79c2 on page load, hilight the objects corresponding to the query params
nowmad@23.1.168.192.in-addr.arpa
parents: 72
diff changeset
    28
233
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    29
        Ember.$("#chrono-table li").mousedown(function (event) {
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    30
            // Prevent right click selection.
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    31
            if(event.button === 0) {
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    32
                
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    33
                isMouseDown = true;
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    34
                var element = parseInt(Ember.$(this).attr('id'));
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    35
                var elements = [element];
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    36
                if(event.shiftKey) {
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    37
                    while(previousElement !== element) {
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    38
                        elements.push(previousElement);
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    39
                        if(previousElement < element) {
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    40
                            previousElement = previousElement + 1;
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    41
                        } else if(previousElement > element) {
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    42
                            previousElement = previousElement - 1;
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    43
                        } else {
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    44
                            break;
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    45
                        }
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    46
                    }    
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    47
                }
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    48
                var dates = self.get('filter').get('date').toArray();
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    49
                var index = dates.indexOf(element);
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    50
                if((!event.shiftKey && index === -1) || (event.shiftKey && didHighlight)) {
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    51
                    dates = dates.concat(elements);
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    52
                    isHighlighted = true;
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    53
                } else {
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    54
                    elements.forEach(function(el) {
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    55
                        var id = dates.indexOf(el);
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    56
                        if((!event.shiftKey && index !== -1) || (event.shiftKey && id !== -1)) {
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    57
                            dates.splice(id, 1);    
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    58
                        }
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    59
                    });
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    60
                    isHighlighted = false;
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    61
                }
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    62
                // Ascending sorting.
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    63
                dates.sort(function(a, b) { return a - b; });
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    64
                self.get('filter').set('date', dates);
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    65
                didHighlight = isHighlighted;
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    66
                previousElement = element;
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    67
                // Prevent text selection.
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    68
                return false;
197
7b266ccf6d3d Setup filter service
Chloe Laisne <chloe.laisne@gmail.com>
parents: 195
diff changeset
    69
            }
189
21b30ee23191 /langue endpoint: 1. Date interval 2. Delete date
Chloe Laisne <chloe.laisne@gmail.com>
parents: 120
diff changeset
    70
        }).mouseover(function () {
21b30ee23191 /langue endpoint: 1. Date interval 2. Delete date
Chloe Laisne <chloe.laisne@gmail.com>
parents: 120
diff changeset
    71
            if (isMouseDown) {
233
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    72
                var element = parseInt(Ember.$(this).attr('id'));
197
7b266ccf6d3d Setup filter service
Chloe Laisne <chloe.laisne@gmail.com>
parents: 195
diff changeset
    73
                if(Ember.$(this).hasClass("highlighted") !== isHighlighted) {
7b266ccf6d3d Setup filter service
Chloe Laisne <chloe.laisne@gmail.com>
parents: 195
diff changeset
    74
                    var dates = self.get('filter').get('date').toArray();
233
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    75
                    var index = dates.indexOf(element);
197
7b266ccf6d3d Setup filter service
Chloe Laisne <chloe.laisne@gmail.com>
parents: 195
diff changeset
    76
                    if(index === -1) {
233
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    77
                        dates.push(element);
197
7b266ccf6d3d Setup filter service
Chloe Laisne <chloe.laisne@gmail.com>
parents: 195
diff changeset
    78
                    } else {
7b266ccf6d3d Setup filter service
Chloe Laisne <chloe.laisne@gmail.com>
parents: 195
diff changeset
    79
                        dates.splice(index, 1);
7b266ccf6d3d Setup filter service
Chloe Laisne <chloe.laisne@gmail.com>
parents: 195
diff changeset
    80
                    }
7b266ccf6d3d Setup filter service
Chloe Laisne <chloe.laisne@gmail.com>
parents: 195
diff changeset
    81
                    self.get('filter').set('date', dates);
7b266ccf6d3d Setup filter service
Chloe Laisne <chloe.laisne@gmail.com>
parents: 195
diff changeset
    82
                }
233
0ff47a9c5da2 Keyboard events on chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 202
diff changeset
    83
                previousElement = element;
189
21b30ee23191 /langue endpoint: 1. Date interval 2. Delete date
Chloe Laisne <chloe.laisne@gmail.com>
parents: 120
diff changeset
    84
            }
21b30ee23191 /langue endpoint: 1. Date interval 2. Delete date
Chloe Laisne <chloe.laisne@gmail.com>
parents: 120
diff changeset
    85
        }).bind("selectstart", function () {
21b30ee23191 /langue endpoint: 1. Date interval 2. Delete date
Chloe Laisne <chloe.laisne@gmail.com>
parents: 120
diff changeset
    86
            return false;
21b30ee23191 /langue endpoint: 1. Date interval 2. Delete date
Chloe Laisne <chloe.laisne@gmail.com>
parents: 120
diff changeset
    87
        });
21b30ee23191 /langue endpoint: 1. Date interval 2. Delete date
Chloe Laisne <chloe.laisne@gmail.com>
parents: 120
diff changeset
    88
21b30ee23191 /langue endpoint: 1. Date interval 2. Delete date
Chloe Laisne <chloe.laisne@gmail.com>
parents: 120
diff changeset
    89
        Ember.$(document).mouseup(function () {
21b30ee23191 /langue endpoint: 1. Date interval 2. Delete date
Chloe Laisne <chloe.laisne@gmail.com>
parents: 120
diff changeset
    90
            isMouseDown = false;
21b30ee23191 /langue endpoint: 1. Date interval 2. Delete date
Chloe Laisne <chloe.laisne@gmail.com>
parents: 120
diff changeset
    91
        });
21b30ee23191 /langue endpoint: 1. Date interval 2. Delete date
Chloe Laisne <chloe.laisne@gmail.com>
parents: 120
diff changeset
    92
    },
21b30ee23191 /langue endpoint: 1. Date interval 2. Delete date
Chloe Laisne <chloe.laisne@gmail.com>
parents: 120
diff changeset
    93
197
7b266ccf6d3d Setup filter service
Chloe Laisne <chloe.laisne@gmail.com>
parents: 195
diff changeset
    94
    highlightQuery: function(dates){
7b266ccf6d3d Setup filter service
Chloe Laisne <chloe.laisne@gmail.com>
parents: 195
diff changeset
    95
        dates.map(function(date){
7b266ccf6d3d Setup filter service
Chloe Laisne <chloe.laisne@gmail.com>
parents: 195
diff changeset
    96
            Ember.$("#" + date).toggleClass("highlighted", true);
189
21b30ee23191 /langue endpoint: 1. Date interval 2. Delete date
Chloe Laisne <chloe.laisne@gmail.com>
parents: 120
diff changeset
    97
        });
234
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
    98
    },
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
    99
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
   100
    actions : {
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
   101
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
   102
        selectDecade: function(decade) {
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
   103
            var array = [];
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
   104
            var next = decade + 10;
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
   105
            var dates = this.get('filter').get('date');
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
   106
            while(decade < next) {
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
   107
                array.push(decade);
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
   108
                decade ++;
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
   109
            }
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
   110
            if(array.find(function(date){ return dates.indexOf(date) === -1; })) {
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
   111
                array = array.filter(function(value) {
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
   112
                    return dates.indexOf(value) === -1;
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
   113
                });
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
   114
                array = dates.concat(array);
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
   115
                // Ascending sorting.
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
   116
                array.sort(function(a, b) { return a - b; });
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
   117
            } else {
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
   118
                array = dates.filter(function(value) {
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
   119
                    return array.indexOf(value) === -1;
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
   120
                });
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
   121
            }
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
   122
            this.get('filter').set('date', array);
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
   123
        }
c928f6190771 Select row in chronology
Chloe Laisne <chloe.laisne@gmail.com>
parents: 233
diff changeset
   124
77
0889740f79c2 on page load, hilight the objects corresponding to the query params
nowmad@23.1.168.192.in-addr.arpa
parents: 72
diff changeset
   125
    }
0889740f79c2 on page load, hilight the objects corresponding to the query params
nowmad@23.1.168.192.in-addr.arpa
parents: 72
diff changeset
   126
48
9ef0952033e0 add example of visualisation for "chonologie"
nowmad@nowmads-macbook-pro.local
parents:
diff changeset
   127
});