DiaColloDB-WWW
view release on metacpan or search on metacpan
share/htdocs/diacollo.js view on Meta::CPAN
"title":"DDC KWIC search for row pairs"
});
}
$(tr).append('<td class="links">'+linkhtml+'</td>');
});
}
//-- setup score colors
if (true) {
//-- get min, max score values
var max;
$("#profileDataHtml tr:not(:first-child)").find(":nth-child("+(iscore+1)+")").each(function(i,td) {
var val = Number($(td).text());
if (max==null || Math.abs(val) > max) {
max = Math.abs(val);
}
});
//-- insert header
$("#profileDataHtml tr:first-child").append("<th/>");
//-- map to colors
var min = (isAbsDiff || user_query.score == "mi" ? -max : 0);
var ctitle = (isAbsDiff
? "Color-coded association preference (red:a .. blue:b)"
: "Color-coded association preference (red:attract..blue:repel)");
$("#profileDataHtml tr:not(:first-child)").each(function(i,tr) {
$(tr).append('<td title="'+ctitle+'" class="diffColor"><span> </span></td>');
var val = Number($(tr).find("td:nth-child("+(iscore+1)+")").text());
var st = $(tr).find(".diffColor span");
var sz = st.height()+"px";
st.css({"background-color":heatcolorv(val, min, max), width:sz, height:sz});
});
}
//-- jump to fragment if specified
var fragment = locFragment(window.location);
if (fragment != "") {
window.location.hash = '';
window.location.hash = '#'+fragment;
}
}
//----------------------------------------------------------------------
function dcpFormatGMotion(data, jqXHR) {
//-- parse data
data = $.parseJSON(data);
qinfo = data.qinfo;
setupDebugTable(qinfo);
if (data.profiles.length == 0) {
dcpErrorMsg("Error: no data to display!");
return;
}
//-- setup plot area
$(".rawURL").hide();
$("#profileDataChart").addClass("gmChart").fadeIn();
//-- setup chart data
var cstate = '{}'; //-- chart state
var cdata = new google.visualization.DataTable();
cdata.addColumn('string', data.titles.join('/')); //-- 1st column must be item type
cdata.addColumn('number', 'year'); //-- 2nd column must be date ('number' => year)
if (isDiff) {
//-- motion chart: diff
cdata.addColumn('number', 'ascore');
cdata.addColumn('number', 'bscore');
cdata.addColumn('number', 'diff');
data.profiles.forEach(function(p) {
var year = Number(String(p.label).replace(/^0-/,'').replace(/-.*$/,''));
var scoref = p.score;
for (var key in p[scoref]) {
var item = key.replace(/\t/g,'/');
cdata.addRow([item, year, p.prf1[scoref][key], p.prf2[scoref][key], p[scoref][key]]);
}
});
cstate = '{"showTrails":false}';
}
else {
//-- motion chart: profile
cdata.addColumn('number', 'f2');
cdata.addColumn('number', 'f12');
cdata.addColumn('number', 'score');
data.profiles.forEach(function(p) {
var year = Number(p.label);
var scoref = p.score;
for (var key in p[scoref]) {
var item = key.replace(/\t/g,'/');
cdata.addRow([item, year, p.f2[key], p.f12[key], p[scoref][key]]);
}
});
cstate = '{"showTrails":false,"xLambda":0,"yLambda":0}';
}
//-- plot the chart
var chart = new google.visualization.MotionChart(document.getElementById('profileDataChart'));
chart.draw(cdata, {width:600, height:480, state:cstate});
}
//----------------------------------------------------------------------
var hitem2key = {};
function dcpFormatHiChart(data, jqXHR) {
//-- parse data
//data = $.parseJSON(data);
//qinfo = data.qinfo;
if ( !(data = dcpParseFlat(data,{mode:"bubble"})) ) { return; }
if (data.profiles.length == 0) {
dcpErrorMsg("Error: no data to display!");
return;
}
dcpStatusMsg("loading","Rendering...");
//-- hichart: enable "download" icon
$("#d3icons > a").hide();
$("#profileDataD3, #d3icons, #exportBtn").fadeIn();
//-- setup plot data
var cdata = { //-- chart data
chart: {
type: (user_query.debug ? 'line' : 'spline'),
zoomType: 'x'
},
credits: {
enabled: false
},
title: {
text:"DiaCollo Profile"+(isDiff ? " Diff" : "")
},
subtitle: {
text: (isDiff ? (chartTitleString('',1)+' - '+chartTitleString('b',1)) : chartTitleString())
},
xAxis: {
title: { text: 'Date (slice)' },
},
yAxis: {
title: { text: 'Score'+(isDiff ? (' Diff ('+user_query.diff+')') : '')+' ('+scoreNames[user_query.score]+')' }
},
legend: {
layout: 'vertical',
align: 'right',
verticalAlign: 'middle',
borderWidth: 0,
padding: 5
//,itemStyle: { "color": "#333333", "cursor": "pointer", "fontSize": "12px", "fontWeight": "normal" }
},
plotOptions: {
series: {
cursor: 'pointer',
point: {
events: {
click: function (e) {
dcur = dlabels.indexOf(String(this.label).replace(/\./g,"-"));
var idata = items[ itemid[this.series.name.replace(/\//g,"\t")] ];
var dopts = {};
if (!$("#profileDataPopup").is(":visible")) {
dopts.position = {at:"center", of:e}
}
d3InfoPopup(idata, dopts);
}
}
},
marker: {
lineWidth: 1
}
}
},
series: []
};
//-- create hicharts series
var item, di, score;
items.forEach(function(item) {
item.hiseries = { name:item.label, data:[] };
for (var di in dlabels) {
score = item.score[di];
item.hiseries.data.push({x:Number(String(dlabels[di]).replace(/-/g,".")), y:(score==null ? null : score), label:dlabels[di]});
}
cdata.series.push(item.hiseries);
});
//-- setup plot area
$(".rawURL").hide();
$("#profileDataChart").addClass("hcParent").show();
//-- plot the chart
$("#profileDataChart").addClass("hcChart").highcharts(cdata).show();
dcpClearMsg();
}
//----------------------------------------------------------------------
// str = chartTitleString(prefix,parens)
function chartTitleString(prefix,parens) {
if (prefix==null) { prefix = ''; }
var q = user_query[prefix+'query'];
var title = q;
/*
var d = user_query[prefix+'date'];
if (d != null && d != '') {
title += ' ['+d.replace(/:/,'-')+']';
}
var s = user_query[prefix+'slice'];
if (s != null && s != '') {
title += ' /'+s;
}
*/
return Boolean(parens) ? ('('+title+')') : title;
}
//----------------------------------------------------------------------
// d3: common variables & utilities
var dforce, dcloud, dcur, dsnapto, dkeys, dlabels, itemid, items;
var dcpScoreRange; //-- [minScore,maxScore]
var dcpValueNull; //-- null value
var dcpSizeRange; //-- [minSize,maxSize]
var dcpItemSize; //-- interpolating accessor for item size (cloud:font-size, bubble:radius)
var d3InfoCur; //-- currently selected info-popup data
var brushInterp; //-- function variable for brush interpolation
var brushSnap; //-- function variable for brush snap
// data = dcpParseFlat(dataStr,opts)
// + parses profile data into flat d3-friendly format
// + returns true on success; sets $("#status .msg").text() and returns false on error
// + sets globals:
// qinfo = data.qinfo
// dkeys = [$date0,...] (slice key-strings, raw, e.g. "1900-1900" or "0-1750")
// dlabels = [$date0,...] (slice key-strings, trimmed, e.g. "1900" or "1750")
// items = [$itemData0,...]
// itemid = {$itemKey0:$itemId0, ...}
// dcur = $currentSliceIndex //-- may be fractional if inbetween slices
// dcpScoreRange = [min,max]
// dcpSizeRange = [min,max]
// dcpItemSize = function(d,dcur) { ... }
// dcpDateInterp = function(dcur) { ... }
// + where items[itemId] =
// item = {id:$itemId, item:$itemKey, label:$itemLabel, score:[...], value:[...], avalue:[...], sizes:[...], opacity:[...], maxSize:maxSize?}
// + array-valued item data keys are indexed by dlabels[] index
// + calls setupDebugTable() after parsing qinfo()
// + options:
// mode: MODE, //-- parse mode (known values: "bubble", "cloud")
var d3data = null;
function dcpParseFlat(data,opts) {
//-- status message
( run in 0.892 second using v1.01-cache-2.11-cpan-ceb78f64989 )