forked from mirrors/gecko-dev
81 lines
1.9 KiB
JavaScript
81 lines
1.9 KiB
JavaScript
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
/* global URLSearchParams, URL */
|
|
|
|
"use strict";
|
|
|
|
// Make this available to both AMD and CJS environments
|
|
define(function (require, exports, module) {
|
|
function parseURLParams(url) {
|
|
url = new URL(url);
|
|
return parseURLEncodedText(url.searchParams);
|
|
}
|
|
|
|
function parseURLEncodedText(text) {
|
|
let params = [];
|
|
|
|
// In case the text is empty just return the empty parameters
|
|
if (text == "") {
|
|
return params;
|
|
}
|
|
|
|
let searchParams = new URLSearchParams(text);
|
|
let entries = [...searchParams.entries()];
|
|
return entries.map(entry => {
|
|
return {
|
|
name: entry[0],
|
|
value: entry[1]
|
|
};
|
|
});
|
|
}
|
|
|
|
function getFileName(url) {
|
|
let split = splitURLBase(url);
|
|
return split.name;
|
|
}
|
|
|
|
function splitURLBase(url) {
|
|
if (!isDataURL(url)) {
|
|
return splitURLTrue(url);
|
|
}
|
|
return {};
|
|
}
|
|
|
|
function isDataURL(url) {
|
|
return (url && url.substr(0, 5) == "data:");
|
|
}
|
|
|
|
function splitURLTrue(url) {
|
|
const reSplitFile = /(.*?):\/{2,3}([^\/]*)(.*?)([^\/]*?)($|\?.*)/;
|
|
let m = reSplitFile.exec(url);
|
|
|
|
if (!m) {
|
|
return {
|
|
name: url,
|
|
path: url
|
|
};
|
|
} else if (m[4] == "" && m[5] == "") {
|
|
return {
|
|
protocol: m[1],
|
|
domain: m[2],
|
|
path: m[3],
|
|
name: m[3] != "/" ? m[3] : m[2]
|
|
};
|
|
}
|
|
|
|
return {
|
|
protocol: m[1],
|
|
domain: m[2],
|
|
path: m[2] + m[3],
|
|
name: m[4] + m[5]
|
|
};
|
|
}
|
|
|
|
// Exports from this module
|
|
exports.parseURLParams = parseURLParams;
|
|
exports.parseURLEncodedText = parseURLEncodedText;
|
|
exports.getFileName = getFileName;
|
|
});
|