annotate libervia/pages/_browser/slideshow.py @ 1406:cffa3ae4d0aa

pages (blog/view): move URL friendly code to backend tools: - the code to render an URL friendly is now in `sat.tools.common.regex` - user friendly extra text is now only displayed when no `-` is found in ID. This is a temporary transition behaviour because new blog items IDs are now user friendly by default, and thus extra text is not wanted anymore. For older IDs it is still needed though, and the presence of `-` is used to guess when an ID is user friendly or not.
author Goffi <goffi@goffi.org>
date Fri, 16 Apr 2021 18:44:49 +0200
parents 3c5054a22e7a
children ff5005783443
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:
9344ca3b21a6 browser (slideshow): fixed scrolling issue with comment panel:
Goffi <goffi@goffi.org>
parents: 1307
diff changeset
66 self.hidden_elts[elt] = elt.style.display
9344ca3b21a6 browser (slideshow): fixed scrolling issue with comment panel:
Goffi <goffi@goffi.org>
parents: 1307
diff changeset
67 elt.style.display = "none"
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
68 document.body <= self.slideshow_elt
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
69 self.swiper = Swiper.new(
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
70 ".swiper-container",
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
71 {
1340
d5f6793dc17c browser (slideshow): use non zero threshold to avoid accidental swipe
Goffi <goffi@goffi.org>
parents: 1334
diff changeset
72 # 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
73 # player is used
d5f6793dc17c browser (slideshow): use non zero threshold to avoid accidental swipe
Goffi <goffi@goffi.org>
parents: 1334
diff changeset
74 "threshold": 10,
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
75 "pagination": {
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
76 "el": ".swiper-pagination",
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
77 },
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
78 "navigation": {
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
79 "nextEl": ".swiper-button-next",
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
80 "prevEl": ".swiper-button-prev",
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
81 },
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
82 "scrollbar": {
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
83 "el": ".swiper-scrollbar",
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
84 },
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
85 "grabCursor": True,
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
86 "keyboard": {
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
87 "enabled": True,
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
88 "onlyInViewport": False,
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 "mousewheel": True,
1312
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
91 "zoom": {
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
92 "maxRatio": 15,
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
93 "toggle": False,
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
94 },
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
95 }
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
96 )
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
97 window.addEventListener("keydown", self.on_key_down, True)
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
98 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
99 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
100
1341
a8bc1ee455ae browser (slideshow): use standard click/dblclick instead of swiper equivalents:
Goffi <goffi@goffi.org>
parents: 1340
diff changeset
101 # 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
102 # 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
103 # media player
a8bc1ee455ae browser (slideshow): use standard click/dblclick instead of swiper equivalents:
Goffi <goffi@goffi.org>
parents: 1340
diff changeset
104 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
105 self.slideshow_elt.bind("dblclick", self.on_dblclick)
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
106 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
107 self.on_slide_change(self.swiper)
1311
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
108 self.fullscreen(True)
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
109
1342
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
110 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
111 slide_elt = html.DIV(Class="swiper-slide")
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
112 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
113 slide_elt <= zoom_cont_elt
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
114 zoom_cont_elt <= elt
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
115 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
116 if options is not None:
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
117 slide_elt._options = options
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
118 self.swiper.appendSlide([slide_elt])
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
119 self.swiper.update()
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
120
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
121 def quit(self):
1309
9344ca3b21a6 browser (slideshow): fixed scrolling issue with comment panel:
Goffi <goffi@goffi.org>
parents: 1307
diff changeset
122 # we unhide
9344ca3b21a6 browser (slideshow): fixed scrolling issue with comment panel:
Goffi <goffi@goffi.org>
parents: 1307
diff changeset
123 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
124 elt.style.display = display
9344ca3b21a6 browser (slideshow): fixed scrolling issue with comment panel:
Goffi <goffi@goffi.org>
parents: 1307
diff changeset
125 self.hidden_elts.clear()
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
126 self.slideshow_elt.remove()
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
127 self.slideshow_elt = None
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
128 self.swiper.destroy(True, True)
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
129 self.swiper = None
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
130
1311
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
131 def fullscreen(self, active=None):
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
132 """Activate/desactivate fullscreen
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
133
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
134 @param acvite: can be:
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
135 - True to activate
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
136 - False to desactivate
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
137 - Auto to switch fullscreen mode
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
138 """
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
139 try:
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
140 fullscreen_elt = document.fullscreenElement
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
141 request_fullscreen = self.slideshow_elt.requestFullscreen
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
142 except AttributeError:
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
143 print("fullscreen is not available on this browser")
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
144 else:
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
145 if active is None:
1334
5ff6e187084f browser (slideshow): fixed `active` value detection for fullscreen
Goffi <goffi@goffi.org>
parents: 1327
diff changeset
146 active = fullscreen_elt == None
1311
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
147 if active:
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
148 request_fullscreen()
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
149 else:
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
150 try:
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
151 document.exitFullscreen()
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
152 except AttributeError:
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
153 print("exitFullscreen not available on this browser")
9948598e7ec0 browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents: 1310
diff changeset
154
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
155 def on_key_down(self, evt):
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
156 if evt.key == 'Escape':
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
157 self.quit()
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
158 else:
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
159 return
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
160 evt.preventDefault()
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
161
1327
e35de70f5295 browser: updated swiper and use a limit on version
Goffi <goffi@goffi.org>
parents: 1320
diff changeset
162 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
163 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
164 self._exit_callback()
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
165 self._exit_callback = None
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
166 item = self.current_item
1342
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
167 if item is not None:
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
168 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
169 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
170
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
171 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
172 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
173
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
174 self._class_to_remove.clear()
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
175
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
176 options = self.current_options
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
177 if options is not None:
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
178 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
179 cls = f"flag_{flag.lower()}"
1df0d1b28b83 browser (slideshow): options can now be attached to a slide:
Goffi <goffi@goffi.org>
parents: 1341
diff changeset
180 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
181 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
182 self._exit_callback = options.get("exit_callback", None)
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
183
1310
9e356f8eb62c browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents: 1309
diff changeset
184 def toggle_hide_controls(self, evt):
9e356f8eb62c browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents: 1309
diff changeset
185 self.click_timer = None
1358
3c5054a22e7a browser (slideshow): better handling of controls hiding:
Goffi <goffi@goffi.org>
parents: 1357
diff changeset
186 # 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
187 # 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
188 current = evt.target
3c5054a22e7a browser (slideshow): better handling of controls hiding:
Goffi <goffi@goffi.org>
parents: 1357
diff changeset
189 while current and current != self.slideshow_elt:
3c5054a22e7a browser (slideshow): better handling of controls hiding:
Goffi <goffi@goffi.org>
parents: 1357
diff changeset
190 print(f"current: {current}")
3c5054a22e7a browser (slideshow): better handling of controls hiding:
Goffi <goffi@goffi.org>
parents: 1357
diff changeset
191 if 'slideshow_control' in current.classList:
3c5054a22e7a browser (slideshow): better handling of controls hiding:
Goffi <goffi@goffi.org>
parents: 1357
diff changeset
192 return
3c5054a22e7a browser (slideshow): better handling of controls hiding:
Goffi <goffi@goffi.org>
parents: 1357
diff changeset
193 current = current.parent
3c5054a22e7a browser (slideshow): better handling of controls hiding:
Goffi <goffi@goffi.org>
parents: 1357
diff changeset
194 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
195 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
196 self.control_hidden = not self.control_hidden
9e356f8eb62c browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents: 1309
diff changeset
197
1341
a8bc1ee455ae browser (slideshow): use standard click/dblclick instead of swiper equivalents:
Goffi <goffi@goffi.org>
parents: 1340
diff changeset
198 def on_click(self, evt):
a8bc1ee455ae browser (slideshow): use standard click/dblclick instead of swiper equivalents:
Goffi <goffi@goffi.org>
parents: 1340
diff changeset
199 evt.stopPropagation()
a8bc1ee455ae browser (slideshow): use standard click/dblclick instead of swiper equivalents:
Goffi <goffi@goffi.org>
parents: 1340
diff changeset
200 evt.preventDefault()
1310
9e356f8eb62c browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents: 1309
diff changeset
201 # 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
202 # this avoid double tap side effect
9e356f8eb62c browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents: 1309
diff changeset
203 if self.click_timer is None:
9e356f8eb62c browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents: 1309
diff changeset
204 self.click_timer = timer.set_timeout(
9e356f8eb62c browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents: 1309
diff changeset
205 lambda: self.toggle_hide_controls(evt), 300)
9e356f8eb62c browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents: 1309
diff changeset
206
1341
a8bc1ee455ae browser (slideshow): use standard click/dblclick instead of swiper equivalents:
Goffi <goffi@goffi.org>
parents: 1340
diff changeset
207 def on_dblclick(self, evt):
1312
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
208 evt.stopPropagation()
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
209 evt.preventDefault()
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
210 if self.click_timer is not None:
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
211 timer.clear_timeout(self.click_timer)
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
212 self.click_timer = None
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
213 if self.swiper.zoom.scale != 1:
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
214 self.swiper.zoom.toggle()
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
215 else:
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
216 # "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
217 self.swiper.zoom["in"]()
39a87d9099c4 browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents: 1311
diff changeset
218
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
219 def on_close(self, evt):
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
220 evt.stopPropagation()
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
221 evt.preventDefault()
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
222 self.quit()
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
223
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
224 def on_comment_close(self, evt):
1358
3c5054a22e7a browser (slideshow): better handling of controls hiding:
Goffi <goffi@goffi.org>
parents: 1357
diff changeset
225 evt.stopPropagation()
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
226 side_panel = self.comments_panel_elt.select_one('.comments_side_panel')
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
227 side_panel.classList.remove('open')
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
228 side_panel.bind("transitionend", lambda evt: self.comments_panel_elt.remove())
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
229
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
230 def on_comments_panel_click(self, evt):
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
231 # we stop stop propagation to avoid the closing of the panel
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
232 evt.stopPropagation()
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
233
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
234 def on_comment(self, evt):
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
235 item = self.current_item
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
236 if item is None:
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
237 return
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
238 comments_panel_tpl = Template('blog/comments_panel.html')
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
239 try:
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
240 comments = item['comments']['items']
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
241 except KeyError:
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
242 comments = []
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
243 self.comments_panel_elt = comments_panel_tpl.get_elt({
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
244 "comments": comments,
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
245 "comments_service": item['comments_service'],
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
246 "comments_node": item['comments_node'],
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
247
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
248 })
1309
9344ca3b21a6 browser (slideshow): fixed scrolling issue with comment panel:
Goffi <goffi@goffi.org>
parents: 1307
diff changeset
249 self.slideshow_elt <= self.comments_panel_elt
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
250 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
251 timer.set_timeout(lambda: side_panel.classList.add("open"), 0)
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
252 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
253 close_elt.bind("click", self.on_comment_close)
1307
0a6698714557 browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
254 side_panel.bind("click", self.on_comments_panel_click)