diff --git a/js/kiri-init.js b/js/kiri-init.js index 475077cb..e29b6dfd 100644 --- a/js/kiri-init.js +++ b/js/kiri-init.js @@ -1662,9 +1662,6 @@ var gs_kiri_init = exports; // ensure field data propagation API.conf.update(); - // set initial layer slider size - API.dialog.update(); - // load settings provided in url hash loadSettingsFromServer(); @@ -1682,6 +1679,9 @@ var gs_kiri_init = exports; // add ability to override API.show.controls(true); + // set initial layer slider size + API.dialog.update(); + // show version on startup API.show.alert(`${LANG.version} ${KIRI.version}`); diff --git a/js/kiri.js b/js/kiri.js index a6f12e2d..08d69ccb 100644 --- a/js/kiri.js +++ b/js/kiri.js @@ -761,7 +761,7 @@ self.kiri.copyright = exports.COPYRIGHT; } } // update slider window - updateDialogLeft(); + API.dialog.update(); // handle slicing errors if (error && !errored) { errored = true; @@ -1634,7 +1634,7 @@ self.kiri.copyright = exports.COPYRIGHT; row.appendChild(del); table.appendChild(row); }); - updateDialogLeft(); + API.dialog.update(); } function showSettings() { diff --git a/js/meta.js b/js/meta.js index 2305eda9..ca021923 100644 --- a/js/meta.js +++ b/js/meta.js @@ -17,17 +17,17 @@ * TODO add reserved spaces (links) for signups * TODO shared live-edit workspaces? * TODO add OBJ export (http://en.wikipedia.org/wiki/Wavefront_.obj_file) - * TODO add parametric relations (via marks?) w/ var table + * TODO add parametric relations (via marks?) w/ let table * TODO l&f and import stl from http://openjscad.org/ */ "use strict"; -var gs_meta = exports; +let gs_meta = exports; THREE.Material.prototype.motoSetup = function() { this.fog = false; - var hidden = this.clone(); + let hidden = this.clone(); this.m_hide = hidden; this.m_show = this; hidden.m_hide = hidden; @@ -41,7 +41,7 @@ THREE.Face3.prototype.mVisible = function(show) { }; (function() { - var $ = function(id) { return document.getElementById(id)}, + let $ = function(id) { return document.getElementById(id) }, // --------------- WIN = self, DOC = WIN.document, @@ -277,7 +277,7 @@ THREE.Face3.prototype.mVisible = function(show) { SPACE.mouse.upSelect(function(selection, event) { if (event) { if (selection && selection.faceIndex) { - var face = selection.face.onface, + let face = selection.face.onface, cube = face.cube; switch (editMode) { case EDIT.MARK: @@ -285,7 +285,7 @@ THREE.Face3.prototype.mVisible = function(show) { scheduleUpdateFaces(cube, face); break; case EDIT.SELECT: - var shift = event.shiftKey, + let shift = event.shiftKey, meta = event.metaKey, isSelected = cube.isSelected(); if (shift) { @@ -298,7 +298,7 @@ THREE.Face3.prototype.mVisible = function(show) { selectedFace = face; scheduleUpdateFaces(cube, face); } - var s = face.set, rot = { x: s.tx, y: s.ty, z: s.tz }; + let s = face.set, rot = { x: s.tx, y: s.ty, z: s.tz }; SPACE.alignTracking(selection.point, rot, {x:-ABS(s.ox), y:-ABS(s.oz), z:-ABS(s.oy)}); break; case EDIT.ADD: @@ -331,7 +331,7 @@ THREE.Face3.prototype.mVisible = function(show) { SPACE.mouse.onHover(function(selection, event) { if (event) { if (selection && selection.faceIndex) { - var cf = selection.face.onface, + let cf = selection.face.onface, s = cf.set, p = cf.cube.pos; hoverSpot.rotation.set(s.rx, s.ry, s.rz); @@ -343,322 +343,9 @@ THREE.Face3.prototype.mVisible = function(show) { } }); - function inputHasFocus() { - return DOC.activeElement && (DOC.activeElement != DOC.body); - } - - function setAnchorSelection(x,y,z) { - if (selected.length === 0) return; - for (var i=0; i 0) { - while (i < selected.length) { - bounds.update(selected[i++].pos); - } - } else { - while (i < selectable.length) { - bounds.update(selectable[i++].cube.pos); - } - } - SPACE.platform.setMaxZ(i > 0 ? bounds.z.max : 0); - } - - function keyPressHandler(evt) { - if (inputHasFocus()) return false; - var handled = true, style; - switch(evt.charCode) { - case cca('h'): - computeCenter(); - SPACE.view.home(); - break; - case cca('t'): - computeCenter(); - SPACE.view.top(); - break; - case cca('a'): - setEditMode(EDIT.ADD); - break; - case cca('s'): - setEditMode(EDIT.SELECT); - break; - case cca('d'): - setEditMode(EDIT.DELETE); - break; - case cca('e'): - setMarkMode(MARK.EMIT); - break; - case cca('w'): - setMarkMode(MARK.SLIDE); - break; - case cca('q'): - setMarkMode(MARK.CLEAR); - break; - case cca('c'): - if (selected.length === 0) { - setEditMode(EDIT.CLONE) - } else { - cloneSelection(false); - } - break; - case cca('m'): - mirrorSelection(); - break; - case cca('n'): - window.n = []; - for (var i=0; i 15 ? sname.substring(0,13)+"..." : sname; - html.push('
'); - i++; - }); - html.push(); - lib.innerHTML = html.join(''); - - i = 0; - filenames.forEach(function(name) { - button = $('slib_'+i); - button.onclick = function() { libraryToSelection(this.filename) }; - button.title = name+'\rvertices: '+files[name].vertices; - button.filename = name; - button = $('dlib_'+i); - button.onclick = function() { if (confirm('delete '+this.filename+'?')) MDB.deleteFile(this.filename) }; - button.filename = name; - button.title = 'delete'; - i++; - }); - } - /** setup UI control elements */ - var UC = moto.ui.prefix('meta'), + let UC = moto.ui.prefix('meta'), ctrlLeft = $('control-left'), ctrlRight = $('control-right'), assets = $('assets'), @@ -841,6 +528,319 @@ THREE.Face3.prototype.mVisible = function(show) { ctrlRight.style.display = 'block'; } + function inputHasFocus() { + return DOC.activeElement && (DOC.activeElement != DOC.body); + } + + function setAnchorSelection(x,y,z) { + if (selected.length === 0) return; + for (let i=0; i 0) { + while (i < selected.length) { + bounds.update(selected[i++].pos); + } + } else { + while (i < selectable.length) { + bounds.update(selectable[i++].cube.pos); + } + } + SPACE.platform.setMaxZ(i > 0 ? bounds.z.max : 0); + } + + function keyPressHandler(evt) { + if (inputHasFocus()) return false; + let handled = true, style; + switch(evt.charCode) { + case cca('h'): + computeCenter(); + SPACE.view.home(); + break; + case cca('t'): + computeCenter(); + SPACE.view.top(); + break; + case cca('a'): + setEditMode(EDIT.ADD); + break; + case cca('s'): + setEditMode(EDIT.SELECT); + break; + case cca('d'): + setEditMode(EDIT.DELETE); + break; + case cca('e'): + setMarkMode(MARK.EMIT); + break; + case cca('w'): + setMarkMode(MARK.SLIDE); + break; + case cca('q'): + setMarkMode(MARK.CLEAR); + break; + case cca('c'): + if (selected.length === 0) { + setEditMode(EDIT.CLONE) + } else { + cloneSelection(false); + } + break; + case cca('m'): + mirrorSelection(); + break; + case cca('n'): + window.n = []; + for (let i=0; i 15 ? sname.substring(0,13)+"..." : sname; + html.push('
'); + i++; + }); + html.push(); + lib.innerHTML = html.join(''); + + i = 0; + filenames.forEach(function(name) { + button = $('slib_'+i); + button.onclick = function() { libraryToSelection(this.filename) }; + button.title = name+'\rvertices: '+files[name].vertices; + button.filename = name; + button = $('dlib_'+i); + button.onclick = function() { if (confirm('delete '+this.filename+'?')) MDB.deleteFile(this.filename) }; + button.filename = name; + button.title = 'delete'; + i++; + }); + } + /** ****************************************************************** * Object Definitions ******************************************************************* */ @@ -915,8 +915,8 @@ THREE.Face3.prototype.mVisible = function(show) { bt: this.makeFace('bt') }; - var b = this.box, f, key; - for (var i=0; i 0) scale = 1.0; @@ -1488,7 +1488,7 @@ THREE.Face3.prototype.mVisible = function(show) { } function geoToMesh(geo) { - var newgeo = geo.clone(), + let newgeo = geo.clone(), mesh = new THREE.Mesh(newgeo, boxMaterial); newgeo.filename = geo.filename; mesh.filename = geo.filename; @@ -1500,7 +1500,7 @@ THREE.Face3.prototype.mVisible = function(show) { if (LIBCACHE[filename]) callback(LIBCACHE[filename]); MDB.getFile(filename, function(vertices) { if (!vertices) return callback(); - var geo = THREE.Geometry.fromVertices(vertices).unitScale().center().fixNormals(); + let geo = THREE.Geometry.fromVertices(vertices).unitScale().center().fixNormals(); geo.filename = filename; callback(LIBCACHE[filename] = geo); }); @@ -1509,7 +1509,7 @@ THREE.Face3.prototype.mVisible = function(show) { function libraryToSelection(filename) { if (selected.length === 0) return alert("no selection for mesh"); getLibraryGeo(filename, function(geo) { - for (var i=0; i 0) KDB.putFile(name, geo.vertices.toFloat32(), function(done) { @@ -1535,7 +1535,7 @@ THREE.Face3.prototype.mVisible = function(show) { function selectionToLibrary() { if (selected.length === 0) return alert("make a selection to import"); - var scale = unitsToMM(spaceUnits), + let scale = unitsToMM(spaceUnits), geo = selectionToGeometry(scale), name = prompt("Name of Selection", ""); if (name && name.length > 0) MDB.putFile(name, geo.vertices.toFloat32()); @@ -1543,9 +1543,9 @@ THREE.Face3.prototype.mVisible = function(show) { function downloadSelection() { if (selected.length === 0) return alert("make a selection to export"); - var name = prompt("Download Name", spaceName); + let name = prompt("Download Name", spaceName); if (!name) return; - var scale = unitsToMM(spaceUnits), + let scale = unitsToMM(spaceUnits), geo = selectionToGeometry(scale), stl = new moto.STL().encode(geo.vertices, geo.normals), blob = new Blob([stl], {type: 'application/octet-binary'}), @@ -1553,7 +1553,7 @@ THREE.Face3.prototype.mVisible = function(show) { } function sendWorkspace(to) { - var data = (to || gs_meta.sendTo)+"/data/"+spaceID, + let data = (to || gs_meta.sendTo)+"/data/"+spaceID, space = (to || gs_meta.sendTo)+"/meta/#"+spaceID; new moto.Ajax(function(res, ajax) { if (res) WIN.location = space; @@ -1562,8 +1562,8 @@ THREE.Face3.prototype.mVisible = function(show) { function selectAll() { selected = []; - for (var i = 0; i < selectable.length; i++) { - var cube = selectable[i].cube; + for (let i = 0; i < selectable.length; i++) { + let cube = selectable[i].cube; cube.setSelected(true); selected.push(cube); } @@ -1573,12 +1573,12 @@ THREE.Face3.prototype.mVisible = function(show) { function setSelection(cubes) { clearSelections(); selected = cubes; - for (var i=0; i= 0) { if (!confirm("delete workspace "+(SPACENAMES[id] || id))) return; SPACES.splice(io,1); @@ -1981,17 +1981,16 @@ THREE.Face3.prototype.mVisible = function(show) { } else { SPACE.view.load({scale:0.1}); } - var hash = LOC.hash; + let hash = LOC.hash, handled = false; if (hash.length > 1) { - var x = hash.substring(1).split("/"), + let x = hash.substring(1).split("/"), xs = x[0] || '', - xv = x[1] || '', - handled = false; + xv = x[1] || ''; if (xs && xs.length >= 4 && xs.length <= 8) { handled = true; new moto.Ajax(function (json) { if (json && json.charAt(0) === '{') { - var rec = JSON.parse(json); + let rec = JSON.parse(json); loadWorkspace(rec.rec); spaceID = rec.space; setSpaceVersion(rec.ver); @@ -2025,7 +2024,7 @@ THREE.Face3.prototype.mVisible = function(show) { function loadWorkspace(json) { if (json && json.length > 0) { - var cubes = selectable.slice(), + let cubes = selectable.slice(), wrk = JSON.parse(json), pos = wrk.pos, px = wrk.px ? del_decode(rle_decode(wrk.px)) : null, @@ -2049,14 +2048,14 @@ THREE.Face3.prototype.mVisible = function(show) { removeCube(cubes[i++]); } while (count-- > 0) { - var cube = px ? new Cube(px[pid], py[pid], pz[pid++]) : new Cube(pos[pid++], pos[pid++], pos[pid++]), + let cube = px ? new Cube(px[pid], py[pid], pz[pid++]) : new Cube(pos[pid++], pos[pid++], pos[pid++]), mfile = mesh ? mesh[mp++] : null; for (i = 0; i < FACES.length; i++) { cube.faces[FACES[i]].mark = marks[fid++]; } if (!(mfile === null || mfile === '-') && mfac && mfro) { (function() { - var mi = {c: cube, f: mfac[mfr], r: mfro[mfr], m: mmir[mfr], a:manc[mfr++]}; + let mi = {c: cube, f: mfac[mfr], r: mfro[mfr], m: mmir[mfr], a:manc[mfr++]}; getLibraryGeo(files[mfile], function (geo) { if (!geo) return; mi.c.setMesh(geoToMesh(geo)); @@ -2081,7 +2080,7 @@ THREE.Face3.prototype.mVisible = function(show) { } else { seedWorkspace(); } - var spaces = SDB['spaces'], + let spaces = SDB['spaces'], spaceNames = SDB['spaceNames']; if (spaceNames) { SPACENAMES = JSON.parse(spaceNames); @@ -2110,7 +2109,7 @@ THREE.Face3.prototype.mVisible = function(show) { function genKey() { while (true) { - var k = Math.round(Math.random() * 9999999999).toString(36); + let k = Math.round(Math.random() * 9999999999).toString(36); if (k.length >= 4 && k.length <= 8) return k; } }