VaKeR CYBER ARMY
Logo of a company Server : Apache/2.4.41 (Ubuntu)
System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Directory :  /var/www/html/libs/absol-form/js/blocks/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/html/libs/absol-form/js/blocks/CBCmpSwitch.js
import {AssemblerInstance} from "../core/Assembler";
import BaseBlock from "../core/BaseBlock";
import inheritComponentClass from "../core/inheritComponentClass";

function CBCmpSwitch() {
    BaseBlock.call(this);
    this.value = null;
    this.result = {};
    this.patternByRet = {};
    /***
     *
     * @type {{pattern: string|number|boolean|null|undefined, ret: string}[]}
     */
    this.attributes.cases = [];
    this.pinHandlers = Object.assign({}, CBCmpSwitch.prototype.pinHandlers);
}

inheritComponentClass(CBCmpSwitch, BaseBlock);

CBCmpSwitch.prototype.tag = 'CBCmpSwitch';

CBCmpSwitch.prototype.attributeHandlers.cases = {
    set: function (value, ref){
        ref.set(value);
        this.rebuildSwitch();
        return value;
    }
};

CBCmpSwitch.prototype.pinHandlers.value = {
    receives: function (value) {
        this.value = value;
        var cases = this.attributes.cases || [];
        for (var i = 0; i < cases.length; ++i){
            this.pinFire(cases[i].ret);
        }
    }
};


CBCmpSwitch.prototype.rebuildSwitch = function () {
    var self = this;
    var cases = this.attributes.cases || [];
    this.pinHandlers = CBCmpSwitch.prototype.pinHandlers;
    var patternByRet = cases.reduce(function (ac, cr){
        ac[cr.ret] = ac[cr.ret] ||[];
        ac[cr.ret].push(cr.pattern);
        return ac;
    }, {});

    this.patternByRet = patternByRet;
    Object.keys(patternByRet).reduce(function (ac, pin){
        var patterns = patternByRet[pin];
        ac[pin] = {
            get: function (){
                var value = self.value;
                return patterns.reduce(function(res, pattern){
                    res = res || value === pattern;
                    res = res || (value+'') === pattern;
                    res = res || JSON.stringify(value) === pattern;
                    return res;
                }, false);
            }
        }
        return ac;
    }, this.pinHandlers);
};

AssemblerInstance.addClass(CBCmpSwitch);

export default CBCmpSwitch;

VaKeR 2022