add advanced search page

master
eric 2021-04-14 17:58:31 -04:00
parent c29e2823aa
commit 732f70393f
5 changed files with 973 additions and 0 deletions

196
AdvSearchPage.py Normal file
View File

@ -0,0 +1,196 @@
#!/usr/bin/env python
# -*- mode: python; indent-tabs-mode: nil; -*- coding: utf-8 -*-
"""
AdvSearchPage.py
Copyright 2021 by Project Gutenberg
Distributable under the GNU General Public License Version 3 or newer.
Not really "advanced", it reproduces functionality of the old results.php search,
labelled as "Advanced Search", using SQLAlchemy ORM
Differences:
- instead of a link for a new search, a pre-filled advanced search form is shown contextually
- Following our Bibrecord pages, BC -> BCE in dates
- The language selector invokes some language-localization
- Authors are now all in a <ul>
- the first page of results is pageno=1, not 0
"""
import cherrypy
import routes
from sqlalchemy import or_, and_
from libgutenberg.Models import (
Alias, Attribute, Author, Book, BookAuthor, Category, File, Lang, Locc)
import BaseSearcher
from errors import ErrorPage
from Page import Page
from Formatters import formatters
config = cherrypy.config
BROWSE_KEYS = {'lang': 'languages', 'locc': 'loccs', 'category': 'categories'}
PAGESIZE = 100
MAX_RESULTS = 1000
_langs = {}
def langname(langcode):
""" cache of Language names"""
if not _langs:
session = cherrypy.engine.pool.Session()
for lang in session.query(Lang).all():
_langs[lang.id] = lang.language
return _langs.get(langcode, langcode)
_cats = {}
def catname(catpk):
""" cache of category names"""
if not _cats:
session = cherrypy.engine.pool.Session()
for cat in session.query(Category).all():
_cats[cat.pk] = cat.category
return _cats.get(catpk, 'Not a valid Category')
class AdvSearcher(BaseSearcher.OpenSearch):
""" this object passes the context for the page renderer """
def __init__(self):
super().__init__()
self.items_per_page = PAGESIZE
def url(self, *args, **params):
params = BaseSearcher.OpenSearch.params(**params)
return super(AdvSearcher,self).url('results', *args, **params)
def finalize(self):
super().finalize()
self.lastpage = int(self.total_results / PAGESIZE) + 1
self.nextpage = self.pageno + 1 if self.pageno + 1 <= self.lastpage else 0
self.prevpage = self.pageno - 1 if self.pageno > 1 <= self.lastpage else 0
class AdvSearchPage(Page):
""" search term => list of items """
def __init__(self):
super().__init__()
self.host = cherrypy.config['host']
self.urlgen = routes.URLGenerator(cherrypy.routes_mapper, {'HTTP_HOST': self.host})
self.formatter = formatters['html']
def index (self, **kwargs):
def entries(results, offset):
""" results is a list of book ids, sorted by first Author,
the query lazily returns book objects
"""
query = session.query(Book).join(
Book.authors.and_(BookAuthor.heading == 1)).join(BookAuthor.author).filter(
Book.pk.in_(results)).order_by(Author.name).offset(offset).limit(PAGESIZE)
for book in query:
yield book
os = AdvSearcher()
params = cherrypy.request.params.copy()
try:
pageno = abs(int(params.pop("pageno", 1)))
except KeyError:
pageno = 1
os.pageno = pageno
for key in ["submit_search", "route_name", "controller", "action"]:
params.pop(key, None)
terms = [key for key in params if params[key]]
# Return a search result page.
# no terms provided
if len(terms) == 0:
os.total_results = 0
os.finalize()
return self.formatter.render('advresults', os)
# single term, redirect if browsable
if len(terms) == 1:
browse_key = BROWSE_KEYS.get(terms[0], None)
if browse_key:
raise cherrypy.HTTPRedirect(
"/browse/%s/%s" % (browse_key, params[terms[0]].lower()))
# multiple terms, create a query
session = cherrypy.engine.pool.Session()
query = session.query(Book.pk)
selections = []
resultpks = None
searchterms = []
for key in terms:
if key in ['author', 'title']:
for word in params[key].split():
searchterms.append((key, word))
else:
searchterms.append((key, params[key]))
for key, val in searchterms:
if key == 'filetype':
pks = query.join(File).filter(File.fk_filetypes == val).all()
key = 'Filetype'
elif key == 'lang':
pks = query.join(Book.langs).filter(Lang.id == val).all()
val = langname(val)
key = 'Language'
elif key == 'locc':
pks = query.join(Book.loccs).filter(Locc.id == val).all()
val = val.upper()
key = 'LoC Class'
elif key == 'category':
try:
val = int(val)
except ValueError:
continue
pks = query.join(Book.categories).filter(Category.pk == val).all()
val = catname(val)
key = 'Category'
elif key == 'author':
word = "%{}%".format(val)
subq = session.query(Author.id).join(Author.aliases).filter(
Alias.alias.ilike(word)).subquery()
pks = query.join(Book.authors).join(BookAuthor.author).filter(or_(
Author.name.ilike(word),
Author.id.in_(subq),
)).all()
key = 'Author'
elif key == 'title':
word = "%{}%".format(val)
pks = query.join(Book.attributes).filter(and_(
Attribute.fk_attriblist.in_([240, 245, 246, 505]),
Attribute.text.ilike(word),
)).all()
key = 'Title'
pks = {row[0] for row in pks}
resultpks = resultpks.intersection(pks) if resultpks is not None else pks
num_rows = len(pks)
selections.append((key, val, num_rows))
os.total_results = len(resultpks)
os.finalize()
offset = PAGESIZE * (pageno - 1)
os.start_index = offset + 1
if os.total_results > MAX_RESULTS:
os.entries = []
else:
os.entries = entries(resultpks, offset)
os.search_terms = selections
return self.formatter.render('advresults', os)

View File

