+@register.simple_tag
+def book_tree(book_list, books_by_parent):
+ text = "".join("<li><a href='%s'>%s</a>%s</li>" % (
+ book.get_absolute_url(), book.title, book_tree(books_by_parent.get(book, ()), books_by_parent)
+ ) for book in book_list)
+
+ if text:
+ return "<ol>%s</ol>" % text
+ else:
+ return ''
+
+
+@register.simple_tag
+def all_editors(extra_info):
+ editors = []
+ if 'editors' in extra_info:
+ editors += extra_info['editors']
+ if 'technical_editors' in extra_info:
+ editors += extra_info['technical_editors']
+ # support for extra_info-s from librarian<1.2
+ if 'editor' in extra_info:
+ editors.append(extra_info['editor'])
+ if 'technical_editor' in extra_info:
+ editors.append(extra_info['technical_editor'])
+ return ', '.join(
+ ' '.join(p.strip() for p in person.rsplit(',', 1)[::-1])
+ for person in sorted(set(editors)))
+
+