<!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 xmlns:wicket="http://wicket.apache.org">
<head>
    <wicket:head>
        <title>Wicket - jQuery UI: Context Menu</title>
        <style type="text/css">
            /* labels */
            .label {
            margin: 10px;
            text-decoration: underline;
            }

            /* sub menus */
            .ui-menu .ui-menu {
            width: 150px;
            }
        </style>
    </wicket:head>
</head>
<body>

<wicket:extend>
    <div id="wrapper-panel-frame" class="ui-corner-all">
        <span wicket:id="label1" class="label"></span>&nbsp;<span wicket:id="label2" class="label"></span><br/>

        <div wicket:id="menu" style="width: 200px;"></div>
        <br/>
    </div>

</wicket:extend>
</body>
</html>
