Difference between revisions of "User:Abel/experimental.js"
Jump to navigation
Jump to search
m |
m |
||
Line 26: | Line 26: | ||
}; | }; | ||
− | mw. | + | 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, [ wbEStruct['IDPropLoc'], wbEStruct['IDName'] ] ); | ||
+ | // 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 | ||
+ | // | ||
+ | function wbContainer( universe, location ) { | ||
+ | |||
+ | this.main = interjson( checkdive( universe, location )); | ||
+ | var container = this; | ||
+ | |||
+ | this.checkentity = function ( rel_id_list, paths ) { | ||
+ | var return_obj = [], | ||
+ | temporary_obj = [], | ||
+ | baseRelation; | ||
+ | if ( Object.keys(rel_id_list).length > 0 ) { | ||
+ | Object.keys(rel_id_list).forEach( function( item ){ | ||
+ | temporary_obj = []; | ||
+ | baseRelation = checkdive( container.main, rel_id_list[item][0] ); | ||
+ | rise( temporary_obj, depthdive( baseRelation, paths )); | ||
+ | if ( Object.keys(temporary_obj).length > 0 ) { | ||
+ | Object.keys(temporary_obj).forEach( function (hit) { | ||
+ | if ( temporary_obj[hit] == rel_id_list[item][1] ) { | ||
+ | return_obj.push(rel_id_list[item]); | ||
+ | } | ||
+ | }); | ||
+ | } else if ( temporary_obj == rel_id_list[item][1] ) { | ||
+ | return_obj.push(rel_id_list[item]); | ||
+ | } | ||
+ | }); | ||
+ | } | ||
+ | return return_obj; | ||
+ | } | ||
+ | |||
+ | // 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){ | ||
+ | return (read + '').split('.').reduce(indexinterpolate, array); | ||
+ | } | ||
+ | |||
+ | function check(array, read){ | ||
+ | if ( array !== undefined ) { | ||
+ | return (read + '').split('.').reduce(indexcheck, array); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | function checkdive( array, read){ | ||
+ | if ( check(array, read) !== undefined) { | ||
+ | return dive(array, read); | ||
+ | } else if ( Array.isArray(array) ) { | ||
+ | return complexcheck( array, read ); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | function complexcheck(array, read){ | ||
+ | var ret_obj; | ||
+ | Object.keys(array).forEach( function(item){ | ||
+ | rise( ret_obj, checkdive(array[item], read)) ; | ||
+ | }); | ||
+ | return ret_obj; | ||
+ | } | ||
+ | |||
+ | function depthdive(array, read){ | ||
+ | var ret_obj, | ||
+ | temp_obj = array; | ||
+ | if ( Object.keys(read).length > 0 ) { | ||
+ | Object.keys(read).forEach( function(path) { | ||
+ | temp_obj = checkdive(temp_obj, path); | ||
+ | }); | ||
+ | rise(ret_obj, temp_obj); | ||
+ | return ret_obj; | ||
+ | } else { | ||
+ | return checkdive(array, read); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | function rise(array, to_push) { | ||
+ | if ( to_push !== undefined) { | ||
+ | if ( Object.keys(to_push).length > 0 ){ | ||
+ | Object.keys(to_push).forEach( function(item){ | ||
+ | if ( array !== undefined ) { | ||
+ | array.push(to_push[item]); | ||
+ | } | ||
+ | }); | ||
+ | } else { | ||
+ | array.push(to_push); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | function interjson( obj ) { | ||
+ | try { | ||
+ | return JSON.parse( obj ) | ||
+ | } catch (e) { | ||
+ | // if not JSON, do silly things | ||
+ | console.log('not a json ¯\_(ツ)_/¯'); | ||
+ | }; | ||
+ | } | ||
+ | |||
+ | } |
Revision as of 00:38, 15 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'], 96 ],
personal_data_id: [ wbEStruct['subclassOfRelations'], 421 ],
interface_button_id: [ wbEStruct ['instanceOfRelations'], 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, [ wbEStruct['IDPropLoc'], wbEStruct['IDName'] ] );
// 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
//
function wbContainer( universe, location ) {
this.main = interjson( checkdive( universe, location ));
var container = this;
this.checkentity = function ( rel_id_list, paths ) {
var return_obj = [],
temporary_obj = [],
baseRelation;
if ( Object.keys(rel_id_list).length > 0 ) {
Object.keys(rel_id_list).forEach( function( item ){
temporary_obj = [];
baseRelation = checkdive( container.main, rel_id_list[item][0] );
rise( temporary_obj, depthdive( baseRelation, paths ));
if ( Object.keys(temporary_obj).length > 0 ) {
Object.keys(temporary_obj).forEach( function (hit) {
if ( temporary_obj[hit] == rel_id_list[item][1] ) {
return_obj.push(rel_id_list[item]);
}
});
} else if ( temporary_obj == rel_id_list[item][1] ) {
return_obj.push(rel_id_list[item]);
}
});
}
return return_obj;
}
// 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){
return (read + '').split('.').reduce(indexinterpolate, array);
}
function check(array, read){
if ( array !== undefined ) {
return (read + '').split('.').reduce(indexcheck, array);
}
}
function checkdive( array, read){
if ( check(array, read) !== undefined) {
return dive(array, read);
} else if ( Array.isArray(array) ) {
return complexcheck( array, read );
}
}
function complexcheck(array, read){
var ret_obj;
Object.keys(array).forEach( function(item){
rise( ret_obj, checkdive(array[item], read)) ;
});
return ret_obj;
}
function depthdive(array, read){
var ret_obj,
temp_obj = array;
if ( Object.keys(read).length > 0 ) {
Object.keys(read).forEach( function(path) {
temp_obj = checkdive(temp_obj, path);
});
rise(ret_obj, temp_obj);
return ret_obj;
} else {
return checkdive(array, read);
}
}
function rise(array, to_push) {
if ( to_push !== undefined) {
if ( Object.keys(to_push).length > 0 ){
Object.keys(to_push).forEach( function(item){
if ( array !== undefined ) {
array.push(to_push[item]);
}
});
} else {
array.push(to_push);
}
}
}
function interjson( obj ) {
try {
return JSON.parse( obj )
} catch (e) {
// if not JSON, do silly things
console.log('not a json ¯\_(ツ)_/¯');
};
}
}