// 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 '' + s + ''; }); if (text == id.text) { return } } id.e.html(text + ' ' + '' + id.kind + ''); 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: $('', {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 }); });