Projekt

Obecné

Profil

Stáhnout (22.4 KB) Statistiky
| Větev: | Revize:
1 e278dcbf Ondřej Anděl
<script>
2
    window.onload = function() {
3 a908ef13 Anděl Ondřej
        let sourceSelect = new vanillaSelectBox("#source");
4 e278dcbf Ondřej Anděl
        filtersChange();
5 fb32f0e8 Anděl Ondřej
        fetchData(false);
6 e278dcbf Ondřej Anděl
    };
7
</script>
8
9
<div class="search-filters container" onload="filtersChange()">
10 9a7b1f4c Ondřej Anděl
    <div class="row">
11
        <div class="mr-3">
12 a908ef13 Anděl Ondřej
            <label for="wordshape" class="mr-2">Slovo</label>
13 9a7b1f4c Ondřej Anděl
            <input type="text" id="wordshape">
14
        </div>
15 fb32f0e8 Anděl Ondřej
        <div class="mr-3">
16
            <label for="lemma" class="mr-2">Lemma</label>
17
            <input type="text" id="lemma">
18
        </div>
19 9a7b1f4c Ondřej Anděl
        <div class="mr-3">
20
            <label for="source" class="mr-2">Rukopisný pramen</label>
21 a908ef13 Anděl Ondřej
            <select id="source" multiple>
22 fb32f0e8 Anděl Ondřej
                <option value = "0">rukopis Vídeňský</option>
23
                <option value = "1">zlomky Hanušovy</option>
24
                <option value = "2">zlomky Hradecké</option>
25
                <option value = "3">rukopis Cambridžský</option>
26
                <option value = "4">rukopis Františkánský</option>
27
                <option value = "5">zlomek Olomoucký</option>
28
                <option value = "6">fragment Strahovský</option>
29
                <option value = "7">zlomky Klementinsko-Křižovnické</option>
30
                <option value = "8">zlomky Mnichovské</option>
31
                <option value = "9">rukopis Lobkovický</option>
32
                <option value = "10">rukopis Pelclův</option>
33
                <option value = "11">rukopis Cerronský</option>
34
                <option value = "12">rukopis Fürstenberský</option>
35
                <option value = "13">rukopis Zebererův</option>
36
                <option value = "14">vydání Pavla Ješína z Bezdězi, Praha 1620</option>
37
                <option value = "15">básně připsané při Pulkavově kronice v rukopisu Litoměřickém</option>
38 a908ef13 Anděl Ondřej
            </select>
39 9a7b1f4c Ondřej Anděl
        </div>
40
        <div class="mr-3">
41 a908ef13 Anděl Ondřej
            <label for="location" class="mr-2">Pozice</label>
42 9a7b1f4c Ondřej Anděl
            <input type="text" id="location">
43
        </div>
44 e278dcbf Ondřej Anděl
45
46
        <div class="mr-3">
47
            <label for="wordclass" class="mr-2">Slovní druh</label>
48
            <select onchange="filtersChange()"  id="wordclass">
49
                <option selected="selected" value = "">Nevybráno</option>
50 fb32f0e8 Anděl Ondřej
                <option value = "N">Substantiva</option>
51
                <option value = "A">Adjektiva</option>
52
                <option value = "P">Pronomina</option>
53
                <option value = "C">Numeralia</option>
54
                <option value = "V">Verba</option>
55
                <option value = "D">Adverbia</option>
56
                <option value = "R">Prepozice</option>
57
                <option value = "J">Konjunkce</option>
58
                <option value = "I">Interjekce</option>
59
                <option value = "T">Partikule</option>
60 e278dcbf Ondřej Anděl
            </select>
61
        </div>
62
63
        <script>
