OwOS
- 6 Devlogs
- 11 Total hours
This is my very own OS that can be run in the web!
This is my very own OS that can be run in the web!
i’m turning 19 in a few hours so this is my last thingy :3
brave browser ate my cursor so i can’t really see where i’m clicking lol
completed BaSL integration: the window now scrolls automatically + i’ve improved the UX with a Send and Terminate button
moved enter key handling to JavaScript because for some reason, .NET doesn’t get the input value before you press enter (so the input was percieved as empty on keydown)
updated Nowotes with new file dialogs
took a bit to refactor the code, i wanted a common component that does most stuff
the SaveFileDialog and OpenFileDialog have only a few lines of code thanks to this
the dialogs don’t look amazing, yeah, but you can tell directories apart by their trailing slash
you can use the input field similarly to actual file dialogs:
.. (idk if the .. check works tbh)added an analog clock cuz i didn’t want to deal with window maximizing
tiny detail: usename is now in the meta menu, which looks similar to how KDE handles it
fixed file system restoration by using the location origin instad of the href
fixed task manager buttons not being able to minimize their respective window
terminal :333
i’ve added my very basic Bash-like shell project as a program!
since BaSL written in .NET, i can “just reference it,” and it works
(not every package works out of the box in Blazor WebAssembly)
on the left you can see the version without escape sequence parsing
on the right, it parsed the output properly
currently, it only supports setting/resetting bold mode and 8 types of foregrounds (black, red, green, yellow, blue, magenta, cyan, white)
for some reason, using an inline <pre> tag sometimes inserts a newline even though it’s not in the content string… idk 😭
the other feature i added in these 3 hours was cache-based file storage (yes, the Cache API)
it only saves files in the /home/user directory
the files will be loaded on startup
since there’s no filesystem watcher in BaSL, saving has to be manually triggered either via the terminal or from the meta menu
i’ve still yet to make it so concurrent sync operations cannot occur
it would also be nice to have sync -f so it rewrites the whole cache (mode changes are not detected yet)
for some reason, IJSStreamReference didn’t marshal properly in an object, so i tried use byte[] from an Uint8Array which also didn’t work… string it is, hopefully it doesn’t mess up binary content
gotta integrate the file system with Nowotes
i had a look at the guide, and decided that i don’t want to use z-index
instead, i use ObservableCollection.Move to bring a window to the front
window state stays intact because i specify @key
changing the window order has a slight side effect: the task manager (taskbar) is also reordered; ordering by Id fixes this issue (IDs are v7 Guids which start with a timestamp)
the welcome screen is now more descriptive
implemented the meta menu (start menu), it’s pretty simple atm, only includes desktop programs
the task manger now shows which window is focused (topmost and not minimized)
added a notepad with a simple textarea element
it saves data to localStorage
code is horrible but does it matter? x3
deployed to GitHub Pages, hopefully this will qualify for the mission
genuinely forgot some of the things i’ve done, probably styling
anyways, now you can open windows and close them properly!
i’ll be adding a few more desktop icons and apps
finally figured out the architecture i like
the WindowManager has an ObservableCollection, so it’ll notify other components if a window is added or removed automatically
the task manager (taskbar for losedows users) needs to be updated a second time because the window’s init method (which sets the title) only gets called the “next frame” (in Unity terms at least, idk how to say it lol)
gonna need a to add minimizing windows, and a “start menu”
i was also thinking of creating a simple notepad that saves content to local storage
was debating whether to use js interop to do window dragging, but plain JS is enough
layouts turned out to be wrong for windows, so i created a simple Window base component instead
window dragging now works
also added a date display
finally got something working, creating an OS using Blazor (yes, it will be painful)
i spent a lot of time trying to think about how to even start, then removing default assets, doing some basic styling
there is now a very basic taskbar with a working clock