jointjs
Version:
JavaScript diagramming library
50 lines (36 loc) • 1.31 kB
JavaScript
(function (name, context, definition) {
if (typeof module !== 'undefined' && module.exports) module.exports = definition();
else if (typeof define === 'function' && define.amd) define(definition);
else context[name] = definition();
})('urljoin', this, function () {
function startsWith(str, searchString) {
return str.substr(0, searchString.length) === searchString;
}
function normalize (str, options) {
if (startsWith(str, 'file://')) {
// make sure file protocol has max three slashes
str = str.replace(/(\/{0,3})\/*/g, '$1');
} else {
// make sure protocol is followed by two slashes
str = str.replace(/:\//g, '://');
// remove consecutive slashes
str = str.replace(/([^:\s\%\3\A])\/+/g, '$1/');
}
// remove trailing slash before parameters or hash
str = str.replace(/\/(\?|&|#[^!])/g, '$1');
// replace ? in parameters with &
str = str.replace(/(\?.+)\?/g, '$1&');
return str;
}
return function () {
var input = arguments;
var options = {};
if (typeof arguments[0] === 'object') {
// new syntax with array and options
input = arguments[0];
options = arguments[1] || {};
}
var joined = [].slice.call(input, 0).join('/');
return normalize(joined, options);
};
});