Rodrigo1421 commited on
Commit
4cfad8a
·
verified ·
1 Parent(s): b27bdcc

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +43 -41
index.html CHANGED
@@ -14,15 +14,15 @@
14
  <div class="nav-container">
15
  <div class="nav-brand">
16
  <span class="brand-title">⚡ CV Curve Fitting Pro</span>
17
- <span class="brand-subtitle">JAX Diffusion &amp; DOS Optimizer (100% Free CPU)</span>
18
  </div>
19
  <div class="nav-links">
20
- <div class="engine-badge-btn" id="engine-status-badge" title="Click to view backend connection guide">
21
  <span class="status-dot probing" id="engine-dot"></span>
22
  <span class="engine-text" id="engine-label">Probing JAX Engine...</span>
23
  </div>
24
  <a href="#solver" id="nav-solver-btn" class="active">Solver</a>
25
- <a href="#documentation" id="nav-doc-btn">Documentation</a>
26
  </div>
27
  </div>
28
  </nav>
@@ -37,18 +37,18 @@
37
  <h2>Optimization Configuration</h2>
38
  </header>
39
  <div class="panel-body">
40
- <form id="cv-form">
41
  <!-- File Upload & Drag-and-Drop Area -->
42
- <div class="form-group file-upload-wrapper" id="drop-zone">
43
- <label>Upload Cyclic Voltammetry File (.csv)</label>
44
- <div class="file-upload-custom">
45
- <label for="csv-file" class="btn-secondary" id="choose-file-btn">📁 Choose CSV File</label>
46
  <span class="drag-hint">or drag and drop file here</span>
47
  </div>
48
- <div class="file-name-row">
49
  <span id="file-name-display">No file chosen</span>
50
  </div>
51
- <input type="file" id="csv-file" name="file" accept=".csv,.txt" class="hidden-file-input">
52
  </div>
53
 
54
  <!-- Data Mapping & Column Selector -->
@@ -57,29 +57,29 @@
57
  <div class="cycle-preset-container" id="cycle-preset-container">
58
  <div class="preset-row">
59
  <span class="preset-cycle-tag">Cycle 1:</span>
60
- <button type="button" class="preset-pill-btn" data-pot="0" data-cur="1" data-skip="5">Raw (0, 1)</button>
61
- <button type="button" class="preset-pill-btn" data-pot="2" data-cur="3" data-skip="1">Adjusted (2, 3)</button>
62
  </div>
63
  <div class="preset-row">
64
  <span class="preset-cycle-tag">Cycle 2:</span>
65
- <button type="button" class="preset-pill-btn" data-pot="4" data-cur="5" data-skip="5">Raw (4, 5)</button>
66
- <button type="button" class="preset-pill-btn" data-pot="6" data-cur="7" data-skip="1">Adjusted (6, 7)</button>
67
  </div>
68
  <div class="preset-row">
69
  <span class="preset-cycle-tag">Cycle 3:</span>
70
- <button type="button" class="preset-pill-btn active" data-pot="8" data-cur="9" data-skip="5">Raw (8, 9)</button>
71
- <button type="button" class="preset-pill-btn" data-pot="10" data-cur="11" data-skip="1">Adjusted (10, 11)</button>
72
  </div>
73
  <div class="preset-row">
74
  <span class="preset-cycle-tag">Cycle 4:</span>
75
- <button type="button" class="preset-pill-btn" data-pot="12" data-cur="13" data-skip="5">Raw (12, 13)</button>
76
- <button type="button" class="preset-pill-btn" data-pot="14" data-cur="15" data-skip="1">Adjusted (14, 15)</button>
77
  </div>
78
  </div>
79
  <div class="input-grid">
80
  <div class="form-group">
81
  <label for="pot_col">Potential (V) Column</label>
82
- <select id="pot_col" name="pot_col" class="engine-dropdown" required>
83
  <option value="8">Col 8: Cycle 3 Potential (V) [Raw]</option>
