mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-03 06:38:51 +02:00
f20ad434ce
API Allow HtmlEditorField to be individually configured BUG Fix incorrect change detection BUG Fix missing i18n files
185 lines
5.3 KiB
JavaScript
185 lines
5.3 KiB
JavaScript
(function (global, factory) {
|
|
if (typeof define === "function" && define.amd) {
|
|
define('ss.sspath', ['jQuery'], factory);
|
|
} else if (typeof exports !== "undefined") {
|
|
factory(require('jQuery'));
|
|
} else {
|
|
var mod = {
|
|
exports: {}
|
|
};
|
|
factory(global.jQuery);
|
|
global.ssSspath = mod.exports;
|
|
}
|
|
})(this, function (_jQuery) {
|
|
'use strict';
|
|
|
|
var _jQuery2 = _interopRequireDefault(_jQuery);
|
|
|
|
function _interopRequireDefault(obj) {
|
|
return obj && obj.__esModule ? obj : {
|
|
default: obj
|
|
};
|
|
}
|
|
|
|
var $window = (0, _jQuery2.default)(window),
|
|
$html = (0, _jQuery2.default)('html'),
|
|
$head = (0, _jQuery2.default)('head'),
|
|
path = {
|
|
urlParseRE: /^(((([^:\/#\?]+:)?(?:(\/\/)((?:(([^:@\/#\?]+)(?:\:([^:@\/#\?]+))?)@)?(([^:\/#\?\]\[]+|\[[^\/\]@#?]+\])(?:\:([0-9]+))?))?)?)?((\/?(?:[^\/\?#]+\/+)*)([^\?#]*)))?(\?[^#]+)?)(#.*)?/,
|
|
parseUrl: function parseUrl(url) {
|
|
if (_jQuery2.default.type(url) === "object") {
|
|
return url;
|
|
}
|
|
|
|
var matches = path.urlParseRE.exec(url || "") || [];
|
|
return {
|
|
href: matches[0] || "",
|
|
hrefNoHash: matches[1] || "",
|
|
hrefNoSearch: matches[2] || "",
|
|
domain: matches[3] || "",
|
|
protocol: matches[4] || "",
|
|
doubleSlash: matches[5] || "",
|
|
authority: matches[6] || "",
|
|
username: matches[8] || "",
|
|
password: matches[9] || "",
|
|
host: matches[10] || "",
|
|
hostname: matches[11] || "",
|
|
port: matches[12] || "",
|
|
pathname: matches[13] || "",
|
|
directory: matches[14] || "",
|
|
filename: matches[15] || "",
|
|
search: matches[16] || "",
|
|
hash: matches[17] || ""
|
|
};
|
|
},
|
|
makePathAbsolute: function makePathAbsolute(relPath, absPath) {
|
|
if (relPath && relPath.charAt(0) === "/") {
|
|
return relPath;
|
|
}
|
|
|
|
relPath = relPath || "";
|
|
absPath = absPath ? absPath.replace(/^\/|(\/[^\/]*|[^\/]+)$/g, "") : "";
|
|
var absStack = absPath ? absPath.split("/") : [],
|
|
relStack = relPath.split("/");
|
|
|
|
for (var i = 0; i < relStack.length; i++) {
|
|
var d = relStack[i];
|
|
|
|
switch (d) {
|
|
case ".":
|
|
break;
|
|
|
|
case "..":
|
|
if (absStack.length) {
|
|
absStack.pop();
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
absStack.push(d);
|
|
break;
|
|
}
|
|
}
|
|
|
|
return "/" + absStack.join("/");
|
|
},
|
|
isSameDomain: function isSameDomain(absUrl1, absUrl2) {
|
|
return path.parseUrl(absUrl1).domain === path.parseUrl(absUrl2).domain;
|
|
},
|
|
isRelativeUrl: function isRelativeUrl(url) {
|
|
return path.parseUrl(url).protocol === "";
|
|
},
|
|
isAbsoluteUrl: function isAbsoluteUrl(url) {
|
|
return path.parseUrl(url).protocol !== "";
|
|
},
|
|
makeUrlAbsolute: function makeUrlAbsolute(relUrl, absUrl) {
|
|
if (!path.isRelativeUrl(relUrl)) {
|
|
return relUrl;
|
|
}
|
|
|
|
var relObj = path.parseUrl(relUrl),
|
|
absObj = path.parseUrl(absUrl),
|
|
protocol = relObj.protocol || absObj.protocol,
|
|
doubleSlash = relObj.protocol ? relObj.doubleSlash : relObj.doubleSlash || absObj.doubleSlash,
|
|
authority = relObj.authority || absObj.authority,
|
|
hasPath = relObj.pathname !== "",
|
|
pathname = path.makePathAbsolute(relObj.pathname || absObj.filename, absObj.pathname),
|
|
search = relObj.search || !hasPath && absObj.search || "",
|
|
hash = relObj.hash;
|
|
return protocol + doubleSlash + authority + pathname + search + hash;
|
|
},
|
|
addSearchParams: function addSearchParams(url, params) {
|
|
var u = path.parseUrl(url),
|
|
params = typeof params === "string" ? path.convertSearchToArray(params) : params,
|
|
newParams = _jQuery2.default.extend(path.convertSearchToArray(u.search), params);
|
|
|
|
return u.hrefNoSearch + '?' + _jQuery2.default.param(newParams) + (u.hash || "");
|
|
},
|
|
getSearchParams: function getSearchParams(url) {
|
|
var u = path.parseUrl(url);
|
|
return path.convertSearchToArray(u.search);
|
|
},
|
|
convertSearchToArray: function convertSearchToArray(search) {
|
|
var params = {},
|
|
search = search.replace(/^\?/, ''),
|
|
parts = search ? search.split('&') : [],
|
|
i,
|
|
tmp;
|
|
|
|
for (i = 0; i < parts.length; i++) {
|
|
tmp = parts[i].split('=');
|
|
params[tmp[0]] = tmp[1];
|
|
}
|
|
|
|
return params;
|
|
},
|
|
convertUrlToDataUrl: function convertUrlToDataUrl(absUrl) {
|
|
var u = path.parseUrl(absUrl);
|
|
|
|
if (path.isEmbeddedPage(u)) {
|
|
return u.hash.split(dialogHashKey)[0].replace(/^#/, "");
|
|
} else if (path.isSameDomain(u, document)) {
|
|
return u.hrefNoHash.replace(document.domain, "");
|
|
}
|
|
|
|
return absUrl;
|
|
},
|
|
get: function get(newPath) {
|
|
if (newPath === undefined) {
|
|
newPath = location.hash;
|
|
}
|
|
|
|
return path.stripHash(newPath).replace(/[^\/]*\.[^\/*]+$/, '');
|
|
},
|
|
getFilePath: function getFilePath(path) {
|
|
var splitkey = '&' + _jQuery2.default.mobile.subPageUrlKey;
|
|
return path && path.split(splitkey)[0].split(dialogHashKey)[0];
|
|
},
|
|
set: function set(path) {
|
|
location.hash = path;
|
|
},
|
|
isPath: function isPath(url) {
|
|
return (/\//.test(url)
|
|
);
|
|
},
|
|
clean: function clean(url) {
|
|
return url.replace(document.domain, "");
|
|
},
|
|
stripHash: function stripHash(url) {
|
|
return url.replace(/^#/, "");
|
|
},
|
|
cleanHash: function cleanHash(hash) {
|
|
return path.stripHash(hash.replace(/\?.*$/, "").replace(dialogHashKey, ""));
|
|
},
|
|
isExternal: function isExternal(url) {
|
|
var u = path.parseUrl(url);
|
|
return u.protocol && u.domain !== document.domain ? true : false;
|
|
},
|
|
hasProtocol: function hasProtocol(url) {
|
|
return (/^(:?\w+:)/.test(url)
|
|
);
|
|
}
|
|
};
|
|
_jQuery2.default.path = path;
|
|
}); |