diff options
Diffstat (limited to 'web/viewsjs/reports/key_lengths.js.erb')
-rw-r--r-- | web/viewsjs/reports/key_lengths.js.erb | 148 |
1 files changed, 107 insertions, 41 deletions
diff --git a/web/viewsjs/reports/key_lengths.js.erb b/web/viewsjs/reports/key_lengths.js.erb index 897df68..65ff8ce 100644 --- a/web/viewsjs/reports/key_lengths.js.erb +++ b/web/viewsjs/reports/key_lengths.js.erb @@ -1,49 +1,115 @@ var create_flexigrid_for = { - reports: { - key_lengths: { - keys: function() { - create_flexigrid('grid-keys', { - url: '/api/2/db/keys?include=prevalent_values', - colModel: [ - { display: 'Length', name: 'length', width: 60, sortable: true, align: 'right' }, - { display: texts.osm.key, name: 'key', width: 180, sortable: true }, - { display: 'Number of Objects', name: 'count_all', width: 250, sortable: true, align: 'center' }, - { display: '<img src="/img/sources/wiki.16.png" alt="Wiki" title="Wiki"/>', name: 'in_wiki', width: 20, sortable: true, align: 'center' }, - { display: '<img src="/img/sources/josm.16.png" alt="JOSM" title="JOSM"/>', name: 'in_josm', width: 20, sortable: true, align: 'center' }, - // { display: '<img src="/img/sources/potlatch.16.png" alt="Potlatch 2" title="Potlatch 2"/>', name: 'in_potlatch', width: 20, sortable: true, align: 'center' }, - // { display: '<img src="/img/sources/merkaartor.16.png" alt="Merkaartor" title="Merkaartor"/>', name: 'in_merkaartor', width: 20, sortable: true, align: 'center' }, - { display: '<span title="Number of different values for this key">Values</span>', name: 'values_all', width: 70, sortable: true, align: 'right' }, - { display: 'Prevalent Values', name: 'prevalent_values', width: 500, sortable: true } - ], - searchitems: [ - { display: texts.osm.key, name: 'key' } - ], - sortname: 'length', - sortorder: 'asc', - preProcess: function(data) { - data.rows = jQuery.map(data.data, function(row, i) { - return { 'cell': [ - row.key.length, - link_to_key(row.key), - print_value_with_percent(row.count_all, row.count_all_fraction), - row.in_wiki ? '✔' : '-', - row.in_josm ? '✔' : '-', - // row.in_potlatch ? '✔' : '-', - // row.in_merkaartor ? '✔' : '-', - print_with_ts(row.values_all), - print_prevalent_value_list(row.key, row.prevalent_values) - ] }; - }); - return data; - } + keys: function() { + create_flexigrid('grid-keys', { + url: '/api/2/db/keys?include=prevalent_values', + colModel: [ + { display: 'Length', name: 'length', width: 60, sortable: true, align: 'right' }, + { display: texts.osm.key, name: 'key', width: 180, sortable: true }, + { display: 'Number of Objects', name: 'count_all', width: 250, sortable: true, align: 'center' }, + { display: '<img src="/img/sources/wiki.16.png" alt="Wiki" title="Wiki"/>', name: 'in_wiki', width: 20, sortable: true, align: 'center' }, + { display: '<img src="/img/sources/josm.16.png" alt="JOSM" title="JOSM"/>', name: 'in_josm', width: 20, sortable: true, align: 'center' }, + // { display: '<img src="/img/sources/potlatch.16.png" alt="Potlatch 2" title="Potlatch 2"/>', name: 'in_potlatch', width: 20, sortable: true, align: 'center' }, + // { display: '<img src="/img/sources/merkaartor.16.png" alt="Merkaartor" title="Merkaartor"/>', name: 'in_merkaartor', width: 20, sortable: true, align: 'center' }, + { display: '<span title="Number of different values for this key">Values</span>', name: 'values_all', width: 70, sortable: true, align: 'right' }, + { display: 'Prevalent Values', name: 'prevalent_values', width: 500, sortable: true } + ], + searchitems: [ + { display: texts.osm.key, name: 'key' } + ], + sortname: 'length', + sortorder: 'asc', + preProcess: function(data) { + data.rows = jQuery.map(data.data, function(row, i) { + return { 'cell': [ + row.key.length, + link_to_key(row.key), + print_value_with_percent(row.count_all, row.count_all_fraction), + row.in_wiki ? '✔' : '-', + row.in_josm ? '✔' : '-', + // row.in_potlatch ? '✔' : '-', + // row.in_merkaartor ? '✔' : '-', + print_with_ts(row.values_all), + print_prevalent_value_list(row.key, row.prevalent_values) + ] }; }); - }, - histogram: function() { + return data; } - } + }); } }; +<% +hist = Array.new +@db.execute('SELECT length(key) AS length, count(*) AS count FROM db.keys GROUP BY length(key) ORDER BY length(key)') do |row| + hist[row['length'].to_i] = row['count'].to_i +end +hist = hist.map{ |item| item.nil? ? 0 : item } %> + function page_init() { - page_init2(); + init_tabs([]); + + var data = <%= hist.to_json %>; + + var w=900, h=400, bar_width=6; + + var vis = new pv.Panel() + .canvas('canvas') + .fillStyle('#ffffff') + .strokeStyle('#d0d0c8') + .width(w) + .height(h+4) + .top(10) + .right(15) + .bottom(40) + .left(60) + .lineWidth(1); + + vis.add(pv.Label) + .data(['Key length']) + .font('12px Arial,sans-serif') + .bottom(-36) + .left(w/2) + .textAlign('center'); + + vis.add(pv.Label) + .data(['Number of keys']) + .font('12px Arial,sans-serif') + .left(-48) + .bottom(h/2) + .textAlign('center') + .textAngle(-Math.PI/2); + + var x = pv.Scale.linear(0, <%= hist.size %>).range(bar_width, w - bar_width); + var y = pv.Scale.linear(0, <%= hist.max %>).range(0, h); + + var bar = vis.add(pv.Bar) + .data(data) + .bottom(1) + .fillStyle('#083e76') + .left(function() { return x(this.index) - bar_width/2; }) + .height(y) + .title(function(d) { return '' + d + ' keys of length ' + this.index; }) + .width(bar_width); + + vis.add(pv.Rule) + .data(y.ticks(10)) + .bottom(y) + .left(-5) + .width(-5) + .anchor("left").add(pv.Label) + .font('10px Arial,sans-serif') + .textMargin(8) + .text(x.tickFormat); + + vis.add(pv.Rule) + .data(x.ticks(10)) + .left(x) + .bottom(-2) + .height(-5) + .anchor("bottom").add(pv.Label) + .font('10px Arial,sans-serif') + .textMargin(8) + .text(x.tickFormat); + + vis.render(); } |