j1-template 2023.0.2 → 2023.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/_includes/themes/j1/layouts/content_generator_post.html +8 -2
  3. data/_includes/themes/j1/layouts/layout_metadata_generator.html +6 -0
  4. data/_includes/themes/j1/procedures/blocks/footer/boxes/social_media_icons.proc +22 -22
  5. data/_includes/themes/j1/procedures/posts/pager.proc +4 -0
  6. data/assets/data/banner.html +29 -18
  7. data/assets/data/panel.html +69 -12
  8. data/assets/themes/j1/adapter/js/navigator.js +77 -303
  9. data/assets/themes/j1/adapter/js/themer.js +10 -6
  10. data/lib/j1/version.rb +1 -1
  11. data/lib/starter_web/Gemfile +3 -3
  12. data/lib/starter_web/README.md +5 -5
  13. data/lib/starter_web/_config.yml +10 -10
  14. data/lib/starter_web/_data/blocks/banner.yml +2 -1
  15. data/lib/starter_web/_data/blocks/panel.yml +6 -1
  16. data/lib/starter_web/_data/modules/defaults/navigator.yml +2 -2
  17. data/lib/starter_web/_data/modules/themer.yml +0 -1
  18. data/lib/starter_web/_data/templates/feed.xml +1 -1
  19. data/lib/starter_web/_includes/custom/agency/portfolio.html +67 -0
  20. data/lib/starter_web/_includes/custom/agency/services.html +35 -0
  21. data/lib/starter_web/_includes/custom/agency/team.html +29 -0
  22. data/lib/starter_web/_plugins/index/lunr.rb +1 -1
  23. data/lib/starter_web/assets/images/agency/img/about/1.jpg +0 -0
  24. data/lib/starter_web/assets/images/agency/img/about/2.jpg +0 -0
  25. data/lib/starter_web/assets/images/agency/img/about/3.jpg +0 -0
  26. data/lib/starter_web/assets/images/agency/img/about/4.jpg +0 -0
  27. data/lib/starter_web/assets/images/agency/img/close-icon.svg +1 -0
  28. data/lib/starter_web/assets/images/agency/img/header-bg.jpg +0 -0
  29. data/lib/starter_web/assets/images/agency/img/logos/facebook.svg +34 -0
  30. data/lib/starter_web/assets/images/agency/img/logos/google.svg +35 -0
  31. data/lib/starter_web/assets/images/agency/img/logos/ibm.svg +24 -0
  32. data/lib/starter_web/assets/images/agency/img/logos/microsoft.svg +42 -0
  33. data/lib/starter_web/assets/images/agency/img/map-image.png +0 -0
  34. data/lib/starter_web/assets/images/agency/img/navbar-logo.svg +1 -0
  35. data/lib/starter_web/assets/images/agency/img/portfolio/1.jpg +0 -0
  36. data/lib/starter_web/assets/images/agency/img/portfolio/2.jpg +0 -0
  37. data/lib/starter_web/assets/images/agency/img/portfolio/3.jpg +0 -0
  38. data/lib/starter_web/assets/images/agency/img/portfolio/4.jpg +0 -0
  39. data/lib/starter_web/assets/images/agency/img/portfolio/5.jpg +0 -0
  40. data/lib/starter_web/assets/images/agency/img/portfolio/6.jpg +0 -0
  41. data/lib/starter_web/assets/images/agency/img/screenshot.png +0 -0
  42. data/lib/starter_web/assets/images/agency/img/team/1.jpg +0 -0
  43. data/lib/starter_web/assets/images/agency/img/team/2.jpg +0 -0
  44. data/lib/starter_web/assets/images/agency/img/team/3.jpg +0 -0
  45. data/lib/starter_web/package.json +2 -1
  46. data/lib/starter_web/pages/public/learn/mweb/mweb-tester.adoc +299 -0
  47. data/lib/starter_web/pages/public/learn/mweb/static/index.css +237 -0
  48. data/lib/starter_web/pages/public/learn/mweb/static/index.js +1138 -0
  49. data/lib/starter_web/pages/public/learn/mweb/static/lodash.min.js +140 -0
  50. data/lib/starter_web/pages/public/learn/mweb/static/socket.io/socket.io.js +4570 -0
  51. data/lib/starter_web/pages/public/learn/mweb/static/socket.io/socket.io.min.js +7 -0
  52. data/lib/starter_web/pages/public/learn/mweb/static/video-js.min.css +1 -0
  53. data/lib/starter_web/pages/public/learn/mweb/static/video.min.js +26 -0
  54. data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
  55. data/lib/starter_web/utilsrv/package.json +1 -1
  56. metadata +35 -10
  57. data/assets/themes/j1/core/css/icon-fonts/materialdesign-light.css +0 -1222
  58. data/assets/themes/j1/core/css/icon-fonts/materialdesign-light.min.css +0 -1
  59. data/assets/themes/j1/core/css/icon-fonts/materialdesign.css +0 -22307
  60. data/assets/themes/j1/core/css/icon-fonts/materialdesign.min.css +0 -1
  61. data/assets/themes/j1/core/css/icon-fonts/twemoji.css +0 -9499
  62. data/assets/themes/j1/core/css/icon-fonts/twemoji.min.css +0 -1
  63. data/assets/themes/j1/core/css/themes/theme_vapor/bootstrap.css +0 -8876
  64. data/assets/themes/j1/core/css/themes/theme_vapor/bootstrap.min.css +0 -5
