Upload 2 files
Browse files- static/app.js +12 -9
- 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 =
|
|
|
|
| 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
|
| 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 |
-
|
|
|
|
| 1767 |
}
|
| 1768 |
|
| 1769 |
-
body.mobile .
|
| 1770 |
-
|
| 1771 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1772 |
right: 0;
|
| 1773 |
-
|
| 1774 |
-
|
| 1775 |
-
|
| 1776 |
-
|
|
|
|
|
|
|
|
|
|
| 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
|
| 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 |
-
|
|
|
|
| 1900 |
}
|
| 1901 |
|
| 1902 |
-
body:not(.force-desktop) .
|
| 1903 |
-
|
| 1904 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1905 |
right: 0;
|
| 1906 |
-
|
| 1907 |
-
|
| 1908 |
-
|
| 1909 |
-
|
|
|
|
|
|
|
|
|
|
| 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 |
}
|