diff --git a/package-lock.json b/package-lock.json
index 3155d64..c764ec5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,12 +8,14 @@
"name": "eexiv-2",
"version": "0.1.0",
"dependencies": {
+ "file-saver": "^2.0.5",
"next": "14.1.0",
"react": "^18",
"react-dom": "^18",
"zustand": "^4.5.0"
},
"devDependencies": {
+ "@types/file-saver": "^2.0.7",
"@types/node": "^20",
"@types/react": "^18",
"@types/react-dom": "^18",
@@ -447,6 +449,12 @@
"tslib": "^2.4.0"
}
},
+ "node_modules/@types/file-saver": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.7.tgz",
+ "integrity": "sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==",
+ "dev": true
+ },
"node_modules/@types/json5": {
"version": "0.0.29",
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
@@ -1985,6 +1993,11 @@
"node": "^10.12.0 || >=12.0.0"
}
},
+ "node_modules/file-saver": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
+ "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
+ },
"node_modules/fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
diff --git a/package.json b/package.json
index 12fd79d..aaf5e4e 100644
--- a/package.json
+++ b/package.json
@@ -9,12 +9,14 @@
"lint": "next lint"
},
"dependencies": {
+ "file-saver": "^2.0.5",
"next": "14.1.0",
"react": "^18",
"react-dom": "^18",
"zustand": "^4.5.0"
},
"devDependencies": {
+ "@types/file-saver": "^2.0.7",
"@types/node": "^20",
"@types/react": "^18",
"@types/react-dom": "^18",
diff --git a/public/content/p1/day-5-principles-1.pdf b/public/download/day-5-principles-1/file.pdf
similarity index 100%
rename from public/content/p1/day-5-principles-1.pdf
rename to public/download/day-5-principles-1/file.pdf
diff --git a/public/content/r1/2024-programming-dwm-1.pdf b/public/download/r1/2024-programming-dwm-1.pdf
similarity index 100%
rename from public/content/r1/2024-programming-dwm-1.pdf
rename to public/download/r1/2024-programming-dwm-1.pdf
diff --git a/public/content/r2/the-deepbozo-report-1.pdf b/public/download/r2/the-deepbozo-report-1.pdf
similarity index 100%
rename from public/content/r2/the-deepbozo-report-1.pdf
rename to public/download/r2/the-deepbozo-report-1.pdf
diff --git a/public/content/r3/toughbook-1.pdf b/public/download/r3/toughbook-1.pdf
similarity index 100%
rename from public/content/r3/toughbook-1.pdf
rename to public/download/r3/toughbook-1.pdf
diff --git a/src/app/container/Container.tsx b/src/app/container/Container.tsx
index 3d9e374..1d987a9 100644
--- a/src/app/container/Container.tsx
+++ b/src/app/container/Container.tsx
@@ -1,14 +1,27 @@
import styles from './container.module.css'
/**
- * Renders a container component with the provided children. It will restrict the
- * width of the container to 90vw.
+ * Renders a container component with the specified width, containing the provided children.
*
- * @param {Readonly<{ children: React.ReactNode }>} children - The child components to be rendered within the container.
- * @return {React.ReactElement} The container component with the provided children.
+ * @param children - The children to be rendered within the container.
+ * @param width - The width of the container.
+ * @param fill - Whether the container should fill the available height
+ * @return The container component with the specified width and children.
*/
export default function Container({
children,
-}: Readonly<{ children: React.ReactNode }>) {
- return
{children}
+ width,
+ fill,
+}: Readonly<{ children: React.ReactNode; width: string; fill?: boolean }>) {
+ return (
+
+ {children}
+
+ )
}
diff --git a/src/app/container/container.module.css b/src/app/container/container.module.css
index e73d923..60d492d 100644
--- a/src/app/container/container.module.css
+++ b/src/app/container/container.module.css
@@ -1,5 +1,5 @@
.container {
margin: 0 auto;
padding: 0 20px;
- max-width: 90vw;
+ margin-bottom: 30px;
}
diff --git a/src/app/document/document.module.css b/src/app/document/document.module.css
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/document/page.tsx b/src/app/document/page.tsx
new file mode 100644
index 0000000..0b7b6ad
--- /dev/null
+++ b/src/app/document/page.tsx
@@ -0,0 +1,8 @@
+export default function Page() {
+ return (
+
+ This is a placeholder for a document browser that will be implemented in
+ the future. In the meantime, you can view specific documents by searching.
+
+ )
+}
diff --git a/src/app/document/view/[docName]/documentViewer.module.css b/src/app/document/view/[docName]/documentViewer.module.css
new file mode 100644
index 0000000..3d9e24b
--- /dev/null
+++ b/src/app/document/view/[docName]/documentViewer.module.css
@@ -0,0 +1,61 @@
+.itemTitle {
+ margin: 0;
+ font-size: 2em;
+}
+
+.itemAuthors {
+ margin-bottom: 0;
+}
+
+.itemDates {
+ margin-top: 0;
+}
+
+.itemType {
+ display: inline-block;
+ width: fit-content;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ margin-right: 10px;
+ border-radius: 5px;
+ margin-top: 10px;
+}
+
+.typeReport {
+ background-color: #28a745;
+}
+
+.itemRevision {
+ display: inline-block;
+}
+
+.itemAbstractHeader {
+ margin-top: 20px;
+ margin-bottom: 10px;
+ color: 33;
+ font-size: 1.5em;
+}
+
+.itemAbstract {
+ margin-top: 10px;
+ color: #666;
+ font-size: 1.2em;
+}
+
+.typePresentation {
+ background-color: #007bff;
+}
+
+.typeOther {
+ background-color: #6c757d;
+}
+
+.resultAbstract {
+ color: #333;
+}
+
+.downloadButton {
+ padding: 10px;
+}
diff --git a/src/app/document/view/[docName]/page.tsx b/src/app/document/view/[docName]/page.tsx
new file mode 100644
index 0000000..23158c1
--- /dev/null
+++ b/src/app/document/view/[docName]/page.tsx
@@ -0,0 +1,92 @@
+'use client'
+import styles from './documentViewer.module.css'
+import { Zilla_Slab } from 'next/font/google'
+import { saveAs } from 'file-saver'
+
+const zillaSlab = Zilla_Slab({ subsets: ['latin'], weight: ['500'] })
+
+export default function Page({
+ params,
+}: Readonly<{ params: { docName: string } }>) {
+ const handleDownload = () => {
+ saveAs(`/download/${params.docName}/file.pdf`, `${params.docName}.pdf`)
+ }
+
+ type ItemType = 'report' | 'presentation' | 'other'
+ const generateItemBadge = (itemName: ItemType) => {
+ let itemStyle: string
+ switch (itemName) {
+ case 'report':
+ itemStyle = `${styles.itemType} bg-green-400`
+ break
+ case 'presentation':
+ itemStyle = `${styles.itemType} bg-blue-400`
+ break
+ case 'other':
+ itemStyle = `${styles.itemType} bg-amber-400`
+ }
+ return (
+
+ {itemName.charAt(0).toUpperCase()}
+ {itemName.slice(1)}
+
+ )
+ }
+
+ return (
+
+ )
+}
diff --git a/src/app/home.module.css b/src/app/home.module.css
index f2d39fe..2c2ba62 100644
--- a/src/app/home.module.css
+++ b/src/app/home.module.css
@@ -29,7 +29,7 @@
.wordmark {
float: left;
height: 100px;
- margin-top: 25px;
+ margin-top: -25px;
}
.contributions {
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index b2f75da..81a7e35 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -11,10 +11,6 @@ import Container from './container/Container'
import it, as is done here with Zilla Slab, and then execute a CSS exploit by assigning
the tag className={zillaSlab.className} to set the font family of an element to your desired font.
DO NOT directly set the font family in CSS using font-family. You will break EVERYTHING!
-
- To set multiple classes, you can use an advanced exploit using an array of
- your desired classNames (eg. [styles.title, zillaSlab.className]) and join them with a space
- like so: className={[styles.title, zillaSlab.className].join(' ')}
*/
const inter = Inter({ subsets: ['latin'] })
const zillaSlab = Zilla_Slab({ subsets: ['latin'], weight: ['500', '700'] })
@@ -33,61 +29,69 @@ export default function RootLayout({
-
-
- We gratefully acknowledge support from our volunteer peer reviewers,
- member institutions, and all{' '}
-
- open-source contributors
-
- .
-
+
+
+
+ We gratefully acknowledge support from our volunteer peer
+ reviewers, member institutions, and all{' '}
+
+ open-source contributors
+
+ .
+
+
-
-
- eeXiv2
-
-
+
+
+
+ eeXiv2
+
+
+
- {children}
+
+ {children}
+
-
-
- About
-
-
- Help
-
-
- Contact
-
-
- Subscribe
-
-
- Copyright
-
-
- Privacy Policy
-
-
- Accessibility
-
-
- eeXiv status
-
-
-
- Get status notifications
-
-
-
+
+
+
+ About
+
+
+ Help
+
+
+ Contact
+
+
+ Subscribe
+
+
+ Copyright
+
+
+ Privacy Policy
+
+
+ Accessibility
+
+
+ eeXiv status
+
+
+
+ Get status notifications
+
+
+
+
diff --git a/src/app/searchBar/searchBar.module.css b/src/app/searchBar/searchBar.module.css
index 74cd810..7825dad 100644
--- a/src/app/searchBar/searchBar.module.css
+++ b/src/app/searchBar/searchBar.module.css
@@ -6,7 +6,7 @@
.search {
position: absolute;
top: 175px;
- left: 50%;
+ right: 0;
width: 40vw;
}
diff --git a/src/app/searchBar/searchBar.tsx b/src/app/searchBar/searchBar.tsx
index 12a2319..e9cd290 100644
--- a/src/app/searchBar/searchBar.tsx
+++ b/src/app/searchBar/searchBar.tsx
@@ -1,3 +1,4 @@
+'use client'
import styles from './searchBar.module.css'
export default function SearchBar() {
@@ -5,7 +6,7 @@ export default function SearchBar() {