Changes

Jump to navigation Jump to search
m
no edit summary
Line 25: Line 25:  
};
 
};
   −
var wbproc = new wbContainer(mw, mwEStruct['wbXntity']);
+
mw.loader.load( '//wiki.personaldata.io/w/index.php?title=User:Abel/WbProcessor.js&action=raw&ctype=text/javascript' );
 +
mw.loader.load( '//wiki.personaldata.io/w/index.php?title=MediaWiki:Gadget-personaldata.js&action=raw&ctype=text/javascript' );
 +
mw.loader.load( '//wiki.personaldata.io/w/index.php?title=User:Abel/experimaintal.js&action=raw&ctype=text/javascript' );
   −
// Check whether the current page is in a relation of interest to an id of interest
+
console.log('test');
var current_entity = wbproc.checkentity( relational_id_list );
  −
// This should return an object of relations and ids
  −
 
  −
console.log( wbproc.xcontains( current_entity, relational_id_list['controller_id'][3] ) );
  −
 
  −
console.log("test: ")
  −
console.log(current_entity);
  −
 
  −
var h = new idxdbContainer( mw );
  −
h.EnqueuePDIO('update record', Date.now(), Date.now());
  −
 
  −
// for each match, render the corresponding ui elements
  −
// current_entity.forEach(pdooui.render);
  −
 
  −
// License: GPL
  −
// Wikibase Processor
  −
 
  −
