diff --git a/copyparty/web/baguettebox.js b/copyparty/web/baguettebox.js
index 0d18aa2a..d7c505b5 100644
--- a/copyparty/web/baguettebox.js
+++ b/copyparty/web/baguettebox.js
@@ -22,8 +22,9 @@ window.baguetteBox = (function () {
afterHide: null,
duringHide: null,
onChange: null,
+ readDirRtl: false,
},
- overlay, slider, btnPrev, btnNext, btnHelp, btnAnim, btnRotL, btnRotR, btnSel, btnFull, btnVmode, btnClose,
+ overlay, slider, btnPrev, btnNext, btnHelp, btnAnim, btnRotL, btnRotR, btnSel, btnFull, btnVmode, btnReadDir, btnClose,
currentGallery = [],
currentIndex = 0,
isOverlayVisible = false,
@@ -73,10 +74,10 @@ window.baguetteBox = (function () {
var touchEvent = e.touches[0] || e.changedTouches[0];
if (touchEvent.pageX - touch.startX > 40) {
touchFlag = true;
- showPreviousImage();
+ showLeftImage();
} else if (touchEvent.pageX - touch.startX < -40) {
touchFlag = true;
- showNextImage();
+ showRightImage();
} else if (touch.startY - touchEvent.pageY > 100) {
hideOverlay();
}
@@ -114,9 +115,9 @@ window.baguetteBox = (function () {
scrollTimer = Date.now();
if (d > 0)
- showNextImage();
+ showNextImageIgnoreReadDir();
else
- showPreviousImage();
+ showPreviousImageIgnoreReadDir();
};
var trapFocusInsideOverlay = function (e) {
@@ -212,6 +213,7 @@ window.baguetteBox = (function () {
'
' +
'' +
'' +
+ '' +
'' +
'' +
'' +
@@ -229,6 +231,7 @@ window.baguetteBox = (function () {
btnNext = ebi('bbox-next');
btnHelp = ebi('bbox-help');
btnAnim = ebi('bbox-anim');
+ btnReadDir = ebi('bbox-readdir')
btnRotL = ebi('bbox-rotl');
btnRotR = ebi('bbox-rotr');
btnSel = ebi('bbox-tsel');
@@ -301,9 +304,9 @@ window.baguetteBox = (function () {
else if (e.shiftKey && kl != "r")
return;
else if (k == "ArrowLeft" || k == "Left" || kl == "j")
- showPreviousImage();
+ showLeftImage();
else if (k == "ArrowRight" || k == "Right" || kl == "l")
- showNextImage();
+ showRightImage();
else if (k == "Escape" || k == "Esc")
hideOverlay();
else if (k == "Home")
@@ -353,6 +356,26 @@ window.baguetteBox = (function () {
tt.show.call(this);
}
+ function toggleReadDir() {
+ var o = options;
+ var next;
+ if (options.readDirRtl) {
+ next = "ltr"
+ } else {
+ next = "rtl"
+ }
+ swrite('greaddir', next);
+ slider.className = "no-transition";
+ options = {};
+ setOptions(o);
+ updateOffset(true);
+ window.getComputedStyle(slider).opacity; // force a restyle
+ slider.className = "";
+
+ if (tt.en)
+ tt.show.call(this);
+ }
+
function setVmode() {
var v = vid();
ebi('bbox-vmode').style.display = v ? '' : 'none';
@@ -492,12 +515,13 @@ window.baguetteBox = (function () {
bind(document, 'fullscreenchange', onFSC);
bind(overlay, 'click', overlayClickHandler);
bind(overlay, 'wheel', overlayWheelHandler);
- bind(btnPrev, 'click', showPreviousImage);
- bind(btnNext, 'click', showNextImage);
+ bind(btnPrev, 'click', showLeftImage);
+ bind(btnNext, 'click', showRightImage);
bind(btnClose, 'click', hideOverlay);
bind(btnVmode, 'click', tglVmode);
bind(btnHelp, 'click', halp);
bind(btnAnim, 'click', anim);
+ bind(btnReadDir, 'click', toggleReadDir);
bind(btnRotL, 'click', rotl);
bind(btnRotR, 'click', rotr);
bind(btnSel, 'click', tglsel);
@@ -515,12 +539,13 @@ window.baguetteBox = (function () {
unbind(document, 'fullscreenchange', onFSC);
unbind(overlay, 'click', overlayClickHandler);
unbind(overlay, 'wheel', overlayWheelHandler);
- unbind(btnPrev, 'click', showPreviousImage);
- unbind(btnNext, 'click', showNextImage);
+ unbind(btnPrev, 'click', showLeftImage);
+ unbind(btnNext, 'click', showRightImage);
unbind(btnClose, 'click', hideOverlay);
unbind(btnVmode, 'click', tglVmode);
unbind(btnHelp, 'click', halp);
unbind(btnAnim, 'click', anim);
+ unbind(btnReadDir, 'click', toggleReadDir);
unbind(btnRotL, 'click', rotl);
unbind(btnRotR, 'click', rotr);
unbind(btnSel, 'click', tglsel);
@@ -571,6 +596,21 @@ window.baguetteBox = (function () {
btnAnim.textContent = ['⇄', '⮺', '⚡'][anims.indexOf(an)];
btnAnim.setAttribute('tt', 'animation: ' + an);
+ options.readDirRtl = sread('greaddir') === "rtl";
+ var msg;
+ if (options.readDirRtl) {
+ btnReadDir.innerText = "rtl";
+ msg = "browse from right to left";
+ slider.style.flexDirection = "row-reverse";
+ } else {
+ btnReadDir.innerText = "ltr";
+ msg = "browse from left to right";
+ slider.style.flexDirection = "row";
+ }
+ btnReadDir.setAttribute("tt", msg);
+ btnReadDir.setAttribute("aria-label", msg);
+
+
slider.style.transition = (options.animation === 'fadeIn' ? 'opacity .3s ease' :
options.animation === 'slideIn' ? '' : 'none');
@@ -815,12 +855,24 @@ window.baguetteBox = (function () {
show_buttons(this.paused ? 1 : 0);
}
- function showNextImage(e) {
+ function showRightImage(e) {
+ ev(e);
+ var dir = options.readDirRtl ? -1 : 1;
+ return show(currentIndex + dir);
+ }
+
+ function showLeftImage(e) {
+ ev(e);
+ var dir = options.readDirRtl ? 1 : -1;
+ return show(currentIndex + dir);
+ }
+
+ function showNextImageIgnoreReadDir(e) {
ev(e);
return show(currentIndex + 1);
}
- function showPreviousImage(e) {
+ function showPreviousImageIgnoreReadDir(e) {
ev(e);
return show(currentIndex - 1);
}
@@ -848,10 +900,10 @@ window.baguetteBox = (function () {
}
if (index < 0)
- return bounceAnimation('left');
+ return bounceAnimation(options.readDirRtl ? 'right' : 'left');
if (index >= imagesElements.length)
- return bounceAnimation('right');
+ return bounceAnimation(options.readDirRtl ? 'left' : 'right');
try {
vid().pause();
@@ -1005,7 +1057,7 @@ window.baguetteBox = (function () {
function vidEnd() {
if (this == vid() && vnext)
- showNextImage();
+ showNextImageIgnoreReadDir();
}
function setloop(side) {
@@ -1066,11 +1118,12 @@ window.baguetteBox = (function () {
return false;
}
- function updateOffset() {
- var offset = -currentIndex * 100 + '%',
+ function updateOffset(noTransition) {
+ var dir = options.readDirRtl ? 1 : -1;
+ var offset = dir * currentIndex * 100 + '%',
xform = slider.style.perspective !== undefined;
- if (options.animation === 'fadeIn') {
+ if (options.animation === 'fadeIn' && !noTransition) {
slider.style.opacity = 0;
setTimeout(function () {
xform ?
@@ -1116,10 +1169,10 @@ window.baguetteBox = (function () {
fx = x / (rc.right - rc.left);
if (fx < 0.3)
- return showPreviousImage();
+ return showLeftImage();
if (fx > 0.7)
- return showNextImage();
+ return showRightImage();
show_buttons('t');
@@ -1175,8 +1228,8 @@ window.baguetteBox = (function () {
return {
run: run,
show: show,
- showNext: showNextImage,
- showPrevious: showPreviousImage,
+ showNext: showRightImage,
+ showPrevious: showLeftImage,
relseek: relseek,
urltime: urltime,
playpause: playpause,
diff --git a/copyparty/web/browser.css b/copyparty/web/browser.css
index 4023b221..123508a3 100644
--- a/copyparty/web/browser.css
+++ b/copyparty/web/browser.css
@@ -2140,6 +2140,7 @@ html.noscroll .sbar::-webkit-scrollbar {
width: 100%;
height: 100%;
text-align: center;
+ flex: none;
}
.full-image figure {
display: inline;
@@ -2203,6 +2204,7 @@ html.y #bbox-overlay figcaption a {
margin-right: -1px;
}
#bbox-slider {
+ display: flex;
position: fixed;
left: 0;
top: 0;
@@ -2334,6 +2336,9 @@ html.y #bbox-overlay figcaption a {
0%, 100% {transform: scale(0)}
50% {transform: scale(1)}
}
+.no-transition {
+ transition: none !important;
+}