268 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			268 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 **      ==============================
							 | 
						||
| 
								 | 
							
								 **       O           O      O   OOOO
							 | 
						||
| 
								 | 
							
								 **       O           O     O O  O   O
							 | 
						||
| 
								 | 
							
								 **       O           O     O O  O   O
							 | 
						||
| 
								 | 
							
								 **       OOOO   OOOO O     OOO  OOOO
							 | 
						||
| 
								 | 
							
								 **       O   O       O    O   O O   O
							 | 
						||
| 
								 | 
							
								 **       O   O       O    O   O O   O
							 | 
						||
| 
								 | 
							
								 **       OOOO        OOOO O   O OOOO
							 | 
						||
| 
								 | 
							
								 **      ==============================
							 | 
						||
| 
								 | 
							
								 **      Dr. Stefan Bosse http://www.bsslab.de
							 | 
						||
| 
								 | 
							
								 **
							 | 
						||
| 
								 | 
							
								 **      COPYRIGHT: THIS SOFTWARE, EXECUTABLE AND SOURCE CODE IS OWNED
							 | 
						||
| 
								 | 
							
								 **                 BY THE AUTHOR(S).
							 | 
						||
| 
								 | 
							
								 **                 THIS SOURCE CODE MAY NOT BE COPIED, EXTRACTED,
							 | 
						||
| 
								 | 
							
								 **                 MODIFIED, OR OTHERWISE USED IN A CONTEXT
							 | 
						||
| 
								 | 
							
								 **                 OUTSIDE OF THE SOFTWARE SYSTEM.
							 | 
						||
| 
								 | 
							
								 **
							 | 
						||
| 
								 | 
							
								 **    $AUTHORS:     Stefan Bosse
							 | 
						||
| 
								 | 
							
								 **    $INITIAL:     (C) 2006-2019 bLAB
							 | 
						||
| 
								 | 
							
								 **    $CREATED:     09-01-19 by sbosse.
							 | 
						||
| 
								 | 
							
								 **    $VERSION:     1.1.7
							 | 
						||
| 
								 | 
							
								 **    $INFO:
							 | 
						||
| 
								 | 
							
								 **
							 | 
						||
| 
								 | 
							
								 ** Cordova Node-Webkit Wrapper (emulation API)
							 | 
						||
| 
								 | 
							
								 **
							 | 
						||
| 
								 | 
							
								 **    $ENDOFINFO
							 | 
						||
| 
								 | 
							
								 **
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var nw = require("nw.gui");
							 | 
						||
| 
								 | 
							
								gui = nw
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if (typeof navigator == 'undefined') navigator = {}
							 | 
						||
