Add OC.joinPaths for convenient path joining
This commit is contained in:
parent
87f3500fda
commit
119e27166e
|
@ -325,6 +325,48 @@ var OC={
|
|||
return path.replace(/\\/g,'/').replace(/\/[^\/]*$/, '');
|
||||
},
|
||||
|
||||
/**
|
||||
* Join path sections
|
||||
*
|
||||
* @param {...String} path sections
|
||||
*
|
||||
* @return {String} joined path, any leading or trailing slash
|
||||
* will be kept
|
||||
*
|
||||
* @since 8.2
|
||||
*/
|
||||
joinPaths: function() {
|
||||
if (arguments.length < 1) {
|
||||
return '';
|
||||
}
|
||||
var path = '';
|
||||
var lastArg = arguments[arguments.length - 1];
|
||||
var leadingSlash = arguments[0].charAt(0) === '/';
|
||||
var trailingSlash = lastArg.charAt(lastArg.length - 1) === '/';
|
||||
var sections = [];
|
||||
var i;
|
||||
for (i = 0; i < arguments.length; i++) {
|
||||
sections = sections.concat(arguments[i].split('/'));
|
||||
}
|
||||
var first = !leadingSlash;
|
||||
for (i = 0; i < sections.length; i++) {
|
||||
if (sections[i] !== '') {
|
||||
if (first) {
|
||||
first = false;
|
||||
} else {
|
||||
path += '/';
|
||||
}
|
||||
path += sections[i];
|
||||
}
|
||||
}
|
||||
|
||||
if (trailingSlash) {
|
||||
// add it back
|
||||
path += '/';
|
||||
}
|
||||
return path;
|
||||
},
|
||||
|
||||
/**
|
||||
* Do a search query and display the results
|
||||
* @param {string} query the search query
|
||||
|
|
|
@ -134,6 +134,44 @@ describe('Core base tests', function() {
|
|||
expect(escapeHTML('This is a good string without HTML.')).toEqual('This is a good string without HTML.');
|
||||
});
|
||||
});
|
||||
describe('joinPaths', function() {
|
||||
it('returns empty string with no or empty arguments', function() {
|
||||
expect(OC.joinPaths()).toEqual('');
|
||||
expect(OC.joinPaths('')).toEqual('');
|
||||
expect(OC.joinPaths('', '')).toEqual('');
|
||||
});
|
||||
it('returns joined path sections', function() {
|
||||
expect(OC.joinPaths('abc')).toEqual('abc');
|
||||
expect(OC.joinPaths('abc', 'def')).toEqual('abc/def');
|
||||
expect(OC.joinPaths('abc', 'def', 'ghi')).toEqual('abc/def/ghi');
|
||||
});
|
||||
it('keeps leading slashes', function() {
|
||||
expect(OC.joinPaths('/abc')).toEqual('/abc');
|
||||
expect(OC.joinPaths('/abc', 'def')).toEqual('/abc/def');
|
||||
expect(OC.joinPaths('/abc', 'def', 'ghi')).toEqual('/abc/def/ghi');
|
||||
});
|
||||
it('keeps trailing slashes', function() {
|
||||
expect(OC.joinPaths('abc/')).toEqual('abc/');
|
||||
expect(OC.joinPaths('abc', 'def/')).toEqual('abc/def/');
|
||||
expect(OC.joinPaths('abc', 'def', 'ghi/')).toEqual('abc/def/ghi/');
|
||||
});
|
||||
it('splits paths in specified strings and discards extra slashes', function() {
|
||||
expect(OC.joinPaths('//abc//')).toEqual('/abc/');
|
||||
expect(OC.joinPaths('//abc//def//')).toEqual('/abc/def/');
|
||||
expect(OC.joinPaths('//abc//', '//def//')).toEqual('/abc/def/');
|
||||
expect(OC.joinPaths('//abc//', '//def//', '//ghi//')).toEqual('/abc/def/ghi/');
|
||||
expect(OC.joinPaths('//abc//def//', '//ghi//jkl/mno/', '//pqr//'))
|
||||
.toEqual('/abc/def/ghi/jkl/mno/pqr/');
|
||||
});
|
||||
it('discards empty sections', function() {
|
||||
expect(OC.joinPaths('abc', '', 'def')).toEqual('abc/def');
|
||||
});
|
||||
it('returns root if only slashes', function() {
|
||||
expect(OC.joinPaths('//')).toEqual('/');
|
||||
expect(OC.joinPaths('/', '/')).toEqual('/');
|
||||
expect(OC.joinPaths('/', '//', '/')).toEqual('/');
|
||||
});
|
||||
});
|
||||
describe('filePath', function() {
|
||||
beforeEach(function() {
|
||||
OC.webroot = 'http://localhost';
|
||||
|
|
Loading…
Reference in New Issue