Barry8 commited on
Commit
8f6298a
·
verified ·
1 Parent(s): ab87831

there is no way to select pairs or add pairs and night mode switch doesn't work

Browse files
Files changed (1) hide show
  1. index.html +75 -29
index.html CHANGED
@@ -74,14 +74,16 @@
74
  <button id="darkModeToggle" class="p-2 bg-gray-200 rounded">🌙</button>
75
  </div>
76
  </header>
77
-
78
  <div class="p-4">
79
  <select id="pairSelector" class="w-full p-2 border rounded" multiple="multiple"></select>
80
- <button id="addPairsBtn" class="mt-2 p-2 bg-green-500 text-white rounded">Add Selected Pairs</button>
 
 
 
81
  </div>
82
 
83
  <div id="chartGrid" class="chart-grid"></div>
84
- </div>
85
 
86
  <div id="sidebar" class="p-4">
87
  <button id="closeSidebar" class="float-right">✕</button>
@@ -150,10 +152,10 @@
150
  pairSelector.select2({
151
  placeholder: "Search and select trading pairs",
152
  allowClear: true,
153
- width: '100%'
 
154
  });
155
-
156
- // Initialize color pickers
157
  const candleUpPicker = Pickr.create({
158
  el: '#candleUpColor',
159
  theme: 'classic',
@@ -197,10 +199,27 @@
197
 
198
  // Event listeners
199
  document.getElementById('addPairsBtn').addEventListener('click', addSelectedPairs);
200
- settingsBtn.addEventListener('click', openSidebar);
 
201
  closeSidebar.addEventListener('click', closeSidebar);
202
- darkModeToggle.addEventListener('click', toggleDarkMode);
203
- document.getElementById('saveSettings').addEventListener('click', saveSettings);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
204
  timeframeSelector.addEventListener('change', changeTimeframe);
205
  });
206
 
@@ -245,8 +264,7 @@
245
  })
246
  .catch(error => console.error('Error fetching pairs:', error));
247
  }
248
-
249
- function addSelectedPairs() {
250
  const selectedPairs = pairSelector.val();
251
  if (!selectedPairs) return;
252
 
@@ -257,9 +275,43 @@
257
  createChart(pair);
258
  }
259
  });
 
 
 
 
 
260
  }
261
 
262
- function subscribeToPair(pair) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
263
  if (ws && ws.readyState === WebSocket.OPEN) {
264
  const timeframe = timeframeSelector.value;
265
  const subscription = {
@@ -452,25 +504,19 @@
452
  sidebar.style.width = '0';
453
  document.getElementById('main').style.marginRight = '0';
454
  }
455
-
456
- function toggleDarkMode() {
457
- document.body.classList.toggle('dark-mode');
458
- // Update all charts
459
- Object.keys(charts).forEach(pair => {
460
- charts[pair].chart.applyOptions({
461
- layout: {
462
- backgroundColor: document.body.classList.contains('dark-mode') ? '#2d3748' : '#ffffff',
463
- textColor: document.body.classList.contains('dark-mode') ? '#ffffff' : '#333333'
464
- },
465
- grid: {
466
- vertLines: { color: document.body.classList.contains('dark-mode') ? '#4a5568' : '#eee' },
467
- horzLines: { color: document.body.classList.contains('dark-mode') ? '#4a5568' : '#eee' }
468
- }
469
- });
470
  });
471
  }
472
-
473
- function saveSettings() {
474
  const settings = {
475
  showPrice: document.getElementById('showPrice').checked,
476
  showVolume: document.getElementById('showVolume').checked,
 
74
  <button id="darkModeToggle" class="p-2 bg-gray-200 rounded">🌙</button>
75
  </div>
76
  </header>
 
77
  <div class="p-4">
78
  <select id="pairSelector" class="w-full p-2 border rounded" multiple="multiple"></select>
79
+ <div class="flex space-x-2 mt-2">
80
+ <button id="addPairsBtn" class="flex-1 p-2 bg-green-500 text-white rounded">Add Selected Pairs</button>
81
+ <button id="clearPairsBtn" class="flex-1 p-2 bg-red-500 text-white rounded">Clear All</button>
82
+ </div>
83
  </div>
84
 
85
  <div id="chartGrid" class="chart-grid"></div>
86
+ </div>
87
 
88
  <div id="sidebar" class="p-4">
89
  <button id="closeSidebar" class="float-right">✕</button>
 
152
  pairSelector.select2({
153
  placeholder: "Search and select trading pairs",
154
  allowClear: true,
155
+ width: '100%',
156
+ closeOnSelect: false
157
  });
158
+ // Initialize color pickers
 
159
  const candleUpPicker = Pickr.create({
160
  el: '#candleUpColor',
161
  theme: 'classic',
 
199
 
200
  // Event listeners
201
  document.getElementById('addPairsBtn').addEventListener('click', addSelectedPairs);
202
+ document.getElementById('clearPairsBtn').addEventListener('click', clearAllPairs);
203
+ settingsBtn.addEventListener('click', openSidebar);
204
  closeSidebar.addEventListener('click', closeSidebar);
205
+ darkModeToggle.addEventListener('click', function() {
206
+ document.body.classList.toggle('dark-mode');
207
+ const isDarkMode = document.body.classList.contains('dark-mode');
208
+
209
+ // Update button text
210
+ darkModeToggle.textContent = isDarkMode ? '☀️' : '🌙';
211
+
212
+ // Update all charts
213
+ Object.keys(charts).forEach(pair => {
214
+ updateChartTheme(pair, isDarkMode);
215
+ });
216
+
217
+ // Save dark mode state
218
+ const settings = JSON.parse(localStorage.getItem('binanceDashboardSettings') || '{}');
219
+ settings.darkMode = isDarkMode;
220
+ localStorage.setItem('binanceDashboardSettings', JSON.stringify(settings));
221
+ });
222
+ document.getElementById('saveSettings').addEventListener('click', saveSettings);
223
  timeframeSelector.addEventListener('change', changeTimeframe);
224
  });
225
 
 
264
  })
265
  .catch(error => console.error('Error fetching pairs:', error));
266
  }
