tg-prepare 1.1.0__py3-none-any.whl → 2.1.0b2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of tg-prepare might be problematic. Click here for more details.

Files changed (70) hide show
  1. {tg_prepare-1.1.0.dist-info → tg_prepare-2.1.0b2.dist-info}/METADATA +3 -3
  2. tg_prepare-2.1.0b2.dist-info/RECORD +78 -0
  3. {tg_prepare-1.1.0.dist-info → tg_prepare-2.1.0b2.dist-info}/WHEEL +1 -1
  4. tg_prepare-2.1.0b2.dist-info/projects/.secret_key +1 -0
  5. tgp_backend/__init__.py +3 -4
  6. tgp_backend/config.py +31 -0
  7. tgp_backend/directories.py +6 -8
  8. tgp_backend/nextcloud.py +40 -19
  9. tgp_backend/project.py +172 -45
  10. tgp_backend/session_manager.py +47 -0
  11. tgp_backend/util.py +73 -25
  12. tgp_ui/app.py +43 -335
  13. tgp_ui/routes/__init__.py +0 -0
  14. tgp_ui/routes/collection.py +272 -0
  15. tgp_ui/routes/data.py +228 -0
  16. tgp_ui/routes/project.py +102 -0
  17. tgp_ui/routes/publication.py +129 -0
  18. tgp_ui/routes/tabs.py +34 -0
  19. tgp_ui/routes/views.py +62 -0
  20. tgp_ui/static/css/bootstrap.min.css.map +1 -0
  21. tgp_ui/static/css/navbar.css +92 -0
  22. tgp_ui/static/img/favicon.ico +0 -0
  23. tgp_ui/static/img/textgrid-logo.svg +1 -0
  24. tgp_ui/static/js/collectionManager.js +60 -0
  25. tgp_ui/static/js/fileManager.js +186 -0
  26. tgp_ui/static/js/main.js +32 -485
  27. tgp_ui/static/js/modalManager.js +105 -0
  28. tgp_ui/static/js/navbarManager.js +151 -0
  29. tgp_ui/static/js/projectManager.js +60 -0
  30. tgp_ui/static/js/require.js +5 -0
  31. tgp_ui/static/js/sidebarManager.js +32 -0
  32. tgp_ui/static/js/tabManager.js +79 -0
  33. tgp_ui/templates/details/empty_container.html +16 -0
  34. tgp_ui/templates/details/manage_collection.html +205 -0
  35. tgp_ui/templates/includes/set_session_id_form.html +16 -0
  36. tgp_ui/templates/includes/upload_form.html +131 -0
  37. tgp_ui/templates/layout.html +9 -48
  38. tgp_ui/templates/macros.html +79 -72
  39. tgp_ui/templates/modal/delete_project.html +25 -0
  40. tgp_ui/templates/modal/empty_container.html +9 -0
  41. tgp_ui/templates/modal/file_explorer_content.html +34 -0
  42. tgp_ui/templates/modal/file_explorer_main.html +22 -0
  43. tgp_ui/templates/modal/file_explorer_nextcloud.html +27 -0
  44. tgp_ui/templates/modal/github_modal.html +29 -0
  45. tgp_ui/templates/modal/nextcloud_login.html +48 -0
  46. tgp_ui/templates/modal/tei_explorer.html +58 -0
  47. tgp_ui/templates/modal/xpath_parser.html +52 -0
  48. tgp_ui/templates/project_main.html +36 -0
  49. tgp_ui/templates/project_navbar.html +81 -0
  50. tgp_ui/templates/{projects.html → projects_main.html} +13 -28
  51. tgp_ui/templates/tab_final_upload.html +29 -0
  52. tgp_ui/templates/tabs/check_result.html +90 -0
  53. tgp_ui/templates/tabs/edit_project.html +113 -0
  54. tgp_ui/templates/tabs/empty_container.html +12 -0
  55. tgp_ui/templates/tabs/import_data.html +138 -0
  56. tgp_ui/templates/tabs/manage_collections.html +88 -0
  57. tgp_ui/templates/tabs/select_directories.html +41 -0
  58. tgp_ui/templates/tabs/upload.html +42 -0
  59. tgp_ui/templates/tabs/validate_metadata.html +227 -0
  60. tg_prepare-1.1.0.dist-info/RECORD +0 -39
  61. tgp_ui/templates/collection.html +0 -194
  62. tgp_ui/templates/file_upload.html +0 -24
  63. tgp_ui/templates/nxc_file_tree.html +0 -33
  64. tgp_ui/templates/project.html +0 -26
  65. tgp_ui/templates/storage.html +0 -49
  66. tgp_ui/templates/tei_explorer.html +0 -48
  67. tgp_ui/templates/xpath_parser_modal_content.html +0 -37
  68. {tg_prepare-1.1.0.dist-info → tg_prepare-2.1.0b2.dist-info}/entry_points.txt +0 -0
  69. {tg_prepare-1.1.0.dist-info → tg_prepare-2.1.0b2.dist-info}/licenses/LICENSE +0 -0
  70. {tg_prepare-1.1.0.dist-info → tg_prepare-2.1.0b2.dist-info}/top_level.txt +0 -0
