mirror of
				https://github.com/graphql-python/graphene.git
				synced 2025-10-31 16:07:27 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			157 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			157 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| var IN_BROWSER = typeof window != 'undefined';
 | |
| import React from 'react';
 | |
| var browser_supported;
 | |
| if (IN_BROWSER) {
 | |
|     var isSafari = navigator.vendor && navigator.vendor.indexOf('Apple') > -1 &&
 | |
|                    navigator.userAgent && !navigator.userAgent.match('CriOS');
 | |
|     var browser_supported = !isSafari;
 | |
| }
 | |
| if (IN_BROWSER && browser_supported) {
 | |
|   var glfx = require('../vendor/glfx.optim')
 | |
|   var particlesJS = require('../vendor/particles.js')
 | |
| }
 | |
| 
 | |
| class Header extends React.Component {
 | |
|   update() {
 | |
|     if (!this.mounted) return;
 | |
|     var w = this.video.width;
 | |
|     var h = this.video.height;
 | |
|     if (window.devicePixelRatio > 1) {
 | |
|         w = w/2;
 | |
|         h = h/2;
 | |
|     }
 | |
|     this.texture._.initFromCanvas(w, h, this.video);
 | |
| 
 | |
|     this.canvas.draw(this.texture).tiltShift(0, h*2/3, 10, h*2/3, 15, 200).update();
 | |
|     requestAnimationFrame(this.update.bind(this));
 | |
|   }
 | |
|   componentWillUnmount() {
 | |
|     this.mounted = false;
 | |
|   }
 | |
|   componentDidMount() {
 | |
|     if (!(IN_BROWSER && browser_supported)) return;
 | |
|     this.mounted = true;
 | |
|     new particlesJS('header-background', {
 | |
|       "particles": {
 | |
|         "number": {
 | |
|           "value": 40,
 | |
|           "density": {
 | |
|             "enable": true,
 | |
|             "value_area": 800
 | |
|           }
 | |
|         },
 | |
|         "color": {
 | |
|           "value": "#ffffff"
 | |
|         },
 | |
|         "shape": {
 | |
|           "type": "circle",
 | |
|           "stroke": {
 | |
|             "width": 0,
 | |
|             "color": "#000000"
 | |
|           },
 | |
|           "polygon": {
 | |
|             "nb_sides": 8
 | |
|           }
 | |
|         },
 | |
|         "opacity": {
 | |
|           "value": 1,
 | |
|           "random": true,
 | |
|           "anim": {
 | |
|             "enable": true,
 | |
|             "speed": .1,
 | |
|             "opacity_min": .1,
 | |
|             "sync": true
 | |
|           }
 | |
|         },
 | |
|         "size": {
 | |
|           "value": 2.2,
 | |
|           "random": false,
 | |
|           "anim": {
 | |
|             "enable": false,
 | |
|             "speed": .2,
 | |
|             "size_min": 2.44,
 | |
|             "sync": true
 | |
|           }
 | |
|         },
 | |
|         "line_linked": {
 | |
|           "enable": true,
 | |
|           "distance": 240,
 | |
|           "color": "#ffffff",
 | |
|           "opacity": .2,
 | |
|           "width": 3
 | |
|         },
 | |
|         "move": {
 | |
|           "enable": true,
 | |
|           "speed": 1.1,
 | |
|           "direction": "none",
 | |
|           "random": true,
 | |
|           "straight": false,
 | |
|           "out_mode": "bounce",
 | |
|           "bounce": false,
 | |
|           "attract": {
 | |
|             "enable": false,
 | |
|             "rotateX": 600,
 | |
|             "rotateY": 600
 | |
|           }
 | |
|         }
 | |
|       },
 | |
|       "interactivity": {
 | |
|         "detect_on": "canvas",
 | |
|         "events": {
 | |
|           "onhover": {
 | |
|             "enable": true,
 | |
|             "mode": "repulse"
 | |
|           },
 | |
|           "onclick": {
 | |
|             "enable": true,
 | |
|             "mode": "repulse"
 | |
|           },
 | |
|           "resize": true
 | |
|         },
 | |
|         "modes": {
 | |
|           "grab": {
 | |
|             "distance": 400,
 | |
|             "line_linked": {
 | |
|               "opacity": 1
 | |
|             }
 | |
|           },
 | |
|           "bubble": {
 | |
|             "distance": 250,
 | |
|             "size": 0,
 | |
|             "duration": 2,
 | |
|             "opacity": 0,
 | |
|             "speed": 3
 | |
|           },
 | |
|           "repulse": {
 | |
|             "distance": 73.08694910712113,
 | |
|             "duration": 0.4
 | |
|           },
 | |
|           "push": {
 | |
|             "particles_nb": 4
 | |
|           },
 | |
|           "remove": {
 | |
|             "particles_nb": 2
 | |
|           }
 | |
|         }
 | |
|       },
 | |
|       "retina_detect": true
 | |
|     });
 | |
|     var header_background = document.getElementById('header-background');
 | |
|     this.canvas = glfx.canvas();
 | |
|     this.video = header_background.children[0];
 | |
|     this.context = window.pJSDom[0].pJS.canvas.ctx;
 | |
|     this.texture = this.canvas.texture(this.video);
 | |
|     header_background.appendChild(this.canvas);
 | |
|     requestAnimationFrame(this.update.bind(this));
 | |
|   }
 | |
| 
 | |
|   render() {
 | |
|     return (
 | |
|       <div id="header-background">
 | |
|       </div>
 | |
|     );
 | |
|   }
 | |
| }
 | |
| 
 | |
| module.exports = Header;
 |