@ -37,6 +37,7 @@ import SuggestionsPage
from SearchPage import BookSearchPage, AuthorSearchPage, SubjectSearchPage, BookshelfSearchPage, \ from SearchPage import BookSearchPage, AuthorSearchPage, SubjectSearchPage, BookshelfSearchPage, \
AuthorPage, SubjectPage, BookshelfPage, AlsoDownloadedPage AuthorPage, SubjectPage, BookshelfPage, AlsoDownloadedPage
from BibrecPage import BibrecPage from BibrecPage import BibrecPage
from AdvSearchPage import AdvSearchPage
import CoverPages import CoverPages
import QRCodePage import QRCodePage
import diagnostics import diagnostics
@ -231,6 +232,9 @@ def main():
d.connect('bookshelf_search', r'/ebooks/bookshelves/search{.format}/', d.connect('bookshelf_search', r'/ebooks/bookshelves/search{.format}/',
controller=BookshelfSearchPage()) controller=BookshelfSearchPage())
d.connect('results', r'/ebooks/results{.format}/',
controller=AdvSearchPage())
# 'id' pages # 'id' pages
d.connect('author', r'/ebooks/author/{id:\d+}{.format}', d.connect('author', r'/ebooks/author/{id:\d+}{.format}',

151
templates/advresults.html Normal file
View File

@ -0,0 +1,151 @@
<?xml version="1.0" encoding="utf-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:py="http://genshi.edgewall.org/"
xmlns:i18n="http://genshi.edgewall.org/i18n"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:ebook="http://www.gutenberg.org/ebooks/"
xmlns:marcrel="http://www.loc.gov/loc.terms/relators/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:og="http://opengraphprotocol.org/schema/"
xmlns:fb="http://www.facebook.com/2008/fbml"
xml:lang="${os.lang}">
<?python
from itertools import cycle
from libgutenberg.DublinCore import DublinCore
?>
<xi:include href="site-layout.html" />
<xi:include href="social-functions.html" />
<head >
<!--<base href="https://www.gutenberg.org/" />-->
<link rel="stylesheet" href="/gutenberg/collapsible.css?1.1" />
${site_head()}
<title>${os.title} - ${os.pg}</title>
<link rel="self"
i18n:comment="Link pointing to the same page the user is viewing."
title="This Page"
href="${os.url(pageno=os.pageno)}" />
<link py:if="os.prevpage"
rel="first"
title="First Page"
href="${os.url(pageno=1)}" />
<link py:if="os.prevpage"
rel="previous"
title="Previous Page"
href="${os.url(pageno=os.prevpage)}" />
<link py:if="os.nextpage"
rel="next"
title="Next Page"
href="${os.url(pageno=os.nextpage)}" />
<meta name="totalResults" content="${os.total_results}" />
<meta name="startIndex" content="${os.start_index}" />
<meta name="itemsPerPage" content="${os.items_per_page}" />
</head>
<body>
<div class="container">
<div id="mw-head-dummy" class="noprint" />
<div id="content" class="page_content" i18n:comment="On the page of results of a search.">
<!-- start content -->
<py:if test='os.search_terms'>
<p>You selected:</p>
<ul>
<py:for each="term, value, count in os.search_terms">
<li>${term} = ${value} (${count} items match)</li>
</py:for>
</ul>
<p>${os.total_results} books found. </p>
</py:if>
<py:if test='os.total_results &gt; 1000'>
<p>More than 1000 books matched your search. Please refine your query to see results.</p>
<xi:include href="advsearch.html" />
</py:if>
<py:if test='os.total_results and (os.total_results &lt;= 1000)'>
<py:if test="os.total_results &gt; os.items_per_page">
<p class="center resultpages">
<a py:if="os.prevpage" href="${os.url(pageno=os.prevpage)}">previous</a>
<py:for each="page in range(1, os.lastpage + 1)">
<a href="${os.url(pageno=page)}">
<span class="${'red' if page == os.pageno else 'black'}">${page}</span>
</a>
</py:for>
<a py:if="os.nextpage" href="${os.url(pageno=os.nextpage)}">next</a>
</p>
</py:if>
<table cellspacing="0" class="pgdbfiles" py:with="cls=cycle(('evenrow', 'oddrow'))">
<caption>Titles</caption>
<colgroup>
<col class="narrow right" />
<col class="narrow" />
<col class="pgdbdataauthor" />
<col class="pgdbdatatitle" />
<col class="narrow" />
</colgroup>
<tr>
<th class="narrow right">Etext-No.</th>
<th class="narrow"><img src="/pics/stock_volume-16.png" width="16" height="16" alt="Audio" title="Audio Book" /></th>
<th class="pgdbdataauthor">Author</th>
<th class="pgdbdatatitle">Title</th>
<th class="narrow">Language</th>
</tr>
<py:for each="book in os.entries">
<tr class="${next(cls)}">
<td>${book.pk}</td>
<td>
<py:if test="book.is_audiobook"><img src="/pics/stock_volume-16.png" width="16" height="16" alt="Audio" title="Audio Book" /></py:if>
&nbsp;
</td>
<td>
<ul>
<py:for each="author in book.authors">
<li><a href="/browse/authors/${author.first_letter}#a${author.id}">${DublinCore.format_author_date_role(author)}</a></li>
</py:for>
</ul>
</td>
<td><a href="/ebooks/${book.pk}">${book.title}</a></td>
<td>${[lang.language for lang in book.langs]}</td>
</tr>
</py:for>
</table>
<py:if test="os.total_results &gt; os.items_per_page">
<p class="center resultpages">
<a py:if="os.prevpage" href="${os.url(pageno=os.prevpage)}">previous</a>
<py:for each="page in range(1, os.lastpage + 1)" >
<a href="${os.url(pageno=page)}">
<span class="${'red' if page == os.pageno else 'black'}">${page}</span>
</a>
</py:for>
<a py:if="os.nextpage" href="${os.url(pageno=os.nextpage)}">next</a>
</p>
</py:if>
</py:if>
<py:if test='not os.total_results'>
<xi:include href="advsearch.html" />
</py:if>
</div>
</div>
${site_footer ()}
${site_top ()}
</body>
</html>

618
templates/advsearch.html Normal file
View File

@ -0,0 +1,618 @@
<div xmlns:py="http://genshi.edgewall.org/" class="box">
<!-- Advanced search form begins here -->
<form py:with="params = os.params()" method="post" action="results/" accept-charset="utf-8" enctype="multipart/form-data">
<input id="collapsible1" class="toggle" type="checkbox" checked="${'true' if params else 'false'}"/>
<label for="collapsible1" class="lbl-toggle">Advanced Search</label>
<div class="collapsible-content">
<div class="content-inner">
<p>
<label for="author">Author:</label>
<input type="text" name="author" id="author" value="${params.get('author', '')}" />
</p>
<p>
<label for="title">Title:</label>
<input type="text" name="title" id="title" value="${params.get('title', '')}" />
</p>
<p>
<label for="subject">Subject:</label>
<input type="text" name="subject" id="subject" value="${params.get('subject', '')}" />
</p>
<p>
<label for="language">Language:</label>
<select py:with="lang = params.get('lang', ''); sel = {'selected':'selected'}" id="lang" name="lang" title="Language">
<option value="" py:attrs="sel if not lang else {}" >Any</option>
<option value="af" py:attrs="sel if lang == 'af' else {}">Afrikaans</option>
<option value="ale" py:attrs="sel if lang == 'ale' else {}">Aleut</option>
<option value="ar" py:attrs="sel if lang == 'ar' else {}">Arabic</option>
<option value="arp" py:attrs="sel if lang == 'arp' else {}">Arapaho</option>
<option value="brx" py:attrs="sel if lang == 'brx' else {}">Bodo</option>
<option value="br" py:attrs="sel if lang == 'br' else {}">Breton</option>
<option value="bg" py:attrs="sel if lang == 'bg' else {}">Bulgarian</option>
<option value="rmr" py:attrs="sel if lang == 'rmr' else {}">Caló</option>
<option value="ca" py:attrs="sel if lang == 'ca' else {}">Catalan</option>
<option value="ceb" py:attrs="sel if lang == 'ceb' else {}">Cebuano</option>
<option value="zh" py:attrs="sel if lang == 'zh' else {}">Chinese</option>
<option value="cs" py:attrs="sel if lang == 'cs' else {}">Czech</option>
<option value="da" py:attrs="sel if lang == 'da' else {}">Danish</option>
<option value="nl" py:attrs="sel if lang == 'nl' else {}">Dutch</option>
<option value="en" py:attrs="sel if lang == 'en' else {}">English</option>
<option value="eo" py:attrs="sel if lang == 'eo' else {}">Esperanto</option>
<option value="et" py:attrs="sel if lang == 'et' else {}">Estonian</option>
<option value="fa" py:attrs="sel if lang == 'fa' else {}">Farsi</option>
<option value="fi" py:attrs="sel if lang == 'fi' else {}">Finnish</option>
<option value="fr" py:attrs="sel if lang == 'fr' else {}">French</option>
<option value="fy" py:attrs="sel if lang == 'fy' else {}">Frisian</option>
<option value="fur" py:attrs="sel if lang == 'fur' else {}">Friulian</option>
<option value="gla" py:attrs="sel if lang == 'gla' else {}">Gaelic, Scottish</option>
<option value="gl" py:attrs="sel if lang == 'gl' else {}">Galician</option>
<option value="kld" py:attrs="sel if lang == 'kld' else {}">Gamilaraay</option>
<option value="de" py:attrs="sel if lang == 'de' else {}">German</option>
<option value="el" py:attrs="sel if lang == 'el' else {}">Greek</option>
<option value="grc" py:attrs="sel if lang == 'grc' else {}">Greek, Ancient</option>
<option value="he" py:attrs="sel if lang == 'he' else {}">Hebrew</option>
<option value="hu" py:attrs="sel if lang == 'hu' else {}">Hungarian</option>
<option value="is" py:attrs="sel if lang == 'is' else {}">Icelandic</option>
<option value="ilo" py:attrs="sel if lang == 'ilo' else {}">Iloko</option>
<option value="ia" py:attrs="sel if lang == 'ia' else {}">Interlingua</option>
<option value="iu" py:attrs="sel if lang == 'iu' else {}">Inuktitut</option>
<option value="ga" py:attrs="sel if lang == 'ga' else {}">Irish</option>
<option value="it" py:attrs="sel if lang == 'it' else {}">Italian</option>
<option value="ja" py:attrs="sel if lang == 'ja' else {}">Japanese</option>
<option value="csb" py:attrs="sel if lang == 'csb' else {}">Kashubian</option>
<option value="kha" py:attrs="sel if lang == 'kha' else {}">Khasi</option>
<option value="ko" py:attrs="sel if lang == 'ko' else {}">Korean</option>
<option value="la" py:attrs="sel if lang == 'la' else {}">Latin</option>
<option value="lt" py:attrs="sel if lang == 'lt' else {}">Lithuanian</option>
<option value="mi" py:attrs="sel if lang == 'mi' else {}">Maori</option>
<option value="myn" py:attrs="sel if lang == 'myn' else {}">Mayan Languages</option>
<option value="enm" py:attrs="sel if lang == 'enm' else {}">Middle English</option>
<option value="nah" py:attrs="sel if lang == 'nah' else {}">Nahuatl</option>
<option value="nap" py:attrs="sel if lang == 'nap' else {}">Napoletano-Calabrese</option>
<option value="nav" py:attrs="sel if lang == 'nav' else {}">Navajo</option>
<option value="nai" py:attrs="sel if lang == 'nai' else {}">North American Indian</option>
<option value="no" py:attrs="sel if lang == 'no' else {}">Norwegian</option>
<option value="oc" py:attrs="sel if lang == 'oc' else {}">Occitan</option>
<option value="oji" py:attrs="sel if lang == 'oji' else {}">Ojibwa</option>
<option value="ang" py:attrs="sel if lang == 'ang' else {}">Old English</option>
<option value="pl" py:attrs="sel if lang == 'pl' else {}">Polish</option>
<option value="pt" py:attrs="sel if lang == 'pt' else {}">Portuguese</option>
<option value="ro" py:attrs="sel if lang == 'ro' else {}">Romanian</option>
<option value="ru" py:attrs="sel if lang == 'ru' else {}">Russian</option>
<option value="sa" py:attrs="sel if lang == 'sa' else {}">Sanskrit</option>
<option value="sr" py:attrs="sel if lang == 'sr' else {}">Serbian</option>
<option value="sl" py:attrs="sel if lang == 'sl' else {}">Slovenian</option>
<option value="es" py:attrs="sel if lang == 'es' else {}">Spanish</option>
<option value="sv" py:attrs="sel if lang == 'sv' else {}">Swedish</option>
<option value="bgs" py:attrs="sel if lang == 'bgs' else {}">Tagabawa</option>
<option value="tl" py:attrs="sel if lang == 'tl' else {}">Tagalog</option>
<option value="te" py:attrs="sel if lang == 'te' else {}">Telugu</option>
<option value="cy" py:attrs="sel if lang == 'cy' else {}">Welsh</option>
<option value="yi" py:attrs="sel if lang == 'yi' else {}">Yiddish</option>
</select>
</p>
<p>
<label for="category" accesskey="c">Category:</label>
<select id="category" name="category" title="Category (Book Count)">
<option selected="" value="">Any</option>
<option value="1">Audio Book, human-read</option>
<option value="2">Audio Book, computer-generated</option>
<option value="3">Music, recorded</option>
<option value="4">Music, Sheet</option>
<option value="5">Pictures, still</option>
<option value="6">Other recordings</option>
<option value="7">Pictures, moving</option>
<option value="8">Data</option>
<option value="9">Compilations</option>
</select>
</p>
<p>
<label for="locc" accesskey="o">LoCC:</label>
<select id="locc" name="locc" title="Please choose a Library of Congress Class.">
<option selected="" value="">Any</option>
<option value="AC">AC General Works: Collections, Series, Collected works, Pamphlets</option>
<option value="AE">AE General Works: Encyclopedias</option>
<option value="AG">AG General Works: Dictionaries and other general reference books</option>
<option value="AM">AM General Works: Museums, Collectors and collecting</option>
<option value="AP">AP General Works: Periodicals</option>
<option value="AS">AS General Works: Academies and International Associations, Congresses</option>
<option value="AY">AY General Works: Yearbooks, Almanacs, Directories</option>
<option value="AZ">AZ General Works: History of scholarship and learning, The humanities</option>
<option value="B">B Philosophy, Psychology, Religion</option>
<option value="BC">BC Philosophy, Psychology, Religion: Logic</option>
<option value="BD">BD Philosophy, Psychology, Religion: Speculative Philosophy, General Philosophical works</option>
<option value="BF">BF Philosophy, Psychology, Religion: Psychology, Philosophy, Psychoanalysis</option>
<option value="BH">BH Philosophy, Psychology, Religion: Aesthetics</option>
<option value="BJ">BJ Philosophy, Psychology, Religion: Ethics, Social usages, Etiquette, Religion</option>
<option value="BL">BL Philosophy, Psychology, Religion: Religion: General, Miscellaneous and Atheism</option>
<option value="BM">BM Philosophy, Psychology, Religion: Judaism</option>
<option value="BP">BP Philosophy, Psychology, Religion: Islam, Bahaism, Theosophy, Other and new beliefs</option>
<option value="BQ">BQ Philosophy, Psychology, Religion: Buddhism</option>
<option value="BR">BR Philosophy, Psychology, Religion: Christianity</option>
<option value="BS">BS Philosophy, Psychology, Religion: Christianity: The Bible, Old and New Testament</option>
<option value="BT">BT Philosophy, Psychology, Religion: Christianity: Doctrinal theology, God, Christology</option>
<option value="BV">BV Philosophy, Psychology, Religion: Christianity: Practical theology, Worship</option>
<option value="BX">BX Philosophy, Psychology, Religion: Christianity: Churches, Church movements</option>
<option value="CB">CB History: History of civilization</option>
<option value="CC">CC History: Archaeology</option>
<option value="CE">CE History: Technical Chronology, Calendar</option>
<option value="CJ">CJ History: Numismatics</option>
<option value="CN">CN History: Inscriptions, Epigraphy</option>
<option value="CR">CR History: Heraldry</option>
<option value="CS">CS History: Genealogy</option>
<option value="CT">CT History: Biography</option>
<option value="D">D History: General and Eastern Hemisphere</option>
<option value="D501">D501 History: General and Eastern Hemisphere: World War I</option>
<option value="D731">D731 History: General and Eastern Hemisphere: World War II</option>
<option value="DA">DA History: General and Eastern Hemisphere: Great Britain, Ireland, Central Europe</option>
<option value="DB">DB History: General and Eastern Hemisphere: Austria, Hungary, Czech Republic, Slovakia</option>
<option value="DC">DC History: General and Eastern Hemisphere: France, Andorra, Monaco</option>
<option value="DD">DD History: General and Eastern Hemisphere: Germany</option>
<option value="DE">DE History: General and Eastern Hemisphere: The Mediterranean Region, The Greco-Roman World</option>
<option value="DF">DF History: General and Eastern Hemisphere: Greece</option>
<option value="DG">DG History: General and Eastern Hemisphere: Italy, Vatican City, Malta</option>
<option value="DH">DH History: General and Eastern Hemisphere: Netherlands, Belgium, Luxemburg</option>
<option value="DJ">DJ History: General and Eastern Hemisphere: Netherlands</option>
<option value="DJK">DJK History: General and Eastern Hemisphere: Eastern Europe</option>
<option value="DK">DK History: General and Eastern Hemisphere: Russia, Former Soviet Republics, Poland</option>
<option value="DL">DL History: General and Eastern Hemisphere: Northern Europe, Scandinavia</option>
<option value="DP">DP History: General and Eastern Hemisphere: Spain, Portugal</option>
<option value="DQ">DQ History: General and Eastern Hemisphere: Switzerland</option>
<option value="DR">DR History: General and Eastern Hemisphere: Balkan Peninsula, Turkey</option>
<option value="DS">DS History: General and Eastern Hemisphere: Asia</option>
<option value="DT">DT History: General and Eastern Hemisphere: Africa</option>
<option value="DU">DU History: General and Eastern Hemisphere: History of Oceania (South Seas)</option>
<option value="DX">DX History: General and Eastern Hemisphere: History of Romanies</option>
<option value="E011">E011 History: America: America</option>
<option value="E151">E151 History: America: United States</option>
<option value="E186">E186 History: America: Colonial History</option>
<option value="E201">E201 History: America: Revolution</option>
<option value="E300">E300 History: America: Revolution to the Civil War</option>
<option value="E456">E456 History: America: Civil War period</option>
<option value="E660">E660 History: America: Late nineteenth century</option>
<option value="E740">E740 History: America: Twentieth century</option>
<option value="E838">E838 History: America: Later twentieth century</option>
<option value="E895">E895 History: America: Twenty-first century</option>
<option value="F001">F001 United States local history: New England</option>
<option value="F1001">F1001 North America local history: Canada</option>
<option value="F106">F106 United States local history: Atlantic coast. Middle Atlantic States</option>
<option value="F1201">F1201 North America local history: Mexico</option>
<option value="F1401">F1401 Latin America local history: General</option>
<option value="F1461">F1461 Latin America local history: Guatemala</option>
<option value="F1481">F1481 Latin America local history: El Salvador</option>
<option value="F1501">F1501 Latin America local history: Honduras</option>
<option value="F1521">F1521 Latin America local history: Nicaragua</option>
<option value="F1541">F1541 Latin America local history: Costa Rica</option>
<option value="F1561">F1561 Latin America local history: Panama</option>
<option value="F1601">F1601 History of the Americas: West Indies</option>
<option value="F1751">F1751 History of the Americas: West Indies. Cuba</option>
<option value="F1861">F1861 History of the Americas: West Indies. Jamaica</option>
<option value="F1900">F1900 West Indies local history: Hispaniola (Haiti and Dominican Republic)</option>
<option value="F1951">F1951 West Indies local history: Puerto Rico</option>
<option value="F2001">F2001 History of the Americas: Lesser Antilles</option>
<option value="F206">F206 United States local history: The South. South Atlantic States</option>
<option value="F2131">F2131 History of the Americas: West Indies. British West Indies</option>
<option value="F2155">F2155 History of the Americas: Caribbean area. Caribbean sea</option>
<option value="F2201">F2201 Latin America local history: South America. General</option>
<option value="F2251">F2251 Latin America local history: Colombia</option>
<option value="F2301">F2301 Latin America local history: Venezuela</option>
<option value="F2351">F2351 Latin America local history: Guiana</option>
<option value="F2501">F2501 Latin America local history: Brazil</option>
<option value="F2661">F2661 Latin America local history: Paraguay</option>
<option value="F2701">F2701 Latin America local history: Uruguay</option>
<option value="F2801">F2801 Latin America local history: Argentina</option>
<option value="F296">F296 United States local history: Gulf States. West Florida</option>
<option value="F3051">F3051 Latin America local history: Chile</option>
<option value="F3301">F3301 Latin America local history: Bolivia</option>
<option value="F3401">F3401 Latin America local history: Peru</option>
<option value="F350.5">F350.5 United States local history: Mississippi River and Valley. Middle West</option>
<option value="F3701">F3701 Latin America local history: Ecuador</option>
<option value="F396">F396 United States local history: Old Southwest. Lower Mississippi Valley</option>
<option value="F476">F476 United States local history: Old Northwest. Northwest Territory</option>
<option value="F516">F516 United States local history: Ohio River and Valley.</option>
<option value="F590.3">F590.3 United States local history: The West. Trans-Mississippi Region. Great Plains</option>
<option value="F721">F721 United States local history: Rocky Mountains. Yellowstone National Park</option>
<option value="F786">F786 United States local history: New Southwest. Colorado River, Canyon, and Valley</option>
<option value="F850.5">F850.5 United States local history: Pacific States</option>
<option value="F975">F975 United States local history: Central American, West Indian, and other countries protected by and having close political affiliations with the United States</option>
<option value="G">G Geography, Anthropology, Recreation</option>
<option value="GA">GA Geography, Anthropology, Recreation: Mathematical geography, Cartography</option>
<option value="GB">GB Geography, Anthropology, Recreation: Physical geography</option>
<option value="GC">GC Geography, Anthropology, Recreation: Oceanography</option>
<option value="GF">GF Geography, Anthropology, Recreation: Human ecology, Anthropogeography</option>
<option value="GN">GN Geography, Anthropology, Recreation: Anthropology</option>
<option value="GR">GR Geography, Anthropology, Recreation: Folklore</option>
<option value="GT">GT Geography, Anthropology, Recreation: Manners and customs</option>
<option value="GV">GV Geography, Anthropology, Recreation: Recreation, Leisure</option>
<option value="H">H Social sciences</option>
<option value="HA">HA Social sciences: Statistics</option>
<option value="HB">HB Social sciences: Economic theory, Demography</option>
<option value="HC">HC Social sciences: Economic history and conditions, Special topics</option>
<option value="HD">HD Social sciences: Economic history and conditions, Production</option>
<option value="HE">HE Social sciences: Transportation and communications</option>
<option value="HF">HF Social sciences: Commerce</option>
<option value="HG">HG Social sciences: Finance</option>
<option value="HJ">HJ Social sciences: Public finance</option>
<option value="HM">HM Social sciences: Sociology</option>
<option value="HN">HN Social sciences: Social history and conditions, Social problems</option>
<option value="HQ">HQ Social sciences: The family, Marriage, Sex and Gender</option>
<option value="HS">HS Social sciences: Societies: secret, benevolent, etc.</option>
<option value="HT">HT Social sciences: Communities, Classes, Races</option>
<option value="HV">HV Social sciences: Social pathology, Social and Public Welfare</option>
<option value="HX">HX Social sciences: Socialism, Communism, Anarchism</option>
<option value="J">J Political science</option>
<option value="JA">JA Political science: Political science</option>
<option value="JC">JC Political science: Political theory</option>
<option value="JF">JF Political science: Political institutions and public administration</option>
<option value="JK">JK Political science: Political inst. and pub. Admin.: United States</option>
<option value="JL">JL Political science: Political inst. and pub. Admin.: America</option>
<option value="JN">JN Political science: Political inst. and pub. Admin.: Europe</option>
<option value="JQ">JQ Political science: Political inst. and pub. Admin.: Asia, Africa and Oceania</option>
<option value="JS">JS Political science: Local government, Municipal government</option>
<option value="JV">JV Political science: Colonies and colonization, International migration</option>
<option value="JX">JX Political science: International law</option>
<option value="JZ">JZ Political science: International relations</option>
<option value="K">K Law in general, Comparative and uniform law, Jurisprudence</option>
<option value="KBM">KBM Law in general, Comparative and uniform law, Jurisprudence: Jewish law</option>
<option value="KBR">KBR Law in general, Comparative and uniform law, Jurisprudence: History of canon law</option>
<option value="KD">KD Law in general, Comparative and uniform law, Jurisprudence: United Kingdom and Ireland</option>
<option value="KDZ">KDZ Law in general, Comparative and uniform law, Jurisprudence: America, North America</option>
<option value="KE">KE Law in general, Comparative and uniform law, Jurisprudence: Canada</option>
<option value="KF">KF Law in general, Comparative and uniform law, Jurisprudence: United States</option>
<option value="KH">KH Law in general, Comparative and uniform law, Jurisprudence: South America</option>
<option value="KJ">KJ Law in general, Comparative and uniform law, Jurisprudence: Europe</option>
<option value="KL">KL Law in general, Comparative and uniform law, Jurisprudence: Asia and Eurasia, Africa, Pacific Area, and Antarctica</option>
<option value="KN">KN Law in general, Comparative and uniform law, Jurisprudence: South Asia, Southeast Asia, East Asia</option>
<option value="KNX">KNX Law in general, Comparative and uniform law, Jurisprudence: Japan</option>
<option value="KP">KP Law in general, Comparative and uniform law, Jurisprudence: South Asia, Southeast Asia, East Asia</option>
<option value="KZ">KZ Law in general, Comparative and uniform law, Jurisprudence: Law of nations</option>
<option value="L">L Education</option>
<option value="LA">LA Education: History of education</option>
<option value="LB">LB Education: Theory and practice of education</option>
<option value="LC">LC Education: Special aspects of education</option>
<option value="LD">LD Education: Individual institutions: United States</option>
<option value="LE">LE Education: Individual institutions: America (except US)</option>
<option value="LF">LF Education: Individual institutions: Europe</option>
<option value="LH">LH Education: College and school magazines and papers</option>
<option value="LT">LT Education: Textbooks</option>
<option value="M">M Music</option>
<option value="ML">ML Music: Literature of music</option>
<option value="MT">MT Music: Musical instruction and study, Composition</option>
<option value="N">N Fine Arts</option>
<option value="NA">NA Fine Arts: Architecture</option>
<option value="NB">NB Fine Arts: Sculpture</option>
<option value="NC">NC Fine Arts: Drawing, Design, Illustration</option>
<option value="ND">ND Fine Arts: Painting</option>
<option value="NE">NE Fine Arts: Print media</option>
<option value="NK">NK Fine Arts: Decorative and Applied Arts, Decoration and Ornament</option>
<option value="NX">NX Fine Arts: Arts in general</option>
<option value="P">P Language and Literatures</option>
<option value="PA">PA Language and Literatures: Classical Languages and Literature</option>
<option value="PB">PB Language and Literatures: General works</option>
<option value="PC">PC Language and Literatures: Romance languages: Italian, French, Spanish, Portuguese</option>
<option value="PD">PD Language and Literatures: Germanic and Scandinavian languages</option>
<option value="PE">PE Language and Literatures: English</option>
<option value="PF">PF Language and Literatures: West Germanic</option>
<option value="PG">PG Language and Literatures: Slavic (including Russian), Languages and Literature</option>
<option value="PH">PH Language and Literatures: Finno-Ugrian and Basque languages and literatures</option>
<option value="PJ">PJ Language and Literatures: Oriental languages and literatures</option>
<option value="PK">PK Language and Literatures: Indo-Iranian literatures</option>
<option value="PL">PL Language and Literatures: Languages and literatures of Eastern Asia, Africa, Oceania</option>
<option value="PM">PM Language and Literatures: Indigenous American and Artificial Languages</option>
<option value="PN">PN Language and Literatures: Literature: General, Criticism, Collections</option>
<option value="PQ">PQ Language and Literatures: Romance literatures: French, Italian, Spanish, Portuguese</option>
<option value="PR">PR Language and Literatures: English literature</option>
<option value="PS">PS Language and Literatures: American and Canadian literature</option>
<option value="PT">PT Language and Literatures: Germanic, Scandinavian, and Icelandic literatures</option>
<option value="PZ">PZ Language and Literatures: Juvenile belles lettres</option>
<option value="Q">Q Science</option>
<option value="QA">QA Science: Mathematics</option>
<option value="QB">QB Science: Astronomy</option>
<option value="QC">QC Science: Physics</option>
<option value="QD">QD Science: Chemistry</option>
<option value="QE">QE Science: Geology</option>
<option value="QH">QH Science: Natural history</option>
<option value="QH301">QH301 Science: Biology</option>
<option value="QK">QK Science: Botany</option>
<option value="QL">QL Science: Zoology</option>
<option value="QM">QM Science: Human anatomy</option>
<option value="QP">QP Science: Physiology</option>
<option value="QR">QR Science: Microbiology</option>
<option value="R">R Medicine</option>
<option value="RA">RA Medicine: Public aspects of medicine</option>
<option value="RB">RB Medicine: Pathology</option>
<option value="RC">RC Medicine: Internal medicine</option>
<option value="RD">RD Medicine: Surgery</option>
<option value="RE">RE Medicine: Ophthalmology</option>
<option value="RF">RF Medicine: Otorhinolaryngology</option>
<option value="RG">RG Medicine: Gynecology and obstetrics</option>
<option value="RJ">RJ Medicine: Pediatrics</option>
<option value="RK">RK Medicine: Dentistry</option>
<option value="RL">RL Medicine: Dermatology</option>
<option value="RM">RM Medicine: Therapeutics, Pharmacology</option>
<option value="RS">RS Medicine: Pharmacy and materia medica</option>
<option value="RT">RT Medicine: Nursing</option>
<option value="RV">RV Medicine: Botanic, Thomsonian, and eclectic medicine</option>
<option value="RX">RX Medicine: Homeopathy</option>
<option value="RZ">RZ Medicine: Other systems of medicine</option>
<option value="S">S Agriculture</option>
<option value="SB">SB Agriculture: Plant culture</option>
<option value="SD">SD Agriculture: Forestry</option>
<option value="SF">SF Agriculture: Animal culture</option>
<option value="SH">SH Agriculture: Aquaculture, Fisheries, Angling</option>
<option value="SK">SK Agriculture: Hunting sports</option>
<option value="T">T Technology</option>
<option value="TA">TA Technology: Engineering and Civil engineering</option>
<option value="TC">TC Technology: Ocean engineering</option>
<option value="TD">TD Technology: Environmental technology, Sanitary engineering</option>
<option value="TE">TE Technology: Highway engineering, Roads and pavements</option>
<option value="TF">TF Technology: Railroad engineering and operation</option>
<option value="TG">TG Technology: Bridge engineering</option>
<option value="TH">TH Technology: Building construction</option>
<option value="TJ">TJ Technology: Mechanical engineering and machinery</option>
<option value="TK">TK Technology: Electrical, Electronics and Nuclear engineering</option>
<option value="TL">TL Technology: Motor vehicles, Aeronautics, Astronautics</option>
<option value="TN">TN Technology: Mining engineering, Metallurgy</option>
<option value="TP">TP Technology: Chemical technology</option>
<option value="TR">TR Technology: Photography</option>
<option value="TS">TS Technology: Manufactures</option>
<option value="TT">TT Technology: Handicrafts, Arts and crafts</option>
<option value="TX">TX Technology: Home economics</option>
<option value="U">U Military science</option>
<option value="UA">UA Military science: Armies: Organization, distribution, military situation</option>
<option value="UB">UB Military science: Military administration</option>
<option value="UC">UC Military science: Maintenance and transportation</option>
<option value="UD">UD Military science: Infantry</option>
<option value="UE">UE Military science: Cavalry, Armor</option>
<option value="UF">UF Military science: Artillery</option>
<option value="UG">UG Military science: Military engineering</option>
<option value="UH">UH Military science: Other services</option>
<option value="V">V Naval science</option>
<option value="VA">VA Naval science: Navies: Organization, distribution, naval situation</option>
<option value="VB">VB Naval science: Naval administration</option>
<option value="VE">VE Naval science: Marines</option>
<option value="VF">VF Naval science: Naval ordnance</option>
<option value="VG">VG Naval science: Minor services of navies</option>
<option value="VK">VK Naval science: Navigation, Merchant marine</option>
<option value="VM">VM Naval science: Naval architecture, Shipbuilding, Marine engineering</option>
<option value="Z">Z Bibliography, Library science</option>
</select>
</p>
<p>
<label for="filetype" accesskey="f">Filetype:</label>
<select id="filetype" name="filetype" title="Please choose a file type.">
<option selected="" value="">Any</option>
<option value="readme">Readme (readme)</option>
<option value="license">License (license)</option>
<option value="index">Audio Book Index (index)</option>
<option value="html">HTML (html)</option>
<option value="html.gen">Generated HTML (html.gen)</option>
<option value="html.noimages">Generated HTML (no images) (html.noimages)</option>
<option value="html.images">Generated HTML (with images) (html.images)</option>
<option value="iso">ISO CD/DVD Image (iso)</option>
<option value="epub.dp">EPUB (hand-crafted) (epub.dp)</option>
<option value="epub.noimages">EPUB (no images) (epub.noimages)</option>
<option value="epub.images">EPUB (with images) (epub.images)</option>
<option value="pdf.gen">Generated PDF (pdf.gen)</option>
<option value="pdf.noimages">Generated PDF (no images) (pdf.noimages)</option>
<option value="pdf.images">Generated PDF (with images) (pdf.images)</option>
<option value="kindle.noimages">Kindle (no images) (kindle.noimages)</option>
<option value="kindle.images">Kindle (with images) (kindle.images)</option>
<option value="md5">MD5 Checksum (md5)</option>
<option value="iso.split">Part of ISO CD/DVD Image (iso.split)</option>
<option value="pdf">PDF (pdf)</option>
<option value="css">CSS Stylesheet (css)</option>
<option value="eps">Encapsulated PostScript (eps)</option>
<option value="mus">Finale (mus)</option>
<option value="fen">ForsythEdwards Notation (fen)</option>
<option value="gif">GIF Picture (gif)</option>
<option value="jpg">JPEG Picture (jpg)</option>
<option value="ly">LilyPond (ly)</option>
<option value="mid">MIDI (mid)</option>
<option value="mpg">MPEG Video (mpg)</option>
<option value="lit">MS Lit for PocketPC (lit)</option>
<option value="rtf">MS Rich Text Format (rtf)</option>
<option value="avi">MS Video (avi)</option>
<option value="wav">MS Wave Audio (wav)</option>
<option value="doc">MS Word Document (doc)</option>
<option value="ogg">Ogg Vorbis Audio (ogg)</option>
<option value="pdb">Palm Database (pdb)</option>
<option value="prc">Palm Database (prc)</option>
<option value="plucker">Plucker (plucker)</option>
<option value="png">PNG Picture (png)</option>
<option value="ps">PostScript (ps)</option>
<option value="ps2">PostScript Level 2 (ps2)</option>
<option value="qioo">QiOO Mobile (qioo)</option>
<option value="mov">Quicktime Video (mov)</option>
<option value="qt">Quicktime Video (qt)</option>
<option value="sib">Sibelius (sib)</option>
<option value="svg">SVG (svg)</option>
<option value="dvi">TeX Device Independent (dvi)</option>
<option value="tiff">TIFF Picture (tiff)</option>
<option value="tr">Tome Raider (tr)</option>
<option value="xsl">XSLT Stylesheet (xsl)</option>
<option value="m4b">Apple iTunes Audiobook (m4b)</option>
<option value="m4a">Apple iTunes Audiobook (m4a)</option>
<option value="mp4">MPEG 4 Part 14 (mp4)</option>
<option value="mp3">MP3 Audio (mp3)</option>
<option value="spx">Speex Audio (spx)</option>
<option value="txt.utf-8">Plain Text UTF-8 (txt.utf-8)</option>
<option value="txt">Plain Text (txt)</option>
<option value="aac">AAC (Advanced Audio Coding) (aac)</option>
<option value="flv">Flash Video (flv)</option>
<option value="xls">Microsoft Excel (xls)</option>
<option value="nfo">Proprietary `Folio' format (nfo)</option>
<option value="pageimages">Raw Page Images (pageimages)</option>
<option value="rdf">RDF (rdf)</option>
<option value="rst.gen">reStructuredText (rst.gen)</option>
<option value="tei">TEI Text Encoding Initiative (tei)</option>
<option value="tex">TeX (tex)</option>
<option value="wma">Windows Media Audio (wma)</option>
<option value="xml">XML (xml)</option>
<option value="rst">reStructuredText (rst)</option>
<option value="cover.medium">Cover Medium (cover.medium)</option>
<option value="cover.small">Cover Thumbnail (cover.small)</option>
<option value="rst.master">reStructuredText Master (rst.master)</option>
<option value="?">Unspecified (?)</option>
</select>
</p>
<p>
<input type="submit" id="submit" name="submit_search" value="Search" />
</p>
</div>
</div>
<!-- Advanced search form ends here -->
</form>
<a class="button" href="#popup4">Help</a><input id="collapsible5" class="toggle" type="checkbox" /> <label for="collapsible5" class="lbl-toggle">Browsing Options </label>
<div class="collapsible-content">
<div class="content-inner">
<div class="pgdbnavbar">
<p>Authors:
<a href="/browse/authors/a">A</a>&nbsp;
<a href="/browse/authors/b">B</a>&nbsp;
<a href="/browse/authors/c">C</a>&nbsp;
<a href="/browse/authors/d">D</a>&nbsp;
<a href="/browse/authors/e">E</a>&nbsp;
<a href="/browse/authors/f">F</a>&nbsp;
<a href="/browse/authors/g">G</a>&nbsp;
<a href="/browse/authors/h">H</a>&nbsp;
<a href="/browse/authors/i">I</a>&nbsp;
<a href="/browse/authors/j">J</a>&nbsp;
<a href="/browse/authors/k">K</a>&nbsp;
<a href="/browse/authors/l">L</a>&nbsp;
<a href="/browse/authors/m">M</a>&nbsp;
<a href="/browse/authors/n">N</a>&nbsp;
<a href="/browse/authors/o">O</a>&nbsp;
<a href="/browse/authors/p">P</a>&nbsp;
<a href="/browse/authors/q">Q</a>&nbsp;
<a href="/browse/authors/r">R</a>&nbsp;
<a href="/browse/authors/s">S</a>&nbsp;
<a href="/browse/authors/t">T</a>&nbsp;
<a href="/browse/authors/u">U</a>&nbsp;
<a href="/browse/authors/v">V</a>&nbsp;
<a href="/browse/authors/w">W</a>&nbsp;
<a href="/browse/authors/x">X</a>&nbsp;
<a href="/browse/authors/y">Y</a>&nbsp;
<a href="/browse/authors/z">Z</a>&nbsp;
<a href="/browse/authors/other">other</a>&nbsp;
</p>
<p>Titles:
<a href="/browse/titles/a">A</a>&nbsp;
<a href="/browse/titles/b">B</a>&nbsp;
<a href="/browse/titles/c">C</a>&nbsp;
<a href="/browse/titles/d">D</a>&nbsp;
<a href="/browse/titles/e">E</a>&nbsp;
<a href="/browse/titles/f">F</a>&nbsp;
<a href="/browse/titles/g">G</a>&nbsp;
<a href="/browse/titles/h">H</a>&nbsp;
<a href="/browse/titles/i">I</a>&nbsp;
<a href="/browse/titles/j">J</a>&nbsp;
<a href="/browse/titles/k">K</a>&nbsp;
<a href="/browse/titles/l">L</a>&nbsp;
<a href="/browse/titles/m">M</a>&nbsp;
<a href="/browse/titles/n">N</a>&nbsp;
<a href="/browse/titles/o">O</a>&nbsp;
<a href="/browse/titles/p">P</a>&nbsp;
<a href="/browse/titles/q">Q</a>&nbsp;
<a href="/browse/titles/r">R</a>&nbsp;
<a href="/browse/titles/s">S</a>&nbsp;
<a href="/browse/titles/t">T</a>&nbsp;
<a href="/browse/titles/u">U</a>&nbsp;
<a href="/browse/titles/v">V</a>&nbsp;
<a href="/browse/titles/w">W</a>&nbsp;
<a href="/browse/titles/x">X</a>&nbsp;
<a href="/browse/titles/y">Y</a>&nbsp;
<a href="/browse/titles/z">Z</a>&nbsp;
<a href="/browse/titles/other">other</a>&nbsp;
</p>
<p>Languages with more than 50 books:
<a href="/browse/languages/zh" title="Chinese (441)">Chinese</a>&nbsp;
<a href="/browse/languages/da" title="Danish (68)">Danish</a>&nbsp;
<a href="/browse/languages/nl" title="Dutch (800)">Dutch</a>&nbsp;
<a href="/browse/languages/en" title="English (48426)">English</a>&nbsp;
<a href="/browse/languages/eo" title="Esperanto (118)">Esperanto</a>&nbsp;
<a href="/browse/languages/fi" title="Finnish (2006)">Finnish</a>&nbsp;
<a href="/browse/languages/fr" title="French (2964)">French</a>&nbsp;
<a href="/browse/languages/de" title="German (1756)">German</a>&nbsp;
<a href="/browse/languages/el" title="Greek (220)">Greek</a>&nbsp;
<a href="/browse/languages/hu" title="Hungarian (183)">Hungarian</a>&nbsp;
<a href="/browse/languages/it" title="Italian (759)">Italian</a>&nbsp;
<a href="/browse/languages/la" title="Latin (122)">Latin</a>&nbsp;
<a href="/browse/languages/pt" title="Portuguese (552)">Portuguese</a>&nbsp;
<a href="/browse/languages/es" title="Spanish (630)">Spanish</a>&nbsp;
<a href="/browse/languages/sv" title="Swedish (193)">Swedish</a>&nbsp;
<a href="/browse/languages/tl" title="Tagalog (60)">Tagalog</a>&nbsp;
</p>
<p>Languages with up to 50 books:
<a href="/browse/languages/af" title="Afrikaans (4)">Afrikaans</a>&nbsp;
<a href="/browse/languages/ale" title="Aleut (1)">Aleut</a>&nbsp;
<a href="/browse/languages/ar" title="Arabic (1)">Arabic</a>&nbsp;
<a href="/browse/languages/arp" title="Arapaho (2)">Arapaho</a>&nbsp;
<a href="/browse/languages/brx" title="Bodo (2)">Bodo</a>&nbsp;
<a href="/browse/languages/br" title="Breton (1)">Breton</a>&nbsp;
<a href="/browse/languages/bg" title="Bulgarian (6)">Bulgarian</a>&nbsp;
<a href="/browse/languages/rmr" title="Caló (1)">Caló</a>&nbsp;
<a href="/browse/languages/ca" title="Catalan (33)">Catalan</a>&nbsp;
<a href="/browse/languages/ceb" title="Cebuano (3)">Cebuano</a>&nbsp;
<a href="/browse/languages/cs" title="Czech (10)">Czech</a>&nbsp;
<a href="/browse/languages/et" title="Estonian (1)">Estonian</a>&nbsp;
<a href="/browse/languages/fa" title="Farsi (1)">Farsi</a>&nbsp;
<a href="/browse/languages/fy" title="Frisian (2)">Frisian</a>&nbsp;
<a href="/browse/languages/fur" title="Friulian (7)">Friulian</a>&nbsp;
<a href="/browse/languages/gla" title="Gaelic, Scottish (2)">Gaelic, Scottish</a>&nbsp;
<a href="/browse/languages/gl" title="Galician (2)">Galician</a>&nbsp;
<a href="/browse/languages/kld" title="Gamilaraay (1)">Gamilaraay</a>&nbsp;
<a href="/browse/languages/grc" title="Greek, Ancient (3)">Greek, Ancient</a>&nbsp;
<a href="/browse/languages/he" title="Hebrew (6)">Hebrew</a>&nbsp;
<a href="/browse/languages/is" title="Icelandic (7)">Icelandic</a>&nbsp;
<a href="/browse/languages/ilo" title="Iloko (3)">Iloko</a>&nbsp;
<a href="/browse/languages/ia" title="Interlingua (1)">Interlingua</a>&nbsp;
<a href="/browse/languages/iu" title="Inuktitut (1)">Inuktitut</a>&nbsp;
<a href="/browse/languages/ga" title="Irish (2)">Irish</a>&nbsp;
<a href="/browse/languages/ja" title="Japanese (22)">Japanese</a>&nbsp;
<a href="/browse/languages/csb" title="Kashubian (1)">Kashubian</a>&nbsp;
<a href="/browse/languages/kha" title="Khasi (1)">Khasi</a>&nbsp;
<a href="/browse/languages/ko" title="Korean (1)">Korean</a>&nbsp;
<a href="/browse/languages/lt" title="Lithuanian (1)">Lithuanian</a>&nbsp;
<a href="/browse/languages/mi" title="Maori (2)">Maori</a>&nbsp;
<a href="/browse/languages/myn" title="Mayan Languages (2)">Mayan Languages</a>&nbsp;
<a href="/browse/languages/enm" title="Middle English (6)">Middle English</a>&nbsp;
<a href="/browse/languages/nah" title="Nahuatl (3)">Nahuatl</a>&nbsp;
<a href="/browse/languages/nap" title="Napoletano-Calabrese (1)">Napoletano-Calabrese</a>&nbsp;
<a href="/browse/languages/nav" title="Navajo (3)">Navajo</a>&nbsp;
<a href="/browse/languages/nai" title="North American Indian (3)">North American Indian</a>&nbsp;
<a href="/browse/languages/no" title="Norwegian (19)">Norwegian</a>&nbsp;
<a href="/browse/languages/oc" title="Occitan (1)">Occitan</a>&nbsp;
<a href="/browse/languages/oji" title="Ojibwa (1)">Ojibwa</a>&nbsp;
<a href="/browse/languages/ang" title="Old English (4)">Old English</a>&nbsp;
<a href="/browse/languages/pl" title="Polish (31)">Polish</a>&nbsp;
<a href="/browse/languages/ro" title="Romanian (2)">Romanian</a>&nbsp;
<a href="/browse/languages/ru" title="Russian (9)">Russian</a>&nbsp;
<a href="/browse/languages/sa" title="Sanskrit (1)">Sanskrit</a>&nbsp;
<a href="/browse/languages/sr" title="Serbian (4)">Serbian</a>&nbsp;
<a href="/browse/languages/sl" title="Slovenian (1)">Slovenian</a>&nbsp;
<a href="/browse/languages/bgs" title="Tagabawa (1)">Tagabawa</a>&nbsp;
<a href="/browse/languages/te" title="Telugu (6)">Telugu</a>&nbsp;
<a href="/browse/languages/cy" title="Welsh (13)">Welsh</a>&nbsp;
<a href="/browse/languages/yi" title="Yiddish (1)">Yiddish</a>&nbsp;
</p>
<p>Special Categories:
<a href="/browse/categories/2" title="Audio Book, computer-generated (370)">Audio Book, computer-generated</a>&nbsp;
<a href="/browse/categories/1" title="Audio Book, human-read (576)">Audio Book, human-read</a>&nbsp;
<a href="/browse/categories/9" title="Compilations (3)">Compilations</a>&nbsp;
<a href="/browse/categories/8" title="Data (87)">Data</a>&nbsp;
<a href="/browse/categories/3" title="Music, recorded (137)">Music, recorded</a>&nbsp;
<a href="/browse/categories/4" title="Music, Sheet (33)">Music, Sheet</a>&nbsp;
<a href="/browse/categories/6" title="Other recordings (31)">Other recordings</a>&nbsp;
<a href="/browse/categories/7" title="Pictures, moving (8)">Pictures, moving</a>&nbsp;
<a href="/browse/categories/5" title="Pictures, still (3)">Pictures, still</a>&nbsp;
</p>
<p>Recent:
<a href="/browse/recent/last1">last 24 hours</a>&nbsp;
<a href="/browse/recent/last7">last 7 days</a>&nbsp;
<a href="/browse/recent/last30">last 30 days</a>&nbsp;
</p>
</div>
</div>
</div>
</div>

View File

@ -119,6 +119,10 @@
<xi:include href="menu.html" /> <xi:include href="menu.html" />
</py:def> </py:def>
<py:def function="advsearch">
<xi:include href="advsearch.html" />
</py:def>
<py:def function="site_footer"> <py:def function="site_footer">
<div class="footer" i18n:comment="On the footer of every page."> <div class="footer" i18n:comment="On the footer of every page.">
<xi:include href="footer.html" /> <xi:include href="footer.html" />