diff --git a/web/dart/main.dart b/web/dart/main.dart index 5b17663..ca703c1 100644 --- a/web/dart/main.dart +++ b/web/dart/main.dart @@ -1,9 +1,9 @@ import './reorganize_html.dart' show reorganizeHtml; import './theme.dart' show enableThemeChanger, setTheme; +import './parse_sitemap.dart' show getSitemap; Future main() async { await setTheme(); - await reorganizeHtml().then((_) { - enableThemeChanger(); - }); + await reorganizeHtml().then((_) => enableThemeChanger()); + await getSitemap(); } diff --git a/web/dart/navbar.dart b/web/dart/navbar.dart index 2ea1ec9..8eae5e9 100644 --- a/web/dart/navbar.dart +++ b/web/dart/navbar.dart @@ -28,18 +28,6 @@ Future makePages() async { var pages = Element.ul() ..attributes['id'] = 'drop-page' ..classes.add('dropdown'); - await parseSitemap().then((final sitemap) => { - sitemap.forEach((url, name) { - final link = Element.li() - ..classes.add('dropdown-item') - ..insertAdjacentElement( - 'afterBegin', - Element.a() - ..attributes['href'] = url - ..innerText = name); - pages.insertAdjacentElement('beforeEnd', link); - }) - }); return Element.li() ..append(Element.a() ..attributes['href'] = 'javascript:void(0)' diff --git a/web/dart/parse_sitemap.dart b/web/dart/parse_sitemap.dart index c0ca0d7..67dc69c 100644 --- a/web/dart/parse_sitemap.dart +++ b/web/dart/parse_sitemap.dart @@ -1,15 +1,15 @@ -import 'dart:html' show HttpRequest; +import 'dart:html' as html show HttpRequest, Element, querySelector; import 'package:html/parser.dart' show parse; -import 'package:html/dom.dart' show Element; +import 'package:html/dom.dart' as dom show Element; final excluded_keywords = ['index', 'CONTRIBUTING', 'LICENSE', 'README']; // Get the sitemap content -Future getSitemap() async { +Future fetchRemoteSitemap() async { const path = 'sitemap.html'; try { - return await HttpRequest.getString(path); + return await html.HttpRequest.getString(path); } catch (e) { print('Couldn’t open $path'); } @@ -17,10 +17,10 @@ Future getSitemap() async { } // Parse the list of elements and detect pages from this list -Map detectPages(List sitemap, [String prefix]) { +Map detectPages(List sitemap, [String prefix]) { final links = {}; for (var elem in sitemap) { - for(var kw in excluded_keywords) { + for (var kw in excluded_keywords) { if (elem.outerHtml.contains(kw)) { continue; } @@ -42,7 +42,30 @@ Map detectPages(List sitemap, [String prefix]) { // This function returns a Map which contains all links to languages detected // from the sitemap. Future> parseSitemap() async { - final content = await getSitemap(); + final content = await fetchRemoteSitemap(); final sitemap = parse(content).getElementsByClassName('org-ul')[0].children; return detectPages(sitemap); } + +Future sleep(Duration time) async { + return Future.delayed(time); +} + +Future getSitemap() async { + final sitemap = await parseSitemap(); + final pages = []; + sitemap.forEach((url, name) { + final link = html.Element.li() + ..classes.add('dropdown-item') + ..append(html.Element.a() + ..attributes['href'] = url + ..innerText = name); + pages.add(link); + }); + var drop_container; + do { + await sleep(Duration(seconds: 1)); + drop_container = html.querySelector('#drop-page'); + } while (drop_container != null); + pages.forEach((link) => drop_container.append(link)); +}