cms/app-client/app/components/visu-langues.js
author ymh <ymh.work@gmail.com>
Tue, 15 Nov 2016 17:42:57 +0100
changeset 424 feb0d3e0fef9
parent 394 48458e099b05
child 467 762fc0eb4946
permissions -rw-r--r--
add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
39
c693e8673d5b add visu-langue with google treemap
nowmad@23.1.168.192.in-addr.arpa
parents:
diff changeset
     1
import Ember from 'ember';
123
4c97e9da1416 Remove use of global variables + remove ember-cli-content-security-policy from package.json to avoid bogus csp violation warnings
ymh <ymh.work@gmail.com>
parents: 95
diff changeset
     2
import d3 from 'd3';
126
e87a340711a4 improve on dataloading. add fixture management with proper interface to load data.
ymh <ymh.work@gmail.com>
parents: 123
diff changeset
     3
import ENV from 'app-client/config/environment';
e87a340711a4 improve on dataloading. add fixture management with proper interface to load data.
ymh <ymh.work@gmail.com>
parents: 123
diff changeset
     4
import _ from 'lodash/lodash';
394
48458e099b05 make dynamic filters for all route and do some code pruning and cleaning
ymh <ymh.work@gmail.com>
parents: 393
diff changeset
     5
import URI from 'urijs';
39
c693e8673d5b add visu-langue with google treemap
nowmad@23.1.168.192.in-addr.arpa
parents:
diff changeset
     6
c693e8673d5b add visu-langue with google treemap
nowmad@23.1.168.192.in-addr.arpa
parents:
diff changeset
     7
