├── .gitattributes ├── .gitignore ├── .project ├── .pydevproject ├── .settings └── org.eclipse.core.resources.prefs ├── .travis.yml ├── License ├── Pipfile ├── Pipfile.lock ├── README.md ├── README_RUS.md ├── TODO.txt ├── _config.yml ├── assets └── sopds-sass │ ├── .bowerrc │ ├── .gitignore │ ├── CHANGELOG.md │ ├── README.md │ ├── bower.json │ ├── gulpfile.js │ ├── index.html │ ├── js │ └── app.js │ ├── package.json │ └── scss │ ├── _settings.scss │ └── sopds.scss ├── book_tools ├── __init__.py ├── format │ ├── __init__.py │ ├── aes.py │ ├── bookfile.py │ ├── epub.py │ ├── fb2.py │ ├── fb2sax.py │ ├── mimetype.py │ ├── mobi.py │ ├── other.py │ └── util.py └── pymobi │ ├── __init__.py │ ├── compression.py │ ├── mobi.py │ └── util.py ├── constance ├── __init__.py ├── admin.py ├── apps.py ├── backends │ ├── __init__.py │ ├── database │ │ ├── __init__.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_auto_20190129_2304.py │ │ │ └── __init__.py │ │ ├── models.py │ │ └── south_migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_auto__chg_field_constance_key__add_unique_constance_key.py │ │ │ └── __init__.py │ └── redisd.py ├── base.py ├── changes.rst ├── checks.py ├── context_processors.py ├── locale │ ├── cs_CZ │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── de │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── en │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── es │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── et │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── fr │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── it │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── pl │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── ru │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── zh_CN │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ └── zh_Hans │ │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── management │ ├── __init__.py │ └── commands │ │ ├── __init__.py │ │ └── constance.py ├── settings.py ├── signals.py ├── static │ └── admin │ │ ├── css │ │ └── constance.css │ │ └── js │ │ └── constance.js ├── templates │ └── admin │ │ └── constance │ │ ├── change_list.html │ │ └── includes │ │ └── results_list.html ├── test │ ├── __init__.py │ └── utils.py └── utils.py ├── convert ├── fb2conv │ ├── fb2conv-1.5.2.src.zip │ ├── fb2epub │ ├── fb2mobi │ └── kindlegen_linux_2.6_i386_v2_9.tar.gz ├── fb2epub │ ├── fb2epub │ ├── fb2epub-0.3.0.jar │ └── fb2epub.cmd └── fb2toepub │ └── fb2toepub-1.0_4.zip ├── manage.py ├── opds_catalog ├── __init__.py ├── admin.py ├── apps.py ├── dl.py ├── fb2parse.py ├── feeds.py ├── fixtures │ ├── genre.json │ ├── mygenres.json │ └── testdb.json ├── inpx_parser.py ├── locale │ └── ru │ │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── log │ └── emptyfile ├── management │ └── commands │ │ ├── sopds_scanner.py │ │ ├── sopds_server.py │ │ ├── sopds_telebot.py │ │ └── sopds_util.py ├── middleware.py ├── migrations │ ├── 0001_initial.py │ ├── 0002_auto_20161115_1810.py │ ├── 0003_auto_20161116_0955.py │ ├── 0004_auto_20161116_1852.py │ ├── 0005_auto_20161204_2138.py │ └── __init__.py ├── models.py ├── opds_paginator.py ├── opdsdb.py ├── settings.py ├── sopdscan.py ├── static │ └── images │ │ ├── nocover-big.jpg │ │ └── nocover.jpg ├── templates │ └── opensearch.html ├── tests │ ├── __init__.py │ ├── data │ │ ├── 262001.fb2 │ │ ├── badfile.fb2 │ │ ├── badfile.zip │ │ ├── books.zip │ │ ├── mirer.epub │ │ └── robin_cook.mobi │ ├── test_constance.py │ ├── test_dl.py │ ├── test_feeds.py │ ├── test_models.py │ ├── test_opdsdb.py │ ├── test_parsers.py │ ├── test_scan.py │ └── test_zipf.py ├── tmp │ └── emptyfile ├── urls.py ├── utils.py ├── views.py └── zipf.py ├── raspberry.txt ├── requirements.txt ├── sopds ├── __init__.py ├── locale │ └── ru │ │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── settings.py ├── urls.py └── wsgi.py ├── sopds_web_backend ├── __init__.py ├── admin.py ├── apps.py ├── locale │ └── ru │ │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── migrations │ └── __init__.py ├── models.py ├── settings.py ├── static │ ├── admin │ │ └── css │ │ │ ├── base.css │ │ │ ├── changelists.css │ │ │ ├── forms.css │ │ │ └── widgets.css │ ├── css │ │ ├── foundation-flex.css │ │ ├── foundation-flex.min.css │ │ ├── foundation-rtl.css │ │ ├── foundation-rtl.min.css │ │ ├── foundation.css │ │ ├── foundation.min.css │ │ └── sopds.css │ ├── foundation-icons │ │ ├── .DS_Store │ │ ├── .fontcustom-data │ │ ├── foundation-icons.css │ │ ├── foundation-icons.eot │ │ ├── foundation-icons.svg │ │ ├── foundation-icons.ttf │ │ ├── foundation-icons.woff │ │ ├── preview.html │ │ └── svgs │ │ │ ├── fi-address-book.svg │ │ │ ├── fi-alert.svg │ │ │ ├── fi-align-center.svg │ │ │ ├── fi-align-justify.svg │ │ │ ├── fi-align-left.svg │ │ │ ├── fi-align-right.svg │ │ │ ├── fi-anchor.svg │ │ │ ├── fi-annotate.svg │ │ │ ├── fi-archive.svg │ │ │ ├── fi-arrow-down.svg │ │ │ ├── fi-arrow-left.svg │ │ │ ├── fi-arrow-right.svg │ │ │ ├── fi-arrow-up.svg │ │ │ ├── fi-arrows-compress.svg │ │ │ ├── fi-arrows-expand.svg │ │ │ ├── fi-arrows-in.svg │ │ │ ├── fi-arrows-out.svg │ │ │ ├── fi-asl.svg │ │ │ ├── fi-asterisk.svg │ │ │ ├── fi-at-sign.svg │ │ │ ├── fi-background-color.svg │ │ │ ├── fi-battery-empty.svg │ │ │ ├── fi-battery-full.svg │ │ │ ├── fi-battery-half.svg │ │ │ ├── fi-bitcoin-circle.svg │ │ │ ├── fi-bitcoin.svg │ │ │ ├── fi-blind.svg │ │ │ ├── fi-bluetooth.svg │ │ │ ├── fi-bold.svg │ │ │ ├── fi-book-bookmark.svg │ │ │ ├── fi-book.svg │ │ │ ├── fi-bookmark.svg │ │ │ ├── fi-braille.svg │ │ │ ├── fi-burst-new.svg │ │ │ ├── fi-burst-sale.svg │ │ │ ├── fi-burst.svg │ │ │ ├── fi-calendar.svg │ │ │ ├── fi-camera.svg │ │ │ ├── fi-check.svg │ │ │ ├── fi-checkbox.svg │ │ │ ├── fi-clipboard-notes.svg │ │ │ ├── fi-clipboard-pencil.svg │ │ │ ├── fi-clipboard.svg │ │ │ ├── fi-clock.svg │ │ │ ├── fi-closed-caption.svg │ │ │ ├── fi-cloud.svg │ │ │ ├── fi-comment-minus.svg │ │ │ ├── fi-comment-quotes.svg │ │ │ ├── fi-comment-video.svg │ │ │ ├── fi-comment.svg │ │ │ ├── fi-comments.svg │ │ │ ├── fi-compass.svg │ │ │ ├── fi-contrast.svg │ │ │ ├── fi-credit-card.svg │ │ │ ├── fi-crop.svg │ │ │ ├── fi-crown.svg │ │ │ ├── fi-css3.svg │ │ │ ├── fi-database.svg │ │ │ ├── fi-die-five.svg │ │ │ ├── fi-die-four.svg │ │ │ ├── fi-die-one.svg │ │ │ ├── fi-die-six.svg │ │ │ ├── fi-die-three.svg │ │ │ ├── fi-die-two.svg │ │ │ ├── fi-dislike.svg │ │ │ ├── fi-dollar-bill.svg │ │ │ ├── fi-dollar.svg │ │ │ ├── fi-download.svg │ │ │ ├── fi-eject.svg │ │ │ ├── fi-elevator.svg │ │ │ ├── fi-euro.svg │ │ │ ├── fi-eye.svg │ │ │ ├── fi-fast-forward.svg │ │ │ ├── fi-female-symbol.svg │ │ │ ├── fi-female.svg │ │ │ ├── fi-filter.svg │ │ │ ├── fi-first-aid.svg │ │ │ ├── fi-flag.svg │ │ │ ├── fi-folder-add.svg │ │ │ ├── fi-folder-lock.svg │ │ │ ├── fi-folder.svg │ │ │ ├── fi-foot.svg │ │ │ ├── fi-foundation.svg │ │ │ ├── fi-graph-bar.svg │ │ │ ├── fi-graph-horizontal.svg │ │ │ ├── fi-graph-pie.svg │ │ │ ├── fi-graph-trend.svg │ │ │ ├── fi-guide-dog.svg │ │ │ ├── fi-hearing-aid.svg │ │ │ ├── fi-heart.svg │ │ │ ├── fi-home.svg │ │ │ ├── fi-html5.svg │ │ │ ├── fi-indent-less.svg │ │ │ ├── fi-indent-more.svg │ │ │ ├── fi-info.svg │ │ │ ├── fi-italic.svg │ │ │ ├── fi-key.svg │ │ │ ├── fi-laptop.svg │ │ │ ├── fi-layout.svg │ │ │ ├── fi-lightbulb.svg │ │ │ ├── fi-like.svg │ │ │ ├── fi-link.svg │ │ │ ├── fi-list-bullet.svg │ │ │ ├── fi-list-number.svg │ │ │ ├── fi-list-thumbnails.svg │ │ │ ├── fi-list.svg │ │ │ ├── fi-lock.svg │ │ │ ├── fi-loop.svg │ │ │ ├── fi-magnifying-glass.svg │ │ │ ├── fi-mail.svg │ │ │ ├── fi-male-female.svg │ │ │ ├── fi-male-symbol.svg │ │ │ ├── fi-male.svg │ │ │ ├── fi-map.svg │ │ │ ├── fi-marker.svg │ │ │ ├── fi-megaphone.svg │ │ │ ├── fi-microphone.svg │ │ │ ├── fi-minus-circle.svg │ │ │ ├── fi-minus.svg │ │ │ ├── fi-mobile-signal.svg │ │ │ ├── fi-mobile.svg │ │ │ ├── fi-monitor.svg │ │ │ ├── fi-mountains.svg │ │ │ ├── fi-music.svg │ │ │ ├── fi-next.svg │ │ │ ├── fi-no-dogs.svg │ │ │ ├── fi-no-smoking.svg │ │ │ ├── fi-page-add.svg │ │ │ ├── fi-page-copy.svg │ │ │ ├── fi-page-csv.svg │ │ │ ├── fi-page-delete.svg │ │ │ ├── fi-page-doc.svg │ │ │ ├── fi-page-edit.svg │ │ │ ├── fi-page-export-csv.svg │ │ │ ├── fi-page-export-doc.svg │ │ │ ├── fi-page-export-pdf.svg │ │ │ ├── fi-page-export.svg │ │ │ ├── fi-page-filled.svg │ │ │ ├── fi-page-multiple.svg │ │ │ ├── fi-page-pdf.svg │ │ │ ├── fi-page-remove.svg │ │ │ ├── fi-page-search.svg │ │ │ ├── fi-page.svg │ │ │ ├── fi-paint-bucket.svg │ │ │ ├── fi-paperclip.svg │ │ │ ├── fi-pause.svg │ │ │ ├── fi-paw.svg │ │ │ ├── fi-paypal.svg │ │ │ ├── fi-pencil.svg │ │ │ ├── fi-photo.svg │ │ │ ├── fi-play-circle.svg │ │ │ ├── fi-play-video.svg │ │ │ ├── fi-play.svg │ │ │ ├── fi-plus.svg │ │ │ ├── fi-pound.svg │ │ │ ├── fi-power.svg │ │ │ ├── fi-previous.svg │ │ │ ├── fi-price-tag.svg │ │ │ ├── fi-pricetag-multiple.svg │ │ │ ├── fi-print.svg │ │ │ ├── fi-prohibited.svg │ │ │ ├── fi-projection-screen.svg │ │ │ ├── fi-puzzle.svg │ │ │ ├── fi-quote.svg │ │ │ ├── fi-record.svg │ │ │ ├── fi-refresh.svg │ │ │ ├── fi-results-demographics.svg │ │ │ ├── fi-results.svg │ │ │ ├── fi-rewind-ten.svg │ │ │ ├── fi-rewind.svg │ │ │ ├── fi-rss.svg │ │ │ ├── fi-safety-cone.svg │ │ │ ├── fi-save.svg │ │ │ ├── fi-share.svg │ │ │ ├── fi-sheriff-badge.svg │ │ │ ├── fi-shield.svg │ │ │ ├── fi-shopping-bag.svg │ │ │ ├── fi-shopping-cart.svg │ │ │ ├── fi-shuffle.svg │ │ │ ├── fi-skull.svg │ │ │ ├── fi-social-500px.svg │ │ │ ├── fi-social-adobe.svg │ │ │ ├── fi-social-amazon.svg │ │ │ ├── fi-social-android.svg │ │ │ ├── fi-social-apple.svg │ │ │ ├── fi-social-behance.svg │ │ │ ├── fi-social-bing.svg │ │ │ ├── fi-social-blogger.svg │ │ │ ├── fi-social-delicious.svg │ │ │ ├── fi-social-designer-news.svg │ │ │ ├── fi-social-deviant-art.svg │ │ │ ├── fi-social-digg.svg │ │ │ ├── fi-social-dribbble.svg │ │ │ ├── fi-social-drive.svg │ │ │ ├── fi-social-dropbox.svg │ │ │ ├── fi-social-evernote.svg │ │ │ ├── fi-social-facebook.svg │ │ │ ├── fi-social-flickr.svg │ │ │ ├── fi-social-forrst.svg │ │ │ ├── fi-social-foursquare.svg │ │ │ ├── fi-social-game-center.svg │ │ │ ├── fi-social-github.svg │ │ │ ├── fi-social-google-plus.svg │ │ │ ├── fi-social-hacker-news.svg │ │ │ ├── fi-social-hi5.svg │ │ │ ├── fi-social-instagram.svg │ │ │ ├── fi-social-joomla.svg │ │ │ ├── fi-social-lastfm.svg │ │ │ ├── fi-social-linkedin.svg │ │ │ ├── fi-social-medium.svg │ │ │ ├── fi-social-myspace.svg │ │ │ ├── fi-social-orkut.svg │ │ │ ├── fi-social-path.svg │ │ │ ├── fi-social-picasa.svg │ │ │ ├── fi-social-pinterest.svg │ │ │ ├── fi-social-rdio.svg │ │ │ ├── fi-social-reddit.svg │ │ │ ├── fi-social-skillshare.svg │ │ │ ├── fi-social-skype.svg │ │ │ ├── fi-social-smashing-mag.svg │ │ │ ├── fi-social-snapchat.svg │ │ │ ├── fi-social-spotify.svg │ │ │ ├── fi-social-squidoo.svg │ │ │ ├── fi-social-stack-overflow.svg │ │ │ ├── fi-social-steam.svg │ │ │ ├── fi-social-stumbleupon.svg │ │ │ ├── fi-social-treehouse.svg │ │ │ ├── fi-social-tumblr.svg │ │ │ ├── fi-social-twitter.svg │ │ │ ├── fi-social-vimeo.svg │ │ │ ├── fi-social-windows.svg │ │ │ ├── fi-social-xbox.svg │ │ │ ├── fi-social-yahoo.svg │ │ │ ├── fi-social-yelp.svg │ │ │ ├── fi-social-youtube.svg │ │ │ ├── fi-social-zerply.svg │ │ │ ├── fi-social-zurb.svg │ │ │ ├── fi-sound.svg │ │ │ ├── fi-star.svg │ │ │ ├── fi-stop.svg │ │ │ ├── fi-strikethrough.svg │ │ │ ├── fi-subscript.svg │ │ │ ├── fi-superscript.svg │ │ │ ├── fi-tablet-landscape.svg │ │ │ ├── fi-tablet-portrait.svg │ │ │ ├── fi-target-two.svg │ │ │ ├── fi-target.svg │ │ │ ├── fi-telephone-accessible.svg │ │ │ ├── fi-telephone.svg │ │ │ ├── fi-text-color.svg │ │ │ ├── fi-thumbnails.svg │ │ │ ├── fi-ticket.svg │ │ │ ├── fi-torso-business.svg │ │ │ ├── fi-torso-female.svg │ │ │ ├── fi-torso.svg │ │ │ ├── fi-torsos-all-female.svg │ │ │ ├── fi-torsos-all.svg │ │ │ ├── fi-torsos-female-male.svg │ │ │ ├── fi-torsos-male-female.svg │ │ │ ├── fi-torsos.svg │ │ │ ├── fi-trash.svg │ │ │ ├── fi-trees.svg │ │ │ ├── fi-trophy.svg │ │ │ ├── fi-underline.svg │ │ │ ├── fi-universal-access.svg │ │ │ ├── fi-unlink.svg │ │ │ ├── fi-unlock.svg │ │ │ ├── fi-upload-cloud.svg │ │ │ ├── fi-upload.svg │ │ │ ├── fi-usb.svg │ │ │ ├── fi-video.svg │ │ │ ├── fi-volume-none.svg │ │ │ ├── fi-volume-strike.svg │ │ │ ├── fi-volume.svg │ │ │ ├── fi-web.svg │ │ │ ├── fi-wheelchair.svg │ │ │ ├── fi-widget.svg │ │ │ ├── fi-wrench.svg │ │ │ ├── fi-x-circle.svg │ │ │ ├── fi-x.svg │ │ │ ├── fi-yen.svg │ │ │ ├── fi-zoom-in.svg │ │ │ └── fi-zoom-out.svg │ ├── images │ │ ├── favicon.ico │ │ ├── folder.png │ │ ├── inpx.png │ │ ├── inpx.psd │ │ ├── sopds_book.jpg │ │ ├── sopds_icon-big.gif │ │ ├── sopds_icon.gif │ │ ├── sopds_icon.jpg │ │ ├── sopds_icon2.gif │ │ ├── sopds_logo.gif │ │ ├── text.png │ │ └── zip.png │ └── js │ │ ├── sopds.js │ │ └── vendor │ │ ├── foundation.js │ │ ├── foundation.min.js │ │ ├── jquery.js │ │ └── what-input.js ├── templates │ ├── admin │ │ ├── base.html │ │ └── base_site.html │ ├── sopds_authors.html │ ├── sopds_books.html │ ├── sopds_breadcrumbs.html │ ├── sopds_catalogs.html │ ├── sopds_error.html │ ├── sopds_footer.html │ ├── sopds_hello.html │ ├── sopds_login.html │ ├── sopds_logo.html │ ├── sopds_main.html │ ├── sopds_menu.html │ ├── sopds_messages.html │ ├── sopds_selectauthor.html │ ├── sopds_selectbook.html │ ├── sopds_selectgenres.html │ ├── sopds_selectseries.html │ ├── sopds_series.html │ └── sopds_top.html ├── urls.py └── views.py └── static ├── admin ├── css │ ├── base.css │ ├── changelists.css │ ├── dashboard.css │ ├── fonts.css │ ├── forms.css │ ├── login.css │ ├── rtl.css │ └── widgets.css ├── fonts │ ├── LICENSE.txt │ ├── README.txt │ ├── Roboto-Bold-webfont.woff │ ├── Roboto-Light-webfont.woff │ └── Roboto-Regular-webfont.woff ├── img │ ├── LICENSE │ ├── README.txt │ ├── calendar-icons.svg │ ├── gis │ │ ├── move_vertex_off.svg │ │ └── move_vertex_on.svg │ ├── icon-addlink.svg │ ├── icon-alert.svg │ ├── icon-calendar.svg │ ├── icon-changelink.svg │ ├── icon-clock.svg │ ├── icon-deletelink.svg │ ├── icon-no.svg │ ├── icon-unknown-alt.svg │ ├── icon-unknown.svg │ ├── icon-yes.svg │ ├── inline-delete.svg │ ├── search.svg │ ├── selector-icons.svg │ ├── sorting-icons.svg │ ├── tooltag-add.svg │ └── tooltag-arrowright.svg └── js │ ├── SelectBox.js │ ├── SelectFilter2.js │ ├── actions.js │ ├── actions.min.js │ ├── admin │ ├── DateTimeShortcuts.js │ └── RelatedObjectLookups.js │ ├── calendar.js │ ├── cancel.js │ ├── change_form.js │ ├── collapse.js │ ├── collapse.min.js │ ├── core.js │ ├── inlines.js │ ├── inlines.min.js │ ├── jquery.init.js │ ├── popup_response.js │ ├── prepopulate.js │ ├── prepopulate.min.js │ ├── prepopulate_init.js │ ├── timeparse.js │ ├── urlify.js │ └── vendor │ ├── jquery │ ├── LICENSE-JQUERY.txt │ ├── jquery.js │ └── jquery.min.js │ └── xregexp │ ├── LICENSE-XREGEXP.txt │ ├── xregexp.js │ └── xregexp.min.js ├── css ├── foundation-flex.css ├── foundation-flex.min.css ├── foundation-rtl.css ├── foundation-rtl.min.css ├── foundation.css ├── foundation.min.css └── sopds.css ├── foundation-icons ├── foundation-icons.css ├── foundation-icons.eot ├── foundation-icons.svg ├── foundation-icons.ttf ├── foundation-icons.woff ├── preview.html └── svgs │ ├── fi-address-book.svg │ ├── fi-alert.svg │ ├── fi-align-center.svg │ ├── fi-align-justify.svg │ ├── fi-align-left.svg │ ├── fi-align-right.svg │ ├── fi-anchor.svg │ ├── fi-annotate.svg │ ├── fi-archive.svg │ ├── fi-arrow-down.svg │ ├── fi-arrow-left.svg │ ├── fi-arrow-right.svg │ ├── fi-arrow-up.svg │ ├── fi-arrows-compress.svg │ ├── fi-arrows-expand.svg │ ├── fi-arrows-in.svg │ ├── fi-arrows-out.svg │ ├── fi-asl.svg │ ├── fi-asterisk.svg │ ├── fi-at-sign.svg │ ├── fi-background-color.svg │ ├── fi-battery-empty.svg │ ├── fi-battery-full.svg │ ├── fi-battery-half.svg │ ├── fi-bitcoin-circle.svg │ ├── fi-bitcoin.svg │ ├── fi-blind.svg │ ├── fi-bluetooth.svg │ ├── fi-bold.svg │ ├── fi-book-bookmark.svg │ ├── fi-book.svg │ ├── fi-bookmark.svg │ ├── fi-braille.svg │ ├── fi-burst-new.svg │ ├── fi-burst-sale.svg │ ├── fi-burst.svg │ ├── fi-calendar.svg │ ├── fi-camera.svg │ ├── fi-check.svg │ ├── fi-checkbox.svg │ ├── fi-clipboard-notes.svg │ ├── fi-clipboard-pencil.svg │ ├── fi-clipboard.svg │ ├── fi-clock.svg │ ├── fi-closed-caption.svg │ ├── fi-cloud.svg │ ├── fi-comment-minus.svg │ ├── fi-comment-quotes.svg │ ├── fi-comment-video.svg │ ├── fi-comment.svg │ ├── fi-comments.svg │ ├── fi-compass.svg │ ├── fi-contrast.svg │ ├── fi-credit-card.svg │ ├── fi-crop.svg │ ├── fi-crown.svg │ ├── fi-css3.svg │ ├── fi-database.svg │ ├── fi-die-five.svg │ ├── fi-die-four.svg │ ├── fi-die-one.svg │ ├── fi-die-six.svg │ ├── fi-die-three.svg │ ├── fi-die-two.svg │ ├── fi-dislike.svg │ ├── fi-dollar-bill.svg │ ├── fi-dollar.svg │ ├── fi-download.svg │ ├── fi-eject.svg │ ├── fi-elevator.svg │ ├── fi-euro.svg │ ├── fi-eye.svg │ ├── fi-fast-forward.svg │ ├── fi-female-symbol.svg │ ├── fi-female.svg │ ├── fi-filter.svg │ ├── fi-first-aid.svg │ ├── fi-flag.svg │ ├── fi-folder-add.svg │ ├── fi-folder-lock.svg │ ├── fi-folder.svg │ ├── fi-foot.svg │ ├── fi-foundation.svg │ ├── fi-graph-bar.svg │ ├── fi-graph-horizontal.svg │ ├── fi-graph-pie.svg │ ├── fi-graph-trend.svg │ ├── fi-guide-dog.svg │ ├── fi-hearing-aid.svg │ ├── fi-heart.svg │ ├── fi-home.svg │ ├── fi-html5.svg │ ├── fi-indent-less.svg │ ├── fi-indent-more.svg │ ├── fi-info.svg │ ├── fi-italic.svg │ ├── fi-key.svg │ ├── fi-laptop.svg │ ├── fi-layout.svg │ ├── fi-lightbulb.svg │ ├── fi-like.svg │ ├── fi-link.svg │ ├── fi-list-bullet.svg │ ├── fi-list-number.svg │ ├── fi-list-thumbnails.svg │ ├── fi-list.svg │ ├── fi-lock.svg │ ├── fi-loop.svg │ ├── fi-magnifying-glass.svg │ ├── fi-mail.svg │ ├── fi-male-female.svg │ ├── fi-male-symbol.svg │ ├── fi-male.svg │ ├── fi-map.svg │ ├── fi-marker.svg │ ├── fi-megaphone.svg │ ├── fi-microphone.svg │ ├── fi-minus-circle.svg │ ├── fi-minus.svg │ ├── fi-mobile-signal.svg │ ├── fi-mobile.svg │ ├── fi-monitor.svg │ ├── fi-mountains.svg │ ├── fi-music.svg │ ├── fi-next.svg │ ├── fi-no-dogs.svg │ ├── fi-no-smoking.svg │ ├── fi-page-add.svg │ ├── fi-page-copy.svg │ ├── fi-page-csv.svg │ ├── fi-page-delete.svg │ ├── fi-page-doc.svg │ ├── fi-page-edit.svg │ ├── fi-page-export-csv.svg │ ├── fi-page-export-doc.svg │ ├── fi-page-export-pdf.svg │ ├── fi-page-export.svg │ ├── fi-page-filled.svg │ ├── fi-page-multiple.svg │ ├── fi-page-pdf.svg │ ├── fi-page-remove.svg │ ├── fi-page-search.svg │ ├── fi-page.svg │ ├── fi-paint-bucket.svg │ ├── fi-paperclip.svg │ ├── fi-pause.svg │ ├── fi-paw.svg │ ├── fi-paypal.svg │ ├── fi-pencil.svg │ ├── fi-photo.svg │ ├── fi-play-circle.svg │ ├── fi-play-video.svg │ ├── fi-play.svg │ ├── fi-plus.svg │ ├── fi-pound.svg │ ├── fi-power.svg │ ├── fi-previous.svg │ ├── fi-price-tag.svg │ ├── fi-pricetag-multiple.svg │ ├── fi-print.svg │ ├── fi-prohibited.svg │ ├── fi-projection-screen.svg │ ├── fi-puzzle.svg │ ├── fi-quote.svg │ ├── fi-record.svg │ ├── fi-refresh.svg │ ├── fi-results-demographics.svg │ ├── fi-results.svg │ ├── fi-rewind-ten.svg │ ├── fi-rewind.svg │ ├── fi-rss.svg │ ├── fi-safety-cone.svg │ ├── fi-save.svg │ ├── fi-share.svg │ ├── fi-sheriff-badge.svg │ ├── fi-shield.svg │ ├── fi-shopping-bag.svg │ ├── fi-shopping-cart.svg │ ├── fi-shuffle.svg │ ├── fi-skull.svg │ ├── fi-social-500px.svg │ ├── fi-social-adobe.svg │ ├── fi-social-amazon.svg │ ├── fi-social-android.svg │ ├── fi-social-apple.svg │ ├── fi-social-behance.svg │ ├── fi-social-bing.svg │ ├── fi-social-blogger.svg │ ├── fi-social-delicious.svg │ ├── fi-social-designer-news.svg │ ├── fi-social-deviant-art.svg │ ├── fi-social-digg.svg │ ├── fi-social-dribbble.svg │ ├── fi-social-drive.svg │ ├── fi-social-dropbox.svg │ ├── fi-social-evernote.svg │ ├── fi-social-facebook.svg │ ├── fi-social-flickr.svg │ ├── fi-social-forrst.svg │ ├── fi-social-foursquare.svg │ ├── fi-social-game-center.svg │ ├── fi-social-github.svg │ ├── fi-social-google-plus.svg │ ├── fi-social-hacker-news.svg │ ├── fi-social-hi5.svg │ ├── fi-social-instagram.svg │ ├── fi-social-joomla.svg │ ├── fi-social-lastfm.svg │ ├── fi-social-linkedin.svg │ ├── fi-social-medium.svg │ ├── fi-social-myspace.svg │ ├── fi-social-orkut.svg │ ├── fi-social-path.svg │ ├── fi-social-picasa.svg │ ├── fi-social-pinterest.svg │ ├── fi-social-rdio.svg │ ├── fi-social-reddit.svg │ ├── fi-social-skillshare.svg │ ├── fi-social-skype.svg │ ├── fi-social-smashing-mag.svg │ ├── fi-social-snapchat.svg │ ├── fi-social-spotify.svg │ ├── fi-social-squidoo.svg │ ├── fi-social-stack-overflow.svg │ ├── fi-social-steam.svg │ ├── fi-social-stumbleupon.svg │ ├── fi-social-treehouse.svg │ ├── fi-social-tumblr.svg │ ├── fi-social-twitter.svg │ ├── fi-social-vimeo.svg │ ├── fi-social-windows.svg │ ├── fi-social-xbox.svg │ ├── fi-social-yahoo.svg │ ├── fi-social-yelp.svg │ ├── fi-social-youtube.svg │ ├── fi-social-zerply.svg │ ├── fi-social-zurb.svg │ ├── fi-sound.svg │ ├── fi-star.svg │ ├── fi-stop.svg │ ├── fi-strikethrough.svg │ ├── fi-subscript.svg │ ├── fi-superscript.svg │ ├── fi-tablet-landscape.svg │ ├── fi-tablet-portrait.svg │ ├── fi-target-two.svg │ ├── fi-target.svg │ ├── fi-telephone-accessible.svg │ ├── fi-telephone.svg │ ├── fi-text-color.svg │ ├── fi-thumbnails.svg │ ├── fi-ticket.svg │ ├── fi-torso-business.svg │ ├── fi-torso-female.svg │ ├── fi-torso.svg │ ├── fi-torsos-all-female.svg │ ├── fi-torsos-all.svg │ ├── fi-torsos-female-male.svg │ ├── fi-torsos-male-female.svg │ ├── fi-torsos.svg │ ├── fi-trash.svg │ ├── fi-trees.svg │ ├── fi-trophy.svg │ ├── fi-underline.svg │ ├── fi-universal-access.svg │ ├── fi-unlink.svg │ ├── fi-unlock.svg │ ├── fi-upload-cloud.svg │ ├── fi-upload.svg │ ├── fi-usb.svg │ ├── fi-video.svg │ ├── fi-volume-none.svg │ ├── fi-volume-strike.svg │ ├── fi-volume.svg │ ├── fi-web.svg │ ├── fi-wheelchair.svg │ ├── fi-widget.svg │ ├── fi-wrench.svg │ ├── fi-x-circle.svg │ ├── fi-x.svg │ ├── fi-yen.svg │ ├── fi-zoom-in.svg │ └── fi-zoom-out.svg ├── images ├── favicon.ico ├── folder.png ├── inpx.png ├── inpx.psd ├── nocover-big.jpg ├── nocover.jpg ├── sopds_book.jpg ├── sopds_icon-big.gif ├── sopds_icon.gif ├── sopds_icon.jpg ├── sopds_icon2.gif ├── sopds_logo.gif ├── text.png └── zip.png └── js ├── sopds.js └── vendor ├── foundation.js ├── foundation.min.js ├── jquery.js └── what-input.js /.gitattributes: -------------------------------------------------------------------------------- 1 | assets/* linguist-vendored 2 | convert/* linguist-vendored 3 | static/* linguist-vendored 4 | sopds_web_backend/static/* linguist-vendored -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | *.swp 3 | *.pid 4 | *.pyc 5 | db.sqlite3 6 | db.sqlite3-journal 7 | .idea/* 8 | venv 9 | 10 | -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | sopds 4 | 5 | 6 | 7 | 8 | 9 | org.python.pydev.PyDevBuilder 10 | 11 | 12 | 13 | 14 | 15 | org.python.pydev.pythonNature 16 | org.python.pydev.django.djangoNature 17 | 18 | 19 | -------------------------------------------------------------------------------- /.pydevproject: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | DJANGO_MANAGE_LOCATION 5 | manage.py 6 | 7 | 8 | /${PROJECT_DIR_NAME} 9 | 10 | python interpreter 11 | Default 12 | 13 | -------------------------------------------------------------------------------- /.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding//opds_catalog/dl.py=utf-8 3 | encoding//opds_catalog/opdsdb.py=utf-8 4 | encoding//opds_catalog/sopdscan.py=utf-8 5 | encoding//opds_catalog/tests/test_dl.py=utf-8 6 | encoding//opds_catalog/tests/test_feeds.py=utf-8 7 | encoding/=UTF-8 8 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: python 2 | python: 3 | - 3.4 4 | - 3.5 5 | - 3.6 6 | 7 | env: 8 | - DJANGO='django>=1.10,<1.11' 9 | - DJANGO='django>=1.11,<2.0' 10 | - DJANGO='django>=2.0,<2.2' 11 | 12 | install: 13 | - travis_retry pip install $DJANGO 14 | - travis_retry pip install -r requirements.txt 15 | 16 | script: 17 | - python manage.py test 18 | 19 | #branches: 20 | # only: 21 | # - master 22 | 23 | -------------------------------------------------------------------------------- /License: -------------------------------------------------------------------------------- 1 | # Simple OPDS - программа для каталогизации электронных книг и организации 2 | # доступа к ним с использованием протокола OPDS. 3 | # Copyright (C)2017, Дмитрий Шелепнёв 4 | # 5 | # Это программа является свободным программным обеспечением. Вы можете 6 | # распространять и/или модифицировать её согласно условиям Стандартной 7 | # Общественной Лицензии GNU, опубликованной Фондом Свободного Программного 8 | # Обеспечения, версии 3 или, по Вашему желанию, любой более поздней версии. 9 | # Эта программа распространяется в надежде, что она будет полезной, но БЕЗ 10 | # ВСЯКИХ ГАРАНТИЙ, в том числе подразумеваемых гарантий ТОВАРНОГО СОСТОЯНИЯ ПРИ 11 | # ПРОДАЖЕ и ГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННОГО ПРИМЕНЕНИЯ. Смотрите Стандартную 12 | # Общественную Лицензию GNU для получения дополнительной информации. 13 | # 14 | # Копию Стандартной Общественной Лицензии GNU можно получить здесь: 15 | # . 16 | # 17 | # С автором можно связаться по следующему адресу электронной почтaы: 18 | # admin@sopds.ru 19 | 20 | -------------------------------------------------------------------------------- /Pipfile: -------------------------------------------------------------------------------- 1 | [[source]] 2 | name = "pypi" 3 | url = "https://pypi.org/simple" 4 | verify_ssl = true 5 | 6 | [dev-packages] 7 | 8 | [packages] 9 | django-picklefield = "*" 10 | lxml = "*" 11 | python-telegram-bot = ">=10" 12 | Django = ">=1.10" 13 | Pillow = ">=2.9.0" 14 | APScheduler = ">=3.3.0" 15 | 16 | [requires] 17 | python_version = "3.7" 18 | -------------------------------------------------------------------------------- /TODO.txt: -------------------------------------------------------------------------------- 1 | - Обработка статики при DEBUG=False: 2 | https://stackoverflow.com/questions/5836674/why-does-debug-false-setting-make-my-django-static-files-access-fail 3 | 4 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-minimal -------------------------------------------------------------------------------- /assets/sopds-sass/.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "bower_components" 3 | } 4 | -------------------------------------------------------------------------------- /assets/sopds-sass/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | bower_components 3 | node_modules 4 | npm-debug.log 5 | css 6 | -------------------------------------------------------------------------------- /assets/sopds-sass/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## Version 1.0 (November 19, 2015) 4 | 5 | Initial release. 6 | -------------------------------------------------------------------------------- /assets/sopds-sass/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "foundation-sites-template", 3 | "version": "1.0.0", 4 | "authors": [ 5 | "ZURB " 6 | ], 7 | "description": "Basic template for a new Foundation for Sites project.", 8 | "main": "index.html", 9 | "license": "MIT", 10 | "homepage": "http://foundation.zurb.com", 11 | "dependencies": { 12 | "foundation-sites": "~6.1.2", 13 | "motion-ui": "~1.2.2" 14 | }, 15 | "ignore": [ 16 | "**/.*", 17 | "node_modules", 18 | "bower_components", 19 | "test", 20 | "tests" 21 | ], 22 | "private": true 23 | } 24 | -------------------------------------------------------------------------------- /assets/sopds-sass/gulpfile.js: -------------------------------------------------------------------------------- 1 | var gulp = require('gulp'); 2 | var $ = require('gulp-load-plugins')(); 3 | 4 | var sassPaths = [ 5 | 'bower_components/foundation-sites/scss', 6 | 'bower_components/motion-ui/src' 7 | ]; 8 | 9 | gulp.task('sass', function() { 10 | return gulp.src('scss/sopds.scss') 11 | .pipe($.sass({ 12 | includePaths: sassPaths, 13 | outputStyle: 'compressed' // if css compressed **file size** 14 | }) 15 | .on('error', $.sass.logError)) 16 | .pipe($.autoprefixer({ 17 | browsers: ['last 2 versions', 'ie >= 9'] 18 | })) 19 | .pipe(gulp.dest('../../sopds_web_backend/static/css')); 20 | }); 21 | 22 | gulp.task('default', ['sass'], function() { 23 | gulp.watch(['scss/**/*.scss'], ['sass']); 24 | }); 25 | -------------------------------------------------------------------------------- /assets/sopds-sass/js/app.js: -------------------------------------------------------------------------------- 1 | $(document).foundation(); 2 | -------------------------------------------------------------------------------- /assets/sopds-sass/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "foundation-sites-template", 3 | "version": "1.0.0", 4 | "description": "Basic template for a new Foundation for Sites project.", 5 | "main": "gulpfile.js", 6 | "devDependencies": { 7 | "gulp": "^3.9.0", 8 | "gulp-autoprefixer": "^3.1.1", 9 | "gulp-load-plugins": "^1.2.4", 10 | "gulp-sass": "^2.3.2" 11 | }, 12 | "scripts": { 13 | "start": "gulp", 14 | "build": "gulp sass" 15 | }, 16 | "repository": { 17 | "type": "git", 18 | "url": "https://github.com/zurb/foundation-sites-template.git" 19 | }, 20 | "bugs": { 21 | "url": "https://github.com/zurb/foundation-sites/issues", 22 | "email": "foundation@zurb.com" 23 | }, 24 | "author": "ZURB ", 25 | "license": "MIT", 26 | "private": true, 27 | "dependencies": { 28 | "gulp-autoprefixer": "^3.1.0" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /book_tools/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/book_tools/__init__.py -------------------------------------------------------------------------------- /book_tools/format/mimetype.py: -------------------------------------------------------------------------------- 1 | class Mimetype: 2 | OCTET_STREAM = 'application/octet-stream' 3 | XML = 'application/xml' 4 | ZIP = 'application/zip' 5 | 6 | EPUB = 'application/epub+zip' 7 | FB2 = 'application/fb2+xml' 8 | FB2_ZIP = 'application/fb2+zip' 9 | PDF = 'application/pdf' 10 | MSWORD = 'application/msword' 11 | MOBI = 'application/x-mobipocket-ebook' 12 | DJVU = 'image/vnd.djvu' 13 | TEXT = 'text/plain' 14 | RTF = 'text/rtf' 15 | -------------------------------------------------------------------------------- /book_tools/format/other.py: -------------------------------------------------------------------------------- 1 | from book_tools.format.bookfile import BookFile 2 | 3 | class Dummy(BookFile): 4 | def __init__(self, file, original_filename, mimetype): 5 | BookFile.__init__(self, file, original_filename, mimetype) 6 | 7 | def __exit__(self, kind, value, traceback): 8 | pass -------------------------------------------------------------------------------- /book_tools/format/util.py: -------------------------------------------------------------------------------- 1 | #import PythonMagick 2 | #from PIL import Image, ImageFile 3 | 4 | strip_symbols = ' »«\'\"\&\n-.#\\\`' 5 | 6 | def list_zip_file_infos(zipfile): 7 | return [info for info in zipfile.infolist() if not info.filename.endswith('/')] 8 | 9 | def minify_cover(path): 10 | # try: 11 | # try: 12 | # image = Image.open(path).convert('RGB') 13 | # except: 14 | # magick_image = PythonMagick.Image(path + '[0]') 15 | # magick_image.write(path) 16 | # image = Image.open(path).convert('RGB') 17 | # width = image.size[0] 18 | # if width > 600: 19 | # new_width = 500 20 | # new_height = int(float(new_width) * image.size[1] / width) 21 | # image.thumbnail((new_width, new_height), Image.ANTIALIAS) 22 | # ImageFile.MAXBLOCK = image.size[0] * image.size[1] 23 | # image.save(path, 'JPEG', optimize=True, progressive=True) 24 | # except: 25 | # pass 26 | pass 27 | -------------------------------------------------------------------------------- /book_tools/pymobi/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | __author__ = 'Yugang LIU' 3 | __email__ = 'liuyug@gmail.com' 4 | __version__ = '0.1.3' 5 | __license__ = 'GPLv3' 6 | 7 | 8 | from book_tools.pymobi.mobi import BookMobi 9 | from book_tools.pymobi.util import * 10 | -------------------------------------------------------------------------------- /constance/__init__.py: -------------------------------------------------------------------------------- 1 | from django.utils.functional import LazyObject 2 | from . import checks 3 | 4 | __version__ = '2.4.0' 5 | 6 | default_app_config = 'constance.apps.ConstanceConfig' 7 | 8 | 9 | class LazyConfig(LazyObject): 10 | def _setup(self): 11 | from .base import Config 12 | self._wrapped = Config() 13 | 14 | 15 | config = LazyConfig() 16 | -------------------------------------------------------------------------------- /constance/backends/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | Defines the base constance backend 3 | """ 4 | 5 | 6 | class Backend(object): 7 | 8 | def get(self, key): 9 | """ 10 | Get the key from the backend store and return the value. 11 | Return None if not found. 12 | """ 13 | raise NotImplementedError 14 | 15 | def mget(self, keys): 16 | """ 17 | Get the keys from the backend store and return a list of the values. 18 | Return an empty list if not found. 19 | """ 20 | raise NotImplementedError 21 | 22 | def set(self, key, value): 23 | """ 24 | Add the value to the backend store given the key. 25 | """ 26 | raise NotImplementedError 27 | -------------------------------------------------------------------------------- /constance/backends/database/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | from django.db import models, migrations 5 | import picklefield.fields 6 | 7 | 8 | class Migration(migrations.Migration): 9 | dependencies = [] 10 | 11 | operations = [ 12 | migrations.CreateModel( 13 | name='Constance', 14 | fields=[ 15 | ('id', models.AutoField(verbose_name='ID', primary_key=True, 16 | auto_created=True, serialize=False)), 17 | ('key', models.CharField(unique=True, max_length=255)), 18 | ('value', picklefield.fields.PickledObjectField(editable=False)), 19 | ], 20 | options={ 21 | 'verbose_name': 'constance', 22 | 'verbose_name_plural': 'constances', 23 | 'db_table': 'constance_config', 24 | }, 25 | bases=(models.Model,), 26 | ), 27 | ] 28 | -------------------------------------------------------------------------------- /constance/backends/database/migrations/0002_auto_20190129_2304.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.5 on 2019-01-30 04:04 2 | 3 | from django.db import migrations 4 | import picklefield.fields 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('database', '0001_initial'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterField( 15 | model_name='constance', 16 | name='value', 17 | field=picklefield.fields.PickledObjectField(blank=True, editable=False, null=True), 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /constance/backends/database/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/constance/backends/database/migrations/__init__.py -------------------------------------------------------------------------------- /constance/backends/database/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | from django.core.exceptions import ImproperlyConfigured 3 | 4 | from django.utils.translation import ugettext_lazy as _ 5 | 6 | try: 7 | from picklefield import PickledObjectField 8 | except ImportError: 9 | raise ImproperlyConfigured("Couldn't find the the 3rd party app " 10 | "django-picklefield which is required for " 11 | "the constance database backend.") 12 | 13 | 14 | class Constance(models.Model): 15 | key = models.CharField(max_length=255, unique=True) 16 | value = PickledObjectField(null=True, blank=True) 17 | 18 | class Meta: 19 | verbose_name = _('constance') 20 | verbose_name_plural = _('constances') 21 | db_table = 'constance_config' 22 | 23 | def __unicode__(self): 24 | return self.key 25 | -------------------------------------------------------------------------------- /constance/backends/database/south_migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/constance/backends/database/south_migrations/__init__.py -------------------------------------------------------------------------------- /constance/base.py: -------------------------------------------------------------------------------- 1 | from . import settings, utils 2 | 3 | 4 | class Config(object): 5 | """ 6 | The global config wrapper that handles the backend. 7 | """ 8 | def __init__(self): 9 | super(Config, self).__setattr__('_backend', 10 | utils.import_module_attr(settings.BACKEND)()) 11 | 12 | def __getattr__(self, key): 13 | try: 14 | if not len(settings.CONFIG[key]) in (2, 3): 15 | raise AttributeError(key) 16 | default = settings.CONFIG[key][0] 17 | except KeyError: 18 | raise AttributeError(key) 19 | result = self._backend.get(key) 20 | if result is None: 21 | result = default 22 | setattr(self, key, default) 23 | return result 24 | return result 25 | 26 | def __setattr__(self, key, value): 27 | if key not in settings.CONFIG: 28 | raise AttributeError(key) 29 | self._backend.set(key, value) 30 | 31 | def __dir__(self): 32 | return settings.CONFIG.keys() 33 | -------------------------------------------------------------------------------- /constance/context_processors.py: -------------------------------------------------------------------------------- 1 | import constance 2 | 3 | 4 | def config(request): 5 | """ 6 | Simple context processor that puts the config into every 7 | RequestContext. Just make sure you have a setting like this: 8 | 9 | TEMPLATE_CONTEXT_PROCESSORS = ( 10 | # ... 11 | 'constance.context_processors.config', 12 | ) 13 | 14 | """ 15 | return {"config": constance.config} 16 | -------------------------------------------------------------------------------- /constance/locale/cs_CZ/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/constance/locale/cs_CZ/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /constance/locale/de/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/constance/locale/de/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /constance/locale/en/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/constance/locale/en/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /constance/locale/es/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/constance/locale/es/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /constance/locale/et/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/constance/locale/et/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /constance/locale/fr/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/constance/locale/fr/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /constance/locale/it/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/constance/locale/it/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /constance/locale/pl/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/constance/locale/pl/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /constance/locale/ru/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/constance/locale/ru/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /constance/locale/zh_CN/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/constance/locale/zh_CN/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /constance/locale/zh_Hans/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/constance/locale/zh_Hans/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /constance/management/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/constance/management/__init__.py -------------------------------------------------------------------------------- /constance/management/commands/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/constance/management/commands/__init__.py -------------------------------------------------------------------------------- /constance/signals.py: -------------------------------------------------------------------------------- 1 | import django.dispatch 2 | 3 | config_updated = django.dispatch.Signal( 4 | providing_args=['key', 'old_value', 'new_value'] 5 | ) 6 | -------------------------------------------------------------------------------- /constance/static/admin/css/constance.css: -------------------------------------------------------------------------------- 1 | #result_list .changed { 2 | background-color: #ffc; 3 | } 4 | #changelist table thead th .text { 5 | padding: 2px 5px; 6 | } 7 | #changelist table tbody td:first-child { 8 | text-align: left; 9 | } 10 | #changelist-form ul.errorlist { 11 | margin: 0 !important; 12 | } 13 | .help { 14 | font-weight: normal !important; 15 | } 16 | #results{ 17 | overflow-x: auto; 18 | } -------------------------------------------------------------------------------- /constance/test/__init__.py: -------------------------------------------------------------------------------- 1 | from .utils import override_config 2 | -------------------------------------------------------------------------------- /constance/utils.py: -------------------------------------------------------------------------------- 1 | from importlib import import_module 2 | 3 | 4 | def import_module_attr(path): 5 | package, module = path.rsplit('.', 1) 6 | return getattr(import_module(package), module) 7 | -------------------------------------------------------------------------------- /convert/fb2conv/fb2conv-1.5.2.src.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/convert/fb2conv/fb2conv-1.5.2.src.zip -------------------------------------------------------------------------------- /convert/fb2conv/fb2epub: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | LANG=ru_RU.UTF-8 3 | LC_ALL=ru_RU.UTF-8 4 | export LANG 5 | export LC_ALL 6 | 7 | run_path=`dirname $0` 8 | converter=$run_path'/fb2conv.py' 9 | python $converter -f epub "$1" "$2" 10 | -------------------------------------------------------------------------------- /convert/fb2conv/fb2mobi: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | LANG=ru_RU.UTF-8 3 | LC_ALL=ru_RU.UTF-8 4 | export LANG 5 | export LC_ALL 6 | 7 | run_path=`dirname $0 ` 8 | converter=$run_path'/fb2conv.py' 9 | python $converter -f mobi "$1" "$2" 10 | -------------------------------------------------------------------------------- /convert/fb2conv/kindlegen_linux_2.6_i386_v2_9.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/convert/fb2conv/kindlegen_linux_2.6_i386_v2_9.tar.gz -------------------------------------------------------------------------------- /convert/fb2epub/fb2epub: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | LANG=ru_RU.UTF-8 3 | LC_ALL=ru_RU.UTF-8 4 | export LANG 5 | export LC_ALL 6 | 7 | run_path=`dirname $0` 8 | converter=$run_path'/fb2epub-0.3.0.jar' 9 | java -jar $converter "$1" "$2" 10 | -------------------------------------------------------------------------------- /convert/fb2epub/fb2epub-0.3.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/convert/fb2epub/fb2epub-0.3.0.jar -------------------------------------------------------------------------------- /convert/fb2epub/fb2epub.cmd: -------------------------------------------------------------------------------- 1 | @set run_path=%~dp0 2 | java -jar "%run_path%\fb2epub-0.3.0.jar" %1 %2 3 | -------------------------------------------------------------------------------- /convert/fb2toepub/fb2toepub-1.0_4.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/convert/fb2toepub/fb2toepub-1.0_4.zip -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import os 3 | import sys 4 | 5 | if __name__ == "__main__": 6 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sopds.settings") 7 | 8 | from django.core.management import execute_from_command_line 9 | 10 | execute_from_command_line(sys.argv) 11 | -------------------------------------------------------------------------------- /opds_catalog/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/opds_catalog/__init__.py -------------------------------------------------------------------------------- /opds_catalog/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from opds_catalog.models import Genre 3 | 4 | # Register your models here. 5 | class Genre_admin(admin.ModelAdmin): 6 | list_display = ('genre', 'section', 'subsection') 7 | 8 | admin.site.register(Genre, Genre_admin) 9 | -------------------------------------------------------------------------------- /opds_catalog/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class OpdsCatalogConfig(AppConfig): 5 | name = 'opds_catalog' 6 | -------------------------------------------------------------------------------- /opds_catalog/locale/ru/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/opds_catalog/locale/ru/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /opds_catalog/log/emptyfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/opds_catalog/log/emptyfile -------------------------------------------------------------------------------- /opds_catalog/migrations/0002_auto_20161115_1810.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.3 on 2016-11-15 15:10 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('opds_catalog', '0001_initial'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AlterField( 16 | model_name='catalog', 17 | name='cat_size', 18 | field=models.BigIntegerField(default=0, null=True), 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /opds_catalog/migrations/0004_auto_20161116_1852.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.3 on 2016-11-16 15:52 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('opds_catalog', '0003_auto_20161116_0955'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AlterField( 16 | model_name='series', 17 | name='ser', 18 | field=models.CharField(db_index=True, max_length=150), 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /opds_catalog/migrations/0005_auto_20161204_2138.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.3 on 2016-12-04 18:38 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('opds_catalog', '0004_auto_20161116_1852'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AlterField( 16 | model_name='book', 17 | name='filename', 18 | field=models.CharField(db_index=True, max_length=512), 19 | ), 20 | migrations.AlterField( 21 | model_name='book', 22 | name='path', 23 | field=models.CharField(db_index=True, max_length=512), 24 | ), 25 | ] 26 | -------------------------------------------------------------------------------- /opds_catalog/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/opds_catalog/migrations/__init__.py -------------------------------------------------------------------------------- /opds_catalog/static/images/nocover-big.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/opds_catalog/static/images/nocover-big.jpg -------------------------------------------------------------------------------- /opds_catalog/static/images/nocover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/opds_catalog/static/images/nocover.jpg -------------------------------------------------------------------------------- /opds_catalog/templates/opensearch.html: -------------------------------------------------------------------------------- 1 | {% autoescape off %} 2 | 3 | 4 | SimpleOPDS 5 | SimpleOPDS 6 | 7 | http://www.sopds.ru/favicon.ico 8 | 9 | 10 | 11 | 12 | open 13 | false 14 | * 15 | UTF-8 16 | UTF-8 17 | 18 | {% endautoescape %} -------------------------------------------------------------------------------- /opds_catalog/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/opds_catalog/tests/__init__.py -------------------------------------------------------------------------------- /opds_catalog/tests/data/badfile.fb2: -------------------------------------------------------------------------------- 1 | This not fb2 file for tests 2 | -------------------------------------------------------------------------------- /opds_catalog/tests/data/badfile.zip: -------------------------------------------------------------------------------- 1 | This novalid zip file for tests 2 | -------------------------------------------------------------------------------- /opds_catalog/tests/data/books.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/opds_catalog/tests/data/books.zip -------------------------------------------------------------------------------- /opds_catalog/tests/data/mirer.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/opds_catalog/tests/data/mirer.epub -------------------------------------------------------------------------------- /opds_catalog/tests/data/robin_cook.mobi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/opds_catalog/tests/data/robin_cook.mobi -------------------------------------------------------------------------------- /opds_catalog/tests/test_dl.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from django.test import TestCase, Client 4 | 5 | class DownloadsTestCase(TestCase): 6 | fixtures = ['testdb.json'] 7 | 8 | def setUp(self): 9 | pass 10 | 11 | def test_download_book(self): 12 | pass 13 | 14 | def test_download_zip(self): 15 | pass 16 | 17 | def test_download_cover(self): 18 | pass -------------------------------------------------------------------------------- /opds_catalog/tmp/emptyfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/opds_catalog/tmp/emptyfile -------------------------------------------------------------------------------- /opds_catalog/utils.py: -------------------------------------------------------------------------------- 1 | ####################################################################### 2 | # 3 | # Вспомогательные функции 4 | # 5 | import unicodedata 6 | 7 | def translit(s): 8 | """Russian translit: converts 'привет'->'privet'""" 9 | assert s is not str, "Error: argument MUST be string" 10 | 11 | table1 = str.maketrans("абвгдеёзийклмнопрстуфхъыьэАБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЬЭ", "abvgdeezijklmnoprstufh'y'eABVGDEEZIJKLMNOPRSTUFH'Y'E") 12 | table2 = {'ж':'zh','ц':'ts','ч':'ch','ш':'sh','щ':'sch','ю':'ju','я':'ja', 'Ж':'Zh','Ц':'Ts','Ч':'Ch','Ш':'Sh','Щ':'Sch','Ю':'Ju','Я':'Ja', 13 | '«':'', '»':'','"':'','\n':'_',' ':'_',"'":"",':':'_','№':'N'} 14 | s = s.translate(table1) 15 | for k in table2.keys(): 16 | s = s.replace(k,table2[k]) 17 | return s 18 | 19 | def to_ascii(s): 20 | return s.encode('ascii', 'replace').decode('utf-8') 21 | -------------------------------------------------------------------------------- /opds_catalog/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | Django>=1.10,<2.2; python_version >= '3.4' 2 | Pillow>=2.9.0 3 | apscheduler>=3.3.0 4 | #django-constance[database]>=2.1 5 | django-picklefield 6 | lxml 7 | python-telegram-bot>=10 8 | -------------------------------------------------------------------------------- /sopds/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/sopds/__init__.py -------------------------------------------------------------------------------- /sopds/locale/ru/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/sopds/locale/ru/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /sopds/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for sopds project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sopds.settings") 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /sopds_web_backend/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/sopds_web_backend/__init__.py -------------------------------------------------------------------------------- /sopds_web_backend/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | -------------------------------------------------------------------------------- /sopds_web_backend/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class SopdsWebBackendConfig(AppConfig): 5 | name = 'sopds_web_backend' 6 | -------------------------------------------------------------------------------- /sopds_web_backend/locale/ru/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/sopds_web_backend/locale/ru/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /sopds_web_backend/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/sopds_web_backend/migrations/__init__.py -------------------------------------------------------------------------------- /sopds_web_backend/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | # Create your models here. 4 | -------------------------------------------------------------------------------- /sopds_web_backend/settings.py: -------------------------------------------------------------------------------- 1 | HALF_PAGES_LINKS = 3 -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/sopds_web_backend/static/foundation-icons/.DS_Store -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/foundation-icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/sopds_web_backend/static/foundation-icons/foundation-icons.eot -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/foundation-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/sopds_web_backend/static/foundation-icons/foundation-icons.ttf -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/foundation-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/sopds_web_backend/static/foundation-icons/foundation-icons.woff -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-arrow-down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-arrow-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-arrow-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-arrow-up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-background-color.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-battery-empty.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-battery-full.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-battery-half.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-bold.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-bookmark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-braille.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-check.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-cloud.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-comment-video.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-comment.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-contrast.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-credit-card.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-css3.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-die-one.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-fast-forward.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-filter.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-folder.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-heart.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-home.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-html5.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-info.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-italic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-lock.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-magnifying-glass.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-marker.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-minus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 8 | 9 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-mobile.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-monitor.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-mountains.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-music.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-page-filled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 9 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-page.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-pencil.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-play-video.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-play.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-plus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-prohibited.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-record.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-rewind.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-shield.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-shopping-bag.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-social-adobe.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-social-delicious.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-social-drive.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-social-dropbox.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-social-facebook.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-social-flickr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-social-forrst.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-social-hacker-news.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-social-medium.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-social-path.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-social-windows.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-star.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-stop.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-tablet-landscape.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-tablet-portrait.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-torso.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-trash.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 10 | 11 | 12 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-unlock.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-video.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 8 | 9 | -------------------------------------------------------------------------------- /sopds_web_backend/static/foundation-icons/svgs/fi-volume-none.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /sopds_web_backend/static/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/sopds_web_backend/static/images/favicon.ico -------------------------------------------------------------------------------- /sopds_web_backend/static/images/folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/sopds_web_backend/static/images/folder.png -------------------------------------------------------------------------------- /sopds_web_backend/static/images/inpx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/sopds_web_backend/static/images/inpx.png -------------------------------------------------------------------------------- /sopds_web_backend/static/images/inpx.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/sopds_web_backend/static/images/inpx.psd -------------------------------------------------------------------------------- /sopds_web_backend/static/images/sopds_book.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/sopds_web_backend/static/images/sopds_book.jpg -------------------------------------------------------------------------------- /sopds_web_backend/static/images/sopds_icon-big.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/sopds_web_backend/static/images/sopds_icon-big.gif -------------------------------------------------------------------------------- /sopds_web_backend/static/images/sopds_icon.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/sopds_web_backend/static/images/sopds_icon.gif -------------------------------------------------------------------------------- /sopds_web_backend/static/images/sopds_icon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/sopds_web_backend/static/images/sopds_icon.jpg -------------------------------------------------------------------------------- /sopds_web_backend/static/images/sopds_icon2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/sopds_web_backend/static/images/sopds_icon2.gif -------------------------------------------------------------------------------- /sopds_web_backend/static/images/sopds_logo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/sopds_web_backend/static/images/sopds_logo.gif -------------------------------------------------------------------------------- /sopds_web_backend/static/images/text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/sopds_web_backend/static/images/text.png -------------------------------------------------------------------------------- /sopds_web_backend/static/images/zip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/sopds_web_backend/static/images/zip.png -------------------------------------------------------------------------------- /sopds_web_backend/static/js/sopds.js: -------------------------------------------------------------------------------- 1 | $(document).foundation() 2 | -------------------------------------------------------------------------------- /sopds_web_backend/templates/admin/base_site.html: -------------------------------------------------------------------------------- 1 | {% extends "admin/base.html" %} 2 | 3 | {% block title %}{{ title }} | SOPDS site admin {% endblock %} 4 | 5 | {% block branding %} 6 |