84
  <option value="10">Col 10: Cycle 3 Potential (V) [Adjusted]</option>
85
  <option value="0">Col 0: Cycle 1 Potential (V) [Raw]</option>
@@ -92,7 +92,7 @@
92
  </div>
93
  <div class="form-group">
94
  <label for="cur_col">Current (A) Column</label>
95
- <select id="cur_col" name="cur_col" class="engine-dropdown" required>
96
  <option value="9">Col 9: Cycle 3 Current (A) [Raw]</option>
97
  <option value="11">Col 11: Cycle 3 Current (A) [Adjusted]</option>
98
  <option value="1">Col 1: Cycle 1 Current (A) [Raw]</option>
@@ -135,7 +135,7 @@
135
  <input type="number" id="v_max" name="v_max" step="0.05" value="1.0" required>
136
  </div>
137
  <div class="form-group">
138
- <label for="skip_factor" title="Downsample factor for faster JAX execution on free CPU">Downsample Factor</label>
139
  <input type="number" id="skip_factor" name="skip_factor" min="1" max="50" value="5" required>
140
  </div>
141
  <div class="form-group">
@@ -147,7 +147,7 @@
147
 
148
  <!-- Advanced Optimization Settings -->
149
  <div class="advanced-section">
150
- <button type="button" class="advanced-toggle" id="advanced-toggle" aria-expanded="false">
151
  <span>Advanced Solver Settings</span>
152
  <span class="toggle-icon" id="toggle-icon">▼</span>
153
  </button>
@@ -185,14 +185,14 @@
185
  <label for="backend-url-input">Server API / WebSocket URL</label>
186
  <div class="input-action-row">
187
  <input type="text" id="backend-url-input" placeholder="Auto-detected origin or Hugging Face Space URL" style="flex: 1; padding: 8px 12px; border: 1px solid var(--color-border); border-radius: 6px; font-family: monospace; font-size: 0.85rem;">
188
- <button type="button" id="backend-save-btn" class="btn-secondary" style="padding: 8px 16px;">Connect</button>
189
  </div>
190
  <div class="preset-links-row" style="margin-top: 6px; display: flex; gap: 8px; font-size: 0.8rem;">
191
- <button type="button" class="btn-text-link" id="preset-origin-btn">⚡ Use Current Host</button>
192
  <span>&bull;</span>
193
- <button type="button" class="btn-text-link" id="preset-hf-btn">☁️ Use HF Cloud Space</button>
194
  <span>&bull;</span>
195
- <button type="button" class="btn-text-link" id="preset-local-btn">💻 Use Localhost</button>
196
  </div>
197
  </div>
198
  </fieldset>
@@ -204,11 +204,11 @@
204
  <legend>Solver Architecture</legend>
205
  <div class="form-group">
206
  <div class="engine-badge-row">
207
- <span class="badge-tag-online">🐍 100% Free Python JAX + SciPy Engine</span>
208
  </div>
209
  <div class="engine-help-row" style="margin-top: 8px;">
210
  <span class="engine-status-msg" id="engine-status-msg">Probing Python solver engine...</span>
211
- <button type="button" class="btn-text-link" id="backend-help-link">Deployment &amp; Setup Guide</button>
212
  </div>
213
  </div>
214
  </fieldset>
@@ -243,8 +243,8 @@
243
  <header class="panel-header results-header-row">
244
  <h2>Extracted Physical Parameters</h2>
245
  <div class="export-actions">
246
- <button type="button" class="btn-export" id="export-json-btn">Export JSON</button>
247
- <button type="button" class="btn-export" id="export-csv-btn">Export Curves CSV</button>
248
  </div>
249
  </header>
250
  <div class="panel-body">
@@ -283,7 +283,7 @@
283
  <div class="modal-content">
284
  <div class="modal-header">
285
  <h2 id="doc-title">Physical Model &amp; Theory Documentation</h2>
