$def with (lst, new=False, admin_only=False) $putctx('cssfile', 'list-edit') $var title: $(_("Create a list") if new else _("Editing list: %(list_name)s", list_name=lst.name)) $putctx("robots", "noindex,nofollow") $ can_save = True $if admin_only: $ can_save = (ctx.user and ctx.user.is_admin())
$:macros.databarEdit(lst)

$(_("Create a list") if new else _("Edit List"))

$if admin_only: $_("⚠️ Saving global lists is admin-only while the feature is under development.")
$# Render the ith seed input field $jsdef render_seed_field(i, seed): $# seed['key'] errors in python; seed.get('key') errors in js. So need $# to run different code on the server and client. $if jsdef_get(seed, 'key') != None: $ seed = { 'thing': seed, 'notes': '' } $ key = '' $if seed['thing']: $ key = seed['thing']['key']
  • ≡ #$(i + 1)
    $# Displayed
    $# Note: Cannot use "in" because this is a jsdef function $if key: $ prefix = key.split('/')[1] $if prefix == 'works' or prefix == 'books': $:lazy_thing_preview(key, 'render_lazy_work_preview') $elif prefix == 'authors': $:lazy_thing_preview(key, 'render_lazy_author_preview') $else: $key $else: $key
  • $# import the side-effect of the jsdef function $:render_template('jsdef/LazyWorkPreview', None) $:render_template('jsdef/LazyAuthorPreview', None) $jsdef lazy_thing_preview(key, render_fn_name):
    $if not is_jsdef(): $ prefix = key.split('/')[1] $if prefix == 'works' or prefix == 'books': $code: fake_book = { 'key': key, 'title': '...', 'full_title': '...', 'author_name': ['...'], 'edition_count': '_', 'cover_i': None, } $:render_template('jsdef/LazyWorkPreview', fake_book) $elif prefix == 'authors': $code: fake_author = { 'key': key, 'name': '...', 'birth_date': None, 'death_date': None, 'work_count': '_', 'top_work': ['...'], 'subjects': ['...'], } $:render_template('jsdef/LazyAuthorPreview', fake_author)
    $if not new:

      $if lst.seeds: $for i, seed in enumerate(lst.seeds): $if isinstance(seed, str): $ seed = {'key': '/subjects/' + seed} $:render_seed_field(i, seed) $else: $:render_seed_field(0, {'key': ''}) $_('Add another book')

    $if new: $else: $:macros.EditButtons(comment=lst.comment_)