<!--

    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.

-->

<!DOCTYPE html>
<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link rel="stylesheet" type="text/css" href="../css/infobar.css">
        <script type="text/javascript" src="../js/infobar.js"></script>
    </head>
    <body>

        <div id="nbpanel">
            <div id="preview">
                <div id="presets">Loading presets...</div>
                <a href="#" id="autoPresetButton" class="button" title="Actual Window Size">Auto</a>
                <a href="#" id="presetCustomizerButton" class="button" title="Window Settings Menu">&hellip;</a>
                <div class="button" id="selectionModeDiv">
                    <input type="checkbox" id="selectionModeCheckBox">
                    <a href="#" id="selectionModeMenu">Select Mode</a>
                </div>
            </div>
        </div>

    </body>
</html>
