Skip to content

Commit

Permalink
Incorporated filesystem path fixes for Windows file paths (as in
Browse files Browse the repository at this point in the history
pull request envjs#23, 031b304/b645a70 from moschel. Added Windows batch
files to run envjs using either Rhino or the Rhino debugger. Fixed
an issue in xhr.js Envjs.localXHR when running under Rhino, url
parameter was tested for pattern match to determine Content-Type,
but fails under Rhino since the url parameter passed is a Java
object, not a string.
  • Loading branch information
chrisnash committed Apr 18, 2012
1 parent 74d3bcd commit 08a8197
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 9 deletions.
1 change: 1 addition & 0 deletions bin/debug.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
java -cp rhino/js.jar org.mozilla.javascript.tools.debugger.Main envjs/rhino.js %*
1 change: 1 addition & 0 deletions bin/envjs.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
java -Xmx512M -jar rhino/js.jar -opt -1 envjs/rhino.js %*
20 changes: 15 additions & 5 deletions envjs/platform/core.js
Original file line number Diff line number Diff line change
Expand Up @@ -2763,6 +2763,7 @@ Envjs.getcwd = function() {
* @param {Object} base (semi-optional) The base url used in resolving "path" above
*/
Envjs.uri = function(path, base) {
path = path.replace(/\\/g, '/');
//console.log('constructing uri from path %s and base %s', path, base);
path = path+'';
// Semi-common trick is to make an iframe with src='javascript:false'
Expand All @@ -2777,6 +2778,12 @@ Envjs.uri = function(path, base) {
return urlparse.urlnormalize(path);
}

// if path is a Windows style absolute path (C:\foo\bar\index.html)
// make it a file: URL
if (path.match('^[a-zA-Z]+:/')) {
return 'file:///' + urlparse.urlnormalize(path);
}

// interesting special case, a few very large websites use
// '//foo/bar/' to mean 'http://foo/bar'
if (path.match('^//')) {
Expand All @@ -2798,7 +2805,7 @@ Envjs.uri = function(path, base) {
// if base is still empty, then we are in QA mode loading local
// files. Get current working directory
if (!base) {
base = 'file://' + Envjs.getcwd() + '/';
base = 'file:///' + (""+Envjs.getcwd()).replace(/\\/g, '/') + '/';
}
// handles all cases if path is abosulte or relative to base
// 3rd arg is "false" --> remove fragments
Expand Down Expand Up @@ -2884,13 +2891,15 @@ Envjs.localXHR = function(url, xhr, connection, data){
xhr.statusText = "ok";
xhr.responseText = Envjs.readFromFile(url);
try{
if(url.match(/html$/)){
//url as passed in here might be an object, so stringify it
var urlstring = url.toString();
if(urlstring.match(/html$/)){
xhr.responseHeaders["Content-Type"] = 'text/html';
}else if(url.match(/.xml$/)){
}else if(urlstring.match(/.xml$/)){
xhr.responseHeaders["Content-Type"] = 'text/xml';
}else if(url.match(/.js$/)){
}else if(urlstring.match(/.js$/)){
xhr.responseHeaders["Content-Type"] = 'text/javascript';
}else if(url.match(/.json$/)){
}else if(urlstring.match(/.json$/)){
xhr.responseHeaders["Content-Type"] = 'application/json';
}else{
xhr.responseHeaders["Content-Type"] = 'text/plain';
Expand All @@ -2914,6 +2923,7 @@ Envjs.localXHR = function(url, xhr, connection, data){
__extend__(Envjs, urlparse);

}(/*Envjs.XMLHttpRequest.Core*/));

(function(){

var log = Envjs.logger('Envjs.Window');
Expand Down
10 changes: 6 additions & 4 deletions src/platform/core/xhr.js
Original file line number Diff line number Diff line change
Expand Up @@ -151,13 +151,15 @@ Envjs.localXHR = function(url, xhr, connection, data){
xhr.statusText = "ok";
xhr.responseText = Envjs.readFromFile(url);
try{
if(url.match(/html$/)){
//url as passed in here might be an object, so stringify it
var urlstring = url.toString();
if(urlstring.match(/html$/)){
xhr.responseHeaders["Content-Type"] = 'text/html';
}else if(url.match(/.xml$/)){
}else if(urlstring.match(/.xml$/)){
xhr.responseHeaders["Content-Type"] = 'text/xml';
}else if(url.match(/.js$/)){
}else if(urlstring.match(/.js$/)){
xhr.responseHeaders["Content-Type"] = 'text/javascript';
}else if(url.match(/.json$/)){
}else if(urlstring.match(/.json$/)){
xhr.responseHeaders["Content-Type"] = 'application/json';
}else{
xhr.responseHeaders["Content-Type"] = 'text/plain';
Expand Down

0 comments on commit 08a8197

Please sign in to comment.