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;
 | |
| }
 |