Browse Source

Chapter is quite ok
ajax loaded content
graphics ok
interactivity ok
remains the video interactions

Bachir Soussi Chiadmi 9 years ago
parent
commit
dab5226cd7
30 changed files with 3492 additions and 386 deletions
  1. 1 1
      .gitignore
  2. 2 0
      .htaccess
  3. 1 1
      sites/all/modules/gui/jeemod/jeemod.module
  4. BIN
      sites/all/themes/gui/jee/.sass-cache/06dcbe1fa5b03937e94c01bbbc1f20c6e165e878/jee.scssc
  5. 2 1
      sites/all/themes/gui/jee/bower.json
  6. 42 0
      sites/all/themes/gui/jee/bower_components/Peppermint/.bower.json
  7. 111 0
      sites/all/themes/gui/jee/bower_components/Peppermint/Gruntfile.js
  8. 224 0
      sites/all/themes/gui/jee/bower_components/Peppermint/README.md
  9. 32 0
      sites/all/themes/gui/jee/bower_components/Peppermint/bower.json
  10. 716 0
      sites/all/themes/gui/jee/bower_components/Peppermint/dist/peppermint.js
  11. 8 0
      sites/all/themes/gui/jee/bower_components/Peppermint/dist/peppermint.min.js
  12. 62 0
      sites/all/themes/gui/jee/bower_components/Peppermint/dist/peppermint.required.css
  13. 154 0
      sites/all/themes/gui/jee/bower_components/Peppermint/dist/peppermint.suggested.css
  14. 493 0
      sites/all/themes/gui/jee/bower_components/Peppermint/dist/pure/peppermint.pure.js
  15. 8 0
      sites/all/themes/gui/jee/bower_components/Peppermint/dist/pure/peppermint.pure.min.js
  16. 22 0
      sites/all/themes/gui/jee/bower_components/Peppermint/package.json
  17. 90 0
      sites/all/themes/gui/jee/bower_components/Peppermint/src/peppermint.appearance.css
  18. 485 0
      sites/all/themes/gui/jee/bower_components/Peppermint/src/peppermint.js
  19. 60 0
      sites/all/themes/gui/jee/bower_components/Peppermint/src/peppermint.required.css
  20. 308 127
      sites/all/themes/gui/jee/css/jee.css
  21. 400 214
      sites/all/themes/gui/jee/css/jee.scss
  22. 3 1
      sites/all/themes/gui/jee/jee.info
  23. 196 17
      sites/all/themes/gui/jee/js/jee.js
  24. 17 5
      sites/all/themes/gui/jee/preprocess/html.pre.php
  25. 7 0
      sites/all/themes/gui/jee/templates/field--field-partie--chapter.tpl.php
  26. 1 1
      sites/all/themes/gui/jee/templates/field.tpl.php
  27. 1 2
      sites/all/themes/gui/jee/templates/html.tpl.php
  28. 21 0
      sites/all/themes/gui/jee/templates/node--chapitre--teaser.tpl.php
  29. 8 16
      sites/all/themes/gui/jee/templates/node--chapitre.tpl.php
  30. 17 0
      sites/all/themes/gui/jee/templates/video-embed-field-embed-code.tpl.php

+ 1 - 1
.gitignore

@@ -6,4 +6,4 @@ sites/*/files
 sites/*/private
 
 *.sublime*
-.sass-cache
+sites/all/themes/gui/jee/.sass-cache

+ 2 - 0
.htaccess

@@ -141,3 +141,5 @@ DirectoryIndex index.php index.html index.htm
     </FilesMatch>
   </IfModule>
 </IfModule>
+
+AddType application/x-web-app-manifest+json .webapp

+ 1 - 1
sites/all/modules/gui/jeemod/jeemod.module

