From cd8175a2c3653e5530b36509436493edd1d331d8 Mon Sep 17 00:00:00 2001 From: localleon Date: Thu, 10 May 2018 18:09:10 +0200 Subject: [PATCH] Key Bindings Frontend, added Partices-js for better look (looks good ?). --- go/static/index.css | 41 +++++++-- go/static/index.html | 17 ++-- go/static/index.js | 139 ++++++++++++++++++++++++++++++ go/static/logo-trans.png | Bin 0 -> 563902 bytes go/static/particle-min.js | 9 ++ go/static/particlesjs-config.json | 110 +++++++++++++++++++++++ logo/logo-trans.png | Bin 0 -> 563902 bytes 7 files changed, 304 insertions(+), 12 deletions(-) create mode 100644 go/static/logo-trans.png create mode 100644 go/static/particle-min.js create mode 100644 go/static/particlesjs-config.json create mode 100644 logo/logo-trans.png diff --git a/go/static/index.css b/go/static/index.css index 6d296e9..f490f67 100644 --- a/go/static/index.css +++ b/go/static/index.css @@ -7,6 +7,8 @@ html{ padding: 0px; background-color: var(--light-black); color:white; + overflow:hidden; + } h1{ @@ -20,22 +22,30 @@ h2{ } .header{ + width: 100%; + position: absolute; + z-index: 5; letter-spacing: 5px; float: clear; color: var(--light-blue); } .logo{ + padding: 25px 20px 0px 0px ; float: left; width: 100px; height: auto; } + .header-h1{ padding: 10px 0px 0px 100px; } .inner{ + margin-top: 8%; + position: absolute; + z-index: 5; margin-left: 20px; display: inline-grid; grid-template-columns: 50% 50% 50%; @@ -72,11 +82,32 @@ h2{ .lcdread{ padding: 5px; - font-size: 1.4em; margin-top: 20px; - width: 350px; - height: 130px; - border: 2px black solid; + width: 400px; + height: 80px;; background-color: white; +} + + +.lcdtext{ + margin: 0px; + padding: 5px; color: black; -} \ No newline at end of file + font-size: 1.5em; +} +#lcdsecond{ + margin-left: 8px; +} + +#btnrefresh{ + margin-top:20px; +} + +#aa_particles +{ + z-index: 4; + + height: 100%; + height: 100vh; + +} diff --git a/go/static/index.html b/go/static/index.html index a5e2c09..d00f410 100644 --- a/go/static/index.html +++ b/go/static/index.html @@ -7,12 +7,13 @@ + Barco-SLM-Network
- +

Barco-SLM-Network

@@ -101,15 +102,17 @@

Standby

LCD-Display

-

-

+

LCD not loaded

+

LCD not loaded

- + + +
+

// Developed by Thomas "Moesby" Neteler and Leon Rauschenbach

+

// Link to the Dokumentation

- - - +
diff --git a/go/static/index.js b/go/static/index.js index ddc23ad..4ce1897 100644 --- a/go/static/index.js +++ b/go/static/index.js @@ -1,7 +1,9 @@ window.onload = function () { console.log('App started') + window.addEventListener('keydown', this.keybindings, false) readLCD() this.setInterval(readLCD, 2500) + particlejsinit() } function apirequest(cmd, opt) { @@ -36,4 +38,141 @@ function parseLCD(json) { var lcdsecond = document.getElementById("lcdsecond") lcdfirst.innerHTML = json.First lcdsecond.innerHTML = json.Second +} + +function keybindings(e) { + // Bind Apirequests to Keys + var key = e.keyCode; + switch (key) { + case 37: + apirequest('infrared', 'arrowleft'); + break; //Left key + case 38: + apirequest('infrared', 'arrowup'); + break; //Up key + case 39: + apirequest('infrared', 'arrowright'); + break; //Right key + case 40: + apirequest('infrared', 'arrowdown'); + break; //Down key + case 79: + apirequest('shutteropen', 'fast'); + break; // o key + case 67: + apirequest('shutterclose', 'fast'); + break; // c key + case 13: + apirequest('infrared', 'enter'); + break; // enter key + case 27: + apirequest('infrared', 'exit'); + break; //esc key + default: + //alert(key); //Everything else + } +} + +function particlejsinit() { + console.log("Loaded particles-js") + /* ---- particles.js config ---- */ + +particlesJS("aa_particles", { + "particles": { + "number": { + "value": 80, + "density": { + "enable": true, + "value_area": 800 + } + }, + "color": { + "value": "#ffffff" + }, + "shape": { + "type": "circle", + "stroke": { + "width": 0, + "color": "#000000" + }, + "polygon": { + "nb_sides": 5 + }, + }, + "opacity": { + "value": 0.5, + "random": false, + "anim": { + "enable": false, + "speed": 1, + "opacity_min": 0.1, + "sync": false + } + }, + "size": { + "value": 3, + "random": true, + "anim": { + "enable": false, + "speed": 40, + "size_min": 0.1, + "sync": false + } + }, + "line_linked": { + "enable": true, + "distance": 150, + "color": "#ffffff", + "opacity": 0.4, + "width": 1 + }, + "move": { + "enable": true, + "speed": 2, + "direction": "none", + "random": false, + "straight": false, + "out_mode": "out", + "bounce": false, + "attract": { + "enable": false, + "rotateX": 600, + "rotateY": 1200 + } + } + }, + "interactivity": { + "detect_on": "canvas", + "events": { + "onhover": { + "enable": true, + "mode": "grab" + }, + "resize": true + }, + "modes": { + "grab": { + "distance": 140, + "line_linked": { + "opacity": 1 + } + }, + "bubble": { + "distance": 400, + "size": 40, + "duration": 2, + "opacity": 8, + "speed": 3 + }, + "repulse": { + "distance": 200, + "duration": 0.4 + }, + "remove": { + "particles_nb": 2 + } + } + }, + "retina_detect": true + }); } \ No newline at end of file diff --git a/go/static/logo-trans.png b/go/static/logo-trans.png new file mode 100644 index 0000000000000000000000000000000000000000..76f68ece5591efcebb54d7076d07878d0642ebf9 GIT binary patch literal 563902 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 literal 0 HcmV?d00001 diff --git a/go/static/particle-min.js b/go/static/particle-min.js new file mode 100644 index 0000000..b3d46d1 --- /dev/null +++ b/go/static/particle-min.js @@ -0,0 +1,9 @@ +/* ----------------------------------------------- +/* Author : Vincent Garreau - vincentgarreau.com +/* MIT license: http://opensource.org/licenses/MIT +/* Demo / Generator : vincentgarreau.com/particles.js +/* GitHub : github.com/VincentGarreau/particles.js +/* How to use? : Check the GitHub README +/* v2.0.0 +/* ----------------------------------------------- */ +function hexToRgb(e){var a=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;e=e.replace(a,function(e,a,t,i){return a+a+t+t+i+i});var t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t?{r:parseInt(t[1],16),g:parseInt(t[2],16),b:parseInt(t[3],16)}:null}function clamp(e,a,t){return Math.min(Math.max(e,a),t)}function isInArray(e,a){return a.indexOf(e)>-1}var pJS=function(e,a){var t=document.querySelector("#"+e+" > .particles-js-canvas-el");this.pJS={canvas:{el:t,w:t.offsetWidth,h:t.offsetHeight},particles:{number:{value:400,density:{enable:!0,value_area:800}},color:{value:"#fff"},shape:{type:"circle",stroke:{width:0,color:"#ff0000"},polygon:{nb_sides:5},image:{src:"",width:100,height:100}},opacity:{value:1,random:!1,anim:{enable:!1,speed:2,opacity_min:0,sync:!1}},size:{value:20,random:!1,anim:{enable:!1,speed:20,size_min:0,sync:!1}},line_linked:{enable:!0,distance:100,color:"#fff",opacity:1,width:1},move:{enable:!0,speed:2,direction:"none",random:!1,straight:!1,out_mode:"out",bounce:!1,attract:{enable:!1,rotateX:3e3,rotateY:3e3}},array:[]},interactivity:{detect_on:"canvas",events:{onhover:{enable:!0,mode:"grab"},onclick:{enable:!0,mode:"push"},resize:!0},modes:{grab:{distance:100,line_linked:{opacity:1}},bubble:{distance:200,size:80,duration:.4},repulse:{distance:200,duration:.4},push:{particles_nb:4},remove:{particles_nb:2}},mouse:{}},retina_detect:!1,fn:{interact:{},modes:{},vendors:{}},tmp:{}};var i=this.pJS;a&&Object.deepExtend(i,a),i.tmp.obj={size_value:i.particles.size.value,size_anim_speed:i.particles.size.anim.speed,move_speed:i.particles.move.speed,line_linked_distance:i.particles.line_linked.distance,line_linked_width:i.particles.line_linked.width,mode_grab_distance:i.interactivity.modes.grab.distance,mode_bubble_distance:i.interactivity.modes.bubble.distance,mode_bubble_size:i.interactivity.modes.bubble.size,mode_repulse_distance:i.interactivity.modes.repulse.distance},i.fn.retinaInit=function(){i.retina_detect&&window.devicePixelRatio>1?(i.canvas.pxratio=window.devicePixelRatio,i.tmp.retina=!0):(i.canvas.pxratio=1,i.tmp.retina=!1),i.canvas.w=i.canvas.el.offsetWidth*i.canvas.pxratio,i.canvas.h=i.canvas.el.offsetHeight*i.canvas.pxratio,i.particles.size.value=i.tmp.obj.size_value*i.canvas.pxratio,i.particles.size.anim.speed=i.tmp.obj.size_anim_speed*i.canvas.pxratio,i.particles.move.speed=i.tmp.obj.move_speed*i.canvas.pxratio,i.particles.line_linked.distance=i.tmp.obj.line_linked_distance*i.canvas.pxratio,i.interactivity.modes.grab.distance=i.tmp.obj.mode_grab_distance*i.canvas.pxratio,i.interactivity.modes.bubble.distance=i.tmp.obj.mode_bubble_distance*i.canvas.pxratio,i.particles.line_linked.width=i.tmp.obj.line_linked_width*i.canvas.pxratio,i.interactivity.modes.bubble.size=i.tmp.obj.mode_bubble_size*i.canvas.pxratio,i.interactivity.modes.repulse.distance=i.tmp.obj.mode_repulse_distance*i.canvas.pxratio},i.fn.canvasInit=function(){i.canvas.ctx=i.canvas.el.getContext("2d")},i.fn.canvasSize=function(){i.canvas.el.width=i.canvas.w,i.canvas.el.height=i.canvas.h,i&&i.interactivity.events.resize&&window.addEventListener("resize",function(){i.canvas.w=i.canvas.el.offsetWidth,i.canvas.h=i.canvas.el.offsetHeight,i.tmp.retina&&(i.canvas.w*=i.canvas.pxratio,i.canvas.h*=i.canvas.pxratio),i.canvas.el.width=i.canvas.w,i.canvas.el.height=i.canvas.h,i.particles.move.enable||(i.fn.particlesEmpty(),i.fn.particlesCreate(),i.fn.particlesDraw(),i.fn.vendors.densityAutoParticles()),i.fn.vendors.densityAutoParticles()})},i.fn.canvasPaint=function(){i.canvas.ctx.fillRect(0,0,i.canvas.w,i.canvas.h)},i.fn.canvasClear=function(){i.canvas.ctx.clearRect(0,0,i.canvas.w,i.canvas.h)},i.fn.particle=function(e,a,t){if(this.radius=(i.particles.size.random?Math.random():1)*i.particles.size.value,i.particles.size.anim.enable&&(this.size_status=!1,this.vs=i.particles.size.anim.speed/100,i.particles.size.anim.sync||(this.vs=this.vs*Math.random())),this.x=t?t.x:Math.random()*i.canvas.w,this.y=t?t.y:Math.random()*i.canvas.h,this.x>i.canvas.w-2*this.radius?this.x=this.x-this.radius:this.x<2*this.radius&&(this.x=this.x+this.radius),this.y>i.canvas.h-2*this.radius?this.y=this.y-this.radius:this.y<2*this.radius&&(this.y=this.y+this.radius),i.particles.move.bounce&&i.fn.vendors.checkOverlap(this,t),this.color={},"object"==typeof e.value)if(e.value instanceof Array){var s=e.value[Math.floor(Math.random()*i.particles.color.value.length)];this.color.rgb=hexToRgb(s)}else void 0!=e.value.r&&void 0!=e.value.g&&void 0!=e.value.b&&(this.color.rgb={r:e.value.r,g:e.value.g,b:e.value.b}),void 0!=e.value.h&&void 0!=e.value.s&&void 0!=e.value.l&&(this.color.hsl={h:e.value.h,s:e.value.s,l:e.value.l});else"random"==e.value?this.color.rgb={r:Math.floor(256*Math.random())+0,g:Math.floor(256*Math.random())+0,b:Math.floor(256*Math.random())+0}:"string"==typeof e.value&&(this.color=e,this.color.rgb=hexToRgb(this.color.value));this.opacity=(i.particles.opacity.random?Math.random():1)*i.particles.opacity.value,i.particles.opacity.anim.enable&&(this.opacity_status=!1,this.vo=i.particles.opacity.anim.speed/100,i.particles.opacity.anim.sync||(this.vo=this.vo*Math.random()));var n={};switch(i.particles.move.direction){case"top":n={x:0,y:-1};break;case"top-right":n={x:.5,y:-.5};break;case"right":n={x:1,y:-0};break;case"bottom-right":n={x:.5,y:.5};break;case"bottom":n={x:0,y:1};break;case"bottom-left":n={x:-.5,y:1};break;case"left":n={x:-1,y:0};break;case"top-left":n={x:-.5,y:-.5};break;default:n={x:0,y:0}}i.particles.move.straight?(this.vx=n.x,this.vy=n.y,i.particles.move.random&&(this.vx=this.vx*Math.random(),this.vy=this.vy*Math.random())):(this.vx=n.x+Math.random()-.5,this.vy=n.y+Math.random()-.5),this.vx_i=this.vx,this.vy_i=this.vy;var r=i.particles.shape.type;if("object"==typeof r){if(r instanceof Array){var c=r[Math.floor(Math.random()*r.length)];this.shape=c}}else this.shape=r;if("image"==this.shape){var o=i.particles.shape;this.img={src:o.image.src,ratio:o.image.width/o.image.height},this.img.ratio||(this.img.ratio=1),"svg"==i.tmp.img_type&&void 0!=i.tmp.source_svg&&(i.fn.vendors.createSvgImg(this),i.tmp.pushing&&(this.img.loaded=!1))}},i.fn.particle.prototype.draw=function(){function e(){i.canvas.ctx.drawImage(r,a.x-t,a.y-t,2*t,2*t/a.img.ratio)}var a=this;if(void 0!=a.radius_bubble)var t=a.radius_bubble;else var t=a.radius;if(void 0!=a.opacity_bubble)var s=a.opacity_bubble;else var s=a.opacity;if(a.color.rgb)var n="rgba("+a.color.rgb.r+","+a.color.rgb.g+","+a.color.rgb.b+","+s+")";else var n="hsla("+a.color.hsl.h+","+a.color.hsl.s+"%,"+a.color.hsl.l+"%,"+s+")";switch(i.canvas.ctx.fillStyle=n,i.canvas.ctx.beginPath(),a.shape){case"circle":i.canvas.ctx.arc(a.x,a.y,t,0,2*Math.PI,!1);break;case"edge":i.canvas.ctx.rect(a.x-t,a.y-t,2*t,2*t);break;case"triangle":i.fn.vendors.drawShape(i.canvas.ctx,a.x-t,a.y+t/1.66,2*t,3,2);break;case"polygon":i.fn.vendors.drawShape(i.canvas.ctx,a.x-t/(i.particles.shape.polygon.nb_sides/3.5),a.y-t/.76,2.66*t/(i.particles.shape.polygon.nb_sides/3),i.particles.shape.polygon.nb_sides,1);break;case"star":i.fn.vendors.drawShape(i.canvas.ctx,a.x-2*t/(i.particles.shape.polygon.nb_sides/4),a.y-t/1.52,2*t*2.66/(i.particles.shape.polygon.nb_sides/3),i.particles.shape.polygon.nb_sides,2);break;case"image":if("svg"==i.tmp.img_type)var r=a.img.obj;else var r=i.tmp.img_obj;r&&e()}i.canvas.ctx.closePath(),i.particles.shape.stroke.width>0&&(i.canvas.ctx.strokeStyle=i.particles.shape.stroke.color,i.canvas.ctx.lineWidth=i.particles.shape.stroke.width,i.canvas.ctx.stroke()),i.canvas.ctx.fill()},i.fn.particlesCreate=function(){for(var e=0;e=i.particles.opacity.value&&(a.opacity_status=!1),a.opacity+=a.vo):(a.opacity<=i.particles.opacity.anim.opacity_min&&(a.opacity_status=!0),a.opacity-=a.vo),a.opacity<0&&(a.opacity=0)),i.particles.size.anim.enable&&(1==a.size_status?(a.radius>=i.particles.size.value&&(a.size_status=!1),a.radius+=a.vs):(a.radius<=i.particles.size.anim.size_min&&(a.size_status=!0),a.radius-=a.vs),a.radius<0&&(a.radius=0)),"bounce"==i.particles.move.out_mode)var s={x_left:a.radius,x_right:i.canvas.w,y_top:a.radius,y_bottom:i.canvas.h};else var s={x_left:-a.radius,x_right:i.canvas.w+a.radius,y_top:-a.radius,y_bottom:i.canvas.h+a.radius};switch(a.x-a.radius>i.canvas.w?(a.x=s.x_left,a.y=Math.random()*i.canvas.h):a.x+a.radius<0&&(a.x=s.x_right,a.y=Math.random()*i.canvas.h),a.y-a.radius>i.canvas.h?(a.y=s.y_top,a.x=Math.random()*i.canvas.w):a.y+a.radius<0&&(a.y=s.y_bottom,a.x=Math.random()*i.canvas.w),i.particles.move.out_mode){case"bounce":a.x+a.radius>i.canvas.w?a.vx=-a.vx:a.x-a.radius<0&&(a.vx=-a.vx),a.y+a.radius>i.canvas.h?a.vy=-a.vy:a.y-a.radius<0&&(a.vy=-a.vy)}if(isInArray("grab",i.interactivity.events.onhover.mode)&&i.fn.modes.grabParticle(a),(isInArray("bubble",i.interactivity.events.onhover.mode)||isInArray("bubble",i.interactivity.events.onclick.mode))&&i.fn.modes.bubbleParticle(a),(isInArray("repulse",i.interactivity.events.onhover.mode)||isInArray("repulse",i.interactivity.events.onclick.mode))&&i.fn.modes.repulseParticle(a),i.particles.line_linked.enable||i.particles.move.attract.enable)for(var n=e+1;n0){var c=i.particles.line_linked.color_rgb_line;i.canvas.ctx.strokeStyle="rgba("+c.r+","+c.g+","+c.b+","+r+")",i.canvas.ctx.lineWidth=i.particles.line_linked.width,i.canvas.ctx.beginPath(),i.canvas.ctx.moveTo(e.x,e.y),i.canvas.ctx.lineTo(a.x,a.y),i.canvas.ctx.stroke(),i.canvas.ctx.closePath()}}},i.fn.interact.attractParticles=function(e,a){var t=e.x-a.x,s=e.y-a.y,n=Math.sqrt(t*t+s*s);if(n<=i.particles.line_linked.distance){var r=t/(1e3*i.particles.move.attract.rotateX),c=s/(1e3*i.particles.move.attract.rotateY);e.vx-=r,e.vy-=c,a.vx+=r,a.vy+=c}},i.fn.interact.bounceParticles=function(e,a){var t=e.x-a.x,i=e.y-a.y,s=Math.sqrt(t*t+i*i),n=e.radius+a.radius;n>=s&&(e.vx=-e.vx,e.vy=-e.vy,a.vx=-a.vx,a.vy=-a.vy)},i.fn.modes.pushParticles=function(e,a){i.tmp.pushing=!0;for(var t=0;e>t;t++)i.particles.array.push(new i.fn.particle(i.particles.color,i.particles.opacity.value,{x:a?a.pos_x:Math.random()*i.canvas.w,y:a?a.pos_y:Math.random()*i.canvas.h})),t==e-1&&(i.particles.move.enable||i.fn.particlesDraw(),i.tmp.pushing=!1)},i.fn.modes.removeParticles=function(e){i.particles.array.splice(0,e),i.particles.move.enable||i.fn.particlesDraw()},i.fn.modes.bubbleParticle=function(e){function a(){e.opacity_bubble=e.opacity,e.radius_bubble=e.radius}function t(a,t,s,n,c){if(a!=t)if(i.tmp.bubble_duration_end){if(void 0!=s){var o=n-p*(n-a)/i.interactivity.modes.bubble.duration,l=a-o;d=a+l,"size"==c&&(e.radius_bubble=d),"opacity"==c&&(e.opacity_bubble=d)}}else if(r<=i.interactivity.modes.bubble.distance){if(void 0!=s)var v=s;else var v=n;if(v!=a){var d=n-p*(n-a)/i.interactivity.modes.bubble.duration;"size"==c&&(e.radius_bubble=d),"opacity"==c&&(e.opacity_bubble=d)}}else"size"==c&&(e.radius_bubble=void 0),"opacity"==c&&(e.opacity_bubble=void 0)}if(i.interactivity.events.onhover.enable&&isInArray("bubble",i.interactivity.events.onhover.mode)){var s=e.x-i.interactivity.mouse.pos_x,n=e.y-i.interactivity.mouse.pos_y,r=Math.sqrt(s*s+n*n),c=1-r/i.interactivity.modes.bubble.distance;if(r<=i.interactivity.modes.bubble.distance){if(c>=0&&"mousemove"==i.interactivity.status){if(i.interactivity.modes.bubble.size!=i.particles.size.value)if(i.interactivity.modes.bubble.size>i.particles.size.value){var o=e.radius+i.interactivity.modes.bubble.size*c;o>=0&&(e.radius_bubble=o)}else{var l=e.radius-i.interactivity.modes.bubble.size,o=e.radius-l*c;o>0?e.radius_bubble=o:e.radius_bubble=0}if(i.interactivity.modes.bubble.opacity!=i.particles.opacity.value)if(i.interactivity.modes.bubble.opacity>i.particles.opacity.value){var v=i.interactivity.modes.bubble.opacity*c;v>e.opacity&&v<=i.interactivity.modes.bubble.opacity&&(e.opacity_bubble=v)}else{var v=e.opacity-(i.particles.opacity.value-i.interactivity.modes.bubble.opacity)*c;v=i.interactivity.modes.bubble.opacity&&(e.opacity_bubble=v)}}}else a();"mouseleave"==i.interactivity.status&&a()}else if(i.interactivity.events.onclick.enable&&isInArray("bubble",i.interactivity.events.onclick.mode)){if(i.tmp.bubble_clicking){var s=e.x-i.interactivity.mouse.click_pos_x,n=e.y-i.interactivity.mouse.click_pos_y,r=Math.sqrt(s*s+n*n),p=((new Date).getTime()-i.interactivity.mouse.click_time)/1e3;p>i.interactivity.modes.bubble.duration&&(i.tmp.bubble_duration_end=!0),p>2*i.interactivity.modes.bubble.duration&&(i.tmp.bubble_clicking=!1,i.tmp.bubble_duration_end=!1)}i.tmp.bubble_clicking&&(t(i.interactivity.modes.bubble.size,i.particles.size.value,e.radius_bubble,e.radius,"size"),t(i.interactivity.modes.bubble.opacity,i.particles.opacity.value,e.opacity_bubble,e.opacity,"opacity"))}},i.fn.modes.repulseParticle=function(e){function a(){var a=Math.atan2(d,p);if(e.vx=u*Math.cos(a),e.vy=u*Math.sin(a),"bounce"==i.particles.move.out_mode){var t={x:e.x+e.vx,y:e.y+e.vy};t.x+e.radius>i.canvas.w?e.vx=-e.vx:t.x-e.radius<0&&(e.vx=-e.vx),t.y+e.radius>i.canvas.h?e.vy=-e.vy:t.y-e.radius<0&&(e.vy=-e.vy)}}if(i.interactivity.events.onhover.enable&&isInArray("repulse",i.interactivity.events.onhover.mode)&&"mousemove"==i.interactivity.status){var t=e.x-i.interactivity.mouse.pos_x,s=e.y-i.interactivity.mouse.pos_y,n=Math.sqrt(t*t+s*s),r={x:t/n,y:s/n},c=i.interactivity.modes.repulse.distance,o=100,l=clamp(1/c*(-1*Math.pow(n/c,2)+1)*c*o,0,50),v={x:e.x+r.x*l,y:e.y+r.y*l};"bounce"==i.particles.move.out_mode?(v.x-e.radius>0&&v.x+e.radius0&&v.y+e.radius=m&&a()}else 0==i.tmp.repulse_clicking&&(e.vx=e.vx_i,e.vy=e.vy_i)},i.fn.modes.grabParticle=function(e){if(i.interactivity.events.onhover.enable&&"mousemove"==i.interactivity.status){var a=e.x-i.interactivity.mouse.pos_x,t=e.y-i.interactivity.mouse.pos_y,s=Math.sqrt(a*a+t*t);if(s<=i.interactivity.modes.grab.distance){var n=i.interactivity.modes.grab.line_linked.opacity-s/(1/i.interactivity.modes.grab.line_linked.opacity)/i.interactivity.modes.grab.distance;if(n>0){var r=i.particles.line_linked.color_rgb_line;i.canvas.ctx.strokeStyle="rgba("+r.r+","+r.g+","+r.b+","+n+")",i.canvas.ctx.lineWidth=i.particles.line_linked.width,i.canvas.ctx.beginPath(),i.canvas.ctx.moveTo(e.x,e.y),i.canvas.ctx.lineTo(i.interactivity.mouse.pos_x,i.interactivity.mouse.pos_y),i.canvas.ctx.stroke(),i.canvas.ctx.closePath()}}}},i.fn.vendors.eventsListeners=function(){"window"==i.interactivity.detect_on?i.interactivity.el=window:i.interactivity.el=i.canvas.el,(i.interactivity.events.onhover.enable||i.interactivity.events.onclick.enable)&&(i.interactivity.el.addEventListener("mousemove",function(e){if(i.interactivity.el==window)var a=e.clientX,t=e.clientY;else var a=e.offsetX||e.clientX,t=e.offsetY||e.clientY;i.interactivity.mouse.pos_x=a,i.interactivity.mouse.pos_y=t,i.tmp.retina&&(i.interactivity.mouse.pos_x*=i.canvas.pxratio,i.interactivity.mouse.pos_y*=i.canvas.pxratio),i.interactivity.status="mousemove"}),i.interactivity.el.addEventListener("mouseleave",function(e){i.interactivity.mouse.pos_x=null,i.interactivity.mouse.pos_y=null,i.interactivity.status="mouseleave"})),i.interactivity.events.onclick.enable&&i.interactivity.el.addEventListener("click",function(){if(i.interactivity.mouse.click_pos_x=i.interactivity.mouse.pos_x,i.interactivity.mouse.click_pos_y=i.interactivity.mouse.pos_y,i.interactivity.mouse.click_time=(new Date).getTime(),i.interactivity.events.onclick.enable)switch(i.interactivity.events.onclick.mode){case"push":i.particles.move.enable?i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb,i.interactivity.mouse):1==i.interactivity.modes.push.particles_nb?i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb,i.interactivity.mouse):i.interactivity.modes.push.particles_nb>1&&i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb);break;case"remove":i.fn.modes.removeParticles(i.interactivity.modes.remove.particles_nb);break;case"bubble":i.tmp.bubble_clicking=!0;break;case"repulse":i.tmp.repulse_clicking=!0,i.tmp.repulse_count=0,i.tmp.repulse_finish=!1,setTimeout(function(){i.tmp.repulse_clicking=!1},1e3*i.interactivity.modes.repulse.duration)}})},i.fn.vendors.densityAutoParticles=function(){if(i.particles.number.density.enable){var e=i.canvas.el.width*i.canvas.el.height/1e3;i.tmp.retina&&(e/=2*i.canvas.pxratio);var a=e*i.particles.number.value/i.particles.number.density.value_area,t=i.particles.array.length-a;0>t?i.fn.modes.pushParticles(Math.abs(t)):i.fn.modes.removeParticles(t)}},i.fn.vendors.checkOverlap=function(e,a){for(var t=0;tv;v++)e.lineTo(i,0),e.translate(i,0),e.rotate(l);e.fill(),e.restore()},i.fn.vendors.exportImg=function(){window.open(i.canvas.el.toDataURL("image/png"),"_blank")},i.fn.vendors.loadImg=function(e){if(i.tmp.img_error=void 0,""!=i.particles.shape.image.src)if("svg"==e){var a=new XMLHttpRequest;a.open("GET",i.particles.shape.image.src),a.onreadystatechange=function(e){4==a.readyState&&(200==a.status?(i.tmp.source_svg=e.currentTarget.response,i.fn.vendors.checkBeforeDraw()):(console.log("Error pJS - Image not found"),i.tmp.img_error=!0))},a.send()}else{var t=new Image;t.addEventListener("load",function(){i.tmp.img_obj=t,i.fn.vendors.checkBeforeDraw()}),t.src=i.particles.shape.image.src}else console.log("Error pJS - No image.src"),i.tmp.img_error=!0},i.fn.vendors.draw=function(){"image"==i.particles.shape.type?"svg"==i.tmp.img_type?i.tmp.count_svg>=i.particles.number.value?(i.fn.particlesDraw(),i.particles.move.enable?i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw):cancelRequestAnimFrame(i.fn.drawAnimFrame)):i.tmp.img_error||(i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw)):void 0!=i.tmp.img_obj?(i.fn.particlesDraw(),i.particles.move.enable?i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw):cancelRequestAnimFrame(i.fn.drawAnimFrame)):i.tmp.img_error||(i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw)):(i.fn.particlesDraw(),i.particles.move.enable?i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw):cancelRequestAnimFrame(i.fn.drawAnimFrame))},i.fn.vendors.checkBeforeDraw=function(){"image"==i.particles.shape.type?"svg"==i.tmp.img_type&&void 0==i.tmp.source_svg?i.tmp.checkAnimFrame=requestAnimFrame(check):(cancelRequestAnimFrame(i.tmp.checkAnimFrame),i.tmp.img_error||(i.fn.vendors.init(),i.fn.vendors.draw())):(i.fn.vendors.init(),i.fn.vendors.draw())},i.fn.vendors.init=function(){i.fn.retinaInit(),i.fn.canvasInit(),i.fn.canvasSize(),i.fn.canvasPaint(),i.fn.particlesCreate(),i.fn.vendors.densityAutoParticles(),i.particles.line_linked.color_rgb_line=hexToRgb(i.particles.line_linked.color)},i.fn.vendors.start=function(){isInArray("image",i.particles.shape.type)?(i.tmp.img_type=i.particles.shape.image.src.substr(i.particles.shape.image.src.length-3),i.fn.vendors.loadImg(i.tmp.img_type)):i.fn.vendors.checkBeforeDraw()},i.fn.vendors.eventsListeners(),i.fn.vendors.start()};Object.deepExtend=function(e,a){for(var t in a)a[t]&&a[t].constructor&&a[t].constructor===Object?(e[t]=e[t]||{},arguments.callee(e[t],a[t])):e[t]=a[t];return e},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(e){window.setTimeout(e,1e3/60)}}(),window.cancelRequestAnimFrame=function(){return window.cancelAnimationFrame||window.webkitCancelRequestAnimationFrame||window.mozCancelRequestAnimationFrame||window.oCancelRequestAnimationFrame||window.msCancelRequestAnimationFrame||clearTimeout}(),window.pJSDom=[],window.particlesJS=function(e,a){"string"!=typeof e&&(a=e,e="particles-js"),e||(e="particles-js");var t=document.getElementById(e),i="particles-js-canvas-el",s=t.getElementsByClassName(i);if(s.length)for(;s.length>0;)t.removeChild(s[0]);var n=document.createElement("canvas");n.className=i,n.style.width="100%",n.style.height="100%";var r=document.getElementById(e).appendChild(n);null!=r&&pJSDom.push(new pJS(e,a))},window.particlesJS.load=function(e,a,t){var i=new XMLHttpRequest;i.open("GET",a),i.onreadystatechange=function(a){if(4==i.readyState)if(200==i.status){var s=JSON.parse(a.currentTarget.response);window.particlesJS(e,s),t&&t()}else console.log("Error pJS - XMLHttpRequest status: "+i.status),console.log("Error pJS - File config not found")},i.send()}; \ No newline at end of file diff --git a/go/static/particlesjs-config.json b/go/static/particlesjs-config.json new file mode 100644 index 0000000..9e3e402 --- /dev/null +++ b/go/static/particlesjs-config.json @@ -0,0 +1,110 @@ +{ + "particles": { + "number": { + "value": 80, + "density": { + "enable": true, + "value_area": 800 + } + }, + "color": { + "value": "#ffffff" + }, + "shape": { + "type": "circle", + "stroke": { + "width": 0, + "color": "#000000" + }, + "polygon": { + "nb_sides": 5 + }, + "image": { + "src": "img/github.svg", + "width": 100, + "height": 100 + } + }, + "opacity": { + "value": 0.5, + "random": false, + "anim": { + "enable": false, + "speed": 1, + "opacity_min": 0.1, + "sync": false + } + }, + "size": { + "value": 2, + "random": true, + "anim": { + "enable": false, + "speed": 40, + "size_min": 0.1, + "sync": false + } + }, + "line_linked": { + "enable": true, + "distance": 200, + "color": "#ffffff", + "opacity": 0.4, + "width": 1 + }, + "move": { + "enable": true, + "speed": 6, + "direction": "none", + "random": false, + "straight": false, + "out_mode": "out", + "bounce": false, + "attract": { + "enable": false, + "rotateX": 600, + "rotateY": 1200 + } + } + }, + "interactivity": { + "detect_on": "canvas", + "events": { + "onhover": { + "enable": true, + "mode": "grab" + }, + "onclick": { + "enable": true, + "mode": "push" + }, + "resize": true + }, + "modes": { + "grab": { + "distance": 400, + "line_linked": { + "opacity": 1 + } + }, + "bubble": { + "distance": 400, + "size": 40, + "duration": 2, + "opacity": 8, + "speed": 3 + }, + "repulse": { + "distance": 200, + "duration": 0.4 + }, + "push": { + "particles_nb": 4 + }, + "remove": { + "particles_nb": 2 + } + } + }, + "retina_detect": true +} \ No newline at end of file diff --git a/logo/logo-trans.png b/logo/logo-trans.png new file mode 100644 index 0000000000000000000000000000000000000000..76f68ece5591efcebb54d7076d07878d0642ebf9 GIT binary patch literal 563902 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 literal 0 HcmV?d00001