export default Ember.Component.extend({
188
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
     8
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
     9
    constants: Ember.inject.service(),
198
541e26eb356f Display filter IDs
Chloe Laisne <chloe.laisne@gmail.com>
parents: 188
diff changeset
    10
    filter: Ember.inject.service(),
393
5ef3bfef0bff add colors to visu chrono
ymh <ymh.work@gmail.com>
parents: 392
diff changeset
    11
    colors: Ember.inject.service(),
188
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
    12
424
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 394
diff changeset
    13
    scale: Ember.computed('maxCount', 'minCount', function() {
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 394
diff changeset
    14
      let maxCount = this.get('maxCount');
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 394
diff changeset
    15
      let minCount = this.get('minCount');
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 394
diff changeset
    16
      return this.get('colors').getScaleLinear(minCount, maxCount);
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 394
diff changeset
    17
    }),
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 394
diff changeset
    18
    maxCount: 0,
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 394
diff changeset
    19
    minCount: 0,
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 394
diff changeset
    20
295
e1f154f20f96 Add selected state to treemap
Chloe Laisne <chloe.laisne@gmail.com>
parents: 294
diff changeset
    21
    filterObserver: Ember.observer('filter.language', function() {
e1f154f20f96 Add selected state to treemap
Chloe Laisne <chloe.laisne@gmail.com>
parents: 294
diff changeset
    22
        Ember.$('.node').removeClass("selected");
e1f154f20f96 Add selected state to treemap
Chloe Laisne <chloe.laisne@gmail.com>
parents: 294
diff changeset
    23
        Ember.$('.node[data-id="' + this.get('filter').get('language') + '"]').addClass("selected");
e1f154f20f96 Add selected state to treemap
Chloe Laisne <chloe.laisne@gmail.com>
parents: 294
diff changeset
    24
    }),
e1f154f20f96 Add selected state to treemap
Chloe Laisne <chloe.laisne@gmail.com>
parents: 294
diff changeset
    25
188
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
    26
    didInsertElement: function(){
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
    27
        var self = this;
319
78990a8a069b Work on front and back integration, correct the expected data format
ymh <ymh.work@gmail.com>
parents: 318
diff changeset
    28
        var baseurl = (ENV.APP.backRootURL || ENV.rootURL).replace(/\/$/,"")+'/api/v1';
394
48458e099b05 make dynamic filters for all route and do some code pruning and cleaning
ymh <ymh.work@gmail.com>
parents: 393
diff changeset
    29
        var url = URI(baseurl+"/stats/languages").search(this.get('filter').get('queryParamsValuesURI'));
84
36f84e8f1ad5 add d3js for langue visu
nowmad@nowmads-macbook-pro.local
parents: 57
diff changeset
    30
394
48458e099b05 make dynamic filters for all route and do some code pruning and cleaning
ymh <ymh.work@gmail.com>
parents: 393
diff changeset
    31
        d3.json(url.href(), function(data) {
286
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    32
            var margin = { top: 30, right: 0, bottom: 0, left: 0 };
306
3fccf43160a7 Some more changes linked to the change of api organization + some jshint error cleaning
ymh <ymh.work@gmail.com>
parents: 305
diff changeset
    33
            var width = Ember.$('#' + self.get('elementId')).width();
3fccf43160a7 Some more changes linked to the change of api organization + some jshint error cleaning
ymh <ymh.work@gmail.com>
parents: 305
diff changeset
    34
            var height = Ember.$('#' + self.get('elementId')).height() - margin.top - margin.bottom;
84
36f84e8f1ad5 add d3js for langue visu
nowmad@nowmads-macbook-pro.local
parents: 57
diff changeset
    35
319
78990a8a069b Work on front and back integration, correct the expected data format
ymh <ymh.work@gmail.com>
parents: 318
diff changeset
    36
            var languages = data['languages'];
286
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    37
            var array = Object.keys(languages).map(function (key) { return languages[key]; });
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    38
            var oldMin = Math.min(...array),
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    39
                oldMax = Math.max(...array);
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    40
            var sum = array.reduce(function(a, b) { return a + b; });
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    41
            var average = sum / array.length;
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    42
            var newMin = Math.floor((average - oldMin)),
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    43
                newMax = Math.floor((oldMax - average));
305
ff6cf3fc5f40 api reorganisation and propagation if the changes + some code cleaning
ymh <ymh.work@gmail.com>
parents: 295
diff changeset
    44
84
36f84e8f1ad5 add d3js for langue visu
nowmad@nowmads-macbook-pro.local
parents: 57
diff changeset
    45
286
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    46
            var x = d3.scale.linear()
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    47
                .domain([0, width])
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    48
                .range([0, width]),
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    49
                y = d3.scale.linear()
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    50
                .domain([0, height])
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    51
                .range([0, height]);
84
36f84e8f1ad5 add d3js for langue visu
nowmad@nowmads-macbook-pro.local
parents: 57
diff changeset
    52
286
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    53
            var treemap = d3.layout.treemap()
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    54
                .children(function(d, depth) { return depth ? null : d._children; })
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    55
                .sort(function(a, b) { return a.value - b.value; })
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    56
                .value(function(d){
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    57
                    return Math.floor((((d.value - oldMin) * (newMax - newMin)) / (oldMax - oldMin)) + newMin);
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    58
                })
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    59
                .round(false);
84
36f84e8f1ad5 add d3js for langue visu
nowmad@nowmads-macbook-pro.local
parents: 57
diff changeset
    60
286
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    61
            var element = d3.select('#' + self.get('elementId'))
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    62
                .style("width", width + margin.left + margin.right + 'px')
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    63
                .style("height", height + margin.bottom + margin.top + 'px')
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    64
                .style("margin-left", -margin.left + "px")
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    65
                .style("margin-right", -margin.right + "px")
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    66
                .attr("transform", "translate(" + margin.left + "," + margin.top + ")")
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    67
                .style("shape-rendering", "crispEdges");
84
36f84e8f1ad5 add d3js for langue visu
nowmad@nowmads-macbook-pro.local
parents: 57
diff changeset
    68
286
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    69
            var breadcrumbs = element.insert("div", ":first-child")
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    70
                .attr("class", "breadcrumbs")
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    71
                .attr("y", -margin.top)
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    72
                .style("width", width + 'px')
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    73
                .style("height", margin.top + 'px');
126
e87a340711a4 improve on dataloading. add fixture management with proper interface to load data.
ymh <ymh.work@gmail.com>
parents: 123
diff changeset
    74
188
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
    75
            var root = _.cloneDeep(self.constants.LANGUAGES_TREEMAP);
286
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    76
            root.x = root.y = 0;
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    77
            root.dx = width;
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    78
            root.dy = height;
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    79
            root.depth = 0;
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    80
            var transitioning = false;
126
e87a340711a4 improve on dataloading. add fixture management with proper interface to load data.
ymh <ymh.work@gmail.com>
parents: 123
diff changeset
    81
188
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
    82
            accumulate(root);
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
    83
            layout(root);
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
    84
            display(root);
84
36f84e8f1ad5 add d3js for langue visu
nowmad@nowmads-macbook-pro.local
parents: 57
diff changeset
    85
188
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
    86
            function accumulate(d) {
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
    87
                d._children = d.children;
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
    88
                if(d.children) {
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
    89
                    d.value = d.children.reduce(function(p, v) { return p + accumulate(v); }, 0);
329
0a2c2ad49d75 Improvce language visualization. Generalize language node selection, change language query parameters, add resolution of node name (corpus-) to lexvo controler
ymh <ymh.work@gmail.com>
parents: 319
diff changeset
    90
                } else if (d.values) {
0a2c2ad49d75 Improvce language visualization. Generalize language node selection, change language query parameters, add resolution of node name (corpus-) to lexvo controler
ymh <ymh.work@gmail.com>
parents: 319
diff changeset
    91
                    d.value = d.values.reduce(function(p, v) { return p + (languages[v] ? languages[v] : 0); }, 0);
188
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
    92
                } else {
286
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
    93
                    d.value = languages[d.id] ? languages[d.id] : 0;
188
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
    94
                }
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
    95
                return d.value;
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
    96
            }
84
36f84e8f1ad5 add d3js for langue visu
nowmad@nowmads-macbook-pro.local
parents: 57
diff changeset
    97
188
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
    98
            function layout(d) {
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
    99
                if (d._children) {
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   100
                    treemap.nodes({_children: d._children});
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   101
                    d._children.forEach(function(c) {
286
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   102
                        function getCount(node, count = 0) {
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   103
                            var c = languages[node.id];
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   104
                            if(typeof c === 'undefined') {
329
0a2c2ad49d75 Improvce language visualization. Generalize language node selection, change language query parameters, add resolution of node name (corpus-) to lexvo controler
ymh <ymh.work@gmail.com>
parents: 319
diff changeset
   105
                              if(node._children) {
0a2c2ad49d75 Improvce language visualization. Generalize language node selection, change language query parameters, add resolution of node name (corpus-) to lexvo controler
ymh <ymh.work@gmail.com>
parents: 319
diff changeset
   106
                                  node._children.forEach(function(child) {
0a2c2ad49d75 Improvce language visualization. Generalize language node selection, change language query parameters, add resolution of node name (corpus-) to lexvo controler
ymh <ymh.work@gmail.com>
parents: 319
diff changeset
   107
                                      count = getCount(child, count);
0a2c2ad49d75 Improvce language visualization. Generalize language node selection, change language query parameters, add resolution of node name (corpus-) to lexvo controler
ymh <ymh.work@gmail.com>
parents: 319
diff changeset
   108
                                  });
0a2c2ad49d75 Improvce language visualization. Generalize language node selection, change language query parameters, add resolution of node name (corpus-) to lexvo controler
ymh <ymh.work@gmail.com>
parents: 319
diff changeset
   109
                              } else if(node.values) {
0a2c2ad49d75 Improvce language visualization. Generalize language node selection, change language query parameters, add resolution of node name (corpus-) to lexvo controler
ymh <ymh.work@gmail.com>
parents: 319
diff changeset
   110
                                  count = node.values.reduce(function(p, v) { return p + (languages[v] ? languages[v] : 0); }, count);
0a2c2ad49d75 Improvce language visualization. Generalize language node selection, change language query parameters, add resolution of node name (corpus-) to lexvo controler
ymh <ymh.work@gmail.com>
parents: 319
diff changeset
   111
                              }
0a2c2ad49d75 Improvce language visualization. Generalize language node selection, change language query parameters, add resolution of node name (corpus-) to lexvo controler
ymh <ymh.work@gmail.com>
parents: 319
diff changeset
   112
                              return count;
286
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   113
                            } else {
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   114
                                return count + c;
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   115
                            }
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   116
                        }
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   117
                        c.count = getCount(c);
188
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   118
                        c.x = d.x + c.x * d.dx;
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   119
                        c.y = d.y + c.y * d.dy;
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   120
                        c.dx *= d.dx;
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   121
                        c.dy *= d.dy;
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   122
                        c.parent = d;
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   123
                        layout(c);
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   124
                    });
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   125
                }
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   126
            }
84
36f84e8f1ad5 add d3js for langue visu
nowmad@nowmads-macbook-pro.local
parents: 57
diff changeset
   127
287
4e199fd29689 Fix treemap transition
Chloe Laisne <chloe.laisne@gmail.com>
parents: 286
diff changeset
   128
            function position() {
4e199fd29689 Fix treemap transition
Chloe Laisne <chloe.laisne@gmail.com>
parents: 286
diff changeset
   129
                return this.style("width", function(d) { return x(d.x + d.dx) - x(d.x) + 'px'; })
4e199fd29689 Fix treemap transition
Chloe Laisne <chloe.laisne@gmail.com>
parents: 286
diff changeset
   130
                    .style("height", function(d) { return y(d.y + d.dy) - y(d.y) + 'px'; })
4e199fd29689 Fix treemap transition
Chloe Laisne <chloe.laisne@gmail.com>
parents: 286
diff changeset
   131
                    .style("left", function(d) { return x(d.x) + 'px'; })
4e199fd29689 Fix treemap transition
Chloe Laisne <chloe.laisne@gmail.com>
parents: 286
diff changeset
   132
                    .style("top", function(d) { return y(d.y) + 'px'; });
4e199fd29689 Fix treemap transition
Chloe Laisne <chloe.laisne@gmail.com>
parents: 286
diff changeset
   133
            }
4e199fd29689 Fix treemap transition
Chloe Laisne <chloe.laisne@gmail.com>
parents: 286
diff changeset
   134
188
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   135
            function display(d) {
286
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   136
                breadcrumbs
188
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   137
                    .datum(d.parent)
286
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   138
                    .html(name(d))
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   139
                    .on("click", transition);
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   140
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   141
                var nodes = element.append("div")
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   142
                    .attr("class", "nodes")
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   143
                    .datum(d);
188
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   144
286
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   145
                var node = nodes.selectAll()
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   146
                    .data(d._children)
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   147
                    .enter()
295
e1f154f20f96 Add selected state to treemap
Chloe Laisne <chloe.laisne@gmail.com>
parents: 294
diff changeset
   148
                    .append("div")
e1f154f20f96 Add selected state to treemap
Chloe Laisne <chloe.laisne@gmail.com>
parents: 294
diff changeset
   149
                    .attr("data-id", function(d) { return d.id; });
39
c693e8673d5b add visu-langue with google treemap
nowmad@23.1.168.192.in-addr.arpa
parents:
diff changeset
   150
313
706f10bcdc3c Treemap shades to node count
Chloe Laisne <chloe.laisne@gmail.com>
parents: 295
diff changeset
   151
                var dMin = Math.min.apply(null, d._children.map(function(d){ return d.count; }));
706f10bcdc3c Treemap shades to node count
Chloe Laisne <chloe.laisne@gmail.com>
parents: 295
diff changeset
   152
                var dMax = Math.max.apply(null, d._children.map(function(d){ return d.count; }));
424
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 394
diff changeset
   153
                self.setProperties({minCount: dMin, maxCount: dMax});
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 394
diff changeset
   154
                var scale = self.get('scale');
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 394
diff changeset
   155
                var backgroundColor = function(_d) { return scale(_d.count);};
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 394
diff changeset
   156
                var colorClass = function(_d) { return (self.get('colors').getPerceptiveLuminance(backgroundColor(_d)) >= 0.5)?'light-color':'dark-color'; };
313
706f10bcdc3c Treemap shades to node count
Chloe Laisne <chloe.laisne@gmail.com>
parents: 295
diff changeset
   157
424
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 394
diff changeset
   158
                node.attr("class", function(_d) { return "node " + colorClass(_d) + ( _d.id === self.get('filter').get('language') ? " selected" : "" ); })
287
4e199fd29689 Fix treemap transition
Chloe Laisne <chloe.laisne@gmail.com>
parents: 286
diff changeset
   159
                    .call(position)
424
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 394
diff changeset
   160
                    .style("background-color", backgroundColor)
188
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   161
                    .on("click", selectHandler);
84
36f84e8f1ad5 add d3js for langue visu
nowmad@nowmads-macbook-pro.local
parents: 57
diff changeset
   162
286
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   163
                node.filter(function(d) { return d._children; })
188
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   164
                    .classed("children", true)
294
f3dae62a0d8a Add folder icon to treemap
Chloe Laisne <chloe.laisne@gmail.com>
parents: 287
diff changeset
   165
                    .on("click", transition)
f3dae62a0d8a Add folder icon to treemap
Chloe Laisne <chloe.laisne@gmail.com>
parents: 287
diff changeset
   166
                    .append("i")
f3dae62a0d8a Add folder icon to treemap
Chloe Laisne <chloe.laisne@gmail.com>
parents: 287
diff changeset
   167
                    .attr("class", "fa fa-folder-o");
84
36f84e8f1ad5 add d3js for langue visu
nowmad@nowmads-macbook-pro.local
parents: 57
diff changeset
   168
286
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   169
                node.append("span")
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   170
                    .html(function(d) { return d.name + ' <span class="count">(' + d.count + ')</span>'; });
84
36f84e8f1ad5 add d3js for langue visu
nowmad@nowmads-macbook-pro.local
parents: 57
diff changeset
   171
188
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   172
                function transition(d) {
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   173
                    if (transitioning || !d) {
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   174
                        return;
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   175
                    }
261
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 198
diff changeset
   176
188
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   177
                    selectHandler(d);
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   178
                    transitioning = true;
84
36f84e8f1ad5 add d3js for langue visu
nowmad@nowmads-macbook-pro.local
parents: 57
diff changeset
   179
287
4e199fd29689 Fix treemap transition
Chloe Laisne <chloe.laisne@gmail.com>
parents: 286
diff changeset
   180
                    var newNode = display(d),
4e199fd29689 Fix treemap transition
Chloe Laisne <chloe.laisne@gmail.com>
parents: 286
diff changeset
   181
                    transitionNodes = node.transition().duration(750),
4e199fd29689 Fix treemap transition
Chloe Laisne <chloe.laisne@gmail.com>
parents: 286
diff changeset
   182
                    transitionNewNodes = newNode.transition().duration(750);
84
36f84e8f1ad5 add d3js for langue visu
nowmad@nowmads-macbook-pro.local
parents: 57
diff changeset
   183
188
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   184
                    x.domain([d.x, d.x + d.dx]);
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   185
                    y.domain([d.y, d.y + d.dy]);
39
c693e8673d5b add visu-langue with google treemap
nowmad@23.1.168.192.in-addr.arpa
parents:
diff changeset
   186
286
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   187
                    element.style("shape-rendering", null);
84
36f84e8f1ad5 add d3js for langue visu
nowmad@nowmads-macbook-pro.local
parents: 57
diff changeset
   188
287
4e199fd29689 Fix treemap transition
Chloe Laisne <chloe.laisne@gmail.com>
parents: 286
diff changeset
   189
                    element.selectAll(".node").sort(function(a, b) { return a.depth - b.depth; });
188
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   190
287
4e199fd29689 Fix treemap transition
Chloe Laisne <chloe.laisne@gmail.com>
parents: 286
diff changeset
   191
                    newNode.selectAll().style("fill-opacity", 0);
84
36f84e8f1ad5 add d3js for langue visu
nowmad@nowmads-macbook-pro.local
parents: 57
diff changeset
   192
287
4e199fd29689 Fix treemap transition
Chloe Laisne <chloe.laisne@gmail.com>
parents: 286
diff changeset
   193
                    transitionNodes.style("opacity", 0)
4e199fd29689 Fix treemap transition
Chloe Laisne <chloe.laisne@gmail.com>
parents: 286
diff changeset
   194
                        .call(position);
84
36f84e8f1ad5 add d3js for langue visu
nowmad@nowmads-macbook-pro.local
parents: 57
diff changeset
   195
287
4e199fd29689 Fix treemap transition
Chloe Laisne <chloe.laisne@gmail.com>
parents: 286
diff changeset
   196
                    transitionNewNodes.style("opacity", 1)
4e199fd29689 Fix treemap transition
Chloe Laisne <chloe.laisne@gmail.com>
parents: 286
diff changeset
   197
                        .call(position);
286
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   198
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   199
                    transitionNodes.remove().each("end", function() {
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   200
                        element.style("shape-rendering", "crispEdges");
188
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   201
                        transitioning = false;
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   202
                    });
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   203
                }
84
36f84e8f1ad5 add d3js for langue visu
nowmad@nowmads-macbook-pro.local
parents: 57
diff changeset
   204
188
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   205
                function selectHandler (d){
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   206
                    if (d.id){
392
4fbe94af93e8 Improve filter service. Centralize filter management in a single point
ymh <ymh.work@gmail.com>
parents: 359
diff changeset
   207
                        self.get('filter').setFilter('language', d.id);
188
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   208
                    }
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   209
                }
84
36f84e8f1ad5 add d3js for langue visu
nowmad@nowmads-macbook-pro.local
parents: 57
diff changeset
   210
286
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   211
                return node;
188
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   212
            }
84
36f84e8f1ad5 add d3js for langue visu
nowmad@nowmads-macbook-pro.local
parents: 57
diff changeset
   213
188
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   214
            function name(d) {
286
57762c0b601e Treemap layout: Resize node values to get bigger rect when value is smal + Create and display count + Node colors
Chloe Laisne <chloe.laisne@gmail.com>
parents: 261
diff changeset
   215
                return d.parent ? name(d.parent) + '<span class="level">' + d.name + '</span>' : '<span class="root">' + d.name + '</span>';
188
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   216
            }
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   217
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   218
        });
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   219
    }
d2cb39155997 /langue endpoint ID querystring parameter
Chloe Laisne <chloe.laisne@gmail.com>
parents: 142
diff changeset
   220
39
c693e8673d5b add visu-langue with google treemap
nowmad@23.1.168.192.in-addr.arpa
parents:
diff changeset
   221
});