Mercurial > libervia-web
annotate libervia/pages/_browser/slideshow.py @ 1321:eb85ef26cb4a
server: use `bulma` theme as default for default site:
`default` theme is not used for now as real default, because dev work is focusing on bulma
theme, and the default one may be broken. This should (or may not) change in the future.
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 01 Aug 2020 16:56:04 +0200 |
parents | 0cbf86b1dcca |
children | e35de70f5295 |
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 |
1307
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
17 |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
18 @property |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
19 def current_slide(self): |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
20 if self.swiper is None: |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
21 return None |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
22 try: |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
23 return DOMNode(self.swiper.slides[self.swiper.realIndex]) |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
24 # getting missing item in JS arrays returns KeyError |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
25 except KeyError: |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
26 return None |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
27 |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
28 @property |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
29 def current_item(self): |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
30 """item attached to the current slide, if any""" |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
31 current = self.current_slide |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
32 if current is None: |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
33 return |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
34 try: |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
35 return current.js._item |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
36 except AttributeError: |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
37 return None |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
38 |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
39 @property |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
40 def index(self): |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
41 if self.swiper is None: |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
42 return None |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
43 return self.swiper.realIndex |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
44 |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
45 @index.setter |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
46 def index(self, idx): |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
47 if self.swiper is not None: |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
48 self.swiper.slideTo(idx, 0) |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
49 |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
50 def attach(self): |
1309
9344ca3b21a6
browser (slideshow): fixed scrolling issue with comment panel:
Goffi <goffi@goffi.org>
parents:
1307
diff
changeset
|
51 # 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
|
52 for elt in document.body.children: |
9344ca3b21a6
browser (slideshow): fixed scrolling issue with comment panel:
Goffi <goffi@goffi.org>
parents:
1307
diff
changeset
|
53 self.hidden_elts[elt] = elt.style.display |
9344ca3b21a6
browser (slideshow): fixed scrolling issue with comment panel:
Goffi <goffi@goffi.org>
parents:
1307
diff
changeset
|
54 elt.style.display = "none" |
1307
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
55 document.body <= self.slideshow_elt |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
56 self.swiper = Swiper.new( |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
57 ".swiper-container", |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
58 { |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
59 "pagination": { |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
60 "el": ".swiper-pagination", |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
61 }, |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
62 "navigation": { |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
63 "nextEl": ".swiper-button-next", |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
64 "prevEl": ".swiper-button-prev", |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
65 }, |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
66 "scrollbar": { |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
67 "el": ".swiper-scrollbar", |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
68 }, |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
69 "grabCursor": True, |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
70 "keyboard": { |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
71 "enabled": True, |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
72 "onlyInViewport": False, |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
73 }, |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
74 "mousewheel": True, |
1312
39a87d9099c4
browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents:
1311
diff
changeset
|
75 "zoom": { |
39a87d9099c4
browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents:
1311
diff
changeset
|
76 "maxRatio": 15, |
39a87d9099c4
browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents:
1311
diff
changeset
|
77 "toggle": False, |
39a87d9099c4
browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents:
1311
diff
changeset
|
78 }, |
1307
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
79 } |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
80 ) |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
81 window.addEventListener("keydown", self.on_key_down, True) |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
82 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
|
83 self.slideshow_elt.select_one(".click_to_comment").bind("click", self.on_comment) |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
84 self.swiper.on("slideChange", self.on_slide_change) |
1310
9e356f8eb62c
browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents:
1309
diff
changeset
|
85 self.swiper.on("click", self.on_click) |
1312
39a87d9099c4
browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents:
1311
diff
changeset
|
86 self.swiper.on("doubleTap", self.on_double_tap) |
1307
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
87 self.on_slide_change() |
1311
9948598e7ec0
browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents:
1310
diff
changeset
|
88 self.fullscreen(True) |
1307
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
89 |
1312
39a87d9099c4
browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents:
1311
diff
changeset
|
90 def add_slide(self, elt, item_data=None): |
39a87d9099c4
browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents:
1311
diff
changeset
|
91 slide_elt = html.DIV(Class="swiper-slide") |
39a87d9099c4
browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents:
1311
diff
changeset
|
92 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
|
93 slide_elt <= zoom_cont_elt |
39a87d9099c4
browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents:
1311
diff
changeset
|
94 zoom_cont_elt <= elt |
39a87d9099c4
browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents:
1311
diff
changeset
|
95 slide_elt._item = item_data |
1307
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
96 self.swiper.appendSlide([slide_elt]) |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
97 self.swiper.update() |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
98 |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
99 def quit(self): |
1309
9344ca3b21a6
browser (slideshow): fixed scrolling issue with comment panel:
Goffi <goffi@goffi.org>
parents:
1307
diff
changeset
|
100 # we unhide |
9344ca3b21a6
browser (slideshow): fixed scrolling issue with comment panel:
Goffi <goffi@goffi.org>
parents:
1307
diff
changeset
|
101 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
|
102 elt.style.display = display |
9344ca3b21a6
browser (slideshow): fixed scrolling issue with comment panel:
Goffi <goffi@goffi.org>
parents:
1307
diff
changeset
|
103 self.hidden_elts.clear() |
1307
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
104 self.slideshow_elt.remove() |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
105 self.slideshow_elt = None |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
106 self.swiper.destroy(True, True) |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
107 self.swiper = None |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
108 |
1311
9948598e7ec0
browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents:
1310
diff
changeset
|
109 def fullscreen(self, active=None): |
9948598e7ec0
browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents:
1310
diff
changeset
|
110 """Activate/desactivate fullscreen |
9948598e7ec0
browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents:
1310
diff
changeset
|
111 |
9948598e7ec0
browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents:
1310
diff
changeset
|
112 @param acvite: can be: |
9948598e7ec0
browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents:
1310
diff
changeset
|
113 - True to activate |
9948598e7ec0
browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents:
1310
diff
changeset
|
114 - False to desactivate |
9948598e7ec0
browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents:
1310
diff
changeset
|
115 - Auto to switch fullscreen mode |
9948598e7ec0
browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents:
1310
diff
changeset
|
116 """ |
9948598e7ec0
browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents:
1310
diff
changeset
|
117 try: |
9948598e7ec0
browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents:
1310
diff
changeset
|
118 fullscreen_elt = document.fullscreenElement |
9948598e7ec0
browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents:
1310
diff
changeset
|
119 request_fullscreen = self.slideshow_elt.requestFullscreen |
9948598e7ec0
browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents:
1310
diff
changeset
|
120 except AttributeError: |
9948598e7ec0
browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents:
1310
diff
changeset
|
121 print("fullscreen is not available on this browser") |
9948598e7ec0
browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents:
1310
diff
changeset
|
122 else: |
9948598e7ec0
browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents:
1310
diff
changeset
|
123 if active is None: |
9948598e7ec0
browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents:
1310
diff
changeset
|
124 active = fullscreen_elt != None |
9948598e7ec0
browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents:
1310
diff
changeset
|
125 if active: |
9948598e7ec0
browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents:
1310
diff
changeset
|
126 request_fullscreen() |
9948598e7ec0
browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents:
1310
diff
changeset
|
127 else: |
9948598e7ec0
browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents:
1310
diff
changeset
|
128 try: |
9948598e7ec0
browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents:
1310
diff
changeset
|
129 document.exitFullscreen() |
9948598e7ec0
browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents:
1310
diff
changeset
|
130 except AttributeError: |
9948598e7ec0
browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents:
1310
diff
changeset
|
131 print("exitFullscreen not available on this browser") |
9948598e7ec0
browser (slideshow): show slideshow in fullscreen
Goffi <goffi@goffi.org>
parents:
1310
diff
changeset
|
132 |
1307
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
133 def on_key_down(self, evt): |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
134 if evt.key == 'Escape': |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
135 self.quit() |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
136 else: |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
137 return |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
138 evt.preventDefault() |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
139 |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
140 def on_slide_change(self): |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
141 item = self.current_item |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
142 if item is None: |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
143 return |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
144 comments_count = item.get('comments_count') |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
145 self.comments_count_elt.text = comments_count or '' |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
146 |
1310
9e356f8eb62c
browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents:
1309
diff
changeset
|
147 def toggle_hide_controls(self, evt): |
9e356f8eb62c
browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents:
1309
diff
changeset
|
148 self.click_timer = None |
9e356f8eb62c
browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents:
1309
diff
changeset
|
149 if 'click_to_hide' in evt.target.classList: |
9e356f8eb62c
browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents:
1309
diff
changeset
|
150 # we don't want to hide controls when a control is clicked |
9e356f8eb62c
browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents:
1309
diff
changeset
|
151 return |
9e356f8eb62c
browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents:
1309
diff
changeset
|
152 for elt in self.slideshow_elt.select('.click_to_hide'): |
9e356f8eb62c
browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents:
1309
diff
changeset
|
153 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
|
154 self.control_hidden = not self.control_hidden |
9e356f8eb62c
browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents:
1309
diff
changeset
|
155 |
9e356f8eb62c
browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents:
1309
diff
changeset
|
156 def on_click(self, evt): |
9e356f8eb62c
browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents:
1309
diff
changeset
|
157 # 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
|
158 # this avoid double tap side effect |
9e356f8eb62c
browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents:
1309
diff
changeset
|
159 if self.click_timer is None: |
9e356f8eb62c
browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents:
1309
diff
changeset
|
160 self.click_timer = timer.set_timeout( |
9e356f8eb62c
browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents:
1309
diff
changeset
|
161 lambda: self.toggle_hide_controls(evt), 300) |
9e356f8eb62c
browser (slideshow): (un)hide controls on single click:
Goffi <goffi@goffi.org>
parents:
1309
diff
changeset
|
162 |
1312
39a87d9099c4
browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents:
1311
diff
changeset
|
163 def on_double_tap(self, evt): |
39a87d9099c4
browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents:
1311
diff
changeset
|
164 evt.stopPropagation() |
39a87d9099c4
browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents:
1311
diff
changeset
|
165 evt.preventDefault() |
39a87d9099c4
browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents:
1311
diff
changeset
|
166 if self.click_timer is not None: |
39a87d9099c4
browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents:
1311
diff
changeset
|
167 timer.clear_timeout(self.click_timer) |
39a87d9099c4
browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents:
1311
diff
changeset
|
168 self.click_timer = None |
39a87d9099c4
browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents:
1311
diff
changeset
|
169 if self.swiper.zoom.scale != 1: |
39a87d9099c4
browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents:
1311
diff
changeset
|
170 self.swiper.zoom.toggle() |
39a87d9099c4
browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents:
1311
diff
changeset
|
171 else: |
39a87d9099c4
browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents:
1311
diff
changeset
|
172 # "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
|
173 self.swiper.zoom["in"]() |
39a87d9099c4
browser (slideshow): slides can now be zoomed:
Goffi <goffi@goffi.org>
parents:
1311
diff
changeset
|
174 |
1307
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
175 def on_close(self, evt): |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
176 evt.stopPropagation() |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
177 evt.preventDefault() |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
178 self.quit() |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
179 |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
180 def on_comment_close(self, evt): |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
181 side_panel = self.comments_panel_elt.select_one('.comments_side_panel') |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
182 side_panel.classList.remove('open') |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
183 side_panel.bind("transitionend", lambda evt: self.comments_panel_elt.remove()) |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
184 |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
185 def on_comments_panel_click(self, evt): |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
186 # we stop stop propagation to avoid the closing of the panel |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
187 evt.stopPropagation() |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
188 |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
189 def on_comment(self, evt): |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
190 item = self.current_item |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
191 if item is None: |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
192 return |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
193 comments_panel_tpl = Template('blog/comments_panel.html') |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
194 try: |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
195 comments = item['comments']['items'] |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
196 except KeyError: |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
197 comments = [] |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
198 self.comments_panel_elt = comments_panel_tpl.get_elt({ |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
199 "comments": comments, |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
200 "comments_service": item['comments_service'], |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
201 "comments_node": item['comments_node'], |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
202 |
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
203 }) |
1309
9344ca3b21a6
browser (slideshow): fixed scrolling issue with comment panel:
Goffi <goffi@goffi.org>
parents:
1307
diff
changeset
|
204 self.slideshow_elt <= self.comments_panel_elt |
1307
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
205 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
|
206 timer.set_timeout(lambda: side_panel.classList.add("open"), 0) |
1307
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
207 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
|
208 close_elt.bind("click", self.on_comment_close) |
1307
0a6698714557
browser: `slideshow` module implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
209 side_panel.bind("click", self.on_comments_panel_click) |