![]() 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 : |
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;