{"version":3,"sources":["slick_carousel.js"],"names":["$","isThisMobile","navigator","userAgent","match","ytfixbtn","elem","btnurl","attr","includes","ytid","regExp","length","colorbox","iframe","width","height","scrolling","overlayClose","opacity","close","closeButton","ytmodal","each","i","css","document","updateDetails","slideIndex","slick","$overlays","parents","appendTo","$slider","find","slideObject","$slides","filter","html","toggleClass","body","on","event","slickCurrentSlide","currentSlide","nextSlide","e","target","srcElement","slickLightbox","$modalElement","setTimeout","click","transcript","$element","transcript_override","JSON","parse","remove","prepend","Drupal","behaviors","lu_slick_carousel","attach","context","settings","fn","caption","jQuery"],"mappings":"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","file":"../slick_carousel.js","sourcesContent":["/**\n * Slick carousel enhancements.\n */\n\"use strict\";\n\n(function($) {\n //var alreadyRan = false;\n var updateDetails = function(slideIndex, slick) {\n // In the process of responding, the overlays may become detached from the\n // slider. Check and correct that.\n if (!slick.$overlays.parents('.slick-slider').length) {\n slick.$overlays.appendTo(slick.$slider.find('.slick-list'));\n }\n var slideObject = slick.$slides[slideIndex];\n // Add the new content to the \"previous\" (currently hidden) details pane.\n slick.$overlays.filter('.slide-details-prev')\n .html($('.content', slideObject).html())\n // Set even/odd classes.\n .toggleClass('slide-details-even', slideIndex % 2 === 0)\n .toggleClass('slide-details-odd', slideIndex % 2 === 1);\n // Swap the previous/next classes on the panes, which will trigger a\n // transition.\n slick.$overlays\n .toggleClass('slide-details-prev slide-details-next');\n ytmodal();\n };\n\n // Slick carousel initialization steps.\n $(document.body).on('init', '.paragraph--type--content-carousel', function(event, slick) {\n\n // slickGetOption\n // option : string\n // slickSetOption\n // option : string, value : depends on option, refresh : boolean\n\n // Add Details overlay.\n slick.$overlays = $('
')\n .appendTo(slick.$slider.find('.slick-list'));\n // Update Details overlay.\n updateDetails(slick.slickCurrentSlide(), slick);\n });\n\n $(document.body).on('beforeChange', '.paragraph--type--content-carousel', function(event, slick, currentSlide, nextSlide) {\n // Update Details overlay.\n updateDetails(nextSlide, slick);\n });\n\n // show.slickLightbox Triggered when the lightbox is opened.\n // shown.slickLightbox Triggered when the lightbox is opened, after the transitions took place.\n // hide.slickLightbox Triggered when the lightbox is closed.\n // hidden.slickLightbox Triggered when the lightbox is closed, after the transitions took place.\n\n // Play embedded video when the lightbox is opened.\n $(document.body).on('show.slickLightbox', function(e) {\n var target = e.target || e.srcElement;\n if (target.slickLightbox && target.slickLightbox.$modalElement) {\n setTimeout(function() { target.slickLightbox.$modalElement.find('.media__icon--play').click(); }, 300);\n }\n // Target is the original element, from which we can gather things like\n // transcripts.\n if (target && target.slickLightbox && target.slickLightbox.$modalElement) {\n target.slickLightbox.$modalElement.find('.media__icon--play', target).click();\n var transcript = target.slickLightbox.$element.find('[data-transcript]').attr('data-transcript'),\n transcript_override = target.slickLightbox.$element.parents('[data-transcript-override]').attr('data-transcript-override');\n if (transcript_override) {\n transcript = JSON.parse(transcript_override);\n }\n else if (transcript) {\n transcript = JSON.parse(transcript);\n }\n else {\n transcript = false;\n }\n // Always remove the transcript element, assuming it is stale (or there is\n // no new transcript).\n target.slickLightbox.$modalElement\n .toggleClass('slick-lightbox-has-transcript', !!transcript)\n .find('.slick-lightbox-transcript').remove();\n // Add the transcript back, if applicable.\n if (transcript) {\n $('
')\n .html(transcript)\n .prepend('Transcript')\n .appendTo(target.slickLightbox.$modalElement.find('.slick-lightbox-slick-item-inner'));\n }\n }\n });\n\n/*\n $('button.slick-next').on('click', function() {\n console.log('next');\n\n $('.slide-details a').each(function(i,elem) {\n\n var btnurl = $(elem).attr('href');\n\n if (btnurl.includes('youtube.com') || btnurl.includes('youtu.be')) {\n var ytid = 'dQw4w9WgXcQ';\n // get the youtube video id\n\n var match = btnurl.match(regExp);\n if (match && match[2].length == 11) {\n ytid = match[2];\n $(elem).attr('href', 'https://www.youtube.com/embed/' + ytid + '?rel=0&wmode=transparent');\n //$(elem).attr('href', '/media/oembed?url=https%3A//www.youtube.com/watch%3Fv%3DS1gG6TwDilc%26ab_channel%3DLawrenceUniversity&max_width=0&max_height=0&hash=HQsi6xd5Q7LIiTgiM-W6P8tM86z8LplWDrWDGNXZEpI&blazy=1&autoplay=1')\n var w = ($(document).width() * .8) + 'px';\n var h = ($(document).height() * .8) + 'px';\n $(elem).colorbox({iframe:true, innerWidth:w, innerHeight:h, maxWidth:\"1800px\", maxHeight:\"900px\"});\n } else {\n //error\n }\n }\n });\n });\n*/\n\n /*\n // hack to fix this CRITICAL issue of needing a YouTube video open in a modal window\n */\n\n // This almost same script it scripts.js, but necesary here because it needs\n // to run AFTER the carousel content manipulation in this script in the\n // updateDetails() function. Different in what elements it keys on in the\n // ytmodal() function.\n\n function isThisMobile() {\n if (navigator.userAgent.match(/Android/i)\n || navigator.userAgent.match(/webOS/i)\n || navigator.userAgent.match(/iPhone/i)\n || navigator.userAgent.match(/iPad/i)\n || navigator.userAgent.match(/iPod/i)\n || navigator.userAgent.match(/BlackBerry/i)\n || navigator.userAgent.match(/Windows Phone/i)) {\n return true;\n }\n return false;\n }\n\n function ytfixbtn(elem) {\n\n var btnurl = $(elem).attr('href');\n\n if (btnurl.includes('youtube.com') || btnurl.includes('youtu.be')) {\n\n // get the youtube video id\n var ytid = 'dQw4w9WgXcQ';\n var regExp = /^.*(youtu\\.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|\\&v=)([^#\\&\\?]*).*/;\n var match = btnurl.match(regExp);\n\n if (match && match[2].length == 11) {\n ytid = match[2];\n $(elem).attr('href', 'https://www.youtube.com/embed/' + ytid + '?rel=0&wmode=transparent&autoplay=1');\n if(isThisMobile()) {\n $(elem).colorbox({iframe:true, width:\"90%\", height:\"75%\", scrolling:false, overlayClose:true, opacity:0.5, close:\"Close\", closeButton:false});\n } else {\n $(elem).colorbox({iframe:true, width:\"75%\", height:\"75%\", scrolling:false, overlayClose:true, opacity:0.5, close:\"Close\", closeButton:false});\n }\n } else {\n //error\n }\n }\n }\n\n function ytmodal() {\n\n /*\n if (alreadyRan) {\n //return;\n }\n alreadyRan = true;\n */\n\n //console.log('ytmodal slick_carousel.js');\n\n // carousel content desktop\n $('.slide-details a').each(function(i,elem) {\n ytfixbtn(elem);\n });\n\n // carousel content mobile\n $('.slick__slide a').each(function(i,elem) {\n ytfixbtn(elem);\n });\n\n // fix the colorbox overlay\n $('#cboxOverlay').css('height', $(document).height() + 'px');\n $('#cboxOverlay').css('width', $(document).width() + 'px');\n }\n\n // I couldn't get Slick UI options right so I gave up and decided to just do\n // it with bare metal JS.\n Drupal.behaviors.lu_slick_carousel = {\n attach: function(context, settings) {\n // Only run this bit if we actually have SlickLightbox on this page -\n // we may sometimes have Slick carousels without the Lightbox plugin.\n if (typeof $.fn.slickLightbox !== 'undefined') {\n $('.field--name-field-gallery-contents', context).slickLightbox({\n caption: 'caption'\n });\n }\n }\n };\n\n})(jQuery);\n"]}