64
            function filtersChange() {
65
                const value = document.getElementById("wordclass").value;
66
                switch (value) {
67 fb32f0e8 Anděl Ondřej
                    case "N":
68 e278dcbf Ondřej Anděl
                        setFilerVisibility([
69
                            true,
70
                            true,
71
                            true,
72
                            false,
73
                            false,
74
                            false,
75
                            false,
76
                            false,
77
                            false,
78
                            false,
79
                            false,
80
                            false
81
                        ]);
82
                        break;
83 fb32f0e8 Anděl Ondřej
                    case "A":
84 e278dcbf Ondřej Anděl
                        setFilerVisibility([
85
                            true,
86
                            true,
87
                            true,
88
                            true,
89
                            true,
90
                            false,
91
                            false,
92
                            false,
93
                            false,
94
                            false,
95
                            false,
96
                            false
97
                        ]);
98
                        break;
99 fb32f0e8 Anděl Ondřej
                    case "P":
100 e278dcbf Ondřej Anděl
                        setFilerVisibility([
101
                            true,
102
                            true,
103
                            true,
104
                            false,
105
                            false,
106
                            true,
107
                            false,
108
                            false,
109
                            false,
110
                            false,
111
                            false,
112
                            false
113
                        ]);
114
                        break;
115 fb32f0e8 Anděl Ondřej
                    case "C":
116 e278dcbf Ondřej Anděl
                        setFilerVisibility([
117
                            true,
118
                            true,
119
                            true,
120
                            false,
121
                            false,
122
                            false,
123
                            false,
124
                            false,
125
                            false,
126
                            false,
127
                            false,
128
                            false
129
                        ]);
130
                        break;
131 fb32f0e8 Anděl Ondřej
                    case "V":
132 e278dcbf Ondřej Anděl
                        setFilerVisibility([
133
                            true,
134
                            true,
135
                            true,
136
                            false,
137
                            false,
138
                            false,
139
                            true,
140
                            true,
141
                            true,
142
                            true,
143
                            true,
144
                            false
145
                        ]);
146
                        break;
147 fb32f0e8 Anděl Ondřej
                    case "D":
148 e278dcbf Ondřej Anděl
                        setFilerVisibility([
149
                            false,
150
                            false,
151
                            false,
152
                            false,
153
                            true,
154
                            false,
155
                            false,
156
                            false,
157
                            false,
158
                            false,
159
                            false,
160
                            false
161
                        ]);
162
                        break;
163 fb32f0e8 Anděl Ondřej
                    case "R":
164 e278dcbf Ondřej Anděl
                        setFilerVisibility([
165
                            true,
166
                            false,
167
                            false,
168
                            false,
169
                            false,
170
                            false,
171
                            false,
172
                            false,
173
                            false,
174
                            false,
175
                            false,
176
                            false
177
                        ]);
178
                        break;
179 fb32f0e8 Anděl Ondřej
                    case "J":
180 e278dcbf Ondřej Anděl
                        setFilerVisibility([
181
                            false,
182
                            false,
183
                            false,
184
                            false,
185
                            false,
186
                            false,
187
                            false,
188
                            false,
189
                            false,
190
                            false,
191
                            false,
192
                            true
193
                        ]);
194
                        break;
195 fb32f0e8 Anděl Ondřej
                    case "I":
196 e278dcbf Ondřej Anděl
                        setFilerVisibility([
197
                            false,
198
                            false,
199
                            false,
200
                            false,
201
                            false,
202
                            false,
203
                            false,
204
                            false,
205
                            false,
206
                            false,
207
                            false,
208
                            false
209
                        ]);
210
                        break;
211 fb32f0e8 Anděl Ondřej
                    case "T":
212 e278dcbf Ondřej Anděl
                        setFilerVisibility([
213
                            false,
214
                            false,
215
                            false,
216
                            false,
217
                            false,
218
                            false,
219
                            false,
220
                            false,
221
                            false,
222
                            false,
223
                            false,
224
                            false
225
                        ]);
226
                        break;
227
                    default:
228
                        setFilerVisibility([
229
                            false,
230
                            false,
231
                            false,
232
                            false,
233
                            false,
234
                            false,
235
                            false,
236
                            false,
237
                            false,
238
                            false,
239
                            false,
240
                            false
241
                        ]);
242
                        break;
243
                }
244
            }
245
246
            function setFilerVisibility(visibility) {
247
                const id = [
248
                    "filter-case",
249
                    "filter-countability",
250
                    "filter-gender",
251
                    "filter-shape",
252
                    "filter-grade",
253
                    "filter-type",
254
                    "filter-mood",
255
                    "filter-person",
256
                    "filter-time",
257
                    "filter-vid",
258
                    "filter-v-type",
259
                    "filter-k-type"
260
                ];
261
262
                for(let i = 0; i < id.length &&  i < visibility.length; i++){
263
                    document.getElementById(id[i]).style.display = visibility[i] === true ? "" : "none";
264
                    document.getElementById(id[i].replace("filter-", "")).value = "";
265
                }
266
            }
267
        </script>
268
269
        <!-- conditionaly rendered filters-->
270
        <div class="mr-3" id="filter-case">
271
            <label for="case" class="mr-2">Pád</label>
