From 2cf5c0cb8715828c387748a495985d25ae004f8a Mon Sep 17 00:00:00 2001 From: Jilles Soeters Date: Sun, 7 Sep 2014 22:21:06 +0200 Subject: [PATCH] Optimize index.js and add style consistency Declared all jQuery objects once where needed instead of diving into the DOM multiple times for the same object. Added style consistency between variable declarations, if/else statements and functions. --- assets/js/index.js | 111 +++++++++++++++++++++++---------------------- 1 file changed, 58 insertions(+), 53 deletions(-) diff --git a/assets/js/index.js b/assets/js/index.js index e9fa9a3..8df69da 100644 --- a/assets/js/index.js +++ b/assets/js/index.js @@ -2,23 +2,51 @@ * Main JS file for Casper behaviours */ -/*globals jQuery, document */ -(function ($) { +/* globals jQuery, document */ +(function ($, sr, undefined) { "use strict"; - $(document).ready(function(){ + var $document = $(document), - $(".post-content").fitVids(); + // debouncing function from John Hann + // http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/ + debounce = function (func, threshold, execAsap) { + var timeout; - function casperFullImg() { - $("img").each( function() { - var contentWidth = $(".post-content").outerWidth(); // Width of the content - var imageWidth = $(this)[0].naturalWidth; // Original image resolution + return function debounced () { + var obj = this, args = arguments; + function delayed () { + if (!execAsap) { + func.apply(obj, args); + } + timeout = null; + } + + if (timeout) { + clearTimeout(timeout); + } else if (execAsap) { + func.apply(obj, args); + } + + timeout = setTimeout(delayed, threshold || 100); + }; + }; + + $document.ready(function () { + + var $postContent = $(".post-content"); + $postContent.fitVids(); + + var casperFullImg = function () { + $("img").each(function () { + var $this = $(this), + contentWidth = $postContent.outerWidth(), // Width of the content + imageWidth = $this[0].naturalWidth; // Original image resolution if (imageWidth >= contentWidth) { - $(this).addClass('full-img'); + $this.addClass('full-img'); } else { - $(this).removeClass('full-img'); + $this.removeClass('full-img'); } }); }; @@ -30,61 +58,38 @@ }); -}(jQuery)); + // smartresize + jQuery.fn[sr] = function(fn) { return fn ? this.bind('resize', debounce(fn)) : this.trigger(sr); }; -(function($,sr){ - - // debouncing function from John Hann - // http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/ - var debounce = function (func, threshold, execAsap) { - var timeout; - - return function debounced () { - var obj = this, args = arguments; - function delayed () { - if (!execAsap) - func.apply(obj, args); - timeout = null; - }; - - if (timeout) - clearTimeout(timeout); - else if (execAsap) - func.apply(obj, args); - - timeout = setTimeout(delayed, threshold || 100); - }; - } - // smartresize - jQuery.fn[sr] = function(fn){ return fn ? this.bind('resize', debounce(fn)) : this.trigger(sr); }; - -})(jQuery,'smartresize'); - -// Arctic Scroll by Paul Adam Davis -// https://github.com/PaulAdamDavis/Arctic-Scroll -(function ($) { + // Arctic Scroll by Paul Adam Davis + // https://github.com/PaulAdamDavis/Arctic-Scroll $.fn.arctic_scroll = function (options) { var defaults = { elem: $(this), speed: 500 - }; - var options = $.extend(defaults, options); + }, - options.elem.click(function(event){ + allOptions = $.extend(defaults, options); + + allOptions.elem.click(function (event) { event.preventDefault(); - var offset = ($(this).attr('data-offset')) ? $(this).attr('data-offset') : false, - position = ($(this).attr('data-position')) ? $(this).attr('data-position') : false; + var $this = $(this), + $htmlBody = $('html, body'), + offset = ($this.attr('data-offset')) ? $this.attr('data-offset') : false, + position = ($this.attr('data-position')) ? $this.attr('data-position') : false, + toMove; + if (offset) { - var toMove = parseInt(offset); - $('html,body').stop(true, false).animate({scrollTop: ($(this.hash).offset().top + toMove) }, options.speed); + toMove = parseInt(offset); + $htmlBody.stop(true, false).animate({scrollTop: ($(this.hash).offset().top + toMove) }, allOptions.speed); } else if (position) { - var toMove = parseInt(position); - $('html,body').stop(true, false).animate({scrollTop: toMove }, options.speed); + toMove = parseInt(position); + $htmlBody.stop(true, false).animate({scrollTop: toMove }, allOptions.speed); } else { - $('html,body').stop(true, false).animate({scrollTop: ($(this.hash).offset().top) }, options.speed); + $htmlBody.stop(true, false).animate({scrollTop: ($(this.hash).offset().top) }, allOptions.speed); } }); }; -})(jQuery); \ No newline at end of file +})(jQuery, 'smartresize');