master
Fabien Benetou 4 years ago
parent a479cb8abc
commit 1f753edbca
  1. 173
      pimvrhelpers.js

@ -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…
Cancel
Save