function wbContainer( universe, location ) {
  −
 
  −
this.main = interjson( checkdive( universe, location ));
  −
var the = this.main;
  −
  −
/* The following is the main exposed function of the current Wb Processing class
  −
usage cases
  −
 
  −
to check the last value in a location given by a preceding array of internal paths to find, with the possibility of array layers between elements of array of paths:
  −
wbproc.checkentity( [ wbEStruct['instanceOfRelations'], wbEStruct['IDPropLoc'], wbEStruct['IDName'], 96 ] );
  −
 
  −
*/
  −
 
  −
this.checkentity = function ( paths ) {
  −
if ( ( the !== undefined ) && ( paths !== undefined ) ){
  −
return proceed( the, paths );
  −
}
  −
}
  −
 
  −
// the list of private helper functions, could not be accessed from outside
  −
function indexinterpolate(obj,i) { return  (obj[i] !== undefined) ? obj[i] : obj};
  −
// helper function for checking a part of an array exists
  −
function indexcheck(obj,i) {  if ( obj !== undefined) { return ( obj[i] !== undefined ) ? obj[i] : undefined } };
  −
// dive selects matrix.a.b.c.d from the array called matrix and 'a.b.c.d' as string
  −
// if a.b.c.d does not exists, it returns the substructure until the substructure exists, if d does not exist, it returns matrix.a.b.c e.g.
  −
function dive(array, read){
  −
if ( array !== undefined ) {
  −
return (read + '').split('.').reduce(indexinterpolate, array);
  −
}
  −
}
  −
function check(array, read){
  −
if ( array !== undefined ) {
  −
return (read + '').split('.').reduce(indexcheck, array);
  −
}
  −
}
  −
 
  −
function proceed(array, read) {
  −
var ret_obj = {},
  −
temp_obj = array,
  −
// Have a holder for instructional control return array
  −
success_o_meter = true,
  −
future_instructional_return = [];
  −
  −
//|||||||||||||||||||||||||||||||||||||||||||||||||||||[ I N S T R U C T I O N S  C O N T R O L  ]||||||||||||||||||||||||||||||||||||||||||||||||||||||
  −
 
  −
// Init program, check if instructions are an object :
  −
if ( ( !Array.isArray(read) ) && ( Object.keys(read).length > 0 ) ) {
  −
 
  −
  −
Object.keys(read).forEach( function(path) {
  −
console.log("instructions are an object, in path " + path);
  −
 
  −
//||||||||||||||||||||||||||[ Check if elements of instruction object are arrays themselves ]||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  −
  −
if ( Array.isArray (read[path]) ) {
  −
var future_return_partition = temp_obj;
  −
Object.keys(read[path]).forEach( function( path2 ) {
  −
 
  −
console.log("instructions are an array of arrays, going through " + read[ path ][ path2 ] );
  −
  −
if ( data_function( future_return_partition, read[ path ][ path2 ] ) !== future_return_partition ){
  −
future_return_partition = data_function( future_return_partition, read[ path ][ path2 ] );
  −
} else {
  −
success_o_meter = false;
  −
}
  −
 
  −
//|||||||||||||||||||||||||||||||||||||||||||||||||||[  I N S T R U C T I O N S  C O N T R O L |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  −
 
  −
});
  −
if ( success_o_meter === true ) {
  −
// Put the result of the travel along the paths in array element of array into the future_instructional_return bunch
  −
console.log("arrived at")
  −
console.log(future_return_partition);
  −
future_instructional_return.push(future_return_partition);
  −
} else {
  −
console.log("seeking derailed");
  −
success_o_meter = true;
  −
future_instructional_return.push( undefined );
  −
}
  −
 
  −
}
  −
 
  −
//|||||||||||||||||| If instruction object element is not an array anymore, lets just do one step ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  −
 
  −
else {
  −
  −
// INCLUDE step block with read[path]
  −
if ( data_function( temp_obj, read[ path ] ) !== temp_obj  ){
  −
future_instructional_return.push( data_function( temp_obj, read[ path ] ) );
  −
} else {
  −
// future_instructional_return.push( undefined );
  −
}
  −
 
  −
}
  −
});
  −
 
  −
temp_obj = future_instructional_return;
  −
}
  −
 
  −
//||||||||||||[ If we are not in instruction object, let's see if we have an instruction array ]||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  −
 
  −
else if ( Array.isArray(read) ) {
  −
// If so let's follow the array of instructions
  −
Object.keys( read ).forEach( function ( ect ) {
  −
if ( data_function( temp_obj, read[ ect ] ) !== temp_obj  ){
  −
  −
temp_obj = data_function( temp_obj, read[ ect ] );
  −
 
  −
} else {
  −
 
  −
success_o_meter = false;
  −
 
  −
}
  −
});
  −
}
  −
 
  −
//||||||||||||[ If we have a single instruction, let's try following that |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  −
 
  −
else {
  −
  −
if ( data_function( temp_obj, read ) !== temp_obj  ){
  −
  −
temp_obj = data_function( temp_obj, read );
  −
 
  −
} else {
  −
 
  −
success_o_meter = false;
  −
 
  −
}
  −
}
  −
// If we haven't got a not found signal along the way, let's try returning the object
  −
 
  −
if ( success_o_meter === true ) {
  −
return temp_obj;
  −
} else {
  −
return undefined;
  −
}
  −
}
  −
 
  −
//|||||||||||||||||||||||||||||||||||||||||||||||||||||[  S T E P  B L O C K  ]||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  −
 
  −
function data_function ( temp_obj, moving ) {
  −
var future_temp_obj = [];
  −
if ( Array.isArray( temp_obj ) ) {
  −
console.log("data is on an array level");
  −
Object.keys( temp_obj ).forEach( function ( ect ) {
  −
  −
// if we are on an array level in the data, lets iterate through the array
  −
  −
console.log("Within partition: " + ect );
  −
if ( checkdive( temp_obj[ ect ], moving ) !== undefined ) {
  −
future_temp_obj.push( checkdive( temp_obj[ ect ], moving ) );
  −
}
  −
 
  −
});
  −
temp_obj = future_temp_obj;
  −
  −
} else {
  −
 
  −
// if we are not on an array level, proceed with the path
  −
  −
console.log("data is on an objective level");
  −
  −
if ( checkdive( temp_obj, moving ) !== temp_obj ) {
  −
future_temp_obj = checkdive( temp_obj, moving );
  −
}
  −
if ( future_temp_obj !== undefined ){
  −
temp_obj = future_temp_obj;
  −
} else {
  −
console.log('nothing to see here')
  −
}
  −
 
  −
}
  −
 
  −
return temp_obj;
  −
}
  −
  −
//|||||||||||||||||||||||||||||||||||||||||||||||||||||[  E N D  O F  S T E P  B L O C K    ]|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  −
 
  −
wbContainer.prototype.xcontains = function ( unv, angle ) {
  −
  return proceed( unv, angle );
  −
}
  −
 
  −
function checkdive( array, read ){
  −
if ( check(array, read) !== undefined) {
  −
return dive(array, read);
  −
}
  −
if ( Array.isArray(array) ) {
  −
var potential_return = [];
  −
Object.keys(array).forEach( function(item){
  −
if ( check(array[item], read) !== undefined ) {
  −
potential_return.push( dive( array[item], read) );
  −
}
  −
});
  −
return potential_return;
  −
}
  −
if ( array === read ) {
  −
return read;
  −
}
  −
/*
  −
if (Object.keys( array ).length > 0 ){
  −
Object.keys( array ).forEach( function ( piece ) {
  −
if ( array[ piece ] === read ) { return read };
  −
});
  −
}
  −
*/
  −
}
  −
 
  −
function interjson( obj ) {
  −
try {
  −
return JSON.parse( obj )
  −
} catch (e) {
  −
// if not JSON, do silly things
  −
console.log('not a json ¯\_(ツ)_/¯');
  −
};
  −
}
  −
  −
}
  −
