<!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.
  -->

<!--
  ONOS UI - single page web app

  @author Simon Hunt
  -->
<html>
<head>
    <title>ONOS GUI</title>

    <script src="libs/d3.min.js"></script>
    <script src="libs/jquery-2.1.1.min.js"></script>

    <link rel="stylesheet" href="base.css">
    <link rel="stylesheet" href="onos.css">

    <script src="geometry.js"></script>
    <script src="onos.js"></script>

</head>
<body>
    <div id="frame">
        <div id="mast">
            <img id="logo" src="img/onos-logo.png" width="60" height="38">
            <span class="title">Open Network Operating System</span>
            <span class="right">
                <span class="radio">[All Layers]</span>
                <span class="radio">[Packet Only]</span>
                <span class="radio">[Optical Only]</span>
            </span>
        </div>
        <div id="view"></div>
    </div>

    <!-- Initialize the UI...-->
    <script type="text/javascript">
        var ONOS = $.onos({note: "config, if needed"});
    </script>

    <!-- include module files-->
    <!-- + mast.js-->
    <!-- + nav.js-->
    <!-- + .... application views-->

    <!-- for now, we are just bootstrapping the network visualization-->
    <script src="network.js" type="text/javascript"></script>

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

</body>
</html>
