an infinite space for your big ideas
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
relax-plus-think-space/pimvrhelpers.js

174 lines
6.0 KiB

5 years ago
//---------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];
}