-
Notifications
You must be signed in to change notification settings - Fork 0
/
out.js.map
7 lines (7 loc) · 98.3 KB
/
out.js.map
1
2
3
4
5
6
7
{
"version": 3,
"sources": ["modules/create-scene.js", "modules/command-line-interface/parse-line-command.js", "modules/command-line-interface/index.js", "modules/event-manager/index.js", "modules/hardware.js", "modules/graphical-user-interface/IconManager.js", "modules/graphical-user-interface/custom-window/get-ui.js", "modules/libs/get-random-string.js", "modules/libs/get-id.js", "modules/graphical-user-interface/custom-window/WindowBody.js", "modules/graphical-user-interface/custom-window/get-wrapper.js", "modules/graphical-user-interface/custom-window/WindowHeader.js", "modules/graphical-user-interface/custom-window/get-background.js", "modules/graphical-user-interface/custom-window/get-clicked-resizer.js", "modules/graphical-user-interface/custom-window/index.js", "modules/graphical-user-interface/theme.js", "modules/graphical-user-interface/ThemeManager.js", "modules/graphical-user-interface/WindowManager.js", "modules/graphical-user-interface/ContextMenuManager.js", "modules/graphical-user-interface/index.js", "modules/softwares/terminal.js", "modules/softwares/settings.js", "modules/software-manager.js", "modules/storage/index.js", "modules/file-system/constants.js", "modules/file-system/FileSystemObject.js", "modules/file-system/directory-manager.js", "modules/file-system/index.js", "modules/softwares/file-manager.js", "modules/softwares/dock/dock.ui.js", "modules/softwares/dock/dock.js", "modules/softwares/file-reader.js", "modules/softwares/desktop.js", "modules/softwares/window-creator.js", "modules/operating-system.js", "main.js"],
"sourcesContent": ["/**\n * Create a simple game scene.\n * This is an easy way to show something to the player,\n * generic html-related, not specific game/os-related.\n * @param {HTMLElement} child\n * @returns styled `HTMLDivElement`\n * @example```\n * import createScene from './path/to/create-scene'\n * const sceneContent = document.createElement('div')\n * sceneContent.innerText = 'hello world'\n * const scene = createScene(sceneContent)\n * document.body.append(scene)\n * ```\n */\nexport default function createScene(child) {\n const scene = document.createElement('div')\n\n scene.style.width = '100%'\n scene.style.height = '100%'\n scene.style.display = 'flex'\n scene.style.position = 'fixed'\n scene.style.alignItems = 'center'\n scene.style.justifyContent = 'center'\n\n scene.appendChild(child)\n\n return scene\n}\n", "function parseLineCommand(lineCommand) {\n const characters = lineCommand.split('')\n\n const words = []\n let word = ''\n let shouldSkipSpace = true\n\n /*\n flow:\n - shouldSkipSpace = true\n h - add to word\n - push to word. reset word\n \" - shouldSkipSpace = false, skip\n h - push to word\n - push to word\n a - push to word\n \" - shouldSkipSpace = true, skip\n */\n\n characters.forEach(character => {\n if (shouldSkipSpace && character === ' ') {\n words.push(word)\n word = ''\n } else if (shouldSkipSpace && character === '\"') {\n shouldSkipSpace = false\n } else if (shouldSkipSpace === false && character === '\"') {\n shouldSkipSpace = true\n } else {\n word += character\n }\n });\n /* last word push */\n words.push(word)\n word = ''\n\n return words\n}\n\nexport default parseLineCommand", "/* WIP */\nimport parseLineCommand from \"./parse-line-command\"\n\nfunction CommandLineInterface() {\n this.debug = false\n this.functionMap = {}\n this.register = function (key, value) {\n this.functionMap[key] = value\n }\n this.execute = function (...args) {\n if (args.length === 2) {\n this.executeByKey(args[0], args[1])\n } else {\n this.executeLineCommand(args[0])\n }\n }\n this.executeByKey = function (key, payload) {\n if (this.debug) console.log(`[${performance.now().toFixed(2)}] executing: ${key}`)\n if (!this.functionMap[key]) throw Error('Unknown function: ' + key)\n\n return this.functionMap[key](payload)\n }\n\n /**\n *\n * @param {string} lineCommand string command to execute\n */\n this.executeLineCommand = function (lineCommand) {\n const args = parseLineCommand(lineCommand)\n const functionKey = args[0]\n if (!this.functionMap[functionKey]) throw Error('Invalid line command: ' + functionKey)\n\n this.executeByKey(functionKey, args[1])\n }\n\n this.executeLater = function (key, delay) {\n const self = this\n setTimeout(() => {\n self.execute(key)\n }, delay)\n }\n\n return this\n}\n\nlet instance = new CommandLineInterface()\nconst getInstance = () => {\n if (!instance) instance = new CommandLineInterface()\n return instance\n}\n\nexport { CommandLineInterface, getInstance }", "function EventManager() {\n const eventsByKey = {\n // 'event_key': () => {}\n }\n\n const eventsByScope = {\n // 'scope': {\n // 'event_key': () => {}\n // }\n }\n\n /**\n * @method `on`\n * @param {string} key\n * @param {Function} fn\n */\n this.on = (key, fn) => eventsByKey[key] = fn\n\n /**\n * @method `off`\n * @param {string} key\n */\n this.off = (key) => delete eventsByKey[key]\n\n /**\n * @method `get`\n * @param {string} scope\n * @param {string} key - _optional_\n */\n this.get = (scope, key) => {\n if (!eventsByScope[scope]) this.set(scope)\n return key ? eventsByScope[scope][key] : eventsByScope[scope]\n }\n\n /**\n * @method `set`\n * @param {string} scope\n */\n this.set = (scope) => eventsByScope[scope] = {}\n\n /**\n * @method `isset`\n * @param {string} scope\n */\n this.isset = (scope) => eventsByScope[scope] ? true : false\n\n /**\n * @method `add`\n * @param {string} scope\n * @param {string} key\n * @param {Function} fn\n */\n this.add = (scope, key, fn) => {\n if (!eventsByScope[scope]) this.set(scope)\n eventsByScope[scope][key] = fn\n }\n\n /**\n * @method `remove`\n * @param {string} scope\n * @param {string} key\n */\n this.remove = (scope, key) => {\n if (!eventsByScope[scope]) this.set(scope)\n\n if (key) delete eventsByScope[scope][key]\n else delete eventsByScope[scope]\n }\n\n /**\n * check if a scope has event with provided key\n * @param {string} scope\n * @param {string} key\n * @returns boolean\n */\n this.has = (scope, key) => eventsByScope[scope] && eventsByScope[scope][key] ? true : false\n\n this.dispatch = (scope, event, data) => {\n for (let index = 0; index < Object.keys(eventsByScope[scope]).length; index++) {\n const key = Object.keys(eventsByScope[scope])[index];\n eventsByScope[scope][key]({ event, data })\n }\n }\n\n return this\n}\n\nlet instance = new EventManager()\nconst getInstance = () => {\n if (!instance) instance = new EventManager()\n return instance\n}\n\nexport { EventManager, getInstance }\n", "/* The hardware manager doesn't need an event manager,\nbut one is necessary to monitor hardware events across modules. */\nimport { getInstance as getEventManager } from \"./event-manager\"\n\nconst eventManager = getEventManager()\n\nfunction Hardware() {\n /* window events */\n eventManager.set('resize')\n /* keyboard events */\n eventManager.set('keyup')\n eventManager.set('keydown')\n /* mouse events */\n eventManager.set('mouseup')\n eventManager.set('mousedown')\n eventManager.set('mousemove')\n eventManager.set('mouseenter')\n eventManager.set('mouseleave')\n eventManager.set('contextmenu')\n}\n\n/**\n* @param {String} id event listener unique id\n* @param {String} event e.g. mousedown, keyup, etc.\n* @param {Function} cb event callback\n*/\nHardware.prototype.addListener = function (id, event, cb) {\n if (!event || !id || !cb) throw Error('Invalid arguments.', { event, id, cb })\n if (!eventManager.isset(event)) throw Error('Unknown event.', event)\n\n eventManager.add(event, id, cb)\n window.addEventListener(event, cb)\n}\n\n/**\n* @param {String} id event listener unique id\n* @param {String} event e.g. mousedown, keyup, etc.\n*/\nHardware.prototype.removeListener = function (id, event) {\n if (!event || !id) throw Error('Invalid arguments.', { event, id })\n if (!eventManager.isset(event)) throw Error('Unknown event.', event)\n if (!eventManager.has(event, id)) throw Error(`No ${event} listener with this id: ${id}`)\n\n /* remove attached event from window first */\n window.removeEventListener(event, eventManager.get(event, id))\n eventManager.remove(event, id)\n}\n\nlet instance = new Hardware()\nconst getInstance = () => {\n if (!instance) instance = new Hardware()\n return instance\n}\n\nexport { Hardware, getInstance }\n", "const TYPE_FILE = 'file'\nconst TYPE_FOLDER = 'folder'\nconst TYPE_APP = 'app'\n\nimport { getInstance as getHardware } from \"../hardware\"\n\nconst hardware = getHardware()\nconst eventScopesByKey = {\n mousemove: 'mousemove',\n mouseup: 'mouseup'\n}\n\nfunction IconManager() {\n this.createIcon = function (id, dom, type) {\n let isMouseDown = false\n let isDragging = false\n let startPoint = { x: 0, y: 0 }\n let distance = { x: 0, y: 0 }\n\n const rootDOM = document.createElement('div')\n const iconDOM = document.createElement('span')\n\n if (type === TYPE_FILE) iconDOM.innerHTML = '📄'\n else if (type === TYPE_FOLDER) iconDOM.innerHTML = '📁'\n else if (type === TYPE_APP) iconDOM.innerHTML = '◆'\n\n rootDOM.append(iconDOM)\n rootDOM.appendChild(dom)\n rootDOM.style.top = 0\n rootDOM.style.left = 0\n rootDOM.style.cursor = 'grab'\n rootDOM.style.userSelect = 'none'\n rootDOM.style.border = '1px solid'\n rootDOM.style.position = 'absolute'\n\n rootDOM.onmousedown = ev => {\n isMouseDown = true\n\n startPoint.x = ev.clientX\n startPoint.y = ev.clientY\n distance.x = Math.abs(startPoint.x - rootDOM.offsetLeft)\n distance.y = Math.abs(startPoint.y - rootDOM.offsetTop)\n\n rootDOM.style.cursor = 'grabbing'\n }\n hardware.addListener(id, eventScopesByKey.mousemove, ev => {\n if (!isMouseDown) return\n isDragging = true\n\n rootDOM.style.left = (ev.clientX - distance.x) + 'px'\n rootDOM.style.top = (ev.clientY - distance.y) + 'px'\n })\n hardware.addListener(id, eventScopesByKey.mouseup, () => {\n isMouseDown = false\n isDragging = false\n\n rootDOM.style.cursor = 'grab'\n })\n\n return rootDOM\n }\n}\n\nexport { IconManager }", "export function getUI({\n minWidth,\n minHeight,\n options,\n extraSize,\n}) {\n const rootDOM = document.createElement('div')\n /* Styles */\n rootDOM.style.padding = options.style.padding + 'px'\n rootDOM.style.boxSizing = 'border-box'\n rootDOM.style.userSelect = 'none'\n rootDOM.style.minWidth = minWidth + 'px'\n rootDOM.style.minHeight = minHeight + 'px'\n\n rootDOM.style.width = options.initialWidth\n ? options.initialWidth + extraSize + 'px'\n : minWidth + extraSize + 'px'\n rootDOM.style.height = minHeight + extraSize + 'px'\n\n /* Interaction */\n rootDOM.oncontextmenu = e => {\n e.preventDefault()\n e.stopPropagation()\n }\n\n return rootDOM\n}\n", "export function getRandomString() {\n return Math.random().toString(36).slice(2, 5)\n}", "import { getRandomString } from \"./get-random-string\"\n\nexport const MAX_INT = 9007199254740991\nexport const MAX_INT_MOD = -3\n\nlet id = 0\nlet string = getRandomString()\n\nexport function getId() {\n if (id > MAX_INT + MAX_INT_MOD) {\n id = 0\n string = getRandomString()\n }\n\n return ++id + string\n}\n", "function WindowBody(options) {\n this.$element = document.createElement('div')\n this.$element.style.padding = options.style.padding + 'px'\n this.$element.style.overflow = 'auto'\n this.$element.style.cursor = 'auto'\n this.$element.style.boxSizing = 'border-box'\n this.$element.style.height = '100%'\n\n this.reset = (dom) => {\n if (!dom) return\n this.$element.innerHTML = ''\n this.$element.appendChild(dom)\n }\n\n return this\n}\n\nexport { WindowBody }\n", "export function getWrapper({ minWidth, minHeight, options, extraSize }) {\n const dom = document.createElement('div')\n dom.style.minWidth = this.minWidth - options.style.padding * 2 + 'px'\n dom.style.minHeight = this.minHeight - options.style.padding * 2 + 'px'\n dom.style.width = this.minWidth + extraSize - options.style.padding * 2 + 'px'\n dom.style.height = this.minHeight + extraSize - options.style.padding * 2 + 'px'\n dom.style.position = 'absolute'\n dom.style.border = `${options.style.borderWidth}px ${options.style.borderStyle}`\n dom.style.overflow = 'hidden'\n\n return dom\n}", "function WindowHeader(args) {\n const options = {\n name: '',\n onmousedown: () => { },\n onclose: () => { },\n ...args,\n }\n\n this.$element = document.createElement('div')\n\n if (options.draggable) this.$element.style.cursor = 'grab'\n else this.$element.style.cursor = 'auto'\n this.$element.style.borderBottom = `${options.style.borderWidth}px ${options.style.borderStyle}`\n this.$element.style.padding = options.style.padding + 'px'\n\n const $closeButton = document.createElement('button')\n $closeButton.style.marginRight = options.style.padding + 'px'\n $closeButton.innerHTML = '✕'\n this.$element.appendChild($closeButton)\n\n this.$element.innerHTML += options.name\n\n this.$element.onmousedown = e => {\n options.onmousedown()\n\n if (options.draggable) {\n this.$element.style.cursor = 'grabbing'\n }\n }\n\n this.$element.onmouseup = e => {\n if (e.target.innerText === \"\u2715\") {\n options.onclose()\n return\n }\n\n if (options.draggable) {\n this.$element.style.cursor = 'grab'\n }\n }\n\n return this\n}\n\nexport { WindowHeader }\n", "export function getBackground() {\n const dom = document.createElement('div')\n dom.style.position = 'absolute'\n dom.style.left = 0\n dom.style.top = 0\n dom.style.right = 0\n dom.style.bottom = 0\n dom.style.zIndex = -1\n dom.style.opacity = 0.9\n return dom\n}\n", "/**\n * Get selected resizer\n * @param {Event} ev click event\n */\nexport function getClickedResizer(dom, threshold, x, y) {\n /* \"n\" or \"north\" means, mouse y is below top side and above {top side + cursor threshold} */\n const n = y > dom.offsetTop\n && y < dom.offsetTop + threshold,\n e = x < dom.offsetLeft + dom.offsetWidth\n && x > dom.offsetLeft + dom.offsetWidth - threshold,\n s = y < dom.offsetTop + dom.offsetHeight\n && y > dom.offsetTop + dom.offsetHeight - threshold,\n w = x > dom.offsetLeft\n && x < dom.offsetLeft + threshold\n\n return s && e ? 'se'\n : s && w ? 'sw'\n : n && e ? 'ne'\n : n && w ? 'nw'\n : n ? 'n'\n : e ? 'e'\n : s ? 's'\n : w ? 'w'\n : ''\n}\n", "'use strict';\n\nimport { getUI } from \"./get-ui\";\nimport { getId } from \"../../libs/get-id\";\nimport { WindowBody } from \"./WindowBody\";\nimport { getWrapper } from \"./get-wrapper\";\nimport { WindowHeader } from \"./WindowHeader\";\nimport { getBackground } from \"./get-background\";\nimport { getClickedResizer } from \"./get-clicked-resizer\";\n\nfunction CustomWindow(args, themeManager) {\n const self = this\n const options = {\n id: getId(),\n style: {\n padding: 8,\n borderWidth: 1,\n borderStyle: 'solid'\n },\n ...args\n }\n\n themeManager.addListener((theme) => {\n this.$background.style.backgroundColor = theme.style.body.backgroundColor\n })\n\n this.id = options.id\n this.name = options.name || this.id\n this.isHeaderMousedown = false\n this.minWidth = 150\n this.minHeight = 150\n const extraSize = 50\n this.padding = options.style.padding\n\n /**\n * Threshold in pixels for detecting resizer locations and change cursor.\n * - Min: 3\n * - Max: 10\n * - Bigger == easier to spot resizers & cost more CPU task.\n */\n this.cursorThreshold = options.style.padding // px\n this.eventListener = { close: [] }\n\n /* Definitions */\n this.$window = getUI({\n minWidth: this.minWidth,\n minHeight: this.minHeight,\n options,\n extraSize\n })\n this.$background = getBackground()\n this.$wrapper = getWrapper({\n minWidth: this.minWidth,\n minHeight: this.minHeight,\n options,\n extraSize\n })\n this.$wrapper.appendChild(this.$background)\n this.$window.appendChild(this.$wrapper)\n\n this.$background.style.backgroundColor = themeManager.getTheme().style.body.backgroundColor\n\n /* Header */\n this.header = new WindowHeader({\n ...options,\n name: this.name,\n onmousedown: () => this.isHeaderMousedown = true,\n onclose: handleClose\n })\n this.$wrapper.appendChild(this.header.$element)\n\n /* Body */\n this.body = new WindowBody(options)\n this.$wrapper.appendChild(this.body.$element)\n\n function handleClose() {\n self.$window.remove()\n\n self.eventListener.close.forEach(listener => {\n listener()\n });\n }\n\n return this\n}\n\nCustomWindow.prototype.addEventListener = function (eventKey, fn) {\n this.eventListener[eventKey].push(fn)\n}\n\nCustomWindow.prototype.getClickedResizer = function (x, y) {\n return getClickedResizer(this.$window, this.cursorThreshold, x, y)\n}\n\nCustomWindow.prototype.setContent = function (element) {\n this.body.reset(element)\n}\n\nCustomWindow.prototype.finalize = function () {\n this.$wrapper.style.width = this.$window.offsetWidth - this.padding * 2 + 'px'\n this.$wrapper.style.height = this.$window.offsetHeight - this.padding * 2 + 'px'\n\n this.body.$element.style.maxHeight = this.$wrapper.offsetHeight - this.header.$element.offsetHeight + 'px'\n}\n\nexport { CustomWindow }\n", "const darkTheme = {\n name: 'dark',\n backgroundColor: '#222222',\n borderWidth: 1, //px\n borderStyle: 'solid',\n style: {\n body: {\n backgroundColor: '#222222',\n color: '#ffffff',\n fontFamily: \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif\"\n },\n button: {\n cursor: 'pointer',\n },\n }\n}\n\nconst lightTheme = {\n name: 'light',\n backgroundColor: '#ffffff',\n borderWidth: 1, //px\n borderStyle: 'solid',\n style: {\n body: {\n backgroundColor: '#ffffff',\n color: '#222222',\n fontFamily: \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif\"\n },\n button: {\n cursor: 'pointer',\n },\n }\n}\n\nexport const themeMap = {\n dark: darkTheme,\n light: lightTheme\n}\n", "import { themeMap } from \"./theme\"\n\nconst HEAD = document.head\nconst BODY = document.body\n\nfunction ThemeManager() {\n let theme = null\n this.themeListeners = []\n\n function generateStyleDOM(theme) {\n const style = document.createElement('style')\n\n for (let [selector, selectorValue] of Object.entries(theme.style)) {\n if (selector === 'body') {\n for (let [prop, propValue] of Object.entries(selectorValue)) {\n BODY.style[prop] = propValue\n }\n }\n else if (selector === 'button') {\n let buttonStyle = ''\n for (let [prop, propValue] of Object.entries(selectorValue)) {\n buttonStyle += `${toKebabCase(prop)}: ${propValue}; `\n }\n style.innerHTML += `button { ${buttonStyle} }`\n }\n }\n\n return style\n }\n\n this.getTheme = () => theme\n\n this.setTheme = function (newTheme, callback) {\n if (!newTheme) throw Error('Unknown newTheme', newTheme)\n\n /* allow theme to be a key of themeMap instead of a theme object */\n if (typeof newTheme === 'string' && themeMap[newTheme]) {\n this.setTheme(themeMap[newTheme])\n return\n }\n\n /* remove existing theme style */\n if (theme !== null) HEAD.removeChild(theme.$style)\n\n /* generate style from theme */\n const style = generateStyleDOM(newTheme)\n\n /* finally, set new theme */\n theme = { ...newTheme, $style: style }\n HEAD.appendChild(style)\n\n this.notify(theme)\n\n if (callback) callback(theme)\n }\n\n this.addListener = (fn) => {\n this.themeListeners.push(fn)\n }\n\n this.notify = (theme) => {\n this.themeListeners.forEach(fn => fn(theme))\n }\n\n this.setTheme('dark')\n}\n\nfunction toKebabCase(str) {\n return str.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\n\nlet instance = new ThemeManager()\nconst getInstance = () => {\n if (!instance) instance = new ThemeManager()\n return instance\n}\n\nexport { ThemeManager, getInstance }\n", "import { CustomWindow } from \"./custom-window\"\nimport { getInstance as getHardware } from \"../hardware\"\nimport { getInstance as getThemeManager } from \"./ThemeManager\"\n\nconst hardware = getHardware()\nconst themeManager = getThemeManager()\n\nconst BODY = document.body\nconst eventScopesByKey = {\n mousemove: 'mousemove',\n mouseup: 'mouseup'\n}\n\nfunction WindowManager() {\n const self = this\n const windowByName = {}\n\n this.sendToTop = function (customWindow) {\n if (!customWindow) return\n\n /* Decrease all windows zIndex,\n increase clicked window's zIndex */\n for (let [, v] of Object.entries(windowByName)) {\n const parsed = parseInt(v.$window.style.zIndex)\n if (parsed > 1) v.$window.style.zIndex = parsed - 1\n }\n\n customWindow.$window.style.zIndex = 5\n }\n\n function initWindowInteraction(customWindow, options = {}) {\n if (!customWindow) throw Error('Unknown customWindow', customWindow)\n const $window = customWindow.$window\n const $wrapper = customWindow.$wrapper\n $window.style.position = 'absolute'\n\n const { resizeable, draggable, style = { padding: 16 } } = options\n\n let startPoint = { x: 0, y: 0 }\n let distance = { x: 0, y: 0 }\n let startDimension = { w: 0, h: 0 }\n let isMouseDown = false\n let isResizing = false\n let isDragging = false\n let resizePoint = ''\n\n const prepareForInteraction = ev => {\n isMouseDown = true\n\n self.sendToTop(customWindow)\n\n startPoint.x = ev.clientX\n startPoint.y = ev.clientY\n startDimension.w = $window.offsetWidth\n startDimension.h = $window.offsetHeight\n distance.x = Math.abs(startPoint.x - $window.offsetLeft)\n distance.y = Math.abs(startPoint.y - $window.offsetTop)\n resizePoint = customWindow.getClickedResizer(ev.clientX, ev.clientY)\n }\n\n const getProperCursor = ev => {\n if (isResizing || isDragging) return\n\n const n = ev.clientY > $window.offsetTop\n && ev.clientY < $window.offsetTop + customWindow.cursorThreshold,\n e = ev.clientX < $window.offsetLeft + $window.offsetWidth\n && ev.clientX > $window.offsetLeft + $window.offsetWidth - customWindow.cursorThreshold,\n s = ev.clientY < $window.offsetTop + $window.offsetHeight\n && ev.clientY > $window.offsetTop + $window.offsetHeight - customWindow.cursorThreshold,\n w = ev.clientX > $window.offsetLeft\n && ev.clientX < $window.offsetLeft + customWindow.cursorThreshold\n\n if ((n && w) || (s && e)) {\n $window.style.cursor = 'nwse-resize'\n return\n } else if ((n && e) || (s && w)) {\n $window.style.cursor = 'nesw-resize'\n return\n } else if (e || w) {\n $window.style.cursor = 'col-resize'\n return\n } else if (n || s) {\n $window.style.cursor = 'row-resize'\n return\n }\n $window.style.cursor = 'auto'\n }\n\n /* warning: this function below called on every mousemove on window */\n const dragAndResize = e => {\n if (!isMouseDown) return\n\n if (customWindow.isHeaderMousedown) {\n if (!draggable) return\n\n $window.style.left = (e.clientX - distance.x) + 'px'\n $window.style.top = (e.clientY - distance.y) + 'px'\n } else {\n if (!resizeable) return\n\n if (resizePoint.includes('e')) {\n $window.style.width = (startDimension.w - (startPoint.x - e.clientX)) + 'px'\n $wrapper.style.width = (startDimension.w - (startPoint.x - e.clientX)) - customWindow.padding * 2 + 'px'\n } else if (resizePoint.includes('w')) {\n if (e.clientX - distance.x < startPoint.x + startDimension.w - style.padding * 2 - customWindow.cursorThreshold) {\n if ((startDimension.w + (startPoint.x - e.clientX)) - customWindow.minWidth > 0) {\n $window.style.left = (e.clientX - distance.x) + 'px'\n $window.style.width = (startDimension.w + (startPoint.x - e.clientX)) + 'px'\n $wrapper.style.width = (startDimension.w + (startPoint.x - e.clientX)) - customWindow.padding * 2 + 'px'\n }\n }\n }\n\n if (resizePoint.includes('s')) {\n $window.style.height = (startDimension.h - (startPoint.y - e.clientY)) + 'px'\n $wrapper.style.height = (startDimension.h - (startPoint.y - e.clientY)) - customWindow.padding * 2 + 'px'\n } else if (resizePoint.includes('n')) {\n if (e.clientY - distance.y < startPoint.y + startDimension.h - style.padding * 2 - customWindow.cursorThreshold) {\n if ((startDimension.h + (startPoint.y - e.clientY)) - customWindow.minHeight > 0) {\n $window.style.top = (e.clientY - distance.y) + 'px'\n $window.style.height = (startDimension.h + (startPoint.y - e.clientY)) + 'px'\n $wrapper.style.height = (startDimension.h + (startPoint.y - e.clientY)) - customWindow.padding * 2 + 'px'\n }\n }\n }\n\n customWindow.body.$element.style.maxHeight = $wrapper.offsetHeight - customWindow.header.$element.offsetHeight + 'px'\n }\n }\n\n $window.onmousedown = prepareForInteraction\n if (resizeable) $window.onmousemove = getProperCursor\n\n /* [side-effects] add custom window's listener to UI manager window event listeners */\n hardware.addListener(`customWindow_${customWindow.id}`, eventScopesByKey.mousemove, dragAndResize)\n hardware.addListener(`customWindow_${customWindow.id}`, eventScopesByKey.mouseup, () => {\n isMouseDown = false\n isResizing = false\n isDragging = false\n customWindow.isHeaderMousedown = false\n })\n }\n\n /**\n *\n * @param {Object} args\n * draggable, resizeable,\n * style.padding, style.borderWidth, style.borderStyle\n * @returns\n */\n this.createWindow = function (args) {\n const options = {\n draggable: false,\n resizeable: false,\n theme: themeManager.getTheme(),\n ...args\n }\n\n /* Definition */\n const customWindow = new CustomWindow(options, themeManager)\n\n if (windowByName[customWindow.name]) return;\n\n windowByName[customWindow.name] = customWindow\n\n if (options.draggable || options.resizeable) {\n initWindowInteraction(customWindow, options)\n }\n\n /* Also remove custom window's listeners when the element destroyed */\n customWindow.addEventListener('close', function () {\n self.destroyWindow(customWindow.name)\n })\n\n BODY.appendChild(customWindow.$window)\n customWindow.finalize()\n\n return customWindow\n }\n\n this.destroyWindow = function (name) {\n const customWindow = windowByName[name]\n\n /* side-effects */\n for (let index = 0; index < Object.keys(eventScopesByKey).length; index++) {\n const scopeKey = Object.keys(eventScopesByKey)[index];\n hardware.removeListener(`customWindow_${customWindow.id}`, scopeKey)\n }\n\n delete windowByName[name]\n }\n\n this.closeAllWindow = function () {\n for (let [, v] of Object.entries(windowByName)) {\n v.$window.remove()\n this.destroyWindow(v.name)\n }\n }\n\n this.isWindowOpened = function (name) {\n return windowByName[name] !== undefined\n }\n\n this.setWindowContent = function (name, element) {\n const customWindow = windowByName[name]\n if (customWindow) customWindow.setContent(element)\n }\n\n this.notify = (theme) => {\n /* assumes all windows have `setTheme` method */\n for (let [, v] of Object.entries(windowByName)) {\n v.setTheme(theme)\n }\n }\n\n}\n\nexport { WindowManager }", "import { getInstance as getHardware } from \"../hardware\";\nimport { getInstance as getThemeManager } from \"./ThemeManager\";\n\nconst hardware = getHardware()\nconst themeManager = getThemeManager()\n\nconst BODY = document.body\n\nfunction ContextMenuManager() {\n this.$contextMenu = undefined;\n this.$contextMenus = [];\n this.getContextMenu = () => { }\n\n this.showContextMenu = function (x, y, content) {\n const $menu = document.createElement('div')\n $menu.style.border = '1px solid'\n $menu.style.padding = '8px'\n $menu.style.position = 'absolute'\n $menu.style.zIndex = 9\n $menu.style.left = x + 'px'\n $menu.style.top = y + 'px'\n\n try {\n $menu.style.backgroundColor = themeManager.getTheme().style.body.backgroundColor\n } catch (error) {\n console.error(error)\n }\n\n $menu.onclick = () => this.destroyContextMenu()\n $menu.oncontextmenu = (e) => {\n e.preventDefault()\n e.stopPropagation()\n }\n\n if (content) {\n content.forEach(element => {\n element.style.display = 'block'\n $menu.appendChild(element)\n });\n } else {\n this.$contextMenus.forEach(element => {\n $menu.appendChild(element)\n });\n }\n\n this.$contextMenu = $menu\n\n BODY.appendChild(this.$contextMenu)\n }\n\n this.moveContextMenu = function (x, y) {\n this.$contextMenu.style.left = x + 'px'\n this.$contextMenu.style.top = y + 'px'\n }\n\n this.destroyContextMenu = function () {\n if (!this.$contextMenu) return\n this.$contextMenu.remove()\n this.$contextMenu = undefined\n }\n\n this.addToContextMenu = function (dom) {\n dom.style.display = 'block'\n this.$contextMenus.push(dom)\n }\n\n this.init = function () {\n hardware.addListener('UI', 'contextmenu', e => {\n e.preventDefault()\n\n this.getContextMenu(e.target)\n\n if (this.$contextMenu) {\n this.moveContextMenu(e.clientX, e.clientY)\n return\n }\n\n this.showContextMenu(e.clientX, e.clientY)\n })\n\n hardware.addListener('UI', 'mousedown', e => {\n if (!this.$contextMenu || e.target === this.$contextMenu) return\n if (this.$contextMenu.contains(e.target)) return\n this.destroyContextMenu()\n })\n }\n\n}\n\nexport { ContextMenuManager }", "/**\n * features:\n * - theme switching\n * - custom context menu\n * - customWindow management\n * - icon management?\n */\n\n'use strict';\n\nimport { IconManager } from \"./IconManager\";\nimport { WindowManager } from \"./WindowManager\";\nimport { ContextMenuManager } from \"./ContextMenuManager\";\nimport { getInstance as getThemeManager } from \"./ThemeManager\";\n\nconst iconManager = new IconManager()\nconst themeManager = getThemeManager()\nconst windowManager = new WindowManager()\nconst contextMenuManager = new ContextMenuManager()\n\nfunction GraphicalUserInterface() {\n this.init = () => {\n this.setTheme('dark')\n contextMenuManager.init()\n }\n\n return this\n}\n\n/* facades */\nGraphicalUserInterface.prototype.getTheme = themeManager.getTheme.bind(themeManager)\nGraphicalUserInterface.prototype.createIcon = iconManager.createIcon.bind(iconManager)\nGraphicalUserInterface.prototype.sendToTop = windowManager.sendToTop.bind(windowManager)\nGraphicalUserInterface.prototype.createWindow = windowManager.createWindow.bind(windowManager)\nGraphicalUserInterface.prototype.addThemeListener = themeManager.addListener.bind(themeManager)\nGraphicalUserInterface.prototype.closeAllWindow = windowManager.closeAllWindow.bind(windowManager)\nGraphicalUserInterface.prototype.setWindowContent = windowManager.setWindowContent.bind(windowManager)\nGraphicalUserInterface.prototype.showContextMenu = contextMenuManager.showContextMenu.bind(contextMenuManager)\nGraphicalUserInterface.prototype.setTheme = (newTheme) => themeManager.setTheme(newTheme, (theme) => {\n /* Side effects */\n windowManager.notify(theme)\n})\n\nlet instance = new GraphicalUserInterface()\nconst getInstance = () => {\n if (!instance) instance = new GraphicalUserInterface()\n return instance\n}\n\nexport { GraphicalUserInterface, getInstance }\n", "import { getInstance as getCLI } from '../command-line-interface'\nimport { getInstance as getUI } from '../graphical-user-interface'\n\nconst ui = getUI()\nconst cli = getCLI()\n\nfunction Terminal() {\n this.name = 'Terminal'\n const logs = []\n const $logs = document.createElement('div')\n\n cli.register('echo', (payload) => {\n logs.push(payload)\n renderLogs()\n })\n\n function renderLogs() {\n $logs.innerHTML = ''\n for (let index = logs.length-1; index >= 0; index--) {\n const log = logs[index];\n $logs.innerHTML += `${log}<br>`\n }\n }\n\n this.getContent = function () {\n const $content = document.createElement('div')\n const input = document.createElement('input')\n input.placeholder = 'echo \"hello world\"'\n input.addEventListener('keydown', e => {\n if (e.key === 'Enter') {\n console.log(input.value)\n cli.execute(input.value)\n input.value = ''\n }\n })\n\n $content.append(input)\n $content.append($logs)\n return $content\n }\n\n this.start = () => {\n const customWindow = ui.createWindow({ name: this.name, resizeable: true, draggable: true })\n\n ui.sendToTop(customWindow)\n\n const $content = this.getContent()\n\n ui.setWindowContent(this.name, $content)\n }\n}\n\nexport { Terminal }\n", "import { getInstance as getGUI } from \"../graphical-user-interface\"\n\nconst ui = getGUI()\n\nfunction Settings() {\n this.name = 'Settings'\n\n this.getContent = function () {\n const $content = document.createElement('div')\n\n const $darkTheme = document.createElement('button')\n $darkTheme.onclick = function () {\n ui.setTheme('dark')\n }\n $darkTheme.innerHTML = 'Change to Dark Theme'\n $content.appendChild($darkTheme)\n\n const $lightTheme = document.createElement('button')\n $lightTheme.onclick = function () {\n ui.setTheme('light')\n }\n $lightTheme.innerHTML = 'Change to Light Theme'\n $content.appendChild($lightTheme)\n\n return $content\n }\n\n this.start = () => {\n const customWindow = ui.createWindow({ name: this.name, resizeable: true, draggable: true })\n\n ui.sendToTop(customWindow)\n\n const $content = this.getContent()\n\n ui.setWindowContent(this.name, $content)\n }\n}\n\nexport { Settings }\n", "'use strict'\n\n/**\n * @type SoftwareManager\n */\nlet instance\n\nfunction SoftwareManager() {\n this.accessKey = 'software'\n this.software = new Map()\n this.listener = {\n install: []\n }\n}\n\n/**\n * installing a software (NOT auto-run it)\n * @param {Software} software\n */\nSoftwareManager.prototype.install = function (software) {\n if (!software) throw Error('Undefined software.')\n if (!software.name) throw Error('Software name is required.')\n if (!software.start) throw Error('Software start function is required.')\n\n this.software.set(software.name, software)\n\n this.listener.install.forEach(fn => fn());\n}\n\nSoftwareManager.prototype.getAllExcepts = function (filter) {\n let softwares = []\n for (const [key, value] of this.software) {\n if (!filter.includes(key)) softwares.push(value)\n }\n return softwares\n}\n\nSoftwareManager.prototype.getAllExcept = function (name) {\n let softwares = []\n for (const [key, value] of this.software) {\n if (key !== name) softwares.push(value)\n }\n return softwares\n}\n\nSoftwareManager.prototype.get = function (name) {\n if (!name || !this.software.get(name)) throw Error('Unknown software.')\n return this.software.get(name)\n}\n\nSoftwareManager.prototype.run = function (key, payload) {\n const s = this.software.get(key)\n if (!s) throw Error('unknown software:', key)\n s.start(payload)\n}\n\nSoftwareManager.prototype.addEventListener = function (event, cb) {\n if (!this.listener[event]) throw Error('Unknown event.', event)\n\n this.listener[event].push(cb)\n}\n\n/**\n * @returns SoftwareManager instance\n */\nconst getInstance = () => {\n if (!instance) instance = new SoftwareManager()\n return instance\n}\n\nexport { SoftwareManager, getInstance }", "function CustomStorage() {\n const data = new Map()\n let size = 0\n\n this.add = function (k, v) {\n if (!k || !v) throw Error('Invalid arguments.', { k, v })\n\n if (v.size) size += v.size\n\n if (!data.has(k)) {\n data.set(k, v)\n } else {\n const pathObject = data.get(k)\n\n if (!pathObject.data) return\n\n /** pathObject is a directory with data prop */\n if (pathObject.size && v.size) pathObject.size += v.size\n pathObject.data.set(v.id, v)\n }\n }\n\n this.getDirectories = (path, result) => {\n data.forEach((v, k) => {\n if (path === '/') {\n /* is root.\n return directory with path like this: \"/dir/\" (two slashes) */\n if ((k.match(/\\//g) || []).length === 2) result.set(k, v)\n } else {\n if (k !== path && k.startsWith(path)) {\n /* return directory with path like this: \"dir/\" (one slash) */\n if ((k.replace(path, '').match(/\\//g) || []).length === 1) {\n result.set(k, v)\n }\n }\n }\n })\n }\n\n this.getFiles = (path, result) => {\n const pathObject = data.get(path)\n if (!pathObject) return\n if (!pathObject.data) return\n pathObject.data.forEach(d => result.set(d.id, d))\n }\n\n this.get = (k) => data.get(k)\n\n this.getWithPath = function (path) {\n if (!path) throw Error('Invalid path.', path)\n\n let result = new Map()\n this.getDirectories(path, result)\n this.getFiles(path, result)\n\n return result\n }\n\n this.deletePathData = (path, key) => data.get(path).data.delete(key)\n this.getSize = () => size\n this.set = (k, v) => data.set(k, v)\n this.deleteByPath = (path) => data.delete(path)\n\n this.bulkModify = function (parameter, modifier) {\n data.forEach((v, k) => {\n if (!k.startsWith(parameter)) return\n\n v.path = modifier + k.substring(1)\n data.set(v.path, v)\n data.delete(k)\n })\n }\n\n this.delete = function (object) {\n if (object.type === 'directory') {\n data.delete(object.path)\n } else {\n const pathObject = data.get(object.path)\n if (pathObject.size && object.size) pathObject.size -= object.size\n pathObject.data.delete(object.id)\n }\n }\n\n this.log = () => console.info(data)\n\n /* aliases */\n this.write = this.set.bind(this)\n this.read = this.get.bind(this)\n}\n\n\nconst storage = new CustomStorage()\nexport { CustomStorage, storage }\n", "export const NAMESPACE = 'CustomFileSystem'\n\nexport const DEFAULT_SIZE = 1\n\nexport const ADD_TO_STORAGE = 'addToStorage'\nexport const CREATE_FILE = 'createFile'\nexport const CREATE_DIRECTORY = 'createDirectory'\nexport const DELETE = 'delete'\nexport const MOVE = 'move'\n\nexport const TYPE_FILE = 'file'\nexport const TYPE_DIRECTORY = 'directory'", "import { DEFAULT_SIZE } from \"./constants\"\nimport { getId } from \"../libs/get-id\"\n\nfunction FileSystemObject(options = {}) {\n this.size = DEFAULT_SIZE\n this.type = options.type || 'file'\n\n this.id = this.type.slice(0, 1) + getId()\n this.name = options.name || this.type\n\n this.path = this.type === 'directory' ?\n options.path + this.id + '/'\n : options.path\n\n return this\n}\n\nexport { FileSystemObject }\n", "import { FileSystemObject } from \"./FileSystemObject\"\nimport { CREATE_DIRECTORY, NAMESPACE } from \"./constants\"\nimport { getInstance as getEventManager } from \"../event-manager\"\n\nconst eventManager = getEventManager()\n\nfunction DirectoryManager() {\n this.create = function (options = {}) {\n const data = {\n ...new FileSystemObject({ type: 'directory', ...options }),\n data: new Map(),\n }\n eventManager.dispatch(NAMESPACE, CREATE_DIRECTORY, data)\n return data\n }\n\n this.createSystemDirectory = function (name) {\n return {\n ...new FileSystemObject({ type: 'directory' }),\n path: '/' + name + '/',\n name,\n data: new Map(),\n isSystemFile: true\n }\n }\n\n this.addListener = (namespace, directory, fn) => {\n eventManager.add(`${NAMESPACE}_dir`, `${namespace}_${directory}`, fn)\n }\n\n return this\n}\n\nlet instance = new DirectoryManager()\nconst getInstance = () => {\n if (!instance) instance = new DirectoryManager()\n return instance\n}\n\nexport { DirectoryManager, getInstance }\n", "import { storage } from \"../storage\"\nimport { FileSystemObject } from \"./FileSystemObject\"\nimport { getInstance as getEventManager } from '../event-manager'\nimport { getInstance as getDirectoryManager } from \"./directory-manager\"\nimport { MOVE, CREATE_DIRECTORY, CREATE_FILE, ADD_TO_STORAGE, DELETE, NAMESPACE, TYPE_DIRECTORY, TYPE_FILE } from './constants'\n\nconst eventManager = getEventManager()\nconst directoryManager = getDirectoryManager()\n\neventManager.set(NAMESPACE)\nfunction dispatch(event, data) {\n eventManager.dispatch(NAMESPACE, event, data)\n return data\n}\n\nfunction CustomFileSystem() {\n this.read = (d) => console.info(d)\n this.isSystemFile = (d) => d.isSystemFile\n this.addListener = (k, v) => eventManager.add(NAMESPACE, k, v)\n\n this.createFile = function (options = {}) {\n return dispatch(CREATE_FILE, new FileSystemObject({\n type: 'file',\n ...options\n }))\n }\n\n this.getParentPath = (path) => {\n const splitted = path.split('/')\n splitted.pop()\n if (splitted.length > 1) splitted.pop()\n\n return splitted.join('/') + '/'\n }\n\n this.rename = function (d, newName) {\n d.name = newName\n return d\n }\n\n this.addToStorage = function (object = {}) {\n storage.add(object.path, dispatch(ADD_TO_STORAGE, object))\n }\n\n this.move = function (toBeMoved, target) {\n if (target.type !== TYPE_DIRECTORY || toBeMoved === target) return\n\n if (toBeMoved.type === TYPE_FILE) {\n target.data.set(toBeMoved.id, { ...toBeMoved, path: target.path })\n storage.deletePathData(toBeMoved.path, toBeMoved.id)\n } else {\n storage.bulkModify(toBeMoved.path, target.path)\n }\n\n return dispatch(MOVE, { toBeMoved, target })\n }\n\n this.delete = function (object = {}) {\n storage.delete(dispatch(DELETE, object))\n }\n\n /* Initialize storage root directory */\n storage.add('/', {\n ...new FileSystemObject({ type: 'directory' }),\n path: '/',\n name: 'root',\n data: new Map(),\n isSystemFile: true\n })\n}\n\n/* facades */\nCustomFileSystem.prototype.get = storage.get.bind(storage)\nCustomFileSystem.prototype.set = storage.set.bind(storage)\nCustomFileSystem.prototype.getWithPath = storage.getWithPath.bind(storage)\nCustomFileSystem.prototype.createDirectory = directoryManager.create.bind(directoryManager)\nCustomFileSystem.prototype.createSystemDirectory = directoryManager.createSystemDirectory.bind(directoryManager)\nCustomFileSystem.prototype.listenToDirectory = directoryManager.addListener.bind(directoryManager)\n\nlet instance = new CustomFileSystem()\nconst getInstance = () => {\n if (!instance) instance = new CustomFileSystem()\n return instance\n}\n\nexport { MOVE, DELETE, CREATE_FILE, CREATE_DIRECTORY, ADD_TO_STORAGE }\nexport { CustomFileSystem, getInstance }\n", "import { getInstance as getGUI } from \"../graphical-user-interface\"\nimport { getInstance as getFS } from \"../file-system\"\n\nconst fs = getFS()\nconst ui = getGUI()\n\nfunction FileManager(os) {\n const self = this\n this.name = 'File Manager'\n\n this.currentPath = '/'\n\n this.getHead = () => {\n const $head = document.createElement('div')\n $head.style.marginBottom = '8px'\n\n /* Create file */\n const $createFileButton = document.createElement('button')\n $createFileButton.innerHTML = 'create file'\n $createFileButton.onclick = () => {\n const file = fs.createFile({\n name: null,\n path: this.currentPath\n })\n\n fs.addToStorage(file)\n\n this.reload()\n }\n $head.appendChild($createFileButton)\n\n /* Create directory */\n const $createDirectory = document.createElement('button')\n $createDirectory.innerHTML = 'create directory'\n $createDirectory.onclick = () => {\n const directory = fs.createDirectory({\n name: null,\n path: this.currentPath\n })\n\n fs.addToStorage(directory)\n\n this.reload()\n }\n $head.appendChild($createDirectory)\n\n /* Back button and breadcrumb */\n const $back = document.createElement('button')\n $back.innerHTML = 'back'\n $back.onclick = () => {\n this.currentPath = fs.getParentPath(this.currentPath)\n\n this.reload()\n }\n const $path = document.createElement('p')\n $path.innerHTML = this.currentPath\n $head.appendChild($back)\n $head.appendChild($path)\n\n return $head\n }\n\n this.getBody = () => {\n const $body = document.createElement('div')\n const $table = this.generateTable()\n $body.appendChild($table)\n\n return $body\n }\n\n this.getRoot = () => {\n const $root = document.createElement('div')\n const $head = this.getHead()\n const $body = this.getBody()\n\n $root.appendChild($head)\n $root.appendChild($body)\n\n return $root\n }\n\n this.reload = () => {\n const $root = this.getRoot()\n ui.setWindowContent(this.name, $root)\n }\n\n this.openDirectory = (directory) => {\n this.currentPath = directory.path\n this.reload()\n }\n\n function createTd() {\n const td = document.createElement('td')\n td.style.border = '1px solid'\n td.style.padding = '4px'\n return td\n }\n\n function createTh(text) {\n const th = document.createElement('th')\n th.style.border = '1px solid'\n th.style.padding = '4px'\n th.innerHTML = text\n return th\n }\n\n this.generateTable = () => {\n const data = fs.getWithPath(this.currentPath)\n const $table = document.createElement('table')\n $table.style.borderCollapse = 'collapse'\n $table.style.width = '100%'\n\n const $thead = document.createElement('thead')\n const $tr = document.createElement('tr')\n $tr.appendChild(createTh('ID'))\n $tr.appendChild(createTh('Name'))\n $tr.appendChild(createTh('Type'))\n $tr.appendChild(createTh('Size'))\n $thead.appendChild($tr)\n $table.appendChild($thead)\n\n const $tbody = document.createElement('tbody')\n $table.appendChild($tbody)\n\n let dragged\n\n data.forEach(d => {\n const tr = document.createElement('tr')\n\n if (!d.isSystemFile) {\n tr.draggable = true\n\n tr.ondragstart = () => dragged = d\n }\n\n tr.ondragenter = e => {\n tr.style.backgroundColor = 'yellow'\n }\n\n tr.ondragleave = e => {\n tr.style.backgroundColor = 'initial'\n }\n\n /* enable drop */\n tr.ondragover = e => e.preventDefault()\n tr.ondrop = () => {\n tr.style.backgroundColor = 'initial'\n\n /* Prevent dropping in itself */\n if (!dragged.path.includes(d.path)) {\n fs.move(dragged, d)\n this.reload()\n }\n }\n\n tr.onmousedown = function (e) {\n // check if right click\n if (e.button === 2) {\n tr.style.backgroundColor = '#666'\n setTimeout(() => {\n tr.style.backgroundColor = 'initial'\n }, 200);\n } else {\n tr.style.backgroundColor = '#666'\n }\n }\n tr.onmouseup = function (e) {\n tr.style.backgroundColor = 'initial'\n }\n\n const tdId = createTd()\n const tdType = createTd()\n const tdName = createTd()\n const tdSize = createTd()\n\n tr.oncontextmenu = function (e) {\n e.preventDefault()\n\n const $contextMenus = []\n\n const $open = document.createElement('button')\n $open.innerHTML = 'Open'\n $open.onclick = () => {\n if (d.type === 'file') {\n os.run('File Reader', d)\n } else if (d.type === 'directory') {\n self.openDirectory(d)\n }\n }\n $contextMenus.push($open)\n\n if (!fs.isSystemFile(d)) {\n const $rename = document.createElement('button')\n $rename.innerHTML = 'Rename'\n const handleSubmit = (e) => {\n const newData = fs.rename(d, e.target.innerHTML)\n tdName.contentEditable = false\n fs.set(d.id, newData)\n }\n $rename.onclick = () => {\n tdName.contentEditable = true\n tdName.focus()\n\n setTimeout(() => {\n const range = document.createRange();\n range.selectNodeContents(tdName)\n var sel = window.getSelection();\n sel.removeAllRanges();\n sel.addRange(range);\n }, 50)\n\n tdName.onkeydown = e => {\n if (e.key === 'Enter') {\n e.target.blur()\n }\n }\n tdName.onblur = e => handleSubmit(e)\n }\n $contextMenus.push($rename)\n\n const $delete = document.createElement('button')\n $delete.innerHTML = 'Delete'\n $delete.onclick = () => {\n fs.delete(d)\n self.reload()\n }\n $contextMenus.push($delete)\n }\n\n ui.showContextMenu(e.clientX, e.clientY, $contextMenus)\n }\n\n tr.ondblclick = () => {\n if (d.type === 'file') {\n /* @todo @fixme */\n os.run('File Reader', d)\n } else if (d.type === 'directory') {\n self.openDirectory(d)\n }\n }\n\n tdId.innerHTML = d.id\n tdType.innerHTML = d.type\n tdName.innerHTML = d.isSystemFile ? '.' + d.name : d.name\n tdSize.innerHTML = d.size\n\n tr.appendChild(tdId)\n tr.appendChild(tdName)\n tr.appendChild(tdType)\n tr.appendChild(tdSize)\n\n $tbody.appendChild(tr)\n });\n\n return $table\n }\n\n fs.addListener('file-manager.app', payload => {\n if (!payload) return\n if (!payload.event || !payload.data) return\n\n this.reload()\n })\n\n this.start = () => {\n ui.createWindow({ name: this.name, resizeable: true, draggable: true, initialWidth: 300 })\n this.reload()\n }\n}\n\nexport { FileManager }\n", "export function DockUI(theme) {\n const $element = document.createElement('div')\n $element.style.boxSizing = 'border-box'\n $element.style.position = 'fixed'\n $element.style.zIndex = 9\n $element.style.left = 0\n $element.style.bottom = 0\n $element.style.width = '100%'\n $element.style.padding = '8px'\n $element.style.boxSizing = 'border-box'\n $element.style.borderTop = `${theme.borderWidth}px ${theme.borderStyle}`\n $element.style.backgroundColor = theme.backgroundColor\n\n /* Layouting */\n const $layout = document.createElement('table')\n\n const $menuTriggerTd = document.createElement('td')\n $menuTriggerTd.setAttribute('width', '100%')\n const $menuTrigger = document.createElement('button')\n $menuTrigger.innerHTML = 'Menu'\n $menuTriggerTd.appendChild($menuTrigger)\n $layout.appendChild($menuTriggerTd)\n\n const $clockTd = document.createElement('td')\n const $clock = document.createElement('span')\n const now = new Date()\n $clock.innerHTML = `${now.getHours()}:${now.getMinutes()}`\n $clockTd.appendChild($clock)\n $layout.appendChild($clockTd)\n\n $element.appendChild($layout)\n\n /* Post-rendering */\n const $menu = document.createElement('div')\n $menu.style.display = 'none'\n $menu.style.position = 'absolute'\n $menu.style.left = 0\n $menu.style.width = '200px'\n $menu.style.height = '200px'\n $menu.style.padding = '8px'\n $menu.style.borderRight = `${theme.borderWidth}px ${theme.borderStyle}`\n $menu.style.borderTop = `${theme.borderWidth}px ${theme.borderStyle}`\n $menu.style.backgroundColor = theme.backgroundColor\n\n $element.appendChild($menu)\n\n /* Wait to get updated $element offsetHeight */\n setTimeout(() => {\n $menu.style.bottom = $element.offsetHeight + 'px'\n }, 200)\n\n /* Methods */\n /* Theme feature */\n this.setTheme = function (theme) {\n $element.style.backgroundColor = theme.style.body.backgroundColor\n $menu.style.backgroundColor = theme.style.body.backgroundColor\n }\n\n this.addToMenu = (element) => {\n element.style.display = 'block'\n $menu.appendChild(element)\n }\n\n this.clear = () => $menu.innerHTML = ''\n this.closeMenu = () => $menu.style.display = 'none'\n\n $menuTrigger.onclick = () => {\n /* Toggle menu */\n if ($menu.style.display === 'none') $menu.style.display = 'block'\n else if ($menu.style.display === 'block') $menu.style.display = 'none'\n }\n\n this.getMenuElement = () => $menu\n this.getMenuTrigger = () => $menuTrigger\n\n this.render = () => document.body.appendChild($element)\n this.destroy = () => $element.remove()\n}\n", "'use strict'\n\nimport { DockUI } from './dock.ui'\nimport { getInstance as getHardware } from '../../hardware'\nimport { getInstance as getSoftwareManager } from '../../software-manager'\nimport { getInstance as getGUI } from '../../graphical-user-interface'\n\nconst ui = getGUI()\nconst hardware = getHardware()\nconst softwareManager = getSoftwareManager()\n\nconst NAMESPACE = 'Dock'\n\nfunction Dock() {\n const self = this\n\n /* this.name is required */\n this.name = NAMESPACE\n\n softwareManager.addEventListener('install', () => {\n this.refresh()\n })\n\n this.ui = new DockUI(ui.getTheme())\n ui.addThemeListener(theme => self.ui.setTheme(theme))\n\n hardware.addListener(NAMESPACE, 'mousedown', e => {\n if (\n e.target !== self.ui.getMenuElement()\n && e.target !== self.ui.getMenuTrigger()\n && e.target instanceof HTMLButtonElement === false\n ) {\n self.ui.closeMenu()\n }\n })\n\n this.refresh = () => {\n self.ui.clear()\n /* @todo @fixme */\n softwareManager.getAllExcepts([NAMESPACE, 'Desktop']).forEach(function (app) {\n const $trigger = document.createElement('button')\n $trigger.innerHTML = app.name\n $trigger.onclick = () => app.start()\n self.ui.addToMenu($trigger)\n })\n }\n\n this.start = () => {\n this.ui.render()\n this.refresh()\n }\n\n this.stop = () => {\n this.ui.destroy()\n }\n}\n\nexport { NAMESPACE, Dock }", "import { getInstance as getGUI } from \"../graphical-user-interface\"\n\nconst ui = getGUI()\n\nfunction CustomFileReader() {\n this.name = 'File Reader'\n this.file = undefined\n\n this.getContent = function () {\n if (!this.file) {\n const $open = document.createElement('button')\n $open.onclick = function () {\n ui.createWindow({ name: 'file prompt', resizeable: true, draggable: true })\n }\n $open.innerHTML = 'Open File'\n return $open\n } else {\n const $content = document.createElement('div')\n $content.style.wordBreak = 'break-all'\n $content.style.userSelect = 'text'\n $content.oncontextmenu = e => e.stopPropagation()\n $content.innerHTML = `<pre><code>${JSON.stringify(this.file, ' ', 2)}</code></pre>`\n return $content\n }\n }\n\n this.start = (file) => {\n if (file) this.file = file\n const customWindow = ui.createWindow({ name: this.name, resizeable: true, draggable: true })\n\n ui.sendToTop(customWindow)\n\n const $content = this.getContent()\n\n ui.setWindowContent(this.name, $content)\n }\n}\n\nexport { CustomFileReader }", "import { getInstance as getGUI } from \"../graphical-user-interface\"\nimport { getInstance as getFS, CREATE_FILE, CREATE_DIRECTORY, MOVE, DELETE } from \"../file-system\"\n\nconst fs = getFS()\nconst ui = getGUI()\n\nconst NAMESPACE = 'Desktop'\n\nfunction Desktop(os) {\n const self = this\n\n /* this.name is required */\n this.name = NAMESPACE\n\n this.path = '/desktop/'\n\n this.iconDomMap = {}\n\n const $desktop = document.createElement('div')\n $desktop.id = '$desktop'\n $desktop.style.position = 'fixed'\n $desktop.style.left = 0\n $desktop.style.top = 0\n $desktop.style.width = '100vw'\n $desktop.style.height = '100vh'\n $desktop.oncontextmenu = e => {\n e.preventDefault()\n\n const $createFile = document.createElement('button')\n $createFile.innerHTML = 'Create file'\n $createFile.onclick = () => {\n const file = fs.createFile({\n name: null,\n path: this.path\n })\n\n fs.addToStorage(file)\n }\n\n const $closeAllWindow = document.createElement('button')\n $closeAllWindow.innerHTML = 'Close All Window'\n $closeAllWindow.onclick = function () {\n ui.closeAllWindow()\n }\n\n const $contextMenus = [\n $closeAllWindow,\n $createFile,\n ]\n\n ui.showContextMenu(e.clientX, e.clientY, $contextMenus)\n }\n\n const desktopDirectory = fs.createSystemDirectory('desktop')\n fs.addToStorage(desktopDirectory)\n\n fs.listenToDirectory(NAMESPACE, desktopDirectory, (objects) => {\n $desktop.innerHTML = ''\n objects.forEach(object => {\n renderIcon(object)\n });\n })\n\n function renderIcon(data) {\n const $d = document.createElement('div')\n $d.innerHTML = JSON.stringify(data)\n $d.style.background = '#222'\n $d.style.maxWidth = '100px'\n $d.style.maxHeight = '100px'\n $d.style.overflow = 'auto'\n\n const $icon = ui.createIcon(data.id, $d, data.type)\n if (data.type === 'file') {\n $icon.ondblclick = () => {\n /* @todo @fixme */\n os.run('File Reader', data)\n }\n\n $icon.oncontextmenu = (e) => {\n e.preventDefault()\n e.stopPropagation()\n\n ui.destroyContextMenu()\n\n const $contextMenus = []\n\n const $open = document.createElement('button')\n $open.innerHTML = 'Open'\n $open.onclick = () => {\n /* @todo @fixme */\n os.run('File Reader', data)\n }\n $contextMenus.push($open)\n\n ui.showContextMenu(e.clientX, e.clientY, $contextMenus)\n }\n }\n self.iconDomMap[data.id] = $icon\n\n $desktop.appendChild($icon)\n }\n\n fs.addListener('desktop.app', payload => {\n if (!payload) return\n if (!payload.event || !payload.data) return\n\n if (payload.event === CREATE_FILE) {\n if (payload.data.path !== this.path) return\n\n renderIcon(payload.data)\n }\n else if (payload.event === CREATE_DIRECTORY) {\n if (!payload.data.path) return\n if (payload.data.path.startsWith(this.path) === false) return\n if ((payload.data.path.match(/\\//g) || []).length !== 3) return\n\n renderIcon(payload.data)\n }\n // else if (payload.event === MOVE) {\n // if (!payload.data.toBeMoved || !payload.data.target) return\n\n // console.log(payload)\n\n // let shouldRender = false;\n // let shouldDelete = false;\n\n // /* Check to be moved */\n // if (payload.data.toBeMoved.path === this.path) {\n // console.log('should delete file')\n // shouldRender = true\n // } else if (payload.data.toBeMoved.path.startsWith(this.path) && (payload.data.toBeMoved.path.match(/\\//g) || []).length === 3) {\n // console.log('should delete directory')\n // shouldRender = true\n // }\n\n // if (shouldRender) {\n // shouldRender = false\n // renderIcon(payload.data.target)\n // }\n\n // /* Check target */\n // if (payload.data.target.path === this.path) {\n // shouldDelete = true\n // } else if (payload.data.target.path.startsWith(this.path) && (payload.data.target.path.match(/\\//g) || []).length === 3) {\n // shouldDelete = true\n // }\n\n // if (shouldDelete) {\n // shouldDelete = false\n // // this.iconDomMap[payload.data.toBeMoved.id].remove()\n // }\n // }\n else if (payload.event === DELETE) {\n if (!payload.data.path) return\n if (payload.data.path === this.path || (\n payload.data.path.startsWith(this.path)\n && (payload.data.path.match(/\\//g) || []).length === 3\n )) {\n this.iconDomMap[payload.data.id].remove()\n }\n }\n })\n\n this.start = () => {\n document.body.appendChild($desktop)\n }\n}\n\nexport { NAMESPACE, Desktop }\n", "import { getInstance as getGUI } from \"../graphical-user-interface\"\n\nconst ui = getGUI()\n\nfunction WindowCreator() {\n this.name = 'Window Creator'\n\n this.start = () => {\n ui.createWindow({ name: this.name, resizeable: true, draggable: true })\n\n /* Window creator */\n const $create = document.createElement('button')\n $create.innerHTML = 'create window'\n $create.onclick = () => {\n ui.createWindow({ draggable: true, resizeable: true })\n }\n\n ui.setWindowContent(this.name, $create)\n }\n}\n\nexport { WindowCreator }\n", "'use strict';\n\nimport { Terminal } from \"./softwares/terminal\";\nimport { Settings as SettingsApp } from \"./softwares/settings\";\nimport { getInstance as getGUI } from \"./graphical-user-interface\";\nimport { getInstance as getSoftwareManager } from \"./software-manager\";\nimport { FileManager as FileManagerApp } from \"./softwares/file-manager\";\nimport { NAMESPACE as NAMESPACE_DOCK, Dock } from \"./softwares/dock/dock\";\nimport { CustomFileReader as FileReaderApp } from \"./softwares/file-reader\";\nimport { NAMESPACE as NAMESPACE_DESKTOP, Desktop } from \"./softwares/desktop\";\nimport { WindowCreator as WindowCreatorApp } from \"./softwares/window-creator\";\n\nconst ui = getGUI()\nconst softwareManager = getSoftwareManager()\n\nfunction OperatingSystem() {\n this.boot = () => {\n ui.init()\n\n /* Install default softwares */\n this.install(new Dock())\n this.install(new SettingsApp())\n this.install(new FileReaderApp())\n this.install(new Desktop(instance))\n this.install(new WindowCreatorApp())\n this.install(new FileManagerApp(instance))\n this.install(new Terminal())\n\n /* Run default softwares */\n this.run(NAMESPACE_DOCK)\n this.run(NAMESPACE_DESKTOP)\n }\n}\n\n/* facades */\nOperatingSystem.prototype.get = softwareManager.get.bind(softwareManager)\nOperatingSystem.prototype.install = softwareManager.install.bind(softwareManager)\nOperatingSystem.prototype.run = softwareManager.run.bind(softwareManager)\n\nlet instance = new OperatingSystem()\nconst getInstance = () => {\n if (!instance) instance = new OperatingSystem()\n return instance\n}\n\nexport { OperatingSystem, getInstance }\n", "import createScene from \"./modules/create-scene\"\nimport { getInstance } from \"./modules/operating-system\"\n\nconst os = getInstance()\n\n/* A. Auto Boot */\n// os.boot()\n\n/* B. Manual Boot */\nconst $boot = document.createElement('button')\n$boot.innerHTML = 'click me to boot the OS'\n$boot.onclick = () => {\n os.boot()\n $boot.remove()\n}\nconst bootingScene = createScene($boot)\ndocument.body.appendChild(bootingScene)\n"],
"mappings": "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",
"names": ["instance", "getInstance", "getInstance", "id", "instance", "getInstance", "id", "themeManager", "theme", "instance", "getInstance", "hardware", "getInstance", "BODY", "eventScopesByKey", "hardware", "getInstance", "themeManager", "BODY", "themeManager", "getInstance", "instance", "getInstance", "ui", "getInstance", "instance", "getInstance", "TYPE_FILE", "eventManager", "getInstance", "instance", "eventManager", "getInstance", "TYPE_FILE", "instance", "getInstance", "ui", "os", "e", "theme", "ui", "getInstance", "hardware", "NAMESPACE", "ui", "getInstance", "fs", "getInstance", "ui", "NAMESPACE", "os", "ui", "getInstance", "ui", "getInstance", "softwareManager", "instance", "NAMESPACE", "getInstance"]
}