From c279afaa222864894bb562b1418b90fae61e98d7 Mon Sep 17 00:00:00 2001 From: Fabien Benetou Date: Wed, 3 Apr 2024 16:52:55 +0200 Subject: [PATCH] bump item up and down, clarified from ratio to step --- index.html | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/index.html b/index.html index 04fa979..53609c7 100644 --- a/index.html +++ b/index.html @@ -80,9 +80,9 @@ AFRAME.registerComponent('getcsljson', { } }) -function notesFromArray(data, generatorName="", field="title", offset=1, ratio=1/10, depth=-.5 ){ +function notesFromArray(data, generatorName="", field="title", offset=1, step=1/10, depth=-.5 ){ data.slice(0,maxItemsFromSources).map( (n,i) => { - addNewNote( n[field], "0 "+(offset+i*ratio)+" "+depth, ".1 .1 .1", null, generatorName ) + addNewNote( n[field], "0 "+(offset+i*step)+" "+depth, ".1 .1 .1", null, generatorName ) .setAttribute("onreleased","spreadItemsFromCollection('getcsljson', 1.5)") }) } @@ -107,28 +107,50 @@ function getDataToSaveBack(){ }) } -//function bumpItemUp(id, generatorName){ -function bumpItemUp(id, generatorName){ +// assumption that a step here is 1/10 +function bumpItemUp(id, generatorName){ bumpItem(id, generatorName, 1/10*1.1) } +function bumpItemDown(id, generatorName){ bumpItem(id, generatorName, -1/10*1.1) } +function bumpItem(id, generatorName, step){ if (!id || !generatorName) return // could use annotation symbols with jxr // sets x and z to 0 though // requires to exist for each list item - // could bump on y by ratio*1.1 - document.getElementById(id).object3D.position.y += 1/10*1.1 + document.getElementById(id).object3D.position.y += step // assuming here they are already aligned, which is there case if they have onreleased already set with spreadItemsFromCollection() spreadItemsFromCollection(generatorName, 1.5) } -function spreadItemsFromCollection( generatorName, offset=1, ratio=1/10, depth=-.5 ){ +function spreadItemsFromCollection( generatorName, offset=1, step=1/10, depth=-.5 ){ getArrayFromClass(generatorName).sort((a,b)=>a.getAttribute('position').y-b.getAttribute('position').y).map( (n,i) => { - n.setAttribute('position', "0 "+(offset+i*ratio)+" "+depth) + n.setAttribute('position', "0 "+(offset+i*step)+" "+depth) n.setAttribute('rotation', "0 0 0") // could also be based on the average of all items, the first item, last one, etc // see also snap-on-pinchended component - }) + let items = getArrayFromClass(generatorName).sort((b,a)=>a.getAttribute('position').y-b.getAttribute('position').y).map( n => n.getAttribute('value') ) + shareLiveEvent('modified list', items) } + +let sessionId = crypto.randomUUID() +const sse = 'https://jxr-backend-collab.glitch.me' +const sseEvents = '/events' +function shareLiveEvent(eventName, eventData, server=sse){ + // should make a room based one e.g source URL (even though here with multiple branches on 1 URL it would not work) + // this could be forced via eventData then in turn ignored if the room name does not match + if (!eventName) return + let data = { eventName, sessionId } + if (eventData) data.eventData = eventData + fetch(server+'/newevent/'+JSON.stringify(data)) + // using SSE but should use instead NAF broadcasting +} +const source = new EventSource(sse+sseEvents) +source.addEventListener('message', message => { + let json = JSON.parse(message.data) + if (json.eventData) console.log('Got', json.eventData); + // on first connecting getting an array of historical messages then after that an object for each new live event +}) + // data could come from parsing back order from getArrayFromClass('getcsljson').map(i=>i.getAttribute('position').y) // cf https://gist.github.com/Utopiah/26bae9fecc7a921f8bfd38cf5fc91612#file-logo_vr_hubs-js-L44 // yet still needs the actual data itself and adding a comment field for position if to be used back here rather than e.g Zotero