SOPDS administration

7 | {% endblock %} 8 | 9 | {% block nav-global %}{% endblock %} 10 | -------------------------------------------------------------------------------- /sopds_web_backend/templates/sopds_breadcrumbs.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | 3 | -------------------------------------------------------------------------------- /sopds_web_backend/templates/sopds_error.html: -------------------------------------------------------------------------------- 1 | {% extends "sopds_main.html" %} 2 | 3 | {% block ext-body %} 4 | {% if errormsg %} 5 |
6 |

{{ errormsg }}

7 |
8 | {% endif %} 9 | 10 | {% endblock %} {# body #} -------------------------------------------------------------------------------- /sopds_web_backend/templates/sopds_hello.html: -------------------------------------------------------------------------------- 1 | {% extends "sopds_main.html" %} 2 | {% load i18n %} 3 | 4 | {% block ext-body %} 5 |
6 |
7 |

{% trans "Hello" %} {% if user.is_authenticated %}{{ user.username }}{% endif %}{% if not user.is_authenticated %}{% trans "Guest" %}{% endif %} !

8 |

9 |      {% trans "Simple OPDS Catalog - is a free program for Linux and Windows, which allows for the rapid creation of electronic OPDS-catalog books. OPDS (Open Publication Distribution System) directory allows you to access your library through the Internet with many devices for reading electronic books, tablets, smartphones, etc. More about the program can be found on the project website:" %} www.sopds.ru. 10 |

11 |
12 |
13 | {% endblock %} {# body #} -------------------------------------------------------------------------------- /sopds_web_backend/templates/sopds_login.html: -------------------------------------------------------------------------------- 1 | {% extends "sopds_main.html" %} 2 | {% load i18n %} 3 | 4 | {% block ext-body %} 5 |
6 | {% csrf_token %} 7 |
8 |
9 | 12 | 15 | 16 |
17 |
18 |
19 |
20 | {% endblock %} {# body #} -------------------------------------------------------------------------------- /sopds_web_backend/templates/sopds_messages.html: -------------------------------------------------------------------------------- 1 |
2 | {{ system_message.text }} 3 | 6 |
-------------------------------------------------------------------------------- /sopds_web_backend/templates/sopds_selectauthor.html: -------------------------------------------------------------------------------- 1 | {% extends "sopds_main.html" %} 2 | {% load staticfiles %} 3 | {% load i18n %} 4 | 5 | {% block body %} 6 | {% autoescape on %} 7 | 8 | {% for chars in items %} 9 | 10 | 18 | 19 | {% endfor %} 20 |
11 | {% if chars.cnt >= splititems %} 12 | {{ chars.id }} 13 | {% else %} 14 | {{ chars.id }} 15 | {% endif %} 16 | {% blocktrans with chars_cnt=chars.cnt %}Total: {{ chars_cnt }} authors.{% endblocktrans %} 17 |
21 | {% endautoescape %} 22 | 23 | 24 | {% endblock %} {# body #} -------------------------------------------------------------------------------- /sopds_web_backend/templates/sopds_selectbook.html: -------------------------------------------------------------------------------- 1 | {% extends "sopds_main.html" %} 2 | {% load staticfiles %} 3 | {% load i18n %} 4 | 5 | {% block body %} 6 | {% autoescape on %} 7 | 8 | {% for chars in items %} 9 | 10 | 18 | 19 | {% endfor %} 20 |
11 | {% if chars.cnt >= splititems %} 12 | {{ chars.id }} 13 | {% else %} 14 | {{ chars.id }} 15 | {% endif %} 16 | {% blocktrans with chars_cnt=chars.cnt %}Total: {{ chars_cnt }} books.{% endblocktrans %} 17 |
21 | {% endautoescape %} 22 | 23 | 24 | {% endblock %} {# body #} -------------------------------------------------------------------------------- /sopds_web_backend/templates/sopds_selectgenres.html: -------------------------------------------------------------------------------- 1 | {% extends "sopds_main.html" %} 2 | {% load staticfiles %} 3 | {% load i18n %} 4 | 5 | {% block body %} 6 | {% autoescape on %} 7 | 8 | {% for g in items %} 9 | 10 | 18 | 19 | {% endfor %} 20 |
11 | {% if not parent_id %} 12 | {{ g.section }} 13 | {% else %} 14 | {{ g.subsection }} 15 | {% endif %} 16 | {% blocktrans with g_num_book=g.num_book %}Total: {{ g_num_book }} books.{% endblocktrans %} 17 |
21 | {% endautoescape %} 22 | 23 | {% endblock %} {# body #} -------------------------------------------------------------------------------- /sopds_web_backend/templates/sopds_selectseries.html: -------------------------------------------------------------------------------- 1 | {% extends "sopds_main.html" %} 2 | {% load staticfiles %} 3 | {% load i18n %} 4 | 5 | {% block body %} 6 | {% autoescape on %} 7 | 8 | {% for chars in items %} 9 | 10 | 18 | 19 | {% endfor %} 20 |
11 | {% if chars.cnt >= splititems %} 12 | {{ chars.id }} 13 | {% else %} 14 | {{ chars.id }} 15 | {% endif %} 16 | {% blocktrans with chars_cnt=chars.cnt %}Total: {{ chars_cnt }} series.{% endblocktrans %} 17 |
21 | {% endautoescape %} 22 | 23 | 24 | {% endblock %} {# body #} -------------------------------------------------------------------------------- /sopds_web_backend/urls.py: -------------------------------------------------------------------------------- 1 | 2 | from django.conf.urls import url 3 | from sopds_web_backend import views 4 | 5 | app_name='opds_web_backend' 6 | 7 | urlpatterns = [ 8 | url(r'^search/books/$',views.SearchBooksView, name='searchbooks'), 9 | url(r'^search/authors/$',views.SearchAuthorsView, name='searchauthors'), 10 | url(r'^search/series/$',views.SearchSeriesView, name='searchseries'), 11 | url(r'^catalog/$',views.CatalogsView, name='catalog'), 12 | url(r'^book/$',views.BooksView, name='book'), 13 | url(r'^author/$',views.AuthorsView, name='author'), 14 | url(r'^genre/$',views.GenresView, name='genre'), 15 | url(r'^series/$',views.SeriesView, name='series'), 16 | url(r'^login/$',views.LoginView, name='login'), 17 | url(r'^logout/$',views.LogoutView, name='logout'), 18 | url(r'^bs/delete/$',views.BSDelView, name='bsdel'), 19 | url(r'^bs/clear/$', views.BSClearView, name='bsclear'), 20 | url(r'^$',views.hello, name='main'), 21 | ] 22 | 23 | #handler403 = 'views.handler403' 24 | -------------------------------------------------------------------------------- /static/admin/css/dashboard.css: -------------------------------------------------------------------------------- 1 | /* DASHBOARD */ 2 | 3 | .dashboard .module table th { 4 | width: 100%; 5 | } 6 | 7 | .dashboard .module table td { 8 | white-space: nowrap; 9 | } 10 | 11 | .dashboard .module table td a { 12 | display: block; 13 | padding-right: .6em; 14 | } 15 | 16 | /* RECENT ACTIONS MODULE */ 17 | 18 | .module ul.actionlist { 19 | margin-left: 0; 20 | } 21 | 22 | ul.actionlist li { 23 | list-style-type: none; 24 | } 25 | 26 | ul.actionlist li { 27 | overflow: hidden; 28 | text-overflow: ellipsis; 29 | -o-text-overflow: ellipsis; 30 | } 31 | -------------------------------------------------------------------------------- /static/admin/css/fonts.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Roboto'; 3 | src: url('../fonts/Roboto-Bold-webfont.woff'); 4 | font-weight: 700; 5 | font-style: normal; 6 | } 7 | 8 | @font-face { 9 | font-family: 'Roboto'; 10 | src: url('../fonts/Roboto-Regular-webfont.woff'); 11 | font-weight: 400; 12 | font-style: normal; 13 | } 14 | 15 | @font-face { 16 | font-family: 'Roboto'; 17 | src: url('../fonts/Roboto-Light-webfont.woff'); 18 | font-weight: 300; 19 | font-style: normal; 20 | } 21 | -------------------------------------------------------------------------------- /static/admin/fonts/README.txt: -------------------------------------------------------------------------------- 1 | Roboto webfont source: https://www.google.com/fonts/specimen/Roboto 2 | Weights used in this project: Light (300), Regular (400), Bold (700) 3 | -------------------------------------------------------------------------------- /static/admin/fonts/Roboto-Bold-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/static/admin/fonts/Roboto-Bold-webfont.woff -------------------------------------------------------------------------------- /static/admin/fonts/Roboto-Light-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/static/admin/fonts/Roboto-Light-webfont.woff -------------------------------------------------------------------------------- /static/admin/fonts/Roboto-Regular-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/static/admin/fonts/Roboto-Regular-webfont.woff -------------------------------------------------------------------------------- /static/admin/img/README.txt: -------------------------------------------------------------------------------- 1 | All icons are taken from Font Awesome (http://fontawesome.io/) project. 2 | The Font Awesome font is licensed under the SIL OFL 1.1: 3 | - http://scripts.sil.org/OFL 4 | 5 | SVG icons source: https://github.com/encharm/Font-Awesome-SVG-PNG 6 | Font-Awesome-SVG-PNG is licensed under the MIT license (see file license 7 | in current folder). 8 | -------------------------------------------------------------------------------- /static/admin/img/gis/move_vertex_off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/admin/img/gis/move_vertex_on.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/admin/img/icon-addlink.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/icon-alert.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/icon-calendar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /static/admin/img/icon-changelink.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/icon-clock.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /static/admin/img/icon-deletelink.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/icon-no.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/icon-unknown-alt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/icon-unknown.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/icon-yes.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/inline-delete.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/tooltag-add.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/tooltag-arrowright.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/js/cancel.js: -------------------------------------------------------------------------------- 1 | (function($) { 2 | 'use strict'; 3 | $(function() { 4 | $('.cancel-link').click(function(e) { 5 | e.preventDefault(); 6 | window.history.back(); 7 | }); 8 | }); 9 | })(django.jQuery); 10 | -------------------------------------------------------------------------------- /static/admin/js/change_form.js: -------------------------------------------------------------------------------- 1 | /*global showAddAnotherPopup, showRelatedObjectLookupPopup showRelatedObjectPopup updateRelatedObjectLinks*/ 2 | 3 | (function($) { 4 | 'use strict'; 5 | $(document).ready(function() { 6 | var modelName = $('#django-admin-form-add-constants').data('modelName'); 7 | $('.add-another').click(function(e) { 8 | e.preventDefault(); 9 | var event = $.Event('django:add-another-related'); 10 | $(this).trigger(event); 11 | if (!event.isDefaultPrevented()) { 12 | showAddAnotherPopup(this); 13 | } 14 | }); 15 | 16 | if (modelName) { 17 | $('form#' + modelName + '_form :input:visible:enabled:first').focus(); 18 | } 19 | }); 20 | })(django.jQuery); 21 | -------------------------------------------------------------------------------- /static/admin/js/collapse.min.js: -------------------------------------------------------------------------------- 1 | (function(a){a(document).ready(function(){a("fieldset.collapse").each(function(b,c){0===a(c).find("div.errors").length&&a(c).addClass("collapsed").find("h2").first().append(' ('+gettext("Show")+")")});a("fieldset.collapse a.collapse-toggle").click(function(b){a(this).closest("fieldset").hasClass("collapsed")?a(this).text(gettext("Hide")).closest("fieldset").removeClass("collapsed").trigger("show.fieldset",[a(this).attr("id")]):a(this).text(gettext("Show")).closest("fieldset").addClass("collapsed").trigger("hide.fieldset", 2 | [a(this).attr("id")]);return!1})})})(django.jQuery); 3 | -------------------------------------------------------------------------------- /static/admin/js/jquery.init.js: -------------------------------------------------------------------------------- 1 | /*global django:true, jQuery:false*/ 2 | /* Puts the included jQuery into our own namespace using noConflict and passing 3 | * it 'true'. This ensures that the included jQuery doesn't pollute the global 4 | * namespace (i.e. this preserves pre-existing values for both window.$ and 5 | * window.jQuery). 6 | */ 7 | var django = django || {}; 8 | django.jQuery = jQuery.noConflict(true); 9 | -------------------------------------------------------------------------------- /static/admin/js/popup_response.js: -------------------------------------------------------------------------------- 1 | /*global opener */ 2 | (function() { 3 | 'use strict'; 4 | var initData = JSON.parse(document.getElementById('django-admin-popup-response-constants').dataset.popupResponse); 5 | switch(initData.action) { 6 | case 'change': 7 | opener.dismissChangeRelatedObjectPopup(window, initData.value, initData.obj, initData.new_value); 8 | break; 9 | case 'delete': 10 | opener.dismissDeleteRelatedObjectPopup(window, initData.value); 11 | break; 12 | default: 13 | opener.dismissAddRelatedObjectPopup(window, initData.value, initData.obj); 14 | break; 15 | } 16 | })(); 17 | -------------------------------------------------------------------------------- /static/admin/js/prepopulate.min.js: -------------------------------------------------------------------------------- 1 | (function(c){c.fn.prepopulate=function(e,f,g){return this.each(function(){var a=c(this),b=function(){if(!a.data("_changed")){var b=[];c.each(e,function(a,d){d=c(d);0 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-arrow-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-arrow-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-arrow-up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-background-color.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-battery-empty.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-battery-full.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-battery-half.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-bold.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-bookmark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-braille.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-check.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-cloud.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-comment-video.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-comment.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-contrast.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-credit-card.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-css3.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-die-one.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-die-two.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-fast-forward.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-filter.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-folder.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-heart.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-home.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-html5.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-info.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-italic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-lock.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-magnifying-glass.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-marker.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-minus-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 9 | 10 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-minus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 8 | 9 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-mobile.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-monitor.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-mountains.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-music.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-page-filled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 9 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-page.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-pencil.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-play-video.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-play.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-plus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-prohibited.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-record.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-rewind.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-shield.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-shopping-bag.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-social-adobe.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-social-delicious.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-social-drive.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-social-dropbox.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-social-facebook.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-social-flickr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-social-forrst.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-social-hacker-news.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-social-medium.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-social-orkut.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 9 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-social-path.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-social-windows.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-star.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-stop.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-tablet-landscape.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-tablet-portrait.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-torso.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-trash.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 10 | 11 | 12 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-unlock.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-video.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 8 | 9 | -------------------------------------------------------------------------------- /static/foundation-icons/svgs/fi-volume-none.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /static/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/static/images/favicon.ico -------------------------------------------------------------------------------- /static/images/folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/static/images/folder.png -------------------------------------------------------------------------------- /static/images/inpx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/static/images/inpx.png -------------------------------------------------------------------------------- /static/images/inpx.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/static/images/inpx.psd -------------------------------------------------------------------------------- /static/images/nocover-big.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/static/images/nocover-big.jpg -------------------------------------------------------------------------------- /static/images/nocover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/static/images/nocover.jpg -------------------------------------------------------------------------------- /static/images/sopds_book.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/static/images/sopds_book.jpg -------------------------------------------------------------------------------- /static/images/sopds_icon-big.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/static/images/sopds_icon-big.gif -------------------------------------------------------------------------------- /static/images/sopds_icon.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/static/images/sopds_icon.gif -------------------------------------------------------------------------------- /static/images/sopds_icon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/static/images/sopds_icon.jpg -------------------------------------------------------------------------------- /static/images/sopds_icon2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/static/images/sopds_icon2.gif -------------------------------------------------------------------------------- /static/images/sopds_logo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/static/images/sopds_logo.gif -------------------------------------------------------------------------------- /static/images/text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/static/images/text.png -------------------------------------------------------------------------------- /static/images/zip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitshel/sopds/30a401de34f15468fcb366b70e7c0b5a8b6ee8e8/static/images/zip.png -------------------------------------------------------------------------------- /static/js/sopds.js: -------------------------------------------------------------------------------- 1 | $(document).foundation() 2 | --------------------------------------------------------------------------------