| 
								 | 
							
								if (typeof cordova == 'undefined') cordova = {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// cordova-plugin-contacts
							 | 
						||
| 
								 | 
							
								// TODO
							 | 
						||
| 
								 | 
							
								navigator.contacts = {
							 | 
						||
| 
								 | 
							
								    fieldType : {
							 | 
						||
| 
								 | 
							
								      id:1,
							 | 
						||
| 
								 | 
							
								      displayName:2,
							 | 
						||
| 
								 | 
							
								      name:3
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    find : function (fields,onsucc,onerr,options) { onerr('not supported'); }
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								ContactFindOptions = function () { return {} }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Disable what ever of geolocation service is in nw
							 | 
						||
| 
								 | 
							
								// delete navigator.geolocation;
							 | 
						||
| 
								 | 
							
								// Use JAM satelite localization instead
							 | 
						||
| 
								 | 
							
								navigator.geolocation.getCurrentPosition = function (ondata,onerror) {
							 | 
						||
| 
								 | 
							
								  if (Network && Network.location && ondata) ondata({coords:{latitude:Network.location.gps.lat,longitude:Network.location.gps.lon}}); 
							 | 
						||
| 
								 | 
							
								  else if (onerror) onerror({message:'Currently not active'});
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function docReady(callback, context) {
							 | 
						||
| 
								 | 
							
								    "use strict";
							 | 
						||
| 
								 | 
							
								    // The public function name defaults to window.docReady
							 | 
						||
| 
								 | 
							
								    // but you can modify the last line of this function to pass in a different object or method name
							 | 
						||
| 
								 | 
							
								    // if you want to put them in a different namespace and those will be used instead of 
							 | 
						||
| 
								 | 
							
								    // window.docReady(...)
							 | 
						||
| 
								 | 
							
								    var baseObj =  window;
							 | 
						||
| 
								 | 
							
								    var readyList = [];
							 | 
						||
| 
								 | 
							
								    var readyFired = false;
							 | 
						||
| 
								 | 
							
								    var readyEventHandlersInstalled = false;
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    // call this when the document is ready
							 | 
						||
| 
								 | 
							
								    // this function protects itself against being called more than once
							 | 
						||
| 
								 | 
							
								    function ready() {
							 | 
						||
| 
								 | 
							
								        if (!readyFired) {
							 | 
						||
| 
								 | 
							
								            // this must be set to true before we start calling callbacks
							 | 
						||
| 
								 | 
							
								            readyFired = true;
							 | 
						||
| 
								 | 
							
								            for (var i = 0; i < readyList.length; i++) {
							 | 
						||
| 
								 | 
							
								                // if a callback here happens to add new ready handlers,
							 | 
						||
| 
								 | 
							
								                // the docReady() function will see that it already fired
							 | 
						||
| 
								 | 
							
								                // and will schedule the callback to run right after
							 | 
						||
| 
								 | 
							
								                // this event loop finishes so all handlers will still execute
							 | 
						||
| 
								 | 
							
								                // in order and no new ones will be added to the readyList
							 | 
						||
| 
								 | 
							
								                // while we are processing the list
							 | 
						||
| 
								 | 
							
								                readyList[i].fn.call(window, readyList[i].ctx);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            // allow any closures held by these functions to free
							 | 
						||
| 
								 | 
							
								            readyList = [];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    function readyStateChange() {
							 | 
						||
| 
								 | 
							
								        if ( document.readyState === "complete" ) {
							 | 
						||
| 
								 | 
							
								            ready();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    // This is the one public interface
							 | 
						||
| 
								 | 
							
								    // docReady(fn, context);
							 | 
						||
| 
								 | 
							
								    // the context argument is optional - if present, it will be passed
							 | 
						||
| 
								 | 
							
								    // as an argument to the callback
							 | 
						||
| 
								 | 
							
								    if (typeof callback !== "function") {
							 | 
						||
| 
								 | 
							
								        throw new TypeError("callback for docReady(fn) must be a function");
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    // if ready has already fired, then just schedule the callback
							 | 
						||
| 
								 | 
							
								    // to fire asynchronously, but right away
							 | 
						||
| 
								 | 
							
								    if (readyFired) {
							 | 
						||
| 
								 | 
							
								        setTimeout(function() {callback(context);}, 1);
							 | 
						||
| 
								 | 
							
								        return;
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								        // add the function and context to the list
							 | 
						||
| 
								 | 
							
								        readyList.push({fn: callback, ctx: context});
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    // if document already ready to go, schedule the ready function to run
							 | 
						||
| 
								 | 
							
								    // IE only safe when readyState is "complete", others safe when readyState is "interactive"
							 | 
						||
| 
								 | 
							
								    if (document.readyState === "complete" || (!document.attachEvent && document.readyState === "interactive")) {
							 | 
						||
| 
								 | 
							
								        setTimeout(ready, 1);
							 | 
						||
| 
								 | 
							
								    } else if (!readyEventHandlersInstalled) {
							 | 
						||
| 
								 | 
							
								        // otherwise if we don't have event handlers installed, install them
							 | 
						||
| 
								 | 
							
								        if (document.addEventListener) {
							 | 
						||
| 
								 | 
							
								            // first choice is DOMContentLoaded event
							 | 
						||
| 
								 | 
							
								            document.addEventListener("DOMContentLoaded", ready, false);
							 | 
						||
| 
								 | 
							
								            // backup is window load event
							 | 
						||
| 
								 | 
							
								            window.addEventListener("load", ready, false);
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            // must be IE
							 | 
						||
| 
								 | 
							
								            document.attachEvent("onreadystatechange", readyStateChange);
							 | 
						||
| 
								 | 
							
								            window.attachEvent("onload", ready);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        readyEventHandlersInstalled = true;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								docReady(function () {
							 | 
						||
| 
								 | 
							
								  console.log('load event')
							 | 
						||
| 
								 | 
							
								  var event = new Event('deviceready');
							 | 
						||
| 
								 | 
							
								  document.dispatchEvent(event);
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// cordova-plugin-sensors
							 | 
						||
| 
								 | 
							
								sensors = {
							 | 
						||
| 
								 | 
							
								  addSensorListener: function (sensor, mode, fevent, ferr) {
							 | 
						||
| 
								 | 
							
								    ferr('Not supported');
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// cordova-plugin-file
							 | 
						||
| 
								 | 
							
								cordova.file = {
							 | 
						||
| 
								 | 
							
								  applicationDirectory:       '/',
							 | 
						||
| 
								 | 
							
								  applicationStorageDirectory:'/',
							 | 
						||
| 
								 | 
							
								  dataDirectory:              '/',
							 | 
						||
| 
								 | 
							
								  downloadDirectory:          (process.env._HOME||process.env.HOME||"/"),
							 | 
						||
| 
								 | 
							
								  externalRootDirectory:      "/",
							 | 
						||
| 
								 | 
							
								  tempDirectory:              "/tmp/",
							 | 
						||
| 
								 | 
							
								  userDirectory:              (process.env._HOME||process.env.HOME||"/"),
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var fs = require('fs');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Find Download directory ..
							 | 
						||
| 
								 | 
							
								if (fs.existsSync(cordova.file.userDirectory+'/Downloads')) 
							 | 
						||
| 
								 | 
							
								  cordova.file.downloadDirectory=cordova.file.userDirectory+'/Downloads';
							 | 
						||
| 
								 | 
							
								else if (fs.existsSync(cordova.file.userDirectory+'/downloads')) 
							 | 
						||
| 
								 | 
							
								  cordova.file.downloadDirectory=cordova.file.userDirectory+'/downloads';
							 | 
						||
| 
								 | 
							
								// Find app root directory
							 | 
						||
| 
								 | 
							
								if (fs.existsSync(process.cwd()+'/app.html')) 
							 | 
						||
| 
								 | 
							
								  cordova.file.applicationDirectory=process.cwd();
							 | 
						||
| 
								 | 
							
								else if (fs.existsSync(process.cwd()+'/app/app.html')) 
							 | 
						||
| 
								 | 
							
								  cordova.file.applicationDirectory=process.cwd()+'/app';
							 | 
						||
| 
								 | 
							
								cordova.file.dataDirectory = cordova.file.applicationDirectory+'/data'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								window.resolveLocalFileSystemURL = function (path, cb, onerror1) {
							 | 
						||
| 
								 | 
							
								  var resolvedPath = path;
							 | 
						||
| 
								 | 
							
								  var fileSystem = {
							 | 
						||
| 
								 | 
							
								    file: function (cb, onerror2) {
							 | 
						||
| 
								 | 
							
								      if (!fs.existsSync(resolvedPath)) { 
							 | 
						||
| 
								 | 
							
								        if (onerror2) onerror2('Not existing: '+resolvedPath); 
							 | 
						||
| 
								 | 
							
								        else if (onerror1) onerror1('Not existing: '+resolvedPath); 
							 | 
						||
| 
								 | 
							
								        return; 
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								      cb(resolvedPath);
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    createReader: function () { 
							 | 
						||
| 
								 | 
							
								      var reader = {
							 | 
						||
| 
								 | 
							
								        readEntries : function (cb,onerror2) {
							 | 
						||
| 
								 | 
							
								          if (!fs.existsSync(resolvedPath)) { 
							 | 
						||
| 
								 | 
							
								            if (onerror2) onerror2('Not existing: '+resolvedPath); 
							 | 
						||
| 
								 | 
							
								            else if (onerror1) onerror1('Not existing: '+resolvedPath); 
							 | 
						||
| 
								 | 
							
								            return; 
							 | 
						||
| 
								 | 
							
								          };
							 | 
						||
| 
								 | 
							
								          try {
							 | 
						||
| 
								 | 
							
								            var entries = fs.readdirSync(resolvedPath);
							 | 
						||
| 
								 | 
							
								            if (entries) cb(entries.map(
							 | 
						||
| 
								 | 
							
								              function (name) {
							 | 
						||
| 
								 | 
							
								                try {
							 | 
						||
| 
								 | 
							
								                  var stat = fs.lstatSync(resolvedPath+'/'+name);
							 | 
						||
| 
								 | 
							
								                  if (stat.isDirectory()) return {isFile:false,isDirectory:true,name:name};
							 | 
						||
| 
								 | 
							
								                  else return {isFile:true,isDirectory:false,name:name};
							 | 
						||
| 
								 | 
							
								                } catch (err) { return null };
							 | 
						||
| 
								 | 
							
								              }).filter(
							 | 
						||
| 
								 | 
							
								                function (entry) {
							 | 
						||
| 
								 | 
							
								                  if (!entry) return;
							 | 
						||
| 
								 | 
							
								                  if (entry.name!='..' && entry.name[0]=='.') return;
							 | 
						||
| 
								 | 
							
								                  return entry;
							 | 
						||
| 
								 | 
							
								              }));
							 | 
						||
| 
								 | 
							
								          } catch (err) {
							 | 
						||
| 
								 | 
							
								            if (onerror2) onerror2(err+': '+resolvedPath); 
							 | 
						||
| 
								 | 
							
								            else if (onerror1) onerror1(err+': '+resolvedPath); 
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return reader;
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    createWriter: function (cb) { 
							 | 
						||
| 
								 | 
							
								      var fileWriter = {
							 | 
						||
| 
								 | 
							
								        write: function (blob) {
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      cb(fileWriter);
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    getFile: function (filename, options, cb, onerror2) {
							 | 
						||
| 
								 | 
							
								      var pathToFile=path+'/'+filename;
							 | 
						||
| 
								 | 
							
								      if (options.create) {
							 | 
						||
| 
								 | 
							
								        var fileWriter = {}
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        fileWriter.write = function (blob) {
							 | 
						||
| 
								 | 
							
								            // log(pathToFile)
							 | 
						||
| 
								 | 
							
								            try {
							 | 
						||
| 
								 | 
							
								              fs.writeFileSync(pathToFile, blob.data, 'utf8');
							 | 
						||
| 
								 | 
							
								              if (fileWriter.onwriteend) fileWriter.onwriteend();
							 | 
						||
| 
								 | 
							
								            } catch (e) {
							 | 
						||
| 
								 | 
							
								              var errmsg = 'Write of file '+pathToFile+' failed: '+e.toString();
							 | 
						||
| 
								 | 
							
								              if (fileWriter.onerror) fileWriter.onerror(errmsg);
							 | 
						||
| 
								 | 
							
								              else if (onerror2) onerror2(errmsg);             
							 | 
						||
| 
								 | 
							
								            }    
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        var file = {
							 | 
						||
| 
								 | 
							
								          createWriter: function (cb2) {
							 | 
						||
| 
								 | 
							
								            cb2(fileWriter)
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        cb(file)
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        // CHeck if file exists
							 | 
						||
| 
								 | 
							
								        if (fs.existsSync(pathToFile)) cb({});
							 | 
						||
| 
								 | 
							
								        else if (onerror2) onerror2('No such file: '+pathToFile); 
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  cb(fileSystem);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function FileReader () {
							 | 
						||
| 
								 | 
							
								  this.onloadend = function () {};
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								FileReader.prototype.readAsText = function (pathToFile) {
							 | 
						||
| 
								 | 
							
								  var data = 'Hello World';
							 | 
						||
| 
								 | 
							
								  try {
							 | 
						||
| 
								 | 
							
								    this.result = fs.readFileSync(pathToFile,'utf8');
							 | 
						||
| 
								 | 
							
								    if (this.onloadend) this.onloadend();
							 | 
						||
| 
								 | 
							
								  } catch (err) {
							 | 
						||
| 
								 | 
							
								    if (this.onerror) this.onerror(err);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								} 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function Blob(data,options) {
							 | 
						||
| 
								 | 
							
								  this.data=data;
							 | 
						||
| 
								 | 
							
								  this.options=options;
							 | 
						||
| 
								 | 
							
								}
							 |