annotate libervia/pages/_browser/slideshow.py @ 1466:cff720e26089

pages (blog/view): activate pagination when a single item is shown: `previous_page_url` and `next_page_url` are set when `item_id` is used. For now, they are both activated even if there is no item before or after, as it would request to make extra request to check it. This may be improved in 0.9 by using internal cache. fix 399
author Goffi <goffi@goffi.org>
date Thu, 30 Sep 2021 17:04:22 +0200
parents ff5005783443
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1310
9e356f8eb62c browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents: 1309
diff changeset
1 from browser import document, window, html, timer, DOMNode
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
2 from js_modules.swiper import Swiper
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
3 from template import Template
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
4
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
5
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
6 class SlideShow:
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
7
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
8 def __init__(self):
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
9 self.swiper = None
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
10 slideshow_tpl = Template('photo/slideshow.html')
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
11 self.slideshow_elt = slideshow_tpl.get_elt()
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
12 self.comments_count_elt = self.slideshow_elt.select_one('.comments__count')
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
13 self.wrapper = self.slideshow_elt.select_one(".swiper-wrapper")
1309
9344ca3b21a6 browser (slideshow): fixed scrolling issue with comment panel:
Goffi <goffi@goffi.org>
parents: 1307
diff changeset
14 self.hidden_elts = {}
1310
9e356f8eb62c browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents: 1309
diff changeset
15 self.control_hidden = False
9e356f8eb62c browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents: 1309
diff changeset
16 self.click_timer = None
1342
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
17 self._class_to_remove = set()
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
18 self._exit_callback = None
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
19
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
20 @property
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
21 def current_slide(self):
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
22 if self.swiper is None:
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
23 return None
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
24 try:
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
25 return DOMNode(self.swiper.slides[self.swiper.realIndex])
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
26 # getting missing item in JS arrays returns KeyError
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
27 except KeyError:
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
28 return None
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
29
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
30 @property
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
31 def current_item(self):
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
32 """item attached to the current slide, if any"""
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
33 current = self.current_slide
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
34 if current is None:
1342
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
35 return None
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
36 try:
1357
dbd573b0bc9c browser: updated code to work with new Brython 3.8.10:
Goffi <goffi@goffi.org>
parents: 1342
diff changeset
37 return current._item
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
38 except AttributeError:
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
39 return None
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
40
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
41 @property
1342
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
42 def current_options(self):
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
43 """options attached to the current slide, if any"""
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
44 current = self.current_slide
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
45 if current is None:
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
46 return None
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
47 try:
1357
dbd573b0bc9c browser: updated code to work with new Brython 3.8.10:
Goffi <goffi@goffi.org>
parents: 1342
diff changeset
48 return current._options
1342
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
49 except AttributeError:
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
50 return None
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
51
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
52 @property
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
53 def index(self):
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
54 if self.swiper is None:
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
55 return None
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
56 return self.swiper.realIndex
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
57
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
58 @index.setter
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
59 def index(self, idx):
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
60 if self.swiper is not None:
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
61 self.swiper.slideTo(idx, 0)
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
62
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
63 def attach(self):
1309
9344ca3b21a6 browser (slideshow): fixed scrolling issue with comment panel:
Goffi <goffi@goffi.org>
parents: 1307
diff changeset
64 # we hide other elts to avoid scrolling issues
9344ca3b21a6 browser (slideshow): fixed scrolling issue with comment panel:
Goffi <goffi@goffi.org>
parents: 1307
diff changeset
65 for elt in document.body.children:
1408
ff5005783443 browser (slideshow): work around Brython's `children` wrong behavour:
Goffi <goffi@goffi.org>
parents: 1358
diff changeset
66 try:
ff5005783443 browser (slideshow): work around Brython's `children` wrong behavour:
Goffi <goffi@goffi.org>
parents: 1358
diff changeset
67 self.hidden_elts[elt] = elt.style.display
ff5005783443 browser (slideshow): work around Brython's `children` wrong behavour:
Goffi <goffi@goffi.org>
parents: 1358
diff changeset
68 except AttributeError:
ff5005783443 browser (slideshow): work around Brython's `children` wrong behavour:
Goffi <goffi@goffi.org>
parents: 1358
diff changeset
69 pass
ff5005783443 browser (slideshow): work around Brython's `children` wrong behavour:
Goffi <goffi@goffi.org>
parents: 1358
diff changeset
70 # FIXME: this is a workaround needed because Brython's children method
ff5005783443 browser (slideshow): work around Brython's `children` wrong behavour:
Goffi <goffi@goffi.org>
parents: 1358
diff changeset
71 # is returning all nodes,
ff5005783443 browser (slideshow): work around Brython's `children` wrong behavour:
Goffi <goffi@goffi.org>
parents: 1358
diff changeset
72 # cf. https://github.com/brython-dev/brython/issues/1657
ff5005783443 browser (slideshow): work around Brython's `children` wrong behavour:
Goffi <goffi@goffi.org>
parents: 1358
diff changeset
73 # to be removed when Brython is fixed.
ff5005783443 browser (slideshow): work around Brython's `children` wrong behavour:
Goffi <goffi@goffi.org>
parents: 1358
diff changeset
74 else:
ff5005783443 browser (slideshow): work around Brython's `children` wrong behavour:
Goffi <goffi@goffi.org>
parents: 1358
diff changeset
75 elt.style.display = "none"
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
76 document.body <= self.slideshow_elt
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
77 self.swiper = Swiper.new(
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
78 ".swiper-container",
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
79 {
1340
d5f6793dc17c browser (slideshow): use non zero threshold to avoid accidental swipe
Goffi <goffi@goffi.org>
parents: 1334
diff changeset
80 # default 0 value results in lot of accidental swipes, notably when media
d5f6793dc17c browser (slideshow): use non zero threshold to avoid accidental swipe
Goffi <goffi@goffi.org>
parents: 1334
diff changeset
81 # player is used
d5f6793dc17c browser (slideshow): use non zero threshold to avoid accidental swipe
Goffi <goffi@goffi.org>
parents: 1334
diff changeset
82 "threshold": 10,
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
83 "pagination": {
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
84 "el": ".swiper-pagination",
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
85 },
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
86 "navigation": {
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
87 "nextEl": ".swiper-button-next",
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
88 "prevEl": ".swiper-button-prev",
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
89 },
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
90 "scrollbar": {
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
91 "el": ".swiper-scrollbar",
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
92 },
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
93 "grabCursor": True,
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
94 "keyboard": {
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
95 "enabled": True,
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
96 "onlyInViewport": False,
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
97 },
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
98 "mousewheel": True,
1312
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
99 "zoom": {
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
100 "maxRatio": 15,
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
101 "toggle": False,
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
102 },
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
103 }
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
104 )
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
105 window.addEventListener("keydown", self.on_key_down, True)
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
106 self.slideshow_elt.select_one(".click_to_close").bind("click", self.on_close)
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
107 self.slideshow_elt.select_one(".click_to_comment").bind("click", self.on_comment)
1358
3c5054a22e7a browser (slideshow): better handling of controls hiding:
Goffi <goffi@goffi.org>
parents: 1357
diff changeset
108
1341
a8bc1ee455ae browser (slideshow): use standard click/dblclick instead of swiper equivalents:
Goffi <goffi@goffi.org>
parents: 1340
diff changeset
109 # we don't use swiper.on for "click" and "dblclick" (or "doubleTap" in swiper
a8bc1ee455ae browser (slideshow): use standard click/dblclick instead of swiper equivalents:
Goffi <goffi@goffi.org>
parents: 1340
diff changeset
110 # terms) because it breaks event propagation management, which cause trouble with
a8bc1ee455ae browser (slideshow): use standard click/dblclick instead of swiper equivalents:
Goffi <goffi@goffi.org>
parents: 1340
diff changeset
111 # media player
a8bc1ee455ae browser (slideshow): use standard click/dblclick instead of swiper equivalents:
Goffi <goffi@goffi.org>
parents: 1340
diff changeset
112 self.slideshow_elt.bind("click", self.on_click)
a8bc1ee455ae browser (slideshow): use standard click/dblclick instead of swiper equivalents:
Goffi <goffi@goffi.org>
parents: 1340
diff changeset
113 self.slideshow_elt.bind("dblclick", self.on_dblclick)
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
114 self.swiper.on("slideChange", self.on_slide_change)
1327
e35de70f5295 browser: updated swiper and use a limit on version
Goffi <goffi@goffi.org>
parents: 1320
diff changeset
115 self.on_slide_change(self.swiper)
1311
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
116 self.fullscreen(True)
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
117
1342
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
118 def add_slide(self, elt, item_data=None, options=None):
1312
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
119 slide_elt = html.DIV(Class="swiper-slide")
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
120 zoom_cont_elt = html.DIV(Class="swiper-zoom-container")
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
121 slide_elt <= zoom_cont_elt
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
122 zoom_cont_elt <= elt
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
123 slide_elt._item = item_data
1342
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
124 if options is not None:
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
125 slide_elt._options = options
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
126 self.swiper.appendSlide([slide_elt])
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
127 self.swiper.update()
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
128
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
129 def quit(self):
1309
9344ca3b21a6 browser (slideshow): fixed scrolling issue with comment panel:
Goffi <goffi@goffi.org>
parents: 1307
diff changeset
130 # we unhide
9344ca3b21a6 browser (slideshow): fixed scrolling issue with comment panel:
Goffi <goffi@goffi.org>
parents: 1307
diff changeset
131 for elt, display in self.hidden_elts.items():
9344ca3b21a6 browser (slideshow): fixed scrolling issue with comment panel:
Goffi <goffi@goffi.org>
parents: 1307
diff changeset
132 elt.style.display = display
9344ca3b21a6 browser (slideshow): fixed scrolling issue with comment panel:
Goffi <goffi@goffi.org>
parents: 1307
diff changeset
133 self.hidden_elts.clear()
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
134 self.slideshow_elt.remove()
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
135 self.slideshow_elt = None
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
136 self.swiper.destroy(True, True)
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
137 self.swiper = None
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
138
1311
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
139 def fullscreen(self, active=None):
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
140 """Activate/desactivate fullscreen
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
141
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
142 @param acvite: can be:
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
143 - True to activate
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
144 - False to desactivate
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
145 - Auto to switch fullscreen mode
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
146 """
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
147 try:
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
148 fullscreen_elt = document.fullscreenElement
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
149 request_fullscreen = self.slideshow_elt.requestFullscreen
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
150 except AttributeError:
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
151 print("fullscreen is not available on this browser")
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
152 else:
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
153 if active is None:
1334
5ff6e187084f browser (slideshow): fixed `active` value detection for fullscreen
Goffi <goffi@goffi.org>
parents: 1327
diff changeset
154 active = fullscreen_elt == None
1311
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
155 if active:
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
156 request_fullscreen()
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
157 else:
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
158 try:
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
159 document.exitFullscreen()
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
160 except AttributeError:
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
161 print("exitFullscreen not available on this browser")
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
162
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
163 def on_key_down(self, evt):
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
164 if evt.key == 'Escape':
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
165 self.quit()
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
166 else:
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
167 return
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
168 evt.preventDefault()
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
169
1327
e35de70f5295 browser: updated swiper and use a limit on version
Goffi <goffi@goffi.org>
parents: 1320
diff changeset
170 def on_slide_change(self, swiper):
1342
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
171 if self._exit_callback is not None:
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
172 self._exit_callback()
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
173 self._exit_callback = None
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
174 item = self.current_item
1342
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
175 if item is not None:
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
176 comments_count = item.get('comments_count')
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
177 self.comments_count_elt.text = comments_count or ''
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
178
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
179 for cls in self._class_to_remove:
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
180 self.slideshow_elt.classList.remove(cls)
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
181
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
182 self._class_to_remove.clear()
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
183
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
184 options = self.current_options
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
185 if options is not None:
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
186 for flag in options.get('flags', []):
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
187 cls = f"flag_{flag.lower()}"
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
188 self.slideshow_elt.classList.add(cls)
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
189 self._class_to_remove.add(cls)
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
190 self._exit_callback = options.get("exit_callback", None)
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
191
1310
9e356f8eb62c browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents: 1309
diff changeset
192 def toggle_hide_controls(self, evt):
9e356f8eb62c browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents: 1309
diff changeset
193 self.click_timer = None
1358
3c5054a22e7a browser (slideshow): better handling of controls hiding:
Goffi <goffi@goffi.org>
parents: 1357
diff changeset
194 # we don't want to hide controls when a control is clicked
3c5054a22e7a browser (slideshow): better handling of controls hiding:
Goffi <goffi@goffi.org>
parents: 1357
diff changeset
195 # so we check all ancestors if we are not in a control
3c5054a22e7a browser (slideshow): better handling of controls hiding:
Goffi <goffi@goffi.org>
parents: 1357
diff changeset
196 current = evt.target
3c5054a22e7a browser (slideshow): better handling of controls hiding:
Goffi <goffi@goffi.org>
parents: 1357
diff changeset
197 while current and current != self.slideshow_elt:
3c5054a22e7a browser (slideshow): better handling of controls hiding:
Goffi <goffi@goffi.org>
parents: 1357
diff changeset
198 print(f"current: {current}")
3c5054a22e7a browser (slideshow): better handling of controls hiding:
Goffi <goffi@goffi.org>
parents: 1357
diff changeset
199 if 'slideshow_control' in current.classList:
3c5054a22e7a browser (slideshow): better handling of controls hiding:
Goffi <goffi@goffi.org>
parents: 1357
diff changeset
200 return
3c5054a22e7a browser (slideshow): better handling of controls hiding:
Goffi <goffi@goffi.org>
parents: 1357
diff changeset
201 current = current.parent
3c5054a22e7a browser (slideshow): better handling of controls hiding:
Goffi <goffi@goffi.org>
parents: 1357
diff changeset
202 for elt in self.slideshow_elt.select('.slideshow_control'):
1310
9e356f8eb62c browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents: 1309
diff changeset
203 elt.style.display = '' if self.control_hidden else 'none'
9e356f8eb62c browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents: 1309
diff changeset
204 self.control_hidden = not self.control_hidden
9e356f8eb62c browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents: 1309
diff changeset
205
1341
a8bc1ee455ae browser (slideshow): use standard click/dblclick instead of swiper equivalents:
Goffi <goffi@goffi.org>
parents: 1340
diff changeset
206 def on_click(self, evt):
a8bc1ee455ae browser (slideshow): use standard click/dblclick instead of swiper equivalents:
Goffi <goffi@goffi.org>
parents: 1340
diff changeset
207 evt.stopPropagation()
a8bc1ee455ae browser (slideshow): use standard click/dblclick instead of swiper equivalents:
Goffi <goffi@goffi.org>
parents: 1340
diff changeset
208 evt.preventDefault()
1310
9e356f8eb62c browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents: 1309
diff changeset
209 # we use a timer so double tap can cancel the click
9e356f8eb62c browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents: 1309
diff changeset
210 # this avoid double tap side effect
9e356f8eb62c browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents: 1309
diff changeset
211 if self.click_timer is None:
9e356f8eb62c browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents: 1309
diff changeset
212 self.click_timer = timer.set_timeout(
9e356f8eb62c browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents: 1309
diff changeset
213 lambda: self.toggle_hide_controls(evt), 300)
9e356f8eb62c browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents: 1309
diff changeset
214
1341
a8bc1ee455ae browser (slideshow): use standard click/dblclick instead of swiper equivalents:
Goffi <goffi@goffi.org>
parents: 1340
diff changeset
215 def on_dblclick(self, evt):
1312
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
216 evt.stopPropagation()
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
217 evt.preventDefault()
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
218 if self.click_timer is not None:
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
219 timer.clear_timeout(self.click_timer)
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
220 self.click_timer = None
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
221 if self.swiper.zoom.scale != 1:
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
222 self.swiper.zoom.toggle()
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
223 else:
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
224 # "in" is reserved in Python, so we call it using dict syntax
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
225 self.swiper.zoom["in"]()
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
226
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
227 def on_close(self, evt):
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
228 evt.stopPropagation()
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
229 evt.preventDefault()
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
230 self.quit()
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
231
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
232 def on_comment_close(self, evt):
1358
3c5054a22e7a browser (slideshow): better handling of controls hiding:
Goffi <goffi@goffi.org>
parents: 1357
diff changeset
233 evt.stopPropagation()
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
234 side_panel = self.comments_panel_elt.select_one('.comments_side_panel')
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
235 side_panel.classList.remove('open')
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
236 side_panel.bind("transitionend", lambda evt: self.comments_panel_elt.remove())
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
237
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
238 def on_comments_panel_click(self, evt):
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
239 # we stop stop propagation to avoid the closing of the panel
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
240 evt.stopPropagation()
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
241
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
242 def on_comment(self, evt):
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
243 item = self.current_item
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
244 if item is None:
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
245 return
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
246 comments_panel_tpl = Template('blog/comments_panel.html')
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
247 try:
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
248 comments = item['comments']['items']
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
249 except KeyError:
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
250 comments = []
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
251 self.comments_panel_elt = comments_panel_tpl.get_elt({
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
252 "comments": comments,
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
253 "comments_service": item['comments_service'],
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
254 "comments_node": item['comments_node'],
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
255
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
256 })
1309
9344ca3b21a6 browser (slideshow): fixed scrolling issue with comment panel:
Goffi <goffi@goffi.org>
parents: 1307
diff changeset
257 self.slideshow_elt <= self.comments_panel_elt
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
258 side_panel = self.comments_panel_elt.select_one('.comments_side_panel')
1310
9e356f8eb62c browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents: 1309
diff changeset
259 timer.set_timeout(lambda: side_panel.classList.add("open"), 0)
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
260 for close_elt in self.comments_panel_elt.select('.click_to_close'):
1320
0cbf86b1dcca browser (photos/album): invitation manager first draft.
Goffi <goffi@goffi.org>
parents: 1312
diff changeset
261 close_elt.bind("click", self.on_comment_close)
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
262 side_panel.bind("click", self.on_comments_panel_click)