Difference between revisions of "User:Abel/experimental.js"
Jump to navigation
Jump to search
m |
m |
||
Line 1: | Line 1: | ||
// License: GPL | // License: GPL | ||
// Experimental Main | // Experimental Main | ||
− | |||
console.log("'⌣'"); | console.log("'⌣'"); | ||
− | |||
var mwEStruct = { | var mwEStruct = { | ||
− | + | wbXntity: 'config.values.wbEntity' | |
− | + | }, | |
− | + | language = "en", | |
wbEStruct = { | wbEStruct = { | ||
− | + | subclassOfRelations: 'claims.P4', // location of P4 relations in wbEntity | |
− | + | defaultValRelation: 'claims.P108', | |
− | + | concernsRelation: 'claims.P110', | |
− | + | instanceOfRelations: 'claims.P3', | |
− | + | IDPropLoc: 'mainsnak.datavalue.value', // location of ID properties in related entity | |
− | + | IDName: 'numeric-id', // ID property name which checked | |
− | + | qIDPropName: 'id', | |
− | + | standardValue: 'labels' + '.' + language + '.' + 'value' | |
− | + | }, | |
relational_id_list = { | relational_id_list = { | ||
− | + | controller_id: [ wbEStruct['instanceOfRelations'], wbEStruct['IDPropLoc'], wbEStruct['IDName'], 96 ], | |
− | + | personal_data_id: [ wbEStruct['subclassOfRelations'], wbEStruct['IDPropLoc'], wbEStruct['IDName'], 421 ], | |
− | + | interface_button_id: [ wbEStruct ['instanceOfRelations'], wbEStruct['IDPropLoc'], wbEStruct['IDName'], 487 ] | |
− | + | }; | |
var wbproc = new wbContainer(mw, mwEStruct['wbXntity']), | var wbproc = new wbContainer(mw, mwEStruct['wbXntity']), | ||
// Check whether the current page is in a relation of interest to an id of interest | // Check whether the current page is in a relation of interest to an id of interest | ||
− | current_entity = wbproc.checkentity( relational_id_list | + | current_entity = wbproc.checkentity( relational_id_list ); |
// This should return an object of relations and ids | // This should return an object of relations and ids | ||
Line 41: | Line 39: | ||
// Wikibase Processor | // 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 = [], | ||
+ | // Hava a holder for data return array | ||
+ | |||
+ | //|||||||||||||||||||||||||||||||||||||||||||||||||||||[ 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 array"); | ||
+ | |||
+ | //|||||||||||||||||| 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"); | ||
+ | future_return_partition = proceed( future_instructional_return, 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 | ||
+ | future_instructional_return.push(future_return_partition); | ||
+ | |||
+ | } | ||
+ | |||
+ | //|||||||||||||||||| If instruction array element is not an array anymore, lets just do one step |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| | ||
+ | //|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| | ||
+ | |||
+ | else if { | ||
+ | |||
+ | // INCLUDE step block with read[path] | ||
+ | future_instructional_return.push( proceed( 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 ]||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| | ||
+ | |||
+ | else if ( Array.isArray(read) ) { | ||
+ | // If so let's follow the array of instructions | ||
+ | Object.keys( read ).forEach( function ( ect ) { | ||
+ | temp_obj = proceed( temp_obj, read[ ect ] ); | ||
+ | }); | ||
+ | } | ||
+ | |||
+ | //||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| | ||
+ | //||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| | ||
+ | |||
+ | else { | ||
+ | data_function( temp_obj, read ); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
− | + | //||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| | |
− | + | //|||||||||||||||||||||||||||||||||||||||||||||||||||||[ 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 ); | |
− | + | 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"); | |
− | + | temp_obj = checkdive( temp_obj, moving ); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | } | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | 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){ | |
− | + | potential_return.push( checkdive( array[item], read) ); | |
− | + | }); | |
− | + | return potential_return; | |
− | + | } | |
− | + | } | |
− | |||
− | |||
− | + | function interjson( obj ) { | |
− | + | try { | |
− | + | return JSON.parse( obj ) | |
− | + | } catch (e) { | |
− | + | // if not JSON, do silly things | |
− | + | console.log('not a json ¯\_(ツ)_/¯'); | |
− | + | }; | |
− | + | } | |
− | + | ||
− | + | } |
Revision as of 03:15, 16 May 2019
// License: GPL
// Experimental Main
console.log("'⌣'");
var mwEStruct = {
wbXntity: 'config.values.wbEntity'
},
language = "en",
wbEStruct = {
subclassOfRelations: 'claims.P4', // location of P4 relations in wbEntity
defaultValRelation: 'claims.P108',
concernsRelation: 'claims.P110',
instanceOfRelations: 'claims.P3',
IDPropLoc: 'mainsnak.datavalue.value', // location of ID properties in related entity
IDName: 'numeric-id', // ID property name which checked
qIDPropName: 'id',
standardValue: 'labels' + '.' + language + '.' + 'value'
},
relational_id_list = {
controller_id: [ wbEStruct['instanceOfRelations'], wbEStruct['IDPropLoc'], wbEStruct['IDName'], 96 ],
personal_data_id: [ wbEStruct['subclassOfRelations'], wbEStruct['IDPropLoc'], wbEStruct['IDName'], 421 ],
interface_button_id: [ wbEStruct ['instanceOfRelations'], wbEStruct['IDPropLoc'], wbEStruct['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
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 = [],
// Hava a holder for data return array
//|||||||||||||||||||||||||||||||||||||||||||||||||||||[ 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 array");
//|||||||||||||||||| 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");
future_return_partition = proceed( future_instructional_return, 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
future_instructional_return.push(future_return_partition);
}
//|||||||||||||||||| If instruction array element is not an array anymore, lets just do one step ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
//||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
else if {
// INCLUDE step block with read[path]
future_instructional_return.push( proceed( 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 ]|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
else if ( Array.isArray(read) ) {
// If so let's follow the array of instructions
Object.keys( read ).forEach( function ( ect ) {
temp_obj = proceed( temp_obj, read[ ect ] );
});
}
//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
else {
data_function( temp_obj, read );
}
}
//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
//|||||||||||||||||||||||||||||||||||||||||||||||||||||[ 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 );
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");
temp_obj = checkdive( temp_obj, moving );
}
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){
potential_return.push( checkdive( array[item], read) );
});
return potential_return;
}
}
function interjson( obj ) {
try {
return JSON.parse( obj )
} catch (e) {
// if not JSON, do silly things
console.log('not a json ¯\_(ツ)_/¯');
};
}
}