Checkpoint current interactive fiction state

This commit is contained in:
2026-05-14 21:17:43 +02:00
parent c745efd1d2
commit 873049f7e6
183 changed files with 13755 additions and 1459 deletions
+18 -1
View File
@@ -32,6 +32,8 @@ class PersistenceManagerModule extends BaseModule {
tts: {
enabled: false,
preferred_handler: 'none',
speed: 1.0,
language: 'en-us',
voice: '',
'elevenlabs-tts_api_key': '',
'elevenlabs-tts_api_url': 'https://api.elevenlabs.io/v1',
@@ -260,6 +262,11 @@ class PersistenceManagerModule extends BaseModule {
if (!this.preferences[category]) {
this.preferences[category] = {};
}
if (Object.prototype.hasOwnProperty.call(this.preferences[category], setting) &&
Object.is(this.preferences[category][setting], value)) {
return true;
}
// Store value
this.preferences[category][setting] = value;
@@ -612,7 +619,17 @@ class PersistenceManagerModule extends BaseModule {
if (element.dataset.prefTransform) {
try {
// Check if it's a range transformer in format 'range:min,max'
if (element.dataset.prefTransform.startsWith('range:')) {
if (element.dataset.prefTransform === 'centered-speed') {
transformer = {
toElement: (value) => Math.round(((Number(value) || 1) * 50) + 50),
toPreference: (value) => Math.max(0.5, Math.min(2.0, (parseInt(value, 10) - 50) / 50))
};
} else if (element.dataset.prefTransform === 'multiplier-percent') {
transformer = {
toElement: (value) => Math.round((Number(value) || 1) * 100),
toPreference: (value) => Math.max(0.25, Math.min(4.0, parseInt(value, 10) / 100))
};
} else if (element.dataset.prefTransform.startsWith('range:')) {
const rangeValues = element.dataset.prefTransform.substring(6).split(',');
if (rangeValues.length === 2) {
const min = parseFloat(rangeValues[0]);