/* ------------------------------------------------------------ *\ |* ------------------------------------------------------------ *| |* classie.js |* https://github.com/desandro/classie/blob/master/classie.js |* ------------------------------------------------------------ *| \* ------------------------------------------------------------ */ ( function( window ) { 'use strict'; // class helper functions from bonzo https://github.com/ded/bonzo function classReg( className ) { return new RegExp("(^|\\s+)" + className + "(\\s+|$)"); } // classList support for class management // altho to be fair, the api sucks because it won't accept multiple classes at once var hasClass, addClass, removeClass; if ( 'classList' in document.documentElement ) { hasClass = function( elem, c ) { return elem.classList.contains( c ); }; addClass = function( elem, c ) { elem.classList.add( c ); }; removeClass = function( elem, c ) { elem.classList.remove( c ); }; } else { hasClass = function( elem, c ) { return classReg( c ).test( elem.className ); }; addClass = function( elem, c ) { if ( !hasClass( elem, c ) ) { elem.className = elem.className + ' ' + c; } }; removeClass = function( elem, c ) { elem.className = elem.className.replace( classReg( c ), ' ' ); }; } function toggleClass( elem, c ) { var fn = hasClass( elem, c ) ? removeClass : addClass; fn( elem, c ); } var classie = { // full names hasClass: hasClass, addClass: addClass, removeClass: removeClass, toggleClass: toggleClass, // short names has: hasClass, add: addClass, remove: removeClass, toggle: toggleClass }; // transport if ( typeof define === 'function' && define.amd ) { // AMD define( classie ); } else { // browser global window.classie = classie; } })( window ); /* ------------------------------------------------------------ *\ |* ------------------------------------------------------------ *| |* Functionality for adding/removing classes |* ------------------------------------------------------------ *| \* ------------------------------------------------------------ */ (function(window){ // check for touch if (Modernizr.touch) { // run the forEach on each figure element [].slice.call(document.querySelectorAll("figure")).forEach(function(el,i){ // get close-caption button in variable var closeCaption = el.querySelector(".close-caption"); // show the close-caption button classie.remove(closeCaption,"hidden"); // check if the user moves a finger var fingerMove = false; el.addEventListener("touchmove",function(e){ e.stopPropagation(); fingerMove = true; }); // always reset fingerMove to false on touch start el.addEventListener("touchstart",function(e){ e.stopPropagation(); fingerMove = false; }); // add hover class if figure touchend and fingerMove is false el.addEventListener("touchend",function(e){ e.stopPropagation(); if (fingerMove == false) { classie.add(el,"hover"); } }); // if close-caption button clicked, remove hover class closeCaption.addEventListener("touchend",function(e){ e.preventDefault(); e.stopPropagation(); if (fingerMove == false) { if (classie.has(el,"hover")) { classie.remove(el,"hover"); } } }); }); } })(window);