286
- <button type="button" class="modal-close" id="doc-close-btn" aria-label="Close modal">&times;</button>
287
  </div>
288
  <div class="modal-body">
289
  <section class="doc-section">
@@ -329,7 +329,7 @@
329
  </section>
330
  </div>
331
  <div class="modal-footer">
332
- <button type="button" class="btn-primary modal-ok-btn" id="doc-ok-btn">Close Documentation</button>
333
  </div>
334
  </div>
335
  </div>
@@ -338,17 +338,17 @@
338
  <div class="modal-backdrop hidden" id="backend-modal" role="dialog" aria-modal="true" aria-labelledby="backend-modal-title">
339
  <div class="modal-card">
340
  <div class="modal-header">
341
- <h2 id="backend-modal-title">⚡ 100% Free Python JAX Solver Guide</h2>
342
- <button type="button" class="modal-close-btn" id="backend-close-btn" aria-label="Close modal">&times;</button>
343
  </div>
344
  <div class="modal-body">
345
  <section class="doc-section">
346
- <h3>Free Hugging Face Spaces Cloud Deployment ($0/month)</h3>
347
- <p>To let any user run the JAX solver from their browser without installing anything:</p>
348
  <ol style="margin-left: 1.25rem; font-size: 0.9rem; line-height: 1.6;">
349
  <li>Go to <a href="https://huggingface.co/new-space" target="_blank" style="color: var(--color-accent); text-decoration: underline;"><strong>huggingface.co/new-space</strong></a>.</li>
350
- <li>Name your Space (e.g. <code>cv-curve-fitter</code>) and choose <strong>Gradio</strong> or <strong>Docker</strong> SDK.</li>
351
- <li>Choose <strong>Hardware: CPU basic (2 vCPU, 16 GB RAM) - 100% Free</strong>.</li>
352
  <li>Push this repository to Hugging Face. Your web app will build and go live immediately!</li>
353
  </ol>
354
  </section>
@@ -363,7 +363,7 @@
363
  </section>
364
  </div>
365
  <div class="modal-footer">
366
- <button type="button" class="btn-primary modal-ok-btn" id="backend-ok-btn">Got It</button>
367
  </div>
368
  </div>
369
  </div>
@@ -371,10 +371,12 @@
371
  <!-- Footer -->
372
  <footer class="site-footer">
373
  <div class="footer-container">
374
- <p>&copy; 2026 CV Curve Fitting Pro &bull; Physics-Based Electrochemical Optimizer &bull; 100% Free JAX CPU Engine</p>
375
  </div>
376
  </footer>
377
 
 
 
378
  <script src="app.js"></script>
379
  </body>
380
- </html>
 
14
  <div class="nav-container">
15
  <div class="nav-brand">
16
  <span class="brand-title">⚡ CV Curve Fitting Pro</span>
17
+ <span class="brand-subtitle">JAX Diffusion &amp; DOS Optimizer (Free ZeroGPU &bull; NVIDIA A100)</span>
18
  </div>
19
  <div class="nav-links">
20
+ <div class="engine-badge-btn" id="engine-status-badge" onclick="window.toggleModal && window.toggleModal('backend-modal', true);" title="Click to view backend connection guide">
21
  <span class="status-dot probing" id="engine-dot"></span>
22
  <span class="engine-text" id="engine-label">Probing JAX Engine...</span>
23
  </div>
24
  <a href="#solver" id="nav-solver-btn" class="active">Solver</a>
25
+ <a href="#documentation" id="nav-doc-btn" onclick="window.toggleModal && window.toggleModal('doc-modal', true);">Documentation</a>
26
  </div>
27
  </div>
28
  </nav>
 
37
  <h2>Optimization Configuration</h2>
38
  </header>
39
  <div class="panel-body">
40
+ <form id="cv-form" onsubmit="window.handleFormSubmit && window.handleFormSubmit(event);">
41
  <!-- File Upload & Drag-and-Drop Area -->
