<!doctype html> <head> <style> body { font-family: 'Helvetica', sans-serif; } </style> </head> <body> <div> <div id="chapters"> </div> </div> <script> (() => { const DOM = { $chapters: document.getElementById('chapters'), }; const URL = 'https://raw.githubusercontent.com/googlesamples/web-fundamentals/gh-pages/fundamentals/getting-started/primers'; function getJSON(url) { return new Promise((resolve, reject) => { const req = new XMLHttpRequest(); req.open('GET', url); req.onload = () => { if (req.status === 200) { resolve(JSON.parse(req.response)); return; } reject(req.responseText); } req.onerror = (err) => { reject(err); } req.send(); }); } function init() { getJSON(`${URL}/story.json`).then(story => { const $heading = document.createRange().createContextualFragment(story.heading); DOM.$chapters.before($heading); return Promise.all(story.chapterUrls.map((url, index) => { return getJSON(`${URL}/${url}`); })); }).then(chapters => { const $chapters = document.createDocumentFragment(); chapters.forEach(chapter => { $chapters.appendChild(document.createRange().createContextualFragment(chapter.html)); }); DOM.$chapters.appendChild($chapters); }).catch(err => { console.warn(err); }); } document.addEventListener('DOMContentLoaded', init); })(); </script> </body> </html>