import { html } from "/js/lib/lit-html.js"; import { getLabelNameAndDescription, isBadgeLabel, getDefaultLabelSetting, } from "/js/dataHelpers.js"; import { classnames, noop } from "/js/utils.js"; function doShowWarnButton(labelDefinition) { return !( labelDefinition.blurs === "none" && labelDefinition.severity === "none" ); } function getWarnLabel(labelDefinition) { if (!isBadgeLabel(labelDefinition)) { return "Warn"; } return labelDefinition.severity === "inform" ? "Show badge" : "Warn"; } function labelPreferenceRowTemplate({ labelDefinition, value, isSubscribed, onClick, }) { const { name, description } = getLabelNameAndDescription(labelDefinition); const showWarnButton = doShowWarnButton(labelDefinition); return html`
${name}
${description ? html`
${description}
` : null} ${isSubscribed ? html`
${showWarnButton ? html` ` : null}
` : null}
`; } export function labelerSettingsTemplate({ labelerInfo, isSubscribed, labelerSettings, onClick = noop, }) { const labelValueDefinitions = labelerInfo.policies?.labelValueDefinitions || []; const configurableLabels = labelValueDefinitions.filter( (def) => !def.identifier.startsWith("!"), ); if (configurableLabels.length === 0) { return html`

This labeler has no configurable labels.

`; } return html`

Labels are annotations on users and content. They can be used to hide, warn, and categorize the network.

${configurableLabels.map((labelDefinition) => { const currentSetting = labelerSettings.find( (pref) => pref.label === labelDefinition.identifier, ); const value = currentSetting ? currentSetting.visibility : getDefaultLabelSetting(labelDefinition); return labelPreferenceRowTemplate({ labelDefinition, value, isSubscribed, onClick: (newValue) => { if (newValue !== value) { onClick(labelDefinition.identifier, newValue); } }, }); })}
`; }