forked from M2tecDev/slash-commands-example-bot
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpagination.py
44 lines (38 loc) · 1.54 KB
/
pagination.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
class Element:
def __init__(self, *, header, short_desc=None, long_desc=None, elements=None):
self._parent = None
self.header = header
self.short_desc = short_desc or ""
self.long_desc = long_desc or ""
self.elements = elements or []
self.current = 0
# Set parents
for elem in self.elements:
elem._parent = self
@property
def parent(self):
return self if self._parent is None else self._parent
@property
def element(self):
if len(self.elements) == 0:
return self
return self.elements[self.current]
def next_elem(self):
if len(self.elements) > 0:
self.current = (self.current + 1) % len(self.elements)
def prev_elem(self):
if len(self.elements) > 0:
self.current = (self.current - 1) % len(self.elements)
def display_elements(self, sep="\n"):
table = ""
for i, elem in enumerate(self.elements):
table = f"{table}{sep}{elem.display(1, i == self.current)}"
return table[len(sep):]
def display(self, depth=0, highlight=False):
header = f"**{self.header}**" if not highlight else f"> **{self.header}**"
content = self.long_desc if depth == 0 else self.short_desc
content = f"{header}\n{content}"
# Also display children
if len(self.elements) > 0 and depth < 1:
content = f"{content}\n{self.display_elements()}"
return content.strip()