cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
134 lines (133 loc) • 3.97 kB
JavaScript
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 };