﻿<!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>
  <head>
    <!-- meta name="viewport" content="width=device-width, height=device-height, user-scalable=yes, initial-scale=2.0, maximum-scale=4.0, minimum-scale=1.0" / -->
    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no;" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8"/> <!-- ISO-8859-1 -->
    <title>Cordova</title>
    <link rel="stylesheet" href="master.css" type="text/css" media="screen"/>


    <script type="text/javascript" charset="utf-8" src="cordova-current.js"></script>


<script type="text/javascript" charset="utf-8">

    var deviceReady = false;
    var persistent_root;

    var getFileSystemRoot = (function () {

        var onError = function (error) {
            console.log('unable to retrieve file system: ' + error.code);
        };

        // one-time retrieval of the root file system entry
        if (typeof persistent_root === 'undefined') {
            window.requestFileSystem(LocalFileSystem.PERSISTENT, 0,
                function (fileSystem) {
                    persistent_root = fileSystem.root;
                }, onError);
        }

        // public function returns private root entry
        return persistent_root;

    });


    /**
    * Gets file or directory
    */
    function getEntry(isFile, onSuccess, options) {

        var root = getFileSystemRoot();
        //TODO
        console.log(typeof root);
        var filePath = document.getElementById('filePath');

        var onGetEntryError = function (fileError) {
        console.log("Error creating/opening file/directory: " + fileError.code);
        document.getElementById('file_status').innerHTML = "Error creating/opening file/directory: " + fileError.code;
        };

        if (isFile == true) {
            console.log('Creating file');
            root.getFile(
            filePath.value,
            options,
            onSuccess,
            onGetEntryError);
        } else {
            console.log('Creating directory');
            root.getDirectory(
            filePath.value,
            options,
            onSuccess,
            onGetEntryError);
        }
    };

    /**
    * Creates or opens file/directory
    */
    function createOrOpen(isFile) {
        var onGetEntrySuccess = function (fileEntry) {
        document.getElementById('file_status').innerHTML = "isFile: " + fileEntry.isFile + "; isDirectory: " + fileEntry.isDirectory + "; name: " + fileEntry.name + "; path: " + fileEntry.fullPath;
        entry = fileEntry;
        };
        getEntry(isFile, onGetEntrySuccess, {create: true, exclusive: true});
    };

    /**
    * Check if file/directory exists
    */
    function isExists(isFile) {

        console.log("Start checking...");

        var root = getFileSystemRoot();

        var onError = function (fileError) {
            console.log("Error checking file/directory: " + fileError.code);
            document.getElementById('file_status').innerHTML = "Error checking file/directory: " + fileError.code;
        };

        var onSuccess = function (isExist) {
            document.getElementById('file_status').innerHTML = "is exists: " + isExist;
        };

        var filePath = document.getElementById('filePath');

        if (isFile == true) {
            console.log('check if file exists');
            navigator.fileMgr.testFileExists(
            filePath.value,
            onSuccess,
            onError);
        } else {
            navigator.fileMgr.testDirectoryExists(
            filePath.value,
            onSuccess,
            onError);
        }
    };



    /**
    * Remove file or directory
    */
    function remove(isFile) {

        var onSuccess = function (fileEntry) {

            var onRemoveError = function (fileError) {
            console.log("Error removing file/directory: " + fileError.code);
            document.getElementById('file_status').innerHTML = "Error removing file/directory: " + fileError.code;
            };

            var onRemoveSuccess = function () {
                document.getElementById('file_status').innerHTML = "file/directory was removed";
            };

            fileEntry.remove(onRemoveSuccess, onRemoveError);
        };

        getEntry(isFile, onSuccess, {create: false});

    };

    /**
    * Writes data in file
    */
    function writeInFile() {
        var onSuccess = function (fileEntry) {

            var writer = new FileWriter(fileEntry);

            writer.onwrite = function (evt) {
                console.log("End writing...");
                document.getElementById('file_status').innerHTML = writer.length + " bytes was written";
            };
            writer.onerror = function (evt) {
                console.log("writing error");
                document.getElementById('file_status').innerHTML = "writing error: " + evt.target.error;
            };
            writer.write(textToWrite.value);
            console.log("End writing");
        };
        console.log("Start getting entry");
        getEntry(true, onSuccess, { create: false });
    };

    /**
    * Reads file as base64 string
    */
    function readAsBase64() {
        var onSuccess = function (fileEntry) {
            var reader = new FileReader();
            reader.onloadend = function (evt) {
                console.log("read success");
                document.getElementById('file_status').innerHTML = evt.target.result;
            };
            reader.onerror = function (evt) {
                console.log("read error");
                document.getElementById('file_status').innerHTML = "read error: " + evt.target.error;
            };

            reader.readAsDataURL(fileEntry);
        };

        console.log("Start getting entry");
        getEntry(true, onSuccess, { create: false });

    };

    /**
    * Uploads selected file to specified server
    */
    function uploadFile() {

        var onSuccess = function (fileUploadResult) {
            console.log("Upload success");
            document.getElementById('file_status').innerHTML = "Code: " + fileUploadResult.responseCode + "; Sent = " + fileUploadResult.bytesSent + "; Response:  " + fileUploadResult.response;
        };

        var onError = function (error) {
            document.getElementById('file_status').innerHTML = "Upload error: " + error.code;
        };

        console.log("Set upload parameters");
        var options = new FileUploadOptions();

        options.fileKey = "file";
        options.fileName = "newFile.txt";
        options.mimeType = "text/plain";
        var filePath = document.getElementById('filePath').value;
        var server = document.getElementById('server').value;

        var params = new Object();
        params.key1 = "value1";
        params.key2 = "value2";
        options.params = params;

        var fileTransfer = new FileTransfer();

        fileTransfer.upload(filePath, server, onSuccess, onError, options);
    };

    /**
    * Function called when page has finished loading.
    */
    function init() {
        document.addEventListener("deviceready", function () {
            deviceReady = true;
            console.log("Device=" + device.platform + " " + device.version);
            getFileSystemRoot();
        }, false);
        window.setTimeout(function () {
            if (!deviceReady) {
                alert("Error: Cordova did not initialize.  Demo will not run correctly.");
            }
        }, 1000);
    }

