<!--

 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>
    <meta charset="utf-8"/>
    <meta name="description" content="A Cordova Tizen Web UI FW single-page template generated by Tizen Web IDE"/>

    <title>Tizen Web IDE - Template - Cordova Tizen - Tizen Web UI Framework - Single-Page</title>
    <!--NOTE:
        jquery.js and web-ui-fw.js must be included.
        DO NOT REMOVE below code!
    -->
    <script src="tizen-web-ui-fw/0.1/js/jquery.js"></script>
    <script src="tizen-web-ui-fw/0.1/js/tizen-web-ui-fw-libs.js"></script>
    <script src="tizen-web-ui-fw/0.1/js/tizen-web-ui-fw.js"
        data-framework-theme="tizen-gray" data-framework-viewport-scale="false"></script>

    <!--NOTE:
        Additional scripts and css files are to be placed here.
        You can use jQuery namespace($) and all functionalities in jQuery
        in your script.  For example:

            <script src="main.js"></script>
            <link rel="stylesheet" href="my.css">

        When you want to manipulate elements in your code, you have to
        use domReady for your code to work properly, like this;

            domReady(function(){ ... });
    -->
    <script type="text/javascript" src="cordova-2.0.0.js"></script>
        
    <script type="text/javascript" src="./js/main.js"></script>
    <link rel="stylesheet" type="text/css" href="./css/style.css"/>
</head>

<body>
    <div data-role="page">
        <div data-role="header" data-position="fixed">
            <h1>Cordova Single-Page Application </h1>
        </div><!-- /header -->

        <div data-role="content">
            <p>This is a Cordova single page boilerplate template that you can copy to build your first Cordova Tizen Web UI Framework page.</p>
            <div id="myButton" data-role="button" data-inline="true">Battery Info</div>
            <div id="myInfo" data-role="content" data-inline="true" hidden="hidden">
            	<p>Battery Info.</p>
            </div>
        </div>
        </div><!-- /content -->

        <div data-role="footer" data-position="fixed">
            <h4>Footer content</h4>
        </div><!-- /footer -->
    </div><!-- /page -->
</body>
</html>
