'use strict'; /*! Title: Vertical-Timeline Version: 2.0.0 Last Change: 04/30/17 Author: Ryan Fitzgerald Repo: https://github.com/RyanFitzgerald/vertical-timeline Issues: https://github.com/RyanFitzgerald/vertical-timeline/issues LICENSE: MIT */ (function ($) { // Check viewport var inViewport = function inViewport(ele) { // Get viewport distances var viewport = { top: $(window).scrollTop(), left: $(window).scrollLeft(), right: $(window).scrollLeft() + $(window).width(), bottom: $(window).scrollTop() + $(window).height() }; // Get element bounds var bounds = ele.offset(); bounds.right = bounds.left + ele.outerWidth(); bounds.bottom = bounds.top + ele.outerHeight(); // Compare and return return !(viewport.right < bounds.left || viewport.left > bounds.right || viewport.bottom < bounds.top || viewport.top > bounds.bottom); }; $.fn.verticalTimeline = function (options) { // Overide defaults, if any var settings = $.extend({ startLeft: true, alternate: true, animate: false, arrows: true }, options); // Allow chaining and process each DOM node return this.each(function () { // Store user content var $userContent = $(this).children('div'); // Add main class $(this).addClass('vtimeline'); // Create required content divs $userContent.each(function () { $(this).addClass('vtimeline-content').wrap('
'); }); // Add timeline icons $(this).find('.vtimeline-point').each(function () { $(this).prepend('
'); // If there is a provided icon, add it if ($(this).find('[data-vticon=true]').length) { var $icon = $(this).find('[data-vticon=true]').html(); $(this).find('.vtimeline-icon').append($icon); $(this).find('[data-vticon=true]').remove(); } }); // Setup orientation and alternation if (!settings.alternate) { $(this).find('.vtimeline-block').addClass('vtimeline-' + settings.startSide); } else { if (settings.startLeft) { $(this).find('.vtimeline-point:odd').each(function () { $(this).find('.vtimeline-block').addClass('vtimeline-right'); }); } else { $(this).find('.vtimeline-point:even').each(function () { $(this).find('.vtimeline-block').addClass('vtimeline-right'); }); } } // Add animation style if provided if (settings.animate) { $(this).find('.vtimeline-block').each(function () { var _this = this; $(this).addClass('vt-animate-' + settings.animate); if (inViewport($(this))) { $(this).removeClass('vt-animate-' + settings.animate); } $(window).on('scroll', function () { if (inViewport($(_this))) { $(_this).removeClass('vt-animate-' + settings.animate); } }); }); } // Add dates to the timeline if exists $(this).find('.vtimeline-content').each(function () { var date = $(this).data('vtdate'); var side = $(this).data('vtside'); // Add date if provided if (date) { $(this).parent().prepend('' + date + ''); } // Add side override if given if (side) { $(this).parent().removeClass('vtimeline-right'); $(this).parent().addClass('vtimeline-' + side); } }); // Remove arrows if set if (!settings.arrows) { $(this).find('.vtimeline-block').addClass('vt-noarrows'); } }); }; })(jQuery);