42
+ <div class="form-group file-upload-wrapper" id="drop-zone" onclick="document.getElementById('csv-file') && document.getElementById('csv-file').click();" ondragover="event.preventDefault(); event.stopPropagation(); this.classList.add('dragover');" ondragleave="event.preventDefault(); event.stopPropagation(); this.classList.remove('dragover');" ondrop="event.preventDefault(); event.stopPropagation(); this.classList.remove('dragover'); window.handleCSVDrop && window.handleCSVDrop(event);" style="cursor: pointer;">
43
+ <label style="pointer-events: none;">Upload Cyclic Voltammetry File (.csv)</label>
44
+ <div class="file-upload-custom" style="pointer-events: none;">
45
+ <span class="btn-secondary" id="choose-file-btn">📁 Choose CSV File</span>
46
  <span class="drag-hint">or drag and drop file here</span>
47
  </div>
48
+ <div class="file-name-row" style="pointer-events: none;">
49
  <span id="file-name-display">No file chosen</span>
50
  </div>
51
+ <input type="file" id="csv-file" name="file" accept=".csv,.txt" class="hidden-file-input" onchange="window.handleCSVFileChange && window.handleCSVFileChange(this);" onclick="event.stopPropagation();">
52
  </div>
53
 
54
  <!-- Data Mapping & Column Selector -->
 
57
  <div class="cycle-preset-container" id="cycle-preset-container">
58
  <div class="preset-row">
59
  <span class="preset-cycle-tag">Cycle 1:</span>
60
+ <button type="button" class="preset-pill-btn" data-pot="0" data-cur="1" data-skip="5" onclick="window.applyCyclePreset && window.applyCyclePreset(0, 1, 5, this);">Raw (0, 1)</button>
61
+ <button type="button" class="preset-pill-btn" data-pot="2" data-cur="3" data-skip="1" onclick="window.applyCyclePreset && window.applyCyclePreset(2, 3, 1, this);">Adjusted (2, 3)</button>
62
  </div>
63
  <div class="preset-row">
64
  <span class="preset-cycle-tag">Cycle 2:</span>
65
+ <button type="button" class="preset-pill-btn" data-pot="4" data-cur="5" data-skip="5" onclick="window.applyCyclePreset && window.applyCyclePreset(4, 5, 5, this);">Raw (4, 5)</button>
66
+ <button type="button" class="preset-pill-btn" data-pot="6" data-cur="7" data-skip="1" onclick="window.applyCyclePreset && window.applyCyclePreset(6, 7, 1, this);">Adjusted (6, 7)</button>
67
  </div>
68
  <div class="preset-row">
69
  <span class="preset-cycle-tag">Cycle 3:</span>
70
+ <button type="button" class="preset-pill-btn active" data-pot="8" data-cur="9" data-skip="5" onclick="window.applyCyclePreset && window.applyCyclePreset(8, 9, 5, this);">Raw (8, 9)</button>
71
+ <button type="button" class="preset-pill-btn" data-pot="10" data-cur="11" data-skip="1" onclick="window.applyCyclePreset && window.applyCyclePreset(10, 11, 1, this);">Adjusted (10, 11)</button>
72
  </div>
73
  <div class="preset-row">
74
  <span class="preset-cycle-tag">Cycle 4:</span>
75
+ <button type="button" class="preset-pill-btn" data-pot="12" data-cur="13" data-skip="5" onclick="window.applyCyclePreset && window.applyCyclePreset(12, 13, 5, this);">Raw (12, 13)</button>
76
+ <button type="button" class="preset-pill-btn" data-pot="14" data-cur="15" data-skip="1" onclick="window.applyCyclePreset && window.applyCyclePreset(14, 15, 1, this);">Adjusted (14, 15)</button>
77
  </div>
78
  </div>
79
  <div class="input-grid">
80
  <div class="form-group">
