| // jump modal |
| $(function() { |
| |
| var all; |
| var visible; |
| var active = -1; |
| var lastFilter = ''; |
| var $body = $('#x-jump-body'); |
| var $list = $('#x-jump-list'); |
| var $filter = $('#x-jump-filter'); |
| var $modal = $('#x-jump'); |
| |
| var update = function(filter) { |
| lastFilter = filter; |
| if (active >= 0) { |
| visible[active].e.removeClass('active'); |
| active = -1; |
| } |
| visible = [] |
| var re = new RegExp(filter.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"), "gi"); |
| all.forEach(function (id) { |
| id.e.detach(); |
| var text = id.text; |
| if (filter) { |
| text = id.text.replace(re, function (s) { return '<b>' + s + '</b>'; }); |
| if (text == id.text) { |
| return |
| } |
| } |
| id.e.html(text + ' ' + '<i>' + id.kind + '</i>'); |
| visible.push(id); |
| }); |
| $body.scrollTop(0); |
| if (visible.length > 0) { |
| active = 0; |
| visible[active].e.addClass('active'); |
| } |
| $list.append($.map(visible, function(identifier) { return identifier.e; })); |
| } |
| |
| var incrActive = function(delta) { |
| if (visible.length == 0) { |
| return |
| } |
| visible[active].e.removeClass('active'); |
| active += delta; |
| if (active < 0) { |
| active = 0; |
| $body.scrollTop(0); |
| } else if (active >= visible.length) { |
| active = visible.length - 1; |
| $body.scrollTop($body[0].scrollHeight - $body[0].clientHeight); |
| } else { |
| var $e = visible[active].e; |
| var t = $e.position().top; |
| var b = t + $e.outerHeight(false); |
| if (t <= 0) { |
| $body.scrollTop($body.scrollTop() + t); |
| } else if (b >= $body.outerHeight(false)) { |
| $body.scrollTop($body.scrollTop() + b - $body.outerHeight(false)); |
| } |
| } |
| visible[active].e.addClass('active'); |
| } |
| |
| $modal.on('show.bs.modal', function() { |
| if (!all) { |
| all = [] |
| var kinds = {'c': 'constant', 'v': 'variable', 'f': 'function', 't': 'type', 'd': 'field', 'm': 'method'} |
| $('*[id]').each(function() { |
| var e = $(this); |
| var id = e.attr('id'); |
| if (/^[^_][^-]*$/.test(id)) { |
| all.push({ |
| text: id, |
| ltext: id.toLowerCase(), |
| kind: kinds[e.closest('[data-kind]').attr('data-kind')], |
| e: $('<a/>', {href: '#' + id, 'class': 'list-group-item', tabindex: '-1'}) |
| }); |
| } |
| }); |
| all.sort(function (a, b) { |
| if (a.ltext > b.ltext) { return 1; } |
| if (a.ltext < b.ltext) { return -1; } |
| return 0 |
| }); |
| } |
| }).on('shown.bs.modal', function() { |
| update(''); |
| $filter.val('').focus(); |
| }).on('hide.bs.modal', function() { |
| $filter.blur(); |
| }).on('click', '.list-group-item', function() { |
| $modal.modal('hide'); |
| }); |
| |
| $filter.on('change keyup', function() { |
| var filter = $filter.val(); |
| if (filter.toUpperCase() != lastFilter.toUpperCase()) { |
| update(filter); |
| } |
| }).on('keydown', function(e) { |
| switch(e.which) { |
| case 38: // up |
| incrActive(-1); |
| e.preventDefault(); |
| break; |
| case 40: // down |
| incrActive(1); |
| e.preventDefault(); |
| break; |
| case 13: // enter |
| if (active >= 0) { |
| visible[active].e[0].click(); |
| } |
| break |
| } |
| }); |
| |
| }); |
| |
| $(function() { |
| |
| if ("onhashchange" in window) { |
| var highlightedSel = ""; |
| window.onhashchange = function() { |
| if (highlightedSel) { |
| $(highlightedSel).removeClass("highlighted"); |
| } |
| highlightedSel = window.location.hash.replace( /(:|\.|\[|\]|,)/g, "\\$1" ); |
| if (highlightedSel && (highlightedSel.indexOf("example-") == -1)) { |
| $(highlightedSel).addClass("highlighted"); |
| } |
| }; |
| window.onhashchange(); |
| } |
| |
| }); |
| |
| // keyboard shortcuts |
| $(function() { |
| var prevCh = null, prevTime = 0, modal = false; |
| |
| $('.modal').on({ |
| show: function() { modal = true; }, |
| hidden: function() { modal = false; } |
| }); |
| |
| $(document).on('keypress', function(e) { |
| var combo = e.timeStamp - prevTime <= 1000; |
| prevTime = 0; |
| |
| if (modal) { |
| return true; |
| } |
| |
| var t = e.target.tagName |
| if (t == 'INPUT' || |
| t == 'SELECT' || |
| t == 'TEXTAREA' ) { |
| return true; |
| } |
| |
| if (e.target.contentEditable && e.target.contentEditable == 'true') { |
| return true; |
| } |
| |
| if (e.metaKey || e.ctrlKey) { |
| return true; |
| } |
| |
| var ch = String.fromCharCode(e.which); |
| |
| if (combo) { |
| switch (prevCh + ch) { |
| case "gg": |
| $('html,body').animate({scrollTop: 0},'fast'); |
| return false; |
| case "gb": |
| $('html,body').animate({scrollTop: $(document).height()},'fast'); |
| return false; |
| case "gi": |
| if ($('#pkg-index').length > 0) { |
| $('html,body').animate({scrollTop: $("#pkg-index").offset().top},'fast'); |
| return false; |
| } |
| case "ge": |
| if ($('#pkg-examples').length > 0) { |
| $('html,body').animate({scrollTop: $("#pkg-examples").offset().top},'fast'); |
| return false; |
| } |
| } |
| } |
| |
| switch (ch) { |
| case "/": |
| $('#x-search-query').focus(); |
| return false; |
| case "?": |
| $('#x-shortcuts').modal(); |
| return false; |
| case "f": |
| if ($('#x-jump').length > 0) { |
| $('#x-jump').modal(); |
| return false; |
| } |
| } |
| |
| prevCh = ch |
| prevTime = e.timeStamp |
| return true; |
| }); |
| }); |
| |
| // misc |
| $(function() { |
| $('span.timeago').timeago(); |
| if (window.location.hash.substring(0, 9) == '#example-') { |
| var id = '#ex-' + window.location.hash.substring(9); |
| $(id).addClass('in').removeClass('collapse').height('auto'); |
| } |
| |
| $(document).on("click", "input.click-select", function(e) { |
| $(e.target).select(); |
| }); |
| |
| $('body').scrollspy({ |
| target: '.gddo-sidebar', |
| offset: 10 |
| }); |
| |
| const redirectToastEl = document.querySelector('.js-redirectToast'); |
| if (!redirectToastEl) { |
| return; // element may not even be on the page |
| } |
| const redirectToastDismissEl = redirectToastEl.querySelector('.js-redirectToastDismiss'); |
| redirectToastDismissEl.addEventListener('click', e => { |
| e.preventDefault(); |
| redirectToastEl.style.display = 'none'; |
| }); |
| }); |