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.
173 lines
6.0 KiB
173 lines
6.0 KiB
//---------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];
|
|
}
|
|
|
|
|