81
  <label for="pot_col">Potential (V) Column</label>
82
+ <select id="pot_col" name="pot_col" class="engine-dropdown" onchange="window.updateLivePreviewFromColumns && window.updateLivePreviewFromColumns();" required>
83
  <option value="8">Col 8: Cycle 3 Potential (V) [Raw]</option>
84
  <option value="10">Col 10: Cycle 3 Potential (V) [Adjusted]</option>
85
  <option value="0">Col 0: Cycle 1 Potential (V) [Raw]</option>
 
92
  </div>
93
  <div class="form-group">
94
  <label for="cur_col">Current (A) Column</label>
95
+ <select id="cur_col" name="cur_col" class="engine-dropdown" onchange="window.updateLivePreviewFromColumns && window.updateLivePreviewFromColumns();" required>
96
  <option value="9">Col 9: Cycle 3 Current (A) [Raw]</option>
97
  <option value="11">Col 11: Cycle 3 Current (A) [Adjusted]</option>
98
  <option value="1">Col 1: Cycle 1 Current (A) [Raw]</option>
 
135
  <input type="number" id="v_max" name="v_max" step="0.05" value="1.0" required>
136
  </div>
137
  <div class="form-group">
138
+ <label for="skip_factor" title="Downsample factor for faster execution">Downsample Factor</label>
139
  <input type="number" id="skip_factor" name="skip_factor" min="1" max="50" value="5" required>
140
  </div>
141
  <div class="form-group">
 
147
 
148
  <!-- Advanced Optimization Settings -->
149
  <div class="advanced-section">
150
+ <button type="button" class="advanced-toggle" id="advanced-toggle" onclick="window.toggleAdvanced && window.toggleAdvanced();" aria-expanded="false">
151
  <span>Advanced Solver Settings</span>
152
  <span class="toggle-icon" id="toggle-icon">▼</span>
153
  </button>
 
185
  <label for="backend-url-input">Server API / WebSocket URL</label>
186
  <div class="input-action-row">
187
  <input type="text" id="backend-url-input" placeholder="Auto-detected origin or Hugging Face Space URL" style="flex: 1; padding: 8px 12px; border: 1px solid var(--color-border); border-radius: 6px; font-family: monospace; font-size: 0.85rem;">
188
+ <button type="button" id="backend-save-btn" onclick="window.saveBackendUrl && window.saveBackendUrl();" class="btn-secondary" style="padding: 8px 16px;">Connect</button>
189
  </div>
190
  <div class="preset-links-row" style="margin-top: 6px; display: flex; gap: 8px; font-size: 0.8rem;">
191
+ <button type="button" class="btn-text-link" id="preset-origin-btn" onclick="window.setBackendPreset && window.setBackendPreset('origin');">⚡ Use Current Host</button>
192
  <span>&bull;</span>
193
+ <button type="button" class="btn-text-link" id="preset-hf-btn" onclick="window.setBackendPreset && window.setBackendPreset('hf');">☁️ Use HF Cloud Space</button>
194
  <span>&bull;</span>
195
+ <button type="button" class="btn-text-link" id="preset-local-btn" onclick="window.setBackendPreset && window.setBackendPreset('local');">💻 Use Localhost</button>
196
  </div>
197
  </div>
198
  </fieldset>
 
204
  <legend>Solver Architecture</legend>
205
  <div class="form-group">
206
  <div class="engine-badge-row">
207
+ <span class="badge-tag-online"> 100% Free Python JAX Engine (ZeroGPU &bull; NVIDIA A100)</span>
208
  </div>
209
  <div class="engine-help-row" style="margin-top: 8px;">
210
  <span class="engine-status-msg" id="engine-status-msg">Probing Python solver engine...</span>
211
+ <button type="button" class="btn-text-link" id="backend-help-link" onclick="window.toggleModal && window.toggleModal('backend-modal', true);">Deployment &amp; Setup Guide</button>
212
  </div>
213
  </div>
