fix: restore settings gear icon, implement full scale/mode controls, and enable mobile pinch zoom
This commit is contained in:
@ -321,6 +321,12 @@ constructor() {
|
|||||||
rightPriceScale: {
|
rightPriceScale: {
|
||||||
borderColor: COLORS.tvBorder,
|
borderColor: COLORS.tvBorder,
|
||||||
autoScale: true,
|
autoScale: true,
|
||||||
|
mode: 0,
|
||||||
|
// Explicitly enable pinch/scale behavior on the price scale
|
||||||
|
scaleMargins: {
|
||||||
|
top: 0.1,
|
||||||
|
bottom: 0.1,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
timeScale: {
|
timeScale: {
|
||||||
borderColor: COLORS.tvBorder,
|
borderColor: COLORS.tvBorder,
|
||||||
@ -338,7 +344,15 @@ constructor() {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
handleScroll: {
|
handleScroll: {
|
||||||
vertTouchDrag: false,
|
mouseWheel: true,
|
||||||
|
pressedMouseMove: true,
|
||||||
|
horzTouchDrag: true,
|
||||||
|
vertTouchDrag: true, // Enabled to allow chart-internal vertical scrolling
|
||||||
|
},
|
||||||
|
handleScale: {
|
||||||
|
axisPressedMouseMove: true,
|
||||||
|
mouseWheel: true,
|
||||||
|
pinch: true, // This enables pinch-to-zoom on touch devices
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
// Setup price format selector change handler
|
// Setup price format selector change handler
|
||||||
@ -485,10 +499,10 @@ constructor() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
initPriceScaleControls() {
|
initPriceScaleControls() {
|
||||||
// Gear Button Toggle
|
|
||||||
const btnSettings = document.getElementById('btnSettings');
|
const btnSettings = document.getElementById('btnSettings');
|
||||||
const settingsPopup = document.getElementById('settingsPopup');
|
const settingsPopup = document.getElementById('settingsPopup');
|
||||||
|
|
||||||
|
// Settings Popup Toggle and Outside Click
|
||||||
if (btnSettings && settingsPopup) {
|
if (btnSettings && settingsPopup) {
|
||||||
btnSettings.addEventListener('click', (e) => {
|
btnSettings.addEventListener('click', (e) => {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
@ -522,35 +536,41 @@ constructor() {
|
|||||||
updateCheckmark('modeLogCheck', this.scaleState.scaleMode === 1);
|
updateCheckmark('modeLogCheck', this.scaleState.scaleMode === 1);
|
||||||
updateCheckmark('modePercentCheck', this.scaleState.scaleMode === 2);
|
updateCheckmark('modePercentCheck', this.scaleState.scaleMode === 2);
|
||||||
updateCheckmark('modeIndexedCheck', this.scaleState.scaleMode === 3);
|
updateCheckmark('modeIndexedCheck', this.scaleState.scaleMode === 3);
|
||||||
|
|
||||||
|
// Apply state to chart
|
||||||
|
this.candleSeries.priceScale().applyOptions({
|
||||||
|
autoScale: this.scaleState.autoScale,
|
||||||
|
invertScale: this.scaleState.invertScale,
|
||||||
|
mode: this.scaleState.scaleMode
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
// Apply initial state
|
|
||||||
this.candleSeries.priceScale().applyOptions({
|
|
||||||
autoScale: this.scaleState.autoScale,
|
|
||||||
invertScale: this.scaleState.invertScale,
|
|
||||||
mode: this.scaleState.scaleMode
|
|
||||||
});
|
|
||||||
updateUI();
|
updateUI();
|
||||||
|
|
||||||
window.toggleScaleOption = (option) => {
|
window.toggleScaleOption = (option) => {
|
||||||
this.scaleState[option] = !this.scaleState[option];
|
this.scaleState[option] = !this.scaleState[option];
|
||||||
localStorage.setItem(`winterfail_scale_${option}`, this.scaleState[option]);
|
localStorage.setItem(`winterfail_scale_${option}`, this.scaleState[option]);
|
||||||
|
|
||||||
this.candleSeries.priceScale().applyOptions({
|
|
||||||
[option]: this.scaleState[option]
|
|
||||||
});
|
|
||||||
updateUI();
|
updateUI();
|
||||||
};
|
};
|
||||||
|
|
||||||
window.setScaleMode = (mode) => {
|
window.setScaleMode = (mode) => {
|
||||||
this.scaleState.scaleMode = mode;
|
this.scaleState.scaleMode = mode;
|
||||||
localStorage.setItem('winterfail_scale_mode', mode);
|
localStorage.setItem('winterfail_scale_mode', mode);
|
||||||
|
|
||||||
this.candleSeries.priceScale().applyOptions({
|
|
||||||
mode: mode
|
|
||||||
});
|
|
||||||
updateUI();
|
updateUI();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Add keyboard shortcuts
|
||||||
|
document.addEventListener('keydown', (e) => {
|
||||||
|
if (e.target.tagName === 'INPUT' || e.target.tagName === 'BUTTON') return;
|
||||||
|
|
||||||
|
if (e.key.toLowerCase() === 'a') {
|
||||||
|
window.toggleScaleOption('autoScale');
|
||||||
|
} else if (e.key.toLowerCase() === 'l') {
|
||||||
|
// Toggle between Normal (0) and Log (1)
|
||||||
|
const newMode = this.scaleState.scaleMode === 1 ? 0 : 1;
|
||||||
|
window.setScaleMode(newMode);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
initNavigationControls() {
|
initNavigationControls() {
|
||||||
|
|||||||
Reference in New Issue
Block a user