diff sites/all/modules/views_slideshow/js/views_slideshow.js @ 2:b74b41bb73f0

-- Google analytics module
author danieleb <danielebarchiesi@me.com>
date Thu, 22 Aug 2013 17:22:54 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sites/all/modules/views_slideshow/js/views_slideshow.js	Thu Aug 22 17:22:54 2013 +0100
@@ -0,0 +1,466 @@
+(function ($) {
+  Drupal.viewsSlideshow = Drupal.viewsSlideshow || {};
+
+  /**
+   * Views Slideshow Controls
+   */
+  Drupal.viewsSlideshowControls = Drupal.viewsSlideshowControls || {};
+
+  /**
+   * Implement the play hook for controls.
+   */
+  Drupal.viewsSlideshowControls.play = function (options) {
+    // Route the control call to the correct control type.
+    // Need to use try catch so we don't have to check to make sure every part
+    // of the object is defined.
+    try {
+      if (typeof Drupal.settings.viewsSlideshowControls[options.slideshowID].top.type != "undefined" && typeof Drupal[Drupal.settings.viewsSlideshowControls[options.slideshowID].top.type].play == 'function') {
+        Drupal[Drupal.settings.viewsSlideshowControls[options.slideshowID].top.type].play(options);
+      }
+    }
+    catch(err) {
+      // Don't need to do anything on error.
+    }
+
+    try {
+      if (typeof Drupal.settings.viewsSlideshowControls[options.slideshowID].bottom.type != "undefined" && typeof Drupal[Drupal.settings.viewsSlideshowControls[options.slideshowID].bottom.type].play == 'function') {
+        Drupal[Drupal.settings.viewsSlideshowControls[options.slideshowID].bottom.type].play(options);
+      }
+    }
+    catch(err) {
+      // Don't need to do anything on error.
+    }
+  };
+
+  /**
+   * Implement the pause hook for controls.
+   */
+  Drupal.viewsSlideshowControls.pause = function (options) {
+    // Route the control call to the correct control type.
+    // Need to use try catch so we don't have to check to make sure every part
+    // of the object is defined.
+    try {
+      if (typeof Drupal.settings.viewsSlideshowControls[options.slideshowID].top.type != "undefined" && typeof Drupal[Drupal.settings.viewsSlideshowControls[options.slideshowID].top.type].pause == 'function') {
+        Drupal[Drupal.settings.viewsSlideshowControls[options.slideshowID].top.type].pause(options);
+      }
+    }
+    catch(err) {
+      // Don't need to do anything on error.
+    }
+
+    try {
+      if (typeof Drupal.settings.viewsSlideshowControls[options.slideshowID].bottom.type != "undefined" && typeof Drupal[Drupal.settings.viewsSlideshowControls[options.slideshowID].bottom.type].pause == 'function') {
+        Drupal[Drupal.settings.viewsSlideshowControls[options.slideshowID].bottom.type].pause(options);
+      }
+    }
+    catch(err) {
+      // Don't need to do anything on error.
+    }
+  };
+
+
+  /**
+   * Views Slideshow Text Controls
+   */
+
+  // Add views slieshow api calls for views slideshow text controls.
+  Drupal.behaviors.viewsSlideshowControlsText = {
+    attach: function (context) {
+
+      // Process previous link
+      $('.views_slideshow_controls_text_previous:not(.views-slideshow-controls-text-previous-processed)', context).addClass('views-slideshow-controls-text-previous-processed').each(function() {
+        var uniqueID = $(this).attr('id').replace('views_slideshow_controls_text_previous_', '');
+        $(this).click(function() {
+          Drupal.viewsSlideshow.action({ "action": 'previousSlide', "slideshowID": uniqueID });
+          return false;
+        });
+      });
+
+      // Process next link
+      $('.views_slideshow_controls_text_next:not(.views-slideshow-controls-text-next-processed)', context).addClass('views-slideshow-controls-text-next-processed').each(function() {
+        var uniqueID = $(this).attr('id').replace('views_slideshow_controls_text_next_', '');
+        $(this).click(function() {
+          Drupal.viewsSlideshow.action({ "action": 'nextSlide', "slideshowID": uniqueID });
+          return false;
+        });
+      });
+
+      // Process pause link
+      $('.views_slideshow_controls_text_pause:not(.views-slideshow-controls-text-pause-processed)', context).addClass('views-slideshow-controls-text-pause-processed').each(function() {
+        var uniqueID = $(this).attr('id').replace('views_slideshow_controls_text_pause_', '');
+        $(this).click(function() {
+          if (Drupal.settings.viewsSlideshow[uniqueID].paused) {
+            Drupal.viewsSlideshow.action({ "action": 'play', "slideshowID": uniqueID, "force": true });
+          }
+          else {
+            Drupal.viewsSlideshow.action({ "action": 'pause', "slideshowID": uniqueID, "force": true });
+          }
+          return false;
+        });
+      });
+    }
+  };
+
+  Drupal.viewsSlideshowControlsText = Drupal.viewsSlideshowControlsText || {};
+
+  /**
+   * Implement the pause hook for text controls.
+   */
+  Drupal.viewsSlideshowControlsText.pause = function (options) {
+    var pauseText = Drupal.theme.prototype['viewsSlideshowControlsPause'] ? Drupal.theme('viewsSlideshowControlsPause') : '';
+    $('#views_slideshow_controls_text_pause_' + options.slideshowID + ' a').text(pauseText);
+  };
+
+  /**
+   * Implement the play hook for text controls.
+   */
+  Drupal.viewsSlideshowControlsText.play = function (options) {
+    var playText = Drupal.theme.prototype['viewsSlideshowControlsPlay'] ? Drupal.theme('viewsSlideshowControlsPlay') : '';
+    $('#views_slideshow_controls_text_pause_' + options.slideshowID + ' a').text(playText);
+  };
+
+  // Theme the resume control.
+  Drupal.theme.prototype.viewsSlideshowControlsPause = function () {
+    return Drupal.t('Resume');
+  };
+
+  // Theme the pause control.
+  Drupal.theme.prototype.viewsSlideshowControlsPlay = function () {
+    return Drupal.t('Pause');
+  };
+
+  /**
+   * Views Slideshow Pager
+   */
+  Drupal.viewsSlideshowPager = Drupal.viewsSlideshowPager || {};
+
+  /**
+   * Implement the transitionBegin hook for pagers.
+   */
+  Drupal.viewsSlideshowPager.transitionBegin = function (options) {
+    // Route the pager call to the correct pager type.
+    // Need to use try catch so we don't have to check to make sure every part
+    // of the object is defined.
+    try {
+      if (typeof Drupal.settings.viewsSlideshowPager[options.slideshowID].top.type != "undefined" && typeof Drupal[Drupal.settings.viewsSlideshowPager[options.slideshowID].top.type].transitionBegin == 'function') {
+        Drupal[Drupal.settings.viewsSlideshowPager[options.slideshowID].top.type].transitionBegin(options);
+      }
+    }
+    catch(err) {
+      // Don't need to do anything on error.
+    }
+
+    try {
+      if (typeof Drupal.settings.viewsSlideshowPager[options.slideshowID].bottom.type != "undefined" && typeof Drupal[Drupal.settings.viewsSlideshowPager[options.slideshowID].bottom.type].transitionBegin == 'function') {
+        Drupal[Drupal.settings.viewsSlideshowPager[options.slideshowID].bottom.type].transitionBegin(options);
+      }
+    }
+    catch(err) {
+      // Don't need to do anything on error.
+    }
+  };
+
+  /**
+   * Implement the goToSlide hook for pagers.
+   */
+  Drupal.viewsSlideshowPager.goToSlide = function (options) {
+    // Route the pager call to the correct pager type.
+    // Need to use try catch so we don't have to check to make sure every part
+    // of the object is defined.
+    try {
+      if (typeof Drupal.settings.viewsSlideshowPager[options.slideshowID].top.type != "undefined" && typeof Drupal[Drupal.settings.viewsSlideshowPager[options.slideshowID].top.type].goToSlide == 'function') {
+        Drupal[Drupal.settings.viewsSlideshowPager[options.slideshowID].top.type].goToSlide(options);
+      }
+    }
+    catch(err) {
+      // Don't need to do anything on error.
+    }
+
+    try {
+      if (typeof Drupal.settings.viewsSlideshowPager[options.slideshowID].bottom.type != "undefined" && typeof Drupal[Drupal.settings.viewsSlideshowPager[options.slideshowID].bottom.type].goToSlide == 'function') {
+        Drupal[Drupal.settings.viewsSlideshowPager[options.slideshowID].bottom.type].goToSlide(options);
+      }
+    }
+    catch(err) {
+      // Don't need to do anything on error.
+    }
+  };
+
+  /**
+   * Implement the previousSlide hook for pagers.
+   */
+  Drupal.viewsSlideshowPager.previousSlide = function (options) {
+    // Route the pager call to the correct pager type.
+    // Need to use try catch so we don't have to check to make sure every part
+    // of the object is defined.
+    try {
+      if (typeof Drupal.settings.viewsSlideshowPager[options.slideshowID].top.type != "undefined" && typeof Drupal[Drupal.settings.viewsSlideshowPager[options.slideshowID].top.type].previousSlide == 'function') {
+        Drupal[Drupal.settings.viewsSlideshowPager[options.slideshowID].top.type].previousSlide(options);
+      }
+    }
+    catch(err) {
+      // Don't need to do anything on error.
+    }
+
+    try {
+      if (typeof Drupal.settings.viewsSlideshowPager[options.slideshowID].bottom.type != "undefined" && typeof Drupal[Drupal.settings.viewsSlideshowPager[options.slideshowID].bottom.type].previousSlide == 'function') {
+        Drupal[Drupal.settings.viewsSlideshowPager[options.slideshowID].bottom.type].previousSlide(options);
+      }
+    }
+    catch(err) {
+      // Don't need to do anything on error.
+    }
+  };
+
+  /**
+   * Implement the nextSlide hook for pagers.
+   */
+  Drupal.viewsSlideshowPager.nextSlide = function (options) {
+    // Route the pager call to the correct pager type.
+    // Need to use try catch so we don't have to check to make sure every part
+    // of the object is defined.
+    try {
+      if (typeof Drupal.settings.viewsSlideshowPager[options.slideshowID].top.type != "undefined" && typeof Drupal[Drupal.settings.viewsSlideshowPager[options.slideshowID].top.type].nextSlide == 'function') {
+        Drupal[Drupal.settings.viewsSlideshowPager[options.slideshowID].top.type].nextSlide(options);
+      }
+    }
+    catch(err) {
+      // Don't need to do anything on error.
+    }
+
+    try {
+      if (typeof Drupal.settings.viewsSlideshowPager[options.slideshowID].bottom.type != "undefined" && typeof Drupal[Drupal.settings.viewsSlideshowPager[options.slideshowID].bottom.type].nextSlide == 'function') {
+        Drupal[Drupal.settings.viewsSlideshowPager[options.slideshowID].bottom.type].nextSlide(options);
+      }
+    }
+    catch(err) {
+      // Don't need to do anything on error.
+    }
+  };
+
+
+  /**
+   * Views Slideshow Pager Fields
+   */
+
+  // Add views slieshow api calls for views slideshow pager fields.
+  Drupal.behaviors.viewsSlideshowPagerFields = {
+    attach: function (context) {
+      // Process pause on hover.
+      $('.views_slideshow_pager_field:not(.views-slideshow-pager-field-processed)', context).addClass('views-slideshow-pager-field-processed').each(function() {
+        // Parse out the location and unique id from the full id.
+        var pagerInfo = $(this).attr('id').split('_');
+        var location = pagerInfo[2];
+        pagerInfo.splice(0, 3);
+        var uniqueID = pagerInfo.join('_');
+
+        // Add the activate and pause on pager hover event to each pager item.
+        if (Drupal.settings.viewsSlideshowPagerFields[uniqueID][location].activatePauseOnHover) {
+          $(this).children().each(function(index, pagerItem) {
+            var mouseIn = function() {
+              Drupal.viewsSlideshow.action({ "action": 'goToSlide', "slideshowID": uniqueID, "slideNum": index });
+              Drupal.viewsSlideshow.action({ "action": 'pause', "slideshowID": uniqueID });
+            }
+            
+            var mouseOut = function() {
+              Drupal.viewsSlideshow.action({ "action": 'play', "slideshowID": uniqueID });
+            }
+          
+            if (jQuery.fn.hoverIntent) {
+              $(pagerItem).hoverIntent(mouseIn, mouseOut);
+            }
+            else {
+              $(pagerItem).hover(mouseIn, mouseOut);
+            }
+            
+          });
+        }
+        else {
+          $(this).children().each(function(index, pagerItem) {
+            $(pagerItem).click(function() {
+              Drupal.viewsSlideshow.action({ "action": 'goToSlide', "slideshowID": uniqueID, "slideNum": index });
+            });
+          });
+        }
+      });
+    }
+  };
+
+  Drupal.viewsSlideshowPagerFields = Drupal.viewsSlideshowPagerFields || {};
+
+  /**
+   * Implement the transitionBegin hook for pager fields pager.
+   */
+  Drupal.viewsSlideshowPagerFields.transitionBegin = function (options) {
+    for (pagerLocation in Drupal.settings.viewsSlideshowPager[options.slideshowID]) {
+      // Remove active class from pagers
+      $('[id^="views_slideshow_pager_field_item_' + pagerLocation + '_' + options.slideshowID + '"]').removeClass('active');
+
+      // Add active class to active pager.
+      $('#views_slideshow_pager_field_item_'+ pagerLocation + '_' + options.slideshowID + '_' + options.slideNum).addClass('active');
+    }
+
+  };
+
+  /**
+   * Implement the goToSlide hook for pager fields pager.
+   */
+  Drupal.viewsSlideshowPagerFields.goToSlide = function (options) {
+    for (pagerLocation in Drupal.settings.viewsSlideshowPager[options.slideshowID]) {
+      // Remove active class from pagers
+      $('[id^="views_slideshow_pager_field_item_' + pagerLocation + '_' + options.slideshowID + '"]').removeClass('active');
+
+      // Add active class to active pager.
+      $('#views_slideshow_pager_field_item_' + pagerLocation + '_' + options.slideshowID + '_' + options.slideNum).addClass('active');
+    }
+  };
+
+  /**
+   * Implement the previousSlide hook for pager fields pager.
+   */
+  Drupal.viewsSlideshowPagerFields.previousSlide = function (options) {
+    for (pagerLocation in Drupal.settings.viewsSlideshowPager[options.slideshowID]) {
+      // Get the current active pager.
+      var pagerNum = $('[id^="views_slideshow_pager_field_item_' + pagerLocation + '_' + options.slideshowID + '"].active').attr('id').replace('views_slideshow_pager_field_item_' + pagerLocation + '_' + options.slideshowID + '_', '');
+
+      // If we are on the first pager then activate the last pager.
+      // Otherwise activate the previous pager.
+      if (pagerNum == 0) {
+        pagerNum = $('[id^="views_slideshow_pager_field_item_' + pagerLocation + '_' + options.slideshowID + '"]').length() - 1;
+      }
+      else {
+        pagerNum--;
+      }
+
+      // Remove active class from pagers
+      $('[id^="views_slideshow_pager_field_item_' + pagerLocation + '_' + options.slideshowID + '"]').removeClass('active');
+
+      // Add active class to active pager.
+      $('#views_slideshow_pager_field_item_' + pagerLocation + '_' + options.slideshowID + '_' + pagerNum).addClass('active');
+    }
+  };
+
+  /**
+   * Implement the nextSlide hook for pager fields pager.
+   */
+  Drupal.viewsSlideshowPagerFields.nextSlide = function (options) {
+    for (pagerLocation in Drupal.settings.viewsSlideshowPager[options.slideshowID]) {
+      // Get the current active pager.
+      var pagerNum = $('[id^="views_slideshow_pager_field_item_' + pagerLocation + '_' + options.slideshowID + '"].active').attr('id').replace('views_slideshow_pager_field_item_' + pagerLocation + '_' + options.slideshowID + '_', '');
+      var totalPagers = $('[id^="views_slideshow_pager_field_item_' + pagerLocation + '_' + options.slideshowID + '"]').length();
+
+      // If we are on the last pager then activate the first pager.
+      // Otherwise activate the next pager.
+      pagerNum++;
+      if (pagerNum == totalPagers) {
+        pagerNum = 0;
+      }
+
+      // Remove active class from pagers
+      $('[id^="views_slideshow_pager_field_item_' + pagerLocation + '_' + options.slideshowID + '"]').removeClass('active');
+
+      // Add active class to active pager.
+      $('#views_slideshow_pager_field_item_' + pagerLocation + '_' + options.slideshowID + '_' + slideNum).addClass('active');
+    }
+  };
+
+
+  /**
+   * Views Slideshow Slide Counter
+   */
+
+  Drupal.viewsSlideshowSlideCounter = Drupal.viewsSlideshowSlideCounter || {};
+
+  /**
+   * Implement the transitionBegin for the slide counter.
+   */
+  Drupal.viewsSlideshowSlideCounter.transitionBegin = function (options) {
+    $('#views_slideshow_slide_counter_' + options.slideshowID + ' .num').text(options.slideNum + 1);
+  };
+
+  /**
+   * This is used as a router to process actions for the slideshow.
+   */
+  Drupal.viewsSlideshow.action = function (options) {
+    // Set default values for our return status.
+    var status = {
+      'value': true,
+      'text': ''
+    }
+
+    // If an action isn't specified return false.
+    if (typeof options.action == 'undefined' || options.action == '') {
+      status.value = false;
+      status.text =  Drupal.t('There was no action specified.');
+      return error;
+    }
+
+    // If we are using pause or play switch paused state accordingly.
+    if (options.action == 'pause') {
+      Drupal.settings.viewsSlideshow[options.slideshowID].paused = 1;
+      // If the calling method is forcing a pause then mark it as such.
+      if (options.force) {
+        Drupal.settings.viewsSlideshow[options.slideshowID].pausedForce = 1;
+      }
+    }
+    else if (options.action == 'play') {
+      // If the slideshow isn't forced pause or we are forcing a play then play
+      // the slideshow.
+      // Otherwise return telling the calling method that it was forced paused.
+      if (!Drupal.settings.viewsSlideshow[options.slideshowID].pausedForce || options.force) {
+        Drupal.settings.viewsSlideshow[options.slideshowID].paused = 0;
+        Drupal.settings.viewsSlideshow[options.slideshowID].pausedForce = 0;
+      }
+      else {
+        status.value = false;
+        status.text += ' ' + Drupal.t('This slideshow is forced paused.');
+        return status;
+      }
+    }
+
+    // We use a switch statement here mainly just to limit the type of actions
+    // that are available.
+    switch (options.action) {
+      case "goToSlide":
+      case "transitionBegin":
+      case "transitionEnd":
+        // The three methods above require a slide number. Checking if it is
+        // defined and it is a number that is an integer.
+        if (typeof options.slideNum == 'undefined' || typeof options.slideNum !== 'number' || parseInt(options.slideNum) != (options.slideNum - 0)) {
+          status.value = false;
+          status.text = Drupal.t('An invalid integer was specified for slideNum.');
+        }
+      case "pause":
+      case "play":
+      case "nextSlide":
+      case "previousSlide":
+        // Grab our list of methods.
+        var methods = Drupal.settings.viewsSlideshow[options.slideshowID]['methods'];
+
+        // if the calling method specified methods that shouldn't be called then
+        // exclude calling them.
+        var excludeMethodsObj = {};
+        if (typeof options.excludeMethods !== 'undefined') {
+          // We need to turn the excludeMethods array into an object so we can use the in
+          // function.
+          for (var i=0; i < excludeMethods.length; i++) {
+            excludeMethodsObj[excludeMethods[i]] = '';
+          }
+        }
+
+        // Call every registered method and don't call excluded ones.
+        for (i = 0; i < methods[options.action].length; i++) {
+          if (Drupal[methods[options.action][i]] != undefined && typeof Drupal[methods[options.action][i]][options.action] == 'function' && !(methods[options.action][i] in excludeMethodsObj)) {
+            Drupal[methods[options.action][i]][options.action](options);
+          }
+        }
+        break;
+
+      // If it gets here it's because it's an invalid action.
+      default:
+        status.value = false;
+        status.text = Drupal.t('An invalid action "!action" was specified.', { "!action": options.action });
+    }
+    return status;
+  };
+})(jQuery);