mnoorchenar commited on
Commit
f9edd30
Β·
1 Parent(s): 2c0b974

Update 2026-01-30 20:17:14

Browse files
Files changed (1) hide show
  1. templates/index.html +92 -31
templates/index.html CHANGED
@@ -13,6 +13,7 @@
13
 
14
  body {
15
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
 
16
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
17
  min-height: 100vh;
18
  padding: 20px;
@@ -30,13 +31,13 @@
30
  }
31
 
32
  header h1 {
33
- font-size: 2.5em;
34
  margin-bottom: 10px;
35
  text-shadow: 2px 2px 4px rgba(0,0,0,0.3);
36
  }
37
 
38
  header p {
39
- font-size: 1.1em;
40
  opacity: 0.9;
41
  }
42
 
@@ -57,7 +58,7 @@
57
  .card h2 {
58
  color: #333;
59
  margin-bottom: 20px;
60
- font-size: 1.5em;
61
  border-bottom: 3px solid #667eea;
62
  padding-bottom: 10px;
63
  }
@@ -69,7 +70,7 @@
69
  border: 2px solid #e0e0e0;
70
  border-radius: 8px;
71
  font-family: 'Monaco', 'Courier New', monospace;
72
- font-size: 13px;
73
  resize: vertical;
74
  transition: border-color 0.3s;
75
  }
@@ -110,11 +111,12 @@
110
  color: #333;
111
  display: block;
112
  margin-bottom: 3px;
 
113
  }
114
 
115
  .option-group label span {
116
  color: #666;
117
- font-size: 0.9em;
118
  }
119
 
120
  button {
@@ -123,7 +125,7 @@
123
  padding: 12px 30px;
124
  border: none;
125
  border-radius: 8px;
126
- font-size: 1em;
127
  cursor: pointer;
128
  transition: all 0.3s;
129
  font-weight: 600;
@@ -186,6 +188,7 @@
186
  border-bottom: 3px solid transparent;
187
  cursor: pointer;
188
  font-weight: 600;
 
189
  width: auto;
190
  margin: 0;
191
  transition: all 0.3s;
@@ -208,7 +211,7 @@
208
  width: 100%;
209
  border-collapse: collapse;
210
  margin-top: 15px;
211
- font-size: 0.95em;
212
  }
213
 
214
  .results-table thead {
@@ -237,7 +240,7 @@
237
  display: inline-block;
238
  padding: 4px 12px;
239
  border-radius: 20px;
240
- font-size: 0.85em;
241
  font-weight: 600;
242
  }
243
 
@@ -262,12 +265,38 @@
262
  border-radius: 8px;
263
  margin-top: 15px;
264
  font-family: 'Monaco', 'Courier New', monospace;
265
- font-size: 12px;
266
  white-space: pre-wrap;
267
  word-break: break-word;
268
  border: 1px solid #e0e0e0;
269
  max-height: 400px;
270
  overflow-y: auto;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
271
  }
272
 
273
  .error {
@@ -309,7 +338,7 @@
309
  }
310
 
311
  .stat-box p {
312
- font-size: 0.9em;
313
  opacity: 0.9;
314
  }
315
 
@@ -339,10 +368,11 @@
339
  display: flex;
340
  justify-content: space-between;
341
  align-items: center;
 
342
  }
343
 
344
  .db-entry-card .entry-meta {
345
- font-size: 0.9em;
346
  color: #666;
347
  margin-bottom: 10px;
348
  }
@@ -354,7 +384,7 @@
354
  .delete-btn {
355
  background: #dc3545;
356
  padding: 6px 12px;
357
- font-size: 0.85em;
358
  width: auto;
359
  margin: 0;
360
  }
@@ -397,15 +427,21 @@
397
  display: block;
398
  margin-bottom: 8px;
399
  font-weight: 600;
 
400
  color: #333;
401
  }
402
 
 
 
 
 
403
  .file-upload input[type="file"] {
404
  width: 100%;
405
  padding: 8px;
406
  border: 1px solid #ddd;
407
  border-radius: 4px;
408
  background: white;
 
409
  }
