app/scripts/epfl.coffee

EPFL plugin

Custom adjustments for EPFL

requires: jQuery or Zepto DOM library author: Julien Ramboz version: 1.0

AMD loader

Try loading as AMD module or fall back to default loading

((plugin) -> if typeof define is "function" and define.amd define ["jslib", "loader", "a11y", "globalnav", "header", "share", "lazyload"], plugin else plugin @$ ).call this, epfl = ($) -> "use strict"

Add parent class to parent items in the navigation

updateNav = () -> $(".nav-block .nav-item").removeClass "nav-item-parent" $(".nav-block .nav-item-active").parents(".nav-item") .addClass "nav-item-parent" $(".localnav [role='tree']").each () -> $active = $(this).find ".nav-item-active" $(this).epfl_tree "selectItem", $active $active.children("[aria-controls][aria-expanded='false']") .epfl_collapse "show" $(window).on "hashchange", (e) -> updateNav() $(updateNav)

Add delayed hover support to main menu

if not $("html").hasClass("lt-ie8") showMenu = undefined hideMenu = undefined show = (e) -> clearTimeout hideMenu $(".mainnav .nav > .nav-list > .nav-item") .children("[aria-controls][aria-expanded='true']") .eq(0).epfl_collapse("hide", e) $(this) .children("[aria-controls][aria-expanded='false']") .eq(0).epfl_collapse("show", e) hide = (e) -> $(this) .children("[aria-controls][aria-expanded='true']") .eq(0).epfl_collapse("hide", e) $(document) .on("mouseenter", ".mainnav .nav > .nav-list > .nav-item", (e) -> return if $(document).width() <= 736 clearTimeout showMenu target = this ev = $.extend {}, e showMenu = setTimeout( (() -> show.apply(target, [ev])), 150)) .on("mouseleave", ".mainnav .nav > .nav-list > .nav-item", (e) -> return if $(document).width() <= 736 clearTimeout showMenu clearTimeout hideMenu target = this ev = $.extend {}, e hideMenu = setTimeout( (() -> hide.apply(target, [ev])), 300)) $(document).on 'click', '.mainnav > [aria-controls]', (e) -> return if $(document).width() > 736 if this.getAttribute('aria-expanded') is 'true' e.stopPropagation() $menubar = $ '.mainnav [role="menubar"]' activeItemId = $menubar.attr 'aria-activedescendant' $activeItem if activeItemId $activeItem = $ '#' + activeItemId else $activeItem = $ '.mainnav .nav-item-active' $parentMenus = $($activeItem.parents('[role="menu"]').get().reverse()) $parentMenus.each () -> _.getInstance($('[aria-controls="' + this.id + '"]'), ['collapse']) .show() $(document).on "click", ".mainnav .nav > .nav-list > .nav-item > .nav-link", (e) -> if $("html").hasClass("lt-ie8") and e.target.getAttribute "aria-controls" link = $(e.target).next("[role=\"menu\"]").find(".nav-link").get(0) window.location = link.getAttribute "href" if link $