source: main/trunk/model-sites-dev/von-sparql/js/von-sparql-comparison-setup.js@ 28914

Last change on this file since 28914 was 28914, checked in by ak19, 10 years ago

Supporting javascript libraries and bespoke code written by Steffan to support the von-sparql user interface

File size: 6.6 KB
Line 
1var sparqlEndpoint= location.protocol + '//' + location.hostname + ":3030/greenstone/query" ;
2var collectionName = gs.cgiParams.c;
3
4var comparisonQuery;
5var hardLimit = 2000;
6var defaultChartWidth = 468;
7var defaultChartHeight = 200;
8var currentQueries = 0;
9
10var leftCollection = "nz-natlib-cat";
11var rightCollection = "hathitrust-tab";
12
13//Contains details about a comparison
14function ComparisonQuery(){
15 this.page = 1;
16 this.datasetSelection = "";
17 this.type = "intersection";
18 this.pred_L = $('#sel_leftPredicate').val();
19 this.predval_L = $('#sel_leftPredicateValue').val();
20 this.refine_L = "";
21 if($('#cb_leftRefineSearch').is(':checked'))
22 this.refine_L = " <" + $('#sel_leftVisualizePredicate').val();// + "> ?common";
23
24 this.pred_R = $('#sel_rightPredicate').val();
25 this.predval_R = $('#sel_rightPredicateValue').val();
26 this.refine_R = "";
27 if($('#cb_rightRefineSearch').is(':checked'))
28 this.refine_R = " <" + $('#sel_rightVisualizePredicate').val();// + "> ?common";
29 $('#span_PageNum').text("1");
30}
31
32function setupPage(){
33 sgvizler_setup();
34 drawSide("left",leftCollection);
35 apply_functions("left",leftCollection);
36 drawSide("right",rightCollection);
37 apply_functions("right",rightCollection);
38 apply_styles();
39 populatePredicateSelector("all", "sel_comparisonPredicate");
40}
41
42//Redraw a side, given the collection name
43function drawSide(side, collectionName){
44 $('#span_' + side + 'Name').html(collectionName);
45 drawOverview(collectionName, ("div_" + side + "Overview"));
46 populatePredicateSelector(collectionName, ("sel_" + side + "Predicate"));
47}
48
49//Draw predicates available for dataset
50function drawOverview(collection, container){
51 var Q = new sgvizler.Query();
52 Q.query(createOverviewQuery(collection))
53 .endpointURL(sparqlEndpoint)
54 .endpointOutputFormat("json")
55 .chartFunction("google.visualization.Table")
56 .draw(container);
57}
58
59//Return a query that searches for all uses of predicates in a graph
60function createOverviewQuery(collection){
61 var Query = "PREFIX gsdl: <http://localhost:3030/greenstone/data/>"
62 +"SELECT (?p as ?Predicate) (COUNT (?s) as ?Total)WHERE\n"
63 + "{\n";
64 if(collection=="all")
65 Query += "?s ?p ?o ";
66 else
67 Query += "GRAPH gsdl:" + collection + "{"
68 + " ?s ?p ?o "
69 + "}";
70 Query += "}"
71 + "GROUP BY ?p "
72 + "ORDER BY DESC(?Predicate)";
73 return Query;
74}
75
76function sgvizler_setup(){
77 sgvizler
78 .defaultEndpointOutputFormat('jsonp')
79 .defaultChartWidth(defaultChartWidth)
80 .defaultChartHeight(defaultChartHeight)
81 .prefix('dc', "http://purl.org/dc/elements/1.1/")
82 .prefix('xsd', "http://www.w3.org/2001/XMLSchema#")
83 .prefix('gsdl', "http://localhost:3030/greenstone/data/")
84}
85
86function apply_styles(){
87 $('.basicControls tbody tr td:first-child').addClass("alignRight");
88 $('.refineControls tbody tr td:first-child').addClass("alignRight");
89 $('.refineControls').toggle();
90 $('#txt_comparisonPredicate').val("http://purl.org/dc/elements/1.1/Title");
91 $('#div_resultPredicates').toggle();
92 $('#cb_showOnlyCommonObjects').attr('checked','checked');
93 $('#cb_showOnlyCommonObjects').on('click', function(){
94 $('#div_resultPredicates').toggle();
95 });
96
97 $('#btn_submitComparison').on('click',function(){
98 drawComparisonTable();
99 });
100
101 $('#btn_comparisonPagePrev').on('click',function(){
102 if(comparisonQuery.page <= 1)
103 return;
104 $('#span_PageNum').text(--comparisonQuery.page)
105 drawComparisonTable();
106 });
107
108 $('#btn_comparisonPageNext').on('click',function(){
109 $('#span_PageNum').text(++comparisonQuery.page)
110 drawComparisonTable();
111 });
112
113 $('#btn_exportCSV').on('click',function(){
114 var csv = $('#div_combinedResultsVisualization table').table2CSV({
115 delivery: 'value'
116 });
117 var vendorName = window.navigator.vendor;
118 if(vendorName == "Google Inc.") {
119 // is Google chrome
120 window.location.href = 'data:text/csv;charset=UTF-8,' + encodeURIComponent(csv);
121 }
122 else{
123 alert("-----Use Google Chrome to save file to disk.-----\n\n" + csv);
124 }
125 });
126}
127
128//Apply functions to various elements
129function apply_functions(side, collection){
130
131 //Create jquery UI comboboxes
132 $('#div_' + side + 'RefineControls select').combobox({
133 select: function(event, ui) {
134 var id = event.target.id;
135 if(id == "sel_" + side + "Predicate")
136 updateValueSelector(this.value,"sel_"+ side + "PredicateValue", collection);
137 }
138 });
139
140 $('#btn_' + side + 'ShowChart').on('click',function(){
141 hardLimit=2000;
142 drawFilteredDataset(side, collection);
143 });
144
145 $('#btn_' + side + 'ShowQuery').on('click',function(){
146 hardLimit=2000;
147 alert(generateQuery(side,collection));
148 });
149
150 $('#btn_' + side + 'SubmitQuery').on('click',function(){
151 paper.install(window);
152 var color = updateCircle(side);
153 comparisonQuery = new ComparisonQuery();
154 $('#div_' + side + 'Indicator').css("background-color",color);
155 });
156
157 //When a <tr> in overview table is selected, select in predicate dropdown
158 $('#div_' + side + 'Overview.overview tr').live("click", function(){
159 var clickedText = tidyPredicate($(this).children(":first").text());
160 $('#sel_' + side + 'Predicate option[text="' + clickedText + '"]').attr('selected','selected');
161 $('#sel_' + side + 'Predicate option').filter(function(){
162 return $(this).text() == clickedText;
163 }).attr('selected', true);
164
165 $('#sel_' + side + 'Predicate').siblings('.custom-combobox').find('.custom-combobox-input').val(clickedText);
166 updateValueSelector($('#sel_' + side + 'Predicate option:selected').val(),"sel_"+ side + "PredicateValue", collection);
167
168 if($('#cb_quickSearch').is(':checked')) {
169 hardLimit=500;
170 drawFilteredDataset(side, collection);
171 }
172
173 //When TD is selected, highlight similar TD's in opposite table
174 showSimilarPredicates(side,$(this).children(":first").text());
175 });
176
177 $('#cb_' + side + 'RefineSearch').on('click', function(){
178 $('#table_' + side + 'RefineControls').toggle();
179 });
180
181 $('#sel_' + side + 'Collection').on('change',function(){
182 if(side=="left")
183 leftCollection = $('#sel_' + side + 'Collection').val();
184 else
185 rightCollection = $('#sel_' + side + 'Collection').val();
186
187 drawSide(side, $('#sel_' + side + 'Collection').val());
188 });
189}
190function showSimilarPredicates(side,clickedText){
191
192 var oppositeSide;
193 if(side == "left")
194 oppositeSide = "right";
195 else
196 oppositeSide = "left";
197
198 $('#div_' + oppositeSide + 'Overview.overview tr').each(function(){
199 if($(this).children(":first").text() == clickedText)
200 $(this).children(":first").addClass("bold");
201 else
202 $(this).children(":first").removeClass("bold");
203
204 });
205
206 $('#div_' + side + 'Overview.overview tr').each(function(){
207 if($(this).children(":first").text() == clickedText)
208 $(this).children(":first").addClass("bold");
209 else
210 $(this).children(":first").removeClass("bold");
211 });
212}
Note: See TracBrowser for help on using the repository browser.