blob: 12474c050c5b46265a4bf619c5ad8b7cffa11ff3 [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
Akrone51eaa32020-11-10 09:35:53 +010018"use strict";
Nils Diewald0e6992a2015-04-14 20:13:52 +000019define([
20 'match',
21 'hint',
22 'vc',
23 'tutorial',
24 'lib/domReady',
Akron27ae9ec2015-06-23 00:43:21 +020025 'vc/array',
Nils Diewald7148c6f2015-05-04 15:07:53 +000026 'lib/alertify',
Akron7716f012015-07-01 20:38:32 +020027 'session',
Akronda32e7a2021-11-16 17:28:57 +010028 'state/manager',
Akron6bb71582016-06-10 20:41:08 +020029 'selectMenu',
Akron5cb9b2b2018-07-24 17:01:09 +020030 'panel/result',
Akron2d0d96d2019-11-18 19:49:50 +010031 'panel/query',
Akron644ad9f2021-07-26 16:12:59 +020032 'panel/pagination',
hebasta75cfca52019-02-19 13:15:27 +010033 'tour/tours',
Akron24f48ea2020-07-01 09:37:19 +020034 'plugin/server',
35 'pipe',
Nils Diewald7148c6f2015-05-04 15:07:53 +000036 'api',
Nils Diewaldc46003b2015-05-07 15:55:35 +000037 'mailToChiffre',
Akron858cbc82019-12-05 16:53:13 +010038 'util',
39 'state'
Nils Diewald0e6992a2015-04-14 20:13:52 +000040], function (matchClass,
Akron19d97fe2016-09-06 20:47:05 +020041 hintClass,
42 vcClass,
43 tutClass,
44 domReady,
Akron19d97fe2016-09-06 20:47:05 +020045 vcArray,
46 alertifyClass,
47 sessionClass,
Akronda32e7a2021-11-16 17:28:57 +010048 stateManagerClass,
Akron4d926f12018-07-16 15:30:25 +020049 selectMenuClass,
hebasta75cfca52019-02-19 13:15:27 +010050 resultPanelClass,
Akron2d0d96d2019-11-18 19:49:50 +010051 queryPanelClass,
Akron644ad9f2021-07-26 16:12:59 +020052 paginationPanelClass,
Akron24f48ea2020-07-01 09:37:19 +020053 tourClass,
54 pluginClass,
55 pipeClass) {
Nils Diewalda0defc42015-05-07 23:54:17 +000056
Nils Diewalda0defc42015-05-07 23:54:17 +000057 // Override KorAP.log
58 window.alertify = alertifyClass;
Akrone71bd6d2024-06-11 15:47:39 +020059 KorAP.log = function (code, msg, src, type) {
Akronc0a2da82018-07-04 15:27:37 +020060
61 if (src) {
62 msg += '<code class="src">'+src+'</code>';
63 };
Nils Diewalda0defc42015-05-07 23:54:17 +000064
65 // Use alertify to log errors
66 alertifyClass.log(
Akronf55504a2015-06-18 16:42:55 +020067 (code === 0 ? '' : code + ': ') +
Akron19d97fe2016-09-06 20:47:05 +020068 msg,
Akrone71bd6d2024-06-11 15:47:39 +020069 (type ? type : 'error'),
Akronf55504a2015-06-18 16:42:55 +020070 10000
Nils Diewalda0defc42015-05-07 23:54:17 +000071 );
72 };
73
hebasta2758b582018-11-19 15:59:42 +010074 KorAP.vc = vcClass.create(vcArray);
Akron690066c2021-01-22 17:39:18 +010075
Nils Diewald0e6992a2015-04-14 20:13:52 +000076 domReady(function (event) {
Akron006ddc62024-02-19 08:49:43 +010077
78 const d = document;
79
80 // Set base URL
81 KorAP.URL = d.body.getAttribute('data-korap-url') || "";
82
83 // Create suffix if KorAP is run in a subfolder
84 KorAP.session = sessionClass.create(
85 KorAP.URL.length > 0 ? 'kalamarJS-' + KorAP.URL.slugify() : 'kalamarJS'
86 );
87
88 // Get koralQuery response
89 const kqe = d.getElementById('koralQuery');
90 if (kqe !== null) {
91 KorAP.koralQuery = JSON.parse(kqe.getAttribute('data-koralquery') || "");
92 };
93
Helge0d3630c2024-10-16 17:19:40 +020094 let gt = document.getElementsByClassName('link-guided-tour');
95 if (gt.length != null){
96 for(let j = 0; j < gt.length; j++){
97 gt[j].setAttribute('href', '#');
98 gt[j].addEventListener('click', function(){
Akron006ddc62024-02-19 08:49:43 +010099 tourClass.gTstartSearch().start();
100 });
Helge0d3630c2024-10-16 17:19:40 +0200101 }
102
103 KorAP.tourshowR = function(){
104 tourClass.gTshowResults().start();
Akron006ddc62024-02-19 08:49:43 +0100105 };
106 };
107
Nils Diewald0e6992a2015-04-14 20:13:52 +0000108 var obj = {};
Akron71b91e42016-06-01 22:12:43 +0200109
Akron4d926f12018-07-16 15:30:25 +0200110 // What should be visible in the beginning?
Akronf8035592018-05-24 20:40:51 +0200111 var show = KorAP.session.get('show') || {};
hebasta043e96f2019-11-28 12:33:00 +0100112
113 KorAP.Panel = KorAP.Panel || {}
Nils Diewalda297f062015-04-02 00:23:46 +0000114
115 /**
Akronf55504a2015-06-18 16:42:55 +0200116 * Release notifications
117 */
Akroncb5c1712021-01-26 18:01:04 +0100118 d.querySelectorAll('#notifications div.notify').forEach(
119 function(e) {
120 let msg = e.textContent;
121
122 let src = e.getAttribute('data-src');
123 if (src) {
124 msg += '<code class="src">'+src+'</code>';
Akron8ea84292018-10-24 13:41:52 +0200125 };
Akroncb5c1712021-01-26 18:01:04 +0100126
127 let type = e.getAttribute('data-type') || "error";
128 alertifyClass.log(msg, type, 10000);
129 }
130 );
Akronf55504a2015-06-18 16:42:55 +0200131
132 /**
Akroncd42a142019-07-12 18:55:37 +0200133 * Replace Virtual Corpus field
Nils Diewald7148c6f2015-05-04 15:07:53 +0000134 */
Akron5c829e92017-05-12 18:10:00 +0200135 var vcname, vcchoose;
Akroncd42a142019-07-12 18:55:37 +0200136 var input = d.getElementById('cq');
Akron1f0521b2018-08-28 13:01:24 +0200137
hebasta2758b582018-11-19 15:59:42 +0100138 var vc = KorAP.vc;
hebasta48842cf2018-12-11 12:57:38 +0100139
Akron1f0521b2018-08-28 13:01:24 +0200140 // Add vc name object
Nils Diewald7148c6f2015-05-04 15:07:53 +0000141 if (input) {
142 input.style.display = 'none';
Akron0b489ad2018-02-02 16:49:32 +0100143 vcname = d.createElement('span');
Nils Diewald7148c6f2015-05-04 15:07:53 +0000144 vcname.setAttribute('id', 'vc-choose');
Akron6bb71582016-06-10 20:41:08 +0200145 vcname.classList.add('select');
Akron941551e2015-06-11 16:06:22 +0200146
Akron1f0521b2018-08-28 13:01:24 +0200147 // Load virtual corpus object
Akroncd42a142019-07-12 18:55:37 +0200148 // Supports "collection" for legacy reasons
149 if (KorAP.koralQuery !== undefined && (KorAP.koralQuery["collection"] || KorAP.koralQuery["corpus"])) {
Akron1f0521b2018-08-28 13:01:24 +0200150 try {
Akroncd42a142019-07-12 18:55:37 +0200151 vc.fromJson(KorAP.koralQuery["collection"] || KorAP.koralQuery["corpus"]);
Akron1f0521b2018-08-28 13:01:24 +0200152 }
153 catch (e) {
154 KorAP.log(0,e);
155 }
Akron27ae9ec2015-06-23 00:43:21 +0200156 };
157
Akron0b489ad2018-02-02 16:49:32 +0100158 vcchoose = vcname.addE('span');
Akronec6bb8e2018-08-29 13:07:56 +0200159 vcchoose.addT(vc.getName());
Akron27ae9ec2015-06-23 00:43:21 +0200160
Akron1f0521b2018-08-28 13:01:24 +0200161 if (vc.wasRewritten()) {
162 vcchoose.classList.add('rewritten');
163 };
164
Nils Diewald7148c6f2015-05-04 15:07:53 +0000165 input.parentNode.insertBefore(vcname, input);
166 };
167
Nils Diewald7148c6f2015-05-04 15:07:53 +0000168 /**
Nils Diewalda297f062015-04-02 00:23:46 +0000169 * Add actions to match entries
170 */
Akronb50964a2020-10-12 11:44:37 +0200171 var matchElements = d.querySelectorAll(
Akron3c390c42020-03-30 09:06:21 +0200172 '#search > ol > li'
Nils Diewald5c5a7472015-04-02 22:13:38 +0000173 );
Akron6a535d42015-08-26 20:16:58 +0200174
Akronb50964a2020-10-12 11:44:37 +0200175 matchElements.forEach(function(e) {
Akron3c390c42020-03-30 09:06:21 +0200176
177 // Define class for active elements
178 if (e.classList.contains('active')) {
Akrond769d702021-08-16 11:09:08 +0200179 if (e._match === undefined) {
Akron19d97fe2016-09-06 20:47:05 +0200180 // lazyLoad
Akron3c390c42020-03-30 09:06:21 +0200181 matchClass.create(e).init();
Akron19d97fe2016-09-06 20:47:05 +0200182 };
Akron3c390c42020-03-30 09:06:21 +0200183 }
184
185 // Define class for inactive elements
186 else {
187 e.addEventListener('click', function (e) {
Akron19d97fe2016-09-06 20:47:05 +0200188 if (this._match !== undefined)
Akron3c390c42020-03-30 09:06:21 +0200189 this._match.open();
Akron19d97fe2016-09-06 20:47:05 +0200190 else {
191 // lazyLoad
192 matchClass.create(this).open();
193 };
Akron3c390c42020-03-30 09:06:21 +0200194 // This would prevent the sidebar to go back
195 // e.halt();
196 });
197 e.addEventListener('keydown', function (e) {
198 var code = _codeFromEvent(e);
199
200 switch (code) {
201 case 32:
202 if (this._match !== undefined)
203 this._match.toggle();
204 else {
205 // lazyLoad
206 matchClass.create(this).open();
207 };
208 e.halt();
209 break;
210 };
211 });
212 };
Akrond769d702021-08-16 11:09:08 +0200213 });
Akron3c390c42020-03-30 09:06:21 +0200214
Akrone0c32c72017-04-25 22:38:23 +0200215 // Add focus listener to aside
Akron0b489ad2018-02-02 16:49:32 +0100216 var aside = d.getElementsByTagName('aside')[0];
Akrone0c32c72017-04-25 22:38:23 +0200217
218 if (aside && aside.classList.contains('active') == false) {
Akron1885ce92017-04-26 23:10:01 +0200219
Akron5258d462017-04-26 23:32:57 +0200220 // Horrible lock to deal with sidebar clicks
221 var asideClicked = false;
222
Akron1885ce92017-04-26 23:10:01 +0200223 // Make aside active on focus
224 aside.addEventListener('focus', function(e) {
Akrone0c32c72017-04-25 22:38:23 +0200225 this.classList.add('active');
226 });
227
Akron1885ce92017-04-26 23:10:01 +0200228 // Deactivate focus when clicking anywhere else
Akron0b489ad2018-02-02 16:49:32 +0100229 var body = d.getElementsByTagName('body')[0];
Akron1885ce92017-04-26 23:10:01 +0200230 if (body !== null) {
231 body.addEventListener('click', function() {
Akron5258d462017-04-26 23:32:57 +0200232 if (!asideClicked) {
233 aside.classList.remove('active');
234 }
235 else {
236 asideClicked = false;
237 };
Akron1885ce92017-04-26 23:10:01 +0200238 });
239 };
240
241 /* Stop click event on aside
242 * (to not trickle down to body)
243 */
244 aside.addEventListener('click', function(e) {
Akron5258d462017-04-26 23:32:57 +0200245 asideClicked = true;
Akrone0c32c72017-04-25 22:38:23 +0200246 });
247 };
Akronb9cdb102017-04-25 00:52:31 +0200248
249
Akron6bb71582016-06-10 20:41:08 +0200250 // Replace QL select menus with KorAP menus
Akron0b489ad2018-02-02 16:49:32 +0100251 var qlField = d.getElementById('ql-field');
Akronaba7a5a2016-08-15 21:58:33 +0200252 if (qlField !== null) {
Akron086fe5d2017-11-13 14:01:45 +0100253 KorAP.QLmenu = selectMenuClass.create(
Akron0b489ad2018-02-02 16:49:32 +0100254 d.getElementById('ql-field').parentNode
Marc Kupietz95455822023-09-19 20:14:31 +0200255 ).limit(10);
Akronaba7a5a2016-08-15 21:58:33 +0200256 };
Akron6bb71582016-06-10 20:41:08 +0200257
Akron4d926f12018-07-16 15:30:25 +0200258 var resultInfo = d.getElementById('resultinfo');
259
Akron4d926f12018-07-16 15:30:25 +0200260 /**
261 * Add result panel
262 */
Akron5cb9b2b2018-07-24 17:01:09 +0200263 var resultPanel = resultPanelClass.create(show);
Akron644ad9f2021-07-26 16:12:59 +0200264
Akron4d926f12018-07-16 15:30:25 +0200265 if (resultInfo != null) {
Akron4d926f12018-07-16 15:30:25 +0200266
267 // Move buttons to resultinfo
Akron37ea1192021-07-28 10:40:14 +0200268 resultInfo.appendChild(resultPanel.actions().element());
Akron4d926f12018-07-16 15:30:25 +0200269
Akrone6538cd2018-07-16 17:52:33 +0200270 // The views are at the top of the search results
Akron4d926f12018-07-16 15:30:25 +0200271 var sb = d.getElementById('search');
272 sb.insertBefore(resultPanel.element(), sb.firstChild);
Akron4d926f12018-07-16 15:30:25 +0200273 };
274
275
Akron179c8ac2015-06-30 19:30:50 +0200276 // There is a koralQuery
Akron4d926f12018-07-16 15:30:25 +0200277 if (KorAP.koralQuery !== undefined) {
Akron5cb9b2b2018-07-24 17:01:09 +0200278
279 // Add KoralQuery view to result panel
Akron4d926f12018-07-16 15:30:25 +0200280 if (resultInfo !== null) {
Akron5cb9b2b2018-07-24 17:01:09 +0200281 resultPanel.addKqAction()
Akron179c8ac2015-06-30 19:30:50 +0200282 };
Akron7716f012015-07-01 20:38:32 +0200283
Akron00cd4d12016-05-31 21:01:11 +0200284 if (KorAP.koralQuery["errors"]) {
Akron678c26f2020-10-09 08:52:50 +0200285 KorAP.koralQuery["errors"].forEach(function(e) {
Akronf0c31ed2016-06-11 11:27:01 +0200286
Akron19d97fe2016-09-06 20:47:05 +0200287 // Malformed query
Akron4a24b722020-10-13 12:44:25 +0200288 if (e[0] === 302 && e[2] !== undefined) {
Akron19d97fe2016-09-06 20:47:05 +0200289 obj.hint = hintClass.create();
Akron678c26f2020-10-09 08:52:50 +0200290 obj.hint.alert(e[2], e[1]);
Akron19d97fe2016-09-06 20:47:05 +0200291 }
Akronf0c31ed2016-06-11 11:27:01 +0200292
Akron19d97fe2016-09-06 20:47:05 +0200293 // no query
Akron678c26f2020-10-09 08:52:50 +0200294 else if (e[0] === 301) {
Akron19d97fe2016-09-06 20:47:05 +0200295 obj.hint = hintClass.create();
Akron678c26f2020-10-09 08:52:50 +0200296 obj.hint.alert(0, e[1]);
Akron19d97fe2016-09-06 20:47:05 +0200297 }
Akron678c26f2020-10-09 08:52:50 +0200298 });
Akron00cd4d12016-05-31 21:01:11 +0200299 };
Akron179c8ac2015-06-30 19:30:50 +0200300 };
301
Akron5cb9b2b2018-07-24 17:01:09 +0200302
303 /*
304 * There is more than 0 matches, so allow for
305 * alignment toggling (left <=> right)
306 */
Akronb50964a2020-10-12 11:44:37 +0200307 if (matchElements.length > 0)
Akron5cb9b2b2018-07-24 17:01:09 +0200308 resultPanel.addAlignAction();
Nils Diewald7148c6f2015-05-04 15:07:53 +0000309
hebasta043e96f2019-11-28 12:33:00 +0100310 KorAP.Panel['result'] = resultPanel;
Akron5cb9b2b2018-07-24 17:01:09 +0200311 /*
Akroncd42a142019-07-12 18:55:37 +0200312 * Toggle the Virtual Corpus builder
Nils Diewald7148c6f2015-05-04 15:07:53 +0000313 */
314 if (vcname) {
Akronec6bb8e2018-08-29 13:07:56 +0200315 vc.onMinimize = function () {
316 vcname.classList.remove('active');
Akroncd42a142019-07-12 18:55:37 +0200317 delete show['vc'];
Akronec6bb8e2018-08-29 13:07:56 +0200318 };
Nils Diewald6283d692015-04-23 20:32:53 +0000319
Akronec6bb8e2018-08-29 13:07:56 +0200320 vc.onOpen = function () {
321 vcname.classList.add('active');
Akroncfe8ecc2018-11-20 18:46:16 +0100322
323 var view = d.getElementById('vc-view');
324 if (!view.firstChild)
325 view.appendChild(this.element());
326
Akroncd42a142019-07-12 18:55:37 +0200327 show['vc'] = true;
Akronec6bb8e2018-08-29 13:07:56 +0200328 };
329
330 var vcclick = function () {
Akronec6bb8e2018-08-29 13:07:56 +0200331 if (vc.isOpen()) {
332 vc.minimize()
333 }
334 else {
Akronec6bb8e2018-08-29 13:07:56 +0200335 vc.open();
Akron19d97fe2016-09-06 20:47:05 +0200336 };
Nils Diewald58141332015-04-07 16:18:45 +0000337 };
Akron04671e72017-05-11 20:47:32 +0200338
Akron179c8ac2015-06-30 19:30:50 +0200339 vcname.onclick = vcclick;
Akron5c829e92017-05-12 18:10:00 +0200340
341 // Click, if the VC should be shown
Akroncd42a142019-07-12 18:55:37 +0200342 if (show['vc']) {
Akron19d97fe2016-09-06 20:47:05 +0200343 vcclick.apply();
Akron04671e72017-05-11 20:47:32 +0200344 };
Nils Diewald58141332015-04-07 16:18:45 +0000345 };
346
Akron19d97fe2016-09-06 20:47:05 +0200347
Nils Diewald58141332015-04-07 16:18:45 +0000348 /**
349 * Init Tutorial view
350 */
Akron0b489ad2018-02-02 16:49:32 +0100351 if (d.getElementById('view-tutorial')) {
Nils Diewaldfccfbcb2015-04-29 20:48:19 +0000352 window.tutorial = tutClass.create(
Akron0b489ad2018-02-02 16:49:32 +0100353 d.getElementById('view-tutorial'),
Akronf8035592018-05-24 20:40:51 +0200354 KorAP.session
Nils Diewaldfccfbcb2015-04-29 20:48:19 +0000355 );
356 obj.tutorial = window.tutorial;
357 }
Nils Diewald58141332015-04-07 16:18:45 +0000358
Nils Diewaldfccfbcb2015-04-29 20:48:19 +0000359 // Tutorial is in parent
360 else if (window.parent) {
361 obj.tutorial = window.parent.tutorial;
362 };
363
Akron0b489ad2018-02-02 16:49:32 +0100364 // Initialize queries for d
Akron6ed13992016-05-23 18:06:05 +0200365 if (obj.tutorial) {
Akron0b489ad2018-02-02 16:49:32 +0100366 obj.tutorial.initQueries(d);
Nils Diewaldfccfbcb2015-04-29 20:48:19 +0000367
Akron6ed13992016-05-23 18:06:05 +0200368 // Initialize documentation links
Akron0b489ad2018-02-02 16:49:32 +0100369 obj.tutorial.initDocLinks(d);
Akron6ed13992016-05-23 18:06:05 +0200370 };
Nils Diewald61e6ff52015-05-07 17:26:50 +0000371
Nils Diewald845282c2015-05-14 07:53:03 +0000372
Nils Diewald58141332015-04-07 16:18:45 +0000373 /**
Akronc1457bf2015-06-11 19:24:00 +0200374 * Add VC creation on submission.
375 */
Akron0b489ad2018-02-02 16:49:32 +0100376 var form = d.getElementById('searchform');
Akron792f58b2015-07-08 18:59:36 +0200377 if (form !== null) {
Akronc1457bf2015-06-11 19:24:00 +0200378 form.addEventListener('submit', function (e) {
Akron0b489ad2018-02-02 16:49:32 +0100379 var qf = d.getElementById('q-field');
Akron1be6c1c2020-01-07 15:29:58 +0100380
Akron19d97fe2016-09-06 20:47:05 +0200381 // No query was defined
382 if (qf.value === undefined || qf.value === '') {
383 qf.focus();
384 e.halt();
385 KorAP.log(700, "No query given");
386 return;
387 };
Akron1be6c1c2020-01-07 15:29:58 +0100388
Akron19d97fe2016-09-06 20:47:05 +0200389 // Store session information
Akronf8035592018-05-24 20:40:51 +0200390 KorAP.session.set("show", show);
Akron7716f012015-07-01 20:38:32 +0200391
Akron19d97fe2016-09-06 20:47:05 +0200392 if (vc !== undefined) {
393 input.value = vc.toQuery();
Akrond7ad9072019-12-09 07:08:20 +0100394 if (input.value == '')
395 input.removeAttribute('name');
Akron19d97fe2016-09-06 20:47:05 +0200396 }
397 else {
Akrond7ad9072019-12-09 07:08:20 +0100398 input.removeAttribute('value');
399 input.removeAttribute('name');
Akron19d97fe2016-09-06 20:47:05 +0200400 };
Akron1be6c1c2020-01-07 15:29:58 +0100401
402 // This would preferably set the query to be "disabled",
403 // but in that case the query wouldn't be submitted
404 // at all.
405 // Setting the cursor to "progress" fails in current versions
406 // of webkit.
407 qf.classList.add("loading");
408 d.getElementById('qsubmit').classList.add("loading");
Akronc1457bf2015-06-11 19:24:00 +0200409 });
410 };
hebasta5df796f2019-05-21 15:27:12 +0200411
412
413 //Starts the guided tour at the next page
414 if(KorAP.session.get("tour")){
415 tourClass.gTshowResults().start();
416 }
417
Akronc1457bf2015-06-11 19:24:00 +0200418 /**
Nils Diewald58141332015-04-07 16:18:45 +0000419 * Init hint helper
420 * has to be final because of
421 * reposition
422 */
Nils Diewald0e6992a2015-04-14 20:13:52 +0000423 // Todo: Pass an element, so this works with
424 // tutorial pages as well!
Akron00cd4d12016-05-31 21:01:11 +0200425 if (obj.hint === undefined)
426 obj.hint = hintClass.create();
Nils Diewald7148c6f2015-05-04 15:07:53 +0000427
Akron99713ef2017-06-28 18:19:28 +0200428 // Add the hinthelper to the KorAP object to make it manipulatable globally
Akron72f73572017-12-05 12:31:09 +0100429 KorAP.Hint = obj.hint;
Akron99713ef2017-06-28 18:19:28 +0200430
Akron2d0d96d2019-11-18 19:49:50 +0100431
432 /**
433 * Add query panel
434 */
435 var queryPanel = queryPanelClass.create();
436
437 // Get input field
Akron2d0d96d2019-11-18 19:49:50 +0100438 var vcView = d.getElementById('vc-view')
Akron96b97d62023-11-07 15:56:54 +0100439 if (form && vcView) {
Akron2d0d96d2019-11-18 19:49:50 +0100440 // The views are below the query bar
Akron96b97d62023-11-07 15:56:54 +0100441 form.insertBefore(queryPanel.element(), vcView);
Akron2d0d96d2019-11-18 19:49:50 +0100442 KorAP.Panel['query'] = queryPanel;
Akron644ad9f2021-07-26 16:12:59 +0200443 };
444
445
446 /**
447 * Add pagination panel
448 */
449 const paginationPanel = paginationPanelClass.create();
450
451 if (paginationPanel) {
452 paginationPanel.addRandomPage();
453 KorAP.Panel['pagination'] = paginationPanel;
454 };
Akron24f48ea2020-07-01 09:37:19 +0200455
Akrona9c55802021-06-15 11:41:29 +0200456
457 /**
458 * Initialize password toggle.
459 */
460 initCopyToClipboard(d);
461
462
Akron24f48ea2020-07-01 09:37:19 +0200463 /**
Akron116eace2021-06-14 18:02:37 +0200464 * Initialize password toggle.
465 */
Akron1cfde272021-06-14 18:32:39 +0200466 initTogglePwdVisibility(d);
Akron116eace2021-06-14 18:02:37 +0200467
468 /**
Akron24f48ea2020-07-01 09:37:19 +0200469 * Initialize Plugin registry.
470 */
Akron8dda1c62021-01-20 10:27:32 +0100471 let pe;
472 if (pe = d.getElementById("kalamar-plugins")) {
473 let url = pe.getAttribute('data-plugins');
474 if (url !== undefined) {
475 KorAP.API.getPluginList(url, function (json) {
476 if (json && json.length > 0) {
Akronda32e7a2021-11-16 17:28:57 +0100477
478 // Add state manager
Akron96b97d62023-11-07 15:56:54 +0100479 form = d.getElementById("searchform");
480 if (!form) {
481 return;
482 };
483
484 const input = form.addE("input");
Akronda32e7a2021-11-16 17:28:57 +0100485 input.setAttribute("name","state");
486 KorAP.States = stateManagerClass.create(input);
487
Akron8dda1c62021-01-20 10:27:32 +0100488 // Load Plugin Server first
489 KorAP.Plugin = pluginClass.create();
Akron24f48ea2020-07-01 09:37:19 +0200490
Akron8dda1c62021-01-20 10:27:32 +0100491 // Add services container to head
492 d.head.appendChild(KorAP.Plugin.element());
Akron24f48ea2020-07-01 09:37:19 +0200493
Akron8dda1c62021-01-20 10:27:32 +0100494 // Add pipe form
495 KorAP.Pipe = pipeClass.create();
496 d.getElementById("searchform").appendChild(KorAP.Pipe.element());
Akronda32e7a2021-11-16 17:28:57 +0100497
Akron8dda1c62021-01-20 10:27:32 +0100498 try {
499
500 // Register all plugins
501 json.forEach(i => KorAP.Plugin.register(i));
502 }
503 catch (e) {
504 KorAP.log(0, e);
505 }
506 }
507 });
508 };
Akron24f48ea2020-07-01 09:37:19 +0200509 };
Akronf7f75a92024-09-24 11:15:43 +0200510
511 window.dispatchEvent(new Event("ui-ready"));
Akron8dda1c62021-01-20 10:27:32 +0100512
Nils Diewald58141332015-04-07 16:18:45 +0000513 return obj;
Nils Diewald0e6992a2015-04-14 20:13:52 +0000514 });
hebasta75cfca52019-02-19 13:15:27 +0100515
Nils Diewald0e6992a2015-04-14 20:13:52 +0000516});