vomebook commited on
Commit
cf8cb87
·
1 Parent(s): 6f58d7d

Upload 2 files

Browse files
Files changed (2) hide show
  1. static/app.js +12 -9
  2. static/style.css +56 -34
static/app.js CHANGED
@@ -39,12 +39,14 @@ const STATE = {
39
 
40
  const DOM = {};
41
  const HISTORY_KEY = "vomebook_search_history";
 
42
  function themeIcon(isDark) {
43
  const shape = isDark
44
  ? '<path d="M20 15.5A8 8 0 1 1 8.5 4 6.5 6.5 0 0 0 20 15.5Z"/>'
45
  : '<circle cx="12" cy="12" r="4"/><path d="M12 2v2m0 16v2M4.93 4.93l1.42 1.42m11.3 11.3 1.42 1.42M2 12h2m16 0h2M4.93 19.07l1.42-1.42m11.3-11.3 1.42-1.42"/>';
46
  return `<svg class="theme-icon-svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">${shape}</svg>`;
47
  }
 
48
  const ICON_HTML = {
49
  source: '<span class="ui-icon ui-icon-stack" aria-hidden="true"></span>',
50
  folder: '<span class="ui-icon ui-icon-folder" aria-hidden="true"></span>',
@@ -1051,7 +1053,8 @@ function updateSidebarVisibility() {
1051
  DOM.rightSidebar.classList.toggle("collapsed", !STATE.rightSidebarOpen);
1052
  DOM.leftSidebar.classList.toggle("open", STATE.leftSidebarOpen);
1053
  DOM.rightSidebar.classList.toggle("open", STATE.rightSidebarOpen);
1054
- DOM.overlay.style.display = (STATE.isMobile && (STATE.leftSidebarOpen || STATE.rightSidebarOpen)) ? "" : "none";
 
1055
  }
1056
 
1057
  function clearFilters() {
@@ -1457,12 +1460,6 @@ async function init() {
1457
  STATE.previewDocId = previewDocId;
1458
  syncUrl(false);
1459
  }
1460
- STATE.sources = await API.getSources();
1461
- STATE.sourceMap = Object.fromEntries(STATE.sources.map((source) => [source.slug, source]));
1462
- await renderSourcesFilter();
1463
- await renderSidebar();
1464
- await renderFolderTree();
1465
- updateFilterVisibility();
1466
  attachEvents();
1467
  if (DOM.searchPathsToggle) {
1468
  DOM.searchPathsToggle.checked = STATE.searchPaths;
@@ -1470,7 +1467,13 @@ async function init() {
1470
  updateSidebarVisibility();
1471
  syncUrl();
1472
  restorePreviewFromUrl({ scroll: false });
1473
- doSearch();
 
 
 
 
 
 
 
1474
  }
1475
-
1476
  document.addEventListener("DOMContentLoaded", init);
 
39
 
40
  const DOM = {};
41
  const HISTORY_KEY = "vomebook_search_history";
42
+
43
  function themeIcon(isDark) {
44
  const shape = isDark
45
  ? '<path d="M20 15.5A8 8 0 1 1 8.5 4 6.5 6.5 0 0 0 20 15.5Z"/>'
46
  : '<circle cx="12" cy="12" r="4"/><path d="M12 2v2m0 16v2M4.93 4.93l1.42 1.42m11.3 11.3 1.42 1.42M2 12h2m16 0h2M4.93 19.07l1.42-1.42m11.3-11.3 1.42-1.42"/>';
47
  return `<svg class="theme-icon-svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">${shape}</svg>`;
48
  }
49
+
50
  const ICON_HTML = {
51
  source: '<span class="ui-icon ui-icon-stack" aria-hidden="true"></span>',
52
  folder: '<span class="ui-icon ui-icon-folder" aria-hidden="true"></span>',
 
1053
  DOM.rightSidebar.classList.toggle("collapsed", !STATE.rightSidebarOpen);
1054
  DOM.leftSidebar.classList.toggle("open", STATE.leftSidebarOpen);
1055
  DOM.rightSidebar.classList.toggle("open", STATE.rightSidebarOpen);
1056
+ DOM.overlay.style.display = "";
1057
+ DOM.overlay.classList.toggle("open", STATE.isMobile && (STATE.leftSidebarOpen || STATE.rightSidebarOpen));
1058
  }
1059
 
1060
  function clearFilters() {
 
1460
  STATE.previewDocId = previewDocId;
1461
  syncUrl(false);
1462
  }
 
 
 
 
 
 
1463
  attachEvents();
1464
  if (DOM.searchPathsToggle) {
1465
  DOM.searchPathsToggle.checked = STATE.searchPaths;
 
1467
  updateSidebarVisibility();
1468
  syncUrl();
1469
  restorePreviewFromUrl({ scroll: false });
1470
+ const initialSearch = doSearch();
1471
+ STATE.sources = await API.getSources();
1472
+ STATE.sourceMap = Object.fromEntries(STATE.sources.map((source) => [source.slug, source]));
1473
+ await renderSourcesFilter();
1474
+ await renderSidebar();
1475
+ await renderFolderTree();
1476
+ updateFilterVisibility();
1477
+ await initialSearch;
1478
  }
 
1479
  document.addEventListener("DOMContentLoaded", init);
static/style.css CHANGED
@@ -1720,6 +1720,14 @@ body.mobile .mobile-selected-count {
1720
  inset: 0;
1721
  background: rgba(0, 0, 0, 0.5);
1722
  z-index: 90;
 
 
 
 
 
 
 
 
1723
  }
1724
 
1725
  .toast {
@@ -1749,34 +1757,41 @@ body.mobile .mobile-selected-count {
1749
  }
1750
  }
1751
 
1752
- body.mobile .sidebar:not(.open) {
1753
- width: 0;
1754
- border-right: none;
1755
- border-left: none;
1756
- }
1757
-
1758
- body.mobile .left-sidebar.open {
1759
  position: fixed;
1760
  top: var(--header-h);
1761
- left: 0;
1762
  bottom: 0;
1763
  z-index: 95;
1764
- width: 85vw;
1765
  max-width: 320px;
1766
- box-shadow: var(--shadow-lg);
 
1767
  }
1768
 
1769
- body.mobile .right-sidebar.open {
1770
- position: fixed;
1771
- top: var(--header-h);
 
 
 
 
 
1772
  right: 0;
1773
- bottom: 0;
1774
- z-index: 95;
1775
- width: 85vw;
1776
- max-width: 320px;
 
 
 
1777
  box-shadow: var(--shadow-lg);
1778
  }
1779
 
 
 
 
 
 
1780
  body.mobile .footer {
1781
  display: none;
1782
  }
@@ -1882,34 +1897,41 @@ body.mobile .preview-path {
1882
  }
1883
 
1884
  @media (max-width: 768px) {
1885
- body:not(.force-desktop) .sidebar:not(.open) {
1886
- width: 0;
1887
- border-right: none;
1888
- border-left: none;
1889
- }
1890
-
1891
- body:not(.force-desktop) .left-sidebar.open {
1892
  position: fixed;
1893
  top: var(--header-h);
1894
- left: 0;
1895
  bottom: 0;
1896
  z-index: 95;
1897
- width: 85vw;
1898
  max-width: 320px;
1899
- box-shadow: var(--shadow-lg);
 
1900
  }
1901
 
1902
- body:not(.force-desktop) .right-sidebar.open {
1903
- position: fixed;
1904
- top: var(--header-h);
 
 
 
 
 
1905
  right: 0;
1906
- bottom: 0;
1907
- z-index: 95;
1908
- width: 85vw;
1909
- max-width: 320px;
 
 
 
1910
  box-shadow: var(--shadow-lg);
1911
  }
1912
 
 
 
 
 
 
1913
  body:not(.force-desktop) .footer {
1914
  display: none;
1915
  }
 
1720
  inset: 0;
1721
  background: rgba(0, 0, 0, 0.5);
1722
  z-index: 90;
1723
+ opacity: 0;
1724
+ pointer-events: none;
1725
+ transition: opacity var(--transition);
1726
+ }
1727
+
1728
+ .overlay.open {
1729
+ opacity: 1;
1730
+ pointer-events: auto;
1731
  }
1732
 
1733
  .toast {
 
1757
  }
1758
  }
1759
 
1760
+ body.mobile .sidebar {
 
 
 
 
 
 
1761
  position: fixed;
1762
  top: var(--header-h);
 
1763
  bottom: 0;
1764
  z-index: 95;
1765
+ width: 85vw !important;
1766
  max-width: 320px;
1767
+ transition: transform var(--transition), opacity var(--transition);
1768
+ will-change: transform;
1769
  }
1770
 
1771
+ body.mobile .left-sidebar {
1772
+ left: 0;
1773
+ transform: translateX(-100%);
1774
+ border-right: 1px solid var(--outline-variant);
1775
+ border-left: none;
1776
+ }
1777
+
1778
+ body.mobile .right-sidebar {
1779
  right: 0;
1780
+ transform: translateX(100%);
1781
+ border-left: 1px solid var(--outline-variant);
1782
+ border-right: none;
1783
+ }
1784
+
1785
+ body.mobile .sidebar.open {
1786
+ transform: translateX(0);
1787
  box-shadow: var(--shadow-lg);
1788
  }
1789
 
1790
+ body.mobile .sidebar.expanded-wide {
1791
+ width: 85vw !important;
1792
+ max-width: 320px;
1793
+ }
1794
+
1795
  body.mobile .footer {
1796
  display: none;
1797
  }
 
1897
  }
1898
 
1899
  @media (max-width: 768px) {
1900
+ body:not(.force-desktop) .sidebar {
 
 
 
 
 
 
1901
  position: fixed;
1902
  top: var(--header-h);
 
1903
  bottom: 0;
1904
  z-index: 95;
1905
+ width: 85vw !important;
1906
  max-width: 320px;
1907
+ transition: transform var(--transition), opacity var(--transition);
1908
+ will-change: transform;
1909
  }
1910
 
1911
+ body:not(.force-desktop) .left-sidebar {
1912
+ left: 0;
1913
+ transform: translateX(-100%);
1914
+ border-right: 1px solid var(--outline-variant);
1915
+ border-left: none;
1916
+ }
1917
+
1918
+ body:not(.force-desktop) .right-sidebar {
1919
  right: 0;
1920
+ transform: translateX(100%);
1921
+ border-left: 1px solid var(--outline-variant);
1922
+ border-right: none;
1923
+ }
1924
+
1925
+ body:not(.force-desktop) .sidebar.open {
1926
+ transform: translateX(0);
1927
  box-shadow: var(--shadow-lg);
1928
  }
1929
 
1930
+ body:not(.force-desktop) .sidebar.expanded-wide {
1931
+ width: 85vw !important;
1932
+ max-width: 320px;
1933
+ }
1934
+
1935
  body:not(.force-desktop) .footer {
1936
  display: none;
1937
  }