Line 26: |
Line 26: |
| }; | | }; |
| | | |
− | mw.loader.load( '//wiki.personaldata.io/w/index.php?title=User:Abel/WbProcessor.js&action=raw&ctype=text/javascript' ); | + | 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 ¯\_(ツ)_/¯'); |
| + | }; |
| + | } |
| + | |
| + | } |