diff --git a/sites/all/modules/figli/edlp_corpus/assets/dist/scripts/corpus.min.js b/sites/all/modules/figli/edlp_corpus/assets/dist/scripts/corpus.min.js index 69878e3b0..2be142c05 100644 --- a/sites/all/modules/figli/edlp_corpus/assets/dist/scripts/corpus.min.js +++ b/sites/all/modules/figli/edlp_corpus/assets/dist/scripts/corpus.min.js @@ -141,6 +141,8 @@ this.debug = d; this.mass = 8; + this.velocity_threshold = 0.01; + this.moving = true; // define radius regarding entries length switch(true){ case this.entrees.length > 1 & this.entrees.length <= 3: @@ -202,14 +204,33 @@ }; Node.prototype.onUpdate = function(){ - this.checkWallBouncing(); - this.updatePos(); + // if(this.id == 0){ + // console.log(_physics.playing); + // } + if(!this.p.resting()){ + this.checkVelocity(); + this.checkWallBouncing(); + this.updatePos(); + } this.checkMouse(); // if(this.debug) // console.log("Node pos: ", {x:this.x, y:this.y}); this.draw(); }; + Node.prototype.checkVelocity = function(){ + if (Math.abs(this.p.velocity.x) < this.velocity_threshold + && Math.abs(this.p.velocity.y) < this.velocity_threshold){ + // console.log('checkVelocity stoping',this.p.velocity); + this.p.velocity.multiplyScalar(0); + // this.moving = false; + // console.log('checkVelocity particule is resting',this.p.resting()); + } + // else{ + // this.moving = true; + // } + }; + Node.prototype.checkWallBouncing = function(){ if( (this.x < this.wall_limits.left && this.p.velocity.x < 0) @@ -262,35 +283,11 @@ // - >3 entrees : grand 10px // actif entouré de rouge - // var d = this.r*2; // diametre _ctx.beginPath(); + // _ctx.fillStyle = !this.p.resting() ? edlp_vars[this.e_color] : 'rgb(0, 0, 0)'; _ctx.fillStyle = edlp_vars[this.e_color]; _ctx.fillRect(this.x - this.r,this.y - this.r,this.r*2,this.r*2); _ctx.closePath(); - - - // _ctx.beginPath(); - // _ctx.lineWidth = this.g.l*2;//this.hover ? this.g.l*2 : this.g.l; - // var r,d; - // for (let i = 0; i < this.entrees.length; i++) { - // // _ctx.fillStyle = i == 0 ? _entrees_colors[this.entrees[i]] : "#fff"; - // // _ctx.strokeStyle = _entrees_colors[this.entrees[i]]; - // _ctx.fillStyle = i == 0 ? edlp_vars['e_col_'+this.entrees[i]] : "#fff"; - // _ctx.strokeStyle = edlp_vars['e_col_'+this.entrees[i]]; - // r = this.base_radius + (this.g.l+this.g.s)*i; // radius - // d = r*2; // diametre - // if (i == 0) { - // _ctx.fillRect(this.x - r,this.y - r,d,d); - // } - // _ctx.strokeRect(this.x - r,this.y - r,d,d); - // } - // _ctx.closePath(); - - - // _ctx.beginPath(); - // _ctx.fillStyle = this.hover ? "red" : this.debug ? "blue" : "black"; - // _ctx.fillRect(this.x, this.y, this.base_radius, this.base_radius); - // _ctx.closePath(); }; Node.initialized = true; @@ -312,14 +309,13 @@ newVelX1, newVelY1, newVelX2, newVelY2, makeup, angle; // colisions between _particules - for (var n = 0, l = _nodes.length; n < l; n++) { - // do not collide attracacted away nodes - // if(!p_a.attracted) continue; - for (var q = 0; q < n; q++) { + for (var n = 0; n < _nodes.length; n++) { + + for (var q = n+1; q < _nodes.length; q++) { if(q===n) continue; - p_b = _nodes[q].p; - // if(!p_b.attracted) continue; + // if(!_nodes[q].moving) continue; + d = _nodes[n].p.distanceTo(_nodes[q].p); full_rad = _nodes[n].r + _nodes[q].r; @@ -383,11 +379,18 @@ }) .on('click', function(event) { if(event.target.tagName != "A" && event.target.tagName != "INPUT"){ - console.log("Corpus : click"); + // console.log("Corpus : click"); event.preventDefault(); if(_node_hover_id != -1){ - console.log("corpus : click on node", _nodes[_node_hover_id]); - _$canvas.trigger('corpus-cliked-on-node'); + // console.log("corpus : click on node", _nodes[_node_hover_id]); + var event = { + 'type':'corpus-cliked-on-node', + 'target_node':{ + 'nid':_node_hover_id, + 'audio_url':_nodes[_node_hover_id].son_url + }, + }; + _$canvas.trigger(event); }else{ console.log('corpus : click on map'); _$canvas.trigger('corpus-cliked-on-map'); @@ -418,7 +421,6 @@ function initNodePopup(){ _node_pop_up = new NodePopUp(); }; - function NodePopUp(){ this.visible = false; this.node; @@ -431,7 +433,7 @@ if (typeof NodePopUp.initialized == "undefined") { NodePopUp.prototype.setNode = function(n){ - console.log('NodePopUp setNode()'); + // console.log('NodePopUp setNode()'); this.node = n; // positioning NodePopUp regarding node position this.setPositioning(); @@ -472,7 +474,7 @@ }; NodePopUp.prototype.removeNode = function(){ - console.log('NodePopUp removeNode()'); + // console.log('NodePopUp removeNode()'); this.node = false; }; diff --git a/sites/all/modules/figli/edlp_corpus/assets/scripts/corpus.js b/sites/all/modules/figli/edlp_corpus/assets/scripts/corpus.js index 69878e3b0..2be142c05 100644 --- a/sites/all/modules/figli/edlp_corpus/assets/scripts/corpus.js +++ b/sites/all/modules/figli/edlp_corpus/assets/scripts/corpus.js @@ -141,6 +141,8 @@ this.debug = d; this.mass = 8; + this.velocity_threshold = 0.01; + this.moving = true; // define radius regarding entries length switch(true){ case this.entrees.length > 1 & this.entrees.length <= 3: @@ -202,14 +204,33 @@ }; Node.prototype.onUpdate = function(){ - this.checkWallBouncing(); - this.updatePos(); + // if(this.id == 0){ + // console.log(_physics.playing); + // } + if(!this.p.resting()){ + this.checkVelocity(); + this.checkWallBouncing(); + this.updatePos(); + } this.checkMouse(); // if(this.debug) // console.log("Node pos: ", {x:this.x, y:this.y}); this.draw(); }; + Node.prototype.checkVelocity = function(){ + if (Math.abs(this.p.velocity.x) < this.velocity_threshold + && Math.abs(this.p.velocity.y) < this.velocity_threshold){ + // console.log('checkVelocity stoping',this.p.velocity); + this.p.velocity.multiplyScalar(0); + // this.moving = false; + // console.log('checkVelocity particule is resting',this.p.resting()); + } + // else{ + // this.moving = true; + // } + }; + Node.prototype.checkWallBouncing = function(){ if( (this.x < this.wall_limits.left && this.p.velocity.x < 0) @@ -262,35 +283,11 @@ // - >3 entrees : grand 10px // actif entouré de rouge - // var d = this.r*2; // diametre _ctx.beginPath(); + // _ctx.fillStyle = !this.p.resting() ? edlp_vars[this.e_color] : 'rgb(0, 0, 0)'; _ctx.fillStyle = edlp_vars[this.e_color]; _ctx.fillRect(this.x - this.r,this.y - this.r,this.r*2,this.r*2); _ctx.closePath(); - - - // _ctx.beginPath(); - // _ctx.lineWidth = this.g.l*2;//this.hover ? this.g.l*2 : this.g.l; - // var r,d; - // for (let i = 0; i < this.entrees.length; i++) { - // // _ctx.fillStyle = i == 0 ? _entrees_colors[this.entrees[i]] : "#fff"; - // // _ctx.strokeStyle = _entrees_colors[this.entrees[i]]; - // _ctx.fillStyle = i == 0 ? edlp_vars['e_col_'+this.entrees[i]] : "#fff"; - // _ctx.strokeStyle = edlp_vars['e_col_'+this.entrees[i]]; - // r = this.base_radius + (this.g.l+this.g.s)*i; // radius - // d = r*2; // diametre - // if (i == 0) { - // _ctx.fillRect(this.x - r,this.y - r,d,d); - // } - // _ctx.strokeRect(this.x - r,this.y - r,d,d); - // } - // _ctx.closePath(); - - - // _ctx.beginPath(); - // _ctx.fillStyle = this.hover ? "red" : this.debug ? "blue" : "black"; - // _ctx.fillRect(this.x, this.y, this.base_radius, this.base_radius); - // _ctx.closePath(); }; Node.initialized = true; @@ -312,14 +309,13 @@ newVelX1, newVelY1, newVelX2, newVelY2, makeup, angle; // colisions between _particules - for (var n = 0, l = _nodes.length; n < l; n++) { - // do not collide attracacted away nodes - // if(!p_a.attracted) continue; - for (var q = 0; q < n; q++) { + for (var n = 0; n < _nodes.length; n++) { + + for (var q = n+1; q < _nodes.length; q++) { if(q===n) continue; - p_b = _nodes[q].p; - // if(!p_b.attracted) continue; + // if(!_nodes[q].moving) continue; + d = _nodes[n].p.distanceTo(_nodes[q].p); full_rad = _nodes[n].r + _nodes[q].r; @@ -383,11 +379,18 @@ }) .on('click', function(event) { if(event.target.tagName != "A" && event.target.tagName != "INPUT"){ - console.log("Corpus : click"); + // console.log("Corpus : click"); event.preventDefault(); if(_node_hover_id != -1){ - console.log("corpus : click on node", _nodes[_node_hover_id]); - _$canvas.trigger('corpus-cliked-on-node'); + // console.log("corpus : click on node", _nodes[_node_hover_id]); + var event = { + 'type':'corpus-cliked-on-node', + 'target_node':{ + 'nid':_node_hover_id, + 'audio_url':_nodes[_node_hover_id].son_url + }, + }; + _$canvas.trigger(event); }else{ console.log('corpus : click on map'); _$canvas.trigger('corpus-cliked-on-map'); @@ -418,7 +421,6 @@ function initNodePopup(){ _node_pop_up = new NodePopUp(); }; - function NodePopUp(){ this.visible = false; this.node; @@ -431,7 +433,7 @@ if (typeof NodePopUp.initialized == "undefined") { NodePopUp.prototype.setNode = function(n){ - console.log('NodePopUp setNode()'); + // console.log('NodePopUp setNode()'); this.node = n; // positioning NodePopUp regarding node position this.setPositioning(); @@ -472,7 +474,7 @@ }; NodePopUp.prototype.removeNode = function(){ - console.log('NodePopUp removeNode()'); + // console.log('NodePopUp removeNode()'); this.node = false; }; diff --git a/sites/all/modules/figli/edlp_corpus/src/Controller/CorpusController.php b/sites/all/modules/figli/edlp_corpus/src/Controller/CorpusController.php index 559f61d4d..c5f08c390 100644 --- a/sites/all/modules/figli/edlp_corpus/src/Controller/CorpusController.php +++ b/sites/all/modules/figli/edlp_corpus/src/Controller/CorpusController.php @@ -24,7 +24,7 @@ class CorpusController extends ControllerBase { // @see https://chromatichq.com/blog/dependency-injection-drupal-8-plugins // Get a node storage object. - // $file_storage = \Drupal::entityManager()->getStorage('node') + // $file_storage = \Drupal::entityManager()->getStorage('node'); $response = new JsonResponse(); @@ -57,12 +57,12 @@ class CorpusController extends ControllerBase { $field_son_values = $node->get('field_son')->getValue(); $son_fid = count($field_son_values) ? $field_son_values[0]['target_id'] : ""; - // TODO: how to get this fucking file uri, fuck !! - // $son_file = $file_storage->load($fid); - // $son_file = File::load($son_fid); - // $son_uri = $son_file->url(); - // $son_uri = \Drupal\file\Entity\File::load($son_fid);//->getFileUri(); - // $son_uri = file_create_url($node->get('field_son')->entity->getFileUri()); + $son_file = \Drupal\file\Entity\File::load($son_fid); + $son_url = null; + if($son_file){ + $son_uri = $son_file->getFileUri(); + $son_url = file_create_url($son_uri); + } // TODO: favoris marker @@ -71,9 +71,8 @@ class CorpusController extends ControllerBase { "title" => $node->get('title')->getString(), "description" => $description, "entrees" => $entrees, - "son_fid" => $son_fid, - // "son" => $son_file, - // "popup_content" => render($node_builder), // trop lourd + // "son_fid" => $son_fid, + "son_url" => $son_url, ); } diff --git a/sites/all/themes/custom/edlptheme/assets/dist/scripts/main.min.js b/sites/all/themes/custom/edlptheme/assets/dist/scripts/main.min.js index ec4d1373b..1bf7732eb 100644 --- a/sites/all/themes/custom/edlptheme/assets/dist/scripts/main.min.js +++ b/sites/all/themes/custom/edlptheme/assets/dist/scripts/main.min.js @@ -42,6 +42,110 @@ edlp_vars = { if (_$body.is('.path-productions')) { initProductions(); } + initAudioPlayer(); + }; + + + // _ _ _ + // /_\ _ _ __| (_)___ + // / _ \ || / _` | / _ \ + // /_/ \_\_,_\__,_|_\___/ + // + // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement + // https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/samples/gg589528%28v%3dvs.85%29 + // https://www.binarytides.com/using-html5-audio-element-javascript/ + // + function initAudioPlayer(){ + _audio_player = new AudioPlayer(); + }; + function AudioPlayer(){ + var that = this; + this.fid; + this.audio = new Audio(); + // audio events + this.audio_events = ["loadedmetadata","progress","canplay","timeupdate","ended"]; + + // UI dom objects + this.$container = $('