├── favicon.ico ├── images ├── myBg ├── 404.png ├── dis.png ├── dti.png ├── Darul.png ├── asif.jpg ├── bteb.png ├── logo.png ├── ntvqf.png ├── Untitled.png ├── grabbing.png ├── rifles.png ├── Asif Abir.jpg ├── about me.jpeg ├── banglalink.png ├── icon-plus.png ├── signature.png ├── creativeIt.webp ├── diit-whitw-1.png ├── icon-search.png ├── imfashionbd.png ├── legendcoder.png ├── rakugroupbd.png ├── dreamfuturebd1.jpg ├── go-to-top-arrow.jpg ├── zce-2017-small.gif ├── black-transparent.png ├── grameenphone-logo.png └── Government_Laboratory_High_School_Monogram.png ├── fonts ├── FontAwesome.otf ├── fontawesome-webfont.eot ├── fontawesome-webfont.ttf └── fontawesome-webfont.woff ├── CV of Asif Mohammadd Abir.pdf ├── plugins ├── jQuery-Plugin-For-Particle-System-Background-with-Parallax-Effect-Particleground │ ├── .gitignore │ ├── demo │ │ ├── js │ │ │ └── demo.js │ │ ├── index.html │ │ └── css │ │ │ └── style.css │ ├── README.md │ ├── jquery.particleground.min.js │ └── jquery.particleground.js └── Typing-Animation-jQuery-Typing-Effects │ ├── typingEffect.js │ └── index.html ├── js ├── progressbar.js ├── jquery.smartresize.js ├── text.rotator.js ├── class_helper.js ├── sendemail.js ├── mwheelIntent.js ├── settings-blog.js ├── jquery.mousewheel.js ├── settings.js ├── jquery.fitvids.js ├── jquery.easing.1.3.js ├── core.string.js ├── head.min.js ├── imagesloaded.min.js ├── modernizr.custom.js ├── jquery.page.js ├── jquery.easypiechart.js ├── grid_gallery.js ├── jquery.jscrollpane.min.js └── jquery.history.js ├── send-email.php ├── css ├── scroll.css ├── carousel.css ├── portfolio.css ├── normalize.css └── responsive.css ├── 404.html └── blog-details.html /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/favicon.ico -------------------------------------------------------------------------------- /images/myBg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/myBg -------------------------------------------------------------------------------- /images/404.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/404.png -------------------------------------------------------------------------------- /images/dis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/dis.png -------------------------------------------------------------------------------- /images/dti.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/dti.png -------------------------------------------------------------------------------- /images/Darul.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/Darul.png -------------------------------------------------------------------------------- /images/asif.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/asif.jpg -------------------------------------------------------------------------------- /images/bteb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/bteb.png -------------------------------------------------------------------------------- /images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/logo.png -------------------------------------------------------------------------------- /images/ntvqf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/ntvqf.png -------------------------------------------------------------------------------- /images/Untitled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/Untitled.png -------------------------------------------------------------------------------- /images/grabbing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/grabbing.png -------------------------------------------------------------------------------- /images/rifles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/rifles.png -------------------------------------------------------------------------------- /fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /images/Asif Abir.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/Asif Abir.jpg -------------------------------------------------------------------------------- /images/about me.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/about me.jpeg -------------------------------------------------------------------------------- /images/banglalink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/banglalink.png -------------------------------------------------------------------------------- /images/icon-plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/icon-plus.png -------------------------------------------------------------------------------- /images/signature.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/signature.png -------------------------------------------------------------------------------- /images/creativeIt.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/creativeIt.webp -------------------------------------------------------------------------------- /images/diit-whitw-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/diit-whitw-1.png -------------------------------------------------------------------------------- /images/icon-search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/icon-search.png -------------------------------------------------------------------------------- /images/imfashionbd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/imfashionbd.png -------------------------------------------------------------------------------- /images/legendcoder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/legendcoder.png -------------------------------------------------------------------------------- /images/rakugroupbd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/rakugroupbd.png -------------------------------------------------------------------------------- /images/dreamfuturebd1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/dreamfuturebd1.jpg -------------------------------------------------------------------------------- /images/go-to-top-arrow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/go-to-top-arrow.jpg -------------------------------------------------------------------------------- /images/zce-2017-small.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/zce-2017-small.gif -------------------------------------------------------------------------------- /CV of Asif Mohammadd Abir.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/CV of Asif Mohammadd Abir.pdf -------------------------------------------------------------------------------- /fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /images/black-transparent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/black-transparent.png -------------------------------------------------------------------------------- /images/grameenphone-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/grameenphone-logo.png -------------------------------------------------------------------------------- /fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /plugins/jQuery-Plugin-For-Particle-System-Background-with-Parallax-Effect-Particleground/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/* 3 | Gruntfile.js 4 | package.json -------------------------------------------------------------------------------- /images/Government_Laboratory_High_School_Monogram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asif-daffodil/black-portfolio/HEAD/images/Government_Laboratory_High_School_Monogram.png -------------------------------------------------------------------------------- /js/progressbar.js: -------------------------------------------------------------------------------- 1 | function progressBar(percent, $element) { 2 | "use strict"; 3 | var progressBarWidth = percent * $element.width() / 100; 4 | $element.find('div').animate({ width: percent+'%' }, 500).html(""+percent + ""); 5 | } -------------------------------------------------------------------------------- /plugins/jQuery-Plugin-For-Particle-System-Background-with-Parallax-Effect-Particleground/demo/js/demo.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Particleground demo 3 | * @author Jonathan Nicol - @mrjnicol 4 | */ 5 | 6 | $(document).ready(function() { 7 | $('#particles').particleground({ 8 | dotColor: '#5cbdaa', 9 | lineColor: '#5cbdaa' 10 | }); 11 | $('.intro').css({ 12 | 'margin-top': -($('.intro').height() / 2) 13 | }); 14 | }); -------------------------------------------------------------------------------- /js/jquery.smartresize.js: -------------------------------------------------------------------------------- 1 | (function( window, $, undefined ) { 2 | "use strict"; 3 | var $event = $.event, resizeTimeout; 4 | 5 | $event.special.smartresize = { 6 | setup: function() { 7 | $(this).bind( "resize", $event.special.smartresize.handler ); 8 | }, 9 | teardown: function() { 10 | $(this).unbind( "resize", $event.special.smartresize.handler ); 11 | }, 12 | handler: function( event, execAsap ) { 13 | //alert('resize'); 14 | // Save the context 15 | var context = this, 16 | args = arguments; 17 | 18 | // set correct event type 19 | event.type = "smartresize"; 20 | 21 | if ( resizeTimeout ) { clearTimeout( resizeTimeout ); } 22 | resizeTimeout = setTimeout(function() { 23 | jQuery.event.handle.apply( context, args ); 24 | }, execAsap === "execAsap"? 0 : 50 ); 25 | } 26 | }; 27 | 28 | $.fn.smartresize = function( fn ) { 29 | return fn ? this.bind( "smartresize", fn ) : this.trigger( "smartresize", ["execAsap"] ); 30 | }; 31 | })( window, jQuery ); 32 | 33 | -------------------------------------------------------------------------------- /js/text.rotator.js: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | #Text Rotate For Thank You Page 3 | ========================================================================== */ 4 | 5 | (function($){ 6 | "use strict"; 7 | $.fn.extend({ 8 | rotaterator: function(options) { 9 | 10 | var defaults = { 11 | fadeSpeed: 300, 12 | pauseSpeed: 300, 13 | child:null 14 | }; 15 | 16 | var options = $.extend(defaults, options); 17 | 18 | return this.each(function() { 19 | var o =options; 20 | var obj = $(this); 21 | var items = $(obj.children(), obj); 22 | items.each(function() {$(this).hide();}) 23 | if(!o.child){var next = $(obj).children(':first'); 24 | }else{var next = o.child; 25 | } 26 | $(next).fadeIn(o.fadeSpeed, function() { 27 | $(next).delay(o.pauseSpeed).fadeOut(o.fadeSpeed, function() { 28 | var next = $(this).next(); 29 | if (next.length == 0){ 30 | next = $(obj).children(':first'); 31 | } 32 | $(obj).rotaterator({child : next, fadeSpeed : o.fadeSpeed, pauseSpeed : o.pauseSpeed}); 33 | }) 34 | }); 35 | }); 36 | } 37 | }); 38 | })(jQuery); -------------------------------------------------------------------------------- /plugins/jQuery-Plugin-For-Particle-System-Background-with-Parallax-Effect-Particleground/demo/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Particleground demo 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 |
18 |

Particleground

19 |

A jQuery plugin for snazzy background particle systems

20 | Download 21 |
22 |
23 | 24 | Fork me on GitHub 25 | 26 | 27 | -------------------------------------------------------------------------------- /js/class_helper.js: -------------------------------------------------------------------------------- 1 | ( function( window ) { 2 | 3 | "use strict"; 4 | 5 | function classReg( className ) { 6 | return new RegExp("(^|\\s+)" + className + "(\\s+|$)"); 7 | } 8 | 9 | // classList support for class management 10 | // altho to be fair, the api sucks because it won't accept multiple classes at once 11 | var hasClass, addClass, removeClass; 12 | 13 | if ( 'classList' in document.documentElement ) { 14 | hasClass = function( elem, c ) { 15 | return elem.classList.contains( c ); 16 | }; 17 | addClass = function( elem, c ) { 18 | elem.classList.add( c ); 19 | }; 20 | removeClass = function( elem, c ) { 21 | elem.classList.remove( c ); 22 | }; 23 | } 24 | else { 25 | hasClass = function( elem, c ) { 26 | return classReg( c ).test( elem.className ); 27 | }; 28 | addClass = function( elem, c ) { 29 | if ( !hasClass( elem, c ) ) { 30 | elem.className = elem.className + ' ' + c; 31 | } 32 | }; 33 | removeClass = function( elem, c ) { 34 | elem.className = elem.className.replace( classReg( c ), ' ' ); 35 | }; 36 | } 37 | 38 | function toggleClass( elem, c ) { 39 | var fn = hasClass( elem, c ) ? removeClass : addClass; 40 | fn( elem, c ); 41 | } 42 | 43 | var classie = { 44 | // full names 45 | hasClass: hasClass, 46 | addClass: addClass, 47 | removeClass: removeClass, 48 | toggleClass: toggleClass, 49 | // short names 50 | has: hasClass, 51 | add: addClass, 52 | remove: removeClass, 53 | toggle: toggleClass 54 | }; 55 | 56 | // transport 57 | if ( typeof define === 'function' && define.amd ) { 58 | // AMD 59 | define( classie ); 60 | } else { 61 | // browser global 62 | window.classie = classie; 63 | } 64 | 65 | })( window ); 66 | -------------------------------------------------------------------------------- /plugins/Typing-Animation-jQuery-Typing-Effects/typingEffect.js: -------------------------------------------------------------------------------- 1 | eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('$.v.u=5(12){d o=$.1m({},$.v.u.11,12);d y=o.10,w=[],S=y.8,Q=o.R;r(d i=0;i\'+s.19(i)+\'\');o.D.b();6(e.f().8==l){e.1a(\'h\').t({\'c\':\'\',\'K\':\'\'});o.P.b();x(J,o.T)}},9+i*o.V)}5 J(){6(o.z&&a!=7.8-1){e.g().I(9);e.I(9,5(){e.f(\'\');o.O.b();q(7[a+=1])})}C r(j=l-1;j>=0;j--)N(j)}5 N(j){x(5(){6(a!=7.8-1){o.M.b();e.H(e.f().1j(0,-1));6(e.f().8==0){o.B.b();q(7[a+=1])}}C{e.g().1i();o.G.b()}},9+j*o.U)}};$.v.u.11={10:[\'p k 1\',\'p k 2\',\'p k 3\',\'p k 4\'],U:1e,V:1f,T:1g,c:\'#A\',Y:\'#A\',X:\'0.3\',R:1,Z:\'\',L:1n,z:15,D:5(){},P:5(){},M:5(){},B:5(){},G:5(){},O:5(){}}',62,86,'|||||function|if|names|length|1000||call|color|var||text|next|span|||string|||||Default|looping|for|type|css|typing|fn|newArray|setTimeout|givenArray|fade|0094ff|onFinishedErasing|else|onTyping|typingLetters|style|onAllTypingCompleted|html|fadeOut|finishTyping|opacity|cursorBlink|onErasing|erasing|onFinishedFadeErasing|onFinishedTyping|count|loopCount|nl|stringStartDelay|eraseDelay|typeDelay|fadeIn|typingOpacity|typingColor|cursorChar|strings|defaultOptions|options|7s|blink|false|this|append|undefined|charAt|find|infinite|border|push|25|150|2000|animation|remove|slice|solid|5px|extend|true'.split('|'),0,{})) 2 | -------------------------------------------------------------------------------- /js/sendemail.js: -------------------------------------------------------------------------------- 1 | function validateForm() 2 | { 3 | "use strict"; 4 | var title = $("#name").val(); 5 | var err=true; 6 | if (title=="" || title==null) { 7 | $("#name").addClass("validation"); 8 | 9 | var err= false; 10 | } else { $("#name").removeClass("validation");} 11 | var email = $("#email").val(); 12 | if (!(/(.+)@(.+){2,}\.(.+){2,}/.test(email))) { 13 | $("#email").addClass("validation"); 14 | 15 | var err= false; 16 | } else { $("#email").removeClass("validation"); } 17 | var title = $("#message").val(); 18 | if (title=="" || title==null) { 19 | $("#message").addClass("validation"); 20 | var err= false; 21 | } else{ $("#message").removeClass("validation"); } 22 | return err; 23 | } 24 | $(document).ready(function(){ 25 | "use strict"; 26 | $("#button").click(function(e){ 27 | if(validateForm()){ 28 | e.preventDefault(); 29 | $.ajax({type: "POST", 30 | url: "http://www.yourdomain.com/send-email.php", 31 | data:$("#form1").serialize(), 32 | success:function(result){ 33 | $("#successmsg").html(result); 34 | 35 | }}); 36 | $("#name").val(''); 37 | $("#email").val(''); 38 | $("#message").val(''); 39 | // $("#successmsg").remove(); 40 | } 41 | else 42 | { 43 | return false; 44 | } 45 | }); 46 | }); 47 | -------------------------------------------------------------------------------- /js/mwheelIntent.js: -------------------------------------------------------------------------------- 1 | 2 | (function($){ 3 | 4 | var mwheelI = { 5 | pos: [-260, -260] 6 | }, 7 | minDif = 3, 8 | doc = document, 9 | root = doc.documentElement, 10 | body = doc.body, 11 | longDelay, shortDelay 12 | ; 13 | 14 | function unsetPos(){ 15 | if(this === mwheelI.elem){ 16 | mwheelI.pos = [-260, -260]; 17 | mwheelI.elem = false; 18 | minDif = 3; 19 | } 20 | } 21 | 22 | $.event.special.mwheelIntent = { 23 | setup: function(){ 24 | var jElm = $(this).bind('mousewheel', $.event.special.mwheelIntent.handler); 25 | if( this !== doc && this !== root && this !== body ){ 26 | jElm.bind('mouseleave', unsetPos); 27 | } 28 | jElm = null; 29 | return true; 30 | }, 31 | teardown: function(){ 32 | $(this) 33 | .unbind('mousewheel', $.event.special.mwheelIntent.handler) 34 | .unbind('mouseleave', unsetPos) 35 | ; 36 | return true; 37 | }, 38 | handler: function(e, d){ 39 | var pos = [e.clientX, e.clientY]; 40 | if( this === mwheelI.elem || Math.abs(mwheelI.pos[0] - pos[0]) > minDif || Math.abs(mwheelI.pos[1] - pos[1]) > minDif ){ 41 | mwheelI.elem = this; 42 | mwheelI.pos = pos; 43 | minDif = 250; 44 | 45 | clearTimeout(shortDelay); 46 | shortDelay = setTimeout(function(){ 47 | minDif = 10; 48 | }, 200); 49 | clearTimeout(longDelay); 50 | longDelay = setTimeout(function(){ 51 | minDif = 3; 52 | }, 1500); 53 | e = $.extend({}, e, {type: 'mwheelIntent'}); 54 | return $.event.handle.apply(this, arguments); 55 | } 56 | } 57 | }; 58 | $.fn.extend({ 59 | mwheelIntent: function(fn) { 60 | return fn ? this.bind("mwheelIntent", fn) : this.trigger("mwheelIntent"); 61 | }, 62 | 63 | unmwheelIntent: function(fn) { 64 | return this.unbind("mwheelIntent", fn); 65 | } 66 | }); 67 | 68 | $(function(){ 69 | body = doc.body; 70 | //assume that document is always scrollable, doesn't hurt if not 71 | $(doc).bind('mwheelIntent.mwheelIntentDefault', $.noop); 72 | }); 73 | })(jQuery); -------------------------------------------------------------------------------- /js/settings-blog.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function () { 2 | "use strict"; 3 | try { 4 | 5 | 6 | /* ========================================================================== 7 | #Carousel Popup For Portfolio Page 8 | ========================================================================== */ 9 | $(".owl-carousel").owlCarousel({ 10 | navigation: true, 11 | slideSpeed: 300, 12 | paginationSpeed: 400, 13 | singleItem: true, 14 | autoPlay: 3000 15 | }); 16 | 17 | /* ========================================================================== 18 | #Orientation change event 19 | ========================================================================== */ 20 | 21 | $(window).on('orientationchange', function (event) { 22 | window.location.href = window.location.href; 23 | }); 24 | 25 | //Videos 26 | $(".container").fitVids(); 27 | 28 | } catch (ex) { 29 | } 30 | }); 31 | 32 | /* ========================================================================== 33 | #Mobile Menu 34 | ========================================================================== */ 35 | 36 | var $menu = $('#menu1'), 37 | $menulink = $('.menu-link'); 38 | $menulink.click(function () { 39 | $menulink.toggleClass('active'); 40 | $menu.toggleClass('active'); 41 | return false; 42 | }); 43 | 44 | $('nav#menu1 a').click(function () { 45 | $('#menu1').removeClass('active'); 46 | }); 47 | 48 | 49 | 50 | /* ========================================================================== 51 | #iPad,iPhone,iPod Keyboard issue with position fixed 52 | ========================================================================== */ 53 | var iPad = navigator.userAgent.toLowerCase().indexOf("ipad"); 54 | var iPhone = navigator.userAgent.toLowerCase().indexOf("iphone"); 55 | var iPod = navigator.userAgent.toLowerCase().indexOf("ipod"); 56 | if (iPad > -1 || iPhone > -1 || iPod > -1) 57 | { 58 | window.onscroll = function () { 59 | $('.totop-link').css('position', 'absolute'); 60 | $('.totop-link').css('top', (window.pageYOffset + window.innerHeight - 39) + 'px'); 61 | }; 62 | } 63 | -------------------------------------------------------------------------------- /send-email.php: -------------------------------------------------------------------------------- 1 | 11 | 12 | HTML email 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 |
  
Name:" . $name . "
Email:" . $from . "
Message:" . nl2br($msg) . "
36 | 37 | 38 | "; 39 | 40 | // Always set content-type when sending HTML email 41 | $headers = "MIME-Version: 1.0" . "\r\n"; 42 | $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n"; 43 | 44 | // More headers 45 | $headers .= 'From: <' . $from . '>' . "\r\n"; 46 | 47 | 48 | if (mail($receiver, $subject, $message, $headers)) { 49 | echo "The message has been sent!"; 50 | } else { 51 | echo "The message could not been sent!"; 52 | } 53 | -------------------------------------------------------------------------------- /js/jquery.mousewheel.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | (function($) { 4 | "use strict"; 5 | var types = ['DOMMouseScroll', 'mousewheel']; 6 | 7 | if ($.event.fixHooks) { 8 | for ( var i=types.length; i; ) { 9 | $.event.fixHooks[ types[--i] ] = $.event.mouseHooks; 10 | } 11 | } 12 | 13 | $.event.special.mousewheel = { 14 | setup: function() { 15 | if ( this.addEventListener ) { 16 | for ( var i=types.length; i; ) { 17 | this.addEventListener( types[--i], handler, false ); 18 | } 19 | } else { 20 | this.onmousewheel = handler; 21 | } 22 | }, 23 | 24 | teardown: function() { 25 | if ( this.removeEventListener ) { 26 | for ( var i=types.length; i; ) { 27 | this.removeEventListener( types[--i], handler, false ); 28 | } 29 | } else { 30 | this.onmousewheel = null; 31 | } 32 | } 33 | }; 34 | 35 | $.fn.extend({ 36 | mousewheel: function(fn) { 37 | return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel"); 38 | }, 39 | 40 | unmousewheel: function(fn) { 41 | return this.unbind("mousewheel", fn); 42 | } 43 | }); 44 | 45 | 46 | function handler(event) { 47 | var orgEvent = event || window.event, args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true, deltaX = 0, deltaY = 0; 48 | event = $.event.fix(orgEvent); 49 | event.type = "mousewheel"; 50 | 51 | // Old school scrollwheel delta 52 | if ( orgEvent.wheelDelta ) { delta = orgEvent.wheelDelta/180; } 53 | if ( orgEvent.detail ) { delta = -orgEvent.detail/1; } 54 | 55 | // New school multidimensional scroll (touchpads) deltas 56 | deltaY = delta; 57 | 58 | // Gecko 59 | if ( orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) { 60 | deltaY = 0; 61 | deltaX = -1*delta; 62 | } 63 | 64 | // Webkit 65 | if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY/20; } 66 | if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = -1*orgEvent.wheelDeltaX/20; } 67 | 68 | // Add event and delta to the front of the arguments 69 | args.unshift(event, delta, deltaX, deltaY); 70 | 71 | return ($.event.dispatch || $.event.handle).apply(this, args); 72 | } 73 | 74 | })(jQuery); 75 | -------------------------------------------------------------------------------- /css/scroll.css: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | ---------------------------------- 4 | 5 | Name: scroll.css 6 | Version: 1.2 7 | 8 | ---------------------------------- 9 | 10 | Table of Contents 11 | 12 | #Page Scroll 13 | 14 | */ 15 | 16 | /* ========================================================================== 17 | #Page Scroll 18 | ========================================================================== */ 19 | 20 | .jspContainer { 21 | overflow: hidden; 22 | position: relative; 23 | } 24 | .jspPane { 25 | position: absolute; 26 | } 27 | .jspVerticalBar { 28 | position: absolute; 29 | top: 0; 30 | right: 0; 31 | width: 5px; 32 | height: 100%; 33 | background: transparent; 34 | opacity: 0; 35 | -webkit-transition: opacity 0.2s linear; 36 | -moz-transition: opacity 0.2s linear; 37 | -o-transition: opacity 0.2s linear; 38 | -ms-transition: opacity 0.2s linear; 39 | transition: opacity 0.2s linear; 40 | } 41 | .jspHorizontalBar { 42 | position: absolute; 43 | bottom: 5px; 44 | left: 0; 45 | width: 100%; 46 | height: 7px; 47 | background: transparent; 48 | display:none; 49 | } 50 | .jspVerticalBar *, .jspHorizontalBar * { 51 | margin: 0; 52 | padding: 0; 53 | } 54 | .jspCap { 55 | display: none; 56 | } 57 | .jspHorizontalBar .jspCap { 58 | float: left; 59 | } 60 | .jspTrack { 61 | background: rgba(202, 202, 202, 0.2); 62 | position: relative; 63 | } 64 | .jspDrag { 65 | background: rgba(0, 0, 0, 0.1); 66 | position: relative; 67 | top: 0; 68 | left: 0; 69 | cursor: pointer; 70 | } 71 | .jspDrag:hover { 72 | background: rgba(0, 0, 0, 0.2); 73 | } 74 | .jspHorizontalBar .jspTrack, .jspHorizontalBar .jspDrag { 75 | float: left; 76 | height: 100%; 77 | } 78 | .jspArrow { 79 | background: #50506d; 80 | text-indent: -20000px; 81 | display: block; 82 | cursor: pointer; 83 | } 84 | .jspArrow.jspDisabled { 85 | cursor: default; 86 | background: #80808d; 87 | } 88 | .jspVerticalBar .jspArrow { 89 | height: 16px; 90 | } 91 | .jspHorizontalBar .jspArrow { 92 | width: 16px; 93 | float: left; 94 | height: 100%; 95 | } 96 | .jspVerticalBar .jspArrow:focus { 97 | outline: none; 98 | } 99 | .jspCorner { 100 | background: #eeeef4; 101 | float: left; 102 | height: 100%; 103 | } 104 | * html .jspCorner { 105 | margin: 0 -3px 0 0; 106 | } 107 | 108 | .noscroll { 109 | overflow: hidden !important 110 | } 111 | -------------------------------------------------------------------------------- /plugins/jQuery-Plugin-For-Particle-System-Background-with-Parallax-Effect-Particleground/README.md: -------------------------------------------------------------------------------- 1 | Particleground 2 | ============== 3 | 4 | A jQuery plugin for snazzy background particle systems. Includes an optional parallax effect controlled by the mouse on desktop devices and gyroscope on mobile devices. Works in any browser that supports HTML5 canvas. 5 | 6 | [See a demo](https://jnicol.github.io/particleground) 7 | 8 | ## Usage 9 | 10 | $('#your-element').particleground(); 11 | 12 | ## Options 13 | 14 | Options can be set by passing an options object to the constructor. 15 | 16 | Here is an example of setting the color of the particle system dots and lines: 17 | 18 | $('#your-element').particleground({ 19 | dotColor: '#ff0000', 20 | lineColor: '#ff0000' 21 | }); 22 | 23 | Here is a full list of options, and their default values: 24 | 25 | ### minSpeedX 26 | 27 | 0.1 28 | 29 | ### maxSpeedX 30 | 31 | 0.7 32 | 33 | ### minSpeedY 34 | 35 | 0.1 36 | 37 | ### maxSpeedY 38 | 39 | 0.7 40 | 41 | ### directionX 42 | 43 | 'center' 44 | 45 | Can be one of `'center'`, `'left' or `'right'`. `'center'` means that the dots will bounce off the edges of the canvas. 46 | 47 | ### directionY 48 | 49 | 'center' 50 | 51 | Can be one of `'center'`, `'up'` or `'down'`. `'center'` means that the dots will bounce off the edges of the canvas. 52 | 53 | ### density 54 | 55 | 10000 56 | 57 | Determines how many particles will be generated: one particle every n pixels. 58 | 59 | ### dotColor 60 | 61 | '#666666' 62 | 63 | ### lineColor 64 | 65 | '#666666' 66 | 67 | ### particleRadius 68 | 69 | 7 70 | 71 | Dot size 72 | 73 | ### lineWidth 74 | 75 | 1 76 | 77 | ### curvedLines 78 | 79 | false 80 | 81 | ### proximity 82 | 83 | 100 84 | 85 | How close two dots need to be, in pixels, before they join. 86 | 87 | ### parallax 88 | 89 | true 90 | 91 | ### parallaxMultiplier 92 | 93 | 5 94 | 95 | The lower the number, the more extreme the parallax effect wil be. 96 | 97 | ### onInit 98 | 99 | function() {} 100 | 101 | A callback executed after Particleground initializes. 102 | 103 | ### onDestroy 104 | 105 | function() {} 106 | 107 | A callback executed after Particleground is destroyed. 108 | 109 | ## Methods 110 | 111 | ### pause 112 | 113 | Pauses the particle system. 114 | 115 | $('#your-element').particlegound('pause'); 116 | 117 | ### start 118 | 119 | Restarts the particle system if you previously paused it. 120 | 121 | $('#your-element').particlegound('start'); 122 | 123 | ### destroy 124 | 125 | Removes the plugin from your element. 126 | 127 | $('#your-element').particlegound('destroy'); 128 | 129 | ## Credits 130 | 131 | Particleground was inspired by http://requestlab.fr/ and http://disruptivebydesign.com/ 132 | -------------------------------------------------------------------------------- /404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Andrew Smith - Responsive Resume / Personal Portfolio Template 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 38 |
39 |
40 |

Sorry!

41 |

The page you were looking for 42 | could not be found.

43 | Back to homepage 44 |
45 |
46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /js/settings.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function () { 2 | "use strict"; 3 | try { 4 | 5 | /* ========================================================================== 6 | #PieChart For Skills Page 7 | ========================================================================== */ 8 | 9 | $('.chart').easyPieChart({ 10 | easing: 'easeOutBounce', 11 | onStep: function (from, to, percent) { 12 | $(this.el).find('.percent').text(Math.round(percent)); 13 | } 14 | }); 15 | 16 | 17 | /* ========================================================================== 18 | #Carousel Popup For Portfolio Page 19 | ========================================================================== */ 20 | $(".owl-carousel").owlCarousel({ 21 | navigation: true, 22 | slideSpeed: 300, 23 | paginationSpeed: 400, 24 | singleItem: true, 25 | autoPlay: false 26 | }); 27 | 28 | /* ========================================================================== 29 | #Text Rotator 30 | ========================================================================== */ 31 | $('#rotate').rotaterator({fadeSpeed: 800, pauseSpeed: 800}); 32 | 33 | /* ========================================================================== 34 | #Orientation change event 35 | ========================================================================== */ 36 | $(window).on('orientationchange', function (event) { 37 | window.location.href = window.location.href; 38 | }); 39 | 40 | //Videos 41 | $(".content-scroller").fitVids(); 42 | 43 | } catch (ex) { 44 | } 45 | }); 46 | 47 | /* ========================================================================== 48 | #Progress Bar For Skills Page 49 | ========================================================================== */ 50 | 51 | progressBar(70, $('#progressBar')); 52 | progressBar(95, $('#progressBar2')); 53 | progressBar(60, $('#progressBar3')); 54 | 55 | /* ========================================================================== 56 | #Mobile Menu 57 | ========================================================================== */ 58 | 59 | var $menu = $('#menu1'), 60 | $menulink = $('.menu-link'); 61 | $menulink.click(function () { 62 | $menulink.toggleClass('active'); 63 | $menu.toggleClass('active'); 64 | return false; 65 | }); 66 | 67 | $('nav#menu1 a').click(function () { 68 | $('#menu1').removeClass('active'); 69 | }); 70 | 71 | 72 | 73 | /* ========================================================================== 74 | #iPad,iPhone,iPod Keyboard issue with position fixed 75 | ========================================================================== */ 76 | var iPad = navigator.userAgent.toLowerCase().indexOf("ipad"); 77 | var iPhone = navigator.userAgent.toLowerCase().indexOf("iphone"); 78 | var iPod = navigator.userAgent.toLowerCase().indexOf("ipod"); 79 | if (iPad > -1 || iPhone > -1 || iPod > -1) 80 | { 81 | window.onscroll = function () { 82 | $('.totop-link').css('position', 'absolute'); 83 | $('.totop-link').css('top', (window.pageYOffset + window.innerHeight - 39) + 'px'); 84 | }; 85 | } 86 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /js/jquery.fitvids.js: -------------------------------------------------------------------------------- 1 | /*global jQuery */ 2 | /*jshint browser:true */ 3 | /*! 4 | * FitVids 1.1 5 | * 6 | * Copyright 2013, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com 7 | * Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/ 8 | * Released under the WTFPL license - http://sam.zoy.org/wtfpl/ 9 | * 10 | */ 11 | 12 | ;(function( $ ){ 13 | 14 | 'use strict'; 15 | 16 | $.fn.fitVids = function( options ) { 17 | var settings = { 18 | customSelector: null, 19 | ignore: null 20 | }; 21 | 22 | if(!document.getElementById('fit-vids-style')) { 23 | // appendStyles: https://github.com/toddmotto/fluidvids/blob/master/dist/fluidvids.js 24 | var head = document.head || document.getElementsByTagName('head')[0]; 25 | var css = '.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}'; 26 | var div = document.createElement("div"); 27 | div.innerHTML = '

x

'; 28 | head.appendChild(div.childNodes[1]); 29 | } 30 | 31 | if ( options ) { 32 | $.extend( settings, options ); 33 | } 34 | 35 | return this.each(function(){ 36 | var selectors = [ 37 | 'iframe[src*="player.vimeo.com"]', 38 | 'iframe[src*="youtube.com"]', 39 | 'iframe[src*="youtube-nocookie.com"]', 40 | 'iframe[src*="kickstarter.com"][src*="video.html"]', 41 | 'object', 42 | 'embed' 43 | ]; 44 | 45 | if (settings.customSelector) { 46 | selectors.push(settings.customSelector); 47 | } 48 | 49 | var ignoreList = '.fitvidsignore'; 50 | 51 | if(settings.ignore) { 52 | ignoreList = ignoreList + ', ' + settings.ignore; 53 | } 54 | 55 | var $allVideos = $(this).find(selectors.join(',')); 56 | $allVideos = $allVideos.not('object object'); // SwfObj conflict patch 57 | $allVideos = $allVideos.not(ignoreList); // Disable FitVids on this video. 58 | 59 | $allVideos.each(function(){ 60 | var $this = $(this); 61 | if($this.parents(ignoreList).length > 0) { 62 | return; // Disable FitVids on this video. 63 | } 64 | if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) { return; } 65 | if ((!$this.css('height') && !$this.css('width')) && (isNaN($this.attr('height')) || isNaN($this.attr('width')))) 66 | { 67 | $this.attr('height', 9); 68 | $this.attr('width', 16); 69 | } 70 | var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(), 71 | width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(), 72 | aspectRatio = height / width; 73 | if(!$this.attr('id')){ 74 | var videoID = 'fitvid' + Math.floor(Math.random()*999999); 75 | $this.attr('id', videoID); 76 | } 77 | $this.wrap('
').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+'%'); 78 | $this.removeAttr('height').removeAttr('width'); 79 | }); 80 | }); 81 | }; 82 | // Works with either jQuery or Zepto 83 | })( window.jQuery || window.Zepto ); 84 | -------------------------------------------------------------------------------- /plugins/jQuery-Plugin-For-Particle-System-Background-with-Parallax-Effect-Particleground/demo/css/style.css: -------------------------------------------------------------------------------- 1 | /* 2 | CSS Reset 3 | http://meyerweb.com/eric/tools/css/reset/ 4 | */ 5 | 6 | html, body, div, span, applet, object, iframe, 7 | h1, h2, h3, h4, h5, h6, p, blockquote, pre, 8 | a, abbr, acronym, address, big, cite, code, 9 | del, dfn, em, img, ins, kbd, q, s, samp, 10 | small, strike, strong, sub, sup, tt, var, 11 | b, u, i, center, 12 | dl, dt, dd, ol, ul, li, 13 | fieldset, form, label, legend, 14 | table, caption, tbody, tfoot, thead, tr, th, td, 15 | article, aside, canvas, details, embed, 16 | figure, figcaption, footer, header, hgroup, 17 | menu, nav, output, ruby, section, summary, 18 | time, mark, audio, video { 19 | margin: 0; 20 | padding: 0; 21 | border: 0; 22 | font-size: 100%; 23 | font: inherit; 24 | vertical-align: baseline; 25 | } 26 | article, aside, details, figcaption, figure, 27 | footer, header, hgroup, menu, nav, section { 28 | display: block; 29 | } 30 | body { 31 | line-height: 1; 32 | } 33 | ol, ul { 34 | list-style: none; 35 | } 36 | blockquote, q { 37 | quotes: none; 38 | } 39 | blockquote:before, blockquote:after, 40 | q:before, q:after { 41 | content: ''; 42 | content: none; 43 | } 44 | table { 45 | border-collapse: collapse; 46 | border-spacing: 0; 47 | } 48 | 49 | /* particleground demo */ 50 | 51 | * { 52 | -webkit-box-sizing: border-box; 53 | -moz-box-sizing: border-box; 54 | box-sizing: border-box; 55 | } 56 | 57 | html, body { 58 | width: 100%; 59 | height: 100%; 60 | overflow: hidden; 61 | } 62 | 63 | body { 64 | background: #16a085; 65 | font-family: 'Montserrat', sans-serif; 66 | color: #fff; 67 | line-height: 1.3; 68 | -webkit-font-smoothing: antialiased; 69 | } 70 | 71 | #particles { 72 | width: 100%; 73 | height: 100%; 74 | overflow: hidden; 75 | } 76 | 77 | .intro { 78 | position: absolute; 79 | left: 0; 80 | top: 50%; 81 | padding: 0 20px; 82 | width: 100%; 83 | text-align: center; 84 | } 85 | h1 { 86 | text-transform: uppercase; 87 | font-size: 85px; 88 | font-weight: 700; 89 | letter-spacing: 0.015em; 90 | } 91 | h1::after { 92 | content: ''; 93 | width: 80px; 94 | display: block; 95 | background: #fff; 96 | height: 10px; 97 | margin: 30px auto; 98 | line-height: 1.1; 99 | } 100 | p { 101 | margin: 0 0 30px 0; 102 | font-size: 24px; 103 | } 104 | .btn { 105 | display: inline-block; 106 | padding: 15px 30px; 107 | border: 2px solid #fff; 108 | text-transform: uppercase; 109 | letter-spacing: 0.015em; 110 | font-size: 18px; 111 | font-weight: 700; 112 | line-height: 1; 113 | color: #fff; 114 | text-decoration: none; 115 | -webkit-transition: all 0.4s; 116 | -moz-transition: all 0.4s; 117 | -o-transition: all 0.4s; 118 | transition: all 0.4s; 119 | } 120 | .btn:hover { 121 | color: #005544; 122 | border-color: #005544; 123 | } 124 | 125 | @media only screen and (max-width: 1000px) { 126 | h1 { 127 | font-size: 70px; 128 | } 129 | } 130 | 131 | @media only screen and (max-width: 800px) { 132 | h1 { 133 | font-size: 48px; 134 | } 135 | h1::after { 136 | height: 8px; 137 | } 138 | } 139 | 140 | @media only screen and (max-width: 568px) { 141 | .intro { 142 | padding: 0 10px; 143 | } 144 | h1 { 145 | font-size: 30px; 146 | } 147 | h1::after { 148 | height: 6px; 149 | } 150 | p { 151 | font-size: 18px; 152 | } 153 | .btn { 154 | font-size: 16px; 155 | } 156 | } 157 | 158 | @media only screen and (max-width: 320px) { 159 | h1 { 160 | font-size: 28px; 161 | } 162 | h1::after { 163 | height: 4px; 164 | } 165 | } -------------------------------------------------------------------------------- /plugins/Typing-Animation-jQuery-Typing-Effects/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 16 | 17 | jQuery Typing-Effects Plugin Demos 18 | 19 | 20 |
21 |
22 | 26 |
34 |
37 |
38 |
39 |
40 |
41 |

Typing-Effects Plugin

42 |

43 | Hi, I am 44 | 45 | 46 |

47 |

48 | I Love ❤ 49 | 50 | 51 |

52 | 53 | 54 | 69 | 103 |
104 | 118 | 119 | 120 | -------------------------------------------------------------------------------- /js/jquery.easing.1.3.js: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery Easing v1.3 3 | */ 4 | 5 | // t: current time, b: begInnIng value, c: change In value, d: duration 6 | jQuery.easing['jswing'] = jQuery.easing['swing']; 7 | 8 | jQuery.extend( jQuery.easing, 9 | { 10 | def: 'easeOutQuad', 11 | swing: function (x, t, b, c, d) { 12 | 13 | return jQuery.easing[jQuery.easing.def](x, t, b, c, d); 14 | }, 15 | easeInQuad: function (x, t, b, c, d) { 16 | return c*(t/=d)*t + b; 17 | }, 18 | easeOutQuad: function (x, t, b, c, d) { 19 | return -c *(t/=d)*(t-2) + b; 20 | }, 21 | easeInOutQuad: function (x, t, b, c, d) { 22 | if ((t/=d/2) < 1) return c/2*t*t + b; 23 | return -c/2 * ((--t)*(t-2) - 1) + b; 24 | }, 25 | easeInCubic: function (x, t, b, c, d) { 26 | return c*(t/=d)*t*t + b; 27 | }, 28 | easeOutCubic: function (x, t, b, c, d) { 29 | return c*((t=t/d-1)*t*t + 1) + b; 30 | }, 31 | easeInOutCubic: function (x, t, b, c, d) { 32 | if ((t/=d/2) < 1) return c/2*t*t*t + b; 33 | return c/2*((t-=2)*t*t + 2) + b; 34 | }, 35 | easeInQuart: function (x, t, b, c, d) { 36 | return c*(t/=d)*t*t*t + b; 37 | }, 38 | easeOutQuart: function (x, t, b, c, d) { 39 | return -c * ((t=t/d-1)*t*t*t - 1) + b; 40 | }, 41 | easeInOutQuart: function (x, t, b, c, d) { 42 | if ((t/=d/2) < 1) return c/2*t*t*t*t + b; 43 | return -c/2 * ((t-=2)*t*t*t - 2) + b; 44 | }, 45 | easeInQuint: function (x, t, b, c, d) { 46 | return c*(t/=d)*t*t*t*t + b; 47 | }, 48 | easeOutQuint: function (x, t, b, c, d) { 49 | return c*((t=t/d-1)*t*t*t*t + 1) + b; 50 | }, 51 | easeInOutQuint: function (x, t, b, c, d) { 52 | if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; 53 | return c/2*((t-=2)*t*t*t*t + 2) + b; 54 | }, 55 | easeInSine: function (x, t, b, c, d) { 56 | return -c * Math.cos(t/d * (Math.PI/2)) + c + b; 57 | }, 58 | easeOutSine: function (x, t, b, c, d) { 59 | return c * Math.sin(t/d * (Math.PI/2)) + b; 60 | }, 61 | easeInOutSine: function (x, t, b, c, d) { 62 | return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; 63 | }, 64 | easeInExpo: function (x, t, b, c, d) { 65 | return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; 66 | }, 67 | easeOutExpo: function (x, t, b, c, d) { 68 | return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; 69 | }, 70 | easeInOutExpo: function (x, t, b, c, d) { 71 | if (t==0) return b; 72 | if (t==d) return b+c; 73 | if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; 74 | return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; 75 | }, 76 | easeInCirc: function (x, t, b, c, d) { 77 | return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; 78 | }, 79 | easeOutCirc: function (x, t, b, c, d) { 80 | return c * Math.sqrt(1 - (t=t/d-1)*t) + b; 81 | }, 82 | easeInOutCirc: function (x, t, b, c, d) { 83 | if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; 84 | return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; 85 | }, 86 | easeInElastic: function (x, t, b, c, d) { 87 | var s=1.70158;var p=0;var a=c; 88 | if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; 89 | if (a < Math.abs(c)) { a=c; var s=p/4; } 90 | else var s = p/(2*Math.PI) * Math.asin (c/a); 91 | return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; 92 | }, 93 | easeOutElastic: function (x, t, b, c, d) { 94 | var s=1.70158;var p=0;var a=c; 95 | if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; 96 | if (a < Math.abs(c)) { a=c; var s=p/4; } 97 | else var s = p/(2*Math.PI) * Math.asin (c/a); 98 | return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; 99 | }, 100 | easeInOutElastic: function (x, t, b, c, d) { 101 | var s=1.70158;var p=0;var a=c; 102 | if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); 103 | if (a < Math.abs(c)) { a=c; var s=p/4; } 104 | else var s = p/(2*Math.PI) * Math.asin (c/a); 105 | if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; 106 | return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; 107 | }, 108 | easeInBack: function (x, t, b, c, d, s) { 109 | if (s == undefined) s = 1.70158; 110 | return c*(t/=d)*t*((s+1)*t - s) + b; 111 | }, 112 | easeOutBack: function (x, t, b, c, d, s) { 113 | if (s == undefined) s = 1.70158; 114 | return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; 115 | }, 116 | easeInOutBack: function (x, t, b, c, d, s) { 117 | if (s == undefined) s = 1.70158; 118 | if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; 119 | return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; 120 | }, 121 | easeInBounce: function (x, t, b, c, d) { 122 | return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b; 123 | }, 124 | easeOutBounce: function (x, t, b, c, d) { 125 | if ((t/=d) < (1/2.75)) { 126 | return c*(7.5625*t*t) + b; 127 | } else if (t < (2/2.75)) { 128 | return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; 129 | } else if (t < (2.5/2.75)) { 130 | return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; 131 | } else { 132 | return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; 133 | } 134 | }, 135 | easeInOutBounce: function (x, t, b, c, d) { 136 | if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; 137 | return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; 138 | } 139 | }); 140 | 141 | -------------------------------------------------------------------------------- /css/carousel.css: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------- 3 | 4 | Name: carousel.css 5 | Version: 1.2 6 | 7 | ---------------------------------- 8 | 9 | Table of Contents 10 | 11 | #Clearfix 12 | #Display none until init 13 | #Mouse grab icon 14 | #Fix 15 | #Controls 16 | #Next and Prev Buttons 17 | #Pagination 18 | #If PaginationNumbers is true 19 | #Preloading images 20 | 21 | */ 22 | 23 | /* ========================================================================== 24 | #Clearfix 25 | ========================================================================== */ 26 | 27 | .owl-carousel .owl-wrapper:after { 28 | content: "."; 29 | display: block; 30 | clear: both; 31 | visibility: hidden; 32 | line-height: 0; 33 | height: 0; 34 | } 35 | /* ========================================================================== 36 | #Display none until init 37 | ========================================================================== */ 38 | .owl-carousel { 39 | display: none; 40 | position: relative; 41 | width: 100%; 42 | -ms-touch-action: pan-y; 43 | } 44 | .owl-carousel .owl-wrapper { 45 | display: none; 46 | position: relative; 47 | -webkit-transform: translate3d(0px, 0px, 0px); 48 | } 49 | .owl-carousel .owl-wrapper-outer { 50 | overflow: hidden; 51 | position: relative; 52 | width: 100%; 53 | } 54 | .owl-carousel .owl-wrapper-outer.autoHeight { 55 | -webkit-transition: height 500ms ease-in-out; 56 | -moz-transition: height 500ms ease-in-out; 57 | -ms-transition: height 500ms ease-in-out; 58 | -o-transition: height 500ms ease-in-out; 59 | transition: height 500ms ease-in-out; 60 | } 61 | .owl-carousel .owl-item { 62 | float: left; 63 | } 64 | .owl-controls .owl-page, .owl-controls .owl-buttons div { 65 | cursor: pointer; 66 | } 67 | .owl-controls { 68 | -webkit-user-select: none; 69 | -khtml-user-select: none; 70 | -moz-user-select: none; 71 | -ms-user-select: none; 72 | user-select: none; 73 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0); 74 | } 75 | /* Mouse grab icon */ 76 | .grabbing { 77 | cursor: url(../images/grabbing.png) 8 8, move; 78 | } 79 | /* Fix */ 80 | .owl-carousel .owl-wrapper, .owl-carousel .owl-item { 81 | -webkit-backface-visibility: hidden; 82 | -moz-backface-visibility: hidden; 83 | -ms-backface-visibility: hidden; 84 | -webkit-transform: translate3d(0, 0, 0); 85 | -moz-transform: translate3d(0, 0, 0); 86 | -ms-transform: translate3d(0, 0, 0); 87 | } 88 | .owl-item iframe { 89 | width: 100%; 90 | } 91 | /* ========================================================================== 92 | #Controls 93 | ========================================================================== */ 94 | 95 | .owl-theme .owl-controls { 96 | margin-top: 10px; 97 | text-align: center; 98 | } 99 | .introduction .owl-pagination { bottom:5% !important} 100 | .owl-pagination { 101 | bottom: 12% !important; 102 | position: absolute; 103 | width: 100%; 104 | text-align: center; 105 | z-index: 1; 106 | } 107 | .blog-details .owl-pagination{ 108 | bottom: 6% !important; 109 | } 110 | .owl-buttons { 111 | display: none; 112 | } 113 | 114 | /* ========================================================================== 115 | #Next and Prev Buttons 116 | ========================================================================== */ 117 | 118 | .owl-theme .owl-controls .owl-buttons div { 119 | color: #FFF; 120 | display: inline-block; 121 | zoom: 1; 122 | *display: inline;/*IE7 life-saver */ 123 | margin: 5px; 124 | padding: 3px 10px; 125 | font-size: 12px; 126 | -webkit-border-radius: 30px; 127 | -moz-border-radius: 30px; 128 | border-radius: 30px; 129 | background: #869791; 130 | filter: Alpha(Opacity=50);/*IE7 fix*/ 131 | opacity: 0.5; 132 | } 133 | /* Clickable class fix problem with hover on touch devices */ 134 | /* Use it for non-touch hover action */ 135 | .owl-theme .owl-controls.clickable .owl-buttons div:hover { 136 | filter: Alpha(Opacity=100);/*IE7 fix*/ 137 | opacity: 1; 138 | text-decoration: none; 139 | } 140 | /* ========================================================================== 141 | #Pagination 142 | ========================================================================== */ 143 | 144 | .owl-theme .owl-controls .owl-page { 145 | display: inline-block; 146 | zoom: 1; 147 | *display: inline;/*IE7 life-saver */ 148 | } 149 | .owl-theme .owl-controls .owl-page span { 150 | border: 2px solid #fff; 151 | border-radius: 100%; 152 | display: block; 153 | height: 10px; 154 | margin: 5px 7px; 155 | width: 10px; 156 | } 157 | .owl-theme .owl-controls .owl-page.active span, .owl-theme .owl-controls.clickable .owl-page:hover span { 158 | background-color: #fff; 159 | } 160 | 161 | /* ========================================================================== 162 | #If PaginationNumbers is true 163 | ========================================================================== */ 164 | 165 | 166 | .owl-theme .owl-controls .owl-page span.owl-numbers { 167 | height: auto; 168 | width: auto; 169 | color: #FFF; 170 | padding: 2px 10px; 171 | font-size: 12px; 172 | -webkit-border-radius: 30px; 173 | -moz-border-radius: 30px; 174 | border-radius: 30px; 175 | } 176 | /* preloading images */ 177 | .owl-item.loading { 178 | min-height: 150px; 179 | background: url(AjaxLoader.gif) no-repeat center center 180 | } 181 | -------------------------------------------------------------------------------- /js/core.string.js: -------------------------------------------------------------------------------- 1 | 2 | String.prototype.trim = String.prototype.trim || function() { 3 | // Trim off any whitespace from the front and back 4 | return this.replace(/^\s+|\s+$/g, ''); 5 | }; 6 | 7 | String.prototype.strip = String.prototype.strip || function(value,regex){ 8 | // Strip a value from left and right, with optional regex support (defaults to false) 9 | value = String(value); 10 | var str = this; 11 | if ( value.length ) { 12 | if ( !(regex||false) ) { 13 | // We must escape value as we do not want regex support 14 | value = value.replace(/([\[\]\(\)\^\$\.\?\|\/\\])/g, '\\$1'); 15 | } 16 | str = str.replace(eval('/^'+value+'+|'+value+'+$/g'), ''); 17 | } 18 | return String(str); 19 | } 20 | 21 | 22 | String.prototype.stripLeft = String.prototype.stripLeft || function(value,regex){ 23 | // Strip a value from the left, with optional regex support (defaults to false) 24 | value = String(value); 25 | var str = this; 26 | if ( value.length ) { 27 | if ( !(regex||false) ) { 28 | // We must escape value as we do not want regex support 29 | value = value.replace(/([\[\]\(\)\^\$\.\?\|\/\\])/g, '\\$1'); 30 | } 31 | str = str.replace(eval('/^'+value+'+/g'), ''); 32 | } 33 | return String(str); 34 | } 35 | 36 | 37 | String.prototype.stripRight = String.prototype.stripRight || function(value,regex){ 38 | // Strip a value from the right, with optional regex support (defaults to false) 39 | value = String(value); 40 | var str = this; 41 | if ( value.length ) { 42 | if ( !(regex||false) ) { 43 | // We must escape value as we do not want regex support 44 | value = value.replace(/([\[\]\(\)\^\$\.\?\|\/\\])/g, '\\$1'); 45 | } 46 | str = str.replace(eval('/'+value+'+$/g'), ''); 47 | } 48 | return String(str); 49 | } 50 | 51 | 52 | String.prototype.toInt = String.prototype.toInt || function(){ 53 | // Convert to a Integer 54 | return parseInt(this,10); 55 | }; 56 | 57 | 58 | String.prototype.wrap = String.prototype.wrap || function(start,end){ 59 | // Wrap the string 60 | return start+this+end; 61 | }; 62 | 63 | 64 | String.prototype.wrapSelection = String.prototype.wrapSelection || function(start,end,a,z){ 65 | // Wrap the selection 66 | if ( typeof a === 'undefined' || a === null ) a = this.length; 67 | if ( typeof z === 'undefined' || z === null ) z = this.length; 68 | return this.substring(0,a)+start+this.substring(a,z)+end+this.substring(z); 69 | }; 70 | 71 | 72 | String.prototype.toSlug = String.prototype.toSlug || function(){ 73 | // Convert a string to a slug 74 | return this.toLowerCase().replace(/[\s_]/g, '-').replace(/[^-a-z0-9]/g, '').replace(/--+/g, '-').replace(/^-+|-+$/g,''); 75 | } 76 | 77 | 78 | String.prototype.queryStringToJSON = String.prototype.queryStringToJSON || function ( ) 79 | { // Turns a params string or url into an array of params 80 | // Prepare 81 | var params = String(this); 82 | // Remove url if need be 83 | params = params.substring(params.indexOf('?')+1); 84 | // params = params.substring(params.indexOf('#')+1); 85 | // Change + to %20, the %20 is fixed up later with the decode 86 | params = params.replace(/\+/g, '%20'); 87 | // Do we have JSON string 88 | if ( params.substring(0,1) === '{' && params.substring(params.length-1) === '}' ) 89 | { // We have a JSON string 90 | return eval(decodeURIComponent(params)); 91 | } 92 | // We have a params string 93 | params = params.split(/\&(amp\;)?/); 94 | var json = {}; 95 | // We have params 96 | for ( var i = 0, n = params.length; i < n; ++i ) 97 | { 98 | // Adjust 99 | var param = params[i] || null; 100 | if ( param === null ) { continue; } 101 | param = param.split('='); 102 | if ( param === null ) { continue; } 103 | // ^ We now have "var=blah" into ["var","blah"] 104 | 105 | // Get 106 | var key = param[0] || null; 107 | if ( key === null ) { continue; } 108 | if ( typeof param[1] === 'undefined' ) { continue; } 109 | var value = param[1]; 110 | // ^ We now have the parts 111 | 112 | // Fix 113 | key = decodeURIComponent(key); 114 | value = decodeURIComponent(value); 115 | try { 116 | // value can be converted 117 | value = eval(value); 118 | } catch ( e ) { 119 | // value is a normal string 120 | } 121 | 122 | // Set 123 | 124 | var keys = key.split('.'); 125 | if ( keys.length === 1 ) 126 | { // Simple 127 | json[key] = value; 128 | } 129 | else 130 | { // Advanced (Recreating an object) 131 | var path = '', 132 | cmd = ''; 133 | // Ensure Path Exists 134 | $.each(keys,function(ii,key){ 135 | path += '["'+key.replace(/"/g,'\\"')+'"]'; 136 | jsonCLOSUREGLOBAL = json; // we have made this a global as closure compiler struggles with evals 137 | cmd = 'if ( typeof jsonCLOSUREGLOBAL'+path+' === "undefined" ) jsonCLOSUREGLOBAL'+path+' = {}'; 138 | eval(cmd); 139 | json = jsonCLOSUREGLOBAL; 140 | delete jsonCLOSUREGLOBAL; 141 | }); 142 | // Apply Value 143 | jsonCLOSUREGLOBAL = json; // we have made this a global as closure compiler struggles with evals 144 | valueCLOSUREGLOBAL = value; // we have made this a global as closure compiler struggles with evals 145 | cmd = 'jsonCLOSUREGLOBAL'+path+' = valueCLOSUREGLOBAL'; 146 | eval(cmd); 147 | json = jsonCLOSUREGLOBAL; 148 | delete jsonCLOSUREGLOBAL; 149 | delete valueCLOSUREGLOBAL; 150 | } 151 | // ^ We now have the parts added to your JSON object 152 | } 153 | return json; 154 | }; -------------------------------------------------------------------------------- /js/head.min.js: -------------------------------------------------------------------------------- 1 | (function(a){function l(){var a=window.outerWidth||b.clientWidth;b.className=b.className.replace(/ (w|lt)-\d+/g,""),f("w-"+Math.round(a/100)*100),h(c.screens,function(b){a<=b&&f("lt-"+b)}),i.feature()}function h(a,b){for(var c=0,d=a.length;c2&&this[d+1]!==undefined)d&&f(this.slice(1,d+1).join("-")+c.section);else{var e=a||"index",g=e.indexOf(".");g>0&&(e=e.substring(0,g)),b.id=e+c.page,d||f("root"+c.section)}}),l(),window.onresize=l,i.feature("js",!0).feature()})(document),function(){function h(a){var b=a.charAt(0).toUpperCase()+a.substr(1),c=(a+" "+d.join(b+" ")+b).split(" ");return!!g(c)}function g(a){for(var c in a)if(b[a[c]]!==undefined)return!0}var a=document.createElement("i"),b=a.style,c=" -o- -moz- -ms- -webkit- -khtml- ".split(" "),d="Webkit Moz O ms Khtml".split(" "),e=window.head_conf&&head_conf.head||"head",f=window[e],i={gradient:function(){var a="background-image:",d="gradient(linear,left top,right bottom,from(#9f9),to(#fff));",e="linear-gradient(left top,#eee,#fff);";b.cssText=(a+c.join(d+a)+c.join(e+a)).slice(0,-a.length);return!!b.backgroundImage},rgba:function(){b.cssText="background-color:rgba(0,0,0,0.5)";return!!b.backgroundColor},opacity:function(){return a.style.opacity===""},textshadow:function(){return b.textShadow===""},multiplebgs:function(){b.cssText="background:url(//:),url(//:),red url(//:)";return(new RegExp("(url\\s*\\(.*?){3}")).test(b.background)},boxshadow:function(){return h("boxShadow")},borderimage:function(){return h("borderImage")},borderradius:function(){return h("borderRadius")},cssreflections:function(){return h("boxReflect")},csstransforms:function(){return h("transform")},csstransitions:function(){return h("transition")},fontface:function(){var a=navigator.userAgent,b;if(0)return!0;if(b=a.match(/Chrome\/(\d+\.\d+\.\d+\.\d+)/))return b[1]>="4.0.249.4"||1*b[1].split(".")[0]>5;if((b=a.match(/Safari\/(\d+\.\d+)/))&&!/iPhone/.test(a))return b[1]>="525.13";if(/Opera/.test({}.toString.call(window.opera)))return opera.version()>="10.00";if(b=a.match(/rv:(\d+\.\d+\.\d+)[^b].*Gecko\//))return b[1]>="1.9.1";return!1}};for(var j in i)i[j]&&f.feature(j,i[j].call(),!0);f.feature()}(),function(a){function z(){d||(d=!0,s(e,function(a){p(a)}))}function y(c,d){var e=a.createElement("script");e.type="text/"+(c.type||"javascript"),e.src=c.src||c,e.async=!1,e.onreadystatechange=e.onload=function(){var a=e.readyState;!d.done&&(!a||/loaded|complete/.test(a))&&(d.done=!0,d())},(a.body||b).appendChild(e)}function x(a,b){if(a.state==o)return b&&b();if(a.state==n)return k.ready(a.name,b);if(a.state==m)return a.onpreload.push(function(){x(a,b)});a.state=n,y(a.url,function(){a.state=o,b&&b(),s(g[a.name],function(a){p(a)}),u()&&d&&s(g.ALL,function(a){p(a)})})}function w(a,b){a.state===undefined&&(a.state=m,a.onpreload=[],y({src:a.url,type:"cache"},function(){v(a)}))}function v(a){a.state=l,s(a.onpreload,function(a){a.call()})}function u(a){a=a||h;var b;for(var c in a){if(a.hasOwnProperty(c)&&a[c].state!=o)return!1;b=!0}return b}function t(a){return Object.prototype.toString.call(a)=="[object Function]"}function s(a,b){if(!!a){typeof a=="object"&&(a=[].slice.call(a));for(var c=0;ct;t+=1)n.push(e[t].listener);return n},i.getListenersAsObject=function(e){var t,n=this.getListeners(e);return n instanceof Array&&(t={},t[e]=n),t||n},i.addListener=function(e,n){var i,r=this.getListenersAsObject(e),o="object"==typeof n;for(i in r)r.hasOwnProperty(i)&&-1===t(r[i],n)&&r[i].push(o?n:{listener:n,once:!1});return this},i.on=n("addListener"),i.addOnceListener=function(e,t){return this.addListener(e,{listener:t,once:!0})},i.once=n("addOnceListener"),i.defineEvent=function(e){return this.getListeners(e),this},i.defineEvents=function(e){for(var t=0;e.length>t;t+=1)this.defineEvent(e[t]);return this},i.removeListener=function(e,n){var i,r,o=this.getListenersAsObject(e);for(r in o)o.hasOwnProperty(r)&&(i=t(o[r],n),-1!==i&&o[r].splice(i,1));return this},i.off=n("removeListener"),i.addListeners=function(e,t){return this.manipulateListeners(!1,e,t)},i.removeListeners=function(e,t){return this.manipulateListeners(!0,e,t)},i.manipulateListeners=function(e,t,n){var i,r,o=e?this.removeListener:this.addListener,s=e?this.removeListeners:this.addListeners;if("object"!=typeof t||t instanceof RegExp)for(i=n.length;i--;)o.call(this,t,n[i]);else for(i in t)t.hasOwnProperty(i)&&(r=t[i])&&("function"==typeof r?o.call(this,i,r):s.call(this,i,r));return this},i.removeEvent=function(e){var t,n=typeof e,i=this._getEvents();if("string"===n)delete i[e];else if("object"===n)for(t in i)i.hasOwnProperty(t)&&e.test(t)&&delete i[t];else delete this._events;return this},i.removeAllListeners=n("removeEvent"),i.emitEvent=function(e,t){var n,i,r,o,s=this.getListenersAsObject(e);for(r in s)if(s.hasOwnProperty(r))for(i=s[r].length;i--;)n=s[r][i],n.once===!0&&this.removeListener(e,n.listener),o=n.listener.apply(this,t||[]),o===this._getOnceReturnValue()&&this.removeListener(e,n.listener);return this},i.trigger=n("emitEvent"),i.emit=function(e){var t=Array.prototype.slice.call(arguments,1);return this.emitEvent(e,t)},i.setOnceReturnValue=function(e){return this._onceReturnValue=e,this},i._getOnceReturnValue=function(){return this.hasOwnProperty("_onceReturnValue")?this._onceReturnValue:!0},i._getEvents=function(){return this._events||(this._events={})},e.noConflict=function(){return r.EventEmitter=o,e},"function"==typeof define&&define.amd?define("eventEmitter/EventEmitter",[],function(){return e}):"object"==typeof module&&module.exports?module.exports=e:this.EventEmitter=e}).call(this),function(e){function t(t){var n=e.event;return n.target=n.target||n.srcElement||t,n}var n=document.documentElement,i=function(){};n.addEventListener?i=function(e,t,n){e.addEventListener(t,n,!1)}:n.attachEvent&&(i=function(e,n,i){e[n+i]=i.handleEvent?function(){var n=t(e);i.handleEvent.call(i,n)}:function(){var n=t(e);i.call(e,n)},e.attachEvent("on"+n,e[n+i])});var r=function(){};n.removeEventListener?r=function(e,t,n){e.removeEventListener(t,n,!1)}:n.detachEvent&&(r=function(e,t,n){e.detachEvent("on"+t,e[t+n]);try{delete e[t+n]}catch(i){e[t+n]=void 0}});var o={bind:i,unbind:r};"function"==typeof define&&define.amd?define("eventie/eventie",o):e.eventie=o}(this),function(e,t){"function"==typeof define&&define.amd?define(["eventEmitter/EventEmitter","eventie/eventie"],function(n,i){return t(e,n,i)}):"object"==typeof exports?module.exports=t(e,require("eventEmitter"),require("eventie")):e.imagesLoaded=t(e,e.EventEmitter,e.eventie)}(this,function(e,t,n){function i(e,t){for(var n in t)e[n]=t[n];return e}function r(e){return"[object Array]"===d.call(e)}function o(e){var t=[];if(r(e))t=e;else if("number"==typeof e.length)for(var n=0,i=e.length;i>n;n++)t.push(e[n]);else t.push(e);return t}function s(e,t,n){if(!(this instanceof s))return new s(e,t);"string"==typeof e&&(e=document.querySelectorAll(e)),this.elements=o(e),this.options=i({},this.options),"function"==typeof t?n=t:i(this.options,t),n&&this.on("always",n),this.getImages(),a&&(this.jqDeferred=new a.Deferred);var r=this;setTimeout(function(){r.check()})}function c(e){this.img=e}function f(e){this.src=e,v[e]=this}var a=e.jQuery,u=e.console,h=u!==void 0,d=Object.prototype.toString;s.prototype=new t,s.prototype.options={},s.prototype.getImages=function(){this.images=[];for(var e=0,t=this.elements.length;t>e;e++){var n=this.elements[e];"IMG"===n.nodeName&&this.addImage(n);for(var i=n.querySelectorAll("img"),r=0,o=i.length;o>r;r++){var s=i[r];this.addImage(s)}}},s.prototype.addImage=function(e){var t=new c(e);this.images.push(t)},s.prototype.check=function(){function e(e,r){return t.options.debug&&h&&u.log("confirm",e,r),t.progress(e),n++,n===i&&t.complete(),!0}var t=this,n=0,i=this.images.length;if(this.hasAnyBroken=!1,!i)return this.complete(),void 0;for(var r=0;i>r;r++){var o=this.images[r];o.on("confirm",e),o.check()}},s.prototype.progress=function(e){this.hasAnyBroken=this.hasAnyBroken||!e.isLoaded;var t=this;setTimeout(function(){t.emit("progress",t,e),t.jqDeferred&&t.jqDeferred.notify&&t.jqDeferred.notify(t,e)})},s.prototype.complete=function(){var e=this.hasAnyBroken?"fail":"done";this.isComplete=!0;var t=this;setTimeout(function(){if(t.emit(e,t),t.emit("always",t),t.jqDeferred){var n=t.hasAnyBroken?"reject":"resolve";t.jqDeferred[n](t)}})},a&&(a.fn.imagesLoaded=function(e,t){var n=new s(this,e,t);return n.jqDeferred.promise(a(this))}),c.prototype=new t,c.prototype.check=function(){var e=v[this.img.src]||new f(this.img.src);if(e.isConfirmed)return this.confirm(e.isLoaded,"cached was confirmed"),void 0;if(this.img.complete&&void 0!==this.img.naturalWidth)return this.confirm(0!==this.img.naturalWidth,"naturalWidth"),void 0;var t=this;e.on("confirm",function(e,n){return t.confirm(e.isLoaded,n),!0}),e.check()},c.prototype.confirm=function(e,t){this.isLoaded=e,this.emit("confirm",this,t)};var v={};return f.prototype=new t,f.prototype.check=function(){if(!this.isChecked){var e=new Image;n.bind(e,"load",this),n.bind(e,"error",this),e.src=this.src,this.isChecked=!0}},f.prototype.handleEvent=function(e){var t="on"+e.type;this[t]&&this[t](e)},f.prototype.onload=function(e){this.confirm(!0,"onload"),this.unbindProxyEvents(e)},f.prototype.onerror=function(e){this.confirm(!1,"onerror"),this.unbindProxyEvents(e)},f.prototype.confirm=function(e,t){this.isConfirmed=!0,this.isLoaded=e,this.emit("confirm",this,t)},f.prototype.unbindProxyEvents=function(e){n.unbind(e.target,"load",this),n.unbind(e.target,"error",this)},s}); -------------------------------------------------------------------------------- /css/portfolio.css: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------- 3 | 4 | Name: portfolio.css 5 | Version: 1.2 6 | 7 | ---------------------------------- 8 | 9 | Table of Contents 10 | 11 | #General style 12 | #Grid 13 | #Slideshow 14 | #Navigation 15 | 16 | */ 17 | 18 | /* ========================================================================== 19 | #General style 20 | ========================================================================== */ 21 | .grid-gallery { 22 | height: 2600px; 23 | } 24 | .grid-gallery ul { 25 | list-style: none; 26 | margin: 0; 27 | padding: 0; 28 | } 29 | .grid-gallery figure { 30 | margin: 0; 31 | } 32 | .grid-gallery figure img { 33 | display: block; 34 | width: 100%; 35 | } 36 | .grid-gallery figcaption h3 { 37 | margin: 0; 38 | font-weight: 500; 39 | font-size: 20px; 40 | font-family: 'Roboto', sans-serif; 41 | color: #000; 42 | text-transform: uppercase; 43 | padding: 0 0 10px 0; 44 | } 45 | .grid-gallery figcaption span { 46 | border-bottom: 3px solid #7dba5c; 47 | color: #000; 48 | display: block; 49 | font-size: 12px; 50 | margin: 0 0 25px; 51 | padding: 0 0 15px; 52 | text-transform: uppercase; 53 | } 54 | /* ========================================================================== 55 | #Grid 56 | ========================================================================== */ 57 | 58 | .grid-wrap { 59 | } 60 | .grid { 61 | margin: 0 auto; 62 | } 63 | .grid li { 64 | width: 100%; 65 | float: left; 66 | cursor: pointer; 67 | margin: 0 0 70px 0; 68 | position: relative !important; 69 | top: inherit !important; 70 | } 71 | .grid figure { 72 | -webkit-transition: opacity 0.2s; 73 | transition: opacity 0.2s; 74 | } 75 | .grid li:hover figure { 76 | opacity: 1; 77 | } 78 | .grid figcaption { 79 | background-color: #7dba5c; 80 | opacity: 0; 81 | position: absolute; 82 | top: 0; 83 | width: 100%; 84 | height: 100%; 85 | transition-timing-function: ease-out; 86 | -moz-transition-timing-function: ease-out; 87 | -webkit-transition-timing-function: ease-out; 88 | -o-transition-timing-function: ease-out; 89 | transition-duration: 0.2s; 90 | -moz-transition-duration: 0.2s; 91 | -webkit-transition-duration: 0.2s; 92 | -o-transition-duration: 0.2s; 93 | } 94 | .grid li:hover figcaption { 95 | opacity: 1; 96 | transition-timing-function: ease-out; 97 | -moz-transition-timing-function: ease-out; 98 | -webkit-transition-timing-function: ease-out; 99 | -o-transition-timing-function: ease-out; 100 | transition-duration: 0.2s; 101 | -moz-transition-duration: 0.2s; 102 | -webkit-transition-duration: 0.2s; 103 | -o-transition-duration: 0.2s; 104 | } 105 | .figcaption-details { 106 | position: absolute; 107 | top: 32%; 108 | width: 100%; 109 | text-align: center; 110 | } 111 | .figcaption-details img { 112 | width: 82px !important; 113 | height: 82px !important; 114 | display: inline !important; 115 | margin: 0 0 30px; 116 | } 117 | /* ========================================================================== 118 | #Slideshow 119 | ========================================================================== */ 120 | 121 | .slideshow { 122 | position: fixed; 123 | background: rgba(0, 0, 0, 0.9); 124 | width: 100%; 125 | height: 100%; 126 | top: 0; 127 | left: 0; 128 | z-index: 500; 129 | opacity: 0; 130 | visibility: hidden; 131 | overflow: hidden; 132 | -webkit-perspective: 1000px; 133 | perspective: 1000px; 134 | -webkit-transition: opacity 0.5s, visibility 0s 0.5s; 135 | transition: opacity 0.5s, visibility 0s 0.5s; 136 | } 137 | .slideshow-open .slideshow { 138 | opacity: 1; 139 | visibility: visible; 140 | -webkit-transition: opacity 0.5s; 141 | transition: opacity 0.5s; 142 | } 143 | .slideshow ul { 144 | width: 100%; 145 | height: 100%; 146 | -webkit-transform-style: preserve-3d; 147 | transform-style: preserve-3d; 148 | -webkit-transform: translate3d(0, 0, 150px); 149 | transform: translate3d(0, 0, 150px); 150 | -webkit-transition: -webkit-transform 0.5s; 151 | transition: transform 0.5s; 152 | } 153 | .slideshow ul.animatable li { 154 | -webkit-transition: -webkit-transform 0.5s; 155 | transition: transform 0.5s; 156 | } 157 | .slideshow-open .slideshow ul { 158 | -webkit-transform: translate3d(0, 0, 0); 159 | transform: translate3d(0, 0, 0); 160 | } 161 | .slideshow li { 162 | width: 700px; 163 | height: 80vh; 164 | position: absolute; 165 | top: 50%; 166 | left: 50%; 167 | transform: translate(-50%, -50%); 168 | visibility: hidden; 169 | display: flex; 170 | flex-direction: column; 171 | justify-content: center; 172 | align-items: center; 173 | } 174 | .slideshow li.show { 175 | visibility: visible; 176 | } 177 | 178 | .slideshow figure { 179 | width: 100%; 180 | height: 100%; 181 | border: 50px solid #3f3f3f; 182 | overflow: hidden; 183 | position: relative; 184 | background: rgba(0, 0, 0, 0.8); 185 | } 186 | 187 | .slideshow figure > img { 188 | position: relative; 189 | z-index: -50; 190 | } 191 | 192 | .slideshow figcaption { 193 | padding-bottom: 20px; 194 | } 195 | .slideshow figcaption h3 { 196 | font-weight: 300; 197 | font-size: 200%; 198 | } 199 | .slideshow figcaption h3, 200 | .slideshow figcaption span { 201 | color: #fff; 202 | } 203 | /* ========================================================================== 204 | #Navigation 205 | ========================================================================== */ 206 | 207 | .slideshow nav span { 208 | position: fixed; 209 | z-index: 1000; 210 | color: #818181; 211 | text-align: center; 212 | padding: 3%; 213 | cursor: pointer; 214 | font-size: 2.2em; 215 | } 216 | .slideshow nav span:hover { 217 | color: #fff; 218 | } 219 | .slideshow nav span.nav-prev, 220 | .slideshow nav span.nav-next { 221 | top: 50%; 222 | -webkit-transform: translateY(-50%); 223 | transform: translateY(-50%); 224 | } 225 | .slideshow nav span.nav-close { 226 | top: 0; 227 | right: 0; 228 | padding: 0.5em 0.7em; 229 | color: #818181; 230 | background-color: #3f3f3f; 231 | } 232 | .slideshow nav span.nav-close:hover { 233 | background-color: #fff; 234 | color: #000; 235 | } 236 | .icon:before, 237 | .icon:after { 238 | font-family: 'FontAwesome'; 239 | speak: none; 240 | font-style: normal; 241 | font-weight: normal; 242 | font-variant: normal; 243 | text-transform: none; 244 | line-height: 1; 245 | -webkit-font-smoothing: antialiased; 246 | -moz-osx-font-smoothing: grayscale; 247 | } 248 | span.nav-prev { 249 | left: 50%; 250 | margin-left: -537px; 251 | } 252 | span.nav-prev:before { 253 | content: '\f053'; 254 | } 255 | span.nav-next { 256 | right: 50%; 257 | margin-right: -537px; 258 | } 259 | span.nav-next:before { 260 | content: '\f054'; 261 | } 262 | span.nav-close:before { 263 | content: '\f00d'; 264 | } 265 | -------------------------------------------------------------------------------- /plugins/jQuery-Plugin-For-Particle-System-Background-with-Parallax-Effect-Particleground/jquery.particleground.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Particleground 3 | * 4 | * @author Jonathan Nicol - @mrjnicol 5 | * @version 1.0.1 6 | * @description Creates a canvas based particle system background 7 | * 8 | * Inspired by: 9 | * http://requestlab.fr/ 10 | * http://disruptivebydesign.com/ 11 | * 12 | * @license The MIT License (MIT) 13 | * 14 | * Copyright (c) 2014 Jonathan Nicol - @mrjnicol 15 | * 16 | * Permission is hereby granted, free of charge, to any person obtaining a copy 17 | * of this software and associated documentation files (the "Software"), to deal 18 | * in the Software without restriction, including without limitation the rights 19 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 20 | * copies of the Software, and to permit persons to whom the Software is 21 | * furnished to do so, subject to the following conditions: 22 | * 23 | * The above copyright notice and this permission notice shall be included in 24 | * all copies or substantial portions of the Software. 25 | * 26 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 27 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 28 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 29 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 30 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 31 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 32 | * THE SOFTWARE. 33 | */ 34 | !function(a){function b(b,d){function e(){if(w){$canvas=a(''),v.prepend($canvas),p=$canvas[0],q=p.getContext("2d"),f();for(var b=Math.round(p.width*p.height/d.density),c=0;b>c;c++){var e=new l;e.setStackPos(c),x.push(e)}a(window).on("resize",function(){h()}),a(document).on("mousemove",function(a){y=a.pageX,z=a.pageY}),B&&!A&&window.addEventListener("deviceorientation",function(){D=Math.min(Math.max(-event.beta,-30),30),C=Math.min(Math.max(-event.gamma,-30),30)},!0),g(),o("onInit")}}function f(){p.width=v.width(),p.height=v.height(),q.fillStyle=d.dotColor,q.strokeStyle=d.lineColor,q.lineWidth=d.lineWidth}function g(){if(w){s=a(window).width(),t=a(window).height(),q.clearRect(0,0,p.width,p.height);for(var b=0;b=0;i--)(x[i].position.x>v.width()||x[i].position.y>v.height())&&x.splice(i,1);var a=Math.round(p.width*p.height/d.density);if(a>x.length)for(;a>x.length;){var b=new l;x.push(b)}else a=0;i--)x[i].setStackPos(i)}function j(){E=!0}function k(){E=!1,g()}function l(){switch(this.stackPos,this.active=!0,this.layer=Math.ceil(3*Math.random()),this.parallaxOffsetX=0,this.parallaxOffsetY=0,this.position={x:Math.ceil(Math.random()*p.width),y:Math.ceil(Math.random()*p.height)},this.speed={},d.directionX){case"left":this.speed.x=+(-d.maxSpeedX+Math.random()*d.maxSpeedX-d.minSpeedX).toFixed(2);break;case"right":this.speed.x=+(Math.random()*d.maxSpeedX+d.minSpeedX).toFixed(2);break;default:this.speed.x=+(-d.maxSpeedX/2+Math.random()*d.maxSpeedX).toFixed(2),this.speed.x+=this.speed.x>0?d.minSpeedX:-d.minSpeedX}switch(d.directionY){case"up":this.speed.y=+(-d.maxSpeedY+Math.random()*d.maxSpeedY-d.minSpeedY).toFixed(2);break;case"down":this.speed.y=+(Math.random()*d.maxSpeedY+d.minSpeedY).toFixed(2);break;default:this.speed.y=+(-d.maxSpeedY/2+Math.random()*d.maxSpeedY).toFixed(2),this.speed.x+=this.speed.y>0?d.minSpeedY:-d.minSpeedY}}function m(a,b){return b?void(d[a]=b):d[a]}function n(){v.find(".pg-canvas").remove(),o("onDestroy"),v.removeData("plugin_"+c)}function o(a){void 0!==d[a]&&d[a].call(u)}var p,q,r,s,t,u=b,v=a(b),w=!!document.createElement("canvas").getContext,x=[],y=0,z=0,A=!navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry|BB10|mobi|tablet|opera mini|nexus 7)/i),B=!!window.DeviceOrientationEvent,C=0,D=0,E=!1;return d=a.extend({},a.fn[c].defaults,d),l.prototype.draw=function(){q.beginPath(),q.arc(this.position.x+this.parallaxOffsetX,this.position.y+this.parallaxOffsetY,d.particleRadius/2,0,2*Math.PI,!0),q.closePath(),q.fill(),q.beginPath();for(var a=x.length-1;a>this.stackPos;a--){var b=x[a],c=this.position.x-b.position.x,e=this.position.y-b.position.y,f=Math.sqrt(c*c+e*e).toFixed(2);fv.width()&&(this.position.x=0-this.parallaxOffsetX);break;default:(this.position.x+this.speed.x+this.parallaxOffsetX>v.width()||this.position.x+this.speed.x+this.parallaxOffsetX<0)&&(this.speed.x=-this.speed.x)}switch(d.directionY){case"up":this.position.y+this.speed.y+this.parallaxOffsetY<0&&(this.position.y=v.height()-this.parallaxOffsetY);break;case"down":this.position.y+this.speed.y+this.parallaxOffsetY>v.height()&&(this.position.y=0-this.parallaxOffsetY);break;default:(this.position.y+this.speed.y+this.parallaxOffsetY>v.height()||this.position.y+this.speed.y+this.parallaxOffsetY<0)&&(this.speed.y=-this.speed.y)}this.position.x+=this.speed.x,this.position.y+=this.speed.y},l.prototype.setStackPos=function(a){this.stackPos=a},e(),{option:m,destroy:n,start:k,pause:j}}var c="particleground";a.fn[c]=function(d){if("string"==typeof arguments[0]){var e,f=arguments[0],g=Array.prototype.slice.call(arguments,1);return this.each(function(){a.data(this,"plugin_"+c)&&"function"==typeof a.data(this,"plugin_"+c)[f]&&(e=a.data(this,"plugin_"+c)[f].apply(this,g))}),void 0!==e?e:this}return"object"!=typeof d&&d?void 0:this.each(function(){a.data(this,"plugin_"+c)||a.data(this,"plugin_"+c,new b(this,d))})},a.fn[c].defaults={minSpeedX:.1,maxSpeedX:.7,minSpeedY:.1,maxSpeedY:.7,directionX:"center",directionY:"center",density:1e4,dotColor:"#666666",lineColor:"#666666",particleRadius:7,lineWidth:1,curvedLines:!1,proximity:100,parallax:!0,parallaxMultiplier:5,onInit:function(){},onDestroy:function(){}}}(jQuery),/** 35 | * requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel 36 | * @see: http://paulirish.com/2011/requestanimationframe-for-smart-animating/ 37 | * @see: http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating 38 | * @license: MIT license 39 | */ 40 | function(){for(var a=0,b=["ms","moz","webkit","o"],c=0;c',a,""].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},x={}.hasOwnProperty,y;!B(x,"undefined")&&!B(x.call,"undefined")?y=function(a,b){return x.call(a,b)}:y=function(a,b){return b in a&&B(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=u.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(u.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(u.call(arguments)))};return e}),q.csstransforms3d=function(){var a=!!F("perspective");return a&&"webkitPerspective"in g.style&&w("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},q.csstransitions=function(){return F("transition")};for(var G in q)y(q,G)&&(v=G.toLowerCase(),e[v]=q[G](),t.push((e[v]?"":"no-")+v));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)y(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},z(""),i=k=null,function(a,b){function l(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function m(){var a=s.elements;return typeof a=="string"?a.split(" "):a}function n(a){var b=j[a[h]];return b||(b={},i++,a[h]=i,j[i]=b),b}function o(a,c,d){c||(c=b);if(k)return c.createElement(a);d||(d=n(c));var g;return d.cache[a]?g=d.cache[a].cloneNode():f.test(a)?g=(d.cache[a]=d.createElem(a)).cloneNode():g=d.createElem(a),g.canHaveChildren&&!e.test(a)&&!g.tagUrn?d.frag.appendChild(g):g}function p(a,c){a||(a=b);if(k)return a.createDocumentFragment();c=c||n(a);var d=c.frag.cloneNode(),e=0,f=m(),g=f.length;for(;e",g="hidden"in a,k=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){g=!0,k=!0}})();var s={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:c,shivCSS:d.shivCSS!==!1,supportsUnknownElements:k,shivMethods:d.shivMethods!==!1,type:"default",shivDocument:r,createElement:o,createDocumentFragment:p};a.html5=s,r(b)}(this,b),e._version=d,e._prefixes=m,e._domPrefixes=p,e._cssomPrefixes=o,e.testProp=function(a){return D([a])},e.testAllProps=F,e.testStyles=w,e.prefixed=function(a,b,c){return b?F(a,b,c):F(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+t.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f a' ), 13 | $articles = $container.find( 'div.content-wrapper > article' ).not(".noscroll"), 14 | 15 | 16 | 17 | // button to scroll to the top of the page 18 | // only shown when screen size < 715 19 | $toTop = $container.find( 'a.totop-link' ), 20 | // the browser nhistory object 21 | History = window.History, 22 | // animation options 23 | animation = { speed : 800, easing : 'easeInOutExpo' }, 24 | // jScrollPane options 25 | scrollOptions = { verticalGutter : 0, hideFocus : true }, 26 | // init function 27 | init = function() { 28 | 29 | // initialize the jScrollPane on both the menu and articles 30 | _initCustomScroll(); 31 | // initialize some events 32 | _initEvents(); 33 | // sets some css properties 34 | _layout(); 35 | // jumps to the respective chapter 36 | // according to the url 37 | _goto(); 38 | 39 | }, 40 | _initCustomScroll = function() { 41 | 42 | 43 | // Only add custom scroll to articles if screen size > 715. 44 | // If not the articles will be expanded 45 | if( $(window).width() > 767 ) { 46 | 47 | $articles.jScrollPane( scrollOptions ); 48 | 49 | } 50 | // add custom scroll to menu 51 | $menu.children( 'nav' ).jScrollPane( scrollOptions ); 52 | 53 | }, 54 | _goto = function( chapter ) { 55 | 56 | 57 | $(document).attr("title",pagetitle); 58 | 59 | 60 | // get the url from history state (e.g. chapter=3) and extract the chapter number 61 | var chapter = chapter || History.getState().url.queryStringToJSON().page, 62 | isHome = ( chapter === undefined ), 63 | // we will jump to the introduction chapter if theres no chapter 64 | $article = $( chapter ? '#' + 'chapter' + chapter : '#' + 'introduction' ); 65 | 66 | 67 | 68 | 69 | $('#link_introduction').removeClass('active'); 70 | $('#link_about').removeClass('active'); 71 | $('#link_skills').removeClass('active'); 72 | $('#link_experience').removeClass('active'); 73 | $('#link_education').removeClass('active'); 74 | $('#link_certificate').removeClass('active'); 75 | $('#link_portfolio').removeClass('active'); 76 | $('#link_contact').removeClass('active'); 77 | 78 | $('#link_'+chapter).addClass('active'); 79 | 80 | if( $article.length ) { 81 | 82 | // left / top of the element 83 | var left = $article.position().left, 84 | top = $article.position().top, 85 | // check if we are scrolling down or left 86 | // is_v will be true when the screen size < 715 87 | is_v = ( $(document).height() - $(window).height() > 0 ), 88 | // animation parameters: 89 | // if vertically scrolling then the body will animate the scrollTop, 90 | // otherwise the scroller (div.content-scroller) will animate the scrollLeft 91 | param = ( is_v ) ? { scrollTop : (isHome) ? top : top + $menu.outerHeight( true ) } : { scrollLeft : left }, 92 | $elScroller = ( is_v ) ? $( 'html, body' ) : $scroller; 93 | 94 | $elScroller.stop().animate( param, animation.speed, animation.easing, function() { 95 | 96 | // active class for selected chapter 97 | ///$articles.removeClass( 'content-active' ); 98 | //$article.addClass( 'content-active' ); 99 | 100 | 101 | } ); 102 | 103 | } 104 | 105 | }, 106 | _saveState = function( chapter ) { 107 | 108 | // adds a new state to the history object 109 | // this will trigger the statechange on the window 110 | if( History.getState().url.queryStringToJSON().page !== chapter ) { 111 | 112 | History.pushState( null, null, '?page=' + chapter ); 113 | 114 | $('#link_introduction').removeClass('active'); 115 | $('#link_about').removeClass('active'); 116 | $('#link_skills').removeClass('active'); 117 | $('#link_experience').removeClass('active'); 118 | $('#link_education').removeClass('active'); 119 | $('#link_certificate').removeClass('active'); 120 | $('#link_portfolio').removeClass('active'); 121 | $('#link_contact').removeClass('active'); 122 | 123 | $('#link_'+chapter).addClass('active'); 124 | 125 | } 126 | 127 | }, 128 | _layout = function() { 129 | 130 | // control the overflow property of the scroller (div.content-scroller) 131 | var windowWidth = $(window).width(); 132 | 133 | var isipad = navigator.userAgent.toLowerCase().indexOf("ipad"); 134 | if(isipad > -1) 135 | { 136 | //$('.totop-link').hide(); 137 | switch( true ) { 138 | case ( windowWidth <= 768 ) : $scroller.scrollLeft( 0 ).css( 'overflow', 'visible' ); break; 139 | case ( windowWidth <= 1024 ): $scroller.css( 'overflow-x', 'hidden' ); break; 140 | case ( windowWidth > 1024 ) : $scroller.css( 'overflow', 'hidden' ); break; 141 | }; 142 | } 143 | else 144 | { 145 | switch( true ) { 146 | case ( windowWidth <= 768 ) : $scroller.scrollLeft( 0 ).css( 'overflow', 'visible' ); break; 147 | case ( windowWidth <= 1024 ): $scroller.css( 'overflow-x', 'hidden' ); break; 148 | case ( windowWidth > 1024 ) : $scroller.css( 'overflow', 'hidden' ); break; 149 | }; 150 | } 151 | 152 | }, 153 | _initEvents = function() { 154 | 155 | _initWindowEvents(); 156 | _initMenuEvents(); 157 | _initArticleEvents(); 158 | 159 | }, 160 | _initWindowEvents = function() { 161 | 162 | $(window).on({ 163 | 164 | // when resizing the window we need to reinitialize or destroy the jScrollPanes 165 | // depending on the screen size 166 | 'smartresize' : function( event ) { 167 | 168 | var isipad = navigator.userAgent.toLowerCase().indexOf("ipad"); 169 | var ismobile = navigator.userAgent.toLowerCase().indexOf("mobile"); 170 | if(isipad > -1 || ismobile > -1 ) 171 | { 172 | } 173 | else 174 | { 175 | _layout(); 176 | 177 | $('article.content').not(".noscroll").each( function() { 178 | 179 | var $article = $(this), 180 | aJSP = $article.data( 'jsp' ); 181 | 182 | if( $(window).width() > 767 ) { 183 | 184 | ( aJSP === undefined ) ? $article.jScrollPane( scrollOptions ) : aJSP.reinitialise(); 185 | 186 | _initArticleEvents(); 187 | 188 | } 189 | else { 190 | 191 | // destroy article's custom scroll if screen size <= 715px 192 | if( aJSP !== undefined ) 193 | aJSP.destroy(); 194 | 195 | $container.off( 'click', 'article.content' ); 196 | 197 | } 198 | 199 | }); 200 | 201 | var nJSP = $menu.children( 'nav' ).data( 'jsp' ); 202 | nJSP.reinitialise(); 203 | 204 | // jumps to the current chapter 205 | _goto(); 206 | } 207 | 208 | }, 209 | // triggered when the history state changes - jumps to the respective chapter 210 | 'statechange' : function( event ) { 211 | 212 | _goto(); 213 | 214 | } 215 | }); 216 | 217 | }, 218 | _initMenuEvents = function() { 219 | 220 | // when we click a menu link we check which chapter the link refers to, 221 | // and we save the state on the history obj. 222 | // the statechange of the window is then triggered and the page/scroller scrolls to the 223 | // respective chapter's position 224 | $links.on( 'click', function( event ) { 225 | 226 | var href = $(this).attr('href'), 227 | chapter = ( href.search(/chapter/) !== -1 ) ? href.substring(8) : 0; 228 | 229 | _saveState( chapter ); 230 | if (href.indexOf("#") != -1) 231 | return false; 232 | else 233 | return true; 234 | 235 | 236 | 237 | }); 238 | 239 | // scrolls to the top of the page. 240 | // this button will only be visible for screen size < 715 241 | $toTop.on( 'click', function( event ) { 242 | 243 | $( 'html, body' ).stop().animate( { scrollTop : 0 }, animation.speed, animation.easing ); 244 | 245 | return false; 246 | 247 | }); 248 | 249 | }, 250 | _initArticleEvents = function() { 251 | 252 | // when we click on an article we check which chapter the article refers to, 253 | // and we save the state on the history obj. 254 | // the statechange of the window is then triggered and the page/scroller scrolls to the 255 | // respective chapter's position 256 | 257 | 258 | 259 | if($(window).width()>768) 260 | { 261 | $container.on( 'click', 'article.content', function( event ) { 262 | 263 | var id = $(this).attr('id'), 264 | chapter = ( id.search(/chapter/) !== -1 ) ? id.substring(7) : 0; 265 | 266 | _saveState( chapter ); 267 | 268 | //return false; 269 | 270 | }); 271 | } 272 | 273 | 274 | 275 | 276 | 277 | }; 278 | 279 | return { init : init }; 280 | 281 | })(); 282 | 283 | Page.init(); 284 | 285 | })(window); 286 | 287 | -------------------------------------------------------------------------------- /js/jquery.easypiechart.js: -------------------------------------------------------------------------------- 1 | (function(root, factory) { 2 | "use strict"; 3 | if(typeof exports === 'object') { 4 | module.exports = factory(require('jquery')); 5 | } 6 | else if(typeof define === 'function' && define.amd) { 7 | define(['jquery'], factory); 8 | } 9 | else { 10 | factory(root.jQuery); 11 | } 12 | }(this, function($) { 13 | 14 | var CanvasRenderer = function(el, options) { 15 | var cachedBackground; 16 | var canvas = document.createElement('canvas'); 17 | 18 | el.appendChild(canvas); 19 | 20 | if (typeof(G_vmlCanvasManager) !== 'undefined') { 21 | G_vmlCanvasManager.initElement(canvas); 22 | } 23 | 24 | var ctx = canvas.getContext('2d'); 25 | 26 | canvas.width = canvas.height = options.size; 27 | 28 | // canvas on retina devices 29 | var scaleBy = 1; 30 | if (window.devicePixelRatio > 1) { 31 | scaleBy = window.devicePixelRatio; 32 | canvas.style.width = canvas.style.height = [options.size, 'px'].join(''); 33 | canvas.width = canvas.height = options.size * scaleBy; 34 | ctx.scale(scaleBy, scaleBy); 35 | } 36 | 37 | // move 0,0 coordinates to the center 38 | ctx.translate(options.size / 2, options.size / 2); 39 | 40 | // rotate canvas -90deg 41 | ctx.rotate((-1 / 2 + options.rotate / 180) * Math.PI); 42 | 43 | var radius = (options.size - options.lineWidth) / 2; 44 | if (options.scaleColor && options.scaleLength) { 45 | radius -= options.scaleLength + 2; // 2 is the distance between scale and bar 46 | } 47 | 48 | // IE polyfill for Date 49 | Date.now = Date.now || function() { 50 | return +(new Date()); 51 | }; 52 | 53 | /** 54 | * Draw a circle around the center of the canvas 55 | * @param {strong} color Valid CSS color string 56 | * @param {number} lineWidth Width of the line in px 57 | * @param {number} percent Percentage to draw (float between -1 and 1) 58 | */ 59 | var drawCircle = function(color, lineWidth, percent) { 60 | percent = Math.min(Math.max(-1, percent || 0), 1); 61 | var isNegative = percent <= 0 ? true : false; 62 | 63 | ctx.beginPath(); 64 | ctx.arc(0, 0, radius, 0, Math.PI * 2 * percent, isNegative); 65 | 66 | ctx.strokeStyle = color; 67 | ctx.lineWidth = lineWidth; 68 | 69 | ctx.stroke(); 70 | }; 71 | 72 | /** 73 | * Draw the scale of the chart 74 | */ 75 | var drawScale = function() { 76 | var offset; 77 | var length; 78 | 79 | ctx.lineWidth = 1; 80 | ctx.fillStyle = options.scaleColor; 81 | 82 | ctx.save(); 83 | for (var i = 24; i > 0; --i) { 84 | if (i % 6 === 0) { 85 | length = options.scaleLength; 86 | offset = 0; 87 | } else { 88 | length = options.scaleLength * 0.6; 89 | offset = options.scaleLength - length; 90 | } 91 | ctx.fillRect(-options.size/2 + offset, 0, length, 1); 92 | ctx.rotate(Math.PI / 12); 93 | } 94 | ctx.restore(); 95 | }; 96 | 97 | /** 98 | * Request animation frame wrapper with polyfill 99 | * @return {function} Request animation frame method or timeout fallback 100 | */ 101 | var reqAnimationFrame = (function() { 102 | return window.requestAnimationFrame || 103 | window.webkitRequestAnimationFrame || 104 | window.mozRequestAnimationFrame || 105 | function(callback) { 106 | window.setTimeout(callback, 1000 / 60); 107 | }; 108 | }()); 109 | 110 | /** 111 | * Draw the background of the plugin including the scale and the track 112 | */ 113 | var drawBackground = function() { 114 | if(options.scaleColor) drawScale(); 115 | if(options.trackColor) drawCircle(options.trackColor, options.lineWidth, 1); 116 | }; 117 | 118 | /** 119 | * Canvas accessor 120 | */ 121 | this.getCanvas = function() { 122 | return canvas; 123 | }; 124 | 125 | /** 126 | * Canvas 2D context 'ctx' accessor 127 | */ 128 | this.getCtx = function() { 129 | return ctx; 130 | }; 131 | 132 | /** 133 | * Clear the complete canvas 134 | */ 135 | this.clear = function() { 136 | ctx.clearRect(options.size / -2, options.size / -2, options.size, options.size); 137 | }; 138 | 139 | /** 140 | * Draw the complete chart 141 | * @param {number} percent Percent shown by the chart between -100 and 100 142 | */ 143 | this.draw = function(percent) { 144 | // do we need to render a background 145 | if (!!options.scaleColor || !!options.trackColor) { 146 | // getImageData and putImageData are supported 147 | if (ctx.getImageData && ctx.putImageData) { 148 | if (!cachedBackground) { 149 | drawBackground(); 150 | cachedBackground = ctx.getImageData(0, 0, options.size * scaleBy, options.size * scaleBy); 151 | } else { 152 | ctx.putImageData(cachedBackground, 0, 0); 153 | } 154 | } else { 155 | this.clear(); 156 | drawBackground(); 157 | } 158 | } else { 159 | this.clear(); 160 | } 161 | 162 | ctx.lineCap = options.lineCap; 163 | 164 | // if barcolor is a function execute it and pass the percent as a value 165 | var color; 166 | if (typeof(options.barColor) === 'function') { 167 | color = options.barColor(percent); 168 | } else { 169 | color = options.barColor; 170 | } 171 | 172 | // draw bar 173 | drawCircle(color, options.lineWidth, percent / 100); 174 | }.bind(this); 175 | 176 | /** 177 | * Animate from some percent to some other percentage 178 | * @param {number} from Starting percentage 179 | * @param {number} to Final percentage 180 | */ 181 | this.animate = function(from, to) { 182 | var startTime = Date.now(); 183 | options.onStart(from, to); 184 | var animation = function() { 185 | var process = Math.min(Date.now() - startTime, options.animate.duration); 186 | var currentValue = options.easing(this, process, from, to - from, options.animate.duration); 187 | this.draw(currentValue); 188 | options.onStep(from, to, currentValue); 189 | if (process >= options.animate.duration) { 190 | options.onStop(from, to); 191 | } else { 192 | reqAnimationFrame(animation); 193 | } 194 | }.bind(this); 195 | 196 | reqAnimationFrame(animation); 197 | }.bind(this); 198 | }; 199 | 200 | var EasyPieChart = function(el, opts) { 201 | var defaultOptions = { 202 | barColor: '#8f8f8f', 203 | trackColor: '#565656', 204 | lineCap: 'round', 205 | lineWidth: 6, 206 | size: 154, 207 | rotate: 0, 208 | animate: { 209 | duration: 1000, 210 | enabled: true 211 | }, 212 | easing: function (x, t, b, c, d) { 213 | t = t / (d/2); 214 | if (t < 1) { 215 | return c / 2 * t * t + b; 216 | } 217 | return -c/2 * ((--t)*(t-2) - 1) + b; 218 | }, 219 | onStart: function(from, to) { 220 | return; 221 | }, 222 | onStep: function(from, to, currentValue) { 223 | return; 224 | }, 225 | onStop: function(from, to) { 226 | return; 227 | } 228 | }; 229 | 230 | // detect present renderer 231 | if (typeof(CanvasRenderer) !== 'undefined') { 232 | defaultOptions.renderer = CanvasRenderer; 233 | } else if (typeof(SVGRenderer) !== 'undefined') { 234 | defaultOptions.renderer = SVGRenderer; 235 | } else { 236 | throw new Error('Please load either the SVG- or the CanvasRenderer'); 237 | } 238 | 239 | var options = {}; 240 | var currentValue = 0; 241 | 242 | /** 243 | * Initialize the plugin by creating the options object and initialize rendering 244 | */ 245 | var init = function() { 246 | this.el = el; 247 | this.options = options; 248 | 249 | // merge user options into default options 250 | for (var i in defaultOptions) { 251 | if (defaultOptions.hasOwnProperty(i)) { 252 | options[i] = opts && typeof(opts[i]) !== 'undefined' ? opts[i] : defaultOptions[i]; 253 | if (typeof(options[i]) === 'function') { 254 | options[i] = options[i].bind(this); 255 | } 256 | } 257 | } 258 | 259 | // check for jQuery easing 260 | if (typeof(options.easing) === 'string' && typeof(jQuery) !== 'undefined' && jQuery.isFunction(jQuery.easing[options.easing])) { 261 | options.easing = jQuery.easing[options.easing]; 262 | } else { 263 | options.easing = defaultOptions.easing; 264 | } 265 | 266 | // process earlier animate option to avoid bc breaks 267 | if (typeof(options.animate) === 'number') { 268 | options.animate = { 269 | duration: options.animate, 270 | enabled: true 271 | }; 272 | } 273 | 274 | if (typeof(options.animate) === 'boolean' && !options.animate) { 275 | options.animate = { 276 | duration: 1000, 277 | enabled: options.animate 278 | }; 279 | } 280 | 281 | // create renderer 282 | this.renderer = new options.renderer(el, options); 283 | 284 | // initial draw 285 | this.renderer.draw(currentValue); 286 | 287 | // initial update 288 | if (el.dataset && el.dataset.percent) { 289 | this.update(parseFloat(el.dataset.percent)); 290 | } else if (el.getAttribute && el.getAttribute('data-percent')) { 291 | this.update(parseFloat(el.getAttribute('data-percent'))); 292 | } 293 | }.bind(this); 294 | 295 | /** 296 | * Update the value of the chart 297 | * @param {number} newValue Number between 0 and 100 298 | * @return {object} Instance of the plugin for method chaining 299 | */ 300 | this.update = function(newValue) { 301 | newValue = parseFloat(newValue); 302 | if (options.animate.enabled) { 303 | this.renderer.animate(currentValue, newValue); 304 | } else { 305 | this.renderer.draw(newValue); 306 | } 307 | currentValue = newValue; 308 | return this; 309 | }.bind(this); 310 | 311 | /** 312 | * Disable animation 313 | * @return {object} Instance of the plugin for method chaining 314 | */ 315 | this.disableAnimation = function() { 316 | options.animate.enabled = false; 317 | return this; 318 | }; 319 | 320 | /** 321 | * Enable animation 322 | * @return {object} Instance of the plugin for method chaining 323 | */ 324 | this.enableAnimation = function() { 325 | options.animate.enabled = true; 326 | return this; 327 | }; 328 | 329 | init(); 330 | }; 331 | 332 | $.fn.easyPieChart = function(options) { 333 | return this.each(function() { 334 | var instanceOptions; 335 | 336 | if (!$.data(this, 'easyPieChart')) { 337 | instanceOptions = $.extend({}, options, $(this).data()); 338 | $.data(this, 'easyPieChart', new EasyPieChart(this, instanceOptions)); 339 | } 340 | }); 341 | }; 342 | 343 | 344 | })); 345 | -------------------------------------------------------------------------------- /css/normalize.css: -------------------------------------------------------------------------------- 1 | /* ============================================================================= 2 | HTML5 display definitions 3 | ========================================================================== */ 4 | 5 | /* 6 | * Corrects block display not defined in IE6/7/8/9 & FF3 7 | */ 8 | 9 | article, 10 | aside, 11 | details, 12 | figcaption, 13 | figure, 14 | footer, 15 | header, 16 | hgroup, 17 | nav, 18 | section, 19 | summary { 20 | display: block; 21 | } 22 | 23 | /* 24 | * Corrects inline-block display not defined in IE6/7/8/9 & FF3 25 | */ 26 | 27 | audio, 28 | canvas, 29 | video { 30 | display: inline-block; 31 | *display: inline; 32 | *zoom: 1; 33 | } 34 | 35 | /* 36 | * Prevents modern browsers from displaying 'audio' without controls 37 | * Remove excess height in iOS5 devices 38 | */ 39 | 40 | audio:not([controls]) { 41 | display: none; 42 | height: 0; 43 | } 44 | 45 | /* 46 | * Addresses styling for 'hidden' attribute not present in IE7/8/9, FF3, S4 47 | * Known issue: no IE6 support 48 | */ 49 | 50 | [hidden] { 51 | display: none; 52 | } 53 | 54 | 55 | /* ============================================================================= 56 | Base 57 | ========================================================================== */ 58 | 59 | /* 60 | * 1. Corrects text resizing oddly in IE6/7 when body font-size is set using em units 61 | * 2. Prevents iOS text size adjust after orientation change, without disabling user zoom 62 | */ 63 | 64 | html { 65 | font-size: 100%; /* 1 */ 66 | -webkit-text-size-adjust: 100%; /* 2 */ 67 | -ms-text-size-adjust: 100%; /* 2 */ 68 | } 69 | 70 | /* 71 | * Addresses font-family inconsistency between 'textarea' and other form elements. 72 | */ 73 | 74 | html, 75 | button, 76 | input, 77 | select, 78 | textarea { 79 | font-family: "Roboto",sans-serif; 80 | } 81 | 82 | /* 83 | * Addresses margins handled incorrectly in IE6/7 84 | */ 85 | 86 | body { 87 | margin: 0; 88 | } 89 | 90 | 91 | /* ============================================================================= 92 | Links 93 | ========================================================================== */ 94 | 95 | /* 96 | * Addresses outline displayed oddly in Chrome 97 | */ 98 | 99 | a:focus { 100 | outline: thin dotted; 101 | } 102 | 103 | /* 104 | * Improves readability when focused and also mouse hovered in all browsers 105 | */ 106 | 107 | a:hover, 108 | a:active { 109 | outline: 0; 110 | } 111 | 112 | 113 | /* ============================================================================= 114 | Typography 115 | ========================================================================== */ 116 | 117 | /* 118 | * Addresses font sizes and margins set differently in IE6/7 119 | * Addresses font sizes within 'section' and 'article' in FF4+, Chrome, S5 120 | */ 121 | 122 | h1 { 123 | font-size: 2em; 124 | margin: 0.67em 0; 125 | } 126 | 127 | h2 { 128 | font-size: 1.5em; 129 | } 130 | 131 | h3 { 132 | font-size: 1.17em; 133 | margin: 1em 0; 134 | } 135 | 136 | h4 { 137 | font-size: 1em; 138 | margin: 1.33em 0; 139 | } 140 | 141 | h5 { 142 | font-size: 0.83em; 143 | margin: 1.67em 0; 144 | } 145 | 146 | h6 { 147 | font-size: 0.75em; 148 | margin: 2.33em 0; 149 | } 150 | 151 | /* 152 | * Addresses styling not present in IE7/8/9, S5, Chrome 153 | */ 154 | 155 | abbr[title] { 156 | border-bottom: 1px dotted; 157 | } 158 | 159 | /* 160 | * Addresses style set to 'bolder' in FF3+, S4/5, Chrome 161 | */ 162 | 163 | b, 164 | strong { 165 | font-weight: bold; 166 | } 167 | 168 | blockquote { 169 | margin: 1em 40px; 170 | } 171 | 172 | /* 173 | * Addresses styling not present in S5, Chrome 174 | */ 175 | 176 | dfn { 177 | font-style: italic; 178 | } 179 | 180 | /* 181 | * Addresses styling not present in IE6/7/8/9 182 | */ 183 | 184 | mark { 185 | background: #ff0; 186 | color: #000; 187 | } 188 | 189 | /* 190 | * Addresses margins set differently in IE6/7 191 | */ 192 | 193 | p, 194 | pre { 195 | margin: 1em 0; 196 | } 197 | 198 | /* 199 | * Corrects font family set oddly in IE6, S4/5, Chrome 200 | */ 201 | 202 | pre, 203 | code, 204 | kbd, 205 | samp { 206 | font-family: monospace, serif; 207 | _font-family: 'courier new', monospace; 208 | font-size: 1em; 209 | } 210 | 211 | /* 212 | * Improves readability of pre-formatted text in all browsers 213 | */ 214 | 215 | pre { 216 | white-space: pre; 217 | white-space: pre-wrap; 218 | word-wrap: break-word; 219 | } 220 | 221 | /* 222 | * 1. Addresses CSS quotes not supported in IE6/7 223 | * 2. Addresses quote property not supported in S4 224 | */ 225 | 226 | /* 1 */ 227 | 228 | q { 229 | quotes: none; 230 | } 231 | 232 | /* 2 */ 233 | 234 | q:before, 235 | q:after { 236 | content: ''; 237 | content: none; 238 | } 239 | 240 | small { 241 | font-size: 75%; 242 | } 243 | 244 | /* 245 | * Prevents sub and sup affecting line-height in all browsers 246 | */ 247 | 248 | sub, 249 | sup { 250 | font-size: 75%; 251 | line-height: 0; 252 | position: relative; 253 | vertical-align: baseline; 254 | } 255 | 256 | sup { 257 | top: -0.5em; 258 | } 259 | 260 | sub { 261 | bottom: -0.25em; 262 | } 263 | 264 | 265 | /* ============================================================================= 266 | Lists 267 | ========================================================================== */ 268 | 269 | /* 270 | * Addresses margins set differently in IE6/7 271 | */ 272 | 273 | dl, 274 | menu, 275 | ol, 276 | ul { 277 | margin: 1em 0; 278 | } 279 | 280 | dd { 281 | margin: 0 0 0 40px; 282 | } 283 | 284 | /* 285 | * Addresses paddings set differently in IE6/7 286 | */ 287 | 288 | menu, 289 | ol, 290 | ul { 291 | padding: 0 0 0 40px; 292 | } 293 | 294 | /* 295 | * Corrects list images handled incorrectly in IE7 296 | */ 297 | 298 | nav ul, 299 | nav ol { 300 | list-style: none; 301 | list-style-image: none; 302 | } 303 | 304 | 305 | /* ============================================================================= 306 | Embedded content 307 | ========================================================================== */ 308 | 309 | /* 310 | * 1. Removes border when inside 'a' element in IE6/7/8/9, FF3 311 | * 2. Improves image quality when scaled in IE7 312 | */ 313 | 314 | img { 315 | border: 0; /* 1 */ 316 | -ms-interpolation-mode: bicubic; /* 2 */ 317 | } 318 | 319 | /* 320 | * Corrects overflow displayed oddly in IE9 321 | */ 322 | 323 | svg:not(:root) { 324 | overflow: hidden; 325 | } 326 | 327 | 328 | /* ============================================================================= 329 | Figures 330 | ========================================================================== */ 331 | 332 | /* 333 | * Addresses margin not present in IE6/7/8/9, S5, O11 334 | */ 335 | 336 | figure { 337 | margin: 0; 338 | } 339 | 340 | 341 | /* ============================================================================= 342 | Forms 343 | ========================================================================== */ 344 | 345 | /* 346 | * Corrects margin displayed oddly in IE6/7 347 | */ 348 | 349 | form { 350 | margin: 0; 351 | } 352 | 353 | /* 354 | * Define consistent border, margin, and padding 355 | */ 356 | 357 | fieldset { 358 | border: 1px solid #c0c0c0; 359 | margin: 0 2px; 360 | padding: 0.35em 0.625em 0.75em; 361 | } 362 | 363 | /* 364 | * 1. Corrects color not being inherited in IE6/7/8/9 365 | * 2. Corrects text not wrapping in FF3 366 | * 3. Corrects alignment displayed oddly in IE6/7 367 | */ 368 | 369 | legend { 370 | border: 0; /* 1 */ 371 | padding: 0; 372 | white-space: normal; /* 2 */ 373 | *margin-left: -7px; /* 3 */ 374 | } 375 | 376 | /* 377 | * 1. Corrects font size not being inherited in all browsers 378 | * 2. Addresses margins set differently in IE6/7, FF3+, S5, Chrome 379 | * 3. Improves appearance and consistency in all browsers 380 | */ 381 | 382 | button, 383 | input, 384 | select, 385 | textarea { 386 | font-size: 100%; /* 1 */ 387 | margin: 0; /* 2 */ 388 | vertical-align: baseline; /* 3 */ 389 | *vertical-align: middle; /* 3 */ 390 | } 391 | 392 | /* 393 | * Addresses FF3/4 setting line-height on 'input' using !important in the UA stylesheet 394 | */ 395 | 396 | button, 397 | input { 398 | line-height: normal; /* 1 */ 399 | } 400 | 401 | /* 402 | * 1. Improves usability and consistency of cursor style between image-type 'input' and others 403 | * 2. Corrects inability to style clickable 'input' types in iOS 404 | * 3. Removes inner spacing in IE7 without affecting normal text inputs 405 | * Known issue: inner spacing remains in IE6 406 | */ 407 | 408 | button, 409 | input[type="button"], 410 | input[type="reset"], 411 | input[type="submit"] { 412 | cursor: pointer; /* 1 */ 413 | -webkit-appearance: button; /* 2 */ 414 | *overflow: visible; /* 3 */ 415 | } 416 | 417 | /* 418 | * Re-set default cursor for disabled elements 419 | */ 420 | 421 | button[disabled], 422 | input[disabled] { 423 | cursor: default; 424 | } 425 | 426 | /* 427 | * 1. Addresses box sizing set to content-box in IE8/9 428 | * 2. Removes excess padding in IE8/9 429 | * 3. Removes excess padding in IE7 430 | Known issue: excess padding remains in IE6 431 | */ 432 | 433 | input[type="checkbox"], 434 | input[type="radio"] { 435 | box-sizing: border-box; /* 1 */ 436 | padding: 0; /* 2 */ 437 | *height: 13px; /* 3 */ 438 | *width: 13px; /* 3 */ 439 | } 440 | 441 | /* 442 | * 1. Addresses appearance set to searchfield in S5, Chrome 443 | * 2. Addresses box-sizing set to border-box in S5, Chrome (include -moz to future-proof) 444 | */ 445 | 446 | input[type="search"] { 447 | -webkit-appearance: textfield; /* 1 */ 448 | -moz-box-sizing: content-box; 449 | -webkit-box-sizing: content-box; /* 2 */ 450 | box-sizing: content-box; 451 | } 452 | 453 | /* 454 | * Removes inner padding and search cancel button in S5, Chrome on OS X 455 | */ 456 | 457 | input[type="search"]::-webkit-search-decoration, 458 | input[type="search"]::-webkit-search-cancel-button { 459 | -webkit-appearance: none; 460 | } 461 | 462 | /* 463 | * Removes inner padding and border in FF3+ 464 | */ 465 | 466 | button::-moz-focus-inner, 467 | input::-moz-focus-inner { 468 | border: 0; 469 | padding: 0; 470 | } 471 | 472 | /* 473 | * 1. Removes default vertical scrollbar in IE6/7/8/9 474 | * 2. Improves readability and alignment in all browsers 475 | */ 476 | 477 | textarea { 478 | overflow: auto; /* 1 */ 479 | vertical-align: top; /* 2 */ 480 | } 481 | 482 | 483 | /* ============================================================================= 484 | Tables 485 | ========================================================================== */ 486 | 487 | /* 488 | * Remove most spacing between table cells 489 | */ 490 | 491 | table { 492 | border-collapse: collapse; 493 | border-spacing: 0; 494 | } 495 | -------------------------------------------------------------------------------- /js/grid_gallery.js: -------------------------------------------------------------------------------- 1 | ;( function( window ) { 2 | 3 | "use strict"; 4 | 5 | var docElem = window.document.documentElement, 6 | transEndEventNames = { 7 | 'WebkitTransition': 'webkitTransitionEnd', 8 | 'MozTransition': 'transitionend', 9 | 'OTransition': 'oTransitionEnd', 10 | 'msTransition': 'MSTransitionEnd', 11 | 'transition': 'transitionend' 12 | }, 13 | transEndEventName = transEndEventNames[ Modernizr.prefixed( 'transition' ) ], 14 | support = { 15 | transitions : Modernizr.csstransitions, 16 | support3d : Modernizr.csstransforms3d 17 | }; 18 | 19 | function setTransform( el, transformStr ) { 20 | el.style.WebkitTransform = transformStr; 21 | el.style.msTransform = transformStr; 22 | el.style.transform = transformStr; 23 | } 24 | 25 | 26 | function getViewportW() { 27 | var client = docElem['clientWidth'], 28 | inner = window['innerWidth']; 29 | 30 | if( client < inner ) 31 | return inner; 32 | else 33 | return client; 34 | } 35 | 36 | function extend( a, b ) { 37 | for( var key in b ) { 38 | if( b.hasOwnProperty( key ) ) { 39 | a[key] = b[key]; 40 | } 41 | } 42 | return a; 43 | } 44 | 45 | function CBPGridGallery( el, options ) { 46 | this.el = el; 47 | this.options = extend( {}, this.options ); 48 | extend( this.options, options ); 49 | this._init(); 50 | } 51 | 52 | CBPGridGallery.prototype.options = { 53 | }; 54 | 55 | CBPGridGallery.prototype._init = function() { 56 | // main grid 57 | this.grid = this.el.querySelector( 'section.grid-wrap > ul.grid' ); 58 | // main grid items 59 | this.gridItems = [].slice.call( this.grid.querySelectorAll( 'li:not(.grid-sizer)' ) ); 60 | // items total 61 | this.itemsCount = this.gridItems.length; 62 | // slideshow grid 63 | this.slideshow = this.el.querySelector( 'section.slideshow > ul' ); 64 | // slideshow grid items 65 | this.slideshowItems = [].slice.call( this.slideshow.children ); 66 | // index of current slideshow item 67 | this.current = -1; 68 | // slideshow control buttons 69 | this.ctrlPrev = this.el.querySelector( 'section.slideshow > nav > span.nav-prev' ); 70 | this.ctrlNext = this.el.querySelector( 'section.slideshow > nav > span.nav-next' ); 71 | this.ctrlClose = this.el.querySelector( 'section.slideshow > nav > span.nav-close' ); 72 | // init masonry grid 73 | this._initMasonry(); 74 | // init events 75 | this._initEvents(); 76 | }; 77 | 78 | CBPGridGallery.prototype._initMasonry = function() { 79 | var grid = this.grid; 80 | imagesLoaded( grid, function() { 81 | new Masonry( grid, { 82 | itemSelector: 'li', 83 | columnWidth: grid.querySelector( '.grid-sizer' ) 84 | }); 85 | }); 86 | }; 87 | 88 | CBPGridGallery.prototype._initEvents = function() { 89 | var self = this; 90 | 91 | // open the slideshow when clicking on the main grid items 92 | this.gridItems.forEach( function( item, idx ) { 93 | item.addEventListener( 'click', function() { 94 | self._openSlideshow( idx ); 95 | } ); 96 | } ); 97 | 98 | // slideshow controls 99 | this.ctrlPrev.addEventListener( 'click', function() { self._navigate( 'prev' ); } ); 100 | this.ctrlNext.addEventListener( 'click', function() { self._navigate( 'next' ); } ); 101 | this.ctrlClose.addEventListener( 'click', function() { self._closeSlideshow(); } ); 102 | 103 | // window resize 104 | window.addEventListener( 'resize', function() { self._resizeHandler(); } ); 105 | 106 | // keyboard navigation events 107 | document.addEventListener( 'keydown', function( ev ) { 108 | if ( self.isSlideshowVisible ) { 109 | var keyCode = ev.keyCode || ev.which; 110 | 111 | switch (keyCode) { 112 | case 37: 113 | self._navigate( 'prev' ); 114 | break; 115 | case 39: 116 | self._navigate( 'next' ); 117 | break; 118 | case 27: 119 | self._closeSlideshow(); 120 | break; 121 | } 122 | } 123 | } ); 124 | 125 | // trick to prevent scrolling when slideshow is visible 126 | window.addEventListener( 'scroll', function() { 127 | if ( self.isSlideshowVisible ) { 128 | window.scrollTo( self.scrollPosition ? self.scrollPosition.x : 0, self.scrollPosition ? self.scrollPosition.y : 0 ); 129 | } 130 | else { 131 | self.scrollPosition = { x : window.pageXOffset || docElem.scrollLeft, y : window.pageYOffset || docElem.scrollTop }; 132 | } 133 | }); 134 | }; 135 | 136 | CBPGridGallery.prototype._openSlideshow = function( pos ) { 137 | this.isSlideshowVisible = true; 138 | this.current = pos; 139 | 140 | classie.addClass( this.el, 'slideshow-open' ); 141 | 142 | /* position slideshow items */ 143 | 144 | // set viewport items (current, next and previous) 145 | this._setViewportItems(); 146 | 147 | // add class "current" and "show" to currentItem 148 | classie.addClass( this.currentItem, 'current' ); 149 | classie.addClass( this.currentItem, 'show' ); 150 | 151 | // add class show to next and previous items 152 | // position previous item on the left side and the next item on the right side 153 | if( this.prevItem ) { 154 | classie.addClass( this.prevItem, 'show' ); 155 | var translateVal = Number( -1 * ( getViewportW() / 2 + this.prevItem.offsetWidth / 2 ) ); 156 | setTransform( this.prevItem, support.support3d ? 'translate3d(' + translateVal + 'px, 0, -150px)' : 'translate(' + translateVal + 'px)' ); 157 | } 158 | if( this.nextItem ) { 159 | classie.addClass( this.nextItem, 'show' ); 160 | var translateVal = Number( getViewportW() / 2 + this.nextItem.offsetWidth / 2 ); 161 | setTransform( this.nextItem, support.support3d ? 'translate3d(' + translateVal + 'px, 0, -150px)' : 'translate(' + translateVal + 'px)' ); 162 | } 163 | }; 164 | 165 | CBPGridGallery.prototype._navigate = function( dir ) { 166 | if( this.isAnimating ) return; 167 | if( dir === 'next' && this.current === this.itemsCount - 1 || dir === 'prev' && this.current === 0 ) { 168 | this._closeSlideshow(); 169 | return; 170 | } 171 | 172 | this.isAnimating = true; 173 | 174 | // reset viewport items 175 | this._setViewportItems(); 176 | 177 | var self = this, 178 | itemWidth = this.currentItem.offsetWidth, 179 | // positions for the centered/current item, both the side items and the incoming ones 180 | transformLeftStr = support.support3d ? 'translate3d(-' + Number( getViewportW() / 2 + itemWidth / 2 ) + 'px, 0, -150px)' : 'translate(-' + Number( getViewportW() / 2 + itemWidth / 2 ) + 'px)', 181 | transformRightStr = support.support3d ? 'translate3d(' + Number( getViewportW() / 2 + itemWidth / 2 ) + 'px, 0, -150px)' : 'translate(' + Number( getViewportW() / 2 + itemWidth / 2 ) + 'px)', 182 | transformCenterStr = '', transformOutStr, transformIncomingStr, 183 | // incoming item 184 | incomingItem; 185 | 186 | if( dir === 'next' ) { 187 | transformOutStr = support.support3d ? 'translate3d( -' + Number( (getViewportW() * 2) / 2 + itemWidth / 2 ) + 'px, 0, -150px )' : 'translate(-' + Number( (getViewportW() * 2) / 2 + itemWidth / 2 ) + 'px)'; 188 | transformIncomingStr = support.support3d ? 'translate3d( ' + Number( (getViewportW() * 2) / 2 + itemWidth / 2 ) + 'px, 0, -150px )' : 'translate(' + Number( (getViewportW() * 2) / 2 + itemWidth / 2 ) + 'px)'; 189 | } 190 | else { 191 | transformOutStr = support.support3d ? 'translate3d( ' + Number( (getViewportW() * 2) / 2 + itemWidth / 2 ) + 'px, 0, -150px )' : 'translate(' + Number( (getViewportW() * 2) / 2 + itemWidth / 2 ) + 'px)'; 192 | transformIncomingStr = support.support3d ? 'translate3d( -' + Number( (getViewportW() * 2) / 2 + itemWidth / 2 ) + 'px, 0, -150px )' : 'translate(-' + Number( (getViewportW() * 2) / 2 + itemWidth / 2 ) + 'px)'; 193 | } 194 | 195 | // remove class animatable from the slideshow grid (if it has already) 196 | classie.removeClass( self.slideshow, 'animatable' ); 197 | 198 | if( dir === 'next' && this.current < this.itemsCount - 2 || dir === 'prev' && this.current > 1 ) { 199 | // we have an incoming item! 200 | incomingItem = this.slideshowItems[ dir === 'next' ? this.current + 2 : this.current - 2 ]; 201 | setTransform( incomingItem, transformIncomingStr ); 202 | classie.addClass( incomingItem, 'show' ); 203 | } 204 | 205 | var slide = function() { 206 | // add class animatable to the slideshow grid 207 | classie.addClass( self.slideshow, 'animatable' ); 208 | 209 | // overlays: 210 | classie.removeClass( self.currentItem, 'current' ); 211 | var nextCurrent = dir === 'next' ? self.nextItem : self.prevItem; 212 | classie.addClass( nextCurrent, 'current' ); 213 | 214 | setTransform( self.currentItem, dir === 'next' ? transformLeftStr : transformRightStr ); 215 | 216 | if( self.nextItem ) { 217 | setTransform( self.nextItem, dir === 'next' ? transformCenterStr : transformOutStr ); 218 | } 219 | 220 | if( self.prevItem ) { 221 | setTransform( self.prevItem, dir === 'next' ? transformOutStr : transformCenterStr ); 222 | } 223 | 224 | if( incomingItem ) { 225 | setTransform( incomingItem, dir === 'next' ? transformRightStr : transformLeftStr ); 226 | } 227 | 228 | var onEndTransitionFn = function( ev ) { 229 | if( support.transitions ) { 230 | if( ev.propertyName.indexOf( 'transform' ) === -1 ) return false; 231 | this.removeEventListener( transEndEventName, onEndTransitionFn ); 232 | } 233 | 234 | if( self.prevItem && dir === 'next' ) { 235 | classie.removeClass( self.prevItem, 'show' ); 236 | } 237 | else if( self.nextItem && dir === 'prev' ) { 238 | classie.removeClass( self.nextItem, 'show' ); 239 | } 240 | 241 | if( dir === 'next' ) { 242 | self.prevItem = self.currentItem; 243 | self.currentItem = self.nextItem; 244 | if( incomingItem ) { 245 | self.nextItem = incomingItem; 246 | } 247 | } 248 | else { 249 | self.nextItem = self.currentItem; 250 | self.currentItem = self.prevItem; 251 | if( incomingItem ) { 252 | self.prevItem = incomingItem; 253 | } 254 | } 255 | 256 | self.current = dir === 'next' ? self.current + 1 : self.current - 1; 257 | self.isAnimating = false; 258 | }; 259 | 260 | if( support.transitions ) { 261 | self.currentItem.addEventListener( transEndEventName, onEndTransitionFn ); 262 | } 263 | else { 264 | onEndTransitionFn(); 265 | } 266 | }; 267 | 268 | setTimeout( slide, 25 ); 269 | } 270 | 271 | CBPGridGallery.prototype._closeSlideshow = function( pos ) { 272 | 273 | // remove class slideshow-open from the grid gallery elem 274 | classie.removeClass( this.el, 'slideshow-open' ); 275 | // remove class animatable from the slideshow grid 276 | classie.removeClass( this.slideshow, 'animatable' ); 277 | 278 | var self = this, 279 | onEndTransitionFn = function( ev ) { 280 | if( support.transitions ) { 281 | if( ev.target.tagName.toLowerCase() !== 'ul' ) return; 282 | this.removeEventListener( transEndEventName, onEndTransitionFn ); 283 | } 284 | // remove classes show and current from the slideshow items 285 | classie.removeClass( self.currentItem, 'current' ); 286 | classie.removeClass( self.currentItem, 'show' ); 287 | 288 | if( self.prevItem ) { 289 | classie.removeClass( self.prevItem, 'show' ); 290 | } 291 | if( self.nextItem ) { 292 | classie.removeClass( self.nextItem, 'show' ); 293 | } 294 | 295 | // also reset any transforms for all the items 296 | self.slideshowItems.forEach( function( item ) { setTransform( item, '' ); } ); 297 | 298 | self.isSlideshowVisible = false; 299 | }; 300 | 301 | if( support.transitions ) { 302 | this.el.addEventListener( transEndEventName, onEndTransitionFn ); 303 | } 304 | else { 305 | onEndTransitionFn(); 306 | } 307 | 308 | 309 | }; 310 | 311 | CBPGridGallery.prototype._setViewportItems = function() { 312 | this.currentItem = null; 313 | this.prevItem = null; 314 | this.nextItem = null; 315 | 316 | if( this.current > 0 ) { 317 | this.prevItem = this.slideshowItems[ this.current - 1 ]; 318 | } 319 | if( this.current < this.itemsCount - 1 ) { 320 | this.nextItem = this.slideshowItems[ this.current + 1 ]; 321 | } 322 | this.currentItem = this.slideshowItems[ this.current ]; 323 | } 324 | 325 | 326 | CBPGridGallery.prototype._resizeHandler = function() { 327 | var self = this; 328 | function delayed() { 329 | self._resize(); 330 | self._resizeTimeout = null; 331 | } 332 | if ( this._resizeTimeout ) { 333 | clearTimeout( this._resizeTimeout ); 334 | } 335 | this._resizeTimeout = setTimeout( delayed, 50 ); 336 | } 337 | 338 | CBPGridGallery.prototype._resize = function() { 339 | if ( this.isSlideshowVisible ) { 340 | // update width value 341 | if( this.prevItem ) { 342 | var translateVal = Number( -1 * ( getViewportW() / 2 + this.prevItem.offsetWidth / 2 ) ); 343 | setTransform( this.prevItem, support.support3d ? 'translate3d(' + translateVal + 'px, 0, -150px)' : 'translate(' + translateVal + 'px)' ); 344 | } 345 | if( this.nextItem ) { 346 | var translateVal = Number( getViewportW() / 2 + this.nextItem.offsetWidth / 2 ); 347 | setTransform( this.nextItem, support.support3d ? 'translate3d(' + translateVal + 'px, 0, -150px)' : 'translate(' + translateVal + 'px)' ); 348 | } 349 | } 350 | } 351 | 352 | // add to global namespace 353 | window.CBPGridGallery = CBPGridGallery; 354 | 355 | })( window ); -------------------------------------------------------------------------------- /css/responsive.css: -------------------------------------------------------------------------------- 1 | /* Media Queries */ 2 | @media screen and (max-width: 1700px) { 3 | .blog-list iframe, 4 | embed, 5 | object { 6 | height: 94% !important; 7 | min-height: auto; 8 | } 9 | .recent-comments .col-3 { 10 | width: 100%; 11 | margin-top: 20px; 12 | } 13 | .recent-comments textarea { 14 | width: 94%; 15 | } 16 | } 17 | @media screen and (max-width: 1200px) { 18 | .blog-main { 19 | margin: 0 30px 0 240px; 20 | } 21 | .blog-right { 22 | width: 23%; 23 | } 24 | .blog-left { 25 | width: 75%; 26 | } 27 | .blog-list .contact-social a i { 28 | margin: 0 6px; 29 | } 30 | .blog-list .contact-social a:first-child i { 31 | margin: 0 6px 0 0; 32 | } 33 | .blog-left .row .blog-list { 34 | width: 47%; 35 | } 36 | .no-page { 37 | margin: 0 0 0 240px; 38 | } 39 | } 40 | @media screen and (max-width: 1024px) { 41 | .jspVerticalBar { 42 | opacity: 1; 43 | } 44 | .menu nav { 45 | top: 180px; 46 | } 47 | .social { 48 | top: 535px; 49 | } 50 | .copyright { 51 | padding: 20px 30px; 52 | } 53 | .inner { 54 | padding: 50px; 55 | } 56 | .content { 57 | width: 700px; 58 | } 59 | .slideshow figure { 60 | width: 80%; 61 | height: 80%; 62 | margin: 0 10%; 63 | } 64 | .slideshow nav span.nav-prev, 65 | .slideshow nav span.nav-next { 66 | top: 60%; 67 | } 68 | span.nav-prev { 69 | display: none; 70 | } 71 | span.nav-next { 72 | display: none; 73 | } 74 | .slideshow li { 75 | display: none; 76 | } 77 | .slideshow li.current { 78 | display: block; 79 | } 80 | .owl-pagination { 81 | bottom: 20% !important; 82 | } 83 | .contact-form { 84 | padding-bottom: 200px; 85 | } 86 | .menu nav a { 87 | padding: 11px 0; 88 | } 89 | .pagerblock { 90 | margin: 0 0 0 20%; 91 | } 92 | .blog-left { 93 | width: 70%; 94 | } 95 | .comments-name, 96 | .comments-text { 97 | width: 100%; 98 | } 99 | .comments-text { 100 | margin-top: 3%; 101 | } 102 | } 103 | @media screen and (max-width: 960px) { 104 | .blog-left .row .blog-list { 105 | margin: 0 4.6% 35px 0; 106 | width: 45%; 107 | min-height: 610px; 108 | } 109 | .blog-right { 110 | width: 27%; 111 | } 112 | .blog-left { 113 | width: 70%; 114 | } 115 | .no-page-text { 116 | margin: 2% 0 0 353px; 117 | } 118 | } 119 | @media screen and (max-width: 900px) { 120 | .blog-right { 121 | width: 32%; 122 | } 123 | .blog-left { 124 | width: 68%; 125 | } 126 | .blog-list-details h3 { 127 | font-size: 16px; 128 | line-height: 22px; 129 | } 130 | .no-page-text { 131 | margin: 2% 0 0 386px; 132 | } 133 | } 134 | @media screen and (max-width: 800px) { 135 | .blog-left .row .blog-list { 136 | min-height: 630px; 137 | } 138 | .blog-right { 139 | width: 32%; 140 | } 141 | .blog-left { 142 | width: 61%; 143 | } 144 | .content-left { 145 | width: 100%; 146 | margin-right: 0; 147 | } 148 | .content-right { 149 | margin-left: 0; 150 | width: 100%; 151 | } 152 | .blog-left .row .blog-list { 153 | margin-right: 0; 154 | width: 47%; 155 | } 156 | .blog-left .row .blog-list:nth-child(2n) { 157 | float: right; 158 | } 159 | } 160 | 161 | @media screen and (max-width: 768px) { 162 | body { 163 | overflow-x: auto; 164 | overflow-y: auto; 165 | } 166 | .codrops-top a { 167 | background: #000; 168 | color: #fff; 169 | text-shadow: none; 170 | } 171 | nav .jspPane { 172 | width: 100% !important; 173 | } 174 | h2 { 175 | font-size: 40px; 176 | } 177 | .codrops-top a:nth-child(1) { 178 | left: 10px; 179 | } 180 | .menu { 181 | position: fixed; 182 | width: 100%; 183 | height: 460px; 184 | } 185 | .menu nav { 186 | top: 50px; 187 | bottom: 20px; 188 | } 189 | .content-scroller { 190 | position: relative; 191 | height: auto; 192 | left: 0; 193 | overflow: visible; 194 | } 195 | .content-wrapper { 196 | height: auto; 197 | width: auto; 198 | margin-left: 0px; 199 | } 200 | .content { 201 | border: none; 202 | width: 768px; 203 | float: none; 204 | overflow-y: auto; 205 | } 206 | 207 | .content:last-child { 208 | display: none; 209 | } 210 | .logo { 211 | margin: 0; 212 | } 213 | .logo span { 214 | color: #fff; 215 | display: block; 216 | font-family: 'Oswald', sans-serif; 217 | font-size: 20px; 218 | font-weight: 400; 219 | text-transform: uppercase; 220 | float: left; 221 | width: 80%; 222 | text-align: left; 223 | padding: 13px 0 13px 15px; 224 | } 225 | .logo img { 226 | display: none; 227 | } 228 | .menu-link { 229 | display: block; 230 | float: right; 231 | padding: 14px 15px 0 0; 232 | width: 25px; 233 | height: 25px; 234 | font-size: 23px; 235 | color: #fff; 236 | } 237 | .menu-link:hover { 238 | color: #999; 239 | } 240 | .menu-link:before { 241 | content: '\f039'; 242 | font-family: 'FontAwesome'; 243 | } 244 | .menu nav a { 245 | margin: 0 17px; 246 | } 247 | .menu nav a:last-child { 248 | border-bottom: none; 249 | } 250 | .menu nav { 251 | display: none; 252 | } 253 | nav.active { 254 | display: block; 255 | overflow: visible !important; 256 | width: 100% !important; 257 | background-color: #000; 258 | height: 400px; 259 | } 260 | nav.active .jspContainer { 261 | background-color: #000; 262 | height: 380px !important; 263 | width: 100% !important; 264 | } 265 | .menu { 266 | height: 50px; 267 | } 268 | .copyright { 269 | display: none; 270 | } 271 | .social { 272 | display: none; 273 | } 274 | .grid li { 275 | width: 100%; 276 | } 277 | .inner { 278 | padding: 130px 40px 60px; 279 | } 280 | .introduction .jspContainer { 281 | height: 600px !important; 282 | } 283 | .introduction .inner { 284 | margin: 38% 0 0 0; 285 | } 286 | 287 | .experience-details .col-3, 288 | .education-con .col-3 { 289 | width: 30%; 290 | } 291 | .slideshow figure { 292 | width: auto; 293 | height: auto; 294 | } 295 | .slideshow figcaption h3 { 296 | line-height: 30px; 297 | } 298 | .slideshow .nav-prev, 299 | .slideshow .nav-next { 300 | display: none; 301 | } 302 | .slideshow li:after { 303 | position: relative; 304 | } 305 | .owl-pagination { 306 | bottom: 0 !important; 307 | } 308 | .grid-gallery { 309 | height: auto; 310 | } 311 | .introduction .owl-theme .owl-controls { 312 | margin-top: 0; 313 | text-align: center; 314 | position: absolute; 315 | width: 100%; 316 | bottom: 40px; 317 | } 318 | a.totop-link { 319 | display: block; 320 | } 321 | .blog-main { 322 | margin: 50px 40px; 323 | padding: 32px 0; 324 | } 325 | .pagerblock { 326 | margin: 0; 327 | } 328 | .blog-details-title h2 { 329 | line-height: 26px; 330 | } 331 | .blog-left { 332 | width: 60%; 333 | } 334 | .content-left, 335 | .content-right { 336 | width: 100%; 337 | } 338 | .content-right { 339 | margin-left: 0; 340 | } 341 | .comments-name { 342 | width: 100%; 343 | } 344 | .button { 345 | font-size: 12px; 346 | width: auto; 347 | display: block; 348 | text-align: center; 349 | float: left; 350 | } 351 | .comments-text { 352 | width: 100%; 353 | margin-top: 3%; 354 | } 355 | .blog-listing { 356 | width: 67%; 357 | } 358 | .no-page { 359 | margin: 40px 0 0 0; 360 | } 361 | .slideshow li { 362 | margin-left: -350px; 363 | } 364 | .blog-left .row .blog-list { 365 | min-height: 630px; 366 | } 367 | } 368 | @media screen and (max-width: 767px) { 369 | .content-wrapper { 370 | height: auto; 371 | margin-left: 0; 372 | width: 100%; 373 | } 374 | .introduction .owl-pagination { 375 | bottom: 15px; 376 | } 377 | .introduction .owl-theme .owl-controls { 378 | margin-top: 0; 379 | } 380 | .content { 381 | width: auto; 382 | } 383 | .introduction img { 384 | height: auto; 385 | } 386 | .contact-form { 387 | padding-bottom: 0; 388 | } 389 | .comments-sub { 390 | padding-left: 0; 391 | } 392 | } 393 | 394 | @media screen and (max-width: 675px) { 395 | .inner { 396 | padding: 130px 30px 40px 30px; 397 | } 398 | .introduction .inner { 399 | background: url(../images/black-transparent.png) repeat; 400 | } 401 | .introduction h2 { 402 | font-size: 35px; 403 | line-height: 40px; 404 | margin-bottom: 16px; 405 | } 406 | .introduction span.title { 407 | display: block; 408 | font-size: 11px; 409 | color: #fff; 410 | padding: 10px 0; 411 | border-bottom: 1px solid #fff; 412 | border-top: 1px solid #fff; 413 | } 414 | .button { 415 | width: auto; 416 | float: left; 417 | } 418 | .about { 419 | background: none; 420 | } 421 | .about .inner { 422 | width: auto; 423 | } 424 | .jspPane { 425 | width: 100% !important; 426 | } 427 | .col-6, 428 | .col-4 { 429 | width: 100%; 430 | } 431 | .figcaption-details img { 432 | height: 25px !important; 433 | width: 25px !important; 434 | margin: 0; 435 | } 436 | .grid li { 437 | margin: 0 0 40px 0; 438 | } 439 | .grid-gallery .figcaption-details h3 { 440 | font-size: 15px; 441 | padding: 15px 0 0; 442 | } 443 | .grid-gallery .figcaption-details span { 444 | } 445 | .skills-con .col-6 { 446 | text-align: center; 447 | } 448 | .skills-con h4 { 449 | width: 100%; 450 | margin: 0; 451 | } 452 | .chart-text p { 453 | margin: 0; 454 | } 455 | .skills-con .margin-top50 .row > div:nth-child(3) { 456 | margin-bottom: 50px; 457 | } 458 | .experience-details .col-3, 459 | .education-con .col-3 { 460 | width: 100%; 461 | } 462 | .flot-left { 463 | width: 100%; 464 | margin: 10px 0 0 0; 465 | } 466 | .contact-details .col-2 { 467 | width: 15%; 468 | } 469 | .email { 470 | margin-bottom: 0; 471 | } 472 | .contact-form input[type='text'], 473 | textarea { 474 | width: 92%; 475 | } 476 | .m-margin-top30 { 477 | margin-top: 30px; 478 | } 479 | .contact-social a i { 480 | margin: 0 10px; 481 | } 482 | .contact-social a:first-child i { 483 | margin: 0 10px 0 0; 484 | } 485 | .margin-top50 { 486 | margin-top: 35px; 487 | } 488 | .margin-bottom50 { 489 | margin-bottom: 35px; 490 | } 491 | .no-margin-top { 492 | margin-top: 0 !important; 493 | } 494 | .progress-value span { 495 | display: none; 496 | } 497 | .progress { 498 | width: 100%; 499 | } 500 | .progress-bar-description { 501 | margin: 0; 502 | } 503 | } 504 | @media screen and (max-width: 620px) { 505 | h2 { 506 | font-size: 30px; 507 | line-height: 30px; 508 | } 509 | .title-divider { 510 | margin: 20px 0 30px 0; 511 | } 512 | .slideshow figure { 513 | border: 20px solid #3f3f3f; 514 | border-top: 10px solid #3f3f3f; 515 | } 516 | .slideshow figure { 517 | width: 50%; 518 | } 519 | .slideshow li { 520 | left: 50%; 521 | top: 0; 522 | margin: 20px 0 0 -265px; 523 | } 524 | .owl-pagination { 525 | bottom: 0 !important; 526 | } 527 | .contact-form input[type='text'], 528 | textarea { 529 | width: 88%; 530 | } 531 | .introduction .owl-theme .owl-controls { 532 | bottom: 30px; 533 | z-index: 11; 534 | } 535 | .blog-left { 536 | width: 100%; 537 | margin-bottom: 30px; 538 | } 539 | .blog-left .row .blog-list { 540 | margin: 0 0 35px 0; 541 | width: 100%; 542 | min-height: inherit; 543 | } 544 | .blog-right { 545 | width: 100%; 546 | } 547 | .pagerblock li a { 548 | font-size: 14px; 549 | height: 20px; 550 | line-height: 20px; 551 | width: 20px; 552 | } 553 | .pagerblock li a i { 554 | line-height: 22px; 555 | } 556 | .pagerblock li { 557 | float: left; 558 | margin: 0 6px; 559 | } 560 | .pagerblock { 561 | margin: 0 0 0 0; 562 | } 563 | .pagination { 564 | padding: 15px 0 10px; 565 | } 566 | .sidebar-block { 567 | margin: 0 0 30px 0; 568 | } 569 | .blog-list-details .title-divider { 570 | margin: 20px 0; 571 | } 572 | .post-details { 573 | margin: 10px 0 0 0; 574 | } 575 | .margin-top30 { 576 | margin-top: 20px; 577 | } 578 | .no-page-text { 579 | margin: 2% 0 0 35px; 580 | } 581 | } 582 | @media screen and (max-width: 420px) { 583 | .slideshow figure { 584 | width: 36%; 585 | } 586 | .slideshow li { 587 | margin: 20px 0 0 -216px; 588 | } 589 | .slideshow nav span { 590 | font-size: 1.6em; 591 | } 592 | .slideshow nav span.nav-close { 593 | padding: 0.4em 0.5em; 594 | } 595 | .slideshow figcaption h3 { 596 | font-size: 130%; 597 | padding: 0 0 0px; 598 | } 599 | .grid-gallery { 600 | height: auto; 601 | } 602 | .comments-name .pull-left { 603 | float: left; 604 | text-align: center; 605 | width: 100%; 606 | display: block; 607 | } 608 | .media-object { 609 | margin: 0; 610 | width: 150px; 611 | height: 150px; 612 | display: inline-block; 613 | } 614 | .comments-details .name, 615 | .comments-details .date { 616 | text-align: center; 617 | } 618 | .comments-name .button { 619 | width: 87%; 620 | } 621 | .recent-comments input[type='text'] { 622 | width: 94%; 623 | margin-bottom: 20px; 624 | } 625 | .blog-details-title .breadcrumbs { 626 | display: none; 627 | } 628 | .no-page-text { 629 | margin: 10%; 630 | } 631 | } 632 | @media screen and (max-width: 360px) { 633 | .introduction .inner { 634 | margin: 0 0 0 0; 635 | padding-top: 130px !important; 636 | width: 86%; 637 | } 638 | } 639 | -------------------------------------------------------------------------------- /js/jquery.jscrollpane.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * jScrollPane - v2.0.0b 3 | */ 4 | (function(b,a,c){b.fn.jScrollPane=function(e){function d(D,O){var az,Q=this,Y,ak,v,am,T,Z,y,q,aA,aF,av,i,I,h,j,aa,U,aq,X,t,A,ar,af,an,G,l,au,ay,x,aw,aI,f,L,aj=true,P=true,aH=false,k=false,ap=D.clone(false,false).empty(),ac=b.fn.mwheelIntent?"mwheelIntent.jsp":"mousewheel.jsp";aI=D.css("paddingTop")+" "+D.css("paddingRight")+" "+D.css("paddingBottom")+" "+D.css("paddingLeft");f=(parseInt(D.css("paddingLeft"),10)||0)+(parseInt(D.css("paddingRight"),10)||0);function at(aR){var aM,aO,aN,aK,aJ,aQ,aP=false,aL=false;az=aR;if(Y===c){aJ=D.scrollTop();aQ=D.scrollLeft();D.css({overflow:"hidden",padding:0});ak=D.innerWidth()+f;v=D.innerHeight();D.width(ak);Y=b('
').css("padding",aI).append(D.children());am=b('
').css({width:ak+"px",height:v+"px"}).append(Y).appendTo(D)}else{D.css("width","");aP=az.stickToBottom&&K();aL=az.stickToRight&&B();aK=D.innerWidth()+f!=ak||D.outerHeight()!=v;if(aK){ak=D.innerWidth()+f;v=D.innerHeight();am.css({width:ak+"px",height:v+"px"})}if(!aK&&L==T&&Y.outerHeight()==Z){D.width(ak);return}L=T;Y.css("width","");D.width(ak);am.find(">.jspVerticalBar,>.jspHorizontalBar").remove().end()}Y.css("overflow","auto");if(aR.contentWidth){T=aR.contentWidth}else{T=Y[0].scrollWidth}Z=Y[0].scrollHeight;Y.css("overflow","");y=T/ak;q=Z/v;aA=q>1;aF=y>1;if(!(aF||aA)){D.removeClass("jspScrollable");Y.css({top:0,width:am.width()-f});n();E();R();w();ai()}else{D.addClass("jspScrollable");aM=az.maintainPosition&&(I||aa);if(aM){aO=aD();aN=aB()}aG();z();F();if(aM){N(aL?(T-ak):aO,false);M(aP?(Z-v):aN,false)}J();ag();ao();if(az.enableKeyboardNavigation){S()}if(az.clickOnTrack){p()}C();if(az.hijackInternalLinks){m()}}if(az.autoReinitialise&&!aw){aw=setInterval(function(){at(az)},az.autoReinitialiseDelay)}else{if(!az.autoReinitialise&&aw){clearInterval(aw)}}aJ&&D.scrollTop(0)&&M(aJ,false);aQ&&D.scrollLeft(0)&&N(aQ,false);D.trigger("jsp-initialised",[aF||aA])}function aG(){if(aA){am.append(b('
').append(b('
'),b('
').append(b('
').append(b('
'),b('
'))),b('
')));U=am.find(">.jspVerticalBar");aq=U.find(">.jspTrack");av=aq.find(">.jspDrag");if(az.showArrows){ar=b('').bind("mousedown.jsp",aE(0,-1)).bind("click.jsp",aC);af=b('').bind("mousedown.jsp",aE(0,1)).bind("click.jsp",aC);if(az.arrowScrollOnHover){ar.bind("mouseover.jsp",aE(0,-1,ar));af.bind("mouseover.jsp",aE(0,1,af))}al(aq,az.verticalArrowPositions,ar,af)}t=v;am.find(">.jspVerticalBar>.jspCap:visible,>.jspVerticalBar>.jspArrow").each(function(){t-=b(this).outerHeight()});av.hover(function(){av.addClass("jspHover")},function(){av.removeClass("jspHover")}).bind("mousedown.jsp",function(aJ){b("html").bind("dragstart.jsp selectstart.jsp",aC);av.addClass("jspActive");var s=aJ.pageY-av.position().top;b("html").bind("mousemove.jsp",function(aK){V(aK.pageY-s,false)}).bind("mouseup.jsp mouseleave.jsp",ax);return false});o()}}function o(){aq.height(t+"px");I=0;X=az.verticalGutter+aq.outerWidth();Y.width(ak-X-f);try{if(U.position().left===0){Y.css("margin-left",X+"px")}}catch(s){}}function z(){if(aF){am.append(b('
').append(b('
'),b('
').append(b('
').append(b('
'),b('
'))),b('
')));an=am.find(">.jspHorizontalBar");G=an.find(">.jspTrack");h=G.find(">.jspDrag");if(az.showArrows){ay=b('').bind("mousedown.jsp",aE(-1,0)).bind("click.jsp",aC);x=b('').bind("mousedown.jsp",aE(1,0)).bind("click.jsp",aC); 5 | if(az.arrowScrollOnHover){ay.bind("mouseover.jsp",aE(-1,0,ay));x.bind("mouseover.jsp",aE(1,0,x))}al(G,az.horizontalArrowPositions,ay,x)}h.hover(function(){h.addClass("jspHover")},function(){h.removeClass("jspHover")}).bind("mousedown.jsp",function(aJ){b("html").bind("dragstart.jsp selectstart.jsp",aC);h.addClass("jspActive");var s=aJ.pageX-h.position().left;b("html").bind("mousemove.jsp",function(aK){W(aK.pageX-s,false)}).bind("mouseup.jsp mouseleave.jsp",ax);return false});l=am.innerWidth();ah()}}function ah(){am.find(">.jspHorizontalBar>.jspCap:visible,>.jspHorizontalBar>.jspArrow").each(function(){l-=b(this).outerWidth()});G.width(l+"px");aa=0}function F(){if(aF&&aA){var aJ=G.outerHeight(),s=aq.outerWidth();t-=aJ;b(an).find(">.jspCap:visible,>.jspArrow").each(function(){l+=b(this).outerWidth()});l-=s;v-=s;ak-=aJ;G.parent().append(b('
').css("width",aJ+"px"));o();ah()}if(aF){Y.width((am.outerWidth()-f)+"px")}Z=Y.outerHeight();q=Z/v;if(aF){au=Math.ceil(1/y*l);if(au>az.horizontalDragMaxWidth){au=az.horizontalDragMaxWidth}else{if(auaz.verticalDragMaxHeight){A=az.verticalDragMaxHeight}else{if(AaT){Q.scrollByY(-aQ)}else{V(aT)}}else{if(aN>0){if(I+aRaT){Q.scrollByX(-aQ)}else{W(aT)}}else{if(aN>0){if(aa+aRi){s=i}}if(aJ===c){aJ=az.animateScroll}if(aJ){Q.animate(av,"top",s,ad)}else{av.css("top",s);ad(s)}}function ad(aJ){if(aJ===c){aJ=av.position().top}am.scrollTop(0);I=aJ;var aM=I===0,aK=I==i,aL=aJ/i,s=-aL*(Z-v);if(aj!=aM||aH!=aK){aj=aM;aH=aK;D.trigger("jsp-arrow-change",[aj,aH,P,k])}u(aM,aK);Y.css("top",s);D.trigger("jsp-scroll-y",[-s,aM,aK]).trigger("scroll")}function W(aJ,s){if(!aF){return}if(aJ<0){aJ=0}else{if(aJ>j){aJ=j}}if(s===c){s=az.animateScroll}if(s){Q.animate(h,"left",aJ,ae) 6 | }else{h.css("left",aJ);ae(aJ)}}function ae(aJ){if(aJ===c){aJ=h.position().left}am.scrollTop(0);aa=aJ;var aM=aa===0,aL=aa==j,aK=aJ/j,s=-aK*(T-ak);if(P!=aM||k!=aL){P=aM;k=aL;D.trigger("jsp-arrow-change",[aj,aH,P,k])}r(aM,aL);Y.css("left",s);D.trigger("jsp-scroll-x",[-s,aM,aL]).trigger("scroll")}function u(aJ,s){if(az.showArrows){ar[aJ?"addClass":"removeClass"]("jspDisabled");af[s?"addClass":"removeClass"]("jspDisabled")}}function r(aJ,s){if(az.showArrows){ay[aJ?"addClass":"removeClass"]("jspDisabled");x[s?"addClass":"removeClass"]("jspDisabled")}}function M(s,aJ){var aK=s/(Z-v);V(aK*i,aJ)}function N(aJ,s){var aK=aJ/(T-ak);W(aK*j,s)}function ab(aW,aR,aK){var aO,aL,aM,s=0,aV=0,aJ,aQ,aP,aT,aS,aU;try{aO=b(aW)}catch(aN){return}aL=aO.outerHeight();aM=aO.outerWidth();am.scrollTop(0);am.scrollLeft(0);while(!aO.is(".jspPane")){s+=aO.position().top;aV+=aO.position().left;aO=aO.offsetParent();if(/^body|html$/i.test(aO[0].nodeName)){return}}aJ=aB();aP=aJ+v;if(saP){aS=s-v+aL+az.verticalGutter}}if(aS){M(aS,aK)}aQ=aD();aT=aQ+ak;if(aVaT){aU=aV-ak+aM+az.horizontalGutter}}if(aU){N(aU,aK)}}function aD(){return -Y.position().left}function aB(){return -Y.position().top}function K(){var s=Z-v;return(s>20)&&(s-aB()<10)}function B(){var s=T-ak;return(s>20)&&(s-aD()<10)}function ag(){am.unbind(ac).bind(ac,function(aM,aN,aL,aJ){var aK=aa,s=I;Q.scrollBy(aL*az.mouseWheelSpeed,-aJ*az.mouseWheelSpeed,false);return aK==aa&&s==I})}function n(){am.unbind(ac)}function aC(){return false}function J(){Y.find(":input,a").unbind("focus.jsp").bind("focus.jsp",function(s){ab(s.target,false)})}function E(){Y.find(":input,a").unbind("focus.jsp")}function S(){var s,aJ,aL=[];aF&&aL.push(an[0]);aA&&aL.push(U[0]);Y.focus(function(){D.focus()});D.attr("tabindex",0).unbind("keydown.jsp keypress.jsp").bind("keydown.jsp",function(aO){if(aO.target!==this&&!(aL.length&&b(aO.target).closest(aL).length)){return}var aN=aa,aM=I;switch(aO.keyCode){case 40:case 38:case 34:case 32:case 33:case 39:case 37:s=aO.keyCode;aK();break;case 35:M(Z-v);s=null;break;case 36:M(0);s=null;break}aJ=aO.keyCode==s&&aN!=aa||aM!=I;return !aJ}).bind("keypress.jsp",function(aM){if(aM.keyCode==s){aK()}return !aJ});if(az.hideFocus){D.css("outline","none");if("hideFocus" in am[0]){D.attr("hideFocus",true)}}else{D.css("outline","");if("hideFocus" in am[0]){D.attr("hideFocus",false)}}function aK(){var aN=aa,aM=I;switch(s){case 40:Q.scrollByY(az.keyboardSpeed,false);break;case 38:Q.scrollByY(-az.keyboardSpeed,false);break;case 34:case 32:Q.scrollByY(v*az.scrollPagePercent,false);break;case 33:Q.scrollByY(-v*az.scrollPagePercent,false);break;case 39:Q.scrollByX(az.keyboardSpeed,false);break;case 37:Q.scrollByX(-az.keyboardSpeed,false);break}aJ=aN!=aa||aM!=I;return aJ}}function R(){D.attr("tabindex","-1").removeAttr("tabindex").unbind("keydown.jsp keypress.jsp")}function C(){if(location.hash&&location.hash.length>1){var aL,aJ,aK=escape(location.hash);try{aL=b(aK)}catch(s){return}if(aL.length&&Y.find(aK)){if(am.scrollTop()===0){aJ=setInterval(function(){if(am.scrollTop()>0){ab(aK,true);b(document).scrollTop(am.position().top);clearInterval(aJ)}},50)}else{ab(aK,true);b(document).scrollTop(am.position().top)}}}}function ai(){b("a.jspHijack").unbind("click.jsp-hijack").removeClass("jspHijack")}function m(){ai();b("a[href^=#]").addClass("jspHijack").bind("click.jsp-hijack",function(){var s=this.href.split("#"),aJ;if(s.length>1){aJ=s[1];if(aJ.length>0&&Y.find("#"+aJ).length>0){ab("#"+aJ,true);return false}}})}function ao(){var aK,aJ,aM,aL,aN,s=false;am.unbind("touchstart.jsp touchmove.jsp touchend.jsp click.jsp-touchclick").bind("touchstart.jsp",function(aO){var aP=aO.originalEvent.touches[0];aK=aD();aJ=aB();aM=aP.pageX;aL=aP.pageY;aN=false;s=true}).bind("touchmove.jsp",function(aR){if(!s){return}var aQ=aR.originalEvent.touches[0],aP=aa,aO=I;Q.scrollTo(aK+aM-aQ.pageX,aJ+aL-aQ.pageY);aN=aN||Math.abs(aM-aQ.pageX)>5||Math.abs(aL-aQ.pageY)>5; 7 | return aP==aa&&aO==I}).bind("touchend.jsp",function(aO){s=false}).bind("click.jsp-touchclick",function(aO){if(aN){aN=false;return false}})}function g(){var s=aB(),aJ=aD();D.removeClass("jspScrollable").unbind(".jsp");D.replaceWith(ap.append(Y.children()));ap.scrollTop(s);ap.scrollLeft(aJ)}b.extend(Q,{reinitialise:function(aJ){aJ=b.extend({},az,aJ);at(aJ)},scrollToElement:function(aK,aJ,s){ab(aK,aJ,s)},scrollTo:function(aK,s,aJ){N(aK,aJ);M(s,aJ)},scrollToX:function(aJ,s){N(aJ,s)},scrollToY:function(s,aJ){M(s,aJ)},scrollToPercentX:function(aJ,s){N(aJ*(T-ak),s)},scrollToPercentY:function(aJ,s){M(aJ*(Z-v),s)},scrollBy:function(aJ,s,aK){Q.scrollByX(aJ,aK);Q.scrollByY(s,aK)},scrollByX:function(s,aK){var aJ=aD()+Math[s<0?"floor":"ceil"](s),aL=aJ/(T-ak);W(aL*j,aK)},scrollByY:function(s,aK){var aJ=aB()+Math[s<0?"floor":"ceil"](s),aL=aJ/(Z-v);V(aL*i,aK)},positionDragX:function(s,aJ){W(s,aJ)},positionDragY:function(aJ,s){V(aJ,s)},animate:function(aJ,aM,s,aL){var aK={};aK[aM]=s;aJ.animate(aK,{duration:az.animateDuration,easing:az.animateEase,queue:false,step:aL})},getContentPositionX:function(){return aD()},getContentPositionY:function(){return aB()},getContentWidth:function(){return T},getContentHeight:function(){return Z},getPercentScrolledX:function(){return aD()/(T-ak)},getPercentScrolledY:function(){return aB()/(Z-v)},getIsScrollableH:function(){return aF},getIsScrollableV:function(){return aA},getContentPane:function(){return Y},scrollToBottom:function(s){V(i,s)},hijackInternalLinks:function(){m()},destroy:function(){g()}});at(O)}e=b.extend({},b.fn.jScrollPane.defaults,e);b.each(["mouseWheelSpeed","arrowButtonSpeed","trackClickSpeed","keyboardSpeed"],function(){e[this]=e[this]||e.speed});return this.each(function(){var f=b(this),g=f.data("jsp");if(g){g.reinitialise(e)}else{g=new d(f,e);f.data("jsp",g)}})};b.fn.jScrollPane.defaults={showArrows:false,maintainPosition:true,stickToBottom:false,stickToRight:false,clickOnTrack:true,autoReinitialise:false,autoReinitialiseDelay:500,verticalDragMinHeight:0,verticalDragMaxHeight:99999,horizontalDragMinWidth:0,horizontalDragMaxWidth:99999,contentWidth:c,animateScroll:false,animateDuration:300,animateEase:"linear",hijackInternalLinks:false,verticalGutter:4,horizontalGutter:4,mouseWheelSpeed:0,arrowButtonSpeed:0,arrowRepeatFreq:50,arrowScrollOnHover:false,trackClickSpeed:0,trackClickRepeatFreq:70,verticalArrowPositions:"split",horizontalArrowPositions:"split",enableKeyboardNavigation:true,hideFocus:false,keyboardSpeed:0,initialDelay:300,speed:30,scrollPagePercent:0.8}})(jQuery,this); -------------------------------------------------------------------------------- /plugins/jQuery-Plugin-For-Particle-System-Background-with-Parallax-Effect-Particleground/jquery.particleground.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Particleground 3 | * 4 | * @author Jonathan Nicol - @mrjnicol 5 | * @version 1.0.1 6 | * @description Creates a canvas based particle system background 7 | * 8 | * Inspired by: 9 | * http://requestlab.fr/ 10 | * http://disruptivebydesign.com/ 11 | * 12 | * @license The MIT License (MIT) 13 | * 14 | * Copyright (c) 2014 Jonathan Nicol - @mrjnicol 15 | * 16 | * Permission is hereby granted, free of charge, to any person obtaining a copy 17 | * of this software and associated documentation files (the "Software"), to deal 18 | * in the Software without restriction, including without limitation the rights 19 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 20 | * copies of the Software, and to permit persons to whom the Software is 21 | * furnished to do so, subject to the following conditions: 22 | * 23 | * The above copyright notice and this permission notice shall be included in 24 | * all copies or substantial portions of the Software. 25 | * 26 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 27 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 28 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 29 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 30 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 31 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 32 | * THE SOFTWARE. 33 | */ 34 | 35 | ;(function($) { 36 | var pluginName = 'particleground'; 37 | 38 | function Plugin(element, options) { 39 | var el = element; 40 | var $el = $(element); 41 | var canvasSupport = !!document.createElement('canvas').getContext; 42 | var canvas; 43 | var ctx; 44 | var particles = []; 45 | var raf; 46 | var mouseX = 0; 47 | var mouseY = 0; 48 | var winW; 49 | var winH; 50 | var desktop = !navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry|BB10|mobi|tablet|opera mini|nexus 7)/i); 51 | var orientationSupport = !!window.DeviceOrientationEvent; 52 | var tiltX = 0; 53 | var tiltY = 0; 54 | var paused = false; 55 | 56 | options = $.extend({}, $.fn[pluginName].defaults, options); 57 | 58 | /** 59 | * Init 60 | */ 61 | function init() { 62 | if (!canvasSupport) { return; } 63 | 64 | //Create canvas 65 | $canvas = $(''); 66 | $el.prepend($canvas); 67 | canvas = $canvas[0]; 68 | ctx = canvas.getContext('2d'); 69 | styleCanvas(); 70 | 71 | // Create particles 72 | var numParticles = Math.round((canvas.width * canvas.height) / options.density); 73 | for (var i = 0; i < numParticles; i++) { 74 | var p = new Particle(); 75 | p.setStackPos(i); 76 | particles.push(p); 77 | }; 78 | 79 | $(window).on('resize', function() { 80 | resizeHandler(); 81 | }); 82 | 83 | $(document).on('mousemove', function(e) { 84 | mouseX = e.pageX; 85 | mouseY = e.pageY; 86 | }); 87 | 88 | if (orientationSupport && !desktop) { 89 | window.addEventListener('deviceorientation', function () { 90 | // Contrain tilt range to [-30,30] 91 | tiltY = Math.min(Math.max(-event.beta, -30), 30); 92 | tiltX = Math.min(Math.max(-event.gamma, -30), 30); 93 | }, true); 94 | } 95 | 96 | draw(); 97 | hook('onInit'); 98 | } 99 | 100 | /** 101 | * Style the canvas 102 | */ 103 | function styleCanvas() { 104 | canvas.width = $el.width(); 105 | canvas.height = $el.height(); 106 | ctx.fillStyle = options.dotColor; 107 | ctx.strokeStyle = options.lineColor; 108 | ctx.lineWidth = options.lineWidth; 109 | } 110 | 111 | /** 112 | * Draw particles 113 | */ 114 | function draw() { 115 | if (!canvasSupport) { return; } 116 | 117 | winW = $(window).width(); 118 | winH = $(window).height(); 119 | 120 | // Wipe canvas 121 | ctx.clearRect(0, 0, canvas.width, canvas.height); 122 | 123 | // Update particle positions 124 | for (var i = 0; i < particles.length; i++) { 125 | particles[i].updatePosition(); 126 | }; 127 | // Draw particles 128 | for (var i = 0; i < particles.length; i++) { 129 | particles[i].draw(); 130 | }; 131 | 132 | // Call this function next time screen is redrawn 133 | if (!paused) { 134 | raf = requestAnimationFrame(draw); 135 | } 136 | } 137 | 138 | /** 139 | * Add/remove particles. 140 | */ 141 | function resizeHandler() { 142 | // Resize the canvas 143 | styleCanvas(); 144 | 145 | // Remove particles that are outside the canvas 146 | for (i = particles.length - 1; i >= 0; i--) { 147 | if (particles[i].position.x > $el.width() || particles[i].position.y > $el.height()) { 148 | particles.splice(i, 1); 149 | } 150 | }; 151 | 152 | // Adjust partivcle density 153 | var numParticles = Math.round((canvas.width * canvas.height) / options.density); 154 | if (numParticles > particles.length) { 155 | while (numParticles > particles.length) { 156 | var p = new Particle(); 157 | particles.push(p); 158 | } 159 | } else if (numParticles < particles.length) { 160 | particles.splice(numParticles); 161 | } 162 | 163 | // Re-index particles 164 | for (i = particles.length - 1; i >= 0; i--) { 165 | particles[i].setStackPos(i); 166 | }; 167 | } 168 | 169 | /** 170 | * Pause particle system 171 | */ 172 | function pause() { 173 | paused = true; 174 | } 175 | 176 | /** 177 | * Start particle system 178 | */ 179 | function start() { 180 | paused = false; 181 | draw(); 182 | } 183 | 184 | /** 185 | * Particle 186 | */ 187 | function Particle() { 188 | this.stackPos; 189 | this.active = true; 190 | this.layer = Math.ceil(Math.random() * 3); 191 | this.parallaxOffsetX = 0; 192 | this.parallaxOffsetY = 0; 193 | // Initial particle position 194 | this.position = { 195 | x: Math.ceil(Math.random() * canvas.width), 196 | y: Math.ceil(Math.random() * canvas.height) 197 | } 198 | // Random particle speed, within min and max values 199 | this.speed = {} 200 | switch (options.directionX) { 201 | case 'left': 202 | this.speed.x = +(-options.maxSpeedX + (Math.random() * options.maxSpeedX) - options.minSpeedX).toFixed(2); 203 | break; 204 | case 'right': 205 | this.speed.x = +((Math.random() * options.maxSpeedX) + options.minSpeedX).toFixed(2); 206 | break; 207 | default: 208 | this.speed.x = +((-options.maxSpeedX / 2) + (Math.random() * options.maxSpeedX)).toFixed(2); 209 | this.speed.x += this.speed.x > 0 ? options.minSpeedX : -options.minSpeedX; 210 | break; 211 | } 212 | switch (options.directionY) { 213 | case 'up': 214 | this.speed.y = +(-options.maxSpeedY + (Math.random() * options.maxSpeedY) - options.minSpeedY).toFixed(2); 215 | break; 216 | case 'down': 217 | this.speed.y = +((Math.random() * options.maxSpeedY) + options.minSpeedY).toFixed(2); 218 | break; 219 | default: 220 | this.speed.y = +((-options.maxSpeedY / 2) + (Math.random() * options.maxSpeedY)).toFixed(2); 221 | this.speed.x += this.speed.y > 0 ? options.minSpeedY : -options.minSpeedY; 222 | break; 223 | } 224 | } 225 | 226 | /** 227 | * Draw particle 228 | */ 229 | Particle.prototype.draw = function() { 230 | // Draw circle 231 | ctx.beginPath(); 232 | ctx.arc(this.position.x + this.parallaxOffsetX, this.position.y + this.parallaxOffsetY, options.particleRadius / 2, 0, Math.PI * 2, true); 233 | ctx.closePath(); 234 | ctx.fill(); 235 | 236 | // Draw lines 237 | ctx.beginPath(); 238 | // Iterate over all particles which are higher in the stack than this one 239 | for (var i = particles.length - 1; i > this.stackPos; i--) { 240 | var p2 = particles[i]; 241 | 242 | // Pythagorus theorum to get distance between two points 243 | var a = this.position.x - p2.position.x 244 | var b = this.position.y - p2.position.y 245 | var dist = Math.sqrt((a * a) + (b * b)).toFixed(2); 246 | 247 | // If the two particles are in proximity, join them 248 | if (dist < options.proximity) { 249 | ctx.moveTo(this.position.x + this.parallaxOffsetX, this.position.y + this.parallaxOffsetY); 250 | if (options.curvedLines) { 251 | ctx.quadraticCurveTo(Math.max(p2.position.x, p2.position.x), Math.min(p2.position.y, p2.position.y), p2.position.x + p2.parallaxOffsetX, p2.position.y + p2.parallaxOffsetY); 252 | } else { 253 | ctx.lineTo(p2.position.x + p2.parallaxOffsetX, p2.position.y + p2.parallaxOffsetY); 254 | } 255 | } 256 | } 257 | ctx.stroke(); 258 | ctx.closePath(); 259 | } 260 | 261 | /** 262 | * update particle position 263 | */ 264 | Particle.prototype.updatePosition = function() { 265 | if (options.parallax) { 266 | if (orientationSupport && !desktop) { 267 | // Map tiltX range [-30,30] to range [0,winW] 268 | var ratioX = (winW - 0) / (30 - -30); 269 | pointerX = (tiltX - -30) * ratioX + 0; 270 | // Map tiltY range [-30,30] to range [0,winH] 271 | var ratioY = (winH - 0) / (30 - -30); 272 | pointerY = (tiltY - -30) * ratioY + 0; 273 | } else { 274 | pointerX = mouseX; 275 | pointerY = mouseY; 276 | } 277 | // Calculate parallax offsets 278 | this.parallaxTargX = (pointerX - (winW / 2)) / (options.parallaxMultiplier * this.layer); 279 | this.parallaxOffsetX += (this.parallaxTargX - this.parallaxOffsetX) / 10; // Easing equation 280 | this.parallaxTargY = (pointerY - (winH / 2)) / (options.parallaxMultiplier * this.layer); 281 | this.parallaxOffsetY += (this.parallaxTargY - this.parallaxOffsetY) / 10; // Easing equation 282 | } 283 | 284 | switch (options.directionX) { 285 | case 'left': 286 | if (this.position.x + this.speed.x + this.parallaxOffsetX < 0) { 287 | this.position.x = $el.width() - this.parallaxOffsetX; 288 | } 289 | break; 290 | case 'right': 291 | if (this.position.x + this.speed.x + this.parallaxOffsetX > $el.width()) { 292 | this.position.x = 0 - this.parallaxOffsetX; 293 | } 294 | break; 295 | default: 296 | // If particle has reached edge of canvas, reverse its direction 297 | if (this.position.x + this.speed.x + this.parallaxOffsetX > $el.width() || this.position.x + this.speed.x + this.parallaxOffsetX < 0) { 298 | this.speed.x = -this.speed.x; 299 | } 300 | break; 301 | } 302 | 303 | switch (options.directionY) { 304 | case 'up': 305 | if (this.position.y + this.speed.y + this.parallaxOffsetY < 0) { 306 | this.position.y = $el.height() - this.parallaxOffsetY; 307 | } 308 | break; 309 | case 'down': 310 | if (this.position.y + this.speed.y + this.parallaxOffsetY > $el.height()) { 311 | this.position.y = 0 - this.parallaxOffsetY; 312 | } 313 | break; 314 | default: 315 | // If particle has reached edge of canvas, reverse its direction 316 | if (this.position.y + this.speed.y + this.parallaxOffsetY > $el.height() || this.position.y + this.speed.y + this.parallaxOffsetY < 0) { 317 | this.speed.y = -this.speed.y; 318 | } 319 | break; 320 | } 321 | 322 | // Move particle 323 | this.position.x += this.speed.x; 324 | this.position.y += this.speed.y; 325 | } 326 | 327 | /** 328 | * Setter: particle stacking position 329 | */ 330 | Particle.prototype.setStackPos = function(i) { 331 | this.stackPos = i; 332 | } 333 | 334 | function option (key, val) { 335 | if (val) { 336 | options[key] = val; 337 | } else { 338 | return options[key]; 339 | } 340 | } 341 | 342 | function destroy() { 343 | $el.find('.pg-canvas').remove(); 344 | hook('onDestroy'); 345 | $el.removeData('plugin_' + pluginName); 346 | } 347 | 348 | function hook(hookName) { 349 | if (options[hookName] !== undefined) { 350 | options[hookName].call(el); 351 | } 352 | } 353 | 354 | init(); 355 | 356 | return { 357 | option: option, 358 | destroy: destroy, 359 | start: start, 360 | pause: pause 361 | }; 362 | } 363 | 364 | $.fn[pluginName] = function(options) { 365 | if (typeof arguments[0] === 'string') { 366 | var methodName = arguments[0]; 367 | var args = Array.prototype.slice.call(arguments, 1); 368 | var returnVal; 369 | this.each(function() { 370 | if ($.data(this, 'plugin_' + pluginName) && typeof $.data(this, 'plugin_' + pluginName)[methodName] === 'function') { 371 | returnVal = $.data(this, 'plugin_' + pluginName)[methodName].apply(this, args); 372 | } 373 | }); 374 | if (returnVal !== undefined){ 375 | return returnVal; 376 | } else { 377 | return this; 378 | } 379 | } else if (typeof options === "object" || !options) { 380 | return this.each(function() { 381 | if (!$.data(this, 'plugin_' + pluginName)) { 382 | $.data(this, 'plugin_' + pluginName, new Plugin(this, options)); 383 | } 384 | }); 385 | } 386 | }; 387 | 388 | $.fn[pluginName].defaults = { 389 | minSpeedX: 0.1, 390 | maxSpeedX: 0.7, 391 | minSpeedY: 0.1, 392 | maxSpeedY: 0.7, 393 | directionX: 'center', // 'center', 'left' or 'right'. 'center' = dots bounce off edges 394 | directionY: 'center', // 'center', 'up' or 'down'. 'center' = dots bounce off edges 395 | density: 10000, // How many particles will be generated: one particle every n pixels 396 | dotColor: '#666666', 397 | lineColor: '#666666', 398 | particleRadius: 7, // Dot size 399 | lineWidth: 1, 400 | curvedLines: false, 401 | proximity: 100, // How close two dots need to be before they join 402 | parallax: true, 403 | parallaxMultiplier: 5, // The lower the number, the more extreme the parallax effect 404 | onInit: function() {}, 405 | onDestroy: function() {} 406 | }; 407 | 408 | })(jQuery); 409 | 410 | /** 411 | * requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel 412 | * @see: http://paulirish.com/2011/requestanimationframe-for-smart-animating/ 413 | * @see: http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating 414 | * @license: MIT license 415 | */ 416 | (function() { 417 | var lastTime = 0; 418 | var vendors = ['ms', 'moz', 'webkit', 'o']; 419 | for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { 420 | window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame']; 421 | window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] 422 | || window[vendors[x]+'CancelRequestAnimationFrame']; 423 | } 424 | 425 | if (!window.requestAnimationFrame) 426 | window.requestAnimationFrame = function(callback, element) { 427 | var currTime = new Date().getTime(); 428 | var timeToCall = Math.max(0, 16 - (currTime - lastTime)); 429 | var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 430 | timeToCall); 431 | lastTime = currTime + timeToCall; 432 | return id; 433 | }; 434 | 435 | if (!window.cancelAnimationFrame) 436 | window.cancelAnimationFrame = function(id) { 437 | clearTimeout(id); 438 | }; 439 | }()); -------------------------------------------------------------------------------- /blog-details.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Andrew Smith - Responsive Resume / Personal Portfolio Template 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 38 |
39 |
40 |
41 |
42 |

This is a standard post with a preview image

43 | 44 | Saturday  /  June 15, 2013  /  Admin  /  Web Design  /  23 Comments 45 |
46 |
47 |
48 |
49 | 55 |
56 |
57 |
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis ullamcorper congue tellus at blandit. Sed quis dolor et orci feugiat vulputate. 58 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis ullamcorper congue tellus at blandit. Sed quis dolor et orci feugiat vulputate. Vivamus nec felis pharetra, iaculis dolor ut, imperdiet ex. Nulla elementum quam id nulla luctus tempor sed sed velit. Nam sed libero at lectus consectetur accumsan vitae non enim. Duis nec massa arcu. Cras fringilla ex eget consequat luctus.

59 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis ullamcorper congue tellus at blandit. Sed quis dolor et orci feugiat vulputate. Vivamus nec felis pharetra, iaculis dolor ut, imperdiet ex. Nulla elementum quam id nulla luctus tempor sed sed velit. Nam sed libero at lectus consectetur accumsan vitae non enim. Duis nec massa arcu. Cras fringilla ex eget consequat luctus.

60 |
61 |
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis ullamcorper congue tellus at blandit. 62 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis ullamcorper congue tellus at blandit. Sed quis dolor et orci feugiat vulputate. Vivamus nec felis pharetra, iaculis dolor ut, imperdiet ex. Nulla elementum quam id nulla luctus tempor sed sed velit. Nam sed libero at lectus consectetur accumsan vitae non enim. Duis nec massa arcu. Cras fringilla ex eget consequat luctus.

63 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis ullamcorper congue tellus at blandit. Sed quis dolor et orci feugiat vulputate. Vivamus nec felis pharetra, iaculis dolor ut, imperdiet ex. Nulla elementum quam id nulla luctus tempor sed sed velit. Nam sed libero at lectus consectetur accumsan vitae non enim. Duis nec massa arcu. Cras fringilla ex eget consequat luctus.

64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
Ray MichaelSeptember 05th, 2014Post Reply
72 |
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis ullamcorper congue tellus at blandit. Sed quis dolor et orci feugiat vulputate. Vivamus nec felis pharetra, iaculis dolor ut, imperdiet ex. Nulla elementum quam id nulla luctus tempor sed sed velit. Nam sed libero at lectus consectetur accumsan vitae non enim. Duis nec massa arcu. Cras fringilla ex eget consequat luctus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis ullamcorper congue tellus at blandit.
73 |
74 |
75 |
Kristi HinesAugust 13th, 2014Post Reply
76 |
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis ullamcorper congue tellus at blandit. Sed quis dolor et orci feugiat vulputate. Vivamus nec felis pharetra, iaculis dolor ut, imperdiet ex. Nulla elementum quam id nulla luctus tempor sed sed velit. Nam sed libero at lectus consectetur accumsan vitae non enim. Duis nec massa arcu. Cras fringilla ex eget consequat luctus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis ullamcorper congue tellus at blandit.
77 |
78 |
79 |
Kristi HinesAugust 13th, 2014Post Reply
80 |
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis ullamcorper congue tellus at blandit. Sed quis dolor et orci feugiat vulputate. Vivamus nec felis pharetra, iaculis dolor ut, imperdiet ex. Nulla elementum quam id nulla luctus tempor sed sed velit. Nam sed libero at lectus consectetur accumsan vitae non enim. Duis nec massa arcu. Cras fringilla ex eget consequat luctus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis ullamcorper congue tellus at blandit.
81 |
82 |
83 |
Ray MichaelAugust 15th, 2014Post Reply
84 |
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis ullamcorper congue tellus at blandit. Sed quis dolor et orci feugiat vulputate. Vivamus nec felis pharetra, iaculis dolor ut, imperdiet ex. Nulla elementum quam id nulla luctus tempor sed sed velit. Nam sed libero at lectus consectetur accumsan vitae non enim. Duis nec massa arcu. Cras fringilla ex eget consequat luctus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis ullamcorper congue tellus at blandit.
85 |
86 |
87 |
88 |
Leave a Comment
89 |
90 |
91 | 92 | 93 |
94 |
95 | 96 | 97 |
98 |
99 | 100 | 101 |
102 |
103 | 104 | 105 | 106 |
107 |
108 |
109 |
110 |
111 |
112 | 116 | 179 | 190 | 200 | 209 | 213 | 217 |
218 |
219 |
220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | -------------------------------------------------------------------------------- /js/jquery.history.js: -------------------------------------------------------------------------------- 1 | window.JSON||(window.JSON={}),function(){function f(a){return a<10?"0"+a:a}function quote(a){return escapable.lastIndex=0,escapable.test(a)?'"'+a.replace(escapable,function(a){var b=meta[a];return typeof b=="string"?b:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+a+'"'}function str(a,b){var c,d,e,f,g=gap,h,i=b[a];i&&typeof i=="object"&&typeof i.toJSON=="function"&&(i=i.toJSON(a)),typeof rep=="function"&&(i=rep.call(b,a,i));switch(typeof i){case"string":return quote(i);case"number":return isFinite(i)?String(i):"null";case"boolean":case"null":return String(i);case"object":if(!i)return"null";gap+=indent,h=[];if(Object.prototype.toString.apply(i)==="[object Array]"){f=i.length;for(c=0;c")&&c[0]);return a>4?a:!1}();return a},m.isInternetExplorer=function(){var a=m.isInternetExplorer.cached=typeof m.isInternetExplorer.cached!="undefined"?m.isInternetExplorer.cached:Boolean(m.getInternetExplorerMajorVersion());return a},m.emulated={pushState:!Boolean(a.history&&a.history.pushState&&a.history.replaceState&&!/ Mobile\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i.test(e.userAgent)&&!/AppleWebKit\/5([0-2]|3[0-2])/i.test(e.userAgent)),hashChange:Boolean(!("onhashchange"in a||"onhashchange"in d)||m.isInternetExplorer()&&m.getInternetExplorerMajorVersion()<8)},m.enabled=!m.emulated.pushState,m.bugs={setHash:Boolean(!m.emulated.pushState&&e.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(e.userAgent)),safariPoll:Boolean(!m.emulated.pushState&&e.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(e.userAgent)),ieDoubleCheck:Boolean(m.isInternetExplorer()&&m.getInternetExplorerMajorVersion()<8),hashEscape:Boolean(m.isInternetExplorer()&&m.getInternetExplorerMajorVersion()<7)},m.isEmptyObject=function(a){for(var b in a)return!1;return!0},m.cloneObject=function(a){var b,c;return a?(b=k.stringify(a),c=k.parse(b)):c={},c},m.getRootUrl=function(){var a=d.location.protocol+"//"+(d.location.hostname||d.location.host);if(d.location.port||!1)a+=":"+d.location.port;return a+="/",a},m.getBaseHref=function(){var a=d.getElementsByTagName("base"),b=null,c="";return a.length===1&&(b=a[0],c=b.href.replace(/[^\/]+$/,"")),c=c.replace(/\/+$/,""),c&&(c+="/"),c},m.getBaseUrl=function(){var a=m.getBaseHref()||m.getBasePageUrl()||m.getRootUrl();return a},m.getPageUrl=function(){var a=m.getState(!1,!1),b=(a||{}).url||d.location.href,c;return c=b.replace(/\/+$/,"").replace(/[^\/]+$/,function(a,b,c){return/\./.test(a)?a:a+"/"}),c},m.getBasePageUrl=function(){var a=d.location.href.replace(/[#\?].*/,"").replace(/[^\/]+$/,function(a,b,c){return/[^\/]$/.test(a)?"":a}).replace(/\/+$/,"")+"/";return a},m.getFullUrl=function(a,b){var c=a,d=a.substring(0,1);return b=typeof b=="undefined"?!0:b,/[a-z]+\:\/\//.test(a)||(d==="/"?c=m.getRootUrl()+a.replace(/^\/+/,""):d==="#"?c=m.getPageUrl().replace(/#.*/,"")+a:d==="?"?c=m.getPageUrl().replace(/[\?#].*/,"")+a:b?c=m.getBaseUrl()+a.replace(/^(\.\/)+/,""):c=m.getBasePageUrl()+a.replace(/^(\.\/)+/,"")),c.replace(/\#$/,"")},m.getShortUrl=function(a){var b=a,c=m.getBaseUrl(),d=m.getRootUrl();return m.emulated.pushState&&(b=b.replace(c,"")),b=b.replace(d,"/"),m.isTraditionalAnchor(b)&&(b="./"+b),b=b.replace(/^(\.\/)+/g,"./").replace(/\#$/,""),b},m.store={},m.idToState=m.idToState||{},m.stateToId=m.stateToId||{},m.urlToId=m.urlToId||{},m.storedStates=m.storedStates||[],m.savedStates=m.savedStates||[],m.normalizeStore=function(){m.store.idToState=m.store.idToState||{},m.store.urlToId=m.store.urlToId||{},m.store.stateToId=m.store.stateToId||{}},m.getState=function(a,b){typeof a=="undefined"&&(a=!0),typeof b=="undefined"&&(b=!0);var c=m.getLastSavedState();return!c&&b&&(c=m.createStateObject()),a&&(c=m.cloneObject(c),c.url=c.cleanUrl||c.url),c},m.getIdByState=function(a){var b=m.extractId(a.url),c;if(!b){c=m.getStateString(a);if(typeof m.stateToId[c]!="undefined")b=m.stateToId[c];else if(typeof m.store.stateToId[c]!="undefined")b=m.store.stateToId[c];else{for(;;){b=(new Date).getTime()+String(Math.random()).replace(/\D/g,"");if(typeof m.idToState[b]=="undefined"&&typeof m.store.idToState[b]=="undefined")break}m.stateToId[c]=b,m.idToState[b]=a}}return b},m.normalizeState=function(a){var b,c;if(!a||typeof a!="object")a={};if(typeof a.normalized!="undefined")return a;if(!a.data||typeof a.data!="object")a.data={};b={},b.normalized=!0,b.title=a.title||"",b.url=m.getFullUrl(m.unescapeString(a.url||d.location.href)),b.hash=m.getShortUrl(b.url),b.data=m.cloneObject(a.data),b.id=m.getIdByState(b),b.cleanUrl=b.url.replace(/\??\&_suid.*/,""),b.url=b.cleanUrl,c=!m.isEmptyObject(b.data);if(b.title||c)b.hash=m.getShortUrl(b.url).replace(/\??\&_suid.*/,""),/\?/.test(b.hash)||(b.hash+="?"),b.hash+="&_suid="+b.id;return b.hashedUrl=m.getFullUrl(b.hash),(m.emulated.pushState||m.bugs.safariPoll)&&m.hasUrlDuplicate(b)&&(b.url=b.hashedUrl),b},m.createStateObject=function(a,b,c){var d={data:a,title:b,url:c};return d=m.normalizeState(d),d},m.getStateById=function(a){a=String(a);var c=m.idToState[a]||m.store.idToState[a]||b;return c},m.getStateString=function(a){var b,c,d;return b=m.normalizeState(a),c={data:b.data,title:a.title,url:a.url},d=k.stringify(c),d},m.getStateId=function(a){var b,c;return b=m.normalizeState(a),c=b.id,c},m.getHashByState=function(a){var b,c;return b=m.normalizeState(a),c=b.hash,c},m.extractId=function(a){var b,c,d;return c=/(.*)\&_suid=([0-9]+)$/.exec(a),d=c?c[1]||a:a,b=c?String(c[2]||""):"",b||!1},m.isTraditionalAnchor=function(a){var b=!/[\/\?\.]/.test(a);return b},m.extractState=function(a,b){var c=null,d,e;return b=b||!1,d=m.extractId(a),d&&(c=m.getStateById(d)),c||(e=m.getFullUrl(a),d=m.getIdByUrl(e)||!1,d&&(c=m.getStateById(d)),!c&&b&&!m.isTraditionalAnchor(a)&&(c=m.createStateObject(null,null,e))),c},m.getIdByUrl=function(a){var c=m.urlToId[a]||m.store.urlToId[a]||b;return c},m.getLastSavedState=function(){return m.savedStates[m.savedStates.length-1]||b},m.getLastStoredState=function(){return m.storedStates[m.storedStates.length-1]||b},m.hasUrlDuplicate=function(a){var b=!1,c;return c=m.extractState(a.url),b=c&&c.id!==a.id,b},m.storeState=function(a){return m.urlToId[a.url]=a.id,m.storedStates.push(m.cloneObject(a)),a},m.isLastSavedState=function(a){var b=!1,c,d,e;return m.savedStates.length&&(c=a.id,d=m.getLastSavedState(),e=d.id,b=c===e),b},m.saveState=function(a){return m.isLastSavedState(a)?!1:(m.savedStates.push(m.cloneObject(a)),!0)},m.getStateByIndex=function(a){var b=null;return typeof a=="undefined"?b=m.savedStates[m.savedStates.length-1]:a<0?b=m.savedStates[m.savedStates.length+a]:b=m.savedStates[a],b},m.getHash=function(){var a=m.unescapeHash(d.location.hash);return a},m.unescapeString=function(b){var c=b,d;for(;;){d=a.unescape(c);if(d===c)break;c=d}return c},m.unescapeHash=function(a){var b=m.normalizeHash(a);return b=m.unescapeString(b),b},m.normalizeHash=function(a){var b=a.replace(/[^#]*#/,"").replace(/#.*/,"");return b},m.setHash=function(a,b){var c,e,f;return b!==!1&&m.busy()?(m.pushQueue({scope:m,callback:m.setHash,args:arguments,queue:b}),!1):(c=m.escapeHash(a),m.busy(!0),e=m.extractState(a,!0),e&&!m.emulated.pushState?m.pushState(e.data,e.title,e.url,!1):d.location.hash!==c&&(m.bugs.setHash?(f=m.getPageUrl(),m.pushState(null,null,f+"#"+c,!1)):d.location.hash=c),m)},m.escapeHash=function(b){var c=m.normalizeHash(b);return c=a.escape(c),m.bugs.hashEscape||(c=c.replace(/\%21/g,"!").replace(/\%26/g,"&").replace(/\%3D/g,"=").replace(/\%3F/g,"?")),c},m.getHashByUrl=function(a){var b=String(a).replace(/([^#]*)#?([^#]*)#?(.*)/,"$2");return b=m.unescapeHash(b),b},m.setTitle=function(a){var b=a.title,c;b||(c=m.getStateByIndex(0),c&&c.url===a.url&&(b=c.title||m.options.initialTitle));try{d.getElementsByTagName("title")[0].innerHTML=b.replace("<","<").replace(">",">").replace(" & "," & ")}catch(e){}return d.title=b,m},m.queues=[],m.busy=function(a){typeof a!="undefined"?m.busy.flag=a:typeof m.busy.flag=="undefined"&&(m.busy.flag=!1);if(!m.busy.flag){h(m.busy.timeout);var b=function(){var a,c,d;if(m.busy.flag)return;for(a=m.queues.length-1;a>=0;--a){c=m.queues[a];if(c.length===0)continue;d=c.shift(),m.fireQueueItem(d),m.busy.timeout=g(b,m.options.busyDelay)}};m.busy.timeout=g(b,m.options.busyDelay)}return m.busy.flag},m.busy.flag=!1,m.fireQueueItem=function(a){return a.callback.apply(a.scope||m,a.args||[])},m.pushQueue=function(a){return m.queues[a.queue||0]=m.queues[a.queue||0]||[],m.queues[a.queue||0].push(a),m},m.queue=function(a,b){return typeof a=="function"&&(a={callback:a}),typeof b!="undefined"&&(a.queue=b),m.busy()?m.pushQueue(a):m.fireQueueItem(a),m},m.clearQueue=function(){return m.busy.flag=!1,m.queues=[],m},m.stateChanged=!1,m.doubleChecker=!1,m.doubleCheckComplete=function(){return m.stateChanged=!0,m.doubleCheckClear(),m},m.doubleCheckClear=function(){return m.doubleChecker&&(h(m.doubleChecker),m.doubleChecker=!1),m},m.doubleCheck=function(a){return m.stateChanged=!1,m.doubleCheckClear(),m.bugs.ieDoubleCheck&&(m.doubleChecker=g(function(){return m.doubleCheckClear(),m.stateChanged||a(),!0},m.options.doubleCheckInterval)),m},m.safariStatePoll=function(){var b=m.extractState(d.location.href),c;if(!m.isLastSavedState(b))c=b;else return;return c||(c=m.createStateObject()),m.Adapter.trigger(a,"popstate"),m},m.back=function(a){return a!==!1&&m.busy()?(m.pushQueue({scope:m,callback:m.back,args:arguments,queue:a}),!1):(m.busy(!0),m.doubleCheck(function(){m.back(!1)}),n.go(-1),!0)},m.forward=function(a){return a!==!1&&m.busy()?(m.pushQueue({scope:m,callback:m.forward,args:arguments,queue:a}),!1):(m.busy(!0),m.doubleCheck(function(){m.forward(!1)}),n.go(1),!0)},m.go=function(a,b){var c;if(a>0)for(c=1;c<=a;++c)m.forward(b);else{if(!(a<0))throw new Error("History.go: History.go requires a positive or negative integer passed.");for(c=-1;c>=a;--c)m.back(b)}return m};if(m.emulated.pushState){var o=function(){};m.pushState=m.pushState||o,m.replaceState=m.replaceState||o}else m.onPopState=function(b,c){var e=!1,f=!1,g,h;return m.doubleCheckComplete(),g=m.getHash(),g?(h=m.extractState(g||d.location.href,!0),h?m.replaceState(h.data,h.title,h.url,!1):(m.Adapter.trigger(a,"anchorchange"),m.busy(!1)),m.expectedStateId=!1,!1):(e=m.Adapter.extractEventData("state",b,c)||!1,e?f=m.getStateById(e):m.expectedStateId?f=m.getStateById(m.expectedStateId):f=m.extractState(d.location.href),f||(f=m.createStateObject(null,null,d.location.href)),m.expectedStateId=!1,m.isLastSavedState(f)?(m.busy(!1),!1):(m.storeState(f),m.saveState(f),m.setTitle(f),m.Adapter.trigger(a,"statechange"),m.busy(!1),!0))},m.Adapter.bind(a,"popstate",m.onPopState),m.pushState=function(b,c,d,e){if(m.getHashByUrl(d)&&m.emulated.pushState)throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(e!==!1&&m.busy())return m.pushQueue({scope:m,callback:m.pushState,args:arguments,queue:e}),!1;m.busy(!0);var f=m.createStateObject(b,c,d);return m.isLastSavedState(f)?m.busy(!1):(m.storeState(f),m.expectedStateId=f.id,n.pushState(f.id,f.title,f.url),m.Adapter.trigger(a,"popstate")),!0},m.replaceState=function(b,c,d,e){if(m.getHashByUrl(d)&&m.emulated.pushState)throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(e!==!1&&m.busy())return m.pushQueue({scope:m,callback:m.replaceState,args:arguments,queue:e}),!1;m.busy(!0);var f=m.createStateObject(b,c,d);return m.isLastSavedState(f)?m.busy(!1):(m.storeState(f),m.expectedStateId=f.id,n.replaceState(f.id,f.title,f.url),m.Adapter.trigger(a,"popstate")),!0};if(f){try{m.store=k.parse(f.getItem("History.store"))||{}}catch(p){m.store={}}m.normalizeStore()}else m.store={},m.normalizeStore();m.Adapter.bind(a,"beforeunload",m.clearAllIntervals),m.Adapter.bind(a,"unload",m.clearAllIntervals),m.saveState(m.storeState(m.extractState(d.location.href,!0))),f&&(m.onUnload=function(){var a,b;try{a=k.parse(f.getItem("History.store"))||{}}catch(c){a={}}a.idToState=a.idToState||{},a.urlToId=a.urlToId||{},a.stateToId=a.stateToId||{};for(b in m.idToState){if(!m.idToState.hasOwnProperty(b))continue;a.idToState[b]=m.idToState[b]}for(b in m.urlToId){if(!m.urlToId.hasOwnProperty(b))continue;a.urlToId[b]=m.urlToId[b]}for(b in m.stateToId){if(!m.stateToId.hasOwnProperty(b))continue;a.stateToId[b]=m.stateToId[b]}m.store=a,m.normalizeStore(),f.setItem("History.store",k.stringify(a))},m.intervalList.push(i(m.onUnload,m.options.storeInterval)),m.Adapter.bind(a,"beforeunload",m.onUnload),m.Adapter.bind(a,"unload",m.onUnload));if(!m.emulated.pushState){m.bugs.safariPoll&&m.intervalList.push(i(m.safariStatePoll,m.options.safariPollInterval));if(e.vendor==="Apple Computer, Inc."||(e.appCodeName||"")==="Mozilla")m.Adapter.bind(a,"hashchange",function(){m.Adapter.trigger(a,"popstate")}),m.getHash()&&m.Adapter.onDomLoad(function(){m.Adapter.trigger(a,"hashchange")})}},m.init()}(window) --------------------------------------------------------------------------------