def to_html(self, ar): self.analyze_view() get_rnd = rt.models.cal.EventGenerator.get_cal_entry_renderer if self.mode == TABLE_MODE: sep = ' ' fmt = get_rnd(day_and_weekday) elif self.mode == UL_MODE: sep = ' ' fmt = get_rnd(day_and_weekday) elif self.mode == PLAIN_MODE: sep = ', ' fmt = get_rnd(dd.fds) def xxx(list_of_entries): elems = [] for e in list_of_entries: if len(elems): elems.append(sep) elems.extend(fmt(e, ar)) return elems if self.mode == TABLE_MODE: rows = [] cells = [E.th("")] + [E.th(monthname(m+1)) for m in range(12)] # print(''.join([tostring(c) for c in cells])) rows.append(E.tr(*cells)) for y in self.years.values(): cells = [E.td(str(y.year), width="4%")] for m in y.months: # every m is a list of etree elems cells.append(E.td(*xxx(m), width="8%", **ar.renderer.cellattrs)) # print(str(y.year) +":" + ''.join([tostring(c) for c in cells])) rows.append(E.tr(*cells)) return E.table(*rows, **ar.renderer.tableattrs) if self.mode == UL_MODE: items = [] for y in self.years.values(): for m, lst in enumerate(y.months): if len(lst): items.append(E.li( monthname(m+1), " ", str(y.year), ": ", *xxx(lst))) return E.ul(*items) if self.mode == PLAIN_MODE: elems = [] for y in self.years.values(): for lst in y.months: if len(lst): if len(elems): elems.append(sep) elems.extend(xxx(lst)) return E.p(*elems) raise Exception("20180720")
def weeklyNavigation(cls, obj, ar): today = obj.date prev = cls.date2pk(DurationUnits.months.add_duration(today, -1)) next = cls.date2pk(DurationUnits.months.add_duration(today, 1)) elems = cls.calender_header(ar) header = [ ar.goto_pk(prev, "<<"), " ", "{} {}".format(monthname(today.month), today.year), " ", ar.goto_pk(next, ">>")] elems.append(E.h2(*header, align="center")) rows = [] for week in CALENDAR.monthdatescalendar(today.year, today.month): # each week is a list of seven datetime.date objects. cells = [] current_week = week[0].isocalendar()[1] cells.append(E.td(str(current_week))) for day in week: pk = cls.date2pk(day) if day.isocalendar()[1] == today.isocalendar()[1]: cells.append(E.td(str(day.day))) else: cells.append(E.td(ar.goto_pk(pk, str(day.day)))) rows.append(E.tr(*cells, align="center")) elems.append(E.table(*rows, align="center")) elems.append(E.p(ar.goto_pk(0, gettext("This week")), align="center")) # for o in range(-10, 10): # elems.append(ar.goto_pk(o, str(o))) # elems.append(" ") return E.div(*elems)
def __str__(self): if self.navigation_mode == "day": return when_text(self.date) elif self.navigation_mode == "week": return weekname(self.date) else: return monthname(self.date.month) + " " + str(self.date.year)
def __str__(self): if self.navigation_mode == "day": return when_text(self.date) elif self.navigation_mode == "week": return weekname(self.date) elif self.navigation_mode == "month": return monthname(self.date.month) + " " + str(self.date.year) else: raise Exception("Invalid navigation_mode {} ({})".format( self.navigation_mode, self.ar))
def to_html(self, ar): self.analyze_view() if self.mode == TABLE_MODE: sep = ' ' fmt = day_and_weekday elif self.mode == UL_MODE: sep = ' ' fmt = day_and_weekday elif self.mode == PLAIN_MODE: sep = ', ' fmt = dd.fds def rnd(obj, ar): if self.model is rt.models.cal.Guest: d = obj.event.start_date evt = obj.event else: d = obj.start_date evt = obj # if show_auto_num and evt.auto_type: # yield str(evt.auto_type)+":" yield ar.obj2html(evt, fmt(d)) if obj.state.button_text: yield str(obj.state.button_text) # return (fdmy(d) + ": ", ar.obj2html(evt, lbl)) def xxx(list_of_entries): elems = [] # for e in reversed(list_of_entries): for e in list_of_entries: if len(elems): elems.append(sep) elems.extend(rnd(e, ar)) return elems if self.mode == TABLE_MODE: rows = [] cells = [E.th("")] + [E.th(monthname(m + 1)) for m in range(12)] # print(''.join([tostring(c) for c in cells])) rows.append(E.tr(*cells)) for y in self.years.values(): cells = [E.td(str(y.year), width="4%")] for m in y.months: # every m is a list of etree elems cells.append( E.td(*xxx(m), width="8%", **ar.renderer.cellattrs)) # print(str(y.year) +":" + ''.join([tostring(c) for c in cells])) rows.append(E.tr(*cells)) return E.table(*rows, **ar.renderer.tableattrs) if self.mode == UL_MODE: items = [] for y in self.years.values(): for m, lst in enumerate(reversed(y.months)): # January is [11], Dec is [0] if len(lst): items.append( E.li(monthname(12 - m), " ", str(y.year), ": ", *xxx(lst))) return E.ul(*items) if self.mode == PLAIN_MODE: elems = [] for y in self.years.values(): for lst in y.months: if len(lst): if len(elems): elems.append(sep) elems.extend(xxx(lst)) return E.p(*elems) raise Exception("20180720")
def to_html(self, ar): self.analyze_view() if self.mode == TABLE_MODE: sep = ' ' fmt = day_and_weekday elif self.mode == UL_MODE: sep = ' ' fmt = day_and_weekday elif self.mode == PLAIN_MODE: sep = ', ' fmt = dd.fds def rnd(obj, ar): if self.model is rt.models.cal.Guest: d = obj.event.start_date evt = obj.event else: d = obj.start_date evt = obj # if show_auto_num and evt.auto_type: # yield str(evt.auto_type)+":" yield ar.obj2html(evt, fmt(d)) if obj.state.button_text: yield str(obj.state.button_text) # return (fdmy(d) + ": ", ar.obj2html(evt, lbl)) def xxx(list_of_entries): elems = [] # for e in reversed(list_of_entries): for e in list_of_entries: if len(elems): elems.append(sep) elems.extend(rnd(e, ar)) return elems if self.mode == TABLE_MODE: rows = [] cells = [E.th("")] + [E.th(monthname(m+1)) for m in range(12)] # print(''.join([tostring(c) for c in cells])) rows.append(E.tr(*cells)) for y in self.years.values(): cells = [E.td(str(y.year), width="4%")] for m in y.months: # every m is a list of etree elems cells.append(E.td(*xxx(m), width="8%", **ar.renderer.cellattrs)) # print(str(y.year) +":" + ''.join([tostring(c) for c in cells])) rows.append(E.tr(*cells)) return E.table(*rows, **ar.renderer.tableattrs) if self.mode == UL_MODE: items = [] for y in self.years.values(): for m, lst in enumerate(reversed(y.months)): # January is [11], Dec is [0] if len(lst): items.append(E.li( monthname(12-m), " ", str(y.year), ": ", *xxx(lst))) return E.ul(*items) if self.mode == PLAIN_MODE: elems = [] for y in self.years.values(): for lst in y.months: if len(lst): if len(elems): elems.append(sep) elems.extend(xxx(lst)) return E.p(*elems) raise Exception("20180720")
def navigation_panel(cls, obj, ar): if ar is None: return None # if ar.actor.navigator is None: # # raise Exception("Oops, {} has no navigator".format(cls)) # print("Oops, {} has no navigator".format(cls)) # return None today = obj.date # daily, weekly, monthly = obj.cal_view.navigator.make_link_funcs(ar) daily = obj.planner.daily_button_func(ar) weekly = obj.planner.weekly_button_func(ar) monthly = obj.planner.monthly_button_func(ar) if obj.navigation_mode == 'day': long_unit = DurationUnits.months short_unit = DurationUnits.days current_view = daily elif obj.navigation_mode == 'week': long_unit = DurationUnits.months short_unit = DurationUnits.weeks current_view = weekly elif obj.navigation_mode == 'month': long_unit = DurationUnits.years short_unit = DurationUnits.months current_view = monthly else: raise Exception("20200224") daily_mode = bool(obj.navigation_mode == 'day') weekly_mode = bool(obj.navigation_mode == 'week') month_mode = bool(obj.navigation_mode == 'month') # todo ensure that the end of the month is always in the view. # long_unit = DurationUnits.years if month_mode else DurationUnits.months long_prev = cls.get_row_by_pk( ar, date2pk(long_unit.add_duration(today, -1))) long_next = cls.get_row_by_pk( ar, date2pk(long_unit.add_duration(today, 1))) # next_unit = DurationUnits.weeks if weekly_mode else DurationUnits.days if day_view else DurationUnits.months short_prev = cls.get_row_by_pk( ar, date2pk(short_unit.add_duration(today, -1))) short_next = cls.get_row_by_pk( ar, date2pk(short_unit.add_duration(today, 1))) # current_view = weekly if weekly_mode else daily # current_view = daily # if not day_view: # current_view = monthly if month_mode else weekly elems = [] #cls.calender_header(ar) # Month div rows, cells = [], [] for i, month in enumerate(YearMonths.get_list_items()): pk = date2pk( DurationUnits.months.add_duration(today, i + 1 - today.month)) if today.month == i + 1: if not month_mode: cells.append( E.td( E.b(monthly(cls.get_row_by_pk(ar, pk), str(month))))) else: cells.append(E.td(E.b(str(month)))) else: cells.append( E.td(monthly(cls.get_row_by_pk(ar, pk), str(month)))) if (i + 1) % 3 == 0: rows.append(E.tr(*cells, align="center")) cells = [] monthly_div = E.div(E.table(*rows, align="center"), CLASS="cal-month-table") header = [ current_view(long_prev, "<<"), " ", current_view(short_prev, "<"), E.span( E.span("{} {}".format(monthname(today.month), today.year), E.br(), monthly_div)), current_view(short_next, ">"), " ", current_view(long_next, ">>") ] elems.append(E.h2(*header, align="center")) weekdaysFirstLetter = " " + "".join( [gettext(week.text)[0] for week in Weekdays.objects()]) rows = [ E.tr(*[ E.td(E.b(day_of_week)) for day_of_week in weekdaysFirstLetter ], align='center') ] for week in CALENDAR.monthdatescalendar(today.year, today.month): # each week is a list of seven datetime.date objects. cells = [] current_week = week[0].isocalendar()[1] this_week = False for day in week: pk = date2pk(day) link = daily(cls.get_row_by_pk(ar, pk), str(day.day)) if day == dd.today(): link = E.b(link, CLASS="cal-nav-today") if day == today and daily_mode: cells.append(E.td(E.b(str(day.day)))) else: cells.append(E.td(link)) if day.isocalendar()[1] == today.isocalendar()[1]: this_week = True else: if this_week and weekly_mode: txt = E.b(str(current_week)) else: pk = date2pk(week[0]) txt = weekly(cls.get_row_by_pk(ar, pk), str(current_week)) cells = [E.td(txt, CLASS="cal-week")] + cells rows.append(E.tr(*cells, align="center")) today = cls.get_row_by_pk(ar, 0) elems.append(E.table(*rows, align="center")) elems.append(E.p(daily(today, gettext("Today")), align="center")) elems.append(E.p(weekly(today, gettext("This week")), align="center")) elems.append(E.p(monthly(today, gettext("This month")), align="center")) # for o in range(-10, 10): # elems.append(ar.goto_pk(o, str(o))) # elems.append(" ") return E.div(*elems, CLASS="lino-nav-cal")
def navigation_panel(cls, obj, ar): day_view = bool(cls.navigation_mode == 'day') weekly_view = bool(cls.navigation_mode == 'week') month_view = bool(cls.navigation_mode == 'month') # todo ensure that the end of the month is always in the view. today = obj.date daily, weekly, monthly = make_link_funcs(ar) long_unit = DurationUnits.years if month_view else DurationUnits.months prev_month = Day(date2pk(long_unit.add_duration(today, -1))) next_month = Day(date2pk(long_unit.add_duration(today, 1))) next_unit = DurationUnits.weeks if weekly_view else DurationUnits.days if day_view else DurationUnits.months prev_view = Day(date2pk(next_unit.add_duration(today, -1))) next_view = Day(date2pk(next_unit.add_duration(today, 1))) # current_view = weekly if weekly_view else daily current_view = daily if not day_view: current_view = monthly if month_view else weekly elems = [] #cls.calender_header(ar) # Month div rows, cells = [], [] for i, month in enumerate(YearMonths.get_list_items()): # each week is a list of seven datetime.date objects. pk = date2pk( DurationUnits.months.add_duration( today, int(month.value) - today.month)) if today.month == int(month.value): if not month_view: cells.append(E.td(E.b(monthly(Day(pk), str(month))))) else: cells.append(E.td(E.b(str(month)))) else: cells.append(E.td(monthly(Day(pk), str(month)))) if (i + 1) % 3 == 0: rows.append(E.tr(*cells, align="center")) cells = [] monthly_div = E.div(E.table(*rows, align="center"), CLASS="cal-month-table") header = [ current_view(prev_month, "<<"), " ", current_view(prev_view, "<"), E.span( E.span("{} {}".format(monthname(today.month), today.year), E.br(), monthly_div)), current_view(next_view, ">"), " ", current_view(next_month, ">>") ] elems.append(E.h2(*header, align="center")) weekdaysFirstLetter = " " + "".join( [gettext(week.text)[0] for week in Weekdays.objects()]) rows = [ E.tr(*[ E.td(E.b(day_of_week)) for day_of_week in weekdaysFirstLetter ], align='center') ] for week in CALENDAR.monthdatescalendar(today.year, today.month): # each week is a list of seven datetime.date objects. cells = [] current_week = week[0].isocalendar()[1] this_week = False for day in week: pk = date2pk(day) link = daily(Day(pk), str(day.day)) if day == dd.today(): link = E.b(link, CLASS="cal-nav-today") if day == today and day_view: cells.append(E.td(E.b(str(day.day)))) else: cells.append(E.td(link)) if day.isocalendar()[1] == today.isocalendar()[1]: this_week = True else: cells = [ E.td(E.b(str(current_week)) if this_week and weekly_view else weekly(Day(pk), str(current_week)), CLASS="cal-week") ] + cells rows.append(E.tr(*cells, align="center")) elems.append(E.table(*rows, align="center")) elems.append(E.p(daily(Day(), gettext("Today")), align="center")) elems.append(E.p(weekly(Day(), gettext("This week")), align="center")) elems.append(E.p(monthly(Day(), gettext("This month")), align="center")) # for o in range(-10, 10): # elems.append(ar.goto_pk(o, str(o))) # elems.append(" ") return E.div(*elems, CLASS="lino-nav-cal")