(function () {

  function typograf(text) {
    return text
      .replace(/"([^"]*)"/g, '«$1»')
      .replace(/\s-\s/g, ' — ')
      .replace(/(\d)-(\d)/g, '$1–$2')
      .replace(/(^|\s)(и|в|на|с|к|по|о|у|за|до|не|но|а|от)\s+/gi, '$1$2\u00A0')
      .replace(/(\d+)\s(кг|г|м|см|мм|л|%)\b/gi, '$1\u00A0$2')
      .replace(/\s{2,}/g, ' ');
  }

  function processTextNodes(node) {
    if (node.nodeType === Node.TEXT_NODE) {
      node.nodeValue = typograf(node.nodeValue);
      return;
    }

    if (node.nodeType === Node.ELEMENT_NODE) {
      if (node.tagName === 'SCRIPT' || node.tagName === 'STYLE') return;
      node.childNodes.forEach(processTextNodes);
    }
  }

  function run() {
    document
      .querySelectorAll(
        '.lesson-list .link.title, ' +
        '.lesson-list .description, ' +
        '.stream-title, ' +
        '.stream-title td a > div, ' +
        '.page-header h1'       )
      .forEach(processTextNodes);
  }

  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', run);
  } else {
    run();
  }

  const observer = new MutationObserver(run);

  observer.observe(document.body, {
    childList: true,
    subtree: true
  });

})();