410
 
411
  .section-filter {
@@ -420,7 +456,7 @@
420
  padding: 10px;
421
  border: 2px solid #e0e0e0;
422
  border-radius: 8px;
423
- font-size: 1em;
424
  background: white;
425
  }
426
 
@@ -432,6 +468,7 @@
432
 
433
  .empty-state h3 {
434
  color: #666;
 
435
  margin-bottom: 10px;
436
  }
437
 
@@ -450,6 +487,7 @@
450
  border-radius: 8px;
451
  margin: 15px 0;
452
  display: none;
 
453
  }
454
 
455
  .message.show {
@@ -467,7 +505,11 @@
467
  padding: 12px;
468
  border-radius: 8px;
469
  margin: 10px 0;
470
- font-size: 0.9em;
 
 
 
 
471
  }
472
  </style>
473
  </head>
@@ -538,7 +580,7 @@
538
  </div>
539
 
540
  <div class="option-group">
541
- <input type="checkbox" id="abbreviateCheckbox" checked>
542
  <label for="abbreviateCheckbox">
543
  <strong>πŸ“– Apply Journal Abbreviations</strong>
544
  <span>Use ISO 4 standard abbreviations (e.g., "Energy" β†’ "Ener.")</span>
@@ -546,7 +588,7 @@
546
  </div>
547
 
548
  <div class="option-group">
549
- <input type="checkbox" id="protectCheckbox" checked>
550
  <label for="protectCheckbox">
551
  <strong>πŸ›‘οΈ Protect Acronyms</strong>
552
  <span>Wrap acronyms in braces to preserve capitalization</span>
@@ -588,7 +630,10 @@
588
  </div>
589
 
590
  <div id="bibtex" class="tab-content">
591
- <div id="bibtexPreview" class="bibtex-preview">No results yet</div>
 
 
 
592
  </div>
593
 
594
  <div class="message" id="resultMessage"></div>
@@ -651,9 +696,9 @@
651
  <div id="help" class="tab-content">
652
  <h2>ℹ️ Help & Information</h2>
653
 
654
- <div style="margin-top: 20px;">
655
  <h3 style="color: #333; margin: 20px 0 10px;">Input Modes</h3>
656
- <dl style="margin-left: 20px; line-height: 1.8;">
657
  <dt style="font-weight: 600; margin-top: 10px;">πŸ“ BibTeX Mode</dt>
658
  <dd style="margin-left: 20px; color: #666;">Paste complete BibTeX entries. The system can enrich them with Crossref, apply abbreviations, and protect acronyms.</dd>
659
 
@@ -662,18 +707,18 @@
662
  </dl>
663
 
664
  <h3 style="color: #333; margin: 20px 0 10px;">LaTeX Manuscript Analysis (NEW!)</h3>
665
- <p style="margin-left: 20px; color: #666; line-height: 1.8;">
666
  Upload your LaTeX manuscript (.tex file) to enable advanced tracking:
667
  </p>
668
- <ul style="margin-left: 40px; color: #666; line-height: 1.8;">
669
  <li><strong>Citation Frequency:</strong> How many times each reference is cited</li>
670
  <li><strong>Section Tracking:</strong> Which sections cite each reference</li>
671
  <li><strong>Section Filtering:</strong> View references by specific section (Introduction, Methods, etc.)</li>
672
  </ul>
673
- <p style="margin-left: 20px; color: #666; line-height: 1.8; margin-top: 10px;">
674
  Example LaTeX structure:
675
  </p>
676
- <pre style="margin-left: 40px; background: #f5f5f5; padding: 15px; border-radius: 5px; overflow-x: auto;">
677
  \section{Introduction}
678
  Text here \cite{reference_1} more text \cite{reference_2}
679
  and again \cite{reference_1}
@@ -681,15 +726,15 @@ and again \cite{reference_1}
681
  \section{Methods}
682
  Description \cite{reference_3} and \cite{reference_1}
