Browse Source

corpus carre vide et plus petit
hover audio link -> node_popup on map
index sort title
corpus map : white safety zone arround squares
aside squares not collisioning
square faded not interactive (article filtre)
node_popup show chutier icon only if action not add
fade not active entries in entrees block
closing notice|index doesn't close entree on block
and many little things

Bachir Soussi Chiadmi 7 years ago
parent
commit
a3a4e3922c
26 changed files with 1711 additions and 309 deletions
  1. 9 0
      sites/all/modules/figli/edlp_corpus/assets/dist/scripts/corpus.min.js
  2. 1152 37
      sites/all/modules/figli/edlp_corpus/assets/dist/scripts/physics.min.js
  3. 71 1
      sites/all/modules/figli/edlp_corpus/assets/dist/styles/corpus.min.css
  4. 84 29
      sites/all/modules/figli/edlp_corpus/assets/scripts/corpus.js
  5. 1 1
      sites/all/modules/figli/edlp_corpus/assets/styles/corpus.scss
  6. 1 0
      sites/all/modules/figli/edlp_corpus/edlp_corpus.module
  7. 108 3
      sites/all/modules/figli/edlp_search/assets/dist/scripts/edlp_search.min.js
  8. 1 1
      sites/all/modules/figli/edlp_studio/assets/dist/scripts/edlp_studio.min.js
  9. 19 1
      sites/all/themes/custom/edlptheme/assets/dist/scripts/history.min.js
  10. 1 33
      sites/all/themes/custom/edlptheme/assets/dist/scripts/main.min.js
  11. 0 0
      sites/all/themes/custom/edlptheme/assets/dist/styles/app.min.css
  12. 77 32
      sites/all/themes/custom/edlptheme/assets/scripts/main.js
  13. 173 157
      sites/all/themes/custom/edlptheme/assets/styles/app.scss
  14. 1 1
      sites/all/themes/custom/edlptheme/assets/styles/base/_layout.scss
  15. 1 1
      sites/all/themes/custom/edlptheme/edlptheme.theme
  16. 2 2
      sites/all/themes/custom/edlptheme/templates/content/edlp-home.html.twig
  17. 1 1
      sites/default/config/sync/linkit.linkit_profile.collection.yml
  18. 1 1
      sites/default/config/sync/views.view.archive.yml
  19. 1 1
      sites/default/config/sync/views.view.content.yml
  20. 1 1
      sites/default/config/sync/views.view.content_translations.yml
  21. 1 1
      sites/default/config/sync/views.view.frontpage.yml
  22. 1 1
      sites/default/config/sync/views.view.glossary.yml
  23. 1 1
      sites/default/config/sync/views.view.maillog_overview.yml
  24. 1 1
      sites/default/config/sync/views.view.redirect.yml
  25. 1 1
      sites/default/config/sync/views.view.taxonomy_term.yml
  26. 1 1
      sites/default/config/sync/views.view.user_admin_people.yml

File diff suppressed because it is too large
+ 9 - 0
sites/all/modules/figli/edlp_corpus/assets/dist/scripts/corpus.min.js


+ 1152 - 37
sites/all/modules/figli/edlp_corpus/assets/dist/scripts/physics.min.js

