Changes

Jump to navigation Jump to search
m
no edit summary
Line 2: Line 2:  
// Experimental Main
 
// Experimental Main
 
console.log("'⌣'");
 
console.log("'⌣'");
 +
 
var mwEStruct = {
 
var mwEStruct = {
 
wbXntity: 'config.values.wbEntity'
 
wbXntity: 'config.values.wbEntity'
Line 8: Line 9:  
language = "en",
 
language = "en",
   −
wbEStruct = {
+
WBEStructure = {
 
subclassOfRelations: 'claims.P4', // location of P4 relations in wbEntity
 
subclassOfRelations: 'claims.P4', // location of P4 relations in wbEntity
 
defaultValRelation: 'claims.P108',
 
defaultValRelation: 'claims.P108',
Line 19: Line 20:  
},
 
},
   −
relational_id_list = {  
+
Relational_id_list = {  
controller_id: [ wbEStruct['instanceOfRelations'], wbEStruct['IDPropLoc'], wbEStruct['IDName'], 96 ],
+
controller_id: [ WBEStructure['instanceOfRelations'], WBEStructure['IDPropLoc'], WBEStructure['IDName'], 96 ],
personal_data_id: [ wbEStruct['subclassOfRelations'], wbEStruct['IDPropLoc'], wbEStruct['IDName'], 421 ],
+
personal_data_id: [ WBEStructure['subclassOfRelations'], WBEStructure['IDPropLoc'], WBEStructure['IDName'], 421 ],
interface_button_id: [ wbEStruct ['instanceOfRelations'], wbEStruct['IDPropLoc'], wbEStruct['IDName'], 487 ]
+
interface_button_id: [ WBEStructure ['instanceOfRelations'], WBEStructure['IDPropLoc'], WBEStructure['IDName'], 487 ]
};
+
},
 
  −
var wbproc = new wbContainer(mw, mwEStruct['wbXntity']);
  −
 
  −
// Check whether the current page is in a relation of interest to an id of interest
  −
var current_entity = wbproc.checkentity( relational_id_list );
  −
// This should return an object of relations and ids
  −
 
  −
console.log(current_entity);
  −
 
  −
// 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;
  −
  −
this.checkentity = function ( paths ) {
  −
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
  −
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 ] );
  −
future_return_partition = data_function( future_return_partition, read[ path ][ path2 ] );
  −
 
  −
//|||||||||||||||||||||||||||||||||||||||||||||||||||[  I N S T R U C T I O N S  C O N T R O L ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  −
 
  −
});
  −
// 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);
  −
 
  −
}
  −
 
  −
//|||||||||||||||||| If instruction object element is not an array anymore, lets just do one step ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  −
 
  −
else {
  −
  −
// INCLUDE step block with read[path]
  −
future_instructional_return.push( data_function( temp_obj, read[ path ] ) );
  −
 
  −
}
  −
});
  −
 
  −
temp_obj = future_instructional_return;
  −
}
     −
//||||||||||||[ If we are not in instruction object, let's see if we have an instruction array ]|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+
PDWikibaseProcessor,
 +
PDindexedDB,
 +
PDOOUI,
 +
Current_entity;
   −
else if ( Array.isArray(read) ) {
  −
// If so let's follow the array of instructions
  −
Object.keys( read ).forEach( function ( ect ) {
  −
temp_obj = data_function( temp_obj, read[ ect ] );
  −
});
  −
}
     −
//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+
// JQ.'when' loads the current scripts asynchronously, continues when loading is 'done'
 +
$.when(
 +
    $.getScript( "//wiki.personaldata.io/w/index.php?title=User:Abel/WbProcessor.js&action=raw&ctype=text/javascript" ),
 +
    $.getScript( "//wiki.personaldata.io/w/index.php?title=User:Abel/PersonalData.js&action=raw&ctype=text/javascript" ),
 +
    $.getScript( "//wiki.personaldata.io/w/index.php?title=User:Abel/OOInterface.js&action=raw&ctype=text/javascript" ),
 +
    $.Deferred( function( deferred ){
 +
        $( deferred.resolve );
 +
    })
 +
).done( function(){
   −
else {
+
console.log('Main thread');
temp_obj = data_function( temp_obj, read );
  −
}
     −
return temp_obj;
+
// WBproc reads current mediawiki Entity upon instantiation
}
+
PDWikibaseProcessor = new WikibaseProcessorContainer(mw, mwEStruct['wbXntity']);
   −
//|||||||||||||||||||||||||||||||||||||||||||||||||||||[  S T E P  B L O C K  ]|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+
// PDxDB takes mediawiki, reads user name from it, creates a hash, and 'checks in' the user upon instantiation
 +
// (i.e. read record belonging to user, if it does not exist, create it)
 +
PDindexedDB = new IndexedDBContainer( mw );
 +
 +
// Contains classes for creating UI elements, no instantiation consequences
 +
PDOOUI = new InterfaceMediaContainer( PDWikibaseProcessor, PDindexedDB );
   −
function data_function ( temp_obj, moving ) {
+
// Check if the current entity belongs to any path of interest.  
var future_temp_obj = [];
+
// For each element in object argument, a corresponding element in the return object will contain one of the following:
if ( Array.isArray( temp_obj ) ) {
+
// - undefined - the path didn't exist even partly)
console.log("data is on an array level");
+
// - [ value or object ] - if the path existed fully, it returns what is at the end of the path. If last element in path is a value, it will return the value if found
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 );
  −
future_temp_obj.push( checkdive( temp_obj[ ect ], moving ) );
     −
});
+
Current_entity = PDWikibaseProcessor.checkentity( Relational_id_list );
temp_obj = future_temp_obj;
+
+
// Business logicish part.
} else {
+
// If any path of interest returned anything...
// if we are not on an array level, proceed with the path
+
if ( Current_entity != undefined ) {
console.log("data is on an objective level");
+
Object.keys(Current_entity).forEach( function ( entity_checked ){
future_temp_obj = checkdive( temp_obj, moving );
+
//... for each path that returned something
if ( future_temp_obj !== undefined ){
+
if ( Current_entity[entity_checked] != undefined ){
temp_obj = future_temp_obj;
+
if ( Object.keys( Current_entity[entity_checked] ).length > 0 ) {
} else {
+
PDOOUI.renderInterface( entity_checked );
console.log('nothing to see here')
+
//... call the OOUI renderer to render what belongs to this input
 
}
 
}
   
}
 
}
 +
});
 +
}
   −
return temp_obj;
+
});
}
  −
  −
//|||||||||||||||||||||||||||||||||||||||||||||||||||||[  E N D  O F  S T E P  B L O C K    ]|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  −
 
  −
function checkdive( array, read){
  −
if ( check(array, read) !== undefined) {
  −
return dive(array, read);
  −
} else 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 ¯\_(ツ)_/¯');
  −
};
  −
}
  −
  −
}
 
530

edits

Navigation menu