diff --git a/misc/www/js/site.js b/misc/www/js/site.js new file mode 100644 index 0000000000..93160a641e --- /dev/null +++ b/misc/www/js/site.js @@ -0,0 +1,94 @@ +$(document).ready(function() { + + // Variables + var $codeSnippets = $('.code-example-body'), + $nav = $('.navbar'), + $body = $('body'), + $window = $(window), + $popoverLink = $('[data-popover]'), + navOffsetTop = $nav.offset().top, + $document = $(document), + entityMap = { + "&": "&", + "<": "<", + ">": ">", + '"': '"', + "'": ''', + "/": '/' + } + + function init() { + $window.on('scroll', onScroll) + $window.on('resize', resize) + $popoverLink.on('click', openPopover) + $document.on('click', closePopover) + $('a[href^="#"]').on('click', smoothScroll) + buildSnippets(); + } + + function smoothScroll(e) { + e.preventDefault(); + $(document).off("scroll"); + var target = this.hash, + menu = target; + $target = $(target); + $('html, body').stop().animate({ + 'scrollTop': $target.offset().top-40 + }, 0, 'swing', function () { + window.location.hash = target; + $(document).on("scroll", onScroll); + }); + } + + function openPopover(e) { + e.preventDefault() + closePopover(); + var popover = $($(this).data('popover')); + popover.toggleClass('open') + e.stopImmediatePropagation(); + } + + function closePopover(e) { + if($('.popover.open').length > 0) { + $('.popover').removeClass('open') + } + } + + $("#button").click(function() { + $('html, body').animate({ + scrollTop: $("#elementtoScrollToID").offset().top + }, 2000); + }); + + function resize() { + $body.removeClass('has-docked-nav') + navOffsetTop = $nav.offset().top + onScroll() + } + + function onScroll() { + if(navOffsetTop < $window.scrollTop() && !$body.hasClass('has-docked-nav')) { + $body.addClass('has-docked-nav') + } + if(navOffsetTop > $window.scrollTop() && $body.hasClass('has-docked-nav')) { + $body.removeClass('has-docked-nav') + } + } + + function escapeHtml(string) { + return String(string).replace(/[&<>"'\/]/g, function (s) { + return entityMap[s]; + }); + } + + // function buildSnippets() { + // $codeSnippets.each(function() { + // var newContent = escapeHtml($(this).html()) + // $(this).html(newContent) + // }) + // } + + + init(); + + }); \ No newline at end of file