683
  </pre>
684
- <p style="margin-left: 20px; color: #666; line-height: 1.8;">
685
  Results in: reference_1 appears in Introduction (2Γ—) and Methods (1Γ—)
686
  </p>
687
 
688
  <h3 style="color: #333; margin: 20px 0 10px;">Journal Abbreviations</h3>
689
- <p style="margin-left: 20px; color: #666; line-height: 1.8;">
690
  The system uses <strong>ISO 4 standard abbreviations with periods</strong>:
691
  </p>
692
- <ul style="margin-left: 40px; color: #666; line-height: 1.8;">
693
  <li>"Energy" β†’ "Ener."</li>
694
  <li>"Applied Energy" β†’ "Appl. Ener."</li>
695
  <li>"Journal of Energy" β†’ "J. of Ener."</li>
@@ -887,13 +932,11 @@ Natural language processing techniques`;
887
  tableHtml += '</tbody></table>';
888
  resultsTable.innerHTML = tableHtml;
889
 
 
890
  let bibtexText = '';
891
- const displayFullData = data.full_data.slice(0, previewLimit);
892
  displayFullData.forEach(row => {
893
- const bibField = document.getElementById('protectCheckbox').checked ?
894
- 'Crossref_BibTeX_Protected' :
895
- 'Crossref_BibTeX_Abbrev';
896
- bibtexText += (row[bibField] || row.BibTeX) + '\n\n';
897
  });
898
 
899
  if (hasMore) {
@@ -903,6 +946,24 @@ Natural language processing techniques`;
903
  bibtexPreview.textContent = bibtexText;
904
  }
905
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
906
  async function loadDatabaseEntries() {
907
  try {
908
  const response = await fetch('/api/database/entries');
 
13
 
14
  body {
15
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
16
+ font-size: 15px;
17
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
18
  min-height: 100vh;
19
  padding: 20px;
 
31
  }
32
 
33
  header h1 {
34
+ font-size: 2.8em;
35
  margin-bottom: 10px;
36
  text-shadow: 2px 2px 4px rgba(0,0,0,0.3);
37
  }
38
 
39
  header p {
40
+ font-size: 1.2em;
41
  opacity: 0.9;
42
  }
43
 
 
58
  .card h2 {
59
  color: #333;
60
  margin-bottom: 20px;
61
+ font-size: 1.6em;
62
  border-bottom: 3px solid #667eea;
63
  padding-bottom: 10px;
64
  }
 
70
  border: 2px solid #e0e0e0;
71
  border-radius: 8px;
72
  font-family: 'Monaco', 'Courier New', monospace;
73
+ font-size: 14px;
74
  resize: vertical;
75
  transition: border-color 0.3s;
76
  }
 
111
  color: #333;
112
  display: block;
113
  margin-bottom: 3px;
114
+ font-size: 1em;
115
  }
116
 
117
  .option-group label span {
118
  color: #666;
119
+ font-size: 0.95em;
120
  }
121
 
122
  button {
 
125
  padding: 12px 30px;
126
  border: none;
127
  border-radius: 8px;
128
+ font-size: 1.05em;
129
  cursor: pointer;
130
  transition: all 0.3s;
131
  font-weight: 600;
 
188
  border-bottom: 3px solid transparent;
189
  cursor: pointer;
190
  font-weight: 600;
191
+ font-size: 1em;
192
  width: auto;
193
  margin: 0;
194
  transition: all 0.3s;
 
211
  width: 100%;
212
  border-collapse: collapse;
213
  margin-top: 15px;
214
+ font-size: 0.98em;
215
  }
216
 
217
  .results-table thead {
 
240
  display: inline-block;
241
  padding: 4px 12px;
242
  border-radius: 20px;
243
+ font-size: 0.88em;
244
  font-weight: 600;
245
  }
246
 
 
265
  border-radius: 8px;
266
  margin-top: 15px;
267
  font-family: 'Monaco', 'Courier New', monospace;
268
+ font-size: 13px;
269
  white-space: pre-wrap;