@@ -0,0 +1,299 @@
1
+ ---
2
+ title: Tester
3
+ tagline: Media Web
4
+ date: 2023-01-05 00:00:00
5
+ description: >
6
+ Welcome to the preview page focussing on the image module. This page
7
+ shows some valuable features of the J1 Theme to manage your image-based
8
+ content using lightboxes, carousels (slider), and galleries.
9
+
10
+ categories: [ Testpages ]
11
+ tags: [ Media Web ]
12
+
13
+ comments: false
14
+ fab_menu_id: page_ctrl
15
+
16
+ permalink: /pages/public/learn/mweb/
17
+ regenerate: false
18
+
19
+ resources: [ datatables ]
20
+ resource_options:
21
+ - attic:
22
+ padding_top: 400
23
+ padding_bottom: 50
24
+ opacity: 0.5
25
+ slides:
26
+ - url: /assets/images/pages/roundtrip/images-1920x1280-bw.jpg
27
+ alt: Photo by Ricardo Gomez Angel on Unsplash
28
+ badge:
29
+ type: unsplash
30
+ author: Ricardo Gomez Angel
31
+ href: https://unsplash.com/@ripato/portfolio
32
+ ---
33
+ // https://mediathekviewweb.de/socket.io/?EIO=4&transport=polling&t=OM6fpnN&sid=Wzzj9vV-nAu1pbImBGNk
34
+ // http://localhost:41000/socket.io/?EIO=4&transport=polling&t=OM6iftg
35
+
36
+ // Page Initializer
37
+ // =============================================================================
38
+ // Enable the Liquid Preprocessor
39
+ :page-liquid:
40
+
41
+ // Set (local) page attributes here
42
+ // -----------------------------------------------------------------------------
43
+ // :page--attr: <attr-value>
44
+ :images-dir: {imagesdir}/pages/roundtrip/100_present_images
45
+
46
+ // Load Liquid procedures
47
+ // -----------------------------------------------------------------------------
48
+ {% capture load_attributes %}themes/{{site.template.name}}/procedures/global/attributes_loader.proc{%endcapture%}
49
+
50
+ // Load page attributes
51
+ // -----------------------------------------------------------------------------
52
+ {% include {{load_attributes}} scope="global" %}
53
+
54
+ // Page content
55
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
56
+
57
+ // Include sub-documents (if any)
58
+ // -----------------------------------------------------------------------------
59
+
60
+ ++++
61
+
62
+ <!-- link rel="stylesheet" href="static/icons/material-icons.css" / -->
63
+ <link rel="stylesheet" href="static/video-js.min.css" />
64
+ <link rel="stylesheet" href="static/index.css" />
65
+
66
+ <!-- script src="static/js.cookie.min.js"></script -->
67
+ <!-- script src="static/socket.io.min.js"></script -->
68
+ <script src="static/socket.io/socket.io.js"></script>
69
+ <script src="static/lodash.min.js"></script>
70
+ <script src="static/video.min.js"></script>
71
+ <script src="static/index.js"></script>
72
+
73
+ ++++
74
+
75
+
76
+
77
+ ++++
78
+
79
+ <!-- div id="videooverlay" class="overlay initiallyHidden" tabindex="0">
80
+ <a id="videocloseButton" class="closeButton">&times;</a>
81
+ <div class="row overlay-content">
82
+ <div class="col-lg-3 col-md-2 col-sm-2 col-xs-1"></div>
83
+ <div class="col-lg-6 col-md-8 col-sm-8 col-xs-10 noPadding">
84
+ <div id="videocontent"></div>
85
+ </div>
86
+ <div class="col-lg-3 col-md-2 col-sm-2 col-xs-1"></div>
87
+ </div>
88
+ </div -->
89
+
90
+ <div id="blur" class="no-filter">
91
+ <nav class="navbar navbar-default">
92
+ <div class="container-fluid">
93
+ <div class="navbar-header">
94
+ <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar">
95
+ <span class="icon-bar"></span>
96
+ <span class="icon-bar"></span>
97
+ <span class="icon-bar"></span>
98
+ </button>
99
+ <a id="logo" class="navbar-brand" href="#">MediathekViewWeb</a>
100
+ </div>
101
+ <div class="collapse navbar-collapse" id="navbar">
102
+ <ul class="nav navbar-nav">
103
+ </ul>
104
+ <ul class="nav navbar-nav navbar-right">
105
+ <li><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;hosted_button_id=BDVH46DLCM7E8&amp;source=url" target="_blank">Spenden</a></li>
106
+ <li><a id="forumButton" target="_blank" href="https://forum.mediathekview.de/category/11/offizeller-client-mediathekviewweb">Forum</a></li>
107
+ <li><a id="contactButton" href="mailto:kontakt@mediathekviewweb.de" data-onclick-return-false>Kontakt</a></li>
108
+ <li><a id="githubButton" target="_blank" href="https://github.com/mediathekview/mediathekviewweb">GitHub</a></li>
109
+
110
+ <li class="dropdown">
111
+ <a class="dropdown-toggle about" data-toggle="dropdown">Über
112
+ <span class="caret"></span>
113
+ </a>
114
+
115
+ <ul class="dropdown-menu">
116
+ <li><a id="donateButton" target="_blank" href="donate.html">Spenden</a></li>
117
+ <li><a id="impressumButton" target="_blank" href="impressum.html">Impressum</a></li>
118
+ <li><a id="datenschutzButton" target="_blank" href="datenschutz.html">Datenschutz</a></li>
119
+ </ul>
120
+ </li>
121
+ </ul>
122
+ </div>
123
+ </div>
124
+ </nav>
125
+
126
+ <div class="container">
127
+
128
+ <div id="browserWarning" class="showafter1s" style="border: 3px solid red; padding: 10px; margin: 15px">
129
+ <span><a target="_blank" href="https://github.com/mediathekview/mediathekviewweb/issues/8">Dein Browser wird
130
+ nicht unterstützt</a> oder Javascript ist deaktiviert</span>
131
+ </div>
132
+
133
+ <div id="main-view">
134
+ <div class="row">
135
+ <div class="col-lg-8 col-md-7 col-sm-7">
136
+ <div class="input-group">
137
+ <span id="searchSpan" class="input-group-addon" data-toggle="popover" title="Selektoren" data-trigger="hover"
138
+ data-html="true" data-placement="bottom"
139
+ data-content="!Sender</br>#Thema</br>+Titel</br>*Beschreibung</br>&amp;lt;x (in minuten)</br>&amp;gt;x (in minuten)">Suche</span>
140
+ <input id="queryInput" type="text" class="form-control" autofocus>
141
+ </div>
142
+ <a tabIndex="-1"><i id="queryInputClearButton" class="material-icons">clear</i></a>
143
+ </div>
144
+
145
+ <div class="col-lg-4 col-md-5 col-sm-5">
146
+ <div class="input-group" id="queryParameters">
147
+ <span class="input-group-addon">
148
+ <input type="checkbox" name="everywhere" id="everywhereCheckbox">
149
+ <label for="everywhereCheckbox">Überall</label>
150
+ </span>
151
+
152
+ <span class="input-group-addon">
153
+ <input type="checkbox" name="future" id="futureCheckbox" checked>
154
+ <label for="futureCheckbox">Zukünftige</label>
155
+ </span>
156
+
157
+ <span class="input-group-btn">
158
+ <button id="rssFeedButton" class="btn btn-default" type="button"><i class="material-icons icon-small">rss_feed</i></button>
159
+ <button id="helpButton" class="btn btn-default" type="button">Hilfe</button>
160
+ </span>
161
+ </div>
162
+ </div>
163
+ </div>
164
+
165
+ <br>
166
+
167
+ <table id="mediathek" class="table table-striped table-hover">
168
+ <thead>
169
+ <tr>
170
+ <th data-onclick-sort="channel">Sender</th>
171
+ <th fielddata-is-disabled="topic">Thema</th>
172
+ <th fielddata-is-disabled="title">Titel</th>
173
+ <th><i class="material-icons">description</i></th>
174
+ <th data-onclick-sort="timestamp">Datum</th>
175
+ <th>Zeit</th>
176
+ <th data-onclick-sort="duration">Dauer</th>
177
+ <th>Video</th>
178
+ </tr>
179
+ </thead>
180
+ <tbody>
181
+ </tbody>
182
+ </table>
183
+
184
+ <div class="smallMarginTop">
185
+ <div class="floatRight">
186
+ <ul id="pagination" class="pagination paginationstyle">
187
+ </ul>
188
+ </div>
189
+ <div class="floatLeft">
190
+ <p id="queryInfoLabel"></p>
191
+ </div>
192
+ </div>
193
+
194
+ </div>
195
+
196
+ <div id="generic-html-view" class="initiallyHidden">
197
+ <button id="genericHtmlViewBackButton" class="btn btn-default" type="button">Zurück</button>
198
+ <div id="genericHtmlContent"></div>
199
+ </div>
200
+
201
+ <div id="connectingModal" class="modal fade" tabindex="-1" role="dialog">
202
+ <div class="modal-dialog" role="document">
203
+ <div class="modal-content">
204
+ <div class="modal-header">
205
+ <h4 class="modal-title">Keine Verbindung</h4>
206
+ </div>
207
+ <div class="modal-body">
208
+ <i class="material-icons spin-left" style="display: inline-flex; vertical-align: middle; font-size: 2.5em;">sync</i>
209
+ <span style="font-size:1.2em; vertical-align: middle;">Verbinde...</span>
210
+ </div>
211
+ </div>
212
+
213
+ </div>
214
+ </div>
215
+
216
+ <div id="indexingModal" class="modal fade" tabindex="-1" role="dialog">
217
+ <div class="modal-dialog" role="document">
218
+ <div class="modal-content">
219
+ <div class="modal-header">
220
+ <h4 class="modal-title">Server aktualisiert Datenbank...</h4>
221
+ </div>
222
+ <div class="modal-body">
223
+ <div class="progress">
224
+ <div id="parsingProgressbar" class="progress-bar progress-bar-striped active" role="progressbar" style="min-width: 2em;">
225
+ 0%
226
+ </div>
227
+ </div>
228
+ <div class="progress">
229
+ <div id="indexingProgressbar" class="progress-bar progress-bar-striped active" role="progressbar" style="min-width: 2em;">
230
+ 0%
231
+ </div>
232
+ </div>
233
+ <div class="row">
234
+ <div class="col-sm-4">Einträge:
235
+ <div id="indexingMessage">0</div>
236
+ </div>
237
+ <div class="col-sm-4">Dauer:
238
+ <div id="indexingTimeLabel">0</div>
239
+ </div>
240
+ </div>
241
+ </div>
242
+ </div>
243
+ </div>
244
+ </div>
245
+
246
+ <div id="contactModal" class="modal fade" tabindex="-1" role="dialog">
247
+ <div class="modal-dialog" role="document">
248
+ <div class="modal-content">
249
+ <div class="modal-header">
250
+ <button type="button" class="close" data-dismiss="modal">&times;</button>
251
+ <h4 class="modal-title">Kontakt</h4>
252
+ </div>
253
+ <div class="modal-body">
254
+ <p>Für gefundene Fehler oder Verbesserungsvorschläge verwende bitte die <a target="_blank" href="https://github.com/mediathekview/mediathekviewweb/issues">Issues auf
255
+ GitHub.</a></p>
256
+ <p>Für fehlende Sendungen gibt es Hilfe <a target="_blank" href="https://forum.mediathekview.de/">im Forum</a>.</p>
257
+ <p>Für alles andere oder im Fall, dass du kein GitHub Account hast/willst, schreibe mir eine Mail: <a target="_blank"
258
+ href="mailto:kontakt@mediathekviewweb.de">kontakt@mediathekviewweb.de</a>. Bitte keine Anfragen zu fehlenden Sendungen per Mail!</p>
259
+ </div>
260
+ </div>
261
+
262
+ </div>
263
+ </div>
264
+
265
+ <div id="cookieModal" class="modal fade" tabindex="-1" role="dialog">
266
+ <div class="modal-dialog" role="document">
267
+ <div class="modal-content">
268
+ <div class="modal-header">
269
+ <h4 class="modal-title">Cookies</h4>
270
+ </div>
271
+ <div class="modal-body">
272
+ <p>
273
+ Diese Website verwendet Cookies für die Darstellung von Werbung. Hierbei werden Daten an Google übertragen. Nähere Informationen dazu finden Sie in unserer
274
+ <a target="_blank" href="datenschutz.html">Datenschutzerklärung</a>.
275
+ Klicken Sie auf „Akzeptieren“, um Cookies zu akzeptieren und direkt unsere Website besuchen zu können.
276
+ </p>
277
+
278
+ <p>
279
+ <a target="_blank" href="impressum.html">Impressum aufrufen</a>
280
+ </p>
281
+
282
+ <p>
283
+ Sollten Sie mit den Werbe-Cookies nicht einverstanden sein, bitten wir Sie über eine
284
+ <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;hosted_button_id=BDVH46DLCM7E8&amp;source=url" target="_blank">Spende</a>
285
+ nachzudenken, um den Weiterbetrieb der Website zu ermöglichen.
286
+ </p>
287
+
288
+ <button id="cookieDenyButton" class="btn btn-default margin-right-1" type="button">Ablehnen</button>
289
+ <button id="cookieAcceptButton" class="btn btn-success" type="button">Akzeptieren</button>
290
+ </div>
291
+ </div>
292
+
293
+ </div>
294
+ </div>
295
+
296
+ </div>
297
+ </div>
298
+
299
+ ++++
@@ -0,0 +1,237 @@
1
+ html * {
2
+ font-family: 'Roboto';
3
+ }
4
+
5
+ .spin-left {
6
+ animation: spinleft 2s infinite linear;
7
+ }
8
+
9
+ .spin-right {
10
+ animation: spinright 2s infinite linear;
11
+ }
12
+
13
+ @keyframes spinleft {
14
+ from {
15
+ transform: scale(1) rotate(360deg);
16
+ }
17
+
18
+ to {
19
+ transform: scale(1) rotate(0deg);
20
+ }
21
+ }
22
+
23
+ @keyframes spinright {
24
+ from {
25
+ transform: scale(1) rotate(0deg);
26
+ }
27
+
28
+ to {
29
+ transform: scale(1) rotate(360deg);
30
+ }
31
+ }
32
+
33
+ @keyframes pulse {
34
+ 0% {
35
+ transform: scale(0.8);
36
+ }
37
+
38
+ 50% {
39
+ transform: scale(0.8);
40
+ }
41
+
42
+ 100% {
43
+ transform: scale(1);
44
+ }
45
+ }
46
+
47
+ /* The element to apply the animation to */
48
+ .pulse {
49
+ animation: pulse 0.5s;
50
+ }
51
+
52
+ .showafter1s {
53
+ animation: show 1s;
54
+ }
55
+
56
+ @keyframes show {
57
+ 0% {
58
+ opacity: 0;
59
+ }
60
+
61
+ 99% {
62
+ opacity: 0;
63
+ }
64
+
65
+ 100% {
66
+ opacity: 1;
67
+ }
68
+ }
69
+
70
+ .margin-left {
71
+ margin-left: 0.2em;
72
+ }
73
+
74
+ .margin-right {
75
+ margin-right: 0.2em;
76
+ }
77
+
78
+ .margin-right-1 {
79
+ margin-right: 1rem;
80
+ }
81
+
82
+ .paginationstyle {
83
+ margin: 0 !important;
84
+ float: right;
85
+ }
86
+
87
+ .initiallyHidden {
88
+ display: none;
89
+ }
90
+
91
+ .floatRight {
92
+ float: right;
93
+ }
94
+
95
+ .rotateLeft {
96
+ -webkit-transform: rotate(-90deg);
97
+ transform: rotate(-90deg);
98
+ }
99
+
100
+ .floatLeft {
101
+ float: left;
102
+ }
103
+
104
+ .watchDownloadField {
105
+ min-width: 4.2em;
106
+ }
107
+
108
+ .filesizeCell {
109
+ min-width: 6em;
110
+ }
111
+
112
+ .movie-icon {
113
+ line-height: 0 !important;
114
+ }
115
+
116
+ .material-icons {
117
+ vertical-align: middle;
118
+ transition: all 0.25s ease-in-out;
119
+ }
120
+
121
+ td {
122
+ vertical-align: middle !important;
123
+ line-height: 1.5rem !important;
124
+ padding: 0px 8px !important;
125
+ height: 40px !important;
126
+ }
127
+
128
+ label {
129
+ vertical-align: middle;
130
+ top: 50%;
131
+ line-height: 0;
132
+ }
133
+
134
+ #queryInputGroup {
135
+ width: 100%;
136
+ }
137
+
138
+ #queryInputClearButton {
139
+ position: absolute;
140
+ font-size: 18px;
141
+ right: 1.3em;
142
+ top: 50%;
143
+ line-height: 0;
144
+ opacity: 0;
145
+ height: auto;
146
+ cursor: pointer;
147
+ z-index: 3;
148
+ }
149
+
150
+ #mediathek {
151
+ width: 100% !important;
152
+ }
153
+
154
+ .smallMarginTop {
155
+ margin-top: 0.7em;
156
+ }
157
+
158
+ .icon-big {
159
+ font-size: 2em !important;
160
+ transition: all 0.25s ease-in-out;
161
+ }
162
+
163
+ .icon-small {
164
+ font-size: 1.3em !important;
165
+ transition: all 0.25s ease-in-out;
166
+ }
167
+
168
+ .noPadding {
169
+ padding: 0 !important;
170
+ }
171
+
172
+ .blur {
173
+ -webkit-filter: blur(3px) !important;
174
+ filter: blur(3px) !important;
175
+ transition: all 0.4s ease-in-out;
176
+ }
177
+
178
+ .no-filter {
179
+ -webkit-filter: none;
180
+ filter: none;
181
+ transition: all 0.4s ease-in-out;
182
+ }
183
+
184
+ .overlay {
185
+ position: fixed;
186
+ height: 100%;
187
+ width: 100%;
188
+ z-index: 100000;
189
+ left: 0;
190
+ top: 0;
191
+ background-color: rgba(0, 0, 0, 0.85);
192
+ overflow-x: hidden;
193
+ }
194
+
195
+ .overlay-content {
196
+ position: absolute;
197
+ top: 20%;
198
+ width: 100%;
199
+ margin: 0;
200
+ text-align: center;
201
+ }
202
+
203
+ .overlay .closeButton {
204
+ position: absolute;
205
+ top: 20px;
206
+ right: 45px;
207
+ font-size: 60px;
208
+ cursor: pointer;
209
+ }
210
+
211
+ .about {
212
+ cursor: pointer;
213
+ }
214
+
215
+ .table {
216
+ margin-bottom: 0;
217
+ }
218
+
219
+ th[data-onclick-sort] {
220
+ cursor: pointer;
221
+ }
222
+
223
+ .dataTables_scrollHead tr[data-sort="channel-asc"] > th[data-onclick-sort="channel"]::after,
224
+ .dataTables_scrollHead tr[data-sort="topic-asc"] > th[data-onclick-sort="topic"]::after,
225
+ .dataTables_scrollHead tr[data-sort="timestamp-asc"] > th[data-onclick-sort="timestamp"]::after,
226
+ .dataTables_scrollHead tr[data-sort="duration-asc"] > th[data-onclick-sort="duration"]::after {
227
+ content: "▲";
228
+ margin-left: 0.25em;
229
+ }
230
+
231
+ .dataTables_scrollHead tr[data-sort="channel-desc"] > th[data-onclick-sort="channel"]::after,
232
+ .dataTables_scrollHead tr[data-sort="topic-desc"] > th[data-onclick-sort="topic"]::after,
233
+ .dataTables_scrollHead tr[data-sort="timestamp-desc"] > th[data-onclick-sort="timestamp"]::after,
234
+ .dataTables_scrollHead tr[data-sort="duration-desc"] > th[data-onclick-sort="duration"]::after {
235
+ content: "▼";
236
+ margin-left: 0.25em;
237
+ }