Difference between revisions of "User:Abel/experimental.js"

From Wikibase Personal data
Jump to navigation Jump to search
m
m
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 ¯\_(ツ)_/¯');
 +
            };
 +
        }
 +
       
 +
    }

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 ¯\_(ツ)_/¯');
            };
        } 
        
    }