Difference between revisions of "User:Abel/WbProcessor.js"
Jump to navigation
Jump to search
m (Abel moved page MediaWiki:Gadget-Wbprocessor.js to MediaWiki:Gadget-WbProcessor.js) |
m |
||
| Line 2: | Line 2: | ||
// Wikibase Instance/Entity Gadget | // Wikibase Instance/Entity Gadget | ||
console.log('Wbprocessor loading'); | console.log('Wbprocessor loading'); | ||
| + | |||
| + | function wbContainer(universe, location) { | ||
| + | |||
| + | // 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) { 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){ | ||
| + | return read.split('.').reduce(indexinterpolate, array); | ||
| + | } | ||
| + | function check(array, read){ | ||
| + | return read.split('.').reduce(indexcheck, array); | ||
| + | } | ||
| + | function interjson( obj ) { | ||
| + | try { | ||
| + | return JSON.parse( obj ) | ||
| + | } catch (e) { | ||
| + | // if not JSON, do silly things | ||
| + | console.log('not a json ¯\_(ツ)_/¯'); | ||
| + | }; | ||
| + | } | ||
| + | // Get Y from X whether its a single object or an arrayish object | ||
| + | function get_Y_from_X( obj, B ){ | ||
| + | if ( check(obj, B) !== undefined ) { | ||
| + | console.log( "entity is defined" ) | ||
| + | return dive(obj, B); | ||
| + | } else { | ||
| + | for (var i = 0; i < obj.length; i++ ){ | ||
| + | if ( check(obj[i], B) !== undefined ) { | ||
| + | console.log( "entity is defined within index " + i ); | ||
| + | return dive(obj[i], B); | ||
| + | }; | ||
| + | Object.keys(obj).forEach( function(item) { | ||
| + | if ( check(obj[item], B) !== undefined ) { | ||
| + | console.log( "entity is defined within associative element" + item ) | ||
| + | return dive(obj[item], B); | ||
| + | }; | ||
| + | }); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // Check if Y can be found in X whether X is a single value, an indexed array, or an associative array | ||
| + | function check_Y_in_X(obj, to_check){ | ||
| + | if (obj === to_check) { | ||
| + | console.log( "entity is confirmed"); | ||
| + | return true | ||
| + | }; | ||
| + | for (var i = 0; i < obj.length; i++ ){ | ||
| + | if (obj[i] === to_check) { | ||
| + | console.log( "entity is confirmed within index " + i ); | ||
| + | return true | ||
| + | }; | ||
| + | } | ||
| + | Object.keys(obj).forEach( function(item) { | ||
| + | if (obj[item] === to_check) { | ||
| + | console.log( "entity is confirmed within associative element" + item ) | ||
| + | return true | ||
| + | }; | ||
| + | } | ||
| + | return false; | ||
| + | } | ||
| + | |||
| + | this.main = interjson( get_Y_from_X( universe, location )); | ||
| + | |||
| + | this.checkentity = function ( rel_id_list, inner_location, property ) { | ||
| + | var return_obj = {}; | ||
| + | Object.keys(rel_id_list).forEach( function(item){ | ||
| + | if ( check( main, rel_id_list[item][0] ) != undefined ) { | ||
| + | var primary_part = get_Y_from_X( main, rel_id_list[item][0] ); | ||
| + | if ( check_Y_in_X ( primary_part, inner_location + '.' + property ) ) { | ||
| + | return_obj[item] = rel_id_list[item]; | ||
| + | } | ||
| + | } | ||
| + | }); | ||
| + | return return_obj; | ||
| + | }; | ||
| + | } | ||
Revision as of 05:59, 14 May 2019
// License: GPL
// Wikibase Instance/Entity Gadget
console.log('Wbprocessor loading');
function wbContainer(universe, location) {
// 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) { 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){
return read.split('.').reduce(indexinterpolate, array);
}
function check(array, read){
return read.split('.').reduce(indexcheck, array);
}
function interjson( obj ) {
try {
return JSON.parse( obj )
} catch (e) {
// if not JSON, do silly things
console.log('not a json ¯\_(ツ)_/¯');
};
}
// Get Y from X whether its a single object or an arrayish object
function get_Y_from_X( obj, B ){
if ( check(obj, B) !== undefined ) {
console.log( "entity is defined" )
return dive(obj, B);
} else {
for (var i = 0; i < obj.length; i++ ){
if ( check(obj[i], B) !== undefined ) {
console.log( "entity is defined within index " + i );
return dive(obj[i], B);
};
Object.keys(obj).forEach( function(item) {
if ( check(obj[item], B) !== undefined ) {
console.log( "entity is defined within associative element" + item )
return dive(obj[item], B);
};
});
}
}
// Check if Y can be found in X whether X is a single value, an indexed array, or an associative array
function check_Y_in_X(obj, to_check){
if (obj === to_check) {
console.log( "entity is confirmed");
return true
};
for (var i = 0; i < obj.length; i++ ){
if (obj[i] === to_check) {
console.log( "entity is confirmed within index " + i );
return true
};
}
Object.keys(obj).forEach( function(item) {
if (obj[item] === to_check) {
console.log( "entity is confirmed within associative element" + item )
return true
};
}
return false;
}
this.main = interjson( get_Y_from_X( universe, location ));
this.checkentity = function ( rel_id_list, inner_location, property ) {
var return_obj = {};
Object.keys(rel_id_list).forEach( function(item){
if ( check( main, rel_id_list[item][0] ) != undefined ) {
var primary_part = get_Y_from_X( main, rel_id_list[item][0] );
if ( check_Y_in_X ( primary_part, inner_location + '.' + property ) ) {
return_obj[item] = rel_id_list[item];
}
}
});
return return_obj;
};
}