Mercurial > hg > rr-repo
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);