User:Abel/WbProcessor.js

From Wikibase Personal data
< User:Abel
Revision as of 10:43, 14 May 2019 by Abel (talk | contribs)
Jump to navigation Jump to search

Note: After saving, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Go to Menu → Settings (Opera → Preferences on a Mac) and then to Privacy & security → Clear browsing data → Cached images and files.
// License: GPL
// 
function wbContainer( universe, location ) {

    this.main = interjson( get_Y_from_X( 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) {  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 ( Object.keys(array).length > 0 ) {
            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 ¯\_(ツ)_/¯');
        };
    } 
    
}