/**
 * @license
 * Copyright 2020 The Go Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style
 * license that can be found in the LICENSE file.
 */

const fetchButton = document.querySelector('.js-fetchButton');
if (fetchButton) {
  fetchButton.addEventListener('click', e => {
    e.preventDefault();
    fetchPath();
  });
}

async function fetchPath() {
  const fetchMessageEl = document.querySelector('.js-fetchMessage');
  fetchMessageEl.textContent = `Fetching ${fetchMessageEl.dataset.path}`;
  document.querySelector('.js-fetchMessageSecondary').textContent =
    'Feel free to navigate away and check back later, we’ll keep working on it!';
  document.querySelector('.js-fetchButton').style.display = 'none';
  document.querySelector('.js-fetchLoading').style.display = 'block';

  const response = await fetch(`/fetch${window.location.pathname}`, { method: 'POST' });
  if (response.ok) {
    window.location.reload();
    return;
  }
  const responseText = await response.text();
  document.querySelector('.js-fetchLoading').style.display = 'none';
  document.querySelector('.js-fetchMessageSecondary').textContent = '';
  const responseTextParsedDOM = new DOMParser().parseFromString(responseText, 'text/html');
  document.querySelector('.js-fetchMessage').innerHTML =
    responseTextParsedDOM.documentElement.textContent;
}
