init geek calc
Some checks failed
Deploy to GitHub Pages / build-and-deploy (push) Has been cancelled
Some checks failed
Deploy to GitHub Pages / build-and-deploy (push) Has been cancelled
This commit is contained in:
117
state.js
Normal file
117
state.js
Normal file
@@ -0,0 +1,117 @@
|
||||
// State management module
|
||||
const StateManager = (function() {
|
||||
class StateManager {
|
||||
constructor() {
|
||||
this.history = [];
|
||||
this.settings = {
|
||||
theme: 'dark',
|
||||
mode: 'standard', // 'standard' or 'rpn'
|
||||
historyLimit: 50
|
||||
};
|
||||
this.loadFromStorage();
|
||||
}
|
||||
|
||||
// Add a calculation to history
|
||||
addToHistory(expression, result) {
|
||||
const entry = {
|
||||
id: Date.now().toString(),
|
||||
expression: expression,
|
||||
result: result,
|
||||
timestamp: new Date()
|
||||
};
|
||||
|
||||
this.history.unshift(entry); // Add to beginning of array
|
||||
|
||||
// Limit history size
|
||||
if (this.history.length > this.settings.historyLimit) {
|
||||
this.history = this.history.slice(0, this.settings.historyLimit);
|
||||
}
|
||||
|
||||
this.saveToStorage();
|
||||
}
|
||||
|
||||
// Get calculation history
|
||||
getHistory() {
|
||||
return [...this.history]; // Return a copy to prevent external modification
|
||||
}
|
||||
|
||||
// Get settings
|
||||
getSettings() {
|
||||
return { ...this.settings }; // Return a copy
|
||||
}
|
||||
|
||||
// Update settings
|
||||
updateSettings(newSettings) {
|
||||
this.settings = { ...this.settings, ...newSettings };
|
||||
this.saveToStorage();
|
||||
}
|
||||
|
||||
// Toggle calculator mode (standard/RPN)
|
||||
toggleMode() {
|
||||
this.settings.mode = this.settings.mode === 'standard' ? 'rpn' : 'standard';
|
||||
this.saveToStorage();
|
||||
return this.settings.mode;
|
||||
}
|
||||
|
||||
// Get current mode
|
||||
getMode() {
|
||||
return this.settings.mode;
|
||||
}
|
||||
|
||||
// Clear history
|
||||
clearHistory() {
|
||||
this.history = [];
|
||||
this.saveToStorage();
|
||||
}
|
||||
|
||||
// Save state to localStorage
|
||||
saveToStorage() {
|
||||
try {
|
||||
const stateData = {
|
||||
history: this.history,
|
||||
settings: this.settings
|
||||
};
|
||||
localStorage.setItem('geekCalculatorState', JSON.stringify(stateData));
|
||||
} catch (error) {
|
||||
console.error('Failed to save state to localStorage:', error);
|
||||
}
|
||||
}
|
||||
|
||||
// Load state from localStorage
|
||||
loadFromStorage() {
|
||||
try {
|
||||
const stateData = localStorage.getItem('geekCalculatorState');
|
||||
if (stateData) {
|
||||
const parsedData = JSON.parse(stateData);
|
||||
this.history = Array.isArray(parsedData.history) ? parsedData.history : [];
|
||||
this.settings = parsedData.settings || this.settings;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Failed to load state from localStorage:', error);
|
||||
// If loading fails, keep default state
|
||||
}
|
||||
}
|
||||
|
||||
// Get the last calculation result
|
||||
getLastResult() {
|
||||
if (this.history.length > 0) {
|
||||
return this.history[0].result; // First item is the most recent
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// Re-run a specific calculation from history
|
||||
rerunCalculation(id) {
|
||||
const entry = this.history.find(item => item.id === id);
|
||||
if (entry) {
|
||||
return {
|
||||
expression: entry.expression,
|
||||
result: entry.result
|
||||
};
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
return { StateManager };
|
||||
})();
|
||||
Reference in New Issue
Block a user