270
  word-break: break-word;
271
  border: 1px solid #e0e0e0;
272
  max-height: 400px;
273
  overflow-y: auto;
274
+ position: relative;
275
+ }
276
+
277
+ .copy-btn {
278
+ position: absolute;
279
+ top: 10px;
280
+ right: 10px;
281
+ background: #28a745;
282
+ color: white;
283
+ border: none;
284
+ padding: 8px 16px;
285
+ border-radius: 5px;
286
+ cursor: pointer;
287
+ font-size: 0.9em;
288
+ font-weight: 600;
289
+ width: auto;
290
+ margin: 0;
291
+ z-index: 10;
292
+ }
293
+
294
+ .copy-btn:hover {
295
+ background: #218838;
296
+ }
297
+
298
+ .copy-btn.copied {
299
+ background: #667eea;
300
  }
301
 
302
  .error {
 
338
  }
339
 
340
  .stat-box p {
341
+ font-size: 0.95em;
342
  opacity: 0.9;
343
  }
344
 
 
368
  display: flex;
369
  justify-content: space-between;
370
  align-items: center;
371
+ font-size: 1.05em;
372
  }
373
 
374
  .db-entry-card .entry-meta {
375
+ font-size: 0.95em;
376
  color: #666;
377
  margin-bottom: 10px;
378
  }
 
384
  .delete-btn {
385
  background: #dc3545;
386
  padding: 6px 12px;
387
+ font-size: 0.88em;
388
  width: auto;
389
  margin: 0;
390
  }
 
427
  display: block;
428
  margin-bottom: 8px;
429
  font-weight: 600;
430
+ font-size: 1em;
431
  color: #333;
432
  }
433
 
434
+ .file-upload p {
435
+ font-size: 0.95em;
436
+ }
437
+
438
  .file-upload input[type="file"] {
439
  width: 100%;
440
  padding: 8px;
441
  border: 1px solid #ddd;
442
  border-radius: 4px;
443
  background: white;
444
+ font-size: 0.95em;
445
  }
446
 
447
  .section-filter {
 
456
  padding: 10px;
457
  border: 2px solid #e0e0e0;
458
  border-radius: 8px;
459
+ font-size: 1.05em;
460
  background: white;
461
  }
462
 
 
468
 
469
  .empty-state h3 {
470
  color: #666;
471
+ font-size: 1.3em;
472
  margin-bottom: 10px;
473
  }
474
 
 
487
  border-radius: 8px;
488
  margin: 15px 0;
489
  display: none;
490
+ font-size: 1em;
491
  }
492
 
493
  .message.show {
 
505
  padding: 12px;
506
  border-radius: 8px;
507
  margin: 10px 0;
508
+ font-size: 0.95em;
509
+ }
510
+
511
+ .mode-selector {
512
+ font-size: 1em;
513
  }
514
  </style>
515
  </head>
 
580
  </div>
581
 
582
  <div class="option-group">
583
+ <input type="checkbox" id="abbreviateCheckbox">
584
  <label for="abbreviateCheckbox">
585
  <strong>πŸ“– Apply Journal Abbreviations</strong>
586
  <span>Use ISO 4 standard abbreviations (e.g., "Energy" β†’ "Ener.")</span>
 
588
  </div>
589
 
590
  <div class="option-group">
591
+ <input type="checkbox" id="protectCheckbox">
592
  <label for="protectCheckbox">
593
  <strong>πŸ›‘οΈ Protect Acronyms</strong>
594
  <span>Wrap acronyms in braces to preserve capitalization</span>
 
630
  </div>
631
 
632
  <div id="bibtex" class="tab-content">
633
+ <div style="position: relative;">
634
+ <button class="copy-btn" onclick="copyBibTeX()" id="copyButton">πŸ“‹ Copy</button>
635
+ <div id="bibtexPreview" class="bibtex-preview">No results yet</div>
636
+ </div>
637
  </div>
638
 
639
  <div class="message" id="resultMessage"></div>
 
696
  <div id="help" class="tab-content">