272
            <select id="case">
273
                <option selected="selected" value = "">Nevybráno</option>
274
                <option value = "1">Nominativ</option>
275
                <option value = "2">Genitiv</option>
276
                <option value = "3">Dativ</option>
277
                <option value = "4">Akuzativ</option>
278
                <option value = "5">Vokativ</option>
279
                <option value = "6">Lokál</option>
280
                <option value = "7">Instrumentál</option>
281
            </select>
282
        </div>
283
        <div class="mr-3" id="filter-countability">
284
            <label for="countability" class="mr-2">Číslo</label>
285
            <select id="countability">
286
                <option selected="selected" value = "">Nevybráno</option>
287 a908ef13 Anděl Ondřej
                <option value = "S">Singulár</option>
288
                <option value = "P">Plurál</option>
289
                <option value = "D">Duál</option>
290 e278dcbf Ondřej Anděl
            </select>
291
        </div>
292
        <div class="mr-3" id="filter-gender">
293
            <label for="gender" class="mr-2">Rod</label>
294
            <select id="gender">
295
                <option selected="selected" value = "">Nevybráno</option>
296 a908ef13 Anděl Ondřej
                <option value = "M">Maskulinum</option>
297
                <option value = "F">Femininum</option>
298
                <option value = "N">Neutrum</option>
299 e278dcbf Ondřej Anděl
            </select>
300
        </div>
301
        <div class="mr-3" id="filter-shape">
302
            <label for="shape" class="mr-2">Tvar</label>
303
            <select id="shape">
304
                <option selected="selected" value = "">Nevybráno</option>
305 a908ef13 Anděl Ondřej
                <option value = "C">Složený</option>
306
                <option value = "N">Jmenný</option>
307 e278dcbf Ondřej Anděl
            </select>
308
        </div>
309
        <div class="mr-3" id="filter-grade">
310
            <label for="grade" class="mr-2">Stupeň</label>
311
            <select id="grade">
312
                <option selected="selected" value = "">Nevybráno</option>
313
                <option value = "1">Pozitiv</option>
314
                <option value = "2">Komparativ</option>
315
                <option value = "3">Superlativ</option>
316
            </select>
317
        </div>
318
        <div class="mr-3" id="filter-type">
319
            <label for="type" class="mr-2">Druh</label>
320
            <select id="type">
321
                <option selected="selected" value = "">Nevybráno</option>
322 a908ef13 Anděl Ondřej
                <option value = "P">Personalia</option>
323
                <option value = "S">Posesiva</option>
324
                <option value = "D">Demonstrativa</option>
325
                <option value = "Q">Interogativa</option>
326
                <option value = "J">Relativa</option>
327
                <option value = "Z">Indefinita</option>
328
                <option value = "L">Limitativa</option>
329
                <option value = "W">Negativa</option>
330 e278dcbf Ondřej Anděl
            </select>
331
        </div>
332
        <div class="mr-3" id="filter-mood">
333 a908ef13 Anděl Ondřej
            <label for="mood" class="mr-2">Způsob</label>
334 e278dcbf Ondřej Anděl
            <select id="mood">
335
                <option selected="selected" value = "">Nevybráno</option>
336 a908ef13 Anděl Ondřej
                <option value = "f">Infinitiv</option>
337
                <option value = "d">Indikativ</option>
338
                <option value = "i">Imperativ</option>
339
                <option value = "c">Kondicionál</option>
340
                <option value = "S">Supinum</option>
341
                <option value = "e">Přech. přítomný</option>
342
                <option value = "m">Přech. minulý</option>
343
                <option value = "A">Part. perf. akt.</option>
344
                <option value = "P">Part. perf. pas.</option>
345 e278dcbf Ondřej Anděl
            </select>
346
        </div>
347
        <div class="mr-3" id="filter-person">
348
            <label for="person" class="mr-2">Osoba</label>
349
            <select id="person">
350
                <option selected="selected" value = "">Nevybráno</option>
351
                <option value = "1">1.</option>
352
                <option value = "2">2.</option>
353
                <option value = "3">3.</option>
354
            </select>
355
        </div>
356
        <div class="mr-3" id="filter-time">
357
            <label for="time" class="mr-2">Čas</label>
358
            <select id="time">
359
                <option selected="selected" value = "">Nevybráno</option>
360 a908ef13 Anděl Ondřej
                <option value = "P">Prézens</option>
361
                <option value = "A">Aorist</option>
