blob: 24c234890b7f066ddddcad2a053e3e81069f416b [file] [log] [blame]
Akron7524be12016-06-01 17:31:33 +02001/*
Akron5cb9b2b2018-07-24 17:01:09 +02002 * Initialize The JS frontend part and decorate
3 * the static HTML data.
4 *
5 * @author Nils Diewald
6 *
Akron7524be12016-06-01 17:31:33 +02007 * TODO: Create lazy loading of objects including
8 * - obj.hint()
9 * - obj.alertify()
10 * - obj.session()
11 * - obj.tutorial()
12 * - obj.vc() // toggle
13 * - obj.matchCreate() (using webpack)
14 * - obj.koral() (show result, parse for errors ...)
15 * - obj.alignment() // toggle
16 */
17
Helgeef0a26e2023-11-22 16:59:17 +010018
Akrone51eaa32020-11-10 09:35:53 +010019"use strict";
Nils Diewald0e6992a2015-04-14 20:13:52 +000020define([
21 'match',
22 'hint',
23 'vc',
24 'tutorial',
25 'lib/domReady',
Akron27ae9ec2015-06-23 00:43:21 +020026 'vc/array',
Nils Diewald7148c6f2015-05-04 15:07:53 +000027 'lib/alertify',
Akron7716f012015-07-01 20:38:32 +020028 'session',
Akronda32e7a2021-11-16 17:28:57 +010029 'state/manager',
Akron6bb71582016-06-10 20:41:08 +020030 'selectMenu',
Akron5cb9b2b2018-07-24 17:01:09 +020031 'panel/result',
Akron2d0d96d2019-11-18 19:49:50 +010032 'panel/query',
Akron644ad9f2021-07-26 16:12:59 +020033 'panel/pagination',
hebasta75cfca52019-02-19 13:15:27 +010034 'tour/tours',
Akron24f48ea2020-07-01 09:37:19 +020035 'plugin/server',
36 'pipe',
Nils Diewald7148c6f2015-05-04 15:07:53 +000037 'api',
Nils Diewaldc46003b2015-05-07 15:55:35 +000038 'mailToChiffre',
Akron858cbc82019-12-05 16:53:13 +010039 'util',
40 'state'
Nils Diewald0e6992a2015-04-14 20:13:52 +000041], function (matchClass,
Akron19d97fe2016-09-06 20:47:05 +020042 hintClass,
43 vcClass,
44 tutClass,
45 domReady,
Akron19d97fe2016-09-06 20:47:05 +020046 vcArray,
47 alertifyClass,
48 sessionClass,
Akronda32e7a2021-11-16 17:28:57 +010049 stateManagerClass,
Akron4d926f12018-07-16 15:30:25 +020050 selectMenuClass,
hebasta75cfca52019-02-19 13:15:27 +010051 resultPanelClass,
Akron2d0d96d2019-11-18 19:49:50 +010052 queryPanelClass,
Akron644ad9f2021-07-26 16:12:59 +020053 paginationPanelClass,
Akron24f48ea2020-07-01 09:37:19 +020054 tourClass,
55 pluginClass,
56 pipeClass) {
Nils Diewalda0defc42015-05-07 23:54:17 +000057
Akron0b489ad2018-02-02 16:49:32 +010058 const d = document;
Akron9cc3eaf2015-06-10 22:15:52 +020059
Akronbc6b3f22021-01-13 14:53:12 +010060 // Set base URL
61 KorAP.URL = d.body.getAttribute('data-korap-url') || "";
62
63 // Get koralQuery response
64 const kqe = d.getElementById('koralQuery');
65 if (kqe !== null) {
66 KorAP.koralQuery = JSON.parse(kqe.getAttribute('data-koralquery') || "");
67 };
68
Akron0c4cd222019-07-19 16:33:34 +020069 // Create suffix if KorAP is run in a subfolder
70 KorAP.session = sessionClass.create(
71 KorAP.URL.length > 0 ? 'kalamarJS-' + KorAP.URL.slugify() : 'kalamarJS'
72 );
Akronf8035592018-05-24 20:40:51 +020073
Nils Diewalda0defc42015-05-07 23:54:17 +000074 // Override KorAP.log
75 window.alertify = alertifyClass;
Akronc0a2da82018-07-04 15:27:37 +020076 KorAP.log = function (code, msg, src) {
77
78 if (src) {
79 msg += '<code class="src">'+src+'</code>';
80 };
Nils Diewalda0defc42015-05-07 23:54:17 +000081
82 // Use alertify to log errors
83 alertifyClass.log(
Akronf55504a2015-06-18 16:42:55 +020084 (code === 0 ? '' : code + ': ') +
Akron19d97fe2016-09-06 20:47:05 +020085 msg,
Nils Diewalda0defc42015-05-07 23:54:17 +000086 'error',
Akronf55504a2015-06-18 16:42:55 +020087 10000
Nils Diewalda0defc42015-05-07 23:54:17 +000088 );
89 };
90
hebasta2758b582018-11-19 15:59:42 +010091 KorAP.vc = vcClass.create(vcArray);
Akron690066c2021-01-22 17:39:18 +010092
93 let gt;
94 if (gt = document.getElementById('link-guided-tour')) {
95 gt.setAttribute('href', '#');
96 gt.addEventListener('click', function(){
97 tourClass.gTstartSearch().start();
98 });
Helgeef0a26e2023-11-22 16:59:17 +010099
Akron690066c2021-01-22 17:39:18 +0100100 KorAP.tourshowR = function(){
101 tourClass.gTshowResults().start();
102 };
hebasta5df796f2019-05-21 15:27:12 +0200103 };
Akroncb5c1712021-01-26 18:01:04 +0100104
Helgeef0a26e2023-11-22 16:59:17 +0100105
106 addHintM = function(scripte, file){
107 KorAP.annotationHelper = KorAP.annotationHelper || { '-' : [] };
108 let scriptEl = scripte;
109 scriptEl.setAttribute("type", "text/javascript");
110 scriptEl.setAttribute("async", "async");
111 scriptEl.setAttribute("defer", "defer");
112 scriptEl.setAttribute("src", "require.js");
113 scriptEl.setAttribute("data-main", file);
114 document.getElementsByTagName("head")[0].appendChild(scriptEl);
115 };
116
Nils Diewald0e6992a2015-04-14 20:13:52 +0000117 domReady(function (event) {
Helgeef0a26e2023-11-22 16:59:17 +0100118
Nils Diewald0e6992a2015-04-14 20:13:52 +0000119 var obj = {};
Akron71b91e42016-06-01 22:12:43 +0200120
Akron4d926f12018-07-16 15:30:25 +0200121 // What should be visible in the beginning?
Akronf8035592018-05-24 20:40:51 +0200122 var show = KorAP.session.get('show') || {};
Helgeef0a26e2023-11-22 16:59:17 +0100123
hebasta043e96f2019-11-28 12:33:00 +0100124 KorAP.Panel = KorAP.Panel || {}
Nils Diewalda297f062015-04-02 00:23:46 +0000125
Helgeef0a26e2023-11-22 16:59:17 +0100126 var scriptElement =document.createElement("script")
127 fetch("kalamar.conf.js", { method: "HEAD" })
128 .then(response => {
129 if (response.ok) {
130 addHintM(scriptElement, "kalamar.conf.js");
131 } else {
132 addHintM(scriptElement, "default.js");
133 }
134 })
135 .catch(error => {
136 KorAP.log(0, "No kalamar.conf.js or default.js file");
137 });
138
Nils Diewalda297f062015-04-02 00:23:46 +0000139 /**
Akronf55504a2015-06-18 16:42:55 +0200140 * Release notifications
141 */
Akroncb5c1712021-01-26 18:01:04 +0100142 d.querySelectorAll('#notifications div.notify').forEach(
143 function(e) {
144 let msg = e.textContent;
145
146 let src = e.getAttribute('data-src');
147 if (src) {
148 msg += '<code class="src">'+src+'</code>';
Akron8ea84292018-10-24 13:41:52 +0200149 };
Akroncb5c1712021-01-26 18:01:04 +0100150
151 let type = e.getAttribute('data-type') || "error";
152 alertifyClass.log(msg, type, 10000);
153 }
154 );
Akronf55504a2015-06-18 16:42:55 +0200155
156 /**
Akroncd42a142019-07-12 18:55:37 +0200157 * Replace Virtual Corpus field
Nils Diewald7148c6f2015-05-04 15:07:53 +0000158 */
Akron5c829e92017-05-12 18:10:00 +0200159 var vcname, vcchoose;
Akroncd42a142019-07-12 18:55:37 +0200160 var input = d.getElementById('cq');
Akron1f0521b2018-08-28 13:01:24 +0200161
hebasta2758b582018-11-19 15:59:42 +0100162 var vc = KorAP.vc;
hebasta48842cf2018-12-11 12:57:38 +0100163
Akron1f0521b2018-08-28 13:01:24 +0200164 // Add vc name object
Nils Diewald7148c6f2015-05-04 15:07:53 +0000165 if (input) {
166 input.style.display = 'none';
Akron0b489ad2018-02-02 16:49:32 +0100167 vcname = d.createElement('span');
Nils Diewald7148c6f2015-05-04 15:07:53 +0000168 vcname.setAttribute('id', 'vc-choose');
Akron6bb71582016-06-10 20:41:08 +0200169 vcname.classList.add('select');
Akron941551e2015-06-11 16:06:22 +0200170
Akron1f0521b2018-08-28 13:01:24 +0200171 // Load virtual corpus object
Akroncd42a142019-07-12 18:55:37 +0200172 // Supports "collection" for legacy reasons
173 if (KorAP.koralQuery !== undefined && (KorAP.koralQuery["collection"] || KorAP.koralQuery["corpus"])) {
Akron1f0521b2018-08-28 13:01:24 +0200174 try {
Akroncd42a142019-07-12 18:55:37 +0200175 vc.fromJson(KorAP.koralQuery["collection"] || KorAP.koralQuery["corpus"]);
Akron1f0521b2018-08-28 13:01:24 +0200176 }
177 catch (e) {
178 KorAP.log(0,e);
179 }
Akron27ae9ec2015-06-23 00:43:21 +0200180 };
181
Akron0b489ad2018-02-02 16:49:32 +0100182 vcchoose = vcname.addE('span');
Akronec6bb8e2018-08-29 13:07:56 +0200183 vcchoose.addT(vc.getName());
Akron27ae9ec2015-06-23 00:43:21 +0200184
Akron1f0521b2018-08-28 13:01:24 +0200185 if (vc.wasRewritten()) {
186 vcchoose.classList.add('rewritten');
187 };
188
Nils Diewald7148c6f2015-05-04 15:07:53 +0000189 input.parentNode.insertBefore(vcname, input);
190 };
191
Nils Diewald7148c6f2015-05-04 15:07:53 +0000192 /**
Nils Diewalda297f062015-04-02 00:23:46 +0000193 * Add actions to match entries
194 */
Akronb50964a2020-10-12 11:44:37 +0200195 var matchElements = d.querySelectorAll(
Akron3c390c42020-03-30 09:06:21 +0200196 '#search > ol > li'
Nils Diewald5c5a7472015-04-02 22:13:38 +0000197 );
Akron6a535d42015-08-26 20:16:58 +0200198
Akronb50964a2020-10-12 11:44:37 +0200199 matchElements.forEach(function(e) {
Akron3c390c42020-03-30 09:06:21 +0200200
201 // Define class for active elements
202 if (e.classList.contains('active')) {
Akrond769d702021-08-16 11:09:08 +0200203 if (e._match === undefined) {
Akron19d97fe2016-09-06 20:47:05 +0200204 // lazyLoad
Akron3c390c42020-03-30 09:06:21 +0200205 matchClass.create(e).init();
Akron19d97fe2016-09-06 20:47:05 +0200206 };
Akron3c390c42020-03-30 09:06:21 +0200207 }
208
209 // Define class for inactive elements
210 else {
211 e.addEventListener('click', function (e) {
Akron19d97fe2016-09-06 20:47:05 +0200212 if (this._match !== undefined)
Akron3c390c42020-03-30 09:06:21 +0200213 this._match.open();
Akron19d97fe2016-09-06 20:47:05 +0200214 else {
215 // lazyLoad
216 matchClass.create(this).open();
217 };
Akron3c390c42020-03-30 09:06:21 +0200218 // This would prevent the sidebar to go back
219 // e.halt();
220 });
221 e.addEventListener('keydown', function (e) {
222 var code = _codeFromEvent(e);
223
224 switch (code) {
225 case 32:
226 if (this._match !== undefined)
227 this._match.toggle();
228 else {
229 // lazyLoad
230 matchClass.create(this).open();
231 };
232 e.halt();
233 break;
234 };
235 });
236 };
Akrond769d702021-08-16 11:09:08 +0200237 });
Akron3c390c42020-03-30 09:06:21 +0200238
Akrone0c32c72017-04-25 22:38:23 +0200239 // Add focus listener to aside
Akron0b489ad2018-02-02 16:49:32 +0100240 var aside = d.getElementsByTagName('aside')[0];
Akrone0c32c72017-04-25 22:38:23 +0200241
242 if (aside && aside.classList.contains('active') == false) {
Akron1885ce92017-04-26 23:10:01 +0200243
Akron5258d462017-04-26 23:32:57 +0200244 // Horrible lock to deal with sidebar clicks
245 var asideClicked = false;
246
Akron1885ce92017-04-26 23:10:01 +0200247 // Make aside active on focus
248 aside.addEventListener('focus', function(e) {
Akrone0c32c72017-04-25 22:38:23 +0200249 this.classList.add('active');
250 });
251
Akron1885ce92017-04-26 23:10:01 +0200252 // Deactivate focus when clicking anywhere else
Akron0b489ad2018-02-02 16:49:32 +0100253 var body = d.getElementsByTagName('body')[0];
Akron1885ce92017-04-26 23:10:01 +0200254 if (body !== null) {
255 body.addEventListener('click', function() {
Akron5258d462017-04-26 23:32:57 +0200256 if (!asideClicked) {
257 aside.classList.remove('active');
258 }
259 else {
260 asideClicked = false;
261 };
Akron1885ce92017-04-26 23:10:01 +0200262 });
263 };
264
265 /* Stop click event on aside
266 * (to not trickle down to body)
267 */
268 aside.addEventListener('click', function(e) {
Akron5258d462017-04-26 23:32:57 +0200269 asideClicked = true;
Akrone0c32c72017-04-25 22:38:23 +0200270 });
271 };
Akronb9cdb102017-04-25 00:52:31 +0200272
273
Akron6bb71582016-06-10 20:41:08 +0200274 // Replace QL select menus with KorAP menus
Akron0b489ad2018-02-02 16:49:32 +0100275 var qlField = d.getElementById('ql-field');
Akronaba7a5a2016-08-15 21:58:33 +0200276 if (qlField !== null) {
Akron086fe5d2017-11-13 14:01:45 +0100277 KorAP.QLmenu = selectMenuClass.create(
Akron0b489ad2018-02-02 16:49:32 +0100278 d.getElementById('ql-field').parentNode
Marc Kupietz95455822023-09-19 20:14:31 +0200279 ).limit(10);
Akronaba7a5a2016-08-15 21:58:33 +0200280 };
Akron6bb71582016-06-10 20:41:08 +0200281
Akron4d926f12018-07-16 15:30:25 +0200282 var resultInfo = d.getElementById('resultinfo');
283
Akron4d926f12018-07-16 15:30:25 +0200284 /**
285 * Add result panel
286 */
Akron5cb9b2b2018-07-24 17:01:09 +0200287 var resultPanel = resultPanelClass.create(show);
Akron644ad9f2021-07-26 16:12:59 +0200288
Akron4d926f12018-07-16 15:30:25 +0200289 if (resultInfo != null) {
Akron4d926f12018-07-16 15:30:25 +0200290
291 // Move buttons to resultinfo
Akron37ea1192021-07-28 10:40:14 +0200292 resultInfo.appendChild(resultPanel.actions().element());
Akron4d926f12018-07-16 15:30:25 +0200293
Akrone6538cd2018-07-16 17:52:33 +0200294 // The views are at the top of the search results
Akron4d926f12018-07-16 15:30:25 +0200295 var sb = d.getElementById('search');
296 sb.insertBefore(resultPanel.element(), sb.firstChild);
Akron4d926f12018-07-16 15:30:25 +0200297 };
298
Akron179c8ac2015-06-30 19:30:50 +0200299 // There is a koralQuery
Helgeef0a26e2023-11-22 16:59:17 +0100300 if (KorAP.koralQuery !== undefined) {
Akron5cb9b2b2018-07-24 17:01:09 +0200301
302 // Add KoralQuery view to result panel
Akron4d926f12018-07-16 15:30:25 +0200303 if (resultInfo !== null) {
Akron5cb9b2b2018-07-24 17:01:09 +0200304 resultPanel.addKqAction()
Akron179c8ac2015-06-30 19:30:50 +0200305 };
Akron7716f012015-07-01 20:38:32 +0200306
Akron00cd4d12016-05-31 21:01:11 +0200307 if (KorAP.koralQuery["errors"]) {
Akron678c26f2020-10-09 08:52:50 +0200308 KorAP.koralQuery["errors"].forEach(function(e) {
Akronf0c31ed2016-06-11 11:27:01 +0200309
Akron19d97fe2016-09-06 20:47:05 +0200310 // Malformed query
Akron4a24b722020-10-13 12:44:25 +0200311 if (e[0] === 302 && e[2] !== undefined) {
Akron19d97fe2016-09-06 20:47:05 +0200312 obj.hint = hintClass.create();
Akron678c26f2020-10-09 08:52:50 +0200313 obj.hint.alert(e[2], e[1]);
Akron19d97fe2016-09-06 20:47:05 +0200314 }
Akronf0c31ed2016-06-11 11:27:01 +0200315
Akron19d97fe2016-09-06 20:47:05 +0200316 // no query
Akron678c26f2020-10-09 08:52:50 +0200317 else if (e[0] === 301) {
Akron19d97fe2016-09-06 20:47:05 +0200318 obj.hint = hintClass.create();
Akron678c26f2020-10-09 08:52:50 +0200319 obj.hint.alert(0, e[1]);
Akron19d97fe2016-09-06 20:47:05 +0200320 }
Akron678c26f2020-10-09 08:52:50 +0200321 });
Akron00cd4d12016-05-31 21:01:11 +0200322 };
Akron179c8ac2015-06-30 19:30:50 +0200323 };
324
Akron5cb9b2b2018-07-24 17:01:09 +0200325
326 /*
327 * There is more than 0 matches, so allow for
328 * alignment toggling (left <=> right)
329 */
Akronb50964a2020-10-12 11:44:37 +0200330 if (matchElements.length > 0)
Akron5cb9b2b2018-07-24 17:01:09 +0200331 resultPanel.addAlignAction();
Nils Diewald7148c6f2015-05-04 15:07:53 +0000332
hebasta043e96f2019-11-28 12:33:00 +0100333 KorAP.Panel['result'] = resultPanel;
Akron5cb9b2b2018-07-24 17:01:09 +0200334 /*
Akroncd42a142019-07-12 18:55:37 +0200335 * Toggle the Virtual Corpus builder
Nils Diewald7148c6f2015-05-04 15:07:53 +0000336 */
337 if (vcname) {
Akronec6bb8e2018-08-29 13:07:56 +0200338 vc.onMinimize = function () {
339 vcname.classList.remove('active');
Akroncd42a142019-07-12 18:55:37 +0200340 delete show['vc'];
Akronec6bb8e2018-08-29 13:07:56 +0200341 };
Nils Diewald6283d692015-04-23 20:32:53 +0000342
Akronec6bb8e2018-08-29 13:07:56 +0200343 vc.onOpen = function () {
344 vcname.classList.add('active');
Akroncfe8ecc2018-11-20 18:46:16 +0100345
346 var view = d.getElementById('vc-view');
347 if (!view.firstChild)
348 view.appendChild(this.element());
349
Akroncd42a142019-07-12 18:55:37 +0200350 show['vc'] = true;
Akronec6bb8e2018-08-29 13:07:56 +0200351 };
352
353 var vcclick = function () {
Akronec6bb8e2018-08-29 13:07:56 +0200354 if (vc.isOpen()) {
355 vc.minimize()
356 }
357 else {
Akronec6bb8e2018-08-29 13:07:56 +0200358 vc.open();
Akron19d97fe2016-09-06 20:47:05 +0200359 };
Nils Diewald58141332015-04-07 16:18:45 +0000360 };
Akron04671e72017-05-11 20:47:32 +0200361
Akron179c8ac2015-06-30 19:30:50 +0200362 vcname.onclick = vcclick;
Akron5c829e92017-05-12 18:10:00 +0200363
364 // Click, if the VC should be shown
Akroncd42a142019-07-12 18:55:37 +0200365 if (show['vc']) {
Akron19d97fe2016-09-06 20:47:05 +0200366 vcclick.apply();
Akron04671e72017-05-11 20:47:32 +0200367 };
Nils Diewald58141332015-04-07 16:18:45 +0000368 };
369
Akron19d97fe2016-09-06 20:47:05 +0200370
Nils Diewald58141332015-04-07 16:18:45 +0000371 /**
372 * Init Tutorial view
373 */
Akron0b489ad2018-02-02 16:49:32 +0100374 if (d.getElementById('view-tutorial')) {
Nils Diewaldfccfbcb2015-04-29 20:48:19 +0000375 window.tutorial = tutClass.create(
Akron0b489ad2018-02-02 16:49:32 +0100376 d.getElementById('view-tutorial'),
Akronf8035592018-05-24 20:40:51 +0200377 KorAP.session
Nils Diewaldfccfbcb2015-04-29 20:48:19 +0000378 );
379 obj.tutorial = window.tutorial;
380 }
Nils Diewald58141332015-04-07 16:18:45 +0000381
Nils Diewaldfccfbcb2015-04-29 20:48:19 +0000382 // Tutorial is in parent
383 else if (window.parent) {
384 obj.tutorial = window.parent.tutorial;
385 };
386
Akron0b489ad2018-02-02 16:49:32 +0100387 // Initialize queries for d
Akron6ed13992016-05-23 18:06:05 +0200388 if (obj.tutorial) {
Akron0b489ad2018-02-02 16:49:32 +0100389 obj.tutorial.initQueries(d);
Nils Diewaldfccfbcb2015-04-29 20:48:19 +0000390
Akron6ed13992016-05-23 18:06:05 +0200391 // Initialize documentation links
Akron0b489ad2018-02-02 16:49:32 +0100392 obj.tutorial.initDocLinks(d);
Akron6ed13992016-05-23 18:06:05 +0200393 };
Nils Diewald61e6ff52015-05-07 17:26:50 +0000394
Nils Diewald845282c2015-05-14 07:53:03 +0000395
Nils Diewald58141332015-04-07 16:18:45 +0000396 /**
Akronc1457bf2015-06-11 19:24:00 +0200397 * Add VC creation on submission.
398 */
Akron0b489ad2018-02-02 16:49:32 +0100399 var form = d.getElementById('searchform');
Akron792f58b2015-07-08 18:59:36 +0200400 if (form !== null) {
Akronc1457bf2015-06-11 19:24:00 +0200401 form.addEventListener('submit', function (e) {
Akron0b489ad2018-02-02 16:49:32 +0100402 var qf = d.getElementById('q-field');
Akron1be6c1c2020-01-07 15:29:58 +0100403
Akron19d97fe2016-09-06 20:47:05 +0200404 // No query was defined
405 if (qf.value === undefined || qf.value === '') {
406 qf.focus();
407 e.halt();
408 KorAP.log(700, "No query given");
409 return;
410 };
Akron1be6c1c2020-01-07 15:29:58 +0100411
Akron19d97fe2016-09-06 20:47:05 +0200412 // Store session information
Akronf8035592018-05-24 20:40:51 +0200413 KorAP.session.set("show", show);
Akron7716f012015-07-01 20:38:32 +0200414
Akron19d97fe2016-09-06 20:47:05 +0200415 if (vc !== undefined) {
416 input.value = vc.toQuery();
Akrond7ad9072019-12-09 07:08:20 +0100417 if (input.value == '')
418 input.removeAttribute('name');
Akron19d97fe2016-09-06 20:47:05 +0200419 }
420 else {
Akrond7ad9072019-12-09 07:08:20 +0100421 input.removeAttribute('value');
422 input.removeAttribute('name');
Akron19d97fe2016-09-06 20:47:05 +0200423 };
Akron1be6c1c2020-01-07 15:29:58 +0100424
425 // This would preferably set the query to be "disabled",
426 // but in that case the query wouldn't be submitted
427 // at all.
428 // Setting the cursor to "progress" fails in current versions
429 // of webkit.
430 qf.classList.add("loading");
431 d.getElementById('qsubmit').classList.add("loading");
Akronc1457bf2015-06-11 19:24:00 +0200432 });
433 };
Helgeef0a26e2023-11-22 16:59:17 +0100434
hebasta5df796f2019-05-21 15:27:12 +0200435 //Starts the guided tour at the next page
436 if(KorAP.session.get("tour")){
437 tourClass.gTshowResults().start();
438 }
Helgeef0a26e2023-11-22 16:59:17 +0100439
Akronc1457bf2015-06-11 19:24:00 +0200440 /**
Nils Diewald58141332015-04-07 16:18:45 +0000441 * Init hint helper
442 * has to be final because of
443 * reposition
444 */
Nils Diewald0e6992a2015-04-14 20:13:52 +0000445 // Todo: Pass an element, so this works with
446 // tutorial pages as well!
Helgeef0a26e2023-11-22 16:59:17 +0100447 scriptElement.onload = function(){
Akron00cd4d12016-05-31 21:01:11 +0200448 if (obj.hint === undefined)
449 obj.hint = hintClass.create();
Helgeef0a26e2023-11-22 16:59:17 +0100450 // Add the hinthelper to the KorAP object to make it manipulatable globally
451 KorAP.Hint = obj.hint;
452 };
Akron2d0d96d2019-11-18 19:49:50 +0100453 /**
454 * Add query panel
455 */
456 var queryPanel = queryPanelClass.create();
457
458 // Get input field
Akron2d0d96d2019-11-18 19:49:50 +0100459 var vcView = d.getElementById('vc-view')
Akron96b97d62023-11-07 15:56:54 +0100460 if (form && vcView) {
Akron2d0d96d2019-11-18 19:49:50 +0100461 // The views are below the query bar
Akron96b97d62023-11-07 15:56:54 +0100462 form.insertBefore(queryPanel.element(), vcView);
Akron2d0d96d2019-11-18 19:49:50 +0100463 KorAP.Panel['query'] = queryPanel;
Akron644ad9f2021-07-26 16:12:59 +0200464 };
465
466
467 /**
468 * Add pagination panel
469 */
470 const paginationPanel = paginationPanelClass.create();
471
472 if (paginationPanel) {
473 paginationPanel.addRandomPage();
474 KorAP.Panel['pagination'] = paginationPanel;
475 };
Akron24f48ea2020-07-01 09:37:19 +0200476
Akrona9c55802021-06-15 11:41:29 +0200477
478 /**
479 * Initialize password toggle.
480 */
481 initCopyToClipboard(d);
482
483
Akron24f48ea2020-07-01 09:37:19 +0200484 /**
Akron116eace2021-06-14 18:02:37 +0200485 * Initialize password toggle.
486 */
Akron1cfde272021-06-14 18:32:39 +0200487 initTogglePwdVisibility(d);
Akron116eace2021-06-14 18:02:37 +0200488
489 /**
Akron24f48ea2020-07-01 09:37:19 +0200490 * Initialize Plugin registry.
491 */
Akron8dda1c62021-01-20 10:27:32 +0100492 let pe;
493 if (pe = d.getElementById("kalamar-plugins")) {
494 let url = pe.getAttribute('data-plugins');
495 if (url !== undefined) {
496 KorAP.API.getPluginList(url, function (json) {
497 if (json && json.length > 0) {
Akronda32e7a2021-11-16 17:28:57 +0100498
499 // Add state manager
Akron96b97d62023-11-07 15:56:54 +0100500 form = d.getElementById("searchform");
501 if (!form) {
502 return;
503 };
504
505 const input = form.addE("input");
Akronda32e7a2021-11-16 17:28:57 +0100506 input.setAttribute("name","state");
507 KorAP.States = stateManagerClass.create(input);
508
Akron8dda1c62021-01-20 10:27:32 +0100509 // Load Plugin Server first
510 KorAP.Plugin = pluginClass.create();
Akron24f48ea2020-07-01 09:37:19 +0200511
Akron8dda1c62021-01-20 10:27:32 +0100512 // Add services container to head
513 d.head.appendChild(KorAP.Plugin.element());
Akron24f48ea2020-07-01 09:37:19 +0200514
Akron8dda1c62021-01-20 10:27:32 +0100515 // Add pipe form
516 KorAP.Pipe = pipeClass.create();
517 d.getElementById("searchform").appendChild(KorAP.Pipe.element());
Akronda32e7a2021-11-16 17:28:57 +0100518
Akron8dda1c62021-01-20 10:27:32 +0100519 try {
520
521 // Register all plugins
522 json.forEach(i => KorAP.Plugin.register(i));
523 }
524 catch (e) {
525 KorAP.log(0, e);
526 }
527 }
528 });
529 };
Akron24f48ea2020-07-01 09:37:19 +0200530 };
Akron8dda1c62021-01-20 10:27:32 +0100531
Nils Diewald58141332015-04-07 16:18:45 +0000532 return obj;
Nils Diewald0e6992a2015-04-14 20:13:52 +0000533 });
hebasta75cfca52019-02-19 13:15:27 +0100534
Nils Diewald0e6992a2015-04-14 20:13:52 +0000535});