UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

134 lines (133 loc) 3.97 kB
import { reactive, readonly } from "vue"; import { detectSettings } from "./utils/novnc.mjs"; import config from "./config.mjs"; import { hasScrollbarGutter } from "../../node_modules/@novnc/novnc/core/util/browser.mjs"; /* * vuensee * @author Anders Evenrud <andersevenrud@gmail.com> * @link https://github.com/andersevenrud/vuensee * @license MIT */ const isSecure = window.location.protocol === "https:"; const defaultVisibility = { showSettings: false, showPower: false, showKeys: false, showClipboard: false }; const defaultConnectionStates = { connected: false, connecting: false, disconnecting: false, reconnecting: false }; const initialKeys = { ctrl: false, alt: false, windows: false }; const initialCapabilities = { power: false }; const initialSettings = { language: "en", autoconnect: false, username: "", password: "", bell: true, sharedMode: true, viewOnly: false, clipToWindow: !hasScrollbarGutter, scalingMode: "off", quality: 6, compression: 2, reconnect: false, reconnectDelay: 5e3, messageTimeout: 8e3, dotCursor: false, hostname: "192.168.100.120", path: "websockify", repeaterId: "", port: isSecure ? 443 : 8e3, ssl: isSecure }; const store = reactive({ messages: [], dragging: false, touchKeyboard: false, fullscreen: false, panelOpen: true, loginOpen: false, clipboard: "", ...defaultConnectionStates, ...defaultVisibility, capabilities: { ...initialCapabilities }, keys: { ...initialKeys }, settings: { ...initialSettings, ...config.settings }, showSettings: config.features.settings }); const toggleable = (k, pre = {}) => (v = !store[k]) => Object.assign(store, { ...pre, [k]: v }); const assignConnection = (assign) => Object.assign(store, { loginOpen: false, ...defaultConnectionStates, ...defaultVisibility, ...assign }); const assignSettings = (settings) => Object.assign(store.settings, detectSettings(store.settings, settings)); const assignCapabilities = (capabilities) => Object.assign(store.capabilities, capabilities); const toggleKey = (key) => store.keys[key] = !store.keys[key]; const toggleFullscreen = toggleable("fullscreen"); const togglePanelOpen = toggleable("panelOpen"); const toggleDragging = toggleable("dragging"); const toggleLogin = toggleable("loginOpen"); const toggleSettings = toggleable("showSettings", defaultVisibility); const togglePower = toggleable("showPower", defaultVisibility); const toggleKeys = toggleable("showKeys", defaultVisibility); const toggleClipboard = toggleable("showClipboard", defaultVisibility); const toggleTouchKeyboard = toggleable("touchKeyboard"); const updateClipboard = (clipboard) => store.clipboard = clipboard; const connectionActivate = (reconnecting = false) => assignConnection({ connecting: true, reconnecting }); const connectionDeactivate = () => assignConnection({ showSettings: true, disconnecting: true }); const connectionActivated = () => assignConnection({ connected: true, panelOpen: false }); const connectionDeactivated = (reconnecting = false) => assignConnection({ reconnecting, clipboard: "", touchKeyboard: false, dragging: false, panelOpen: !reconnecting, showSettings: !reconnecting, settings: { ...store.settings, password: reconnecting ? store.password : "" }, capabilities: { ...initialCapabilities }, keys: { ...initialKeys } }); const removeMessage = (key) => { const foundIndex = store.messages.findIndex((message) => message.key === key); if (foundIndex !== -1) { store.messages.splice(foundIndex, 1); } }; const state = readonly(store); export { assignCapabilities, assignSettings, connectionActivate, connectionActivated, connectionDeactivate, connectionDeactivated, removeMessage, state, toggleClipboard, toggleDragging, toggleFullscreen, toggleKey, toggleKeys, toggleLogin, togglePanelOpen, togglePower, toggleSettings, toggleTouchKeyboard, updateClipboard };