@@ -12,7 +12,7 @@ function jeemod_menu() {
   );
 
   $items['jee/chapter'] = $base+array(
-    'title' => 'Matrio base ajax',
+    'title' => 'jee',
     'page callback' => 'jeemod_chapter',
     'page arguments' => array(2),
     'access callback' => TRUE,

BIN
sites/all/themes/gui/jee/.sass-cache/06dcbe1fa5b03937e94c01bbbc1f20c6e165e878/jee.scssc


+ 2 - 1
sites/all/themes/gui/jee/bower.json

@@ -3,7 +3,8 @@
   "dependencies": {
     "foundation": "~5.5.0",
     "jquery.transit": "~0.9.12",
-    "jquery.pep": "~0.6.3"
+    "jquery.pep": "~0.6.3",
+    "Peppermint": "~1.3.7"
   },
   "version": "7.x-0.1",
   "authors": [

+ 42 - 0
sites/all/themes/gui/jee/bower_components/Peppermint/.bower.json

@@ -0,0 +1,42 @@
+{
+  "name": "Peppermint",
+  "version": "1.3.7",
+  "homepage": "http://wd.dizaina.net/en/scripts/peppermint/",
+  "authors": [
+    "Oleg Korsunsky <wd@dizaina.net>"
+  ],
+  "description": "Responsive touch-enabled slider. Tiny, supports mouse and all sorts of touch, library agnostic.",
+  "main": [
+    "dist/peppermint.min.js",
+    "dist/peppermint.suggested.css"
+  ],
+  "keywords": [
+    "touch",
+    "touch-events",
+    "pointer-events",
+    "mouse-events",
+    "slider",
+    "carousel",
+    "gallery",
+    "vanilla-js",
+    "framework-agnostic",
+    "library-agnostic"
+  ],
+  "license": "MIT",
+  "ignore": [
+    "**/.*",
+    "node_modules",
+    "bower_components",
+    "test"
+  ],
+  "_release": "1.3.7",
+  "_resolution": {
+    "type": "version",
+    "tag": "1.3.7",
+    "commit": "cec00832caa3a1940801a0b20f84c8b9c8518b1f"
+  },
+  "_source": "git://github.com/wilddeer/Peppermint.git",
+  "_target": "~1.3.7",
+  "_originalSource": "Peppermint",
+  "_direct": true
+}

+ 111 - 0
sites/all/themes/gui/jee/bower_components/Peppermint/Gruntfile.js

@@ -0,0 +1,111 @@
+/*global module */
+module.exports = function(grunt) {
+    'use strict';
+
+    grunt.initConfig({
+        pkg: grunt.file.readJSON('package.json'),
+        banner: '/*!\n * Peppermint touch slider\n * v. <%= pkg.version %> | <%= pkg.homepage %>\n * Copyright <%= pkg.author.name %> | <%= pkg.author.url %>\n *\n * Depends on Event Burrito (included) | https://github.com/wilddeer/Event-Burrito\n * MIT License\n */\n',
+        bannerPure: '/*!\n * Peppermint touch slider\n * v. <%= pkg.version %> | <%= pkg.homepage %>\n * Copyright <%= pkg.author.name %> | <%= pkg.author.url %>\n *\n * Depends on Event Burrito | https://github.com/wilddeer/Event-Burrito\n * MIT License\n */\n',
+        uglify: {
+            options: {
+                mangle: {
+                    except: ['Peppermint', '$', 'jQuery', 'EventBurrito']
+                }
+            },
+            peppermint: {
+                files: {
+                    'temp/peppermint.min.js': ['src/peppermint.js']
+                }
+            },
+            burrito: {
+                files: {
+                    'temp/eventburrito.min.js': ['src/burrito/eventburrito.js']
+                }
+            }
+        },
+
+        concat: {
+            options: {
+                banner: '<%= banner %>',
+                separator: '\n'
+            },
+            full: {
+                src: ['src/peppermint.js','src/burrito/eventburrito.js'],
+                dest: 'dist/peppermint.js',
+            },
+            min: {
+                src: ['temp/peppermint.min.js','temp/eventburrito.min.js'],
+                dest: 'dist/peppermint.min.js',
+            },
+            pureFull: {
+                options: {
+                    banner: '<%= bannerPure %>'
+                },
+                src: ['src/peppermint.js'],
+                dest: 'dist/pure/peppermint.pure.js'
+            },
+            pureMin: {
+                options: {
+                    banner: '<%= bannerPure %>'
+                },
+                src: ['temp/peppermint.min.js'],
+                dest: 'dist/pure/peppermint.pure.min.js'
+            },
+            cssRequired: {
+                options: {
+                    banner: '/* Peppermint minimal required styles */\n\n'
+                },
+                src: ['src/peppermint.required.css'],
+                dest: 'dist/peppermint.required.css'
+            },
+            cssSuggested: {
+                options: {
+                    banner: '/* Peppermint required styles + default appearance styles */\n\n',
+                    separator: '\n\n/* default appearance styles */\n'
+                },
+                src: ['src/peppermint.required.css', 'src/peppermint.appearance.css'],
+                dest: 'dist/peppermint.suggested.css'
+            }
+        },
+
+        bump: {
+            options: {
+                files: ['package.json', 'bower.json'],
+                updateConfigs: ['pkg'],
+                commit: true,
+                commitMessage: 'tagging v. %VERSION%',
+                commitFiles: ['.'],
+                createTag: true,
+                tagName: '%VERSION%',
+                tagMessage: 'tagging v. %VERSION%',
+                push: false
+            }
+        },
+
+        shell: {
+            push: {
+                command: 'git push'
+            },
+
+            pushTags: {
+                command: 'git push --tags'
+            }
+        },
+
+        watch: {
+            files: ['src/**/*.js', 'src/**/*.css', 'package.json'],
+            tasks: ['build']
+        },
+    });
+
+    // build
+    grunt.loadNpmTasks('grunt-contrib-uglify');
+    grunt.loadNpmTasks('grunt-contrib-concat');
+    grunt.loadNpmTasks('grunt-contrib-watch');
+    grunt.loadNpmTasks('grunt-bump');
+    grunt.loadNpmTasks('grunt-shell');
+    grunt.registerTask('build', ['uglify', 'concat']);
+    grunt.registerTask('release', ['bump-only:patch', 'uglify', 'concat', 'bump-commit', 'shell:push', 'shell:pushTags']);
+    grunt.registerTask('w', ['build', 'watch']);
+    grunt.registerTask('default', 'build');
+};

+ 224 - 0
sites/all/themes/gui/jee/bower_components/Peppermint/README.md

@@ -0,0 +1,224 @@
+#Peppermint touch slider
+
+[Check out the demo](http://wd.dizaina.net/en/scripts/peppermint/)
+
+Yet another touch slider. Only better.
+
+- Works with mouse, [Touch Events](http://www.w3.org/TR/touch-events/), [Pointer Events](http://www.w3.org/TR/pointerevents/), old [IE10 Pointer Events](http://msdn.microsoft.com/en-us/library/ie/hh673557\(v=vs.85\).aspx)
+- Responsive, works on iPhones, Androids, Windows Phones, Blackberries, Windows 8 devices
+- IE7+ compatible
+- Library agnostic. If jQuery is available, registers itself as a plugin.
+- Uses CSS3 transforms &amp; animations, falls back to timer animations when necessary
+- Only 7.7 Kb minified
+- Perfomance-optimized `touch` functions
+- API and callback functions for extensibility
+- [Doesn't break](http://wd.dizaina.net/en/internet-maintenance/js-sliders-and-the-tab-key/) when <kbd>tab</kbd>&rsquo;bing
+
+##Kit
+
+- **[peppermint.min.js](https://raw.github.com/wilddeer/Peppermint/master/dist/peppermint.min.js)** – minified production script
+- **[peppermint.required.css](https://raw.github.com/wilddeer/Peppermint/master/dist/peppermint.required.css)** – styles required for proper functioning
+- **[peppermint.suggested.css](https://raw.github.com/wilddeer/Peppermint/master/dist/peppermint.suggested.css)** – default styles to start with (required styles included)
+
+Also available in [Bower](http://bower.io):
+
+```
+bower install Peppermint --save
+```
+
+##Usage
+
+HTML markup:
+
+```html
+<div class="peppermint peppermint-inactive" id="peppermint">
+  <figure> ... </figure>
+
+  <figure> ... </figure>
+
+  <figure> ... </figure>
+</div>
+```
+
+Javascript:
+
+```javascript
+var slider = Peppermint(document.getElementById('peppermint'));
+```
+
+Or javascript + jQuery:
+
+```javascript
+$('.peppermint').Peppermint();
+```
+    
+`peppermint-inactive` class is not required. It is replaced with `peppermint-active` during setup.
+
+You are free to use any other tag instead of `figure`. When using `figure`, don't forget to include [html5shiv](https://github.com/aFarkas/html5shiv), otherwise it won't work in old IEs.
+
+Place anything you want within the slides.
+
+##Settings
+
+Peppermint can take settings object as an optional second parameter (first when using jQuery). Default settings:
+
+```javascript
+{
+  //transition time when changing slides, ms
+  speed: 300,
+
+  //transition time when changing slides after touch, ms
+  touchSpeed: 300,
+
+  //slideshow enabled
+  slideshow: false,
+
+  //slideshow interval, ms
+  slideshowInterval: 4000,
+
+  //stop slideshow after user interacts with the slider
+  stopSlideshowAfterInteraction: false,
+
+  //slide number to start with
+  startSlide: 0,
+
+  //use mouse to drag the slider
+  mouseDrag: true,
+
+  //don't initialize Peppermint if there's only one slide
+  disableIfOneSlide: true,
+
+  //Prefix to be used with Peppermint classes,
+  //such as `inactive`, `active`, `mouse`, `drag`, etc.
+  //Don't forget to change the stylesheet appropriately!
+  cssPrefix: 'peppermint-',
+
+  //show dots
+  dots: false,
+
+  //prepend dots to dotsContainer (default is append)
+  dotsPrepend: false,
+
+  //Element to contain dots, defaults to Peppermint's root element.
+  //Can be anywhere on the page.
+  dotsContainer: undefined,
+
+  //element containing slides, defaults to Peppermint's root element
+  slidesContainer: undefined,
+
+  //Callback function, runs at slide change.
+  //Receives slide number as a parameter.
+  onSlideChange: undefined,
+
+  //Callback function, runs at setup end.
+  //Receives total number of slides as a parameter.
+  onSetup: undefined
+}
+```
+
+####Examples
+
+JS:
+
+```javascript
+var slider = Peppermint(document.getElementById('peppermint'), {
+  dots: true,
+  slideshow: true,
+  speed: 500,
+  slideshowInterval: 5000,
+  stopSlideshowAfterInteraction: true,
+  onSetup: function(n) {
+    console.log('Peppermint setup done. Slides found: ' + n);
+  }
+});
+```
+
+JS + jQuery:
+
+```javascript
+$('.peppermint').Peppermint({
+  dots: true,
+  slideshow: true,
+  speed: 500,
+  slideshowInterval: 5000,
+  stopSlideshowAfterInteraction: true,
+  onSetup: function(n) {
+    console.log('Peppermint setup done. Slides found: ' + n);
+  }
+});
+```
+
+##API
+
+Peppermint exposes a set of functions upon installation. These functions can be used to controll the slider externally:
+
+`slideTo(n)` – change active slide to `n`;
+
+`next()` – next slide;
+
+`prev()` – previous slide;
+
+`start()` – start slideshow;
+
+`stop()` – stop slideshow;
+
+`pause()` – pause slideshow until the next slide change;
+
+`getCurrentPos()` – get current slide number;
+
+`getSlidesNumber()` – get total number of slides;
+
+`recalcWidth()` – recalculate slider's and slides' widths. Usefull when the container width is changed. Width recalculation runs automatically on window resize and device orientation change.
+
+####Examples
+
+JS:
+
+```javascript
+//init Peppermint and save the API object
+var slider = Peppermint(document.getElementById('peppermint')),
+    //save links to HTML nodes
+    rightArr = document.getElementById('right-arr'),
+    leftArr = document.getElementById('left-arr'),
+    getSlidesNumberButton = document.getElementById('getslidesnumber');
+
+//click `#right-arr` to go to the next slide
+rightArr.addEventListener('click', slider.next, false);
+
+//click `#left-arr` to go to the previous slide
+leftArr.addEventListener('click', slider.prev, false);
+
+//click `#getslidesnumber` to alert total number of slides
+getSlidesNumberButton.addEventListener('click', function() {
+  alert('There are ' + slider.getSlidesNumber() + ' slides');
+}, false);
+```
+
+JS + jQuery:
+
+```javascript
+//save jQuery link to slider's block
+var slider = $('#peppermint');
+
+//init Peppermint
+slider.Peppermint();
+
+//click `#right-arr` to go to the next slide
+$('#right-arr').click(slider.data('Peppermint').next);
+
+//click `#left-arr` to go to the previous slide
+$('#left-arr').click(slider.data('Peppermint').prev);
+
+//click `#getslidesnumber` to alert total number of slides
+$('#getslidesnumber').click(function() {
+    alert('There are ' + slider.data('Peppermint').getSlidesNumber() + ' slides');
+});
+```
+
+##Using Peppermint?
+
+Drop me a link &rarr; [:envelope: wd@dizaina.net](mailto:wd@dizaina.net).
+    
+##License
+
+[MIT license](http://opensource.org/licenses/MIT).

+ 32 - 0
sites/all/themes/gui/jee/bower_components/Peppermint/bower.json

@@ -0,0 +1,32 @@
+{
+  "name": "Peppermint",
+  "version": "1.3.7",
+  "homepage": "http://wd.dizaina.net/en/scripts/peppermint/",
+  "authors": [
+    "Oleg Korsunsky <wd@dizaina.net>"
+  ],
+  "description": "Responsive touch-enabled slider. Tiny, supports mouse and all sorts of touch, library agnostic.",
+  "main": [
+    "dist/peppermint.min.js",
+    "dist/peppermint.suggested.css"
+  ],
+  "keywords": [
+    "touch",
+    "touch-events",
+    "pointer-events",
+    "mouse-events",
+    "slider",
+    "carousel",
+    "gallery",
+    "vanilla-js",
+    "framework-agnostic",
+    "library-agnostic"
+  ],
+  "license": "MIT",
+  "ignore": [
+    "**/.*",
+    "node_modules",
+    "bower_components",
+    "test"
+  ]
+}

+ 716 - 0
sites/all/themes/gui/jee/bower_components/Peppermint/dist/peppermint.js

@@ -0,0 +1,716 @@
+/*!
+ * Peppermint touch slider
+ * v. 1.3.7 | https://github.com/wilddeer/Peppermint
+ * Copyright Oleg Korsunsky | http://wd.dizaina.net/
+ *
+ * Depends on Event Burrito (included) | https://github.com/wilddeer/Event-Burrito
+ * MIT License
+ */
+function Peppermint(_this, options) {
+    var slider = {
+            slides: [],
+            dots: [],
+            left: 0
+        },
+        slidesNumber,
+        flickThreshold = 200, //Flick threshold (ms)
+        activeSlide = 0,
+        slideWidth,
+        dotBlock,
+        slideBlock,
+        slideshowTimeoutId,
+        slideshowActive,
+        animationTimer;
+
+    //default options
+    var o = {
+        speed: 300, //transition between slides in ms
+        touchSpeed: 300, //transition between slides in ms after touch
+        slideshow: false, //launch slideshow at start
+        slideshowInterval: 4000,
+        stopSlideshowAfterInteraction: false, //stop slideshow after user interaction
+        startSlide: 0, //first slide to show
+        mouseDrag: true, //enable mouse drag
+        disableIfOneSlide: true,
+        cssPrefix: 'peppermint-',
+        dots: false, //show dots
+        dotsPrepend: false, //dots before slides
+        dotsContainer: undefined,
+        slidesContainer: undefined,
+        onSlideChange: undefined, //slide change callback
+        onSetup: undefined //setup callback
+    };
+
+    //merge user options into defaults
+    options && mergeObjects(o, options);
+
+    var classes = {
+        inactive: o.cssPrefix + 'inactive',
+        active: o.cssPrefix + 'active',
+        mouse: o.cssPrefix + 'mouse',
+        drag: o.cssPrefix + 'drag',
+        slides: o.cssPrefix + 'slides',
+        dots: o.cssPrefix + 'dots',
+        activeDot: o.cssPrefix + 'active-dot',
+        mouseClicked: o.cssPrefix + 'mouse-clicked'
+    };
+
+    //feature detects
+    var support = {
+        transforms: testProp('transform'),
+        transitions: testProp('transition')
+    };
+
+    function mergeObjects(targetObj, sourceObject) {
+        for (var key in sourceObject) {
+            if (sourceObject.hasOwnProperty(key)) {
+                targetObj[key] = sourceObject[key];
+            }
+        }
+    }
+
+    function testProp(prop) {
+        var prefixes = ['Webkit', 'Moz', 'O', 'ms'],
+            block = document.createElement('div');
+
+        if (block.style[prop] !== undefined) return true;
+
+        prop = prop.charAt(0).toUpperCase() + prop.slice(1);
+        for (var i in prefixes) {
+            if (block.style[prefixes[i]+prop] !== undefined) return true;
+        }
+
+        return false;
+    }
+
+    function addClass(el, cl) {
+        if (!new RegExp('(\\s|^)'+cl+'(\\s|$)').test(el.className)) {
+            el.className += ' ' + cl;
+        }
+    }
+
+    function removeClass(el, cl) {
+        el.className = el.className.replace(new RegExp('(\\s+|^)'+cl+'(\\s+|$)', 'g'), ' ').replace(/^\s+|\s+$/g, '');
+    }
+
+    //n - slide number (starting from 0)
+    //speed - transition in ms, can be omitted
+    function changeActiveSlide(n, speed) {
+        if (n<0) {
+            n = 0;
+        }
+        else if (n>slidesNumber-1) {
+            n = slidesNumber-1;
+        }
+
+        //change active dot
+        for (var i = slider.dots.length - 1; i >= 0; i--) {
+            removeClass(slider.dots[i], classes.activeDot);
+        }
+
+        addClass(slider.dots[n], classes.activeDot);
+
+        activeSlide = n;
+
+        changePos(-n*slider.width, (speed===undefined?o.speed:speed));
+
+        //reset slideshow timeout whenever active slide is changed for whatever reason
+        stepSlideshow();
+
+        //API callback
+        o.onSlideChange && o.onSlideChange(n);
+
+        return n;
+    }
+
+    //changes position of the slider (in px) with given speed (in ms)
+    function changePos(pos, speed) {
+        var time = speed?speed+'ms':'';
+
+        slideBlock.style.webkitTransitionDuration =
+        slideBlock.style.MozTransitionDuration =
+        slideBlock.style.msTransitionDuration =
+        slideBlock.style.OTransitionDuration =
+        slideBlock.style.transitionDuration = time;
+
+        setPos(pos);
+    }
+
+    //fallback to `setInterval` animations for UAs with no CSS transitions
+    function changePosFallback(pos, speed) {
+        animationTimer && clearInterval(animationTimer);
+
+        if (!speed) {
+            setPos(pos);
+            return;
+        }
+
+        var startTime = +new Date,
+            startPos = slider.left;
+
+        animationTimer = setInterval(function() {
+            //rough bezier emulation
+            var diff, y,
+                elapsed = +new Date - startTime,
+                f = elapsed / speed,
+                bezier = [0, 0.7, 1, 1];
+
+            function getPoint(p1, p2) {
+                return (p2-p1)*f + p1;
+            }
+
+            if (f >= 1) {
+                setPos(pos);
+                clearInterval(animationTimer);
+                return;
+            }
+
+            diff = pos - startPos;
+
+            y = getPoint(
+                    getPoint(getPoint(bezier[0], bezier[1]), getPoint(bezier[1], bezier[2])),
+                    getPoint(getPoint(bezier[1], bezier[2]), getPoint(bezier[2], bezier[3]))
+                    );
+
+            setPos(Math.floor(y*diff + startPos));
+        }, 15);
+    }
+
+    //sets position of the slider (in px)
+    function setPos(pos) {
+        slideBlock.style.webkitTransform = 'translate('+pos+'px,0) translateZ(0)';
+        slideBlock.style.msTransform =
+        slideBlock.style.MozTransform =
+        slideBlock.style.OTransform =
+        slideBlock.style.transform = 'translateX('+pos+'px)';
+
+        slider.left = pos;
+    }
+
+    //`setPos` fallback for UAs with no CSS transforms support
+    function setPosFallback(pos) {
+        slideBlock.style.left = pos+'px';
+
+        slider.left = pos;
+    }
+
+    function nextSlide() {
+        var n = activeSlide + 1;
+
+        if (n > slidesNumber - 1) {
+            n = 0;
+        }
+
+        return changeActiveSlide(n);
+    }
+
+    function prevSlide() {
+        var n = activeSlide - 1;
+
+        if (n < 0) {
+            n = slidesNumber - 1;
+        }
+
+        return changeActiveSlide(n);
+    }
+
+    function startSlideshow() {
+        slideshowActive = true;
+        stepSlideshow();
+    }
+
+    //sets or resets timeout before switching to the next slide
+    function stepSlideshow() {
+        if (slideshowActive) {
+            slideshowTimeoutId && clearTimeout(slideshowTimeoutId);
+
+            slideshowTimeoutId = setTimeout(function() {
+                nextSlide();
+            },
+            o.slideshowInterval);
+        }
+    }
+
+    //pauses slideshow until `stepSlideshow` is invoked
+    function pauseSlideshow() {
+        slideshowTimeoutId && clearTimeout(slideshowTimeoutId);
+    }
+
+    function stopSlideshow() {
+        slideshowActive = false;
+        slideshowTimeoutId && clearTimeout(slideshowTimeoutId);
+    }
+
+    //this should be invoked when the width of the slider is changed
+    function onWidthChange() {
+        slider.width = _this.offsetWidth;
+
+        //have to do this in `px` because of webkit's rounding errors :-(
+        slideBlock.style.width = slider.width*slidesNumber+'px';
+        for (var i = 0; i < slidesNumber; i++) {
+            slider.slides[i].style.width = slider.width+'px';
+        }
+        changePos(-activeSlide*slider.width);
+    }
+
+    function addEvent(el, event, func, bool) {
+        if (!event) return;
+
+        el.addEventListener? el.addEventListener(event, func, !!bool): el.attachEvent('on'+event, func);
+    }
+
+    //init touch events
+    function touchInit() {
+        EventBurrito(slideBlock, {
+            mouse: o.mouseDrag,
+            start: function(event, start) {
+                //firefox doesn't want to apply cursor from `:active` CSS rule, have to add a class :-/
+                addClass(_this, classes.drag);
+            },
+            move: function(event, start, diff, speed) {
+                pauseSlideshow(); //pause the slideshow when touch is in progress
+
+                //if it's first slide and moving left or last slide and moving right -- resist!
+                diff.x =
+                diff.x /
+                    (
+                        (!activeSlide && diff.x > 0
+                        || activeSlide == slidesNumber - 1 && diff.x < 0)
+                        ?
+                        (Math.abs(diff.x)/slider.width*2 + 1)
+                        :
+                        1
+                    );
+
+                //change position of the slider appropriately
+                changePos(diff.x - slider.width*activeSlide);
+            },
+            end: function(event, start, diff, speed) {
+                if (diff.x) {
+                    var ratio = Math.abs(diff.x)/slider.width,
+                        //How many slides to skip. Remainder > 0.25 counts for one slide.
+                        skip = Math.floor(ratio) + (ratio - Math.floor(ratio) > 0.25?1:0),
+                        //Super-duper formula to detect a flick.
+                        //First, it's got to be fast enough.
+                        //Second, if `skip==0`, 20px move is enough to switch to the next slide.
+                        //If `skip>0`, it's enough to slide to the middle of the slide minus `slider.width/9` to skip even further.
+                        flick = diff.time < flickThreshold+flickThreshold*skip/1.8 && Math.abs(diff.x) - skip*slider.width > (skip?-slider.width/9:20);
+
+                    skip += (flick?1:0);
+
+                    if (diff.x < 0) {
+                        changeActiveSlide(activeSlide+skip, o.touchSpeed);
+                    }
+                    else {
+                        changeActiveSlide(activeSlide-skip, o.touchSpeed);
+                    }
+
+                    o.stopSlideshowAfterInteraction && stopSlideshow();
+                }
+
+                //remove the drag class
+                removeClass(_this, classes.drag);
+            }
+        });
+    }
+
+    function setup() {
+        var slideSource = o.slidesContainer || _this,
+            dotsTarget = o.dotsContainer || _this;
+
+        if (o.disableIfOneSlide && slideSource.children.length <= 1) return;
+
+        //If current UA doesn't support css transforms or transitions -- use fallback functions.
+        //(Using separate functions instead of checks for better performance)
+        if (!support.transforms || !!window.opera) setPos = setPosFallback;
+        if (!support.transitions || !!window.opera) changePos = changePosFallback;
+
+        slideBlock = o.slidesContainer || document.createElement('div');
+        addClass(slideBlock, classes.slides);
+
+        //get slides & generate dots
+        for (var i = 0, l = slideSource.children.length; i < l; i++) {
+            var slide = slideSource.children[i],
+                dot = document.createElement('li');
+
+            slider.slides.push(slide);
+
+            //`tabindex` makes dots tabbable
+            dot.setAttribute('tabindex', '0');
+            dot.setAttribute('role', 'button');
+
+            dot.innerHTML = '<span></span>';
+
+            (function(x, dotClosure) {
+                //bind events to dots
+                addEvent(dotClosure, 'click', function(event) {
+                    changeActiveSlide(x);
+                    o.stopSlideshowAfterInteraction && stopSlideshow();
+                });
+
+                //Bind the same function to Enter key except for the `blur` part -- I dont't want
+                //the focus to be lost when the user is using his keyboard to navigate.
+                addEvent(dotClosure, 'keyup', function(event) {
+                    if (event.keyCode == 13) {
+                        changeActiveSlide(x);
+                        o.stopSlideshowAfterInteraction && stopSlideshow();
+                    }
+                });
+
+                //Don't want to disable outlines completely for accessibility reasons.
+                //Instead, add class with `outline: 0` on mouseup and remove it on blur.
+                addEvent(dotClosure, 'mouseup', function(event) {
+                    addClass(dotClosure, classes.mouseClicked);
+                });
+
+                //capturing fixes IE bug
+                addEvent(dotClosure, 'blur', function(){
+                    removeClass(dotClosure, classes.mouseClicked);
+                }, true);
+
+                //This solves tabbing problems:
+                //When an element inside a slide catches focus we switch to that slide
+                //and reset `scrollLeft` of the slider block.
+                //`SetTimeout` solves Chrome's bug.
+                //Event capturing is used to catch events on the slide level.
+                //Since older IEs don't have capturing, `onfocusin` is used as a fallback.
+                addEvent(slide, 'focus', slide.onfocusin = function(e) {
+                    _this.scrollLeft = 0;
+                    setTimeout(function() {
+                        _this.scrollLeft = 0;
+                    }, 0);
+                    changeActiveSlide(x);
+                }, true);
+            })(i, dot)
+
+            slider.dots.push(dot);
+        }
+
+        slidesNumber = slider.slides.length;
+
+        slideWidth = 100/slidesNumber;
+
+        addClass(_this, classes.active);
+        removeClass(_this, classes.inactive);
+        o.mouseDrag && addClass(_this, classes.mouse);
+
+        slider.width = _this.offsetWidth;
+
+        //had to do this in `px` because of webkit's rounding errors :-(
+        slideBlock.style.width = slider.width*slidesNumber+'px';
+        for (var i = 0; i < slidesNumber; i++) {
+            slider.slides[i].style.width = slider.width+'px';
+            slideBlock.appendChild(slider.slides[i]);
+        }
+
+        if (!o.slidesContainer) _this.appendChild(slideBlock);
+
+        //append dots
+        if (o.dots && slidesNumber > 1) {
+            dotBlock = document.createElement('ul');
+            addClass(dotBlock, classes.dots);
+
+            for (var i = 0, l = slider.dots.length; i < l; i++) {
+                dotBlock.appendChild(slider.dots[i]);
+            }
+
+            if (o.dotsPrepend) {
+                dotsTarget.insertBefore(dotBlock,dotsTarget.firstChild);
+            }
+            else {
+                dotsTarget.appendChild(dotBlock);
+            }
+        }
+
+        //watch for slider width changes
+        addEvent(window, 'resize', onWidthChange);
+        addEvent(window, 'orientationchange', onWidthChange);
+
+        //init first slide, timeout to expose the API first
+        setTimeout(function() {
+            changeActiveSlide(o.startSlide, 0);
+        }, 0);
+
+        //init slideshow
+        if (o.slideshow) startSlideshow();
+
+        touchInit();
+
+        //API callback, timeout to expose the API first
+        setTimeout(function() {
+            o.onSetup && o.onSetup(slidesNumber);
+        }, 0);
+    }
+
+    //Init
+    setup();
+
+    //expose the API
+    return {
+        slideTo: function(slide) {
+            return changeActiveSlide(parseInt(slide, 10));
+        },
+
+        next: nextSlide,
+
+        prev: prevSlide,
+
+        //start slideshow
+        start: startSlideshow,
+
+        //stop slideshow
+        stop: stopSlideshow,
+
+        //pause slideshow until the next slide change
+        pause: pauseSlideshow,
+
+        //get current slide number
+        getCurrentPos: function() {
+            return activeSlide;
+        },
+
+        //get total number of slides
+        getSlidesNumber: function() {
+            return slidesNumber;
+        },
+
+        //invoke this when the slider's width is changed
+        recalcWidth: onWidthChange
+    };
+};
+
+//if jQuery is present -- create a plugin
+if (window.jQuery) {
+    (function($) {
+        $.fn.Peppermint = function(options) {
+            this.each(function() {
+                $(this).data('Peppermint', Peppermint(this, options));
+            });
+
+            return this;
+        };
+    })(window.jQuery);
+}
+
+/*!
+ * Event Burrito is a touch / mouse / pointer event unifier
+ * https://github.com/wilddeer/Event-Burrito
+ * Copyright Oleg Korsunsky | http://wd.dizaina.net/
+ *
+ * MIT License
+ */
+function EventBurrito(_this, options) {
+
+    var noop = function() {},
+        o = {
+            preventDefault: true,
+            clickTolerance: 0,
+            preventScroll: false,
+            mouse: true,
+            start: noop,
+            move: noop,
+            end: noop,
+            click: noop
+        };
+
+    //merge user options into defaults
+    options && mergeObjects(o, options);
+
+    var support = {
+            pointerEvents: !!window.navigator.pointerEnabled,
+            msPointerEvents: !!window.navigator.msPointerEnabled
+        },
+        start = {},
+        diff = {},
+        speed = {},
+        stack = [],
+        listeners = [],
+        isScrolling,
+        eventType,
+        clicksAllowed = true, //flag allowing default click actions (e.g. links)
+        eventModel = (support.pointerEvents? 1 : (support.msPointerEvents? 2 : 0)),
+        events = [
+            ['touchstart', 'touchmove', 'touchend', 'touchcancel'], //touch events
+            ['pointerdown', 'pointermove', 'pointerup', 'pointercancel'], //pointer events
+            ['MSPointerDown', 'MSPointerMove', 'MSPointerUp', 'MSPointerCancel'], //IE10 pointer events
+            ['mousedown', 'mousemove', 'mouseup', false] //mouse events
+        ],
+        //some checks for different event types
+        checks = [
+            //touch events
+            function(e) {
+                //skip the event if it's multitouch or pinch move
+                return (e.touches && e.touches.length > 1) || (e.scale && e.scale !== 1);
+            },
+            //pointer events
+            function(e) {
+                //Skip it, if:
+                //1. event is not primary (other pointers during multitouch),
+                //2. left mouse button is not pressed,
+                //3. mouse drag is disabled and event is not touch
+                return !e.isPrimary || (e.buttons && e.buttons !== 1) || (!o.mouse && e.pointerType !== 'touch' && e.pointerType !== 'pen');
+            },
+            //IE10 pointer events
+            function(e) {
+                //same checks as in pointer events
+                return !e.isPrimary || (e.buttons && e.buttons !== 1) || (!o.mouse && e.pointerType !== e.MSPOINTER_TYPE_TOUCH && e.pointerType !== e.MSPOINTER_TYPE_PEN);
+            },
+            //mouse events
+            function(e) {
+                //skip the event if left mouse button is not pressed
+                //in IE7-8 `buttons` is not defined, in IE9 LMB is 0
+                return (e.buttons && e.buttons !== 1);
+            }
+        ];
+
+    function mergeObjects(targetObj, sourceObject) {
+        for (var key in sourceObject) {
+            if (sourceObject.hasOwnProperty(key)) {
+                targetObj[key] = sourceObject[key];
+            }
+        }
+    }
+
+    function addEvent(el, event, func, bool) {
+        if (!event) return;
+
+        el.addEventListener? el.addEventListener(event, func, !!bool): el.attachEvent('on'+event, func);
+
+        //return event remover to easily remove anonymous functions later
+        return {
+            remove: function() {
+                removeEvent(el, event, func, bool);
+            }
+        };
+    }
+
+    function removeEvent(el, event, func, bool) {
+        if (!event) return;
+
+        el.removeEventListener? el.removeEventListener(event, func, !!bool): el.detachEvent('on'+event, func);
+    }
+
+    function preventDefault(event) {
+        event.preventDefault? event.preventDefault() : event.returnValue = false;
+    }
+
+    function getDiff(event) {
+        diff = {
+            x: (eventType? event.clientX : event.touches[0].clientX) - start.x,
+            y: (eventType? event.clientY : event.touches[0].clientY) - start.y,
+
+            time: Number(new Date) - start.time
+        };
+
+        if (diff.time - stack[stack.length - 1].time) {
+            for (var i = 0; i < stack.length - 1 && diff.time - stack[i].time > 80; i++);
+
+            speed = {
+                x: (diff.x - stack[i].x) / (diff.time - stack[i].time),
+                y: (diff.y - stack[i].y) / (diff.time - stack[i].time)
+            };
+
+            if (stack.length >= 5) stack.shift();
+            stack.push({x: diff.x, y: diff.y, time: diff.time});
+        }
+    }
+
+    function tStart(event, eType) {
+        clicksAllowed = true;
+        eventType = eType; //leak event type
+
+        if (checks[eventType](event)) return;
+
+        //attach event listeners to the document, so that the slider
+        //will continue to recieve events wherever the pointer is
+        addEvent(document, events[eventType][1], tMove);
+        addEvent(document, events[eventType][2], tEnd);
+        addEvent(document, events[eventType][3], tEnd);
+
+        //fixes WebKit's cursor while dragging
+        if (o.preventDefault && eventType) preventDefault(event);
+
+        //remember starting time and position
+        start = {
+            x: eventType? event.clientX : event.touches[0].clientX,
+            y: eventType? event.clientY : event.touches[0].clientY,
+
+            time: Number(new Date)
+        };
+
+        //reset
+        isScrolling = undefined;
+        diff = {x:0, y:0, time: 0};
+        speed = {x:0, y:0};
+        stack = [{x:0, y:0, time: 0}];
+
+        o.start(event, start);
+    }
+
+    function tMove(event) {
+        //if user is trying to scroll vertically -- do nothing
+        if ((!o.preventScroll && isScrolling) || checks[eventType](event)) return;
+
+        getDiff(event);
+
+        if (Math.abs(diff.x) > o.clickTolerance || Math.abs(diff.y) > o.clickTolerance) clicksAllowed = false; //if there was a move -- deny all the clicks before the next touchstart
+
+        //check whether the user is trying to scroll vertically
+        if (isScrolling === undefined && eventType !== 3) {
+            //assign and check `isScrolling` at the same time
+            if (isScrolling = (Math.abs(diff.x) < Math.abs(diff.y)) && !o.preventScroll) return;
+        }
+
+        if (o.preventDefault) preventDefault(event); //Prevent scrolling
+
+        o.move(event, start, diff, speed);
+    }
+
+    function tEnd(event) {
+        eventType && getDiff(event);
+
+        //IE likes to focus links after touchend.
+        //Since we don't want to disable link outlines completely for accessibility reasons,
+        //we just defocus it after touch and disable the outline for `:active` links in css.
+        //This way the outline will remain visible when using keyboard.
+        !clicksAllowed && event.target && event.target.blur && event.target.blur();
+
+        //detach event listeners from the document
+        removeEvent(document, events[eventType][1], tMove);
+        removeEvent(document, events[eventType][2], tEnd);
+        removeEvent(document, events[eventType][3], tEnd);
+
+        o.end(event, start, diff, speed);
+    }
+
+    function init() {
+        //bind touchstart
+        listeners.push(addEvent(_this, events[eventModel][0], function(e) {tStart(e, eventModel);}));
+        //prevent stuff from dragging when using mouse
+        listeners.push(addEvent(_this, 'dragstart', preventDefault));
+
+        //bind mousedown if necessary
+        if (o.mouse && !eventModel) {
+            listeners.push(addEvent(_this, events[3][0], function(e) {tStart(e, 3);}));
+        }
+
+        //No clicking during touch
+        listeners.push(addEvent(_this, 'click', function(event) {
+            clicksAllowed? o.click(event): preventDefault(event);
+        }));
+    }
+
+    init();
+
+    //expose the API
+    return {
+        getClicksAllowed: function() {
+            return clicksAllowed;
+        },
+        kill: function() {
+            for (var i = listeners.length - 1; i >= 0; i--) {
+                listeners[i].remove();
+            }
+        }
+    }
+}

File diff suppressed because it is too large
+ 8 - 0
sites/all/themes/gui/jee/bower_components/Peppermint/dist/peppermint.min.js


+ 62 - 0
sites/all/themes/gui/jee/bower_components/Peppermint/dist/peppermint.required.css

@@ -0,0 +1,62 @@
+/* Peppermint minimal required styles */
+
+.peppermint.peppermint-active {
+    position: relative;
+    overflow: hidden;
+    padding-left: 0;
+    padding-right: 0;
+}
+
+.peppermint.peppermint-active .peppermint-slides {
+    position: relative;
+    overflow: hidden; /* clearfix */
+    -ms-touch-action: pan-y;
+    touch-action: pan-y;
+}
+
+.peppermint.peppermint-active .peppermint-slides > * {
+    float: left;
+    margin: 0;
+    -moz-box-sizing: border-box;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+    -webkit-tap-highlight-color: transparent;
+    tap-highlight-color: transparent;
+}
+
+.peppermint.peppermint-active .peppermint-slides a:active,
+.peppermint.peppermint-active .peppermint-slides a:active img {
+    outline: none;
+}
+
+.peppermint.peppermint-active,
+.peppermint.peppermint-active .peppermint-dots,
+.peppermint.peppermint-active .peppermint-slides,
+.peppermint.peppermint-active .peppermint-slides > * {
+    -webkit-transform: translate3d(0,0,0);
+    -ms-transform: translate3d(0,0,0);
+    -moz-transform: translate3d(0,0,0);
+    transform: translate3d(0,0,0);
+    -webkit-backface-visibility: hidden;
+    -moz-backface-visibility: hidden;
+    -ms-backface-visibility: hidden;
+    backface-visibility: hidden;
+}
+
+.peppermint.peppermint-mouse .peppermint-slides {
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    cursor: move;
+    cursor: -webkit-grab;
+    cursor: -moz-grab;
+    cursor: grab;
+}
+
+.peppermint.peppermint-mouse.peppermint-drag .peppermint-slides * {
+    cursor: move;
+    cursor: -webkit-grabbing;
+    cursor: -moz-grabbing;
+    cursor: grabbing;
+}

+ 154 - 0
sites/all/themes/gui/jee/bower_components/Peppermint/dist/peppermint.suggested.css

@@ -0,0 +1,154 @@
+/* Peppermint required styles + default appearance styles */
+
+.peppermint.peppermint-active {
+    position: relative;
+    overflow: hidden;
+    padding-left: 0;
+    padding-right: 0;
+}
+
+.peppermint.peppermint-active .peppermint-slides {
+    position: relative;
+    overflow: hidden; /* clearfix */
+    -ms-touch-action: pan-y;
+    touch-action: pan-y;
+}
+
+.peppermint.peppermint-active .peppermint-slides > * {
+    float: left;
+    margin: 0;
+    -moz-box-sizing: border-box;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+    -webkit-tap-highlight-color: transparent;
+    tap-highlight-color: transparent;
+}
+
+.peppermint.peppermint-active .peppermint-slides a:active,
+.peppermint.peppermint-active .peppermint-slides a:active img {
+    outline: none;
+}
+
+.peppermint.peppermint-active,
+.peppermint.peppermint-active .peppermint-dots,
+.peppermint.peppermint-active .peppermint-slides,
+.peppermint.peppermint-active .peppermint-slides > * {
+    -webkit-transform: translate3d(0,0,0);
+    -ms-transform: translate3d(0,0,0);
+    -moz-transform: translate3d(0,0,0);
+    transform: translate3d(0,0,0);
+    -webkit-backface-visibility: hidden;
+    -moz-backface-visibility: hidden;
+    -ms-backface-visibility: hidden;
+    backface-visibility: hidden;
+}
+
+.peppermint.peppermint-mouse .peppermint-slides {
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    cursor: move;
+    cursor: -webkit-grab;
+    cursor: -moz-grab;
+    cursor: grab;
+}
+
+.peppermint.peppermint-mouse.peppermint-drag .peppermint-slides * {
+    cursor: move;
+    cursor: -webkit-grabbing;
+    cursor: -moz-grabbing;
+    cursor: grabbing;
+}
+
+/* default appearance styles */
+.peppermint {
+    text-align: center;
+}
+
+.peppermint figure {
+    margin: 0 0 1.5em 0;
+}
+
+.peppermint figure img {
+    vertical-align: top;
+    max-width: 100%;
+    -webkit-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.2);
+    box-shadow: 0 1px 5px rgba(0, 0, 0, 0.2);
+}
+
+.peppermint figure figcaption {
+    font-style: italic;
+    color: #787575;
+    font-size: 0.8em;
+    margin-top: 0.5em;
+}
+
+.peppermint.peppermint-active {
+    margin-bottom: 1.5em;
+}
+
+.peppermint-slides {
+    padding-top: 0.5em;
+    padding-bottom: 0.5em;
+}
+
+/* dots */
+ul.peppermint-dots {
+    margin: 0.6em 0;
+    padding: 0;
+    text-align: center;
+    list-style-type: none;
+}
+
+.peppermint.peppermint-active ul.peppermint-dots {
+    margin: 0 0 0.6em 0;
+}
+
+.peppermint.peppermint-active .peppermint-slides + ul.peppermint-dots {
+    margin: 0.6em 0 0 0;
+}
+
+ul.peppermint-dots > li {
+    display: inline-block;
+    position: relative;
+    padding: 0.5em 0.6em;
+    width: 12px;
+    height: 12px;
+    cursor: pointer;
+    text-align: center;
+    vertical-align: middle;
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    -webkit-tap-highlight-color: transparent;
+    /* ie7 fallback */
+    *display: inline;
+    *zoom: 1;
+}
+
+ul.peppermint-dots > li.peppermint-mouse-clicked,
+ul.peppermint-dots > li:active {
+    outline: 0;
+}
+
+ul.peppermint-dots > li > span {
+    display: inline-block;
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    margin: -4px 0 0 -4px;
+    width: 8px;
+    height: 8px;
+    border-radius: 50%;
+    background: #9b9890;
+}
+
+ul.peppermint-dots > li.peppermint-active-dot > span {
+    margin: -6px 0 0 -6px;
+    width: 10px;
+    height: 10px;
+    border: 1px solid #9b9890;
+    background: transparent;
+}

+ 493 - 0
sites/all/themes/gui/jee/bower_components/Peppermint/dist/pure/peppermint.pure.js

@@ -0,0 +1,493 @@
+/*!
+ * Peppermint touch slider
+ * v. 1.3.7 | https://github.com/wilddeer/Peppermint
+ * Copyright Oleg Korsunsky | http://wd.dizaina.net/
+ *
+ * Depends on Event Burrito | https://github.com/wilddeer/Event-Burrito
+ * MIT License
+ */
+function Peppermint(_this, options) {
+    var slider = {
+            slides: [],
+            dots: [],
+            left: 0
+        },
+        slidesNumber,
+        flickThreshold = 200, //Flick threshold (ms)
+        activeSlide = 0,
+        slideWidth,
+        dotBlock,
+        slideBlock,
+        slideshowTimeoutId,
+        slideshowActive,
+        animationTimer;
+
+    //default options
+    var o = {
+        speed: 300, //transition between slides in ms
+        touchSpeed: 300, //transition between slides in ms after touch
+        slideshow: false, //launch slideshow at start
+        slideshowInterval: 4000,
+        stopSlideshowAfterInteraction: false, //stop slideshow after user interaction
+        startSlide: 0, //first slide to show
+        mouseDrag: true, //enable mouse drag
+        disableIfOneSlide: true,
+        cssPrefix: 'peppermint-',
+        dots: false, //show dots
+        dotsPrepend: false, //dots before slides
+        dotsContainer: undefined,
+        slidesContainer: undefined,
+        onSlideChange: undefined, //slide change callback
+        onSetup: undefined //setup callback
+    };
+
+    //merge user options into defaults
+    options && mergeObjects(o, options);
+
+    var classes = {
+        inactive: o.cssPrefix + 'inactive',
+        active: o.cssPrefix + 'active',
+        mouse: o.cssPrefix + 'mouse',
+        drag: o.cssPrefix + 'drag',
+        slides: o.cssPrefix + 'slides',
+        dots: o.cssPrefix + 'dots',
+        activeDot: o.cssPrefix + 'active-dot',
+        mouseClicked: o.cssPrefix + 'mouse-clicked'
+    };
+
+    //feature detects
+    var support = {
+        transforms: testProp('transform'),
+        transitions: testProp('transition')
+    };
+
+    function mergeObjects(targetObj, sourceObject) {
+        for (var key in sourceObject) {
+            if (sourceObject.hasOwnProperty(key)) {
+                targetObj[key] = sourceObject[key];
+            }
+        }
+    }
+
+    function testProp(prop) {
+        var prefixes = ['Webkit', 'Moz', 'O', 'ms'],
+            block = document.createElement('div');
+
+        if (block.style[prop] !== undefined) return true;
+
+        prop = prop.charAt(0).toUpperCase() + prop.slice(1);
+        for (var i in prefixes) {
+            if (block.style[prefixes[i]+prop] !== undefined) return true;
+        }
+
+        return false;
+    }
+
+    function addClass(el, cl) {
+        if (!new RegExp('(\\s|^)'+cl+'(\\s|$)').test(el.className)) {
+            el.className += ' ' + cl;
+        }
+    }
+
+    function removeClass(el, cl) {
+        el.className = el.className.replace(new RegExp('(\\s+|^)'+cl+'(\\s+|$)', 'g'), ' ').replace(/^\s+|\s+$/g, '');
+    }
+
+    //n - slide number (starting from 0)
+    //speed - transition in ms, can be omitted
+    function changeActiveSlide(n, speed) {
+        if (n<0) {
+            n = 0;
+        }
+        else if (n>slidesNumber-1) {
+            n = slidesNumber-1;
+        }
+
+        //change active dot
+        for (var i = slider.dots.length - 1; i >= 0; i--) {
+            removeClass(slider.dots[i], classes.activeDot);
+        }
+
+        addClass(slider.dots[n], classes.activeDot);
+
+        activeSlide = n;
+
+        changePos(-n*slider.width, (speed===undefined?o.speed:speed));
+
+        //reset slideshow timeout whenever active slide is changed for whatever reason
+        stepSlideshow();
+
+        //API callback
+        o.onSlideChange && o.onSlideChange(n);
+
+        return n;
+    }
+
+    //changes position of the slider (in px) with given speed (in ms)
+    function changePos(pos, speed) {
+        var time = speed?speed+'ms':'';
+
+        slideBlock.style.webkitTransitionDuration =
+        slideBlock.style.MozTransitionDuration =
+        slideBlock.style.msTransitionDuration =
+        slideBlock.style.OTransitionDuration =
+        slideBlock.style.transitionDuration = time;
+
+        setPos(pos);
+    }
+
+    //fallback to `setInterval` animations for UAs with no CSS transitions
+    function changePosFallback(pos, speed) {
+        animationTimer && clearInterval(animationTimer);
+
+        if (!speed) {
+            setPos(pos);
+            return;
+        }
+
+        var startTime = +new Date,
+            startPos = slider.left;
+
+        animationTimer = setInterval(function() {
+            //rough bezier emulation
+            var diff, y,
+                elapsed = +new Date - startTime,
+                f = elapsed / speed,
+                bezier = [0, 0.7, 1, 1];
+
+            function getPoint(p1, p2) {
+                return (p2-p1)*f + p1;
+            }
+
+            if (f >= 1) {
+                setPos(pos);
+                clearInterval(animationTimer);
+                return;
+            }
+
+            diff = pos - startPos;
+
+            y = getPoint(
+                    getPoint(getPoint(bezier[0], bezier[1]), getPoint(bezier[1], bezier[2])),
+                    getPoint(getPoint(bezier[1], bezier[2]), getPoint(bezier[2], bezier[3]))
+                    );
+
+            setPos(Math.floor(y*diff + startPos));
+        }, 15);
+    }
+
+    //sets position of the slider (in px)
+    function setPos(pos) {
+        slideBlock.style.webkitTransform = 'translate('+pos+'px,0) translateZ(0)';
+        slideBlock.style.msTransform =
+        slideBlock.style.MozTransform =
+        slideBlock.style.OTransform =
+        slideBlock.style.transform = 'translateX('+pos+'px)';
+
+        slider.left = pos;
+    }
+
+    //`setPos` fallback for UAs with no CSS transforms support
+    function setPosFallback(pos) {
+        slideBlock.style.left = pos+'px';
+
+        slider.left = pos;
+    }
+
+    function nextSlide() {
+        var n = activeSlide + 1;
+
+        if (n > slidesNumber - 1) {
+            n = 0;
+        }
+
+        return changeActiveSlide(n);
+    }
+
+    function prevSlide() {
+        var n = activeSlide - 1;
+
+        if (n < 0) {
+            n = slidesNumber - 1;
+        }
+
+        return changeActiveSlide(n);
+    }
+
+    function startSlideshow() {
+        slideshowActive = true;
+        stepSlideshow();
+    }
+
+    //sets or resets timeout before switching to the next slide
+    function stepSlideshow() {
+        if (slideshowActive) {
+            slideshowTimeoutId && clearTimeout(slideshowTimeoutId);
+
+            slideshowTimeoutId = setTimeout(function() {
+                nextSlide();
+            },
+            o.slideshowInterval);
+        }
+    }
+
+    //pauses slideshow until `stepSlideshow` is invoked
+    function pauseSlideshow() {
+        slideshowTimeoutId && clearTimeout(slideshowTimeoutId);
+    }
+
+    function stopSlideshow() {
+        slideshowActive = false;
+        slideshowTimeoutId && clearTimeout(slideshowTimeoutId);
+    }
+
+    //this should be invoked when the width of the slider is changed
+    function onWidthChange() {
+        slider.width = _this.offsetWidth;
+
+        //have to do this in `px` because of webkit's rounding errors :-(
+        slideBlock.style.width = slider.width*slidesNumber+'px';
+        for (var i = 0; i < slidesNumber; i++) {
+            slider.slides[i].style.width = slider.width+'px';
+        }
+        changePos(-activeSlide*slider.width);
+    }
+
+    function addEvent(el, event, func, bool) {
+        if (!event) return;
+
+        el.addEventListener? el.addEventListener(event, func, !!bool): el.attachEvent('on'+event, func);
+    }
+
+    //init touch events
+    function touchInit() {
+        EventBurrito(slideBlock, {
+            mouse: o.mouseDrag,
+            start: function(event, start) {
+                //firefox doesn't want to apply cursor from `:active` CSS rule, have to add a class :-/
+                addClass(_this, classes.drag);
+            },
+            move: function(event, start, diff, speed) {
+                pauseSlideshow(); //pause the slideshow when touch is in progress
+
+                //if it's first slide and moving left or last slide and moving right -- resist!
+                diff.x =
+                diff.x /
+                    (
+                        (!activeSlide && diff.x > 0
+                        || activeSlide == slidesNumber - 1 && diff.x < 0)
+                        ?
+                        (Math.abs(diff.x)/slider.width*2 + 1)
+                        :
+                        1
+                    );
+
+                //change position of the slider appropriately
+                changePos(diff.x - slider.width*activeSlide);
+            },
+            end: function(event, start, diff, speed) {
+                if (diff.x) {
+                    var ratio = Math.abs(diff.x)/slider.width,
+                        //How many slides to skip. Remainder > 0.25 counts for one slide.
+                        skip = Math.floor(ratio) + (ratio - Math.floor(ratio) > 0.25?1:0),
+                        //Super-duper formula to detect a flick.
+                        //First, it's got to be fast enough.
+                        //Second, if `skip==0`, 20px move is enough to switch to the next slide.
+                        //If `skip>0`, it's enough to slide to the middle of the slide minus `slider.width/9` to skip even further.
+                        flick = diff.time < flickThreshold+flickThreshold*skip/1.8 && Math.abs(diff.x) - skip*slider.width > (skip?-slider.width/9:20);
+
+                    skip += (flick?1:0);
+
+                    if (diff.x < 0) {
+                        changeActiveSlide(activeSlide+skip, o.touchSpeed);
+                    }
+                    else {
+                        changeActiveSlide(activeSlide-skip, o.touchSpeed);
+                    }
+
+                    o.stopSlideshowAfterInteraction && stopSlideshow();
+                }
+
+                //remove the drag class
+                removeClass(_this, classes.drag);
+            }
+        });
+    }
+
+    function setup() {
+        var slideSource = o.slidesContainer || _this,
+            dotsTarget = o.dotsContainer || _this;
+
+        if (o.disableIfOneSlide && slideSource.children.length <= 1) return;
+
+        //If current UA doesn't support css transforms or transitions -- use fallback functions.
+        //(Using separate functions instead of checks for better performance)
+        if (!support.transforms || !!window.opera) setPos = setPosFallback;
+        if (!support.transitions || !!window.opera) changePos = changePosFallback;
+
+        slideBlock = o.slidesContainer || document.createElement('div');
+        addClass(slideBlock, classes.slides);
+
+        //get slides & generate dots
+        for (var i = 0, l = slideSource.children.length; i < l; i++) {
+            var slide = slideSource.children[i],
+                dot = document.createElement('li');
+
+            slider.slides.push(slide);
+
+            //`tabindex` makes dots tabbable
+            dot.setAttribute('tabindex', '0');
+            dot.setAttribute('role', 'button');
+
+            dot.innerHTML = '<span></span>';
+
+            (function(x, dotClosure) {
+                //bind events to dots
+                addEvent(dotClosure, 'click', function(event) {
+                    changeActiveSlide(x);
+                    o.stopSlideshowAfterInteraction && stopSlideshow();
+                });
+
+                //Bind the same function to Enter key except for the `blur` part -- I dont't want
+                //the focus to be lost when the user is using his keyboard to navigate.
+                addEvent(dotClosure, 'keyup', function(event) {
+                    if (event.keyCode == 13) {
+                        changeActiveSlide(x);
+                        o.stopSlideshowAfterInteraction && stopSlideshow();
+                    }
+                });
+
+                //Don't want to disable outlines completely for accessibility reasons.
+                //Instead, add class with `outline: 0` on mouseup and remove it on blur.
+                addEvent(dotClosure, 'mouseup', function(event) {
+                    addClass(dotClosure, classes.mouseClicked);
+                });
+
+                //capturing fixes IE bug
+                addEvent(dotClosure, 'blur', function(){
+                    removeClass(dotClosure, classes.mouseClicked);
+                }, true);
+
+                //This solves tabbing problems:
+                //When an element inside a slide catches focus we switch to that slide
+                //and reset `scrollLeft` of the slider block.
+                //`SetTimeout` solves Chrome's bug.
+                //Event capturing is used to catch events on the slide level.
+                //Since older IEs don't have capturing, `onfocusin` is used as a fallback.
+                addEvent(slide, 'focus', slide.onfocusin = function(e) {
+                    _this.scrollLeft = 0;
+                    setTimeout(function() {
+                        _this.scrollLeft = 0;
+                    }, 0);
+                    changeActiveSlide(x);
+                }, true);
+            })(i, dot)
+
+            slider.dots.push(dot);
+        }
+
+        slidesNumber = slider.slides.length;
+
+        slideWidth = 100/slidesNumber;
+
+        addClass(_this, classes.active);
+        removeClass(_this, classes.inactive);
+        o.mouseDrag && addClass(_this, classes.mouse);
+
+        slider.width = _this.offsetWidth;
+
+        //had to do this in `px` because of webkit's rounding errors :-(
+        slideBlock.style.width = slider.width*slidesNumber+'px';
+        for (var i = 0; i < slidesNumber; i++) {
+            slider.slides[i].style.width = slider.width+'px';
+            slideBlock.appendChild(slider.slides[i]);
+        }
+
+        if (!o.slidesContainer) _this.appendChild(slideBlock);
+
+        //append dots
+        if (o.dots && slidesNumber > 1) {
+            dotBlock = document.createElement('ul');
+            addClass(dotBlock, classes.dots);
+
+            for (var i = 0, l = slider.dots.length; i < l; i++) {
+                dotBlock.appendChild(slider.dots[i]);
+            }
+
+            if (o.dotsPrepend) {
+                dotsTarget.insertBefore(dotBlock,dotsTarget.firstChild);
+            }
+            else {
+                dotsTarget.appendChild(dotBlock);
+            }
+        }
+
+        //watch for slider width changes
+        addEvent(window, 'resize', onWidthChange);
+        addEvent(window, 'orientationchange', onWidthChange);
+
+        //init first slide, timeout to expose the API first
+        setTimeout(function() {
+            changeActiveSlide(o.startSlide, 0);
+        }, 0);
+
+        //init slideshow
+        if (o.slideshow) startSlideshow();
+
+        touchInit();
+
+        //API callback, timeout to expose the API first
+        setTimeout(function() {
+            o.onSetup && o.onSetup(slidesNumber);
+        }, 0);
+    }
+
+    //Init
+    setup();
+
+    //expose the API
+    return {
+        slideTo: function(slide) {
+            return changeActiveSlide(parseInt(slide, 10));
+        },
+
+        next: nextSlide,
+
+        prev: prevSlide,
+
+        //start slideshow
+        start: startSlideshow,
+
+        //stop slideshow
+        stop: stopSlideshow,
+
+        //pause slideshow until the next slide change
+        pause: pauseSlideshow,
+
+        //get current slide number
+        getCurrentPos: function() {
+            return activeSlide;
+        },
+
+        //get total number of slides
+        getSlidesNumber: function() {
+            return slidesNumber;
+        },
+
+        //invoke this when the slider's width is changed
+        recalcWidth: onWidthChange
+    };
+};
+
+//if jQuery is present -- create a plugin
+if (window.jQuery) {
+    (function($) {
+        $.fn.Peppermint = function(options) {
+            this.each(function() {
+                $(this).data('Peppermint', Peppermint(this, options));
+            });
+
+            return this;
+        };
+    })(window.jQuery);
+}

File diff suppressed because it is too large
+ 8 - 0
sites/all/themes/gui/jee/bower_components/Peppermint/dist/pure/peppermint.pure.min.js


+ 22 - 0
sites/all/themes/gui/jee/bower_components/Peppermint/package.json

@@ -0,0 +1,22 @@
+{
+  "name": "Peppermint",
+  "version": "1.3.7",
+  "license": "MIT",
+  "homepage": "https://github.com/wilddeer/Peppermint",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/wilddeer/Peppermint.git"
+  },
+  "author": {
+    "name": "Oleg Korsunsky",
+    "url": "http://wd.dizaina.net/"
+  },
+  "devDependencies": {
+    "grunt": "~0.4.1",
+    "grunt-contrib-uglify": "~0.2.5",
+    "grunt-contrib-concat": "~0.3.0",
+    "grunt-contrib-watch": "~0.5.3",
+    "grunt-bump": "0.0.14",
+    "grunt-shell": "~0.7.0"
+  }
+}

+ 90 - 0
sites/all/themes/gui/jee/bower_components/Peppermint/src/peppermint.appearance.css

@@ -0,0 +1,90 @@
+.peppermint {
+    text-align: center;
+}
+
+.peppermint figure {
+    margin: 0 0 1.5em 0;
+}
+
+.peppermint figure img {
+    vertical-align: top;
+    max-width: 100%;
+    -webkit-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.2);
+    box-shadow: 0 1px 5px rgba(0, 0, 0, 0.2);
+}
+
+.peppermint figure figcaption {
+    font-style: italic;
+    color: #787575;
+    font-size: 0.8em;
+    margin-top: 0.5em;
+}
+
+.peppermint.peppermint-active {
+    margin-bottom: 1.5em;
+}
+
+.peppermint-slides {
+    padding-top: 0.5em;
+    padding-bottom: 0.5em;
+}
+
+/* dots */
+ul.peppermint-dots {
+    margin: 0.6em 0;
+    padding: 0;
+    text-align: center;
+    list-style-type: none;
+}
+
+.peppermint.peppermint-active ul.peppermint-dots {
+    margin: 0 0 0.6em 0;
+}
+
+.peppermint.peppermint-active .peppermint-slides + ul.peppermint-dots {
+    margin: 0.6em 0 0 0;
+}
+
+ul.peppermint-dots > li {
+    display: inline-block;
+    position: relative;
+    padding: 0.5em 0.6em;
+    width: 12px;
+    height: 12px;
+    cursor: pointer;
+    text-align: center;
+    vertical-align: middle;
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    -webkit-tap-highlight-color: transparent;
+    /* ie7 fallback */
+    *display: inline;
+    *zoom: 1;
+}
+
+ul.peppermint-dots > li.peppermint-mouse-clicked,
+ul.peppermint-dots > li:active {
+    outline: 0;
+}
+
+ul.peppermint-dots > li > span {
+    display: inline-block;
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    margin: -4px 0 0 -4px;
+    width: 8px;
+    height: 8px;
+    border-radius: 50%;
+    background: #9b9890;
+}
+
+ul.peppermint-dots > li.peppermint-active-dot > span {
+    margin: -6px 0 0 -6px;
+    width: 10px;
+    height: 10px;
+    border: 1px solid #9b9890;
+    background: transparent;
+}

+ 485 - 0
sites/all/themes/gui/jee/bower_components/Peppermint/src/peppermint.js

@@ -0,0 +1,485 @@
+function Peppermint(_this, options) {
+    var slider = {
+            slides: [],
+            dots: [],
+            left: 0
+        },
+        slidesNumber,
+        flickThreshold = 200, //Flick threshold (ms)
+        activeSlide = 0,
+        slideWidth,
+        dotBlock,
+        slideBlock,
+        slideshowTimeoutId,
+        slideshowActive,
+        animationTimer;
+
+    //default options
+    var o = {
+        speed: 300, //transition between slides in ms
+        touchSpeed: 300, //transition between slides in ms after touch
+        slideshow: false, //launch slideshow at start
+        slideshowInterval: 4000,
+        stopSlideshowAfterInteraction: false, //stop slideshow after user interaction
+        startSlide: 0, //first slide to show
+        mouseDrag: true, //enable mouse drag
+        disableIfOneSlide: true,
+        cssPrefix: 'peppermint-',
+        dots: false, //show dots
+        dotsPrepend: false, //dots before slides
+        dotsContainer: undefined,
+        slidesContainer: undefined,
+        onSlideChange: undefined, //slide change callback
+        onSetup: undefined //setup callback
+    };
+
+    //merge user options into defaults
+    options && mergeObjects(o, options);
+
+    var classes = {
+        inactive: o.cssPrefix + 'inactive',
+        active: o.cssPrefix + 'active',
+        mouse: o.cssPrefix + 'mouse',
+        drag: o.cssPrefix + 'drag',
+        slides: o.cssPrefix + 'slides',
+        dots: o.cssPrefix + 'dots',
+        activeDot: o.cssPrefix + 'active-dot',
+        mouseClicked: o.cssPrefix + 'mouse-clicked'
+    };
+
+    //feature detects
+    var support = {
+        transforms: testProp('transform'),
+        transitions: testProp('transition')
+    };
+
+    function mergeObjects(targetObj, sourceObject) {
+        for (var key in sourceObject) {
+            if (sourceObject.hasOwnProperty(key)) {
+                targetObj[key] = sourceObject[key];
+            }
+        }
+    }
+
+    function testProp(prop) {
+        var prefixes = ['Webkit', 'Moz', 'O', 'ms'],
+            block = document.createElement('div');
+
+        if (block.style[prop] !== undefined) return true;
+
+        prop = prop.charAt(0).toUpperCase() + prop.slice(1);
+        for (var i in prefixes) {
+            if (block.style[prefixes[i]+prop] !== undefined) return true;
+        }
+
+        return false;
+    }
+
+    function addClass(el, cl) {
+        if (!new RegExp('(\\s|^)'+cl+'(\\s|$)').test(el.className)) {
+            el.className += ' ' + cl;
+        }
+    }
+
+    function removeClass(el, cl) {
+        el.className = el.className.replace(new RegExp('(\\s+|^)'+cl+'(\\s+|$)', 'g'), ' ').replace(/^\s+|\s+$/g, '');
+    }
+
+    //n - slide number (starting from 0)
+    //speed - transition in ms, can be omitted
+    function changeActiveSlide(n, speed) {
+        if (n<0) {
+            n = 0;
+        }
+        else if (n>slidesNumber-1) {
+            n = slidesNumber-1;
+        }
+
+        //change active dot
+        for (var i = slider.dots.length - 1; i >= 0; i--) {
+            removeClass(slider.dots[i], classes.activeDot);
+        }
+
+        addClass(slider.dots[n], classes.activeDot);
+
+        activeSlide = n;
+
+        changePos(-n*slider.width, (speed===undefined?o.speed:speed));
+
+        //reset slideshow timeout whenever active slide is changed for whatever reason
+        stepSlideshow();
+
+        //API callback
+        o.onSlideChange && o.onSlideChange(n);
+
+        return n;
+    }
+
+    //changes position of the slider (in px) with given speed (in ms)
+    function changePos(pos, speed) {
+        var time = speed?speed+'ms':'';
+
+        slideBlock.style.webkitTransitionDuration =
+        slideBlock.style.MozTransitionDuration =
+        slideBlock.style.msTransitionDuration =
+        slideBlock.style.OTransitionDuration =
+        slideBlock.style.transitionDuration = time;
+
+        setPos(pos);
+    }
+
+    //fallback to `setInterval` animations for UAs with no CSS transitions
+    function changePosFallback(pos, speed) {
+        animationTimer && clearInterval(animationTimer);
+
+        if (!speed) {
+            setPos(pos);
+            return;
+        }
+
+        var startTime = +new Date,
+            startPos = slider.left;
+
+        animationTimer = setInterval(function() {
+            //rough bezier emulation
+            var diff, y,
+                elapsed = +new Date - startTime,
+                f = elapsed / speed,
+                bezier = [0, 0.7, 1, 1];
+
+            function getPoint(p1, p2) {
+                return (p2-p1)*f + p1;
+            }
+
+            if (f >= 1) {
+                setPos(pos);
+                clearInterval(animationTimer);
+                return;
+            }
+
+            diff = pos - startPos;
+
+            y = getPoint(
+                    getPoint(getPoint(bezier[0], bezier[1]), getPoint(bezier[1], bezier[2])),
+                    getPoint(getPoint(bezier[1], bezier[2]), getPoint(bezier[2], bezier[3]))
+                    );
+
+            setPos(Math.floor(y*diff + startPos));
+        }, 15);
+    }
+
+    //sets position of the slider (in px)
+    function setPos(pos) {
+        slideBlock.style.webkitTransform = 'translate('+pos+'px,0) translateZ(0)';
+        slideBlock.style.msTransform =
+        slideBlock.style.MozTransform =
+        slideBlock.style.OTransform =
+        slideBlock.style.transform = 'translateX('+pos+'px)';
+
+        slider.left = pos;
+    }
+
+    //`setPos` fallback for UAs with no CSS transforms support
+    function setPosFallback(pos) {
+        slideBlock.style.left = pos+'px';
+
+        slider.left = pos;
+    }
+
+    function nextSlide() {
+        var n = activeSlide + 1;
+
+        if (n > slidesNumber - 1) {
+            n = 0;
+        }
+
+        return changeActiveSlide(n);
+    }
+
+    function prevSlide() {
+        var n = activeSlide - 1;
+
+        if (n < 0) {
+            n = slidesNumber - 1;
+        }
+
+        return changeActiveSlide(n);
+    }
+
+    function startSlideshow() {
+        slideshowActive = true;
+        stepSlideshow();
+    }
+
+    //sets or resets timeout before switching to the next slide
+    function stepSlideshow() {
+        if (slideshowActive) {
+            slideshowTimeoutId && clearTimeout(slideshowTimeoutId);
+
+            slideshowTimeoutId = setTimeout(function() {
+                nextSlide();
+            },
+            o.slideshowInterval);
+        }
+    }
+
+    //pauses slideshow until `stepSlideshow` is invoked
+    function pauseSlideshow() {
+        slideshowTimeoutId && clearTimeout(slideshowTimeoutId);
+    }
+
+    function stopSlideshow() {
+        slideshowActive = false;
+        slideshowTimeoutId && clearTimeout(slideshowTimeoutId);
+    }
+
+    //this should be invoked when the width of the slider is changed
+    function onWidthChange() {
+        slider.width = _this.offsetWidth;
+
+        //have to do this in `px` because of webkit's rounding errors :-(
+        slideBlock.style.width = slider.width*slidesNumber+'px';
+        for (var i = 0; i < slidesNumber; i++) {
+            slider.slides[i].style.width = slider.width+'px';
+        }
+        changePos(-activeSlide*slider.width);
+    }
+
+    function addEvent(el, event, func, bool) {
+        if (!event) return;
+
+        el.addEventListener? el.addEventListener(event, func, !!bool): el.attachEvent('on'+event, func);
+    }
+
+    //init touch events
+    function touchInit() {
+        EventBurrito(slideBlock, {
+            mouse: o.mouseDrag,
+            start: function(event, start) {
+                //firefox doesn't want to apply cursor from `:active` CSS rule, have to add a class :-/
+                addClass(_this, classes.drag);
+            },
+            move: function(event, start, diff, speed) {
+                pauseSlideshow(); //pause the slideshow when touch is in progress
+
+                //if it's first slide and moving left or last slide and moving right -- resist!
+                diff.x =
+                diff.x /
+                    (
+                        (!activeSlide && diff.x > 0
+                        || activeSlide == slidesNumber - 1 && diff.x < 0)
+                        ?
+                        (Math.abs(diff.x)/slider.width*2 + 1)
+                        :
+                        1
+                    );
+
+                //change position of the slider appropriately
+                changePos(diff.x - slider.width*activeSlide);
+            },
+            end: function(event, start, diff, speed) {
+                if (diff.x) {
+                    var ratio = Math.abs(diff.x)/slider.width,
+                        //How many slides to skip. Remainder > 0.25 counts for one slide.
+                        skip = Math.floor(ratio) + (ratio - Math.floor(ratio) > 0.25?1:0),
+                        //Super-duper formula to detect a flick.
+                        //First, it's got to be fast enough.
+                        //Second, if `skip==0`, 20px move is enough to switch to the next slide.
+                        //If `skip>0`, it's enough to slide to the middle of the slide minus `slider.width/9` to skip even further.
+                        flick = diff.time < flickThreshold+flickThreshold*skip/1.8 && Math.abs(diff.x) - skip*slider.width > (skip?-slider.width/9:20);
+
+                    skip += (flick?1:0);
+
+                    if (diff.x < 0) {
+                        changeActiveSlide(activeSlide+skip, o.touchSpeed);
+                    }
+                    else {
+                        changeActiveSlide(activeSlide-skip, o.touchSpeed);
+                    }
+
+                    o.stopSlideshowAfterInteraction && stopSlideshow();
+                }
+
+                //remove the drag class
+                removeClass(_this, classes.drag);
+            }
+        });
+    }
+
+    function setup() {
+        var slideSource = o.slidesContainer || _this,
+            dotsTarget = o.dotsContainer || _this;
+
+        if (o.disableIfOneSlide && slideSource.children.length <= 1) return;
+
+        //If current UA doesn't support css transforms or transitions -- use fallback functions.
+        //(Using separate functions instead of checks for better performance)
+        if (!support.transforms || !!window.opera) setPos = setPosFallback;
+        if (!support.transitions || !!window.opera) changePos = changePosFallback;
+
+        slideBlock = o.slidesContainer || document.createElement('div');
+        addClass(slideBlock, classes.slides);
+
+        //get slides & generate dots
+        for (var i = 0, l = slideSource.children.length; i < l; i++) {
+            var slide = slideSource.children[i],
+                dot = document.createElement('li');
+
+            slider.slides.push(slide);
+
+            //`tabindex` makes dots tabbable
+            dot.setAttribute('tabindex', '0');
+            dot.setAttribute('role', 'button');
+
+            dot.innerHTML = '<span></span>';
+
+            (function(x, dotClosure) {
+                //bind events to dots
+                addEvent(dotClosure, 'click', function(event) {
+                    changeActiveSlide(x);
+                    o.stopSlideshowAfterInteraction && stopSlideshow();
+                });
+
+                //Bind the same function to Enter key except for the `blur` part -- I dont't want
+                //the focus to be lost when the user is using his keyboard to navigate.
+                addEvent(dotClosure, 'keyup', function(event) {
+                    if (event.keyCode == 13) {
+                        changeActiveSlide(x);
+                        o.stopSlideshowAfterInteraction && stopSlideshow();
+                    }
+                });
+
+                //Don't want to disable outlines completely for accessibility reasons.
+                //Instead, add class with `outline: 0` on mouseup and remove it on blur.
+                addEvent(dotClosure, 'mouseup', function(event) {
+                    addClass(dotClosure, classes.mouseClicked);
+                });
+
+                //capturing fixes IE bug
+                addEvent(dotClosure, 'blur', function(){
+                    removeClass(dotClosure, classes.mouseClicked);
+                }, true);
+
+                //This solves tabbing problems:
+                //When an element inside a slide catches focus we switch to that slide
+                //and reset `scrollLeft` of the slider block.
+                //`SetTimeout` solves Chrome's bug.
+                //Event capturing is used to catch events on the slide level.
+                //Since older IEs don't have capturing, `onfocusin` is used as a fallback.
+                addEvent(slide, 'focus', slide.onfocusin = function(e) {
+                    _this.scrollLeft = 0;
+                    setTimeout(function() {
+                        _this.scrollLeft = 0;
+                    }, 0);
+                    changeActiveSlide(x);
+                }, true);
+            })(i, dot)
+
+            slider.dots.push(dot);
+        }
+
+        slidesNumber = slider.slides.length;
+
+        slideWidth = 100/slidesNumber;
+
+        addClass(_this, classes.active);
+        removeClass(_this, classes.inactive);
+        o.mouseDrag && addClass(_this, classes.mouse);
+
+        slider.width = _this.offsetWidth;
+
+        //had to do this in `px` because of webkit's rounding errors :-(
+        slideBlock.style.width = slider.width*slidesNumber+'px';
+        for (var i = 0; i < slidesNumber; i++) {
+            slider.slides[i].style.width = slider.width+'px';
+            slideBlock.appendChild(slider.slides[i]);
+        }
+
+        if (!o.slidesContainer) _this.appendChild(slideBlock);
+
+        //append dots
+        if (o.dots && slidesNumber > 1) {
+            dotBlock = document.createElement('ul');
+            addClass(dotBlock, classes.dots);
+
+            for (var i = 0, l = slider.dots.length; i < l; i++) {
+                dotBlock.appendChild(slider.dots[i]);
+            }
+
+            if (o.dotsPrepend) {
+                dotsTarget.insertBefore(dotBlock,dotsTarget.firstChild);
+            }
+            else {
+                dotsTarget.appendChild(dotBlock);
+            }
+        }
+
+        //watch for slider width changes
+        addEvent(window, 'resize', onWidthChange);
+        addEvent(window, 'orientationchange', onWidthChange);
+
+        //init first slide, timeout to expose the API first
+        setTimeout(function() {
+            changeActiveSlide(o.startSlide, 0);
+        }, 0);
+
+        //init slideshow
+        if (o.slideshow) startSlideshow();
+
+        touchInit();
+
+        //API callback, timeout to expose the API first
+        setTimeout(function() {
+            o.onSetup && o.onSetup(slidesNumber);
+        }, 0);
+    }
+
+    //Init
+    setup();
+
+    //expose the API
+    return {
+        slideTo: function(slide) {
+            return changeActiveSlide(parseInt(slide, 10));
+        },
+
+        next: nextSlide,
+
+        prev: prevSlide,
+
+        //start slideshow
+        start: startSlideshow,
+
+        //stop slideshow
+        stop: stopSlideshow,
+
+        //pause slideshow until the next slide change
+        pause: pauseSlideshow,
+
+        //get current slide number
+        getCurrentPos: function() {
+            return activeSlide;
+        },
+
+        //get total number of slides
+        getSlidesNumber: function() {
+            return slidesNumber;
+        },
+
+        //invoke this when the slider's width is changed
+        recalcWidth: onWidthChange
+    };
+};
+
+//if jQuery is present -- create a plugin
+if (window.jQuery) {
+    (function($) {
+        $.fn.Peppermint = function(options) {
+            this.each(function() {
+                $(this).data('Peppermint', Peppermint(this, options));
+            });
+
+            return this;
+        };
+    })(window.jQuery);
+}

+ 60 - 0
sites/all/themes/gui/jee/bower_components/Peppermint/src/peppermint.required.css

@@ -0,0 +1,60 @@
+.peppermint.peppermint-active {
+    position: relative;
+    overflow: hidden;
+    padding-left: 0;
+    padding-right: 0;
+}
+
+.peppermint.peppermint-active .peppermint-slides {
+    position: relative;
+    overflow: hidden; /* clearfix */
+    -ms-touch-action: pan-y;
+    touch-action: pan-y;
+}
+
+.peppermint.peppermint-active .peppermint-slides > * {
+    float: left;
+    margin: 0;
+    -moz-box-sizing: border-box;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+    -webkit-tap-highlight-color: transparent;
+    tap-highlight-color: transparent;
+}
+
+.peppermint.peppermint-active .peppermint-slides a:active,
+.peppermint.peppermint-active .peppermint-slides a:active img {
+    outline: none;
+}
+
+.peppermint.peppermint-active,
+.peppermint.peppermint-active .peppermint-dots,
+.peppermint.peppermint-active .peppermint-slides,
+.peppermint.peppermint-active .peppermint-slides > * {
+    -webkit-transform: translate3d(0,0,0);
+    -ms-transform: translate3d(0,0,0);
+    -moz-transform: translate3d(0,0,0);
+    transform: translate3d(0,0,0);
+    -webkit-backface-visibility: hidden;
+    -moz-backface-visibility: hidden;
+    -ms-backface-visibility: hidden;
+    backface-visibility: hidden;
+}
+
+.peppermint.peppermint-mouse .peppermint-slides {
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    cursor: move;
+    cursor: -webkit-grab;
+    cursor: -moz-grab;
+    cursor: grab;
+}
+
+.peppermint.peppermint-mouse.peppermint-drag .peppermint-slides * {
+    cursor: move;
+    cursor: -webkit-grabbing;
+    cursor: -moz-grabbing;
+    cursor: grabbing;
+}

+ 308 - 127
sites/all/themes/gui/jee/css/jee.css

@@ -3974,6 +3974,12 @@ div.messages {
     |_____|__|__|__|__|__|    |_| |_____|__|__|_____|  |_____|_____|_|___|_____|__|__|_____|__  _|_____|_____|
                                                                                               |__|
   */
+  /* ____  ____  _______   ____________     ________  _____    ____  ________________  _____
+    / __ \/ __ \/ ____/ | / / ____/ __ \   / ____/ / / /   |  / __ \/_  __/ ____/ __ \/ ___/
+   / / / / /_/ / __/ /  |/ / __/ / / / /  / /   / /_/ / /| | / /_/ / / / / __/ / /_/ /\__ \
+  / /_/ / ____/ /___/ /|  / /___/ /_/ /  / /___/ __  / ___ |/ ____/ / / / /___/ _, _/___/ /
+  \____/_/   /_____/_/ |_/_____/_____/   \____/_/ /_/_/  |_/_/     /_/ /_____/_/ |_|/____/
+  */
 }
 /* line 174, jee.scss */
 #main > .region, #main > .region > .block-system, #main > .region > .block-system > .content {
@@ -3982,161 +3988,161 @@ div.messages {
   height: 100%;
   overflow: hidden;
 }
-/* line 189, jee.scss */
-#main #node-2::after {
+/* line 190, jee.scss */
+#main #node-2.node-teaser::after {
   background: transparent url("../assets/img/bgd-sol.png") no-repeat center center;
   background: none, url("../assets/img/bgd-sol.svg") no-repeat center center;
 }
-/* line 190, jee.scss */
-#main #node-2, #main #node-2 a {
+/* line 191, jee.scss */
+#main #node-2.node-teaser, #main #node-2.node-teaser a {
   color: #b24c14;
 }
-/* line 191, jee.scss */
-#main #node-2 h2.node-title, #main #node-2 h2.node-title a {
+/* line 192, jee.scss */
+#main #node-2.node-teaser h2.node-title, #main #node-2.node-teaser h2.node-title a {
   color: #d85509;
 }
-/* line 192, jee.scss */
-#main #node-2 .field-name-field-vignette {
+/* line 193, jee.scss */
+#main #node-2.node-teaser .field-name-field-vignette {
   background: transparent url("../assets/img/shadow-sol.png") no-repeat center center;
   background: none, url("../assets/img/shadow-sol.svg") no-repeat center center;
 }
-/* line 193, jee.scss */
-#main #node-2 .line {
+/* line 194, jee.scss */
+#main #node-2.node-teaser .line {
   background-color: #ea5b0c;
 }
-/* line 197, jee.scss */
-#main #node-3::after {
+/* line 200, jee.scss */
+#main #node-3.node-teaser::after {
   background: transparent url("../assets/img/bgd-dph.png") no-repeat center center;
   background: none, url("../assets/img/bgd-dph.svg") no-repeat center center;
 }
-/* line 198, jee.scss */
-#main #node-3, #main #node-3 a {
+/* line 201, jee.scss */
+#main #node-3.node-teaser, #main #node-3.node-teaser a {
   color: #686b00;
 }
-/* line 199, jee.scss */
-#main #node-3 h2.node-title, #main #node-3 h2.node-title a {
+/* line 202, jee.scss */
+#main #node-3.node-teaser h2.node-title, #main #node-3.node-teaser h2.node-title a {
   color: #afaf00;
 }
-/* line 200, jee.scss */
-#main #node-3 .field-name-field-vignette {
+/* line 203, jee.scss */
+#main #node-3.node-teaser .field-name-field-vignette {
   background: transparent url("../assets/img/shadow-dph.png") no-repeat center center;
   background: none, url("../assets/img/shadow-dph.svg") no-repeat center center;
 }
-/* line 201, jee.scss */
-#main #node-3 .line {
+/* line 204, jee.scss */
+#main #node-3.node-teaser .line {
   background-color: #cecd00;
 }
-/* line 205, jee.scss */
-#main #node-4::after {
+/* line 210, jee.scss */
+#main #node-4.node-teaser::after {
   background: transparent url("../assets/img/bgd-sub.png") no-repeat center center;
   background: none, url("../assets/img/bgd-sub.svg") no-repeat center center;
 }
-/* line 206, jee.scss */
-#main #node-4, #main #node-4 a {
+/* line 211, jee.scss */
+#main #node-4.node-teaser, #main #node-4.node-teaser a {
   color: #b71330;
 }
-/* line 207, jee.scss */
-#main #node-4 h2.node-title, #main #node-4 h2.node-title a {
+/* line 212, jee.scss */
+#main #node-4.node-teaser h2.node-title, #main #node-4.node-teaser h2.node-title a {
   color: #cd0734;
 }
-/* line 208, jee.scss */
-#main #node-4 .field-name-field-vignette {
+/* line 213, jee.scss */
+#main #node-4.node-teaser .field-name-field-vignette {
   background: transparent url("../assets/img/shadow-sub.png") no-repeat center center;
   background: none, url("../assets/img/shadow-sub.svg") no-repeat center center;
 }
-/* line 209, jee.scss */
-#main #node-4 .line {
+/* line 214, jee.scss */
+#main #node-4.node-teaser .line {
   background-color: #de003a;
 }
-/* line 213, jee.scss */
-#main #node-5::after {
+/* line 220, jee.scss */
+#main #node-5.node-teaser::after {
   background: transparent url("../assets/img/bgd-bc.png") no-repeat center center;
   background: none, url("../assets/img/bgd-bc.svg") no-repeat center center;
 }
-/* line 214, jee.scss */
-#main #node-5, #main #node-5 a {
+/* line 221, jee.scss */
+#main #node-5.node-teaser, #main #node-5.node-teaser a {
   color: #033d6f;
 }
-/* line 215, jee.scss */
-#main #node-5 h2.node-title, #main #node-5 h2.node-title a {
+/* line 222, jee.scss */
+#main #node-5.node-teaser h2.node-title, #main #node-5.node-teaser h2.node-title a {
   color: #024b87;
 }
-/* line 216, jee.scss */
-#main #node-5 .field-name-field-vignette {
+/* line 223, jee.scss */
+#main #node-5.node-teaser .field-name-field-vignette {
   background: transparent url("../assets/img/shadow-bc.png") no-repeat center center;
   background: none, url("../assets/img/shadow-bc.svg") no-repeat center center;
 }
-/* line 217, jee.scss */
-#main #node-5 .line {
+/* line 224, jee.scss */
+#main #node-5.node-teaser .line {
   background-color: #0066b1;
 }
-/* line 221, jee.scss */
-#main #node-6::after {
+/* line 230, jee.scss */
+#main #node-6.node-teaser::after {
   background: transparent url("../assets/img/bgd-opp.png") no-repeat center center;
   background: none, url("../assets/img/bgd-opp.svg") no-repeat center center;
 }
-/* line 222, jee.scss */
-#main #node-6, #main #node-6 a {
+/* line 231, jee.scss */
+#main #node-6.node-teaser, #main #node-6.node-teaser a {
   color: #7f1965;
 }
-/* line 223, jee.scss */
-#main #node-6 h2.node-title, #main #node-6 h2.node-title a {
+/* line 232, jee.scss */
+#main #node-6.node-teaser h2.node-title, #main #node-6.node-teaser h2.node-title a {
   color: #941b80;
 }
-/* line 224, jee.scss */
-#main #node-6 .field-name-field-vignette {
+/* line 233, jee.scss */
+#main #node-6.node-teaser .field-name-field-vignette {
   background: transparent url("../assets/img/shadow-opp.png") no-repeat center center;
   background: none, url("../assets/img/shadow-opp.svg") no-repeat center center;
 }
-/* line 225, jee.scss */
-#main #node-6 .line {
+/* line 234, jee.scss */
+#main #node-6.node-teaser .line {
   background-color: #af1380;
 }
-/* line 229, jee.scss */
-#main #node-7::after {
+/* line 240, jee.scss */
+#main #node-7.node-teaser::after {
   background: transparent url("../assets/img/bgd-dub.png") no-repeat center center;
   background: none, url("../assets/img/bgd-dub.svg") no-repeat center center;
 }
-/* line 230, jee.scss */
-#main #node-7, #main #node-7 a {
+/* line 241, jee.scss */
+#main #node-7.node-teaser, #main #node-7.node-teaser a {
   color: #22742c;
 }
-/* line 231, jee.scss */
-#main #node-7 h2.node-title, #main #node-7 h2.node-title a {
+/* line 242, jee.scss */
+#main #node-7.node-teaser h2.node-title, #main #node-7.node-teaser h2.node-title a {
   color: #288d80;
 }
-/* line 232, jee.scss */
-#main #node-7 .field-name-field-vignette {
+/* line 243, jee.scss */
+#main #node-7.node-teaser .field-name-field-vignette {
   background: transparent url("../assets/img/shadow-dub.png") no-repeat center center;
   background: none, url("../assets/img/shadow-dub.svg") no-repeat center center;
 }
-/* line 233, jee.scss */
-#main #node-7 .line {
+/* line 244, jee.scss */
+#main #node-7.node-teaser .line {
   background-color: #62a530;
 }
-/* line 237, jee.scss */
-#main #node-8::after {
+/* line 250, jee.scss */
+#main #node-8.node-teaser::after {
   background: transparent url("../assets/img/bgd-juso.png") no-repeat center center;
   background: none, url("../assets/img/bgd-juso.svg") no-repeat center center;
 }
-/* line 238, jee.scss */
-#main #node-8, #main #node-8 a {
+/* line 251, jee.scss */
+#main #node-8.node-teaser, #main #node-8.node-teaser a {
   color: #0b7f8a;
 }
-/* line 239, jee.scss */
-#main #node-8 h2.node-title, #main #node-8 h2.node-title a {
+/* line 252, jee.scss */
+#main #node-8.node-teaser h2.node-title, #main #node-8.node-teaser h2.node-title a {
   color: #009aa8;
 }
-/* line 240, jee.scss */
-#main #node-8 .field-name-field-vignette {
+/* line 253, jee.scss */
+#main #node-8.node-teaser .field-name-field-vignette {
   background: transparent url("../assets/img/shadow-juso.png") no-repeat center center;
   background: none, url("../assets/img/shadow-juso.svg") no-repeat center center;
 }
-/* line 241, jee.scss */
-#main #node-8 .line {
+/* line 254, jee.scss */
+#main #node-8.node-teaser .line {
   background-color: #33b4b5;
 }
-/* line 251, jee.scss */
+/* line 265, jee.scss */
 #main .node-chapitre.node-teaser {
   z-index: 2;
   position: absolute;
@@ -4147,31 +4153,38 @@ div.messages {
    _/ // /|  / / / / /___/ _, _/ ___ / /___  / / _/ /  | |/ // /  / / / /___
   /___/_/ |_/ /_/ /_____/_/ |_/_/  |_\____/ /_/ /___/  |___/___/ /_/ /_____/
   */
-      /*
-       ____  _____ _____ _____ _____ __  _____    _____ _____ ____  _____
-      |    \|   __|   __|  _  |  |  |  ||_   _|  |     |     |    \|   __|
-      |  |  |   __|   __|     |  |  |  |__| |    | | | |  |  |  |  |   __|
-      |____/|_____|__|  |__|__|_____|_____|_|    |_|_|_|_____|____/|_____|
+    /*
+     ____  _____ _____ _____ _____ __  _____    _____ _____ ____  _____
+    |    \|   __|   __|  _  |  |  |  ||_   _|  |     |     |    \|   __|
+    |  |  |   __|   __|     |  |  |  |__| |    | | | |  |  |  |  |   __|
+    |____/|_____|__|  |__|__|_____|_____|_|    |_|_|_|_____|____/|_____|
 
-      */
+    */
   opacity: 1;
   -webkit-transition: 1s ease-out;
           transition: 1s ease-out;
   -webkit-transition-property: opacity;
           transition-property: opacity;
-      /*
-       _____ _____ _____ _____ _____ _____ _ _ _    _____ _____ ____  _____
-      |  _  | __  |   __|  |  |     |   __| | | |  |     |     |    \|   __|
-      |   __|    -|   __|  |  |-   -|   __| | | |  | | | |  |  |  |  |   __|
-      |__|  |__|__|_____|\___/|_____|_____|_____|  |_|_|_|_____|____/|_____|
+    /*
+     _____ _____ _____ _____ _____ _____ _ _ _    _____ _____ ____  _____
+    |  _  | __  |   __|  |  |     |   __| | | |  |     |     |    \|   __|
+    |   __|    -|   __|  |  |-   -|   __| | | |  | | | |  |  |  |  |   __|
+    |__|  |__|__|_____|\___/|_____|_____|_____|  |_|_|_|_____|____/|_____|
 
-      */
+    */
   /*
    _____ _____ _____ _____ _____ _____ _____ _____    _____ _____ ____  _____
   |     |     |_   _|     |   __|  _  |_   _|   __|  |     |     |    \|   __|
   | | | |-   -| | | |-   -|  |  |     | | | |   __|  | | | |  |  |  |  |   __|
   |_|_|_|_____| |_| |_____|_____|__|__| |_| |_____|  |_|_|_|_____|____/|_____|
   */
+    /*
+     _____ _____ _____ _____ _____ _____ _____    ____  _____ _____ _____ __    _____ __ __ _____ ____
+    |     |  |  |  _  |  _  |_   _|   __| __  |  |    \|     |   __|  _  |  |  |  _  |  |  |   __|    \
+    |   --|     |     |   __| | | |   __|    -|  |  |  |-   -|__   |   __|  |__|     |_   _|   __|  |  |
+    |_____|__|__|__|__|__|    |_| |_____|__|__|  |____/|_____|_____|__|  |_____|__|__| |_| |_____|____/
+
+    */
   /*
      _____________   ____________  ___    __   _____     __                     _       __                       __  _            _
     / ____/ ____/ | / / ____/ __ \/   |  / /  / ___/   _/_/___  ____  ____     (_)___  / /____  _________ ______/ /_(_)   _____  | |
@@ -4181,7 +4194,7 @@ div.messages {
                                                     |_|                                                                      /_/
   */
 }
-/* line 274, jee.scss */
+/* line 288, jee.scss */
 #main .node-chapitre.node-teaser h2.node-title {
   -webkit-transform: none;
       -ms-transform: none;
@@ -4195,11 +4208,11 @@ div.messages {
           transition-property: transform;
   z-index: 5;
 }
-/* line 281, jee.scss */
+/* line 295, jee.scss */
 #main .node-chapitre.node-teaser > .content {
   position: relative;
 }
-/* line 282, jee.scss */
+/* line 296, jee.scss */
 #main .node-chapitre.node-teaser .texts {
   opacity: 0;
   height: 1px;
@@ -4210,7 +4223,7 @@ div.messages {
           transition-property: opacity height;
   position: absolute;
 }
-/* line 288, jee.scss */
+/* line 302, jee.scss */
 #main .node-chapitre.node-teaser .field-name-field-partie {
   opacity: 0;
   position: absolute;
@@ -4219,12 +4232,12 @@ div.messages {
   -webkit-transition-property: opacity -webkit-transform;
           transition-property: opacity transform;
 }
-/* line 294, jee.scss */
+/* line 308, jee.scss */
 #main .node-chapitre.node-teaser .field-name-field-partie:nth-child(2) {
   z-index: 2;
   opacity: 1;
 }
-/* line 298, jee.scss */
+/* line 312, jee.scss */
 #main .node-chapitre.node-teaser .field-name-field-partie:nth-child(2) > .field-type-text {
   opacity: 0;
   -webkit-transition: 1s ease-out 0.9s;
@@ -4232,12 +4245,12 @@ div.messages {
   -webkit-transition-property: opacity;
           transition-property: opacity;
 }
-/* line 303, jee.scss */
+/* line 317, jee.scss */
 #main .node-chapitre.node-teaser .field-name-field-partie:nth-child(2) > .field-name-field-vignette {
   cursor: pointer;
   z-index: 2;
 }
-/* line 306, jee.scss */
+/* line 320, jee.scss */
 #main .node-chapitre.node-teaser:after {
   opacity: 0;
   -webkit-transition: 2s ease-in;
@@ -4249,11 +4262,11 @@ div.messages {
   bottom: 2px;
   right: 2px;
 }
-/* line 324, jee.scss */
+/* line 338, jee.scss */
 #main .node-chapitre.node-teaser.previewed {
   z-index: 100;
 }
-/* line 326, jee.scss */
+/* line 340, jee.scss */
 #main .node-chapitre.node-teaser.previewed:after {
   opacity: 1;
   top: 2em;
@@ -4261,40 +4274,44 @@ div.messages {
   right: -12em;
   bottom: -30em;
 }
-/* line 333, jee.scss */
+/* line 347, jee.scss */
 #main .node-chapitre.node-teaser.previewed h2.node-title {
   -webkit-transform: scale(2, 2);
       -ms-transform: scale(2, 2);
           transform: scale(2, 2);
 }
-/* line 334, jee.scss */
+/* line 348, jee.scss */
 #main .node-chapitre.node-teaser.previewed .texts {
   opacity: 1;
   height: 8em;
 }
-/* line 335, jee.scss */
+/* line 349, jee.scss */
 #main .node-chapitre.node-teaser.previewed .field-name-field-partie {
   opacity: 1;
   z-index: 0;
 }
-/* line 338, jee.scss */
+/* line 352, jee.scss */
 #main .node-chapitre.node-teaser.previewed .field-name-field-partie > .field {
   opacity: 1;
   z-index: -1;
   cursor: default;
 }
-/* line 348, jee.scss */
+/* line 362, jee.scss */
 #main .node-chapitre.node-teaser.mitigated {
   opacity: 0.3;
 }
-/* line 361, jee.scss */
+/* line 373, jee.scss */
+.chapter-displayed #main .node-chapitre.node-teaser {
+  opacity: 0.1;
+}
+/* line 385, jee.scss */
 #main .node-chapitre.node-teaser:after {
   content: " ";
   background-size: contain !important;
   position: absolute;
   z-index: -1;
 }
-/* line 368, jee.scss */
+/* line 392, jee.scss */
 #main .node-chapitre.node-teaser h2.node-title {
   font-family: "epflulb";
   font-weight: normal;
@@ -4305,30 +4322,30 @@ div.messages {
   z-index: 5;
 }
 @media only screen and (min-width: 64.063em) {
-  /* line 368, jee.scss */
+  /* line 392, jee.scss */
   #main .node-chapitre.node-teaser h2.node-title {
     font-size: 1.3em;
   }
 }
 @media only screen and (min-width: 90.063em) {
-  /* line 368, jee.scss */
+  /* line 392, jee.scss */
   #main .node-chapitre.node-teaser h2.node-title {
     font-size: 1.8em;
   }
 }
-/* line 388, jee.scss */
+/* line 412, jee.scss */
 #main .node-chapitre.node-teaser .field-name-field-comprendre {
   min-width: 16em;
 }
-/* line 389, jee.scss */
+/* line 413, jee.scss */
 #main .node-chapitre.node-teaser .field-name-field-comprendre h1, #main .node-chapitre.node-teaser .field-name-field-comprendre h2, #main .node-chapitre.node-teaser .field-name-field-comprendre h3, #main .node-chapitre.node-teaser .field-name-field-comprendre h4, #main .node-chapitre.node-teaser .field-name-field-comprendre h5, #main .node-chapitre.node-teaser .field-name-field-comprendre h6 {
   display: none !important;
 }
-/* line 391, jee.scss */
+/* line 415, jee.scss */
 #main .node-chapitre.node-teaser .field-name-field-comprendre p {
   margin: 0;
 }
-/* line 395, jee.scss */
+/* line 419, jee.scss */
 #main .node-chapitre.node-teaser ul.links {
   display: block;
   margin: 0;
@@ -4337,11 +4354,11 @@ div.messages {
   position: relative;
   width: 100%;
 }
-/* line 397, jee.scss */
+/* line 421, jee.scss */
 #main .node-chapitre.node-teaser ul.links li.node-readmore {
   padding: 0;
 }
-/* line 399, jee.scss */
+/* line 423, jee.scss */
 #main .node-chapitre.node-teaser ul.links li.node-readmore a {
   display: inline-block;
   height: 25px;
@@ -4353,12 +4370,12 @@ div.messages {
   background: transparent url("../assets/img/readmore-btn.png") no-repeat right center;
   background: none, url("../assets/img/readmore-btn.svg") no-repeat right center;
 }
-/* line 412, jee.scss */
+/* line 436, jee.scss */
 #main .node-chapitre.node-teaser .field-name-field-partie {
   clear: both;
   padding-top: 1em;
 }
-/* line 416, jee.scss */
+/* line 440, jee.scss */
 #main .node-chapitre.node-teaser .field-name-field-vignette {
   position: relative;
   float: left;
@@ -4369,28 +4386,28 @@ div.messages {
   margin-left: 0;
   background-size: contain;
 }
-/* line 429, jee.scss */
+/* line 453, jee.scss */
 #main .node-chapitre.node-teaser .field-type-text {
   min-width: 16em;
 }
-/* line 430, jee.scss */
+/* line 454, jee.scss */
 #main .node-chapitre.node-teaser .field-name-field-titre {
   font-family: "epflul";
   font-size: 1.6em;
   line-height: 1.1;
 }
-/* line 435, jee.scss */
+/* line 459, jee.scss */
 #main .node-chapitre.node-teaser .field-name-field-sous-titre {
   font-family: "epflul";
   font-size: 1.4em;
   line-height: 1.2;
 }
-/* line 440, jee.scss */
+/* line 464, jee.scss */
 #main .node-chapitre.node-teaser .field-name-field-description {
   font-size: 0.88em;
   line-height: 1.2;
 }
-/* line 446, jee.scss */
+/* line 470, jee.scss */
 #main .node-chapitre.node-teaser .line {
   z-index: -1;
   position: absolute;
@@ -4402,13 +4419,177 @@ div.messages {
   width: 2px;
   opacity: 0.4;
 }
-/* line 457, jee.scss */
-#main .chapter-wrapper {
+/* line 489, jee.scss */
+#main #chapter-wrapper {
   position: absolute;
   top: 0;
   left: 0;
-  bottom: 0;
-  right: 0;
+  width: 100%;
+  height: 100%;
+  z-index: -1;
+  opacity: 0;
+  -webkit-transition: 2s ease-out;
+          transition: 2s ease-out;
+  -webkit-transition-property: opacity;
+          transition-property: opacity;
+}
+/* line 498, jee.scss */
+#main #chapter-wrapper.visible {
+  opacity: 1;
+  z-index: 500;
+  /*
+   _____ _____ __    _____ _____ _____    _____ __ __    _____ _____ ____  _____
+  |     |     |  |  |     | __  |   __|  | __  |  |  |  |   | |     |    \|   __|
+  |   --|  |  |  |__|  |  |    -|__   |  | __ -|_   _|  | | | |  |  |  |  |   __|
+  |_____|_____|_____|_____|__|__|_____|  |_____| |_|    |_|___|_____|____/|_____|
+  */
+  /*
+   _____ _____ _____ _____ _____ _____ _____ _____ _____
+  |   __|   __|   | |   __| __  |     |     |  |  |   __|
+  |  |  |   __| | | |   __|    -|-   -|  |  |  |  |   __|
+  |_____|_____|_|___|_____|__|__|_____|__  _|_____|_____|
+                                         |__|
+  */
+}
+/* line 509, jee.scss */
+#main #chapter-wrapper.visible #node-2 .field-type-text-long .field-label,
+#main #chapter-wrapper.visible #node-2 h2.node-title,
+#main #chapter-wrapper.visible #node-2 .field-name-field-dbatre li:before {
+  color: #ea5b0c;
+}
+/* line 516, jee.scss */
+#main #chapter-wrapper.visible #node-3 .field-type-text-long .field-label,
+#main #chapter-wrapper.visible #node-3 h2.node-title,
+#main #chapter-wrapper.visible #node-3 .field-name-field-dbatre li:before {
+  color: #cecd00;
+}
+/* line 523, jee.scss */
+#main #chapter-wrapper.visible #node-4 .field-type-text-long .field-label,
+#main #chapter-wrapper.visible #node-4 h2.node-title,
+#main #chapter-wrapper.visible #node-4 .field-name-field-dbatre li:before {
+  color: #de003a;
+}
+/* line 530, jee.scss */
+#main #chapter-wrapper.visible #node-5 .field-type-text-long .field-label,
+#main #chapter-wrapper.visible #node-5 h2.node-title,
+#main #chapter-wrapper.visible #node-5 .field-name-field-dbatre li:before {
+  color: #0066b1;
+}
+/* line 537, jee.scss */
+#main #chapter-wrapper.visible #node-6 .field-type-text-long .field-label,
+#main #chapter-wrapper.visible #node-6 h2.node-title,
+#main #chapter-wrapper.visible #node-6 .field-name-field-dbatre li:before {
+  color: #af1380;
+}
+/* line 544, jee.scss */
+#main #chapter-wrapper.visible #node-7 .field-type-text-long .field-label,
+#main #chapter-wrapper.visible #node-7 h2.node-title,
+#main #chapter-wrapper.visible #node-7 .field-name-field-dbatre li:before {
+  color: #62a530;
+}
+/* line 551, jee.scss */
+#main #chapter-wrapper.visible #node-8 .field-type-text-long .field-label,
+#main #chapter-wrapper.visible #node-8 h2.node-title,
+#main #chapter-wrapper.visible #node-8 .field-name-field-dbatre li:before {
+  color: #33b4b5;
+}
+/* line 567, jee.scss */
+#main #chapter-wrapper .node {
+  position: relative;
+  height: 100%;
+  width: 100%;
+}
+/* line 570, jee.scss */
+#main #chapter-wrapper .node a {
+  color: inherit;
+}
+/* line 573, jee.scss */
+#main #chapter-wrapper .node-title {
+  font-family: "epflulb";
+  font-weight: normal;
+  text-transform: uppercase;
+  text-align: center;
+  max-width: 8.5em;
+  line-height: 0.85;
+  font-size: 2.268em;
+}
+/* line 583, jee.scss */
+#main #chapter-wrapper .node > .field {
+  position: absolute;
+}
+/* line 587, jee.scss */
+#main #chapter-wrapper .field-type-text-long {
+  background-color: rgba(255, 255, 255, 0.9);
+  width: 23em;
+  padding: 1em;
+  z-index: 10;
+}
+/* line 592, jee.scss */
+#main #chapter-wrapper .field-type-text-long .field-label {
+  text-transform: uppercase;
+  font-family: "epflulb";
+  font-size: 1.5em;
+}
+/* line 598, jee.scss */
+#main #chapter-wrapper .field-type-text-long h2 {
+  font-size: 0.88em;
+}
+/* line 601, jee.scss */
+#main #chapter-wrapper .field-type-text-long p {
+  font-size: 0.88em;
+  margin-bottom: 0.5em;
+}
+/* line 606, jee.scss */
+#main #chapter-wrapper .field-name-field-dbatre {
+  left: 60em;
+}
+/* line 608, jee.scss */
+#main #chapter-wrapper .field-name-field-dbatre ul {
+  margin-left: 1em;
+}
+/* line 610, jee.scss */
+#main #chapter-wrapper .field-name-field-dbatre ul li {
+  list-style: none;
+  line-height: 1;
+  margin-bottom: 1em;
+  position: relative;
+}
+/* line 615, jee.scss */
+#main #chapter-wrapper .field-name-field-dbatre ul li:before {
+  content: "?";
+  position: absolute;
+  top: 0;
+  left: -1em;
+  font-family: "epflul";
+}
+/* line 626, jee.scss */
+#main #chapter-wrapper .field-name-field-partie {
+  height: 60%;
+  width: 100%;
+  top: 20%;
+  left: 0;
+}
+/* line 629, jee.scss */
+#main #chapter-wrapper .field-name-field-partie .field-items {
+  position: relative;
+  top: 0;
+  left: 0;
+  height: 100%;
+  width: auto;
+}
+/* line 634, jee.scss */
+#main #chapter-wrapper .field-name-field-partie .field-items .field {
+  position: relative;
+  display: inline-block;
+}
+/* line 637, jee.scss */
+#main #chapter-wrapper .field-name-field-partie .field-items .field .mask {
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  top: 0;
+  left: 0;
+  z-index: 10;
 }
 
 /*  __________  ____  ________________
@@ -4417,13 +4598,13 @@ div.messages {
  / __/ / /_/ / /_/ / / / / /___/ _, _/
 /_/    \____/\____/ /_/ /_____/_/ |_|
 */
-/* line 470, jee.scss */
+/* line 656, jee.scss */
 #footer {
   position: fixed;
   bottom: 0;
   right: 0;
 }
-/* line 473, jee.scss */
+/* line 659, jee.scss */
 #footer .block {
   display: inline-block;
   vertical-align: top;
@@ -4436,7 +4617,7 @@ div.messages {
  / /  / // / ___/ / /___
 /_/  /_/___//____/\____/
 */
-/* line 485, jee.scss */
+/* line 671, jee.scss */
 #fullscreen-btn {
   position: fixed;
   top: 20px;
@@ -4444,7 +4625,7 @@ div.messages {
   z-index: 1000;
 }
 
-/* line 499, jee.scss */
+/* line 685, jee.scss */
 .bubble-1 {
   position: absolute;
   z-index: 0;
@@ -4457,7 +4638,7 @@ div.messages {
   left: -200px;
 }
 
-/* line 503, jee.scss */
+/* line 689, jee.scss */
 .bubble-2 {
   position: absolute;
   z-index: 0;
@@ -4470,7 +4651,7 @@ div.messages {
   right: -400px;
 }
 
-/* line 508, jee.scss */
+/* line 694, jee.scss */
 .star {
   position: absolute;
   z-index: 0;
@@ -4488,7 +4669,7 @@ div.messages {
  / /_/ / /___/ /_/ / /_/ / /_/ /
 /_____/_____/_____/\____/\____/
 */
-/* line 522, jee.scss */
+/* line 708, jee.scss */
 #fps {
   position: fixed;
   top: 20px;
@@ -4496,7 +4677,7 @@ div.messages {
   z-index: 1000;
 }
 
-/* line 528, jee.scss */
+/* line 714, jee.scss */
 #nav-cursor {
   position: absolute;
   width: 6px;

+ 400 - 214
sites/all/themes/gui/jee/css/jee.scss

@@ -186,59 +186,73 @@ div.messages{
   */
   //SOL
   #node-2{
-    &::after{ @include bg-svg-png('bgd-sol');}
-    &, a{color:$SOL-col-txt;}
-    h2.node-title{&,a{color:$SOL-color;}}
-    .field-name-field-vignette{@include bg-svg-png('shadow-sol');}
-    .line{background-color:$SOL-col-active;}
+    &.node-teaser{
+      &::after{ @include bg-svg-png('bgd-sol');}
+      &, a{color:$SOL-col-txt;}
+      h2.node-title{&,a{color:$SOL-color;}}
+      .field-name-field-vignette{@include bg-svg-png('shadow-sol');}
+      .line{background-color:$SOL-col-active;}
+    }
   }
   //DPH
   #node-3{
-    &::after{ @include bg-svg-png('bgd-dph');}
-    &, a{color:$DPH-col-txt;}
-    h2.node-title{&,a{color:$DPH-color;}}
-    .field-name-field-vignette{@include bg-svg-png('shadow-dph');}
-    .line{background-color:$DPH-col-active;}
+    &.node-teaser{
+      &::after{ @include bg-svg-png('bgd-dph');}
+      &, a{color:$DPH-col-txt;}
+      h2.node-title{&,a{color:$DPH-color;}}
+      .field-name-field-vignette{@include bg-svg-png('shadow-dph');}
+      .line{background-color:$DPH-col-active;}
+    }
   }
   // SUB
   #node-4{
-    &::after{ @include bg-svg-png('bgd-sub');}
-    &, a{color:$SUB-col-txt;}
-    h2.node-title{&,a{color:$SUB-color;}}
-    .field-name-field-vignette{@include bg-svg-png('shadow-sub');}
-    .line{background-color:$SUB-col-active;}
+    &.node-teaser{
+      &::after{ @include bg-svg-png('bgd-sub');}
+      &, a{color:$SUB-col-txt;}
+      h2.node-title{&,a{color:$SUB-color;}}
+      .field-name-field-vignette{@include bg-svg-png('shadow-sub');}
+      .line{background-color:$SUB-col-active;}
+    }
   }
   // BC
   #node-5{
-    &::after{ @include bg-svg-png('bgd-bc');}
-    &, a{color:$BC-col-txt;}
-    h2.node-title{&,a{color:$BC-color;}}
-    .field-name-field-vignette{@include bg-svg-png('shadow-bc');}
-    .line{background-color:$BC-col-active;}
+    &.node-teaser{
+      &::after{ @include bg-svg-png('bgd-bc');}
+      &, a{color:$BC-col-txt;}
+      h2.node-title{&,a{color:$BC-color;}}
+      .field-name-field-vignette{@include bg-svg-png('shadow-bc');}
+      .line{background-color:$BC-col-active;}
+    }
   }
   //OPP
   #node-6{
-    &::after{ @include bg-svg-png('bgd-opp');}
-    &, a{color:$OPP-col-txt;}
-    h2.node-title{&,a{color:$OPP-color;}}
-    .field-name-field-vignette{@include bg-svg-png('shadow-opp');}
-    .line{background-color:$OPP-col-active;}
+    &.node-teaser{
+      &::after{ @include bg-svg-png('bgd-opp');}
+      &, a{color:$OPP-col-txt;}
+      h2.node-title{&,a{color:$OPP-color;}}
+      .field-name-field-vignette{@include bg-svg-png('shadow-opp');}
+      .line{background-color:$OPP-col-active;}
+    }
   }
   //DUB
   #node-7{
-    &::after{ @include bg-svg-png('bgd-dub');}
-    &, a{color:$DUB-col-txt;}
-    h2.node-title{&,a{color:$DUB-color;}}
-    .field-name-field-vignette{@include bg-svg-png('shadow-dub');}
-    .line{background-color:$DUB-col-active;}
+    &.node-teaser{
+      &::after{ @include bg-svg-png('bgd-dub');}
+      &, a{color:$DUB-col-txt;}
+      h2.node-title{&,a{color:$DUB-color;}}
+      .field-name-field-vignette{@include bg-svg-png('shadow-dub');}
+      .line{background-color:$DUB-col-active;}
+    }
   }
   // JUSO
   #node-8{
-    &::after{ @include bg-svg-png('bgd-juso');}
-    &, a{color:$JUSO-col-txt;}
-    h2.node-title{&,a{color:$JUSO-color;}}
-    .field-name-field-vignette{@include bg-svg-png('shadow-juso');}
-    .line{background-color:$JUSO-col-active;}
+    &.node-teaser{
+      &::after{ @include bg-svg-png('bgd-juso');}
+      &, a{color:$JUSO-col-txt;}
+      h2.node-title{&,a{color:$JUSO-color;}}
+      .field-name-field-vignette{@include bg-svg-png('shadow-juso');}
+      .line{background-color:$JUSO-col-active;}
+    }
   }
 
 /*
@@ -250,215 +264,387 @@ div.messages{
 */
   .node-chapitre.node-teaser{
     z-index: 2;
-      position:absolute;
+    position:absolute;
 
-      /*
-          _____   __________________  ___   _________________    __________________
-         /  _/ | / /_  __/ ____/ __ \/   | / ____/_  __/  _/ |  / /  _/_  __/ ____/
-         / //  |/ / / / / __/ / /_/ / /| |/ /     / /  / / | | / // /  / / / __/
-       _/ // /|  / / / / /___/ _, _/ ___ / /___  / / _/ /  | |/ // /  / / / /___
-      /___/_/ |_/ /_/ /_____/_/ |_/_/  |_\____/ /_/ /___/  |___/___/ /_/ /_____/
-      */
-
-      /*
-       ____  _____ _____ _____ _____ __  _____    _____ _____ ____  _____
-      |    \|   __|   __|  _  |  |  |  ||_   _|  |     |     |    \|   __|
-      |  |  |   __|   __|     |  |  |  |__| |    | | | |  |  |  |  |   __|
-      |____/|_____|__|  |__|__|_____|_____|_|    |_|_|_|_____|____/|_____|
-
-      */
-      opacity:1;
+    /*
+        _____   __________________  ___   _________________    __________________
+       /  _/ | / /_  __/ ____/ __ \/   | / ____/_  __/  _/ |  / /  _/_  __/ ____/
+       / //  |/ / / / / __/ / /_/ / /| |/ /     / /  / / | | / // /  / / / __/
+     _/ // /|  / / / / /___/ _, _/ ___ / /___  / / _/ /  | |/ // /  / / / /___
+    /___/_/ |_/ /_/ /_____/_/ |_/_/  |_\____/ /_/ /___/  |___/___/ /_/ /_____/
+    */
+
+    /*
+     ____  _____ _____ _____ _____ __  _____    _____ _____ ____  _____
+    |    \|   __|   __|  _  |  |  |  ||_   _|  |     |     |    \|   __|
+    |  |  |   __|   __|     |  |  |  |__| |    | | | |  |  |  |  |   __|
+    |____/|_____|__|  |__|__|_____|_____|_|    |_|_|_|_____|____/|_____|
+
+    */
+    opacity:1;
+    transition:1s ease-out;
+    transition-property:opacity;
+
+    h2.node-title{
+      transform:none;
+      transform-origin:bottom center;
       transition:1s ease-out;
-      transition-property:opacity;
-
-      h2.node-title{
-        transform:none;
-        transform-origin:bottom center;
-        transition:1s ease-out;
-        transition-property:transform;
-        z-index:5;
-      }
-      >.content{position:relative;}
-      .texts{
-        opacity:0; height:1px; overflow:hidden;
-        transition:1s ease-out;
-        transition-property:opacity height;
+      transition-property:transform;
+      z-index:5;
+    }
+    >.content{position:relative;}
+    .texts{
+      opacity:0; height:1px; overflow:hidden;
+      transition:1s ease-out;
+      transition-property:opacity height;
+      position:absolute;
+    }
+    .field-name-field-partie{
+        opacity:0;
         position:absolute;
-      }
-      .field-name-field-partie{
-          opacity:0;
-          position:absolute;
-          transition:1s ease-in-out 0.1s;
-          transition-property: opacity transform;
-          // just let see the field vignette of first partie
-          &:nth-child(2){
-            z-index:2;
-            opacity:1;
-            // transition-delay:0;
-            >.field-type-text{
-              opacity:0;
-              transition:1s ease-out 0.9s;
-              transition-property: opacity;
-            }
-            >.field-name-field-vignette{cursor:pointer;z-index:2;}
+        transition:1s ease-in-out 0.1s;
+        transition-property: opacity transform;
+        // just let see the field vignette of first partie
+        &:nth-child(2){
+          z-index:2;
+          opacity:1;
+          // transition-delay:0;
+          >.field-type-text{
+            opacity:0;
+            transition:1s ease-out 0.9s;
+            transition-property: opacity;
           }
-      }
+          >.field-name-field-vignette{cursor:pointer;z-index:2;}
+        }
+    }
+    &:after{
+      opacity:0;
+      transition: 2s ease-in;
+      transition-property:opacity;
+      top:1px; left:1px; bottom:2px; right:2px;
+    }
+    .line{
+      // transition: 0.1s ease-out;
+      // transition-property:height transform;
+    }
+
+    /*
+     _____ _____ _____ _____ _____ _____ _ _ _    _____ _____ ____  _____
+    |  _  | __  |   __|  |  |     |   __| | | |  |     |     |    \|   __|
+    |   __|    -|   __|  |  |-   -|   __| | | |  | | | |  |  |  |  |   __|
+    |__|  |__|__|_____|\___/|_____|_____|_____|  |_|_|_|_____|____/|_____|
+
+    */
+    &.previewed{
+      z-index:100;
       &:after{
-        opacity:0;
-        transition: 2s ease-in;
-        transition-property:opacity;
-        top:1px; left:1px; bottom:2px; right:2px;
+        opacity:1;
+        $pad:-2em;
+        top:-$pad;
+        left:$pad*6; right:$pad*6;
+        bottom:$pad*15;
       }
-      .line{
-        // transition: 0.1s ease-out;
-        // transition-property:height transform;
+      h2.node-title{transform:scale(2,2);}
+      .texts{opacity:1; height:8em;}
+      .field-name-field-partie{
+        opacity:1; z-index:0;
+        // display all fields inside each parties
+        >.field{opacity:1; z-index:-1; cursor:default;}
       }
+    }
 
-      /*
-       _____ _____ _____ _____ _____ _____ _ _ _    _____ _____ ____  _____
-      |  _  | __  |   __|  |  |     |   __| | | |  |     |     |    \|   __|
-      |   __|    -|   __|  |  |-   -|   __| | | |  | | | |  |  |  |  |   __|
-      |__|  |__|__|_____|\___/|_____|_____|_____|  |_|_|_|_____|____/|_____|
+    /*
+     _____ _____ _____ _____ _____ _____ _____ _____    _____ _____ ____  _____
+    |     |     |_   _|     |   __|  _  |_   _|   __|  |     |     |    \|   __|
+    | | | |-   -| | | |-   -|  |  |     | | | |   __|  | | | |  |  |  |  |   __|
+    |_|_|_|_____| |_| |_____|_____|__|__| |_| |_____|  |_|_|_|_____|____/|_____|
+    */
+    &.mitigated{
+      opacity:0.3;
+    }
 
-      */
-      &.previewed{
-        z-index:100;
-        &:after{
-          opacity:1;
-          $pad:-2em;
-          top:-$pad;
-          left:$pad*6; right:$pad*6;
-          bottom:$pad*15;
-        }
-        h2.node-title{transform:scale(2,2);}
-        .texts{opacity:1; height:8em;}
-        .field-name-field-partie{
-          opacity:1; z-index:0;
-          // display all fields inside each parties
-          >.field{opacity:1; z-index:-1; cursor:default;}
-        }
-      }
+    /*
+     _____ _____ _____ _____ _____ _____ _____    ____  _____ _____ _____ __    _____ __ __ _____ ____
+    |     |  |  |  _  |  _  |_   _|   __| __  |  |    \|     |   __|  _  |  |  |  _  |  |  |   __|    \
+    |   --|     |     |   __| | | |   __|    -|  |  |  |-   -|__   |   __|  |__|     |_   _|   __|  |  |
+    |_____|__|__|__|__|__|    |_| |_____|__|__|  |____/|_____|_____|__|  |_____|__|__| |_| |_____|____/
 
-      /*
-       _____ _____ _____ _____ _____ _____ _____ _____    _____ _____ ____  _____
-      |     |     |_   _|     |   __|  _  |_   _|   __|  |     |     |    \|   __|
-      | | | |-   -| | | |-   -|  |  |     | | | |   __|  | | | |  |  |  |  |   __|
-      |_|_|_|_____| |_| |_____|_____|__|__| |_| |_____|  |_|_|_|_____|____/|_____|
-      */
-      &.mitigated{
-        opacity:0.3;
-      }
+    */
+    .chapter-displayed & {
+      opacity:0.1;
+    }
 
+    /*
+       _____________   ____________  ___    __   _____     __                     _       __                       __  _            _
+      / ____/ ____/ | / / ____/ __ \/   |  / /  / ___/   _/_/___  ____  ____     (_)___  / /____  _________ ______/ /_(_)   _____  | |
+     / / __/ __/ /  |/ / __/ / /_/ / /| | / /   \__ \   / // __ \/ __ \/ __ \   / / __ \/ __/ _ \/ ___/ __ `/ ___/ __/ / | / / _ \ / /
+    / /_/ / /___/ /|  / /___/ _, _/ ___ |/ /______/ /  / // / / / /_/ / / / /  / / / / / /_/  __/ /  / /_/ / /__/ /_/ /| |/ /  __// /
+    \____/_____/_/ |_/_____/_/ |_/_/  |_/_____/____/  / //_/ /_/\____/_/ /_/  /_/_/ /_/\__/\___/_/   \__,_/\___/\__/_/ |___/\___//_/
+                                                      |_|                                                                      /_/
+    */
+    &:after{ // background
+      content:" ";
+      background-size:contain!important;
+      position:absolute;
+      z-index:-1;
+    }
 
-      /*
-         _____________   ____________  ___    __   _____     __                     _       __                       __  _            _
-        / ____/ ____/ | / / ____/ __ \/   |  / /  / ___/   _/_/___  ____  ____     (_)___  / /____  _________ ______/ /_(_)   _____  | |
-       / / __/ __/ /  |/ / __/ / /_/ / /| | / /   \__ \   / // __ \/ __ \/ __ \   / / __ \/ __/ _ \/ ___/ __ `/ ___/ __/ / | / / _ \ / /
-      / /_/ / /___/ /|  / /___/ _, _/ ___ |/ /______/ /  / // / / / /_/ / / / /  / / / / / /_/  __/ /  / /_/ / /__/ /_/ /| |/ /  __// /
-      \____/_____/_/ |_/_____/_/ |_/_/  |_/_____/____/  / //_/ /_/\____/_/ /_/  /_/_/ /_/\__/\___/_/   \__,_/\___/\__/_/ |___/\___//_/
-                                                        |_|                                                                      /_/
-      */
-      &:after{ // background
-        content:" ";
-        background-size:contain!important;
-        position:absolute;
-        z-index:-1;
+    h2.node-title{
+      font-family: "epflulb";
+      font-weight:normal;
+      text-transform: uppercase;
+      text-align: center;
+      max-width: 8.5em;
+      line-height: 0.85;
+      @media #{$large-up} {
+        font-size: 1.3em;
       }
-
-      h2.node-title{
-        font-family: "epflulb";
-        font-weight:normal;
-        text-transform: uppercase;
-        text-align: center;
-        max-width: 8.5em;
-        line-height: 0.85;
-        @media #{$large-up} {
-          font-size: 1.3em;
-        }
-        @media #{$xlarge-up} {
-          font-size:1.8em;
-        }
-        z-index: 5;
+      @media #{$xlarge-up} {
+        font-size:1.8em;
       }
+      z-index: 5;
+    }
 
-      .texts{
-        // position:relative;
-      }
+    .texts{
+      // position:relative;
+    }
 
-      .field-name-field-comprendre{
-        h1,h2,h3,h4,h5,h6{display:none!important;}
-        // max-width:15em;
-        p{margin:0;}
-        min-width:16em;
-      }
+    .field-name-field-comprendre{
+      h1,h2,h3,h4,h5,h6{display:none!important;}
+      // max-width:15em;
+      p{margin:0;}
+      min-width:16em;
+    }
 
-      ul.links{
-        display:block; margin:0; text-align:right; z-index:5; position:relative; width:100%;
-        li.node-readmore{
-          padding:0;
-          a{
-            display:inline-block;
-            height:25px;
-            font-family: "open_sans";
-            font-weight: 900;
-            color:#000!important;
-            width:8em; text-align: left;
-            // background: transparent url(../assets/img/readmore-btn.svg) no-repeat right center;
-            @include bg-svg-png('readmore-btn', no-repeat, right, center);
-          }
+    ul.links{
+      display:block; margin:0; text-align:right; z-index:5; position:relative; width:100%;
+      li.node-readmore{
+        padding:0;
+        a{
+          display:inline-block;
+          height:25px;
+          font-family: "open_sans";
+          font-weight: 900;
+          color:#000!important;
+          width:8em; text-align: left;
+          // background: transparent url(../assets/img/readmore-btn.svg) no-repeat right center;
+          @include bg-svg-png('readmore-btn', no-repeat, right, center);
         }
       }
+    }
 
-      .field-name-field-partie{clear:both; padding-top:1em;}
+    .field-name-field-partie{clear:both; padding-top:1em;}
 
 
+    $shadow-size:3.5em;
+    .field-name-field-vignette{
+      position:relative;
+      float:left;
       $shadow-size:3.5em;
-      .field-name-field-vignette{
-        position:relative;
-        float:left;
-        $shadow-size:3.5em;
-        padding:$shadow-size;
-        margin-top:-$shadow-size*1.15;
-        margin-right:-$shadow-size+1.5em;
-        margin-bottom:0;
-        margin-left:0;
-        background-size: contain;
-        // background-repeat: no-repeat;
-        // background-origin: center center;
+      padding:$shadow-size;
+      margin-top:-$shadow-size*1.15;
+      margin-right:-$shadow-size+1.5em;
+      margin-bottom:0;
+      margin-left:0;
+      background-size: contain;
+      // background-repeat: no-repeat;
+      // background-origin: center center;
+    }
+    .field-type-text{ min-width:16em; }
+    .field-name-field-titre{
+      font-family: "epflul";
+      font-size:1.6em;
+      line-height:1.1;
+    }
+    .field-name-field-sous-titre{
+      font-family: "epflul";
+      font-size:1.4em;
+      line-height:1.2;
+    }
+    .field-name-field-description{
+      // font-family: "epf-lul";
+      font-size:0.88em;
+      line-height:1.2;
+    }
+
+    .line{
+      z-index:-1;
+      position:absolute;
+      top:$shadow-size - 0.5em; left:$shadow-size+2.5em;
+      transform-origin:top left;
+      width:2px; //background-color:red;
+      opacity:0.4;
+    }
+
+  } // node-chapitre
+
+
+/* ____  ____  _______   ____________     ________  _____    ____  ________________  _____
+  / __ \/ __ \/ ____/ | / / ____/ __ \   / ____/ / / /   |  / __ \/_  __/ ____/ __ \/ ___/
+ / / / / /_/ / __/ /  |/ / __/ / / / /  / /   / /_/ / /| | / /_/ / / / / __/ / /_/ /\__ \
+/ /_/ / ____/ /___/ /|  / /___/ /_/ /  / /___/ __  / ___ |/ ____/ / / / /___/ _, _/___/ /
+\____/_/   /_____/_/ |_/_____/_____/   \____/_/ /_/_/  |_/_/     /_/ /_____/_/ |_|/____/
+*/
+
+  #chapter-wrapper{
+    position:absolute;
+    top:0; left:0;
+    width:100%; height:100%;
+    z-index: -1;
+    opacity:0;
+    transition:2s ease-out;
+    transition-property:opacity;
+
+    &.visible{
+      opacity:1;
+      z-index: 500;
+    /*
+     _____ _____ __    _____ _____ _____    _____ __ __    _____ _____ ____  _____
+    |     |     |  |  |     | __  |   __|  | __  |  |  |  |   | |     |    \|   __|
+    |   --|  |  |  |__|  |  |    -|__   |  | __ -|_   _|  | | | |  |  |  |  |   __|
+    |_____|_____|_____|_____|__|__|_____|  |_____| |_|    |_|___|_____|____/|_____|
+    */
+
+    #node-2{
+      .field-type-text-long .field-label,
+      h2.node-title,
+      .field-name-field-dbatre li:before{
+        color:$SOL-col-active;
       }
-      .field-type-text{ min-width:16em; }
-      .field-name-field-titre{
-        font-family: "epflul";
-        font-size:1.6em;
-        line-height:1.1;
+    }
+    #node-3{
+      .field-type-text-long .field-label,
+      h2.node-title,
+      .field-name-field-dbatre li:before{
+        color:$DPH-col-active;
       }
-      .field-name-field-sous-titre{
-        font-family: "epflul";
-        font-size:1.4em;
-        line-height:1.2;
+    }
+    #node-4{
+      .field-type-text-long .field-label,
+      h2.node-title,
+      .field-name-field-dbatre li:before{
+        color:$SUB-col-active;
       }
-      .field-name-field-description{
-        // font-family: "epf-lul";
-        font-size:0.88em;
-        line-height:1.2;
+    }
+    #node-5{
+      .field-type-text-long .field-label,
+      h2.node-title,
+      .field-name-field-dbatre li:before{
+        color:$BC-col-active;
+      }
+    }
+    #node-6{
+      .field-type-text-long .field-label,
+      h2.node-title,
+      .field-name-field-dbatre li:before{
+        color:$OPP-col-active;
       }
+    }
+    #node-7{
+      .field-type-text-long .field-label,
+      h2.node-title,
+      .field-name-field-dbatre li:before{
+        color:$DUB-col-active;
+      }
+    }
+    #node-8{
+      .field-type-text-long .field-label,
+      h2.node-title,
+      .field-name-field-dbatre li:before{
+        color:$JUSO-col-active;
+      }
+    }
 
-      .line{
-        z-index:-1;
-        position:absolute;
-        top:$shadow-size - 0.5em; left:$shadow-size+2.5em;
-        transform-origin:top left;
-        width:2px; //background-color:red;
-        opacity:0.4;
+    /*
+     _____ _____ _____ _____ _____ _____ _____ _____ _____
+    |   __|   __|   | |   __| __  |     |     |  |  |   __|
+    |  |  |   __| | | |   __|    -|-   -|  |  |  |  |   __|
+    |_____|_____|_|___|_____|__|__|_____|__  _|_____|_____|
+                                           |__|
+    */
       }
 
-  } // node-chapitre
+    .node{
+      position:relative;
+      height:100%; width:100%;
+      a{color:inherit;}
+    }
 
-  .chapter-wrapper{
-    position:absolute;
-    top:0; left:0; bottom:0; right:0;
-  }
-} // main
+    .node-title{
+      font-family: "epflulb";
+      font-weight:normal;
+      text-transform: uppercase;
+      text-align: center;
+      max-width: 8.5em;
+      line-height: 0.85;
+      font-size: 2.268em;
+    }
+
+    .node>.field{
+      position:absolute;
+    }
+
+    .field-type-text-long{
+      background-color: rgba(255,255,255,0.9);
+      width:23em; padding:1em;
+      z-index:10;
+
+      .field-label{
+        text-transform: uppercase;
+        font-family: "epflulb";
+        font-size:1.5em;
+      }
+
+      h2{
+        font-size:0.88em;
+      }
+      p{
+        font-size: 0.88em;
+        margin-bottom:0.5em;
+      }
+    }
+    .field-name-field-dbatre{
+      left:60em;
+      ul{
+        margin-left:1em;
+        li{
+          list-style: none;
+          line-height:1;
+          margin-bottom: 1em;
+          position:relative;
+          &:before{
+            content:"?";
+            position:absolute;
+            top:0; left:-1em;
+            font-family: "epflul";
+          }
+        }
+      }
+    }
+
+
+    .field-name-field-partie{
+      height:60%; width:100%;
+      top:20%; left:0;
+      .field-items{
+       position:relative;
+       top:0; left:0;
+       height:100%; width:auto;
+       // overflow:hidden;
+        .field{
+          position:relative;
+          display:inline-block;
+          .mask{
+            position:absolute;
+            width:100%; height:100%;
+            top:0; left:0;
+            z-index:10;
+          }
+        }
+      }
+    }
+  } // #chapter-wrapper
+} // #main
 
 /*  __________  ____  ________________
    / ____/ __ \/ __ \/_  __/ ____/ __ \
@@ -531,4 +717,4 @@ div.messages{
   margin-top: -3px; margin-left: -3px;
   background-color: red;
   z-index:1000;
-}
+}

+ 3 - 1
sites/all/themes/gui/jee/jee.info

@@ -7,10 +7,12 @@ core = "7.x"
 engine = "phptemplate"
 
 ;----------// Styles
+stylesheets[all][] = "bower_components/Peppermint/dist/peppermint.required.css"
 stylesheets[all][] = "css/jee.css"
 
 ;----------// Scripts
-scripts[] = "bower_components/jquery.transit/jquery.transit.js"
+scripts[] = "bower_components/jquery.pep/src/jquery.pep.js"
+scripts[] = "bower_components/Peppermint/dist/peppermint.min.js"
 scripts[] = "js/jee.js"
 
 ;----------// Regions

+ 196 - 17
sites/all/themes/gui/jee/js/jee.js

@@ -35,6 +35,9 @@ jQuery(document).ready(function($) {
       _fps = 1000/12,
       _dragging = false, _timeout_dragging;
 
+  var _$chapter_wrapper = $('<div>').attr('id', 'chapter-wrapper').appendTo(_$container),
+      _loaded_chapter = false;
+
   var _bubbles = new Array(),
       _stars = new Array();
 
@@ -46,17 +49,17 @@ jQuery(document).ready(function($) {
     initChapters();
     launchNav();
 
+    // FULL SCREEN
     var $fullscreenBtn = $('<div>enter</div>').attr('id','fullscreen-btn').appendTo("#root");
-    // Launch fullscreen for browsers that support it!
-    $fullscreenBtn.on('click', function(e){
-      // launchIntoFullscreen(document.documentElement); // the whole page
-      launchIntoFullscreen(document.getElementById("root")); // any individual element
-    });
+    $fullscreenBtn.on('click', onFullScreen);
+
 
+    // create bubbles
     for (var i = 2; i > 0; i--) {
       _bubbles.push($('<div>').addClass('bubble bubble-'+i).prependTo(_$container));
     };
 
+    // create stars
     for (var i = 20; i > 0; i--) {
       _stars.push(
         $('<div>')
@@ -116,15 +119,19 @@ jQuery(document).ready(function($) {
       |____/|_____|_____|__|__| |_| |_____|__|     |_____|\___/|_____|_|___| |_| |_____|
       */
       .bind('mousedown', function(e){
-        console.log('mousedown');
+        console.log('document mousedown');
         clearTimeout(_timeout_dragging);
+
+        if(_loaded_chapter)
+          return false;
+
         // set initial cursor pos
         _mouse_down_pos.x = e.clientX;
         _mouse_down_pos.y = e.clientY;
         updateNavPos(e.clientX, e.clientY, true);
 
         $(this).bind('mousemove', function(e){
-          console.log('mousemove');
+          console.log('document mousemove');
           updateNavPos(e.clientX, e.clientY, false);
         });
 
@@ -135,9 +142,14 @@ jQuery(document).ready(function($) {
         }
       })
       .bind('mouseup', function(e){
-        console.log('mouseup');
+        console.log('document mouseup');
+
+        if(_loaded_chapter)
+          return false;
+
         stopMoveNav();
         $(this).unbind('mousemove');
+
         // close all preview
         if(Math.abs(e.clientX - _mouse_down_pos.x) < 2
           && Math.abs(e.clientY - _mouse_down_pos.y) < 2)
@@ -150,7 +162,7 @@ jQuery(document).ready(function($) {
         | | |  |  |  |  |   --|     |  |   __|  |  |   __| | | | | | |__   |
         |_| |_____|_____|_____|__|__|  |_____|\___/|_____|_|___| |_| |_____|
       */
-      .bind('touchstart', function(e){
+      .bind('document touchstart', function(e){
         console.log('touchstart');
         clearTimeout(_timeout_dragging);
         // set initial pos
@@ -163,11 +175,11 @@ jQuery(document).ready(function($) {
         }
       })
       .bind('touchmove', function(e){
-        console.log('touchmove');
+        console.log('document touchmove');
         updateNavPos(e.originalEvent.touches[0].clientX, e.originalEvent.touches[0].clientY, false);
       })
       .bind('touchend', function(e){
-        console.log("touchend");
+        console.log("document touchend");
         stopMoveNav();
       });
   };
@@ -256,6 +268,11 @@ jQuery(document).ready(function($) {
     stopMoveNav();
   };
 
+  function onFullScreen(e){
+    launchIntoFullscreen(document.getElementById("root"));
+    if(_loaded_chapter)
+      setTimeout(_loaded_chapter.buildVideos(), 100);
+  };
   /*
      ________                __
     / ____/ /_  ____ _____  / /____  _____
@@ -295,6 +312,13 @@ jQuery(document).ready(function($) {
     this.linesAnimeStartTime = 0,
     this.linesAnimeDuration = 2000; // milli sec
 
+    // chapter
+    this.$n = false;
+    this.$blocks = false;
+    this.$vids = false;
+    this.texts_pos = shuffleArray([1,2,3]);
+    this.dimvideo = {w:0, h:0};
+
     // prototypes
     if (typeof Chapter.initialized == "undefined") {
 
@@ -376,8 +400,8 @@ jQuery(document).ready(function($) {
         //   )
         // ));
 
-        if(this.i === 0)
-          console.log(this.i+" this.trans.z", this.trans.z);
+        // if(this.i === 0)
+        //   console.log(this.i+" this.trans.z", this.trans.z);
 
         this.$e.css({
           transform:'translate3d('+this.trans.x+'px,'+this.trans.y+'px,0)'
@@ -526,16 +550,119 @@ jQuery(document).ready(function($) {
         $.getJSON(
           '/jee/chapter/'+this.nid,
           {},
-          this.displayNode
+          this.nodeLoaded.bind(this)
         );
+        _$body.addClass('chapter-displayed');
+      };
+
+      Chapter.prototype.nodeLoaded = function(json, textstatus){
+        console.log('Chapter :: nodeLoaded '+this.nid+' : json', json);
+
+        // insert ajax loaded into dom
+        _$chapter_wrapper.html(json.node);
+
+        // record some usefull data
+        this.$n = $('.node-chapitre', _$chapter_wrapper);
+        this.$blocks = $('.field-type-text-long', this.$n);
+        this.$vids = $('.field-name-field-partie', this.$n);
+
+        // record the current loaded chapter
+        // this will stop first interface to run
+        _loaded_chapter = this;
+
+        // wait to build correct display of chapter
+        setTimeout(this.displayNode.bind(this), 100);
+      };
+
+      Chapter.prototype.displayNode = function(){
+        console.log('Chapter :: displayNode '+this.nid);
+
+        // place text blocks
+        this.texts_pos = shuffleArray([1,2,3]);
+        this.$blocks
+          .each(this.placeText.bind(this))
+          .pep({
+            allowDragEventPropagation:false,
+            disableSelect:true,
+            velocityMultiplier:1
+          });
+
+        // build video player
+        this.buildVideos();
+
+        $('.node-title', this.$n).pep();
+
+        // show the whole thing
+        _$chapter_wrapper.addClass('visible');
       };
 
-      Chapter.prototype.displayNode = function(json, textstatus){
-        console.log('Chapter :: displayNode : json', json);
+      Chapter.prototype.placeText = function(i, e){
+        // console.log("Chapter :: placeText", e);
+        switch(this.texts_pos[i]){
+          case 1: // top right
+            $(e)
+              .css({
+                top:randB(_container.h*0.05-$(e).height(),_container.h*0.15-$(e).height()),
+                left:randB(_container.w*0.8-$(e).width(),_container.w*0.9-$(e).width())
+              })
+              // .pep({debug:true, startPos:{bottom:randB(80,90),right:randB(80,90)}})
+              .find('.field-label')
+                .appendTo(e);
+          break;
+          case 2: // bottom left
+            $(e).css({
+              top:randB(_container.h*0.8,_container.h*0.9),
+              left:randB(_container.w*0.1,_container.w*0.2)
+            });
+            // $(e).pep({debug:true, startPos:{top:randB(80,90),left:randB(10,30)}});
+          break;
+          case 3: // bottom right
+            $(e).css({
+              top:randB(_container.h*0.8,_container.h*0.9),
+              left:randB(_container.w*0.7,_container.w*0.9-$(e).width())
+            });
+            // $(e).pep({debug:true, startPos:{top:randB(80,90),right:randB(10,30)}});
+          break;
+        }
+      };
+
+      Chapter.prototype.buildVideos = function(){
+        console.log('Chapter :: buildVideos');
+
+        this.dimvideo.h = this.$vids.height();
+
+        // redim each iframe to fit
+        // add a mask on top of each iframe to avoid bad interaction with vimeo
+        $('iframe', this.$vids)
+          .each(this.redimVideo.bind(this))
+          .after('<div class="mask"></div>');
+
+        this.$vids.css({
+          width:this.dimvideo.w*1.3,
+          height:this.dimvideo.h,
+          marginLeft:(_container.w-this.dimvideo.w*1.3)/2
+        });
+
+        // create the slider with peppermint
+        $('.field-items', this.$vids).Peppermint();
+      };
+
+      Chapter.prototype.redimVideo = function(i,e){
+        // compute proportional video width ragarding the parent height
+        this.dimvideo.w = (this.dimvideo.h * parseInt($(e).attr("width")))/parseInt($(e).attr("height"));
+        // apply thees sizes
+        $(e)
+          .css({ width:this.dimvideo.w, height:this.dimvideo.h })
+          .attr({ width:this.dimvideo.w, height:this.dimvideo.h })
+            // add some paading to parent for slider display
+            .parent().css({
+                paddingLeft:this.dimvideo.w*0.15,
+                paddingright:this.dimvideo.w*0.15
+              });
       };
 
       Node.initialized = true;
-    }
+    };
 
     this.init();
   };//Chapter
@@ -566,6 +693,10 @@ jQuery(document).ready(function($) {
     };
   }
 
+  function translate3d(x, y, z){
+    // return
+  };
+
   /*
       _       _ __
      (_)___  (_) /_
@@ -577,7 +708,55 @@ jQuery(document).ready(function($) {
   init();
 });
 
+/*
+    ____  __    __  _____________   _______
+   / __ \/ /   / / / / ____/  _/ | / / ___/
+  / /_/ / /   / / / / / __ / //  |/ /\__ \
+ / ____/ /___/ /_/ / /_/ // // /|  /___/ /
+/_/   /_____/\____/\____/___/_/ |_//____/
+*/
+// https://css-tricks.com/snippets/jquery/draggable-without-jquery-ui/
+// (function($) {
+//   $.fn.drags = function(opt) {
+
+//     opt = $.extend({handle:"",cursor:"move"}, opt);
 
+//     if(opt.handle === "") {
+//       var $el = this;
+//     } else {
+//       var $el = this.find(opt.handle);
+//     }
+
+//     return $el.css('cursor', opt.cursor).on("mousedown", function(e) {
+//       if(opt.handle === "") {
+//         var $drag = $(this).addClass('draggable');
+//       } else {
+//         var $drag = $(this).addClass('active-handle').parent().addClass('draggable');
+//       }
+//       var z_idx = $drag.css('z-index'),
+//           drg_h = $drag.outerHeight(),
+//           drg_w = $drag.outerWidth(),
+//           pos_y = $drag.offset().top + drg_h - e.pageY,
+//           pos_x = $drag.offset().left + drg_w - e.pageX;
+//       $drag.css('z-index', 1000).parents().on("mousemove", function(e) {
+//         $('.draggable').offset({
+//             top:e.pageY + pos_y - drg_h,
+//             left:e.pageX + pos_x - drg_w
+//         }).on("mouseup", function() {
+//             $(this).removeClass('draggable').css('z-index', z_idx);
+//         });
+//       });
+//       e.preventDefault(); // disable selection
+//     }).on("mouseup", function() {
+//       if(opt.handle === "") {
+//         $(this).removeClass('draggable');
+//       } else {
+//         $(this).removeClass('active-handle').parent().removeClass('draggable');
+//       }
+//     });
+
+//   }
+// })(jQuery);
 
 /*
     ____  __________  __  ___________________   ___    _   ________  ______  ______________  _   __   __________  ___    __  _________

+ 17 - 5
sites/all/themes/gui/jee/preprocess/html.pre.php

@@ -21,8 +21,6 @@ $heads['HandheldFriendly'] = array(
   ),
 );
 
-
-
 #  Mobile Viewport Fix
 # j.mp/mobileviewport & davidbcalhoun.com/2010/viewport-metatag
 # device-width : Occupy full width of the screen in its current orientation
@@ -33,12 +31,10 @@ $heads['viewport'] = array(
   '#tag' => 'meta',
   '#attributes' => array(
     'name' => 'viewport',
-    'content' => 'width=device-width,initial-scale=1',
+    'content' => 'width=device-width,initial-scale=1,maximum-scale=1',
   ),
 );
 
-
-
 # Add these icons links to your sub theme
 # or Place favicon.ico and apple-touch-icon.png in the root of your domain and delete these references
 
@@ -62,6 +58,22 @@ $heads['apple-touch-icon'] = array(
   ),
 );
 
+
+$heads['manifest'] = array(
+  '#tag' => 'link',
+  '#attributes' => array(
+    'href' => base_path() . path_to_theme() .'/manifest.webapp'
+  ),
+);
+
+$heads['manifest'] = array(
+  '#tag' => 'meta',
+  '#attributes' => array(
+    'name' => "application-name",
+    'content' => "Store Finder"
+  ),
+);
+
 foreach ($heads as $type=>$head)
 	drupal_add_html_head($head, $type);
 

+ 7 - 0
sites/all/themes/gui/jee/templates/field--field-partie--chapter.tpl.php

@@ -0,0 +1,7 @@
+<section class="<?php print $classes; ?>"<?php print $attributes; ?>>
+  <div class="field-items"<?php print $content_attributes; ?>>
+    <?php foreach ($items as $delta => $item): ?>
+      <?php print render($item); ?>
+    <?php endforeach; ?>
+  </div>
+</section>

+ 1 - 1
sites/all/themes/gui/jee/templates/field.tpl.php

@@ -50,7 +50,7 @@ HTML comment.
 -->
 <section class="<?php print $classes; ?>"<?php print $attributes; ?>>
   <?php if (!$label_hidden): ?>
-    <div class="field-label"<?php print $title_attributes; ?>><?php print $label ?>:&nbsp;</div>
+    <div class="field-label"<?php print $title_attributes; ?>><?php print $label ?></div>
   <?php endif; ?>
   <?php if(count($items) > 1): ?>
   <div class="field-items"<?php print $content_attributes; ?>>

+ 1 - 2
sites/all/themes/gui/jee/templates/html.tpl.php

@@ -58,11 +58,10 @@
 		<!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame
 		     Remove this if you use the .htaccess -->
 		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
-    <meta name="mobile-web-app-capable" content="yes">
-		<!-- <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" /> -->
 
     <?php print $head; ?>
 
+
 		<title><?php print $head_title; ?></title>
 		<?php print $styles; ?>
 

+ 21 - 0
sites/all/themes/gui/jee/templates/node--chapitre--teaser.tpl.php

@@ -0,0 +1,21 @@
+<section id="node-<?php print $node->nid; ?>" class="<?php print $classes; ?>"<?php print $attributes; ?>>
+  <?php if (!$page): ?>
+    <h2<?php print $title_attributes; ?>><a href="<?php print $node_url; ?>"><?php print $title; ?></a></h2>
+  <?php endif; ?>
+  <div class="content">
+    <?php
+    // We hide the comments and links now so that we can render them later.
+    // dsm($content, "content");
+    hide($content['comments']);
+    hide($content['links']);
+    hide($content['field_comprendre']);
+    ?>
+    <div class="texts">
+    <?php
+      print render($content['field_comprendre']);
+      print render($content['links']);
+    ?>
+    </div>
+    <?php print render($content); ?>
+  </div>
+</section>

+ 8 - 16
sites/all/themes/gui/jee/templates/node--chapitre.tpl.php

@@ -1,21 +1,13 @@
-<section id="node-<?php print $node->nid; ?>" class="<?php print $classes; ?>"<?php print $attributes; ?>>
+<div id="node-<?php print $node->nid; ?>" class="<?php print $classes; ?> clearfix"<?php print $attributes; ?>>
+
   <?php if (!$page): ?>
-    <h2<?php print $title_attributes; ?>><a href="<?php print $node_url; ?>"><?php print $title; ?></a></h2>
+    <h2<?php print $title_attributes; ?>><?php print $title; ?></h2>
   <?php endif; ?>
-  <div class="content">
-    <?php
+  <?php
     // We hide the comments and links now so that we can render them later.
-    // dsm($content, "content");
     hide($content['comments']);
-    hide($content['links']);
-    hide($content['field_comprendre']);
+    // hide($content['links']);
+    print render($content);
+    // print render($content['links']);
     ?>
-    <div class="texts">
-    <?php
-      print render($content['field_comprendre']);
-      print render($content['links']);
-    ?>
-    </div>
-    <?php print render($content); ?>
-  </div>
-</section>
+</div>

+ 17 - 0
sites/all/themes/gui/jee/templates/video-embed-field-embed-code.tpl.php

@@ -0,0 +1,17 @@
+<?php
+/**
+ * @file
+ * Default theme implementation to display a video embed field.
+ *
+ * Variables available:
+ * - $url: The URL of the video to display embed code for
+ * - $style: The style name of the embed code to use
+ * - $style_settings: The style settings for the embed code
+ * - $handler: The name of the video handler
+ * - $embed_code: The embed code
+ * - $data: Additional video data
+ *
+ * @see template_preprocess_video_embed()
+ */
+?>
+<?php print $embed_code; ?>

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