475 lines
24 KiB
JavaScript
475 lines
24 KiB
JavaScript
(() => {
|
|
const cfg = window.APP_CONFIG;
|
|
if (!cfg) return;
|
|
const base = cfg.baseURL.replace(/\/$/, '');
|
|
const form = document.getElementById('generator-form');
|
|
if (!form) return;
|
|
const $ = id => document.getElementById(id);
|
|
const ARTICLE_50_START = '2026-08-02';
|
|
const presets = {
|
|
// Human/editorial review is a factual workflow statement and must never be inferred.
|
|
'no-ai': {extent:'none', activities:'', review:'none'},
|
|
research: {extent:'assisted', activities:'research', review:'none'},
|
|
summary: {extent:'assisted', activities:'summarisation', review:'none'},
|
|
full: {extent:'full', activities:'generation', review:'none'}
|
|
};
|
|
|
|
function value(id) {
|
|
const el = $(id);
|
|
return el && !el.disabled ? el.value.trim() : '';
|
|
}
|
|
|
|
function validValue(id) {
|
|
const el = $(id);
|
|
if (!el || el.disabled) return '';
|
|
const v = el.value.trim();
|
|
return v && (!el.validity || el.validity.valid) ? v : '';
|
|
}
|
|
|
|
function setHidden(id, hidden) {
|
|
const el = $(id);
|
|
if (!el) return;
|
|
el.hidden = hidden;
|
|
el.querySelectorAll?.('input,select,textarea').forEach(input => { input.disabled = hidden; });
|
|
}
|
|
|
|
function setArticleParams(params) {
|
|
params.set('mode', 'article');
|
|
const fields = {
|
|
text: 'article-text',
|
|
coverImage: 'article-cover-image',
|
|
image: 'article-image',
|
|
research: 'article-research',
|
|
translation: 'article-translation',
|
|
audio: 'article-audio',
|
|
video: 'article-video',
|
|
code: 'article-code'
|
|
};
|
|
Object.entries(fields).forEach(([name, id]) => {
|
|
const extent = $(id).value;
|
|
params.set(name + 'Extent', extent);
|
|
params.set(name + 'Review', extent === 'none' ? 'none' : $(`${id}-review`).value);
|
|
});
|
|
}
|
|
|
|
function legalCategories() {
|
|
const values = [];
|
|
if (value('legal-deepfake') === 'yes') values.push('deepfake');
|
|
if (value('legal-public-interest') === 'yes') values.push('publicInterestText');
|
|
if (value('legal-creative') === 'yes') values.push('artisticCreativeSatiricalFictional');
|
|
if ($('legal-other-voluntary')?.checked && !$('legal-other-voluntary').disabled) values.push('otherVoluntary');
|
|
return values;
|
|
}
|
|
|
|
function substantiveReview(mode) {
|
|
return mode === 'editorial' || mode === 'expert';
|
|
}
|
|
|
|
function articleMode() {
|
|
return $('declaration-mode').value === 'article';
|
|
}
|
|
|
|
function extentHasAI(extent) {
|
|
return Boolean(extent && extent !== 'none');
|
|
}
|
|
|
|
function singleHasAI(component) {
|
|
return $('component').value === component && extentHasAI($('extent').value);
|
|
}
|
|
|
|
function articleHasAI(id) {
|
|
return extentHasAI($(id)?.value || 'none');
|
|
}
|
|
|
|
function hasAIText() {
|
|
return articleMode() ? articleHasAI('article-text') : singleHasAI('text');
|
|
}
|
|
|
|
function hasAIMedia() {
|
|
if (articleMode()) {
|
|
return ['article-cover-image', 'article-image', 'article-audio', 'article-video'].some(articleHasAI);
|
|
}
|
|
return ['coverImage', 'image', 'audio', 'video'].includes($('component').value) && extentHasAI($('extent').value);
|
|
}
|
|
|
|
function hasAnyAI() {
|
|
if (!articleMode()) return extentHasAI($('extent').value);
|
|
return ['article-text','article-cover-image','article-image','article-research','article-translation','article-audio','article-video','article-code'].some(articleHasAI);
|
|
}
|
|
|
|
function currentTextReview() {
|
|
if (articleMode()) return $('article-text-review').value;
|
|
return $('component').value === 'text' && extentHasAI($('extent').value) ? $('review').value : 'none';
|
|
}
|
|
|
|
function selectedLegalContext() {
|
|
return {
|
|
role: value('legal-role'),
|
|
useContext: value('use-context'),
|
|
outputDate: value('output-date'),
|
|
deepfakeAssessment: value('legal-deepfake'),
|
|
publicInterestAssessment: value('legal-public-interest'),
|
|
creativeWorkAssessment: value('legal-creative'),
|
|
lawEnforcementAuthorization: value('law-enforcement-authorization'),
|
|
categories: legalCategories()
|
|
};
|
|
}
|
|
|
|
function legalAssessment(locale) {
|
|
const ctx = selectedLegalContext();
|
|
const deepfake = ctx.deepfakeAssessment === 'yes' || ctx.categories.includes('deepfake');
|
|
const publicInterest = ctx.publicInterestAssessment === 'yes' || ctx.categories.includes('publicInterestText');
|
|
const creative = ctx.creativeWorkAssessment === 'yes' || ctx.categories.includes('artisticCreativeSatiricalFictional');
|
|
const deepfakeUnsure = ctx.deepfakeAssessment === 'unsure';
|
|
const publicInterestUnsure = ctx.publicInterestAssessment === 'unsure';
|
|
|
|
if (!hasAnyAI()) {
|
|
return {text: locale.text.legal_assessment_none, legal: false, level: 'info', consequence: locale.text.consequence_voluntary, badge: locale.text.badge_article || 'Article transparency'};
|
|
}
|
|
|
|
if (!ctx.role || !ctx.useContext) {
|
|
return {text: locale.text.legal_assessment_pending, legal: false, level: 'attention', consequence: '', badge: locale.text.badge_article || 'Article transparency'};
|
|
}
|
|
if (ctx.useContext === 'personalNonProfessional') {
|
|
return {text: locale.text.legal_assessment_personal, legal: false, level: 'info', consequence: locale.text.consequence_voluntary, badge: locale.text.badge_article || 'Article transparency'};
|
|
}
|
|
if (ctx.role === 'provider') {
|
|
return {text: locale.text.legal_assessment_provider, legal: false, level: 'attention', consequence: locale.text.consequence_provider, badge: locale.text.badge_article || 'Article transparency'};
|
|
}
|
|
|
|
const mediaRelevant = hasAIMedia();
|
|
const textRelevant = hasAIText();
|
|
const lawEnforcementRelevant = [ctx.deepfakeAssessment, ctx.publicInterestAssessment].some(v => v === 'yes' || v === 'unsure');
|
|
const initialPending = (mediaRelevant && !ctx.deepfakeAssessment)
|
|
|| (textRelevant && !ctx.publicInterestAssessment)
|
|
|| (lawEnforcementRelevant && !ctx.lawEnforcementAuthorization);
|
|
if (initialPending) {
|
|
return {text: locale.text.legal_assessment_pending, legal: false, level: 'attention', consequence: '', badge: locale.text.badge_article || 'Article transparency'};
|
|
}
|
|
if (ctx.outputDate && ctx.outputDate < ARTICLE_50_START) {
|
|
return {text: locale.text.legal_assessment_pre_application, legal: false, level: 'info', consequence: locale.text.consequence_voluntary, badge: locale.text.badge_article || 'Article transparency'};
|
|
}
|
|
if ((deepfake || publicInterest || deepfakeUnsure || publicInterestUnsure) && ctx.lawEnforcementAuthorization === 'yes') {
|
|
return {text: locale.text.legal_assessment_law_enforcement, legal: false, level: 'info', consequence: locale.text.consequence_voluntary, badge: locale.text.badge_article || 'Article transparency'};
|
|
}
|
|
if (ctx.deepfakeAssessment === 'yes' && !ctx.creativeWorkAssessment) {
|
|
return {text: locale.text.legal_assessment_pending, legal: false, level: 'attention', consequence: '', badge: locale.text.badge_article || 'Article transparency'};
|
|
}
|
|
if (deepfakeUnsure) {
|
|
return {text: locale.text.legal_assessment_deepfake_unsure, legal: true, level: 'attention', consequence: locale.text.consequence_disclosure, badge: locale.text.badge_legal_disclosure || 'AI-generated / manipulated content'};
|
|
}
|
|
if (deepfake) {
|
|
return {
|
|
text: creative ? locale.text.legal_assessment_deepfake_creative : locale.text.legal_assessment_deepfake,
|
|
legal: true,
|
|
level: 'attention',
|
|
consequence: locale.text.consequence_disclosure,
|
|
badge: locale.text.badge_legal_disclosure || 'AI-generated / manipulated content'
|
|
};
|
|
}
|
|
if (publicInterestUnsure) {
|
|
return {text: locale.text.legal_assessment_public_unsure, legal: true, level: 'attention', consequence: locale.text.consequence_disclosure, badge: locale.text.badge_public_interest || 'AI-generated / edited content'};
|
|
}
|
|
if (publicInterest) {
|
|
const hasResponsibility = Boolean(value('responsible-role') && value('responsible'));
|
|
if (substantiveReview(currentTextReview()) && hasResponsibility) {
|
|
return {text: locale.text.legal_assessment_public_exemption, legal: false, level: 'info', consequence: locale.text.consequence_voluntary, badge: locale.text.badge_article || 'Article transparency'};
|
|
}
|
|
return {text: locale.text.legal_assessment_public_required, legal: true, level: 'attention', consequence: locale.text.consequence_disclosure, badge: locale.text.badge_public_interest || 'AI-generated / edited content'};
|
|
}
|
|
if (ctx.categories.includes('otherVoluntary')) {
|
|
return {text: locale.text.legal_assessment_voluntary, legal: false, level: 'info', consequence: locale.text.consequence_voluntary, badge: locale.text.badge_article || 'Article transparency'};
|
|
}
|
|
return {text: locale.text.legal_assessment_none, legal: false, level: 'info', consequence: locale.text.consequence_voluntary, badge: locale.text.badge_article || 'Article transparency'};
|
|
}
|
|
|
|
function renderAssessment(locale, assessment) {
|
|
const target = $('legal-assessment');
|
|
if (!target) return;
|
|
target.replaceChildren();
|
|
const heading = document.createElement('strong');
|
|
heading.textContent = locale.text.legal_assessment_heading || 'Article 50 assessment';
|
|
const text = document.createElement('span');
|
|
text.textContent = assessment.text || '';
|
|
const consequence = document.createElement('span');
|
|
consequence.className = 'assessment-consequence';
|
|
consequence.textContent = assessment.consequence || '';
|
|
target.append(heading, text, consequence);
|
|
target.dataset.level = assessment.level || (assessment.legal ? 'attention' : 'info');
|
|
}
|
|
|
|
function addValidationMessage(container, text, level = 'warning') {
|
|
if (!text) return;
|
|
const p = document.createElement('p');
|
|
p.className = `validation-message ${level}`;
|
|
p.textContent = text;
|
|
container.appendChild(p);
|
|
}
|
|
|
|
function renderValidationMessages(locale) {
|
|
const target = $('validation-messages');
|
|
if (!target) return;
|
|
target.replaceChildren();
|
|
if (!hasAnyAI()) return;
|
|
const ctx = selectedLegalContext();
|
|
const categories = ctx.categories;
|
|
const review = currentTextReview();
|
|
|
|
if (ctx.role === 'provider' || ctx.role === 'both') addValidationMessage(target, locale.text.validation_provider, 'info');
|
|
if (ctx.role === 'unsure') addValidationMessage(target, locale.text.validation_role_unsure);
|
|
if (ctx.useContext === 'personalNonProfessional') addValidationMessage(target, locale.text.validation_personal, 'info');
|
|
if (ctx.useContext === 'unsure') addValidationMessage(target, locale.text.validation_use_context_unsure);
|
|
if (ctx.outputDate && ctx.outputDate < ARTICLE_50_START) addValidationMessage(target, locale.text.validation_pre_application, 'info');
|
|
if (ctx.lawEnforcementAuthorization === 'unsure') addValidationMessage(target, locale.text.validation_law_enforcement_unsure);
|
|
if (ctx.deepfakeAssessment === 'unsure') addValidationMessage(target, locale.text.validation_deepfake_unsure);
|
|
if (ctx.publicInterestAssessment === 'unsure') addValidationMessage(target, locale.text.validation_public_unsure);
|
|
if (ctx.creativeWorkAssessment === 'unsure') addValidationMessage(target, locale.text.validation_creative_unsure, 'info');
|
|
if (categories.includes('publicInterestText') && !hasAIText()) addValidationMessage(target, locale.text.validation_public_no_ai);
|
|
if (categories.includes('deepfake') && !hasAIMedia()) addValidationMessage(target, locale.text.validation_deepfake_no_media);
|
|
if (categories.includes('publicInterestText') && review === 'basic') addValidationMessage(target, locale.text.validation_formal_review);
|
|
if (categories.includes('publicInterestText') && substantiveReview(review) && (!value('responsible-role') || !value('responsible'))) {
|
|
addValidationMessage(target, locale.text.validation_missing_responsibility);
|
|
}
|
|
const complaintStarted = value('complaint-name') || value('complaint-email') || value('complaint-url');
|
|
if (complaintStarted && (!value('complaint-name') || (!validValue('complaint-email') && !validValue('complaint-url')))) {
|
|
addValidationMessage(target, locale.text.validation_complaint_incomplete || 'Complete the complaint contact with a name and at least one valid contact method.');
|
|
}
|
|
}
|
|
|
|
function syncVisibility(locale) {
|
|
const isArticle = articleMode();
|
|
$('single-fields').hidden = isArticle;
|
|
$('article-fields').hidden = !isArticle;
|
|
|
|
const noSingleAI = !isArticle && !extentHasAI($('extent').value);
|
|
setHidden('single-review-field', noSingleAI);
|
|
setHidden('single-activities-field', noSingleAI);
|
|
if (noSingleAI) $('review').value = 'none';
|
|
|
|
document.querySelectorAll('#article-fields select[data-review]').forEach(extentSelect => {
|
|
const reviewID = extentSelect.dataset.review;
|
|
const wrap = document.querySelector(`[data-review-wrap="${reviewID}"]`);
|
|
const hidden = extentSelect.value === 'none';
|
|
if (wrap) {
|
|
wrap.hidden = hidden;
|
|
const reviewSelect = $(reviewID);
|
|
if (reviewSelect) {
|
|
reviewSelect.disabled = hidden;
|
|
if (hidden) reviewSelect.value = 'none';
|
|
}
|
|
}
|
|
});
|
|
|
|
const anyAI = hasAnyAI();
|
|
setHidden('legal-context-builder', !anyAI);
|
|
$('legal-role').required = anyAI;
|
|
$('use-context').required = anyAI;
|
|
$('legal-role').disabled = !anyAI;
|
|
$('use-context').disabled = !anyAI;
|
|
if (!anyAI) {
|
|
$('legal-role').value = '';
|
|
$('use-context').value = '';
|
|
['legal-deepfake','legal-public-interest','legal-creative','law-enforcement-authorization'].forEach(id => { if ($(id)) $(id).value = ''; });
|
|
if ($('legal-other-voluntary')) $('legal-other-voluntary').checked = false;
|
|
setHidden('legal-deepfake-row', true);
|
|
setHidden('legal-public-interest-row', true);
|
|
setHidden('legal-creative-row', true);
|
|
setHidden('law-enforcement-fields', true);
|
|
setHidden('legal-timing-fields', true);
|
|
setHidden('legal-other-voluntary-row', true);
|
|
}
|
|
|
|
if (anyAI) {
|
|
const prerequisitesAnswered = Boolean(value('legal-role') && value('use-context'));
|
|
const deployerScopeRelevant = prerequisitesAnswered && value('use-context') !== 'personalNonProfessional' && value('legal-role') !== 'provider';
|
|
const mediaRelevant = deployerScopeRelevant && hasAIMedia();
|
|
const textRelevant = deployerScopeRelevant && hasAIText();
|
|
setHidden('legal-deepfake-row', !mediaRelevant);
|
|
$('legal-deepfake').required = mediaRelevant;
|
|
$('legal-deepfake').disabled = !mediaRelevant;
|
|
if (!mediaRelevant) $('legal-deepfake').value = '';
|
|
|
|
setHidden('legal-public-interest-row', !textRelevant);
|
|
$('legal-public-interest').required = textRelevant;
|
|
$('legal-public-interest').disabled = !textRelevant;
|
|
if (!textRelevant) $('legal-public-interest').value = '';
|
|
|
|
const legalExceptionRelevant = deployerScopeRelevant && [value('legal-deepfake'), value('legal-public-interest')].some(v => v === 'yes' || v === 'unsure');
|
|
setHidden('law-enforcement-fields', !legalExceptionRelevant);
|
|
$('law-enforcement-authorization').required = legalExceptionRelevant;
|
|
$('law-enforcement-authorization').disabled = !legalExceptionRelevant;
|
|
if (!legalExceptionRelevant) $('law-enforcement-authorization').value = '';
|
|
|
|
const creativeRelevant = mediaRelevant && value('legal-deepfake') === 'yes' && ['no', 'unsure'].includes(value('law-enforcement-authorization'));
|
|
setHidden('legal-creative-row', !creativeRelevant);
|
|
$('legal-creative').required = creativeRelevant;
|
|
$('legal-creative').disabled = !creativeRelevant;
|
|
if (!creativeRelevant) $('legal-creative').value = '';
|
|
|
|
const allRelevantScopeQuestionsResolvedNo = deployerScopeRelevant && (!mediaRelevant || value('legal-deepfake') === 'no') && (!textRelevant || value('legal-public-interest') === 'no');
|
|
const noContentScopeQuestions = deployerScopeRelevant && !mediaRelevant && !textRelevant;
|
|
const showVoluntary = noContentScopeQuestions || allRelevantScopeQuestionsResolvedNo;
|
|
setHidden('legal-other-voluntary-row', !showVoluntary);
|
|
if (!showVoluntary) $('legal-other-voluntary').checked = false;
|
|
|
|
const legalQuestionAnswered = [value('legal-deepfake'), value('legal-public-interest')].some(Boolean);
|
|
setHidden('legal-timing-fields', !deployerScopeRelevant || !legalQuestionAnswered);
|
|
$('output-date').disabled = !deployerScopeRelevant || !legalQuestionAnswered;
|
|
}
|
|
|
|
const publicInterest = value('legal-public-interest') === 'yes';
|
|
const showResponsibility = anyAI && publicInterest && ['no', 'unsure'].includes(value('law-enforcement-authorization')) && substantiveReview(currentTextReview()) && value('use-context') !== 'personalNonProfessional' && value('legal-role') !== 'provider';
|
|
setHidden('responsibility-fields', !showResponsibility);
|
|
$('responsible-role').required = showResponsibility;
|
|
$('responsible').required = showResponsibility;
|
|
|
|
const showAuthor = anyAI && (isArticle || hasAIText());
|
|
setHidden('author-fields', !showAuthor);
|
|
setHidden('author-url-field', !showAuthor || !value('author'));
|
|
|
|
const accountabilityRelevant = anyAI && [value('legal-deepfake'), value('legal-public-interest')].some(v => v === 'yes' || v === 'unsure') && value('law-enforcement-authorization') !== 'yes' && value('use-context') !== 'personalNonProfessional';
|
|
setHidden('complaint-fields', !accountabilityRelevant);
|
|
|
|
renderValidationMessages(locale);
|
|
}
|
|
|
|
function appendMetadataParams(params) {
|
|
if (validValue('subject')) params.set('subject', validValue('subject'));
|
|
if (!$('author-fields')?.hidden && value('author')) {
|
|
params.set('author', value('author'));
|
|
if (validValue('author-url')) params.set('authorUrl', validValue('author-url'));
|
|
}
|
|
if (!$('responsibility-fields')?.hidden && value('responsible-role') && value('responsible')) {
|
|
params.set('responsibleRole', value('responsible-role'));
|
|
params.set('responsible', value('responsible'));
|
|
if (validValue('responsible-url')) params.set('responsibleUrl', validValue('responsible-url'));
|
|
}
|
|
if (!$('complaint-fields')?.hidden && value('complaint-name') && (validValue('complaint-email') || validValue('complaint-url'))) {
|
|
params.set('complaintName', value('complaint-name'));
|
|
if (validValue('complaint-email')) params.set('complaintEmail', validValue('complaint-email'));
|
|
if (validValue('complaint-url')) params.set('complaintUrl', validValue('complaint-url'));
|
|
}
|
|
}
|
|
|
|
function update(applyPreset = false) {
|
|
const isArticle = articleMode();
|
|
const preset = $('preset').value;
|
|
if (!isArticle && applyPreset && presets[preset]) {
|
|
$('extent').value = presets[preset].extent;
|
|
$('activities').value = presets[preset].activities;
|
|
$('review').value = presets[preset].review;
|
|
}
|
|
|
|
const lang = $('lang').value;
|
|
const locale = cfg.locales[lang] || cfg.locales.en;
|
|
syncVisibility(locale);
|
|
|
|
const assurance = $('assurance').value;
|
|
const assuranceDescription = locale.text[`assurance_${assurance}_description`];
|
|
if ($('assurance-description') && assuranceDescription) $('assurance-description').textContent = assuranceDescription;
|
|
|
|
const params = new URLSearchParams();
|
|
if (isArticle) {
|
|
setArticleParams(params);
|
|
} else {
|
|
if (preset) params.set('preset', preset);
|
|
params.set('component', $('component').value);
|
|
params.set('extent', $('extent').value);
|
|
if (extentHasAI($('extent').value) && $('activities').value.trim()) params.set('activities', $('activities').value.trim());
|
|
params.set('review', extentHasAI($('extent').value) ? $('review').value : 'none');
|
|
}
|
|
params.set('lang', lang);
|
|
params.set('assurance', assurance);
|
|
|
|
if (hasAnyAI() && !$('legal-context-builder').hidden) {
|
|
if (value('legal-role')) params.set('legalRole', value('legal-role'));
|
|
if (value('use-context')) params.set('useContext', value('use-context'));
|
|
if (value('output-date')) params.set('outputDate', value('output-date'));
|
|
if (value('legal-deepfake')) params.set('deepfakeAssessment', value('legal-deepfake'));
|
|
if (value('legal-public-interest')) params.set('publicInterestAssessment', value('legal-public-interest'));
|
|
if (value('legal-creative')) params.set('creativeWorkAssessment', value('legal-creative'));
|
|
if (!$('law-enforcement-fields')?.hidden && value('law-enforcement-authorization')) params.set('lawEnforcementAuthorization', value('law-enforcement-authorization'));
|
|
const legal = legalCategories();
|
|
if (legal.length) params.set('legalContext', legal.join(','));
|
|
}
|
|
appendMetadataParams(params);
|
|
|
|
if (cfg.capabilities.custom_text) {
|
|
if (value('custom-title')) params.set('customTitle', value('custom-title'));
|
|
if (value('custom-description')) params.set('customDescription', value('custom-description'));
|
|
}
|
|
if (cfg.capabilities.custom_badge) {
|
|
if (value('badge-label')) params.set('badgeLabel', value('badge-label'));
|
|
if (value('badge-message')) params.set('badgeMessage', value('badge-message'));
|
|
if (value('left-color')) params.set('leftColor', value('left-color'));
|
|
if (value('right-color')) params.set('rightColor', value('right-color'));
|
|
}
|
|
|
|
const declarationURL = `${base}/declaration?${params}`;
|
|
const badgeParams = new URLSearchParams(params);
|
|
badgeParams.set('theme', $('theme').value);
|
|
badgeParams.set('link', declarationURL);
|
|
const badgeURL = `${base}/v1/badge.svg?${badgeParams}`;
|
|
const manifestURL = `${base}/v1/declaration.json?${params}`;
|
|
const assessment = legalAssessment(locale);
|
|
renderAssessment(locale, assessment);
|
|
|
|
const alt = assessment.legal
|
|
? assessment.badge
|
|
: (isArticle
|
|
? (locale.text.badge_article || 'Article transparency')
|
|
: ((locale.presets[preset] && locale.presets[preset].title) || locale.extents[$('extent').value] || 'AI usage disclosure'));
|
|
|
|
$('preview-badge').src = badgeURL;
|
|
$('preview-badge').alt = alt;
|
|
$('preview-link').href = declarationURL;
|
|
const imageMarkup = `<a href="${declarationURL}"><img src="${badgeURL}" alt="${alt}"></a>`;
|
|
$('html-code').value = assessment.legal && $('theme').value === 'emoji'
|
|
? `${imageMarkup} <span>${assessment.badge}</span>`
|
|
: imageMarkup;
|
|
$('markdown-code').value = assessment.legal && $('theme').value === 'emoji'
|
|
? `[](${declarationURL}) **${assessment.badge}**`
|
|
: `[](${declarationURL})`;
|
|
$('json-code').value = manifestURL;
|
|
const bulkLink = $('bulk-template-link');
|
|
if (bulkLink) {
|
|
bulkLink.hidden = !cfg.bulkURL;
|
|
if (cfg.bulkURL) {
|
|
const bulkParams = new URLSearchParams(params);
|
|
bulkParams.delete('subject');
|
|
bulkParams.delete('link');
|
|
const payload = {version: 1, query: bulkParams.toString(), theme: $('theme').value};
|
|
bulkLink.href = `${cfg.bulkURL}/#template=${encodeURIComponent(JSON.stringify(payload))}`;
|
|
}
|
|
}
|
|
}
|
|
|
|
function enforceLegalExclusivity(changedId) {
|
|
if (['legal-deepfake','legal-public-interest'].includes(changedId) && ['yes','unsure'].includes(value(changedId)) && $('legal-other-voluntary')) {
|
|
$('legal-other-voluntary').checked = false;
|
|
}
|
|
}
|
|
|
|
form.addEventListener('input', event => {
|
|
enforceLegalExclusivity(event.target.id);
|
|
update(event.target.id === 'preset');
|
|
});
|
|
form.addEventListener('change', event => {
|
|
enforceLegalExclusivity(event.target.id);
|
|
update(event.target.id === 'preset');
|
|
});
|
|
document.querySelector('.pro-panel')?.addEventListener('input', () => update(false));
|
|
$('copy-html')?.addEventListener('click', async () => {
|
|
await navigator.clipboard.writeText($('html-code').value);
|
|
const locale = cfg.locales[$('lang').value] || cfg.locales.en;
|
|
$('copy-html').textContent = locale.text.copied || 'Copied';
|
|
setTimeout(() => { $('copy-html').textContent = locale.text.copy_html || 'Copy HTML'; }, 1600);
|
|
});
|
|
$('page-language')?.addEventListener('change', event => {
|
|
const url = new URL(window.location.href);
|
|
url.searchParams.set('lang', event.target.value);
|
|
window.location.href = url.toString();
|
|
});
|
|
update(true);
|
|
})();
|