|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- // 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
- });
- });
|