Javascript

This is a markdown document.

/**
 * JavaScript

Required JS :

In Order :

//ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js
https://cdnjs.cloudflare.com/ajax/libs/gsap/1.20.3/TweenMax.min.js
https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.5/ScrollMagic.min.js
https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.5/plugins/animation.gsap.min.js
https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.5/plugins/debug.addIndicators.min.js

[[path]]/toolkit.js


PLEASE NOTE :
toolkit.js includes the following minified plugin sources as well as the custom code below :

fancybox.js 
slick.js
select2.js
stacktable.js
toolkit.js
mixitup.js
mixitup-multifilter.js
weather.js

 */
jQuery(document).ready(function($) {

    jQuery('body').css("opacity", "1");

    //External icon automatically added to new window links
    // $('a[target="_blank"]').each(function(){
    //   $(this).append('<img class="external" src="http://push10dev.com/pennlaw/assets/toolkit/images/external.png" />')
    // });


    //ADA Tab, when the body of the site is focused, the sub navigation will close if open
    $('#site a').focus(function(){
      $('.focused').removeClass('focused');
    });

  $('.mobile-link-active').on('click', function(e){
    e.preventDefault();
    $('.sidebar-container').toggleClass('mobile-open');
  })

  if (!$('.sidebar-container').length) {
    $('.main-page-content').addClass('non-sidebar');
  }

  if ($('.side-nav-container').length) {
    $('body').addClass('side-nav-active');

    $('.close-sidenav').on('click', function(e){
      e.preventDefault();
      $('body').addClass('hide-sidenav');
    });

    $('.open-sidebav').on('click', function (e) {
      e.preventDefault();
      $('body').removeClass('hide-sidenav');
    });
    if ($(window).width() < 651) {
        $('body').addClass('hide-sidenav');
      }
  }

    // Main Navigation Scroll effect
    if ($('h1').length) {
      var distance = $('h1').offset().top;
    } else {
      var distance = $('#site').offset().top;
    }

    $(window).scroll(function() {
      if ( $(window).scrollTop() >= distance ) {
          $('body').addClass('active-scroll');
      }
      if ( $(window).scrollTop() < distance ) {
          $('body').removeClass('active-scroll');
      }
    });

    //Scroll to Top
    $(".back-to-top").on('click', function() {
      $("html, body").animate({ scrollTop: 0 }, "slow");
      $('header').focus();
      return false;
    });

    //Mixitup
  if ($('.filter-items-container').length) {

    var $nomessage = $('#noItemsFoundMessage');

    var $filterSelect = $('#filter-select'),
      $container = $('#filterContainer');

    var mixer = mixitup($container, {
      selectors: {
        target: '.mix'
      },
      animation: {
        duration: 300
      },
      callbacks: {
        onMixEnd: function (state) {
          if (state.hasFailed) {
            $nomessage.addClass('active-nomessage');
          }
          else {
            $nomessage.removeClass('active-nomessage');
          }
        }
      }
    });

    $filterSelect.on('change', function () {
      mixer.filter(this.value);
    });
  }

  $('#search-scholarship').on('focus', function(){
    $(this).parent().addClass('push-active-label');
  });

  $('#search-scholarship').on('blur', function () {
    if ($(this).val() === '') {
      $(this).parent().removeClass('push-active-label');
    }
  });
    if ($("#temp").length) {
      getWeather(40.0343, -75.1213);
    }
    function getWeather(lat, long) {
      $.ajax({
        url:
          "https://fcc-weather-api.glitch.me/api/current?lat=" +
          lat +
          "&lon=" +
          long,
        type: "get",
        success: function (data) {
          var temp = data.main.temp,
            tempF = Math.round(temp * 9 / 5 + 32) + "&#8457;",
            status = data.weather[0].main + " / " + data.weather[0].description;
          $("#status").html(status);
          $("#temp").html(tempF);
        },
        error: function (error) {
          console.log(JSON.stringify(error));
        }
      });
    }

  if ($('.opportunities-wrap').length) {
    var $filterForm = $('#filter-select'),
      $nomessage = $('#noItemsFoundMessage'),
      $container = $('#opportunitiesContainer');

    var mixer = mixitup($container, {
      multifilter: {
        enable: true,
        parseOn: 'submit'
      },
      selectors: {
        target: '.opportunity-item'
      },
      animation: {
        duration: 300
      },
      callbacks: {
        onMixEnd: function (state) {
          if (state.hasFailed) {
            $nomessage.addClass('active-nomessage');
          }
          else {
            $nomessage.removeClass('active-nomessage');
          }
        }
      }
    });


    $('#opportunitiesForm').on('submit', function(){
      var val = $('#skills').val();
      var val2 = $('#topic').val();
      mixer.setFilterGroupSelectors('skills', val);
      mixer.setFilterGroupSelectors('topics', val2);
      mixer.parseFilterGroups();
      $('.results-container').addClass('active-results-container');
    });

  }

    //Mobile Navigation Functionality
    $('.mobile-menu-trigger').on('click', function(e){
      e.preventDefault();
      $('body').toggleClass('mobile-nav-active');
    });

    $('.mobile-search-trigger').on('click', function(e){
      e.preventDefault();
      $('body').toggleClass('mobile-search-active');
    });


    $('.mobile-search-form-container').find('input[type="text"]').focus(function() {
        $(this).prev('label').addClass('active-label');
    });

    $('.mobile-search-form-container').find('input[type="text"]').blur(function() {
        if ($(this).val() === '') {
            $(this).prev('label').removeClass('active-label');
        }
    });

    $(window).resize(function() {
      if ($(window).width() > 11101) {
         $('body').removeClass('mobile-nav-active');
         $('body').removeClass('mobile-search-active');
      }
    });

    $('nav.mobile-navigation a[aria-haspopup="true"]').each(function(){
      $(this).after('<button class="mobile-dropdown-button" aria-label="Sub Navigation Dropdown Toggle"></button>')
    });

    $(document).on('click', '.mobile-dropdown-button', function(){
      $(this).parent().toggleClass('focused');
    });


    //ADA Tab Focus fix for main navigation
    $('nav.main-navigation > ul > li > a').focus(function(){
        $('.focused').removeClass('focused');
        $(this).parent().addClass('focused');
    });

    $('nav.main-navigation > ul > li > a').on('click', function(e){
      if ($(window).width() < 1101) {
        e.preventDefault();
        $('.focused').removeClass('focused');
        $(this).parent().addClass('focused');
      }
    });

    //On Blur / Focus, add class to search label
    $('input[name="search"]').on('focus', function () {
      $(this).prev('label').addClass('push-active-label');
    });
    $('input[name="search"]').on('blur', function () {
      if ($(this).val() === '') {
        $(this).prev('label').removeClass('push-active-label');
      }
    });


    //Custom Select Dropdown
    $('select').each(function(){
      if ($(this).attr('multiple')) {
        $(this).select2({
          closeOnSelect: false,
          dropdownPosition: 'below',
          tags: false
        });
        $(this).on('change', function () {
          $('.filter-selection-container').show();
          var values = [];
          var selectionContainer = $(this).attr('data-selectContainer');
          $('.filter-select-item[data-id="' + selectionContainer+'"]').empty();
          var $selectedOptions = $(this).find('option:selected');
          $selectedOptions.each(function () {
            values.push($(this).text());
          });
          $.each(values, function (index, item) {
            $('.filter-select-item[data-id="' + selectionContainer + '"]').append('<div class="db-selection"><span class="selection-value">' + item + '</span> <a class="remove-selection" href="javascript:void(0);" data-selectTarget="' + selectionContainer+'" aria-label="Remove ' + item + ' Selection"><svg width="24px" height="23px" viewBox="0 0 24 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="square"> <g transform="translate(-624.000000, -577.000000)" stroke="#D21200" stroke-width="2"> <g transform="translate(635.930718, 588.430718) rotate(-315.000000) translate(-635.930718, -588.430718) translate(628.430718, 580.930718)"> <line x1="7.7879759" y1="0.651001085" x2="7.7879759" y2="14.2313582"></line> <line x1="7.65199383" y1="0.000904827274" x2="7.65199383" y2="14.6162894" transform="translate(7.651994, 7.308597) rotate(90.000000) translate(-7.651994, -7.308597) "></line> </g> </g> </g> </svg></a></div>');
          });
        });
      } else {
        $(this).select2({
          dropdownPosition: 'below'
        });
      }
    });

    $('.close-social-modal').on('click', function(e){
      e.preventDefault();
      $.fancybox.close();
    });

    $(document).on('click', '.remove-selection', function(e){
      e.preventDefault();
      var item = $(this).prev('.selection-value').text();
      var selectTargetAttr = $(this).attr('data-selectTarget');
      var $selectTarget = $('select[data-selectContainer="'+selectTargetAttr+'"]');
      $selectTarget.find('option[value="' + item + '"]').prop('selected', false);
      $selectTarget.trigger('change');
      
    });

    $('.filter-clear').on('click', function(e){
      e.preventDefault();
      // $('#multi-filter').val(null).trigger('change');
      $('#multi-filter').select2('data', null)
    });

    $('#topic').on('change', function () {
      var data = $('#topic').select2('data').map(function (elem) {
        return elem.text
      });
      var topics = data.join(', ');
      $('#topic-list').text(topics);
    });

  $('#skills').on('change', function () {
    var data = $('#skills').select2('data').map(function (elem) {
      return elem.text
    });
    var skills = data.join(', ');
    $('#skills-list').text(skills);
  });


  $('.clear-opportunity-filter').on('click', function(e){
    e.preventDefault();
    $('.results-container').removeClass('active-results-container');
    $('#skills').val(null).trigger('change');
    $('#topic').val(null).trigger('change');
    $('#skills-list').text('');
    $('#topic-list').text('');
    var val = $('#skills').val();
    var val2 = $('#topic').val();
    mixer.setFilterGroupSelectors('skills', val);
    mixer.setFilterGroupSelectors('topics', val2);
    mixer.parseFilterGroups();
  });

  //Weather
  // if($('#degrees').length) {
  //   var apiKey = "59ab0c99756a7a712f5dce170a12c198";
  //   Weather.setApiKey(apiKey);
  //   Weather.getCurrent("Philadelphia", function (current) {
  //     document.querySelector('#degrees').innerHTML = "<b>Temperature:</b> " + Math.round(current.temperature()) + " &deg;K or " +
  //       Math.round(Weather.kelvinToFahrenheit(current.temperature())) + " &deg;F or " +
  //       Math.round(Weather.kelvinToCelsius(current.temperature())) + " &deg;C" +
  //       "<br /><b>Current Conditions:</b> " + current.conditions();
  //   });

  // }


    $('.content-slider').slick({
      infinite: true,
      arrows: true,
      dots: false,
      slidesToShow: 1,
      slidesToScroll: 1
    });

  $('.page-header-slider').slick({
    infinite: true,
    arrows: true,
    dots: false,
    slidesToShow: 1,
    slidesToScroll: 1
  });

  $('.gallery-slider-wrap').slick({
    infinite: true,
    arrows: true,
    dots: false,
    slidesToShow: 3,
    slidesToScroll: 1,
    responsive: [
      {
        breakpoint: 651,
        settings: {
          slidesToShow: 1
        }
      }
    ]
  });
  
    //Slick Slider Default
    $('.slick').slick({
      adaptiveHeight: true
    });

    $('.image-slider-wrap').slick({
      infinite: true,
      arrows: true,
      dots: false,
      slidesToShow: 1,
      centerMode: true,
      slidesToScroll: 1
    });
    $('.video-slider-wrap').slick({
      infinite: true,
      arrows: true,
      dots: false,
      slidesToShow: 1,
      centerMode: true,
      slidesToScroll: 1
    });

  $('a.image-slider-nav').on('click', function (e) {
    e.preventDefault();
    var slideno = $(this).data('slide');
    $('.image-slider-wrap').slick('slickGoTo', slideno - 1);
  });


  $('#slider-year').on('change', function () {
    var slideno = $(this).val();
    $('.image-slider-wrap').slick('slickGoTo', slideno - 1);
  });


    //Form Tabs
    $('.form-tab').on('click', function(){
      var target = $(this).attr('data-id');
      $('.active-form-wrapper').removeClass('active-form-wrapper');
      $('.active-form-tab').removeClass('active-form-tab');
      $(this).addClass('active-form-tab');
      $('.form-wrapper[data-id="'+target+'"]').addClass('active-form-wrapper');
    });

    //Image Gallery with Nav Slider
    var imgSliderMain = $('.image-gallery-slider-main').slick({
      asNavFor: '.image-gallery-slider-nav',
      infinite: true,
      arrows:false,
      slidesToShow: 1,
      slidesToScroll: 1,
      fade:true,
      dots:false
    });

    var sliderNav = $('.image-gallery-slider-nav').slick({
      arrows: false,
      dots:false,
      slidesToShow: 4,
      slidesToScroll: 1,
      focusOnSelect: true,
      asNavFor: '.image-gallery-slider-main',
      responsive: [
        {
          breakpoint: 651,
          settings: {
            slidesToShow: 3
          }
        },
        {
          breakpoint: 480,
          settings: {
            slidesToShow: 2,
            slidesToScroll: 1
          }
        }
      ]
    });

  $(".image-gallery-next").on('click', function (e) {
    imgSliderMain.slick("slickNext");
    sliderNav.slick("slickNext");
  });

  $(".image-gallery-prev").on('click', function (e) {
    imgSliderMain.slick("slickPrev");
    sliderNav.slick("slickPrev");
  });

    //Mobile Slick Slider
    if ($(window).width() < 651) {
      $('.news-container').slick({
          autoplay:true,
          arrows:false
      });
      $('.accordion-trigger').remove();
      $('.accordion-triggers').slick({
        adaptiveHeight: true
      });
    }

  //Dynamic Accordion Functionality (adjusted height of content container)
  $('.dynamic-accordion').each(function () {
    var init_height = $(this).children('.active-accordion-content').height();
    $(this).css('padding-bottom', init_height);
  });
  
  if ($('.accordion-tabs-container').length) {
    $('.accordion-tabs-container').find('.tab-controls-wrapper .accordion-trigger-container:first-child, .tab-parent-wrapper .tab-parent-container:first-child').addClass('active');
  }
  
  $('body').on('click', '.accordion-drawer-link', function (e) {
      e.preventDefault();
      var identifier = $(this).attr('data-id');
      var target = $('.accordion-content[data-id="' + identifier + '"]');
      $(this).siblings().removeClass('active-accordion-trigger');
      $(this).addClass('active-accordion-trigger');
      target.siblings().removeClass('active-accordion-content');
      target.addClass('active-accordion-content');

      if (target.find('.iframe-container').length !== 0) {
        $('.iframe-container').html('');
        $('.active-video-section').removeClass('active-video-section');
      } else {
        var new_height = target.height();
        $(this).closest('.accordion-triggers').css('padding-bottom', new_height);
      }

    });

    
    // $('.accordion-trigger').on('click', function(e){
    //   e.preventDefault();
    //   var identifier = $(this).attr('data-id');
    //   var target = $('.accordion-content[data-id="'+identifier+'"]');
    //   $(this).siblings().removeClass('active-accordion-trigger');
    //   $(this).addClass('active-accordion-trigger');
    //   target.siblings().removeClass('active-accordion-content');
    //   target.addClass('active-accordion-content');

    //   if(target.find('.iframe-container').length !== 0) {
    //     $('.iframe-container').html('');
    //     $('.active-video-section').removeClass('active-video-section');
    //   } else {
    //     var new_height = target.height();
    //     $(this).closest('.accordion-triggers').css('padding-bottom', new_height);
    //   }
      
    // });

    // Responsive Tables
    $('table').stacktable({ myClass: 'small-only' });

    //Caption Limiter
    function getWords(str, amount) {
      return str.split(/\s+/).slice(0, amount).join(" ");
    }
    
    if ($('.caption').length) {
      $('.caption').each(function(){
        var words = $(this).text().split(' ');
        var string = $(this).text();
        if (words.length > 10) {
          var content = getWords(string, 10);

          $(this).wrapInner('<span class="hidden-content"></span>');
          $(this).append('<span class="preview-content">' + content + '</span><a href="javascript:void(0);" aria-label="Read More" class="more">... +</a>');
        }
      });
    }

  if ($('.expand-container').length) {
    $('.expand-container').each(function(){
      var words = $(this).children('p').text().split(' ');
      var string = $(this).children('p').html();
      if ($(this).hasClass('expand-container-small')) {
        var expandClass = 'expand-p';
      } else {
        var expandClass = 'large-intro-p';
      }
      if (words.length > 100) {
        var content = getWords(string, 100);

        $(this).wrapInner('<span class="hidden-content"></span>');
        $(this).append('<p class="' + expandClass +' preview-content">' + content + '</p><a href="javascript:void(0);" aria-label="Read More" class="more expand-add">Expand +</a>');
      }
    });
  }

  if ($('.opportunity-content').length) {
    $('.opportunity-content').each(function(){
      var shownContent = $(this).children('p:first-child');
      $(this).children('p').not(':first-child').wrapAll('<div class="hidden-opportunity-content" />');
    });
    $(document).on("click", ".opportunity-toggle", function () {
      $(this).parent().parent().toggleClass('full-opportunity').blur();
      if ($(this).parent().parent().hasClass('full-opportunity')) {
        $(this).html('Collapse <span>-</span>');
      } else {
        $(this).html('Expand <span>+</span>');
      }
    });
  }

  function moreClick(thisObj, parent, negativeText, positiveText) {
    console.log('working');
    thisObj.closest(parent).toggleClass('full-caption');
    if (thisObj.closest(parent).hasClass('full-caption')) {
      thisObj.text(negativeText);
    } else {
      thisObj.text(positiveText);
    }
  }
  $(document).on("click", ".more", function () {
    if ($(this).hasClass('expand-add')) {
      console.log('expand-add');
      moreClick($(this), '.expand-container', 'Collapse -', 'Expand +');
    } else {
      console.log('standard');
      moreClick($(this), 'figcaption', '... -', '... +');
    }

  });



    //Video Play Functionality

    $('.pause-trigger').on('click', function(){
      $(this).parent().toggleClass('paused');
      if ($(this).parent().hasClass('paused')) {
        $(this).prev('video').trigger('pause'); 
      } else {
        $(this).prev('video').trigger('play');
      }
    });

    // fallback: show controls if autoplay fails
    // (needed for Samsung Internet for Android, as of v6.4)

    window.addEventListener('load', async () => {
      let video = document.querySelector('video[muted][autoplay]');
      if(video) {
        try {
          await video.play();
        } catch (err) {
          video.controls = true;
        }
      }
    });


    function autoPlayVideo(vcode, target){
      "use strict";
      target.html('<iframe src="https://www.youtube.com/embed/'+vcode+'?autoplay=1&rel=0&wmode=transparent&start=1" frameborder="0" allowfullscreen wmode="Opaque"></iframe>');
    }

    function jumpVideo(vcode, target, timestamp){
      "use strict";
      target.html('<iframe src="https://www.youtube.com/embed/'+vcode+'?autoplay=1&rel=0&wmode=transparent&start='+timestamp+'" frameborder="0" allowfullscreen wmode="Opaque" class="active-iframe"></iframe>');
    }


    $('.video-play-overlay').on('click', function(e){
      e.preventDefault();
      var vcode = $(this).closest('.video-id-container').attr('data-video-id');
      var target = $(this).siblings('.iframe-container');
      autoPlayVideo(vcode, target);
      $(this).closest('.video-wrapper').addClass('active-video-section');
    });

    $('.video-triggers a').on('click', function(){
      var vcode = $(this).closest('.video-id-container').attr('data-video-id');
      var stamp = $(this).attr('data-timestamp');
      var targetID = $(this).closest('.video-id-container').attr('data-iframe');
      var target = $('.iframe-container[data-iframe="'+targetID+'"]');
      target.closest('.video-wrapper').addClass('active-video-section');
      jumpVideo(vcode, target, stamp);
    });

    //Page Accordion Functionality
    $('.accordion-drawer-link').on('click', function(e){
      e.preventDefault();
      $(this).closest('.accordion-item').toggleClass('active-accordion-item');
    })
  
    //Tabbed Accordion Functionality
  if ($('.tab-controls-wrapper').length) {
    $('a.accordion-tab-trigger[data-id="tab-1"]').parent().addClass('active');
    $('.tab-parent-container[data-id="tab-1"]').addClass('active');
  }
  $('.accordion-tab-trigger').on('click', function(e){
    e.preventDefault();
    $('.accordion-trigger-container').removeClass('active');
    $('.tab-parent-container').removeClass('active');
    $(this).parent().addClass('active');
    var target = $(this).attr('data-id');

    $('html, body').animate({
      scrollTop: $('.tab-parent-wrapper').offset().top
    }, 1000, function () {
        $('.tab-parent-wrapper').focus();
        if ($('.tab-parent-wrapper').is(":focus")) {
        return false;
      } else {
          $('.tab-parent-wrapper').attr('tabindex', '-1');
          $('.tab-parent-wrapper').focus();
      };
    });

    $('.tab-parent-container[data-id="'+target+'"]').addClass('active');
  });


    // ScrollMagic Scene Controls
    var controller = new ScrollMagic.Controller();

    // Scroll Magic SVG Drawing
    function pathPrepare ($el) {
      var lineLength = $el[0].getTotalLength();
      $el.css("stroke-dasharray", lineLength);
      $el.css("stroke-dashoffset", lineLength);
    }

    var $circle1 = $("path#circle-1");
    var $circle2 = $("path#circle-2");
    if ($circle1.length && $circle2.length) {
      pathPrepare($circle1);
      pathPrepare($circle2);
    }

    // Scroll Magic Scene
    var wipeAnimation = new TimelineMax()
        .fromTo(".header-cta", 1, { opacity:1}, { opacity:0 , ease:Power1.easeInOut }, 1)
        .add(TweenMax.to($circle1, 2, {strokeDashoffset: 0, ease:Linear.easeNone}), 2)
        .fromTo(".circle-content-1", 2, { opacity:0}, { opacity:1 }, 2)
        .add(TweenMax.to($circle2, 4, {strokeDashoffset: 0, ease:Linear.easeNone}), 4)
        .fromTo(".circle-content-1 h2", 4, { opacity:1}, { opacity:0 }, 4)
        .fromTo(".circle-content-1 h3", 4, { opacity:1}, { opacity:0 }, 4)
        .fromTo(".circle-content-2", 5, { opacity:0}, { opacity:1 }, 5);

    new ScrollMagic.Scene({
            triggerElement: "#scroll-trigger",
             tweenChanges: true,
            triggerHook: "onLeave",
            duration: "500%",
        })
        .setClassToggle("body", "scroll-init")
        .setPin("#scroll-trigger")
        .setTween(wipeAnimation)
        .addTo(controller);

});