From b1ceeb0fe38fa5f50cd08cb47cc391f14860ebad Mon Sep 17 00:00:00 2001 From: ThinLiquid Date: Wed, 18 Oct 2023 20:57:42 +0100 Subject: [PATCH 1/3] =?UTF-8?q?[=E2=9C=A8]=20Better=20editor=20handling?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/editor.ts | 80 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 72 insertions(+), 8 deletions(-) diff --git a/src/apps/editor.ts b/src/apps/editor.ts index f3643f4..54c2ec1 100644 --- a/src/apps/editor.ts +++ b/src/apps/editor.ts @@ -3,16 +3,15 @@ import { App } from '../types.ts' import { fullEditor } from 'prism-code-editor/setups' import Prism from 'prism-code-editor/prism-core' - -import 'prismjs/components/prism-clike.js' import 'prismjs/components/prism-markup.js' +import 'prismjs/components/prism-clike.js' import 'prismjs/components/prism-javascript.js' import 'prismjs/components/prism-typescript.js' -import 'prismjs/components/prism-css.js' -import 'prismjs/components/prism-json.js' -import 'prismjs/components/prism-c.js' -import 'prismjs/components/prism-csharp.js' -import 'prismjs/components/prism-cpp.js' +import 'prismjs/components/prism-jsx.js' +import 'prismjs/components/prism-tsx.js' +import 'prism-code-editor/languages' +import 'prism-code-editor/prism-markdown' + import { FlowWindow } from '../wm.ts' interface EditorConfig { @@ -125,12 +124,77 @@ export default class EditorApp implements App { } }) + let language + + switch (data.path.split('.').at(-1)?.toLowerCase()) { + case 'c': + case 'cs': + case 'cpp': + case 'java': { + language = 'clike' + break + } + + case 'ts': { + language = 'typescript' + break + } + + case 'js': + case 'mjs': + case 'cjs': { + language = 'javascript' + break + } + + case 'jsx': { + language = 'jsx' + break + } + + case 'tsx': { + language = 'tsx' + break + } + + + case 'html': { + language = 'html' + break + } + + case 'md': { + language = 'md' + break + } + + case 'css': { + language = 'css' + break + } + + case 'xml': { + language = 'xml' + break + } + + case 'py': { + language = 'python' + break + } + + default: { + language = 'text' + break + } + } + const value = (await window.fs.promises.readFile(data.path)).toString() const editor = fullEditor( Prism, win.content.querySelector('.editor'), { - language: data.path.split('.').at(-1), + language, theme: 'github-dark', value } From f1c8930b188f041cc3e756e8e2a0b7b6de267b49 Mon Sep 17 00:00:00 2001 From: ThinLiquid Date: Wed, 18 Oct 2023 22:32:07 +0100 Subject: [PATCH 2/3] =?UTF-8?q?[=F0=9F=94=A8]=20Major=20overhaul=20to=20ap?= =?UTF-8?q?ps=20and=20plugin=20system?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/editor.ts | 16 +++--- src/apps/files.ts | 15 +++--- src/apps/info.ts | 16 +++--- src/apps/manager.ts | 37 +++++++++---- src/apps/music.ts | 15 +++--- src/apps/settings.ts | 15 +++--- src/assets/icons/null.png | Bin 0 -> 71165 bytes src/files.d.ts | 5 +- src/flow.ts | 68 +++++++++++++++++++----- src/index.ts | 3 +- src/{modules => plugins}/appLauncher.ts | 3 +- src/{modules => plugins}/apps.ts | 5 +- src/{modules => plugins}/battery.ts | 3 +- src/{modules => plugins}/clock.ts | 3 +- src/{modules => plugins}/switcher.ts | 3 +- src/{modules => plugins}/weather.ts | 3 +- src/statusbar.ts | 31 +++-------- src/style.less | 18 +++++-- src/types.ts | 52 +++++++++++------- 19 files changed, 198 insertions(+), 113 deletions(-) create mode 100644 src/assets/icons/null.png rename src/{modules => plugins}/appLauncher.ts (90%) rename src/{modules => plugins}/apps.ts (88%) rename src/{modules => plugins}/battery.ts (94%) rename src/{modules => plugins}/clock.ts (95%) rename src/{modules => plugins}/switcher.ts (91%) rename src/{modules => plugins}/weather.ts (88%) diff --git a/src/apps/editor.ts b/src/apps/editor.ts index 54c2ec1..334198a 100644 --- a/src/apps/editor.ts +++ b/src/apps/editor.ts @@ -19,15 +19,18 @@ interface EditorConfig { } export default class EditorApp implements App { - name = 'Editor' - pkg = 'flow.editor' - icon = icon - version = '1.0.0' + meta = { + name: 'Editor', + description: 'A simple editor app.', + pkg: 'flow.editor', + version: '1.0.0', + icon + } async open (data?: EditorConfig): Promise { const win = window.wm.createWindow({ - title: this.name, - icon, + title: this.meta.name, + icon: this.meta.icon, width: 500, height: 400 }) @@ -157,7 +160,6 @@ export default class EditorApp implements App { break } - case 'html': { language = 'html' break diff --git a/src/apps/files.ts b/src/apps/files.ts index 6ddaa50..9adac1d 100644 --- a/src/apps/files.ts +++ b/src/apps/files.ts @@ -6,15 +6,18 @@ import { FlowWindow } from '../wm.ts' import { Stats } from 'fs' export default class FilesApp implements App { - name = 'Files' - pkg = 'flow.files' - icon = icon - version = '1.0.0' + meta = { + name: 'Files', + description: 'A simple files app.', + pkg: 'flow.files', + version: '1.0.0', + icon + } async open (): Promise { const win = window.wm.createWindow({ - title: this.name, - icon, + title: this.meta.name, + icon: this.meta.icon, width: 500, height: 400 }) diff --git a/src/apps/info.ts b/src/apps/info.ts index 00b7178..0b7c58a 100644 --- a/src/apps/info.ts +++ b/src/apps/info.ts @@ -3,17 +3,19 @@ import { App, PackageJSON } from '../types.ts' import { FlowWindow } from '../wm.ts' export default class SettingsApp implements App { - name = 'Info' - pkg = 'flow.info' - icon = icon - version = '1.0.0' - canResize = true + meta = { + name: 'Info', + description: 'FlowOS Information.', + pkg: 'flow.info', + version: '1.0.0', + icon + } async open (): Promise { const packageJSON: PackageJSON = await import('../../package.json') const win = window.wm.createWindow({ - title: this.name, - icon, + title: this.meta.name, + icon: this.meta.icon, width: 300, height: 400, canResize: false diff --git a/src/apps/manager.ts b/src/apps/manager.ts index cfc064f..52922f4 100644 --- a/src/apps/manager.ts +++ b/src/apps/manager.ts @@ -1,17 +1,21 @@ import icon from '../assets/icons/manager.png' -import { App } from '../types.ts' +import { App, LoadedApp, LoadedPlugin } from '../types.ts' import { FlowWindow } from '../wm.ts' +import nullIcon from '../assets/icons/null.png' export default class ManagerApp implements App { - name = 'Manager' - pkg = 'flow.manager' - icon = icon - version = '1.0.0' + meta = { + name: 'Flow Manager', + description: 'A FlowOS utility app.', + pkg: 'flow.manager', + version: '1.0.0', + icon + } async open (): Promise { const win = window.wm.createWindow({ - title: this.name, - icon, + title: this.meta.name, + icon: this.meta.icon, width: 350, height: 500 }) @@ -22,13 +26,24 @@ export default class ManagerApp implements App { win.content.style.padding = '10px' win.content.style.background = 'var(--base)' win.content.innerHTML = ` - ${window.flow.apps.map(app => { + ${window.flow.apps.map((app: LoadedApp) => { return `
- +
-

${app.name} ${(app.builtin ?? false) ? '(builtin)' : ''}

-

${app.pkg} (v${app.version})

+

${app.meta.name} ${(app.builtin ?? false) ? '(builtin)' : ''}

+

${app.meta.pkg} (v${app.meta.version}) - App

+
+
+ ` + }).join('')} + ${window.flow.plugins.map((plugin: LoadedPlugin) => { + return ` +
+ +
+

${plugin.meta.name} ${(plugin.builtin ?? false) ? '(builtin)' : ''}

+

${plugin.meta.pkg} (v${plugin.meta.version}) - Plugin

` diff --git a/src/apps/music.ts b/src/apps/music.ts index c7fe8f2..e1bdc7a 100644 --- a/src/apps/music.ts +++ b/src/apps/music.ts @@ -3,15 +3,18 @@ import { App } from '../types.ts' import { FlowWindow } from '../wm.ts' export default class MusicApp implements App { - name = 'Music' - pkg = 'flow.music' - icon = icon - version = '1.0.0' + meta = { + name: 'Music', + description: 'A simple music app.', + pkg: 'flow.music', + version: '1.0.0', + icon + } async open (): Promise { const win = window.wm.createWindow({ - title: this.name, - icon, + title: this.meta.name, + icon: this.meta.icon, width: 700, height: 300 }) diff --git a/src/apps/settings.ts b/src/apps/settings.ts index 42285c2..03263c3 100644 --- a/src/apps/settings.ts +++ b/src/apps/settings.ts @@ -3,15 +3,18 @@ import { App } from '../types.ts' import { FlowWindow } from '../wm.ts' export default class SettingsApp implements App { - name = 'Settings' - pkg = 'flow.settings' - icon = icon - version = '1.0.0' + meta = { + name: 'Settings', + description: 'Modify/customize FlowOS.', + pkg: 'flow.settings', + version: '1.0.0', + icon + } async open (): Promise { const win = window.wm.createWindow({ - title: this.name, - icon, + title: this.meta.name, + icon: this.meta.icon, width: 700, height: 300 }) diff --git a/src/assets/icons/null.png b/src/assets/icons/null.png new file mode 100644 index 0000000000000000000000000000000000000000..4cb5fd4b64f8bd88d82beeba043d95527031e8ee GIT binary patch literal 71165 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

V?HGMQG(Lzxx?Te(!x_R;rn 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 literal 0 HcmV?d00001 diff --git a/src/files.d.ts b/src/files.d.ts index 5d25086..2101ae6 100644 --- a/src/files.d.ts +++ b/src/files.d.ts @@ -1,2 +1,5 @@ -declare module '*.png' +declare module '*.png' { + const image: string + export = image +} declare module '*.json' diff --git a/src/flow.ts b/src/flow.ts index 151deef..420b3ba 100644 --- a/src/flow.ts +++ b/src/flow.ts @@ -1,4 +1,4 @@ -import { App, LoadedApp } from './types.ts' +import { LoadedApp, LoadedPlugin } from './types.ts' class Flow { apps: LoadedApp[] = [] @@ -11,17 +11,30 @@ class Flow { 'manager' ] - async init (): Promise { + plugins: LoadedPlugin[] = [] + pluginList: string[] = [ + 'appLauncher', + 'apps', + 'weather', + 'clock', + 'switcher', + 'battery' + ] + + private async initApps (): Promise { window.preloader.setPending('apps') window.preloader.setStatus('importing default apps...') for (const appPath of this.appList) { - const { default: ImportedApp } = await import(`./apps/${appPath}.ts`) + window.preloader.setStatus(`importing default apps\n${appPath}`) + const { default: ImportedApp } = await import(`./apps/${appPath}.ts`).catch((e: Error) => { + console.error(e) + window.preloader.setStatus(`unable to import ${appPath}\n${e.name}: ${e.message}`) + }) const app = new ImportedApp() app.builtin = true - window.preloader.setStatus(`importing default apps\n${appPath}`) - this.add(app) + this.addApp(app) } window.wm.launcher.style.opacity = '0' @@ -31,13 +44,13 @@ class Flow { window.preloader.setStatus('adding apps to app launcher...') this.apps.forEach((app) => { - window.preloader.setStatus(`adding apps to app launcher\n${app.name}`) + window.preloader.setStatus(`adding apps to app launcher\n${app.meta.name}`) const appElement = document.createElement('app') appElement.onclick = async () => { - await window.flow.openApp(app.pkg) + await window.flow.openApp(app.meta.pkg) window.wm.toggleLauncher() } - appElement.innerHTML = `

` + appElement.innerHTML = `
${app.meta.name}
` window.wm.launcher.querySelector('apps')?.appendChild(appElement) }) @@ -47,17 +60,48 @@ class Flow { await window.preloader.setDone('apps') } - add (app: App): void { - if (this.apps.some(x => x.pkg === app.pkg)) { - console.error(`Unable to register app; ${app.pkg} is already registered.`) + private async initPlugins (): Promise { + window.preloader.setPending('plugins') + window.preloader.setStatus('importing default plugins...') + + for (const pluginPath of this.pluginList) { + window.preloader.setStatus(`importing default plugins\n${pluginPath}`) + const plugin = await import(`./plugins/${pluginPath}.ts`).catch((e: Error) => { + console.error(e) + window.preloader.setStatus(`unable to import ${pluginPath}\n${e.name}: ${e.message}`) + }) + const loadedPlugin = { + ...plugin, + builtin: true + } + this.addPlugin(loadedPlugin) + } + } + + async init (): Promise { + await this.initApps() + await this.initPlugins() + } + + addApp (app: LoadedApp): void { + if (this.apps.some(x => x.meta.pkg === app.meta.pkg)) { + console.error(`Unable to register app; ${app.meta.pkg} is already registered.`) return } this.apps.push(app) } + addPlugin (plugin: LoadedPlugin): void { + if (window.flow.plugins.some(x => x.meta.pkg === plugin.meta.pkg)) { + console.error(`Unable to register tool; ${plugin.meta.pkg} is already registered.`) + return + } + this.plugins.push(plugin) + } + async openApp (pkg: string, data?: any): Promise { - const app = this.apps.find(x => x.pkg === pkg) + const app = this.apps.find(x => x.meta.pkg === pkg) const win = app?.open(data) const event = new CustomEvent('app_opened', { detail: { app, win: await win } }) window.dispatchEvent(event) diff --git a/src/index.ts b/src/index.ts index 13febd1..8248f92 100644 --- a/src/index.ts +++ b/src/index.ts @@ -39,10 +39,9 @@ window.wm = new WM(); window.fs = new (window as any).Filer.FileSystem() await window.preloader.setDone('filesystem') - await window.statusBar.init() await window.wm.init() - await window.flow.init() + await window.statusBar.init() window.preloader.setStatus('') window.preloader.finish() diff --git a/src/modules/appLauncher.ts b/src/plugins/appLauncher.ts similarity index 90% rename from src/modules/appLauncher.ts rename to src/plugins/appLauncher.ts index 3d13dac..7b840a4 100644 --- a/src/modules/appLauncher.ts +++ b/src/plugins/appLauncher.ts @@ -1,7 +1,8 @@ export const meta = { name: 'App Launcher', description: 'Opens the app launcher.', - id: 'applauncher' + pkg: 'flow.applauncher', + version: '1.0.0' } export const run = (element: HTMLDivElement): void => { diff --git a/src/modules/apps.ts b/src/plugins/apps.ts similarity index 88% rename from src/modules/apps.ts rename to src/plugins/apps.ts index 5621bea..f17b3ef 100644 --- a/src/modules/apps.ts +++ b/src/plugins/apps.ts @@ -3,7 +3,8 @@ import { AppOpenedEvent, AppClosedEvent } from '../types' export const meta = { name: 'Apps', description: 'Displays the current apps open.', - id: 'apps' + pkg: 'flow.apps', + version: '1.0.0' } export const run = (element: HTMLDivElement): void => { @@ -19,7 +20,7 @@ export const run = (element: HTMLDivElement): void => { appIcon.style.background = 'var(--surface-0)' appIcon.style.padding = '5px 7.5px' appIcon.style.borderRadius = '5px' - appIcon.innerHTML = ` ${app.name}` + appIcon.innerHTML = ` ${app.meta.name}` appIcon.onclick = async () => { const win = await e.detail.win win.focus() diff --git a/src/modules/battery.ts b/src/plugins/battery.ts similarity index 94% rename from src/modules/battery.ts rename to src/plugins/battery.ts index 7818ec0..d72b443 100644 --- a/src/modules/battery.ts +++ b/src/plugins/battery.ts @@ -1,7 +1,8 @@ export const meta = { name: 'Battery', description: 'Tells you your device\'s battery.', - id: 'battery' + pkg: 'flow.battery', + version: '1.0.0' } export const run = (element: HTMLDivElement): void => { diff --git a/src/modules/clock.ts b/src/plugins/clock.ts similarity index 95% rename from src/modules/clock.ts rename to src/plugins/clock.ts index be3fb90..bab94ec 100644 --- a/src/modules/clock.ts +++ b/src/plugins/clock.ts @@ -1,7 +1,8 @@ export const meta = { name: 'Clock', description: 'Displays the date & time.', - id: 'clock' + pkg: 'flow.clock', + version: '1.0.0' } export const run = (element: HTMLDivElement): void => { diff --git a/src/modules/switcher.ts b/src/plugins/switcher.ts similarity index 91% rename from src/modules/switcher.ts rename to src/plugins/switcher.ts index df4eb14..6d8e9c1 100644 --- a/src/modules/switcher.ts +++ b/src/plugins/switcher.ts @@ -1,7 +1,8 @@ export const meta = { name: 'Desktop Switcher', description: 'Allows you to switch between desktops.', - id: 'switcher' + pkg: 'flow.switcher', + version: '1.0.0' } export const run = (element: HTMLDivElement): void => { diff --git a/src/modules/weather.ts b/src/plugins/weather.ts similarity index 88% rename from src/modules/weather.ts rename to src/plugins/weather.ts index 9ef4707..d3b6e2c 100644 --- a/src/modules/weather.ts +++ b/src/plugins/weather.ts @@ -1,7 +1,8 @@ export const meta = { name: 'Weather', description: 'Tells you the weather.', - id: 'weather' + pkg: 'flow.weather', + version: '1.0.0' } export const run = (element: HTMLDivElement): void => { diff --git a/src/statusbar.ts b/src/statusbar.ts index 74a2146..521583a 100644 --- a/src/statusbar.ts +++ b/src/statusbar.ts @@ -1,17 +1,7 @@ -import { StatusItem } from './types' +import { Plugin } from './types' class StatusBar { - pluginList: string[] = [ - 'appLauncher', - 'apps', - 'weather', - 'clock', - 'switcher', - 'battery' - ] - - plugins: StatusItem[] = [] element: HTMLElement constructor () { @@ -20,29 +10,20 @@ class StatusBar { document.body.appendChild(this.element) } - add (item: StatusItem): void { - if (this.plugins.some(x => x.meta.id === item.meta.id)) { - console.error(`Unable to register tool; ${item.meta.id} is already registered.`) - return - } - + add (item: Plugin): void { const element = document.createElement('div') - element.setAttribute('data-toolbar-id', item.meta.id) + element.setAttribute('data-toolbar-id', item.meta.pkg) - this.plugins.push(item) this.element.appendChild(element) item.run(element) } async init (): Promise { - window.preloader.setPending('plugins') - window.preloader.setStatus('importing default plugins...') + window.preloader.setStatus('adding plugins to statusbar...') - for (const pluginPath of this.pluginList) { - const plugin = await import(`./modules/${pluginPath}.ts`) - - window.preloader.setStatus(`importing default plugins\n${pluginPath}`) + for (const plugin of window.flow.plugins) { + window.preloader.setStatus(`adding plugins to statusbar\n${plugin.meta.pkg}`) this.add(plugin) } diff --git a/src/style.less b/src/style.less index ae5aa87..36be317 100644 --- a/src/style.less +++ b/src/style.less @@ -143,24 +143,36 @@ launcher { max-height: 70vh; padding: 20px; margin: 40px; - display: flex; justify-content: center; + display: grid; + grid-template-columns: repeat(auto-fit, minmax(125px, 1fr)); + grid-template-rows: repeat(auto-fit, minmax(200px, 1fr)); gap: 40px; - flex-wrap: wrap; app { + align-items: center; justify-content: center; display: flex; flex-direction: column; gap: 10px; height: max-content; text-align: center; + overflow: hidden; img { - width: 75px; + width: 100%; border-radius: 40%; aspect-ratio: 1 / 1; } + + div { + overflow: hidden; + text-overflow: ellipsis; + width: fit-content; + height: 100%; + white-space: nowrap; + + } } } diff --git a/src/types.ts b/src/types.ts index be3293b..d44775e 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,29 +1,9 @@ import { FlowWindow } from './wm' -export interface StatusItem { - meta: { - name: string - description: string - id: string - } - run: Function -} - export interface PackageJSON { version: string } -export interface App { - name: string - pkg: string - - version: string - - icon: string - - open: (data: any) => Promise -} - export interface AppOpenedEvent extends CustomEvent { detail: { app: App @@ -50,10 +30,42 @@ export interface FlowWindowConfig { minHeight?: number } +export interface App { + meta: { + name: string + description: string + pkg: string + version: string + icon: string + } + + open: (data: any) => Promise +} + +export interface Plugin { + meta: { + name: string + description: string + pkg: string + version: string + icon?: string + } + + run: (element: HTMLDivElement) => void | Promise +} + export interface Apps { [key: string]: App } +export interface Plugins { + [key: string]: Plugin +} + export interface LoadedApp extends App { builtin: boolean } + +export interface LoadedPlugin extends Plugin { + builtin: boolean +} From ce965120cf1bf0fb32774a06258291a94547ea53 Mon Sep 17 00:00:00 2001 From: ThinLiquid Date: Wed, 18 Oct 2023 22:34:33 +0100 Subject: [PATCH 3/3] =?UTF-8?q?[=F0=9F=8E=A8]=20Fix=20ts-standard=20errors?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/preloader.ts | 2 +- src/statusbar.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/preloader.ts b/src/preloader.ts index 200a246..88dbcf1 100644 --- a/src/preloader.ts +++ b/src/preloader.ts @@ -7,7 +7,7 @@ class Preloader { this.element = document.createElement('preloader') this.element.innerHTML = ` - +
` diff --git a/src/statusbar.ts b/src/statusbar.ts index 521583a..37c8d6b 100644 --- a/src/statusbar.ts +++ b/src/statusbar.ts @@ -10,13 +10,13 @@ class StatusBar { document.body.appendChild(this.element) } - add (item: Plugin): void { + async add (item: Plugin): Promise { const element = document.createElement('div') element.setAttribute('data-toolbar-id', item.meta.pkg) this.element.appendChild(element) - item.run(element) + await item.run(element) } async init (): Promise { @@ -24,7 +24,7 @@ class StatusBar { for (const plugin of window.flow.plugins) { window.preloader.setStatus(`adding plugins to statusbar\n${plugin.meta.pkg}`) - this.add(plugin) + await this.add(plugin) } await window.preloader.setDone('plugins')