/*! * classie - class helper functions * from bonzo https://github.com/ded/bonzo * * classie.has( elem, 'my-class' ) -> true/false * classie.add( elem, 'my-new-class' ) * classie.remove( elem, 'my-unwanted-class' ) * classie.toggle( elem, 'my-class' ) */ /*jshint browser: true, strict: true, undef: true */ /*global define: false */ ( 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 ); (function() { if(jQuery('.kode_search').length){ var html = document.getElementById('home'); var kode_search = document.getElementById( 'kode_search' ), input = kode_search.querySelector( 'a.search-here' ), ctrlClose = kode_search.querySelector( 'span.kode_search-close' ), isOpen = isAnimating = false, // show/hide search area toggleSearch = function(evt) { // return if open and the input gets focused if( evt.type.toLowerCase() === 'focus' && isOpen ) return false; if( isOpen ) { classie.remove( kode_search, 'open' ); classie.remove( html, 'open_search' ); // trick to hide input text once the search overlay closes // todo: hardcoded times, should be done after transition ends if( input.value !== '' ) { setTimeout(function() { classie.add( kode_search, 'hideInput' ); setTimeout(function() { classie.remove( kode_search, 'hideInput' ); input.value = ''; }, 300 ); }, 500); } input.blur(); } else { classie.add( kode_search, 'open' ); classie.add( html, 'open_search' ); } isOpen = !isOpen; }; // events input.addEventListener( 'click', toggleSearch ); ctrlClose.addEventListener( 'click', toggleSearch ); // esc key closes search overlay // keyboard navigation events document.addEventListener( 'keydown', function( ev ) { var keyCode = ev.keyCode || ev.which; if( keyCode === 27 && isOpen ) { toggleSearch(ev); } } ); } })();