init commit with existing code
This commit is contained in:
commit
2654a25c31
175
.gitignore
vendored
Normal file
175
.gitignore
vendored
Normal file
@ -0,0 +1,175 @@
|
|||||||
|
# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
|
||||||
|
logs
|
||||||
|
_.log
|
||||||
|
npm-debug.log_
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
lerna-debug.log*
|
||||||
|
.pnpm-debug.log*
|
||||||
|
|
||||||
|
# Caches
|
||||||
|
|
||||||
|
.cache
|
||||||
|
|
||||||
|
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||||
|
|
||||||
|
report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
|
||||||
|
|
||||||
|
# Runtime data
|
||||||
|
|
||||||
|
pids
|
||||||
|
_.pid
|
||||||
|
_.seed
|
||||||
|
*.pid.lock
|
||||||
|
|
||||||
|
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||||
|
|
||||||
|
lib-cov
|
||||||
|
|
||||||
|
# Coverage directory used by tools like istanbul
|
||||||
|
|
||||||
|
coverage
|
||||||
|
*.lcov
|
||||||
|
|
||||||
|
# nyc test coverage
|
||||||
|
|
||||||
|
.nyc_output
|
||||||
|
|
||||||
|
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||||
|
|
||||||
|
.grunt
|
||||||
|
|
||||||
|
# Bower dependency directory (https://bower.io/)
|
||||||
|
|
||||||
|
bower_components
|
||||||
|
|
||||||
|
# node-waf configuration
|
||||||
|
|
||||||
|
.lock-wscript
|
||||||
|
|
||||||
|
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||||
|
|
||||||
|
build/Release
|
||||||
|
|
||||||
|
# Dependency directories
|
||||||
|
|
||||||
|
node_modules/
|
||||||
|
jspm_packages/
|
||||||
|
|
||||||
|
# Snowpack dependency directory (https://snowpack.dev/)
|
||||||
|
|
||||||
|
web_modules/
|
||||||
|
|
||||||
|
# TypeScript cache
|
||||||
|
|
||||||
|
*.tsbuildinfo
|
||||||
|
|
||||||
|
# Optional npm cache directory
|
||||||
|
|
||||||
|
.npm
|
||||||
|
|
||||||
|
# Optional eslint cache
|
||||||
|
|
||||||
|
.eslintcache
|
||||||
|
|
||||||
|
# Optional stylelint cache
|
||||||
|
|
||||||
|
.stylelintcache
|
||||||
|
|
||||||
|
# Microbundle cache
|
||||||
|
|
||||||
|
.rpt2_cache/
|
||||||
|
.rts2_cache_cjs/
|
||||||
|
.rts2_cache_es/
|
||||||
|
.rts2_cache_umd/
|
||||||
|
|
||||||
|
# Optional REPL history
|
||||||
|
|
||||||
|
.node_repl_history
|
||||||
|
|
||||||
|
# Output of 'npm pack'
|
||||||
|
|
||||||
|
*.tgz
|
||||||
|
|
||||||
|
# Yarn Integrity file
|
||||||
|
|
||||||
|
.yarn-integrity
|
||||||
|
|
||||||
|
# dotenv environment variable files
|
||||||
|
|
||||||
|
.env
|
||||||
|
.env.development.local
|
||||||
|
.env.test.local
|
||||||
|
.env.production.local
|
||||||
|
.env.local
|
||||||
|
|
||||||
|
# parcel-bundler cache (https://parceljs.org/)
|
||||||
|
|
||||||
|
.parcel-cache
|
||||||
|
|
||||||
|
# Next.js build output
|
||||||
|
|
||||||
|
.next
|
||||||
|
out
|
||||||
|
|
||||||
|
# Nuxt.js build / generate output
|
||||||
|
|
||||||
|
.nuxt
|
||||||
|
dist
|
||||||
|
|
||||||
|
# Gatsby files
|
||||||
|
|
||||||
|
# Comment in the public line in if your project uses Gatsby and not Next.js
|
||||||
|
|
||||||
|
# https://nextjs.org/blog/next-9-1#public-directory-support
|
||||||
|
|
||||||
|
# public
|
||||||
|
|
||||||
|
# vuepress build output
|
||||||
|
|
||||||
|
.vuepress/dist
|
||||||
|
|
||||||
|
# vuepress v2.x temp and cache directory
|
||||||
|
|
||||||
|
.temp
|
||||||
|
|
||||||
|
# Docusaurus cache and generated files
|
||||||
|
|
||||||
|
.docusaurus
|
||||||
|
|
||||||
|
# Serverless directories
|
||||||
|
|
||||||
|
.serverless/
|
||||||
|
|
||||||
|
# FuseBox cache
|
||||||
|
|
||||||
|
.fusebox/
|
||||||
|
|
||||||
|
# DynamoDB Local files
|
||||||
|
|
||||||
|
.dynamodb/
|
||||||
|
|
||||||
|
# TernJS port file
|
||||||
|
|
||||||
|
.tern-port
|
||||||
|
|
||||||
|
# Stores VSCode versions used for testing VSCode extensions
|
||||||
|
|
||||||
|
.vscode-test
|
||||||
|
|
||||||
|
# yarn v2
|
||||||
|
|
||||||
|
.yarn/cache
|
||||||
|
.yarn/unplugged
|
||||||
|
.yarn/build-state.yml
|
||||||
|
.yarn/install-state.gz
|
||||||
|
.pnp.*
|
||||||
|
|
||||||
|
# IntelliJ based IDEs
|
||||||
|
.idea
|
||||||
|
|
||||||
|
# Finder (MacOS) folder config
|
||||||
|
.DS_Store
|
15
404.html
Normal file
15
404.html
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>404 Not Found</title>
|
||||||
|
<link href="css/style.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<h1>The page you are looking for doesnt exist</h1>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
15
README.md
Normal file
15
README.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# klectrdesktop
|
||||||
|
|
||||||
|
To install dependencies:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bun install
|
||||||
|
```
|
||||||
|
|
||||||
|
To run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bun run index.ts
|
||||||
|
```
|
||||||
|
|
||||||
|
This project was created using `bun init` in bun v1.1.12. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime.
|
BIN
assets/wallpaper.jpg
Normal file
BIN
assets/wallpaper.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.6 MiB |
BIN
assets/wallpaper2.jpg
Normal file
BIN
assets/wallpaper2.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 48 KiB |
21
index.css
Normal file
21
index.css
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
* {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-image: url("./assets/wallpaper2.jpg");
|
||||||
|
background-size: cover;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
width: 100vw;
|
||||||
|
height: 100vh;
|
||||||
|
background-position: center;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
16
index.html
Normal file
16
index.html
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>KlectrDesktop</title>
|
||||||
|
<link href="./index.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<noscript>You need to have javascript enbaled for this shit!</noscript>
|
||||||
|
<script type="module" src="./index"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
36
index.ts
Normal file
36
index.ts
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
const PORT = 3000
|
||||||
|
|
||||||
|
Bun.serve({
|
||||||
|
port: PORT,
|
||||||
|
async fetch(request, _server) {
|
||||||
|
const url = new URL(request.url)
|
||||||
|
|
||||||
|
if (url.pathname === '/') {
|
||||||
|
return new Response(Bun.file("./index.html"))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (url.pathname.endsWith(".css")) {
|
||||||
|
return new Response(Bun.file(`.${url.pathname}`))
|
||||||
|
}
|
||||||
|
|
||||||
|
if (url.pathname.endsWith(".jpg")) {
|
||||||
|
return new Response(Bun.file(`.${url.pathname}`))
|
||||||
|
}
|
||||||
|
|
||||||
|
const urlPath = `./src/${url.pathname}.js`
|
||||||
|
const file = Bun.file(urlPath)
|
||||||
|
|
||||||
|
|
||||||
|
if (!(await file.exists())) {
|
||||||
|
console.log('here: ', urlPath)
|
||||||
|
return new Response(Bun.file("./404.html"))
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Response(file, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "text/javascript;charset=UTF-8"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
15
package.json
Normal file
15
package.json
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"name": "klectrdesktop",
|
||||||
|
"module": "index.ts",
|
||||||
|
"type": "module",
|
||||||
|
"main": "dist/index.js",
|
||||||
|
"scripts": {
|
||||||
|
"start": "bun index.ts"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/bun": "^1.1.4"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"typescript": "^5.0.0"
|
||||||
|
}
|
||||||
|
}
|
11
src/index.js
Normal file
11
src/index.js
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import OS from "./os/index";
|
||||||
|
import UI from "./ui/index";
|
||||||
|
|
||||||
|
const os = new OS()
|
||||||
|
const ui = new UI()
|
||||||
|
|
||||||
|
os.addUi(ui)
|
||||||
|
ui.addOs(os)
|
||||||
|
|
||||||
|
os.start()
|
||||||
|
ui.start()
|
13
src/os/applications.js
Normal file
13
src/os/applications.js
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
export default class Applications {
|
||||||
|
constructor() {
|
||||||
|
this.applications = []
|
||||||
|
}
|
||||||
|
|
||||||
|
addApplication(application) {
|
||||||
|
this.applications.push(application)
|
||||||
|
}
|
||||||
|
|
||||||
|
getApplications() {
|
||||||
|
return this.applications
|
||||||
|
}
|
||||||
|
}
|
10
src/os/cursor.js
Normal file
10
src/os/cursor.js
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
export default class Cursor {
|
||||||
|
constructor() {
|
||||||
|
document.addEventListener('mousemove', this.start.bind(this))
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @param {MouseEvent} e */
|
||||||
|
start(e) {
|
||||||
|
// console.log(e)
|
||||||
|
}
|
||||||
|
}
|
25
src/os/filesystem.js
Normal file
25
src/os/filesystem.js
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
export default class Filesystem {
|
||||||
|
constructor() {
|
||||||
|
this.files = []
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @param {string} path */
|
||||||
|
addFile(path) {
|
||||||
|
this.files.push(path)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @param {string} path */
|
||||||
|
removeFile(path) {
|
||||||
|
this.files = this.files.filter(file => file !== path)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @param {string} path */
|
||||||
|
getFile(path) {
|
||||||
|
return this.files.find(file => file === path)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @param {string} path */
|
||||||
|
getFiles() {
|
||||||
|
return this.files
|
||||||
|
}
|
||||||
|
}
|
26
src/os/index.js
Normal file
26
src/os/index.js
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
import Cursor from "./cursor"
|
||||||
|
import Filesystem from "./filesystem"
|
||||||
|
import Applications from "./applications"
|
||||||
|
|
||||||
|
export default class OS {
|
||||||
|
ui
|
||||||
|
cursor
|
||||||
|
filesystem
|
||||||
|
applications
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
this.cursor = new Cursor()
|
||||||
|
this.filesystem = new Filesystem()
|
||||||
|
this.applications = new Applications()
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @param {UI} ui */
|
||||||
|
addUi(ui) {
|
||||||
|
this.ui = ui
|
||||||
|
}
|
||||||
|
|
||||||
|
start() {
|
||||||
|
console.log('start os')
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
}
|
15
src/ui/component.js
Normal file
15
src/ui/component.js
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
export default class Component {
|
||||||
|
/** @type {HTMLDivElement}*/
|
||||||
|
element = document.createElement("div")
|
||||||
|
|
||||||
|
|
||||||
|
/** @param {HTMLElement} child*/
|
||||||
|
addChild(child) {
|
||||||
|
this.element.appendChild(child)
|
||||||
|
}
|
||||||
|
|
||||||
|
start() {
|
||||||
|
return this.element
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
34
src/ui/desktop.js
Normal file
34
src/ui/desktop.js
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
import Component from "./component"
|
||||||
|
|
||||||
|
export default class Desktop extends Component {
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super()
|
||||||
|
this.element.id = 'desktop'
|
||||||
|
this.element.style.height = '100%'
|
||||||
|
this.element.style.width = '100%'
|
||||||
|
this.element.style.display = 'grid'
|
||||||
|
this.element.style.gap = '10px'
|
||||||
|
|
||||||
|
this.element.style.display = 'grid'
|
||||||
|
this.element.style.gridAutoFlow = 'column'
|
||||||
|
|
||||||
|
this.element.style.gridTemplateColumns = 'repeat(auto-fill, minmax(80px, 1fr))'
|
||||||
|
this.element.style.gridTemplateRows = 'repeat(auto-fill, minmax(80px, 1fr))'
|
||||||
|
|
||||||
|
for (let i = 0; i < 50; i++) {
|
||||||
|
const component = new Component()
|
||||||
|
component.element.innerText = i
|
||||||
|
component.element.style.border = '1px solid white'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
addApplicationIcon() {
|
||||||
|
// reaches into the OS and adds an icon to the desktop
|
||||||
|
// this is a placeholder for now
|
||||||
|
}
|
||||||
|
|
||||||
|
start() {
|
||||||
|
return this.element
|
||||||
|
}
|
||||||
|
}
|
47
src/ui/index.js
Normal file
47
src/ui/index.js
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
import OS from "../os/index"
|
||||||
|
import Component from "./component";
|
||||||
|
import NavBar from "./nav";
|
||||||
|
import TopBar from "./topbar";
|
||||||
|
import Desktop from "./desktop";
|
||||||
|
|
||||||
|
export default class UI extends Component {
|
||||||
|
os
|
||||||
|
topbar
|
||||||
|
navbar
|
||||||
|
desktop
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super()
|
||||||
|
|
||||||
|
this.element.style.height = '100vh'
|
||||||
|
this.element.style.width = '100vw'
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @param {OS} os */
|
||||||
|
addOs(os) {
|
||||||
|
this.os = os
|
||||||
|
}
|
||||||
|
|
||||||
|
start() {
|
||||||
|
console.log("start ui")
|
||||||
|
this.element.id = 'ui'
|
||||||
|
document.body.appendChild(this.element)
|
||||||
|
|
||||||
|
this.topbar = new TopBar()
|
||||||
|
this.addChild(this.topbar.start())
|
||||||
|
|
||||||
|
this.navbar = new NavBar()
|
||||||
|
this.desktop = new Desktop()
|
||||||
|
|
||||||
|
const desktop_container = document.createElement('div')
|
||||||
|
desktop_container.id = 'desktop_container'
|
||||||
|
desktop_container.style.display = 'flex'
|
||||||
|
desktop_container.style.height = `calc(100vh - ${this.topbar.element.clientHeight}px)`
|
||||||
|
this.addChild(desktop_container)
|
||||||
|
|
||||||
|
desktop_container.appendChild(this.navbar.start())
|
||||||
|
desktop_container.appendChild(this.desktop.start())
|
||||||
|
|
||||||
|
return this.element
|
||||||
|
}
|
||||||
|
}
|
22
src/ui/nav.js
Normal file
22
src/ui/nav.js
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import Component from "./component"
|
||||||
|
|
||||||
|
export default class NavBar extends Component {
|
||||||
|
constructor() {
|
||||||
|
super()
|
||||||
|
|
||||||
|
this.element.style.display = 'flex'
|
||||||
|
this.element.style.flexDirection = 'column'
|
||||||
|
this.element.style.backgroundColor = '#000000af';
|
||||||
|
this.element.style.backdropFilter = 'blur(10px)';
|
||||||
|
this.element.style.height = '100%'
|
||||||
|
this.element.style.width = '60px'
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
start() {
|
||||||
|
this.element.id = 'navbar'
|
||||||
|
return this.element
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
17
src/ui/topbar.js
Normal file
17
src/ui/topbar.js
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import Component from "./component"
|
||||||
|
|
||||||
|
export default class TopBar extends Component {
|
||||||
|
constructor() {
|
||||||
|
super()
|
||||||
|
this.element.style.height = "20px"
|
||||||
|
this.element.style.width = "100%"
|
||||||
|
this.element.style.backgroundColor = "black"
|
||||||
|
}
|
||||||
|
|
||||||
|
start() {
|
||||||
|
this.element.id = 'topbar'
|
||||||
|
return this.element
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user