# HG changeset patch # User nowmad@nowmads-macbook-pro.local # Date 1452869382 -3600 # Node ID 36f84e8f1ad540e3813f6c3b754c22417b392f2f # Parent 645786bb8587259fd8f09d61fbe256cfddaae914 add d3js for langue visu add modal update css diff -r 645786bb8587 -r 36f84e8f1ad5 cms/app-client/app/components/visu-carto.js --- a/cms/app-client/app/components/visu-carto.js Fri Jan 15 15:48:42 2016 +0100 +++ b/cms/app-client/app/components/visu-carto.js Fri Jan 15 15:49:42 2016 +0100 @@ -4,21 +4,14 @@ // storage: Ember.inject.service(), didInsertElement: function(){ var _this = this; - // console.log("maps : ", AmCharts.maps); - // - // console.log('test: ', this.get("query")); - // - // this.get("sounds").map(item => { - // console.log(item.get('title')); - // }); var continentsDataProvider; var franceDataProvider = { - mapVar: AmCharts.maps.franceDepartmentsLow, + mapVar: AmCharts.maps.france2016Low, getAreasFromMap:true, - areas: this.initArea(AmCharts.maps.franceDepartmentsLow) + areas: this.initArea(AmCharts.maps.france2016Low) }; var worldDataProvider = { @@ -89,7 +82,9 @@ color: "#E0EEEF" }, - dataProvider: continentsDataProvider + dataProvider: continentsDataProvider, + + listeners: [{event:"clickMapObject", method:handleMapObjectClick}] }); @@ -98,6 +93,12 @@ map.validateNow(); } function handleMapObjectClick (event) { + console.log("bbox: ", event.mapObject.displayObject.node.getBBox()); + // console.log("event", event); + // console.log("originalTarget", event.event.originalTarget); + // console.log("getTotalLength", event.event.originalTarget.getTotalLength()); + // console.log("getBBox", event.event.originalTarget.getBBox()); + // console.log("event", event.event.originalTarget.attributes[1].d); if (event.mapObject.id == "backButton") { handleGoHome(); } @@ -106,7 +107,6 @@ // monitor when home icon was clicked and also go to continents map map.addListener("homeButtonClicked", handleGoHome); - map.addListener("clickMapObject", handleMapObjectClick); }, initArea: function(area, dataProvider){ var _this = this; diff -r 645786bb8587 -r 36f84e8f1ad5 cms/app-client/app/components/visu-langues.js --- a/cms/app-client/app/components/visu-langues.js Fri Jan 15 15:48:42 2016 +0100 +++ b/cms/app-client/app/components/visu-langues.js Fri Jan 15 15:49:42 2016 +0100 @@ -4,70 +4,194 @@ didInsertElement: function(){ var _this = this; - var data = google.visualization.arrayToDataTable([ - ['Location', 'Parent', 'Market trade volume (size)', 'Market increase/decrease (color)'], - ['Global', null, 0, 0], - ['Français', 'Global', 859, 859], - ['Alsacien', 'Global', 851, 851], - ['Breton', 'Global', 403, 403], - ['Occitan', 'Global', 344, 344], - ['Judéo-espagnol', 'Global', 77, 77], - ['Undetermined', 'Global', 45, 45], - ['Langues régionales', 'Global', 175, 175], - ['Langues non territoriales', 'Global', 48, 48], - ['Les Creoles', 'Global', 47, 47], - ['Guyane', 'Global', 59, 59], - ['Mayotte', 'Global', 20, 20], - ['Polynésie française', 'Global', 13, 13], - ['Wallis et Futuna', 'Global', 43, 43], - ['Nouvelle-Calédonie', 'Global', 68, 68], - ['Langues d’oïl', 'Langues régionales', 75, 75], - ['Francoprovençal', 'Langues régionales', 60, 60], - ['Corse', 'Langues régionales', 40, 40], - ['Langue des signes française (LSF)', 'Langues non territoriales', 40, 40], - ['Berbère', 'Langues non territoriales', 8, 8], - ['Creole de la Réunion', 'Les Creoles', 32, 32], - ['Creole de la Guadeloupe', 'Les Creoles', 15, 15], - ['Ndyuka-Trio Pidgin (njt)', 'Guyane', 31, 31], - ['Palikúr (plu)', 'Guyane', 6, 6], - ['Guianese Creole French (gcr)', 'Guyane', 4, 4], - ['Eastern Maroon Creole (djk)', 'Guyane', 16, 16], - ['Sranan Tongo (srn)', 'Guyane', 2, 2], - ['Maore Comorian (swb)', 'Mayotte', 2, 2], - ['Mauritian Sign Language (lsy)', 'Mayotte', 18, 18], - ['West Uvean (uve)', 'Polynésie française', 13, 13], - ['East Futuna (fud)', 'Wallis et Futuna', 23, 23], - ['Wallisian (wls)', 'Wallis et Futuna', 20, 20], - ['Nemi (nem)', 'Nouvelle-Calédonie', 15, 15], - ['Xârâcùù (ane)', 'Nouvelle-Calédonie', 12, 12], - ['Cemuhî (cam)', 'Nouvelle-Calédonie', 9, 9], - ['Xaragure (axx)', 'Nouvelle-Calédonie', 9, 9], - ['Iaai (iai)', 'Nouvelle-Calédonie', 8, 8], - ['Nêlêmwa-Nixumwak (nee)', 'Nouvelle-Calédonie', 4, 4], - ['Dehu (dhv)', 'Nouvelle-Calédonie', 2, 2], - ['Nengone (nen)', 'Nouvelle-Calédonie', 2, 2], - ['Ajië (aji)', 'Nouvelle-Calédonie', 1, 1], - ['Numee (kdk)', 'Nouvelle-Calédonie', 1, 1], - ['Yuaga (nua)', 'Nouvelle-Calédonie', 1, 1], - ['Bwatoo (bwa)', 'Nouvelle-Calédonie', 4, 4] - ]); + var margin = {top: 20, right: 0, bottom: 0, left: 0}, + width = 560, + height = 600 - margin.top - margin.bottom, + formatNumber = d3.format(",d"), + transitioning; + + var x = d3.scale.linear() + .domain([0, width]) + .range([0, width]); + + var y = d3.scale.linear() + .domain([0, height]) + .range([0, height]); + + var treemap = d3.layout.treemap() + .children(function(d, depth) { return depth ? null : d._children; }) + .sort(function(a, b) { return a.value - b.value; }) + .ratio(height / width * 0.5 * (1 + Math.sqrt(5))) + .round(false); + + var svg = d3.select("#chart_div").append("svg") + .attr("width", width + margin.left + margin.right) + .attr("height", height + margin.bottom + margin.top) + .style("margin-left", -margin.left + "px") + .style("margin.right", -margin.right + "px") + .append("g") + .attr("transform", "translate(" + margin.left + "," + margin.top + ")") + .style("shape-rendering", "crispEdges"); + + var grandparent = svg.append("g") + .attr("class", "grandparent"); + + grandparent.append("rect") + .attr("y", -margin.top) + .attr("width", width) + .attr("height", margin.top); + + grandparent.append("text") + .attr("x", 6) + .attr("y", 6 - margin.top) + .attr("dy", ".75em"); + + d3.json("langues.json", function(root) { + initialize(root); + accumulate(root); + layout(root); + display(root); + + function initialize(root) { + root.x = root.y = 0; + root.dx = width; + root.dy = height; + root.depth = 0; + } + + // Aggregate the values for internal nodes. This is normally done by the + // treemap layout, but not here because of our custom implementation. + // We also take a snapshot of the original children (_children) to avoid + // the children being overwritten when when layout is computed. + function accumulate(d) { + return (d._children = d.children) + ? d.value = d.children.reduce(function(p, v) { return p + accumulate(v); }, 0) + : d.value; + } + + // Compute the treemap layout recursively such that each group of siblings + // uses the same size (1×1) rather than the dimensions of the parent cell. + // This optimizes the layout for the current zoom state. Note that a wrapper + // object is created for the parent node for each group of siblings so that + // the parent’s dimensions are not discarded as we recurse. Since each group + // of sibling was laid out in 1×1, we must rescale to fit using absolute + // coordinates. This lets us use a viewport to zoom. + function layout(d) { + if (d._children) { + treemap.nodes({_children: d._children}); + d._children.forEach(function(c) { + c.x = d.x + c.x * d.dx; + c.y = d.y + c.y * d.dy; + c.dx *= d.dx; + c.dy *= d.dy; + c.parent = d; + layout(c); + }); + } + } + + function display(d) { + grandparent + .datum(d.parent) + .on("click", transition) + .select("text") + .text(name(d)); - var tree = new google.visualization.TreeMap(document.getElementById('chart_div')); + var g1 = svg.insert("g", ".grandparent") + .datum(d) + .attr("class", "depth"); + + var g = g1.selectAll("g") + .data(d._children) + .enter().append("g"); + + g.classed("bla", true).on("click", selectHandler) + + g.filter(function(d) { return d._children; }) + .classed("children", true) + .on("click", transition); + + // g.selectAll(".child") + // .data(function(d) { return d._children || [d]; }) + // .enter().append("rect") + // .attr("class", "child") + // .call(rect); + + g.append("rect") + .attr("class", "parent") + // .attr("fill", (d.color || "#bbb")) + .call(rect) + .append("title") + .text(function(d) { return formatNumber(d.value); }); + + g.append("text") + .attr("dy", ".75em") + .text(function(d) { return d.name; }) + .call(text); + + function transition(d) { + if (transitioning || !d) return; + selectHandler(d); + transitioning = true; + + var g2 = display(d), + t1 = g1.transition().duration(750), + t2 = g2.transition().duration(750); + + // Update the domain only after entering new elements. + x.domain([d.x, d.x + d.dx]); + y.domain([d.y, d.y + d.dy]); + + // Enable anti-aliasing during the transition. + svg.style("shape-rendering", null); - tree.draw(data, { - minColor: '#E0EEEF', - midColor: '#7CACAE', - maxColor: '#2D7073', - headerHeight: 15, - fontColor: 'black', - showScale: true + // Draw child nodes on top of parent nodes. + svg.selectAll(".depth").sort(function(a, b) { return a.depth - b.depth; }); + + // Fade-in entering text. + g2.selectAll("text").style("fill-opacity", 0); + + // Transition to the new view. + t1.selectAll("text").call(text).style("fill-opacity", 0); + t2.selectAll("text").call(text).style("fill-opacity", 1); + t1.selectAll("rect").call(rect); + t2.selectAll("rect").call(rect); + + // Remove the old node when the transition is finished. + t1.remove().each("end", function() { + svg.style("shape-rendering", "crispEdges"); + transitioning = false; + }); + } + + function selectHandler (d){ + if (d.name === "Global"){ + return _this.sendAction('action', null); + } + _this.sendAction('action', d.name); + } + + return g; + } + + function text(text) { + text.attr("x", function(d) { return x(d.x) + 6; }) + .attr("y", function(d) { return y(d.y) + 6; }); + } + + function rect(rect) { + rect.attr("x", function(d) { return x(d.x); }) + .attr("y", function(d) { return y(d.y); }) + .attr("width", function(d) { return x(d.x + d.dx) - x(d.x); }) + .attr("height", function(d) { return y(d.y + d.dy) - y(d.y); }) + .attr("fill", function(d) { return (d.color || "#bbb")}); + } + + function name(d) { + return d.parent + ? name(d.parent) + "." + d.name + : d.name; + } }); - - function selectHandler (){ - _this.sendAction('action', data.getValue(tree.getSelection()[0].row, 0)); - } - - google.visualization.events.addListener(tree, 'select', selectHandler); - } }); diff -r 645786bb8587 -r 36f84e8f1ad5 cms/app-client/app/controllers/application.js --- a/cms/app-client/app/controllers/application.js Fri Jan 15 15:48:42 2016 +0100 +++ b/cms/app-client/app/controllers/application.js Fri Jan 15 15:49:42 2016 +0100 @@ -7,6 +7,8 @@ discours: null, date: [], thematique: null, + isShowingModal: false, + currentDetails: null, currentItem: {title: "example", master: 'http://www.noiseaddicts.com/samples_1w72b820/3921.mp3'}, filteredSounds: Ember.computed('location', 'langue', 'discours', 'date', 'thematique', 'model', function() { var location = this.get('location'); @@ -65,6 +67,10 @@ $(".result-item").toggleClass("details", false); $("#"+item.id).toggleClass("details", true); } + }, + toggleModal: function(item){ + this.set("isShowingModal", !this.isShowingModal); + this.set("currentDetails", item); } } }); diff -r 645786bb8587 -r 36f84e8f1ad5 cms/app-client/app/routes/tabs/carto.js --- a/cms/app-client/app/routes/tabs/carto.js Fri Jan 15 15:48:42 2016 +0100 +++ b/cms/app-client/app/routes/tabs/carto.js Fri Jan 15 15:49:42 2016 +0100 @@ -3,5 +3,10 @@ export default Ember.Route.extend({ renderTemplate() { this.render({ outlet: 'carto' }); + }, + actions: { + queryParamsDidChange: function() { + console.log("carto params"); + }, } }); diff -r 645786bb8587 -r 36f84e8f1ad5 cms/app-client/app/routes/tabs/chrono.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cms/app-client/app/routes/tabs/chrono.js Fri Jan 15 15:49:42 2016 +0100 @@ -0,0 +1,10 @@ +import Ember from 'ember'; + +export default Ember.Route.extend({ + actions: { + queryParamsDidChange: function() { + console.log("chrono params"); + // console.log("visu-chrono ?", this.controller.get('visu-chrono')); + }, + } +}); diff -r 645786bb8587 -r 36f84e8f1ad5 cms/app-client/app/styles/app.scss --- a/cms/app-client/app/styles/app.scss Fri Jan 15 15:48:42 2016 +0100 +++ b/cms/app-client/app/styles/app.scss Fri Jan 15 15:49:42 2016 +0100 @@ -25,6 +25,7 @@ @import 'container'; @import 'player'; @import 'results'; + @import 'modal'; &-container{ display: block; diff -r 645786bb8587 -r 36f84e8f1ad5 cms/app-client/app/styles/modal.scss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cms/app-client/app/styles/modal.scss Fri Jan 15 15:49:42 2016 +0100 @@ -0,0 +1,30 @@ +.overlay { + background-color: gray; + height: 100vh; + left: 0; + opacity: 0.77; + position: fixed; + right: 0; + top: 0; + z-index: 50; +} + +.dialog { + background: #fff none repeat scroll 0 0; + border: 4px solid #ccc; + border-radius: 10px; + box-shadow: 0 0 10px #222; + height: 300px; + left: 50%; + margin-left: -250px; + margin-top: -150px; + padding: 10px; + position: fixed; + top: 50%; + width: 500px; + z-index: 50; +} + +.dialog h1{ + margin-top: 0; +} diff -r 645786bb8587 -r 36f84e8f1ad5 cms/app-client/app/styles/results.scss --- a/cms/app-client/app/styles/results.scss Fri Jan 15 15:48:42 2016 +0100 +++ b/cms/app-client/app/styles/results.scss Fri Jan 15 15:49:42 2016 +0100 @@ -77,3 +77,7 @@ .result-item.playing .fa { // background: url('images/playing.gif') no-repeat; } + +.result-item button{ + margin-top: 5px; +} diff -r 645786bb8587 -r 36f84e8f1ad5 cms/app-client/app/styles/tabs/langues.scss --- a/cms/app-client/app/styles/tabs/langues.scss Fri Jan 15 15:48:42 2016 +0100 +++ b/cms/app-client/app/styles/tabs/langues.scss Fri Jan 15 15:49:42 2016 +0100 @@ -1,4 +1,45 @@ -#chart_div{ +#chart_div { width: 560px; height: 540px; + background: #ddd; } + +text { + pointer-events: none; +} + +.grandparent text { + font-weight: bold; +} + +rect { + /*fill: none;*/ + stroke: #fff; +} + +rect.parent, +.grandparent rect { + stroke-width: 2px; +} + +.grandparent rect { + fill: green; +} + +.grandparent:hover rect { + fill: lightgreen; +} + +.children rect.parent, +.grandparent rect { + cursor: pointer; +} + +.children rect.parent { + /*fill: #bbb;*/ + fill-opacity: .5; +} + +.children:hover rect.child { + /*fill: #bbb;*/ +} diff -r 645786bb8587 -r 36f84e8f1ad5 cms/app-client/app/templates/application.hbs --- a/cms/app-client/app/templates/application.hbs Fri Jan 15 15:48:42 2016 +0100 +++ b/cms/app-client/app/templates/application.hbs Fri Jan 15 15:49:42 2016 +0100 @@ -1,3 +1,4 @@ +
{{outlet}}
{{outlet "carto"}}
diff -r 645786bb8587 -r 36f84e8f1ad5 cms/app-client/app/templates/player.hbs --- a/cms/app-client/app/templates/player.hbs Fri Jan 15 15:48:42 2016 +0100 +++ b/cms/app-client/app/templates/player.hbs Fri Jan 15 15:49:42 2016 +0100 @@ -12,3 +12,15 @@ Description: {{ currentItem.description }}

