feat: added support for adding plurality to ingredients
This commit is contained in:
parent
750bfb912f
commit
8855d6ba19
9 changed files with 468 additions and 8 deletions
|
|
@ -152,6 +152,42 @@
|
|||
return null;
|
||||
}
|
||||
|
||||
// ─── Noun Plurality ─────────────────────────────────────
|
||||
|
||||
function getScaledCountValue(scalableRaw, scaleFactor) {
|
||||
if (!scalableRaw) return null;
|
||||
try {
|
||||
var data = JSON.parse(scalableRaw);
|
||||
if (data.type !== 'count') return null;
|
||||
var baseVal = data.base;
|
||||
if (Array.isArray(baseVal)) return baseVal[1] * scaleFactor;
|
||||
return baseVal * scaleFactor;
|
||||
} catch (e) { return null; }
|
||||
}
|
||||
|
||||
function updateNoun(span, countValue) {
|
||||
if (span.getAttribute('data-has-noun') !== 'true') return;
|
||||
var nounSpan = span.previousElementSibling;
|
||||
// Walk back past whitespace text nodes
|
||||
if (!nounSpan || !nounSpan.classList || !nounSpan.classList.contains('count-noun')) {
|
||||
// Try the sibling before the space text node
|
||||
var prev = span.previousSibling;
|
||||
while (prev && prev.nodeType === 3) prev = prev.previousSibling;
|
||||
if (prev && prev.classList && prev.classList.contains('count-noun')) nounSpan = prev;
|
||||
else return;
|
||||
}
|
||||
var singular = nounSpan.getAttribute('data-singular');
|
||||
var plural = nounSpan.getAttribute('data-plural');
|
||||
if (!singular || !plural) return;
|
||||
var form = countValue === 1 ? singular : plural;
|
||||
// Preserve casing from current text
|
||||
var current = nounSpan.textContent;
|
||||
if (current && current[0] === current[0].toUpperCase() && current[0] !== current[0].toLowerCase()) {
|
||||
form = form[0].toUpperCase() + form.slice(1);
|
||||
}
|
||||
nounSpan.textContent = form;
|
||||
}
|
||||
|
||||
// ─── Update All Measurements ────────────────────────────
|
||||
|
||||
function updateAll() {
|
||||
|
|
@ -191,7 +227,15 @@
|
|||
try {
|
||||
var data = JSON.parse(scalableRaw);
|
||||
var text = computeScaledText(data, scale, imperial);
|
||||
if (text) { span.textContent = text; return; }
|
||||
if (text) {
|
||||
span.textContent = text;
|
||||
// Update adjacent noun span for count measurements
|
||||
if (type === 'count') {
|
||||
var countVal = getScaledCountValue(scalableRaw, scale);
|
||||
if (countVal !== null) updateNoun(span, countVal);
|
||||
}
|
||||
return;
|
||||
}
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
|
|
@ -200,6 +244,12 @@
|
|||
? span.getAttribute(altAttr)
|
||||
: span.getAttribute(defaultAttr);
|
||||
if (text) span.textContent = text;
|
||||
|
||||
// At 1x scale, restore noun to build-time form
|
||||
if (type === 'count') {
|
||||
var countVal = getScaledCountValue(span.getAttribute('data-scalable'), scale);
|
||||
if (countVal !== null) updateNoun(span, countVal);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue