172 lines
5.3 KiB
JavaScript
172 lines
5.3 KiB
JavaScript
|
|
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||
|
|
|
||
|
|
import alerts from './alerts.js';
|
||
|
|
import settings from './settings.js'
|
||
|
|
|
||
|
|
import { broker } from '../moto/broker.js';
|
||
|
|
import { client as work } from './client.js';
|
||
|
|
import { consts, COLOR as color, LISTS as lists, MODES, VIEWS } from './consts.js';
|
||
|
|
import { device, devices } from './devices.js';
|
||
|
|
import { catalog, dialog, event, group, help, hide, image } from './main.js';
|
||
|
|
import { modal, mode, probe, process, show, space, util, view } from './main.js';
|
||
|
|
import { local as dataLocal } from '../data/local.js';
|
||
|
|
import { noop, ajax, o2js, js2o } from './utils.js';
|
||
|
|
import { functions } from './function.js';
|
||
|
|
import { platform } from './platform.js';
|
||
|
|
import { selection } from './selection.js';
|
||
|
|
import { stats } from '../kiri/stats.js';
|
||
|
|
import { widgets } from './widgets.js';
|
||
|
|
|
||
|
|
import { LANG } from './lang.js';
|
||
|
|
import { LOCAL, SETUP, SECURE } from './main.js';
|
||
|
|
import { UI } from './ui.js';
|
||
|
|
import STACKS from './stacks.js';
|
||
|
|
|
||
|
|
let UC = UI.prefix('kiri').inputAction(settings.conf.update),
|
||
|
|
und = undefined,
|
||
|
|
clone = Object.clone,
|
||
|
|
isHover = false,
|
||
|
|
feature = {
|
||
|
|
seed: true, // seed profiles on first use
|
||
|
|
meta: true, // show selected widget metadata
|
||
|
|
frame: true, // receive frame events
|
||
|
|
alert_event: false, // emit alerts as events instead of display
|
||
|
|
controls: true, // show or not side menus
|
||
|
|
device_filter: und, // function to limit devices shown
|
||
|
|
drop_group: und, // optional array to group multi drop
|
||
|
|
drop_layout: true, // layout on new drop
|
||
|
|
hoverAdds: false, // when true only searches widget additions
|
||
|
|
on_key: und, // function override default key handlers
|
||
|
|
on_key2: [], // allows for multiple key handlers
|
||
|
|
on_load: und, // function override file drop loads
|
||
|
|
on_add_stl: und, // legacy override stl drop loads
|
||
|
|
on_mouse_up: und, // function intercepts mouse up select
|
||
|
|
on_mouse_down: und, // function intercepts mouse down
|
||
|
|
work_alerts: true, // allow disabling work progress alerts
|
||
|
|
pmode: consts.PMODES.SPEED, // preview modes
|
||
|
|
// hover: false, // when true fires mouse hover events
|
||
|
|
get hover() {
|
||
|
|
return isHover;
|
||
|
|
},
|
||
|
|
set hover(b) {
|
||
|
|
isHover = b;
|
||
|
|
broker.publish("feature.hover", b);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
busyVal = 0,
|
||
|
|
busy = {
|
||
|
|
val() { return busy },
|
||
|
|
inc() { api.event.emit("busy", ++busyVal) },
|
||
|
|
dec() { api.event.emit("busy", --busyVal) }
|
||
|
|
},
|
||
|
|
onkey = (fn) => {
|
||
|
|
api.feature.on_key2.push(fn);
|
||
|
|
},
|
||
|
|
doit = {
|
||
|
|
undo: noop, // do.js
|
||
|
|
redo: noop // do.js
|
||
|
|
},
|
||
|
|
devel = {
|
||
|
|
xray(layers, raw) {
|
||
|
|
let proc = api.conf.get().process,
|
||
|
|
size = proc.sliceHeight || proc.slaSlice || 1,
|
||
|
|
base = (proc.firstSliceHeight || size);
|
||
|
|
layers = Array.isArray(layers) ? layers : [ layers ];
|
||
|
|
proc.xray = layers.map(l => raw ? l : base + l * size - size / 2);
|
||
|
|
proc.xrayi = layers.slice();
|
||
|
|
api.function.slice();
|
||
|
|
}
|
||
|
|
},
|
||
|
|
local = {
|
||
|
|
get: (key) => localGet(key),
|
||
|
|
getInt: (key) => parseInt(localGet(key)),
|
||
|
|
getFloat: (key) => parseFloat(localGet(key)),
|
||
|
|
getBoolean: (key, def = true) => {
|
||
|
|
let val = localGet(key);
|
||
|
|
return val === true || val === 'true' || val === def;
|
||
|
|
},
|
||
|
|
toggle: (key, val, def) => localSet(key, val ?? !api.local.getBoolean(key, def)),
|
||
|
|
put: (key, val) => localSet(key, val),
|
||
|
|
set: (key, val) => localSet(key, val),
|
||
|
|
},
|
||
|
|
tweak = {
|
||
|
|
line_precision(v) { api.work.config({base:{clipperClean: v}}) },
|
||
|
|
gcode_decimals(v) { api.work.config({base:{gcode_decimals: v}}) }
|
||
|
|
};
|
||
|
|
|
||
|
|
function clip(text) {
|
||
|
|
navigator.clipboard
|
||
|
|
.writeText(text)
|
||
|
|
.catch(err => console.error('Clipboard Error:', err));
|
||
|
|
}
|
||
|
|
|
||
|
|
function localGet(key) {
|
||
|
|
let sloc = api.conf.get().local;
|
||
|
|
return sloc[key] || api.sdb[key];
|
||
|
|
}
|
||
|
|
|
||
|
|
function localSet(key, val) {
|
||
|
|
let sloc = api.conf.get().local;
|
||
|
|
sloc[key] = api.sdb[key] = val;
|
||
|
|
return val;
|
||
|
|
}
|
||
|
|
|
||
|
|
export const api = {
|
||
|
|
ajax, // via utils
|
||
|
|
alerts, // alerts.js
|
||
|
|
busy,
|
||
|
|
catalog,
|
||
|
|
client: work, // alias for "work"
|
||
|
|
clip, // <--
|
||
|
|
clone, // <--
|
||
|
|
color,
|
||
|
|
conf: settings.conf,
|
||
|
|
const: { LANG, LOCAL, MODES, SETUP, SECURE, STACKS, VIEWS },
|
||
|
|
devel, // <--
|
||
|
|
device,
|
||
|
|
devices,
|
||
|
|
dialog,
|
||
|
|
doit, // <--
|
||
|
|
event,
|
||
|
|
feature, // <--
|
||
|
|
function: functions,
|
||
|
|
group,
|
||
|
|
help,
|
||
|
|
hide,
|
||
|
|
image,
|
||
|
|
js2o, // via utils
|
||
|
|
language: LANG,
|
||
|
|
lists, // <--
|
||
|
|
local, // <--
|
||
|
|
modal,
|
||
|
|
mode,
|
||
|
|
noop,
|
||
|
|
o2js, // via utils
|
||
|
|
onkey, // <--
|
||
|
|
platform,
|
||
|
|
probe,
|
||
|
|
process,
|
||
|
|
sdb: dataLocal,
|
||
|
|
selection,
|
||
|
|
settings,
|
||
|
|
show,
|
||
|
|
space,
|
||
|
|
stacks: STACKS,
|
||
|
|
stats,
|
||
|
|
tool: {}, // kiri-mode/cam/tools.js
|
||
|
|
tweak, // <--
|
||
|
|
uc: UC,
|
||
|
|
ui: {}, // init.js
|
||
|
|
util,
|
||
|
|
var: {
|
||
|
|
layer_lo: 0,
|
||
|
|
layer_hi: 0,
|
||
|
|
layer_max: 0
|
||
|
|
},
|
||
|
|
view,
|
||
|
|
widgets,
|
||
|
|
work, // message worker
|
||
|
|
};
|
||
|
|
|
||
|
|
// allow widget to straddle client / worker FOR NOW
|
||
|
|
self.kiri_api = api;
|