362
                <option value = "R">Préteritum</option>
363
                <option value = "I">Imperfektum</option>
364
                <option value = "H">Plusquamperfektum</option>
365
                <option value = "F">Futurum</option>
366 e278dcbf Ondřej Anděl
            </select>
367
        </div>
368
        <div class="mr-3" id="filter-vid">
369 a908ef13 Anděl Ondřej
            <label for="vid" class="mr-2">Vid</label>
370 e278dcbf Ondřej Anděl
            <select id="vid">
371
                <option selected="selected" value = "">Nevybráno</option>
372 a908ef13 Anděl Ondřej
                <option value = "P">Perfektivum</option>
373
                <option value = "I">Imperfektivum </option>
374 e278dcbf Ondřej Anděl
            </select>
375
        </div>
376
        <div class="mr-3" id="filter-v-type">
377 a908ef13 Anděl Ondřej
            <label for="v-type" class="mr-2">Slovesný rod</label>
378 e278dcbf Ondřej Anděl
            <select id="v-type">
379
                <option selected="selected" value = "">Nevybráno</option>
380 a908ef13 Anděl Ondřej
                <option value = "A">Aktivum</option>
381
                <option value = "P">Pasivum</option>
382 e278dcbf Ondřej Anděl
            </select>
383
        </div>
384
        <div class="mr-3" id="filter-k-type">
385
            <label for="k-type" class="mr-2">Typ</label>
386
            <select id="k-type">
387
                <option selected="selected" value = "">Nevybráno</option>
388 a908ef13 Anděl Ondřej
                <option value = "V">Větná</option>
389
                <option value = "C">Členská</option>
390
                <option value = "N">Navazovací</option>
391
                <option value = "P">Spojení s přechodníkem</option>
392 e278dcbf Ondřej Anděl
            </select>
393
        </div>
394 a908ef13 Anděl Ondřej
395
        <!-- send button-->
396 fb32f0e8 Anděl Ondřej
        <button class="ml-auto btn" onclick="fetchData(true)">
397 a908ef13 Anděl Ondřej
            Filtrovat
398
        </button>
399 9a7b1f4c Ondřej Anděl
    </div>
400
</div>
401
402
<div class="search-results my-4">
403
    <table class="table table-striped">
404
        <thead>
405
        <tr>
406 a908ef13 Anděl Ondřej
            <th scope="col">Slovo</th>
407 9a7b1f4c Ondřej Anděl
            <th scope="col">Lemma</th>
408 e278dcbf Ondřej Anděl
            <th scope="col">Rukopisy</th>
409
            <th scope="col">Pozice</th>
410 9a7b1f4c Ondřej Anděl
            <th scope="col"></th>
411
        </tr>
412
        </thead>
413
        <tbody id="search-table">
414
            <script>
415 a908ef13 Anděl Ondřej
                let data;
416 fb32f0e8 Anděl Ondřej
                function filterData (formData) {
417
                    //regular
418
                    formData.append("lemma", document.getElementById("lemma").value);
419
                    formData.append("word", document.getElementById("wordshape").value);
420
421
                    //positions
422
                    const positionSplit = document.getElementById("location").value.split("/");
423
                    formData.append("position1", positionSplit[0] !== undefined ? positionSplit[0] : "");
424
                    formData.append("position2", positionSplit[1] !== undefined ? positionSplit[1] : "");
425
                    formData.append("positiondetail", positionSplit[2] !== undefined ? positionSplit[2] : "");
426 a908ef13 Anděl Ondřej
427 fb32f0e8 Anděl Ondřej
                    //multiselect
428
                    formData.append("manuscript", getValues("source"));
429
430
                    const pos = document.getElementById("wordclass").value;
431
                    formData.append("tag_pos", pos);
432
                    //those upcoming are dynamic based on the previous field
433
                    formData.append("tag_case", document.getElementById("case").value);
434
                    formData.append("tag_number", document.getElementById("countability").value);
435
                    formData.append("tag_gender", document.getElementById("gender").value);
436
                    formData.append("tag_degree", document.getElementById("grade").value);
437
                    formData.append("tag_shape", document.getElementById("shape").value);
438
                    formData.append("tag_num", "");//THIS ONE IS WORTHLESS
439
440
                    if(pos === "P"){
441
                        formData.append("tag_sentence", document.getElementById("type").value);
442
                    } else if(pos === "V"){
443
                        formData.append("tag_sentence", document.getElementById("mood").value);
444
                    } else if(pos === "J"){
445
                        formData.append("tag_sentence", document.getElementById("k-type").value);
446
                    }
447
448
                    formData.append("tag_verb_person", document.getElementById("person").value);
449
                    formData.append("tag_verb_time", document.getElementById("time").value);
450
                    formData.append("tag_verb_degree", document.getElementById("vid").value);
451
                    formData.append("tag_verb_aspect", document.getElementById("v-type").value);
452
                }