@@ -1,38 +1,1153 @@
+/**
+ * Physics
+ * A requirified port of Traer Physics from Processing to JavaScript.
+ * Copyright (C) 2012 jonobr1
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
+var _      = require('./common')
+,   Vector = require('./vector')
+;
 
 
-require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){var _=require('./common'),Vector=require('./vector');function Attraction(a,b,k,d){this.a=a;this.b=b;this.constant=k;this.on=true;this.distanceMin=d;this.distanceMinSquared=d*d;}
-_.extend(Attraction.prototype,{update:function(){var a=this.a,b=this.b;if(!this.on||(a.fixed&&b.fixed)){return;}
-var a2bx=a.position.x-b.position.x;var a2by=a.position.y-b.position.y;var a2b=new Vector().sub(a.position,b.position);var a2bdistanceSquared=Math.max(a2b.lengthSquared(),this.distanceMinSquared);var force=(this.constant*a.mass*b.mass)/a2bdistanceSquared;var length=Math.sqrt(a2bdistanceSquared);if(force===0||length===0){a2b.clear();}else{a2b.divideScalar(length).multiplyScalar(force);}
-if(!a.fixed){a.force.subSelf(a2b);}
-if(!b.fixed){b.force.addSelf(a2b);}
-return this;},resting:function(){var a=this.a;var b=this.b;var l=this.distanceMin;return!this.on||(a.fixed&&b.fixed)||(a.fixed&&b.position.distanceTo(a.position)<=l&&b.resting())||(b.fixed&&a.position.distanceTo(b.position)<=l&&a.resting());}});module.exports=Attraction;},{"./common":8,"./vector":12}],2:[function(require,module,exports){var _=require('./common'),Vector=require('./vector');function Integrator(s){this.s=s;this.originalPositions=[];this.originalVelocities=[];this.k1Forces=[];this.k1Velocities=[];this.k2Forces=[];this.k2Velocities=[];this.k3Forces=[];this.k3Velocities=[];this.k4Forces=[];this.k4Velocities=[];}
-_.extend(Integrator.prototype,{allocateParticles:function(){while(this.s.particles.length>this.originalPositions.length){this.originalPositions.push(new Vector());this.originalVelocities.push(new Vector());this.k1Forces.push(new Vector());this.k1Velocities.push(new Vector());this.k2Forces.push(new Vector());this.k2Velocities.push(new Vector());this.k3Forces.push(new Vector());this.k3Velocities.push(new Vector());this.k4Forces.push(new Vector());this.k4Velocities.push(new Vector());}
-return this;},step:function(dt){var s=this.s;var p,x,y;this.allocateParticles();_.each(s.particles,function(p,i){if(!p.fixed){this.originalPositions[i].copy(p.position);this.originalVelocities[i].copy(p.velocity);}
-p.force.clear();},this);s.applyForces();_.each(s.particles,function(p,i){if(!p.fixed){this.k1Forces[i].copy(p.force);this.k1Velocities[i].copy(p.velocity);}
-p.force.clear();},this);_.each(s.particles,function(p,i){if(!p.fixed){var op=this.originalPositions[i];var k1v=this.k1Velocities[i];x=op.x+k1v.x*0.5*dt;y=op.y+k1v.y*0.5*dt;p.position.set(x,y);var ov=this.originalVelocities[i];var k1f=this.k1Forces[i];x=ov.x+k1f.x*0.5*dt/p.mass;y=ov.y+k1f.y*0.5*dt/p.mass;p.velocity.set(x,y);}},this);s.applyForces();_.each(s.particles,function(p,i){if(!p.fixed){this.k2Forces[i].copy(p.force);this.k2Velocities[i].copy(p.velocity);}
-p.force.clear();},this);_.each(s.particles,function(p,i){if(!p.fixed){var op=this.originalPositions[i];var k2v=this.k2Velocities[i];p.position.set(op.x+k2v.x*0.5*dt,op.y+k2v.y*0.5*dt);var ov=this.originalVelocities[i];var k2f=this.k2Forces[i];p.velocity.set(ov.x+k2f.x*0.5*dt/p.mass,ov.y+k2f.y*0.5*dt/p.mass);}},this);s.applyForces();_.each(s.particles,function(p,i){if(!p.fixed){this.k3Forces[i].copy(p.force);this.k3Velocities[i].copy(p.velocity);}
-p.force.clear();},this);_.each(s.particles,function(p,i){if(!p.fixed){var op=this.originalPositions[i];var k3v=this.k3Velocities[i];p.position.set(op.x+k3v.x*dt,op.y+k3v.y*dt)
-var ov=this.originalVelocities[i];var k3f=this.k3Forces[i];p.velocity.set(ov.x+k3f.x*dt/p.mass,ov.y+k3f.y*dt/p.mass);}},this);s.applyForces();_.each(s.particles,function(p,i){if(!p.fixed){this.k4Forces[i].copy(p.force);this.k4Velocities[i].copy(p.velocity);}},this);_.each(s.particles,function(p,i){p.age+=dt;if(!p.fixed){var op=this.originalPositions[i];var k1v=this.k1Velocities[i];var k2v=this.k2Velocities[i];var k3v=this.k3Velocities[i];var k4v=this.k4Velocities[i];var x=op.x+dt/6.0*(k1v.x+2.0*k2v.x+2.0*k3v.x+k4v.x);var y=op.y+dt/6.0*(k1v.y+2.0*k2v.y+2.0*k3v.y+k4v.y);p.position.set(x,y);var ov=this.originalVelocities[i];var k1f=this.k1Forces[i];var k2f=this.k2Forces[i];var k3f=this.k3Forces[i];var k4f=this.k4Forces[i];x=ov.x+dt/(6.0*p.mass)*(k1f.x+2.0*k2f.x+2.0*k3f.x+k4f.x);y=ov.y+dt/(6.0*p.mass)*(k1f.y+2.0*k2f.y+2.0*k3f.y+k4f.y);p.velocity.set(x,y);}},this);return this;}});module.exports=Integrator;},{"./common":8,"./vector":12}],3:[function(require,module,exports){var _=require('./common'),Vector=require('./vector');function Particle(mass){this.position=new Vector();this.velocity=new Vector();this.force=new Vector();this.mass=mass;this.fixed=false;this.age=0;this.dead=false;}
-_.extend(Particle.prototype,{distanceTo:function(p){return this.position.distanceTo(p.position);},makeFixed:function(){this.fixed=true;this.velocity.clear();return this;},reset:function(){this.age=0;this.dead=false;this.position.clear();this.velocity.clear();this.force.clear();this.mass=1.0;return this;},resting:function(){return this.fixed||this.velocity.isZero()&&this.force.isZero();}});module.exports=Particle;},{"./common":8,"./vector":12}],4:[function(require,module,exports){var _=require('./common'),Vector=require('./Vector'),Particle=require('./Particle'),Spring=require('./Spring'),Attraction=require('./Attraction'),Integrator=require('./Integrator');function ParticleSystem(){this.__equilibriumCriteria={particles:true,springs:true,attractions:true};this.__equilibrium=false;this.__optimized=false;this.particles=[];this.springs=[];this.attractions=[];this.forces=[];this.integrator=new Integrator(this);this.hasDeadParticles=false;var args=arguments.length;if(args===1){this.gravity=new Vector(0,arguments[0]);this.drag=ParticleSystem.DEFAULT_DRAG;}else if(args===2){this.gravity=new Vector(0,arguments[0]);this.drag=arguments[1];}else if(args===3){this.gravity=new Vector(arguments[0],arguments[1]);this.drag=arguments[3];}else{this.gravity=new Vector(0,ParticleSystem.DEFAULT_GRAVITY);this.drag=ParticleSystem.DEFAULT_DRAG;}}
-_.extend(ParticleSystem,{DEFAULT_GRAVITY:0,DEFAULT_DRAG:0.001,Attraction:Attraction,Integrator:Integrator,Particle:Particle,Spring:Spring,Vector:Vector});_.extend(ParticleSystem.prototype,{optimize:function(b){this.__optimized=!!b;return this;},setGravity:function(x,y){this.gravity.set(x,y);return this;},setEquilibriumCriteria:function(particles,springs,attractions){this.__equilibriumCriteria.particles=!!particles;this.__equilibriumCriteria.springs=!!springs;this.__equilibriumCriteria.attractions=!!attractions;},tick:function(){this.integrator.step(arguments.length===0?1:arguments[0]);if(this.__optimized){this.__equilibrium=!this.needsUpdate();}
-return this;},needsUpdate:function(){var i=0;if(this.__equilibriumCriteria.particles){for(i=0,l=this.particles.length;i<l;i++){if(!this.particles[i].resting()){return true;}}}
-if(this.__equilibriumCriteria.springs){for(i=0,l=this.springs.length;i<l;i++){if(!this.springs[i].resting()){return true;}}}
-if(this.__equilibriumCriteria.attractions){for(i=0,l=this.attractions.length;i<l;i++){if(!this.attractions[i].resting()){return true;}}}
-return false;},addParticle:function(p){this.particles.push(p);return this;},addSpring:function(s){this.springs.push(s);return this;},addAttraction:function(a){this.attractions.push(a);return this;},makeParticle:function(m,x,y){var mass=_.isNumber(m)?m:1.0;var x=x||0;var y=y||0;var p=new Particle(mass);p.position.set(x,y);this.addParticle(p);return p;},makeSpring:function(a,b,k,d,l){var s=new Spring(a,b,k,d,l);this.addSpring(s);return s;},makeAttraction:function(a,b,k,d){var a=new Attraction(a,b,k,d);this.addAttraction(a);return a;},clear:function(){this.particles.length=0;this.springs.length=0;this.attractions.length=0;},applyForces:function(){if(!this.gravity.isZero()){_.each(this.particles,function(p){p.force.addSelf(this.gravity);},this);}
-var t=new Vector();_.each(this.particles,function(p){t.set(p.velocity.x*-1*this.drag,p.velocity.y*-1*this.drag);p.force.addSelf(t);},this);_.each(this.springs,function(s){s.update();});_.each(this.attractions,function(a){a.update();});_.each(this.forces,function(f){f.update();});return this;},clearForces:function(){_.each(this.particles,function(p){p.clear();});return this;}});module.exports=ParticleSystem;},{"./Attraction":1,"./Integrator":2,"./Particle":3,"./Spring":6,"./Vector":7,"./common":8}],5:[function(require,module,exports){var _=require('./common'),raf=require('./requestAnimationFrame'),ParticleSystem=require('./ParticleSystem');var updates=[];function Physics(){var _this=this;this.playing=false;ParticleSystem.apply(this,arguments);this.animations=[];this.equilibriumCallbacks=[];update.call(this);}
-_.extend(Physics,ParticleSystem,{superclass:ParticleSystem});_.extend(Physics.prototype,ParticleSystem.prototype,{play:function(){if(this.playing){return this;}
-this.playing=true;this.__equilibrium=false;update.call(this);return this;},pause:function(){this.playing=false;return this;},toggle:function(){if(this.playing){this.pause();}else{this.play();}
-return this;},onUpdate:function(func){if(_.indexOf(this.animations,func)>=0||!_.isFunction(func)){return this;}
-this.animations.push(func);return this;},onEquilibrium:function(func){if(_.indexOf(this.equilibriumCallbacks,func)>=0||!_.isFunction(func)){return this;}
-this.equilibriumCallbacks.push(func);return this;},update:function(){if(!this.__equilibrium){return this;}
-this.__equilibrium=false;if(this.playing){update.call(this);}
-return this;}});function update(){var _this=this;this.tick();_.each(this.animations,function(a){a();});if((this.__optimized&&!this.__equilibrium||!this.__optimized)&&this.playing){raf(function(){update.call(_this);});}
-if(this.__optimized&&this.__equilibrium){_.each(this.equilibriumCallbacks,function(a){a();});}}
-module.exports=Physics;},{"./ParticleSystem":4,"./common":8,"./requestAnimationFrame":11}],6:[function(require,module,exports){var _=require('./common'),Vector=require('./vector');function Spring(a,b,k,d,l){this.constant=k;this.damping=d;this.length=l;this.a=a;this.b=b;this.on=true;}
-_.extend(Spring.prototype,{currentLength:function(){return this.a.position.distanceTo(this.b.position);},update:function(){var a=this.a;var b=this.b;if(!(this.on&&(!a.fixed||!b.fixed)))return this;var a2b=new Vector().sub(a.position,b.position);var d=a2b.length();if(d===0){a2b.clear();}else{a2b.divideScalar(d);}
-var fspring=-1*(d-this.length)*this.constant;var va2b=new Vector().sub(a.velocity,b.velocity);var fdamping=-1*this.damping*va2b.dot(a2b);var fr=fspring+fdamping;a2b.multiplyScalar(fr);if(!a.fixed){a.force.addSelf(a2b);}
-if(!b.fixed){b.force.subSelf(a2b);}
-return this;},resting:function(){var a=this.a;var b=this.b;var l=this.length;return!this.on||(a.fixed&&b.fixed)||(a.fixed&&(l===0?b.position.equals(a.position):b.position.distanceTo(a.position)<=l)&&b.resting())||(b.fixed&&(l===0?a.position.equals(b.position):a.position.distanceTo(b.position)<=l)&&a.resting());}});module.exports=Spring;},{"./common":8,"./vector":12}],7:[function(require,module,exports){var _=require('./common');function Vector(x,y){this.x=x||0;this.y=y||0;}
-_.extend(Vector.prototype,{set:function(x,y){this.x=x;this.y=y;return this;},copy:function(v){this.x=v.x;this.y=v.y;return this;},clear:function(){this.x=0;this.y=0;return this;},clone:function(){return new Vector(this.x,this.y);},add:function(v1,v2){this.x=v1.x+v2.x;this.y=v1.y+v2.y;return this;},addSelf:function(v){this.x+=v.x;this.y+=v.y;return this;},sub:function(v1,v2){this.x=v1.x-v2.x;this.y=v1.y-v2.y;return this;},subSelf:function(v){this.x-=v.x;this.y-=v.y;return this;},multiplySelf:function(v){this.x*=v.x;this.y*=v.y;return this;},multiplyScalar:function(s){this.x*=s;this.y*=s;return this;},multiplyScalarXY:function(sx,sy){this.x*=sx;this.y*=sy;return this;},divideScalar:function(s){if(s){this.x/=s;this.y/=s;}else{this.set(0,0);}
-return this;},negate:function(){return this.multiplyScalar(-1);},dot:function(v){return this.x*v.x+this.y*v.y;},lengthSquared:function(){return this.x*this.x+this.y*this.y;},length:function(){return Math.sqrt(this.lengthSquared());},normalize:function(){return this.divideScalar(this.length());},distanceTo:function(v){return Math.sqrt(this.distanceToSquared(v));},distanceToSquared:function(v){var dx=this.x-v.x,dy=this.y-v.y;return dx*dx+dy*dy;},setLength:function(l){return this.normalize().multiplyScalar(l);},equals:function(v){return(this.distanceTo(v)<0.0001);},lerp:function(v,t){var x=(v.x-this.x)*t+this.x;var y=(v.y-this.y)*t+this.y;return this.set(x,y);},isZero:function(){return(this.length()<0.0001);}});module.exports=Vector;},{"./common":8}],8:[function(require,module,exports){var breaker={};var ArrayProto=Array.prototype;var ObjProto=Object.prototype;var hasOwnProperty=ObjProto.hasOwnProperty;var slice=ArrayProto.slice;var nativeForEach=ArrayProto.forEach;var nativeIndexOf=ArrayProto.indexOf;var toString=ObjProto.toString;var has=function(obj,key){return hasOwnProperty.call(obj,key);};var each=function(obj,iterator,context){if(obj==null)return;if(nativeForEach&&obj.forEach===nativeForEach){obj.forEach(iterator,context);}else if(obj.length===+obj.length){for(var i=0,l=obj.length;i<l;i++){if(i in obj&&iterator.call(context,obj[i],i,obj)===breaker)return;}}else{for(var key in obj){if(_.has(obj,key)){if(iterator.call(context,obj[key],key,obj)===breaker)return;}}}};var identity=function(value){return value;};var sortedIndex=function(array,obj,iterator){iterator||(iterator=identity);var low=0,high=array.length;while(low<high){var mid=(low+high)>>1;iterator(array[mid])<iterator(obj)?low=mid+1:high=mid;}
-return low;};module.exports={has:has,each:each,extend:function(obj){each(slice.call(arguments,1),function(source){for(var prop in source){obj[prop]=source[prop];}});return obj;},indexOf:function(array,item,isSorted){if(array==null)return-1;var i,l;if(isSorted){i=sortedIndex(array,item);return array[i]===item?i:-1;}
-if(nativeIndexOf&&array.indexOf===nativeIndexOf)return array.indexOf(item);for(i=0,l=array.length;i<l;i++)if(i in array&&array[i]===item)return i;return-1;},sortedIndex:sortedIndex,identity:identity,isNumber:function(obj){return toString.call(obj)=='[object Number]';},isFunction:function(obj){return toString.call(obj)=='[object Function]'||typeof obj=='function';},isUndefined:function(obj){return obj===void 0;},isNull:function(obj){return obj===null;}};},{}],"H99CHA":[function(require,module,exports){var root=(function(){return this;})(),previousShortcut=root.Physics;module.exports=root.Physics=require('./Physics');},{"./Physics":5}],"physics":[function(require,module,exports){module.exports=require('H99CHA');},{}],11:[function(require,module,exports){module.exports=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(callback){window.setTimeout(callback,1000/60);};},{}],12:[function(require,module,exports){module.exports=require(7)},{"./common":8}]},{},["H99CHA"])
+  function Attraction(a, b, k, d) {
+
+    this.a = a;
+    this.b = b;
+    this.constant = k;
+    this.on = true;
+    this.distanceMin = d;
+    this.distanceMinSquared = d * d;
+
+  }
+
+  _.extend(Attraction.prototype, {
+
+    update: function() {
+
+     var a = this.a, b = this.b;
+     if (!this.on || (a.fixed && b.fixed)) {
+       return;
+     }
+
+     var a2bx = a.position.x - b.position.x;
+     var a2by = a.position.y - b.position.y;
+
+     var a2b = new Vector().sub(a.position, b.position);
+
+     var a2bdistanceSquared = Math.max(a2b.lengthSquared(), this.distanceMinSquared);
+
+     var force = (this.constant * a.mass * b.mass) / a2bdistanceSquared;
+
+     var length = Math.sqrt(a2bdistanceSquared);
+
+     if (force === 0 || length === 0) {
+       a2b.clear();
+     } else {
+       a2b.divideScalar(length).multiplyScalar(force);
+     }
+
+     if (!a.fixed) {
+       a.force.subSelf(a2b);
+     }
+     if (!b.fixed) {
+       b.force.addSelf(a2b);
+     }
+
+     return this;
+
+    },
+
+    /**
+     * Returns a boolean describing whether the spring is resting or not.
+     * Convenient for knowing whether or not the spring needs another update
+     * tick.
+     *
+     * TODO: Test
+     */
+    resting: function() {
+
+      var a = this.a;
+      var b = this.b;
+      var l = this.distanceMin;
+
+      return !this.on || (a.fixed && b.fixed)
+        || (a.fixed && b.position.distanceTo(a.position) <= l && b.resting())
+        || (b.fixed && a.position.distanceTo(b.position) <= l && a.resting());
+
+    }
+
+  });
+
+  module.exports = Attraction;
+
+},{"./common":8,"./vector":12}],2:[function(require,module,exports){
+var _      = require('./common')
+,   Vector = require('./vector')
+;
+
+  /**
+   * Runge Kutta Integrator
+   * http://en.wikipedia.org/wiki/Runge%E2%80%93Kutta_methods
+   *
+   * @class
+   */
+  function Integrator(s) {
+    this.s = s;
+    this.originalPositions = [];
+    this.originalVelocities = [];
+    this.k1Forces = [];
+    this.k1Velocities = [];
+    this.k2Forces = [];
+    this.k2Velocities = [];
+    this.k3Forces = [];
+    this.k3Velocities = [];
+    this.k4Forces = [];
+    this.k4Velocities = [];
+  }
+
+  _.extend(Integrator.prototype, {
+
+    allocateParticles: function() {
+
+      while (this.s.particles.length > this.originalPositions.length) {
+        this.originalPositions.push(new Vector());
+        this.originalVelocities.push(new Vector());
+        this.k1Forces.push(new Vector());
+        this.k1Velocities.push(new Vector());
+        this.k2Forces.push(new Vector());
+        this.k2Velocities.push(new Vector());
+        this.k3Forces.push(new Vector());
+        this.k3Velocities.push(new Vector());
+        this.k4Forces.push(new Vector());
+        this.k4Velocities.push(new Vector());
+      }
+
+      return this;
+
+    },
+
+    step: function(dt) {
+
+      var s = this.s;
+      var p, x, y;
+
+      this.allocateParticles();
+
+      _.each(s.particles, function(p, i) {
+        if (!p.fixed) {
+          this.originalPositions[i].copy(p.position);
+          this.originalVelocities[i].copy(p.velocity);
+        }
+        p.force.clear();
+      }, this);
+
+      // K1
+
+      s.applyForces();
+
+      _.each(s.particles, function(p, i) {
+        if (!p.fixed) {
+          this.k1Forces[i].copy(p.force);
+          this.k1Velocities[i].copy(p.velocity);
+        }
+        p.force.clear();
+      }, this);
+
+      // K2
+
+      _.each(s.particles, function(p, i) {
+        if (!p.fixed) {
+
+          var op = this.originalPositions[i];
+          var k1v = this.k1Velocities[i];
+          x = op.x + k1v.x * 0.5 * dt;
+          y = op.y + k1v.y * 0.5 * dt;
+          p.position.set(x, y);
+
+          var ov = this.originalVelocities[i];
+          var k1f = this.k1Forces[i];
+          x = ov.x + k1f.x * 0.5 * dt / p.mass;
+          y = ov.y + k1f.y * 0.5 * dt / p.mass;
+          p.velocity.set(x, y);
+
+        }
+      }, this);
+
+      s.applyForces();
+
+      _.each(s.particles, function(p, i) {
+        if (!p.fixed) {
+          this.k2Forces[i].copy(p.force);
+          this.k2Velocities[i].copy(p.velocity);
+        }
+        p.force.clear();
+      }, this);
+
+      // K3
+
+      _.each(s.particles, function(p, i) {
+        if (!p.fixed) {
+
+          var op = this.originalPositions[i];
+          var k2v = this.k2Velocities[i];
+          p.position.set(op.x + k2v.x * 0.5 * dt, op.y + k2v.y * 0.5 * dt);
+
+          var ov = this.originalVelocities[i];
+          var k2f = this.k2Forces[i];
+          p.velocity.set(ov.x + k2f.x * 0.5 * dt / p.mass, ov.y + k2f.y * 0.5 * dt / p.mass);
+        }
+      }, this);
+
+      s.applyForces();
+
+      _.each(s.particles, function(p, i) {
+        if (!p.fixed) {
+          this.k3Forces[i].copy(p.force);
+          this.k3Velocities[i].copy(p.velocity);
+        }
+        p.force.clear();
+      }, this);
+
+      // K4
+
+      _.each(s.particles, function(p, i) {
+        if (!p.fixed) {
+
+          var op = this.originalPositions[i];
+          var k3v = this.k3Velocities[i];
+          p.position.set(op.x + k3v.x * dt, op.y + k3v.y * dt)
+
+          var ov = this.originalVelocities[i];
+          var k3f = this.k3Forces[i];
+          p.velocity.set(ov.x + k3f.x * dt / p.mass, ov.y + k3f.y * dt / p.mass);
+        }
+      }, this);
+
+      s.applyForces();
+
+      _.each(s.particles, function(p, i) {
+        if (!p.fixed) {
+          this.k4Forces[i].copy(p.force);
+          this.k4Velocities[i].copy(p.velocity);
+        }
+      }, this);
+
+      // TOTAL
+
+      _.each(s.particles, function(p, i) {
+
+        p.age += dt;
+
+        if (!p.fixed) {
+
+          var op = this.originalPositions[i];
+          var k1v = this.k1Velocities[i];
+          var k2v = this.k2Velocities[i];
+          var k3v = this.k3Velocities[i];
+          var k4v = this.k4Velocities[i];
+
+          var x = op.x + dt / 6.0 * (k1v.x + 2.0 * k2v.x + 2.0 * k3v.x + k4v.x);
+          var y = op.y + dt / 6.0 * (k1v.y + 2.0 * k2v.y + 2.0 * k3v.y + k4v.y);
+
+          p.position.set(x, y);
+
+          var ov = this.originalVelocities[i];
+          var k1f = this.k1Forces[i];
+          var k2f = this.k2Forces[i];
+          var k3f = this.k3Forces[i];
+          var k4f = this.k4Forces[i];
+
+          x = ov.x + dt / (6.0 * p.mass) * (k1f.x + 2.0 * k2f.x + 2.0 * k3f.x + k4f.x);
+          y = ov.y + dt / (6.0 * p.mass) * (k1f.y + 2.0 * k2f.y + 2.0 * k3f.y + k4f.y);
+
+          p.velocity.set(x, y);
+
+        }
+
+      }, this);
+
+      return this;
+
+    }
+
+  });
+
+  module.exports = Integrator;
+
+},{"./common":8,"./vector":12}],3:[function(require,module,exports){
+var _      = require('./common')
+,   Vector = require('./vector')
+;
+
+  function Particle(mass) {
+
+    this.position = new Vector();
+    this.velocity = new Vector();
+    this.force = new Vector();
+    this.mass = mass;
+    this.fixed = false;
+    this.age = 0;
+    this.dead = false;
+
+  }
+
+  _.extend(Particle.prototype, {
+
+    /**
+     * Get the distance between two particles.
+     */
+    distanceTo: function(p) {
+      return this.position.distanceTo(p.position);
+    },
+
+    /**
+     * Make the particle fixed in 2D space.
+     */
+    makeFixed: function() {
+      this.fixed = true;
+      this.velocity.clear();
+      return this;
+    },
+
+    /**
+     * Reset a particle.
+     */
+    reset: function() {
+
+      this.age = 0;
+      this.dead = false;
+      this.position.clear();
+      this.velocity.clear();
+      this.force.clear();
+      this.mass = 1.0;
+
+      return this;
+    },
+
+    /**
+     * Returns a boolean describing whether the particle is in movement.
+     */
+    resting: function() {
+      return this.fixed || this.velocity.isZero() && this.force.isZero();
+    }
+
+  });
+
+  module.exports = Particle;
+
+},{"./common":8,"./vector":12}],4:[function(require,module,exports){
+var _          = require('./common')
+,   Vector     = require('./Vector')
+,   Particle   = require('./Particle')
+,   Spring     = require('./Spring')
+,   Attraction = require('./Attraction')
+,   Integrator = require('./Integrator')
+;
+
+  /**
+   * traer.js
+   * A particle-based physics engine ported from Jeff Traer's Processing
+   * library to JavaScript. This version is intended for use with the
+   * HTML5 canvas element. It is dependent on Three.js' Vector2 class,
+   * but can be overridden with any Vector2 class with the methods included.
+   *
+   * @author Jeffrey Traer Bernstein <jeff TA traer TOD cc> (original Java library)
+   * @author Adam Saponara <saponara TA gmail TOD com> (JavaScript port)
+   * @author Jono Brandel <http://jonobr1.com/> (requirified/optimization port)
+   * @author David Schoonover <http://less.ly> (Node/CommonJS/Browserify port)
+   *
+   * @version 0.3
+   * @date March 25, 2012
+   */
+
+  /**
+   * The whole kit and kaboodle.
+   *
+   * @class
+   */
+  function ParticleSystem() {
+
+    this.__equilibriumCriteria = { particles: true, springs: true, attractions: true };
+    this.__equilibrium = false; // are we at equilibrium?
+    this.__optimized = false;
+
+    this.particles = [];
+    this.springs = [];
+    this.attractions = [];
+    this.forces = [];
+    this.integrator = new Integrator(this);
+    this.hasDeadParticles = false;
+
+    var args = arguments.length;
+
+    if (args === 1) {
+      this.gravity = new Vector(0, arguments[0]);
+      this.drag = ParticleSystem.DEFAULT_DRAG;
+    } else if (args === 2) {
+      this.gravity = new Vector(0, arguments[0]);
+      this.drag = arguments[1];
+    } else if (args === 3) {
+      this.gravity = new Vector(arguments[0], arguments[1]);
+      this.drag = arguments[3];
+    } else {
+      this.gravity = new Vector(0, ParticleSystem.DEFAULT_GRAVITY);
+      this.drag = ParticleSystem.DEFAULT_DRAG;
+    }
+
+  }
+
+  _.extend(ParticleSystem, {
+
+    DEFAULT_GRAVITY: 0,
+
+    DEFAULT_DRAG: 0.001,
+
+    Attraction: Attraction,
+
+    Integrator: Integrator,
+
+    Particle: Particle,
+
+    Spring: Spring,
+
+    Vector: Vector
+
+  });
+
+  _.extend(ParticleSystem.prototype, {
+
+    /**
+     * Set whether to optimize the simulation. This enables the check of whether
+     * particles are moving.
+     */
+    optimize: function(b) {
+      this.__optimized = !!b;
+      return this;
+    },
+
+    /**
+     * Set the gravity of the ParticleSystem.
+     */
+    setGravity: function(x, y) {
+      this.gravity.set(x, y);
+      return this;
+    },
+
+    /**
+    * Sets the criteria for equilibrium
+    */
+    setEquilibriumCriteria: function(particles, springs, attractions) {
+      this.__equilibriumCriteria.particles = !!particles;
+      this.__equilibriumCriteria.springs = !!springs;
+      this.__equilibriumCriteria.attractions = !!attractions;
+    },
+
+    /**
+     * Update the integrator
+     */
+    tick: function() {
+      this.integrator.step(arguments.length === 0 ? 1 : arguments[0]);
+      if (this.__optimized) {
+        this.__equilibrium = !this.needsUpdate();
+      }
+      return this;
+    },
+
+    /**
+     * Checks all springs and attractions to see if the contained particles are
+     * inert / resting and returns a boolean.
+     */
+    needsUpdate: function() {
+      var i = 0;
+
+      if(this.__equilibriumCriteria.particles) {
+        for (i = 0, l = this.particles.length; i < l; i++) {
+          if (!this.particles[i].resting()) {
+            return true;
+          }
+        }
+      }
+
+      if(this.__equilibriumCriteria.springs) {
+        for (i = 0, l = this.springs.length; i < l; i++) {
+          if (!this.springs[i].resting()) {
+            return true;
+          }
+        }
+      }
+
+      if(this.__equilibriumCriteria.attractions) {
+        for (i = 0, l = this.attractions.length; i < l; i++) {
+          if (!this.attractions[i].resting()) {
+            return true;
+          }
+        }
+      }
+
+      return false;
+
+    },
+
+    /**
+     * Add a particle to the ParticleSystem.
+     */
+    addParticle: function(p) {
+
+      this.particles.push(p);
+      return this;
+
+    },
+
+    /**
+     * Add a spring to the ParticleSystem.
+     */
+    addSpring: function(s) {
+
+      this.springs.push(s);
+      return this;
+
+    },
+
+    /**
+     * Add an attraction to the ParticleSystem.
+     */
+    addAttraction: function(a) {
+
+      this.attractions.push(a);
+      return this;
+
+    },
+
+    /**
+     * Makes and then adds Particle to ParticleSystem.
+     */
+    makeParticle: function(m, x, y) {
+
+      var mass = _.isNumber(m) ? m : 1.0;
+      var x = x || 0;
+      var y = y || 0;
+
+      var p = new Particle(mass);
+      p.position.set(x, y);
+      this.addParticle(p);
+      return p;
+
+    },
+
+    /**
+     * Makes and then adds Spring to ParticleSystem.
+     */
+    makeSpring: function(a, b, k, d, l) {
+
+      var s = new Spring(a, b, k, d, l);
+      this.addSpring(s);
+      return s;
+
+    },
+
+    /**
+     * Makes and then adds Attraction to ParticleSystem.
+     */
+    makeAttraction: function(a, b, k, d) {
+
+      var a = new Attraction(a, b, k, d);
+      this.addAttraction(a);
+      return a;
+
+    },
+
+    /**
+     * Wipe the ParticleSystem clean.
+     */
+    clear: function() {
+
+      this.particles.length = 0;
+      this.springs.length = 0;
+      this.attractions.length = 0;
+
+    },
+
+    /**
+     * Calculate and apply forces.
+     */
+    applyForces: function() {
+
+      if (!this.gravity.isZero()) {
+        _.each(this.particles, function(p) {
+          p.force.addSelf(this.gravity);
+        }, this);
+      }
+
+      var t = new Vector();
+
+      _.each(this.particles, function(p) {
+        t.set(p.velocity.x * -1 * this.drag, p.velocity.y * -1 * this.drag);
+        p.force.addSelf(t);
+      }, this);
+
+      _.each(this.springs, function(s) {
+        s.update();
+      });
+
+      _.each(this.attractions, function(a) {
+        a.update();
+      });
+
+      _.each(this.forces, function(f) {
+        f.update();
+      });
+
+      return this;
+
+    },
+
+    /**
+     * Clear all particles in the system.
+     */
+    clearForces: function() {
+      _.each(this.particles, function(p) {
+        p.clear();
+      });
+      return this;
+    }
+
+  });
+
+  module.exports = ParticleSystem;
+
+},{"./Attraction":1,"./Integrator":2,"./Particle":3,"./Spring":6,"./Vector":7,"./common":8}],5:[function(require,module,exports){
+var _              = require('./common')
+,   raf            = require('./requestAnimationFrame')
+,   ParticleSystem = require('./ParticleSystem')
+;
+
+  var updates = [];
+
+  /**
+   * Extended singleton instance of ParticleSystem with convenience methods for
+   * Request Animation Frame.
+   * @class
+   */
+  function Physics() {
+
+    var _this = this;
+
+    this.playing = false;
+
+    ParticleSystem.apply(this, arguments);
+
+    this.animations = [];
+
+    this.equilibriumCallbacks = [];
+
+    update.call(this);
+
+  }
+
+  _.extend(Physics, ParticleSystem, {
+
+    superclass: ParticleSystem
+
+  });
+
+  _.extend(Physics.prototype, ParticleSystem.prototype, {
+
+    /**
+     * Play the animation loop. Doesn't affect whether in equilibrium or not.
+     */
+    play: function() {
+
+      if (this.playing) {
+        return this;
+      }
+
+      this.playing = true;
+      this.__equilibrium = false;
+      update.call(this);
+
+      return this;
+
+    },
+
+    /**
+     * Pause the animation loop. Doesn't affect whether in equilibrium or not.
+     */
+    pause: function() {
+
+      this.playing = false;
+      return this;
+
+    },
+
+    /**
+     * Toggle between playing and pausing the simulation.
+     */
+    toggle: function() {
+
+      if (this.playing) {
+        this.pause();
+      } else {
+        this.play();
+      }
+
+      return this;
+
+    },
+
+    onUpdate: function(func) {
+
+      if (_.indexOf(this.animations, func) >= 0 || !_.isFunction(func)) {
+        return this;
+      }
+
+      this.animations.push(func);
+
+      return this;
+
+    },
+
+    onEquilibrium: function(func) {
+
+      if (_.indexOf(this.equilibriumCallbacks, func) >= 0 || !_.isFunction(func)) {
+        return this;
+      }
+
+      this.equilibriumCallbacks.push(func);
+
+      return this;
+
+    },
+
+    /**
+     * Call update after values in the system have changed and this will fire
+     * it's own Request Animation Frame to update until things have settled
+     * to equilibrium — at which point the system will stop updating.
+     */
+    update: function() {
+
+      if (!this.__equilibrium) {
+        return this;
+      }
+
+      this.__equilibrium = false;
+      if (this.playing) {
+        update.call(this);
+      }
+
+      return this;
+
+    }
+
+  });
+
+  function update() {
+
+    var _this = this;
+
+    this.tick();
+
+    _.each(this.animations, function(a) {
+      a();
+    });
+
+    if ((this.__optimized && !this.__equilibrium || !this.__optimized) && this.playing) {
+
+      raf(function() {
+        update.call(_this);
+      });
+
+    }
+
+    if (this.__optimized && this.__equilibrium){
+
+      _.each(this.equilibriumCallbacks, function(a) {
+        a();
+      });
+
+    }
+
+  }
+
+  module.exports = Physics;
+
+
+},{"./ParticleSystem":4,"./common":8,"./requestAnimationFrame":11}],6:[function(require,module,exports){
+var _      = require('./common')
+,   Vector = require('./vector')
+;
+
+  function Spring(a, b, k, d, l) {
+
+    this.constant = k;
+    this.damping = d;
+    this.length = l;
+    this.a = a;
+    this.b = b;
+    this.on = true;
+
+  }
+
+  _.extend(Spring.prototype, {
+
+    /**
+     * Returns the distance between particle a and particle b
+     * in 2D space.
+     */
+    currentLength: function() {
+      return this.a.position.distanceTo(this.b.position);
+    },
+
+    /**
+     * Update spring logic.
+     */
+    update: function() {
+
+      var a = this.a;
+      var b = this.b;
+      if (!(this.on && (!a.fixed || !b.fixed))) return this;
+
+      var a2b = new Vector().sub(a.position, b.position);
+      var d = a2b.length();
+
+      if (d === 0) {
+        a2b.clear();
+      } else {
+        a2b.divideScalar(d);  // Essentially normalize
+      }
+
+      var fspring = -1 * (d - this.length) * this.constant;
+
+      var va2b = new Vector().sub(a.velocity, b.velocity);
+
+      var fdamping = -1 * this.damping * va2b.dot(a2b);
+
+      var fr = fspring + fdamping;
+
+      a2b.multiplyScalar(fr);
+
+      if (!a.fixed) {
+        a.force.addSelf(a2b);
+      }
+      if (!b.fixed) {
+        b.force.subSelf(a2b);
+      }
+
+      return this;
+
+    },
+
+    /**
+     * Returns a boolean describing whether the spring is resting or not.
+     * Convenient for knowing whether or not the spring needs another update
+     * tick.
+     */
+    resting: function() {
+
+      var a = this.a;
+      var b = this.b;
+      var l = this.length;
+
+      return !this.on || (a.fixed && b.fixed)
+        || (a.fixed && (l === 0 ? b.position.equals(a.position) : b.position.distanceTo(a.position) <= l) && b.resting())
+        || (b.fixed && (l === 0 ? a.position.equals(b.position) : a.position.distanceTo(b.position) <= l) && a.resting());
+
+    }
+
+  });
+
+  module.exports = Spring;
+
+
+},{"./common":8,"./vector":12}],7:[function(require,module,exports){
+/**
+ * @author mr.doob / http://mrdoob.com/
+ * @author philogb / http://blog.thejit.org/
+ * @author egraether / http://egraether.com/
+ * @author zz85 / http://www.lab4games.net/zz85/blog
+ * @author jonobr1 / http://jonobr1.com/
+ */
+
+var _ = require('./common');
+
+  /**
+   * A two dimensional vector.
+   */
+  function Vector(x, y) {
+
+    this.x = x || 0;
+    this.y = y || 0;
+
+  }
+
+  _.extend(Vector.prototype, {
+
+    set: function(x, y) {
+      this.x = x;
+      this.y = y;
+      return this;
+    },
+
+    copy: function(v) {
+      this.x = v.x;
+      this.y = v.y;
+      return this;
+    },
+
+    clear: function() {
+      this.x = 0;
+      this.y = 0;
+      return this;
+    },
+
+    clone: function() {
+      return new Vector(this.x, this.y);
+    },
+
+    add: function(v1, v2) {
+      this.x = v1.x + v2.x;
+      this.y = v1.y + v2.y;
+      return this;
+    },
+
+    addSelf: function(v) {
+      this.x += v.x;
+      this.y += v.y;
+      return this;
+    },
+
+    sub: function(v1, v2) {
+      this.x = v1.x - v2.x;
+      this.y = v1.y - v2.y;
+      return this;
+    },
+
+    subSelf: function(v) {
+      this.x -= v.x;
+      this.y -= v.y;
+      return this;
+    },
+
+    multiplySelf: function(v) {
+      this.x *= v.x;
+      this.y *= v.y;
+      return this;
+    },
+
+    multiplyScalar: function(s) {
+      this.x *= s;
+      this.y *= s;
+      return this;
+    },
+
+    multiplyScalarXY: function(sx,sy) {
+      this.x *= sx;
+      this.y *= sy;
+      return this;
+    },
+
+    divideScalar: function(s) {
+      if (s) {
+        this.x /= s;
+        this.y /= s;
+      } else {
+        this.set(0, 0);
+      }
+      return this;
+    },
+
+    negate: function() {
+      return this.multiplyScalar(-1);
+    },
+
+    dot: function(v) {
+      return this.x * v.x + this.y * v.y;
+    },
+
+    lengthSquared: function() {
+      return this.x * this.x + this.y * this.y;
+    },
+
+    length: function() {
+      return Math.sqrt(this.lengthSquared());
+    },
+
+    normalize: function() {
+      return this.divideScalar(this.length());
+    },
+
+    distanceTo: function(v) {
+      return Math.sqrt(this.distanceToSquared(v));
+    },
+
+    distanceToSquared: function(v) {
+      var dx = this.x - v.x, dy = this.y - v.y;
+      return dx * dx + dy * dy;
+    },
+
+    setLength: function(l) {
+      return this.normalize().multiplyScalar(l);
+    },
+
+    equals: function(v) {
+      return (this.distanceTo(v) < 0.0001 /* almost same position */);
+    },
+
+    lerp: function(v, t) {
+      var x = (v.x - this.x) * t + this.x;
+      var y = (v.y - this.y) * t + this.y;
+      return this.set(x, y);
+    },
+
+    isZero: function() {
+      return (this.length() < 0.0001 /* almost zero */ );
+    }
+
+  });
+
+  module.exports = Vector;
+
+},{"./common":8}],8:[function(require,module,exports){
+
+  /**
+   * Pulled only what's needed from:
+   *
+   * Underscore.js 1.3.3
+   * (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
+   * http://documentcloud.github.com/underscore
+   */
+
+  var breaker = {};
+  var ArrayProto = Array.prototype;
+  var ObjProto = Object.prototype;
+  var hasOwnProperty = ObjProto.hasOwnProperty;
+  var slice = ArrayProto.slice;
+  var nativeForEach = ArrayProto.forEach;
+  var nativeIndexOf      = ArrayProto.indexOf;
+  var toString = ObjProto.toString;
+
+  var has = function(obj, key) {
+    return hasOwnProperty.call(obj, key);
+  };
+
+  var each = function(obj, iterator, context) {
+
+    if (obj == null) return;
+        if (nativeForEach && obj.forEach === nativeForEach) {
+          obj.forEach(iterator, context);
+        } else if (obj.length === +obj.length) {
+          for (var i = 0, l = obj.length; i < l; i++) {
+            if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) return;
+          }
+        } else {
+          for (var key in obj) {
+            if (_.has(obj, key)) {
+              if (iterator.call(context, obj[key], key, obj) === breaker) return;
+            }
+          }
+        }
+
+  };
+
+  var identity = function(value) {
+    return value;
+  };
+
+  var sortedIndex = function(array, obj, iterator) {
+    iterator || (iterator = identity);
+    var low = 0, high = array.length;
+    while (low < high) {
+      var mid = (low + high) >> 1;
+      iterator(array[mid]) < iterator(obj) ? low = mid + 1 : high = mid;
+    }
+    return low;
+  };
+
+  module.exports = {
+
+    has: has,
+
+    each: each,
+
+    extend: function(obj) {
+      each(slice.call(arguments, 1), function(source) {
+        for (var prop in source) {
+          obj[prop] = source[prop];
+        }
+      });
+      return obj;
+    },
+
+    indexOf: function(array, item, isSorted) {
+      if (array == null) return -1;
+      var i, l;
+      if (isSorted) {
+        i = sortedIndex(array, item);
+        return array[i] === item ? i : -1;
+      }
+      if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item);
+      for (i = 0, l = array.length; i < l; i++) if (i in array && array[i] === item) return i;
+      return -1;
+    },
+
+    sortedIndex: sortedIndex,
+
+    identity: identity,
+
+    isNumber: function(obj) {
+      return toString.call(obj) == '[object Number]';
+    },
+
+    isFunction: function(obj) {
+      return toString.call(obj) == '[object Function]' || typeof obj == 'function';
+    },
+
+    isUndefined: function(obj) {
+      return obj === void 0;
+    },
+
+    isNull: function(obj) {
+      return obj === null;
+    }
+
+  };
+
+
+},{}],"H99CHA":[function(require,module,exports){
+var root = (function(){ return this; })()
+,   previousShortcut = root.Physics
+;
+
+module.exports = root.Physics = require('./Physics');
+
+},{"./Physics":5}],"physics":[function(require,module,exports){
+module.exports=require('H99CHA');
+},{}],11:[function(require,module,exports){
+  /*
+   * Requirified version of Paul Irish's request animation frame.
+   * http://paulirish.com/2011/requestanimationframe-for-smart-animating/
+   */
+module.exports =
+          window.requestAnimationFrame       ||
+          window.webkitRequestAnimationFrame ||
+          window.mozRequestAnimationFrame    ||
+          window.oRequestAnimationFrame      ||
+          window.msRequestAnimationFrame     ||
+          function (callback) {
+            window.setTimeout(callback, 1000 / 60);
+          };
+
+},{}],12:[function(require,module,exports){
+module.exports=require(7)
+},{"./common":8}]},{},["H99CHA"])

