Changes

Jump to navigation Jump to search
m
no edit summary
Line 3: Line 3:  
console.log('wbprocessor loading');
 
console.log('wbprocessor loading');
   −
function wbContainer( universe, location ) {
+
function WikibaseProcessorContainer( universe, location ) {
    
Debug_switch = false;
 
Debug_switch = false;
Line 27: Line 27:  
}
 
}
 
}
 
}
 +
 +
// Exposed general wrapper for proceed for object other than what the class is originally instanced on, currently unused
 +
// Could be used to create a further function to cross check current object with another object 'universe' with another for example
 +
 +
this.xcontains = function ( unv, angle ) {
 +
if ( ( unv !== undefined ) && ( angle !== undefined ) ){
 +
return proceed( unv, angle );
 +
};
 +
}
 +
 +
/* Exposed helper function to get Entity object of alien entity, if ever needed */
 
                  
 
                  
                this.EnqueueWB = async function( idk ) {
+
        this.EnqueueWB = async function( idk ) {
 
var k = await wbqueue(idk);
 
var k = await wbqueue(idk);
 
return k;
 
return k;
 
}
 
}
 +
 +
/* Private part of wb Entity getter */
    
async function wbqueue(id) {
 
async function wbqueue(id) {
Line 48: Line 61:     
// the list of private helper functions, could not be accessed from outside
 
// the list of private helper functions, could not be accessed from outside
 +
// helper function for descend into an object if key exists, otherwise stay at current level of object
 
function indexinterpolate(obj,i) { return  (obj[i] !== undefined) ? obj[i] : obj};  
 
function indexinterpolate(obj,i) { return  (obj[i] !== undefined) ? obj[i] : obj};  
// helper function for checking a part of an array exists
+
 +
// helper function for checking a part of an array exists, if it doesn't, go undefined
 
function indexcheck(obj,i) {  if ( obj !== undefined) { return ( obj[i] !== undefined ) ? obj[i] : undefined } };
 
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
 
// 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.
 
// 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.
Line 58: Line 74:  
}
 
}
 
}
 
}
 +
// Check returns matrix.a.b.c.d from 'array' ~ 'matrix' and 'read' ~ 'a.b.c.d' only if it exists all the way, otherwise go undefined
 
function check(array, read){
 
function check(array, read){
 
if ( array !== undefined ) {
 
if ( array !== undefined ) {
Line 63: Line 80:  
}
 
}
 
}
 
}
 +
 +
// Main object / array processing instrument
 +
// Array can be a composition of objects and arrays
 +
// Read is the instructions, could be an array, or a single path, but for now it should be an object based on our inner convention, example:
 +
/*
 +
relational_id_list = {
 +
controller_id: [ wbEStructure['instanceOfRelations'], wbEStructure['IDPropLoc'], wbEStructure['IDName'], 96 ],
 +
personal_data_id: [ wbEStructure['subclassOfRelations'], wbEStructure['IDPropLoc'], wbEStructure['IDName'], 421 ],
 +
interface_button_id: [ wbEStructure ['instanceOfRelations'], wbEStructure['IDPropLoc'], wbEStructure['IDName'], 487 ]
 +
}
 +
*/
    
