Skip to content

Commit 817d2db

Browse files
committed
Make options optional
1 parent a110412 commit 817d2db

File tree

6 files changed

+139
-8
lines changed

6 files changed

+139
-8
lines changed

Gruntfile.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ module.exports = function(grunt) {
154154
"src/predefined/interfaces/IteratorAggregate.js",
155155
"src/predefined/interfaces/Reflector.js",
156156
"src/predefined/interfaces/Serializable.js",
157+
"adapters/filesystem/xhr.js",
157158
"cfg/locales.js"
158159
],
159160
dest: 'dist/<%= pkg.name %>'
@@ -190,5 +191,9 @@ module.exports = function(grunt) {
190191
grunt.loadNpmTasks('grunt-express-server');
191192
grunt.loadNpmTasks('grunt-mocha');
192193

193-
grunt.registerTask('default', ['concat', 'uglify', 'express', 'mocha']);
194+
grunt.registerTask('build', ['concat', 'uglify']);
195+
grunt.registerTask('test', ['express', 'mocha']);
196+
197+
grunt.registerTask('default', ['build', 'test']);
198+
194199
};

dist/php.js

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
var PHP = function( code, opts ) {
2+
var opts = opts || {};
3+
opts.filesystem = opts.filesystem || typeof(window) !== "undefined" ? new PHP.Adapters.XHRFileSystem() : require('fs');
4+
opts.SERVER = opts.SERVER || {};
5+
opts.SERVER.SCRIPT_FILENAME = opts.SERVER.SCRIPT_FILENAME || "";
26

37
var iniContent = opts.filesystem.readFileSync( "cfg/php.ini" ),
48
iniSet = opts.ini || {};
@@ -378,6 +382,7 @@ PHP.Utils.QueryString = function( str ) {
378382

379383
return items;
380384
};
385+
381386
/*
382387
* @author Niklas von Hertzen <niklas at hertzen.com>
383388
* @created 5.7.2012
@@ -15265,6 +15270,125 @@ ENV.$Class.Get( "DateTime").prototype.Native = true;
1526515270
};
1526615271
/*
1526715272
* @author Niklas von Hertzen <niklas at hertzen.com>
15273+
* @created 3.7.2012
15274+
* @website http://hertzen.com
15275+
*/
15276+
15277+
15278+
PHP.Adapters.XHRFileSystem = function() {
15279+
/*
15280+
var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB,
15281+
request = indexedDB.open("filesystem"),
15282+
$this = this;
15283+
15284+
request.onsuccess = function(e) {
15285+
15286+
$this.db = e.target.result;
15287+
15288+
};
15289+
15290+
request.onupgradeneeded = function( e ) {
15291+
15292+
$this.db.createObjectStore( $this.FILES,
15293+
{
15294+
keyPath: "filename"
15295+
});
15296+
15297+
};
15298+
15299+
request.onfailure = this.error;
15300+
*/
15301+
15302+
15303+
};
15304+
15305+
PHP.Adapters.XHRFileSystem.prototype.lstatSync = function( filename ) {
15306+
15307+
if (localStorage[ filename ] === undefined ) {
15308+
throw Error;
15309+
} else {
15310+
return true;
15311+
}
15312+
15313+
}
15314+
15315+
PHP.Adapters.XHRFileSystem.prototype.error = function( e ) {
15316+
this.db = false;
15317+
console.log( e );
15318+
throw e;
15319+
}
15320+
15321+
PHP.Adapters.XHRFileSystem.prototype.writeFileSync = function( filename, data ) {
15322+
15323+
15324+
localStorage[ filename ] = data;
15325+
15326+
/*
15327+
if ( this.db === false ) {
15328+
return;
15329+
}
15330+
console.log( this.db );
15331+
var db = this.db,
15332+
trans = db.transaction([ this.files ], IDBTransaction.READ_WRITE, 0),
15333+
store = trans.objectStore( this.files );
15334+
15335+
var request = store.put({
15336+
"filename": filename,
15337+
"content" : data
15338+
});
15339+
15340+
var processing = true;
15341+
15342+
request.onsuccess = function(e) {
15343+
processing = false;
15344+
};
15345+
15346+
request.onerror = function(e) {
15347+
processing = false;
15348+
console.log(e.value);
15349+
};
15350+
15351+
while ( processing ) {}
15352+
15353+
*/
15354+
15355+
15356+
};
15357+
15358+
PHP.Adapters.XHRFileSystem.prototype.readFileSync = function( filename, xhr ) {
15359+
15360+
if ( xhr === undefined ) {
15361+
15362+
var xhr = new XMLHttpRequest();
15363+
15364+
xhr.open('GET', filename, false); // async set to false!
15365+
15366+
var response;
15367+
xhr.onload = function() {
15368+
response = this.responseText;
15369+
15370+
};
15371+
15372+
xhr.send();
15373+
15374+
return response;
15375+
} else {
15376+
if (localStorage[ filename ] === undefined ) {
15377+
throw Error;
15378+
} else {
15379+
return localStorage[ filename ];
15380+
}
15381+
}
15382+
15383+
15384+
};
15385+
PHP.Adapters.XHRFileSystem.prototype.xhr = true;
15386+
15387+
PHP.Adapters.XHRFileSystem.prototype.version = "1.2";
15388+
15389+
PHP.Adapters.XHRFileSystem.prototype.FILES = "files";
15390+
/*
15391+
* @author Niklas von Hertzen <niklas at hertzen.com>
1526815392
* @created 17.7.2012
1526915393
* @website http://hertzen.com
1527015394
*/

dist/php.min.js

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

readme.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ The code can be directly run in your browser, meaning you can execute php code s
1717
- <a href="http://phpjs.hertzen.com/console.html?gist=3171462">tokenizer</a>
1818

1919
## Usage ##
20-
var engine = new PHP ('<?php echo "Hello world!"; ?>');
20+
var engine = new PHP ('<?php echo "Hello world!"; ?>', options);
2121
console.log(engine.vm.OUTPUT_BUFFER); // the outputted buffer from the script
2222

2323
The code is by default run synchronously so the output will be immidiately readable upon the engine finishing execution. Alternatively, the VM can be set to run under a web worker as well, in which case a callback function will need to be provided.

src/core.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
var PHP = function( code, opts ) {
2+
var opts = opts || {};
3+
opts.filesystem = opts.filesystem || typeof(window) !== "undefined" ? new PHP.Adapters.XHRFileSystem() : require('fs');
4+
opts.SERVER = opts.SERVER || {};
5+
opts.SERVER.SCRIPT_FILENAME = opts.SERVER.SCRIPT_FILENAME || "";
26

37
var iniContent = opts.filesystem.readFileSync( "cfg/php.ini" ),
48
iniSet = opts.ini || {};
@@ -377,4 +381,4 @@ PHP.Utils.QueryString = function( str ) {
377381
}, this);
378382

379383
return items;
380-
};
384+
};

tests/index.html

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,6 @@
5858
opts.SERVER.argv = args;
5959
}
6060

61-
opts.filesystem = new PHP.Adapters.XHRFileSystem();
62-
6361
return opts;
6462
}
6563

0 commit comments

Comments
 (0)