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']);
+
PDWikibaseProcessor,
 +
PDindexedDB,
 +
PDOOUI,
 +
Current_entity;
   −
// 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("test: ")
+
// JQ.'when' loads the current scripts asynchronously, continues when loading is 'done'
console.log(current_entity);
+
$.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(){
   −
// for each match, render the corresponding ui elements
+
console.log('Main thread');
// current_entity.forEach(pdooui.render);
     −
// License: GPL
+
// WBproc reads current mediawiki Entity upon instantiation
// Wikibase Processor
+
PDWikibaseProcessor = new WikibaseProcessorContainer(mw, mwEStruct['wbXntity']);
   −
function wbContainer( universe, location ) {
+
// 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)
this.main = interjson( checkdive( universe, location ));
+
PDindexedDB = new IndexedDBContainer( mw );
var the = this.main;
+
+
// Contains classes for creating UI elements, no instantiation consequences
/* The following is the main exposed function of the current Wb Processing class
+
PDOOUI = new InterfaceMediaContainer( PDWikibaseProcessor, PDindexedDB );
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;
+
// Check if the current entity belongs to any path of interest.
}
+
// For each element in object argument, a corresponding element in the return object will contain one of the following:
 +
// - undefined - the path didn't exist even partly)
 +
// - [ 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
   −
//||||||||||||[ If we are not in instruction object, let's see if we have an instruction array ]||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+
Current_entity = PDWikibaseProcessor.checkentity( Relational_id_list );
 
  −
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 );
+
// Business logicish part.
 
+
// If any path of interest returned anything...
} else {
+
if ( Current_entity != undefined ) {
 
+
Object.keys(Current_entity).forEach( function ( entity_checked ){
success_o_meter = false;
+
//... for each path that returned something
 
+
if ( Current_entity[entity_checked] != undefined ){
 +
if ( Object.keys( Current_entity[entity_checked] ).length > 0 ) {
 +
PDOOUI.renderInterface( entity_checked );
 +
//... call the OOUI renderer to render what belongs to this input
 
}
 
}
 
}
 
}
// 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 ( Array.isArray( moving ) ){
  −
  −
var move_holder = temp_obj[ect];
  −
Object.keys( moving ).forEach( function( move ) {
  −
move_holder = checkdive( move_holder, move );
  −
});
  −
if ( move_holder !== undefined ) {
  −
future_temp_obj.push( move_holder );
  −
}
  −
 
  −
} else {
     −
future_temp_obj.push( checkdive( temp_obj[ ect ], moving ) );
+
});
 
  −
}
  −
});
  −
 
  −
if ( future_temp_obj !== undefined ){
  −
temp_obj = future_temp_obj;
  −
} else {
  −
console.log('nothing to see here')
  −
}
  −
  −
} else {
  −
 
  −
// if we are not on an array level, proceed with the path
  −
  −
console.log("data is on an objective level");
  −
 
  −
if ( Array.isArray( moving ) ){
  −
  −
var move_holder = temp_obj;
  −
 
  −
Object.keys( moving ).forEach( function( move ) {
  −
move_holder = checkdive( move_holder, move );
  −
});
  −
if ( move_holder !== undefined ) {
  −
future_temp_obj.push( move_holder );
  −
}
  −
 
  −
} else {
  −
 
  −
future_temp_obj.push( 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    ]|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  −
 
  −
function checkdive( array, read){
  −
if ( ( array !== undefined ) && ( read !== undefined ) ) {
  −
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