Skip to content

Commit b5382f4

Browse files
Merge pull request #474 from stgn/sidebar-swipe
Basic swipe gesture functionality for opening/closing sidebar
2 parents 9480ac0 + 6e4d248 commit b5382f4

File tree

1 file changed

+44
-11
lines changed

1 file changed

+44
-11
lines changed

src/theme/book.js

Lines changed: 44 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,33 @@ $( document ).ready(function() {
7474
sidebar.scrollTop(activeSection.offset().top);
7575
}
7676

77+
var firstContact = null;
78+
79+
$(this).on('touchstart', function(e) {
80+
firstContact = {
81+
x: e.originalEvent.touches[0].clientX,
82+
time: Date.now()
83+
};
84+
});
85+
86+
$(this).on('touchmove', function(e) {
87+
if (!firstContact)
88+
return;
89+
90+
var curX = e.originalEvent.touches[0].clientX;
91+
var xDiff = curX - firstContact.x,
92+
tDiff = Date.now() - firstContact.time;
93+
94+
if (tDiff < 250 && Math.abs(xDiff) >= 150) {
95+
if (xDiff >= 0 && firstContact.x < Math.min(document.body.clientWidth * 0.25, 300))
96+
showSidebar();
97+
else if (xDiff < 0 && curX < 300)
98+
hideSidebar();
99+
100+
firstContact = null;
101+
}
102+
});
103+
77104

78105
// Theme button
79106
$("#theme-toggle").click(function(){
@@ -343,23 +370,29 @@ function showTooltip(elem, msg) {
343370

344371
function sidebarToggle() {
345372
var html = $("html");
346-
if ( html.hasClass("sidebar-hidden") ) {
347-
html.removeClass("sidebar-hidden").addClass("sidebar-visible");
348-
store.set('mdbook-sidebar', 'visible');
349-
} else if ( html.hasClass("sidebar-visible") ) {
350-
html.removeClass("sidebar-visible").addClass("sidebar-hidden");
351-
store.set('mdbook-sidebar', 'hidden');
373+
if (html.hasClass("sidebar-hidden")) {
374+
showSidebar();
375+
} else if (html.hasClass("sidebar-visible")) {
376+
hideSidebar();
352377
} else {
353-
if($("#sidebar").position().left === 0){
354-
html.addClass("sidebar-hidden");
355-
store.set('mdbook-sidebar', 'hidden');
378+
if ($("#sidebar").position().left === 0){
379+
hideSidebar();
356380
} else {
357-
html.addClass("sidebar-visible");
358-
store.set('mdbook-sidebar', 'visible');
381+
showSidebar();
359382
}
360383
}
361384
}
362385

386+
function showSidebar() {
387+
$('html').removeClass('sidebar-hidden').addClass('sidebar-visible');
388+
store.set('mdbook-sidebar', 'visible');
389+
}
390+
391+
function hideSidebar() {
392+
$('html').removeClass('sidebar-visible').addClass('sidebar-hidden');
393+
store.set('mdbook-sidebar', 'hidden');
394+
}
395+
363396
function run_rust_code(code_block) {
364397
var result_block = code_block.find(".result");
365398
if(result_block.length === 0) {

0 commit comments

Comments
 (0)