214
  </fieldset>
 
243
  <header class="panel-header results-header-row">
244
  <h2>Extracted Physical Parameters</h2>
245
  <div class="export-actions">
246
+ <button type="button" class="btn-export" id="export-json-btn" onclick="window.exportResultsJson && window.exportResultsJson();">Export JSON</button>
247
+ <button type="button" class="btn-export" id="export-csv-btn" onclick="window.exportResultsCsv && window.exportResultsCsv();">Export Curves CSV</button>
248
  </div>
249
  </header>
250
  <div class="panel-body">
 
283
  <div class="modal-content">
284
  <div class="modal-header">
285
  <h2 id="doc-title">Physical Model &amp; Theory Documentation</h2>
286
+ <button type="button" class="modal-close" id="doc-close-btn" onclick="window.toggleModal && window.toggleModal('doc-modal', false);" aria-label="Close modal">&times;</button>
287
  </div>
288
  <div class="modal-body">
289
  <section class="doc-section">
 
329
  </section>
330
  </div>
331
  <div class="modal-footer">
332
+ <button type="button" class="btn-primary modal-ok-btn" id="doc-ok-btn" onclick="window.toggleModal && window.toggleModal('doc-modal', false);">Close Documentation</button>
333
  </div>
334
  </div>
335
  </div>
 
338
  <div class="modal-backdrop hidden" id="backend-modal" role="dialog" aria-modal="true" aria-labelledby="backend-modal-title">
339
  <div class="modal-card">
340
  <div class="modal-header">
341
+ <h2 id="backend-modal-title">⚡ 100% Free Python JAX ZeroGPU Guide</h2>
342
+ <button type="button" class="modal-close-btn" id="backend-close-btn" onclick="window.toggleModal && window.toggleModal('backend-modal', false);" aria-label="Close modal">&times;</button>
343
  </div>
344
  <div class="modal-body">
345
  <section class="doc-section">
346
+ <h3>Free Hugging Face Spaces Cloud Deployment (ZeroGPU - $0/month)</h3>
347
+ <p>To let any user run the JAX solver from their browser with 100% free NVIDIA A100/H100 acceleration:</p>
348
  <ol style="margin-left: 1.25rem; font-size: 0.9rem; line-height: 1.6;">
349
  <li>Go to <a href="https://huggingface.co/new-space" target="_blank" style="color: var(--color-accent); text-decoration: underline;"><strong>huggingface.co/new-space</strong></a>.</li>
350
+ <li>Name your Space (e.g. <code>cv-curve-fitting</code>) and choose <strong>Space SDK: Gradio</strong>.</li>
351
+ <li>Choose <strong>Hardware: ZeroGPU (NVIDIA A100 &bull; 100% Free)</strong>.</li>
352
  <li>Push this repository to Hugging Face. Your web app will build and go live immediately!</li>
353
  </ol>
354
  </section>
 
363
  </section>
364
  </div>
365
  <div class="modal-footer">
366
+ <button type="button" class="btn-primary modal-ok-btn" id="backend-ok-btn" onclick="window.toggleModal && window.toggleModal('backend-modal', false);">Got It</button>
367
  </div>
368
  </div>
369
  </div>
 
371
  <!-- Footer -->
372
  <footer class="site-footer">
373
  <div class="footer-container">
374
+ <p>&copy; 2026 CV Curve Fitting Pro &bull; Physics-Based Electrochemical Optimizer &bull; 100% Free ZeroGPU Engine</p>
375
  </div>
376
  </footer>
377
 
378
+ <!-- Bootstrap Trigger to ensure JS runs regardless of iframe or innerHTML injection -->
379
+ <img src="data:image/svg+xml;utf8,<svg/>" style="display:none" onload="window.__initCVApp && window.__initCVApp();" onerror="window.__initCVApp && window.__initCVApp();" />
380
  <script src="app.js"></script>
381
  </body>
382
+ </html>