+ 71 - 1
sites/all/modules/figli/edlp_corpus/assets/dist/styles/corpus.min.css

@@ -1 +1,71 @@
-canvas#corpus-map{position:absolute;-webkit-box-sizing:border-box;box-sizing:border-box;top:0;left:0;z-index:0}canvas#corpus-map.de-activated{background-color:#f4f4f4}div.node-popup{z-index:10;position:absolute;-webkit-box-sizing:content-box;box-sizing:content-box;width:300px;min-height:30px;top:60%;left:30%;pointer-events:none}div.node-popup .inner{padding:.4em;outline:red solid 1px;background-color:#fff}div.node-popup:before{content:"";position:absolute;width:60px;height:0;border-top:1px solid red}div.node-popup[pos=bottom-right]{-webkit-transform:translateY(42px) translateX(42px);transform:translateY(42px) translateX(42px)}div.node-popup[pos=bottom-right]:before{top:-1px;left:-61px;-webkit-transform-origin:bottom right;transform-origin:bottom right;-webkit-transform:rotateZ(45deg);transform:rotateZ(45deg)}div.node-popup[pos=bottom-left]{-webkit-transform:translateX(-100%) translateY(42px) translateX(-42px);transform:translateX(-100%) translateY(42px) translateX(-42px)}div.node-popup[pos=bottom-left]:before{top:calc(100% +1px);left:100%;-webkit-transform-origin:top left;transform-origin:top left;-webkit-transform:rotateZ(-45deg);transform:rotateZ(-45deg)}div.node-popup[pos=top-left]{-webkit-transform:translateY(-100%) translateX(-100%) translateY(-42px) translateX(-42px);transform:translateY(-100%) translateX(-100%) translateY(-42px) translateX(-42px)}div.node-popup[pos=top-left]:before{bottom:0;left:100%;-webkit-transform-origin:top left;transform-origin:top left;-webkit-transform:rotateZ(45deg);transform:rotateZ(45deg)}div.node-popup[pos=top-right]{-webkit-transform:translateY(-100%) translateY(-42px) translateX(42px);transform:translateY(-100%) translateY(-42px) translateX(42px)}div.node-popup[pos=top-right]:before{top:calc(100% + 1px);left:-61px;-webkit-transform-origin:top right;transform-origin:top right;-webkit-transform:rotateZ(-45deg);transform:rotateZ(-45deg)}
+canvas#corpus-map {
+  position: absolute;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  top: 0;
+  left: 0;
+  z-index: 0; }
+  canvas#corpus-map.de-activated {
+    background-color: #f4f4f4; }
+
+div.node-popup {
+  z-index: 10;
+  position: absolute;
+  -webkit-box-sizing: content-box;
+  box-sizing: content-box;
+  width: 300px;
+  min-height: 30px;
+  pointer-events: none;
+  top: 60%;
+  left: 30%;
+  pointer-events: none; }
+  div.node-popup .inner {
+    padding: 0.6em;
+    outline: 1px solid red;
+    background-color: white; }
+  div.node-popup:before {
+    content: "";
+    position: absolute;
+    width: 60px;
+    height: 0;
+    border-top: 1px solid red; }
+  div.node-popup[pos="bottom-right"] {
+    -webkit-transform: translateY(42px) translateX(42px);
+    transform: translateY(42px) translateX(42px); }
+    div.node-popup[pos="bottom-right"]:before {
+      top: -1px;
+      left: -61px;
+      -webkit-transform-origin: bottom right;
+      transform-origin: bottom right;
+      -webkit-transform: rotateZ(45deg);
+      transform: rotateZ(45deg); }
+  div.node-popup[pos="bottom-left"] {
+    -webkit-transform: translateX(-100%) translateY(42px) translateX(-42px);
+    transform: translateX(-100%) translateY(42px) translateX(-42px); }
+    div.node-popup[pos="bottom-left"]:before {
+      top: calc(100% +1px);
+      left: 100%;
+      -webkit-transform-origin: top left;
+      transform-origin: top left;
+      -webkit-transform: rotateZ(-45deg);
+      transform: rotateZ(-45deg); }
+  div.node-popup[pos="top-left"] {
+    -webkit-transform: translateY(-100%) translateX(-100%) translateY(-42px) translateX(-42px);
+    transform: translateY(-100%) translateX(-100%) translateY(-42px) translateX(-42px); }
+    div.node-popup[pos="top-left"]:before {
+      bottom: 0;
+      left: 100%;
+      -webkit-transform-origin: top left;
+      transform-origin: top left;
+      -webkit-transform: rotateZ(45deg);
+      transform: rotateZ(45deg); }
+  div.node-popup[pos="top-right"] {
+    -webkit-transform: translateY(-100%) translateY(-42px) translateX(42px);
+    transform: translateY(-100%) translateY(-42px) translateX(42px); }
+    div.node-popup[pos="top-right"]:before {
+      top: calc(100% + 1px);
+      left: -61px;
+      -webkit-transform-origin: top right;
+      transform-origin: top right;
+      -webkit-transform: rotateZ(-45deg);
+      transform: rotateZ(-45deg); }

