<!DOCTYPE html>
<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements.  See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership.  The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License.  You may obtain a copy of the License at
  ~
  ~   http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied.  See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License.
  -->
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta
      name="viewport"
      content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1"
    />
    <title>Apache Druid</title>
    <meta name="description" content="Apache Druid console" />
    <link rel="shortcut icon" href="favicon.png" />
    <style>
      body {
        background: #24283b;
      }
      #browser-update {
        background-color: #d9822b;
        border-radius: 3px;
        color: #ffffff;
        font-family: sans-serif;
        font-size: 13px;
        line-height: 1.2;
        padding: 13px;
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        text-align: center;
        z-index: 11;
      }
      #browser-update a {
        color: white;
        font-weight: bold;
      }
    </style>
  </head>
  <body class="bp3-dark mouse-mode">
    <div class="app-container"></div>
    <div id="browser-update" style="display: none">
      You are using an unsupported browser. The console will not work properly.
      <a href="https://browser-update.org/update.html">Update to a supported browser.</a>
    </div>
    <script>
      function showUpdate() {
        document.getElementById('browser-update').style.display = 'block';
      }
      if (!('Proxy' in window)) showUpdate();
      window.onerror = function (message, source, lineno, colno, error) {
        if (error instanceof SyntaxError || message === 'Syntax error') {
          showUpdate();
        }
        return false;
      };
    </script>
    <script src="console-config.js"></script>
    <script src="public/web-console-0.22.0.js"></script>
  </body>
</html>
