<!--
    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 lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no, width=device-width">
        <meta name="generator" content="joDoc">

        <title>Documentation API Apache Cordova</title>

        <link rel="stylesheet" type="text/css" href="index.css">
        <link rel="stylesheet" type="text/css" href="mobile.css" media="only screen and (max-device-width: 1024px)">
        <link rel="stylesheet" type="text/css" href="prettify/prettify.css" />
    </head>
    <body>
        <div id="header">
            <h1><a href="index.html">Documentation Apache <strong>Cordova</strong></a></h1>
            <small>
                <select></select>
            </small>
        </div>
        <div id="subheader">
            <h1>Géolocalisation</h1>
            <small></small>
        </div>

        <div id="sidebar">
            <div class="vertical_divider"></div>
        </div>

        <div id="scrollable">
            <div id="content">
                $body
            </div>
        </div>

        <!-- Functionality and Syntax Highlighting -->
        <script type="text/javascript" src="index.js"></script>
        <script type="text/javascript" src="prettify/prettify.js"></script>
    </body>
</html>
