-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrtm.js
More file actions
1 lines (1 loc) · 36.3 KB
/
rtm.js
File metadata and controls
1 lines (1 loc) · 36.3 KB
1
class neodna__Block{constructor(t,_,e){this.parent=e,this.x=t,this.y=_,this.data="",this.modified=0,this.opacity=1}pos(){return this.y*this.parent.sX+this.x}}var gid__blocks=0;class neodna__Blocks{constructor(t,_,e){this.id=gid__blocks++,this.parent=e,this.sX=t,this.sY=_,this.blocks=new Array,this.amount=this.sX*this.sY}build(){this.populate(this.amount)}populate(t){var _=0;for(_=0;_<t;_++){var e=_%this.sX,s=Math.floor(_/this.sX),i=new neodna__Block(e,s,this);i.data=-1,this.blocks.push(i)}}__getxy(t,_){if(t<0)return 0;if(_<0)return 0;if(t>=this.sX)return 0;if(_>=this.sY)return 0;var e=_*this.sX+t;return this.blocks[e]}data(t){var _=0;for(let i of this.blocks){for(var e="",s=0;s<1;)void 0===t[_+s]?e+="-1":e+=t[_+s],s++;i.data=e,_+=s}}words(t){t.__unique?this.__unique(t):this.__words(t)}__unique(t){var _=t.__words,e=t.sequence__clip__offset;if(t.sequence.clip__window.length,e<0&&(e=0),!_.length)return 0;var s=Math.floor(e/_[0].length),i=e-s*_[0].length,n=this.blocks,a=0;_[s]&&c(_[s],i);var r=0;for(r=s+1;r<_.length;r++)c(_[r],0);function c(t,_){var e=0;for(e=_;e<t.length;e++)o(t,e)}function o(t,_){var e=n[a];e&&(e.data={word:t,index:_,char:t[_]},a++)}}__words(t){var _=this,e=0,s=t.__words;if(!s.length)return 0;__stdloop(0,s.length,(function(t){var i=_.blocks[e];i&&(i.data={word:s[t]},e++)}))}data__push(){if(this.blocks.length){var t=0,_=0,e=0;for(e=this.blocks.length-1;e>=0;e--){if(-1!=(s=this.blocks[e]).data){t=e;break}_++}for(e=t;e>=0;e--){var s;-1!=(s=this.blocks[e]).data&&(this.blocks[e+_].data={word:s.data.word})}for(e=0;e<_;e++)this.blocks[e].data="-1"}}clear(){for(let t of this.blocks)t.data="0",t.modified=1}}var __init__vars__canvas={nest:0,n__x:0,n__y:0,unit__px:0,unit__py:0};function __init__canvas(t){document.getElementById(t.nest).onselectstart=function(){return!1};var _=new neodna__Canvas,e=t.nest;return _.split(t.n__x,t.n__y),_.span(t.unit__px,t.unit__py),_.use(e),_.caoi(caoi__binary__clean),_.mouse=new neodna__Mouse,_.mouse.fns.click=function(t,_){this.__getxyp(t,_)}.bind(_),_.mouse.fns.over=function(t,_){this.__getxyp(t,_).__flags.setflag(__STACK__MOUSE__OVER)}.bind(_),_}class neodna__Canvas{constructor(){this.width=100,this.height=100,this.x__min=0,this.y__min=0,this.background="#0077aa",this.nest="",this.rack=0,this.mouse=new neodna__Mouse(this),this.object=0,this.pixels={x:25,y:25},this.caoi__=0,this.context=0,this.buffer=0,this.region=0,this.intensity=0,this.intensity__on=0,this.drawn=0,this.border=0,this.data=0,this.__palette=0,this.__cfg=0}use(t){if(this.nest=t,this.object=document.getElementById(t),this.object){var _=Math.max(this.x__min,this.width),e=Math.max(this.y__min,this.height);this.rack&&(_=this.rack.sX*this.pixels.x,e=this.rack.sY*this.pixels.y),this.object.style.width=_+"px",this.object.style.height=e+"px",this.object.width=_,this.object.height=e,this.width=Math.max(this.x__min,_),this.height=Math.max(this.y__min,e)}}split(t,_){this.rack=new neodna__Rack(t,_,this),this.rack.build(),this.caoi(this.caoi__)}span(t,_){this.pixels={x:t,y:_}}at(t){return this.rack.units[t]}__getxy(t,_){return this.rack.__getxy(t,_)}__getxyp(t,_){var e=Math.floor(t/this.pixels.x),s=Math.floor(_/this.pixels.y);return this.__getxy(e,s)}__getindex(t,_){return this.rack?_*this.rack.sX+t:-1}coords(t){var _=0,e=0;return this.rack.sX&&this.rack.sY&&(_=t-(e=Math.floor(t/this.rack.sX))*this.rack.sX),{x:_,y:e}}index(t,_){return this.rack?_*this.rack.sX+t:-1}color(t){return this.__palette?this.__palette.color(t):0}draw__init(){this.context=this.object.getContext("2d"),this.buffer=this.context.getImageData(0,0,this.width,this.height)}draw__buffer(){if(this.buffer){var t=this.buffer.data,_=0;for(_=0;_<this.width*this.height;_++){var e=4*_;t[e+0]="255",t[e+1]="155",t[e+2]="200",t[e+3]="255"}this.context.putImageData(this.buffer,0,0)}}draw__border(){var t=document.getElementById(this.nest).getContext("2d");switch(t.globalAlpha=1,this.border.state){case 0:t.fillStyle=this.border.out;break;case 1:t.fillStyle=this.border.over;break;case 2:t.fillStyle=this.border.clicked;break;case 3:t.fillStyle=this.border.out;break;case 4:t.fillStyle=this.border.selected}t.fillRect(0,0,this.width,this.border.size),t.fillRect(0,0,this.border.size,this.height),t.fillRect(this.width-this.border.size,0,this.border.size,this.height),t.fillRect(0,this.height-this.border.size,this.width,this.border.size)}draw(t,_=0){document.getElementById(this.nest)&&this.rack.draw(this,t,_)}clear(){var t=this.object.getContext("2d");t.globalAlpha=1,t.clearRect(0,0,this.width,this.height)}paint(t){this.rack.paint(t)}caoi(t){if(t){this.caoi__=t;for(let _ of this.rack.units)_.caoi=new Array,_.caoi.push(t)}}}var __STACK__HAIDENTOT__OVER=1,__STACK__MOUSE__OVER=2,__STACK__MOUSE__CLICKED=3,__STACK__PAINTED=4,__STACK__CALISMADE=5,__STACK__FORTUNES=6,__STACK__SATELYTE__LOCKED=7,__STACK__MOUSE__SELECTION=8;class neodna__Flags{constructor(){this.flags=new Array}addflag(t,_=0){for(let _ of this.flags)if(_.type==t)return 0;return this.flags.push({type:t,on:_}),1}setflag(t,_=1){for(let e of this.flags)if(e.type==t)return e.on=_,1;return this.addflag(t,_),0}endflag(t){this.setflag(t,0)}isflag(t){for(let _ of this.flags)if(_.type==t&&_.on)return 1;return 0}isflags(){return this.flags.length?1:0}clear(){this.flags=new Array}log(){for(let t of this.flags)console.log("flag.type="+t.type+", flag.on="+t.on)}}var __basicloop=__stdloop,__loop=__basicloop,__locloop=__stdloop;function __stdloop(t,_,e,s=0){var i;for(i=t;i<_;i++)e(i,s)}function __stdbuf(t,_,e,s=0){var i;for(i=t;i<_;i++)s[i]=e}function __stdbrk(t,_,e,s=0){var i;for(i=t;i<_&&!e(i,s);i++);}function __canter256n__bin(t){var _=new Array(t.length),e=0;for(let s of t)_[e++]=s;var s=0;e=0;for(let t of _)_[e]=parseInt(t,2),s+=_[e],e++;return __canter256n__core(_,s)}function __canter256n__int(t){var _=0;for(let e of t)_+=e;return __canter256n__core(t,_)}function __canter256n__core(t,_){var e=function(t){var _,e=0,s=Math.min(t.length,8);for(_=0;_<s;_++)e=(e+t[_])/2;var i=0,n=Math.max(s,t.length-1-8),a=t.length-1;for(_=n;_<a;_++)i=(i+t[_])/2;return{s:r(e),e:r(i)};function r(t){return(t=t.toString()).replace(/\./,"d")}}(t);return console.log(e),e.s+"m"+e.e+"s"+_.toString()}function getpixel(t){var _=t.target.getBoundingClientRect(),e=t.clientX-_.left,s=t.clientY-_.top;return{px:Math.floor(e),py:Math.floor(s)}}function __binary__to__fasta(t){var _="",e=new Array,s=0;for(let i of t)2==s&&(e.push(_),_="",s=0),_+=i,s++;2==s&&(e.push(_),_="",s=0);var i="";for(let t of e)switch(t){case"00":i+="A";break;case"01":i+="C";break;case"10":i+="G";break;case"11":i+="T"}return i}function __fasta__to__binary(t){var _="";for(let e of t)switch(e){case"A":case"a":_+="00";break;case"C":case"c":_+="01";break;case"G":case"g":_+="10";break;case"T":case"t":_+="11"}return _}function getRandomColor(){for(var t="#",_=0;_<6;_++)t+="0123456789ABCDEF"[Math.floor(16*Math.random())];return t}function download(t,_,e){var s=document.createElement("a"),i=new Blob([t],{type:e});s.href=URL.createObjectURL(i),s.download=_,s.click()}function upload(t,_){var e=new XMLHttpRequest;e.overrideMimeType("application/json"),e.open("GET",t,!0),e.onreadystatechange=function(){4===e.readyState&&"200"==e.status&&_(e.responseText)},e.send(null)}class neodna__Mouse{constructor(t){this.x=0,this.y=0,this.px=0,this.py=0,this.parent=t,this.fns={click:0,over:0,out:0},this.current__over={x:-1,y:-1},this.current__clicked={x:-1,y:-1}}click(t,_,e){this.fns.click&&this.fns.click(t,_,e)}over(t,_,e){this.fns.over&&this.fns.over(t,_,e)}out(t,_,e){this.fns.out&&this.fns.out(t,_,e)}}class neodna__Palette{constructor(...t){var _=this;_.colors=new Array,__stdloop(0,32,(function(t){_.colors.push("#ffffff")})),t&&t.length&&__stdloop(0,t[0].length,(function(e){_.colors[e]=t[0][e]}))}color(t){return this.colors[t]}}class neodna__Unit{constructor(t,_,e){this.parent=t,this.x=_,this.y=e,this.caoi=0,this.__flags=new neodna__Flags,this.modified=0,this.color=0}pos(){return this.y*this.parent.sX+this.x}draw(t,_){if(this.modified){if(this.caoi&&this.caoi.length)for(let e of this.caoi)e(this,t,_);this.modified=0,_&&(_.modified=0)}}within(t){return this.x>=t.left&&this.y>=t.top&&this.x<t.right&&this.y<t.bottom?1:0}}class neodna__Rack{constructor(t,_,e){this.parent=e,this.sX=t,this.sY=_,this.units=new Array,this.amount=this.sX*this.sY,this.palette=[0,0,0,0]}build(){this.populate(this.amount)}data(t){var _=0,e=0;for(let n of this.units){for(var s="",i=0;i<1;)void 0===t[_+i]?s+="-1":s+=t[_+i],i++;n.data=s,_+=i,e++}console.log("updated "+e+" units")}populate(t){var _=0;for(_=0;_<t;_++){var e=_%this.sX,s=Math.floor(_/this.sX),i=new neodna__Unit(this,e,s);this.units.push(i)}}convert(t){var _="",e=0;for(e=0;e<t.length;e++)_+=data[e].charCodeAt(0).toString(2)+" ";return _}parse(t){switch(t){case"00":return 0;case"01":return 1;case"10":return 2;case"11":return 3}return-1}load(t){var _=0;for(let i of this.units){if(t.length<_+2)break;for(var e="",s=0;s<2;)e+=t[_+s],s++;console.log(e),i.face=this.parse(e),_+=s}}__getxy(t,_){if(t<0)return 0;if(_<0)return 0;if(t>=this.sX)return 0;if(_>=this.sY)return 0;var e=_*this.sX+t;return this.units[e]}draw(t,_=0,e=0){var s=0,i=0;for(i=0;i<this.units.length;i++){var n=this.units[i];if((e||_.blocks[i]&&_.blocks[i].modified)&&(n.modified=1),n.modified){var a="";_.blocks[i]&&(a=_.blocks[i]),n.draw(t,a),n.modified=0,s++}}t.drawn=s}paint(t){this.palette=t}}var __STACK__MOUSE__SELECTION__START=21,__STACK__MOUSE__SELECTION__TOP=22,__STACK__MOUSE__SELECTION__CENTER=23,__STACK__MOUSE__SELECTION__BOTTOM=24,__STACK__MOUSE__SELECTION__END=25,__STACK__MOUSE__SELECTION__LEFT=26,__STACK__MOUSE__SELECTION__RIGHT=27;class neodna__Selection{constructor(){this.array=new Array,this.stack=0,this.canvas=0,this.__range=new Array(2),this.__range[0]={x:0,y:0},this.__range[1]={x:0,y:0},this.start=0,this.end=0,this.__finished=0,this.__inprogress=0}bind(t){this.stack=t,this.canvas=t.canvas}add(t){this.array.push(t)}begin(){this.off(),this.clear(),this.__finished=0,this.__inprogress=1}complete(){this.__finished=1,this.__inprogress=0}clear(){this.array=new Array,this.__finished=0,this.__inprogress=0}range(){var t,_=this,e=_.__range[0],s=_.__range[1],i=_.canvas.__getindex(e.x,e.y),n=_.canvas.__getindex(s.x,s.y);n<i?(t=i,i=n,n=t,_.start=_.__range[1],_.end=_.__range[0]):(_.start=_.__range[0],_.end=_.__range[1]),this.off(),this.array=new Array,__stdloop(i,n+1,(function(t){var e=_.canvas.rack.units[t];_.add(e)}))}select(){var t=this;if(t.start){var _=t.canvas.__getxy(t.start.x,t.start.y);_&&_.__flags.setflag(__STACK__MOUSE__SELECTION__START)}if(t.end){var e=t.canvas.__getxy(t.end.x,t.end.y);e&&e.__flags.setflag(__STACK__MOUSE__SELECTION__END)}t.start&&t.end&&__stdloop(0,t.array.length,(function(_){var e=t.canvas.__getxy(t.array[_].x,t.array[_].y);e&&(e.__flags.setflag(__STACK__MOUSE__SELECTION),e.modified=1,e.y==t.start.y?e.__flags.setflag(__STACK__MOUSE__SELECTION__TOP):e.y==t.end.y?e.__flags.setflag(__STACK__MOUSE__SELECTION__BOTTOM):e.__flags.setflag(__STACK__MOUSE__SELECTION__CENTER),0==e.x&&e.__flags.setflag(__STACK__MOUSE__SELECTION__LEFT),e.x==t.canvas.rack.sX-1&&e.__flags.setflag(__STACK__MOUSE__SELECTION__RIGHT),t.start.y==t.end.y&&(e.__flags.setflag(__STACK__MOUSE__SELECTION__TOP),e.__flags.setflag(__STACK__MOUSE__SELECTION__BOTTOM)),t.end.x<e.x&&t.end.y==e.y+1&&e.__flags.setflag(__STACK__MOUSE__SELECTION__BOTTOM),t.start.x>e.x&&t.start.y==e.y-1&&e.__flags.setflag(__STACK__MOUSE__SELECTION__TOP))}))}on(){this.select()}off(){var t=this;__stdloop(0,t.array.length,(function(_){var e=t.canvas.__getxy(t.array[_].x,t.array[_].y);e&&(e.__flags.clear(),e.modified=1)}))}click(t){if(this.__inprogress)this.complete();else if(-1!=t.x&&-1!=t.y){var _=this.canvas.__getxy(t.x,t.y);this.__inprogress||(this.__range[0].x=_.x,this.__range[0].y=_.y,this.begin(),this.on())}}selected(t){var _=new Array,e=this.stack.sequence.__words,s=this.canvas;for(let t of this.array)if(s.__getxy(t.x,t.y)){var i=e[s.__getindex(t.x,t.y)];_.push(i)}var n=_.join("");return this.stack.parserfn(n)}clipboard(t){console.log("copy to clipboard");var _=document.getElementById("rituum__copy"+t.__id);_.style.display="block",_.style.width="1px",_.style.height="1px",this.array.length?_.value=t.selected():_.value=t.blob(),_.select(),document.execCommand("copy"),_.style.display="none",_.style.width="0px",_.style.height="0px"}rangeto(t){if(-1!=t.x&&-1!=t.y&&this.__inprogress&&!this.__finished&&(t.x!=this.__range[0].x||t.y!=this.__range[0].y)){var _=this.canvas.__getxy(t.x,t.y);this.__range[1].x=_.x,this.__range[1].y=_.y,this.range(),this.select()}}rangebegin(t,_){var e=this.canvas.at(t),s=this.canvas.at(_);e&&s&&(this.begin(),this.__range[0].x=e.x,this.__range[0].y=e.y,this.__range[1].x=s.x,this.__range[1].y=s.y,this.range(),this.complete(),this.select())}}class neodna__Sequence{constructor(t){this.__NEODNA__ERRORS=0,this.sequence={clip__raw:"",clip__blob:"",clip__window:"",clip__focus:"",clip__leading:"",clip__trailing:""},this.sequence__clip__offset=0,this.sequence__clip__leading=0,this.sequence__clip__trailing=0,this.sequence__clip__width=8,this.sequence__clip__length=1e5,this.sequence__clip__lock=0,this.sequence__clip__visible=1e5,this.sequence__clip__packet=32,this.__leading=0,this.__trailing=0,this.sX=0,this.sY=0,this.width=0,this.height=0,this.__init=0,this.__unique=0,this.__words=new Array,this.__wordspan=2,this.__end=0,this.set(t)}set(t){var _="";if(t&&(_=t),this.__wordspan){var e=Math.floor(_.length/this.__wordspan);this.__end=e*this.__wordspan,this.__set(_),this.__init||(this.__init=1,this.sequence.clip__raw=_)}}__set(t){this.sequence.clip__blob=t,this.sequence.clip__focus="",this.sequence.clip__window="",this.sequence.clip__leading="",this.sequence.clip__trailing="",this.__words=new Array}set__offset(t){this.sequence__clip__offset=t}add__offset(t){this.sequence__clip__offset+=t}get__leading(t){t*=this.__wordspan;var _=this.sequence__clip__start-t;_<0&&(_=0);var e=this.sequence__clip__start,s=0,i="";for(s=_;s<e;s++)i+=this.sequence.clip__blob[s];return this.__leading=0,t&&(this.__leading=(e-_)/this.__wordspan),i}set__leading(t){this.sequence__clip__leading=t;var _=this.get__leading(t);this.sequence.clip__leading=_}get__trailing(t){t*=this.__wordspan;var _=this.sequence__clip__start+this.sequence.clip__window.length,e=Math.min(_+t,this.__end);if(e>_){var s=0,i="";for(s=_;s<e;s++)i+=this.sequence.clip__blob[s]}return this.__trailing=0,t&&(this.__trailing=(e-_)/this.__wordspan),i}set__trailing(t){this.sequence__clip__trailing=t;var _=this.get__trailing(t);this.sequence.clip__trailing=_}set__width(t){t<0&&(t=0),this.sX=t,this.sY=0,this.__words.length&&(this.sY+=1,this.sX>0&&(this.sY=Math.ceil(this.__words.length/this.sX))),this.sequence__clip__width=t}set__length(t){this.sequence__clip__length=t}set__visible(t){this.sequence__clip__visible=t}set__packet(t){this.sequence__clip__packet=t}set__lock(t=1){this.sequence__clip__lock=t,t&&(this.sequence__clip__lock__length=this.sequence__clip__end-this.sequence__clip__start)}is__locked(){return this.sequence__clip__lock}frame(){var t=this.sequence__clip__offset;this.sequence__clip__start=Math.max(0,t),this.sequence__clip__end=Math.max(0,this.__end+t),this.sequence__clip__end>this.__end&&(this.sequence__clip__end=this.__end),this.sequence__clip__start>this.sequence__clip__end&&(this.sequence__clip__start=this.sequence__clip__end);var _=this.sequence__clip__length*this.__wordspan;this.sequence__clip__end-this.sequence__clip__start>_&&(this.sequence__clip__end=this.sequence__clip__start+_),this.sequence__clip__lock&&(this.sequence__clip__end=this.sequence__clip__start+this.sequence__clip__lock__length,this.sequence__clip__end>this.__end&&(this.sequence__clip__end=this.__end,this.sequence__clip__start=Math.max(0,this.sequence__clip__end-this.sequence__clip__lock__length)))}build(){this.frame();var t=0,_=this.sequence__clip__end-this.sequence__clip__start;_>this.sequence__clip__visible*this.__wordspan&&(_=this.sequence__clip__visible*this.__wordspan),_>this.sequence__clip__length*this.__wordspan&&(_=this.sequence__clip__length*this.__wordspan),this.sequence.clip__window="",this.sequence.clip__focus="";var e=this.sequence__clip__start,s=this.sequence__clip__start+_;for(t=e;t<s;t++)this.sequence.clip__window+=this.sequence.clip__blob[t],this.sequence.clip__focus+=this.sequence.clip__blob[t];for(t=s;t<this.sequence__clip__end;t++)this.sequence.clip__focus+=this.sequence.clip__blob[t];this.sequence.clip__leading="",this.sequence.clip__trailing="";var i=this.__words.length;this.__words.length&&this.__wordspan&&(i=Math.floor(this.sequence.clip__window.length/this.__wordspan)),this.height=0;var n=Math.min(i,this.sequence__clip__width);n>0&&(this.height=Math.ceil(i/n)),this.width=n,this.set__leading(this.sequence__clip__leading),this.set__trailing(this.sequence__clip__trailing)}getwidth(){return this.sX}getheight(){return this.sY}get(){return this.sequence}raw(){return this.sequence.clip__raw}blob(){return this.sequence.clip__blob}focus(){return this.sequence.clip__focus}window(){return this.sequence.clip__window}words(){this.__words=new Array;var t=this.window(),_="",e=0;for(e=0;e<t.length;e++)(_+=t[e]).length==this.__wordspan&&(this.__words.push(_),_="")}to(t){this.sequence__clip__offset=t,this.build()}}var gblstackid=0;class neodna__Stack{constructor(){this.id=gblstackid++,this.sequence=0,this.blocks=0,this.canvas=0,this.caoi=0,this.__cfg=0,this.container="",this.inuse=0}set(t){this.sequence&&(this.sequence.set(t),this.sequence.set__offset(0)),this.update()}update(){this.sequence.build();var t=this.sequence.getwidth(),_=this.sequence.getheight();this.canvas.split(t,_),this.canvas.use(this.canvas.nest),this.blocks=new neodna__Blocks(t,_,this),this.blocks.build(),this.sequence.__words.length&&this.blocks.words(this.sequence)}click(t,_,e){this.canvas.mouse.click(t,_,e),this.draw(0)}over(t,_,e){this.canvas.mouse.over(t,_,e),this.draw(0)}out(t,_,e){this.canvas.mouse.out(t,_,e);var s=this.canvas.mouse.current__over;if(s.x>=0||s.y>=0){var i=this.canvas.__getxy(s.x,s.y);i&&(i.__flags.endflag(__STACK__MOUSE__OVER),i.modified=1)}this.draw(0)}offset(t){}clear(){this.blocks.clear()}blank(){this.canvas.intensity__on=0,this.draw(0),this.canvas.intensity__on=1}region(t,_,e,s){this.canvas.region={left:t,top:_,right:e,bottom:s}}resize(){var t=Math.max(this.canvas.x__min,this.canvas.width),_=Math.max(this.canvas.y__min,this.canvas.height),e=document.getElementById(this.container);e.style.width=t+"px",e.style.height=_+"px",e.width=t,e.height=_}height(){return Math.max(this.canvas.y__min,this.canvas.height)}width(){return Math.max(this.canvas.x__min,this.canvas.width)}words(t){}draw(t=0){this.resize(),this.canvas&&this.canvas.draw(this.blocks,t)}parserfn(t){var _=this.__cfg.words.n,e=this.__cfg.words.fn;if(!e)return t;var s="",i="";return __stdloop(0,t.length,(function(n){(i+=t[n]).length==_&&(s+=e(i),i="")})),s}blob(){var t=this.sequence.get().clip__raw;return this.parserfn(t)}window(){var t=new Array,_=this.sequence.__words;__stdloop(0,_.length,(function(e){t.push(_[e])}));var e=t.join("");return this.parserfn(e)}}function __init__stack(t,_){var e=new neodna__Stack;e.__cfg=_,e.sequence=new neodna__Sequence(t);var s=e.sequence;s.__NEODNA__ERRORS=_.errors?1:0,_.offset&&s.set__offset(_.offset),_.leading&&s.set__leading(_.leading),_.trailing&&s.set__trailing(_.trailing),_.width&&s.set__width(_.width),_.length&&s.set__length(_.length),_.visible&&s.set__visible(_.visible),_.fixed&&(s.__wordspan=_.fixed),s.build();var i=s.getwidth(),n=s.getheight();return e.container=_.container,e.canvas=__init__stack__canvas(_,i,n),e.blocks=new neodna__Blocks(i,n,e),e.blocks.build(),e}function __init__stack__canvas(t,_,e){var s=document.getElementById(t.nest);s&&(s.onselectstart=function(){return!1});var i=new neodna__Canvas;return i.__cfg=t,i.__cfg.words={n:1,array:"01"},i.split(_,e),i.span(t.pixels.x,t.pixels.y),i.use(t.nest),i.paint(["333333","ffffff","333333","ffffff"]),t.caoi&&i.caoi(t.caoi),i}function __init__stack__packets(t){t.get();var _="",e=t.sequence__clip__packet;if(e*=t.__wordspan,t.sequence__clip__end>0){var s=t.sequence__clip__end-t.sequence__clip__start-t.sequence__clip__visible*t.__wordspan;if(s<0&&(s=0),s){var i=0;e&&(i=Math.floor(s/e));var n=0;for(n=0;n<i;n++)_+="1"}}return _}function __init__stack__packets__left(t){var _="",e=t.sequence__clip__packet;if(e*=t.__wordspan,t.sequence__clip__start>0){var s=t.sequence__clip__start-1;if(s){var i=0;e&&(i=Math.floor(s/e));var n=0;for(n=0;n<i;n++)_+="1"}}return _}var __RTM__BINARY=0,__RTM__NUCLEOTIDE=1,__RTM__BASE8=2;function __parser__acgt(t){switch(t){case"00":return"A";case"01":return"C";case"10":return"G";case"11":return"T"}}function __parser__binary(t){switch(t){case"0":return"0";case"1":return"1"}}var gblrituumid=0,gblrituumstackfocus=0;class neodna__Rituum{constructor(t="",_=0){var e=this;this.sequence=t,this.__id=gblrituumid++,this.__nest=0,this.__cfg={prefix:"rituum",text:{profiles:[{on:1,font:"28px Courier",left:3,top:-2},{on:1,font:"14px georgia",left:0,top:0}]},words:{n:2,array:"ACGT"}},this.__stacks=new Array,this.__order=[2,1,5,0,3,4],this.__mode=1,this.__modes=new Array,this.__modes.push({id:__RTM__BINARY,n:1,array:"01",fn:__parser__binary}),this.__modes.push({id:__RTM__NUCLEOTIDE,n:2,array:"ACGT",fn:__parser__acgt}),this.__palette=new neodna__Palette,this.__width=100,this.selection=new neodna__Selection,__stdloop(0,this.__order.length,(function(t){e.__stacks.push(0)}))}palette(...t){var _=this;this.__palette=new neodna__Palette(t),__stdloop(0,this.__stacks.length,(function(t){_.__stacks[t].canvas.__palette=_.__palette}))}init(){var t={leading:18,trailing:12,width:14,length:2e4,nest:this.__cfg.prefix+"__feature__canvas"+this.__id,container:this.__cfg.prefix+"__feature"+this.__id,caoi:caoi__rituum,pixels:{x:24,y:24},visible:1e4};this.__stacks[0]=__init__stack(this.sequence,t);var _=this.__stacks[0];_.canvas.mouse=new neodna__Mouse,_.canvas.mouse.fns.click=__init__rituum__feature__mouse__click.bind(this),_.canvas.mouse.fns.over=__init__rituum__feature__mouse__over.bind(this),_.canvas.text=1,_.canvas.__cfg.text=this.__cfg.text.profiles[0],t={leading:0,trailing:0,width:-1,nest:this.__cfg.prefix+"__left__canvas"+this.__id,container:this.__cfg.prefix+"__left"+this.__id,caoi:caoi__rituum__side,pixels:{x:14,y:14}},this.__stacks[1]=__init__stack(_.sequence.get().clip__leading,t),this.__stacks[1].canvas.__cfg.text=this.__cfg.text.profiles[1],this.__stacks[1].canvas.y__min=t.pixels.y,t={leading:0,trailing:0,width:24,nest:this.__cfg.prefix+"__left__packets__canvas"+this.__id,container:this.__cfg.prefix+"__left__packets"+this.__id,caoi:caoi__rituum__packet,pixels:{x:14,y:14},fixed:1};var e=__init__stack__packets__left(_.sequence);this.__stacks[2]=__init__stack(e,t),this.__stacks[2].canvas.y__min=t.pixels.y,t={leading:0,trailing:0,width:-1,nest:this.__cfg.prefix+"__right__canvas"+this.__id,container:this.__cfg.prefix+"__right"+this.__id,caoi:caoi__rituum__side,pixels:{x:14,y:14}},this.__stacks[3]=__init__stack(_.sequence.get().clip__trailing,t),this.__stacks[3].canvas.__cfg.text=this.__cfg.text.profiles[1],t={leading:0,trailing:0,width:24,nest:this.__cfg.prefix+"__right__packets__canvas"+this.__id,container:this.__cfg.prefix+"__right__packets"+this.__id,caoi:caoi__rituum__packet,pixels:{x:14,y:14},fixed:1},e=__init__stack__packets(_.sequence),this.__stacks[4]=__init__stack(e,t),t={leading:0,trailing:0,width:4,nest:this.__cfg.prefix+"__tools__canvas"+this.__id,container:this.__cfg.prefix+"__tools"+this.__id,caoi:caoi__rituum,pixels:{x:24,y:24},fixed:1},this.__stacks[5]=__init__stack("1111",t),this.__stacks[5].canvas.__cfg.text=this.__cfg.text.profiles[1],this.__stacks[5].canvas.y__min=t.pixels.y,this.palette("#ffffff","#000000","#333333","#cfeefa","#ffffff","#f0e0ff","#95c9de","#e6d5d9","#dedbd3"),this.mode(__RTM__NUCLEOTIDE),this.selection.bind(this.__stacks[0])}nest(t){this.__nest=t,this.html();var _=this;__stdloop(0,this.__order.length,(function(t){var e=_.__stacks[t];e.canvas.use(e.__cfg.nest)})),__init__rituum__mouse__tools(this.__cfg.prefix,this,this.__stacks[5]),__init__rituum__mouse__feature(this.__cfg.prefix,this,this.__stacks[0]),document.addEventListener("keydown",function(t){if(gblrituumstackfocus.id==this.__stacks[0].id){var _=t.keyCode;t.ctrlKey&&67==_&&this.clipboard(),event.preventDefault()&&event.preventDefault()}}.bind(this)),this.update()}html(){var t=document.getElementById(this.__nest);t.style.pointerEvents="none";var _=document.createElement("div");_.id="rituum__inner"+this.__id,_.style.pointerEvents="none";var e=this;__stdloop(0,this.__order.length,(function(t){var s=document.createElement("div"),i=e.__order[t];s.id=e.__stacks[i].__cfg.container,s.style.pointerEvents="auto";var n=document.createElement("canvas");n.id=e.__stacks[i].__cfg.nest,n.style.pointerEvents="none",s.appendChild(n),_.appendChild(s)})),t.appendChild(_);var s=document.createElement("input");s.id="rituum__copy"+this.__id,s.width=0,s.height=0,s.style.width="0px",s.style.height="0px",s.style.border="0px",s.style.display="none",t.appendChild(s)}__set(t){this.sequence=t,this.__stacks[0].sequence.__init=0,this.__stacks[0].sequence.set(this.sequence),this.update(),this.__width=this.__stacks[0].sequence.width*this.__stacks[0].canvas.pixels.x}set(t){var _=new Array;for(let i of t){var e=0;function s(t){var s=_[t];return i==s.value?(s.n++,e=1,1):0}__stdbrk(0,_.length,s),e||_.push({value:i,n:1,word:"",m:0})}return this.setsimilar(t,_)||this.setnew(t,_)?1:0}setnew(t,_){var e=this.getbase(_.length),s=(this.tobase(_,e),this.convert(t,_));this.__set(s)}setsimilar(t,_){if(this.__cfg.words.n&&this.__cfg.words.array){var e=new Array;for(let t of this.__cfg.words.array)e.push({value:t,word:""});for(let t of _)for(let _ of e)t.value==_.value&&t.m++;var s=1;for(let t of _)if(!t.m){s=0;break}if(s){var i=this.getbase(e.length),n=(this.tobase(e,i),this.convert(t,e));return this.__set(n),1}}return 0}tobase(t,_){var e=0,s="";for(let i of t)i.word=e.toString(2).padStart(_,"0"),s+=i.value,e++;return s}getbase(t){var _=0;return function e(s=2){return _++,t<=s?_:e(2*s)}(2),_}convert(t,_){var e="";for(let i of t){function s(t){var s=_[t];s.value==i&&(e+=s.word)}__stdloop(0,_.length,s)}return e}words(t,_,e=0){if(this.__cfg.words.n=t,this.__cfg.words.array=_,e)this.__cfg.words.fn=e;else{if(!(e=0)&&!_)switch(t){case 1:e=__parser__binary;break;case 2:e=__parser__acgt}!e&&_&&(e=function(t){var e=parseInt(t,2);return _[e]||-1}),this.__cfg.words.fn=e}this.__modes.push({id:this.__modes.length,n:t,array:_,fn:e}),this.__mode=this.__modes[this.__modes.length-1].id,this.__wordchange(t,_,e),this.update()}__wordchange(t,_,e){var s=this;__stdloop(0,s.__stacks.length,(function(i){var n=s.__stacks[i];n.__cfg.fixed||(n.__cfg.words.n=t),n.__cfg.words.n==t&&(n.__cfg.words.array=_,n.__cfg.words.fn=e),n.sequence.__wordspan=n.__cfg.words.n,n.canvas.__cfg.words={n:n.__cfg.words.n,array:n.__cfg.words.array,fn:n.__cfg.words.fn}}))}auto(){var t=this.__stacks[0].canvas.pixels.x,_=this.__stacks[1].canvas.pixels.x,e=this.__stacks[0].sequence,s=e.sequence__clip__leading,i=Math.max(12,s),n=e.width*t,a=i;if(_){a=Math.floor(n/_);var r=this.__width/_;a<r&&(a=r)}return a}update(){var t=this.__stacks[0].sequence;t.build(),t.width;var _=this.auto(),e=t.get__leading(t.sequence__clip__leading);this.__stacks[1].sequence.set__width(_),this.__stacks[1].sequence.__init=0,this.__stacks[1].sequence.set(e),this.__stacks[1].sequence.build(),t.set__packet(this.__stacks[0].sequence.sequence__clip__leading),this.__stacks[2].sequence.__init=0,this.__stacks[2].sequence.set(__init__stack__packets__left(t));var s=t.get__trailing(t.sequence__clip__trailing);-1==this.__stacks[3].__cfg.width&&this.__stacks[3].sequence.set__width(_),this.__stacks[3].sequence.__init=0,this.__stacks[3].sequence.set(s),this.__stacks[4].sequence.__init=0,this.__stacks[4].sequence.set(__init__stack__packets(t));var i=this;__stdloop(0,i.__stacks.length,(function(t){var _=i.__stacks[t].sequence;_.build(),_.words(),_.set__width(_.sequence__clip__width)}));var n,a=0;for(a=0;a<this.__stacks.length;a++)this.__stacks[a].update();this.__stacks[1].blocks.data__push(),this.__stacks[4].blocks.data__push(),(n=this.__stacks[5].canvas.rack.units[0])&&(n.caoi[0]=caoi__rituum__left),(n=this.__stacks[5].canvas.rack.units[1])&&(n.caoi[0]=caoi__rituum__right),(n=this.__stacks[5].canvas.rack.units[2])&&(n.caoi[0]=caoi__rituum__mode),(n=this.__stacks[5].canvas.rack.units[3])&&(n.caoi[0]=caoi__rituum__copy),i=this,__stdloop(0,3,(function(t){var _=i.__stacks[0].canvas.at(t);_&&(_.caoi[0]=caoi__rituum__pre)})),__stdloop(0,3,(function(t){var _=i.__stacks[1].canvas,e=_.at(_.rack.units.length-1-t);e&&(e.caoi[0]=caoi__rituum__pre)})),this.selection.select()}width(t){this.__stacks[0].sequence.set__width(t),this.update()}length(t){this.__stacks[0].sequence.set__length(t),this.update()}click(t){return this.selection.click(t)}selected(){return this.selection.selected()}clipboard(){return this.selection.clipboard(this)}rangeto(t){return this.selection.rangeto(t)}range(t,_){return this.selection.rangebegin(t,_)}blob(){return this.__stacks[0].blob()}window(){return this.__stacks[0].window()}offset(t){var _=this.__stacks[0].sequence,e=_.__wordspan*t;_.add__offset(e),this.update()}adjust(t){var _=this.__stacks[0].canvas,e=_.mouse;if(e.current__clicked.x>=0&&e.current__clicked.y>=0){var s=_.__getxy(e.current__clicked.x,e.current__clicked.y);s&&(s.modified=1,s.__flags.endflag(__STACK__MOUSE__CLICKED)),e.current__clicked.x=-1,e.current__clicked.y=-1}this.offset(t),this.update(),this.draw(1)}mode(t){var _=this.__modes[t];_&&(this.__cfg.words.n=_.n,this.__cfg.words.array=_.array,this.__cfg.words.fn=_.fn,this.__wordchange(_.n,_.array,_.fn),this.selection.off(),this.selection.clear(),this.update())}moderotate(){this.__mode=(this.__mode+1)%this.__modes.length,this.mode(this.__mode)}draw(t=0){for(let _ of this.__stacks)_.draw(t);var _=document.getElementById(this.__cfg.prefix);if(_){var e=this.height();_.style.height=e+"px",_.height=e}}height(){var t=0;for(let _ of this.__stacks)t+=_.height();return t}}function caoi__rituum__side(t,_,e){var s=document.getElementById(_.nest);if(_.context=s.getContext("2d"),"-1"!=e.data){var i,n=e.data.word;_.__cfg.words.fn&&-1==(i=_.__cfg.words.fn(n))||(1==_.__cfg.words.n?"0"==(i=n)?_.context.fillStyle=_.color(1):"1"==i&&(_.context.fillStyle=_.color(0)):_.context.fillStyle=_.color(0),caoi__rituum__core(t,_),_.__cfg.text.on&&caoi__rituum__text(t,_,e))}}function caoi__rituum__packet(t,_,e){var s=document.getElementById(_.nest);if(_.context=s.getContext("2d"),"-1"!=e.data){var i=e.data.word;"0"==i?_.context.fillStyle=_.color(1):"1"==i&&(_.context.fillStyle=_.color(3)),caoi__rituum__core(t,_)}}function caoi__rituum__curse(t,_,e,s){caoi__rituum__init(t,_),_.context.fillStyle=_.color(1),caoi__rituum__core(t,_),_.context.strokeStyle=_.color(0),caoi__rituum__triangle(t.x*_.pixels.x,t.y*_.pixels.y,_.pixels.x,_.pixels.y,2,_.context,t,s)}function caoi__rituum__center(t,_,e){caoi__rituum__init(t,_),_.context.fillStyle=_.color(7),caoi__rituum__core(t,_),_.context.strokeStyle=_.color(0),caoi__rituum__square(t.x*_.pixels.x,t.y*_.pixels.y,_.pixels.x,_.pixels.y,2,_.context,t)}function caoi__rituum__left(t,_,e){caoi__rituum__curse(t,_,e,3)}function caoi__rituum__right(t,_,e){caoi__rituum__curse(t,_,e,1)}function caoi__rituum__letter(t,_,e){_.context.font="22px Courier",_.context.fillText(e,5+t.x*_.pixels.x,(t.y+1)*_.pixels.y-6)}function caoi__rituum__copy(t,_,e){caoi__rituum__init(t,_),_.context.fillStyle=_.color(7),caoi__rituum__core(t,_),_.context.fillStyle=_.color(0),caoi__rituum__letter(t,_,"c")}function caoi__rituum__mode(t,_,e){caoi__rituum__init(t,_),_.context.fillStyle=_.color(6),caoi__rituum__core(t,_),_.context.fillStyle=_.color(0),caoi__rituum__letter(t,_,"m")}function caoi__rituum__init(t,_){var e=document.getElementById(_.nest);_.context=e.getContext("2d")}function caoi__rituum__pre(t,_,e){var s=_.color(8);caoi__rituum__main(t,_,e,s)}function caoi__rituum(t,_,e){caoi__rituum__main(t,_,e)}function caoi__rituum__main(t,_,e,s=0){var i=document.getElementById(_.nest);if(_.context=i.getContext("2d"),"-1"!=e.data){var n=e.data.word;_.context.fillStyle=_.color(0),1==_.__cfg.words.n?(char=n,"0"==char?_.context.fillStyle=_.color(1):"1"==char&&(_.context.fillStyle=_.color(0))):2==_.__cfg.words.n&&(_.context.fillStyle=_.color(0)),t.__flags.isflag(__STACK__MOUSE__OVER)&&(s=0,_.context.fillStyle=_.color(3)),t.__flags.isflag(__STACK__MOUSE__CLICKED)&&(s=0,_.context.fillStyle=_.color(5)),t.__flags.isflag(__STACK__MOUSE__SELECTION)&&(s=0,_.context.fillStyle=_.color(6),1==_.__cfg.words.n&&("0"==char?_.context.fillStyle=_.color(6):"1"==char&&(_.context.fillStyle=_.color(3)))),caoi__rituum__core(t,_,s),_.__cfg.text.on&&caoi__rituum__text(t,_,e),t.__flags.isflag(__STACK__MOUSE__SELECTION)?_.context.fillStyle=_.color(1):_.context.fillStyle=_.color(7),caoi__rituum__border(t.x*_.pixels.x,t.y*_.pixels.y,_.pixels.x,_.pixels.y,2,_.context,t)}}function caoi__rituum__border(t,_,e,s,i,n,a){(a.__flags.isflag(__STACK__MOUSE__SELECTION__START)||a.__flags.isflag(__STACK__MOUSE__SELECTION__TOP)||a.__flags.isflag(__STACK__MOUSE__SELECTION__LEFT))&&((a.__flags.isflag(__STACK__MOUSE__SELECTION__START)||a.__flags.isflag(__STACK__MOUSE__SELECTION__LEFT))&&n.fillRect(t,_,i,s),a.__flags.isflag(__STACK__MOUSE__SELECTION__TOP)&&n.fillRect(t,_,e,i));var r=t+e-i,c=_+s-i;(a.__flags.isflag(__STACK__MOUSE__SELECTION__RIGHT)||a.__flags.isflag(__STACK__MOUSE__SELECTION__END))&&n.fillRect(r,_,i,s),a.__flags.isflag(__STACK__MOUSE__SELECTION__BOTTOM)&&n.fillRect(t,c,e,i)}function caoi__rituum__square(t,_,e,s,i,n,a){n.lineWidth=i;var r=Math.floor(.75*e),c=Math.floor(.75*s),o=Math.floor((e-r)/2),h=Math.floor((s-c)/2);Math.floor(r/2),n.beginPath(),n.moveTo(t+o,_+h),n.lineTo(t+o+r,_+h),n.lineTo(t+o+r,_+h+c),n.lineTo(t+o,_+h+c),n.closePath(),n.stroke()}function caoi__rituum__triangle(t,_,e,s,i,n,a,r){n.lineWidth=i;var c=Math.floor(.8*e),o=Math.floor(.8*s),h=Math.floor((e-c)/2),l=Math.floor((s-o)/2),u=Math.floor(c/2);switch(n.beginPath(),r){case 0:n.moveTo(t+h,_+l),n.lineTo(t+h+u,_+l+o),n.lineTo(t+h+c,_+l);break;case 1:n.moveTo(t+h,_+l),n.lineTo(t+h+c,_+l+u),n.lineTo(t+h,_+l+o);break;case 2:n.moveTo(t+h,_+l+o),n.lineTo(t+h+u,_+l),n.lineTo(t+h+c,_+l+o);break;case 3:n.moveTo(t+h+c,_+l),n.lineTo(t+h,_+l+u),n.lineTo(t+h+c,_+l+o)}n.closePath(),n.stroke()}function caoi__rituum__text(t,_,e){var s,i=_.pixels.x,n=_.pixels.y,a=e.data.word;_.__cfg.words.fn&&-1==(s=_.__cfg.words.fn(a))||(1==_.__cfg.words.n?"0"==(s=a)?_.context.fillStyle=_.color(0):"1"==s&&(_.context.fillStyle=_.color(1)):_.context.fillStyle=_.color(1),_.context.font=_.__cfg.text.font,_.context.fillText(s,_.__cfg.text.left+t.x*i,_.__cfg.text.top+(t.y+1)*n))}function caoi__rituum__core(t,_,e){e&&(_.context.fillStyle=e);var s=_.pixels.x,i=_.pixels.y;_.context.fillRect(t.x*s,t.y*i,s,i)}function __init__rituum__mouse__feature(t,_,e){var s=document.getElementById(t+"__feature"+_.__id);s&&(s.addEventListener("click",function(t){var _=getpixel(t);this.click(_.px,_.py)}.bind(e)),s.addEventListener("mousemove",function(t){gblrituumstackfocus=e;var _=getpixel(t);this.over(_.px,_.py)}.bind(e)),s.addEventListener("mouseout",function(t){var _=getpixel(t);this.out(_.px,_.py)}.bind(e)))}function __init__rituum__feature__mouse__click(t,_){var e=this.__stacks[0].canvas,s=e.__getxy(e.mouse.current__clicked.x,e.mouse.current__clicked.y);s&&(s.__flags.endflag(__STACK__MOUSE__CLICKED),s.modified=1);var i=e.__getxyp(t,_);if(i){if(i.__flags.isflag(__STACK__MOUSE__SELECTION)&&this.selection.__finished)return this.selection.off(),void this.selection.clear();i.x==s.x&&i.y==s.y?(e.mouse.current__clicked={x:-1,y:-1},i.modified=1,i.__flags.endflag(__STACK__MOUSE__CLICKED)):(i.__flags.setflag(__STACK__MOUSE__CLICKED),e.mouse.current__clicked={x:i.x,y:i.y},i.modified=1,this.click(e.mouse.current__clicked))}this.__stacks[0].draw(0)}function __init__rituum__feature__mouse__over(t,_){var e=this.__stacks[0].canvas,s=e.__getxy(e.mouse.current__over.x,e.mouse.current__over.y);s&&(s.__flags.endflag(__STACK__MOUSE__OVER),s.modified=1);var i=e.__getxyp(t,_);i&&(i.__flags.setflag(__STACK__MOUSE__OVER),e.mouse.current__over={x:i.x,y:i.y},i.modified=1,this.rangeto(e.mouse.current__over))}function __init__rituum__mouse__tools(t,_,e){var s=document.getElementById(t+"__tools"+_.__id);s&&(s.onselectstart=function(){return!1},s.onmousemove=function(t){},s.onmousedown=function(t){var _=getpixel(t),e=this.__stacks[5].canvas.__getxyp(_.px,_.py);0==e.x&&0==e.y?__adjust__rituum__down(-1,this):1==e.x&&0==e.y?__adjust__rituum__down(1,this):2==e.x&&0==e.y?(this.moderotate(),this.update(),this.draw(1)):3==e.x&&0==e.y&&this.clipboard()}.bind(_),s.onmouseup=function(t){clearInterval(__rituum__left__interval)}.bind(_),s.onmouseout=function(t){clearInterval(__rituum__left__interval)}.bind(_))}function __adjust__rituum__down(t,_){__rituum__left__interval__var=t,__rituum__left__interval=setInterval(__adjust__rituum__interval.bind(_),75),_.adjust(__rituum__left__interval__var)}function __adjust__rituum__interval(t){this.adjust(__rituum__left__interval__var)}var __rituum__left__interval=0,__rituum__left__interval__var=0;