+ 84 - 29
sites/all/modules/figli/edlp_corpus/assets/scripts/corpus.js

@@ -25,7 +25,8 @@
     var _canvas = _$canvas[0];
     var _canvas = _$canvas[0];
     var _ctx = _canvas.getContext('2d');
     var _ctx = _canvas.getContext('2d');
     var _canvas_props = {
     var _canvas_props = {
-      'margin_top':90,
+      // 'margin_top':90, // with red border on head
+      'margin_top':75, // without red border on head
       'margin_right':0,
       'margin_right':0,
       'margin_bottom':65,
       'margin_bottom':65,
       'margin_left':0
       'margin_left':0
@@ -206,13 +207,13 @@
       // define radius regarding entries length
       // define radius regarding entries length
       switch(true){
       switch(true){
         case this.entrees.length > 3:
         case this.entrees.length > 3:
-          this.r = 10;
+          this.r = 8;//10;
           break;
           break;
         case this.entrees.length > 1 && this.entrees.length <= 3:
         case this.entrees.length > 1 && this.entrees.length <= 3:
-          this.r = 7;
+          this.r = 5;//7;
           break;
           break;
         default:
         default:
-          this.r = 4;
+          this.r = 3;//4;
           break;
           break;
       }
       }
 
 
@@ -225,7 +226,8 @@
       this.aside = false;
       this.aside = false;
       this.scrambling = false;
       this.scrambling = false;
 
 
-      this.n_repulses = {};
+      this.wall_bouncing_elasticity = 0.75;
+      // this.n_repulses = {};
 
 
       // prototypes
       // prototypes
       if (typeof Node.initialized == "undefined") {
       if (typeof Node.initialized == "undefined") {
@@ -300,7 +302,7 @@
             }
             }
           }
           }
 
 
