Quellcode durchsuchen

expanding sub-menu items for projects page.

Thomas B vor 2 Monaten
Ursprung
Commit
b482df013f
3 geänderte Dateien mit 59 neuen und 19 gelöschten Zeilen
  1. 16
    0
      input/projects.md
  2. 21
    10
      macros.py
  3. 22
    9
      static/css/style.css

+ 16
- 0
input/projects.md Datei anzeigen

@@ -12,3 +12,19 @@ To receive my latest updates you can subscribe to the <a href="rss.xml"><img src
12 12
 <!--%
13 13
 printProjectsMenu()
14 14
 %-->
15
+
16
+<script>
17
+    var coll = document.getElementsByClassName("collapse_menu");
18
+    var i;
19
+    for (i = 0; i < coll.length; i++) {
20
+        coll[i].addEventListener("click", function() {
21
+            this.classList.toggle("collapseactive_menu");
22
+            var content = this.parentElement.nextElementSibling;
23
+            if (content.style.maxHeight) {
24
+                content.style.maxHeight = null;
25
+            } else {
26
+                content.style.maxHeight = content.scrollHeight + "px";
27
+            }
28
+        });
29
+    }
30
+</script>

+ 21
- 10
macros.py Datei anzeigen

@@ -165,7 +165,7 @@ def githubCommitBadge(p, showInline = False):
165 165
             ret += ".svg?logo=git&style=flat\" /></a>"
166 166
     return ret
167 167
 
168
-def printMenuItem(p, yearsAsHeading = False, showDateSpan = False, showOnlyStartDate = False, nicelyFormatFullDate = False, lastyear = "0", lang = "", showLastCommit = True, hide_description = False, updates_as_heading = False):
168
+def printMenuItem(p, yearsAsHeading = False, showDateSpan = False, showOnlyStartDate = False, nicelyFormatFullDate = False, lastyear = "0", lang = "", showLastCommit = True, hide_description = False, updates_as_heading = False, desc_has_collapse = False):
169 169
     title = p.title
170 170
     if lang != "":
171 171
         if p.get("title_" + lang, "") != "":
