|
1 | | - $(function() { |
2 | | - var $window = $(window) |
3 | | - , $top_link = $('#toplink') |
4 | | - , $body = $('body, html') |
5 | | - , offset = $('#code').offset().top |
6 | | - , hidePopover = function ($target) { |
7 | | - $target.data('popover-hover', false); |
8 | | - |
9 | | - setTimeout(function () { |
10 | | - if (!$target.data('popover-hover')) { |
11 | | - $target.popover('hide'); |
12 | | - } |
13 | | - }, 300); |
14 | | - }; |
15 | | - |
16 | | - $top_link.hide().click(function(event) { |
| 1 | +$(function () { |
| 2 | + var $window = $(window) |
| 3 | + , $top_link = $('#toplink') |
| 4 | + , $body = $('body, html') |
| 5 | + , offset = $('#code').offset().top; |
| 6 | + |
| 7 | + $top_link.hide().click(function (event) { |
17 | 8 | event.preventDefault(); |
18 | | - $body.animate({scrollTop:0}, 800); |
19 | | - }); |
| 9 | + $body.animate({scrollTop: 0}, 800); |
| 10 | + }); |
20 | 11 |
|
21 | | - $window.scroll(function() { |
22 | | - if($window.scrollTop() > offset) { |
23 | | - $top_link.fadeIn(); |
| 12 | + $window.scroll(function () { |
| 13 | + if ($window.scrollTop() > offset) { |
| 14 | + $top_link.fadeIn(); |
24 | 15 | } else { |
25 | | - $top_link.fadeOut(); |
| 16 | + $top_link.fadeOut(); |
26 | 17 | } |
27 | | - }).scroll(); |
28 | | - |
29 | | - $('.popin') |
30 | | - .popover({trigger: 'manual'}) |
31 | | - .on({ |
32 | | - 'mouseenter.popover': function () { |
33 | | - var $target = $(this); |
34 | | - var $container = $target.children().first(); |
35 | | - |
36 | | - $target.data('popover-hover', true); |
37 | | - |
38 | | - // popover already displayed |
39 | | - if ($target.next('.popover').length) { |
40 | | - return; |
41 | | - } |
42 | | - |
43 | | - // show the popover |
44 | | - $container.popover('show'); |
45 | | - |
46 | | - // register mouse events on the popover |
47 | | - $target.next('.popover:not(.popover-initialized)') |
48 | | - .on({ |
49 | | - 'mouseenter': function () { |
50 | | - $target.data('popover-hover', true); |
51 | | - }, |
52 | | - 'mouseleave': function () { |
53 | | - hidePopover($container); |
| 18 | + }); |
| 19 | + |
| 20 | + var $popovers = $('.popin > :first-child'); |
| 21 | + $('.popin').on({ |
| 22 | + 'click.popover': function (event) { |
| 23 | + event.stopPropagation(); |
| 24 | + |
| 25 | + var $container = $(this).children().first(); |
| 26 | + |
| 27 | + //Close all other popovers: |
| 28 | + $popovers.each(function () { |
| 29 | + var $current = $(this); |
| 30 | + if (!$current.is($container)) { |
| 31 | + $current.popover('hide'); |
54 | 32 | } |
55 | | - }) |
56 | | - .addClass('popover-initialized'); |
57 | | - }, |
58 | | - 'mouseleave.popover': function () { |
59 | | - hidePopover($(this).children().first()); |
60 | | - } |
61 | | - }); |
| 33 | + }); |
| 34 | + |
| 35 | + // Toggle this popover: |
| 36 | + $container.popover('toggle'); |
| 37 | + }, |
| 38 | + }); |
| 39 | + |
| 40 | + //Hide all popovers on outside click: |
| 41 | + $(document).click(function (event) { |
| 42 | + if ($(event.target).closest($('.popover')).length === 0) { |
| 43 | + $popovers.popover('hide'); |
| 44 | + } |
| 45 | + }); |
| 46 | + |
| 47 | + //Hide all popovers on escape: |
| 48 | + $(document).keyup(function (event) { |
| 49 | + if (event.key === 'Escape') { |
| 50 | + $popovers.popover('hide'); |
| 51 | + } |
62 | 52 | }); |
| 53 | +}); |
0 commit comments