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