-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathii.sparql.format.treemap.js
126 lines (115 loc) · 3.95 KB
/
ii.sparql.format.treemap.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
spqlib.treemap = ( function () {
/**
* Entry point
*/
spqlib.sparql2Treemap = function ( config ) {
if ( !config.sparqlWithPrefixes && config.sparql && config.queryPrefixes ) {
config.sparqlWithPrefixes = spqlib.util.addPrefixes( config.sparql, config.queryPrefixes );
}
this.util.doQuery( config.endpoint, config.endpointName, config.sparqlWithPrefixes, spqlib.treemap.render, config, spqlib.treemap.preQuery, spqlib.treemap.failQuery );
};
var my = { };
my.chartImpl = function () {
return spqlib.d3();
};
my.exportAsImage = function () {
};
my.toggleFullScreen = function ( graphId ) {
var graphDiv = $( '#' + graphId + '-container' ),
cssClass = this.config.divCssClass,
cssClassFullScreen = this.config.divCssClassFullScreen;
graphDiv.toggleClass( cssClass );
graphDiv.toggleClass( cssClassFullScreen );
this.resize( this.res, this.config );
};
my.preQuery = function ( configuration ) {
$( '#' + configuration.divId + '-legend' ).hide();
if ( configuration.spinnerImagePath ) {
$( '#' + configuration.divId ).html( "<div class='loader'><img src='" + configuration.spinnerImagePath + "' style='vertical-align:middle;'></div>" );
} else {
$( '#' + configuration.divId ).html( 'Loading...' );
}
};
my.failQuery = function ( configuration, jqXHR, textStatus ) {
$( '#' + configuration.divId ).html( '' );
$( '#' + configuration.divId ).html( spqlib.util.generateErrorBox( textStatus ) );
throw new Error( 'Error invoking sparql endpoint ' + textStatus + ' ' + JSON.stringify( jqXHR ) );
};
/**
* funzione di callback di default dopo la chiamata ajax all'endpoint sparql.
*/
my.render = function ( json, config ) {
$( '#' + config.divId + '-legend' ).show();
$( '#' + config.divId ).html( '' );
var head = json.head.vars,
data = json.results.bindings;
if ( !head || head.length < 2 ) {
throw 'Too few fields in sparql result. Need at least 2 columns';
}
var parent_label_field = head[ 0 ],
child_label_field = head[ 1 ],
value_field = ( head[ 2 ] ? head[ 2 ] : false ),
obj = {};
for ( var i = 0; i < data.length; i++ ) {
var parent = spqlib.util.getSparqlFieldValue( data[ i ][ parent_label_field ] );
if ( !obj[ parent ] ) {
obj[ parent ] = { name: parent, children: [] };
}
var child = spqlib.util.getSparqlFieldValue( data[ i ][ child_label_field ] ),
val = 1;
if ( value_field ) {
val = spqlib.util.getSparqlFieldValueToNumber( data[ i ][ value_field ] );
if ( val == '' ) { val = 1; }
}
if ( !obj[ child ] ) {
obj[ child ] = { name: parent, children: [], value: val };
}
obj[ parent ].children.push( child );
}
var root = config.rootElement,
res = createStructure( root, obj, config ),
chartId = config.divId,
chart = {
res: res,
config: config,
resize: spqlib.treemap.chartImpl().drawTreemap,
toggleFullScreen: spqlib.treemap.toggleFullScreen
};
$( '#headertabs ul li a' ).on(
'click',
function ( event, ui ) {
var tabDivId = $( this ).attr( 'href' ),
t = $( tabDivId ).find(
'.sparqlresultformat-treemap' );
t.each( function () {
var id = $( this ).attr( 'id' ),
c = spqlib.getById( id );
if ( c ) {
c.resize(c.res,c.config);
}
} );
} );
spqlib.treemap.chartImpl().drawTreemap( res, config );
spqlib.addToRegistry( chartId, chart );
};
function createStructure( elem, obj, config ) {
var res = { name: elem, children: [] };
if ( obj[ elem ].children.length == 0 ) {
// è una foglia
var url = '',
linkPattern = config.leavesLinkPattern;
if ( linkPattern ) {
url = spqlib.util.formatString( linkPattern, elem );
} else if ( config.linkBasePath ) {
url = config.linkBasePath + elem;
}
return { name: elem, value: obj[ elem ].value, url: url };
}
for ( var i = 0; i < obj[ elem ].children.length; i++ ) {
var child = obj[ elem ].children[ i ];
res.children.push( createStructure( child, obj, config ) );
}
return res;
}
return my;
}() );