-          if(_mouse_in && !this.aside)
+          if(_mouse_in && !this.aside && !this.faded)
             this.checkMouse();
             this.checkMouse();
 
 
           // if(this.debug)
           // if(this.debug)
@@ -322,19 +324,27 @@
           switch(true){
           switch(true){
             case this.x < this.wall_limits.left && this.p.velocity.x < 0:
             case this.x < this.wall_limits.left && this.p.velocity.x < 0:
               this.p.position.x = this.wall_limits.left;
               this.p.position.x = this.wall_limits.left;
-              this.p.velocity.multiplyScalarXY(-1, 1).multiplyScalar(0.75);
+              this.p.velocity
+                .multiplyScalarXY(-1, 1)
+                .multiplyScalar(this.wall_bouncing_elasticity);
               break;
               break;
             case this.x > this.wall_limits.right && this.p.velocity.x > 0:
             case this.x > this.wall_limits.right && this.p.velocity.x > 0:
               this.p.position.x = this.wall_limits.right;
               this.p.position.x = this.wall_limits.right;
-              this.p.velocity.multiplyScalarXY(-1, 1).multiplyScalar(0.75);
+              this.p.velocity
+                .multiplyScalarXY(-1, 1)
+                .multiplyScalar(this.wall_bouncing_elasticity);
               break;
               break;
             case this.y < this.wall_limits.top && this.p.velocity.y < 0 :
             case this.y < this.wall_limits.top && this.p.velocity.y < 0 :
               this.p.position.y = this.wall_limits.top;
               this.p.position.y = this.wall_limits.top;
-              this.p.velocity.multiplyScalarXY(1,-1).multiplyScalar(0.75);
+              this.p.velocity
+                .multiplyScalarXY(1,-1)
+                .multiplyScalar(this.wall_bouncing_elasticity);
               break;
               break;
             case this.y > this.wall_limits.bottom && this.p.velocity.y > 0 :
             case this.y > this.wall_limits.bottom && this.p.velocity.y > 0 :
               this.p.position.y = this.wall_limits.bottom;
               this.p.position.y = this.wall_limits.bottom;
-              this.p.velocity.multiplyScalarXY(1,-1).multiplyScalar(0.75);
+              this.p.velocity
+                .multiplyScalarXY(1,-1)
+                .multiplyScalar(this.wall_bouncing_elasticity);
               break;
               break;
           }
           }
         };
         };
@@ -352,16 +362,23 @@
            && _m_pos.y < this.y + this.r){
            && _m_pos.y < this.y + this.r){
             if(_node_hover_id == -1 || _node_hover_id !== this.id){
             if(_node_hover_id == -1 || _node_hover_id !== this.id){
               // console.log("Node hover", this.id);
               // console.log("Node hover", this.id);
-              this.hover = true;
-              _node_hover_id = this.id;
-              _node_pop_up.setNode(this);
+              this.setHover();
             }
             }
           }else{
           }else{
-            this.hover = false;
-            if (_node_hover_id == this.id) {
-              _node_hover_id = -1;
-              _node_pop_up.removeNode();
-            }
+            this.unsetHover();
+          }
+        };
+
+        Node.prototype.setHover = function(){
+          this.hover = true;
+          _node_hover_id = this.id;
+          _node_pop_up.setNode(this);
+        };
+        Node.prototype.unsetHover = function(){
+          this.hover = false;
+          if (_node_hover_id == this.id) {
+            _node_hover_id = -1;
+            _node_pop_up.removeNode();
           }
           }
         };
         };
 
 
@@ -421,12 +438,14 @@
           this.unsetCentered();
           this.unsetCentered();
           this.ori_p.position.x = this.x < _canvas.width /2 ? this.wall_limits.left : this.wall_limits.right;
           this.ori_p.position.x = this.x < _canvas.width /2 ? this.wall_limits.left : this.wall_limits.right;
           this.ori_p_attract.on = true;
           this.ori_p_attract.on = true;
+          this.wall_bouncing_elasticity = 0.15;
         }
         }
         Node.prototype.unsetAside = function(){
         Node.prototype.unsetAside = function(){
           console.log('unsetAside');
           console.log('unsetAside');
           this.aside = false;
           this.aside = false;
           this.ori_p_attract.on = false;
           this.ori_p_attract.on = false;
           this.ori_p.position.x = this.ori_pos.x;
           this.ori_p.position.x = this.ori_pos.x;
+          this.wall_bouncing_elasticity = 0.75;
           // this.unFade();
           // this.unFade();
         }
         }
 
 
@@ -464,15 +483,25 @@
           // actif entouré de rouge
           // actif entouré de rouge
 
 
           _ctx.beginPath();
           _ctx.beginPath();
-          _ctx.globalAlpha = this.faded ? 0.1 : 1;
-          // _ctx.fillStyle = !this.p.resting() ? _ecolors[this.e_color] : 'rgb(0, 0, 0)';
-          _ctx.fillStyle = _ecolors[this.e_color];
+          _ctx.globalAlpha = this.faded ? 0.15 : 1;
+          // carre plein
+          // _ctx.fillStyle = _ecolors[this.e_color];
+          // _ctx.fillRect(this.x - this.r,this.y - this.r,this.r*2,this.r*2);
+          // ou carre contour
+          _ctx.lineWidth = '2px';
+          _ctx.fillStyle = 'rgb(255,255,255)';
           _ctx.fillRect(this.x - this.r,this.y - this.r,this.r*2,this.r*2);
           _ctx.fillRect(this.x - this.r,this.y - this.r,this.r*2,this.r*2);
+          _ctx.strokeStyle = _ecolors[this.e_color];
+          _ctx.strokeRect(this.x - this.r,this.y - this.r,this.r*2,this.r*2);
 
 
           if(this.opened){
           if(this.opened){
-            _ctx.lineWidth = '1px';
-            _ctx.strokeStyle = 'rgb(255,0,0)';
-            _ctx.strokeRect(this.x - this.r-3,this.y - this.r-3,this.r*2+6,this.r*2+6);
+            // carre plein
+            // _ctx.lineWidth = '1px';
+            // _ctx.strokeStyle = 'rgb(255,0,0)';
+            // _ctx.strokeRect(this.x - this.r-3,this.y - this.r-3,this.r*2+6,this.r*2+6);
+            // ou carre contour
+            _ctx.fillStyle = _ecolors[this.e_color];
+            _ctx.fillRect(this.x - this.r,this.y - this.r,this.r*2,this.r*2);
           }
           }
           _ctx.globalAlpha = 1;
           _ctx.globalAlpha = 1;
           _ctx.closePath();
           _ctx.closePath();
@@ -507,7 +536,8 @@
           nb = _nodes[q];
           nb = _nodes[q];
           mb = nb.p.mass;
           mb = nb.p.mass;
           // avoid impact between center and aside particules
           // avoid impact between center and aside particules
-          if((na.center && nb.aside) || (na.aside && nb.center))
+          // and between aside particules
+          if((na.center && nb.aside) || (na.aside && nb.center) || (na.aside && nb.aside))
             continue;
             continue;
 
 
           // avoid impact between two centered particulses that comes to the center
           // avoid impact between two centered particulses that comes to the center
@@ -518,6 +548,9 @@
           }
           }
 
 
           w = h = (na.r+nb.r);
           w = h = (na.r+nb.r);
+          // if(!na.aside && !nb.aside){
+            w = h += 4; // add a saftey zone around squares eccept for aside squares
+          // }
           dx = na.p.position.x - nb.p.position.x;
           dx = na.p.position.x - nb.p.position.x;
           dy = na.p.position.y - nb.p.position.y;
           dy = na.p.position.y - nb.p.position.y;
 
 
@@ -624,6 +657,7 @@
       if(!$li.is('.opened')){
       if(!$li.is('.opened')){
         _$entrees_block_termlinks.parents('li').removeClass('opened');
         _$entrees_block_termlinks.parents('li').removeClass('opened');
         $li.addClass('opened');
         $li.addClass('opened');
+        $li.parents('.item-list').addClass('opened')
         filterEntree(tid);
         filterEntree(tid);
         if(bubbling){
         if(bubbling){
           _$body.trigger({'type':'open_entree', 'tid':tid, 'url':url, 'sys_path':sys_path});
           _$body.trigger({'type':'open_entree', 'tid':tid, 'url':url, 'sys_path':sys_path});
@@ -631,6 +665,7 @@
       // bubbling is true only when event is a real click on entree link
       // bubbling is true only when event is a real click on entree link
       }else if(bubbling){
       }else if(bubbling){
         $li.removeClass('opened');
         $li.removeClass('opened');
+        $li.parents('.item-list').removeClass('opened')
         scrambleCollection();
         scrambleCollection();
         _$body.trigger({'type':'close_entree', 'tid':tid});
         _$body.trigger({'type':'close_entree', 'tid':tid});
       }
       }
@@ -651,7 +686,9 @@
       createNodesRepulsions();
       createNodesRepulsions();
     };
     };
     function highlightEntries(){
     function highlightEntries(){
-      _$entrees_block_termlinks.removeClass('highlighted');
+      _$entrees_block_termlinks
+        .parents('li').removeClass('highlighted')
+        .parents('.item-list').removeClass('highlighted');
       var id = -1;
       var id = -1;
       if(_node_hover_id != -1){
       if(_node_hover_id != -1){
         id = _node_hover_id;
         id = _node_hover_id;
@@ -664,7 +701,8 @@
           entree = _nodes[id].entrees[i];
           entree = _nodes[id].entrees[i];
           _$entrees_block_termlinks.filter(function(){
           _$entrees_block_termlinks.filter(function(){
             return $(this).attr('tid') == entree;
             return $(this).attr('tid') == entree;
-          }).addClass('highlighted');
+          }).parents('li').addClass('highlighted')
+            .parents('.item-list').addClass('highlighted');
         }
         }
       }
       }
     };
     };
