From d692d30ff8fd910db83a8c9e383af35724dae9b5 Mon Sep 17 00:00:00 2001 From: Lucien Cartier-Tilet Date: Tue, 5 May 2020 11:50:28 +0200 Subject: [PATCH] Now all pages in sitemap are detected Also made the code not language-related so it can be used as a backend for all my org-generated websites. --- web/dart/parse_sitemap.dart | 43 +++++++++++++++++++---------------- web/dart/reorganize_html.dart | 20 ++++++++-------- web/style/style.scss | 2 +- 3 files changed, 35 insertions(+), 30 deletions(-) diff --git a/web/dart/parse_sitemap.dart b/web/dart/parse_sitemap.dart index fe95187..33ccd94 100644 --- a/web/dart/parse_sitemap.dart +++ b/web/dart/parse_sitemap.dart @@ -1,6 +1,7 @@ import 'dart:html' show HttpRequest; import 'package:html/parser.dart' show parse; +import 'package:html/dom.dart' show Element; // Get the sitemap content Future getSitemap() async { @@ -13,26 +14,30 @@ Future getSitemap() async { return 'Error'; } +// Parse the list of elements and detect pages from this list +Map detectPages(List sitemap, [String prefix]) { + final links = {}; + for (var elem in sitemap) { + if (elem.outerHtml.contains('index')) { + continue; + } else if (elem.innerHtml.startsWith('> parseSitemap() async { - var links = {}; - await getSitemap().then((String content) { - final sitemap = parse(content).getElementsByClassName('org-ul')[0].children; - for (var elem in sitemap) { - // TODO: make this recursive so prefixes in nested folders can be added to - // each other - if (elem.innerHtml.startsWith(' classes, [String id]) { return icon; } -Future makeLanguages() async { - // Languages - var languages = Element.ul() - ..attributes['id'] = 'drop-lang' +Future makePages() async { + // Pages + var pages = Element.ul() + ..attributes['id'] = 'drop-page' ..classes.add('dropdown'); await parseSitemap().then((final sitemap) => { sitemap.forEach((url, name) { @@ -29,15 +29,15 @@ Future makeLanguages() async { Element.a() ..attributes['href'] = url ..innerText = name); - languages.insertAdjacentElement('beforeEnd', link); + pages.insertAdjacentElement('beforeEnd', link); }) }); return Element.li() ..append(Element.a() ..attributes['href'] = 'javascript:void(0)' - ..append(makeIcon(['fas', 'fa-language']))) + ..append(makeIcon(['fas', 'fa-flag']))) ..classes.addAll(['nav-item', 'has-dropdown']) - ..insertAdjacentElement('beforeEnd', languages); + ..insertAdjacentElement('beforeEnd', pages); } Future makeTocDropDown() async { @@ -115,7 +115,7 @@ Future makeShare() async { // Add a navbar atop of the HTML body, containing two buttons: // - One back to home -// - A dropdown to each language detected in the sitemap +// - A dropdown to each page detected in the sitemap Future makeNavbar() async { var navbar_content = Element.ul()..classes.add('navbar-nav'); @@ -128,8 +128,8 @@ Future makeNavbar() async { ..attributes['href'] = '/' ..append(makeIcon(['fas', 'fa-home'])))); - // Add languages - navbar_content.append(await makeLanguages()); + // Add pages + navbar_content.append(await makePages()); // TOC icon navbar_content.append(await makeTocDropDown()); diff --git a/web/style/style.scss b/web/style/style.scss index 4253e33..e4181ec 100644 --- a/web/style/style.scss +++ b/web/style/style.scss @@ -381,7 +381,7 @@ header { transform: translateX(-75%); } -#drop-lang { +#drop-page { flex-direction: column; transform: translateX(-40%); li {