├── .ci └── release_app.sh ├── .l10nignore ├── .tx └── config ├── CHANGELOG.md ├── LICENSE ├── README.md ├── TODO ├── ajax └── personal.php ├── appinfo ├── app.php ├── info.xml └── routes.php ├── css └── settings.css ├── img ├── app.svg ├── book.png └── loading.gif ├── js ├── lib │ ├── typedarray.js │ ├── typedarray.min.js │ └── wgxpath.install.js ├── personal.js ├── plugin.js ├── ready.js └── settings.js ├── l10n ├── .gitkeep ├── af.js ├── af.json ├── ar.js ├── ar.json ├── ast.js ├── ast.json ├── bg.js ├── bg.json ├── br.js ├── br.json ├── ca.js ├── ca.json ├── cs.js ├── cs.json ├── da.js ├── da.json ├── de.js ├── de.json ├── de_DE.js ├── de_DE.json ├── el.js ├── el.json ├── en_GB.js ├── en_GB.json ├── es.js ├── es.json ├── es_EC.js ├── es_EC.json ├── es_MX.js ├── es_MX.json ├── eu.js ├── eu.json ├── fa.js ├── fa.json ├── fi.js ├── fi.json ├── fr.js ├── fr.json ├── ga.js ├── ga.json ├── gl.js ├── gl.json ├── he.js ├── he.json ├── hr.js ├── hr.json ├── hu.js ├── hu.json ├── id.js ├── id.json ├── is.js ├── is.json ├── it.js ├── it.json ├── ja.js ├── ja.json ├── ko.js ├── ko.json ├── lt_LT.js ├── lt_LT.json ├── lv.js ├── lv.json ├── mk.js ├── mk.json ├── nb.js ├── nb.json ├── nl.js ├── nl.json ├── oc.js ├── oc.json ├── pl.js ├── pl.json ├── pt_BR.js ├── pt_BR.json ├── pt_PT.js ├── pt_PT.json ├── ro.js ├── ro.json ├── ru.js ├── ru.json ├── sc.js ├── sc.json ├── sk.js ├── sk.json ├── sl.js ├── sl.json ├── sq.js ├── sq.json ├── sr.js ├── sr.json ├── sr@latin.js ├── sr@latin.json ├── sv.js ├── sv.json ├── th.js ├── th.json ├── tr.js ├── tr.json ├── ug.js ├── ug.json ├── uk.js ├── uk.json ├── uz.js ├── uz.json ├── vi.js ├── vi.json ├── zh_CN.js ├── zh_CN.json ├── zh_HK.js ├── zh_HK.json ├── zh_TW.js └── zh_TW.json ├── lib ├── Controller │ ├── BookmarkController.php │ ├── MetadataController.php │ ├── PageController.php │ └── PreferenceController.php ├── Db │ ├── Bookmark.php │ ├── BookmarkMapper.php │ ├── Preference.php │ ├── PreferenceMapper.php │ ├── ReaderEntity.php │ └── ReaderMapper.php ├── Hooks.php ├── Migration │ └── Version010404Date20201030180941.php ├── Service │ ├── BookmarkService.php │ ├── MetadataService.php │ ├── PreferenceService.php │ └── Service.php ├── Utility │ └── Time.php └── config.php ├── personal.php ├── screenshots ├── Screenshot_2014-09-29-20-21-50.png ├── Screenshot_2014-10-02-19-16-18.png ├── Screenshot_2017-03-15_195840_593917640.png ├── Screenshot_2017-03-15_200124_360946567.png ├── epubreader-1.png ├── epubreader-2.png ├── epubreader-3.png ├── epubreader_PDF_001.png ├── epubreader_PDF_002.png ├── epubreader_PDF_003.png ├── epubreader_PDF_004.png ├── epubreader_PDF_005.png ├── epubreader_PDF_006.png ├── photo_2017-03-15_17-21-30.jpg ├── photo_2017-03-15_17-21-37.jpg ├── photo_2017-03-15_17-21-39.jpg ├── photo_2017-03-15_17-21-40.jpg ├── photo_2017-03-15_17-21-41.jpg ├── photo_2017-03-15_17-21-43.jpg ├── photo_2017-03-15_17-21-49.jpg ├── photo_2017-03-15_17-21-51.jpg ├── photo_2017-03-15_17-21-52.jpg ├── photo_2017-03-15_17-21-53.jpg ├── photo_2017-03-15_17-21-54.jpg ├── photo_2017-03-15_17-21-56.jpg ├── photo_2017-03-15_17-21-57.jpg ├── photo_2017-03-15_17-21-58.jpg ├── photo_2017-03-15_17-21-59.jpg ├── photo_2017-03-15_17-22-00.jpg ├── photo_2017-03-15_17-22-01.jpg ├── photo_2017-03-15_17-22-02.jpg ├── photo_2017-03-15_17-22-03.jpg ├── photo_2017-03-15_17-22-04.jpg ├── photo_2017-03-15_17-22-05.jpg ├── photo_2017-03-15_17-22-06.jpg ├── photo_2017-03-15_17-22-08.jpg ├── photo_2017-03-15_17-22-09.jpg ├── photo_2017-03-15_17-22-10.jpg ├── photo_2017-03-15_17-22-11.jpg ├── photo_2017-03-15_17-22-12.jpg ├── photo_2017-03-15_17-22-13.jpg ├── photo_2017-03-15_17-22-14.jpg ├── photo_2017-03-15_17-22-15.jpg ├── photo_2017-03-15_17-22-16.jpg ├── photo_2017-03-15_17-22-17.jpg ├── photo_2017-03-15_17-22-18.jpg ├── photo_2017-03-15_17-22-19.jpg ├── photo_2017-03-15_17-22-20.jpg ├── photo_2017-03-15_17-22-21.jpg ├── photo_2017-03-15_17-22-22.jpg ├── photo_2017-03-15_17-22-23.jpg ├── photo_2017-03-15_17-22-24.jpg ├── photo_2017-03-15_17-22-26.jpg ├── photo_2017-03-15_17-22-27.jpg ├── photo_2017-03-15_17-22-28.jpg ├── photo_2017-03-15_18-28-36.jpg ├── photo_2017-03-15_18-28-37.jpg ├── photo_2017-03-15_18-28-43.jpg ├── photo_2017-03-15_18-28-46.jpg ├── photo_2017-03-15_18-28-49.jpg ├── photo_2017-03-15_18-28-52.jpg ├── photo_2017-03-15_18-28-54.jpg └── photo_2017-03-15_18-28-56.jpg ├── templates ├── cbreader.php ├── epubreader.php ├── pdfreader.php └── settings-personal.php └── vendor ├── bartaz └── jquery.highlight.js ├── bgrins ├── spectrum.css └── spectrum.js ├── bitjs ├── archive │ ├── archive.js │ ├── rarvm.js │ ├── unrar.js │ ├── untar.js │ └── unzip.js └── io │ ├── bitstream.js │ ├── bytebuffer.js │ └── bytestream.js ├── cbrjs ├── cbr.js ├── css │ ├── cbr.css │ └── idevice.css └── img │ └── loading.gif ├── epubjs ├── css │ ├── annotations.css │ ├── font │ │ ├── fontello.eot │ │ ├── fontello.svg │ │ ├── fontello.ttf │ │ └── fontello.woff │ ├── idevice.css │ ├── main.css │ ├── normalize.css │ ├── popup.css │ └── sidebar.css ├── epub.main.css ├── epub.min.js ├── epub.min.map ├── hooks.min.js ├── hooks.min.map ├── hooks │ ├── default │ │ └── smartimages.js │ └── extensions │ │ └── highlight.js ├── libs │ ├── jquery.min.js │ ├── screenfull.min.js │ └── zip.min.js ├── reader.min.js └── reader.min.map ├── icomoon ├── fonts │ ├── icomoon.eot │ ├── icomoon.svg │ ├── icomoon.ttf │ └── icomoon.woff └── style.css ├── jquery └── put-delete.js ├── pdfjs ├── controllers │ ├── annotationlayer_controller.js │ ├── bookmarks_controller.js │ ├── controls_controller.js │ ├── meta_controller.js │ ├── notes_controller.js │ ├── outline_controller.js │ ├── progress_controller.js │ ├── reader_controller.js │ ├── search_controller.js │ ├── settings_controller.js │ ├── sidebar_controller.js │ ├── styles_controller.js │ ├── textlayer_controller.js │ ├── textlayer_controller.js.simple │ └── toc_controller.js ├── css │ ├── annotation_layer_builder.css │ ├── annotations.css │ ├── idevice.css │ ├── images │ │ ├── annotation-check.svg │ │ ├── annotation-comment.svg │ │ ├── annotation-help.svg │ │ ├── annotation-insert.svg │ │ ├── annotation-key.svg │ │ ├── annotation-newparagraph.svg │ │ ├── annotation-noicon.svg │ │ ├── annotation-note.svg │ │ └── annotation-paragraph.svg │ ├── main.css │ ├── normalize.css │ ├── popup.css │ ├── sidebar.css │ └── text_layer_builder.css ├── lib │ ├── pdf.js │ ├── pdf.worker.js │ └── text_layer_builder.js ├── pdf.reader.js └── services │ ├── eventbus_service.js │ ├── link_service.js │ └── simple_link_service.js ├── pixastic ├── pixastic.effects.js ├── pixastic.js ├── pixastic.worker.control.js ├── pixastic.worker.js └── pixastic_combined.js └── sindresorhus └── screenfull.js /.ci/release_app.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | set -u 4 | set -e 5 | 6 | if [ -z ${1} ]; then 7 | echo "Release version (arg1) not set !" 8 | exit 1; 9 | fi 10 | 11 | SRC_DIR=`dirname $0`"/.." 12 | RELEASE_VERSION=${1} 13 | echo "Release version set to ${RELEASE_VERSION}" 14 | 15 | sed -ri 's/(.*)(.+)<\/version>/\1'${RELEASE_VERSION}'<\/version>/g' ${SRC_DIR}/appinfo/info.xml 16 | git commit -am "Release "${RELEASE_VERSION} 17 | git tag ${RELEASE_VERSION} 18 | git push 19 | git push --tags 20 | # Wait a second for Github to ingest our data 21 | sleep 1 22 | cd /tmp 23 | rm -Rf epubreader-packaging && mkdir epubreader-packaging && cd epubreader-packaging 24 | 25 | # Download the git file from github 26 | wget https://github.com/e-alfred/epubreader/archive/${RELEASE_VERSION}.tar.gz 27 | tar xzf ${RELEASE_VERSION}.tar.gz 28 | mv epubreader-${RELEASE_VERSION} epubreader 29 | 30 | # Drop unneeded files 31 | rm -Rf \ 32 | epubreader/js/devel \ 33 | epubreader/gulpfile.js \ 34 | epubreader/package.json \ 35 | epubreader/.ci \ 36 | epubreader/.tx \ 37 | epubreader/doc 38 | 39 | tar cfz epubreader-${RELEASE_VERSION}.tar.gz epubreader 40 | echo "Release version "${RELEASE_VERSION}" is now ready." 41 | -------------------------------------------------------------------------------- /.l10nignore: -------------------------------------------------------------------------------- 1 | js/lib/typearray.js 2 | js/lib/typearray.min.js 3 | js/lib/wgxpath.install.js 4 | vendor/bitjs/io/bytebuffer.js 5 | vendor/bitjs/io/bytestream.js 6 | vendor/bitjs/io/bitstream.js 7 | vendor/bitjs/archive/unzip.js 8 | vendor/bitjs/archive/untar.js 9 | vendor/bitjs/archive/unrar.js 10 | vendor/bitjs/archive/rarvm.js 11 | vendor/bitjs/archive/archive.js 12 | vendor/pixastic/pixastic_combined.js 13 | vendor/pixastic/pixastic.worker.js 14 | vendor/pixastic/pixastic.effects.js 15 | vendor/pixastic/pixastic.worker.control.js 16 | vendor/pixastic/pixastic.js 17 | vendor/icomoon/style.css 18 | vendor/icomoon/fonts/icomoon.svg 19 | vendor/icomoon/fonts/icomoon.woff 20 | vendor/icomoon/fonts/icomoon.ttf 21 | vendor/icomoon/fonts/icomoon.eot 22 | vendor/bartaz/jquery.highlight.js 23 | vendor/sindresorhus/screenfull.js 24 | vendor/jquery/put-delete.js 25 | vendor/epubjs/libs/zip.min.js 26 | vendor/epubjs/libs/jquery.min.js 27 | vendor/epubjs/libs/screenfull.min.js 28 | vendor/epubjs/hooks.min.map 29 | vendor/epubjs/epub.min.js 30 | vendor/epubjs/css/popup.css 31 | vendor/epubjs/css/main.css 32 | vendor/epubjs/css/normalize.css 33 | vendor/epubjs/css/sidebar.css 34 | vendor/epubjs/css/font/fontello.svg 35 | vendor/epubjs/css/font/fontello.woff 36 | vendor/epubjs/css/font/fontello.eot 37 | vendor/epubjs/css/font/fontello.ttf 38 | vendor/epubjs/css/annotations.css 39 | vendor/epubjs/css/idevice.css 40 | vendor/epubjs/epub.main.css 41 | vendor/epubjs/reader.min.js 42 | vendor/epubjs/epub.min.map 43 | vendor/epubjs/hooks.min.js 44 | vendor/epubjs/hooks/default/smartimages.js 45 | vendor/epubjs/hooks/extensions/highlight.js 46 | vendor/epubjs/reader.min.map 47 | vendor/bgrins/spectrum.js 48 | vendor/bgrins/spectrum.css 49 | vendor/cbrjs/css/cbr.css 50 | vendor/cbrjs/css/idevice.css 51 | vendor/cbrjs/cbr.js 52 | vendor/cbrjs/img/loading.gif 53 | vendor/pdfjs/css/popup.css 54 | vendor/pdfjs/css/main.css 55 | vendor/pdfjs/css/annotation_layer_builder.css 56 | vendor/pdfjs/css/normalize.css 57 | vendor/pdfjs/css/sidebar.css 58 | vendor/pdfjs/css/annotations.css 59 | vendor/pdfjs/css/text_layer_builder.css 60 | vendor/pdfjs/css/idevice.css 61 | vendor/pdfjs/css/images/annotation-insert.svg 62 | vendor/pdfjs/css/images/annotation-newparagraph.svg 63 | vendor/pdfjs/css/images/annotation-key.svg 64 | vendor/pdfjs/css/images/annotation-check.svg 65 | vendor/pdfjs/css/images/annotation-paragraph.svg 66 | vendor/pdfjs/css/images/annotation-help.svg 67 | vendor/pdfjs/css/images/annotation-noicon.svg 68 | vendor/pdfjs/css/images/annotation-comment.svg 69 | vendor/pdfjs/css/images/annotation-note.svg 70 | vendor/pdfjs/pdf.reader.js 71 | vendor/pdfjs/controllers/textlayer_controller.js 72 | vendor/pdfjs/controllers/sidebar_controller.js 73 | vendor/pdfjs/controllers/outline_controller.js 74 | vendor/pdfjs/controllers/styles_controller.js 75 | vendor/pdfjs/controllers/notes_controller.js 76 | vendor/pdfjs/controllers/settings_controller.js 77 | vendor/pdfjs/controllers/meta_controller.js 78 | vendor/pdfjs/controllers/reader_controller.js 79 | vendor/pdfjs/controllers/bookmarks_controller.js 80 | vendor/pdfjs/controllers/progress_controller.js 81 | vendor/pdfjs/controllers/toc_controller.js 82 | vendor/pdfjs/controllers/search_controller.js 83 | vendor/pdfjs/controllers/controls_controller.js 84 | vendor/pdfjs/controllers/annotationlayer_controller.js 85 | vendor/pdfjs/controllers/textlayer_controller.js.simple 86 | vendor/pdfjs/services/eventbus_service.js 87 | vendor/pdfjs/services/simple_link_service.js 88 | vendor/pdfjs/services/link_service.js 89 | vendor/pdfjs/lib/pdf.worker.js 90 | vendor/pdfjs/lib/text_layer_builder.js 91 | vendor/pdfjs/lib/pdf.js 92 | -------------------------------------------------------------------------------- /.tx/config: -------------------------------------------------------------------------------- 1 | [main] 2 | host = https://www.transifex.com 3 | lang_map = cs_CZ: cs, fi_FI: fi, hu_HU: hu, nb_NO: nb, sk_SK: sk, th_TH: th, ja_JP: ja, bg_BG: bg 4 | 5 | [o:nextcloud:p:nextcloud:r:epubreader] 6 | file_filter = translationfiles//epubreader.po 7 | source_file = translationfiles/templates/epubreader.pot 8 | source_lang = en 9 | type = PO 10 | 11 | -------------------------------------------------------------------------------- /TODO: -------------------------------------------------------------------------------- 1 | - annotations 2 | - rtl and ltr 3 | - test canvas size restriction 4 | - add IDs to highlights so they can be marked when hovered - or when related list item is hovered 5 | 6 | -------------------------------------------------------------------------------- /ajax/personal.php: -------------------------------------------------------------------------------- 1 | getL10N('epubreader'); 19 | 20 | $EpubEnable = isset($_POST['EpubEnable']) ? $_POST['EpubEnable'] : 'false'; 21 | $PdfEnable = isset($_POST['PdfEnable']) ? $_POST['PdfEnable'] : 'false'; 22 | $CbxEnable = isset($_POST['CbxEnable']) ? $_POST['CbxEnable'] : 'false'; 23 | 24 | Config::set('epub_enable', $EpubEnable); 25 | Config::set('pdf_enable', $PdfEnable); 26 | Config::set('cbx_enable', $CbxEnable); 27 | 28 | \OC_JSON::success( 29 | array( 30 | 'data' => array('message'=> $l->t('Settings updated successfully.')) 31 | ) 32 | ); 33 | 34 | exit(); 35 | 36 | -------------------------------------------------------------------------------- /appinfo/app.php: -------------------------------------------------------------------------------- 1 | getL10N('epubreader'); 19 | 20 | \OCA\Epubreader\Hooks::register(); 21 | Util::addscript('epubreader', 'plugin'); 22 | \OCP\App::registerPersonal('epubreader', 'personal'); 23 | -------------------------------------------------------------------------------- /appinfo/info.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | epubreader 4 | EPUB/CBZ/PDF ebook reader 5 | A multi-format browser-based ebook reader, supports EPUB and CBR/CBZ 6 | 7 | 31 | 32 | 1.4.7 33 | agpl 34 | Frank de Lange 35 | e-alfred 36 | https://github.com/e-alfred/epubreader 37 | files 38 | multimedia 39 | office 40 | https://github.com/e-alfred/epubreader 41 | https://github.com/e-alfred/epubreader 42 | https://github.com/e-alfred/epubreader/blob/master/screenshots/epubreader-1.png?raw=true 43 | https://github.com/e-alfred/epubreader/blob/master/screenshots/epubreader-3.png?raw=true 44 | https://github.com/e-alfred/epubreader/blob/master/screenshots/epubreader_PDF_005.png?raw=true 45 | https://github.com/e-alfred/epubreader/blob/master/screenshots/epubreader_PDF_006.png?raw=true 46 | https://github.com/e-alfred/epubreader/blob/master/screenshots/photo_2017-03-15_17-22-00.jpg?raw=true 47 | https://github.com/e-alfred/epubreader/blob/master/screenshots/photo_2017-03-15_17-22-02.jpg?raw=true 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /appinfo/routes.php: -------------------------------------------------------------------------------- 1 | create('reader_personal_settings', 'ajax/personal.php')->actionInclude('epubreader/ajax/personal.php'); 14 | 15 | return ['routes' => [ 16 | // Page 17 | ['name' => 'page#showReader', 'url' => '/', 'verb' => 'GET'], 18 | 19 | // Bookmarks 20 | ['name' => 'bookmark#get_cursor', 'url' => '/bookmark/cursor/{fileId}', 'verb' => 'GET'], 21 | ['name' => 'bookmark#set_cursor', 'url' => '/bookmark/cursor', 'verb' => 'POST'], 22 | ['name' => 'bookmark#delete_cursor', 'url' => '/bookmark/cursor/{fileId}', 'verb' => 'DELETE'], 23 | ['name' => 'bookmark#get', 'url' => '/bookmark/{fileId}/{name}', 'verb' => 'GET', 'defaults' => ['name' => '']], 24 | ['name' => 'bookmark#get', 'url' => '/bookmark/{fileId}/{type}/{name}', 'verb' => 'GET', 'defaults' => ['name' => '']], 25 | ['name' => 'bookmark#set', 'url' => '/bookmark', 'verb' => 'POST'], 26 | ['name' => 'bookmark#delete', 'url' => '/bookmark/{fileId}/{name}', 'verb' => 'DELETE'], 27 | 28 | // Metadata 29 | ['name' => 'metadata#get', 'url' => '/metadata/{fileId}/{name}', 'verb' => 'GET', 'defaults' => ['name' => '']], 30 | ['name' => 'metadata#set', 'url' => '/metadata/{fileId}/{name}/{value}', 'verb' => 'POST'], 31 | 32 | // Preferences 33 | ['name' => 'preference#get_default', 'url' => '/preference/default/{scope}/{name}', 'verb' => 'GET', 'defaults' => ['name' => '']], 34 | ['name' => 'preference#set_default', 'url' => '/preference/default', 'verb' => 'POST'], 35 | ['name' => 'preference#delete_default', 'url' => '/preference/default/{scope}/{name}', 'verb' => 'DELETE'], 36 | ['name' => 'preference#get', 'url' => '/preference/{fileId}/{scope}/{name}', 'verb' => 'GET', 'defaults' => ['name' => '']], 37 | ['name' => 'preference#set', 'url' => '/preference', 'verb' => 'POST'], 38 | ['name' => 'preference#delete', 'url' => '/preference/{fileId}/{scope}/{name}', 'verb' => 'DELETE'], 39 | ]]; 40 | 41 | -------------------------------------------------------------------------------- /css/settings.css: -------------------------------------------------------------------------------- 1 | .nav-icon-reader { 2 | background-image: url('../img/app.svg?v=2'); 3 | } 4 | -------------------------------------------------------------------------------- /img/app.svg: -------------------------------------------------------------------------------- 1 | 2 | 13 | 15 | 16 | 18 | image/svg+xml 19 | 21 | 22 | 23 | 24 | 25 | 27 | 31 | 35 | 36 |   46 | 50 | 51 | -------------------------------------------------------------------------------- /img/book.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/img/book.png -------------------------------------------------------------------------------- /img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/img/loading.gif -------------------------------------------------------------------------------- /js/personal.js: -------------------------------------------------------------------------------- 1 | window.addEventListener('DOMContentLoaded', function () { 2 | // save settings 3 | var readerSettings = { 4 | save : function() { 5 | var data = { 6 | EpubEnable: document.getElementById('EpubEnable').checked ? 'true' : 'false', 7 | PdfEnable: document.getElementById('PdfEnable').checked ? 'true' : 'false', 8 | CbxEnable: document.getElementById('CbxEnable').checked ? 'true' : 'false' 9 | }; 10 | 11 | OC.msg.startSaving('#reader-personal .msg'); 12 | $.post(OC.filePath('epubreader', 'lib', 'personal-back.php'), data, readerSettings.afterSave); 13 | }, 14 | afterSave : function(data){ 15 | OC.msg.finishedSaving('#reader-personal .msg', data); 16 | } 17 | }; 18 | $('#EpubEnable').on("change", readerSettings.save); 19 | $('#PdfEnable').on("change", readerSettings.save); 20 | $('#CbxEnable').on("change", readerSettings.save); 21 | }); 22 | -------------------------------------------------------------------------------- /js/settings.js: -------------------------------------------------------------------------------- 1 | window.addEventListener('DOMContentLoaded', function () { 2 | // save settings 3 | var readerSettings = { 4 | save : function() { 5 | var data = { 6 | EpubEnable: document.getElementById('EpubEnable').checked ? 'true' : 'false', 7 | PdfEnable: document.getElementById('PdfEnable').checked ? 'true' : 'false', 8 | CbxEnable: document.getElementById('CbxEnable').checked ? 'true' : 'false' 9 | }; 10 | 11 | OC.msg.startSaving('#reader-personal .msg'); 12 | $.post(OC.filePath('epubreader', 'ajax', 'personal.php'), data, readerSettings.afterSave); 13 | }, 14 | afterSave : function(data){ 15 | OC.msg.finishedSaving('#reader-personal .msg', data); 16 | } 17 | }; 18 | $('#EpubEnable').on("change", readerSettings.save); 19 | $('#PdfEnable').on("change", readerSettings.save); 20 | $('#CbxEnable').on("change", readerSettings.save); 21 | }); 22 | -------------------------------------------------------------------------------- /l10n/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/l10n/.gitkeep -------------------------------------------------------------------------------- /l10n/af.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "epubreader", 3 | { 4 | "menu" : "kieslys", 5 | "Reader" : "Leser", 6 | "Epub" : "Epub", 7 | "PDF" : "PDF", 8 | "CBR/CBZ" : "CBR/CBZ" 9 | }, 10 | "nplurals=2; plural=(n != 1);"); 11 | -------------------------------------------------------------------------------- /l10n/af.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "menu" : "kieslys", 3 | "Reader" : "Leser", 4 | "Epub" : "Epub", 5 | "PDF" : "PDF", 6 | "CBR/CBZ" : "CBR/CBZ" 7 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 8 | } -------------------------------------------------------------------------------- /l10n/ast.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "epubreader", 3 | { 4 | "Settings updated successfully." : "La configuración anovóse correutamente.", 5 | "EPUB/CBZ/PDF ebook reader" : "Llector de llibros electrónicos EPUB/CBZ/PDF", 6 | "custom font" : "fonte personalizada", 7 | "monospace" : "monospaciada", 8 | "font size" : "tamañu de la fonte", 9 | "Use custom colors" : "Usar colores personalizaos", 10 | "show page turn arrows" : "amosar les fleches de cambéu de páxina", 11 | "menu" : "menú", 12 | "Reader" : "Llector", 13 | "Select file types for which Reader should be the default viewer." : "Seleiciona los tipos de ficheru polos que Llector habría ser el visor predetermináu", 14 | "Epub" : "EPUB", 15 | "PDF" : "PDF", 16 | "CBR/CBZ" : "CBR/CBZ" 17 | }, 18 | "nplurals=2; plural=(n != 1);"); 19 | -------------------------------------------------------------------------------- /l10n/ast.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Settings updated successfully." : "La configuración anovóse correutamente.", 3 | "EPUB/CBZ/PDF ebook reader" : "Llector de llibros electrónicos EPUB/CBZ/PDF", 4 | "custom font" : "fonte personalizada", 5 | "monospace" : "monospaciada", 6 | "font size" : "tamañu de la fonte", 7 | "Use custom colors" : "Usar colores personalizaos", 8 | "show page turn arrows" : "amosar les fleches de cambéu de páxina", 9 | "menu" : "menú", 10 | "Reader" : "Llector", 11 | "Select file types for which Reader should be the default viewer." : "Seleiciona los tipos de ficheru polos que Llector habría ser el visor predetermináu", 12 | "Epub" : "EPUB", 13 | "PDF" : "PDF", 14 | "CBR/CBZ" : "CBR/CBZ" 15 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 16 | } -------------------------------------------------------------------------------- /l10n/en_GB.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "epubreader", 3 | { 4 | "Settings updated successfully." : "Settings updated successfully.", 5 | "EPUB/CBZ/PDF ebook reader" : "EPUB/CBZ/PDF ebook reader", 6 | "A multi-format browser-based ebook reader, supports EPUB and CBR/CBZ" : "A multi-format browser-based ebook reader, supports EPUB and CBR/CBZ", 7 | "# Reader\nReader is an ebook reader based on pure javascript renderers. It works for publications formatted according to the following standards:\n\n - [Epub]\n - [PDF]\n - [CBR and CBZ] ('comics')\n\nFor Epub Reader uses the futurepress [epub.js] renderer to provide near-native looks, especially when used full-screen. Turn pages by pressing the left/right hand side of the screen/window or using the cursor keys (if you have those), use the sidebar to browse through chapters or bookmarks and add annotations.\n\nPDF is handled by Mozilla's [pdf.js] renderer in combination with a custom reader app to enable side-by-side display, batch search and more. Controls are like those used in the Epub renderer with a few exceptions, e.g. night mode has not been implemented yet.\n\nCBR and CBZ are supported using a custom renderer inspired by [balaclark]'s work. As with Epub, books can be navigated using the keyboard as well as mouse or touch navigation. Reader generates a visual index of all pages, show in the sidebar (thumbnail generation can be disabled for low-memory and/or -speed devices). As CBx files are often of varying quality, a set of image enhancement filters are provided.\n\nSee [README] for more exhaustive information on features and potential misfeatures of this app.\n\n [epub.js]: https://github.com/futurepress/epub.js\n [Epub]: http://idpf.org/epub\n [CBR and CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n [balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n [PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n [pdf.js]: https://github.com/mozilla/pdf.js\n [README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md" : "# Reader\nReader is an ebook reader based on pure javascript renderers. It works for publications formatted according to the following standards:\n\n - [Epub]\n - [PDF]\n - [CBR and CBZ] ('comics')\n\nFor Epub Reader uses the futurepress [epub.js] renderer to provide near-native looks, especially when used full-screen. Turn pages by pressing the left/right hand side of the screen/window or using the cursor keys (if you have those), use the sidebar to browse through chapters or bookmarks and add annotations.\n\nPDF is handled by Mozilla's [pdf.js] renderer in combination with a custom reader app to enable side-by-side display, batch search and more. Controls are like those used in the Epub renderer with a few exceptions, e.g. night mode has not been implemented yet.\n\nCBR and CBZ are supported using a custom renderer inspired by [balaclark]'s work. As with Epub, books can be navigated using the keyboard as well as mouse or touch navigation. Reader generates a visual index of all pages, show in the sidebar (thumbnail generation can be disabled for low-memory and/or -speed devices). As CBx files are often of varying quality, a set of image enhancement filters are provided.\n\nSee [README] for more exhaustive information on features and potential misfeatures of this app.\n\n [epub.js]: https://github.com/futurepress/epub.js\n [Epub]: http://idpf.org/epub\n [CBR and CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n [balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n [PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n [pdf.js]: https://github.com/mozilla/pdf.js\n [README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md", 8 | "custom font" : "custom font", 9 | "monospace" : "monospace", 10 | "font size" : "font size", 11 | "font weight" : "font weight", 12 | "Use custom colors" : "Use custom colors", 13 | "night mode can be toggled by clicking the book title" : "night mode can be toggled by clicking the book title", 14 | "reflow text when sidebars are open" : "reflow text when sidebars are open", 15 | "disable extra-wide page turn areas" : "disable extra-wide page turn areas", 16 | "show page turn arrows" : "show page turn arrows", 17 | "menu" : "menu", 18 | "Reader" : "Reader", 19 | "Select file types for which Reader should be the default viewer." : "Select file types for which Reader should be the default viewer.", 20 | "Epub" : "Epub", 21 | "PDF" : "PDF", 22 | "CBR/CBZ" : "CBR/CBZ" 23 | }, 24 | "nplurals=2; plural=(n != 1);"); 25 | -------------------------------------------------------------------------------- /l10n/en_GB.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Settings updated successfully." : "Settings updated successfully.", 3 | "EPUB/CBZ/PDF ebook reader" : "EPUB/CBZ/PDF ebook reader", 4 | "A multi-format browser-based ebook reader, supports EPUB and CBR/CBZ" : "A multi-format browser-based ebook reader, supports EPUB and CBR/CBZ", 5 | "# Reader\nReader is an ebook reader based on pure javascript renderers. It works for publications formatted according to the following standards:\n\n - [Epub]\n - [PDF]\n - [CBR and CBZ] ('comics')\n\nFor Epub Reader uses the futurepress [epub.js] renderer to provide near-native looks, especially when used full-screen. Turn pages by pressing the left/right hand side of the screen/window or using the cursor keys (if you have those), use the sidebar to browse through chapters or bookmarks and add annotations.\n\nPDF is handled by Mozilla's [pdf.js] renderer in combination with a custom reader app to enable side-by-side display, batch search and more. Controls are like those used in the Epub renderer with a few exceptions, e.g. night mode has not been implemented yet.\n\nCBR and CBZ are supported using a custom renderer inspired by [balaclark]'s work. As with Epub, books can be navigated using the keyboard as well as mouse or touch navigation. Reader generates a visual index of all pages, show in the sidebar (thumbnail generation can be disabled for low-memory and/or -speed devices). As CBx files are often of varying quality, a set of image enhancement filters are provided.\n\nSee [README] for more exhaustive information on features and potential misfeatures of this app.\n\n [epub.js]: https://github.com/futurepress/epub.js\n [Epub]: http://idpf.org/epub\n [CBR and CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n [balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n [PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n [pdf.js]: https://github.com/mozilla/pdf.js\n [README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md" : "# Reader\nReader is an ebook reader based on pure javascript renderers. It works for publications formatted according to the following standards:\n\n - [Epub]\n - [PDF]\n - [CBR and CBZ] ('comics')\n\nFor Epub Reader uses the futurepress [epub.js] renderer to provide near-native looks, especially when used full-screen. Turn pages by pressing the left/right hand side of the screen/window or using the cursor keys (if you have those), use the sidebar to browse through chapters or bookmarks and add annotations.\n\nPDF is handled by Mozilla's [pdf.js] renderer in combination with a custom reader app to enable side-by-side display, batch search and more. Controls are like those used in the Epub renderer with a few exceptions, e.g. night mode has not been implemented yet.\n\nCBR and CBZ are supported using a custom renderer inspired by [balaclark]'s work. As with Epub, books can be navigated using the keyboard as well as mouse or touch navigation. Reader generates a visual index of all pages, show in the sidebar (thumbnail generation can be disabled for low-memory and/or -speed devices). As CBx files are often of varying quality, a set of image enhancement filters are provided.\n\nSee [README] for more exhaustive information on features and potential misfeatures of this app.\n\n [epub.js]: https://github.com/futurepress/epub.js\n [Epub]: http://idpf.org/epub\n [CBR and CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n [balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n [PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n [pdf.js]: https://github.com/mozilla/pdf.js\n [README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md", 6 | "custom font" : "custom font", 7 | "monospace" : "monospace", 8 | "font size" : "font size", 9 | "font weight" : "font weight", 10 | "Use custom colors" : "Use custom colors", 11 | "night mode can be toggled by clicking the book title" : "night mode can be toggled by clicking the book title", 12 | "reflow text when sidebars are open" : "reflow text when sidebars are open", 13 | "disable extra-wide page turn areas" : "disable extra-wide page turn areas", 14 | "show page turn arrows" : "show page turn arrows", 15 | "menu" : "menu", 16 | "Reader" : "Reader", 17 | "Select file types for which Reader should be the default viewer." : "Select file types for which Reader should be the default viewer.", 18 | "Epub" : "Epub", 19 | "PDF" : "PDF", 20 | "CBR/CBZ" : "CBR/CBZ" 21 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 22 | } -------------------------------------------------------------------------------- /l10n/es_MX.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "epubreader", 3 | { 4 | "menu" : "menú" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_MX.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "menu" : "menú" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/fa.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Settings updated successfully." : "تنظیمات با موفقیت به‌روز شد.", 3 | "EPUB/CBZ/PDF ebook reader" : "کتابخوان EPUB/CBZ/PDF", 4 | "A multi-format browser-based ebook reader, supports EPUB and CBR/CBZ" : "یک خواننده کتاب الکترونیکی مبتنی بر مرورگر چند فرمتی، از EPUB و CBR/CBZ پشتیبانی می کند", 5 | "# Reader\nReader is an ebook reader based on pure javascript renderers. It works for publications formatted according to the following standards:\n\n - [Epub]\n - [PDF]\n - [CBR and CBZ] ('comics')\n\nFor Epub Reader uses the futurepress [epub.js] renderer to provide near-native looks, especially when used full-screen. Turn pages by pressing the left/right hand side of the screen/window or using the cursor keys (if you have those), use the sidebar to browse through chapters or bookmarks and add annotations.\n\nPDF is handled by Mozilla's [pdf.js] renderer in combination with a custom reader app to enable side-by-side display, batch search and more. Controls are like those used in the Epub renderer with a few exceptions, e.g. night mode has not been implemented yet.\n\nCBR and CBZ are supported using a custom renderer inspired by [balaclark]'s work. As with Epub, books can be navigated using the keyboard as well as mouse or touch navigation. Reader generates a visual index of all pages, show in the sidebar (thumbnail generation can be disabled for low-memory and/or -speed devices). As CBx files are often of varying quality, a set of image enhancement filters are provided.\n\nSee [README] for more exhaustive information on features and potential misfeatures of this app.\n\n [epub.js]: https://github.com/futurepress/epub.js\n [Epub]: http://idpf.org/epub\n [CBR and CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n [balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n [PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n [pdf.js]: https://github.com/mozilla/pdf.js\n [README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md" : "#خواننده\nReader یک کتابخوان الکترونیکی مبتنی بر رندرهای خالص جاوا اسکریپت است. برای انتشاراتی که بر اساس استانداردهای زیر فرمت شده اند کار می کند:\n\n- [Epub]\n- [PDF]\n- [CBR و CBZ] (\"کمیک\")\n\nFor Epub Reader از رندر futurepress [epub.js] برای ارائه ظاهری نزدیک به بومی استفاده می‌کند، به‌ویژه زمانی که در تمام صفحه استفاده می‌شود. صفحات را با فشار دادن سمت چپ/راست صفحه/پنجره یا با استفاده از کلیدهای مکان نما (در صورت داشتن آنها)، ورق بزنید، از نوار کناری برای مرور فصل ها یا نشانک ها و اضافه کردن حاشیه نویسی استفاده کنید.\n\nPDF توسط رندر [pdf.js] موزیلا در ترکیب با یک برنامه خواننده سفارشی برای فعال کردن نمایش کنار هم، جستجوی دسته‌ای و موارد دیگر مدیریت می‌شود. کنترل‌ها مانند مواردی هستند که در رندر Epub با چند استثنا استفاده می‌شوند، به عنوان مثال. حالت شب هنوز اجرا نشده است.\n\nCBR و CBZ با استفاده از یک رندر سفارشی با الهام از کار [balaclark] پشتیبانی می‌شوند. مانند Epub، کتاب‌ها را می‌توان با استفاده از صفحه‌کلید و همچنین موس یا ناوبری لمسی پیمایش کرد. Reader یک نمایه بصری از همه صفحات ایجاد می کند که در نوار کناری نشان داده می شود (تولید تصاویر بند انگشتی را می توان برای دستگاه های کم حافظه و/یا سرعت غیرفعال کرد). از آنجایی که فایل‌های CBx اغلب دارای کیفیت متفاوتی هستند، مجموعه‌ای از فیلترهای بهبود تصویر ارائه می‌شوند.\n\nبرای اطلاعات جامع‌تر در مورد ویژگی‌ها و ویژگی‌های نادرست احتمالی این برنامه، [README] را ببینید.\n\n[epub.js]: https://github.com/futurepress/epub.js\n[Epub]: http://idpf.org/epub\n[CBR و CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n[balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n[PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n[pdf.js]: https://github.com/mozilla/pdf.js\n[README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md", 6 | "custom font" : "فونت سفارشی", 7 | "monospace" : "تک فضا", 8 | "font size" : "اندازه فونت", 9 | "font weight" : "وزن فونت", 10 | "Use custom colors" : "از رنگ های سفارشی استفاده کنید", 11 | "night mode can be toggled by clicking the book title" : "حالت شب را می توان با کلیک کردن روی عنوان کتاب تغییر داد", 12 | "reflow text when sidebars are open" : "هنگامی که نوارهای کناری باز هستند، متن را دوباره جریان دهید", 13 | "disable extra-wide page turn areas" : "غیرفعال کردن مناطق چرخش صفحه بسیار گسترده", 14 | "show page turn arrows" : "نشان دادن فلش های چرخش صفحه", 15 | "menu" : "منو", 16 | "Reader" : "خواننده", 17 | "Select file types for which Reader should be the default viewer." : "انواع فایلی را انتخاب کنید که خواننده باید نمایشگر پیش فرض آنها باشد.", 18 | "Epub" : "Epub", 19 | "PDF" : "PDF", 20 | "CBR/CBZ" : "CBR/CBZ" 21 | },"pluralForm" :"nplurals=2; plural=(n > 1);" 22 | } -------------------------------------------------------------------------------- /l10n/fi.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "epubreader", 3 | { 4 | "Settings updated successfully." : "Asetukset päivitettiin onnistuneesti.", 5 | "EPUB/CBZ/PDF ebook reader" : "EPUB/CBZ/PDF-kirjanlukija", 6 | "custom font" : "mukautettu fontti", 7 | "monospace" : "tasalevyinen", 8 | "font size" : "fontin koko", 9 | "font weight" : "fontin paino", 10 | "Use custom colors" : "Käytä mukautettuja värejä", 11 | "night mode can be toggled by clicking the book title" : "yötilan voi ottaa käyttöön tai poistaa käytöstä napsauttamalla kirjan otsikkoa", 12 | "reflow text when sidebars are open" : "rivitä teksti uudelleen kun sivupalkit ovat avoinna", 13 | "show page turn arrows" : "näytä nuolet sivun kääntämiseksi", 14 | "menu" : "Valikko", 15 | "Reader" : "Lukija", 16 | "Select file types for which Reader should be the default viewer." : "Valitse tiedostotyypit, joihin Lukija asetetaan oletuskatselimeksi.", 17 | "Epub" : "Epub", 18 | "PDF" : "PDF", 19 | "CBR/CBZ" : "CBR/CBZ" 20 | }, 21 | "nplurals=2; plural=(n != 1);"); 22 | -------------------------------------------------------------------------------- /l10n/fi.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Settings updated successfully." : "Asetukset päivitettiin onnistuneesti.", 3 | "EPUB/CBZ/PDF ebook reader" : "EPUB/CBZ/PDF-kirjanlukija", 4 | "custom font" : "mukautettu fontti", 5 | "monospace" : "tasalevyinen", 6 | "font size" : "fontin koko", 7 | "font weight" : "fontin paino", 8 | "Use custom colors" : "Käytä mukautettuja värejä", 9 | "night mode can be toggled by clicking the book title" : "yötilan voi ottaa käyttöön tai poistaa käytöstä napsauttamalla kirjan otsikkoa", 10 | "reflow text when sidebars are open" : "rivitä teksti uudelleen kun sivupalkit ovat avoinna", 11 | "show page turn arrows" : "näytä nuolet sivun kääntämiseksi", 12 | "menu" : "Valikko", 13 | "Reader" : "Lukija", 14 | "Select file types for which Reader should be the default viewer." : "Valitse tiedostotyypit, joihin Lukija asetetaan oletuskatselimeksi.", 15 | "Epub" : "Epub", 16 | "PDF" : "PDF", 17 | "CBR/CBZ" : "CBR/CBZ" 18 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 19 | } -------------------------------------------------------------------------------- /l10n/he.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "epubreader", 3 | { 4 | "Settings updated successfully." : "ההגדרות עודכנו בהצלחה", 5 | "EPUB/CBZ/PDF ebook reader" : "קורא ספרים אלקטרוניים מסוג EPUB/CBZ/PDF", 6 | "A multi-format browser-based ebook reader, supports EPUB and CBR/CBZ" : "מציג ספרים אלקטרוניים מבוסס דפדפן שתומך במגוון סוגי קבצים כגון EPUB ו־CBR/CBZ", 7 | "custom font" : "גופן מותאם אישית", 8 | "monospace" : "רוחב אחיד", 9 | "font size" : "גודל גופן", 10 | "font weight" : "משקל גופן", 11 | "Use custom colors" : "להשתמש בצבעים מותאמים אישית", 12 | "night mode can be toggled by clicking the book title" : "ניתן להפעיל/להשבית מצב לילה על ידי לחיצה על כותרת הספר", 13 | "reflow text when sidebars are open" : "להתאים את זרימת הטקסט עם פתיחת חלוניות הצד", 14 | "show page turn arrows" : "הצגת חצי העברת עמוד", 15 | "menu" : "תפריט", 16 | "Reader" : "קורא", 17 | "Select file types for which Reader should be the default viewer." : "נא לבחור את סוג הקבצים שהקורא יהיה עבורם בררת המחדל.", 18 | "Epub" : "Epub", 19 | "PDF" : "PDF", 20 | "CBR/CBZ" : "CBR/CBZ" 21 | }, 22 | "nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;"); 23 | -------------------------------------------------------------------------------- /l10n/he.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Settings updated successfully." : "ההגדרות עודכנו בהצלחה", 3 | "EPUB/CBZ/PDF ebook reader" : "קורא ספרים אלקטרוניים מסוג EPUB/CBZ/PDF", 4 | "A multi-format browser-based ebook reader, supports EPUB and CBR/CBZ" : "מציג ספרים אלקטרוניים מבוסס דפדפן שתומך במגוון סוגי קבצים כגון EPUB ו־CBR/CBZ", 5 | "custom font" : "גופן מותאם אישית", 6 | "monospace" : "רוחב אחיד", 7 | "font size" : "גודל גופן", 8 | "font weight" : "משקל גופן", 9 | "Use custom colors" : "להשתמש בצבעים מותאמים אישית", 10 | "night mode can be toggled by clicking the book title" : "ניתן להפעיל/להשבית מצב לילה על ידי לחיצה על כותרת הספר", 11 | "reflow text when sidebars are open" : "להתאים את זרימת הטקסט עם פתיחת חלוניות הצד", 12 | "show page turn arrows" : "הצגת חצי העברת עמוד", 13 | "menu" : "תפריט", 14 | "Reader" : "קורא", 15 | "Select file types for which Reader should be the default viewer." : "נא לבחור את סוג הקבצים שהקורא יהיה עבורם בררת המחדל.", 16 | "Epub" : "Epub", 17 | "PDF" : "PDF", 18 | "CBR/CBZ" : "CBR/CBZ" 19 | },"pluralForm" :"nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;" 20 | } -------------------------------------------------------------------------------- /l10n/id.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "epubreader", 3 | { 4 | "menu" : "menu" 5 | }, 6 | "nplurals=1; plural=0;"); 7 | -------------------------------------------------------------------------------- /l10n/id.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "menu" : "menu" 3 | },"pluralForm" :"nplurals=1; plural=0;" 4 | } -------------------------------------------------------------------------------- /l10n/is.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "epubreader", 3 | { 4 | "Settings updated successfully." : "Það tókst að uppfæra stillingar.", 5 | "EPUB/CBZ/PDF ebook reader" : "Rafbókalesari fyrir EPUB/CBZ/PDF", 6 | "A multi-format browser-based ebook reader, supports EPUB and CBR/CBZ" : "Rafbókalesari í vafra sem styður mörg skráasnið, til dæmis EPUB og CBR/CBZ", 7 | "custom font" : "sérsniðið letur", 8 | "monospace" : "jafnbreitt", 9 | "font size" : "stærð leturs", 10 | "font weight" : "þykkt leturs", 11 | "Use custom colors" : "Nota sérsniðna liti", 12 | "night mode can be toggled by clicking the book title" : "hægt er að víxla næturham af/á með því að smella á bókartitil", 13 | "reflow text when sidebars are open" : "endurflæða texta þegar hliðarstikur eru opnar", 14 | "disable extra-wide page turn areas" : "gera ofurbreið síðuflettingasvæði óvirk", 15 | "show page turn arrows" : "Birta síðuflettingarörvar", 16 | "menu" : "valmynd", 17 | "Reader" : "Lesari", 18 | "Select file types for which Reader should be the default viewer." : "Veldu þær skráategundir sem Reader ætti að vera sjálfgefinn skoðari fyrir.", 19 | "Epub" : "Epub", 20 | "PDF" : "PDF", 21 | "CBR/CBZ" : "CBR/CBZ" 22 | }, 23 | "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); 24 | -------------------------------------------------------------------------------- /l10n/is.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Settings updated successfully." : "Það tókst að uppfæra stillingar.", 3 | "EPUB/CBZ/PDF ebook reader" : "Rafbókalesari fyrir EPUB/CBZ/PDF", 4 | "A multi-format browser-based ebook reader, supports EPUB and CBR/CBZ" : "Rafbókalesari í vafra sem styður mörg skráasnið, til dæmis EPUB og CBR/CBZ", 5 | "custom font" : "sérsniðið letur", 6 | "monospace" : "jafnbreitt", 7 | "font size" : "stærð leturs", 8 | "font weight" : "þykkt leturs", 9 | "Use custom colors" : "Nota sérsniðna liti", 10 | "night mode can be toggled by clicking the book title" : "hægt er að víxla næturham af/á með því að smella á bókartitil", 11 | "reflow text when sidebars are open" : "endurflæða texta þegar hliðarstikur eru opnar", 12 | "disable extra-wide page turn areas" : "gera ofurbreið síðuflettingasvæði óvirk", 13 | "show page turn arrows" : "Birta síðuflettingarörvar", 14 | "menu" : "valmynd", 15 | "Reader" : "Lesari", 16 | "Select file types for which Reader should be the default viewer." : "Veldu þær skráategundir sem Reader ætti að vera sjálfgefinn skoðari fyrir.", 17 | "Epub" : "Epub", 18 | "PDF" : "PDF", 19 | "CBR/CBZ" : "CBR/CBZ" 20 | },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" 21 | } -------------------------------------------------------------------------------- /l10n/ja.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "epubreader", 3 | { 4 | "Settings updated successfully." : "設定の更新に成功しました。", 5 | "EPUB/CBZ/PDF ebook reader" : "EPUB/CBZ/PDF eブックリーダー", 6 | "A multi-format browser-based ebook reader, supports EPUB and CBR/CBZ" : "フォーマットブラウザーを用いたeブックリーダー、EPUBおよびCBR/CBZをサポート", 7 | "# Reader\nReader is an ebook reader based on pure javascript renderers. It works for publications formatted according to the following standards:\n\n - [Epub]\n - [PDF]\n - [CBR and CBZ] ('comics')\n\nFor Epub Reader uses the futurepress [epub.js] renderer to provide near-native looks, especially when used full-screen. Turn pages by pressing the left/right hand side of the screen/window or using the cursor keys (if you have those), use the sidebar to browse through chapters or bookmarks and add annotations.\n\nPDF is handled by Mozilla's [pdf.js] renderer in combination with a custom reader app to enable side-by-side display, batch search and more. Controls are like those used in the Epub renderer with a few exceptions, e.g. night mode has not been implemented yet.\n\nCBR and CBZ are supported using a custom renderer inspired by [balaclark]'s work. As with Epub, books can be navigated using the keyboard as well as mouse or touch navigation. Reader generates a visual index of all pages, show in the sidebar (thumbnail generation can be disabled for low-memory and/or -speed devices). As CBx files are often of varying quality, a set of image enhancement filters are provided.\n\nSee [README] for more exhaustive information on features and potential misfeatures of this app.\n\n [epub.js]: https://github.com/futurepress/epub.js\n [Epub]: http://idpf.org/epub\n [CBR and CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n [balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n [PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n [pdf.js]: https://github.com/mozilla/pdf.js\n [README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md" : "# Reader\nReaderはピュアなJavaScriptレンダラーによるeブックリーダーです。以下の規格に準拠した電子書籍に用いることができます:\n\n - [Epub]\n - [PDF]\n - [CBR and CBZ] ('マンガ')\n\nEpub 形式に対してReaderは futurepress [epub.js] レンダラーを用いてネイティブに近い見た目を、特にフルスクリーン時に実現しています。スクリーン/ウィンドウの左/右を押すか、もしあればカーソルキーを使うことでページを繰ることが出来ます。また、チャプターやブックマークからのブラウズや注釈の追加にはサイドバーを使用します。\n\nPDFではMozillaの [pdf.js] レンダラーにカスタムリーダーアプリを組み合わせることで、見開き表示やバッチ検索などが可能です。\n操作方法はEpub rendererのものとほぼ同じですが、ナイトモードなどは未実装です。\n\nCBR と CBZ には[balaclark] にインスパイアされたカスタムレンダラーが用いられます。Epub同様、キーボードやマウスやタッチパネルによる操作でブックのナビゲーションが可能です。 リーダーは全ページのビジュアルインデックスを作成し、サイドバーに表示します(スペックの十分でないデバイスのためにサムネイル生成を無効化することもできます)。CBxファイルの品質は様々であることが多いため、いくつかのイメージ補正フィルターも提供されます。\n\nこのアプリに実装された機能や潜在的に不足している機能についての情報については [README]を参照してください。\n\n [epub.js]: https://github.com/futurepress/epub.js\n [Epub]: http://idpf.org/epub\n [CBR and CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n [balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n [PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n [pdf.js]: https://github.com/mozilla/pdf.js\n [README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md", 8 | "custom font" : "カスタムフォント", 9 | "monospace" : "monospace", 10 | "font size" : "フォントサイズ", 11 | "font weight" : "フォントウェイト", 12 | "Use custom colors" : "カスタム色を使う", 13 | "night mode can be toggled by clicking the book title" : "ほんのタイトルをクリックすることでナイトモードを切り替え", 14 | "reflow text when sidebars are open" : "サイドバーが開いているときにテキストをリフローします。", 15 | "show page turn arrows" : "ページめくりの矢印を表示", 16 | "menu" : "メニュー", 17 | "Reader" : "リーダー", 18 | "Select file types for which Reader should be the default viewer." : "リーダーをデフォルトのビューアーに設定するファイル形式を選択してください。", 19 | "Epub" : "Epub", 20 | "PDF" : "PDF", 21 | "CBR/CBZ" : "CBR/CBZ" 22 | }, 23 | "nplurals=1; plural=0;"); 24 | -------------------------------------------------------------------------------- /l10n/ja.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Settings updated successfully." : "設定の更新に成功しました。", 3 | "EPUB/CBZ/PDF ebook reader" : "EPUB/CBZ/PDF eブックリーダー", 4 | "A multi-format browser-based ebook reader, supports EPUB and CBR/CBZ" : "フォーマットブラウザーを用いたeブックリーダー、EPUBおよびCBR/CBZをサポート", 5 | "# Reader\nReader is an ebook reader based on pure javascript renderers. It works for publications formatted according to the following standards:\n\n - [Epub]\n - [PDF]\n - [CBR and CBZ] ('comics')\n\nFor Epub Reader uses the futurepress [epub.js] renderer to provide near-native looks, especially when used full-screen. Turn pages by pressing the left/right hand side of the screen/window or using the cursor keys (if you have those), use the sidebar to browse through chapters or bookmarks and add annotations.\n\nPDF is handled by Mozilla's [pdf.js] renderer in combination with a custom reader app to enable side-by-side display, batch search and more. Controls are like those used in the Epub renderer with a few exceptions, e.g. night mode has not been implemented yet.\n\nCBR and CBZ are supported using a custom renderer inspired by [balaclark]'s work. As with Epub, books can be navigated using the keyboard as well as mouse or touch navigation. Reader generates a visual index of all pages, show in the sidebar (thumbnail generation can be disabled for low-memory and/or -speed devices). As CBx files are often of varying quality, a set of image enhancement filters are provided.\n\nSee [README] for more exhaustive information on features and potential misfeatures of this app.\n\n [epub.js]: https://github.com/futurepress/epub.js\n [Epub]: http://idpf.org/epub\n [CBR and CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n [balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n [PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n [pdf.js]: https://github.com/mozilla/pdf.js\n [README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md" : "# Reader\nReaderはピュアなJavaScriptレンダラーによるeブックリーダーです。以下の規格に準拠した電子書籍に用いることができます:\n\n - [Epub]\n - [PDF]\n - [CBR and CBZ] ('マンガ')\n\nEpub 形式に対してReaderは futurepress [epub.js] レンダラーを用いてネイティブに近い見た目を、特にフルスクリーン時に実現しています。スクリーン/ウィンドウの左/右を押すか、もしあればカーソルキーを使うことでページを繰ることが出来ます。また、チャプターやブックマークからのブラウズや注釈の追加にはサイドバーを使用します。\n\nPDFではMozillaの [pdf.js] レンダラーにカスタムリーダーアプリを組み合わせることで、見開き表示やバッチ検索などが可能です。\n操作方法はEpub rendererのものとほぼ同じですが、ナイトモードなどは未実装です。\n\nCBR と CBZ には[balaclark] にインスパイアされたカスタムレンダラーが用いられます。Epub同様、キーボードやマウスやタッチパネルによる操作でブックのナビゲーションが可能です。 リーダーは全ページのビジュアルインデックスを作成し、サイドバーに表示します(スペックの十分でないデバイスのためにサムネイル生成を無効化することもできます)。CBxファイルの品質は様々であることが多いため、いくつかのイメージ補正フィルターも提供されます。\n\nこのアプリに実装された機能や潜在的に不足している機能についての情報については [README]を参照してください。\n\n [epub.js]: https://github.com/futurepress/epub.js\n [Epub]: http://idpf.org/epub\n [CBR and CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n [balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n [PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n [pdf.js]: https://github.com/mozilla/pdf.js\n [README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md", 6 | "custom font" : "カスタムフォント", 7 | "monospace" : "monospace", 8 | "font size" : "フォントサイズ", 9 | "font weight" : "フォントウェイト", 10 | "Use custom colors" : "カスタム色を使う", 11 | "night mode can be toggled by clicking the book title" : "ほんのタイトルをクリックすることでナイトモードを切り替え", 12 | "reflow text when sidebars are open" : "サイドバーが開いているときにテキストをリフローします。", 13 | "show page turn arrows" : "ページめくりの矢印を表示", 14 | "menu" : "メニュー", 15 | "Reader" : "リーダー", 16 | "Select file types for which Reader should be the default viewer." : "リーダーをデフォルトのビューアーに設定するファイル形式を選択してください。", 17 | "Epub" : "Epub", 18 | "PDF" : "PDF", 19 | "CBR/CBZ" : "CBR/CBZ" 20 | },"pluralForm" :"nplurals=1; plural=0;" 21 | } -------------------------------------------------------------------------------- /l10n/ko.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "epubreader", 3 | { 4 | "menu" : "메뉴" 5 | }, 6 | "nplurals=1; plural=0;"); 7 | -------------------------------------------------------------------------------- /l10n/ko.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "menu" : "메뉴" 3 | },"pluralForm" :"nplurals=1; plural=0;" 4 | } -------------------------------------------------------------------------------- /l10n/lt_LT.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "epubreader", 3 | { 4 | "Settings updated successfully." : "Nustatymai sėkmingai atnaujinti.", 5 | "menu" : "meniu", 6 | "Reader" : "Skaityklė" 7 | }, 8 | "nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);"); 9 | -------------------------------------------------------------------------------- /l10n/lt_LT.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Settings updated successfully." : "Nustatymai sėkmingai atnaujinti.", 3 | "menu" : "meniu", 4 | "Reader" : "Skaityklė" 5 | },"pluralForm" :"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);" 6 | } -------------------------------------------------------------------------------- /l10n/lv.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "epubreader", 3 | { 4 | "Settings updated successfully." : "Iestatījumi ir veiksmīgi atjaunināti." 5 | }, 6 | "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"); 7 | -------------------------------------------------------------------------------- /l10n/lv.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Settings updated successfully." : "Iestatījumi ir veiksmīgi atjaunināti." 3 | },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" 4 | } -------------------------------------------------------------------------------- /l10n/mk.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "epubreader", 3 | { 4 | "menu" : "мени" 5 | }, 6 | "nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"); 7 | -------------------------------------------------------------------------------- /l10n/mk.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "menu" : "мени" 3 | },"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;" 4 | } -------------------------------------------------------------------------------- /l10n/nb.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Settings updated successfully." : "Innstillingene ble oppdatert.", 3 | "EPUB/CBZ/PDF ebook reader" : "EPUB/CBZ/PDF ebok-leser", 4 | "A multi-format browser-based ebook reader, supports EPUB and CBR/CBZ" : "En multi-format nettleser-basert ebok-leser, støtter EPUB og CBR/CBZ", 5 | "# Reader\nReader is an ebook reader based on pure javascript renderers. It works for publications formatted according to the following standards:\n\n - [Epub]\n - [PDF]\n - [CBR and CBZ] ('comics')\n\nFor Epub Reader uses the futurepress [epub.js] renderer to provide near-native looks, especially when used full-screen. Turn pages by pressing the left/right hand side of the screen/window or using the cursor keys (if you have those), use the sidebar to browse through chapters or bookmarks and add annotations.\n\nPDF is handled by Mozilla's [pdf.js] renderer in combination with a custom reader app to enable side-by-side display, batch search and more. Controls are like those used in the Epub renderer with a few exceptions, e.g. night mode has not been implemented yet.\n\nCBR and CBZ are supported using a custom renderer inspired by [balaclark]'s work. As with Epub, books can be navigated using the keyboard as well as mouse or touch navigation. Reader generates a visual index of all pages, show in the sidebar (thumbnail generation can be disabled for low-memory and/or -speed devices). As CBx files are often of varying quality, a set of image enhancement filters are provided.\n\nSee [README] for more exhaustive information on features and potential misfeatures of this app.\n\n [epub.js]: https://github.com/futurepress/epub.js\n [Epub]: http://idpf.org/epub\n [CBR and CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n [balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n [PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n [pdf.js]: https://github.com/mozilla/pdf.js\n [README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md" : "# Reader\nReader er en e-bok-leser basert på rene JavaScript-gjengivere. Det fungerer for publikasjoner formatert i henhold til følgende standarder:\n\n - [Epub]\n - [PDF]\n - [CBR og CBZ] ('tegneserier')\n\nEpub Reader bruker Futurepress [epub.js] gjengiver for å gi nesten opprinnelig utseende, spesielt når det brukes i fullskjerm. Bla sider ved å trykke på venstre / høyre side av skjermen / vinduet eller bruke markørtastene (hvis du har disse), bruk sidefeltet til å bla gjennom kapitler eller bokmerker og legge til kommentarer.\n\nPDF håndteres av Mozillas [pdf.js] gjengiver i kombinasjon med en tilpasset leserapp for å muliggjøre side-ved-side-visning, bunkesøk og mer. Kontrollene er som de som brukes i Epub-gjengiveren med noen få unntak, for eksempel har nattmodus ikke blitt implementert ennå.\n\nCBR og CBZ støttes ved hjelp av en tilpasset gjengiver inspirert av [balaclark]s arbeid. Som med Epub, kan bøker navigeres ved hjelp av tastaturet, samt mus eller berøringsnavigering. Reader genererer en visuell indeks over alle sider, vises i sidepanelet (miniatyrgenerering kan deaktiveres for enheter med lite minne og / eller hastighet). Siden CBx-filer ofte er av varierende kvalitet, leveres et sett med bildeforbedringsfiltre.\n\nSe [README] for mer uttømmende informasjon om funksjoner og potensielle feilfunksjoner i denne appen.\n\n [epub.js]: https://github.com/futurepress/epub.js\n [Epub]: http://idpf.org/epub\n [CBR og CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n [balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n [PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n [pdf.js]: https://github.com/mozilla/pdf.js\n [README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md", 6 | "custom font" : "tilpasset skrift", 7 | "monospace" : "monospace", 8 | "font size" : "skriftstørrelse", 9 | "font weight" : "skriftvekt", 10 | "Use custom colors" : "Bruk tilpassede farger", 11 | "night mode can be toggled by clicking the book title" : "nattmodus kan byttes til ved å klikke på boktittelen", 12 | "reflow text when sidebars are open" : "tilpass tekstflyt på nytt når sidefelter er åpne", 13 | "disable extra-wide page turn areas" : "deaktiver ekstra brede sidevendingsområder", 14 | "show page turn arrows" : "vis sidevendingspiler", 15 | "menu" : "Meny", 16 | "Reader" : "Reader", 17 | "Select file types for which Reader should be the default viewer." : "Velg filtyper som Reader skal være standard visningsprogram for.", 18 | "Epub" : "Epub", 19 | "PDF" : ".PDF", 20 | "CBR/CBZ" : "CBR/CBZ" 21 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 22 | } -------------------------------------------------------------------------------- /l10n/oc.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "epubreader", 3 | { 4 | "Settings updated successfully." : "Paramètres corrèctament actualizats.", 5 | "EPUB/CBZ/PDF ebook reader" : "lector d’ebook EPUB/CBZ/PDF", 6 | "font size" : "talha poliça", 7 | "font weight" : "largor poliça", 8 | "menu" : "menú", 9 | "Reader" : "Lector", 10 | "Epub" : "Epub", 11 | "PDF" : "PDF", 12 | "CBR/CBZ" : "CBR/CBZ" 13 | }, 14 | "nplurals=2; plural=(n > 1);"); 15 | -------------------------------------------------------------------------------- /l10n/oc.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Settings updated successfully." : "Paramètres corrèctament actualizats.", 3 | "EPUB/CBZ/PDF ebook reader" : "lector d’ebook EPUB/CBZ/PDF", 4 | "font size" : "talha poliça", 5 | "font weight" : "largor poliça", 6 | "menu" : "menú", 7 | "Reader" : "Lector", 8 | "Epub" : "Epub", 9 | "PDF" : "PDF", 10 | "CBR/CBZ" : "CBR/CBZ" 11 | },"pluralForm" :"nplurals=2; plural=(n > 1);" 12 | } -------------------------------------------------------------------------------- /l10n/pt_PT.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "epubreader", 3 | { 4 | "disable extra-wide page turn areas" : "desativar areas de viragem de página extra-largas", 5 | "show page turn arrows" : "mostrar botões de virar a página", 6 | "menu" : "menu", 7 | "Reader" : "Leitor", 8 | "Select file types for which Reader should be the default viewer." : "Escolha os tipos de ficheiros para os quais o Leitor deva ser associado por predefinição.", 9 | "Epub" : "Epub", 10 | "PDF" : "PDF", 11 | "CBR/CBZ" : "CBR/CBZ" 12 | }, 13 | "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 14 | -------------------------------------------------------------------------------- /l10n/pt_PT.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "disable extra-wide page turn areas" : "desativar areas de viragem de página extra-largas", 3 | "show page turn arrows" : "mostrar botões de virar a página", 4 | "menu" : "menu", 5 | "Reader" : "Leitor", 6 | "Select file types for which Reader should be the default viewer." : "Escolha os tipos de ficheiros para os quais o Leitor deva ser associado por predefinição.", 7 | "Epub" : "Epub", 8 | "PDF" : "PDF", 9 | "CBR/CBZ" : "CBR/CBZ" 10 | },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 11 | } -------------------------------------------------------------------------------- /l10n/ro.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "epubreader", 3 | { 4 | "menu" : "meniu" 5 | }, 6 | "nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"); 7 | -------------------------------------------------------------------------------- /l10n/ro.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "menu" : "meniu" 3 | },"pluralForm" :"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));" 4 | } -------------------------------------------------------------------------------- /l10n/sq.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "epubreader", 3 | { 4 | "menu" : "Menu" 5 | }, 6 | "nplurals=2; plural=(n != 1);"); 7 | -------------------------------------------------------------------------------- /l10n/sq.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "menu" : "Menu" 3 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 4 | } -------------------------------------------------------------------------------- /l10n/sr@latin.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "epubreader", 3 | { 4 | "menu" : "meni" 5 | }, 6 | "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); 7 | -------------------------------------------------------------------------------- /l10n/sr@latin.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "menu" : "meni" 3 | },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" 4 | } -------------------------------------------------------------------------------- /l10n/sv.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "epubreader", 3 | { 4 | "Settings updated successfully." : "Inställningarna sparades.", 5 | "EPUB/CBZ/PDF ebook reader" : "E-boksläsare för EPUB/CBZ/PDF", 6 | "A multi-format browser-based ebook reader, supports EPUB and CBR/CBZ" : "En webbläsarbaserad e-boksläsare som stöder formaten EPUB och CBR/CBZ", 7 | "# Reader\nReader is an ebook reader based on pure javascript renderers. It works for publications formatted according to the following standards:\n\n - [Epub]\n - [PDF]\n - [CBR and CBZ] ('comics')\n\nFor Epub Reader uses the futurepress [epub.js] renderer to provide near-native looks, especially when used full-screen. Turn pages by pressing the left/right hand side of the screen/window or using the cursor keys (if you have those), use the sidebar to browse through chapters or bookmarks and add annotations.\n\nPDF is handled by Mozilla's [pdf.js] renderer in combination with a custom reader app to enable side-by-side display, batch search and more. Controls are like those used in the Epub renderer with a few exceptions, e.g. night mode has not been implemented yet.\n\nCBR and CBZ are supported using a custom renderer inspired by [balaclark]'s work. As with Epub, books can be navigated using the keyboard as well as mouse or touch navigation. Reader generates a visual index of all pages, show in the sidebar (thumbnail generation can be disabled for low-memory and/or -speed devices). As CBx files are often of varying quality, a set of image enhancement filters are provided.\n\nSee [README] for more exhaustive information on features and potential misfeatures of this app.\n\n [epub.js]: https://github.com/futurepress/epub.js\n [Epub]: http://idpf.org/epub\n [CBR and CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n [balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n [PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n [pdf.js]: https://github.com/mozilla/pdf.js\n [README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md" : "# E-boksläsare\ne-boksläsare är en e-boksläsare baserad på javascript som körs i webbläsaren. Den fungerar för böcker med följande format:\n\n - [Epub]\n - [PDF]\n - [CBR and CBZ] ('serier')\n\nFör ePub använder E-boksläsare renderingen från futurepress [epub.js] för att nå bra visning, särskilt i fullskärmsläge. Bläddra genom att trycka på vänster/höger sida av skärmen eller fönstret. Piltangenterna kan också användas om du har sådana. Använd sidopanelen för att navigera i menyn för kapitel, bokmärken och annoteringar.\n\nPDF-renderingen använder Mozilla [pdf.js] i kombination med en anpassad läsare för sida-vid-sida-visning, sök och mer. Navigeringen är som den för ePub med några få undantag, till exempel är nattläget implementerat än.\n\nCBR och CBZ använder en anpassad rendering inspirerad av [balaclark]s arbete. Som med ePub kan navigering ske med tangentbord, mus eller via pekskärm. E-boksläsare skapar ett visuellt index av alla sidor som visas i sidopanelen (miniatyrerna kan stängas av för att spara systemresurser). Då CBx-filer ofta är av varierande kvalitet så kan bildförbättringsfilter aktiveras.\n\nSe [README] för mer information om funktioner och eventuella konstigheter med denna app.\n\n [epub.js]: https://github.com/futurepress/epub.js\n [Epub]: http://idpf.org/epub\n [CBR och CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n [balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n [PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n [pdf.js]: https://github.com/mozilla/pdf.js\n [README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md", 8 | "custom font" : "Anpassat teckensnitt", 9 | "monospace" : "monospace", 10 | "font size" : "teckenstorlek", 11 | "font weight" : "teckensnittsvikt", 12 | "Use custom colors" : "Använd anpassade färger", 13 | "night mode can be toggled by clicking the book title" : "du kan växla mellan dag-/nattläge genom att klicka på boktiteln", 14 | "reflow text when sidebars are open" : "flöda om när sidopaneler är öppna", 15 | "disable extra-wide page turn areas" : "stäng av extra breda sidbläddringsytor", 16 | "show page turn arrows" : "visa sidbläddringspilar", 17 | "menu" : "meny", 18 | "Reader" : "E-boksläsare", 19 | "Select file types for which Reader should be the default viewer." : "Välj vilka format E-boksläsaren ska användas för. ", 20 | "Epub" : "ePub", 21 | "PDF" : "PDF", 22 | "CBR/CBZ" : "CBR/CBZ" 23 | }, 24 | "nplurals=2; plural=(n != 1);"); 25 | -------------------------------------------------------------------------------- /l10n/sv.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Settings updated successfully." : "Inställningarna sparades.", 3 | "EPUB/CBZ/PDF ebook reader" : "E-boksläsare för EPUB/CBZ/PDF", 4 | "A multi-format browser-based ebook reader, supports EPUB and CBR/CBZ" : "En webbläsarbaserad e-boksläsare som stöder formaten EPUB och CBR/CBZ", 5 | "# Reader\nReader is an ebook reader based on pure javascript renderers. It works for publications formatted according to the following standards:\n\n - [Epub]\n - [PDF]\n - [CBR and CBZ] ('comics')\n\nFor Epub Reader uses the futurepress [epub.js] renderer to provide near-native looks, especially when used full-screen. Turn pages by pressing the left/right hand side of the screen/window or using the cursor keys (if you have those), use the sidebar to browse through chapters or bookmarks and add annotations.\n\nPDF is handled by Mozilla's [pdf.js] renderer in combination with a custom reader app to enable side-by-side display, batch search and more. Controls are like those used in the Epub renderer with a few exceptions, e.g. night mode has not been implemented yet.\n\nCBR and CBZ are supported using a custom renderer inspired by [balaclark]'s work. As with Epub, books can be navigated using the keyboard as well as mouse or touch navigation. Reader generates a visual index of all pages, show in the sidebar (thumbnail generation can be disabled for low-memory and/or -speed devices). As CBx files are often of varying quality, a set of image enhancement filters are provided.\n\nSee [README] for more exhaustive information on features and potential misfeatures of this app.\n\n [epub.js]: https://github.com/futurepress/epub.js\n [Epub]: http://idpf.org/epub\n [CBR and CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n [balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n [PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n [pdf.js]: https://github.com/mozilla/pdf.js\n [README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md" : "# E-boksläsare\ne-boksläsare är en e-boksläsare baserad på javascript som körs i webbläsaren. Den fungerar för böcker med följande format:\n\n - [Epub]\n - [PDF]\n - [CBR and CBZ] ('serier')\n\nFör ePub använder E-boksläsare renderingen från futurepress [epub.js] för att nå bra visning, särskilt i fullskärmsläge. Bläddra genom att trycka på vänster/höger sida av skärmen eller fönstret. Piltangenterna kan också användas om du har sådana. Använd sidopanelen för att navigera i menyn för kapitel, bokmärken och annoteringar.\n\nPDF-renderingen använder Mozilla [pdf.js] i kombination med en anpassad läsare för sida-vid-sida-visning, sök och mer. Navigeringen är som den för ePub med några få undantag, till exempel är nattläget implementerat än.\n\nCBR och CBZ använder en anpassad rendering inspirerad av [balaclark]s arbete. Som med ePub kan navigering ske med tangentbord, mus eller via pekskärm. E-boksläsare skapar ett visuellt index av alla sidor som visas i sidopanelen (miniatyrerna kan stängas av för att spara systemresurser). Då CBx-filer ofta är av varierande kvalitet så kan bildförbättringsfilter aktiveras.\n\nSe [README] för mer information om funktioner och eventuella konstigheter med denna app.\n\n [epub.js]: https://github.com/futurepress/epub.js\n [Epub]: http://idpf.org/epub\n [CBR och CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n [balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n [PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n [pdf.js]: https://github.com/mozilla/pdf.js\n [README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md", 6 | "custom font" : "Anpassat teckensnitt", 7 | "monospace" : "monospace", 8 | "font size" : "teckenstorlek", 9 | "font weight" : "teckensnittsvikt", 10 | "Use custom colors" : "Använd anpassade färger", 11 | "night mode can be toggled by clicking the book title" : "du kan växla mellan dag-/nattläge genom att klicka på boktiteln", 12 | "reflow text when sidebars are open" : "flöda om när sidopaneler är öppna", 13 | "disable extra-wide page turn areas" : "stäng av extra breda sidbläddringsytor", 14 | "show page turn arrows" : "visa sidbläddringspilar", 15 | "menu" : "meny", 16 | "Reader" : "E-boksläsare", 17 | "Select file types for which Reader should be the default viewer." : "Välj vilka format E-boksläsaren ska användas för. ", 18 | "Epub" : "ePub", 19 | "PDF" : "PDF", 20 | "CBR/CBZ" : "CBR/CBZ" 21 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 22 | } -------------------------------------------------------------------------------- /l10n/th.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "epubreader", 3 | { 4 | "Settings updated successfully." : "อัปเดตการตั้งค่าสำเร็จ", 5 | "EPUB/CBZ/PDF ebook reader" : "ตัวอ่านอีบุ๊ก EPUB/CBZ/PDF", 6 | "custom font" : "ฟอนต์กำหนดเอง", 7 | "font size" : "ขนาดฟอนต์", 8 | "font weight" : "น้ำหนักฟอนต์", 9 | "Use custom colors" : "ใช้สีกำหนดเอง", 10 | "show page turn arrows" : "แสดงลูกศรเปลี่ยนหน้า", 11 | "menu" : "เมนู", 12 | "Reader" : "โปรแกรมอ่าน", 13 | "Epub" : "Epub", 14 | "PDF" : "PDF", 15 | "CBR/CBZ" : "CBR/CBZ" 16 | }, 17 | "nplurals=1; plural=0;"); 18 | -------------------------------------------------------------------------------- /l10n/th.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Settings updated successfully." : "อัปเดตการตั้งค่าสำเร็จ", 3 | "EPUB/CBZ/PDF ebook reader" : "ตัวอ่านอีบุ๊ก EPUB/CBZ/PDF", 4 | "custom font" : "ฟอนต์กำหนดเอง", 5 | "font size" : "ขนาดฟอนต์", 6 | "font weight" : "น้ำหนักฟอนต์", 7 | "Use custom colors" : "ใช้สีกำหนดเอง", 8 | "show page turn arrows" : "แสดงลูกศรเปลี่ยนหน้า", 9 | "menu" : "เมนู", 10 | "Reader" : "โปรแกรมอ่าน", 11 | "Epub" : "Epub", 12 | "PDF" : "PDF", 13 | "CBR/CBZ" : "CBR/CBZ" 14 | },"pluralForm" :"nplurals=1; plural=0;" 15 | } -------------------------------------------------------------------------------- /l10n/uz.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "epubreader", 3 | { 4 | "menu" : "menyu" 5 | }, 6 | "nplurals=1; plural=0;"); 7 | -------------------------------------------------------------------------------- /l10n/uz.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "menu" : "menyu" 3 | },"pluralForm" :"nplurals=1; plural=0;" 4 | } -------------------------------------------------------------------------------- /l10n/vi.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "epubreader", 3 | { 4 | "menu" : "menu" 5 | }, 6 | "nplurals=1; plural=0;"); 7 | -------------------------------------------------------------------------------- /l10n/vi.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "menu" : "menu" 3 | },"pluralForm" :"nplurals=1; plural=0;" 4 | } -------------------------------------------------------------------------------- /l10n/zh_CN.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "epubreader", 3 | { 4 | "Settings updated successfully." : "设置已成功更新。", 5 | "EPUB/CBZ/PDF ebook reader" : "EPUB/CBZ/PDF 电子书阅读器", 6 | "A multi-format browser-based ebook reader, supports EPUB and CBR/CBZ" : "一款多格式的基于浏览器的电子书阅读器,支持EPUB和CBR/CBZ", 7 | "# Reader\nReader is an ebook reader based on pure javascript renderers. It works for publications formatted according to the following standards:\n\n - [Epub]\n - [PDF]\n - [CBR and CBZ] ('comics')\n\nFor Epub Reader uses the futurepress [epub.js] renderer to provide near-native looks, especially when used full-screen. Turn pages by pressing the left/right hand side of the screen/window or using the cursor keys (if you have those), use the sidebar to browse through chapters or bookmarks and add annotations.\n\nPDF is handled by Mozilla's [pdf.js] renderer in combination with a custom reader app to enable side-by-side display, batch search and more. Controls are like those used in the Epub renderer with a few exceptions, e.g. night mode has not been implemented yet.\n\nCBR and CBZ are supported using a custom renderer inspired by [balaclark]'s work. As with Epub, books can be navigated using the keyboard as well as mouse or touch navigation. Reader generates a visual index of all pages, show in the sidebar (thumbnail generation can be disabled for low-memory and/or -speed devices). As CBx files are often of varying quality, a set of image enhancement filters are provided.\n\nSee [README] for more exhaustive information on features and potential misfeatures of this app.\n\n [epub.js]: https://github.com/futurepress/epub.js\n [Epub]: http://idpf.org/epub\n [CBR and CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n [balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n [PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n [pdf.js]: https://github.com/mozilla/pdf.js\n [README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md" : "#阅读器应用\n阅读器应用是一个基于纯JavaScript渲染器的电子书阅读器。它适用于按以下标准格式化的出版物:\n\n- [EPUB]\n- [PDF]\n- [CBR and CBZ] ('漫画')\n\n对于EPUB文件,阅读器应用使用futurepress[epub.js]渲染器提供近乎原生的外观,特别是在使用全屏时。通过按屏幕/窗口的左/右手边或使用光标键(如果你有的话)进行翻页,使用侧边栏遍历章节或书签并添加注释。\n\nPDF文件由Mozilla的[pdf.js]渲染器结合自定义阅读器应用进行处理来实现并排显示、批量搜索和更多。控件与Epub渲染器中使用的控件类似,只有少数例外,比如夜间模式尚未实现。\n\nCBR和CBZ文件的支持使用自定义渲染器,灵感来自于[balaclark]的工作。就EPUB而言,书籍可以通过键盘、鼠标或触摸导航来导航。阅读器应用生成所有页面的可视化索引,显示在侧边栏中(对于低内存和/或速度慢的设备,可以禁用缩略图生成)。由于CBx文件的质量参差不齐,因此提供了一组图像增强过滤器。\n\n更多关于这款应用的功能和潜在错误的详细信息,请参见[自述]\n\n[epub.js]: https://github.com/futurepress/epub.js[Epub]: http://idpf.org/epub\n[CBR and CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n[balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n[PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n[pdf.js]: https://github.com/mozilla/pdf.js\n[README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md", 8 | "custom font" : "自定义字体", 9 | "monospace" : "等宽", 10 | "font size" : "字体大小", 11 | "font weight" : "字体粗细", 12 | "Use custom colors" : "使用自定义颜色", 13 | "night mode can be toggled by clicking the book title" : "点击书的标题可以切换夜间模式", 14 | "reflow text when sidebars are open" : "在侧边栏打开时重新调整文字流", 15 | "disable extra-wide page turn areas" : "禁用超宽翻页区域", 16 | "show page turn arrows" : "显示翻页箭头", 17 | "menu" : "菜单", 18 | "Reader" : "阅读器", 19 | "Select file types for which Reader should be the default viewer." : "选择默认用阅读器打开的文件类型。", 20 | "Epub" : "EPUB", 21 | "PDF" : "PDF", 22 | "CBR/CBZ" : "CBR/CBZ" 23 | }, 24 | "nplurals=1; plural=0;"); 25 | -------------------------------------------------------------------------------- /l10n/zh_CN.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Settings updated successfully." : "设置已成功更新。", 3 | "EPUB/CBZ/PDF ebook reader" : "EPUB/CBZ/PDF 电子书阅读器", 4 | "A multi-format browser-based ebook reader, supports EPUB and CBR/CBZ" : "一款多格式的基于浏览器的电子书阅读器,支持EPUB和CBR/CBZ", 5 | "# Reader\nReader is an ebook reader based on pure javascript renderers. It works for publications formatted according to the following standards:\n\n - [Epub]\n - [PDF]\n - [CBR and CBZ] ('comics')\n\nFor Epub Reader uses the futurepress [epub.js] renderer to provide near-native looks, especially when used full-screen. Turn pages by pressing the left/right hand side of the screen/window or using the cursor keys (if you have those), use the sidebar to browse through chapters or bookmarks and add annotations.\n\nPDF is handled by Mozilla's [pdf.js] renderer in combination with a custom reader app to enable side-by-side display, batch search and more. Controls are like those used in the Epub renderer with a few exceptions, e.g. night mode has not been implemented yet.\n\nCBR and CBZ are supported using a custom renderer inspired by [balaclark]'s work. As with Epub, books can be navigated using the keyboard as well as mouse or touch navigation. Reader generates a visual index of all pages, show in the sidebar (thumbnail generation can be disabled for low-memory and/or -speed devices). As CBx files are often of varying quality, a set of image enhancement filters are provided.\n\nSee [README] for more exhaustive information on features and potential misfeatures of this app.\n\n [epub.js]: https://github.com/futurepress/epub.js\n [Epub]: http://idpf.org/epub\n [CBR and CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n [balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n [PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n [pdf.js]: https://github.com/mozilla/pdf.js\n [README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md" : "#阅读器应用\n阅读器应用是一个基于纯JavaScript渲染器的电子书阅读器。它适用于按以下标准格式化的出版物:\n\n- [EPUB]\n- [PDF]\n- [CBR and CBZ] ('漫画')\n\n对于EPUB文件,阅读器应用使用futurepress[epub.js]渲染器提供近乎原生的外观,特别是在使用全屏时。通过按屏幕/窗口的左/右手边或使用光标键(如果你有的话)进行翻页,使用侧边栏遍历章节或书签并添加注释。\n\nPDF文件由Mozilla的[pdf.js]渲染器结合自定义阅读器应用进行处理来实现并排显示、批量搜索和更多。控件与Epub渲染器中使用的控件类似,只有少数例外,比如夜间模式尚未实现。\n\nCBR和CBZ文件的支持使用自定义渲染器,灵感来自于[balaclark]的工作。就EPUB而言,书籍可以通过键盘、鼠标或触摸导航来导航。阅读器应用生成所有页面的可视化索引,显示在侧边栏中(对于低内存和/或速度慢的设备,可以禁用缩略图生成)。由于CBx文件的质量参差不齐,因此提供了一组图像增强过滤器。\n\n更多关于这款应用的功能和潜在错误的详细信息,请参见[自述]\n\n[epub.js]: https://github.com/futurepress/epub.js[Epub]: http://idpf.org/epub\n[CBR and CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n[balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n[PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n[pdf.js]: https://github.com/mozilla/pdf.js\n[README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md", 6 | "custom font" : "自定义字体", 7 | "monospace" : "等宽", 8 | "font size" : "字体大小", 9 | "font weight" : "字体粗细", 10 | "Use custom colors" : "使用自定义颜色", 11 | "night mode can be toggled by clicking the book title" : "点击书的标题可以切换夜间模式", 12 | "reflow text when sidebars are open" : "在侧边栏打开时重新调整文字流", 13 | "disable extra-wide page turn areas" : "禁用超宽翻页区域", 14 | "show page turn arrows" : "显示翻页箭头", 15 | "menu" : "菜单", 16 | "Reader" : "阅读器", 17 | "Select file types for which Reader should be the default viewer." : "选择默认用阅读器打开的文件类型。", 18 | "Epub" : "EPUB", 19 | "PDF" : "PDF", 20 | "CBR/CBZ" : "CBR/CBZ" 21 | },"pluralForm" :"nplurals=1; plural=0;" 22 | } -------------------------------------------------------------------------------- /l10n/zh_HK.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "epubreader", 3 | { 4 | "Settings updated successfully." : "設定已成功變更", 5 | "EPUB/CBZ/PDF ebook reader" : "EPUB/CBZ/PDF 電子書閱讀程式", 6 | "A multi-format browser-based ebook reader, supports EPUB and CBR/CBZ" : "以瀏覽器為基礎的電子書閱讀程式,支援 EPUB 與 CBR/CBZ", 7 | "# Reader\nReader is an ebook reader based on pure javascript renderers. It works for publications formatted according to the following standards:\n\n - [Epub]\n - [PDF]\n - [CBR and CBZ] ('comics')\n\nFor Epub Reader uses the futurepress [epub.js] renderer to provide near-native looks, especially when used full-screen. Turn pages by pressing the left/right hand side of the screen/window or using the cursor keys (if you have those), use the sidebar to browse through chapters or bookmarks and add annotations.\n\nPDF is handled by Mozilla's [pdf.js] renderer in combination with a custom reader app to enable side-by-side display, batch search and more. Controls are like those used in the Epub renderer with a few exceptions, e.g. night mode has not been implemented yet.\n\nCBR and CBZ are supported using a custom renderer inspired by [balaclark]'s work. As with Epub, books can be navigated using the keyboard as well as mouse or touch navigation. Reader generates a visual index of all pages, show in the sidebar (thumbnail generation can be disabled for low-memory and/or -speed devices). As CBx files are often of varying quality, a set of image enhancement filters are provided.\n\nSee [README] for more exhaustive information on features and potential misfeatures of this app.\n\n [epub.js]: https://github.com/futurepress/epub.js\n [Epub]: http://idpf.org/epub\n [CBR and CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n [balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n [PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n [pdf.js]: https://github.com/mozilla/pdf.js\n [README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md" : "# Reader\nReader 是一套以純淨的 JavaScript 彩現程式為基礎的電子書閱讀程式。其適用於遵循以下標準的出版品:\n\n - [Epub]\n - [PDF]\n - [CBR 與 CBZ](漫畫)\n\n對於 Epub 閱讀程式來說,使用了 futurepress [epub.js] 彩現程式以提供接近原生的外觀,特別是在全螢幕模式下使用時。按下螢幕或視窗的左側或右側來翻頁,或是使用游標鍵(如果您有的話),並使用側邊欄來章節或書籤間瀏覽以及新增註釋。\n\nPDF 則使用 Mozilla 的 [pdf.js] 彩現程式結合自訂的閱讀應用程式以啟用並排顯示、批次搜尋與更多功能。控制元件則類似於在 Epub 彩現程式中使用的那樣,不過有些例外,例如夜間模式就尚未實作。\n\nCBR 與 CBZ 則是由靈感來自於 [balaclark] 作品的自訂彩現程式支援。與 Epub 相同,可以使用鍵盤與滑鼠或觸控螢幕來瀏覽書籍。閱讀程式會生成所有頁面的視覺化索引,在側邊欄中顯示(生成縮圖可在較少記憶體及/或較慢的裝置上停用)。由於 CBx 檔案的品質通常不盡相同,因此提供了一套圖片強化濾鏡。\n\n檢視 [README] 以取得有關此應用程式功能與可能不足處的更詳盡資訊。\n\n [epub.js]: https://github.com/futurepress/epub.js\n [Epub]: http://idpf.org/epub\n [CBR and CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n [balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n [PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n [pdf.js]: https://github.com/mozilla/pdf.js\n [README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md", 8 | "custom font" : "自訂字型", 9 | "monospace" : "等寬", 10 | "font size" : "字型大小", 11 | "font weight" : "字型粗幼", 12 | "Use custom colors" : "使用自訂色彩", 13 | "night mode can be toggled by clicking the book title" : "點選書本標題可切換夜間模式", 14 | "reflow text when sidebars are open" : "側邊欄開啟時重新排列文字", 15 | "disable extra-wide page turn areas" : "停用額外寬度的頁面翻轉區域", 16 | "show page turn arrows" : "顯示頁面旋轉箭頭", 17 | "menu" : "選單", 18 | "Reader" : "閱讀器", 19 | "Select file types for which Reader should be the default viewer." : "選擇閱讀器預設要檢視的檔案類型。", 20 | "Epub" : "Epub", 21 | "PDF" : "PDF", 22 | "CBR/CBZ" : "CBR/CBZ" 23 | }, 24 | "nplurals=1; plural=0;"); 25 | -------------------------------------------------------------------------------- /l10n/zh_HK.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Settings updated successfully." : "設定已成功變更", 3 | "EPUB/CBZ/PDF ebook reader" : "EPUB/CBZ/PDF 電子書閱讀程式", 4 | "A multi-format browser-based ebook reader, supports EPUB and CBR/CBZ" : "以瀏覽器為基礎的電子書閱讀程式,支援 EPUB 與 CBR/CBZ", 5 | "# Reader\nReader is an ebook reader based on pure javascript renderers. It works for publications formatted according to the following standards:\n\n - [Epub]\n - [PDF]\n - [CBR and CBZ] ('comics')\n\nFor Epub Reader uses the futurepress [epub.js] renderer to provide near-native looks, especially when used full-screen. Turn pages by pressing the left/right hand side of the screen/window or using the cursor keys (if you have those), use the sidebar to browse through chapters or bookmarks and add annotations.\n\nPDF is handled by Mozilla's [pdf.js] renderer in combination with a custom reader app to enable side-by-side display, batch search and more. Controls are like those used in the Epub renderer with a few exceptions, e.g. night mode has not been implemented yet.\n\nCBR and CBZ are supported using a custom renderer inspired by [balaclark]'s work. As with Epub, books can be navigated using the keyboard as well as mouse or touch navigation. Reader generates a visual index of all pages, show in the sidebar (thumbnail generation can be disabled for low-memory and/or -speed devices). As CBx files are often of varying quality, a set of image enhancement filters are provided.\n\nSee [README] for more exhaustive information on features and potential misfeatures of this app.\n\n [epub.js]: https://github.com/futurepress/epub.js\n [Epub]: http://idpf.org/epub\n [CBR and CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n [balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n [PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n [pdf.js]: https://github.com/mozilla/pdf.js\n [README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md" : "# Reader\nReader 是一套以純淨的 JavaScript 彩現程式為基礎的電子書閱讀程式。其適用於遵循以下標準的出版品:\n\n - [Epub]\n - [PDF]\n - [CBR 與 CBZ](漫畫)\n\n對於 Epub 閱讀程式來說,使用了 futurepress [epub.js] 彩現程式以提供接近原生的外觀,特別是在全螢幕模式下使用時。按下螢幕或視窗的左側或右側來翻頁,或是使用游標鍵(如果您有的話),並使用側邊欄來章節或書籤間瀏覽以及新增註釋。\n\nPDF 則使用 Mozilla 的 [pdf.js] 彩現程式結合自訂的閱讀應用程式以啟用並排顯示、批次搜尋與更多功能。控制元件則類似於在 Epub 彩現程式中使用的那樣,不過有些例外,例如夜間模式就尚未實作。\n\nCBR 與 CBZ 則是由靈感來自於 [balaclark] 作品的自訂彩現程式支援。與 Epub 相同,可以使用鍵盤與滑鼠或觸控螢幕來瀏覽書籍。閱讀程式會生成所有頁面的視覺化索引,在側邊欄中顯示(生成縮圖可在較少記憶體及/或較慢的裝置上停用)。由於 CBx 檔案的品質通常不盡相同,因此提供了一套圖片強化濾鏡。\n\n檢視 [README] 以取得有關此應用程式功能與可能不足處的更詳盡資訊。\n\n [epub.js]: https://github.com/futurepress/epub.js\n [Epub]: http://idpf.org/epub\n [CBR and CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n [balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n [PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n [pdf.js]: https://github.com/mozilla/pdf.js\n [README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md", 6 | "custom font" : "自訂字型", 7 | "monospace" : "等寬", 8 | "font size" : "字型大小", 9 | "font weight" : "字型粗幼", 10 | "Use custom colors" : "使用自訂色彩", 11 | "night mode can be toggled by clicking the book title" : "點選書本標題可切換夜間模式", 12 | "reflow text when sidebars are open" : "側邊欄開啟時重新排列文字", 13 | "disable extra-wide page turn areas" : "停用額外寬度的頁面翻轉區域", 14 | "show page turn arrows" : "顯示頁面旋轉箭頭", 15 | "menu" : "選單", 16 | "Reader" : "閱讀器", 17 | "Select file types for which Reader should be the default viewer." : "選擇閱讀器預設要檢視的檔案類型。", 18 | "Epub" : "Epub", 19 | "PDF" : "PDF", 20 | "CBR/CBZ" : "CBR/CBZ" 21 | },"pluralForm" :"nplurals=1; plural=0;" 22 | } -------------------------------------------------------------------------------- /l10n/zh_TW.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "epubreader", 3 | { 4 | "Settings updated successfully." : "設定已成功變更", 5 | "EPUB/CBZ/PDF ebook reader" : "EPUB/CBZ/PDF 電子書閱讀程式", 6 | "A multi-format browser-based ebook reader, supports EPUB and CBR/CBZ" : "以瀏覽器為基礎的電子書閱讀程式,支援 EPUB 與 CBR/CBZ", 7 | "# Reader\nReader is an ebook reader based on pure javascript renderers. It works for publications formatted according to the following standards:\n\n - [Epub]\n - [PDF]\n - [CBR and CBZ] ('comics')\n\nFor Epub Reader uses the futurepress [epub.js] renderer to provide near-native looks, especially when used full-screen. Turn pages by pressing the left/right hand side of the screen/window or using the cursor keys (if you have those), use the sidebar to browse through chapters or bookmarks and add annotations.\n\nPDF is handled by Mozilla's [pdf.js] renderer in combination with a custom reader app to enable side-by-side display, batch search and more. Controls are like those used in the Epub renderer with a few exceptions, e.g. night mode has not been implemented yet.\n\nCBR and CBZ are supported using a custom renderer inspired by [balaclark]'s work. As with Epub, books can be navigated using the keyboard as well as mouse or touch navigation. Reader generates a visual index of all pages, show in the sidebar (thumbnail generation can be disabled for low-memory and/or -speed devices). As CBx files are often of varying quality, a set of image enhancement filters are provided.\n\nSee [README] for more exhaustive information on features and potential misfeatures of this app.\n\n [epub.js]: https://github.com/futurepress/epub.js\n [Epub]: http://idpf.org/epub\n [CBR and CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n [balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n [PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n [pdf.js]: https://github.com/mozilla/pdf.js\n [README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md" : "# Reader\nReader 是一套以純淨的 JavaScript 彩現程式為基礎的電子書閱讀程式。其適用於遵循以下標準的出版品:\n\n - [Epub]\n - [PDF]\n - [CBR 與 CBZ](漫畫)\n\n對於 Epub 閱讀程式來說,使用了 futurepress [epub.js] 彩現程式以提供接近原生的外觀,特別是在全螢幕模式下使用時。按下螢幕或視窗的左側或右側來翻頁,或是使用游標鍵(如果您有的話),並使用側邊欄來章節或書籤間瀏覽以及新增註釋。\n\nPDF 則使用 Mozilla 的 [pdf.js] 彩現程式結合自訂的閱讀應用程式以啟用並排顯示、批次搜尋與更多功能。控制元件則類似於在 Epub 彩現程式中使用的那樣,不過有些例外,例如夜間模式就尚未實作。\n\nCBR 與 CBZ 則是由靈感來自於 [balaclark] 作品的自訂彩現程式支援。與 Epub 相同,可以使用鍵盤與滑鼠或觸控螢幕來瀏覽書籍。閱讀程式會生成所有頁面的視覺化索引,在側邊欄中顯示(生成縮圖可在較少記憶體及/或較慢的裝置上停用)。由於 CBx 檔案的品質通常不盡相同,因此提供了一套圖片強化濾鏡。\n\n檢視 [README] 以取得有關此應用程式功能與可能不足處的更詳盡資訊。\n\n [epub.js]: https://github.com/futurepress/epub.js\n [Epub]: http://idpf.org/epub\n [CBR and CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n [balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n [PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n [pdf.js]: https://github.com/mozilla/pdf.js\n [README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md", 8 | "custom font" : "自訂字型", 9 | "monospace" : "等寬", 10 | "font size" : "字型大小", 11 | "font weight" : "字型粗細", 12 | "Use custom colors" : "使用自訂色彩", 13 | "night mode can be toggled by clicking the book title" : "點選書本標題可切換夜間模式", 14 | "reflow text when sidebars are open" : "側邊欄開啟時重新排列文字", 15 | "disable extra-wide page turn areas" : "停用額外寬度的頁面翻轉區域", 16 | "show page turn arrows" : "顯示頁面旋轉箭頭", 17 | "menu" : "選單", 18 | "Reader" : "閱讀器", 19 | "Select file types for which Reader should be the default viewer." : "選擇閱讀器預設要檢視的檔案類型。", 20 | "Epub" : "Epub", 21 | "PDF" : "PDF", 22 | "CBR/CBZ" : "CBR/CBZ" 23 | }, 24 | "nplurals=1; plural=0;"); 25 | -------------------------------------------------------------------------------- /l10n/zh_TW.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Settings updated successfully." : "設定已成功變更", 3 | "EPUB/CBZ/PDF ebook reader" : "EPUB/CBZ/PDF 電子書閱讀程式", 4 | "A multi-format browser-based ebook reader, supports EPUB and CBR/CBZ" : "以瀏覽器為基礎的電子書閱讀程式,支援 EPUB 與 CBR/CBZ", 5 | "# Reader\nReader is an ebook reader based on pure javascript renderers. It works for publications formatted according to the following standards:\n\n - [Epub]\n - [PDF]\n - [CBR and CBZ] ('comics')\n\nFor Epub Reader uses the futurepress [epub.js] renderer to provide near-native looks, especially when used full-screen. Turn pages by pressing the left/right hand side of the screen/window or using the cursor keys (if you have those), use the sidebar to browse through chapters or bookmarks and add annotations.\n\nPDF is handled by Mozilla's [pdf.js] renderer in combination with a custom reader app to enable side-by-side display, batch search and more. Controls are like those used in the Epub renderer with a few exceptions, e.g. night mode has not been implemented yet.\n\nCBR and CBZ are supported using a custom renderer inspired by [balaclark]'s work. As with Epub, books can be navigated using the keyboard as well as mouse or touch navigation. Reader generates a visual index of all pages, show in the sidebar (thumbnail generation can be disabled for low-memory and/or -speed devices). As CBx files are often of varying quality, a set of image enhancement filters are provided.\n\nSee [README] for more exhaustive information on features and potential misfeatures of this app.\n\n [epub.js]: https://github.com/futurepress/epub.js\n [Epub]: http://idpf.org/epub\n [CBR and CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n [balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n [PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n [pdf.js]: https://github.com/mozilla/pdf.js\n [README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md" : "# Reader\nReader 是一套以純淨的 JavaScript 彩現程式為基礎的電子書閱讀程式。其適用於遵循以下標準的出版品:\n\n - [Epub]\n - [PDF]\n - [CBR 與 CBZ](漫畫)\n\n對於 Epub 閱讀程式來說,使用了 futurepress [epub.js] 彩現程式以提供接近原生的外觀,特別是在全螢幕模式下使用時。按下螢幕或視窗的左側或右側來翻頁,或是使用游標鍵(如果您有的話),並使用側邊欄來章節或書籤間瀏覽以及新增註釋。\n\nPDF 則使用 Mozilla 的 [pdf.js] 彩現程式結合自訂的閱讀應用程式以啟用並排顯示、批次搜尋與更多功能。控制元件則類似於在 Epub 彩現程式中使用的那樣,不過有些例外,例如夜間模式就尚未實作。\n\nCBR 與 CBZ 則是由靈感來自於 [balaclark] 作品的自訂彩現程式支援。與 Epub 相同,可以使用鍵盤與滑鼠或觸控螢幕來瀏覽書籍。閱讀程式會生成所有頁面的視覺化索引,在側邊欄中顯示(生成縮圖可在較少記憶體及/或較慢的裝置上停用)。由於 CBx 檔案的品質通常不盡相同,因此提供了一套圖片強化濾鏡。\n\n檢視 [README] 以取得有關此應用程式功能與可能不足處的更詳盡資訊。\n\n [epub.js]: https://github.com/futurepress/epub.js\n [Epub]: http://idpf.org/epub\n [CBR and CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n [balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n [PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n [pdf.js]: https://github.com/mozilla/pdf.js\n [README]: https://github.com/e-alfred/epubreader/blob/master/epubreader/README.md", 6 | "custom font" : "自訂字型", 7 | "monospace" : "等寬", 8 | "font size" : "字型大小", 9 | "font weight" : "字型粗細", 10 | "Use custom colors" : "使用自訂色彩", 11 | "night mode can be toggled by clicking the book title" : "點選書本標題可切換夜間模式", 12 | "reflow text when sidebars are open" : "側邊欄開啟時重新排列文字", 13 | "disable extra-wide page turn areas" : "停用額外寬度的頁面翻轉區域", 14 | "show page turn arrows" : "顯示頁面旋轉箭頭", 15 | "menu" : "選單", 16 | "Reader" : "閱讀器", 17 | "Select file types for which Reader should be the default viewer." : "選擇閱讀器預設要檢視的檔案類型。", 18 | "Epub" : "Epub", 19 | "PDF" : "PDF", 20 | "CBR/CBZ" : "CBR/CBZ" 21 | },"pluralForm" :"nplurals=1; plural=0;" 22 | } -------------------------------------------------------------------------------- /lib/Controller/BookmarkController.php: -------------------------------------------------------------------------------- 1 | bookmarkService = $bookmarkService; 35 | } 36 | 37 | /** 38 | * @brief return bookmark 39 | * 40 | * @NoAdminRequired 41 | * @NoCSRFRequired 42 | * 43 | * @param int $fileId 44 | * @param string $name 45 | * 46 | * @return array|\OCP\AppFramework\Http\JSONResponse 47 | */ 48 | public function get($fileId, $name, $type=null) { 49 | return $this->bookmarkService->get($fileId, $name, $type); 50 | } 51 | 52 | /** 53 | * @brief write bookmark 54 | * 55 | * @NoAdminRequired 56 | * @NoCSRFRequired 57 | * 58 | * @param int $fileId 59 | * @param string $name 60 | * @param string $value 61 | * 62 | * @return array|\OCP\AppFramework\Http\JSONResponse 63 | */ 64 | public function set($fileId, $name, $value, $type=null, $content=null) { 65 | return $this->bookmarkService->set($fileId, $name, $value, $type, $content); 66 | } 67 | 68 | 69 | /** 70 | * @brief return cursor for $fileId 71 | * 72 | * @NoAdminRequired 73 | * @NoCSRFRequired 74 | * 75 | * @param int $fileId 76 | * 77 | * @return array|\OCP\AppFramework\Http\JSONResponse 78 | */ 79 | public function getCursor($fileId) { 80 | return $this->bookmarkService->getCursor($fileId); 81 | } 82 | 83 | /** 84 | * @brief write cursor for $fileId 85 | * 86 | * @NoAdminRequired 87 | * @NoCSRFRequired 88 | * 89 | * @param int $fileId 90 | * @param string $value 91 | * 92 | * @return array|\OCP\AppFramework\Http\JSONResponse 93 | */ 94 | public function setCursor($fileId, $value) { 95 | return $this->bookmarkService->setCursor($fileId, $value); 96 | } 97 | 98 | /** 99 | * @brief delete bookmark 100 | * 101 | * @NoAdminRequired 102 | * @NoCSRFRequired 103 | * 104 | * @param int $fileId 105 | * @param string name 106 | * 107 | */ 108 | public function delete($fileId, $name) { 109 | return $this->bookmarkService->delete($fileId, $name); 110 | } 111 | 112 | /** 113 | * @brief delete cursor 114 | * 115 | * @NoAdminRequired 116 | * @NoCSRFRequired 117 | * 118 | * @param int $fileId 119 | * 120 | */ 121 | public function deleteCursor($fileId) { 122 | return $this->bookmarkService->deleteCursor($fileId); 123 | } 124 | } 125 | -------------------------------------------------------------------------------- /lib/Controller/MetadataController.php: -------------------------------------------------------------------------------- 1 | metadataService = $metadataService; 33 | } 34 | 35 | 36 | /** 37 | * @brief write metadata 38 | * 39 | * @NoAdminRequired 40 | * 41 | * @param int $fileId 42 | * @param string $value 43 | * 44 | * @return array|\OCP\AppFramework\Http\JSONResponse 45 | */ 46 | public function setAll($fileId, $value) { 47 | return $this->metadataService->setAll($fileId, $value); 48 | } 49 | 50 | /** 51 | * @brief return metadata item 52 | * 53 | * @NoAdminRequired 54 | * @NoCSRFRequired 55 | * 56 | * @param int $fileId 57 | * @param string $name 58 | * 59 | * @return array|\OCP\AppFramework\Http\JSONResponse 60 | */ 61 | public function get($fileId, $name) { 62 | return $this->metadataService->get($fileId, $name); 63 | } 64 | 65 | /** 66 | * @brief write metadata item 67 | * 68 | * @NoAdminRequired 69 | * 70 | * @param int $fileId 71 | * @param string $name 72 | * @param string $value 73 | * 74 | * @return array|\OCP\AppFramework\Http\JSONResponse 75 | */ 76 | public function set($fileId, $name, $value) { 77 | return $this->metadataService->set($fileId, $name, $value); 78 | } 79 | 80 | } 81 | -------------------------------------------------------------------------------- /lib/Controller/PreferenceController.php: -------------------------------------------------------------------------------- 1 | urlGenerator = $urlGenerator; 38 | $this->preferenceService = $preferenceService; 39 | } 40 | 41 | /** 42 | * @brief return preference for $fileId 43 | * 44 | * @NoAdminRequired 45 | * @NoCSRFRequired 46 | * 47 | * @param string $scope 48 | * @param int $fileId 49 | * @param string $name if null, return all preferences for $scope + $fileId 50 | * 51 | * @return array|\OCP\AppFramework\Http\JSONResponse 52 | */ 53 | public function get($scope, $fileId, $name) { 54 | return $this->preferenceService->get($scope, $fileId, $name); 55 | } 56 | 57 | /** 58 | * @brief write preference for $fileId 59 | * 60 | * @NoAdminRequired 61 | * @NoCSRFRequired 62 | * 63 | * @param string $scope 64 | * @param int $fileId 65 | * @param string $name 66 | * @param string $value 67 | * 68 | * @return array|\OCP\AppFramework\Http\JSONResponse 69 | */ 70 | public function set($scope, $fileId, $name, $value) { 71 | return $this->preferenceService->set($scope, $fileId, $name, $value); 72 | } 73 | 74 | 75 | /** 76 | * @brief return default preference 77 | * 78 | * @NoAdminRequired 79 | * @NoCSRFRequired 80 | * 81 | * @param string $scope 82 | * @param string $name if null, return all default preferences for scope 83 | * 84 | * @return array|\OCP\AppFramework\Http\JSONResponse 85 | */ 86 | public function getDefault($scope, $name) { 87 | return $this->preferenceService->getDefault($scope, $name); 88 | } 89 | 90 | /** 91 | * @brief write default preference 92 | * 93 | * @NoAdminRequired 94 | * @NoCSRFRequired 95 | * 96 | * @param string $scope 97 | * @param string $name 98 | * @param string $value 99 | * 100 | * @return array|\OCP\AppFramework\Http\JSONResponse 101 | */ 102 | public function setDefault($scope, $name, $value) { 103 | return $this->preferenceService->setDefault($scope, $name, $value); 104 | } 105 | 106 | /** 107 | * @brief delete preference 108 | * 109 | * @param string $scope 110 | * @param int $fileId 111 | * @param string $name 112 | * 113 | */ 114 | public function delete($scope, $fileId, $name) { 115 | return $this->preferenceService->delete($scope, $fileId, $name); 116 | } 117 | 118 | /** 119 | * @brief delete default preference 120 | * 121 | * @param $scope 122 | * @param $name 123 | * 124 | */ 125 | public function deleteDefault($scope, $name) { 126 | return $this->preferenceService->deleteDefault($scope, $name); 127 | } 128 | } 129 | -------------------------------------------------------------------------------- /lib/Db/Bookmark.php: -------------------------------------------------------------------------------- 1 | $this->getId(), 28 | 'userId' => $this->getUserId(), 29 | 'fileId' => $this->getFileId(), 30 | 'type' => $this->getType(), 31 | 'name' => $this->getName(), 32 | 'value' => static::conditional_json_decode($this->getValue()), 33 | 'content' => static::conditional_json_decode($this->getContent()), 34 | 'lastModified' => $this->getLastModified() 35 | ]; 36 | } 37 | 38 | public function toService() { 39 | return [ 40 | 'name' => $this->getName(), 41 | 'type' => $this->getType(), 42 | 'value' => $this->conditional_json_decode($this->getValue()), 43 | 'content' => $this->conditional_json_decode($this->getContent()), 44 | 'lastModified' => $this->getLastModified(), 45 | ]; 46 | } 47 | } 48 | 49 | -------------------------------------------------------------------------------- /lib/Db/BookmarkMapper.php: -------------------------------------------------------------------------------- 1 | userId = $UserId; 31 | } 32 | 33 | /** 34 | * @brief get bookmarks for $fileId+$userId(+$name) 35 | * @param $fileId 36 | * @param string $name 37 | * @return array 38 | */ 39 | public function get($fileId, $name, $type=null) { 40 | $sql = "SELECT * FROM `*PREFIX*reader_bookmarks` WHERE file_id=? AND `user_id`=?"; 41 | $args = [ $fileId, $this->userId ]; 42 | if (!(null === $type)) { 43 | $sql .= " AND `type`=?"; 44 | $args[] = $type; 45 | } 46 | if (!(null === $name)) { 47 | $sql .= " AND `name`=?"; 48 | $args[] = $name; 49 | } 50 | 51 | return $this->findEntities($sql, $args); 52 | } 53 | 54 | /** 55 | * @brief write bookmark to database 56 | * 57 | * @param int $fileId 58 | * @param string $name 59 | * @param string $value 60 | * 61 | * @return Bookmark the newly created or updated bookmark 62 | */ 63 | public function set($fileId, $name, $value, $type, $content=null) { 64 | 65 | $result = $this->get($fileId, $name); 66 | 67 | if(empty($result)) { 68 | 69 | // anonymous bookmarks are named after their contents 70 | if (null === $name) { 71 | $name = $value; 72 | } 73 | 74 | // default type is "bookmark" 75 | if (null === $type) { 76 | $type = "bookmark"; 77 | } 78 | 79 | $bookmark = new Bookmark(); 80 | $bookmark->setFileId($fileId); 81 | $bookmark->setUserId($this->userId); 82 | $bookmark->setType($type); 83 | $bookmark->setName($name); 84 | $bookmark->setValue($value); 85 | $bookmark->setContent($content); 86 | 87 | $this->insert($bookmark); 88 | } else { 89 | $bookmark = $result[0]; 90 | $bookmark->setValue($value); 91 | $bookmark->setContent($content); 92 | 93 | $this->update($bookmark); 94 | } 95 | 96 | return $bookmark; 97 | } 98 | 99 | /* currently not used */ 100 | public function deleteForFileId($fileId) { 101 | $sql = "SELECT * FROM `*PREFIX*reader_bookmarks` WHERE file_id=?"; 102 | $args = [ $fileId ]; 103 | array_map( 104 | function($entity) { 105 | $this->delete($entity); 106 | }, $this->findEntities($sql, $args) 107 | ); 108 | } 109 | 110 | /* currently not used */ 111 | public function deleteForUserId($userId) { 112 | $sql = "SELECT * FROM `*PREFIX*reader_bookmarks` WHERE user_id=?"; 113 | $args = [ $userId ]; 114 | array_map( 115 | function($entity) { 116 | $this->delete($entity); 117 | }, $this->findEntities($sql, $args) 118 | ); 119 | } 120 | } 121 | 122 | -------------------------------------------------------------------------------- /lib/Db/Preference.php: -------------------------------------------------------------------------------- 1 | $this->getId(), 27 | 'scope' => $this->getScope(), 28 | 'fileId' => $this->getFileId(), 29 | 'name' => $this->getName(), 30 | 'value' => $this->conditional_json_decode($this->getValue()), 31 | 'lastModified' => $this->getLastModified(), 32 | ]; 33 | } 34 | 35 | public function toService() { 36 | return [ 37 | 'name' => $this->getName(), 38 | 'value' => $this->conditional_json_decode($this->getValue()), 39 | ]; 40 | } 41 | } 42 | 43 | -------------------------------------------------------------------------------- /lib/Db/PreferenceMapper.php: -------------------------------------------------------------------------------- 1 | userId = $UserId; 21 | } 22 | 23 | /** 24 | * @brief get preferences for $scope+$fileId+$userId(+$name) 25 | * 26 | * @param string $scope 27 | * @param int $fileId 28 | * @param string $name 29 | * @return array 30 | */ 31 | public function get($scope, $fileId, $name=null) { 32 | if(!empty($name)) { 33 | $sql = "SELECT * FROM `*PREFIX*reader_prefs` WHERE `scope`=? AND `file_id`=? AND `user_id`=? AND `name`=?"; 34 | $args = array( 35 | $scope, 36 | $fileId, 37 | $this->userId, 38 | $name); 39 | } else { 40 | $sql = "SELECT * FROM `*PREFIX*reader_prefs` WHERE `scope`=? AND `file_id`=? AND `user_id`=?"; 41 | $args = array( 42 | $scope, 43 | $fileId, 44 | $this->userId); 45 | } 46 | 47 | return $this->findEntities($sql, $args); 48 | } 49 | 50 | /** 51 | * @brief write preference to database 52 | * 53 | * @param string $scope 54 | * @param int $fileId 55 | * @param string $name 56 | * @param string $value 57 | * 58 | * @return Preference the newly created or updated preference 59 | */ 60 | public function set($scope, $fileId, $name, $value) { 61 | 62 | $result = $this->get($scope, $fileId, $name); 63 | 64 | if(empty($result)) { 65 | 66 | $preference = new Preference(); 67 | $preference->setScope($scope); 68 | $preference->setFileId($fileId); 69 | $preference->setUserId($this->userId); 70 | $preference->setName($name); 71 | $preference->setValue($value); 72 | 73 | $this->insert($preference); 74 | } else { 75 | $preference = $result[0]; 76 | $preference->setValue($value); 77 | 78 | $this->update($preference); 79 | } 80 | 81 | return $preference; 82 | } 83 | 84 | /* currently not used*/ 85 | public function deleteForFileId($fileId) { 86 | $sql = "SELECT * FROM `*PREFIX*reader_prefs` WHERE file_id=?"; 87 | $args = [ $fileId ]; 88 | array_map( 89 | function($entity) { 90 | $this->delete($entity); 91 | }, $this->findEntities($sql, $args) 92 | ); 93 | } 94 | 95 | /* currently not used*/ 96 | public function deleteForUserId($userId) { 97 | $sql = "SELECT * FROM `*PREFIX*reader_prefs` WHERE user_id=?"; 98 | $args = [ $userId ]; 99 | array_map( 100 | function($entity) { 101 | $this->delete($entity); 102 | }, $this->findEntities($sql, $args) 103 | ); 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /lib/Db/ReaderEntity.php: -------------------------------------------------------------------------------- 1 | $this->getName(), 31 | 'type' => $this->getType(), 32 | 'value' => $this->conditional_json_decode($this->getValue()), 33 | 'content' => $this->conditional_json_decode($this->getContent()), 34 | 'lastModified' => $this->getLastModified(), 35 | ]; 36 | } 37 | */ 38 | } 39 | 40 | -------------------------------------------------------------------------------- /lib/Db/ReaderMapper.php: -------------------------------------------------------------------------------- 1 | time = $time; 29 | } 30 | 31 | public function update(Entity $entity) { 32 | $entity->setLastModified($this->time->getMicroTime()); 33 | return parent::update($entity); 34 | } 35 | 36 | public function insert(Entity $entity) { 37 | $entity->setLastModified($this->time->getMicroTime()); 38 | return parent::insert($entity); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /lib/Hooks.php: -------------------------------------------------------------------------------- 1 | getRootFolder()->listen('\OC\Files', 'preDelete', function (Node $node) { 25 | $fileId = $node->getId(); 26 | $connection = \OC::$server->getDatabaseConnection(); 27 | self::deleteFile($connection, $fileId); 28 | }); 29 | \OC::$server->getUserManager()->listen('\OC\User', 'preDelete', function (User $user) { 30 | $userId = $user->getUID(); 31 | $connection = \OC::$server->getDatabaseConnection(); 32 | self::deleteUser($connection, $userId); 33 | }); 34 | } 35 | 36 | public static function announce_settings(array $settings) { 37 | // Nextcloud encodes this as JSON, Owncloud does not (yet) (#75) 38 | // TODO: rmeove this when Owncloud starts encoding oc_appconfig as JSON just like it already encodes most other properties 39 | $isJson = self::isJson($settings['array']['oc_appconfig']); 40 | $array = ($isJson) ? json_decode($settings['array']['oc_appconfig'], true) : $settings['array']['oc_appconfig']; 41 | $array['filesReader']['enableEpub'] = Config::get('epub_enable', 'true'); 42 | $array['filesReader']['enablePdf'] = Config::get('pdf_enable', 'true'); 43 | $array['filesReader']['enableCbx'] = Config::get('cbx_enable', 'true'); 44 | $settings['array']['oc_appconfig'] = ($isJson) ? json_encode($array) : $array; 45 | } 46 | 47 | protected static function deleteFile(IDBConnection $connection, $fileId) { 48 | $queryBuilder = $connection->getQueryBuilder(); 49 | $queryBuilder->delete('reader_bookmarks')->where('file_id = file_id')->setParameter('file_id', $fileId); 50 | $queryBuilder->execute(); 51 | 52 | $queryBuilder = $connection->getQueryBuilder(); 53 | $queryBuilder->delete('reader_prefs')->where('file_id = file_id')->setParameter('file_id', $fileId); 54 | $queryBuilder->execute(); 55 | } 56 | 57 | protected static function deleteUser(IDBConnection $connection, $userId) { 58 | $queryBuilder = $connection->getQueryBuilder(); 59 | $queryBuilder->delete('reader_bookmarks')->where('user_id = user_id')->setParameter('user_id', $userId); 60 | $queryBuilder->execute(); 61 | 62 | $queryBuilder = $connection->getQueryBuilder(); 63 | $queryBuilder->delete('reader_prefs')->where('user_id = user_id')->setParameter('user_id', $userId); 64 | $queryBuilder->execute(); 65 | } 66 | 67 | private static function isJson($string) { 68 | return is_string($string) && is_array(json_decode($string, true)) && (json_last_error() == JSON_ERROR_NONE) ? true : false; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /lib/Migration/Version010404Date20201030180941.php: -------------------------------------------------------------------------------- 1 | hasTable('reader_bookmarks')) { 36 | $table = $schema->createTable('reader_bookmarks'); 37 | $table->addColumn('id', 'bigint', [ 38 | 'autoincrement' => true, 39 | 'notnull' => true, 40 | 'length' => 8, 41 | 'unsigned' => true, 42 | ]); 43 | // user ID, maps bookmark to NC/OC user 44 | $table->addColumn('user_id', 'string', [ 45 | 'notnull' => true, 46 | 'length' => 64, 47 | 'default' => '', 48 | ]); 49 | // file ID, maps to NC/OC file ID 50 | $table->addColumn('file_id', 'bigint', [ 51 | 'notnull' => true, 52 | 'length' => 11, 53 | 'unsigned' => true, 54 | ]); 55 | // type (bookmark, annotation, etc) 56 | $table->addColumn('type', 'string', [ 57 | 'notnull' => true, 58 | 'length' => 32, 59 | 'default' => '', 60 | ]); 61 | $table->addColumn('name', 'string', [ 62 | 'notnull' => true, 63 | 'length' => 512, 64 | 'default' => '', 65 | ]); 66 | $table->addColumn('value', 'string', [ 67 | 'notnull' => true, 68 | 'length' => 512, 69 | 'default' => '', 70 | ]); 71 | $table->addColumn('content', 'string', [ 72 | 'notnull' => false, 73 | 'length' => 4096, 74 | ]); 75 | $table->addColumn('last_modified', 'bigint', [ 76 | 'notnull' => false, 77 | 'length' => 8, 78 | 'default' => 0, 79 | 'unsigned' => true, 80 | ]); 81 | $table->setPrimaryKey(['id']); 82 | $table->addIndex(['file_id'], 'reader_bookmarks_file_id_index'); 83 | $table->addIndex(['user_id'], 'reader_bookmarks_user_id_index'); 84 | $table->addIndex(['name'], 'reader_bookmarks_name_index'); 85 | } 86 | 87 | if (!$schema->hasTable('reader_prefs')) { 88 | $table = $schema->createTable('reader_prefs'); 89 | $table->addColumn('id', 'bigint', [ 90 | 'autoincrement' => true, 91 | 'notnull' => true, 92 | 'length' => 8, 93 | 'unsigned' => true, 94 | ]); 95 | // user ID, maps preference to NC/OC user 96 | $table->addColumn('user_id', 'string', [ 97 | 'notnull' => true, 98 | 'length' => 64, 99 | 'default' => '', 100 | ]); 101 | // file ID, maps to NC/OC file ID 102 | $table->addColumn('file_id', 'bigint', [ 103 | 'notnull' => true, 104 | 'length' => 11, 105 | 'unsigned' => true, 106 | ]); 107 | $table->addColumn('scope', 'string', [ 108 | 'notnull' => true, 109 | 'length' => 32, 110 | 'default' => '', 111 | ]); 112 | $table->addColumn('name', 'string', [ 113 | 'notnull' => true, 114 | 'length' => 128, 115 | 'default' => '', 116 | ]); 117 | $table->addColumn('value', 'string', [ 118 | 'notnull' => true, 119 | 'length' => 4096, 120 | 'default' => '', 121 | ]); 122 | $table->addColumn('last_modified', 'bigint', [ 123 | 'notnull' => false, 124 | 'length' => 8, 125 | 'default' => 0, 126 | 'unsigned' => true, 127 | ]); 128 | $table->setPrimaryKey(['id']); 129 | $table->addIndex(['file_id'], 'reader_prefs_file_id_index'); 130 | $table->addIndex(['user_id'], 'reader_prefs_user_id_index'); 131 | $table->addIndex(['scope'], 'reader_prefs_scope_index'); 132 | } 133 | return $schema; 134 | } 135 | 136 | /** 137 | * @param IOutput $output 138 | * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` 139 | * @param array $options 140 | */ 141 | public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options) { 142 | } 143 | } 144 | -------------------------------------------------------------------------------- /lib/Service/BookmarkService.php: -------------------------------------------------------------------------------- 1 | bookmarkMapper = $bookmarkMapper; 28 | $this->userId = $UserId; 29 | } 30 | 31 | /** 32 | * @brief get bookmark 33 | * 34 | * bookmark type is format-dependent, eg CFI for epub, page number for CBR/CBZ, etc 35 | * 36 | * @param int $fileId 37 | * @param string $name 38 | * 39 | * @return array 40 | */ 41 | public function get($fileId, $name=null, $type=null) { 42 | $result = $this->bookmarkMapper->get($fileId, $name, $type); 43 | return array_map( 44 | function($entity) { 45 | return $entity->toService(); 46 | }, $result); 47 | } 48 | 49 | /** 50 | * @brief write bookmark 51 | * 52 | * position type is format-dependent, eg CFI for epub, page number for CBR/CBZ, etc 53 | * 54 | * @param int $fileId 55 | * @param string $name 56 | * @param string $value 57 | * 58 | * @return array 59 | */ 60 | public function set($fileId, $name, $value, $type=null, $content=null) { 61 | return $this->bookmarkMapper->set($fileId, $name, $value, $type, $content); 62 | } 63 | 64 | /** 65 | * @brief get cursor (current position in book) 66 | * 67 | * @param int $fileId 68 | * 69 | * @return array 70 | */ 71 | public function getCursor($fileId) { 72 | $result = $this->get($fileId, static::CURSOR); 73 | if (count($result) === 1) { 74 | return $result[0]; 75 | } 76 | } 77 | 78 | /** 79 | * @brief set cursor (current position in book) 80 | * 81 | * @param int $fileId 82 | * @param string $value 83 | * 84 | * @return array 85 | */ 86 | public function setCursor($fileId, $value) { 87 | return $this->bookmarkMapper->set($fileId, static::CURSOR, $value, static::bookmark_type); 88 | } 89 | 90 | /** 91 | * @brief delete bookmark 92 | * 93 | * @param int $fileId 94 | * @param string $name 95 | * 96 | */ 97 | public function delete($fileId, $name, $type=null) { 98 | foreach ($this->bookmarkMapper->get($fileId, $name, $type) as $bookmark) { 99 | $this->bookmarkMapper->delete($bookmark); 100 | } 101 | } 102 | 103 | /** 104 | * @brief delete cursor 105 | * 106 | * @param int $fileId 107 | * 108 | */ 109 | public function deleteCursor($fileId) { 110 | $this->delete($fileId, static::CURSOR, static::bookmark_type); 111 | } 112 | } 113 | 114 | -------------------------------------------------------------------------------- /lib/Service/MetadataService.php: -------------------------------------------------------------------------------- 1 | appManager = $appManager; 24 | } 25 | 26 | /** 27 | * @brief get metadata item(s) 28 | * 29 | * @param int $fileId 30 | * @param string $name 31 | * 32 | * @return array 33 | */ 34 | public function get($fileId, $name=null) { 35 | if ($this->appManager->isInstalled('files_opds')) { 36 | if ($meta = \OCA\Files_Opds\Meta::get($fileId)) { 37 | if (!empty($name) && array_key_exists($name, $meta)) { 38 | return [$item => $meta[$name]]; 39 | } else { 40 | return $meta; 41 | } 42 | } 43 | } 44 | 45 | return []; 46 | } 47 | 48 | /** 49 | * @brief write metadata to database 50 | * 51 | * @param int $fileId 52 | * @param array $value 53 | * 54 | * @return array 55 | */ 56 | public function setAll($fileId, $value) { 57 | // no-op for now 58 | return []; 59 | } 60 | 61 | /** 62 | * @brief write metadata item to database 63 | * 64 | * @param int $fileId 65 | * @param string $name 66 | * @param array $value 67 | * 68 | * @return array 69 | */ 70 | public function set($fileId, $name, $value) { 71 | // no-op for now 72 | return []; 73 | } 74 | } 75 | 76 | -------------------------------------------------------------------------------- /lib/Service/PreferenceService.php: -------------------------------------------------------------------------------- 1 | preferenceMapper = $preferenceMapper; 29 | } 30 | 31 | /** 32 | * @brief get preference 33 | * 34 | * scope identifies preference source, i.e. which renderer the preference applies to 35 | * preference type is format-dependent, eg CFI for epub, page number for CBR/CBZ, etc 36 | * 37 | * @param string $scope 38 | * @param int $fileId 39 | * @param string $name 40 | * 41 | * @return array 42 | */ 43 | public function get($scope, $fileId, $name=null) { 44 | $result = $this->preferenceMapper->get($scope, $fileId, $name); 45 | return array_map( 46 | function($entity) { 47 | return $entity->toService(); 48 | }, $result); 49 | } 50 | 51 | /** 52 | * @brief write preference 53 | * 54 | * scope identifies preference source, i.e. which renderer the preference applies to 55 | * position type is format-dependent, eg CFI for epub, page number for CBR/CBZ, etc 56 | * 57 | * @param string $scope 58 | * @param int $fileId 59 | * @param string $name 60 | * @param string $value 61 | * 62 | * @return array 63 | */ 64 | public function set($scope, $fileId, $name, $value) { 65 | return $this->preferenceMapper->set($scope, $fileId, $name, $value); 66 | } 67 | 68 | /** 69 | * @brief get default preference 70 | * 71 | * @param string $scope 72 | * @param string $name 73 | * 74 | * @return array 75 | */ 76 | public function getDefault($scope, $name=null) { 77 | return $this->get($scope, static::DEFAULTS, $name); 78 | } 79 | 80 | /** 81 | * @brief set default preference 82 | * 83 | * @param string $scope 84 | * @param string $name 85 | * @param string $value 86 | * 87 | * @return array 88 | */ 89 | public function setDefault($scope, $name, $value) { 90 | return $this->preferenceMapper->set($scope, static::DEFAULTS, $name, $value); 91 | } 92 | 93 | /** 94 | * @brief delete preference 95 | * 96 | * @param string $scope 97 | * @param int $fileId 98 | * @param string $name 99 | * 100 | */ 101 | public function delete($scope, $fileId, $name) { 102 | foreach($this->preferenceMapper->get($scope, $fileId, $name) as $preference) { 103 | $this->preferenceMapper->delete($preference); 104 | } 105 | } 106 | 107 | /** 108 | * @brief delete default 109 | * 110 | * @param string $scope 111 | * @param string $name 112 | * 113 | */ 114 | public function deleteDefault($scope, $name) { 115 | $this->delete($scope, static::DEFAULTS, $name); 116 | } 117 | } 118 | -------------------------------------------------------------------------------- /lib/Service/Service.php: -------------------------------------------------------------------------------- 1 | mapper = $mapper; 21 | } 22 | } 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /lib/Utility/Time.php: -------------------------------------------------------------------------------- 1 | getConfig()->getUserValue(\OC_User::getUser(), 'epubreader', $key, $default); 29 | } 30 | 31 | /** 32 | * @brief set user config value 33 | * 34 | * @param string $key key for value to change 35 | * @param string $value value to use 36 | * @return bool success 37 | */ 38 | public static function set($key, $value) { 39 | return \OC::$server->getConfig()->setUserValue(\OC_User::getUser(), 'epubreader', $key, $value); 40 | } 41 | 42 | /** 43 | * @brief get app config value 44 | * 45 | * @param string $key value to retrieve 46 | * @param string $default default value to use 47 | * @return string retrieved value or default 48 | */ 49 | public static function getApp($key, $default) { 50 | return \OC::$server->getConfig()->getAppValue('epubreader', $key, $default); 51 | } 52 | 53 | /** 54 | * @brief set app config value 55 | * 56 | * @param string $key key for value to change 57 | * @param string $value value to use 58 | * @return bool success 59 | */ 60 | public static function setApp($key, $value) { 61 | return \OC::$server->getConfig()->setAppValue('epubreader', $key, $value); 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /personal.php: -------------------------------------------------------------------------------- 1 | getL10N('epubreader'); 16 | 17 | $tmpl = new \OCP\Template('epubreader', 'settings-personal'); 18 | $EpubEnable = Config::get('epub_enable', 'true'); 19 | $PdfEnable = Config::get('pdf_enable', 'true'); 20 | $CbxEnable = Config::get('cbx_enable', 'true'); 21 | $tmpl->assign('EpubEnable', $EpubEnable); 22 | $tmpl->assign('PdfEnable', $PdfEnable); 23 | $tmpl->assign('CbxEnable', $CbxEnable); 24 | 25 | return $tmpl->fetchPage(); 26 | -------------------------------------------------------------------------------- /screenshots/Screenshot_2014-09-29-20-21-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/Screenshot_2014-09-29-20-21-50.png -------------------------------------------------------------------------------- /screenshots/Screenshot_2014-10-02-19-16-18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/Screenshot_2014-10-02-19-16-18.png -------------------------------------------------------------------------------- /screenshots/Screenshot_2017-03-15_195840_593917640.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/Screenshot_2017-03-15_195840_593917640.png -------------------------------------------------------------------------------- /screenshots/Screenshot_2017-03-15_200124_360946567.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/Screenshot_2017-03-15_200124_360946567.png -------------------------------------------------------------------------------- /screenshots/epubreader-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/epubreader-1.png -------------------------------------------------------------------------------- /screenshots/epubreader-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/epubreader-2.png -------------------------------------------------------------------------------- /screenshots/epubreader-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/epubreader-3.png -------------------------------------------------------------------------------- /screenshots/epubreader_PDF_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/epubreader_PDF_001.png -------------------------------------------------------------------------------- /screenshots/epubreader_PDF_002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/epubreader_PDF_002.png -------------------------------------------------------------------------------- /screenshots/epubreader_PDF_003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/epubreader_PDF_003.png -------------------------------------------------------------------------------- /screenshots/epubreader_PDF_004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/epubreader_PDF_004.png -------------------------------------------------------------------------------- /screenshots/epubreader_PDF_005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/epubreader_PDF_005.png -------------------------------------------------------------------------------- /screenshots/epubreader_PDF_006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/epubreader_PDF_006.png -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-21-30.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-21-30.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-21-37.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-21-37.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-21-39.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-21-39.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-21-40.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-21-40.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-21-41.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-21-41.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-21-43.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-21-43.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-21-49.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-21-49.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-21-51.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-21-51.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-21-52.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-21-52.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-21-53.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-21-53.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-21-54.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-21-54.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-21-56.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-21-56.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-21-57.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-21-57.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-21-58.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-21-58.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-21-59.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-21-59.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-00.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-00.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-01.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-02.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-03.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-04.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-05.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-06.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-08.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-09.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-10.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-11.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-12.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-13.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-14.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-15.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-16.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-17.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-18.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-19.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-20.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-21.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-21.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-22.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-22.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-23.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-23.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-24.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-24.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-26.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-26.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-27.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-27.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_17-22-28.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_17-22-28.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_18-28-36.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_18-28-36.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_18-28-37.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_18-28-37.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_18-28-43.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_18-28-43.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_18-28-46.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_18-28-46.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_18-28-49.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_18-28-49.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_18-28-52.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_18-28-52.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_18-28-54.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_18-28-54.jpg -------------------------------------------------------------------------------- /screenshots/photo_2017-03-15_18-28-56.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/screenshots/photo_2017-03-15_18-28-56.jpg -------------------------------------------------------------------------------- /templates/settings-personal.php: -------------------------------------------------------------------------------- 1 | 15 | 16 |
17 |

