parent
a479cb8abc
commit
1f753edbca
@ -0,0 +1,173 @@ |
|||||||
|
//---------PIM helper functions-----------------------------------------------------------
|
||||||
|
/* |
||||||
|
currently PmWiki backend |
||||||
|
could use http://fabien.benetou.fr/Site/AllRecentChanges?action=source to check for update
|
||||||
|
heavy but nearly no processing required |
||||||
|
enough if done once per minute or so |
||||||
|
if update, request serverrender on modified page |
||||||
|
IFF it's being displayed |
||||||
|
planned Evernote backend |
||||||
|
https://github.com/evernote/evernote-sdk-js
|
||||||
|
https://github.com/wanasit/everest-js
|
||||||
|
https://stackoverflow.com/questions/24580588/how-to-list-all-the-notes-from-an-evernote-notebook-javascript-node-js
|
||||||
|
https://dev.evernote.com/doc/articles/polling_notification.php
|
||||||
|
or other popular PIMs |
||||||
|
https://developers.trello.com/
|
||||||
|
http://www.xmind.net/developer/
|
||||||
|
ideally with webhooks on a backend abstraction with coherent API
|
||||||
|
|
||||||
|
*/ |
||||||
|
|
||||||
|
function pimvrSaveItemsStates(callback) { |
||||||
|
function updateItemsStates(globalStates){
|
||||||
|
let pageStates = {}; |
||||||
|
let [group, page] = getPageGroup(); |
||||||
|
let elements = document.body.querySelectorAll('.pimvr-item'); |
||||||
|
for (let item of elements) { |
||||||
|
let id = item.getAttribute("id"); |
||||||
|
let position = item.getComputedAttribute("position"); |
||||||
|
pageStates[id] = {"position": position}; |
||||||
|
} |
||||||
|
globalStates[group+"_"+page] = pageStates; |
||||||
|
pimvrSaveRemote("ItemsStates", JSON.stringify(globalStates)); |
||||||
|
return "Items states saved"; |
||||||
|
|
||||||
|
} |
||||||
|
pimvrLoadRemote("ItemsStates", updateItemsStates); |
||||||
|
}
|
||||||
|
|
||||||
|
function pimvrSaveConfiguration(callback) { |
||||||
|
let configuration = {}; |
||||||
|
let elements = document.body.querySelectorAll('.pimvr-configuration'); |
||||||
|
for (let item of elements) { |
||||||
|
let id = item.getAttribute("id"); |
||||||
|
let position = item.getComputedAttribute("position"); |
||||||
|
configuration[id] = {"position": position}; |
||||||
|
} |
||||||
|
|
||||||
|
pimvrSaveRemote("Configuration", JSON.stringify(configuration)); |
||||||
|
return "Configuration saved"; |
||||||
|
} |
||||||
|
|
||||||
|
function pimvrLoadIoTData(callback) { |
||||||
|
// should give min/max ranges, here seems to be 0-1010
|
||||||
|
// to use (once normalized) as an attribute value
|
||||||
|
// used on http://jsbin.com/nucanat/edit?html,output
|
||||||
|
// warning HTTPS on tick is really hammering
|
||||||
|
const readURL = "https://fabien.benetou.fr/PIMVRdata/IoTData?action=source"; |
||||||
|
|
||||||
|
var myRequest = new XMLHttpRequest(); |
||||||
|
myRequest.open('GET', readURL); |
||||||
|
myRequest.onreadystatechange = function () { |
||||||
|
if (myRequest.readyState === 4) { |
||||||
|
callback(myRequest.responseText); |
||||||
|
} |
||||||
|
}; |
||||||
|
myRequest.send(); |
||||||
|
}
|
||||||
|
|
||||||
|
function pimvrServerRender(group, page, callback) { |
||||||
|
const readURL = "https://fabien.benetou.fr/"+group+"/"+page+"?action=serverrender"; |
||||||
|
|
||||||
|
var myRequest = new XMLHttpRequest(); |
||||||
|
myRequest.open('GET', readURL); |
||||||
|
myRequest.onreadystatechange = function () { |
||||||
|
if (myRequest.readyState === 4) { |
||||||
|
callback(JSON.parse(myRequest.responseText).res); |
||||||
|
} |
||||||
|
}; |
||||||
|
myRequest.send(); |
||||||
|
} |
||||||
|
|
||||||
|
function pimvrLoadRemoteSmarthWatchConfiguration(callback) { |
||||||
|
|
||||||
|
const readURL = "https://fabien.benetou.fr/PIMVRdata/SmartWatchConfiguration?action=source"; |
||||||
|
|
||||||
|
var myRequest = new XMLHttpRequest(); |
||||||
|
myRequest.open('GET', readURL); |
||||||
|
myRequest.onreadystatechange = function () { |
||||||
|
if (myRequest.readyState === 4) { |
||||||
|
callback(JSON.parse(myRequest.responseText)); |
||||||
|
} |
||||||
|
}; |
||||||
|
myRequest.send(); |
||||||
|
} |
||||||
|
//pimvrLoadRemoteSmarthWatchConfiguration(console.log);
|
||||||
|
// usage unclear, can be used as
|
||||||
|
// haptic feedback on interactible items e.g. vibrate on gaze
|
||||||
|
// controller backup e.g. gaze+click
|
||||||
|
// controller locator e.g. making 2 bright columns
|
||||||
|
// heart rate monitor (sadly not with PebbleTime) to reshape experience
|
||||||
|
|
||||||
|
function pimvrLoadRemoteMetadata(group, page, callback, query) { |
||||||
|
|
||||||
|
const readURL = "https://fabien.benetou.fr/"+group+"/"+page+"?action=metajson"; |
||||||
|
|
||||||
|
var myRequest = new XMLHttpRequest(); |
||||||
|
myRequest.open('GET', readURL+"&query="+query, true); |
||||||
|
myRequest.onreadystatechange = function () { |
||||||
|
if (myRequest.readyState === 4) { |
||||||
|
callback(JSON.parse(myRequest.responseText)); |
||||||
|
} |
||||||
|
}; |
||||||
|
myRequest.send(); |
||||||
|
} |
||||||
|
|
||||||
|
function pimvrLoadRemote(page, callback) { |
||||||
|
|
||||||
|
const readURL = "https://fabien.benetou.fr/PIMVRdata/"+page+"?action=source"; |
||||||
|
// assumes JSON
|
||||||
|
|
||||||
|
var myRequest = new XMLHttpRequest(); |
||||||
|
myRequest.open('GET', readURL); |
||||||
|
myRequest.onreadystatechange = function () { |
||||||
|
if (myRequest.readyState === 4) { |
||||||
|
callback(JSON.parse(myRequest.responseText)); |
||||||
|
} |
||||||
|
}; |
||||||
|
myRequest.send(); |
||||||
|
} |
||||||
|
|
||||||
|
function pimvrSaveRemote(page, data) { |
||||||
|
const writeURL = "https://fabien.benetou.fr/PIMVRdata/"+page+"?action=edit"; |
||||||
|
|
||||||
|
var myWriteRequest = new XMLHttpRequest(); |
||||||
|
myWriteRequest.open('POST', writeURL, true); |
||||||
|
myWriteRequest.setRequestHeader("Content-Type", |
||||||
|
"application/x-www-form-urlencoded"); |
||||||
|
myWriteRequest.onreadystatechange = function () { |
||||||
|
if (myWriteRequest.readyState === 4) { |
||||||
|
//console.log(myWriteRequest.responseText);
|
||||||
|
console.log("Save on "+page+" sucessful"); |
||||||
|
} |
||||||
|
}; |
||||||
|
console.log("trying to open "+writeURL+"post=1&author=PIMVR&authpw=edit_password&text="+data) |
||||||
|
myWriteRequest.send("post=1&author=PIMVR&authpw=edit_password&text="+data); |
||||||
|
// cf http://www.pmwiki.org/wiki/PmWiki/EditingAPI
|
||||||
|
} |
||||||
|
|
||||||
|
function loadRemoteGraph(callback, params){ |
||||||
|
const myDataURL = "https://vatelier.net/MyDemo/newtooling/wiki_graph.json"; |
||||||
|
// not that as agressive as it gets cached
|
||||||
|
|
||||||
|
var myRequest = new XMLHttpRequest(); |
||||||
|
myRequest.open('GET', myDataURL); |
||||||
|
myRequest.onreadystatechange = function () { |
||||||
|
if (myRequest.readyState === 4) { |
||||||
|
//window.PIMgraph = JSON.parse(myRequest.responseText).Nodes;
|
||||||
|
callback(JSON.parse(myRequest.responseText).Nodes, params); |
||||||
|
} |
||||||
|
}; |
||||||
|
myRequest.send(); |
||||||
|
} |
||||||
|
|
||||||
|
function getMyNeighbours(nodes, page){ |
||||||
|
console.log(nodes[page].Targets); |
||||||
|
} |
||||||
|
|
||||||
|
function getPageGroup(){
|
||||||
|
let group = QueryString.group || "Main"; |
||||||
|
let page = QueryString.page || "HomePage"; |
||||||
|
return [group, page]; |
||||||
|
} |
||||||
|
|
Loading…
Reference in new issue