import 'dart:html' as html show HttpRequest, Element, querySelector; import 'package:html/parser.dart' show parse; import 'package:html/dom.dart' as dom show Element; final excluded_keywords = ['index', 'CONTRIBUTING', 'LICENSE', 'README']; // Get the sitemap content Future fetchRemoteSitemap() async { const path = 'sitemap.html'; try { return await html.HttpRequest.getString(path); } catch (e) { print('Couldn’t open $path'); } 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) { for (var kw in excluded_keywords) { if (elem.outerHtml.contains(kw)) { continue; } } if (elem.innerHtml.startsWith('> parseSitemap() async { 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)); }