]> git.phdru.name Git - m_librarian.git/commitdiff
Feat(web:books): Показывать список книг с разбивкой по авторам и сериям
authorOleg Broytman <phd@phdru.name>
Sat, 26 May 2018 20:48:59 +0000 (23:48 +0300)
committerOleg Broytman <phd@phdru.name>
Sat, 26 May 2018 20:48:59 +0000 (23:48 +0300)
docs-ru/news.rst
m_librarian/web/app.py
m_librarian/web/views/list_books.py
m_librarian/web/views/list_books.tmpl

index 79f244705cc3836dc45e28d24cc11ff8b365411b..bdd599909b8137ace5707064d56d482f13f0a19e 100644 (file)
@@ -6,6 +6,8 @@ Version 0.1.4 (2018-05-??)
 
 * Поиск по названиям книг.
 
+* Показывать список найденных книг с разбивкой по авторам и сериям.
+
 Version 0.1.3 (2018-05-25)
 --------------------------
 
index 19fca6c4254076abb46c3b6c23c66f54656de2c7..3ca8d4fd54b51e5cbddeecbf23e97f2c80e78c7c 100644 (file)
@@ -131,8 +131,16 @@ def search_books_post():
         case_sensitive = _guess_case_sensitivity(value)
     books = search_books(search_type, case_sensitive, {'title': value}, None,
                          orderBy=('title',))