function proceed(array, read) {
 
function proceed(array, read) {
 
var ret_obj = {},
 
var ret_obj = {},
 
temp_obj = array,
 
temp_obj = array,
// Have a holder for instructional control return array
+
 
 +
// If we encounter something seriously wrong we will just raise a red flag by setting this false, will check before returning this.
 
success_o_meter = true,
 
success_o_meter = true,
 +
 +
// If all goes well, for each path checked, we will have a member in this
 
future_instructional_return = [];
 
future_instructional_return = [];
 
 
 
//|||||||||||||||||||||||||||||||||||||||||||||||||||||[ I N S T R U C T I O N S  C O N T R O L  ]||||||||||||||||||||||||||||||||||||||||||||||||||||||
 
//|||||||||||||||||||||||||||||||||||||||||||||||||||||[ 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 :
+
// Init program, check if instructions are an object (not an array but has multiple keys) :
 +
// This is the main path of the function. Could be improved to have it for simple array of instructions
 
if ( ( !Array.isArray(read) ) && ( Object.keys(read).length > 0 ) ) {
 
if ( ( !Array.isArray(read) ) && ( Object.keys(read).length > 0 ) ) {
   
 
 
Object.keys(read).forEach( function(path) {
 
Object.keys(read).forEach( function(path) {
Line 83: Line 114:  
 
 
if ( Array.isArray (read[path]) ) {
 
if ( Array.isArray (read[path]) ) {
 +
 +
// for each path, future_instructional_return will be filled with the future_return_partition after proceeding through that path
 
var future_return_partition = temp_obj;
 
var future_return_partition = temp_obj;
 +
 
Object.keys(read[path]).forEach( function( path2 ) {
 
Object.keys(read[path]).forEach( function( path2 ) {
    
debuglog("instructions are an array of arrays, going through " + read[ path ][ path2 ] );
 
debuglog("instructions are an array of arrays, going through " + read[ path ][ path2 ] );
+
// for each step, see if it led anywhere other than where we were.
 
if ( data_function( future_return_partition, read[ path ][ path2 ] ) != future_return_partition ){
 
if ( data_function( future_return_partition, read[ path ][ path2 ] ) != future_return_partition ){
 +
// if it did, proceed;
 
future_return_partition = data_function( future_return_partition, read[ path ][ path2 ] );
 
future_return_partition = data_function( future_return_partition, read[ path ][ path2 ] );
 
} else {
 
} else {
 +
// if it didn, raise flag
 
success_o_meter = false;
 
success_o_meter = false;
 
}
 
}
Line 97: Line 133:     
});
 
});
 +
//Now that we went through the path, lets see if everything was ok.
 
if ( success_o_meter === true ) {
 
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
+
// If yes, put the result of the travel 'future_return_partition' into 'future_instructional_return'
 +
 
debuglog("arrived at")
 
debuglog("arrived at")
 
debuglog(future_return_partition);
 
debuglog(future_return_partition);
 
future_instructional_return[path] = future_return_partition;
 
future_instructional_return[path] = future_return_partition;
 
} else {
 
} else {
 +
 +
// Otherwise let's put an undefined in there
 
debuglog("seeking derailed");
 
debuglog("seeking derailed");
 
success_o_meter = true;
 
success_o_meter = true;
Line 110: Line 150:  
}  
 
}  
   −
//|||||||||||||||||| If instruction object element is not an array anymore, lets just do one step ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+
//|||||||||||||||||| If instruction object element is not an array, lets just try to do that one step ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 
+
// Unused
 
else {
 
else {
 
 
 
// INCLUDE step block with read[path]  
 
// INCLUDE step block with read[path]  
 
if ( data_function( temp_obj, read[ path ] ) !== temp_obj  ){
 
if ( data_function( temp_obj, read[ path ] ) !== temp_obj  ){
future_instructional_return.push( data_function( temp_obj, read[ path ] ) );
+
future_instructional_return[path] = data_function( temp_obj, read[ path ] ) ;
 
} else {
 
} else {
 
// future_instructional_return.push( undefined );
 
// future_instructional_return.push( undefined );
Line 124: Line 164:  
});
 
});
    +
// Now that we have gone through all paths, make future return object into what we got
 
temp_obj = future_instructional_return;
 
temp_obj = future_instructional_return;
 
}  
 
}  
    
//||||||||||||[ If we are not in instruction object, let's see if we have an instruction array ]||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 
//||||||||||||[ If we are not in instruction object, let's see if we have an instruction array ]||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 
+
//Unused, this part could be improved
 
else if ( Array.isArray(read) ) {
 
else if ( Array.isArray(read) ) {
 
// If so let's follow the array of instructions
 
// If so let's follow the array of instructions
Line 145: Line 186:     
//||||||||||||[ If we have a single instruction, let's try following that |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 
//||||||||||||[ If we have a single instruction, let's try following that |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 +
//Unused, this part could be improved
    
else {
 
else {
Line 158: Line 200:  
}
 
}
 
}
 
}
 +
 
// If we haven't got a not found signal along the way, let's try returning the object
 
// If we haven't got a not found signal along the way, let's try returning the object
   Line 168: Line 211:     
//|||||||||||||||||||||||||||||||||||||||||||||||||||||[  S T E P  B L O C K  ]||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 
//|||||||||||||||||||||||||||||||||||||||||||||||||||||[  S T E P  B L O C K  ]||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 +
 +
// Function that takes 1 step. Proceed (along a path) uses this for each step.
    
function data_function ( temp_obj, moving ) {
 
function data_function ( temp_obj, moving ) {
 +
 +
// we will return an array
 
var future_temp_obj = [];
 
var future_temp_obj = [];
 +
 +
// Check if we are on an array level,
 
if ( Array.isArray( temp_obj ) ) {
 
if ( Array.isArray( temp_obj ) ) {
 
debuglog("data is on an array level");
 
debuglog("data is on an array level");
 
Object.keys( temp_obj ).forEach( function ( ect ) {
 
Object.keys( temp_obj ).forEach( function ( ect ) {
 
 
// if we are on an array level in the data, lets iterate through the array
+
// if so, try proceeding in all directions.
   
debuglog("Within partition: " + ect );
 
debuglog("Within partition: " + ect );
 
if ( checkdive( temp_obj[ ect ], moving ) !== undefined ) {
 
if ( checkdive( temp_obj[ ect ], moving ) !== undefined ) {
 
future_temp_obj.push( checkdive( temp_obj[ ect ], moving ) );
 
future_temp_obj.push( checkdive( temp_obj[ ect ], moving ) );
 
}
 
}
 +
// Put an element into the return array for each direction we could move into
    
});
 
});
 +
 
temp_obj = future_temp_obj;
 
temp_obj = future_temp_obj;
 
 
Line 194: Line 244:  
future_temp_obj = checkdive( temp_obj, moving );
 
future_temp_obj = checkdive( temp_obj, moving );
 
}
 
}
 +
 
if ( future_temp_obj !== undefined ){
 
if ( future_temp_obj !== undefined ){
 
temp_obj = future_temp_obj;
 
temp_obj = future_temp_obj;
Line 199: Line 250:  
debuglog('nothing to see here')
 
debuglog('nothing to see here')
 
}
 
}
 +
}
   −
}
+
// NOTE this function works now but shows syntactic variance between the else branches
 +
// Rigorous testing recommended
    
return temp_obj;
 
return temp_obj;
Line 207: Line 260:  
//|||||||||||||||||||||||||||||||||||||||||||||||||||||[  E N D  O F  S T E P  B L O C K    ]|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 
//|||||||||||||||||||||||||||||||||||||||||||||||||||||[  E N D  O F  S T E P  B L O C K    ]|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
   −
this.xcontains = function ( unv, angle ) {
+
// This function substitutes a bunch of try catches and also tries to dive into 'array' in different ways
if ( ( unv !== undefined ) && ( angle !== undefined ) ){
  −
return proceed( unv, angle );
  −
};
  −
}
      
function checkdive( array, read ){
 
function checkdive( array, read ){
 +
 +
// simple case, array is an object containing property 'read'
 +
 
if ( check(array, read) !== undefined) {
 
if ( check(array, read) !== undefined) {
 
return dive(array, read);
 
return dive(array, read);
 
}  
 
}  
 +
 +
// array case, 'array' is an actual array, lets return an array of successful trials to dive into each direction
 +
 
if ( Array.isArray(array) ) {
 
if ( Array.isArray(array) ) {
 
var potential_return = [];
 
var potential_return = [];
Line 226: Line 281:  
return potential_return;
 
return potential_return;
 
}
 
}
 +
 +
// mystical case, 'what you have been seeking you had it all along... or at least you have it now'
 +
// This is for when you already at a value level, and are looking for that value.
 +
// Or when on an object level, and looking for that object
 +
// or when on an array level, and looking for that array :O
 +
 
if ( array === read ) {
 
if ( array === read ) {
 
return read;
 
return read;
 
}
 
}
/*
+
 +
/* If we did this, it would probably open up a wormhole or a segfault, or that strange error message browsers give when they are maxed out
 +
 
 
if (Object.keys( array ).length > 0 ){
 
if (Object.keys( array ).length > 0 ){
 
Object.keys( array ).forEach( function ( piece ) {
 
Object.keys( array ).forEach( function ( piece ) {
Line 237: Line 300:  
*/
 
*/
 
}
 
}
 +
 +
// Try parsing json. If not a json, go void.
    
function interjson( obj ) {
 
function interjson( obj ) {
Line 246: Line 311:  
};
 
};
 
}  
 
}  
 +
 +
// Heavyweight solution to suppress error messages.
    
function debuglog( l0g ){
 
function debuglog( l0g ){
530

edits

Navigation menu