2015-12-17 03:34:20 +03:00
|
|
|
/**********************************************************************
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
|
|
|
|
define(function(require){ var module = {}
|
|
|
|
|
|
|
|
|
|
//var DEBUG = DEBUG != null ? DEBUG : true
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*********************************************************************/
|
|
|
|
|
|
2015-12-17 09:14:59 +03:00
|
|
|
// Quote a string and convert to RegExp to match self literally.
|
|
|
|
|
var quoteRegExp =
|
|
|
|
|
module.quoteRegExp =
|
|
|
|
|
function(str){
|
|
|
|
|
return str.replace(/([\.\\\/\(\)\[\]\$\*\+\-\{\}\@\^\&\?\<\>])/g, '\\$1')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// XXX do we need to quote anything else???
|
|
|
|
|
var path2url =
|
|
|
|
|
module.path2url =
|
|
|
|
|
function(path){
|
|
|
|
|
// test if we have a schema, and if yes return as-is...
|
|
|
|
|
if(/^(http|https|file|[\w-]*):[\\\/]{2}/.test(path)){
|
|
|
|
|
return path
|
|
|
|
|
}
|
|
|
|
|
// skip encoding windows drives...
|
|
|
|
|
var drive = path.split(/^([a-z]:[\\\/])/i)
|
|
|
|
|
path = drive.pop()
|
|
|
|
|
drive = drive.pop() || ''
|
|
|
|
|
return drive + (path
|
|
|
|
|
.split(/[\\\/]/g)
|
|
|
|
|
// XXX these are too aggressive...
|
|
|
|
|
//.map(encodeURI)
|
|
|
|
|
//.map(encodeURIComponent)
|
|
|
|
|
.join('/')
|
|
|
|
|
// NOTE: keep '%' the first...
|
|
|
|
|
.replace(/%/g, '%25')
|
|
|
|
|
.replace(/#/g, '%23')
|
|
|
|
|
.replace(/&/g, '%26'))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2015-12-17 03:34:20 +03:00
|
|
|
// NOTE: we are not using node's path module as we need this to work in
|
|
|
|
|
// all contexts, not only node... (???)
|
|
|
|
|
var normalizePath =
|
|
|
|
|
module.normalizePath =
|
|
|
|
|
function(path){
|
|
|
|
|
return typeof(path) == typeof('str') ? path
|
|
|
|
|
// normalize the slashes...
|
|
|
|
|
.replace(/(\/)/g, '/')
|
|
|
|
|
// remove duplicate '/'
|
|
|
|
|
.replace(/(\/)\1+/g, '/')
|
|
|
|
|
// remove trailing '/'
|
|
|
|
|
.replace(/\/+$/, '')
|
|
|
|
|
// take care of .
|
|
|
|
|
.replace(/\/\.\//g, '/')
|
|
|
|
|
.replace(/\/\.$/, '')
|
|
|
|
|
// take care of ..
|
|
|
|
|
.replace(/\/[^\/]+\/\.\.\//g, '/')
|
|
|
|
|
.replace(/\/[^\/]+\/\.\.$/, '')
|
|
|
|
|
: path
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
|
* vim:set ts=4 sw=4 : */
|
|
|
|
|
return module })
|