function idxdbContainer( ww ) {
  −
  −
hashCode = function(s) {
  −
if ( s == undefined) {
  −
s = '00'
  −
}
  −
var h = 0, l = s.length, i = 0;
  −
if ( l > 0 )
  −
while (i < l)
  −
h = (h << 5) - h + s.charCodeAt(i++) | 0;
  −
return h;
  −
};
  −
  −
if ( ww.user != undefined ) {
  −
var self = ww.user.getName();
  −
  −
var idgen = hashCode(self);
  −
 
  −
console.log(idgen);
  −
// Take username for standard databasename format
  −
var PersonalDataDataBaseName = "PD.IO" + idgen + "Database";
  −
// Use username in user to get up to date version of self
  −
var CurrentPerson = {id: idgen, name: {user: self}, age: 0};
  −
  −
console.log(PersonalDataDataBaseName);
  −
console.log(CurrentPerson);
  −
}
  −
 
  −
// ADD MORE DOC
  −
 
  −
// EnqueuePDIO a PDIOLocalDatabase:User database access function with modes
  −
// External accessible wrapper for Enquire
  −
  −
this.EnqueuePDIO = function( sw, c1, c2, c3 ) {
  −
return Enquire( PersonalDataDataBaseName, CurrentPerson, sw, c1, c2, c3 );
  −
}
  −
 
  −
// Enquire, a general purpose indexeddb update function with modes
  −
 
  −
// Mode 'aggressive push':
  −
// parameter record is pushed to database, overwriting whatever is there
  −
 
  −
// Mode 'checkin':
  −
// record is retrieved from database, parameter record is pushed if not found
  −
 
  −
// Mode 'get record'
  −
// tries to get record from db, returns undefined if not found
  −
 
  −
// Mode 'update record' field1 field2 field3
  −
// retrieve record, make record.field1.field2 = field3, push back
  −
 
  −
// Mode 'update record' field1 field2
  −
// retrieve record, make record.field1 = field2, push back
  −
 
  −
function Enquire( pddbname, record, sqitch, control_1, control_2, control_3 ) {
  −
var pddb = window.indexedDB.open(pddbname, 3);
  −
pddb.onupgradeneeded = function() {
  −
var db = pddb.result;
  −
var store = db.createObjectStore(pddbname, {keyPath: "id"});
  −
 
  −
// shouldn't the index be the wiki.personaldata.io username?
  −
 
  −
var index = store.createIndex("NameIndex", ["id"]);
  −
};
  −
pddb.onsuccess = function() {
  −
var db = pddb.result;
  −
var tx = db.transaction(pddbname, "readwrite");
  −
var store = tx.objectStore(pddbname);
  −
var index = store.index("NameIndex");
  −
 
  −
// Get the original record from the db...
  −
var getRecord = index.get([record.id]);
  −
var inp_obj;
  −
 
  −
getRecord.onsuccess = function() {
  −
console.log( "Record found in database: \n <<");
  −
console.log( getRecord.result );
  −
console.log( ">>");
  −
 
  −
// Essential recordAdd
  −
if ( sqitch === "aggressive push" ) {
  −
inp_obj = record;
  −
store.put( inp_obj );
  −
return inp_obj;
  −
} else if ( sqitch === "checkin" ) {
  −
  −
if ( getRecord.result != undefined ) {
  −
console.log("getting from store");
  −
inp_obj = getRecord.result;
  −
} else {
  −
console.log("overriding whatever in there");
  −
inp_obj = record;
  −
store.put(inp_obj);
  −
}
  −
 
  −
} else {
  −
if ( getRecord.result != undefined ) {
  −
inp_obj = getRecord.result;
  −
if ( sqitch === "get record" ) {
  −
// if found, let's use that from now on
  −
console.log("Getting record");
  −
// let's return it so that our addrecord can be used as a getter as well
  −
return inp_obj;
  −
}
  −
//
  −
// endof onsuccess
  −
} else {
  −
console.log("record not found");
  −
if ( sqitch === "update record" ) {
  −
inp_obj = record;
  −
} else {
  −
return undefined;
  −
}
  −
}
  −
// endof resultdefined
  −
}
  −
// endofELSE
  −
if ( sqitch === "update record" ) { // Record Update
  −
if ( control_1 != undefined ) {
  −
if ( control_2 != undefined ) {
  −
if ( control_3 != undefined ) {
  −
  −
if ( Array.isArray( inp_obj[ control_1 ][ control_2 ] ) ) {
  −
inp_obj[ control_1 ][ control_2 ].push( control_3 );
  −
} else {
  −
inp_obj[ control_1 ][ control_2 ] = control_3; // => "Bob"
  −
}
  −
store.put(inp_obj);
  −
} else {
  −
  −
if ( Array.isArray( inp_obj[ control_1 ] ) ) {
  −
inp_obj[ control_1 ].push( control_2 );
  −
} else {
  −
inp_obj[ control_1 ] = control_2;
  −
}
  −
store.put(inp_obj);
  −
 
  −
}
  −
// +3
  −
} else {
  −
store.put(inp_obj);
  −
return inp_obj[ control_1 ];
  −
}
  −
// +2
  −
} else {
  −
 
  −
return inp_obj;
  −
 
  −
}
  −
 
  −
};
  −
 
  −
};
  −
};
  −
};
  −
};
 
530

edits

Navigation menu