453
454
                function fetchData (filter = true) {
455 a908ef13 Anděl Ondřej
                    // (A1) GET SEARCH TERM
456
                    const formData = new FormData();
457
                    formData.append("page", "0");//TODO PAGING
458
                    formData.append("items_per_page", "50");//TODO PAGING
459
                    formData.append("finished", "true");//TODO ADMIN
460
461 fb32f0e8 Anděl Ondřej
                    if(filter){
462
                        filterData(formData);
463
                    }
464
465 a908ef13 Anděl Ondřej
                    // (A2) AJAX - USE HTTP:// NOT FILE://
466
                    let xhr = new XMLHttpRequest();
467
                    xhr.open("POST", "./controller/TableController.php");
468
                    xhr.onload = function(){
469
                        let search = this.response;
470
                        let parsedJSON = JSON.parse(search);
471 fb32f0e8 Anděl Ondřej
                        if(parsedJSON.count === 0){
472
                            document.getElementById("no-data-label").style.display = "";
473
                        } else {
474
                            document.getElementById("no-data-label").style.display = "none";
475
                        }
476 a908ef13 Anděl Ondřej
                        data = parsedJSON.data;
477
                        renderData(parsedJSON.data);
478
                    };
479
                    xhr.send(formData);
480
                }
481
482
                function renderManuscript(manuscripts, shorten=true) {
483
                    const names = [
484
                        "rukopis Vídeňský",
485
                        "zlomky Hanušovy",
486
                        "zlomky Hradecké",
487
                        "rukopis Cambridžský",
488
                        "rukopis Františkánský",
489
                        "zlomek Olomoucký",
490
                        "fragment Strahovský",
491
                        "zlomky Klementinsko-Křižovnické",
492
                        "zlomky Mnichovské",
493
                        "rukopis Lobkovický",
494
                        "rukopis Pelclův",
495
                        "rukopis Cerronský",
496
                        "rukopis Fürstenberský",
497
                        "rukopis Zebererův",
498
                        "vydání Pavla Ješína z Bezdězi, Praha 1620",
499
                        "básně připsané při Pulkavově kronice v rukopisu Litoměřickém",
500
                    ];
501
                    let output = "";
502
                    for(let i = 0; i < manuscripts.length; i++){
503
                        output += names[manuscripts[i]];
504
505
                        if(i < manuscripts.length - 1){
506
                            if(shorten && i === 2){
507
                                const extras = manuscripts.length - (i + 1);
508
                                output += " <i><small>a " + extras + " další" + (extras > 4? "ch" : "") + "</small></i>";
509
                                break;
510
                            }
511
                            output += "; "
512
                        }
513
                    }
514
                    return output;
515
                }
516
517
                function renderData(data) {
518
                    let result = "";
519
                    data.forEach((item,id) => {
520
                        result += "<tr>";
521
                        result += "<td>" + item.word + "</td>";
522
                        result += "<td>" + item.lemma.lemma + "</td>";
523
                        result += "<td>" + renderManuscript(item.manuscript) + "</td>";
524
                        result += "<td>" + item.position1 + (item.position2 ? ("/" + item.position2 + (item.positiondetail ? "/"  + item.positiondetail :  "")) : "")  + "</td>";
525
                        result += "<td class=\"action-td\">" +
526
                            "<button class=\"btn\" title=\"Detail\"  data-toggle=\"modal\" data-target=\"#detail-modal\" data-pseudo-id='" + id + "'><i class=\"fa fa-search\"></i></button>" +
527
                            "</td>";
528
                        result += "</tr>";
529
                    });
530
                    document.getElementById("search-table").innerHTML = result;
531
                }
532 9a7b1f4c Ondřej Anděl
            </script>
533
        </tbody>
534
    </table>
535 fb32f0e8 Anděl Ondřej
536
    <h3 id="no-data-label" class="mx-auto text-center font-italic">Žádná data nebyla nalezena</h3>
537 9a7b1f4c Ondřej Anděl
</div>
538