Team:Nevada/uikit.js
From 2014.igem.org
/*! UIkit 2.3.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /*jshint new: true */ /*global $, jQuery, document, window, navigator*/
(function ($, doc, global) {
"use strict";
var UI = $.UIkit || {}, $html = $("html"), $win = $(window);
if (UI.fn) { return; }
UI.fn = function (command, options) {
var args = arguments, cmd = command.match(/^([a-z\-]+)(?:\.([a-z]+))?/i), component = cmd[1], method = cmd[2];
if (!UI[component]) { $.error("UIkit component [" + component + "] does not exist."); return this; }
return this.each(function () { var $this = $(this), data = $this.data(component); if (!data) { $this.data(component, (data = new UI[component](this, method ? undefined : options))); } if (method) { data[method].apply(data, Array.prototype.slice.call(args, 1)); } }); };
UI.support = {};
UI.support.requestAnimationFrame = global.requestAnimationFrame || global.webkitRequestAnimationFrame || global.mozRequestAnimationFrame || global.msRequestAnimationFrame || global.oRequestAnimationFrame || function (callback) { global.setTimeout(callback, 1000 / 60); }; UI.support.touch = ( ('ontouchstart' in window && navigator.userAgent.toLowerCase().match(/mobile|tablet/)) || (global.DocumentTouch && document instanceof global.DocumentTouch) || (global.navigator['msPointerEnabled'] && global.navigator['msMaxTouchPoints'] > 0) || //IE 10 (global.navigator['pointerEnabled'] && global.navigator['maxTouchPoints'] > 0) || //IE >=11 false ); UI.support.mutationobserver = (global.MutationObserver || global.WebKitMutationObserver || global.MozMutationObserver || null);
UI.Utils = {};
UI.Utils.debounce = function (func, wait, immediate) { var timeout; return function () { var context, later; var context = this, args = arguments; var later = function() { timeout = null; if (!immediate) func.apply(context, args); }; var callNow = immediate && !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) func.apply(context, args); }; };
UI.Utils.isInView = function(element, options) {
var $element = $(element);
if (!$element.is(':visible')) { return false; }
var window_left = $win.scrollLeft(), window_top = $win.scrollTop(), offset = $element.offset(), left = offset.left, top = offset.top;
options = $.extend({topoffset:0, leftoffset:0}, options);
if (top + $element.height() >= window_top && top - options.topoffset <= window_top + $win.height() && left + $element.width() >= window_left && left - options.leftoffset <= window_left + $win.width()) { return true; } else { return false; } };
UI.Utils.options = function(string) {
if ($.isPlainObject(string)) return string;
var start = (string ? string.indexOf("{") : -1), options = {};
if (start != -1) { try { options = (new Function("", "var json = " + string.substr(start) + "; return JSON.parse(JSON.stringify(json));"))(); } catch (e) {} }
return options; };
$.UIkit = UI; $.fn.uk = UI.fn;
$(function(){
$(doc).trigger("uk-domready");
// Check for dom modifications if(!UI.support.mutationobserver) return;
var observer = new UI.support.mutationobserver(UI.Utils.debounce(function(mutations) { $(doc).trigger("uk-domready"); }, 300));
// pass in the target node, as well as the observer options observer.observe(document.body, { childList: true, subtree: true });
// remove css hover rules for touch devices if (UI.support.touch) { //UI.Utils.removeCssRules(/\.uk-(?!navbar).*:hover/); } });
})(jQuery, document, window);
(function($, UI) {
"use strict";
var $win = $(window), scrollspies = [], checkScrollSpy = function() { for(var i=0; i < scrollspies.length; i++) { UI.support.requestAnimationFrame.apply(window, [scrollspies[i].check]); } },
ScrollSpy = function(element, options) {
var $element = $(element);
if($element.data("scrollspy")) return;
this.options = $.extend({}, ScrollSpy.defaults, options); this.element = $(element);
var $this = this, idle, inviewstate, initinview, fn = function(){
var inview = UI.Utils.isInView($this.element, $this.options);
if(inview && !inviewstate) {
if(idle) clearTimeout(idle);
if(!initinview) { $this.element.addClass($this.options.initcls); $this.offset = $this.element.offset(); initinview = true;
$this.element.trigger("uk-scrollspy-init"); }
idle = setTimeout(function(){
if(inview) { $this.element.addClass("uk-scrollspy-inview").addClass($this.options.cls).width(); }
}, $this.options.delay);
inviewstate = true; $this.element.trigger("uk.scrollspy.inview"); }
if (!inview && inviewstate && $this.options.repeat) { $this.element.removeClass("uk-scrollspy-inview").removeClass($this.options.cls); inviewstate = false;
$this.element.trigger("uk.scrollspy.outview"); } };
fn();
this.element.data("scrollspy", this);
this.check = fn; scrollspies.push(this); };
ScrollSpy.defaults = { "cls" : "uk-scrollspy-inview", "initcls" : "uk-scrollspy-init-inview", "topoffset" : 0, "leftoffset" : 0, "repeat" : false, "delay" : 0 };
UI["scrollspy"] = ScrollSpy;
var fnCheck = function(){ checkScrollSpy(); };
// listen to scroll and resize $win.on("scroll", fnCheck).on("resize orientationchange", UI.Utils.debounce(fnCheck, 50));
// init code $(document).on("uk-domready", function(e) { $("[data-uk-scrollspy]").each(function() {
var element = $(this);
if (!element.data("scrollspy")) { var obj = new ScrollSpy(element, UI.Utils.options(element.attr("data-uk-scrollspy"))); } });
});
})(jQuery, jQuery.UIkit);