t('Reader'));?>

 
18 |

t('Select file types for which Reader should be the default viewer.')); ?>

19 | 20 |

21 | /> 23 | 26 |

27 | 28 |

29 | /> 31 |
34 |

35 |

36 | /> 38 |
41 |

42 |
43 | -------------------------------------------------------------------------------- /vendor/bartaz/jquery.highlight.js: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery Highlight plugin 3 | * 4 | * Based on highlight v3 by Johann Burkard 5 | * http://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html 6 | * 7 | * Code a little bit refactored and cleaned (in my humble opinion). 8 | * Most important changes: 9 | * - has an option to highlight only entire words (wordsOnly - false by default), 10 | * - has an option to be case sensitive (caseSensitive - false by default) 11 | * - highlight element tag and class names can be specified in options 12 | * 13 | * Usage: 14 | * // wrap every occurrance of text 'lorem' in content 15 | * // with (default options) 16 | * $('#content').highlight('lorem'); 17 | * 18 | * // search for and highlight more terms at once 19 | * // so you can save some time on traversing DOM 20 | * $('#content').highlight(['lorem', 'ipsum']); 21 | * $('#content').highlight('lorem ipsum'); 22 | * 23 | * // search only for entire word 'lorem' 24 | * $('#content').highlight('lorem', { wordsOnly: true }); 25 | * 26 | * // don't ignore case during search of term 'lorem' 27 | * $('#content').highlight('lorem', { caseSensitive: true }); 28 | * 29 | * // wrap every occurrance of term 'ipsum' in content 30 | * // with 31 | * $('#content').highlight('ipsum', { element: 'em', className: 'important' }); 32 | * 33 | * // remove default highlight 34 | * $('#content').unhighlight(); 35 | * 36 | * // remove custom highlight 37 | * $('#content').unhighlight({ element: 'em', className: 'important' }); 38 | * 39 | * 40 | * Copyright (c) 2009 Bartek Szopka 41 | * 42 | * Licensed under MIT license. 43 | * 44 | */ 45 | 46 | jQuery.extend({ 47 | highlight: function (node, re, nodeName, className) { 48 | if (node.nodeType === 3) { 49 | var match = node.data.match(re); 50 | if (match) { 51 | var highlight = document.createElement(nodeName || 'span'); 52 | highlight.className = className || 'highlight'; 53 | var wordNode = node.splitText(match.index); 54 | wordNode.splitText(match[0].length); 55 | var wordClone = wordNode.cloneNode(true); 56 | highlight.appendChild(wordClone); 57 | wordNode.parentNode.replaceChild(highlight, wordNode); 58 | return 1; //skip added node in parent 59 | } 60 | } else if ((node.nodeType === 1 && node.childNodes) && // only element nodes that have children 61 | !/(script|style)/i.test(node.tagName) && // ignore script and style nodes 62 | !(node.tagName === nodeName.toUpperCase() && node.className === className)) { // skip if already highlighted 63 | for (var i = 0; i < node.childNodes.length; i++) { 64 | i += jQuery.highlight(node.childNodes[i], re, nodeName, className); 65 | } 66 | } 67 | return 0; 68 | } 69 | }); 70 | 71 | jQuery.fn.unhighlight = function (options) { 72 | var settings = { className: 'highlight', element: 'span' }; 73 | jQuery.extend(settings, options); 74 | 75 | return this.find(settings.element + "." + settings.className).each(function () { 76 | var parent = this.parentNode; 77 | parent.replaceChild(this.firstChild, this); 78 | parent.normalize(); 79 | }).end(); 80 | }; 81 | 82 | jQuery.fn.highlight = function (words, options) { 83 | var settings = { className: 'highlight', element: 'span', caseSensitive: false, wordsOnly: false }; 84 | jQuery.extend(settings, options); 85 | 86 | if (words.constructor === String) { 87 | words = [words]; 88 | } 89 | words = jQuery.grep(words, function(word, i){ 90 | return word != ''; 91 | }); 92 | words = jQuery.map(words, function(word, i) { 93 | return word.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); 94 | }); 95 | if (words.length == 0) { return this; }; 96 | 97 | var flag = settings.caseSensitive ? "" : "i"; 98 | var pattern = "(" + words.join("|") + ")"; 99 | if (settings.wordsOnly) { 100 | pattern = "\\b" + pattern + "\\b"; 101 | } 102 | var re = new RegExp(pattern, flag); 103 | 104 | return this.each(function () { 105 | jQuery.highlight(this, re, settings.element, settings.className); 106 | }); 107 | }; 108 | 109 | -------------------------------------------------------------------------------- /vendor/bitjs/io/bytebuffer.js: -------------------------------------------------------------------------------- 1 | /* 2 | * bytestream.js 3 | * 4 | * Provides a writer for bytes. 5 | * 6 | * Licensed under the MIT License 7 | * 8 | * Copyright(c) 2011 Google Inc. 9 | * Copyright(c) 2011 antimatter15 10 | */ 11 | 12 | var bitjs = bitjs || {}; 13 | bitjs.io = bitjs.io || {}; 14 | 15 | 16 | /** 17 | * A write-only Byte buffer which uses a Uint8 Typed Array as a backing store. 18 | */ 19 | bitjs.io.ByteBuffer = class { 20 | /** 21 | * @param {number} numBytes The number of bytes to allocate. 22 | */ 23 | constructor(numBytes) { 24 | if (typeof numBytes != typeof 1 || numBytes <= 0) { 25 | throw "Error! ByteBuffer initialized with '" + numBytes + "'"; 26 | } 27 | this.data = new Uint8Array(numBytes); 28 | this.ptr = 0; 29 | } 30 | 31 | 32 | /** 33 | * @param {number} b The byte to insert. 34 | */ 35 | insertByte(b) { 36 | // TODO: throw if byte is invalid? 37 | this.data[this.ptr++] = b; 38 | } 39 | 40 | /** 41 | * @param {Array.|Uint8Array|Int8Array} bytes The bytes to insert. 42 | */ 43 | insertBytes(bytes) { 44 | // TODO: throw if bytes is invalid? 45 | this.data.set(bytes, this.ptr); 46 | this.ptr += bytes.length; 47 | } 48 | 49 | /** 50 | * Writes an unsigned number into the next n bytes. If the number is too large 51 | * to fit into n bytes or is negative, an error is thrown. 52 | * @param {number} num The unsigned number to write. 53 | * @param {number} numBytes The number of bytes to write the number into. 54 | */ 55 | writeNumber(num, numBytes) { 56 | if (numBytes < 1) { 57 | throw 'Trying to write into too few bytes: ' + numBytes; 58 | } 59 | if (num < 0) { 60 | throw 'Trying to write a negative number (' + num + 61 | ') as an unsigned number to an ArrayBuffer'; 62 | } 63 | if (num > (Math.pow(2, numBytes * 8) - 1)) { 64 | throw 'Trying to write ' + num + ' into only ' + numBytes + ' bytes'; 65 | } 66 | 67 | // Roll 8-bits at a time into an array of bytes. 68 | const bytes = []; 69 | while (numBytes-- > 0) { 70 | const eightBits = num & 255; 71 | bytes.push(eightBits); 72 | num >>= 8; 73 | } 74 | 75 | this.insertBytes(bytes); 76 | } 77 | 78 | /** 79 | * Writes a signed number into the next n bytes. If the number is too large 80 | * to fit into n bytes, an error is thrown. 81 | * @param {number} num The signed number to write. 82 | * @param {number} numBytes The number of bytes to write the number into. 83 | */ 84 | writeSignedNumber(num, numBytes) { 85 | if (numBytes < 1) { 86 | throw 'Trying to write into too few bytes: ' + numBytes; 87 | } 88 | 89 | const HALF = Math.pow(2, (numBytes * 8) - 1); 90 | if (num >= HALF || num < -HALF) { 91 | throw 'Trying to write ' + num + ' into only ' + numBytes + ' bytes'; 92 | } 93 | 94 | // Roll 8-bits at a time into an array of bytes. 95 | const bytes = []; 96 | while (numBytes-- > 0) { 97 | const eightBits = num & 255; 98 | bytes.push(eightBits); 99 | num >>= 8; 100 | } 101 | 102 | this.insertBytes(bytes); 103 | } 104 | 105 | /** 106 | * @param {string} str The ASCII string to write. 107 | */ 108 | writeASCIIString(str) { 109 | for (let i = 0; i < str.length; ++i) { 110 | const curByte = str.charCodeAt(i); 111 | if (curByte < 0 || curByte > 255) { 112 | throw 'Trying to write a non-ASCII string!'; 113 | } 114 | this.insertByte(curByte); 115 | } 116 | }; 117 | } 118 | -------------------------------------------------------------------------------- /vendor/cbrjs/css/idevice.css: -------------------------------------------------------------------------------- 1 | .view { 2 | overflow-y: scroll; 3 | -webkit-overflow-scrolling: touch; 4 | } 5 | -------------------------------------------------------------------------------- /vendor/cbrjs/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/vendor/cbrjs/img/loading.gif -------------------------------------------------------------------------------- /vendor/epubjs/css/annotations.css: -------------------------------------------------------------------------------- 1 | .ui-loader { 2 | display: none; 3 | } 4 | 5 | .annotator-hl { 6 | box-shadow: none !important; 7 | cursor: pointer !important; 8 | } -------------------------------------------------------------------------------- /vendor/epubjs/css/font/fontello.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/vendor/epubjs/css/font/fontello.eot -------------------------------------------------------------------------------- /vendor/epubjs/css/font/fontello.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/vendor/epubjs/css/font/fontello.ttf -------------------------------------------------------------------------------- /vendor/epubjs/css/font/fontello.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/vendor/epubjs/css/font/fontello.woff -------------------------------------------------------------------------------- /vendor/epubjs/css/idevice.css: -------------------------------------------------------------------------------- 1 | .notes, 2 | .search-results, 3 | .view { 4 | overflow-y: scroll; 5 | -webkit-overflow-scrolling: touch; 6 | } 7 | 8 | .search-results { 9 | height: calc(100% - 5em); 10 | } 11 | 12 | .notes { 13 | height: calc(100% - 9em); 14 | } 15 | -------------------------------------------------------------------------------- /vendor/epubjs/css/popup.css: -------------------------------------------------------------------------------- 1 | /* http://davidwalsh.name/css-tooltips */ 2 | /* base CSS element */ 3 | .popup { 4 | background: #eee; 5 | border: 1px solid #ccc; 6 | padding: 10px; 7 | border-radius: 8px; 8 | box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); 9 | position: fixed; 10 | max-width: 300px; 11 | font-size: 12px; 12 | 13 | display: none; 14 | margin-left: 2px; 15 | 16 | margin-top: 30px; 17 | } 18 | 19 | .popup.above { 20 | margin-top: -10px; 21 | } 22 | 23 | .popup.left { 24 | margin-left: -20px; 25 | } 26 | 27 | .popup.right { 28 | margin-left: 40px; 29 | } 30 | 31 | .pop_content { 32 | max-height: 225px; 33 | overflow-y: auto; 34 | } 35 | 36 | .pop_content > p { 37 | margin-top: 0; 38 | } 39 | 40 | /* below */ 41 | .popup:before { 42 | position: absolute; 43 | display: inline-block; 44 | border-bottom: 10px solid #eee; 45 | border-right: 10px solid transparent; 46 | border-left: 10px solid transparent; 47 | border-bottom-color: rgba(0, 0, 0, 0.2); 48 | left: 50%; 49 | top: -10px; 50 | margin-left: -6px; 51 | content: ''; 52 | } 53 | 54 | .popup:after { 55 | position: absolute; 56 | display: inline-block; 57 | border-bottom: 9px solid #eee; 58 | border-right: 9px solid transparent; 59 | border-left: 9px solid transparent; 60 | left: 50%; 61 | top: -9px; 62 | margin-left: -5px; 63 | content: ''; 64 | } 65 | 66 | /* above */ 67 | .popup.above:before { 68 | border-bottom: none; 69 | border-top: 10px solid #eee; 70 | border-top-color: rgba(0, 0, 0, 0.2); 71 | top: 100%; 72 | } 73 | 74 | .popup.above:after { 75 | border-bottom: none; 76 | border-top: 9px solid #eee; 77 | top: 100%; 78 | } 79 | 80 | .popup.left:before, 81 | .popup.left:after 82 | { 83 | left: 20px; 84 | } 85 | 86 | .popup.right:before, 87 | .popup.right:after 88 | { 89 | left: auto; 90 | right: 20px; 91 | } 92 | 93 | 94 | .popup.show, .popup.on { 95 | display: block; 96 | } 97 | 98 | .note-marker, 99 | .EPUBJS-CFI-MARKER, 100 | .EPUBJS-CFI-SPLIT { 101 | vertical-align: super; 102 | font-size: 0.75em; 103 | line-height: 1em; 104 | padding: 0.1em; 105 | background-color: #fffa96; 106 | border-radius: 5px; 107 | cursor: pointer; 108 | } 109 | 110 | -------------------------------------------------------------------------------- /vendor/epubjs/hooks.min.js: -------------------------------------------------------------------------------- 1 | EPUBJS.Hooks.register("beforeChapterDisplay").endnotes=function(a,b){var c=b.contents.querySelectorAll("a[href]"),d=Array.prototype.slice.call(c),e="epub:type",f="noteref",g=(parent.location.origin+parent.location.pathname,EPUBJS.basePath+EPUBJS.cssPath||folder),h={};EPUBJS.core.addCss(g+"popup.css",!1,b.render.document.head),d.forEach(function(a){function c(){var c,e,f=b.height,j=b.width,o=225;n||(c=k.cloneNode(!0),n=c.querySelector("p")),h[id]||(h[id]=document.createElement("div"),h[id].setAttribute("class","popup"),pop_content=document.createElement("div"),h[id].appendChild(pop_content),pop_content.appendChild(n),pop_content.setAttribute("class","pop_content"),b.render.document.body.appendChild(h[id]),h[id].addEventListener("mouseover",d,!1),h[id].addEventListener("mouseout",g,!1),b.on("renderer:pageChanged",i,this),b.on("renderer:pageChanged",g,this)),c=h[id],e=a.getBoundingClientRect(),l=e.left,m=e.top,c.classList.add("show"),popRect=c.getBoundingClientRect(),c.style.left=l-popRect.width/2+"px",c.style.top=m+"px",o>f/2.5&&(o=f/2.5,pop_content.style.maxHeight=o+"px"),popRect.height+m>=f-25?(c.style.top=m-popRect.height+"px",c.classList.add("above")):c.classList.remove("above"),l-popRect.width<=0?(c.style.left=l+"px",c.classList.add("left")):c.classList.remove("left"),l+popRect.width/2>=j?(c.style.left=l-300+"px",popRect=c.getBoundingClientRect(),c.style.left=l-popRect.width+"px",popRect.height+m>=f-25?(c.style.top=m-popRect.height+"px",c.classList.add("above")):c.classList.remove("above"),c.classList.add("right")):c.classList.remove("right")}function d(){h[id].classList.add("on")}function g(){h[id].classList.remove("on")}function i(){setTimeout(function(){h[id].classList.remove("show")},100)}var j,k,l,m,n,o=a.getAttribute(e);o==f&&(j=a.getAttribute("href"),id=j.replace("#",""),k=b.render.document.getElementById(id),a.addEventListener("mouseover",c,!1),a.addEventListener("mouseout",i,!1))}),a&&a()},EPUBJS.Hooks.register("beforeChapterDisplay").mathml=function(a,b){if(b.currentChapter.manifestProperties.indexOf("mathml")!==-1){b.render.iframe.contentWindow.mathmlCallback=a;var c=document.createElement("script");c.type="text/x-mathjax-config",c.innerHTML=' MathJax.Hub.Register.StartupHook("End",function () { window.mathmlCallback(); }); MathJax.Hub.Config({jax: ["input/TeX","input/MathML","output/SVG"],extensions: ["tex2jax.js","mml2jax.js","MathEvents.js"],TeX: {extensions: ["noErrors.js","noUndefined.js","autoload-all.js"]},MathMenu: {showRenderer: false},menuSettings: {zoom: "Click"},messageStyle: "none"}); ',b.doc.body.appendChild(c),EPUBJS.core.addScript("http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML",null,b.doc.head)}else a&&a()},EPUBJS.Hooks.register("beforeChapterDisplay").smartimages=function(a,b){var c=b.contents.querySelectorAll("img"),d=Array.prototype.slice.call(c),e=b.height;return"reflowable"!=b.layoutSettings.layout?void a():(d.forEach(function(a){var c=function(){var c,d=a.getBoundingClientRect(),f=d.height,g=d.top,h=a.getAttribute("data-height"),i=h||f,j=Number(getComputedStyle(a,"").fontSize.match(/(\d*(\.\d*)?)px/)[1]),k=j?j/2:0;e=b.contents.clientHeight,g<0&&(g=0),i+g>=e?(ge&&(a.style.maxHeight=e+"px",a.style.width="auto",d=a.getBoundingClientRect(),i=d.height),a.style.display="block",a.style.WebkitColumnBreakBefore="always",a.style.breakBefore="column"),a.setAttribute("data-height",c)):(a.style.removeProperty("max-height"),a.style.removeProperty("margin-top"))},d=function(){b.off("renderer:resized",c),b.off("renderer:chapterUnload",this)};a.addEventListener("load",c,!1),b.on("renderer:resized",c),b.on("renderer:chapterUnload",d),c()}),void(a&&a()))},EPUBJS.Hooks.register("beforeChapterDisplay").transculsions=function(a,b){var c=b.contents.querySelectorAll("[transclusion]"),d=Array.prototype.slice.call(c);d.forEach(function(a){function c(){j=g,k=h,j>chapter.colWidth&&(d=chapter.colWidth/j,j=chapter.colWidth,k*=d),f.width=j,f.height=k}var d,e=a.getAttribute("ref"),f=document.createElement("iframe"),g=a.getAttribute("width"),h=a.getAttribute("height"),i=a.parentNode,j=g,k=h;c(),b.listenUntil("renderer:resized","renderer:chapterUnloaded",c),f.src=e,i.replaceChild(f,a)}),a&&a()}; -------------------------------------------------------------------------------- /vendor/epubjs/hooks/default/smartimages.js: -------------------------------------------------------------------------------- 1 | EPUBJS.Hooks.register("beforeChapterDisplay").smartimages = function(callback, renderer){ 2 | var images = renderer.contents.querySelectorAll('img'), 3 | items = Array.prototype.slice.call(images), 4 | iheight = renderer.height,//chapter.bodyEl.clientHeight,//chapter.doc.body.getBoundingClientRect().height, 5 | oheight; 6 | 7 | if(renderer.layoutSettings.layout != "reflowable") { 8 | callback(); 9 | return; //-- Only adjust images for reflowable text 10 | } 11 | 12 | items.forEach(function(item){ 13 | 14 | var size = function() { 15 | var itemRect = item.getBoundingClientRect(), 16 | rectHeight = itemRect.height, 17 | top = itemRect.top, 18 | oHeight = item.getAttribute('data-height'), 19 | height = oHeight || rectHeight, 20 | newHeight, 21 | fontSize = Number(getComputedStyle(item, "").fontSize.match(/(\d*(\.\d*)?)px/)[1]), 22 | fontAdjust = fontSize ? fontSize / 2 : 0; 23 | 24 | iheight = renderer.contents.clientHeight; 25 | if(top < 0) top = 0; 26 | 27 | if(height + top >= iheight) { 28 | 29 | if(top < iheight/2) { 30 | // Remove top and half font-size from height to keep container from overflowing 31 | newHeight = iheight - top - fontAdjust; 32 | item.style.maxHeight = newHeight + "px"; 33 | item.style.width= "auto"; 34 | }else{ 35 | if(height > iheight) { 36 | item.style.maxHeight = iheight + "px"; 37 | item.style.width= "auto"; 38 | itemRect = item.getBoundingClientRect(); 39 | height = itemRect.height; 40 | } 41 | item.style.display = "block"; 42 | item.style["WebkitColumnBreakBefore"] = "always"; 43 | item.style["breakBefore"] = "column"; 44 | 45 | } 46 | 47 | item.setAttribute('data-height', newHeight); 48 | 49 | }else{ 50 | item.style.removeProperty('max-height'); 51 | item.style.removeProperty('margin-top'); 52 | } 53 | } 54 | 55 | var unloaded = function(){ 56 | // item.removeEventListener('load', size); // crashes in IE 57 | renderer.off("renderer:resized", size); 58 | renderer.off("renderer:chapterUnload", this); 59 | }; 60 | 61 | item.addEventListener('load', size, false); 62 | 63 | renderer.on("renderer:resized", size); 64 | 65 | renderer.on("renderer:chapterUnload", unloaded); 66 | 67 | size(); 68 | 69 | }); 70 | 71 | if(callback) callback(); 72 | 73 | } 74 | -------------------------------------------------------------------------------- /vendor/epubjs/hooks/extensions/highlight.js: -------------------------------------------------------------------------------- 1 | EPUBJS.Hooks.register("beforeChapterDisplay").highlight = function(callback, renderer){ 2 | 3 | // EPUBJS.core.addScript("js/libs/jquery.highlight.js", null, renderer.doc.head); 4 | 5 | var s = document.createElement("style"); 6 | s.innerHTML =".highlight { background: yellow; font-weight: normal; }"; 7 | 8 | renderer.render.document.head.appendChild(s); 9 | 10 | if(callback) callback(); 11 | 12 | } 13 | 14 | 15 | -------------------------------------------------------------------------------- /vendor/epubjs/libs/screenfull.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * screenfull 3 | * v1.1.0 - 2013-09-06 4 | * https://github.com/sindresorhus/screenfull.js 5 | * (c) Sindre Sorhus; MIT License 6 | */ 7 | !function(a,b){"use strict";var c="undefined"!=typeof Element&&"ALLOW_KEYBOARD_INPUT"in Element,d=function(){for(var a,c,d=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenchange","MSFullscreenerror"]],e=0,f=d.length,g={};f>e;e++)if(a=d[e],a&&a[1]in b){for(e=0,c=a.length;c>e;e++)g[d[0][e]]=a[e];return g}return!1}(),e={request:function(a){var e=d.requestFullscreen;a=a||b.documentElement,/5\.1[\.\d]* Safari/.test(navigator.userAgent)?a[e]():a[e](c&&Element.ALLOW_KEYBOARD_INPUT)},exit:function(){b[d.exitFullscreen]()},toggle:function(a){this.isFullscreen?this.exit():this.request(a)},onchange:function(){},onerror:function(){},raw:d};return d?(Object.defineProperties(e,{isFullscreen:{get:function(){return!!b[d.fullscreenElement]}},element:{enumerable:!0,get:function(){return b[d.fullscreenElement]}},enabled:{enumerable:!0,get:function(){return!!b[d.fullscreenEnabled]}}}),b.addEventListener(d.fullscreenchange,function(a){e.onchange.call(e,a)}),b.addEventListener(d.fullscreenerror,function(a){e.onerror.call(e,a)}),a.screenfull=e,void 0):(a.screenfull=!1,void 0)}(window,document); -------------------------------------------------------------------------------- /vendor/icomoon/fonts/icomoon.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/vendor/icomoon/fonts/icomoon.eot -------------------------------------------------------------------------------- /vendor/icomoon/fonts/icomoon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/vendor/icomoon/fonts/icomoon.ttf -------------------------------------------------------------------------------- /vendor/icomoon/fonts/icomoon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e-alfred/epubreader/d614ac45ba99c9794dcdbcb7eed316228e43bf97/vendor/icomoon/fonts/icomoon.woff -------------------------------------------------------------------------------- /vendor/jquery/put-delete.js: -------------------------------------------------------------------------------- 1 | jQuery.each( [ "put", "delete" ], function( i, method ) { 2 | jQuery[ method ] = function( url, data, callback, type ) { 3 | if ( jQuery.isFunction( data ) ) { 4 | type = type || callback; 5 | callback = data; 6 | data = undefined; 7 | } 8 | 9 | return jQuery.ajax({ 10 | url: url, 11 | type: method, 12 | dataType: type, 13 | data: data, 14 | success: callback 15 | }); 16 | }; 17 | }); 18 | 19 | -------------------------------------------------------------------------------- /vendor/pdfjs/controllers/annotationlayer_controller.js: -------------------------------------------------------------------------------- 1 | PDFJS.Reader.AnnotationLayerController = function (options, reader) { 2 | 3 | this.reader = reader; 4 | this.annotationDiv = options.annotationDiv; 5 | this.pdfPage = options.pdfPage; 6 | this.renderInteractiveForms = options.renderInteractiveForms; 7 | this.linkService = options.linkService; 8 | this.downloadManager = options.downloadManager; 9 | 10 | this.div = null; 11 | 12 | return this; 13 | }; 14 | 15 | PDFJS.Reader.AnnotationLayerController.prototype.render = function (viewport, intent) { 16 | var self = this; 17 | var parameters = { 18 | intent: (intent === undefined ? 'display' : intent), 19 | }; 20 | 21 | this.pdfPage.getAnnotations(parameters).then(function (annotations) { 22 | viewport = viewport.clone({ dontFlip: true }); 23 | parameters = { 24 | viewport: viewport, 25 | div: self.div, 26 | annotations: annotations, 27 | page: self.pdfPage, 28 | renderInteractiveForms: self.renderInteractiveForms, 29 | linkService: self.linkService, 30 | downloadManager: self.downloadManager, 31 | }; 32 | 33 | if (self.div) { 34 | // If an annotationLayer already exists, refresh its children's 35 | // transformation matrices. 36 | PDFJS.AnnotationLayer.update(parameters); 37 | } else { 38 | // Create an annotation layer div and render the annotations 39 | // if there is at least one annotation. 40 | if (annotations.length === 0) { 41 | return; 42 | } 43 | 44 | self.div = self.annotationDiv; 45 | parameters.div = self.div; 46 | 47 | PDFJS.AnnotationLayer.render(parameters); 48 | } 49 | }); 50 | }; 51 | 52 | PDFJS.Reader.AnnotationLayerController.prototype.hide = function () { 53 | 54 | if (!this.div) { 55 | return; 56 | } 57 | 58 | this.div.setAttribute('hidden', 'true'); 59 | }; 60 | -------------------------------------------------------------------------------- /vendor/pdfjs/controllers/bookmarks_controller.js: -------------------------------------------------------------------------------- 1 | PDFJS.reader.BookmarksController = function() { 2 | 3 | var reader = this, 4 | eventBus = this.eventBus, 5 | book = this.book, 6 | annotations = reader.settings.annotations; 7 | 8 | var $bookmarks = $("#bookmarksView"), 9 | $list = $bookmarks.find("#bookmarks"), 10 | $bookmark = $("#bookmark"); 11 | 12 | var show = function() { 13 | $bookmarks.addClass('open'); 14 | }; 15 | 16 | var hide = function() { 17 | $bookmarks.removeClass('open'); 18 | }; 19 | 20 | var addBookmarkItem = function (bookmark) { 21 | $list.append(reader.NotesController.createItem(bookmark)); 22 | //reader.settings.session.setBookmark(bookmark.id, bookmark.anchor, bookmark.type, bookmark); 23 | }; 24 | 25 | eventBus.on('bookmarkcreated', function createBookmark1(e) { 26 | var id = e.id, 27 | $item = $("#"+id); 28 | 29 | addBookmarkItem(reader.getAnnotation(id)); 30 | 31 | if (id === reader.pageToId(reader.settings.currentPage)) 32 | $bookmark 33 | .addClass("icon-turned_in") 34 | .removeClass("icon-turned_in_not"); 35 | }); 36 | 37 | eventBus.on('bookmarkremoved', function removeBookmark1(e) { 38 | var id = e.id, 39 | $item = $("#"+id); 40 | 41 | console.log($item); 42 | 43 | console.log("event bookmarkremoved caught:",e,id); 44 | 45 | if (reader.isBookmarked(id)) { 46 | //delete reader.settings.annotations[id]; 47 | //reader.settings.session.deleteBookmark(id); 48 | console.log("removing bookmark ", $item, reader.pageToId(reader.settings.currentPage), id); 49 | 50 | $item.remove(); 51 | $item.remove(); 52 | $item.remove(); 53 | $item.remove(); 54 | 55 | if (id === reader.pageToId(reader.settings.currentPage)) 56 | $bookmark 57 | .removeClass("icon-turned_in") 58 | .addClass("icon-turned_in_not"); 59 | } 60 | }); 61 | 62 | for (var bookmark in annotations) { 63 | if (annotations.hasOwnProperty(bookmark) && (annotations[bookmark].type === "bookmark")) 64 | addBookmarkItem(annotations[bookmark]); 65 | }; 66 | 67 | return { 68 | "show" : show, 69 | "hide" : hide, 70 | "addItem" : addBookmarkItem, 71 | }; 72 | }; 73 | -------------------------------------------------------------------------------- /vendor/pdfjs/controllers/meta_controller.js: -------------------------------------------------------------------------------- 1 | PDFJS.reader.MetaController = function(meta) { 2 | var title = meta.bookTitle, 3 | author = meta.creator; 4 | 5 | var $title = $("#book-title"), 6 | $author = $("#chapter-title"), 7 | $dash = $("#title-seperator"); 8 | 9 | document.title = title+" – "+author; 10 | 11 | $title.html(title); 12 | $author.html(author); 13 | $dash.show(); 14 | }; -------------------------------------------------------------------------------- /vendor/pdfjs/controllers/outline_controller.js: -------------------------------------------------------------------------------- 1 | PDFJS.reader.OutlineController = function(_outline) { 2 | 3 | var reader = this, 4 | book = this.book, 5 | outline = _outline || []; 6 | 7 | var outlineView = document.getElementById("outlineView"); 8 | 9 | var DEFAULT_TITLE = '\u2013'; 10 | 11 | var generateOutlineItems = function (outline, level) { 12 | 13 | var container = document.createElement("ul"); 14 | 15 | if(!level) level = 1; 16 | 17 | outline.forEach(function (chapter) { 18 | 19 | var listitem = document.createElement("li"), 20 | link = document.createElement("a"), 21 | toggle = document.createElement("a"), 22 | subitems; 23 | 24 | listitem.id = "outline-"+chapter.dest; 25 | listitem.classList.add('list_item'); 26 | 27 | link.textContent = PDFJS.removeNullCharacters(chapter.title) || DEFAULT_TITLE; 28 | reader.bindLink(link, chapter); 29 | reader.setStyles(link, chapter); 30 | link.classList.add('outline_link'); 31 | 32 | listitem.appendChild(link); 33 | 34 | if(chapter.items.length > 0) { 35 | level++; 36 | subitems = generateOutlineItems(chapter.items, level); 37 | toggle.classList.add('outline_toggle'); 38 | listitem.insertBefore(toggle, link); 39 | listitem.appendChild(subitems); 40 | } 41 | 42 | container.appendChild(listitem); 43 | }); 44 | 45 | return container; 46 | } 47 | 48 | var onShow = function() { 49 | outlineView.classList.add('open'); 50 | }; 51 | 52 | var onHide = function() { 53 | outlineView.classList.remove('open'); 54 | }; 55 | 56 | outlineView.appendChild(generateOutlineItems(outline)); 57 | 58 | $(outlineView).find(".outline_toggle").on("click", function(event){ 59 | var $el = $(this).parent('li'), 60 | open = $el.hasClass("openChapter"); 61 | 62 | event.preventDefault(); 63 | if(open){ 64 | $el.removeClass("openChapter"); 65 | } else { 66 | $el.addClass("openChapter"); 67 | } 68 | }); 69 | 70 | return { 71 | "show" : onShow, 72 | "hide" : onHide 73 | }; 74 | }; 75 | -------------------------------------------------------------------------------- /vendor/pdfjs/controllers/progress_controller.js: -------------------------------------------------------------------------------- 1 | PDFJS.reader.ProgressController = function() { 2 | var reader = this, 3 | settings = reader.settings, 4 | percentage = 0; 5 | 6 | var $progress = $("#progress"), 7 | $bar = $(".bar"), 8 | $download_icon = $("#download_icon"), 9 | $message = $(".message-text"); 10 | 11 | var show = function () { 12 | $progress.removeClass("hide"); 13 | }; 14 | 15 | var hide = function () { 16 | $progress.addClass("hide"); 17 | }; 18 | 19 | var setSize = function (size) { 20 | settings.fileSize = size; 21 | }; 22 | 23 | var setProgress = function (progress) { 24 | 25 | if (percentage < 1) 26 | $download_icon.addClass("active"); 27 | 28 | percentage = Math.floor((progress.loaded / progress.total) * 100); 29 | $bar.css("width", percentage + "%"); 30 | 31 | if (percentage === 100) 32 | $download_icon.removeClass("active").addClass("ok"); 33 | }; 34 | 35 | var reset = function() { 36 | $bar.css("width", 0); 37 | }; 38 | 39 | var setMessage = function (text, category, state) { 40 | 41 | var $category_icon = $("#" + category + "_icon"); 42 | 43 | $message.text(text); 44 | 45 | $category_icon[0].classList.remove("ok", "active", "error"); 46 | $category_icon.addClass(state); 47 | }; 48 | 49 | 50 | return { 51 | "show": show, 52 | "hide": hide, 53 | "setSize": setSize, 54 | "setProgress": setProgress, 55 | "setMessage": setMessage 56 | }; 57 | }; 58 | -------------------------------------------------------------------------------- /vendor/pdfjs/controllers/settings_controller.js: -------------------------------------------------------------------------------- 1 | PDFJS.reader.SettingsController = function() { 2 | 3 | var reader = this, 4 | book = this.book, 5 | settings = reader.settings; 6 | 7 | var $settings = $("#settingsView"), 8 | $viewer = $("#viewer"), 9 | $overlay = $(".overlay"), 10 | $next = $("#next"), 11 | $prev = $("#prev"), 12 | $close = $("#close"), 13 | $sidebarReflow = $('#sidebarReflow'), 14 | $scrollToTop = $('#scrollToTop'), 15 | $touch_nav = $("#touch_nav"), 16 | $page_turn_arrows = $("#page_turn_arrows"), 17 | $prev_arrow = $("#prev :first-child"), 18 | $next_arrow = $("#next :first-child"); 19 | 20 | var show = function() { 21 | $settings.addClass('open'); 22 | }; 23 | 24 | var hide = function() { 25 | $settings.removeClass('open'); 26 | }; 27 | 28 | if (settings.scrollToTop) { 29 | $scrollToTop.prop('checked', true); 30 | } else { 31 | $scrollToTop.prop('checked', false); 32 | } 33 | 34 | $scrollToTop.off('click').on('click', function() { 35 | settings.scrollToTop = !settings.scrollToTop; 36 | settings.session.setDefault("scrollToTop", settings.scrollToTop); 37 | }); 38 | 39 | if (settings.sidebarReflow) { 40 | $sidebarReflow.prop('checked', true); 41 | } else { 42 | $sidebarReflow.prop('checked', false); 43 | } 44 | 45 | $sidebarReflow.off('click').on('click', function() { 46 | settings.sidebarReflow = !settings.sidebarReflow; 47 | if (settings.sidebarReflow && reader.sidebarOpen) reader.ReaderController.slideOut(); 48 | if (!settings.sidebarReflow && !reader.sidebarOpen) reader.ReaderController.slideIn(); 49 | settings.session.setDefault("sidebarReflow", settings.sidebarReflow); 50 | }); 51 | 52 | $settings.find(".closer").on("click", function() { 53 | hide(); 54 | }); 55 | 56 | $overlay.on("click", function() { 57 | hide(); 58 | }); 59 | 60 | // only enable close button when launched in an iframe default 61 | if (parent !== window) { 62 | $close.show(); 63 | $close.on("click", function () { 64 | reader.book.destroy(); 65 | parent.OCA.Epubreader.Plugin.hide(); 66 | }); 67 | } 68 | 69 | // default for extra wide navigation controls; 70 | // devices with touch navigation: on 71 | // devices without touch navigation: off 72 | $touch_nav.prop('checked', !('ontouchstart' in document.documentElement)); 73 | if (!($touch_nav.prop('checked'))) { 74 | $next.addClass("touch_nav"); 75 | $prev.addClass("touch_nav"); 76 | } 77 | 78 | // extra wide nagivation controls 79 | $touch_nav.off('change').on('change', function() { 80 | if ($(this).prop('checked')) { 81 | $prev.removeClass("touch_nav"); 82 | $next.removeClass("touch_nav"); 83 | } else { 84 | $prev.addClass("touch_nav"); 85 | $next.addClass("touch_nav"); 86 | } 87 | }); 88 | 89 | // page turn arrows default 90 | if (settings.pageArrows) { 91 | $page_turn_arrows.prop('checked', true); 92 | $prev_arrow.removeClass("translucent"); 93 | $next_arrow.removeClass("translucent"); 94 | } else { 95 | $page_turn_arrows.prop('checked', false); 96 | $prev_arrow.addClass("translucent"); 97 | $next_arrow.addClass("translucent"); 98 | } 99 | 100 | // page turn arrows 101 | $page_turn_arrows.off('change').on('change', function() { 102 | if ($(this).prop('checked')) { 103 | settings.pageArrows = true; 104 | $prev_arrow.removeClass("translucent"); 105 | $next_arrow.removeClass("translucent"); 106 | } else { 107 | settings.pageArrows = false; 108 | $prev_arrow.addClass("translucent"); 109 | $next_arrow.addClass("translucent"); 110 | } 111 | 112 | settings.session.setDefault("pageArrows", settings.pageArrows); 113 | }); 114 | 115 | return { 116 | "show" : show, 117 | "hide" : hide 118 | }; 119 | }; 120 | -------------------------------------------------------------------------------- /vendor/pdfjs/controllers/sidebar_controller.js: -------------------------------------------------------------------------------- 1 | PDFJS.reader.SidebarController = function(book) { 2 | var reader = this, 3 | settings = reader.settings; 4 | 5 | var $sidebar = $("#sidebar"), 6 | $panels = $("#panels"), 7 | $views = $("#views"), 8 | $close = $("#hide-Sidebar"); 9 | $slider = $("#slider"); 10 | 11 | var activePanel = "Toc"; 12 | 13 | var changePanelTo = function(viewName) { 14 | var controllerName = viewName + "Controller"; 15 | 16 | if (!(activePanel == viewName || typeof reader[controllerName] === 'undefined' )) { 17 | reader[activePanel+ "Controller"].hide(); 18 | reader[controllerName].show(); 19 | activePanel = viewName; 20 | 21 | //$panels.find('.open').removeClass("open"); 22 | $sidebar.find('.open').removeClass("open"); 23 | $panels.find("#show-" + viewName ).addClass("open"); 24 | $views.find("#" + viewName.toLowerCase() + "View").addClass("open"); 25 | } 26 | show(); 27 | }; 28 | 29 | var getActivePanel = function() { 30 | return activePanel; 31 | }; 32 | 33 | var show = function() { 34 | reader.sidebarOpen = true; 35 | if (settings.sidebarReflow) reader.ReaderController.slideOut(); 36 | $slider.hide(); 37 | $sidebar.addClass("open"); 38 | if (getActivePanel() === "Toc") 39 | reader.TocController.scrollToPage(settings.currentPage); 40 | } 41 | 42 | var hide = function() { 43 | reader.sidebarOpen = false; 44 | $slider.show(); 45 | reader.ReaderController.slideIn(); 46 | $sidebar.removeClass("open"); 47 | }; 48 | 49 | var toggle = function () { 50 | (reader.sidebarOpen) ? hide() : show(); 51 | }; 52 | 53 | $close.on("click", function () { 54 | reader.SidebarController.hide(); 55 | // $slider.addClass("icon-menu"); 56 | // $slider.removeClass("icon-right"); 57 | 58 | }); 59 | 60 | $panels.find(".show_view").on("click", function(e) { 61 | var view = $(this).data("view"); 62 | 63 | changePanelTo(view); 64 | e.preventDefault(); 65 | }); 66 | 67 | $sidebar.css("width", "calc(" + parseInt(settings.thumbnailWidth) + "px + 2em)"); 68 | 69 | return { 70 | 'show' : show, 71 | 'hide' : hide, 72 | 'toggle' : toggle, 73 | 'getActivePanel' : getActivePanel, 74 | 'changePanelTo' : changePanelTo 75 | }; 76 | }; 77 | -------------------------------------------------------------------------------- /vendor/pdfjs/controllers/styles_controller.js: -------------------------------------------------------------------------------- 1 | PDFJS.reader.StylesController = function (renderer) { 2 | 3 | var reader = this, 4 | settings = reader.settings, 5 | customStyles = reader.settings.customStyles, 6 | activeStyles = reader.settings.activeStyles, 7 | $main = $("#main"), 8 | $nightmode_form = $('#nightmode_form'), 9 | $nightmode_reset = $('#nightmode_reset'), 10 | $night_brightness = $('#night_brightness'), 11 | $night_contrast = $('#night_contrast'), 12 | $night_sepia = $('#night_sepia'), 13 | $night_huerotate = $('#night_huerotate'), 14 | $night_saturate = $('#night_saturate'), 15 | $nightshift = $('.nightshift'); 16 | 17 | this.addStyle("nightMode", "*", { 18 | filter: 'invert(1) sepia(' + $night_sepia.val() + ') hue-rotate(' + $night_huerotate.val() + 'deg) brightness(' + $night_brightness.val() + ') contrast(' + $night_contrast.val() + ') saturate(' + $night_saturate.val() + ')' 19 | }); 20 | 21 | this.addStyle("appleBugs", "document, html, body, p, span, div", { 22 | "cursor": "pointer" 23 | }); 24 | 25 | // fix click-bug in apple products 26 | if (navigator.userAgent.match(/(iPad|iPhone|iPod)/g)) 27 | activeStyles['appleBugs'] = true; 28 | 29 | for (var style in activeStyles) { 30 | if (!activeStyles.hasOwnProperty(style)) continue; 31 | 32 | switch (style) { 33 | case "nightMode": 34 | reader.ControlsController.setNightmodeIcon(true); 35 | break; 36 | case "appleBugs": 37 | console.log("Apple mobile bugs detected, applying workarounds..."); 38 | break; 39 | } 40 | 41 | reader.enableStyle(customStyles[style]); 42 | } 43 | 44 | $night_brightness.off('change').on('change', function() { 45 | updateNightmode(); 46 | }); 47 | 48 | $night_contrast.off('change').on('change', function() { 49 | updateNightmode(); 50 | }); 51 | 52 | $night_sepia.off('change').on('change', function() { 53 | updateNightmode(); 54 | }); 55 | 56 | $night_huerotate.off('change').on('change', function() { 57 | updateNightmode(); 58 | }); 59 | 60 | $night_saturate.off('change').on('change', function() { 61 | updateNightmode(); 62 | }); 63 | 64 | $nightmode_form.off('reset').on('reset', function () { 65 | setTimeout(function() { 66 | updateNightmode(); 67 | }, 10); 68 | }); 69 | 70 | var parseFilter = function(str, element) { 71 | var re = new RegExp(element+'\\(([\\d.]+)\\S*\\)'), 72 | value = null; 73 | 74 | if (re.test(str)) 75 | value = str.match(re)[1]; 76 | 77 | return value; 78 | }; 79 | 80 | var updateNightmode = function() { 81 | customStyles.nightMode.rules.filter = 'invert(1) sepia(' + $night_sepia.val() + ') hue-rotate(' + $night_huerotate.val() + 'deg) brightness(' + $night_brightness.val() + ') contrast(' + $night_contrast.val() + ') saturate(' + $night_saturate.val() + ')'; 82 | reader.updateStyle(customStyles.nightMode); 83 | }; 84 | 85 | $night_brightness.val(parseFilter(customStyles.nightMode.rules.filter,"brightness")); 86 | $night_contrast.val(parseFilter(customStyles.nightMode.rules.filter,"contrast")); 87 | $night_sepia.val(parseFilter(customStyles.nightMode.rules.filter,"sepia")); 88 | $night_huerotate.val(parseFilter(customStyles.nightMode.rules.filter,"hue-rotate")); 89 | $night_saturate.val(parseFilter(customStyles.nightMode.rules.filter,"saturate")); 90 | 91 | return { 92 | }; 93 | }; 94 | -------------------------------------------------------------------------------- /vendor/pdfjs/css/annotations.css: -------------------------------------------------------------------------------- 1 | .ui-loader { 2 | display: none; 3 | } 4 | 5 | .annotator-hl { 6 | box-shadow: none !important; 7 | cursor: pointer !important; 8 | } -------------------------------------------------------------------------------- /vendor/pdfjs/css/idevice.css: -------------------------------------------------------------------------------- 1 | .notes, 2 | .search-results, 3 | .view { 4 | overflow-y: scroll; 5 | -webkit-overflow-scrolling: touch; 6 | } 7 | 8 | .search-results { 9 | height: calc(100% - 5em); 10 | } 11 | 12 | .notes { 13 | height: calc(100% - 9em); 14 | } 15 | -------------------------------------------------------------------------------- /vendor/pdfjs/css/images/annotation-check.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /vendor/pdfjs/css/images/annotation-comment.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 13 | 16 | 17 | -------------------------------------------------------------------------------- /vendor/pdfjs/css/images/annotation-help.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 16 | 18 | 21 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /vendor/pdfjs/css/images/annotation-insert.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /vendor/pdfjs/css/images/annotation-key.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /vendor/pdfjs/css/images/annotation-newparagraph.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /vendor/pdfjs/css/images/annotation-noicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /vendor/pdfjs/css/images/annotation-note.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 14 | 21 | 28 | 35 | 42 | 43 | -------------------------------------------------------------------------------- /vendor/pdfjs/css/images/annotation-paragraph.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 13 | 16 | 17 | -------------------------------------------------------------------------------- /vendor/pdfjs/css/popup.css: -------------------------------------------------------------------------------- 1 | /* http://davidwalsh.name/css-tooltips */ 2 | /* base CSS element */ 3 | .popup { 4 | background: #eee; 5 | border: 1px solid #ccc; 6 | padding: 10px; 7 | border-radius: 8px; 8 | box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); 9 | position: fixed; 10 | max-width: 300px; 11 | font-size: 12px; 12 | 13 | display: none; 14 | margin-left: 2px; 15 | 16 | margin-top: 30px; 17 | } 18 | 19 | .popup.above { 20 | margin-top: -10px; 21 | } 22 | 23 | .popup.left { 24 | margin-left: -20px; 25 | } 26 | 27 | .popup.right { 28 | margin-left: 40px; 29 | } 30 | 31 | .pop_content { 32 | max-height: 225px; 33 | overflow-y: auto; 34 | } 35 | 36 | .pop_content > p { 37 | margin-top: 0; 38 | } 39 | 40 | /* below */ 41 | .popup:before { 42 | position: absolute; 43 | display: inline-block; 44 | border-bottom: 10px solid #eee; 45 | border-right: 10px solid transparent; 46 | border-left: 10px solid transparent; 47 | border-bottom-color: rgba(0, 0, 0, 0.2); 48 | left: 50%; 49 | top: -10px; 50 | margin-left: -6px; 51 | content: ''; 52 | } 53 | 54 | .popup:after { 55 | position: absolute; 56 | display: inline-block; 57 | border-bottom: 9px solid #eee; 58 | border-right: 9px solid transparent; 59 | border-left: 9px solid transparent; 60 | left: 50%; 61 | top: -9px; 62 | margin-left: -5px; 63 | content: ''; 64 | } 65 | 66 | /* above */ 67 | .popup.above:before { 68 | border-bottom: none; 69 | border-top: 10px solid #eee; 70 | border-top-color: rgba(0, 0, 0, 0.2); 71 | top: 100%; 72 | } 73 | 74 | .popup.above:after { 75 | border-bottom: none; 76 | border-top: 9px solid #eee; 77 | top: 100%; 78 | } 79 | 80 | .popup.left:before, 81 | .popup.left:after 82 | { 83 | left: 20px; 84 | } 85 | 86 | .popup.right:before, 87 | .popup.right:after 88 | { 89 | left: auto; 90 | right: 20px; 91 | } 92 | 93 | 94 | .popup.show, .popup.on { 95 | display: block; 96 | } 97 | 98 | .note-marker, 99 | .EPUBJS-CFI-MARKER, 100 | .EPUBJS-CFI-SPLIT { 101 | vertical-align: super; 102 | font-size: 0.75em; 103 | line-height: 1em; 104 | padding: 0.1em; 105 | background-color: #fffa96; 106 | border-radius: 5px; 107 | cursor: pointer; 108 | } 109 | 110 | -------------------------------------------------------------------------------- /vendor/pdfjs/css/text_layer_builder.css: -------------------------------------------------------------------------------- 1 | /* Copyright 2014 Mozilla Foundation 2 | * 3 | * Licensed under the Apache License, Version 2.0 (the "License"); 4 | * you may not use this file except in compliance with the License. 5 | * You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software 10 | * distributed under the License is distributed on an "AS IS" BASIS, 11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | * See the License for the specific language governing permissions and 13 | * limitations under the License. 14 | */ 15 | 16 | .textLayer { 17 | position: absolute; 18 | left: 0; 19 | top: 0; 20 | right: 0; 21 | bottom: 0; 22 | /* overflow: hidden; */ 23 | opacity: 0.2; 24 | line-height: 1.0; 25 | } 26 | 27 | .textLayer > div { 28 | color: transparent; 29 | position: absolute; 30 | white-space: pre; 31 | cursor: text; 32 | -webkit-transform-origin: 0% 0%; 33 | -moz-transform-origin: 0% 0%; 34 | -o-transform-origin: 0% 0%; 35 | -ms-transform-origin: 0% 0%; 36 | transform-origin: 0% 0%; 37 | } 38 | 39 | .textLayer .highlight { 40 | margin: -1px; 41 | padding: 1px; 42 | 43 | background-color: rgb(180, 0, 170); 44 | border-radius: 4px; 45 | } 46 | 47 | .textLayer .highlight.begin { 48 | border-radius: 4px 0px 0px 4px; 49 | } 50 | 51 | .textLayer .highlight.end { 52 | border-radius: 0px 4px 4px 0px; 53 | } 54 | 55 | .textLayer .highlight.middle { 56 | border-radius: 0px; 57 | } 58 | 59 | .textLayer .highlight.selected { 60 | background-color: rgb(0, 100, 0); 61 | } 62 | 63 | .textLayer ::selection { background: rgb(0,0,255); } 64 | .textLayer ::-moz-selection { background: rgb(0,0,255); } 65 | 66 | .textLayer .endOfContent { 67 | display: block; 68 | position: absolute; 69 | left: 0px; 70 | top: 100%; 71 | right: 0px; 72 | bottom: 0px; 73 | z-index: -1; 74 | cursor: default; 75 | -webkit-user-select: none; 76 | -ms-user-select: none; 77 | -moz-user-select: none; 78 | } 79 | 80 | .textLayer .endOfContent.active { 81 | top: 0px; 82 | } 83 | -------------------------------------------------------------------------------- /vendor/pdfjs/services/eventbus_service.js: -------------------------------------------------------------------------------- 1 | PDFJS.Reader.EventBus = function () { 2 | 3 | this._listeners = Object.create(null); 4 | 5 | return this; 6 | }; 7 | 8 | PDFJS.Reader.EventBus.prototype.on = function (eventName, listener) { 9 | var eventListeners = this._listeners[eventName]; 10 | if (!eventListeners) { 11 | eventListeners = []; 12 | this._listeners[eventName] = eventListeners; 13 | } 14 | eventListeners.push(listener); 15 | }; 16 | 17 | PDFJS.Reader.EventBus.prototype.off = function (eventName, listener) { 18 | var eventListeners = this._listeners[eventName]; 19 | var i; 20 | if (!eventListeners || ((i = eventListeners.indexOf(listener)) < 0)) { 21 | return; 22 | } 23 | eventListeners.splice(i, 1); 24 | }; 25 | 26 | PDFJS.Reader.EventBus.prototype.dispatch = function (eventName) { 27 | var eventListeners = this._listeners[eventName]; 28 | if (!eventListeners || eventListeners.length === 0) { 29 | return; 30 | } 31 | // Passing all arguments after the eventName to the listeners. 32 | var args = Array.prototype.slice.call(arguments, 1); 33 | // Making copy of the listeners array in case if it will be modified 34 | // during dispatch. 35 | eventListeners.slice(0).forEach(function (listener) { 36 | listener.apply(null, args); 37 | }); 38 | }; 39 | 40 | -------------------------------------------------------------------------------- /vendor/pdfjs/services/simple_link_service.js: -------------------------------------------------------------------------------- 1 | PDFJS.Reader.SimpleLinkService = function () { 2 | 3 | return this; 4 | }; 5 | 6 | Object.defineProperties(PDFJS.Reader.SimpleLinkService, { 7 | 'page': { 8 | get: function () { return 0; }, 9 | set: function(value) {} 10 | } 11 | }); 12 | 13 | PDFJS.Reader.SimpleLinkService.prototype.navigateTo = function (destUrl) { 14 | }; 15 | 16 | PDFJS.Reader.SimpleLinkService.prototype.getDestinationHash = function (destination) { 17 | return "#"; 18 | }; 19 | 20 | PDFJS.Reader.SimpleLinkService.prototype.getAnchorUrl = function (anchor) { 21 | return "#"; 22 | }; 23 | 24 | PDFJS.Reader.SimpleLinkService.prototype.setHash = function (hash) { 25 | }; 26 | 27 | PDFJS.Reader.SimpleLinkService.prototype.executeNamedAction = function (action) { 28 | }; 29 | 30 | PDFJS.Reader.SimpleLinkService.prototype.onFileAttachmentAnnotation = function (params) { 31 | }; 32 | 33 | PDFJS.Reader.SimpleLinkService.prototype.cachePageRef = function (pageNum, pageRef) { 34 | }; 35 | -------------------------------------------------------------------------------- /vendor/pixastic/pixastic.worker.js: -------------------------------------------------------------------------------- 1 | Pixastic.Worker = function() { 2 | var me = this; 3 | function processMessage(data) { 4 | var queue = data.queue, 5 | inData = data.inData, 6 | outData = data.outData, 7 | width = data.width, 8 | height = data.height, 9 | tmpData; 10 | 11 | for (var i=0;i 0) { 16 | tmpData = inData; 17 | inData = outData; 18 | outData = tmpData; 19 | } 20 | 21 | Pixastic.Effects[e](inData.data, outData.data, width, height, options); 22 | 23 | me.onmessage({ 24 | data : { 25 | event : "progress", 26 | data : (i+1) / queue.length 27 | } 28 | }); 29 | } 30 | 31 | me.onmessage({ 32 | data : { 33 | event : "done", 34 | data : outData 35 | } 36 | }); 37 | } 38 | 39 | this.postMessage = function(data) { 40 | setTimeout(function() { 41 | processMessage(data) 42 | }, 0); 43 | } 44 | 45 | this.onmessage = function() {}; 46 | 47 | } 48 | -------------------------------------------------------------------------------- /vendor/sindresorhus/screenfull.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * screenfull 3 | * v3.0.0 - 2015-11-24 4 | * (c) Sindre Sorhus; MIT License 5 | */ 6 | (function () { 7 | 'use strict'; 8 | 9 | var isCommonjs = typeof module !== 'undefined' && module.exports; 10 | var keyboardAllowed = typeof Element !== 'undefined' && 'ALLOW_KEYBOARD_INPUT' in Element; 11 | 12 | var fn = (function () { 13 | var val; 14 | var valLength; 15 | 16 | var fnMap = [ 17 | [ 18 | 'requestFullscreen', 19 | 'exitFullscreen', 20 | 'fullscreenElement', 21 | 'fullscreenEnabled', 22 | 'fullscreenchange', 23 | 'fullscreenerror' 24 | ], 25 | // new WebKit 26 | [ 27 | 'webkitRequestFullscreen', 28 | 'webkitExitFullscreen', 29 | 'webkitFullscreenElement', 30 | 'webkitFullscreenEnabled', 31 | 'webkitfullscreenchange', 32 | 'webkitfullscreenerror' 33 | 34 | ], 35 | // old WebKit (Safari 5.1) 36 | [ 37 | 'webkitRequestFullScreen', 38 | 'webkitCancelFullScreen', 39 | 'webkitCurrentFullScreenElement', 40 | 'webkitCancelFullScreen', 41 | 'webkitfullscreenchange', 42 | 'webkitfullscreenerror' 43 | 44 | ], 45 | [ 46 | 'mozRequestFullScreen', 47 | 'mozCancelFullScreen', 48 | 'mozFullScreenElement', 49 | 'mozFullScreenEnabled', 50 | 'mozfullscreenchange', 51 | 'mozfullscreenerror' 52 | ], 53 | [ 54 | 'msRequestFullscreen', 55 | 'msExitFullscreen', 56 | 'msFullscreenElement', 57 | 'msFullscreenEnabled', 58 | 'MSFullscreenChange', 59 | 'MSFullscreenError' 60 | ] 61 | ]; 62 | 63 | var i = 0; 64 | var l = fnMap.length; 65 | var ret = {}; 66 | 67 | for (; i < l; i++) { 68 | val = fnMap[i]; 69 | if (val && val[1] in document) { 70 | for (i = 0, valLength = val.length; i < valLength; i++) { 71 | ret[fnMap[0][i]] = val[i]; 72 | } 73 | return ret; 74 | } 75 | } 76 | 77 | return false; 78 | })(); 79 | 80 | var screenfull = { 81 | request: function (elem) { 82 | var request = fn.requestFullscreen; 83 | 84 | elem = elem || document.documentElement; 85 | 86 | // Work around Safari 5.1 bug: reports support for 87 | // keyboard in fullscreen even though it doesn't. 88 | // Browser sniffing, since the alternative with 89 | // setTimeout is even worse. 90 | if (/5\.1[\.\d]* Safari/.test(navigator.userAgent)) { 91 | elem[request](); 92 | } else { 93 | elem[request](keyboardAllowed && Element.ALLOW_KEYBOARD_INPUT); 94 | } 95 | }, 96 | exit: function () { 97 | document[fn.exitFullscreen](); 98 | }, 99 | toggle: function (elem) { 100 | if (this.isFullscreen) { 101 | this.exit(); 102 | } else { 103 | this.request(elem); 104 | } 105 | }, 106 | raw: fn 107 | }; 108 | 109 | if (!fn) { 110 | if (isCommonjs) { 111 | module.exports = false; 112 | } else { 113 | window.screenfull = false; 114 | } 115 | 116 | return; 117 | } 118 | 119 | Object.defineProperties(screenfull, { 120 | isFullscreen: { 121 | get: function () { 122 | return Boolean(document[fn.fullscreenElement]); 123 | } 124 | }, 125 | element: { 126 | enumerable: true, 127 | get: function () { 128 | return document[fn.fullscreenElement]; 129 | } 130 | }, 131 | enabled: { 132 | enumerable: true, 133 | get: function () { 134 | // Coerce to boolean in case of old WebKit 135 | return Boolean(document[fn.fullscreenEnabled]); 136 | } 137 | } 138 | }); 139 | 140 | if (isCommonjs) { 141 | module.exports = screenfull; 142 | } else { 143 | window.screenfull = screenfull; 144 | } 145 | })(); 146 | --------------------------------------------------------------------------------