mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-07 00:08:39 +09:00
Backport Basilisk internal userscripts
This commit is contained in:
parent
15bec18421
commit
5c168f64fc
23 changed files with 2648 additions and 0 deletions
|
|
@ -0,0 +1,104 @@
|
|||
// 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/.
|
||||
// ==UserScript==
|
||||
// @name Intl.DisplayNames Polyfill (minimal)
|
||||
// @namespace internal-userscripts
|
||||
// @description Provides a minimal Intl.DisplayNames implementation for environments without native support.
|
||||
// @match *://*/*
|
||||
// @grant none
|
||||
// @run-at document-start
|
||||
// ==/UserScript==
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
if (typeof Intl !== "object" || typeof Intl.DisplayNames === "function") {
|
||||
return;
|
||||
}
|
||||
|
||||
var STYLE_VALUES = { long: true, short: true, narrow: true };
|
||||
var TYPE_VALUES = { language: true, region: true, script: true, currency: true };
|
||||
var FALLBACK_VALUES = { code: true, none: true };
|
||||
|
||||
function canonicalizeLocales(locales) {
|
||||
if (typeof Intl.getCanonicalLocales === "function") {
|
||||
return Intl.getCanonicalLocales(locales);
|
||||
}
|
||||
if (locales == null) {
|
||||
return [];
|
||||
}
|
||||
if (Array.isArray(locales)) {
|
||||
return locales.map(function (loc) { return String(loc); });
|
||||
}
|
||||
return [String(locales)];
|
||||
}
|
||||
|
||||
function defaultLocale() {
|
||||
try {
|
||||
if (typeof Intl.DateTimeFormat === "function") {
|
||||
return Intl.DateTimeFormat().resolvedOptions().locale;
|
||||
}
|
||||
} catch (e) {}
|
||||
if (typeof navigator !== "undefined" && navigator.language) {
|
||||
return String(navigator.language);
|
||||
}
|
||||
return "en-US";
|
||||
}
|
||||
|
||||
function DisplayNames(locales, options) {
|
||||
if (!(this instanceof DisplayNames)) {
|
||||
throw new TypeError("Intl.DisplayNames must be called with new");
|
||||
}
|
||||
options = options || {};
|
||||
|
||||
var type = options.type;
|
||||
if (type == null) {
|
||||
throw new TypeError("Intl.DisplayNames requires a type option");
|
||||
}
|
||||
type = String(type);
|
||||
if (!TYPE_VALUES[type]) {
|
||||
throw new RangeError("Invalid type");
|
||||
}
|
||||
|
||||
var style = options.style == null ? "long" : String(options.style);
|
||||
if (!STYLE_VALUES[style]) {
|
||||
throw new RangeError("Invalid style");
|
||||
}
|
||||
|
||||
var fallback = options.fallback == null ? "code" : String(options.fallback);
|
||||
if (!FALLBACK_VALUES[fallback]) {
|
||||
throw new RangeError("Invalid fallback");
|
||||
}
|
||||
|
||||
var localeList = canonicalizeLocales(locales);
|
||||
this._locale = localeList.length ? localeList[0] : defaultLocale();
|
||||
this._style = style;
|
||||
this._type = type;
|
||||
this._fallback = fallback;
|
||||
}
|
||||
|
||||
DisplayNames.supportedLocalesOf = function (locales) {
|
||||
return canonicalizeLocales(locales);
|
||||
};
|
||||
|
||||
DisplayNames.prototype.resolvedOptions = function () {
|
||||
return {
|
||||
locale: this._locale,
|
||||
style: this._style,
|
||||
type: this._type,
|
||||
fallback: this._fallback,
|
||||
};
|
||||
};
|
||||
|
||||
DisplayNames.prototype.of = function (code) {
|
||||
if (this._fallback === "none") {
|
||||
return undefined;
|
||||
}
|
||||
return String(code);
|
||||
};
|
||||
|
||||
Intl.DisplayNames = DisplayNames;
|
||||
try {
|
||||
window.__internalUserscriptsIntlDisplayNamesPolyfill = true;
|
||||
} catch (e) {}
|
||||
})();
|
||||
Loading…
Add table
Add a link
Reference in a new issue