</script>

  </head>
  <body onLoad="init();" id="stage" class="theme">

    <h1>File</h1>
    <div id="info">
        <span class='tb-label'>Enter file/directory name here:</span> <span id="Span1"></span>
        <input type="text" id="filePath" style="width:250px;height:20px;"/>
        <br/>
        <span class='tb-label'>Enter text to write in file :</span> <span id="Span2"></span>
        <input type="text" id="textToWrite" style="width:250px;height:20px;"/>
        <br/>
        <span class='tb-label'>Enter URL to upload file to: </span> <span id="Span3"></span>
        <input type="text" id="server" value='http://posttestserver.com/post.php?dir=cordovaTest' style="width:250px;height:20px;"/>
        <br/>
        Result: <span id="file_status"></span>
    </div>
    <h2>Action</h2>
    <a href="#" class="btn large" onclick="createOrOpen(true);">Create/Open file</a>
    <a href="#" class="btn large" onclick="createOrOpen(false);">Create/Open directory</a>
    <a href="#" class="btn large" onclick="isExists(true);">Check if file exists</a>
    <a href="#" class="btn large" onclick="isExists(false);">Check if directory exists</a>
    <a href="#" class="btn large" onclick="remove(true);">Remove file</a>
    <a href="#" class="btn large" onclick="remove(false);">Remove directory</a>
    <a href="#" class="btn large" onclick="writeInFile();">Write in file (type text in the second field)</a>
    <a href="#" class="btn large" onclick="readAsBase64();">Read file as base64</a>
    <a href="#" class="btn large" onclick="uploadFile();">Upload file</a>
    <h2> </h2><a href="index.html" class="backBtn">Back</a>
  </body>
</html>