697
  <h2>ℹ️ Help & Information</h2>
698
 
699
+ <div style="margin-top: 20px; font-size: 1em; line-height: 1.7;">
700
  <h3 style="color: #333; margin: 20px 0 10px;">Input Modes</h3>
701
+ <dl style="margin-left: 20px;">
702
  <dt style="font-weight: 600; margin-top: 10px;">πŸ“ BibTeX Mode</dt>
703
  <dd style="margin-left: 20px; color: #666;">Paste complete BibTeX entries. The system can enrich them with Crossref, apply abbreviations, and protect acronyms.</dd>
704
 
 
707
  </dl>
708
 
709
  <h3 style="color: #333; margin: 20px 0 10px;">LaTeX Manuscript Analysis (NEW!)</h3>
710
+ <p style="margin-left: 20px; color: #666;">
711
  Upload your LaTeX manuscript (.tex file) to enable advanced tracking:
712
  </p>
713
+ <ul style="margin-left: 40px; color: #666;">
714
  <li><strong>Citation Frequency:</strong> How many times each reference is cited</li>
715
  <li><strong>Section Tracking:</strong> Which sections cite each reference</li>
716
  <li><strong>Section Filtering:</strong> View references by specific section (Introduction, Methods, etc.)</li>
717
  </ul>
718
+ <p style="margin-left: 20px; color: #666; margin-top: 10px;">
719
  Example LaTeX structure:
720
  </p>
721
+ <pre style="margin-left: 40px; background: #f5f5f5; padding: 15px; border-radius: 5px; overflow-x: auto; font-size: 0.95em;">
722
  \section{Introduction}
723
  Text here \cite{reference_1} more text \cite{reference_2}
724
  and again \cite{reference_1}
 
726
  \section{Methods}
727
  Description \cite{reference_3} and \cite{reference_1}
728
  </pre>
729
+ <p style="margin-left: 20px; color: #666;">
730
  Results in: reference_1 appears in Introduction (2Γ—) and Methods (1Γ—)
731
  </p>
732
 
733
  <h3 style="color: #333; margin: 20px 0 10px;">Journal Abbreviations</h3>
734
+ <p style="margin-left: 20px; color: #666;">
735
  The system uses <strong>ISO 4 standard abbreviations with periods</strong>:
736
  </p>
737
+ <ul style="margin-left: 40px; color: #666;">
738
  <li>"Energy" β†’ "Ener."</li>
739
  <li>"Applied Energy" β†’ "Appl. Ener."</li>
740
  <li>"Journal of Energy" β†’ "J. of Ener."</li>
 
932
  tableHtml += '</tbody></table>';
933
  resultsTable.innerHTML = tableHtml;
934
 
935
+ // BibTeX preview - use Final_BibTeX from backend (respects abbreviate/protect settings)
936
  let bibtexText = '';
937
+ const displayFullData = data.data.slice(0, previewLimit);
938
  displayFullData.forEach(row => {
939
+ bibtexText += (row.Final_BibTeX || row.BibTeX || '') + '\n\n';
 
 
 
940
  });
941
 
942
  if (hasMore) {
 
946
  bibtexPreview.textContent = bibtexText;
947
  }
948
 
949
+ function copyBibTeX() {
950
+ const bibtexText = document.getElementById('bibtexPreview').textContent;
951
+ const button = document.getElementById('copyButton');
952
+
953
+ navigator.clipboard.writeText(bibtexText).then(() => {
954
+ button.textContent = 'βœ… Copied!';
955
+ button.classList.add('copied');
956
+
957
+ setTimeout(() => {
958
+ button.textContent = 'πŸ“‹ Copy';
959
+ button.classList.remove('copied');
960
+ }, 2000);
961
+ }).catch(err => {
962
+ console.error('Failed to copy:', err);
963
+ alert('Failed to copy to clipboard');
964
+ });
965
+ }
966
+
967
  async function loadDatabaseEntries() {
968
  try {
969
  const response = await fetch('/api/database/entries');