<!DOCTYPE html>
<!--
  ~ Copyright 2014 Open Networking Laboratory
  ~
  ~ Licensed 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.
  -->

<!--
  ONOS UI - single page web app
  Version 1.1

  @author Simon Hunt
  -->
<html>
<head>
    <meta charset="utf-8">
    <title>ONOS</title>

    <link rel="shortcut icon" href="img/onos-logo.png">

    <!-- Third party library code included here -->
    <!--TODO: use the minified version of d3, once debugging is complete -->
    <script src="tp/d3.js"></script>
    <script src="tp/topojson.v1.min.js"></script>
    <script src="tp/jquery-2.1.1.min.js"></script>

    <!-- Base library and framework stylesheets included here -->
    <link rel="stylesheet" href="base.css">
    <link rel="stylesheet" href="onos.css">
    <link rel="stylesheet" href="onosMast.css">
    <link rel="stylesheet" href="onosFloatPanel.css">
    <link rel="stylesheet" href="onosFlash.css">
    <link rel="stylesheet" href="onosQuickHelp.css">

    <!-- This is where contributed stylesheets get INJECTED -->
    <!-- TODO: replace with template marker and inject refs server-side -->
    <link rel="stylesheet" href="topo.css">


    <!-- General library modules included here-->
    <script src="geometry.js"></script>

    <!-- ONOS UI Framework included here-->
    <script src="onos.js"></script>

</head>
<body>
    <div id="frame">
        <div id="mast">
            <!-- NOTE: masthead injected here by mast.js -->
        </div>
        <div id="view">
            <!-- NOTE: views injected here by onos.js -->
        </div>
        <div id="floatPanels">
            <!-- NOTE: floating panels injected here, as needed -->
            <!--       see onos.ui.addFloatingPanel             -->
        </div>
        <div id="alerts">
            <!-- NOTE: alert content injected here, as needed -->
        </div>
        <div id="feedback">
            <!-- NOTE: feedback flashes to user -->
        </div>
        <div id="quickhelp">
            <!-- NOTE: key bindings and mouse gesture help -->
        </div>
    </div>

    <!-- Initialize the UI...-->
    <script type="text/javascript">
        var ONOS = $.onos({
            comment: 'configuration options',
            theme: 'dark',
            startVid: 'topo'
        });
    </script>

    <!-- Library module files included here -->
    <script src="d3Utils.js"></script>
    <script src="glyphs.js"></script>

    <!-- Framework module files included here -->
    <script src="onosMast.js"></script>
    <script src="onosFlash.js"></script>
    <script src="onosQuickHelp.js"></script>

    <!-- View Module Templates; REMOVE THESE LINES, FOR PRODUCTION -->
    <script src="module-svg-template.js"></script>
    <script src="module-div-template.js"></script>

    <!-- Sample views; REMOVE THESE LINES, FOR PRODUCTION -->
    <script src="sample.js"></script>
    <script src="sampleRadio.js"></script>
    <script src="sampleKeys.js"></script>
    <script src="sampleHash.js"></script>

    <!-- Contributed (application) views injected here -->
    <!-- TODO: replace with template marker and inject refs server-side -->
    <script src="topo.js"></script>

    <!-- finally, build the UI-->
    <script type="text/javascript">
        $(ONOS.buildUi);
    </script>

</body>
</html>
