<html>
  <head>
    <title>Experimental JS Parser and Source Maps test</title>
  </head>
  <body>
    <div id="content"></div>

    <script>
      // This script is just an example used for system testing. We don't
      // really care if it is accurate or not.
      // This script will be minified, but no source map will be added.
      // Also, this comment will be removed.
      /* This one will also be removed. */

      console.log("Inline script start");

      // The -is- object is used to identify the browser.  Every browser edition
      // identifies itself, but there is no standard way of doing it, and some
      // of the identification is deceptive. This is because the authors of web
      // browsers are liars. For example, Microsoft's IE browsers claim to be
      // Mozilla 4. Netscape 6 claims to be version 5.
      var is = {
        ie:      navigator.appName == 'Microsoft Internet Explorer',
        java:    navigator.javaEnabled(),
        ns:      navigator.appName == 'Netscape',
        ua:      navigator.userAgent.toLowerCase(),
        version: parseFloat(navigator.appVersion.substr(21)) ||
                 parseFloat(navigator.appVersion),
        win:     navigator.platform == 'Win32'
      }
      is.mac = is.ua.indexOf('mac') >= 0;
      if (is.ua.indexOf('opera') >= 0) {
        is.ie = is.ns = false;
        is.opera = true;
      }
      if (is.ua.indexOf('gecko') >= 0) {
        is.ie = is.ns = false;
        is.gecko = true;
      }

      console.log("Inline script finish");
    </script>
    <script src="script.js">/* This is preserved */</script>
  </body>
</html>