@@ -202,9 +202,11 @@ def printMenuItem(p, yearsAsHeading = False, showDateSpan = False, showOnlyStart
202 202
         if p.get("description", "") != "":
203 203
             description = p.get("description", "")
204 204
             if lang != "":
205
-                if p.get("description_" + lang, "") != "":
206
-                    description = p.get("description_" + lang, "")
207
-            print("<br><span class=\"listdesc\">" + description + "</span>")
205
+                description = p.get("description_" + lang, description)
206
+            if desc_has_collapse:
207
+                print("<br><span class=\"listdesc collapse_menu\">" + description + "</span>")
208
+            else:
209
+                print("<br><span class=\"listdesc\">" + description + "</span>")
208 210
 
209 211
     if showLastCommit:
210 212
         link = githubCommitBadge(p)
@@ -251,6 +253,7 @@ def printProjectsMenu():
251 253
     # prints all pages with parent 'projects' or 'stuff'.
252 254
     # first the ones without date, sorted by position.
253 255
     # this first section includes sub-headings for children
256
+    # in a hidden div, expanding when clicking the description.
254 257
     # then afterwards those with date, split by year.
255 258
     # also supports blog posts with parent.
256 259
     enpages = [p for p in pages if p.lang == "en"]
@@ -266,20 +269,24 @@ def printProjectsMenu():
266 269
 
267 270
     # print all pages
268 271
     for p in mpages:
269
-        printMenuItem(p)
270
-
271
-        # print subpages for these top-level items
272
+        # fetch subpages for these top-level items
272 273
         subpages = [sub for sub in enpages if sub.get("parent", "none") == p.get("child-id", "unknown")]
273 274
         order = p.get("sort-order", "date")
274 275
         if order == "position":
275 276
             subpages.sort(key=lambda p: p["position"])
276 277
         else:
277 278
             subpages.sort(key=lambda p: p["date"], reverse = True)
279
+
280
+        printMenuItem(p, False, False, False, False, "0", "", True, False, False, len(subpages) > 0)
281
+
282
+        # print subpages
278 283
         if len(subpages) > 0:
284
+            print("<div class='collapsecontent_menu'>")
279 285
             print("<ul>")
280 286
             for sp in subpages:
281 287
                 printMenuItem(sp, False, True, True, False, "0", "", False, True)
282 288
             print("</ul>")
289
+            print("</div>")
283 290
 
284 291
     # slect pages with a date
285 292
     dpages = [p for p in enpages if p.get("date", "") != ""]
@@ -291,20 +298,24 @@ def printProjectsMenu():
291 298
     # print all pages
292 299
     lastyear = "0"
293 300
     for p in mpages:
294
-        lastyear = printMenuItem(p, True, True, False, False, lastyear)
295
-
296
-        # print subpages for these top-level items
301
+        # fetch subpages for these top-level items
297 302
         subpages = [sub for sub in enpages if sub.get("parent", "none") == p.get("child-id", "unknown")]
298 303
         order = p.get("sort-order", "date")
299 304
         if order == "position":
300 305
             subpages.sort(key=lambda p: p["position"])
301 306
         else:
302 307
             subpages.sort(key=lambda p: p["date"], reverse = True)
308
+
309
+        lastyear = printMenuItem(p, True, True, False, False, lastyear, "", True, False, False, len(subpages) > 0)
310
+
311
+        # print subpages
303 312
         if len(subpages) > 0:
313
+            print("<div class='collapsecontent_menu'>")
304 314
             print("<ul>")
305 315
             for sp in subpages:
306 316
                 printMenuItem(sp, False, True, True, False, "0", "", False, True)
307 317
             print("</ul>")
318
+            print("</div>")
308 319
 
309 320
     print("</ul>")
310 321
 

+ 22
- 9
static/css/style.css Datei anzeigen

@@ -274,28 +274,41 @@ span.font-small {
274 274
     cursor: zoom-in;
275 275
 }
276 276
 
277
-.collapse {
277
+.collapse, .collapse_menu {
278 278
     cursor: pointer;
279
+}
280
+
281
+.collapse {
279 282
     padding: 15px;
280 283
 }
281 284
 
282
-.collapse:after {
285
+.collapse:after, .collapse_menu:before {
283 286
     content: '\002B';
284 287
     font-weight: bold;
288
+}
289
+
290
+.collapse:after {
285 291
     float: right;
286 292
     margin-left: 5px;
287 293
 }
288 294
 
289
-.collapseactive:after {
295
+.collapse_menu:before {
296
+    margin-right: 5px;
297
+}
298
+
299
+.collapseactive:after, .collapseactive_menu:before {
290 300
     content: "\2212";
291 301
 }
292 302
 
293
-.collapsecontent {
303
+.collapsecontent, .collapsecontent_menu {
294 304
     padding: 0;
295
-    margin: 15px;
296 305
     max-height: 0;
297 306
     overflow: hidden;
298 307
     transition: max-height 0.1s ease-out;
308
+}
309
+
310
+.collapsecontent {
311
+    margin: 15px;
299 312
     border-width: 0px;
300 313
     border-style: solid;
301 314
     border-radius: 10px;
@@ -412,7 +425,7 @@ s {
412 425
     text-decoration-color: #FF0000;
413 426
 }
414 427
 
415
-.releasecard, .collapse {
428
+.releasecard, .collapse, .collapse_menu:before {
416 429
     background-color: #C0C0C0;
417 430
 }
418 431
 
@@ -425,7 +438,7 @@ s {
425 438
     margin-left: 1em;
426 439
 }
427 440
 
428
-.collapseactive, .collapse:hover {
441
+.collapseactive, .collapse:hover, .collapse_menu:hover {
429 442
     background-color: #999999;
430 443
 }
431 444
 
@@ -456,7 +469,7 @@ blockquote:before, blockquote:after {
456 469
         color: #BA55D3;
457 470
     }
458 471
 
459
-    .releasecard, .collapse {
472
+    .releasecard, .collapse, .collapse_menu:before {
460 473
         background-color: #232323;
461 474
     }
462 475
 
@@ -500,7 +513,7 @@ blockquote:before, blockquote:after {
500 513
         color: #FFFFFF !important;
501 514
     }
502 515
 
503
-    .collapseactive, .collapse:hover {
516
+    .collapseactive, .collapse:hover, .collapse_menu:hover {
504 517
         background-color: #424242;
505 518
     }
506 519
 

Laden…
Abbrechen
Speichern