@@ -802,6 +840,18 @@
             }
             }
           }
           }
         })
         })
+        .on('mouseover-audio-link', function(e){
+          console.log("Corpus on mouseover-audio-link", e);
+          // _node_hover_id = _nodes_Nid_Id[e.nid];
+          // _node_pop_up.setNode(_nodes_by_nid[e.nid]);
+          _nodes_by_nid[e.nid].setHover();
+        })
+        .on('mouseout-audio-link', function(e){
+          console.log("Corpus on mouseover-audio-link", e);
+          // _node_hover_id = -1;
+          // _node_pop_up.removeNode();
+          _nodes_by_nid[e.nid].unsetHover();
+        })
         .on('audio-node-opened', function(e){
         .on('audio-node-opened', function(e){
           // console.log('Corpus audio-node-opened', e);
           // console.log('Corpus audio-node-opened', e);
           openNodeByNid(e.nid);
           openNodeByNid(e.nid);
@@ -852,8 +902,12 @@
         })
         })
         .on('new-content-not-entree-ajax-loaded', function(e){
         .on('new-content-not-entree-ajax-loaded', function(e){
           // close all entries only if entry already opened
           // close all entries only if entry already opened
+          // TODO: user the function close all entries ?
+          // closeAllEntries(); not working, is closing also the ajax loaded content
           if(_$entrees_block_termlinks.parents('li.opened').length){
           if(_$entrees_block_termlinks.parents('li.opened').length){
-            _$entrees_block_termlinks.parents('li').removeClass('opened');
+            _$entrees_block_termlinks
+              .parents('li').removeClass('opened')
+              .parents('.item-list').removeClass('opened');
             scrambleCollection();
             scrambleCollection();
           }
           }
         });
         });