267
+ function addSelectedPairs() {
 
268
  const selectedPairs = pairSelector.val();
269
  if (!selectedPairs) return;
270
 
 
275
  createChart(pair);
276
  }
277
  });
278
+
279
+ // Save selected pairs
280
+ const settings = JSON.parse(localStorage.getItem('binanceDashboardSettings') || '{}');
281
+ settings.selectedPairs = Array.from(subscribedPairs);
282
+ localStorage.setItem('binanceDashboardSettings', JSON.stringify(settings));
283
  }
284
 
285
+ function clearAllPairs() {
286
+ subscribedPairs.forEach(pair => {
287
+ if (ws && ws.readyState === WebSocket.OPEN) {
288
+ const unsubscribe = {
289
+ method: "UNSUBSCRIBE",
290
+ params: [
291
+ `${pair.toLowerCase()}@kline_${timeframeSelector.value}`,
292
+ `${pair.toLowerCase()}@markPrice@1s`,
293
+ `${pair.toLowerCase()}@bookTicker`
294
+ ],
295
+ id: Date.now()
296
+ };
297
+ ws.send(JSON.stringify(unsubscribe));
298
+ }
299
+
300
+ const chartElement = document.getElementById(`chart-${pair}`);
301
+ if (chartElement) {
302
+ chartElement.remove();
303
+ }
304
+ });
305
+
306
+ subscribedPairs.clear();
307
+ Object.keys(charts).forEach(pair => delete charts[pair]);
308
+
309
+ // Clear saved pairs
310
+ const settings = JSON.parse(localStorage.getItem('binanceDashboardSettings') || '{}');
311
+ settings.selectedPairs = [];
312
+ localStorage.setItem('binanceDashboardSettings', JSON.stringify(settings));
313
+ }
314
+ function subscribeToPair(pair) {
315
  if (ws && ws.readyState === WebSocket.OPEN) {
316
  const timeframe = timeframeSelector.value;
317
  const subscription = {
 
504
  sidebar.style.width = '0';
505
  document.getElementById('main').style.marginRight = '0';
506
  }
507
+ function updateChartTheme(pair, isDarkMode) {
508
+ charts[pair].chart.applyOptions({
509
+ layout: {
510
+ backgroundColor: isDarkMode ? '#2d3748' : '#ffffff',
511
+ textColor: isDarkMode ? '#ffffff' : '#333333'
512
+ },
513
+ grid: {
514
+ vertLines: { color: isDarkMode ? '#4a5568' : '#eee' },
515
+ horzLines: { color: isDarkMode ? '#4a5568' : '#eee' }
516
+ }
 
 
 
 
 
517
  });
518
  }
519
+ function saveSettings() {
 
520
  const settings = {
521
  showPrice: document.getElementById('showPrice').checked,
522
  showVolume: document.getElementById('showVolume').checked,