+ +
+
+ Play +
+
+
+
+
+
+
+
diff -r 645786bb8587 -r 36f84e8f1ad5 cms/app-client/app/templates/results.hbs --- a/cms/app-client/app/templates/results.hbs Fri Jan 15 15:48:42 2016 +0100 +++ b/cms/app-client/app/templates/results.hbs Fri Jan 15 15:49:42 2016 +0100 @@ -29,6 +29,22 @@
{{item.description}}
+ {{/each}} + {{#if isShowingModal}} + {{#ember-wormhole to='info-modal'}} +
+
+

{{currentDetails.title}}

+

Description: {{currentDetails.description}}

+

Interviewer: {{currentDetails.interviewer}}

+

Type de Discours: {{currentDetails.type}}

+

Localisation: {{currentDetails.spatial}}

+

Langue: {{currentDetails.language}}

+

Date de Creation: {{currentDetails.created}}

+ +
+ {{/ember-wormhole}} + {{/if}} diff -r 645786bb8587 -r 36f84e8f1ad5 cms/app-client/bower.json --- a/cms/app-client/bower.json Fri Jan 15 15:48:42 2016 +0100 +++ b/cms/app-client/bower.json Fri Jan 15 15:49:42 2016 +0100 @@ -13,7 +13,7 @@ "loader.js": "ember-cli/loader.js#3.2.1", "qunit": "~1.18.0", "bootstrap-sass": "~3.3.5", - "ammap3": "~3.17.3", + "ammap3": "~3.18.6", "font-awesome": "~4.4.0" } } diff -r 645786bb8587 -r 36f84e8f1ad5 cms/app-client/config/environment.js --- a/cms/app-client/config/environment.js Fri Jan 15 15:48:42 2016 +0100 +++ b/cms/app-client/config/environment.js Fri Jan 15 15:49:42 2016 +0100 @@ -5,7 +5,7 @@ rootElement: '#corpus-app', modulePrefix: 'app-client', environment: environment, - baseURL: '/corpus', + baseURL: '/corpus/', // locationType: '', // contentSecurityPolicy: { // 'default-src': "'none'", diff -r 645786bb8587 -r 36f84e8f1ad5 cms/app-client/npm-debug.log --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cms/app-client/npm-debug.log Fri Jan 15 15:49:42 2016 +0100 @@ -0,0 +1,45 @@ +0 info it worked if it ends with ok +1 verbose cli [ '/usr/local/bin/node', '/usr/local/bin/npm', 'start' ] +2 info using npm@3.5.2 +3 info using node@v5.2.0 +4 verbose run-script [ 'prestart', 'start', 'poststart' ] +5 info lifecycle app-client@0.0.0~prestart: app-client@0.0.0 +6 silly lifecycle app-client@0.0.0~prestart: no script for prestart, continuing +7 info lifecycle app-client@0.0.0~start: app-client@0.0.0 +8 verbose lifecycle app-client@0.0.0~start: unsafe-perm in lifecycle true +9 verbose lifecycle app-client@0.0.0~start: PATH: /usr/local/lib/node_modules/npm/bin/node-gyp-bin:/Users/nowmad/workspace/IRI/corpus_parole/cms/app-client/node_modules/.bin:/Library/PostgreSQL/9.5/bin/:/usr/local/apache-ant/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/nowmad/Library/Android/sdk/tools:/Users/nowmad/Library/Android/sdk/platform-tools +10 verbose lifecycle app-client@0.0.0~start: CWD: /Users/nowmad/workspace/IRI/corpus_parole/cms/app-client +11 silly lifecycle app-client@0.0.0~start: Args: [ '-c', 'ember serve --environment=development' ] +12 silly lifecycle app-client@0.0.0~start: Returned: code: 1 signal: null +13 info lifecycle app-client@0.0.0~start: Failed to exec start script +14 verbose stack Error: app-client@0.0.0 start: `ember serve --environment=development` +14 verbose stack Exit status 1 +14 verbose stack at EventEmitter. (/usr/local/lib/node_modules/npm/lib/utils/lifecycle.js:232:16) +14 verbose stack at emitTwo (events.js:88:13) +14 verbose stack at EventEmitter.emit (events.js:173:7) +14 verbose stack at ChildProcess. (/usr/local/lib/node_modules/npm/lib/utils/spawn.js:24:14) +14 verbose stack at emitTwo (events.js:88:13) +14 verbose stack at ChildProcess.emit (events.js:173:7) +14 verbose stack at maybeClose (internal/child_process.js:819:16) +14 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:212:5) +15 verbose pkgid app-client@0.0.0 +16 verbose cwd /Users/nowmad/workspace/IRI/corpus_parole/cms/app-client +17 error Darwin 15.2.0 +18 error argv "/usr/local/bin/node" "/usr/local/bin/npm" "start" +19 error node v5.2.0 +20 error npm v3.5.2 +21 error code ELIFECYCLE +22 error app-client@0.0.0 start: `ember serve --environment=development` +22 error Exit status 1 +23 error Failed at the app-client@0.0.0 start script 'ember serve --environment=development'. +23 error Make sure you have the latest version of node.js and npm installed. +23 error If you do, this is most likely a problem with the app-client package, +23 error not with npm itself. +23 error Tell the author that this fails on your system: +23 error ember serve --environment=development +23 error You can get information on how to open an issue for this project with: +23 error npm bugs app-client +23 error Or if that isn't available, you can get their info via: +23 error npm owner ls app-client +23 error There is likely additional logging output above. +24 verbose exit [ 1, true ] diff -r 645786bb8587 -r 36f84e8f1ad5 cms/app-client/package.json --- a/cms/app-client/package.json Fri Jan 15 15:48:42 2016 +0100 +++ b/cms/app-client/package.json Fri Jan 15 15:49:42 2016 +0100 @@ -24,6 +24,7 @@ "ember-cli-app-version": "0.5.0", "ember-cli-babel": "^5.1.3", "ember-cli-content-security-policy": "0.4.0", + "ember-cli-d3": "1.1.2", "ember-cli-dependency-checker": "^1.0.1", "ember-cli-font-awesome": "1.3.0", "ember-cli-htmlbars": "0.7.9", @@ -37,6 +38,7 @@ "ember-cli-uglify": "^1.2.0", "ember-data": "1.13.8", "ember-disable-proxy-controllers": "^1.0.0", - "ember-export-application-global": "^1.0.3" + "ember-export-application-global": "^1.0.3", + "ember-wormhole": "0.3.4" } } diff -r 645786bb8587 -r 36f84e8f1ad5 cms/app-client/public/langues.json --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cms/app-client/public/langues.json Fri Jan 15 15:49:42 2016 +0100 @@ -0,0 +1,195 @@ +{ + "name": "Global", + "children": [ + { + "id": "id de langue (code Lexvo de la langues)", + "name": "Français", + "value": 859, + "color": "lightblue" + }, + { + "name": "Alsacien", + "value": 851 + }, + { + "name": "Breton", + "value": 403 + }, + { + "name": "Occitan", + "value": 344 + }, + { + "name": "Judéo-espagnol", + "value": 77 + }, + { + "name": "Undetermined", + "value": 45 + }, + { + "name": "Langues régionales", + "value": 175, + "children": [ + { + "name": "Langues d'oïl", + "value": 75 + }, + { + "name": "Francoprovençal", + "value": 60 + }, + { + "name": "Corse", + "value": 40 + } + ] + }, + { + "name": "Langues non territoriales", + "value": 48, + "children": [ + { + "name": "Langue des signes française (LSF)", + "value": 40 + }, + { + "name": "Berbère", + "value": 8 + } + ] + }, + { + "name": "Les Creoles", + "value": 47, + "children": [ + { + "name": "Creole de la Réunion", + "value": 32 + }, + { + "name": "Creole de la Guadeloupe", + "value": 15 + } + ] + }, + { + "name": "Guyane", + "value": 59, + "children": [ + { + "name": "Ndyuka-Trio Pidgin (njt)", + "value": 31 + }, + { + "name": "Palikúr (plu)", + "value": 6 + }, + { + "name": "Guianese Creole French (gcr)", + "value": 4 + }, + { + "name": "Eastern Maroon Creole (djk)", + "value": 16 + }, + { + "name": "Sranan Tongo (srn)", + "value": 2 + } + ] + }, + { + "name": "Mayotte", + "value": 20, + "children": [ + { + "name": "Maore Comorian (swb)", + "value": 2 + }, + { + "name": "Mauritian Sign Language (lsy)", + "value": 18 + } + ] + }, + { + "name": "Polynésie française", + "value": 13, + "children": [ + { + "name": "West Uvean (uve)", + "value": 13 + } + ] + }, + { + "name": "Wallis et Futuna", + "value": 43, + "children": [ + { + "name": "LanEast Futuna (fud)", + "value": 23 + }, + { + "name": "Wallisian (wls)", + "value": 20 + } + ] + }, + { + "name": "Nouvelle-Calédonie", + "value": 68, + "children": [ + { + "name": "Wallisian (wls)", + "value": 15 + }, + { + "name": "Xârâcùù (ane)", + "value": 12 + }, + { + "name": "Cemuhî (cam)", + "value": 9 + }, + { + "name": "Xaragure (axx)", + "value": 9 + }, + { + "name": "Iaai (iai)", + "value": 8 + }, + { + "name": "Nêlêmwa-Nixumwak (nee)", + "value": 4 + }, + { + "name": "Dehu (dhv)", + "value": 2 + }, + { + "name": "Nengone (nen)", + "value": 2 + }, + { + "name": "Ajië (aji)", + "value": 1 + }, + { + "name": "Numee (kdk)", + "value": 1 + }, + { + "name": "Yuaga (nua)", + "value": 1 + }, + { + "name": "Bwatoo (bwa)", + "value": 4 + } + ] + } + ] +}