From 20aee14768de3e94199420b19003f1ebe9b17b71 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 13 Mar 2018 12:51:16 +0530 Subject: [PATCH] Date edit widget for EM page --- src/pyj/book_list/edit_metadata.pyj | 30 ++++++++++++++++++++++++++++- src/pyj/date.pyj | 3 ++- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/pyj/book_list/edit_metadata.pyj b/src/pyj/book_list/edit_metadata.pyj index 5ee6e5ac63..044492550e 100644 --- a/src/pyj/book_list/edit_metadata.pyj +++ b/src/pyj/book_list/edit_metadata.pyj @@ -18,7 +18,7 @@ from book_list.router import back from book_list.theme import get_color from book_list.top_bar import create_top_bar, set_title from book_list.ui import set_panel_handler, show_panel -from date import format_date +from date import UNDEFINED_DATE_ISO, format_date from dom import add_extra_css, build_rule, clear, svgicon from modals import error_dialog from session import get_interface_data @@ -281,6 +281,32 @@ def series_edit(container_id, book_id, field, fm, div, mi): field_names_for(field, update_completions.bind(None, container_id)) # }}} +# Date edit {{{ + +def date_edit_get_value(container): + return True, container.querySelector('input[type="date"]').value + +def date_to_datetime(raw): + if not raw: + return UNDEFINED_DATE_ISO + return raw + 'T12:00:00+00:00' # we use 12 so that the date is the same in most timezones + + +def date_edit(container_id, book_id, field, fm, div, mi): + nonlocal value_to_json + value_to_json = date_to_datetime + name = fm.name or field + le = E.input(type='date', name=name.replace('#', '_c_'), min=UNDEFINED_DATE_ISO.split('T')[0], pattern="[0-9]{4}-[0-9]{2}-[0-9]{2}") + val = resolved_metadata(mi, field) or '' + if val: + val = format_date(val, 'yyyy-MM-dd') + le.value = val or '' + form = create_form(le, date_edit_get_value, container_id, book_id, field) + div.appendChild(E.div(style='margin: 0.5ex 1rem', _('Edit the "{}" below.').format(name))) + div.appendChild(E.div(style='margin: 0.5ex 1rem', form)) + le.focus(), le.select() + +# }}} # Identifiers edit {{{ @@ -348,6 +374,8 @@ def edit_field(container_id, book_id, field): multiple_line_edit(' & ', '&', container_id, book_id, field, fm, d, mi) elif fm.datatype is 'series': series_edit(container_id, book_id, field, fm, d, mi) + elif fm.datatype is 'datetime': + date_edit(container_id, book_id, field, fm, d, mi) # elif fm.datatype is 'rating': # rating_edit(container_id, book_id, field, fm, d, mi) elif field is 'identifiers': diff --git a/src/pyj/date.pyj b/src/pyj/date.pyj index 120d339cff..14c2de611a 100644 --- a/src/pyj/date.pyj +++ b/src/pyj/date.pyj @@ -2,7 +2,8 @@ # License: GPL v3 Copyright: 2016, Kovid Goyal from __python__ import hash_literals -UNDEFINED_DATE = Date('0101-01-01T00:00:00+00:00') +UNDEFINED_DATE_ISO = '0101-01-01T00:00:00+00:00' +UNDEFINED_DATE = Date(UNDEFINED_DATE_ISO) def is_date_undefined(date): dy, uy = date.getUTCFullYear(), UNDEFINED_DATE.getUTCFullYear()