aboutsummaryrefslogtreecommitdiff
path: root/src/js/arching-kaos-tools.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/js/arching-kaos-tools.js')
-rw-r--r--src/js/arching-kaos-tools.js541
1 files changed, 541 insertions, 0 deletions
diff --git a/src/js/arching-kaos-tools.js b/src/js/arching-kaos-tools.js
new file mode 100644
index 0000000..3d5b1d1
--- /dev/null
+++ b/src/js/arching-kaos-tools.js
@@ -0,0 +1,541 @@
+/*
+ * A new feature for a new future:
+ *
+ * We will get `location.search` values to figure out where the visitor wants
+ * to go.
+ *
+ * We should then replace the menu links with these ones.
+ *
+ * We should also modify the existing menu mechanism to show/hide depending on
+ * the "route" we got from `location.search`.
+ *
+ */
+
+// Irrelevant for now
+if (DEBUG) console.log(window.location);
+
+
+/*
+ * Array of all the menu-panes IDs
+var menuids = [
+ '#welcome-section',
+ '#about-section',
+ '#zchain-data-section',
+ '#news-section',
+ '#stats-section',
+ '#mixtapes-section',
+ '#chat-section',
+ '#mypage-section',
+ '#stellar-balances',
+ '#stellar-data-config',
+ '#arching-kaos-id',
+ '#files-section'
+];
+ */
+
+
+/*
+ * Function that gets nickname and parses the config variable.
+ *
+ * Returns the key:value pairs of the configuration and proceeds
+ * to get the zchain
+ */
+function getConfiguration(a,eid){
+ progressPlaceholder.max++;
+// var sta = document.createElement("pre");
+// sta.innerText = "Parsing the configuration..."
+// currentLogMessageElement.innerText = sta.innerText;
+// logsAreaElement.appendChild(sta);
+ archingKaosLog("Parsing the configuration...")
+ url=activeSettings.ipfsGatewayAddress[activeSettings.ipfsSelectedGatewayAddress]+'ipns/'+a
+ fetch(url, {
+ method:'GET',
+ headers:{
+ Accept: 'application/json'
+ }
+ }).then(response=>{
+ if(response.ok){
+ response.json().then(json=>{
+ /* Could be json object with
+ * - genesis
+ * - gpg
+ * - profile {
+ * - nickname
+ * }
+ * - zchain
+ */
+ var divs = document.querySelector('#'+eid)
+ if(json.genesis){
+ var p = document.createElement("p")
+ p.innerText="Genesis: " +json.genesis
+ divs.appendChild(p)
+ }
+ if(json.gpg){
+ var p = document.createElement("p")
+ p.innerText="GPG: " +json.gpg
+ divs.appendChild(p)
+ }
+ if(json.profile.nickname){
+ var p = document.createElement("p")
+ p.innerText="Nickname: " +json.profile.nickname
+ divs.appendChild(p)
+ }
+ if(json.zchain){
+ var p = document.createElement("p")
+ p.innerText="zchain: " +json.zchain
+ divs.appendChild(p)
+ }
+ participants[eid]=json;
+ progressPlaceholder.value++;
+ zseek(json.zchain);
+ })
+ }
+ })
+}
+
+// Although we implemented something similar already,
+// it seems like I was not happy so JRM ( Just Repeat Myself )
+// #TODO : Revisit this: akiseek(i)
+
+/*
+ * Function to seek configuration for any IPNS address i
+ * it's used to seek specifically the Freighter user's address.
+ *
+ * Returns p DOM elements on #arching-kaos-id pane
+ */
+function getArchingKaosIdentityFromIPNSKey(ipnsKey){
+ archingKaosLog("Parsing AKID...");
+ url=activeSettings.ipfsGatewayAddress[activeSettings.ipfsSelectedGatewayAddress]+'ipns/'+ipnsKey;
+ fetch(url, {
+ method:'GET',
+ headers:{
+ Accept: 'application/json'
+ }
+ }).then(response=>{
+ if(response.ok){
+ response.json().then(json=>{
+ /* Could be json object with
+ * - genesis
+ * - gpg
+ * - profile {
+ * - nickname
+ * }
+ * - zchain
+ */
+ var divs = document.querySelector('#arching-kaos-id');
+ if(json.genesis){
+ var p = document.createElement("p");
+ p.innerText="Genesis: " +json.genesis;
+ divs.appendChild(p);
+ }
+ if(json.gpg){
+ var p = document.createElement("p");
+ p.innerText="GPG: " +json.gpg;
+ divs.appendChild(p);
+ }
+ if(json.profile.nickname){
+ var p = document.createElement("p");
+ p.innerText="Nickname: " +json.profile.nickname;
+ divs.appendChild(p);
+ }
+ if(json.zchain){
+ var p = document.createElement("p");
+ p.innerText="zchain: " +json.zchain;
+ divs.appendChild(p);
+ }
+ progressPlaceholder.max++;
+ progressPlaceholder.value++;
+ zseek(json.zchain,eid,json);
+ })
+ }
+ })
+}
+/*
+ * Function to seek Zblocks
+ *
+ * Returns Block and Signature for each ZBLOCK found.
+ *
+ * Proceeds to the blocks found.
+ */
+function zseek(i,d,j){
+ var divs = document.querySelector('#zchain-data-section');
+ var details = document.createElement("details");
+ details.id = 'zd-' + i;
+ divs.appendChild(details);
+
+ if(i){
+ var p = document.createElement("summary");
+ p.innerText="zchain: " +i;
+ details.appendChild(p);
+ }
+ archingKaosLog("Seeking zchain "+i+"...");
+ url = activeSettings.ipfsGatewayAddress[activeSettings.ipfsSelectedGatewayAddress]+'ipns/'+i;
+ fetch(url, {
+ method:'GET',
+ headers:{
+ Accept: 'application/json'
+ }
+ }).then(response=>{
+ if(response.ok){
+ var zblock = "";
+ if ( DEBUG ) console.log(response);
+ if ( response.headers.has('Etag') ){
+ zblock = response.headers.get('Etag').replace(/"/g,'');
+ zchain[i] = {loading : "started"};
+ console.log(zchain);
+ // callHereToSetUpListenerFor(zchain[i]);
+ }
+ response.json().then(json=>{
+ /* Could be json object with
+ * - block
+ * - block_signature
+ */
+ if(zblock === "" ) {
+ var divs = document.querySelector('#zchain-data-section');
+ if(json.block){
+ var p = document.createElement("p");
+ p.innerText="Block: " +json.block;
+ details.appendChild(p);
+ }
+ if(json.block_signature){
+ var p = document.createElement("p");
+ p.innerText="Signature: " +json.block_signature;
+ details.appendChild(p);
+ }
+ } else {
+ progressPlaceholder.max++;
+ progressPlaceholder.value++;
+ seekzblock(zblock,i,d,j);
+ }
+ })
+ }
+ })
+}
+
+// seeks a zblock obviously. another double function
+// TODO: figure out why the second one exists
+
+/*
+ * Function gets ZBLOCK and parses it
+ *
+ * Returns Block and Signature elements on DOM as p
+ *
+ * Proceeds to seek the block found
+ */
+function seekzblock(i,l){
+ if (DEBUG) console.log("Zblock:: "+i);
+ if (DEBUG) console.log("Zchain:: "+l);
+ var divs = document.querySelector('#zd-' + l);
+ var zblockElement = document.createElement("article");
+ zblockElement.id = 'zb-'+i;
+ if (document.querySelector("#zchain-data-sec-not-found")) document.querySelector("#zchain-data-sec-not-found").hidden=true;
+ if(i){
+ var p = document.createElement("p");
+ p.innerText="zblock: " +i;
+ zblockElement.appendChild(p);
+ }
+ divs.appendChild(zblockElement);
+ archingKaosLog("Seeking ZBLOCK "+i+"...");
+ url = activeSettings.ipfsGatewayAddress[activeSettings.ipfsSelectedGatewayAddress]+'ipfs/'+i;
+ fetch(url, {
+ method:'GET',
+ headers:{
+ Accept: 'application/json'
+ }
+ }).then(response=>{
+ if(response.ok){
+ response.json().then(json=>{
+ /* Could be json object with
+ * - block
+ * - block_signature
+ */
+ // var divs = document.querySelector('#zchain-data-section');
+ if(json.block){
+ var p = document.createElement("p");
+ p.innerText="Block: " +json.block;
+ p.id=i;
+ zblockElement.appendChild(p);
+ }
+ if(json.block_signature){
+ var p = document.createElement("p");
+ p.innerText="Signature: " +json.block_signature;
+ zblockElement.appendChild(p);
+ }
+ progressPlaceholder.max++;
+ progressPlaceholder.value++;
+ seekblock(json.block,i,l);
+ })
+ }
+ })
+}
+
+/*
+ * Seeks a block and parses it.
+ *
+ * Returns each element found in #zchain-data-section pane.
+ *
+ * Proceeds to execute the block.
+ */
+function seekblock(i,l,d,j){
+ if (DEBUG) console.log("THE CHAIN: " + d);
+ if (DEBUG) console.log("THE ZBLOCK: " + l);
+ detailsPlace = document.querySelector('#zb-'+l);
+ archingKaosLog("Seeking block "+i+"...");
+ progressPlaceholder.max++;
+ url = activeSettings.ipfsGatewayAddress[activeSettings.ipfsSelectedGatewayAddress]+'ipfs/'+i;
+ fetch(url, {
+ method:'GET',
+ headers:{
+ Accept: 'application/json'
+ }
+ }).then(response=>{
+ if(response.ok){
+ response.json().then(json=>{
+ /* Could be json object with
+ * - action
+ * - data
+ * - gpg
+ * - timestamp
+ * - previous
+ * - detach
+ */
+ // var divs = document.querySelector('#zchain-data-section');
+ if(json.action){
+ var p = document.createElement("p");
+ p.innerText="Action: " +json.action;
+ if(detailsPlace!== null) detailsPlace.appendChild(p);
+ }
+ if(json.detach){
+ var p = document.createElement("p");
+ p.innerText="Detach: " +json.detach;
+ if(detailsPlace!== null) detailsPlace.appendChild(p);
+ }
+ if(json.gpg){
+ var p = document.createElement("p");
+ p.innerText="GPG: " +json.gpg;
+ if(detailsPlace!== null) detailsPlace.appendChild(p);
+ }
+ if(json.data){
+ var p = document.createElement("p");
+ var a = document.createElement("a");
+ a.href = activeSettings.ipfsGatewayAddress[activeSettings.ipfsSelectedGatewayAddress]+'ipfs/'+json.data;
+ a.innerText = json.data;
+ p.innerText="Data: ";
+ p.appendChild(a);
+ if(detailsPlace!== null) detailsPlace.appendChild(p);
+ }
+ if(json.timestamp){
+ var p = document.createElement("p");
+ p.innerText="Timestamp: " +json.timestamp;
+ if(detailsPlace!== null) detailsPlace.appendChild(p);
+ }
+ if(json.previous){
+ var p = document.createElement("p");
+ p.innerText="Previous: " +json.previous;
+ if(detailsPlace!== null) detailsPlace.appendChild(p);
+ }
+ progressPlaceholder.value++;
+ exe(json.action,json.data,json,l,d,j);
+ if(json.previous!="QmbFMke1KXqnYyBBWxB74N4c5SBnJMVAiMNRcGu6x1AwQH"){
+ if (DEBUG) console.log(json.previous, d);
+ seekzblock(json.previous, d);
+ } else {
+ archingKaosLog("Done loading " + d + " zchain!")
+ progressPlaceholder.value++;
+ zchain[d] = {loading: "completed"};
+
+ }
+ })
+ }
+ })
+}
+
+/*
+ * Function that executes a specified block
+ *
+ * Returns the result of execution on the proper page in DOM
+ */
+function exe(a,d,j,x,y,z){
+ if (DEBUG) console.log("Executing...",a,d,j,x,y,z)
+ archingKaosLog("Render ZBLOCK "+x+" as " + a + " ...");
+ gurl = activeSettings.ipfsGatewayAddress[activeSettings.ipfsSelectedGatewayAddress]+'ipfs/'
+ fetch(gurl+d, {
+ method:'GET',
+ headers:{
+ Accept: 'application/json'
+ }
+ }).then(response=>{
+ if(response.ok){
+ response.json().then(json=>{
+ /* Could be json object with
+ * - block
+ * - block_signature
+ */
+ if (a == "files/add") {
+ var divs = document.querySelector('#files-section');
+ var art = document.createElement("article");
+ art.id = d;
+ if(json.title){
+ var h3 = document.createElement("h3");
+ h3.innerText = json.filename;
+ art.appendChild(h3);
+ }
+ if(json.datetime){
+ var small = document.createElement("p");
+ small.innerText="Published: " +json.datetime;
+ art.appendChild(small);
+ }
+ for (let i in participants){
+ if ( participants[i].gpg === j.gpg ){
+ if (participants[i].profile.nickname){
+ var small = document.createElement("p");
+ small.innerText="Author: " +participants[i].profile.nickname;
+ art.appendChild(small);
+ }
+ }
+ }
+ if(json.ipfs){
+ // getipfstext(json.ipfs,art.id);
+ var small = document.createElement("a");
+ small.innerText=json.filename;
+ small.href="https://ipfs.arching-kaos.com/ipfs/"+json.ipfs+"?filename="+json.filename;
+ art.appendChild(small);
+ }
+ divs.appendChild(art);
+ if(document.querySelector("#files-sec-not-found")) document.querySelector("#files-sec-not-found").hidden = true;
+ divs.appendChild(document.createElement("hr"));
+ }
+ else if (a == "news/add") {
+ var divs = document.querySelector('#news-section');
+ var art = document.createElement("article");
+ art.id = d;
+ if(json.title){
+ var h3 = document.createElement("h3");
+ h3.innerText = json.title;
+ art.appendChild(h3);
+ }
+ if(json.datetime){
+ var small = document.createElement("p");
+ small.innerText="Published: " +json.datetime;
+ art.appendChild(small);
+ }
+ for (let i in participants){
+ if ( participants[i].gpg === j.gpg ){
+ if (participants[i].profile.nickname){
+ var small = document.createElement("p");
+ small.innerText="Author: " +participants[i].profile.nickname;
+ art.appendChild(small);
+ }
+ }
+ }
+ if(json.ipfs){
+ getipfstext(json.ipfs,art.id);
+ }
+ if (document.querySelector("#news-sec-not-found")) document.querySelector("#news-sec-not-found").hidden=true;
+ divs.appendChild(art);
+ divs.appendChild(document.createElement("hr"));
+ }
+ else if (a == "mixtape/add") {
+ var divs = document.querySelector('#mixtapes-section');
+ var art = document.createElement("article");
+ art.id = d;
+ if(json.title){
+ var h3 = document.createElement("h3");
+ h3.innerText = json.title;
+ art.appendChild(h3);
+ }
+ if(json.artist){
+ var h4 = document.createElement("h4");
+ h4.innerText = json.artist;
+ art.appendChild(h4);
+ }
+ if(json.timestamp){
+ var small = document.createElement("small");
+ small.innerText="Published: " +json.timestamp;
+ art.appendChild(small);
+ }
+ if(json.ipfs){
+ var audio = document.createElement("audio");
+ audio.setAttribute('controls','');
+ audio.id = 'mixtape-'+x;
+ mixtapeIds.push(audio.id);
+ var source = document.createElement("source");
+ source.src = activeSettings.ipfsGatewayAddress[activeSettings.ipfsSelectedGatewayAddress]+'ipfs/' + json.ipfs;
+ var rs = source.cloneNode(true);
+ audio.appendChild(source);
+ radio.appendChild(rs);
+ art.appendChild(audio);
+ audio.addEventListener( "loadedmetadata", ()=>{
+ console.log(x+"'s duration is: "+ audio.duration + " Ceiled: " + Math.ceil(audio.duration) + " added on " + j.timestamp + " or " + json.timestamp + " DIFF: " + (j.timestamp - json.timestamp));
+ }, false );
+ }
+ if (document.querySelector("#mixtapes-sec-not-found")) document.querySelector("#mixtapes-sec-not-found").hidden=true;
+ divs.appendChild(art);
+ }
+ else {
+ if (DEBUG) console.log("Found unknown module/action: "+a);
+ archingKaosLog(a + " module not found");
+ }
+ // seekblock(json.block)
+ progressPlaceholder.max++;
+ progressPlaceholder.value++;
+ })
+ }
+ })
+}
+
+/*
+ * Function gets an IPFS text file and parses it
+ * so it can be...
+ * Return(ed) in a pre DOM element
+ */
+function getipfstext(ipfs,articleid){
+ url = activeSettings.ipfsGatewayAddress[activeSettings.ipfsSelectedGatewayAddress]+'ipfs/'+ipfs;
+ fetch(url, {
+ method:'GET',
+ headers:{
+ Accept: 'text/plain'
+ }
+ }).then(response=>{
+ if(response.ok){
+ response.text().then(text=>{
+ var divs = document.querySelector('#'+articleid);
+ if(text){
+ var pre = document.createElement("div");
+ var lines = text.split('\n');
+ // remove one line, starting at the first position
+ lines.splice(0,1);
+ // join the array back into a single string
+ var newtext = lines.join('\n');
+ pre.innerHTML = marked.parse(newtext);
+ divs.appendChild(pre);
+ }
+ progressPlaceholder.max++;
+ progressPlaceholder.value++;
+ // seekblock(json.block)
+ })
+ }
+ })
+}
+
+
+function checkIfChainAndProceed(json){
+ if (json.zchain) {
+ var a = document.createElement("pre");
+ a.innerText=json.zchain;
+ aknet.appendChild(a);
+ }
+ zseek(json.zchain);
+}
+/*
+ * Get latest block from localnode
+ * If any, adds its contents to the page
+ */
+async function ringlocalbell(){
+ archingKaosLog("Ringing local bell...");
+ var url=localnode;
+ archingKaosFetchJSON(url, checkIfChainAndProceed);
+ archingKaosLog("Ringing local bell... Done!");
+}
+
+// vim: tabstop=4 shiftwidth=4 expandtab softtabstop=4