diff --git a/src/kiri/function.js b/src/kiri/function.js index 7a2a5146..246326e2 100644 --- a/src/kiri/function.js +++ b/src/kiri/function.js @@ -12,7 +12,7 @@ // dep: kiri-mode.laser.driver gapp.register("kiri.function", [], (root, exports) => { -const { kiri, noop } = root; +const { kiri } = root; const { api, client, consts, utils } = kiri; const { space } = moto; const { COLOR, PMODES } = consts; @@ -427,6 +427,7 @@ function parseCode(code, type) { }); } +// extend API (api.function) const functions = api.function = { slice: prepareSlices, print: preparePreview, diff --git a/src/kiri/init.js b/src/kiri/init.js index 04d7fb00..484a6216 100644 --- a/src/kiri/init.js +++ b/src/kiri/init.js @@ -149,7 +149,7 @@ gapp.register("kiri.init", [], (root, exports) => { function speedSave() { settings().controller.showSpeeds = ui.showSpeeds.checked; - api.platform.update_speeds(); + api.view.update_speeds(); } function zAnchorSave() { @@ -808,9 +808,8 @@ gapp.register("kiri.init", [], (root, exports) => { selext.innerHTML = ''; for (let i=0; iextruder ${i}`; d.setAttribute('id', `sel-ext-${i}`); - d.setAttribute('class', 'col j-center'); d.onclick = function() { api.selection.for_widgets(w => { api.widgets.annotate(w.id).extruder = i; @@ -1621,8 +1620,8 @@ gapp.register("kiri.init", [], (root, exports) => { export: $('label-export'), }, acct: { - help: $('acct-help'), - export: $('acct-export') + help: $('app-help'), + export: $('app-export') }, dev: { header: $('dev-header'), @@ -1660,8 +1659,8 @@ gapp.register("kiri.init", [], (root, exports) => { ltview: $('lt-view'), ltact: $('lt-start'), edit: $('lt-tools'), - nozzle: $('lt-nozzle'), - render: $('lt-render'), + nozzle: $('menu-nozzle'), + render: $('menu-render'), modal: $('modal'), modalBox: $('modal-box'), @@ -2452,22 +2451,10 @@ gapp.register("kiri.init", [], (root, exports) => { } }; - if (DOC.body.requestFullscreen) { - $('app-xpnd').style.display = 'flex'; + if (!DOC.body.requestFullscreen) { + $('app-xpnd').style.display = 'none'; } - let hpops = []; - uc.hoverPop(ui.ltsetup, { group: hpops, target: $('set-pop') }); - uc.hoverPop(ui.ltfile, { group: hpops, target: $('file-pop') }); - uc.hoverPop(ui.ltview, { group: hpops, target: $('pop-view') }); - uc.hoverPop(ui.ltact, { group: hpops, target: $('pop-slice') }); - uc.hoverPop(ui.render, { group: hpops, target: $('pop-render'), xsticky: false }); - uc.hoverPop(ui.edit, { group: hpops, target: $('pop-tools'), xsticky: false }); - uc.hoverPop(ui.nozzle, { group: hpops, target: $('pop-nozzle'), xsticky: true }); - uc.hoverPop($('app-acct'), { group: hpops, target: $('acct-pop') } ); - // uc.hoverPop($('app-mode'), { group: hpops, target: $('mode-info') } ); - uc.hoverPop($('app-name'), { group: hpops, target: $('app-info') } ); - uc.onBlur([ ui.toolName, ui.toolNum, @@ -2814,7 +2801,7 @@ gapp.register("kiri.init", [], (root, exports) => { // bind interface action elements $('app-name').onclick = api.help.show; - $('app-mode').onclick = (ev) => { ev.stopPropagation(); showDevices() }; + $('app-state').onclick = (ev) => { ev.stopPropagation(); showDevices() }; $('set-device').onclick = (ev) => { ev.stopPropagation(); showDevices() }; $('set-tools').onclick = (ev) => { ev.stopPropagation(); showTools() }; $('set-prefs').onclick = (ev) => { ev.stopPropagation(); api.modal.show('prefs') }; diff --git a/src/kiri/main.js b/src/kiri/main.js index b27c61cb..9e10e611 100644 --- a/src/kiri/main.js +++ b/src/kiri/main.js @@ -861,14 +861,16 @@ gapp.register("kiri.main", [], (root, exports) => { break; case VIEWS.SLICE: UI.back.style.display = 'flex'; - if (!isCAM) UI.render.classList.remove('lt-enabled'); + if (isCAM) UI.render.classList.add('hide'); + else UI.render.classList.remove('hide'); updateSpeeds(); updateSliderMax(); setWidgetVisibility(true); break; case VIEWS.PREVIEW: UI.back.style.display = 'flex'; - if (!isCAM) UI.render.classList.remove('lt-enabled'); + if (isCAM) UI.render.classList.add('hide'); + else UI.render.classList.remove('hide'); setWidgetVisibility(true); break; default: diff --git a/src/kiri/platform.js b/src/kiri/platform.js index aca3aa78..c75ac2d8 100644 --- a/src/kiri/platform.js +++ b/src/kiri/platform.js @@ -247,7 +247,7 @@ function platformUpdateSelected() { let disC = selwid.filter(w => w.meta.disabled === true).length; enable.style.display = disC ? 'flex' : 'none'; disable.style.display = enaC ? 'flex' : 'none'; - ui.nozzle.classList.add('lt-active'); + ui.nozzle.classList.remove('hide'); if (api.feature.meta && selcount === 1) { let sel = selwid[0]; let name = sel.meta.file || sel.meta.url; @@ -276,7 +276,7 @@ function platformUpdateSelected() { ui.mesh.name.innerText = '[0]'; ui.mesh.points.innerText = '-'; ui.mesh.faces.innerText = '-'; - ui.nozzle.classList.remove('lt-active'); + ui.nozzle.classList.add('hide'); } ui.nozzle.style.display = extruders && extruders.length > 1 ? 'flex' : ''; @@ -862,6 +862,7 @@ function fitDeviceToWidgets() { } } +// extend API (api.platform) const platform = api.platform = { fit: fitDeviceToWidgets, add: platformAdd, diff --git a/src/kiri/selection.js b/src/kiri/selection.js index 8a1ca5bf..fdfdcddf 100644 --- a/src/kiri/selection.js +++ b/src/kiri/selection.js @@ -267,6 +267,7 @@ function setDisabled(bool) { api.platform.update_selected(); } +// extend API (api.selection) const selection = api.selection = { move, scale, diff --git a/src/kiri/settings.js b/src/kiri/settings.js index ed6e8dc1..7d66e3b1 100644 --- a/src/kiri/settings.js +++ b/src/kiri/settings.js @@ -733,6 +733,7 @@ function setEnableWASM(bool) { api.event.emit("set.assembly", bool); } +// extend API (api.conf) api.conf = { dbo: () => { return ls2o('ws-settings') }, get: getSettings, @@ -751,6 +752,7 @@ api.conf = { import: settingsImport, }; +// extend API (api.settings) api.settings = { get: getSettings, import: settingsImport, diff --git a/src/kiri/widgets.js b/src/kiri/widgets.js index e52d383f..5b3f26ee 100644 --- a/src/kiri/widgets.js +++ b/src/kiri/widgets.js @@ -76,6 +76,7 @@ function opacity(value) { moto.space.update(); } +// extend API (api.widgets) const widgets = api.widgets = { load: Widget.loadFromCatalog, new: newWidget, diff --git a/src/moto/service.js b/src/moto/service.js index 14bbb9d6..7c8e1f3b 100644 --- a/src/moto/service.js +++ b/src/moto/service.js @@ -1,3 +1,5 @@ +// code for a ServiceWorker that provides support for running cached/offline + const version = self.gapp.version; const origin = self.location.origin; const stats = { diff --git a/web/kiri/index.css b/web/kiri/index.css index 6364b0f8..ea53c1b2 100644 --- a/web/kiri/index.css +++ b/web/kiri/index.css @@ -7,6 +7,10 @@ --holdbar-sf: linear-gradient(to top, rgba(200,200,200,0.1), rgba(255,255,255,1), rgba(200,200,200,0.1)) !important; --highlight: rgba(126,153,183,0.4); --main-color: rgba(126,153,183,1); + --main-color-hover: rgb(96, 127, 164); + --top: rgba(255,255,255,0.75); + --menu: #f0f0f0; + --menu-border: #555; } @font-face { font-family: 'Russo One'; @@ -28,6 +32,115 @@ a, a:hover, a:visited { right: 0; bottom: 0; } + +#top { + text-transform: capitalize; + font-family: 'Russo One', sans-serif; + background-color: var(--top); + z-index: 15; +} +#top > div { + margin: 0 5px 0 5px; +} + +.top-menu { + display: flex; + gap: 3px; + align-items: center; + white-space: nowrap; +} +.top-menu > span { + padding: 3px 6px 3px 6px; + border-left: 1px solid transparent; + border-right: 1px solid transparent; +} +.top-menu label { + color: #444; +} +.top-menu svg { + color: var(--main-color); +} +.top-menu > span { + position: relative; + display: flex; + gap: 5px; + align-items: center; +} +.top-menu > span:hover label { + color: #222; +} +.top-menu > span:hover > svg { + color: var(--main-color-hover); +} +.top-menu > span:hover { + background-color: var(--menu); + border-left: 1px solid var(--menu-border); + border-right: 1px solid var(--menu-border); +} +.top-menu > span:hover .top-menu-drop { + display: flex; +} +.top-menu-left { + align-items: self-start; +} +.top-menu-left .content { + border-top-right-radius: 4px; +} +.top-menu-right { + align-items: self-end; +} +.top-menu-right .content { + border-top-left-radius: 4px; +} + +.top-menu-drop { + position: absolute; + display: none; + /* border: 1px solid #555; */ + top: 100%; + left: -1px; + right: -1px; + min-width: 100%; + min-height: 100%; + flex-direction: column; + font-family: sans-serif; +} +.top-menu-drop svg { + font-size: smaller; +} +#top .content { + background-color: var(--menu); + border-top: 1px dashed var(--menu-border); + border-left: 1px solid var(--menu-border); + border-right: 1px solid var(--menu-border); + border-bottom: 1px solid var(--menu-border); + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; + padding: 3px 5px 3px 5px; + gap: 4px; + display: grid; + align-items: center; + grid-template-columns: auto 1fr; +} +#top .content > div { + display: contents; +} +#top .content > div > span { + text-align: center; + padding-left: 10px; +} +#top .content > div > label { + border-radius: 3px; + justify-self: stretch; + align-self: stretch; +} +#top .content > div > label:hover { + background-color: #ddd; +} +#top .content.onecol { + grid-template-columns: 1fr !important; +} + #app-name { position: absolute; top: 50%; @@ -35,9 +148,34 @@ a, a:hover, a:visited { transform: translateX(-50%) translateY(-50%); z-index: 50; } -#app-name, #app-acct { +#app-name { cursor: pointer; } +#app-name hr { + margin: 1px; +} +#app-name:hover #app-name-pop { + display: flex; +} +#app-name-pop { + /* display: none; */ + color: var(--fg-gray); + font-family: sans-serif; + position: absolute; + /* right: -6px; */ + top: 100%; +} +#app-name-pop .content { + /* grid-template-columns: 1fr; */ + text-align: center; +} +#app-lang { + justify-content: flex-end; +} +#app-lang:hover #lang-pop { + display: flex; +} + #app,div { display: flex; padding: 0; @@ -284,28 +422,24 @@ th, tr, td, label { overflow: hidden; } -#top { - font-family: 'Russo One', sans-serif; - background-color: rgba(255,255,255,0.75); - padding: 3px; - z-index: 15; +#app-state { + position: absolute; + bottom: 0; + left: 0; + right: 0; } -#top > div { - margin: 0 5px 0 5px; -} - #mode-info { - display: none; - xposition: absolute; + /* display: none; */ white-space: nowrap; font-size: smaller; font-family: sans-serif; top: 50%; height: 100%; - transform: translateY(-50%); + /* transform: translateY(-50%); */ padding: 1px 0 1px 0; align-items: center; justify-content: center; + padding: 3px; } #mode-info label { font-size: smaller; @@ -332,12 +466,9 @@ th, tr, td, label { border-bottom: 1px solid #ddd; } -#app-info.hoverpop { - display: flex; -} #app-info { - display: none; - position: absolute; + /* display: none; */ + /* position: absolute; white-space: nowrap; font-size: smaller; font-family: sans-serif; @@ -347,7 +478,7 @@ th, tr, td, label { color: var(--fg-gray); border-radius: 3px; border: 1px solid #ddd; - background-color: white; + background-color: white; */ } #doit { @@ -376,46 +507,16 @@ th, tr, td, label { background-color: rgba(0,0,0,0.2); } -#app-xpnd { - display: none; -} -#app-acct, #app-xpnd { - align-items: center; - justify-content: flex-end; -} -#acct-pop.hoverpop { - display: flex !important; -} -#acct-pop { - display: none; - color: var(--fg-gray); - font-family: sans-serif; +#lang-hold { + background-color: transparent; position: absolute; - right: -6px; - top: 100%; + top: 0; + left: 0; + right: -15px; + bottom: 0; } -#acct-pop > div { - margin-top: 5px; - align-items: stretch; - background-color: white; - border: 1px solid #ddd; - border-radius: 3px; - padding: 0; -} -#acct-pop > div > div { - padding: 5px; -} -#acct-pop > div > div:hover { - color: #000; - background-color: #f4f4f4; -} -#acct-lang { - justify-content: flex-end; -} -#acct-lang:hover #lang-pop, #acct-ver:hover #ver-pop { - display: flex; -} -#lang-pop, #ver-pop { +#lang-pop { + border: 1px solid red; display: none; position: absolute; right: 100%; @@ -426,26 +527,15 @@ th, tr, td, label { border: 1px solid #ddd; background-color: white; white-space: nowrap; + flex-direction: column; } -#ver-pop { - transform: translateY(-78%); -} -#lang-pop > div, #ver-pop > div { +#lang-pop > div { padding: 5px 7px 5px 7px; } -#lang-pop > div:hover, #ver-pop > div:hover { +#lang-pop > div:hover { color: #000; background-color: #f4f4f4; } -#ver-pop > div { - border-radius: 3px; - border: 1px solid white; - margin: 2px; -} -#ver-pop .cver { - background-color: #dfd !important; - border: 1px solid #aaa; -} #mid { pointer-events: none; @@ -464,10 +554,6 @@ th, tr, td, label { pointer-events: none; } -#acct-pop { - text-transform: capitalize; -} - #top-sep { display: none; } @@ -726,20 +812,6 @@ th, tr, td, label { .lt-menu label { font-size: small; } -.lt-enabled, .lt-active { - color: var(--fg-gray); -} -.lt-enabled:hover, .lt-active:hover { - background-color: #eee; - border: 1px solid #aaa; - color: #000; -} -.lt-enabled:hover .pop-lcol { - display: flex; -} -.lt-active .hoverpop { - display: flex; -} @media only screen and (max-height : 750px) { .lt-menu, .pop-lcol { font-size: 16px !important; diff --git a/web/kiri/index.html b/web/kiri/index.html index 063d308f..258a24ea 100644 --- a/web/kiri/index.html +++ b/web/kiri/index.html @@ -32,54 +32,202 @@
+ +
-
-
-
-
-
-
+
+ + + +
+
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+
+ + + +
+
+
+ + +
+
+ + + + +
+
+
+
+ + + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + + +
+
+
+
-
-
Kiri:Moto
-
version
+
+ + +
+
+
+ +
+
+
+ +
+
+
+
-
- -
-
- -
-
-
- -
-
简体中文
-
dansk
-
deutsch
-
english
-
español
-
français
-
polskie
-
português
+
+ + + +
+
+
+ + +
+
+ + +
+
+ + +
+
+
-
- -
-
- +
+ + + + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
-
+
+ + + +
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
简体中文
+
dansk
+
deutsch
+
english
+
español
+
français
+
polskie
+
português
+ +
+
+
+ + +
+
+
+
+
loading
@@ -156,135 +304,6 @@
-
- - -
-
- - -
-
- -
-
- -
-
-
-
- - -
-
- - -
-
- - - - -
-
-
-
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
-
-
- - -
-
- - -
-
- - -
-
- - -
-
- -
-
-
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
-
- - -
-
-
+ +
+
+
+
+
+
+
+
diff --git a/web/kiri/lang/en.js b/web/kiri/lang/en.js index a97be36d..bffb0705 100644 --- a/web/kiri/lang/en.js +++ b/web/kiri/lang/en.js @@ -30,7 +30,7 @@ self.kiri.lang['en-us'] = { name: "name", off: "off", // turn something off (like a lightbulb) on: "on", // turn something on (like a lightbulb) - prefs: "prefs", // left menu "preferences" + prefs: "preferences", // left menu "preferences" preview: "preview", recent: "recent", render: "render", // left render pop menu