diff --git a/.gitattributes b/.gitattributes
index 5a1981d..da86d63 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,2 +1,7 @@
-* linguist-vendored
-*.py linguist-vendored=false
+docs/* linguist-documentation
+src/interface/static/debug_toolbar linguist-vendored
+src/interface/static/webfonts linguist-vendored
+src/interface/static/js/bootstrap* linguist-vendored
+src/interface/static/js/jquery* linguist-vendored
+src/interface/static/admin/* linguist-vendored
+docker/* linguist-vendored
diff --git a/.github/SUPPORT.md b/.github/SUPPORT.md
index d11d4c6..d34312f 100644
--- a/.github/SUPPORT.md
+++ b/.github/SUPPORT.md
@@ -68,6 +68,8 @@ socket=127.0.0.1:8001
Now you may restart your webserver to apply the changes, and then either run `uwsgi -i uwsgi.ini` fron the project root, or restart your uwsgi service.
+### Set Djangos Secret Key
+* Run `./configure` in your project root
### Import your books
* Run `./importBooks` in your project root
@@ -83,3 +85,4 @@ Please contact us using any of the options below for support. Please be prepared
### Live Support Options
* Discord: [https://discord.gg/H9TbNJS](https://discord.gg/H9TbNJS)
* IRC: [irc.freenode.net/pyShelf](irc://freenode.net/pyshelf)
+* Matrix.org: [#irc_#pyshelf:pyshelf.com](https://app.element.io/#/room/#irc_#pyshelf:pyshelf.com)
diff --git a/.gitignore b/.gitignore
index 7d5c28b..d132133 100755
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,7 @@ books/*
*.epub
*.idea
*.pyc
+.svn/
app/content.opf
.vscode
fontend/db.sqlite3
@@ -9,6 +10,8 @@ GPATH
GRTAGS
GTAGS
data/shelf.json
+package-lock.json
+Pipfile.lock
.#*
frontend/interface/migrations/*
src/backend/data/*.json
@@ -125,10 +128,10 @@ dmypy.json
# End of https://www.gitignore.io/api/python
0
config.backup.json
-create_db.sql
uwsgi.ini
installer.log
pyshelf_nginx.conf
+!docker/pyshelf_nginx.conf
+.env
tags
TAGS
-config.json
diff --git a/README.md b/README.md
index 82bd3c5..1efb1ed 100755
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# pyShelf 0.5.0
+# pyShelf 0.6.0
Terminal based ebook server. Open source & Lightweight.
Having used Calibre for hosting my eBook collection in the past, I found myself frustrated having to install X on my server, or manage my library externally, Thus I have decided to spin up my own.
@@ -8,17 +8,31 @@

-Screenshot is from v0.6.0 on the development branch
-
Discord | IRC freenode.net @ #pyshelf
+### You dont need an X server to host a website, or your Movie & Tv collection, so why should you need one to host ebooks?
+
+_Other solutiions require you to have access to an X server to at the very least generate your book database, pyShelf doesnt.We aim to provide a fully featured ebook server with minimal requirements, and no reliance on X whatsoever._
+
+Follow or influence development @
+ Discord
+ | IRC
+
+
## Current Features
-* Custom Installer -- pre-req installs work on Arch Based Distros Only
+
* Recursive Scanning
-* Fast database access
-* Django based frontend
-* Basic seaching via a SearchVector of author, title, & file_name fields.
-* Ebook Downloading
-* Collections
+* [Django](https://www.djangoproject.com/) based frontend
+* Seach via author, title, & file name fields.
+* Download System
+* Automated Collections
+ * A work in progress, the collections are based on your folder structure.
+* User System
+* Per User Favorites
+* Expanded book information view
+* Websocket server
+ * currently only responds to ping, and importBooks, more responders are planned.
+* Full Docker integration.
+* On Demand Importing
| Branch | Support | Feature set |
| --- | --- | --- |
@@ -27,84 +41,114 @@
| Others | Here there be dragons | These branches are used for day to day development, nothing here should be considered stable.
## Currently Supported Formats
+
* epub
-* development branch has mobi support!
+* mobi
-## Installation Example
-pyShelf Installation Video
+## 0.6.0 Patch Notes.
-## Further Installation & Support Information
-* [SUPPORT.md](https://github.com/th3r00t/pyShelf/blob/development/.github/SUPPORT.md)
+# New Features
-## 0.5.0 Patch Notes.
+* Automated Collections
+ * A work in progress, the collections are based on your folder structure.
+* User System
+* Per User Favorites
+* Expanded book information view
+* Websocket server
+ * currently only responds to ping, and importBooks, more responders are planned.
+* Full Docker integration.
+* On Demand Importing
+* .mobi Support
+* Result set ordering
+ * You can now choose to order your results:
+ * Title
+ * Author
+ * Categories
+ * & Tags
+* Reworked UI/UX
+ * More intuitive, less intrusive, & stays out of the way. caveat: I need to rework the placement of the next & previous page controls. While they do remain usable, I intend to have them follow the users
+ position on the page in future releases.
+
+
+
+* New controls
+ * Sort
+ * Ascending / Descending result set
+ * Display of the result set count, and your current position in the set.
+ * A pop over layer to hold things like
+ * [x] User login & Registration
+ * [x] Control panel
+ * [x] Book details
+
+## Installation & Support Information
+
+# Installation
+
+## Docker
+
+The official Docker image for pyShelf is [`pyshelf/pyshelf`](https://hub.docker.com/r/pyshelf/pyshelf). The easiest way to get pyShelf running is through `docker-compose`. An example docker-compose.yml is included in the repo
+
+You'll need a `.env` file wich sets the `LOCAL_BOOK_DIR` variable, for example:
+
+```
+LOCAL_BOOK_DIR=/home/someone/books
+```
+
+The Docker image is still new, so there could still be some issues and missing features. Feel free to create a bug-issue when you encounter a bug. Development of the Docker image is discussed in https://github.com/th3r00t/pyShelf/pull/53 . Currently the database needs to be [PostgreSQL](https://www.postgresql.org/) with the account details shown in the example `docker-compose.yml`.
+
+## Self Hosted
+This is targeted towards Network Administrators, and home enthusiasts whom I assume will know how to setup a [Django](https://www.djangoproject.com/) app, and a [PostgreSQL](https://www.postgresql.org/) server. For those unfamiliar with the required setup please use the included docker-compose.yml
### Pre-req Dependencies
-* gcc -- This will be installed by the new pre-installer script if its binary is not detected at /usr/bin/gcc
-Users on distros other then Arch should install gcc via their systems package manager prior to
-running the installer.
-* Python3
+
+* gcc
+* python3
* pip
-### New Features
-* Collections
-We are now categorizing your ebooks into collections based on the folder
-structure used to store them. Any folder after the root book folder is now
-considered as a collection.
-#### books/forgotten realms/ -> Forgotten Realms Collection.
-#### books/Dune/Prelude To Dune -> Dune, & Preluse To Dune Collections.
+* postgresql
-In addition to the work on the collection system, a good deal of time was spent
-on the installer, and the concept of having an installer in the first place.
+Once your database is ready very little is required to get the system up and running:
-I mainly wanted to make this project for Network Administrators, and other home
-enthusiasts whom I assume will know how to setup a Django app, and a
-Postgres server. Beyond that theres nothing the user has to do to make the
-system work...
+From the main directory
-The installer will only run correctly on arch based distros. This could be
-easily rectified to include other package managers, Members of the community
-are welcome to dig into the installer source and patch in support
-for other package managers.
+`pip install -r requirements.txt`
-There is some support for detection of the aptitude package manager
-installation already present in the source now, however it is not complete and
-should not be relied upon to be present in future releases unless completed by
-a member of the community,
+`./configure`
-## Development
+`cd src/ && daphne frontend.asgi:application` add -b 0.0.0.0 -p 8000 as required to specify which interface\'s and port to bind too
-* [`pre-commit`](https://pre-commit.com/)
-_Before developing, run `pre-commit install` See the [documentation](https://pre-commit.com/) for more information._
+As of 0.6.0 Django is being served up via Daphne, and the static files are served up via whitenoise.
-* ['Doxygen'](http://www.doxygen.nl/)
-_Any changes to source should be documented and have run doxygen doxygen.conf prior to commiting._
+## In Progress
-* ['sem-ver'](https://semver.org)
-_Before advancing version numbers be sure to set PROJECT_NUMBER in doxygen.conf accordingly._
+### Organizational tools.
-## Configuration
-
-All configuration is now handled by the installer.
-
-Running via the Django test server might be possible, albeit not recomended.
-
-### In Progress
-
-#### Organizational tools.
- [x] Automated Collections
- [ ] Manual Collections
- [ ] Books Removal
- [ ] Access Restrictions
- [ ] Metadata Manipulation
- [ ] Others?
-#### Improved cover image storage, and acquisition.
-#### OPDS Support
-#### Support for other formats
-- [ ] .mobi
+
+### Improved cover image storage, and acquisition.
+
+### OPDS Support
+
+### Support for other formats
+
+- [x] .mobi
- [ ] .pdf
- [ ] .cbz
- [ ] .zip (Zipped book folders, is this a new idea? (Consider storing your library folders zipped and retrieving a book on demand))
-### Future Goals
-#### Terminal Backend for catalogue maintenance
-#### Calculate page count from total characters
- * (Thanks to @Fireblend for the idea) https://github.com/th3r00t/pyShelf/issues/3
+## Future Goals
+
+### Terminal Backend for catalogue maintenance
+
+## Development
+
+* [`pre-commit`](https://pre-commit.com/)
+_Before developing, run `pre-commit install` See the [documentation](https://pre-commit.com/) for more information._
+* ['Doxygen'](http://www.doxygen.nl/)
+_Any changes to source should be documented and have run doxygen doxygen.conf prior to commiting._
+* ['sem-ver'](https://semver.org)
+_Before advancing version numbers be sure to set PROJECT_NUMBER in doxygen.conf accordingly._
diff --git a/config.json b/config.json
old mode 100755
new mode 100644
index 71951be..2dfe7ad
--- a/config.json
+++ b/config.json
@@ -1 +1 @@
-{"TITLE": "pyShelf E-Book Server", "VERSION": "0.5.0", "BOOKPATH": "", "DB_HOST": "localhost", "DB_PORT": "5432", "DATABASE": "pyshelf", "USER": "pyshelf", "PASSWORD": "pyshelf", "BOOKSHELF": "data/shelf.json", "ALLOWED_HOSTS": "*", "hostname": "localhost", "webport": "8000", "wsgiport": "8001"}
+{"TITLE": "pyShelf E-Book Server", "VERSION": "0.6.0", "BOOKPATH": "", "DB_HOST": "localhost", "DB_PORT": "5432", "DATABASE": "pyshelf", "USER": "pyshelf", "PASSWORD": "pyshelf", "BOOKSHELF": "data/shelf.json", "ALLOWED_HOSTS": "*", "SECRET": "", "BUILD_MODE": "production"}
diff --git a/configure b/configure
new file mode 100755
index 0000000..62e60d4
--- /dev/null
+++ b/configure
@@ -0,0 +1,53 @@
+#!/usr/bin/env python3
+import os
+import sys
+import json
+from pathlib import Path
+from django.core.management.utils import get_random_secret_key
+from src.backend.lib.pyShelf import Admin
+
+
+def load_config():
+ with open('config.json',"r") as file:
+ config = json.load(file)
+ file.close()
+ return config
+
+
+def write_config(config):
+ with open('config.json',"w") as file:
+ json.dump(config, file)
+ file.close()
+
+
+def set_secret(config=load_config()):
+ if config["SECRET"] == "":
+ config["SECRET"] = get_random_secret_key()
+ print(config["SECRET"])
+ else:
+ print("Secret already set, skipping.")
+
+def set_book_directory(config=load_config(), *args):
+ if config["BOOKPATH"] == "":
+ try: config["BOOKPATH"] = args[0]
+ except IndexError: config["BOOKPATH"] = input("Input Book Directory ")
+
+def init_django_database():
+ cmds = [
+ 'python3 manage.py makemigrations',
+ 'python3 manage.py makemigrations interface',
+ 'python3 manage.py migrate',
+ 'python3 manage.py migrate interface',
+ ]
+ os.chdir("src")
+ for cmd in cmds:
+ os.system(cmd)
+ os.chdir("../")
+
+config = load_config()
+
+set_secret(config)
+set_book_directory(config)
+write_config(config)
+init_django_database()
+Admin(Path.cwd()).createsuperuser()
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..189eac1
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,24 @@
+version: "3.7"
+
+services:
+ db:
+ image: "postgres"
+ environment:
+ - "POSTGRES_PASSWORD=pyshelf"
+ - "POSTGRES_USER=pyshelf"
+ - "POSTGRES_DB=pyshelf"
+ volumes:
+ - "db_data:/var/lib/postgresql/data/"
+
+ pyshelf:
+ image: "pyshelf/pyshelf"
+ ports:
+ - "8000:8000"
+ - "1337:1337"
+ volumes:
+ - "${LOCAL_BOOK_DIR}:/books"
+ depends_on:
+ - db
+
+volumes:
+ db_data:
diff --git a/docker/Dockerfile b/docker/Dockerfile
new file mode 100644
index 0000000..8508064
--- /dev/null
+++ b/docker/Dockerfile
@@ -0,0 +1,28 @@
+
+# This file is used to build the Dockerhub image. To host pyShelf yourself for
+# production, please use the official pyShelf image on
+# https://hub.docker.com/r/pyshelf/pyshelf
+
+# Use the following commands to build and push the docker image to Dockerhub:
+#
+# docker build -t pyshelf/pyshelf -f ./docker/Dockerfile .
+# docker login
+# docker push pyshelf/pyshelf
+
+FROM ubuntu
+
+EXPOSE 8000
+EXPOSE 1337
+
+RUN apt-get update -y
+RUN DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential python3 python3-dev python3-pip python3-venv
+
+COPY . /pyshelf
+COPY ./docker/config.json /pyshelf/config.json
+
+WORKDIR /pyshelf/
+RUN python3 -m pip install -r requirements.txt
+
+ENTRYPOINT python3 configure \
+ && cd src/ \
+ && daphne -b 0.0.0.0 -p 8000 frontend.asgi:application
diff --git a/docker/README.md b/docker/README.md
new file mode 100644
index 0000000..2c6f0d1
--- /dev/null
+++ b/docker/README.md
@@ -0,0 +1,6 @@
+Use `docker build -t pyshelf/pyshelf -f ./docker/Dockerfile .` in the project root to build the pyshelf image.
+
+Make sure the following files are in sync:
+* config.json
+* docker/pyshelf_nginx.conf
+* uwsgi.ini
\ No newline at end of file
diff --git a/docker/config.json b/docker/config.json
new file mode 100644
index 0000000..809bd56
--- /dev/null
+++ b/docker/config.json
@@ -0,0 +1,14 @@
+{
+ "TITLE": "pyShelf E-Book Server",
+ "VERSION": "0.6.0 Docker",
+ "BOOKPATH": "/books",
+ "DB_HOST": "db",
+ "DB_PORT": "5432",
+ "DATABASE": "pyshelf",
+ "USER": "pyshelf",
+ "PASSWORD": "pyshelf",
+ "BOOKSHELF": "data/shelf.json",
+ "ALLOWED_HOSTS": "*",
+ "SECRET": "",
+ "BUILD_MODE": "production"
+}
diff --git a/docker/development.docker-compose.yml b/docker/development.docker-compose.yml
new file mode 100644
index 0000000..f6d97fe
--- /dev/null
+++ b/docker/development.docker-compose.yml
@@ -0,0 +1,34 @@
+version: "3.7"
+
+# This file is used to test the Dockerhub image. To host pyShelf yourself for
+# production, please use the official pyShelf image on
+# https://hub.docker.com/r/pyshelf/pyshelf
+
+# For development, use the following command in the root folder:
+#
+# docker-compose -f ./docker/development.docker-compose.yml up --build
+
+services:
+ db:
+ image: "postgres"
+ environment:
+ - "POSTGRES_PASSWORD=pyshelf"
+ - "POSTGRES_USER=pyshelf"
+ - "POSTGRES_DB=pyshelf"
+ volumes:
+ - "db_data:/var/lib/postgresql/data/"
+
+ pyshelf:
+ build:
+ context: ..
+ dockerfile: ./docker/Dockerfile
+ ports:
+ - "8080:8000"
+ - "1337:1337"
+ volumes:
+ - "${LOCAL_BOOK_DIR}:/books"
+ depends_on:
+ - db
+
+volumes:
+ db_data:
diff --git a/docker/pyshelf_nginx.conf b/docker/pyshelf_nginx.conf
new file mode 100644
index 0000000..67c8724
--- /dev/null
+++ b/docker/pyshelf_nginx.conf
@@ -0,0 +1,30 @@
+upstream django {
+ server unix:///tmp/pyshelf_wsgi.sock;
+}
+
+server {
+ listen 8000;
+ server_name localhost;
+ access_log /var/log/nginx/pyshelf.access.log;
+ error_log /var/log/nginx/pyshelf.error.log;
+ charset utf-8;
+ client_max_body_size 75M;
+
+ location /media {
+ root /pyshelf/src/interface;
+ }
+
+ location /static {
+ root /pyshelf/src/interface;
+ }
+
+ location /books {
+ internal;
+ alias /pyshelf;
+ }
+
+ location / {
+ uwsgi_pass django;
+ include uwsgi_params;
+ }
+}
\ No newline at end of file
diff --git a/docs/html/annotated.html b/docs/html/annotated.html
deleted file mode 100755
index f099159..0000000
--- a/docs/html/annotated.html
+++ /dev/null
@@ -1,82 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: Class List
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Here are the classes, structs, unions and interfaces with brief descriptions:
-
-
-
-
-
diff --git a/docs/html/bc_s.png b/docs/html/bc_s.png
deleted file mode 100755
index 224b29a..0000000
Binary files a/docs/html/bc_s.png and /dev/null differ
diff --git a/docs/html/bdwn.png b/docs/html/bdwn.png
deleted file mode 100755
index 940a0b9..0000000
Binary files a/docs/html/bdwn.png and /dev/null differ
diff --git a/docs/html/classes.html b/docs/html/classes.html
deleted file mode 100755
index d743cd3..0000000
--- a/docs/html/classes.html
+++ /dev/null
@@ -1,90 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: Class Index
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/html/closed.png b/docs/html/closed.png
deleted file mode 100755
index 98cc2c9..0000000
Binary files a/docs/html/closed.png and /dev/null differ
diff --git a/docs/html/d0/d35/classsrc_1_1backend_1_1lib_1_1display_1_1TerminalDisplay.html b/docs/html/d0/d35/classsrc_1_1backend_1_1lib_1_1display_1_1TerminalDisplay.html
deleted file mode 100755
index d4afe5e..0000000
--- a/docs/html/d0/d35/classsrc_1_1backend_1_1lib_1_1display_1_1TerminalDisplay.html
+++ /dev/null
@@ -1,129 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: src.backend.lib.display.TerminalDisplay Class Reference
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-def __init__ (self)
-
-
-def screen (self)
-
-
-def installer (self)
-
-
-def prompt (self, questions)
-
-
-def h_rule (self)
-
-
-def banner (self)
-
-
-def banner_render (self)
-
-
-
-
- term
-
-
- y
-
-
- home
-
-
- user
-
-
- version
-
-
- slogan
-
-
- green
-
-
- blue
-
-
- clr_term
-
-
-
-
The documentation for this class was generated from the following file:
-
-
-
-
-
diff --git a/docs/html/d1/dca/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1InitFiles-members.html b/docs/html/d1/dca/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1InitFiles-members.html
deleted file mode 100755
index 2991047..0000000
--- a/docs/html/d1/dca/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1InitFiles-members.html
+++ /dev/null
@@ -1,64 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: Member List
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
This is the complete list of members for src.backend.lib.pyShelf.InitFiles , including all inherited members.
-
-
-
-
-
diff --git a/docs/html/d3/d29/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Config.html b/docs/html/d3/d29/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Config.html
deleted file mode 100755
index c9dc6cb..0000000
--- a/docs/html/d3/d29/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Config.html
+++ /dev/null
@@ -1,167 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: src.backend.tests.library_test.Test_Config Class Reference
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-def __init__ (self)
-
-def open_file (self, root="config.json")
-
-
-
-
- book_path
-
-
- TITLE
-
-
- VERSION
-
-
- book_shelf
-
-
- catalogue_db
-
-
- user
-
-
- password
-
-
- db_host
-
-
- db_port
-
-
- file_array
-
-
- root
-
-
- auto_scan
-
-
- allowed_hosts
-
-
- db_user
-
-
- db_pass
-
-
-
-
-
-
◆ open_file()
-
-
-
-
-
- def src.backend.tests.library_test.Test_Config.open_file
- (
-
- self ,
-
-
-
-
-
- _cp = "config.json"
-
-
-
- )
-
-
-
-
-
-
The documentation for this class was generated from the following file:
-
-
-
-
-
diff --git a/docs/html/d3/d29/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Config.png b/docs/html/d3/d29/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Config.png
deleted file mode 100755
index d263ae1..0000000
Binary files a/docs/html/d3/d29/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Config.png and /dev/null differ
diff --git a/docs/html/d3/d4a/classsrc_1_1backend_1_1lib_1_1config_1_1Config-members.html b/docs/html/d3/d4a/classsrc_1_1backend_1_1lib_1_1config_1_1Config-members.html
deleted file mode 100755
index e769b12..0000000
--- a/docs/html/d3/d4a/classsrc_1_1backend_1_1lib_1_1config_1_1Config-members.html
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: Member List
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
This is the complete list of members for src.backend.lib.config.Config , including all inherited members.
-
-
-
-
-
diff --git a/docs/html/d3/d95/classsrc_1_1backend_1_1tests_1_1library__test_1_1TestCatalogue-members.html b/docs/html/d3/d95/classsrc_1_1backend_1_1tests_1_1library__test_1_1TestCatalogue-members.html
deleted file mode 100755
index 7661a71..0000000
--- a/docs/html/d3/d95/classsrc_1_1backend_1_1tests_1_1library__test_1_1TestCatalogue-members.html
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: Member List
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
This is the complete list of members for src.backend.tests.library_test.TestCatalogue , including all inherited members.
-
-
-
-
-
diff --git a/docs/html/d4/d45/classsrc_1_1backend_1_1lib_1_1display_1_1TerminalDisplay-members.html b/docs/html/d4/d45/classsrc_1_1backend_1_1lib_1_1display_1_1TerminalDisplay-members.html
deleted file mode 100755
index aa04309..0000000
--- a/docs/html/d4/d45/classsrc_1_1backend_1_1lib_1_1display_1_1TerminalDisplay-members.html
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: Member List
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
This is the complete list of members for src.backend.lib.display.TerminalDisplay , including all inherited members.
-
-
-
-
-
diff --git a/docs/html/d5/da5/classsrc_1_1backend_1_1lib_1_1library_1_1Catalogue.html b/docs/html/d5/da5/classsrc_1_1backend_1_1lib_1_1library_1_1Catalogue.html
deleted file mode 100755
index aad2433..0000000
--- a/docs/html/d5/da5/classsrc_1_1backend_1_1lib_1_1library_1_1Catalogue.html
+++ /dev/null
@@ -1,407 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: src.backend.lib.library.Catalogue Class Reference
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-def __init__ (self, config)
-
-def scan_folder (self, _path=None)
-
-def filter_books (self)
-
-def extract_metadata (self, book)
-
-def extract_content (self, book_zip, book)
-
-def extract_cover_html (self, book_zip, book)
-
-def extract_cover_image (self, book_zip, book)
-
-def compare_shelf_current (self)
-
-def import_books (self, list=None)
-
-
-
-
- file_list
-
-
- opf_regx
-
-
- cover_regx
-
-
- html_regx
-
-
- root_dir
-
-
- book_folder
-
-
- book_shelf
-
-
- books
-
-
- db_pointer
-
-
- config
-
-
-
-
Decodes book metadata for storage
-
-
-
◆ compare_shelf_current()
-
-
-
-
-
- def src.backend.lib.library.Catalogue.compare_shelf_current
- (
-
- self )
-
-
-
-
-
Calls storage system, gets list of books stored and compares against files on disk
-
-
-
-
-
◆ extract_content()
-
-
-
-
-
- def src.backend.lib.library.Catalogue.extract_content
- (
-
- self ,
-
-
-
-
-
- book_zip ,
-
-
-
-
-
- book
-
-
-
- )
-
-
-
-
-
Opens epub as zip file filters then stores as list any files matching opf_regx
-
-
-
-
-
◆ extract_cover_html()
-
-
-
-
-
- def src.backend.lib.library.Catalogue.extract_cover_html
- (
-
- self ,
-
-
-
-
-
- book_zip ,
-
-
-
-
-
- book
-
-
-
- )
-
-
-
-
-
Opens epub as zip file filters then stores as list any files matching html_regx
-
-
-
-
-
◆ extract_cover_image()
-
-
-
-
-
- def src.backend.lib.library.Catalogue.extract_cover_image
- (
-
- self ,
-
-
-
-
-
- book_zip ,
-
-
-
-
-
- book
-
-
-
- )
-
-
-
-
-
Opens epub as zip file filters then stores as list any files matching cover_regx
-
-
-
-
-
◆ extract_metadata()
-
-
-
-
-
- def src.backend.lib.library.Catalogue.extract_metadata
- (
-
- self ,
-
-
-
-
-
- book
-
-
-
- )
-
-
-
-
-
Return extracted metadata and cover picture
-book['path'] == Full path to ebook file
-book['files'] == list of files from self.process_book(book)
-
-
-
-
-
◆ filter_books()
-
-
-
-
-
- def src.backend.lib.library.Catalogue.filter_books
- (
-
- self )
-
-
-
-
-
Calls scan_folder and filters out book files
-Proceeds to call process_book
-
-:returns self._book_list_expanded: json string containing all book metadata
-
-
Reimplemented in src.backend.tests.library_test.Test_Catalogue .
-
-
-
-
-
◆ import_books()
-
-
-
-
-
- def src.backend.lib.library.Catalogue.import_books
- (
-
- self ,
-
-
-
-
-
- list = None
-
-
-
- )
-
-
-
-
-
Main entry point for import operations.
-Gets a list of new files via compare_shelf_current.
-Iterates over list and inserts new books into database.
-
-
-
-
-
◆ process_book()
-
-
-
-
-
-
-
-
- def src.backend.lib.library.Catalogue.process_book
- (
-
- book )
-
-
-
-
-
-static
-
-
-
-
Return dictionary of epub file contents
-
-
-
-
◆ scan_folder()
-
-
-
-
-
- def src.backend.lib.library.Catalogue.scan_folder
- (
-
- self ,
-
-
-
-
-
- _path = None
-
-
-
- )
-
-
-
-
-
Scan folder by _path, allows recurisive scanning
-
-
-
-
The documentation for this class was generated from the following file:
-
-
-
-
-
diff --git a/docs/html/d5/da5/classsrc_1_1backend_1_1lib_1_1library_1_1Catalogue.png b/docs/html/d5/da5/classsrc_1_1backend_1_1lib_1_1library_1_1Catalogue.png
deleted file mode 100755
index 22e8081..0000000
Binary files a/docs/html/d5/da5/classsrc_1_1backend_1_1lib_1_1library_1_1Catalogue.png and /dev/null differ
diff --git a/docs/html/d5/ddf/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Config-members.html b/docs/html/d5/ddf/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Config-members.html
deleted file mode 100755
index 43d40c5..0000000
--- a/docs/html/d5/ddf/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Config-members.html
+++ /dev/null
@@ -1,80 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: Member List
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
This is the complete list of members for src.backend.tests.library_test.Test_Config , including all inherited members.
-
-
-
-
-
diff --git a/docs/html/d5/dee/classsrc_1_1backend_1_1tests_1_1config__test_1_1TestConfig-members.html b/docs/html/d5/dee/classsrc_1_1backend_1_1tests_1_1config__test_1_1TestConfig-members.html
deleted file mode 100755
index 5ca6fc7..0000000
--- a/docs/html/d5/dee/classsrc_1_1backend_1_1tests_1_1config__test_1_1TestConfig-members.html
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: Member List
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
This is the complete list of members for src.backend.tests.config_test.TestConfig , including all inherited members.
-
-
-
-
-
diff --git a/docs/html/d6/d20/classsrc_1_1backend_1_1lib_1_1library_1_1Catalogue-members.html b/docs/html/d6/d20/classsrc_1_1backend_1_1lib_1_1library_1_1Catalogue-members.html
deleted file mode 100755
index c0f96a7..0000000
--- a/docs/html/d6/d20/classsrc_1_1backend_1_1lib_1_1library_1_1Catalogue-members.html
+++ /dev/null
@@ -1,82 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: Member List
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
This is the complete list of members for src.backend.lib.library.Catalogue , including all inherited members.
-
- __init__ (self, config) (defined in src.backend.lib.library.Catalogue )src.backend.lib.library.Catalogue
- book_folder (defined in src.backend.lib.library.Catalogue )src.backend.lib.library.Catalogue
- book_shelf (defined in src.backend.lib.library.Catalogue )src.backend.lib.library.Catalogue
- books (defined in src.backend.lib.library.Catalogue )src.backend.lib.library.Catalogue
- compare_shelf_current (self)src.backend.lib.library.Catalogue
- config (defined in src.backend.lib.library.Catalogue )src.backend.lib.library.Catalogue
- cover_regx (defined in src.backend.lib.library.Catalogue )src.backend.lib.library.Catalogue
- db_pointer (defined in src.backend.lib.library.Catalogue )src.backend.lib.library.Catalogue
- extract_content (self, book_zip, book)src.backend.lib.library.Catalogue
- extract_cover_html (self, book_zip, book)src.backend.lib.library.Catalogue
- extract_cover_image (self, book_zip, book)src.backend.lib.library.Catalogue
- extract_metadata (self, book)src.backend.lib.library.Catalogue
- file_list (defined in src.backend.lib.library.Catalogue )src.backend.lib.library.Catalogue
- filter_books (self)src.backend.lib.library.Catalogue
- html_regx (defined in src.backend.lib.library.Catalogue )src.backend.lib.library.Catalogue
- import_books (self, list=None)src.backend.lib.library.Catalogue
- opf_regx (defined in src.backend.lib.library.Catalogue )src.backend.lib.library.Catalogue
- process_book (book)src.backend.lib.library.Catalogue static
- root_dir (defined in src.backend.lib.library.Catalogue )src.backend.lib.library.Catalogue
- scan_folder (self, _path=None)src.backend.lib.library.Catalogue
-
-
-
-
-
diff --git a/docs/html/d7/d40/classsrc_1_1backend_1_1lib_1_1storage_1_1Storage.html b/docs/html/d7/d40/classsrc_1_1backend_1_1lib_1_1storage_1_1Storage.html
deleted file mode 100755
index a0f660a..0000000
--- a/docs/html/d7/d40/classsrc_1_1backend_1_1lib_1_1storage_1_1Storage.html
+++ /dev/null
@@ -1,220 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: src.backend.lib.storage.Storage Class Reference
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- sql
-
-
- user
-
-
- password
-
-
- db_host
-
-
- db_port
-
-
- db
-
-
- config
-
-
- cursor
-
-
-
-
Contains all methods for system storage
-
-
◆ book_paths_list()
-
-
-
-
-
- def src.backend.lib.storage.Storage.book_paths_list
- (
-
- self )
-
-
-
-
-
Get file paths from database for comparison to system files
-
-
-
-
-
◆ close()
-
-
-
-
-
- def src.backend.lib.storage.Storage.close
- (
-
- self )
-
-
-
-
-
Close database connection
-
-
-
-
-
◆ commit()
-
-
-
-
-
- def src.backend.lib.storage.Storage.commit
- (
-
- self )
-
-
-
-
-
Commit database transactions
-
-
-
-
-
◆ create_tables()
-
-
-
-
-
- def src.backend.lib.storage.Storage.create_tables
- (
-
- self )
-
-
-
-
-
Create table structure
-
-
-
-
◆ insert_book()
-
-
-
-
-
- def src.backend.lib.storage.Storage.insert_book
- (
-
- self ,
-
-
-
-
-
- book
-
-
-
- )
-
-
-
-
-
Insert book in database
-:returns: True if succeeds False if not
-
-
-
-
The documentation for this class was generated from the following file:
-
-
-
-
-
diff --git a/docs/html/d7/d69/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1BookDisplay-members.html b/docs/html/d7/d69/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1BookDisplay-members.html
deleted file mode 100755
index 6d7ecaa..0000000
--- a/docs/html/d7/d69/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1BookDisplay-members.html
+++ /dev/null
@@ -1,72 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: Member List
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
This is the complete list of members for src.backend.lib.pyShelf.BookDisplay , including all inherited members.
-
-
-
-
-
diff --git a/docs/html/d7/d88/classsrc_1_1backend_1_1lib_1_1api__hooks_1_1DuckDuckGo.html b/docs/html/d7/d88/classsrc_1_1backend_1_1lib_1_1api__hooks_1_1DuckDuckGo.html
deleted file mode 100755
index 4584639..0000000
--- a/docs/html/d7/d88/classsrc_1_1backend_1_1lib_1_1api__hooks_1_1DuckDuckGo.html
+++ /dev/null
@@ -1,113 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: src.backend.lib.api_hooks.DuckDuckGo Class Reference
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-def __init__ (self)
-
-def image_result (self, query)
-
-
-
-
duckduckgo related searching
-
-
◆ image_result()
-
-
-
-
-
- def src.backend.lib.api_hooks.DuckDuckGo.image_result
- (
-
- self ,
-
-
-
-
-
- query
-
-
-
- )
-
-
-
-
-
Returns json containing url to image
-:param _key: &t=h_&iar=images&iax=images&ia=images&format=json&pretty=1
-
-
-
-
The documentation for this class was generated from the following file:
-
-
-
-
-
diff --git a/docs/html/d8/d3d/classsrc_1_1backend_1_1tests_1_1library__test_1_1TestCatalogue.html b/docs/html/d8/d3d/classsrc_1_1backend_1_1tests_1_1library__test_1_1TestCatalogue.html
deleted file mode 100755
index 0bf38c5..0000000
--- a/docs/html/d8/d3d/classsrc_1_1backend_1_1tests_1_1library__test_1_1TestCatalogue.html
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: src.backend.tests.library_test.TestCatalogue Class Reference
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-def test_filter_books (self)
-
-
-
-
- root = os.path.abspath(os.path.curdir)
-
-
- config = Test_Config ()
-
-
-
-
The documentation for this class was generated from the following file:
-
-
-
-
-
diff --git a/docs/html/d8/dfe/classsrc_1_1backend_1_1lib_1_1config_1_1Config.html b/docs/html/d8/dfe/classsrc_1_1backend_1_1lib_1_1config_1_1Config.html
deleted file mode 100755
index 72c66dc..0000000
--- a/docs/html/d8/dfe/classsrc_1_1backend_1_1lib_1_1config_1_1Config.html
+++ /dev/null
@@ -1,197 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: src.backend.lib.config.Config Class Reference
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- book_path
-
-
- TITLE
-
-
- VERSION
-
-
- book_shelf
-
-
- catalogue_db
-
-
- user
-
-
- password
-
-
- db_host
-
-
- db_port
-
-
- file_array
-
-
- root
-
-
- auto_scan
-
-
- allowed_hosts
-
-
- db_user
-
-
- db_pass
-
-
-
-
Main System Configuration
-
-
-
◆ __init__()
-
-
-
-
-
- def src.backend.lib.config.Config.__init__
- (
-
- self ,
-
-
-
-
-
- root
-
-
-
- )
-
-
-
-
-
Initialize main configuration options
-
-
-
-
-
-
◆ open_file()
-
-
-
-
-
- def src.backend.lib.config.Config.open_file
- (
-
- self ,
-
-
-
-
-
- _cp
-
-
-
- )
-
-
-
-
-
-
The documentation for this class was generated from the following file:
-
-
-
-
-
diff --git a/docs/html/d8/dfe/classsrc_1_1backend_1_1lib_1_1config_1_1Config.png b/docs/html/d8/dfe/classsrc_1_1backend_1_1lib_1_1config_1_1Config.png
deleted file mode 100755
index c1f0983..0000000
Binary files a/docs/html/d8/dfe/classsrc_1_1backend_1_1lib_1_1config_1_1Config.png and /dev/null differ
diff --git a/docs/html/da/d3c/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1InitFiles.html b/docs/html/da/d3c/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1InitFiles.html
deleted file mode 100755
index 7588592..0000000
--- a/docs/html/da/d3c/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1InitFiles.html
+++ /dev/null
@@ -1,105 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: src.backend.lib.pyShelf.InitFiles Class Reference
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-def __init__ (self, file_array)
-
-def CreateFile (self, _pointer)
-
-
-
-
First run file creation operations
-
-
◆ CreateFile()
-
-
-
-
-
- def src.backend.lib.pyShelf.InitFiles.CreateFile
- (
-
- self ,
-
-
-
-
-
- _pointer
-
-
-
- )
-
-
-
-
-
Checks if file exists and creates it if not
-
-
-
-
The documentation for this class was generated from the following file:
-
-
-
-
-
diff --git a/docs/html/db/d7d/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1BookDisplay.html b/docs/html/db/d7d/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1BookDisplay.html
deleted file mode 100755
index 721795e..0000000
--- a/docs/html/db/d7d/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1BookDisplay.html
+++ /dev/null
@@ -1,206 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: src.backend.lib.pyShelf.BookDisplay Class Reference
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- books_per_page
-
-
- current_page
-
-
- thumbnail_size
-
-
- thumbnail_scale
-
-
- total_pages
-
-
- screen_size
-
-
-
-
All functions related to displaying book information in the HTML UI
-
-
◆ __init__()
-
-
-
-
-
- def src.backend.lib.pyShelf.BookDisplay.__init__
- (
-
- self ,
-
-
-
-
- **
- kwargs
-
-
-
- )
-
-
-
-
-
Initialize class variables
-:return: None
-
-
-
-
-
-
◆ booksPerPage()
-
-
-
-
-
- def src.backend.lib.pyShelf.BookDisplay.booksPerPage
- (
-
- self ,
-
-
-
-
-
- screen_size
-
-
-
- )
-
-
-
-
-
## TODO Remove me
-Set books per page
-:param screen_size: Array containing x,y pixel sizes
-:return: self.books_per_page
-
-
-
-
-
◆ nextPage()
-
-
-
-
-
- def src.backend.lib.pyShelf.BookDisplay.nextPage
- (
-
- self )
-
-
-
-
-
## TODO Remove me
-Goto next book page
-:return: new current_page
-
-
-
-
-
◆ previousPage()
-
-
-
-
-
- def src.backend.lib.pyShelf.BookDisplay.previousPage
- (
-
- self )
-
-
-
-
-
## TODO Remove me
-Goto previous book page
-:return: new current_page
-
-
-
-
The documentation for this class was generated from the following file:
-
-
-
-
-
diff --git a/docs/html/db/d9a/classsrc_1_1backend_1_1lib_1_1storage_1_1Storage-members.html b/docs/html/db/d9a/classsrc_1_1backend_1_1lib_1_1storage_1_1Storage-members.html
deleted file mode 100755
index a544f40..0000000
--- a/docs/html/db/d9a/classsrc_1_1backend_1_1lib_1_1storage_1_1Storage-members.html
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: Member List
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
This is the complete list of members for src.backend.lib.storage.Storage , including all inherited members.
-
-
-
-
-
diff --git a/docs/html/db/dda/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Catalogue.html b/docs/html/db/dda/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Catalogue.html
deleted file mode 100755
index ee6e13b..0000000
--- a/docs/html/db/dda/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Catalogue.html
+++ /dev/null
@@ -1,462 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: src.backend.tests.library_test.Test_Catalogue Class Reference
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- book_shelf
-
-
- file_list
-
-
- opf_regx
-
-
- cover_regx
-
-
- html_regx
-
-
- root_dir
-
-
- book_folder
-
-
- books
-
-
- db_pointer
-
-
- config
-
-
-
-
-
-
◆ compare_shelf_current()
-
-
-
-
-
-
-
-
- def src.backend.lib.library.Catalogue.compare_shelf_current
- (
-
- self )
-
-
-
-
-
-inherited
-
-
-
-
Calls storage system, gets list of books stored and compares against files on disk
-
-
-
-
-
◆ extract_content()
-
-
-
-
-
-
-
-
- def src.backend.lib.library.Catalogue.extract_content
- (
-
- self ,
-
-
-
-
-
- book_zip ,
-
-
-
-
-
- book
-
-
-
- )
-
-
-
-
-
-inherited
-
-
-
-
Opens epub as zip file filters then stores as list any files matching opf_regx
-
-
-
-
-
◆ extract_cover_html()
-
-
-
-
-
-
-
-
- def src.backend.lib.library.Catalogue.extract_cover_html
- (
-
- self ,
-
-
-
-
-
- book_zip ,
-
-
-
-
-
- book
-
-
-
- )
-
-
-
-
-
-inherited
-
-
-
-
Opens epub as zip file filters then stores as list any files matching html_regx
-
-
-
-
-
◆ extract_cover_image()
-
-
-
-
-
-
-
-
- def src.backend.lib.library.Catalogue.extract_cover_image
- (
-
- self ,
-
-
-
-
-
- book_zip ,
-
-
-
-
-
- book
-
-
-
- )
-
-
-
-
-
-inherited
-
-
-
-
Opens epub as zip file filters then stores as list any files matching cover_regx
-
-
-
-
-
◆ extract_metadata()
-
-
-
-
-
-
-
-
- def src.backend.lib.library.Catalogue.extract_metadata
- (
-
- self ,
-
-
-
-
-
- book
-
-
-
- )
-
-
-
-
-
-inherited
-
-
-
-
Return extracted metadata and cover picture
-book['path'] == Full path to ebook file
-book['files'] == list of files from self.process_book(book)
-
-
-
-
-
◆ filter_books()
-
-
-
-
-
- def src.backend.tests.library_test.Test_Catalogue.filter_books
- (
-
- self )
-
-
-
-
-
Calls scan_folder and filters out book files
-Proceeds to call process_book
-
-:returns self._book_list_expanded: json string containing all book metadata
-
-
Reimplemented from src.backend.lib.library.Catalogue .
-
-
-
-
-
◆ import_books()
-
-
-
-
-
-
-
-
- def src.backend.lib.library.Catalogue.import_books
- (
-
- self ,
-
-
-
-
-
- list = None
-
-
-
- )
-
-
-
-
-
-inherited
-
-
-
-
Main entry point for import operations.
-Gets a list of new files via compare_shelf_current.
-Iterates over list and inserts new books into database.
-
-
-
-
-
◆ process_book()
-
-
-
-
-
-
-
-
- def src.backend.lib.library.Catalogue.process_book
- (
-
- book )
-
-
-
-
-
-static inherited
-
-
-
-
Return dictionary of epub file contents
-
-
-
-
◆ scan_folder()
-
-
-
-
-
-
-
-
- def src.backend.lib.library.Catalogue.scan_folder
- (
-
- self ,
-
-
-
-
-
- _path = None
-
-
-
- )
-
-
-
-
-
-inherited
-
-
-
-
Scan folder by _path, allows recurisive scanning
-
-
-
-
The documentation for this class was generated from the following file:
-
-
-
-
-
diff --git a/docs/html/db/dda/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Catalogue.png b/docs/html/db/dda/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Catalogue.png
deleted file mode 100755
index 2532ba5..0000000
Binary files a/docs/html/db/dda/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Catalogue.png and /dev/null differ
diff --git a/docs/html/dc/d3e/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Catalogue-members.html b/docs/html/dc/d3e/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Catalogue-members.html
deleted file mode 100755
index 1ec875b..0000000
--- a/docs/html/dc/d3e/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Catalogue-members.html
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: Member List
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
This is the complete list of members for src.backend.tests.library_test.Test_Catalogue , including all inherited members.
-
- __init__ (self) (defined in src.backend.tests.library_test.Test_Catalogue )src.backend.tests.library_test.Test_Catalogue
- __init__ (self, config) (defined in src.backend.lib.library.Catalogue )src.backend.lib.library.Catalogue
- book_folder (defined in src.backend.lib.library.Catalogue )src.backend.lib.library.Catalogue
- book_shelf (defined in src.backend.tests.library_test.Test_Catalogue )src.backend.tests.library_test.Test_Catalogue
- books (defined in src.backend.lib.library.Catalogue )src.backend.lib.library.Catalogue
- compare_shelf_current (self)src.backend.lib.library.Catalogue
- config (defined in src.backend.lib.library.Catalogue )src.backend.lib.library.Catalogue
- cover_regx (defined in src.backend.lib.library.Catalogue )src.backend.lib.library.Catalogue
- db_pointer (defined in src.backend.lib.library.Catalogue )src.backend.lib.library.Catalogue
- extract_content (self, book_zip, book)src.backend.lib.library.Catalogue
- extract_cover_html (self, book_zip, book)src.backend.lib.library.Catalogue
- extract_cover_image (self, book_zip, book)src.backend.lib.library.Catalogue
- extract_metadata (self, book)src.backend.lib.library.Catalogue
- file_list (defined in src.backend.lib.library.Catalogue )src.backend.lib.library.Catalogue
- filter_books (self)src.backend.tests.library_test.Test_Catalogue
- html_regx (defined in src.backend.lib.library.Catalogue )src.backend.lib.library.Catalogue
- import_books (self, list=None)src.backend.lib.library.Catalogue
- opf_regx (defined in src.backend.lib.library.Catalogue )src.backend.lib.library.Catalogue
- process_book (book)src.backend.lib.library.Catalogue static
- root_dir (defined in src.backend.lib.library.Catalogue )src.backend.lib.library.Catalogue
- scan_folder (self, _path=None)src.backend.lib.library.Catalogue
-
-
-
-
-
diff --git a/docs/html/de/d11/classsrc_1_1backend_1_1lib_1_1api__hooks_1_1DuckDuckGo-members.html b/docs/html/de/d11/classsrc_1_1backend_1_1lib_1_1api__hooks_1_1DuckDuckGo-members.html
deleted file mode 100755
index 0a29e3e..0000000
--- a/docs/html/de/d11/classsrc_1_1backend_1_1lib_1_1api__hooks_1_1DuckDuckGo-members.html
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: Member List
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
This is the complete list of members for src.backend.lib.api_hooks.DuckDuckGo , including all inherited members.
-
-
-
-
-
diff --git a/docs/html/df/d83/classsrc_1_1backend_1_1tests_1_1config__test_1_1TestConfig.html b/docs/html/df/d83/classsrc_1_1backend_1_1tests_1_1config__test_1_1TestConfig.html
deleted file mode 100755
index 2a36542..0000000
--- a/docs/html/df/d83/classsrc_1_1backend_1_1tests_1_1config__test_1_1TestConfig.html
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: src.backend.tests.config_test.TestConfig Class Reference
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-def test_book_dir (self)
-
-
-def test_title (self)
-
-
-def test_version (self)
-
-
-
-
- config = Config (os.path.abspath(os.path.curdir))
-
-
-
-
The documentation for this class was generated from the following file:
-
-
-
-
-
diff --git a/docs/html/dir_1c7294442ce83d360610449d04c9d7fc.html b/docs/html/dir_1c7294442ce83d360610449d04c9d7fc.html
deleted file mode 100755
index 4bc538c..0000000
--- a/docs/html/dir_1c7294442ce83d360610449d04c9d7fc.html
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: src/backend/lib Directory Reference
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/html/dir_3f615ade772d23cefe5e20dcb18424a2.html b/docs/html/dir_3f615ade772d23cefe5e20dcb18424a2.html
deleted file mode 100755
index cb49fde..0000000
--- a/docs/html/dir_3f615ade772d23cefe5e20dcb18424a2.html
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: src/backend Directory Reference
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html
deleted file mode 100755
index 106eb9e..0000000
--- a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: src Directory Reference
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/html/dir_9020577e2da81c4cf5a5554c26431f94.html b/docs/html/dir_9020577e2da81c4cf5a5554c26431f94.html
deleted file mode 100755
index 8ae1bf2..0000000
--- a/docs/html/dir_9020577e2da81c4cf5a5554c26431f94.html
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: src/backend/tests Directory Reference
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/html/doc.png b/docs/html/doc.png
deleted file mode 100755
index 17edabf..0000000
Binary files a/docs/html/doc.png and /dev/null differ
diff --git a/docs/html/doxygen.css b/docs/html/doxygen.css
deleted file mode 100755
index 4267a97..0000000
--- a/docs/html/doxygen.css
+++ /dev/null
@@ -1,1770 +0,0 @@
-/* The standard CSS for doxygen 1.8.17 */
-
-body, table, div, p, dl {
- font: 400 14px/22px Roboto,sans-serif;
-}
-
-p.reference, p.definition {
- font: 400 14px/22px Roboto,sans-serif;
-}
-
-/* @group Heading Levels */
-
-h1.groupheader {
- font-size: 150%;
-}
-
-.title {
- font: 400 14px/28px Roboto,sans-serif;
- font-size: 150%;
- font-weight: bold;
- margin: 10px 2px;
-}
-
-h2.groupheader {
- border-bottom: 1px solid #879ECB;
- color: #354C7B;
- font-size: 150%;
- font-weight: normal;
- margin-top: 1.75em;
- padding-top: 8px;
- padding-bottom: 4px;
- width: 100%;
-}
-
-h3.groupheader {
- font-size: 100%;
-}
-
-h1, h2, h3, h4, h5, h6 {
- -webkit-transition: text-shadow 0.5s linear;
- -moz-transition: text-shadow 0.5s linear;
- -ms-transition: text-shadow 0.5s linear;
- -o-transition: text-shadow 0.5s linear;
- transition: text-shadow 0.5s linear;
- margin-right: 15px;
-}
-
-h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
- text-shadow: 0 0 15px cyan;
-}
-
-dt {
- font-weight: bold;
-}
-
-ul.multicol {
- -moz-column-gap: 1em;
- -webkit-column-gap: 1em;
- column-gap: 1em;
- -moz-column-count: 3;
- -webkit-column-count: 3;
- column-count: 3;
-}
-
-p.startli, p.startdd {
- margin-top: 2px;
-}
-
-th p.starttd, p.intertd, p.endtd {
- font-size: 100%;
- font-weight: 700;
-}
-
-p.starttd {
- margin-top: 0px;
-}
-
-p.endli {
- margin-bottom: 0px;
-}
-
-p.enddd {
- margin-bottom: 4px;
-}
-
-p.endtd {
- margin-bottom: 2px;
-}
-
-p.interli {
-}
-
-p.interdd {
-}
-
-p.intertd {
-}
-
-/* @end */
-
-caption {
- font-weight: bold;
-}
-
-span.legend {
- font-size: 70%;
- text-align: center;
-}
-
-h3.version {
- font-size: 90%;
- text-align: center;
-}
-
-div.qindex, div.navtab{
- background-color: #EBEFF6;
- border: 1px solid #A3B4D7;
- text-align: center;
-}
-
-div.qindex, div.navpath {
- width: 100%;
- line-height: 140%;
-}
-
-div.navtab {
- margin-right: 15px;
-}
-
-/* @group Link Styling */
-
-a {
- color: #3D578C;
- font-weight: normal;
- text-decoration: none;
-}
-
-.contents a:visited {
- color: #4665A2;
-}
-
-a:hover {
- text-decoration: underline;
-}
-
-a.qindex {
- font-weight: bold;
-}
-
-a.qindexHL {
- font-weight: bold;
- background-color: #9CAFD4;
- color: #FFFFFF;
- border: 1px double #869DCA;
-}
-
-.contents a.qindexHL:visited {
- color: #FFFFFF;
-}
-
-a.el {
- font-weight: bold;
-}
-
-a.elRef {
-}
-
-a.code, a.code:visited, a.line, a.line:visited {
- color: #4665A2;
-}
-
-a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
- color: #4665A2;
-}
-
-/* @end */
-
-dl.el {
- margin-left: -1cm;
-}
-
-ul {
- overflow: hidden; /*Fixed: list item bullets overlap floating elements*/
-}
-
-#side-nav ul {
- overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */
-}
-
-#main-nav ul {
- overflow: visible; /* reset ul rule for the navigation bar drop down lists */
-}
-
-.fragment {
- text-align: left;
- direction: ltr;
- overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/
- overflow-y: hidden;
-}
-
-pre.fragment {
- border: 1px solid #C4CFE5;
- background-color: #FBFCFD;
- padding: 4px 6px;
- margin: 4px 8px 4px 2px;
- overflow: auto;
- word-wrap: break-word;
- font-size: 9pt;
- line-height: 125%;
- font-family: monospace, fixed;
- font-size: 105%;
-}
-
-div.fragment {
- padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/
- margin: 4px 8px 4px 2px;
- background-color: #FBFCFD;
- border: 1px solid #C4CFE5;
-}
-
-div.line {
- font-family: monospace, fixed;
- font-size: 13px;
- min-height: 13px;
- line-height: 1.0;
- text-wrap: unrestricted;
- white-space: -moz-pre-wrap; /* Moz */
- white-space: -pre-wrap; /* Opera 4-6 */
- white-space: -o-pre-wrap; /* Opera 7 */
- white-space: pre-wrap; /* CSS3 */
- word-wrap: break-word; /* IE 5.5+ */
- text-indent: -53px;
- padding-left: 53px;
- padding-bottom: 0px;
- margin: 0px;
- -webkit-transition-property: background-color, box-shadow;
- -webkit-transition-duration: 0.5s;
- -moz-transition-property: background-color, box-shadow;
- -moz-transition-duration: 0.5s;
- -ms-transition-property: background-color, box-shadow;
- -ms-transition-duration: 0.5s;
- -o-transition-property: background-color, box-shadow;
- -o-transition-duration: 0.5s;
- transition-property: background-color, box-shadow;
- transition-duration: 0.5s;
-}
-
-div.line:after {
- content:"\000A";
- white-space: pre;
-}
-
-div.line.glow {
- background-color: cyan;
- box-shadow: 0 0 10px cyan;
-}
-
-
-span.lineno {
- padding-right: 4px;
- text-align: right;
- border-right: 2px solid #0F0;
- background-color: #E8E8E8;
- white-space: pre;
-}
-span.lineno a {
- background-color: #D8D8D8;
-}
-
-span.lineno a:hover {
- background-color: #C8C8C8;
-}
-
-.lineno {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-div.ah, span.ah {
- background-color: black;
- font-weight: bold;
- color: #FFFFFF;
- margin-bottom: 3px;
- margin-top: 3px;
- padding: 0.2em;
- border: solid thin #333;
- border-radius: 0.5em;
- -webkit-border-radius: .5em;
- -moz-border-radius: .5em;
- box-shadow: 2px 2px 3px #999;
- -webkit-box-shadow: 2px 2px 3px #999;
- -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
- background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%);
-}
-
-div.classindex ul {
- list-style: none;
- padding-left: 0;
-}
-
-div.classindex span.ai {
- display: inline-block;
-}
-
-div.groupHeader {
- margin-left: 16px;
- margin-top: 12px;
- font-weight: bold;
-}
-
-div.groupText {
- margin-left: 16px;
- font-style: italic;
-}
-
-body {
- background-color: white;
- color: black;
- margin: 0;
-}
-
-div.contents {
- margin-top: 10px;
- margin-left: 12px;
- margin-right: 8px;
-}
-
-td.indexkey {
- background-color: #EBEFF6;
- font-weight: bold;
- border: 1px solid #C4CFE5;
- margin: 2px 0px 2px 0;
- padding: 2px 10px;
- white-space: nowrap;
- vertical-align: top;
-}
-
-td.indexvalue {
- background-color: #EBEFF6;
- border: 1px solid #C4CFE5;
- padding: 2px 10px;
- margin: 2px 0px;
-}
-
-tr.memlist {
- background-color: #EEF1F7;
-}
-
-p.formulaDsp {
- text-align: center;
-}
-
-img.formulaDsp {
-
-}
-
-img.formulaInl, img.inline {
- vertical-align: middle;
-}
-
-div.center {
- text-align: center;
- margin-top: 0px;
- margin-bottom: 0px;
- padding: 0px;
-}
-
-div.center img {
- border: 0px;
-}
-
-address.footer {
- text-align: right;
- padding-right: 12px;
-}
-
-img.footer {
- border: 0px;
- vertical-align: middle;
-}
-
-/* @group Code Colorization */
-
-span.keyword {
- color: #008000
-}
-
-span.keywordtype {
- color: #604020
-}
-
-span.keywordflow {
- color: #e08000
-}
-
-span.comment {
- color: #800000
-}
-
-span.preprocessor {
- color: #806020
-}
-
-span.stringliteral {
- color: #002080
-}
-
-span.charliteral {
- color: #008080
-}
-
-span.vhdldigit {
- color: #ff00ff
-}
-
-span.vhdlchar {
- color: #000000
-}
-
-span.vhdlkeyword {
- color: #700070
-}
-
-span.vhdllogic {
- color: #ff0000
-}
-
-blockquote {
- background-color: #F7F8FB;
- border-left: 2px solid #9CAFD4;
- margin: 0 24px 0 4px;
- padding: 0 12px 0 16px;
-}
-
-blockquote.DocNodeRTL {
- border-left: 0;
- border-right: 2px solid #9CAFD4;
- margin: 0 4px 0 24px;
- padding: 0 16px 0 12px;
-}
-
-/* @end */
-
-/*
-.search {
- color: #003399;
- font-weight: bold;
-}
-
-form.search {
- margin-bottom: 0px;
- margin-top: 0px;
-}
-
-input.search {
- font-size: 75%;
- color: #000080;
- font-weight: normal;
- background-color: #e8eef2;
-}
-*/
-
-td.tiny {
- font-size: 75%;
-}
-
-.dirtab {
- padding: 4px;
- border-collapse: collapse;
- border: 1px solid #A3B4D7;
-}
-
-th.dirtab {
- background: #EBEFF6;
- font-weight: bold;
-}
-
-hr {
- height: 0px;
- border: none;
- border-top: 1px solid #4A6AAA;
-}
-
-hr.footer {
- height: 1px;
-}
-
-/* @group Member Descriptions */
-
-table.memberdecls {
- border-spacing: 0px;
- padding: 0px;
-}
-
-.memberdecls td, .fieldtable tr {
- -webkit-transition-property: background-color, box-shadow;
- -webkit-transition-duration: 0.5s;
- -moz-transition-property: background-color, box-shadow;
- -moz-transition-duration: 0.5s;
- -ms-transition-property: background-color, box-shadow;
- -ms-transition-duration: 0.5s;
- -o-transition-property: background-color, box-shadow;
- -o-transition-duration: 0.5s;
- transition-property: background-color, box-shadow;
- transition-duration: 0.5s;
-}
-
-.memberdecls td.glow, .fieldtable tr.glow {
- background-color: cyan;
- box-shadow: 0 0 15px cyan;
-}
-
-.mdescLeft, .mdescRight,
-.memItemLeft, .memItemRight,
-.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
- background-color: #F9FAFC;
- border: none;
- margin: 4px;
- padding: 1px 0 0 8px;
-}
-
-.mdescLeft, .mdescRight {
- padding: 0px 8px 4px 8px;
- color: #555;
-}
-
-.memSeparator {
- border-bottom: 1px solid #DEE4F0;
- line-height: 1px;
- margin: 0px;
- padding: 0px;
-}
-
-.memItemLeft, .memTemplItemLeft {
- white-space: nowrap;
-}
-
-.memItemRight, .memTemplItemRight {
- width: 100%;
-}
-
-.memTemplParams {
- color: #4665A2;
- white-space: nowrap;
- font-size: 80%;
-}
-
-/* @end */
-
-/* @group Member Details */
-
-/* Styles for detailed member documentation */
-
-.memtitle {
- padding: 8px;
- border-top: 1px solid #A8B8D9;
- border-left: 1px solid #A8B8D9;
- border-right: 1px solid #A8B8D9;
- border-top-right-radius: 4px;
- border-top-left-radius: 4px;
- margin-bottom: -1px;
- background-image: url('nav_f.png');
- background-repeat: repeat-x;
- background-color: #E2E8F2;
- line-height: 1.25;
- font-weight: 300;
- float:left;
-}
-
-.permalink
-{
- font-size: 65%;
- display: inline-block;
- vertical-align: middle;
-}
-
-.memtemplate {
- font-size: 80%;
- color: #4665A2;
- font-weight: normal;
- margin-left: 9px;
-}
-
-.memnav {
- background-color: #EBEFF6;
- border: 1px solid #A3B4D7;
- text-align: center;
- margin: 2px;
- margin-right: 15px;
- padding: 2px;
-}
-
-.mempage {
- width: 100%;
-}
-
-.memitem {
- padding: 0;
- margin-bottom: 10px;
- margin-right: 5px;
- -webkit-transition: box-shadow 0.5s linear;
- -moz-transition: box-shadow 0.5s linear;
- -ms-transition: box-shadow 0.5s linear;
- -o-transition: box-shadow 0.5s linear;
- transition: box-shadow 0.5s linear;
- display: table !important;
- width: 100%;
-}
-
-.memitem.glow {
- box-shadow: 0 0 15px cyan;
-}
-
-.memname {
- font-weight: 400;
- margin-left: 6px;
-}
-
-.memname td {
- vertical-align: bottom;
-}
-
-.memproto, dl.reflist dt {
- border-top: 1px solid #A8B8D9;
- border-left: 1px solid #A8B8D9;
- border-right: 1px solid #A8B8D9;
- padding: 6px 0px 6px 0px;
- color: #253555;
- font-weight: bold;
- text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
- background-color: #DFE5F1;
- /* opera specific markup */
- box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
- border-top-right-radius: 4px;
- /* firefox specific markup */
- -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
- -moz-border-radius-topright: 4px;
- /* webkit specific markup */
- -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
- -webkit-border-top-right-radius: 4px;
-
-}
-
-.overload {
- font-family: "courier new",courier,monospace;
- font-size: 65%;
-}
-
-.memdoc, dl.reflist dd {
- border-bottom: 1px solid #A8B8D9;
- border-left: 1px solid #A8B8D9;
- border-right: 1px solid #A8B8D9;
- padding: 6px 10px 2px 10px;
- background-color: #FBFCFD;
- border-top-width: 0;
- background-image:url('nav_g.png');
- background-repeat:repeat-x;
- background-color: #FFFFFF;
- /* opera specific markup */
- border-bottom-left-radius: 4px;
- border-bottom-right-radius: 4px;
- box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
- /* firefox specific markup */
- -moz-border-radius-bottomleft: 4px;
- -moz-border-radius-bottomright: 4px;
- -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
- /* webkit specific markup */
- -webkit-border-bottom-left-radius: 4px;
- -webkit-border-bottom-right-radius: 4px;
- -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-}
-
-dl.reflist dt {
- padding: 5px;
-}
-
-dl.reflist dd {
- margin: 0px 0px 10px 0px;
- padding: 5px;
-}
-
-.paramkey {
- text-align: right;
-}
-
-.paramtype {
- white-space: nowrap;
-}
-
-.paramname {
- color: #602020;
- white-space: nowrap;
-}
-.paramname em {
- font-style: normal;
-}
-.paramname code {
- line-height: 14px;
-}
-
-.params, .retval, .exception, .tparams {
- margin-left: 0px;
- padding-left: 0px;
-}
-
-.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname {
- font-weight: bold;
- vertical-align: top;
-}
-
-.params .paramtype, .tparams .paramtype {
- font-style: italic;
- vertical-align: top;
-}
-
-.params .paramdir, .tparams .paramdir {
- font-family: "courier new",courier,monospace;
- vertical-align: top;
-}
-
-table.mlabels {
- border-spacing: 0px;
-}
-
-td.mlabels-left {
- width: 100%;
- padding: 0px;
-}
-
-td.mlabels-right {
- vertical-align: bottom;
- padding: 0px;
- white-space: nowrap;
-}
-
-span.mlabels {
- margin-left: 8px;
-}
-
-span.mlabel {
- background-color: #728DC1;
- border-top:1px solid #5373B4;
- border-left:1px solid #5373B4;
- border-right:1px solid #C4CFE5;
- border-bottom:1px solid #C4CFE5;
- text-shadow: none;
- color: white;
- margin-right: 4px;
- padding: 2px 3px;
- border-radius: 3px;
- font-size: 7pt;
- white-space: nowrap;
- vertical-align: middle;
-}
-
-
-
-/* @end */
-
-/* these are for tree view inside a (index) page */
-
-div.directory {
- margin: 10px 0px;
- border-top: 1px solid #9CAFD4;
- border-bottom: 1px solid #9CAFD4;
- width: 100%;
-}
-
-.directory table {
- border-collapse:collapse;
-}
-
-.directory td {
- margin: 0px;
- padding: 0px;
- vertical-align: top;
-}
-
-.directory td.entry {
- white-space: nowrap;
- padding-right: 6px;
- padding-top: 3px;
-}
-
-.directory td.entry a {
- outline:none;
-}
-
-.directory td.entry a img {
- border: none;
-}
-
-.directory td.desc {
- width: 100%;
- padding-left: 6px;
- padding-right: 6px;
- padding-top: 3px;
- border-left: 1px solid rgba(0,0,0,0.05);
-}
-
-.directory tr.even {
- padding-left: 6px;
- background-color: #F7F8FB;
-}
-
-.directory img {
- vertical-align: -30%;
-}
-
-.directory .levels {
- white-space: nowrap;
- width: 100%;
- text-align: right;
- font-size: 9pt;
-}
-
-.directory .levels span {
- cursor: pointer;
- padding-left: 2px;
- padding-right: 2px;
- color: #3D578C;
-}
-
-.arrow {
- color: #9CAFD4;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- cursor: pointer;
- font-size: 80%;
- display: inline-block;
- width: 16px;
- height: 22px;
-}
-
-.icon {
- font-family: Arial, Helvetica;
- font-weight: bold;
- font-size: 12px;
- height: 14px;
- width: 16px;
- display: inline-block;
- background-color: #728DC1;
- color: white;
- text-align: center;
- border-radius: 4px;
- margin-left: 2px;
- margin-right: 2px;
-}
-
-.icona {
- width: 24px;
- height: 22px;
- display: inline-block;
-}
-
-.iconfopen {
- width: 24px;
- height: 18px;
- margin-bottom: 4px;
- background-image:url('folderopen.png');
- background-position: 0px -4px;
- background-repeat: repeat-y;
- vertical-align:top;
- display: inline-block;
-}
-
-.iconfclosed {
- width: 24px;
- height: 18px;
- margin-bottom: 4px;
- background-image:url('folderclosed.png');
- background-position: 0px -4px;
- background-repeat: repeat-y;
- vertical-align:top;
- display: inline-block;
-}
-
-.icondoc {
- width: 24px;
- height: 18px;
- margin-bottom: 4px;
- background-image:url('doc.png');
- background-position: 0px -4px;
- background-repeat: repeat-y;
- vertical-align:top;
- display: inline-block;
-}
-
-table.directory {
- font: 400 14px Roboto,sans-serif;
-}
-
-/* @end */
-
-div.dynheader {
- margin-top: 8px;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-address {
- font-style: normal;
- color: #2A3D61;
-}
-
-table.doxtable caption {
- caption-side: top;
-}
-
-table.doxtable {
- border-collapse:collapse;
- margin-top: 4px;
- margin-bottom: 4px;
-}
-
-table.doxtable td, table.doxtable th {
- border: 1px solid #2D4068;
- padding: 3px 7px 2px;
-}
-
-table.doxtable th {
- background-color: #374F7F;
- color: #FFFFFF;
- font-size: 110%;
- padding-bottom: 4px;
- padding-top: 5px;
-}
-
-table.fieldtable {
- /*width: 100%;*/
- margin-bottom: 10px;
- border: 1px solid #A8B8D9;
- border-spacing: 0px;
- -moz-border-radius: 4px;
- -webkit-border-radius: 4px;
- border-radius: 4px;
- -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
- -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
- box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
-}
-
-.fieldtable td, .fieldtable th {
- padding: 3px 7px 2px;
-}
-
-.fieldtable td.fieldtype, .fieldtable td.fieldname {
- white-space: nowrap;
- border-right: 1px solid #A8B8D9;
- border-bottom: 1px solid #A8B8D9;
- vertical-align: top;
-}
-
-.fieldtable td.fieldname {
- padding-top: 3px;
-}
-
-.fieldtable td.fielddoc {
- border-bottom: 1px solid #A8B8D9;
- /*width: 100%;*/
-}
-
-.fieldtable td.fielddoc p:first-child {
- margin-top: 0px;
-}
-
-.fieldtable td.fielddoc p:last-child {
- margin-bottom: 2px;
-}
-
-.fieldtable tr:last-child td {
- border-bottom: none;
-}
-
-.fieldtable th {
- background-image:url('nav_f.png');
- background-repeat:repeat-x;
- background-color: #E2E8F2;
- font-size: 90%;
- color: #253555;
- padding-bottom: 4px;
- padding-top: 5px;
- text-align:left;
- font-weight: 400;
- -moz-border-radius-topleft: 4px;
- -moz-border-radius-topright: 4px;
- -webkit-border-top-left-radius: 4px;
- -webkit-border-top-right-radius: 4px;
- border-top-left-radius: 4px;
- border-top-right-radius: 4px;
- border-bottom: 1px solid #A8B8D9;
-}
-
-
-.tabsearch {
- top: 0px;
- left: 10px;
- height: 36px;
- background-image: url('tab_b.png');
- z-index: 101;
- overflow: hidden;
- font-size: 13px;
-}
-
-.navpath ul
-{
- font-size: 11px;
- background-image:url('tab_b.png');
- background-repeat:repeat-x;
- background-position: 0 -5px;
- height:30px;
- line-height:30px;
- color:#8AA0CC;
- border:solid 1px #C2CDE4;
- overflow:hidden;
- margin:0px;
- padding:0px;
-}
-
-.navpath li
-{
- list-style-type:none;
- float:left;
- padding-left:10px;
- padding-right:15px;
- background-image:url('bc_s.png');
- background-repeat:no-repeat;
- background-position:right;
- color:#364D7C;
-}
-
-.navpath li.navelem a
-{
- height:32px;
- display:block;
- text-decoration: none;
- outline: none;
- color: #283A5D;
- font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
- text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
- text-decoration: none;
-}
-
-.navpath li.navelem a:hover
-{
- color:#6884BD;
-}
-
-.navpath li.footer
-{
- list-style-type:none;
- float:right;
- padding-left:10px;
- padding-right:15px;
- background-image:none;
- background-repeat:no-repeat;
- background-position:right;
- color:#364D7C;
- font-size: 8pt;
-}
-
-
-div.summary
-{
- float: right;
- font-size: 8pt;
- padding-right: 5px;
- width: 50%;
- text-align: right;
-}
-
-div.summary a
-{
- white-space: nowrap;
-}
-
-table.classindex
-{
- margin: 10px;
- white-space: nowrap;
- margin-left: 3%;
- margin-right: 3%;
- width: 94%;
- border: 0;
- border-spacing: 0;
- padding: 0;
-}
-
-div.ingroups
-{
- font-size: 8pt;
- width: 50%;
- text-align: left;
-}
-
-div.ingroups a
-{
- white-space: nowrap;
-}
-
-div.header
-{
- background-image:url('nav_h.png');
- background-repeat:repeat-x;
- background-color: #F9FAFC;
- margin: 0px;
- border-bottom: 1px solid #C4CFE5;
-}
-
-div.headertitle
-{
- padding: 5px 5px 5px 10px;
-}
-
-.PageDocRTL-title div.headertitle {
- text-align: right;
- direction: rtl;
-}
-
-dl {
- padding: 0 0 0 0;
-}
-
-/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */
-dl.section {
- margin-left: 0px;
- padding-left: 0px;
-}
-
-dl.section.DocNodeRTL {
- margin-right: 0px;
- padding-right: 0px;
-}
-
-dl.note {
- margin-left: -7px;
- padding-left: 3px;
- border-left: 4px solid;
- border-color: #D0C000;
-}
-
-dl.note.DocNodeRTL {
- margin-left: 0;
- padding-left: 0;
- border-left: 0;
- margin-right: -7px;
- padding-right: 3px;
- border-right: 4px solid;
- border-color: #D0C000;
-}
-
-dl.warning, dl.attention {
- margin-left: -7px;
- padding-left: 3px;
- border-left: 4px solid;
- border-color: #FF0000;
-}
-
-dl.warning.DocNodeRTL, dl.attention.DocNodeRTL {
- margin-left: 0;
- padding-left: 0;
- border-left: 0;
- margin-right: -7px;
- padding-right: 3px;
- border-right: 4px solid;
- border-color: #FF0000;
-}
-
-dl.pre, dl.post, dl.invariant {
- margin-left: -7px;
- padding-left: 3px;
- border-left: 4px solid;
- border-color: #00D000;
-}
-
-dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL {
- margin-left: 0;
- padding-left: 0;
- border-left: 0;
- margin-right: -7px;
- padding-right: 3px;
- border-right: 4px solid;
- border-color: #00D000;
-}
-
-dl.deprecated {
- margin-left: -7px;
- padding-left: 3px;
- border-left: 4px solid;
- border-color: #505050;
-}
-
-dl.deprecated.DocNodeRTL {
- margin-left: 0;
- padding-left: 0;
- border-left: 0;
- margin-right: -7px;
- padding-right: 3px;
- border-right: 4px solid;
- border-color: #505050;
-}
-
-dl.todo {
- margin-left: -7px;
- padding-left: 3px;
- border-left: 4px solid;
- border-color: #00C0E0;
-}
-
-dl.todo.DocNodeRTL {
- margin-left: 0;
- padding-left: 0;
- border-left: 0;
- margin-right: -7px;
- padding-right: 3px;
- border-right: 4px solid;
- border-color: #00C0E0;
-}
-
-dl.test {
- margin-left: -7px;
- padding-left: 3px;
- border-left: 4px solid;
- border-color: #3030E0;
-}
-
-dl.test.DocNodeRTL {
- margin-left: 0;
- padding-left: 0;
- border-left: 0;
- margin-right: -7px;
- padding-right: 3px;
- border-right: 4px solid;
- border-color: #3030E0;
-}
-
-dl.bug {
- margin-left: -7px;
- padding-left: 3px;
- border-left: 4px solid;
- border-color: #C08050;
-}
-
-dl.bug.DocNodeRTL {
- margin-left: 0;
- padding-left: 0;
- border-left: 0;
- margin-right: -7px;
- padding-right: 3px;
- border-right: 4px solid;
- border-color: #C08050;
-}
-
-dl.section dd {
- margin-bottom: 6px;
-}
-
-
-#projectlogo
-{
- text-align: center;
- vertical-align: bottom;
- border-collapse: separate;
-}
-
-#projectlogo img
-{
- border: 0px none;
-}
-
-#projectalign
-{
- vertical-align: middle;
-}
-
-#projectname
-{
- font: 300% Tahoma, Arial,sans-serif;
- margin: 0px;
- padding: 2px 0px;
-}
-
-#projectbrief
-{
- font: 120% Tahoma, Arial,sans-serif;
- margin: 0px;
- padding: 0px;
-}
-
-#projectnumber
-{
- font: 50% Tahoma, Arial,sans-serif;
- margin: 0px;
- padding: 0px;
-}
-
-#titlearea
-{
- padding: 0px;
- margin: 0px;
- width: 100%;
- border-bottom: 1px solid #5373B4;
-}
-
-.image
-{
- text-align: center;
-}
-
-.dotgraph
-{
- text-align: center;
-}
-
-.mscgraph
-{
- text-align: center;
-}
-
-.plantumlgraph
-{
- text-align: center;
-}
-
-.diagraph
-{
- text-align: center;
-}
-
-.caption
-{
- font-weight: bold;
-}
-
-div.zoom
-{
- border: 1px solid #90A5CE;
-}
-
-dl.citelist {
- margin-bottom:50px;
-}
-
-dl.citelist dt {
- color:#334975;
- float:left;
- font-weight:bold;
- margin-right:10px;
- padding:5px;
-}
-
-dl.citelist dd {
- margin:2px 0;
- padding:5px 0;
-}
-
-div.toc {
- padding: 14px 25px;
- background-color: #F4F6FA;
- border: 1px solid #D8DFEE;
- border-radius: 7px 7px 7px 7px;
- float: right;
- height: auto;
- margin: 0 8px 10px 10px;
- width: 200px;
-}
-
-.PageDocRTL-title div.toc {
- float: left !important;
- text-align: right;
-}
-
-div.toc li {
- background: url("bdwn.png") no-repeat scroll 0 5px transparent;
- font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
- margin-top: 5px;
- padding-left: 10px;
- padding-top: 2px;
-}
-
-.PageDocRTL-title div.toc li {
- background-position-x: right !important;
- padding-left: 0 !important;
- padding-right: 10px;
-}
-
-div.toc h3 {
- font: bold 12px/1.2 Arial,FreeSans,sans-serif;
- color: #4665A2;
- border-bottom: 0 none;
- margin: 0;
-}
-
-div.toc ul {
- list-style: none outside none;
- border: medium none;
- padding: 0px;
-}
-
-div.toc li.level1 {
- margin-left: 0px;
-}
-
-div.toc li.level2 {
- margin-left: 15px;
-}
-
-div.toc li.level3 {
- margin-left: 30px;
-}
-
-div.toc li.level4 {
- margin-left: 45px;
-}
-
-.PageDocRTL-title div.toc li.level1 {
- margin-left: 0 !important;
- margin-right: 0;
-}
-
-.PageDocRTL-title div.toc li.level2 {
- margin-left: 0 !important;
- margin-right: 15px;
-}
-
-.PageDocRTL-title div.toc li.level3 {
- margin-left: 0 !important;
- margin-right: 30px;
-}
-
-.PageDocRTL-title div.toc li.level4 {
- margin-left: 0 !important;
- margin-right: 45px;
-}
-
-.inherit_header {
- font-weight: bold;
- color: gray;
- cursor: pointer;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-.inherit_header td {
- padding: 6px 0px 2px 5px;
-}
-
-.inherit {
- display: none;
-}
-
-tr.heading h2 {
- margin-top: 12px;
- margin-bottom: 4px;
-}
-
-/* tooltip related style info */
-
-.ttc {
- position: absolute;
- display: none;
-}
-
-#powerTip {
- cursor: default;
- white-space: nowrap;
- background-color: white;
- border: 1px solid gray;
- border-radius: 4px 4px 4px 4px;
- box-shadow: 1px 1px 7px gray;
- display: none;
- font-size: smaller;
- max-width: 80%;
- opacity: 0.9;
- padding: 1ex 1em 1em;
- position: absolute;
- z-index: 2147483647;
-}
-
-#powerTip div.ttdoc {
- color: grey;
- font-style: italic;
-}
-
-#powerTip div.ttname a {
- font-weight: bold;
-}
-
-#powerTip div.ttname {
- font-weight: bold;
-}
-
-#powerTip div.ttdeci {
- color: #006318;
-}
-
-#powerTip div {
- margin: 0px;
- padding: 0px;
- font: 12px/16px Roboto,sans-serif;
-}
-
-#powerTip:before, #powerTip:after {
- content: "";
- position: absolute;
- margin: 0px;
-}
-
-#powerTip.n:after, #powerTip.n:before,
-#powerTip.s:after, #powerTip.s:before,
-#powerTip.w:after, #powerTip.w:before,
-#powerTip.e:after, #powerTip.e:before,
-#powerTip.ne:after, #powerTip.ne:before,
-#powerTip.se:after, #powerTip.se:before,
-#powerTip.nw:after, #powerTip.nw:before,
-#powerTip.sw:after, #powerTip.sw:before {
- border: solid transparent;
- content: " ";
- height: 0;
- width: 0;
- position: absolute;
-}
-
-#powerTip.n:after, #powerTip.s:after,
-#powerTip.w:after, #powerTip.e:after,
-#powerTip.nw:after, #powerTip.ne:after,
-#powerTip.sw:after, #powerTip.se:after {
- border-color: rgba(255, 255, 255, 0);
-}
-
-#powerTip.n:before, #powerTip.s:before,
-#powerTip.w:before, #powerTip.e:before,
-#powerTip.nw:before, #powerTip.ne:before,
-#powerTip.sw:before, #powerTip.se:before {
- border-color: rgba(128, 128, 128, 0);
-}
-
-#powerTip.n:after, #powerTip.n:before,
-#powerTip.ne:after, #powerTip.ne:before,
-#powerTip.nw:after, #powerTip.nw:before {
- top: 100%;
-}
-
-#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
- border-top-color: #FFFFFF;
- border-width: 10px;
- margin: 0px -10px;
-}
-#powerTip.n:before {
- border-top-color: #808080;
- border-width: 11px;
- margin: 0px -11px;
-}
-#powerTip.n:after, #powerTip.n:before {
- left: 50%;
-}
-
-#powerTip.nw:after, #powerTip.nw:before {
- right: 14px;
-}
-
-#powerTip.ne:after, #powerTip.ne:before {
- left: 14px;
-}
-
-#powerTip.s:after, #powerTip.s:before,
-#powerTip.se:after, #powerTip.se:before,
-#powerTip.sw:after, #powerTip.sw:before {
- bottom: 100%;
-}
-
-#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
- border-bottom-color: #FFFFFF;
- border-width: 10px;
- margin: 0px -10px;
-}
-
-#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
- border-bottom-color: #808080;
- border-width: 11px;
- margin: 0px -11px;
-}
-
-#powerTip.s:after, #powerTip.s:before {
- left: 50%;
-}
-
-#powerTip.sw:after, #powerTip.sw:before {
- right: 14px;
-}
-
-#powerTip.se:after, #powerTip.se:before {
- left: 14px;
-}
-
-#powerTip.e:after, #powerTip.e:before {
- left: 100%;
-}
-#powerTip.e:after {
- border-left-color: #FFFFFF;
- border-width: 10px;
- top: 50%;
- margin-top: -10px;
-}
-#powerTip.e:before {
- border-left-color: #808080;
- border-width: 11px;
- top: 50%;
- margin-top: -11px;
-}
-
-#powerTip.w:after, #powerTip.w:before {
- right: 100%;
-}
-#powerTip.w:after {
- border-right-color: #FFFFFF;
- border-width: 10px;
- top: 50%;
- margin-top: -10px;
-}
-#powerTip.w:before {
- border-right-color: #808080;
- border-width: 11px;
- top: 50%;
- margin-top: -11px;
-}
-
-@media print
-{
- #top { display: none; }
- #side-nav { display: none; }
- #nav-path { display: none; }
- body { overflow:visible; }
- h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
- .summary { display: none; }
- .memitem { page-break-inside: avoid; }
- #doc-content
- {
- margin-left:0 !important;
- height:auto !important;
- width:auto !important;
- overflow:inherit;
- display:inline;
- }
-}
-
-/* @group Markdown */
-
-/*
-table.markdownTable {
- border-collapse:collapse;
- margin-top: 4px;
- margin-bottom: 4px;
-}
-
-table.markdownTable td, table.markdownTable th {
- border: 1px solid #2D4068;
- padding: 3px 7px 2px;
-}
-
-table.markdownTableHead tr {
-}
-
-table.markdownTableBodyLeft td, table.markdownTable th {
- border: 1px solid #2D4068;
- padding: 3px 7px 2px;
-}
-
-th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone {
- background-color: #374F7F;
- color: #FFFFFF;
- font-size: 110%;
- padding-bottom: 4px;
- padding-top: 5px;
-}
-
-th.markdownTableHeadLeft {
- text-align: left
-}
-
-th.markdownTableHeadRight {
- text-align: right
-}
-
-th.markdownTableHeadCenter {
- text-align: center
-}
-*/
-
-table.markdownTable {
- border-collapse:collapse;
- margin-top: 4px;
- margin-bottom: 4px;
-}
-
-table.markdownTable td, table.markdownTable th {
- border: 1px solid #2D4068;
- padding: 3px 7px 2px;
-}
-
-table.markdownTable tr {
-}
-
-th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone {
- background-color: #374F7F;
- color: #FFFFFF;
- font-size: 110%;
- padding-bottom: 4px;
- padding-top: 5px;
-}
-
-th.markdownTableHeadLeft, td.markdownTableBodyLeft {
- text-align: left
-}
-
-th.markdownTableHeadRight, td.markdownTableBodyRight {
- text-align: right
-}
-
-th.markdownTableHeadCenter, td.markdownTableBodyCenter {
- text-align: center
-}
-
-.DocNodeRTL {
- text-align: right;
- direction: rtl;
-}
-
-.DocNodeLTR {
- text-align: left;
- direction: ltr;
-}
-
-table.DocNodeRTL {
- width: auto;
- margin-right: 0;
- margin-left: auto;
-}
-
-table.DocNodeLTR {
- width: auto;
- margin-right: auto;
- margin-left: 0;
-}
-
-tt, code, kbd, samp
-{
- display: inline-block;
- direction:ltr;
-}
-/* @end */
-
-u {
- text-decoration: underline;
-}
diff --git a/docs/html/doxygen.png b/docs/html/doxygen.png
deleted file mode 100755
index 3ff17d8..0000000
Binary files a/docs/html/doxygen.png and /dev/null differ
diff --git a/docs/html/dynsections.js b/docs/html/dynsections.js
deleted file mode 100755
index c8e84aa..0000000
--- a/docs/html/dynsections.js
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- @licstart The following is the entire license notice for the
- JavaScript code in this file.
-
- Copyright (C) 1997-2017 by Dimitri van Heesch
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
- @licend The above is the entire license notice
- for the JavaScript code in this file
- */
-function toggleVisibility(linkObj)
-{
- var base = $(linkObj).attr('id');
- var summary = $('#'+base+'-summary');
- var content = $('#'+base+'-content');
- var trigger = $('#'+base+'-trigger');
- var src=$(trigger).attr('src');
- if (content.is(':visible')===true) {
- content.hide();
- summary.show();
- $(linkObj).addClass('closed').removeClass('opened');
- $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
- } else {
- content.show();
- summary.hide();
- $(linkObj).removeClass('closed').addClass('opened');
- $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
- }
- return false;
-}
-
-function updateStripes()
-{
- $('table.directory tr').
- removeClass('even').filter(':visible:even').addClass('even');
-}
-
-function toggleLevel(level)
-{
- $('table.directory tr').each(function() {
- var l = this.id.split('_').length-1;
- var i = $('#img'+this.id.substring(3));
- var a = $('#arr'+this.id.substring(3));
- if (l
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: File List
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Here is a list of all documented files with brief descriptions:
-
[detail level 1 2 3 4 ]
- ▼ src
- ▼ backend
- ▼ lib
- __init__.py
- api_hooks.py
- config.py
- display.py
- library.py
- pyShelf.py
- storage.py
- ▼ tests
- __init__.py
- config_test.py
- library_test.py
- __init__.py
- pyShelf_ScanLibrary.py
-
-
-
-
-
-
-
diff --git a/docs/html/folderclosed.png b/docs/html/folderclosed.png
deleted file mode 100755
index bb8ab35..0000000
Binary files a/docs/html/folderclosed.png and /dev/null differ
diff --git a/docs/html/folderopen.png b/docs/html/folderopen.png
deleted file mode 100755
index d6c7f67..0000000
Binary files a/docs/html/folderopen.png and /dev/null differ
diff --git a/docs/html/functions.html b/docs/html/functions.html
deleted file mode 100755
index 5249a93..0000000
--- a/docs/html/functions.html
+++ /dev/null
@@ -1,119 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: Class Members
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Here is a list of all documented class members with links to the class documentation for each member:
-
-
-
-
-
diff --git a/docs/html/functions_func.html b/docs/html/functions_func.html
deleted file mode 100755
index 1b86da9..0000000
--- a/docs/html/functions_func.html
+++ /dev/null
@@ -1,119 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: Class Members - Functions
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/html/hierarchy.html b/docs/html/hierarchy.html
deleted file mode 100755
index d9d6b7a..0000000
--- a/docs/html/hierarchy.html
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: Class Hierarchy
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
This inheritance list is sorted roughly, but not completely, alphabetically:
-
-
-
-
-
diff --git a/docs/html/index.hhc b/docs/html/index.hhc
deleted file mode 100755
index 99b5e6b..0000000
--- a/docs/html/index.hhc
+++ /dev/null
@@ -1,260 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/html/index.hhk b/docs/html/index.hhk
deleted file mode 100755
index ff436e5..0000000
--- a/docs/html/index.hhk
+++ /dev/null
@@ -1,783 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/html/index.hhp b/docs/html/index.hhp
deleted file mode 100755
index 4bc8d52..0000000
--- a/docs/html/index.hhp
+++ /dev/null
@@ -1,66 +0,0 @@
-[OPTIONS]
-Compiled file=pyShelf_docs
-Compatibility=1.1
-Full-text search=Yes
-Contents file=index.hhc
-Default Window=main
-Default topic=index.html
-Index file=index.hhk
-Language=0x409 English (United States)
-Binary TOC=YES
-Title=pyShelf Open Source Ebook Server
-
-[WINDOWS]
-main="pyShelf Open Source Ebook Server","index.hhc","index.hhk","index.html","index.html",,,,,0x23520,,0x70387e,,,,,,,,0
-
-[FILES]
-d7/d88/classsrc_1_1backend_1_1lib_1_1api__hooks_1_1DuckDuckGo.html
-de/d11/classsrc_1_1backend_1_1lib_1_1api__hooks_1_1DuckDuckGo-members.html
-d8/dfe/classsrc_1_1backend_1_1lib_1_1config_1_1Config.html
-d3/d4a/classsrc_1_1backend_1_1lib_1_1config_1_1Config-members.html
-d0/d35/classsrc_1_1backend_1_1lib_1_1display_1_1TerminalDisplay.html
-d4/d45/classsrc_1_1backend_1_1lib_1_1display_1_1TerminalDisplay-members.html
-d5/da5/classsrc_1_1backend_1_1lib_1_1library_1_1Catalogue.html
-d6/d20/classsrc_1_1backend_1_1lib_1_1library_1_1Catalogue-members.html
-db/d7d/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1BookDisplay.html
-d7/d69/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1BookDisplay-members.html
-da/d3c/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1InitFiles.html
-d1/dca/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1InitFiles-members.html
-d7/d40/classsrc_1_1backend_1_1lib_1_1storage_1_1Storage.html
-db/d9a/classsrc_1_1backend_1_1lib_1_1storage_1_1Storage-members.html
-df/d83/classsrc_1_1backend_1_1tests_1_1config__test_1_1TestConfig.html
-d5/dee/classsrc_1_1backend_1_1tests_1_1config__test_1_1TestConfig-members.html
-db/dda/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Catalogue.html
-dc/d3e/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Catalogue-members.html
-d3/d29/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Config.html
-d5/ddf/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Config-members.html
-d8/d3d/classsrc_1_1backend_1_1tests_1_1library__test_1_1TestCatalogue.html
-d3/d95/classsrc_1_1backend_1_1tests_1_1library__test_1_1TestCatalogue-members.html
-dir_3f615ade772d23cefe5e20dcb18424a2.html
-dir_1c7294442ce83d360610449d04c9d7fc.html
-dir_68267d1309a1af8e8297ef4c3efbcdba.html
-dir_9020577e2da81c4cf5a5554c26431f94.html
-index.html
-annotated.html
-classes.html
-hierarchy.html
-functions.html
-functions_func.html
-files.html
-tab_a.png
-tab_b.png
-tab_h.png
-tab_s.png
-nav_h.png
-nav_f.png
-bc_s.png
-doxygen.png
-closed.png
-open.png
-bdwn.png
-sync_on.png
-sync_off.png
-d8/dfe/classsrc_1_1backend_1_1lib_1_1config_1_1Config.png
-d5/da5/classsrc_1_1backend_1_1lib_1_1library_1_1Catalogue.png
-db/dda/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Catalogue.png
-d3/d29/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Config.png
diff --git a/docs/html/index.html b/docs/html/index.html
deleted file mode 100755
index 50a7b1a..0000000
--- a/docs/html/index.html
+++ /dev/null
@@ -1,55 +0,0 @@
-
-
-
-
-
-
-
-pyShelf Open Source Ebook Server: Main Page
-
-
-
-
-
-
-
-
-
-
-
-
- pyShelf Open Source Ebook Server
- 0.4.1
-
- Open source, console based E-book server
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/html/jquery.js b/docs/html/jquery.js
deleted file mode 100755
index 4344b33..0000000
--- a/docs/html/jquery.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */
-!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML=" ",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML=" ";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""," "],thead:[1,""],col:[2,""],tr:[2,""],td:[3,""],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/