613 lines
18 KiB
JavaScript
613 lines
18 KiB
JavaScript
|
|
/* ui-quiz-bank-builtins-domains.js — Built-in quiz domain template generation */
|
||
|
|
(function () {
|
||
|
|
"use strict";
|
||
|
|
|
||
|
|
function appendBuiltInQuestionBankDomains(context) {
|
||
|
|
const {
|
||
|
|
bank,
|
||
|
|
helpers,
|
||
|
|
englishLetters,
|
||
|
|
hebrewLetters,
|
||
|
|
hebrewById,
|
||
|
|
signs,
|
||
|
|
planets,
|
||
|
|
planetsById,
|
||
|
|
treePaths,
|
||
|
|
sephirotById,
|
||
|
|
flattenDecans,
|
||
|
|
cubeWalls,
|
||
|
|
cubeEdges,
|
||
|
|
cubeCenter,
|
||
|
|
playingCards,
|
||
|
|
pools
|
||
|
|
} = context || {};
|
||
|
|
|
||
|
|
const {
|
||
|
|
createQuestionTemplate,
|
||
|
|
normalizeId,
|
||
|
|
normalizeOption,
|
||
|
|
toTitleCase,
|
||
|
|
formatHebrewLetterLabel,
|
||
|
|
getPlanetLabelById,
|
||
|
|
getSephiraName,
|
||
|
|
formatPathLetter,
|
||
|
|
formatDecanLabel,
|
||
|
|
labelFromId
|
||
|
|
} = helpers || {};
|
||
|
|
|
||
|
|
if (!Array.isArray(bank) || typeof createQuestionTemplate !== "function") {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
const {
|
||
|
|
englishGematriaPool,
|
||
|
|
hebrewNumerologyPool,
|
||
|
|
hebrewNameAndCharPool,
|
||
|
|
hebrewCharPool,
|
||
|
|
planetNamePool,
|
||
|
|
planetWeekdayPool,
|
||
|
|
zodiacElementPool,
|
||
|
|
zodiacTarotPool,
|
||
|
|
pathNumberPool,
|
||
|
|
pathLetterPool,
|
||
|
|
pathTarotPool,
|
||
|
|
sephirotPlanetPool,
|
||
|
|
decanLabelPool,
|
||
|
|
decanRulerPool,
|
||
|
|
cubeLocationPool,
|
||
|
|
cubeHebrewLetterPool,
|
||
|
|
playingTarotPool
|
||
|
|
} = pools || {};
|
||
|
|
|
||
|
|
(englishLetters || []).forEach((entry) => {
|
||
|
|
if (!entry?.letter || !Number.isFinite(Number(entry?.pythagorean))) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
const template = createQuestionTemplate(
|
||
|
|
{
|
||
|
|
key: `english-gematria:${entry.letter}`,
|
||
|
|
categoryId: "english-gematria",
|
||
|
|
category: "English Gematria",
|
||
|
|
promptByDifficulty: `${entry.letter} has a simple gematria value of`,
|
||
|
|
answerByDifficulty: String(entry.pythagorean)
|
||
|
|
},
|
||
|
|
englishGematriaPool
|
||
|
|
);
|
||
|
|
|
||
|
|
if (template) {
|
||
|
|
bank.push(template);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
(hebrewLetters || []).forEach((entry) => {
|
||
|
|
if (!entry?.name || !entry?.char || !Number.isFinite(Number(entry?.numerology))) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
const template = createQuestionTemplate(
|
||
|
|
{
|
||
|
|
key: `hebrew-number:${entry.hebrewLetterId || entry.name}`,
|
||
|
|
categoryId: "hebrew-numerology",
|
||
|
|
category: "Hebrew Gematria",
|
||
|
|
promptByDifficulty: {
|
||
|
|
easy: `${entry.name} (${entry.char}) has a gematria value of`,
|
||
|
|
normal: `${entry.name} (${entry.char}) has a gematria value of`,
|
||
|
|
hard: `${entry.char} has a gematria value of`
|
||
|
|
},
|
||
|
|
answerByDifficulty: String(entry.numerology)
|
||
|
|
},
|
||
|
|
hebrewNumerologyPool
|
||
|
|
);
|
||
|
|
|
||
|
|
if (template) {
|
||
|
|
bank.push(template);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
(englishLetters || []).forEach((entry) => {
|
||
|
|
if (!entry?.letter || !entry?.hebrewLetterId) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
const mappedHebrew = hebrewById.get(normalizeId(entry.hebrewLetterId));
|
||
|
|
if (!mappedHebrew?.name || !mappedHebrew?.char) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
const template = createQuestionTemplate(
|
||
|
|
{
|
||
|
|
key: `english-hebrew:${entry.letter}`,
|
||
|
|
categoryId: "english-hebrew-mapping",
|
||
|
|
category: "Alphabet Mapping",
|
||
|
|
promptByDifficulty: {
|
||
|
|
easy: `${entry.letter} maps to which Hebrew letter`,
|
||
|
|
normal: `${entry.letter} maps to which Hebrew letter`,
|
||
|
|
hard: `${entry.letter} maps to which Hebrew glyph`
|
||
|
|
},
|
||
|
|
answerByDifficulty: {
|
||
|
|
easy: `${mappedHebrew.name} (${mappedHebrew.char})`,
|
||
|
|
normal: `${mappedHebrew.name} (${mappedHebrew.char})`,
|
||
|
|
hard: mappedHebrew.char
|
||
|
|
}
|
||
|
|
},
|
||
|
|
{
|
||
|
|
easy: hebrewNameAndCharPool,
|
||
|
|
normal: hebrewNameAndCharPool,
|
||
|
|
hard: hebrewCharPool
|
||
|
|
}
|
||
|
|
);
|
||
|
|
|
||
|
|
if (template) {
|
||
|
|
bank.push(template);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
(signs || []).forEach((entry) => {
|
||
|
|
if (!entry?.name || !entry?.rulingPlanetId) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
const rulerName = planetsById[normalizeId(entry.rulingPlanetId)]?.name;
|
||
|
|
if (!rulerName) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
const template = createQuestionTemplate(
|
||
|
|
{
|
||
|
|
key: `zodiac-ruler:${entry.id || entry.name}`,
|
||
|
|
categoryId: "zodiac-rulers",
|
||
|
|
category: "Zodiac Rulers",
|
||
|
|
promptByDifficulty: `${entry.name} is ruled by`,
|
||
|
|
answerByDifficulty: rulerName
|
||
|
|
},
|
||
|
|
planetNamePool
|
||
|
|
);
|
||
|
|
|
||
|
|
if (template) {
|
||
|
|
bank.push(template);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
(signs || []).forEach((entry) => {
|
||
|
|
if (!entry?.name || !entry?.element) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
const template = createQuestionTemplate(
|
||
|
|
{
|
||
|
|
key: `zodiac-element:${entry.id || entry.name}`,
|
||
|
|
categoryId: "zodiac-elements",
|
||
|
|
category: "Zodiac Elements",
|
||
|
|
promptByDifficulty: `${entry.name} is`,
|
||
|
|
answerByDifficulty: toTitleCase(entry.element)
|
||
|
|
},
|
||
|
|
zodiacElementPool
|
||
|
|
);
|
||
|
|
|
||
|
|
if (template) {
|
||
|
|
bank.push(template);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
(planets || []).forEach((entry) => {
|
||
|
|
if (!entry?.name || !entry?.weekday) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
const template = createQuestionTemplate(
|
||
|
|
{
|
||
|
|
key: `planet-weekday:${entry.id || entry.name}`,
|
||
|
|
categoryId: "planetary-weekdays",
|
||
|
|
category: "Planetary Weekdays",
|
||
|
|
promptByDifficulty: `${entry.name} corresponds to`,
|
||
|
|
answerByDifficulty: entry.weekday
|
||
|
|
},
|
||
|
|
planetWeekdayPool
|
||
|
|
);
|
||
|
|
|
||
|
|
if (template) {
|
||
|
|
bank.push(template);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
(signs || []).forEach((entry) => {
|
||
|
|
if (!entry?.name || !entry?.tarot?.majorArcana) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
const template = createQuestionTemplate(
|
||
|
|
{
|
||
|
|
key: `zodiac-tarot:${entry.id || entry.name}`,
|
||
|
|
categoryId: "zodiac-tarot",
|
||
|
|
category: "Zodiac ↔ Tarot",
|
||
|
|
promptByDifficulty: `${entry.name} corresponds to`,
|
||
|
|
answerByDifficulty: entry.tarot.majorArcana
|
||
|
|
},
|
||
|
|
zodiacTarotPool
|
||
|
|
);
|
||
|
|
|
||
|
|
if (template) {
|
||
|
|
bank.push(template);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
(treePaths || []).forEach((path) => {
|
||
|
|
const pathNo = Number(path?.pathNumber);
|
||
|
|
if (!Number.isFinite(pathNo)) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
const pathNumberLabel = String(Math.trunc(pathNo));
|
||
|
|
const fromNo = Number(path?.connects?.from);
|
||
|
|
const toNo = Number(path?.connects?.to);
|
||
|
|
const fromName = getSephiraName(fromNo, path?.connectIds?.from);
|
||
|
|
const toName = getSephiraName(toNo, path?.connectIds?.to);
|
||
|
|
const pathLetter = formatPathLetter(path);
|
||
|
|
const tarotCard = normalizeOption(path?.tarot?.card);
|
||
|
|
|
||
|
|
if (fromName && toName) {
|
||
|
|
const template = createQuestionTemplate(
|
||
|
|
{
|
||
|
|
key: `kabbalah-path-between:${pathNumberLabel}`,
|
||
|
|
categoryId: "kabbalah-path-between-sephirot",
|
||
|
|
category: "Kabbalah Paths",
|
||
|
|
promptByDifficulty: {
|
||
|
|
easy: `Which path is between ${fromName} and ${toName}`,
|
||
|
|
normal: `What path connects ${fromName} and ${toName}`,
|
||
|
|
hard: `${fromName} ↔ ${toName} is which path`
|
||
|
|
},
|
||
|
|
answerByDifficulty: pathNumberLabel
|
||
|
|
},
|
||
|
|
pathNumberPool
|
||
|
|
);
|
||
|
|
|
||
|
|
if (template) {
|
||
|
|
bank.push(template);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (pathLetter) {
|
||
|
|
const numberToLetterTemplate = createQuestionTemplate(
|
||
|
|
{
|
||
|
|
key: `kabbalah-path-letter:${pathNumberLabel}`,
|
||
|
|
categoryId: "kabbalah-path-letter",
|
||
|
|
category: "Kabbalah Paths",
|
||
|
|
promptByDifficulty: {
|
||
|
|
easy: `Which letter is on Path ${pathNumberLabel}`,
|
||
|
|
normal: `Path ${pathNumberLabel} carries which Hebrew letter`,
|
||
|
|
hard: `Letter on Path ${pathNumberLabel}`
|
||
|
|
},
|
||
|
|
answerByDifficulty: pathLetter
|
||
|
|
},
|
||
|
|
pathLetterPool
|
||
|
|
);
|
||
|
|
|
||
|
|
if (numberToLetterTemplate) {
|
||
|
|
bank.push(numberToLetterTemplate);
|
||
|
|
}
|
||
|
|
|
||
|
|
const letterToNumberTemplate = createQuestionTemplate(
|
||
|
|
{
|
||
|
|
key: `kabbalah-letter-path-number:${pathNumberLabel}`,
|
||
|
|
categoryId: "kabbalah-path-letter",
|
||
|
|
category: "Kabbalah Paths",
|
||
|
|
promptByDifficulty: {
|
||
|
|
easy: `${pathLetter} belongs to which path`,
|
||
|
|
normal: `${pathLetter} corresponds to Path`,
|
||
|
|
hard: `${pathLetter} is on Path`
|
||
|
|
},
|
||
|
|
answerByDifficulty: pathNumberLabel
|
||
|
|
},
|
||
|
|
pathNumberPool
|
||
|
|
);
|
||
|
|
|
||
|
|
if (letterToNumberTemplate) {
|
||
|
|
bank.push(letterToNumberTemplate);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (tarotCard) {
|
||
|
|
const pathToTarotTemplate = createQuestionTemplate(
|
||
|
|
{
|
||
|
|
key: `kabbalah-path-tarot:${pathNumberLabel}`,
|
||
|
|
categoryId: "kabbalah-path-tarot",
|
||
|
|
category: "Kabbalah ↔ Tarot",
|
||
|
|
promptByDifficulty: {
|
||
|
|
easy: `Path ${pathNumberLabel} corresponds to which Tarot trump`,
|
||
|
|
normal: `Which Tarot trump is on Path ${pathNumberLabel}`,
|
||
|
|
hard: `Tarot trump on Path ${pathNumberLabel}`
|
||
|
|
},
|
||
|
|
answerByDifficulty: tarotCard
|
||
|
|
},
|
||
|
|
pathTarotPool
|
||
|
|
);
|
||
|
|
|
||
|
|
if (pathToTarotTemplate) {
|
||
|
|
bank.push(pathToTarotTemplate);
|
||
|
|
}
|
||
|
|
|
||
|
|
const tarotToPathTemplate = createQuestionTemplate(
|
||
|
|
{
|
||
|
|
key: `tarot-trump-path:${pathNumberLabel}`,
|
||
|
|
categoryId: "kabbalah-path-tarot",
|
||
|
|
category: "Tarot ↔ Kabbalah",
|
||
|
|
promptByDifficulty: {
|
||
|
|
easy: `${tarotCard} is on which path`,
|
||
|
|
normal: `Which path corresponds to ${tarotCard}`,
|
||
|
|
hard: `${tarotCard} corresponds to Path`
|
||
|
|
},
|
||
|
|
answerByDifficulty: pathNumberLabel
|
||
|
|
},
|
||
|
|
pathNumberPool
|
||
|
|
);
|
||
|
|
|
||
|
|
if (tarotToPathTemplate) {
|
||
|
|
bank.push(tarotToPathTemplate);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
Object.values(sephirotById || {}).forEach((sephira) => {
|
||
|
|
const sephiraName = String(sephira?.name?.roman || sephira?.name?.en || "").trim();
|
||
|
|
const planetLabel = getPlanetLabelById(sephira?.planetId);
|
||
|
|
if (!sephiraName || !planetLabel) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
const template = createQuestionTemplate(
|
||
|
|
{
|
||
|
|
key: `sephirot-planet:${normalizeId(sephira?.id || sephiraName)}`,
|
||
|
|
categoryId: "sephirot-planets",
|
||
|
|
category: "Sephirot ↔ Planet",
|
||
|
|
promptByDifficulty: {
|
||
|
|
easy: `${sephiraName} corresponds to which planet`,
|
||
|
|
normal: `Planetary correspondence of ${sephiraName}`,
|
||
|
|
hard: `${sephiraName} corresponds to`
|
||
|
|
},
|
||
|
|
answerByDifficulty: planetLabel
|
||
|
|
},
|
||
|
|
sephirotPlanetPool
|
||
|
|
);
|
||
|
|
|
||
|
|
if (template) {
|
||
|
|
bank.push(template);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
(flattenDecans || []).forEach((decan) => {
|
||
|
|
const decanId = String(decan?.id || "").trim();
|
||
|
|
const card = normalizeOption(decan?.tarotMinorArcana);
|
||
|
|
const decanLabel = formatDecanLabel(decan);
|
||
|
|
const rulerLabel = getPlanetLabelById(decan?.rulerPlanetId);
|
||
|
|
|
||
|
|
if (!decanId || !card) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (decanLabel) {
|
||
|
|
const template = createQuestionTemplate(
|
||
|
|
{
|
||
|
|
key: `tarot-decan-sign:${decanId}`,
|
||
|
|
categoryId: "tarot-decan-sign",
|
||
|
|
category: "Tarot Decans",
|
||
|
|
promptByDifficulty: {
|
||
|
|
easy: `${card} belongs to which decan`,
|
||
|
|
normal: `Which decan contains ${card}`,
|
||
|
|
hard: `${card} is in`
|
||
|
|
},
|
||
|
|
answerByDifficulty: decanLabel
|
||
|
|
},
|
||
|
|
decanLabelPool
|
||
|
|
);
|
||
|
|
|
||
|
|
if (template) {
|
||
|
|
bank.push(template);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (rulerLabel) {
|
||
|
|
const template = createQuestionTemplate(
|
||
|
|
{
|
||
|
|
key: `tarot-decan-ruler:${decanId}`,
|
||
|
|
categoryId: "tarot-decan-ruler",
|
||
|
|
category: "Tarot Decans",
|
||
|
|
promptByDifficulty: {
|
||
|
|
easy: `The decan of ${card} is ruled by`,
|
||
|
|
normal: `Who rules the decan for ${card}`,
|
||
|
|
hard: `${card} decan ruler`
|
||
|
|
},
|
||
|
|
answerByDifficulty: rulerLabel
|
||
|
|
},
|
||
|
|
decanRulerPool
|
||
|
|
);
|
||
|
|
|
||
|
|
if (template) {
|
||
|
|
bank.push(template);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
(cubeWalls || []).forEach((wall) => {
|
||
|
|
const wallName = String(wall?.name || labelFromId(wall?.id)).trim();
|
||
|
|
const wallLabel = wallName ? `${wallName} Wall` : "";
|
||
|
|
const tarotCard = normalizeOption(wall?.associations?.tarotCard);
|
||
|
|
const hebrew = hebrewById.get(normalizeId(wall?.hebrewLetterId));
|
||
|
|
const hebrewLabel = formatHebrewLetterLabel(hebrew, wall?.hebrewLetterId);
|
||
|
|
|
||
|
|
if (tarotCard && wallLabel) {
|
||
|
|
const template = createQuestionTemplate(
|
||
|
|
{
|
||
|
|
key: `tarot-cube-wall:${normalizeId(wall?.id || wallName)}`,
|
||
|
|
categoryId: "tarot-cube-location",
|
||
|
|
category: "Tarot ↔ Cube",
|
||
|
|
promptByDifficulty: {
|
||
|
|
easy: `${tarotCard} is on which Cube wall`,
|
||
|
|
normal: `Where is ${tarotCard} on the Cube`,
|
||
|
|
hard: `${tarotCard} location on Cube`
|
||
|
|
},
|
||
|
|
answerByDifficulty: wallLabel
|
||
|
|
},
|
||
|
|
cubeLocationPool
|
||
|
|
);
|
||
|
|
|
||
|
|
if (template) {
|
||
|
|
bank.push(template);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (wallLabel && hebrewLabel) {
|
||
|
|
const template = createQuestionTemplate(
|
||
|
|
{
|
||
|
|
key: `cube-wall-letter:${normalizeId(wall?.id || wallName)}`,
|
||
|
|
categoryId: "cube-hebrew-letter",
|
||
|
|
category: "Cube ↔ Hebrew",
|
||
|
|
promptByDifficulty: {
|
||
|
|
easy: `${wallLabel} corresponds to which Hebrew letter`,
|
||
|
|
normal: `Which Hebrew letter is on ${wallLabel}`,
|
||
|
|
hard: `${wallLabel} letter`
|
||
|
|
},
|
||
|
|
answerByDifficulty: hebrewLabel
|
||
|
|
},
|
||
|
|
cubeHebrewLetterPool
|
||
|
|
);
|
||
|
|
|
||
|
|
if (template) {
|
||
|
|
bank.push(template);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
(cubeEdges || []).forEach((edge) => {
|
||
|
|
const edgeName = String(edge?.name || labelFromId(edge?.id)).trim();
|
||
|
|
const edgeLabel = edgeName ? `${edgeName} Edge` : "";
|
||
|
|
const hebrew = hebrewById.get(normalizeId(edge?.hebrewLetterId));
|
||
|
|
const hebrewLabel = formatHebrewLetterLabel(hebrew, edge?.hebrewLetterId);
|
||
|
|
const tarotCard = normalizeOption(hebrew?.tarot?.card);
|
||
|
|
|
||
|
|
if (tarotCard && edgeLabel) {
|
||
|
|
const template = createQuestionTemplate(
|
||
|
|
{
|
||
|
|
key: `tarot-cube-edge:${normalizeId(edge?.id || edgeName)}`,
|
||
|
|
categoryId: "tarot-cube-location",
|
||
|
|
category: "Tarot ↔ Cube",
|
||
|
|
promptByDifficulty: {
|
||
|
|
easy: `${tarotCard} is on which Cube edge`,
|
||
|
|
normal: `Where is ${tarotCard} on the Cube edges`,
|
||
|
|
hard: `${tarotCard} edge location`
|
||
|
|
},
|
||
|
|
answerByDifficulty: edgeLabel
|
||
|
|
},
|
||
|
|
cubeLocationPool
|
||
|
|
);
|
||
|
|
|
||
|
|
if (template) {
|
||
|
|
bank.push(template);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (edgeLabel && hebrewLabel) {
|
||
|
|
const template = createQuestionTemplate(
|
||
|
|
{
|
||
|
|
key: `cube-edge-letter:${normalizeId(edge?.id || edgeName)}`,
|
||
|
|
categoryId: "cube-hebrew-letter",
|
||
|
|
category: "Cube ↔ Hebrew",
|
||
|
|
promptByDifficulty: {
|
||
|
|
easy: `${edgeLabel} corresponds to which Hebrew letter`,
|
||
|
|
normal: `Which Hebrew letter is on ${edgeLabel}`,
|
||
|
|
hard: `${edgeLabel} letter`
|
||
|
|
},
|
||
|
|
answerByDifficulty: hebrewLabel
|
||
|
|
},
|
||
|
|
cubeHebrewLetterPool
|
||
|
|
);
|
||
|
|
|
||
|
|
if (template) {
|
||
|
|
bank.push(template);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
if (cubeCenter) {
|
||
|
|
const centerTarot = normalizeOption(cubeCenter?.associations?.tarotCard || cubeCenter?.tarotCard);
|
||
|
|
const centerHebrew = hebrewById.get(normalizeId(cubeCenter?.hebrewLetterId));
|
||
|
|
const centerHebrewLabel = formatHebrewLetterLabel(centerHebrew, cubeCenter?.hebrewLetterId);
|
||
|
|
|
||
|
|
if (centerTarot) {
|
||
|
|
const template = createQuestionTemplate(
|
||
|
|
{
|
||
|
|
key: "tarot-cube-center",
|
||
|
|
categoryId: "tarot-cube-location",
|
||
|
|
category: "Tarot ↔ Cube",
|
||
|
|
promptByDifficulty: {
|
||
|
|
easy: `${centerTarot} is located at which Cube position`,
|
||
|
|
normal: `Where is ${centerTarot} on the Cube`,
|
||
|
|
hard: `${centerTarot} Cube location`
|
||
|
|
},
|
||
|
|
answerByDifficulty: "Center"
|
||
|
|
},
|
||
|
|
cubeLocationPool
|
||
|
|
);
|
||
|
|
|
||
|
|
if (template) {
|
||
|
|
bank.push(template);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (centerHebrewLabel) {
|
||
|
|
const template = createQuestionTemplate(
|
||
|
|
{
|
||
|
|
key: "cube-center-letter",
|
||
|
|
categoryId: "cube-hebrew-letter",
|
||
|
|
category: "Cube ↔ Hebrew",
|
||
|
|
promptByDifficulty: {
|
||
|
|
easy: "The Cube center corresponds to which Hebrew letter",
|
||
|
|
normal: "Which Hebrew letter is at the Cube center",
|
||
|
|
hard: "Cube center letter"
|
||
|
|
},
|
||
|
|
answerByDifficulty: centerHebrewLabel
|
||
|
|
},
|
||
|
|
cubeHebrewLetterPool
|
||
|
|
);
|
||
|
|
|
||
|
|
if (template) {
|
||
|
|
bank.push(template);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
(playingCards || []).forEach((entry) => {
|
||
|
|
const cardId = String(entry?.id || "").trim();
|
||
|
|
const rankLabel = normalizeOption(entry?.rankLabel || entry?.rank);
|
||
|
|
const suitLabel = normalizeOption(entry?.suitLabel || labelFromId(entry?.suit));
|
||
|
|
const tarotCard = normalizeOption(entry?.tarotCard);
|
||
|
|
|
||
|
|
if (!cardId || !rankLabel || !suitLabel || !tarotCard) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
const template = createQuestionTemplate(
|
||
|
|
{
|
||
|
|
key: `playing-card-tarot:${cardId}`,
|
||
|
|
categoryId: "playing-card-tarot",
|
||
|
|
category: "Playing Card ↔ Tarot",
|
||
|
|
promptByDifficulty: {
|
||
|
|
easy: `${rankLabel} of ${suitLabel} maps to which Tarot card`,
|
||
|
|
normal: `${rankLabel} of ${suitLabel} corresponds to`,
|
||
|
|
hard: `${rankLabel} of ${suitLabel} maps to`
|
||
|
|
},
|
||
|
|
answerByDifficulty: tarotCard
|
||
|
|
},
|
||
|
|
playingTarotPool
|
||
|
|
);
|
||
|
|
|
||
|
|
if (template) {
|
||
|
|
bank.push(template);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
window.QuizQuestionBankBuiltInDomains = {
|
||
|
|
appendBuiltInQuestionBankDomains
|
||
|
|
};
|
||
|
|
})();
|