80e10f6a1634aa05d2e5ca6fda90a94fad8ee961
[mkws-moved-to-github.git] / examples / htdocs / tester.html
1 <!doctype html>
2 <html>
3
4 <head>
5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6 <title>MKWS demo: Reference & Credo, and popup widget, development</title>
7 <link rel="stylesheet" type="text/css" href="tools/htdocs/mkws.css" />
8 <link rel="stylesheet" type="text/css" href="//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css" />
9 <link rel="stylesheet" type="text/css" href="mkws-widget-reference.css" />
10 <link rel="stylesheet" type="text/css" href="mkws-widget-credo.css" />
11 <link rel="stylesheet" type="text/css" href="mkws-widget-ru.css" />
12
13 <script type="text/javascript">
14   var mkws_config = {
15     sp_auth_credentials: "mkwstest/mkwstest"
16   };
17 </script>
18
19 <script type="text/javascript" src="tools/htdocs/jquery-1.10.0.min.js"></script>
20 <script type="text/javascript" src="//code.jquery.com/ui/1.11.2/jquery-ui.min.js"></script>
21
22 <script type="text/javascript" src="tools/htdocs/pz2.js"></script>
23 <script type="text/javascript" src="tools/htdocs/handlebars-v2.0.0.js"></script>
24 <script type="text/javascript" src="tools/htdocs/jquery.json-2.4.js"></script>
25 <script type="text/javascript" src="tools/htdocs/jsnlog.min.js"></script>
26
27 <script type="text/javascript" src="src/mkws-handlebars.js"></script>
28 <script type="text/javascript" src="src/mkws-core.js"></script>
29 <script type="text/javascript" src="src/mkws-team.js"></script>
30 <script type="text/javascript" src="src/mkws-filter.js"></script>
31 <script type="text/javascript" src="src/mkws-widget.js"></script>
32 <script type="text/javascript" src="src/mkws-widget-main.js"></script>
33 <script type="text/javascript" src="src/mkws-widget-facets.js"></script>
34 <script type="text/javascript" src="src/mkws-widget-authname.js"></script>
35 <script type="text/javascript" src="src/mkws-widget-categories.js"></script>
36 <script type="text/javascript" src="src/mkws-widget-log.js"></script>
37 <script type="text/javascript" src="src/mkws-widget-record.js"></script>
38 <script type="text/javascript" src="src/mkws-widget-reference.js"></script>
39 <script type="text/javascript" src="src/mkws-widget-builder.js"></script>
40 <script type="text/javascript" src="src/mkws-templates.js"></script>
41 <script type="text/javascript" src="src/mkws-popup.js"></script>
42
43 <script type="text/javascript" src="mkws-widget-credo.js"></script>
44 <script type="text/javascript" src="mkws-widget-ru.js"></script>
45
46 <style>
47 .dialog > textarea {
48   height: 100%;
49   width: 100%;
50 }
51 html {
52   margin: 0;
53   height: 100%;
54 }
55 body {
56   background-color: #888892;
57   margin: 0;
58   padding: 0;
59   display: flex;
60   flex-direction: column;
61   height: 100%;
62 }
63 header {
64   font-size: 1.3em;
65 }
66 #top-bar, #current-bar {
67   padding: .5em;
68   display: flex;
69   align-items: center;
70   justify-content: space-between;
71 }
72 #top-bar {
73   background-color: #002868;
74   color: white;
75 }
76 #current-bar {
77   background-color: #54d8a8;
78   color: #002868;
79 }
80 header button {
81   margin-left: 1em;
82   border-radius: 4px;
83   background-color: #4368a1;
84   color: #dbe9ff;
85   font: inherit;
86   font-weight: normal;
87   border: 1px solid #7492c3;
88   padding: 0.15em 0.25em;
89 }
90 header button:hover, header button:active, header button:focus {
91   background-color: #2f5591;
92 }
93 #maybe {
94   background-color: #F0AD4E;
95   border-color: #EEA236;
96   color: #664009;
97   color: white;
98 }
99 #maybe:hover, #maybe:active, #maybe:focus {
100   background-color: #EC971F;
101   border-color: #D58512;
102 }
103 #yes {
104   background-color: #5CB85C;
105   border-color: #4CAE4C;
106   color: #214d21;
107   color: white;
108 }
109 #yes:hover, #yes:focus, #yes:active {
110   background-color: #449D44;
111   border-color: #398439;
112 }
113 #no {
114   background-color: #D9534F;
115   border-color: #D43F3A;
116   color: #4f1311;
117   color: white;
118 }
119 #no:hover, #no:focus, #no:active {
120   background-color: #C9302C;
121   border-color: #AC2925;
122 }
123 #query {
124   font-weight: bold;
125   font-size: 110%;
126 }
127 #settings, #judiciary {
128   flex: 1;
129   display: flex;
130   align-items: center;
131 }
132 #results, #query-info {
133   flex: 1;
134   display: flex;
135   text-align: right;
136   align-items: center;
137   justify-content: flex-end;
138 }
139 #count {
140   font-size: 120%;
141 }
142 #test-area {
143   flex: 1;
144   padding: 1em;
145   display: flex;
146   justify-content: center;
147   align-items: center;
148   overflow: auto;
149 }
150 #results-table {
151   flex: 1;
152   padding: 1em;
153   display: flex;
154   justify-content: center;
155 }
156 #results-table table {
157   border-collapse: collapse;
158   border-spacing: 0;
159 }
160 #results-table td, #results-table th {
161   padding: .25em 1.25em;
162   font-size: .9em;
163 }
164 #results-table tr:first-child {
165   border-bottom: 1px solid black;
166 }
167 #results-table tr {
168   border-bottom: 1px dotted black;
169 }
170 #results-table tr:last-child {
171   border-bottom: none;
172 }
173   
174 </style>
175
176 </head>
177
178 <body>
179 <header>
180   <div id="top-bar">
181     <span id="settings">
182       Settings:
183       <button id="widget-markup-button">Widget</button>
184       <button id="queries-button">Queries</button>
185     </span>
186     <span id="results">
187       Results:
188       <button id="results-table-button">Table</button>
189       <button id="results-csv-button">| delimited</button>
190     </span>
191   </div>
192 </header>
193
194 <header id="current-bar">
195   <span id="judiciary">
196     Relevant to query <span id="query"></span>?
197     <button id="yes" class="judgement">Yes</button>
198     <button id="no" class="judgement">No</button>
199     <button id="maybe" class="judgement">Maybe</button>
200   </span>
201   <span id="query-info">
202     <span id="count"></span>
203   </span>
204 </header>
205
206 <div id="widget-markup" class="dialog" title="Widget markup">
207   <textarea></textarea>
208 </div>
209 <div id="queries" class="dialog" title="Queries">
210   <textarea></textarea>
211 </div>
212 <div id="results-csv" class="dialog" title="| delimited results">
213   <textarea readonly></textarea>
214 </div>
215 <div id="results-table" class="dialog" title="Results as table">
216   <table></table>
217 </div>
218
219 <div id="test-area">
220   <div id="test-subject"></div>
221 </div>
222
223 <script>
224 (function () { // wrapper
225 // Initial data
226 this.queries = ["sushi", "wurst", "berlin", "hammer", "bristol", "copenhagen", "tea", "latte"];
227 this.widgetMarkup = '<div class="mkws-reference" autosearch="{{query}}">Loading..</div>';
228 if (localStorage.getItem('mkwstest-queries')) {
229   this.queries = JSON.parse(localStorage.getItem('mkwstest-queries'));
230 }
231 if (localStorage.getItem('mkwstest-widget-markup')) {
232   this.widgetMarkup = localStorage.getItem('mkwstest-widget-markup');
233 }
234 $("#queries > textarea").html(this.queries.join("\n"));
235 $("#widget-markup > textarea").html(this.widgetMarkup);
236
237 this.results = {};
238 var next = 0;
239 if (localStorage.getItem('mkwstest-results')) {
240   this.results = JSON.parse(localStorage.getItem('mkwstest-results'));
241 }
242 if (localStorage.getItem('mkwstest-next') !== null) {
243   next = parseInt(localStorage.getItem('mkwstest-next'));
244 }
245
246 var context = this;
247
248 var showNext = function () {
249   if (next <  this.queries.length) {
250     $('#test-subject').html(this.widgetMarkup.replace("{{query}}", this.queries[next]));
251     $('#query').html('"' + this.queries[next] + '"');
252     localStorage.setItem("mkwstest-next", next);
253     next++;
254     $('#count').html(next + " / " + this.queries.length);
255     mkws.init('#test-subject');
256   } else {
257     $("#results-table").dialog("open");
258   }
259
260 var startEval = function () {
261   $(".dialog").dialog("close");
262   next = 0;
263   context.results = {};
264   showNext();
265 }
266 var judge = function (e) {
267   var query = $('#test-subject > div').attr('autosearch');
268   context.results[query] = {judgement: $(this).html()};
269   localStorage.setItem("mkwstest-results", JSON.stringify(context.results));
270   showNext();
271 }
272
273 // Set up dialogs
274 $(".dialog").dialog({
275   autoOpen: false,
276   height: 600,
277   width: 600,
278   modal: true,
279   open: function(event, ui) {
280     $(this).parent().css('position', 'fixed');
281   }
282 });
283
284 // Markup dialog
285 var updateMarkup = function () {
286   context.widgetMarkup = $("#widget-markup > textarea").val();
287   localStorage.setItem("mkwstest-widget-markup", context.widgetMarkup);
288   startEval();
289 }
290 $("#widget-markup-button").click(function () {
291   $("#widget-markup").dialog("open");
292 });
293 $("#widget-markup").dialog("option", "buttons", [
294   {text: "Start new evaluation", click: updateMarkup},
295   {text: "Cancel", click: function() { $(this).dialog("close"); }}   
296 ]);
297
298 // Queries dialog
299 var updateQueries = function () {
300   context.queries = $("#queries > textarea").val().split("\n");
301   localStorage.setItem("mkwstest-queries", JSON.stringify(context.queries));
302   startEval();
303 }
304 $("#queries-button").click(function () {
305   $("#queries").dialog("open");
306 });
307 $("#queries").dialog("option", "buttons", [
308   {text: "Start new evaluation", click: updateQueries},
309   {text: "Cancel", click: function() { $(this).dialog("close"); }}   
310 ]);
311
312 // Results dialogs
313 $("#results-table-button").click(function () {
314   $("#results-table").dialog("open");
315 });
316 $("#results-csv-button").click(function () {
317   $("#results-csv").dialog("open");
318 });
319 $("#results-table").dialog("option", "open", function () {
320   var html = "<tr><th>Query</th><th>Relevant?</th><tr>";
321   for (var i = 0; i < context.queries.length; i++) {
322     var q = context.queries[i];
323     var r = context.results;
324     if (r[q]) {
325       html += "<tr><td>" + q + "</td><td>" + r[q].judgement + "</td></tr>\n";
326     }
327   } 
328   $("#results-table > table").html(html);
329 });
330 $("#results-csv").dialog("option", "open", function () {
331   var csv = "Query|Relevant?\n";
332   for (var i = 0; i < context.queries.length; i++) {
333     var q = context.queries[i];
334     var r = context.results;
335     if (r[q]) {
336       csv += [q, r[q].judgement].join("|") + "\n";
337     }
338   } 
339   $("#results-csv > textarea").html(csv);
340 });
341
342 $('button.judgement').click(judge);
343 showNext();
344 })();// wrapper
345 </script>
346
347 </body>
348 </html>
349