123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- /*!
- * Retro renderer for epiclock
- *
- * Copyright (c) Eric Garside
- * Dual licensed under:
- * MIT: http://www.opensource.org/licenses/mit-license.php
- * GPLv3: http://www.opensource.org/licenses/gpl-3.0.html
- */
- "use strict";
- /*global window, jQuery */
- /*jslint white: true, browser: true, onevar: true, undef: true, eqeqeq: true, bitwise: true, regexp: true, strict: true, newcap: true, immed: true, maxerr: 50, indent: 4 */
- (function ($) {
- //------------------------------
- //
- // Constants
- //
- //------------------------------
-
- /**
- * Because epiclock returns values as 2 digits in one number, we need an "inner template" to contain
- * the actual image objects.
- */
- var innerTemplate = '<span class="epiclock-img"><span class="epiclock-animation"></span></span>';
- //------------------------------
- //
- // Animation
- //
- //------------------------------
-
- /**
- * Animate a given element. The animation for the retro clock has four stages:
- * :a1 - First stage of the animation
- * :a2 - Second stage of the animation
- * :a3 - Third stage of the animation
- * :s - Static image, end of animation.
- *
- * @param element The element being animated.
- */
- function animate()
- {
- var clock = this;
-
- setTimeout(function ()
- {
- $('.a1', clock.container).removeClass('a1').addClass('a2');
-
- setTimeout(function ()
- {
- $('.a2', clock.container).removeClass('a2').addClass('s');
- }, 150);
- }, 150);
- }
-
- //------------------------------
- //
- // Setup
- //
- //------------------------------
- $.epiclock.addRenderer('retro', function (element, value)
- {
- /**
- * Determine if this is a collection of digits, or the am/pm string, and parser
- * the value accordingly.
- */
- var digits = value.substring(1) === 'm' ? [value] : value.split('').reverse(),
-
- /**
- * The last value of this element.
- */
- last = element.data('epiclock-last'),
-
- /**
- * Comparison values for the last array as compared to this one.
- */
- compare = last ? last.split('').reverse() : [],
-
- /**
- * The image instances for this block. If these don't yet exist, they will be created in the digit for...each callback.
- */
- image = $.makeArray($('.epiclock-img', element)).reverse();
-
- $.each(digits, function (index, digit)
- {
- /**
- * We don't want to change the image part if it hasn't been updated.
- */
- if (digit === compare[index])
- {
- return;
- }
-
- /**
- * Animate the number after the clock has changed.
- */
- $('.epiclock-animation', $(image[index] || $(innerTemplate).prependTo(element)).removeClass('d' + compare[index]).addClass('d' + digit)).removeClass('s').addClass('a1');
- });
- },
-
- function ()
- {
- this.bind('rendered', animate);
- });
-
- }(jQuery));
|