text: (function(){
  
      function addScript(url) {
          var myScript = document.createElement('script');
          myScript.setAttribute('src', url);
          document.head.appendChild(myScript);
      }
  
      function interpolate(str, params) {
          try {
              var escapedCode = str.replace(/`/, '\\`');
              return eval(
                  `env => { with (env) { return \`${escapedCode}\` } }`
              )(params)
          } catch (e) {
              log('demo:response-error', "An error occured during a mock response", e);
              return e.message;
          }
      }
  
      function log(name, message) {
          console.log("@ " + new Date().valueOf() + " - ", ...arguments);
          var event = new Event(name, {name:name, info:arguments});
          if (document.body) {
              document.body.dispatchEvent(event);
          }
      }
  
      function initHtmxAndHyperscript() {
          if (typeof htmx === "undefined" || typeof _hyperscript === "undefined") {
              setTimeout(initHtmxAndHyperscript, 20);
          } else {
              enableThings();
              log('demo:ready', "the demo environment is ready");
          }
      }
  
      var DISABLEABLE_ELTS = "button, command, fieldset, keygen, optgroup, option, select, textarea, input";
      function disableThings() {
          log('demo:disabling-elts', "disabling elements");
          document.querySelectorAll(DISABLEABLE_ELTS).forEach(function(elt){
              elt.setAttribute("data-was-disabled", elt.hasAttribute('disabled'));
              elt.setAttribute("disabled", "true");
          })
      }
  
      function enableThings() {
          log('demo:enabling-elts', "enabling elements");
          document.querySelectorAll(DISABLEABLE_ELTS).forEach(function(elt){
              if (elt.getAttribute("data-was-disabled") == "false") {
                  elt.removeAttribute("disabled");
              }
          })
      }
  
      function initMockRequests() {
          if(typeof MockRequests === "undefined") {
              // console.log("Not defined yet");
              setTimeout(initMockRequests, 20);
          } else {
  
              log('demo:mock-request-loaded', "mock-request library loaded, mocking requests and loading htmx & hyperscript")
  
              //-----------------------------------------------------------------
              // mock requests based on template tags
              //-----------------------------------------------------------------
              document.querySelectorAll("template").forEach(function(elt){
                  if(elt.getAttribute("url")){
                      var configDelay = elt.getAttribute("delay");
                      if (configDelay) {
                          var delay = Number.parseInt(configDelay);
                      }
                      MockRequests.setDynamicMockUrlResponse(elt.getAttribute("url"),
                          {dynamicResponseModFn:
                                  function(request, response, parameters) {
                                      log("demo:request", "A mock request was made: ", request, response, parameters)
                                      return interpolate(elt.innerHTML, { ...parameters, ...Object.fromEntries(new URLSearchParams(request)) });
                                  },
                              delay: delay,
                              usePathnameForAllQueries: true});
                  }
              });
  
              log('demo:htmx-loading', "loading htmx & hyperscript...")
              addScript("https://unpkg.com/htmx.org");
              addScript("https://unpkg.com/hyperscript.org");
              initHtmxAndHyperscript();
          }
      }
  
      document.addEventListener('DOMContentLoaded', function () {
          disableThings();
          log('demo:mock-request-loading', "loading mock-request library...")
          addScript("https://unpkg.com/mock-requests@1.3.2/index.js");
          initMockRequests();
      }, false);
  })();
  