ludus/out/goog/html/safestylesheet.js
2023-11-16 13:22:15 -05:00

95 lines
3.7 KiB
JavaScript

/*TRANSPILED*/goog.loadModule(function(exports) {'use strict';/*
Copyright The Closure Library Authors.
SPDX-License-Identifier: Apache-2.0
*/
'use strict';
goog.module("goog.html.SafeStyleSheet");
goog.module.declareLegacyNamespace();
const Const = goog.require("goog.string.Const");
const SafeStyle = goog.require("goog.html.SafeStyle");
const TypedString = goog.require("goog.string.TypedString");
const googObject = goog.require("goog.object");
const {assert, fail} = goog.require("goog.asserts");
const {contains} = goog.require("goog.string.internal");
const CONSTRUCTOR_TOKEN_PRIVATE = {};
class SafeStyleSheet {
constructor(value, token) {
this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_ = token === CONSTRUCTOR_TOKEN_PRIVATE ? value : "";
this.implementsGoogStringTypedString = true;
}
toString() {
return this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_.toString();
}
static createRule(selector, style) {
if (contains(selector, "\x3c")) {
throw new Error(`Selector does not allow '<', got: ${selector}`);
}
const selectorToCheck = selector.replace(/('|")((?!\1)[^\r\n\f\\]|\\[\s\S])*\1/g, "");
if (!/^[-_a-zA-Z0-9#.:* ,>+~[\]()=^$|]+$/.test(selectorToCheck)) {
throw new Error("Selector allows only [-_a-zA-Z0-9#.:* ,\x3e+~[\\]()\x3d^$|] and " + "strings, got: " + selector);
}
if (!SafeStyleSheet.hasBalancedBrackets_(selectorToCheck)) {
throw new Error("() and [] in selector must be balanced, got: " + selector);
}
if (!(style instanceof SafeStyle)) {
style = SafeStyle.create(style);
}
const styleSheet = `${selector}{` + SafeStyle.unwrap(style).replace(/</g, "\\3C ") + "}";
return SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(styleSheet);
}
static hasBalancedBrackets_(s) {
const brackets = {"(":")", "[":"]"};
const expectedBrackets = [];
for (let i = 0; i < s.length; i++) {
const ch = s[i];
if (brackets[ch]) {
expectedBrackets.push(brackets[ch]);
} else if (googObject.contains(brackets, ch)) {
if (expectedBrackets.pop() != ch) {
return false;
}
}
}
return expectedBrackets.length == 0;
}
static concat(var_args) {
let result = "";
const addArgument = argument => {
if (Array.isArray(argument)) {
argument.forEach(addArgument);
} else {
result += SafeStyleSheet.unwrap(argument);
}
};
Array.prototype.forEach.call(arguments, addArgument);
return SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(result);
}
static fromConstant(styleSheet) {
const styleSheetString = Const.unwrap(styleSheet);
if (styleSheetString.length === 0) {
return SafeStyleSheet.EMPTY;
}
assert(!contains(styleSheetString, "\x3c"), `Forbidden '<' character in style sheet string: ${styleSheetString}`);
return SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(styleSheetString);
}
getTypedStringValue() {
return this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_;
}
static unwrap(safeStyleSheet) {
if (safeStyleSheet instanceof SafeStyleSheet && safeStyleSheet.constructor === SafeStyleSheet) {
return safeStyleSheet.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_;
} else {
fail("expected object of type SafeStyleSheet, got '" + safeStyleSheet + "' of type " + goog.typeOf(safeStyleSheet));
return "type_error:SafeStyleSheet";
}
}
static createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(styleSheet) {
return new SafeStyleSheet(styleSheet, CONSTRUCTOR_TOKEN_PRIVATE);
}
}
SafeStyleSheet.EMPTY = SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse("");
exports = SafeStyleSheet;
;return exports;});