@@ -1,194 +0,0 @@
1
- {% from "macros.html" import multi_input, xpath_or_value_input with context %}
2
- <div class="row mb-4 text-center">
3
- <h5>{{ collection.long_title }}</h5>
4
- </div>
5
- <form method="POST" class="row collection-form"
6
- action="{{ url_for('save_collection', projectname=project.name, title=collection_title) }}" method="POST">
7
- <div class="row mb-1">
8
- <ul class="nav nav-tabs w-100 align-items-stretch" id="collectionTab{{ collection.short_title }}"
9
- role="tablist">
10
- <li class="nav-item col-12 col-lg-2 mb-2 mb-md-0" role="presentation">
11
- <button class="nav-link text-dark active w-100 text-primary"
12
- id="fixedAttributesTab_{{ collection_title }}" data-bs-toggle="tab"
13
- data-bs-target="#fixedAttributesContent_{{ collection_title }}" type="button" role="tab"
14
- aria-controls="fixedAttributesContent_{{ collection_title }}" aria-selected="true">
15
- Project
16
- </button>
17
- </li>
18
- <li class="nav-item col-12 col-lg-2 mb-2 mb-md-0" role="presentation">
19
- <button class="nav-link text-dark w-100" id="classificationAttributesTab_{{ collection_title }}"
20
- data-bs-toggle="tab" data-bs-target="#classificationAttributesContent_{{ collection_title }}"
21
- type="button" role="tab" aria-controls="classificationAttributesContent_{{ collection_title }}"
22
- aria-selected="false">
23
- Classifications
24
- </button>
25
- </li>
26
- <li class="nav-item col-12 col-lg-2 mb-2 mb-md-0" role="presentation">
27
- <button class="nav-link text-dark w-100" id="workAttributesTab_{{ collection_title }}"
28
- data-bs-toggle="tab" data-bs-target="#workAttributesContent_{{ collection_title }}" type="button"
29
- role="tab" aria-controls="workAttributesContent_{{ collection_title }}" aria-selected="false">
30
- Work
31
- </button>
32
- </li>
33
- <li class="nav-item col-12 col-lg-2 mb-2 mb-md-0" role="presentation">
34
- <button class="nav-link text-dark w-100" id="editionAttributesTab_{{ collection_title }}"
35
- data-bs-toggle="tab" data-bs-target="#editionAttributesContent_{{ collection_title }}" type="button"
36
- role="tab" aria-controls="editionAttributesContent_{{ collection_title }}" aria-selected="false">
37
- Edition
38
- </button>
39
- </li>
40
- <li class="nav-item col-12 col-lg-2 mb-2 mb-md-0" role="presentation">
41
- <button class="nav-link text-dark w-100" id="eltecAttributesTab_{{ collection_title }}"
42
- data-bs-toggle="tab" data-bs-target="#eltecAttributesContent_{{ collection_title }}" type="button"
43
- role="tab" aria-controls="eltecAttributesContent_{{ collection_title }}" aria-selected="false">
44
- ELTEC specifications
45
- </button>
46
- </li>
47
- <li class="nav-item col-12 col-lg-2 mb-2 mb-md-0" role="presentation">
48
- <button class="nav-link text-dark w-100 tei_explorer" id="teiExplorer_{{ collection_title }}"
49
- data-bs-toggle="tab" data-bs-target="#teiExplorerContent_{{ collection_title }}" type="button"
50
- role="tab" aria-controls="teiExplorerContent_{{ collection_title }}" aria-selected="false"
51
- data-url="{{url_for('tei_explorer', projectname=project.name, title=collection_title)}}">
52
- TEI explorer
53
- </button>
54
- </li>
55
- </ul>
56
- </div>
57
- <div class="row my-2">
58
- <li class="nav-item col-12 col-lg-2 mt-2 mt-md-0" role="presentation">
59
- <button type="submit" class="btn btn-success w-100">
60
- <span class="spinner-border spinner-border-sm d-none" role="status" aria-hidden="true"></span>
61
- <span>Save</span>
62
- </button>
63
- </li>
64
- </div>
65
- <div class="row tab-content" id="collectionTabContent{{ collection.short_title }}">
66
- <div class="tab-pane fade show active" id="fixedAttributesContent_{{ collection_title }}" role="tabpanel"
67
- aria-labelledby="fixedAttributesTab_{{ collection_title }}">
68
- <div class="col-12">
69
- <div class="mb-3 row">
70
- <label class="col-sm-2 col-form-label">Long title</label>
71
- <div class="col-sm-10">
72
- <input type="text" class="form-control" name="long_title" value="{{ collection.long_title }}">
73
- </div>
74
- </div>
75
- <div class="mb-3 row">
76
- <label class="col-sm-2 col-form-label">Short title</label>
77
- <div class="col-sm-10">
78
- <input type="text" class="form-control" name="short_title" value="{{ collection.short_title }}">
79
- </div>
80
- </div>
81
- {{ multi_input('rights_holder', 'Rights Holder', collection.rights_holder, version=2) }}
82
- {{ multi_input('collector', 'Collector', collection.collector, version=2) }}
83
- </div>
84
- </div>
85
- {% set collection_parser = project.get_collection_parser(collection) %}
86
- <div class="tab-pane fade" id="workAttributesContent_{{ collection_title }}" role="tabpanel"
87
- aria-labelledby="workAttributesTab_{{ collection_title }}">
88
- <div class="col-12">
89
- <div class="mb-3 row">
90
- <label class="col-sm-12 col-form-label"><b>General</b>
91
- </label>
92
- </div>
93
- {{ xpath_or_value_input('ID', 'work_id',
94
- collection.work_id, collection_parser) }}
95
- {{ xpath_or_value_input('Title', 'work_title', collection.work_title, collection_parser) }}
96
- {{ xpath_or_value_input('Genre', 'genre', collection.genre, collection_parser) }}
97
- {{ xpath_or_value_input('Place of publication', 'work_publication_place',
98
- collection.work_publication_place, collection_parser) }}
99
-
100
- <div class="mb-3 row">
101
- <label class="col-sm-12 col-form-label"><b>Author</b>
102
- </label>
103
- </div>
104
- {{ xpath_or_value_input('ID', 'author_id', collection.author_id, collection_parser)
105
- }}
106
- {{ xpath_or_value_input('Firstname', 'author_firstname', collection.author_firstname, collection_parser)
107
- }}
108
- {{ xpath_or_value_input('Lastname', 'author_lastname', collection.author_lastname, collection_parser) }}
109
- {{ xpath_or_value_input('Fullname', 'author_fullname', collection.author_fullname, collection_parser) }}
110
- <div class="mb-3 row">
111
- <label class="col-sm-12 col-form-label"><b>Date of Creation</b>
112
- </label>
113
- </div>
114
- {{ xpath_or_value_input('Date', 'work_publication_date',
115
- collection.work_publication_date,
116
- collection_parser) }}
117
- {{ xpath_or_value_input('notBefore', 'work_publication_notBefore',
118
- collection.work_publication_notBefore,
119
- collection_parser) }}
120
- {{ xpath_or_value_input('notAfter', 'work_publication_notAfter',
121
- collection.work_publication_notAfter,
122
- collection_parser) }}
123
- </div>
124
- </div>
125
- <div class="tab-pane fade" id="classificationAttributesContent_{{ collection_title }}" role="tabpanel"
126
- aria-labelledby="classificationAttributesTab_{{ collection_title }}">
127
- <div class="col-12">
128
- {{ multi_input('basic_classifications', 'Basic classification', collection.basic_classifications,
129
- version=1)
130
- }}
131
- {{ multi_input('gnd_subjects', 'GND Subject Areas', collection.gnd_subjects, version=1) }}
132
-
133
- </div>
134
- </div>
135
- <div class="tab-pane fade" id="editionAttributesContent_{{ collection_title }}" role="tabpanel"
136
- aria-labelledby="editionAttributesTab_{{ collection_title }}">
137
- <div class="col-12">
138
- <div class="mb-3 row">
139
- <label class="col-sm-12 col-form-label"><b>General</b>
140
- </label>
141
- </div>
142
- {{ xpath_or_value_input('Title', 'edition_title', collection.edition_title,
143
- collection_parser) }}
144
- {{ xpath_or_value_input('Author ID', 'edition_author', collection.edition_author,
145
- collection_parser) }}
146
- {{ xpath_or_value_input('Language', 'language', collection.language, collection_parser) }}
147
- {{ xpath_or_value_input('Wordcount', 'wordcount', collection.wordcount, collection_parser) }}
148
-
149
- <div class="mb-3 row">
150
- <label class="col-sm-12 col-form-label"><i>Publication</i>
151
- </label>
152
- </div>
153
- {{ xpath_or_value_input('Date', 'edition_publication_date',
154
- collection.edition_publication_date, collection_parser) }}
155
- {{ xpath_or_value_input('Place', 'edition_publication_place',
156
- collection.edition_publication_place, collection_parser) }}
157
- <div class="mb-3 row">
158
- <label class="col-sm-12 col-form-label"><i>License</i>
159
- </label>
160
- </div>
161
- {{ xpath_or_value_input('Title', 'edition_license_title',
162
- collection.edition_license_title, collection_parser) }}
163
- {{ xpath_or_value_input('URL', 'edition_license_url',
164
- collection.edition_license_url, collection_parser) }}
165
-
166
- </div>
167
- </div>
168
- <div class="tab-pane fade" id="eltecAttributesContent_{{ collection_title }}" role="tabpanel"
169
- aria-labelledby="eltecAttributesTab_{{ collection_title }}">
170
- <div class="col-12">
171
- <div class="mb-3 row">
172
- <label class="col-sm-12 col-form-label"><b>General</b>
173
- </label>
174
- </div>
175
- {{ xpath_or_value_input('Author gender', 'eltec_author_gender', collection.eltec_author_gender,
176
- collection_parser) }}
177
- {{ xpath_or_value_input('Reprint count', 'eltec_reprintCount', collection.eltec_reprintCount,
178
- collection_parser) }}
179
- {{ xpath_or_value_input('Author gender', 'eltec_author_gender', collection.eltec_author_gender,
180
- collection_parser) }}
181
- {{ xpath_or_value_input('Timeslot', 'eltec_time_slot', collection.eltec_time_slot,
182
- collection_parser) }}
183
- {{ xpath_or_value_input('Corpus collection', 'eltec_corpus', collection.eltec_corpus,
184
- collection_parser) }}
185
- {{ xpath_or_value_input('Size', 'eltec_size', collection.eltec_size,
186
- collection_parser) }}
187
- </div>
188
- </div>
189
-
190
- <div class="tab-pane fade tei-explorer-content" id="teiExplorerContent_{{ collection_title }}" role="tabpanel"
191
- aria-labelledby="teiExplorer_{{ collection_title }}">TEI
192
- explorer</div>
193
- </form>
194
- </div>
@@ -1,24 +0,0 @@
1
- <form class="row mb-3" action="{{ url_for('upload_files', projectname=project.name) }}" method="POST"
2
- enctype="multipart/form-data">
3
- <h5>Upload Files or Folders</h5>
4
- <div class="col-6">
5
- <input type="file" class="form-control" name="files" multiple webkitdirectory onchange="this.form.submit()">
6
- </div>
7
- </form>
8
- <form class="row" method="POST" data-url="{{ url_for('clone_git_project', projectname=project.name) }}" method="POST"
9
- id="cloneFromGit">
10
- <h5>Upload from git project</h5>
11
- <i>Please be aware, that this can a take while (depending on the size of the git project)!</i>
12
- <div class="col-6">
13
- <input type="text" class="form-control" name="github_repo">
14
- </div>
15
- <div class="col-6">
16
- <button type="submit" class="btn btn-primary">
17
- <span class="spinner-border spinner-border-sm" style="display:none;" role="status"
18
- aria-hidden="true"></span>
19
- <span>Clone</span>
20
- </button>
21
- </div>
22
- </form>
23
-
24
- <br>
@@ -1,33 +0,0 @@
1
- {% if item.type == 'folder' %}
2
- <li class="list-group-item {{ active_class }} folder">
3
- <div class="d-flex justify-content-between align-items-center">
4
- <span>
5
- <a href="#" class="badge text-dark show-files" title="Show files">
6
- <span class="bi bi-eye-slash-fill"></span>
7
- </a>
8
- <span class="bi-folder-fill"></span>
9
- {{ item.name }}
10
- <a href="#" class="badge text-dark nxc_select-folder" title="Select folder" data-path="{{ item.path }}">
11
- <span class="bi bi-circle" data-path="{{ item.path }}"></span>
12
- </a>
13
- <span class="spinner-border spinner-border-sm" style="display:none;"></span>
14
- </span>
15
- <span>
16
- <span class="badge bg-primary rounded-pill">{{ item.children.count }}</span>
17
- </span>
18
- </div>
19
- {% for child in item.children.list %}
20
- {% with item=child %}
21
- <ul class="list-group list-group-flush">
22
- {% include 'nxc_file_tree.html' %}
23
- </ul>
24
- {% endwith %}
25
- {% endfor %}
26
- </li>
27
- {% else %}
28
- <li class="list-group-item p-0 ps-3 m-0 small text-muted {{ active_class }} file" style="display: none;">
29
- <span class="bi-file-earmark-text-fill"></span>
30
- {{ item.name }}
31
- </span>
32
- </li>
33
- {% endif %}
@@ -1,26 +0,0 @@
1
- {% extends 'layout.html' %}
2
- {% block content %}
3
- <div class="row">
4
- <div class="tab-content pt-2" id="tab-content">
5
- <div class="tab-pane {{'active' if tab=='storage' }}" id="tab_storage" role="tabpanel">
6
- {% include 'storage.html' %}
7
- </div>
8
- {% for c in project.collections %}
9
- {% set collection_config = project.collections[c]['config'] %}
10
- <div class="tab-pane {{ 'active' if tab==collection_config.short_title }}" id="tab_{{ c }}" role="tabpanel">
11
- </div>
12
- {% endfor %}
13
- <div class="tab-pane {{'active' if tab=='publish' }}" id="tab_publish_{{ project.name }}"
14
- data-url="{{ url_for('publication', projectname=project.name) }}" role="tabpanel">
15
- <span class="spinner-border spinner-border-sm" role="status"></span>
16
- </div>
17
- </div>
18
- </div>
19
-
20
- <div class=" modal fade" id="xpathParserModal" tabindex="-1" aria-labelledby="xpathParserModalLabel" aria-hidden="true">
21
- </div>
22
-
23
- <div class="modal fade" id="teiExplorer" tabindex="-1" aria-labelledby="teiExplorerLabel" aria-hidden="true">
24
- </div>
25
-
26
- {% endblock %}
@@ -1,49 +0,0 @@
1
- {% block content %}
2
- <div class="row mb-4">
3
- <ul class="nav nav-pills" id="" role="tablist">
4
- <li class="nav-item me-2" role="presentation">
5
- <button class="nav-link" data-bs-toggle="tab" href="#tab_upload" role="tab" aria-controls="tab_upload"
6
- aria-selected="false">
7
- <i class="bi bi-upload"></i>
8
- Upload
9
- </button>
10
- </li>
11
- <li class="nav-item">
12
- <a class="nav-link" data-bs-toggle="tab" href="#tab_nextcloud" role="tab" aria-controls="tab_nextcloud"
13
- aria-selected="false" data-url="{{ url_for('nextcloud_tab') }}" data-projectname="{{ project.name }}">
14
- <i class="bi bi-cloud"></i>
15
- Nextcloud
16
- </a>
17
- </li>
18
- <li class="nav-item">
19
- <a class="nav-link" data-bs-toggle="tab" href="#tab_files" role="tab" aria-controls="tab_files"
20
- aria-selected="false">
21
- <i class="bi bi-folder2-open"></i>
22
- Local files
23
- </a>
24
- </li>
25
- </ul>
26
- </div>
27
- <div class="row">
28
- <div class="tab-content pt-2" id="tab-content">
29
- <div class="tab-pane {{'active' if tab=='upload' }}" id="tab_upload" role="tabpanel">
30
- {% include 'file_upload.html' %}
31
- </div>
32
- <div class="tab-pane {{'active' if tab=='files' }}" id="tab_files" role="tabpanel">
33
- {% for item in project.list_files_and_folders() %}
34
- {% include 'file_tree.html' %}
35
- {% endfor %}
36
- </div>
37
- <div class="tab-pane {{'active' if tab=='nextcloud' }}" id="tab_nextcloud" role="tabpanel"
38
- data-projectname="{{ project.name }}">
39
- </div>
40
- </div>
41
- </div>
42
-
43
- <div class=" modal fade" id="xpathParserModal" tabindex="-1" aria-labelledby="xpathParserModalLabel" aria-hidden="true">
44
- </div>
45
-
46
- <div class="modal fade" id="teiExplorer" tabindex="-1" aria-labelledby="teiExplorerLabel" aria-hidden="true">
47
- </div>
48
-
49
- {% endblock %}
@@ -1,48 +0,0 @@
1
- <div class="row mb-3">
2
- <div class="col-12">
3
- <div class="input-group">
4
- <input type="text" class="form-control no-serialization" name="xpath" placeholder="XPath..."
5
- aria-label="XPath-Ausdruck">
6
- <button class="btn btn-primary check-xpath" id="button-check-xpath"
7
- data-url="{{url_for('check_xpath', projectname=project.name, collectionname=collection_title)}}">
8
- <span class="spinner-border spinner-border-sm d-none" role="status" aria-hidden="true"></span>
9
- <span class="bi bi-search"></span>
10
- </button>
11
- </div>
12
- </div>
13
- </div>
14
- <div class="row mb-3">
15
- <div class="col-8">
16
- <div class="row">
17
- {% for file in file_list %}
18
- <div class="col-xxl-4 col-lg-6 col-md-12 mb-2">
19
- <div class="card mb-2">
20
- <div class="card-body p-2">
21
- <div class="d-flex justify-content-between align-items-center">
22
- <div class="btn-group">
23
- <a href="#" class="btn btn-sm btn-outline-secondary load-tei-content"
24
- title="Display TEI Header" data-url="{{ url_for('load_tei_content') }}"
25
- data-path="{{ file['fullpath'] }}" data-type="header" data-heading="TEI Header">
26
- <span class="bi bi-file-earmark-code"></span>
27
- </a>
28
- <a href="#" class="btn btn-sm btn-outline-secondary load-tei-content"
29
- title="Display TEI Text" data-url="{{ url_for('load_tei_content') }}"
30
- data-path="{{ file['fullpath'] }}" data-type="text" data-heading="Text">
31
- <span class="bi bi-file-earmark-text"></span>
32
- </a>
33
- </div>
34
- <span class="ms-2 text-truncate">{{ file.name_stripped }}</span>
35
- </div>
36
- <div class="xpath-result mt-2" data-name="{{ file.name }}"></div>
37
- </div>
38
- </div>
39
- </div>
40
- {% endfor %}
41
- </div>
42
- </div>
43
- <div class="col-4">
44
- <div class="output card" style="max-height: 800px; overflow-x: auto;">
45
- <div class="card-body"></div>
46
- </div>
47
- </div>
48
- </div>
@@ -1,37 +0,0 @@
1
- <div class="modal-dialog modal-xl">
2
- <div class="modal-content">
3
- <div class="modal-header">
4
- <form class="row g-3" id="parseXPath" data-url="{{ request.base_url }}">
5
- <div class="col-auto">
6
- <h5 id="xpathParserModalLabel">Parse xpath:</h5>
7
- </div>
8
-
9
- <div class="col-auto">
10
- <input type="text" class="form-control" placeholder="xpath" name="xpath"
11
- value="{{ request.form.get('xpath') if request.form.get('xpath') }}">
12
- </div>
13
- <div class="col-auto">
14
- <button type="submit" class="btn btn-secondary mb-3">Run</button>
15
- </div>
16
- </form>
17
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
18
- </div>
19
- <div class="modal-body">
20
- {% set elements = collection_parser.elements %}
21
- <div class="row">
22
- {% for element in elements %}
23
- <div class="col-3 d-flex">
24
- <span class="p-0 ps-3 m-0 small text-muted">
25
- <b>{{ element['file']['filename'] }}</b>
26
- <br>
27
- {% if request.form.get("xpath") %}
28
- {{ element['tei_parser'].find(request.form.get("xpath")).text }}
29
- {% endif %}
30
- &nbsp;
31
- </span>
32
- </div>
33
- {% endfor%}
34
- </div>
35
- </div>
36
- </div>
37
- </div>