@@ -863,7 +917,8 @@
       _$entrees_block.find('li.entree').each(function(index, el) {
       _$entrees_block.find('li.entree').each(function(index, el) {
         var $li = $(this);
         var $li = $(this);
         if($('a.is-active', $li).length){
         if($('a.is-active', $li).length){
-          $li.addClass('opened');
+          $li.addClass('opened')
+            .parents('.item-list').addClass('opened');
           filterEntree($li.attr('tid'));
           filterEntree($li.attr('tid'));
           return false;
           return false;
         }
         }

+ 1 - 1
sites/all/modules/figli/edlp_corpus/assets/styles/corpus.scss

@@ -34,7 +34,7 @@ div.node-popup{
   pointer-events: none;
   pointer-events: none;
 
 
   .inner{
   .inner{
-    padding:0.4em;
+    padding:0.6em;
     outline: 1px solid red;
     outline: 1px solid red;
     background-color: white;
     background-color: white;
   }
   }

+ 1 - 0
sites/all/modules/figli/edlp_corpus/edlp_corpus.module

@@ -63,6 +63,7 @@ function edlp_corpus_taxonomy_term_view(array &$build, EntityInterface $entity,
     $query = \Drupal::entityQuery('node')
     $query = \Drupal::entityQuery('node')
       ->condition('status', 1)
       ->condition('status', 1)
       ->condition('type', 'enregistrement')
       ->condition('type', 'enregistrement')
+      ->sort('title')
       ->condition('field_entrees', $entity->id());
       ->condition('field_entrees', $entity->id());
 
 
     $documents_nids = $query->execute();
     $documents_nids = $query->execute();

+ 108 - 3
sites/all/modules/figli/edlp_search/assets/dist/scripts/edlp_search.min.js

@@ -1,4 +1,109 @@
+(function ($, Drupal, drupalSettings) {
 
 
-(function($,Drupal,drupalSettings){var settings=drupalSettings.edlp_search;var _$body=$('body');var _$container;var _$form;function init(){initEvents();initAjax();};function initEvents(){$('body').on('new-content-ajax-loaded',initAjax).on('edlp_search_search_form-col-closed',onSearchClosed);};function initAjax(){_$form=$('#edlp-search-form:not(.ajax-enabled)');if(!_$form.length)return false;_$form=$('#edlp-search-form:not(.ajax-enabled)').on('submit',onSubmitForm).addClass('ajax-enabled');_$container=_$form.parents('.row');if(!_$container.length){_$container=_$form.parent();}};function onSubmitForm(e){e.preventDefault();var args={};args.keys=$('input[type="search"]',this).val();args.entries=[];$('input[type="checkbox"]:checked','#edit-entries').each(function(index,el){args.entries.push($(this).val());});args.langues=$('input[name="langues"]',this).val();args.genres=$('input[name="genres"]',this).val();loadResults(args);return false;};function loadResults(args){_$form.addClass('ajax-loading');_$body.addClass('ajax-loading');$('[theme="edlp_search_results"]',_$container).addClass('ajax-loading');var path=window.location.origin+drupalSettings.path.baseUrl+settings.results_ajax_url;$.getJSON(path,args).done(function(data){onResultsLoaded(data);}).fail(function(jqxhr,textStatus,error){onResultsLoadFail(jqxhr,textStatus,error);});};function onResultsLoaded(data){_$form.removeClass('ajax-loading');_$body.removeClass('ajax-loading');$prev_results=$('[theme="edlp_search_results"]',_$container);if($prev_results.length){$prev_results.replaceWith(data.rendered);}else{_$container.append(data.rendered);}
-_$body.trigger({'type':'search-results-loaded','results':data.results_nids});};function onResultsLoadFail(jqxhr,textStatus,error){void 0;};function onSearchClosed(e){$('div[theme="edlp_search_results"]').remove();_$body.trigger({'type':'search-closed'});}
-init();})(jQuery,Drupal,drupalSettings);
+  var settings = drupalSettings.edlp_search;
+  var _$body = $('body');
+  var _$container;
+  var _$form;
+
+  function init(){
+    // console.log('EdlpSearch Init', settings);
+    initEvents();
+    initAjax();
+  };
+
+  function initEvents(){
+    $('body')
+      .on('new-content-ajax-loaded', initAjax)
+      .on('edlp_search_search_form-col-closed', onSearchClosed);
+  };
+
+  function initAjax(){
+    _$form = $('#edlp-search-form:not(.ajax-enabled)');
+    if(!_$form.length) return false;
+
+    //console.log('EdlpSearch initAjaxForm()');
+    _$form = $('#edlp-search-form:not(.ajax-enabled)')
+      .on('submit', onSubmitForm)
+      .addClass('ajax-enabled');
+    _$container = _$form.parents('.row');
+    if(!_$container.length){
+      _$container = _$form.parent();
+    }
+  };
+
+  function onSubmitForm(e){
+    e.preventDefault();
+    // console.log('onSubmitForm',e);
+    var args = {};
+
+    // search for key words
+    args.keys = $('input[type="search"]', this).val();
+
+    // entries filter
+    args.entries = [];
+    $('input[type="checkbox"]:checked', '#edit-entries').each(function(index, el) {
+      args.entries.push($(this).val());
+    });
+
+    // langues
+    args.langues = $('input[name="langues"]', this).val();
+
+    // genres
+    args.genres = $('input[name="genres"]', this).val();
+
+    //console.log('EdlpSearch onSubmitForm() : args',args);
+
+    loadResults(args);
+
+    return false;
+  };
+
+  function loadResults(args){
+    //console.log('EdlpSearch loadResults() : args', args);
+    _$form.addClass('ajax-loading');
+    _$body.addClass('ajax-loading');
+    $('[theme="edlp_search_results"]', _$container).addClass('ajax-loading');
+    var path = window.location.origin + drupalSettings.path.baseUrl +settings.results_ajax_url;
+    $.getJSON(path, args)
+      .done(function(data){
+        onResultsLoaded(data);
+      })
+      .fail(function(jqxhr, textStatus, error){
+        onResultsLoadFail(jqxhr, textStatus, error);
+      });
+  };
+
+  function onResultsLoaded(data){
+    // console.log('EdlpSearch onResultsLoaded()', data);
+    _$form.removeClass('ajax-loading');
+    _$body.removeClass('ajax-loading');
+
+    // insert results col
+    $prev_results = $('[theme="edlp_search_results"]', _$container);
+    if($prev_results.length){
+      $prev_results.replaceWith(data.rendered);
+    }else{
+      _$container.append(data.rendered);
+    }
+
+    // trigger event
+    _$body.trigger({
+      'type':'search-results-loaded',
+      'results':data.results_nids
+    });
+
+  };
+
+  function onResultsLoadFail(jqxhr, textStatus, error){
+    console.warn('EdlpSearch : search results ajax load failed : '+error, jqxhr.responseText);
+  };
+
+  function onSearchClosed(e){
+    // console.log('Edlp Search onSearchClosed()');
+    $('div[theme="edlp_search_results"]').remove();
+    // trigger event
+    _$body.trigger({'type':'search-closed'});
+  }
+
+  init();
+})(jQuery, Drupal, drupalSettings);

File diff suppressed because it is too large
+ 1 - 1
sites/all/modules/figli/edlp_studio/assets/dist/scripts/edlp_studio.min.js


+ 19 - 1
sites/all/themes/custom/edlptheme/assets/dist/scripts/history.min.js

@@ -1,2 +1,20 @@
+console.log('EDLP THEME HISTORY.js');
+// var edlp is provided by edlp_ajax.module file
+if(edlp.redirect){
+  console.log('history redirect', edlp);
+  console.log('window.location', window.location);
+  // window.localStorage.setItem('edlp_origin_path', edlp.sys_path.replace(/^\//, ''));
+  edlp.sys_path = edlp.sys_path.replace(/^\//, '');
 
 
-void 0;if(edlp.redirect){void 0;void 0;edlp.sys_path=edlp.sys_path.replace(/^\//,'');edlp.url=window.location.pathname;edlp.hash=window.location.hash;window.localStorage.setItem('edlp_origin',JSON.stringify(edlp));window.location.replace(window.location.origin+'/'+edlp.lang_code);}else{void 0;}
+  // window.localStorage.setItem('edlp_origin_url', window.location.pathname);
+  edlp.url = window.location.pathname;
+
+  // window.localStorage.setItem('edlp_origin_hash', window.location.hash);
+  edlp.hash = window.location.hash;
+
+  window.localStorage.setItem('edlp_origin', JSON.stringify(edlp));
+  // redirect to home
+  window.location.replace(window.location.origin+'/'+edlp.lang_code);
+}else{
+  console.log('history do not redirect');
+}

File diff suppressed because it is too large
+ 1 - 33
sites/all/themes/custom/edlptheme/assets/dist/scripts/main.min.js


File diff suppressed because it is too large
+ 0 - 0
sites/all/themes/custom/edlptheme/assets/dist/styles/app.min.css


+ 77 - 32
sites/all/themes/custom/edlptheme/assets/scripts/main.js

@@ -81,7 +81,9 @@
             history.pushState(state, null, e.url);
             history.pushState(state, null, e.url);
           }
           }
         })
         })
-        .on('close_entree', backToFrontPage);
+        .on('close_entree', function(e){
+          backToFrontPage();
+        });
     }
     }
 
 
     //  ___             _ _ ___
     //  ___             _ _ ___
@@ -203,8 +205,10 @@
 
 
       if(typeof state.selector != 'undefined'){
       if(typeof state.selector != 'undefined'){
         // in case of entree link (actualy, selector is used only for entries links)
         // in case of entree link (actualy, selector is used only for entries links)
+        // TODO:  unfortunatly on initFirstLoad there is no selector property
         console.log('selector', state.selector);
         console.log('selector', state.selector);
         $('a[selector="'+state.selector+'"]').addClass('is-active');
         $('a[selector="'+state.selector+'"]').addClass('is-active');
+        initAudioLinksInContent();
       }else{
       }else{
         if(typeof state.view_mode != 'undefined'){
         if(typeof state.view_mode != 'undefined'){
           $('a[viewmode="'+state.view_mode+'"][data-drupal-link-system-path="'+state.sys_path+'"]').addClass('is-active');
           $('a[viewmode="'+state.view_mode+'"][data-drupal-link-system-path="'+state.sys_path+'"]').addClass('is-active');
@@ -297,6 +301,31 @@
       }
       }
     };
     };
 
 
+    function initAudioLinksInContent(){
+      // console.log('initAudioLinksInContent');
+      _$row.find('a.audio-link')
+        .on('mouseover', function(event) {
+          event.preventDefault();
+          // console.log('onmouseover audio-link');
+          if(_corpus_ready){
+            _$corpus_canvas.trigger({
+              type:'mouseover-audio-link',
+              nid:$(this).attr('nid')
+            });
+          }
+        })
+        .on('mouseout', function(event) {
+          event.preventDefault();
+          // console.log('onmouseout audio-link');
+          if(_corpus_ready){
+            _$corpus_canvas.trigger({
+              type:'mouseout-audio-link',
+              nid:$(this).attr('nid')
+            });
+          }
+        });
+    };
+
     function addCloseModalBtnToCols(){
     function addCloseModalBtnToCols(){
       $('.col', _$row).each(function(index, el) {
       $('.col', _$row).each(function(index, el) {
 
 
@@ -305,25 +334,28 @@
 
 
         $(this).children('.wrapper').prepend($('<span>')
         $(this).children('.wrapper').prepend($('<span>')
           .addClass('close-col-btn')
           .addClass('close-col-btn')
-          .on('click', function(e){
-            // check for theme attribute and emmit event
-            var $col = $(this).parents('.col');
-            var theme = $col.attr('theme');
-            if(theme != ''){
-              _$body.trigger({'type':theme+'-col-closed'});
-            }
-            // remove the col
-            $col.remove();
-            // if row is empty and we are not in productions call closeAllModals()
-            if(!$('.col', _$row).length
-              && !_$body.is('.entity-type-node.bundle-page')){
-                backToFrontPage();
-            }
-          })
+          .on('click', onCloseModal)
         );
         );
       });
       });
     };
     };
 
 
+    function onCloseModal(e){
+      // check for theme attribute and emmit event
+      var $col = $(this).parents('.col');
+      var theme = $col.attr('theme');
+      if(theme != ''){
+        _$body.trigger({'type':theme+'-col-closed'});
+      }
+      // remove the col
+      $col.remove();
+      // if row is empty and we are not in productions or entree notice|index call closeAllModals()
+      if(!$('.col', _$row).length
+        && !_$body.is('.entity-type-node.bundle-page')
+        && !_$body.is('.entity-type-taxonomy_term.bundle-entrees')){
+          backToFrontPage();
+      }
+    };
+
     //    _    _            ___ _         _
     //    _    _            ___ _         _
     //   /_\  (_)__ ___ __ | _ ) |___  __| |__ ___
     //   /_\  (_)__ ___ __ | _ ) |___  __| |__ ___
     //  / _ \ | / _` \ \ / | _ \ / _ \/ _| / /(_-<
     //  / _ \ | / _` \ \ / | _ \ / _ \/ _| / /(_-<
@@ -367,37 +399,47 @@
 
 
       // var origin_sys_path = window.localStorage.getItem('edlp_origin_path');
       // var origin_sys_path = window.localStorage.getItem('edlp_origin_path');
       var edlp_origin = JSON.parse(window.localStorage.getItem('edlp_origin'));
       var edlp_origin = JSON.parse(window.localStorage.getItem('edlp_origin'));
+      console.log('edlp_origin', edlp_origin);
 
 
       if(edlp_origin != null && edlp_origin.sys_path){
       if(edlp_origin != null && edlp_origin.sys_path){
-        // var origin_url = window.localStorage.getItem('edlp_origin_url');
-        // origin_hash is used as viewmode for taxonomy term entrees load (index or notice)
-        // var origin_hash = window.localStorage.getItem('edlp_origin_hash');
+        // hash is used as viewmode for taxonomy term entrees load (index or notice)
+        // and for audio contents (article|transcript)
         var view_mode = edlp_origin.hash.replace('#', '');
         var view_mode = edlp_origin.hash.replace('#', '');
 
 
-        // // TODO: refactorize with new infos from edlp_origin
-        if(view_mode){
-          var $link = $('[href="'+edlp_origin.url+'"][viewmode="'+view_mode+'"]');
-          var selector = $link.attr('selector') || null;
-          if(selector){
+        // create history state
+        var state = getSysPathState(edlp_origin.sys_path, view_mode);
+
+        // open entree tray in case of entree index|notice
+        // (index or notice will be opened with ajaxLoadContent)
+        // refactorized with new infos from edlp_origin
+        // if(view_mode){
+        if(edlp_origin.entity_type == "taxonomy_term"
+            && edlp_origin.entity_bundle == "entrees"
+            && view_mode){
+          // var $link = $('[href="'+edlp_origin.url+'"][viewmode="'+view_mode+'"]');
+          // var selector = $link.attr('selector') || null;
+
+          // record the selector in the state for actions after ajaxContentLoaded
+          state.selector = 'entree-'+view_mode+'-link-'+edlp_origin.entity_id; // entree-index-link-125
+          // if(selector){
             // in case of entree link (actualy, selector is used only for entries links)
             // in case of entree link (actualy, selector is used only for entries links)
             // TODO: use a promise
             // TODO: use a promise
+            // TODO: but what if corpus ready before onAjaxLoaded >> use a promise !!
             if(_corpus_ready){
             if(_corpus_ready){
               _$corpus_canvas.trigger({
               _$corpus_canvas.trigger({
                 type:'open-entree',
                 type:'open-entree',
-                tid:$link.attr('tid')
+                // tid:$link.attr('tid')
+                tid:edlp_origin.entity_id
               });
               });
             }else{
             }else{
               // else : EdlpCorpus will check when ready if entry item (notice or index) is already .is-active
               // else : EdlpCorpus will check when ready if entry item (notice or index) is already .is-active
               // .is-active class is added by onAjaxLoaded() (when content is loaded)
               // .is-active class is added by onAjaxLoaded() (when content is loaded)
-              // but what if corpus ready before onAjaxLoaded >> use a promise !!
-              $('li.entree[tid="'+$link.attr('tid')+'"] a.term-link').addClass('is-active');
+              // $('li.entree[tid="'+$link.attr('tid')+'"] a.term-link').addClass('is-active');
+              $('li.entree[tid="'+edlp_origin.entity_id+'"] a.term-link').addClass('is-active');
             }
             }
-          }
+          // }
         }
         }
 
 
-        // create history state
-        var state = getSysPathState(edlp_origin.sys_path, view_mode);
-
         // check if audio link
         // check if audio link
         if(edlp_origin.audio_url){
         if(edlp_origin.audio_url){
           var node = {
           var node = {
@@ -1205,13 +1247,16 @@
     // |_||_| \___/_||_\__|_| \__,_\__, \___|
     // |_||_| \___/_||_\__|_| \__,_\__, \___|
     //                             |___/
     //                             |___/
     function backToFrontPage(pop_state){
     function backToFrontPage(pop_state){
+      console.log('backToFrontPage', pop_state);
       closeAllModals();
       closeAllModals();
       // assume we are going back to front page
       // assume we are going back to front page
       $('body').removeClass().addClass('path-frontpage');
       $('body').removeClass().addClass('path-frontpage');
       $('a[data-drupal-link-system-path="<front>"]').addClass('is-active');
       $('a[data-drupal-link-system-path="<front>"]').addClass('is-active');
       // close entrees
       // close entrees
       _$corpus_canvas.trigger({'type':'close-all-entree'});
       _$corpus_canvas.trigger({'type':'close-all-entree'});
-      if(!pop_state){
+
+      if(typeof pop_state == "undefined" || !pop_state){
+        console.log('backToFrontPage push state');
         history.pushState({home:true}, null, drupalSettings.path.baseUrl+drupalSettings.path.currentLanguage);
         history.pushState({home:true}, null, drupalSettings.path.baseUrl+drupalSettings.path.currentLanguage);
       }
       }
     }
     }

+ 173 - 157
sites/all/themes/custom/edlptheme/assets/styles/app.scss

@@ -339,9 +339,12 @@ main[role="main"]{
   }
   }
 
 
   div.taxonomy-term{
   div.taxonomy-term{
-    >h2{display:none;}
+    >h2{
+      // display:none;
+      @include content_subtitles;
+      margin: 1em 0 0.5em;
+    }
     >.content{
     >.content{
-      margin-top: 1em;
     }
     }
     .field__label{
     .field__label{
       @include content_titles;
       @include content_titles;
@@ -1537,185 +1540,195 @@ footer{
 
 
     display: inline-block;
     display: inline-block;
     // vertical-align: top;
     // vertical-align: top;
-    ul{
-      margin:0;
-      white-space: nowrap;
-      li{
-        @include oblique-list;
+    div.item-list{
+      ul{
         margin:0;
         margin:0;
         white-space: nowrap;
         white-space: nowrap;
-        pointer-events: none;
-        span.oblique-wrapper{
-          height:120px; // this is needed to respect the height of oblique links :(
-          display: inline-block;
-          vertical-align: bottom;
-          position: relative;
-          width:1.5em;
-        }
-
-        a.term-link, a.articles-link{
-          // outline: 1px solid blue;
-          pointer-events: all;
-          background-color: #fff;
-          padding-right: 0.4em;
-          &:before{
-            content: "";
-            display:inline-block;
-            $sq:7px;
-            width: $sq; height:$sq;
-            border: 1px solid #000;
-            background-color: #000;
-            margin-right: 0.5em;
-            transition: background-color 0.1s ease-in-out;
-          }
-
-          &.articles-link{
-            margin-left: 4em;
-            text-transform: capitalize;
+        li{
+          @include oblique-list;
+          margin:0;
+          white-space: nowrap;
+          pointer-events: none;
+          span.oblique-wrapper{
+            height:120px; // this is needed to respect the height of oblique links :(
+            display: inline-block;
+            vertical-align: bottom;
+            position: relative;
+            width:1.5em;
           }
           }
-        }
 
 
-        .entree-content{
-          display: inline-block;
-          // outline: 1px solid green;
-          width:0;
-          overflow: hidden;
-          opacity: 0;
-          transition: all 300ms ease-in-out;
-          transition-property: width,opacity;
-          span.oblique-wrapper:first-of-type{
-            margin-left: 0.5em;
-          }
-          span.oblique-wrapper a{
-            text-transform: none;
-            pointer-events: auto;
+          a.term-link, a.articles-link{
+            // outline: 1px solid blue;
+            pointer-events: all;
+            // background-color: #fff;
+            background-color: rgba(255,255,255, 0.6);
+            padding-right: 0.4em;
+            color:black;
+            transition: color 0.3s ease-in-out;
             &:before{
             &:before{
               content: "";
               content: "";
               display:inline-block;
               display:inline-block;
-              $sq:5px;
+              $sq:7px;
               width: $sq; height:$sq;
               width: $sq; height:$sq;
               border: 1px solid #000;
               border: 1px solid #000;
+              background-color: #000;
               margin-right: 0.5em;
               margin-right: 0.5em;
+              transition: background-color 0.1s ease-in-out;
             }
             }
-            &.ajax-loading:before{
-              @include spining-loader-square;
+
+            &.articles-link{
+              margin-left: 4em;
+              text-transform: capitalize;
             }
             }
           }
           }
-          .term-description{
+
+          .entree-content{
             display: inline-block;
             display: inline-block;
-            margin-left: 1.5em;
-            text-align: left;
-            width:250px;
-            word-wrap:break-word;
-            // word-break:break-all;
-            hyphens: auto;
-            white-space: normal;
-            background-color: $transparent-bg;
-            padding:0.5em;
-            padding-bottom:0;
-            p{
-              font-size: 0.65em;
-              margin:0;
+            // outline: 1px solid green;
+            width:0;
+            overflow: hidden;
+            opacity: 0;
+            transition: all 300ms ease-in-out;
+            transition-property: width,opacity;
+            span.oblique-wrapper:first-of-type{
+              margin-left: 0.5em;
+            }
+            span.oblique-wrapper a{
+              text-transform: none;
+              pointer-events: auto;
+              &:before{
+                content: "";
+                display:inline-block;
+                $sq:5px;
+                width: $sq; height:$sq;
+                border: 1px solid #000;
+                margin-right: 0.5em;
+              }
+              &.ajax-loading:before{
+                @include spining-loader-square;
+              }
+            }
+            .term-description{
+              display: inline-block;
+              margin-left: 1.5em;
+              text-align: left;
+              width:250px;
+              word-wrap:break-word;
+              // word-break:break-all;
+              hyphens: auto;
+              white-space: normal;
+              background-color: $transparent-bg;
+              padding:0.5em;
+              padding-bottom:0;
+              p{
+                font-size: 0.65em;
+                margin:0;
+              }
             }
             }
           }
           }
-        }
 
 
-        // TODO: replace variable system by attribute color
-        // a.term-link:before, .entree-content span.oblique-wrapper a:before{
-        //   border-color: attr(color);
-        //   background-color: attr(color);
-        // }
-
-        &[tid='134']{
-          a.term-link:before, .entree-content span.oblique-wrapper a:before{
-            border-color: var(--e-col-134);background-color: var(--e-col-134);}}
-        &[tid='121']{
-          a.term-link:before, .entree-content span.oblique-wrapper a:before{
-            border-color: var(--e-col-121);background-color: var(--e-col-121);}}
-        &[tid='125']{
-          a.term-link:before, .entree-content span.oblique-wrapper a:before{
-            border-color: var(--e-col-125);background-color: var(--e-col-125);}}
-        &[tid='119']{
-          a.term-link:before, .entree-content span.oblique-wrapper a:before{
-            border-color: var(--e-col-119);background-color: var(--e-col-119);}}
-        &[tid='132']{
-          a.term-link:before, .entree-content span.oblique-wrapper a:before{
-            border-color: var(--e-col-132);background-color: var(--e-col-132);}}
-        &[tid='122']{
-          a.term-link:before, .entree-content span.oblique-wrapper a:before{
-            border-color: var(--e-col-122);background-color: var(--e-col-122);}}
-        &[tid='129']{
-          a.term-link:before, .entree-content span.oblique-wrapper a:before{
-            border-color: var(--e-col-129);background-color: var(--e-col-129);}}
-        &[tid='120']{
-          a.term-link:before, .entree-content span.oblique-wrapper a:before{
-            border-color: var(--e-col-120);background-color: var(--e-col-120);}}
-        &[tid='130']{
-          a.term-link:before, .entree-content span.oblique-wrapper a:before{
-            border-color: var(--e-col-130);background-color: var(--e-col-130);}}
-        &[tid='118']{
-          a.term-link:before, .entree-content span.oblique-wrapper a:before{
-            border-color: var(--e-col-118);background-color: var(--e-col-118);}}
-        &[tid='127']{
-          a.term-link:before, .entree-content span.oblique-wrapper a:before{
-            border-color: var(--e-col-127);background-color: var(--e-col-127);}}
-        &[tid='133']{
-          a.term-link:before, .entree-content span.oblique-wrapper a:before{
-            border-color: var(--e-col-133);background-color: var(--e-col-133);}}
-        &[tid='128']{
-          a.term-link:before, .entree-content span.oblique-wrapper a:before{
-            border-color: var(--e-col-128);background-color: var(--e-col-128);}}
-        &[tid='124']{
-          a.term-link:before, .entree-content span.oblique-wrapper a:before{
-            border-color: var(--e-col-124);background-color: var(--e-col-124);}}
-        &[tid='116']{
-          a.term-link:before, .entree-content span.oblique-wrapper a:before{
-            border-color: var(--e-col-116);background-color: var(--e-col-116);}}
-        &[tid='117']{
-          a.term-link:before, .entree-content span.oblique-wrapper a:before{
-            border-color: var(--e-col-117);background-color: var(--e-col-117);}}
-        &[tid='131']{
-          a.term-link:before, .entree-content span.oblique-wrapper a:before{
-            border-color: var(--e-col-131);background-color: var(--e-col-131);}}
-        &[tid='126']{
-          a.term-link:before, .entree-content span.oblique-wrapper a:before{
-            border-color: var(--e-col-126);background-color: var(--e-col-126);}}
-        &[tid='123']{
-          a.term-link:before, .entree-content span.oblique-wrapper a:before{
-            border-color: var(--e-col-123);background-color: var(--e-col-123);}}
-
-        // &.highlighted{
-        //   a.term_link{
-        //     color: red;
-        //   }
-        // }
-        .entree-content span.oblique-wrapper a:not(:hover):not(.is-active):before{background-color: #fff!important;}
-
-        a.articles-link:not(:hover):not(.is-active):before{
-          background-color: #fff!important;
-        }
+          // TODO: replace variable system by attribute color
+          // a.term-link:before, .entree-content span.oblique-wrapper a:before{
+          //   border-color: attr(color);
+          //   background-color: attr(color);
+          // }
 
 
+          &[tid='134']{
+            a.term-link:before, .entree-content span.oblique-wrapper a:before{
+              border-color: var(--e-col-134);background-color: var(--e-col-134);}}
+          &[tid='121']{
+            a.term-link:before, .entree-content span.oblique-wrapper a:before{
+              border-color: var(--e-col-121);background-color: var(--e-col-121);}}
+          &[tid='125']{
+            a.term-link:before, .entree-content span.oblique-wrapper a:before{
+              border-color: var(--e-col-125);background-color: var(--e-col-125);}}
+          &[tid='119']{
+            a.term-link:before, .entree-content span.oblique-wrapper a:before{
+              border-color: var(--e-col-119);background-color: var(--e-col-119);}}
+          &[tid='132']{
+            a.term-link:before, .entree-content span.oblique-wrapper a:before{
+              border-color: var(--e-col-132);background-color: var(--e-col-132);}}
+          &[tid='122']{
+            a.term-link:before, .entree-content span.oblique-wrapper a:before{
+              border-color: var(--e-col-122);background-color: var(--e-col-122);}}
+          &[tid='129']{
+            a.term-link:before, .entree-content span.oblique-wrapper a:before{
+              border-color: var(--e-col-129);background-color: var(--e-col-129);}}
+          &[tid='120']{
+            a.term-link:before, .entree-content span.oblique-wrapper a:before{
+              border-color: var(--e-col-120);background-color: var(--e-col-120);}}
+          &[tid='130']{
+            a.term-link:before, .entree-content span.oblique-wrapper a:before{
+              border-color: var(--e-col-130);background-color: var(--e-col-130);}}
+          &[tid='118']{
+            a.term-link:before, .entree-content span.oblique-wrapper a:before{
+              border-color: var(--e-col-118);background-color: var(--e-col-118);}}
+          &[tid='127']{
+            a.term-link:before, .entree-content span.oblique-wrapper a:before{
+              border-color: var(--e-col-127);background-color: var(--e-col-127);}}
+          &[tid='133']{
+            a.term-link:before, .entree-content span.oblique-wrapper a:before{
+              border-color: var(--e-col-133);background-color: var(--e-col-133);}}
+          &[tid='128']{
+            a.term-link:before, .entree-content span.oblique-wrapper a:before{
+              border-color: var(--e-col-128);background-color: var(--e-col-128);}}
+          &[tid='124']{
+            a.term-link:before, .entree-content span.oblique-wrapper a:before{
+              border-color: var(--e-col-124);background-color: var(--e-col-124);}}
+          &[tid='116']{
+            a.term-link:before, .entree-content span.oblique-wrapper a:before{
+              border-color: var(--e-col-116);background-color: var(--e-col-116);}}
+          &[tid='117']{
+            a.term-link:before, .entree-content span.oblique-wrapper a:before{
+              border-color: var(--e-col-117);background-color: var(--e-col-117);}}
+          &[tid='131']{
+            a.term-link:before, .entree-content span.oblique-wrapper a:before{
+              border-color: var(--e-col-131);background-color: var(--e-col-131);}}
+          &[tid='126']{
+            a.term-link:before, .entree-content span.oblique-wrapper a:before{
+              border-color: var(--e-col-126);background-color: var(--e-col-126);}}
+          &[tid='123']{
+            a.term-link:before, .entree-content span.oblique-wrapper a:before{
+              border-color: var(--e-col-123);background-color: var(--e-col-123);}}
+
+          // &.highlighted{
+          //   a.term_link{
+          //     color: red;
+          //   }
+          // }
+          .entree-content span.oblique-wrapper a:not(:hover):not(.is-active):before{background-color: #fff!important;}
 
 
-        &:not(.opened){
-          a.term-link:not(:hover):not(.highlighted):before{
+          a.articles-link:not(:hover):not(.is-active):before{
             background-color: #fff!important;
             background-color: #fff!important;
           }
           }
-        }
-        &.opened{
-          // outline: 1px solid purple;
-          a.term-link:after {
-            content: '';
-            position: absolute;
-            left: 15px; right:0;
-            bottom: -3px;
-            border-bottom: 1px solid grey;
+          &:not(.opened):not(.highlighted){
+            a.term-link:not(:hover):before{
+              background-color: #fff!important;
+            }
           }
           }
-          .entree-content{
-            width:350px;
-            opacity: 1;
+          &.opened{
+            // outline: 1px solid purple;
+            a.term-link:after {
+              content: '';
+              position: absolute;
+              left: 15px; right:0;
+              bottom: -3px;
+              border-bottom: 1px solid grey;
+            }
+            .entree-content{
+              width:350px;
+              opacity: 1;
+            }
+          }
+          // &:not(:first-of-type) .entree-content{display: none;}
+        }
+      }
+      &.opened, &.highlighted{
+        li:not(.opened):not(.highlighted){
+          a.term-link{
+            color:#a1a1a1;
           }
           }
         }
         }
-        // &:not(:first-of-type) .entree-content{display: none;}
       }
       }
     }
     }
   }
   }
@@ -1854,6 +1867,9 @@ footer{
       }
       }
     }
     }
     .chutier-icon{
     .chutier-icon{
+      &[action="add"]{
+        display:none;
+      }
       position:absolute;
       position:absolute;
       top:0.4em; right:0.4em;
       top:0.4em; right:0.4em;
     }
     }

+ 1 - 1
sites/all/themes/custom/edlptheme/assets/styles/base/_layout.scss

@@ -28,7 +28,7 @@ header[role="banner"]{
   >.wrapper{
   >.wrapper{
     position: relative;
     position: relative;
     padding:0.5em 0;
     padding:0.5em 0;
-    border-bottom: 1px solid red;
+    // border-bottom: 1px solid red;
     // TODO: what header height to fit well with player ??
     // TODO: what header height to fit well with player ??
     height:70px;
     height:70px;
     >.region{
     >.region{

+ 1 - 1
sites/all/themes/custom/edlptheme/edlptheme.theme

@@ -69,7 +69,7 @@ function edlptheme_preprocess_edlp_home(&$vars){
         $cols = 2;
         $cols = 2;
         break;
         break;
       default:
       default:
-        $cols = 2;
+        $cols = 3;
     };
     };
     $node['cols'] = $cols;
     $node['cols'] = $cols;
   }
   }

+ 2 - 2
sites/all/themes/custom/edlptheme/templates/content/edlp-home.html.twig

@@ -26,10 +26,10 @@
   {% endfor %}
   {% endfor %}
 
 
 
 
-  <div class="agenda col col-2">
+  <div class="agenda col col-3">
     <div class="wrapper">
     <div class="wrapper">
       {{ agenda }}
       {{ agenda }}
     </div>
     </div>
   </div>
   </div>
-  
+
 </div>
 </div>

+ 1 - 1
sites/default/config/sync/linkit.linkit_profile.collection.yml

@@ -18,4 +18,4 @@ matchers:
       group_by_bundle: false
       group_by_bundle: false
       include_unpublished: false
       include_unpublished: false
       substitution_type: canonical
       substitution_type: canonical
-      metadata: '[node:langcode]'
+      metadata: ''

+ 1 - 1
sites/default/config/sync/views.view.archive.yml

@@ -223,7 +223,7 @@ display:
       tags: {  }
       tags: {  }
   page_1:
   page_1:
     id: page_1
     id: page_1
-    display_title: Page
+    display_title: Production
     display_plugin: page
     display_plugin: page
     position: 2
     position: 2
     display_options:
     display_options:

+ 1 - 1
sites/default/config/sync/views.view.content.yml

@@ -990,7 +990,7 @@ display:
       path: admin/content/production
       path: admin/content/production
       menu:
       menu:
         type: tab
         type: tab
-        title: Productions
+        title: Content
         description: ''
         description: ''
         expanded: false
         expanded: false
         parent: 'menu_link_content:8b5fed48-c008-4041-9bda-06f997582175'
         parent: 'menu_link_content:8b5fed48-c008-4041-9bda-06f997582175'

+ 1 - 1
sites/default/config/sync/views.view.content_translations.yml

@@ -938,7 +938,7 @@ display:
   page_1:
   page_1:
     display_plugin: page
     display_plugin: page
     id: page_1
     id: page_1
-    display_title: Page
+    display_title: Production
     position: 1
     position: 1
     display_options:
     display_options:
       display_extenders: {  }
       display_extenders: {  }

+ 1 - 1
sites/default/config/sync/views.view.frontpage.yml

@@ -292,7 +292,7 @@ display:
       path: node
       path: node
       display_extenders: {  }
       display_extenders: {  }
     display_plugin: page
     display_plugin: page
-    display_title: Page
+    display_title: Production
     id: page_1
     id: page_1
     position: 1
     position: 1
     cache_metadata:
     cache_metadata:

+ 1 - 1
sites/default/config/sync/views.view.glossary.yml

@@ -432,7 +432,7 @@ display:
       tags: {  }
       tags: {  }
   page_1:
   page_1:
     id: page_1
     id: page_1
-    display_title: Page
+    display_title: Production
     display_plugin: page
     display_plugin: page
     position: 1
     position: 1
     display_options:
     display_options:

+ 1 - 1
sites/default/config/sync/views.view.maillog_overview.yml

@@ -422,7 +422,7 @@ display:
   page_1:
   page_1:
     display_plugin: page
     display_plugin: page
     id: page_1
     id: page_1
-    display_title: Page
+    display_title: Production
     position: 1
     position: 1
     display_options:
     display_options:
       path: admin/reports/maillog
       path: admin/reports/maillog

+ 1 - 1
sites/default/config/sync/views.view.redirect.yml

@@ -583,7 +583,7 @@ display:
   page_1:
   page_1:
     display_plugin: page
     display_plugin: page
     id: page_1
     id: page_1
-    display_title: Page
+    display_title: Production
     position: 1
     position: 1
     display_options:
     display_options:
       display_extenders: {  }
       display_extenders: {  }

+ 1 - 1
sites/default/config/sync/views.view.taxonomy_term.yml

@@ -294,7 +294,7 @@ display:
       tags: {  }
       tags: {  }
   page_1:
   page_1:
     id: page_1
     id: page_1
-    display_title: Page
+    display_title: Production
     display_plugin: page
     display_plugin: page
     position: 1
     position: 1
     display_options:
     display_options:

+ 1 - 1
sites/default/config/sync/views.view.user_admin_people.yml

@@ -887,7 +887,7 @@ display:
   page_1:
   page_1:
     display_plugin: page
     display_plugin: page
     id: page_1
     id: page_1
-    display_title: Page
+    display_title: Production
     position: 1
     position: 1
     display_options:
     display_options:
       path: admin/people/list
       path: admin/people/list

Some files were not shown because too many files changed in this diff