+    books_by_authors = {}
+    for book in books:
+        author = book.authors[0].fullname
+        if author in books_by_authors:
+            books_by_author = books_by_authors[author]
+        else:
+            books_by_author = books_by_authors[author] = []
+        books_by_author.append(book)
     return {
-        'books': list(books),
+        'books_by_author': books_by_authors,
         'search_books': value,
         'search_type': search_type,
         'case_sensitive': case_sensitive,
index 73af92bda83f11c3c573440ed40a81ae0910ce78..01fcda4c7817dff06f7a56117cb785ae6aa52607 100644 (file)
@@ -36,10 +36,10 @@ VFN=valueForName
 currentTime=time.time
 __CHEETAH_version__ = '3.1.0'
 __CHEETAH_versionTuple__ = (3, 1, 0, 'final', 1)
-__CHEETAH_genTime__ = 1527354802.495612
-__CHEETAH_genTimestamp__ = 'Sat May 26 20:13:22 2018'
+__CHEETAH_genTime__ = 1527367605.801202
+__CHEETAH_genTimestamp__ = 'Sat May 26 23:46:45 2018'
 __CHEETAH_src__ = 'list_books.tmpl'
-__CHEETAH_srcLastModified__ = 'Sat May 26 20:13:18 2018'
+__CHEETAH_srcLastModified__ = 'Sat May 26 23:46:44 2018'
 __CHEETAH_docstring__ = 'Autogenerated by Cheetah: The Python-Powered Template Engine'
 
 if __CHEETAH_versionTuple__ < RequiredCheetahVersionTuple:
@@ -93,36 +93,41 @@ class list_books(layout):
         write(u'''</h1>
 
 ''')
-        if VFFSL(SL,"books",True): # generated from line 8, col 1
+        if VFFSL(SL,"books_by_author",True): # generated from line 8, col 1
             write(u'''  <form action="/download/" method="POST" style="height: 80%">
   <div style="width: 100%; height: 90%">
   <select multiple name="books" style="height: 100%">
 ''')
             series = None
-            for book in VFFSL(SL,"books",True): # generated from line 13, col 3
-                if VFFSL(SL,"book.series",True) != VFFSL(SL,"series",True): # generated from line 14, col 3
-                    if VFFSL(SL,"series",True) is not None: # generated from line 15, col 3
-                        write(u'''  </optgroup>
+            for author in VFFSL(SL,"sorted",False)(VFFSL(SL,"books_by_author",True)): # generated from line 13, col 3
+                books = VFFSL(SL,"books_by_author",True)[VFFSL(SL,"author",True)]
+                for book in VFFSL(SL,"books",True): # generated from line 15, col 5
+                    if VFFSL(SL,"book.series",True) != VFFSL(SL,"series",True): # generated from line 16, col 5
+                        if VFFSL(SL,"series",True) is not None: # generated from line 17, col 5
+                            write(u'''    </optgroup>
 ''')
-                    series = VFFSL(SL,"book.series",True)
-                    write(u'''  <optgroup label="''')
-                    if VFFSL(SL,"book.series",True): # generated from line 20, col 3
-                        _v = VFN(VFFSL(SL,"cgi",True),"escape",False)(VFFSL(SL,"series",True), 1) # u'$cgi.escape($series, 1)' on line 21, col 1
-                        if _v is not None: write(_filter(_v, rawExpr=u'$cgi.escape($series, 1)')) # from line 21, col 1.
-                    else: # generated from line 22, col 3
-                        write(u'''\u0412\u043d\u0435 \u0441\u0435\u0440\u0438\u0439''')
-                    write(u'''">
+                        series = VFFSL(SL,"book.series",True)
+                        write(u'''    <optgroup label="''')
+                        _v = VFFSL(SL,"author",True) # u'$author' on line 22, col 1
+                        if _v is not None: write(_filter(_v, rawExpr=u'$author')) # from line 22, col 1.
+                        write(u''' \u2014 ''')
+                        if VFFSL(SL,"book.series",True): # generated from line 23, col 5
+                            _v = VFN(VFFSL(SL,"cgi",True),"escape",False)(VFFSL(SL,"series",True), 1) # u'$cgi.escape($series, 1)' on line 24, col 1
+                            if _v is not None: write(_filter(_v, rawExpr=u'$cgi.escape($series, 1)')) # from line 24, col 1.
+                        else: # generated from line 25, col 5
+                            write(u'''\u0412\u043d\u0435 \u0441\u0435\u0440\u0438\u0439''')
+                        write(u'''">
 ''')
-                write(u'''  <option value="''')
-                _v = VFFSL(SL,"book.id",True) # u'$book.id' on line 27, col 18
-                if _v is not None: write(_filter(_v, rawExpr=u'$book.id')) # from line 27, col 18.
-                write(u'''">''')
-                _v = VFFSL(SL,"book.ser_no",True) # u'$book.ser_no' on line 27, col 28
-                if _v is not None: write(_filter(_v, rawExpr=u'$book.ser_no')) # from line 27, col 28.
-                write(u''' ''')
-                _v = VFN(VFFSL(SL,"cgi",True),"escape",False)(VFFSL(SL,"book.title",True)) # u'$cgi.escape($book.title)' on line 27, col 41
-                if _v is not None: write(_filter(_v, rawExpr=u'$cgi.escape($book.title)')) # from line 27, col 41.
-                write(u'''</option>
+                    write(u'''    <option value="''')
+                    _v = VFFSL(SL,"book.id",True) # u'$book.id' on line 30, col 20
+                    if _v is not None: write(_filter(_v, rawExpr=u'$book.id')) # from line 30, col 20.
+                    write(u'''">''')
+                    _v = VFFSL(SL,"book.ser_no",True) # u'$book.ser_no' on line 30, col 30
+                    if _v is not None: write(_filter(_v, rawExpr=u'$book.ser_no')) # from line 30, col 30.
+                    write(u''' ''')
+                    _v = VFN(VFFSL(SL,"cgi",True),"escape",False)(VFFSL(SL,"book.title",True)) # u'$cgi.escape($book.title)' on line 30, col 43
+                    if _v is not None: write(_filter(_v, rawExpr=u'$cgi.escape($book.title)')) # from line 30, col 43.
+                    write(u'''</option>
 ''')
             write(u'''  </optgroup>
   </select>
@@ -132,7 +137,7 @@ class list_books(layout):
   </div>
   </form>
 ''')
-        else: # generated from line 36, col 1
+        else: # generated from line 40, col 1
             write(u'''  <p>\u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u043d\u0438 \u043e\u0434\u043d\u043e\u0439 \u043a\u043d\u0438\u0433\u0438!</p>
 ''')
         
index 9566e89ff56bf8a78326420fa27a8dfc7de40a4e..cab1e1d3edad0856bb6888ab160e1b2c816d4b7e 100644 (file)
@@ -5,26 +5,30 @@
 #def body
 <h1>$title</h1>
 
-#if $books
+#if $books_by_author
   <form action="/download/" method="POST" style="height: 80%">
   <div style="width: 100%; height: 90%">
   <select multiple name="books" style="height: 100%">
   #set $series = None
-  #for $book in $books
-  #if $book.series != $series
-  #if $series is not None
-  </optgroup>
-  #end if
-  #set $series = $book.series
-  <optgroup label="#slurp
-  #if $book.series
+  #for $author in $sorted($books_by_author)
+    #set $books = $books_by_author[$author]
+    #for $book in $books
+    #if $book.series != $series
+    #if $series is not None
+    </optgroup>
+    #end if
+    #set $series = $book.series
+    <optgroup label="#slurp
+$author — #slurp
+    #if $book.series
 $cgi.escape($series, 1)#slurp
-  #else
+    #else
 Вне серий#slurp
-  #end if
+    #end if
 ">
-  #end if
-  <option value="$book.id">$book.ser_no $cgi.escape($book.title)</option>
+    #end if
+    <option value="$book.id">$book.ser_no $cgi.escape($book.title)</option>
+    #end for
   #end for
   </optgroup>
   </select>