From 75d52fac56a832c21b2150cfdc3188a4748bda3c Mon Sep 17 00:00:00 2001 From: th3r00t Date: Sat, 9 Aug 2025 19:08:29 +0000 Subject: [PATCH] Updated Documentation and Readme --- README.md | 94 +- docs/Automated Collections.html | 47 - docs/Book Attachment System.html | 31 - docs/Book Scraping System.html | 61 -- docs/Client.html | 113 --- docs/Description.html | 14 - docs/Frontend.html | 124 --- docs/License.html | 927 ------------------ docs/Notes.html | 55 -- docs/OPDS.html | 36 - docs/Program Flow.html | 59 -- docs/REST API.html | 37 - docs/TOC.html | 47 - docs/doxygen.html | 23 - docs/index.html | 141 --- docs/pyShelf/html/HTML/D/index.html | 1 - docs/pyShelf/html/HTML/FILEMAP | 1 - docs/pyShelf/html/HTML/GTAGSROOT | 1 - docs/pyShelf/html/HTML/I/index.html | 1 - docs/pyShelf/html/HTML/J/index.html | 1 - docs/pyShelf/html/HTML/R/1.html | 26 - docs/pyShelf/html/HTML/R/2.html | 17 - docs/pyShelf/html/HTML/R/3.html | 19 - docs/pyShelf/html/HTML/R/4.html | 25 - docs/pyShelf/html/HTML/R/5.html | 18 - docs/pyShelf/html/HTML/R/7.html | 16 - docs/pyShelf/html/HTML/R/index.html | 1 - docs/pyShelf/html/HTML/S/2760.html | 191 ---- docs/pyShelf/html/HTML/S/index.html | 1 - docs/pyShelf/html/HTML/Y/10.html | 18 - docs/pyShelf/html/HTML/Y/11.html | 16 - docs/pyShelf/html/HTML/Y/12.html | 36 - docs/pyShelf/html/HTML/Y/14.html | 19 - docs/pyShelf/html/HTML/Y/15.html | 19 - docs/pyShelf/html/HTML/Y/16.html | 16 - docs/pyShelf/html/HTML/Y/17.html | 16 - docs/pyShelf/html/HTML/Y/2.html | 16 - docs/pyShelf/html/HTML/Y/20.html | 29 - docs/pyShelf/html/HTML/Y/21.html | 30 - docs/pyShelf/html/HTML/Y/22.html | 21 - docs/pyShelf/html/HTML/Y/23.html | 17 - docs/pyShelf/html/HTML/Y/24.html | 18 - docs/pyShelf/html/HTML/Y/25.html | 24 - docs/pyShelf/html/HTML/Y/26.html | 16 - docs/pyShelf/html/HTML/Y/27.html | 16 - docs/pyShelf/html/HTML/Y/29.html | 27 - docs/pyShelf/html/HTML/Y/3.html | 18 - docs/pyShelf/html/HTML/Y/30.html | 16 - docs/pyShelf/html/HTML/Y/32.html | 71 -- docs/pyShelf/html/HTML/Y/5.html | 16 - docs/pyShelf/html/HTML/Y/6.html | 16 - docs/pyShelf/html/HTML/Y/7.html | 18 - docs/pyShelf/html/HTML/Y/index.html | 1 - docs/pyShelf/html/HTML/defines.html | 24 - docs/pyShelf/html/HTML/defines/F.html | 19 - docs/pyShelf/html/HTML/defines/_.html | 18 - docs/pyShelf/html/HTML/defines/index.html | 1 - docs/pyShelf/html/HTML/defines/la.html | 18 - docs/pyShelf/html/HTML/defines/li.html | 18 - docs/pyShelf/html/HTML/defines/lk.html | 18 - docs/pyShelf/html/HTML/defines/ll.html | 18 - docs/pyShelf/html/HTML/defines/lp.html | 18 - docs/pyShelf/html/HTML/defines/lr.html | 19 - docs/pyShelf/html/HTML/defines/ls.html | 18 - docs/pyShelf/html/HTML/defines/lt.html | 18 - docs/pyShelf/html/HTML/defines/lw.html | 18 - docs/pyShelf/html/HTML/files.html | 16 - docs/pyShelf/html/HTML/files/3572.html | 18 - docs/pyShelf/html/HTML/files/3573.html | 18 - docs/pyShelf/html/HTML/files/3574.html | 18 - docs/pyShelf/html/HTML/files/3575.html | 18 - docs/pyShelf/html/HTML/files/index.html | 1 - docs/pyShelf/html/HTML/help.html | 24 - docs/pyShelf/html/HTML/index.html | 40 - docs/pyShelf/html/HTML/mains.html | 40 - docs/pyShelf/html/HTML/rebuild.sh | 8 - docs/pyShelf/html/annotated.html | 96 -- docs/pyShelf/html/bc_s.png | Bin 676 -> 0 bytes docs/pyShelf/html/bc_sd.png | Bin 635 -> 0 bytes docs/pyShelf/html/bdwn.png | Bin 147 -> 0 bytes docs/pyShelf/html/classes.html | 88 -- docs/pyShelf/html/closed.png | Bin 132 -> 0 bytes ..._1lib_1_1models_1_1Collection-members.html | 68 -- ...espacesrc_1_1backend_1_1lib_1_1config.html | 69 -- ..._1lib_1_1pyShelf_1_1InitFiles-members.html | 67 -- .../classobjects_1_1JSInterface-members.html | 67 -- ...ests_1_1library__test_1_1Test__Config.html | 138 --- ...tests_1_1library__test_1_1Test__Config.png | Bin 872 -> 0 bytes ...nd_1_1lib_1_1config_1_1Config-members.html | 91 -- ...ibrary__test_1_1TestCatalogue-members.html | 68 -- ...astAPIServer_1_1FastAPIServer-members.html | 76 -- ...assDataHooks_1_1BookInterface-members.html | 67 -- ...1_1backend_1_1lib_1_1pyShelf_1_1Admin.html | 162 --- ...ackend_1_1lib_1_1library_1_1Catalogue.html | 732 -------------- ...backend_1_1lib_1_1library_1_1Catalogue.png | Bin 1462 -> 0 bytes ...library__test_1_1Test__Config-members.html | 67 -- ...1_1config__test_1_1TestConfig-members.html | 69 -- ...nd_1_1lib_1_1pyShelf_1_1Admin-members.html | 69 -- ..._1lib_1_1library_1_1Catalogue-members.html | 91 -- ...c_1_1backend_1_1lib_1_1models_1_1Book.html | 419 -------- ...rc_1_1backend_1_1lib_1_1models_1_1Book.png | Bin 1013 -> 0 bytes ...c_1_1backend_1_1lib_1_1models_1_1Base.html | 76 -- ...rc_1_1backend_1_1lib_1_1models_1_1Base.png | Bin 1482 -> 0 bytes ...1backend_1_1lib_1_1storage_1_1Storage.html | 493 ---------- ...nd_1_1lib_1_1api__hooks_1_1DuckDuckGo.html | 194 ---- ..._1backend_1_1lib_1_1pyShelf_1_1Server.html | 344 ------- .../html/d7/df9/namespaceDataHooks.html | 65 -- ...sts_1_1library__test_1_1TestCatalogue.html | 147 --- .../d8/def/classobjects_1_1JSInterface.html | 125 --- ...1_1backend_1_1lib_1_1config_1_1Config.html | 601 ------------ ..._1_1backend_1_1lib_1_1config_1_1Config.png | Bin 883 -> 0 bytes .../d71/classDataHooks_1_1BookInterface.html | 106 -- ...1lib_1_1overide_1_1ACatalogue-members.html | 68 -- ...ackend_1_1lib_1_1pyShelf_1_1InitFiles.html | 136 --- ...kend_1_1lib_1_1models_1_1Book-members.html | 79 -- ..._1_1lib_1_1storage_1_1Storage-members.html | 81 -- .../html/db/dd5/namespaceFastAPIServer.html | 313 ------ ...s_1_1library__test_1_1Test__Catalogue.html | 153 --- ...ts_1_1library__test_1_1Test__Catalogue.png | Bin 981 -> 0 bytes ...rary__test_1_1Test__Catalogue-members.html | 68 -- ...ckend_1_1lib_1_1overide_1_1ACatalogue.html | 174 ---- ...ackend_1_1lib_1_1overide_1_1ACatalogue.png | Bin 856 -> 0 bytes .../classFastAPIServer_1_1FastAPIServer.html | 356 ------- ...spacesrc_1_1backend_1_1lib_1_1storage.html | 69 -- ...b_1_1api__hooks_1_1DuckDuckGo-members.html | 70 -- ...d_1_1lib_1_1pyShelf_1_1Server-members.html | 77 -- ...ackend_1_1lib_1_1models_1_1Collection.html | 155 --- ...backend_1_1lib_1_1models_1_1Collection.png | Bin 1069 -> 0 bytes .../pyShelf/html/df/d4c/namespaceobjects.html | 65 -- ..._1tests_1_1config__test_1_1TestConfig.html | 163 --- .../dir_1c7294442ce83d360610449d04c9d7fc.html | 79 -- .../dir_3f615ade772d23cefe5e20dcb18424a2.html | 76 -- .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 70 -- .../dir_8509b06bafa958d2011203a730bf5778.html | 65 -- .../dir_9020577e2da81c4cf5a5554c26431f94.html | 71 -- .../dir_d6d65651a873fbc3232a07f3f4a594e4.html | 69 -- docs/pyShelf/html/doc.png | Bin 746 -> 0 bytes docs/pyShelf/html/docd.png | Bin 756 -> 0 bytes docs/pyShelf/html/doxygen.svg | 26 - docs/pyShelf/html/dynsections.js | 130 --- docs/pyShelf/html/files.html | 84 -- docs/pyShelf/html/folderclosed.png | Bin 616 -> 0 bytes docs/pyShelf/html/folderopen.png | Bin 597 -> 0 bytes docs/pyShelf/html/functions.html | 158 --- docs/pyShelf/html/functions_func.html | 158 --- docs/pyShelf/html/hierarchy.html | 81 -- docs/pyShelf/html/index.hhc | 270 ----- docs/pyShelf/html/index.hhk | 260 ----- docs/pyShelf/html/index.hhp | 111 --- docs/pyShelf/html/index.html | 50 - docs/pyShelf/html/jquery.js | 34 - docs/pyShelf/html/menudata.js | 66 -- docs/pyShelf/html/namespacemembers.html | 67 -- docs/pyShelf/html/namespacemembers_func.html | 67 -- docs/pyShelf/html/namespaces.html | 66 -- docs/pyShelf/html/nav_f.png | Bin 153 -> 0 bytes docs/pyShelf/html/nav_fd.png | Bin 169 -> 0 bytes docs/pyShelf/html/nav_g.png | Bin 95 -> 0 bytes docs/pyShelf/html/nav_h.png | Bin 98 -> 0 bytes docs/pyShelf/html/nav_hd.png | Bin 114 -> 0 bytes docs/pyShelf/html/open.png | Bin 123 -> 0 bytes docs/pyShelf/html/splitbar.png | Bin 314 -> 0 bytes docs/pyShelf/html/splitbard.png | Bin 282 -> 0 bytes docs/pyShelf/html/sync_off.png | Bin 853 -> 0 bytes docs/pyShelf/html/sync_on.png | Bin 845 -> 0 bytes docs/pyShelf/html/tab_a.png | Bin 142 -> 0 bytes docs/pyShelf/html/tab_ad.png | Bin 135 -> 0 bytes docs/pyShelf/html/tab_b.png | Bin 169 -> 0 bytes docs/pyShelf/html/tab_bd.png | Bin 173 -> 0 bytes docs/pyShelf/html/tab_h.png | Bin 177 -> 0 bytes docs/pyShelf/html/tab_hd.png | Bin 180 -> 0 bytes docs/pyShelf/html/tab_s.png | Bin 184 -> 0 bytes docs/pyShelf/html/tab_sd.png | Bin 188 -> 0 bytes docs/pyShelf/man/man3/DataHooks.3 | 27 - .../man/man3/DataHooks_BookInterface.3 | 37 - docs/pyShelf/man/man3/FastAPIServer.3 | 149 --- .../man/man3/FastAPIServer_FastAPIServer.3 | 114 --- docs/pyShelf/man/man3/objects.3 | 27 - docs/pyShelf/man/man3/objects_JSInterface.3 | 51 - .../src_backend_lib_api_hooks_DuckDuckGo.3 | 68 -- .../pyShelf/man/man3/src_backend_lib_config.3 | 27 - .../man/man3/src_backend_lib_config_Config.3 | 231 ----- .../man3/src_backend_lib_library_Catalogue.3 | 263 ----- .../man/man3/src_backend_lib_models_Base.3 | 25 - .../man/man3/src_backend_lib_models_Book.3 | 99 -- .../man3/src_backend_lib_models_Collection.3 | 44 - .../man3/src_backend_lib_overide_ACatalogue.3 | 68 -- .../man/man3/src_backend_lib_pyShelf_Admin.3 | 48 - .../man3/src_backend_lib_pyShelf_InitFiles.3 | 46 - .../man/man3/src_backend_lib_pyShelf_Server.3 | 97 -- .../man/man3/src_backend_lib_storage.3 | 27 - .../man3/src_backend_lib_storage_Storage.3 | 238 ----- ...src_backend_tests_config_test_TestConfig.3 | 46 - ...backend_tests_library_test_TestCatalogue.3 | 41 - ...ackend_tests_library_test_Test_Catalogue.3 | 59 -- ...c_backend_tests_library_test_Test_Config.3 | 50 - docs/style.css | 187 ---- docs/warn.log | 205 ---- wiki/Automated Collections.wiki | 24 - wiki/Book Attachment System.wiki | 11 - wiki/Book Scraping System.wiki | 25 - wiki/BrandBoard.pdf | Bin 39407 -> 0 bytes wiki/Client.wiki | 41 - wiki/Description.wiki | 0 wiki/Frontend.wiki | 41 - wiki/License.wiki | 677 ------------- wiki/Notes.wiki | 15 - wiki/OPDS.wiki | 14 - wiki/Program Flow.wiki | 20 - wiki/REST API.wiki | 9 - wiki/TOC.wiki | 11 - wiki/doxygen.wiki | 6 - wiki/index.wiki | 57 -- 213 files changed, 17 insertions(+), 15012 deletions(-) delete mode 100644 docs/Automated Collections.html delete mode 100644 docs/Book Attachment System.html delete mode 100644 docs/Book Scraping System.html delete mode 100644 docs/Client.html delete mode 100644 docs/Description.html delete mode 100644 docs/Frontend.html delete mode 100644 docs/License.html delete mode 100644 docs/Notes.html delete mode 100644 docs/OPDS.html delete mode 100644 docs/Program Flow.html delete mode 100644 docs/REST API.html delete mode 100644 docs/TOC.html delete mode 100644 docs/doxygen.html delete mode 100644 docs/index.html delete mode 100644 docs/pyShelf/html/HTML/D/index.html delete mode 100644 docs/pyShelf/html/HTML/FILEMAP delete mode 100644 docs/pyShelf/html/HTML/GTAGSROOT delete mode 100644 docs/pyShelf/html/HTML/I/index.html delete mode 100644 docs/pyShelf/html/HTML/J/index.html delete mode 100644 docs/pyShelf/html/HTML/R/1.html delete mode 100644 docs/pyShelf/html/HTML/R/2.html delete mode 100644 docs/pyShelf/html/HTML/R/3.html delete mode 100644 docs/pyShelf/html/HTML/R/4.html delete mode 100644 docs/pyShelf/html/HTML/R/5.html delete mode 100644 docs/pyShelf/html/HTML/R/7.html delete mode 100644 docs/pyShelf/html/HTML/R/index.html delete mode 100644 docs/pyShelf/html/HTML/S/2760.html delete mode 100644 docs/pyShelf/html/HTML/S/index.html delete mode 100644 docs/pyShelf/html/HTML/Y/10.html delete mode 100644 docs/pyShelf/html/HTML/Y/11.html delete mode 100644 docs/pyShelf/html/HTML/Y/12.html delete mode 100644 docs/pyShelf/html/HTML/Y/14.html delete mode 100644 docs/pyShelf/html/HTML/Y/15.html delete mode 100644 docs/pyShelf/html/HTML/Y/16.html delete mode 100644 docs/pyShelf/html/HTML/Y/17.html delete mode 100644 docs/pyShelf/html/HTML/Y/2.html delete mode 100644 docs/pyShelf/html/HTML/Y/20.html delete mode 100644 docs/pyShelf/html/HTML/Y/21.html delete mode 100644 docs/pyShelf/html/HTML/Y/22.html delete mode 100644 docs/pyShelf/html/HTML/Y/23.html delete mode 100644 docs/pyShelf/html/HTML/Y/24.html delete mode 100644 docs/pyShelf/html/HTML/Y/25.html delete mode 100644 docs/pyShelf/html/HTML/Y/26.html delete mode 100644 docs/pyShelf/html/HTML/Y/27.html delete mode 100644 docs/pyShelf/html/HTML/Y/29.html delete mode 100644 docs/pyShelf/html/HTML/Y/3.html delete mode 100644 docs/pyShelf/html/HTML/Y/30.html delete mode 100644 docs/pyShelf/html/HTML/Y/32.html delete mode 100644 docs/pyShelf/html/HTML/Y/5.html delete mode 100644 docs/pyShelf/html/HTML/Y/6.html delete mode 100644 docs/pyShelf/html/HTML/Y/7.html delete mode 100644 docs/pyShelf/html/HTML/Y/index.html delete mode 100644 docs/pyShelf/html/HTML/defines.html delete mode 100644 docs/pyShelf/html/HTML/defines/F.html delete mode 100644 docs/pyShelf/html/HTML/defines/_.html delete mode 100644 docs/pyShelf/html/HTML/defines/index.html delete mode 100644 docs/pyShelf/html/HTML/defines/la.html delete mode 100644 docs/pyShelf/html/HTML/defines/li.html delete mode 100644 docs/pyShelf/html/HTML/defines/lk.html delete mode 100644 docs/pyShelf/html/HTML/defines/ll.html delete mode 100644 docs/pyShelf/html/HTML/defines/lp.html delete mode 100644 docs/pyShelf/html/HTML/defines/lr.html delete mode 100644 docs/pyShelf/html/HTML/defines/ls.html delete mode 100644 docs/pyShelf/html/HTML/defines/lt.html delete mode 100644 docs/pyShelf/html/HTML/defines/lw.html delete mode 100644 docs/pyShelf/html/HTML/files.html delete mode 100644 docs/pyShelf/html/HTML/files/3572.html delete mode 100644 docs/pyShelf/html/HTML/files/3573.html delete mode 100644 docs/pyShelf/html/HTML/files/3574.html delete mode 100644 docs/pyShelf/html/HTML/files/3575.html delete mode 100644 docs/pyShelf/html/HTML/files/index.html delete mode 100644 docs/pyShelf/html/HTML/help.html delete mode 100644 docs/pyShelf/html/HTML/index.html delete mode 100644 docs/pyShelf/html/HTML/mains.html delete mode 100644 docs/pyShelf/html/HTML/rebuild.sh delete mode 100644 docs/pyShelf/html/annotated.html delete mode 100644 docs/pyShelf/html/bc_s.png delete mode 100644 docs/pyShelf/html/bc_sd.png delete mode 100644 docs/pyShelf/html/bdwn.png delete mode 100644 docs/pyShelf/html/classes.html delete mode 100644 docs/pyShelf/html/closed.png delete mode 100644 docs/pyShelf/html/d0/d49/classsrc_1_1backend_1_1lib_1_1models_1_1Collection-members.html delete mode 100644 docs/pyShelf/html/d0/d93/namespacesrc_1_1backend_1_1lib_1_1config.html delete mode 100644 docs/pyShelf/html/d1/dca/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1InitFiles-members.html delete mode 100644 docs/pyShelf/html/d2/dcb/classobjects_1_1JSInterface-members.html delete mode 100644 docs/pyShelf/html/d3/d29/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Config.html delete mode 100644 docs/pyShelf/html/d3/d29/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Config.png delete mode 100644 docs/pyShelf/html/d3/d4a/classsrc_1_1backend_1_1lib_1_1config_1_1Config-members.html delete mode 100644 docs/pyShelf/html/d3/d95/classsrc_1_1backend_1_1tests_1_1library__test_1_1TestCatalogue-members.html delete mode 100644 docs/pyShelf/html/d4/d6b/classFastAPIServer_1_1FastAPIServer-members.html delete mode 100644 docs/pyShelf/html/d4/d71/classDataHooks_1_1BookInterface-members.html delete mode 100644 docs/pyShelf/html/d5/d80/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1Admin.html delete mode 100644 docs/pyShelf/html/d5/da5/classsrc_1_1backend_1_1lib_1_1library_1_1Catalogue.html delete mode 100644 docs/pyShelf/html/d5/da5/classsrc_1_1backend_1_1lib_1_1library_1_1Catalogue.png delete mode 100644 docs/pyShelf/html/d5/ddf/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Config-members.html delete mode 100644 docs/pyShelf/html/d5/dee/classsrc_1_1backend_1_1tests_1_1config__test_1_1TestConfig-members.html delete mode 100644 docs/pyShelf/html/d6/d1d/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1Admin-members.html delete mode 100644 docs/pyShelf/html/d6/d20/classsrc_1_1backend_1_1lib_1_1library_1_1Catalogue-members.html delete mode 100644 docs/pyShelf/html/d6/d4e/classsrc_1_1backend_1_1lib_1_1models_1_1Book.html delete mode 100644 docs/pyShelf/html/d6/d4e/classsrc_1_1backend_1_1lib_1_1models_1_1Book.png delete mode 100644 docs/pyShelf/html/d6/d90/classsrc_1_1backend_1_1lib_1_1models_1_1Base.html delete mode 100644 docs/pyShelf/html/d6/d90/classsrc_1_1backend_1_1lib_1_1models_1_1Base.png delete mode 100644 docs/pyShelf/html/d7/d40/classsrc_1_1backend_1_1lib_1_1storage_1_1Storage.html delete mode 100644 docs/pyShelf/html/d7/d88/classsrc_1_1backend_1_1lib_1_1api__hooks_1_1DuckDuckGo.html delete mode 100644 docs/pyShelf/html/d7/db9/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1Server.html delete mode 100644 docs/pyShelf/html/d7/df9/namespaceDataHooks.html delete mode 100644 docs/pyShelf/html/d8/d3d/classsrc_1_1backend_1_1tests_1_1library__test_1_1TestCatalogue.html delete mode 100644 docs/pyShelf/html/d8/def/classobjects_1_1JSInterface.html delete mode 100644 docs/pyShelf/html/d8/dfe/classsrc_1_1backend_1_1lib_1_1config_1_1Config.html delete mode 100644 docs/pyShelf/html/d8/dfe/classsrc_1_1backend_1_1lib_1_1config_1_1Config.png delete mode 100644 docs/pyShelf/html/d9/d71/classDataHooks_1_1BookInterface.html delete mode 100644 docs/pyShelf/html/d9/d8b/classsrc_1_1backend_1_1lib_1_1overide_1_1ACatalogue-members.html delete mode 100644 docs/pyShelf/html/da/d3c/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1InitFiles.html delete mode 100644 docs/pyShelf/html/da/dc1/classsrc_1_1backend_1_1lib_1_1models_1_1Book-members.html delete mode 100644 docs/pyShelf/html/db/d9a/classsrc_1_1backend_1_1lib_1_1storage_1_1Storage-members.html delete mode 100644 docs/pyShelf/html/db/dd5/namespaceFastAPIServer.html delete mode 100644 docs/pyShelf/html/db/dda/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Catalogue.html delete mode 100644 docs/pyShelf/html/db/dda/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Catalogue.png delete mode 100644 docs/pyShelf/html/dc/d3e/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Catalogue-members.html delete mode 100644 docs/pyShelf/html/dc/ded/classsrc_1_1backend_1_1lib_1_1overide_1_1ACatalogue.html delete mode 100644 docs/pyShelf/html/dc/ded/classsrc_1_1backend_1_1lib_1_1overide_1_1ACatalogue.png delete mode 100644 docs/pyShelf/html/dd/d22/classFastAPIServer_1_1FastAPIServer.html delete mode 100644 docs/pyShelf/html/dd/de1/namespacesrc_1_1backend_1_1lib_1_1storage.html delete mode 100644 docs/pyShelf/html/de/d11/classsrc_1_1backend_1_1lib_1_1api__hooks_1_1DuckDuckGo-members.html delete mode 100644 docs/pyShelf/html/de/d6d/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1Server-members.html delete mode 100644 docs/pyShelf/html/df/d03/classsrc_1_1backend_1_1lib_1_1models_1_1Collection.html delete mode 100644 docs/pyShelf/html/df/d03/classsrc_1_1backend_1_1lib_1_1models_1_1Collection.png delete mode 100644 docs/pyShelf/html/df/d4c/namespaceobjects.html delete mode 100644 docs/pyShelf/html/df/d83/classsrc_1_1backend_1_1tests_1_1config__test_1_1TestConfig.html delete mode 100644 docs/pyShelf/html/dir_1c7294442ce83d360610449d04c9d7fc.html delete mode 100644 docs/pyShelf/html/dir_3f615ade772d23cefe5e20dcb18424a2.html delete mode 100644 docs/pyShelf/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html delete mode 100644 docs/pyShelf/html/dir_8509b06bafa958d2011203a730bf5778.html delete mode 100644 docs/pyShelf/html/dir_9020577e2da81c4cf5a5554c26431f94.html delete mode 100644 docs/pyShelf/html/dir_d6d65651a873fbc3232a07f3f4a594e4.html delete mode 100644 docs/pyShelf/html/doc.png delete mode 100644 docs/pyShelf/html/docd.png delete mode 100644 docs/pyShelf/html/doxygen.svg delete mode 100644 docs/pyShelf/html/dynsections.js delete mode 100644 docs/pyShelf/html/files.html delete mode 100644 docs/pyShelf/html/folderclosed.png delete mode 100644 docs/pyShelf/html/folderopen.png delete mode 100644 docs/pyShelf/html/functions.html delete mode 100644 docs/pyShelf/html/functions_func.html delete mode 100644 docs/pyShelf/html/hierarchy.html delete mode 100644 docs/pyShelf/html/index.hhc delete mode 100644 docs/pyShelf/html/index.hhk delete mode 100644 docs/pyShelf/html/index.hhp delete mode 100644 docs/pyShelf/html/index.html delete mode 100644 docs/pyShelf/html/jquery.js delete mode 100644 docs/pyShelf/html/menudata.js delete mode 100644 docs/pyShelf/html/namespacemembers.html delete mode 100644 docs/pyShelf/html/namespacemembers_func.html delete mode 100644 docs/pyShelf/html/namespaces.html delete mode 100644 docs/pyShelf/html/nav_f.png delete mode 100644 docs/pyShelf/html/nav_fd.png delete mode 100644 docs/pyShelf/html/nav_g.png delete mode 100644 docs/pyShelf/html/nav_h.png delete mode 100644 docs/pyShelf/html/nav_hd.png delete mode 100644 docs/pyShelf/html/open.png delete mode 100644 docs/pyShelf/html/splitbar.png delete mode 100644 docs/pyShelf/html/splitbard.png delete mode 100644 docs/pyShelf/html/sync_off.png delete mode 100644 docs/pyShelf/html/sync_on.png delete mode 100644 docs/pyShelf/html/tab_a.png delete mode 100644 docs/pyShelf/html/tab_ad.png delete mode 100644 docs/pyShelf/html/tab_b.png delete mode 100644 docs/pyShelf/html/tab_bd.png delete mode 100644 docs/pyShelf/html/tab_h.png delete mode 100644 docs/pyShelf/html/tab_hd.png delete mode 100644 docs/pyShelf/html/tab_s.png delete mode 100644 docs/pyShelf/html/tab_sd.png delete mode 100644 docs/pyShelf/man/man3/DataHooks.3 delete mode 100644 docs/pyShelf/man/man3/DataHooks_BookInterface.3 delete mode 100644 docs/pyShelf/man/man3/FastAPIServer.3 delete mode 100644 docs/pyShelf/man/man3/FastAPIServer_FastAPIServer.3 delete mode 100644 docs/pyShelf/man/man3/objects.3 delete mode 100644 docs/pyShelf/man/man3/objects_JSInterface.3 delete mode 100644 docs/pyShelf/man/man3/src_backend_lib_api_hooks_DuckDuckGo.3 delete mode 100644 docs/pyShelf/man/man3/src_backend_lib_config.3 delete mode 100644 docs/pyShelf/man/man3/src_backend_lib_config_Config.3 delete mode 100644 docs/pyShelf/man/man3/src_backend_lib_library_Catalogue.3 delete mode 100644 docs/pyShelf/man/man3/src_backend_lib_models_Base.3 delete mode 100644 docs/pyShelf/man/man3/src_backend_lib_models_Book.3 delete mode 100644 docs/pyShelf/man/man3/src_backend_lib_models_Collection.3 delete mode 100644 docs/pyShelf/man/man3/src_backend_lib_overide_ACatalogue.3 delete mode 100644 docs/pyShelf/man/man3/src_backend_lib_pyShelf_Admin.3 delete mode 100644 docs/pyShelf/man/man3/src_backend_lib_pyShelf_InitFiles.3 delete mode 100644 docs/pyShelf/man/man3/src_backend_lib_pyShelf_Server.3 delete mode 100644 docs/pyShelf/man/man3/src_backend_lib_storage.3 delete mode 100644 docs/pyShelf/man/man3/src_backend_lib_storage_Storage.3 delete mode 100644 docs/pyShelf/man/man3/src_backend_tests_config_test_TestConfig.3 delete mode 100644 docs/pyShelf/man/man3/src_backend_tests_library_test_TestCatalogue.3 delete mode 100644 docs/pyShelf/man/man3/src_backend_tests_library_test_Test_Catalogue.3 delete mode 100644 docs/pyShelf/man/man3/src_backend_tests_library_test_Test_Config.3 delete mode 100644 docs/style.css delete mode 100644 docs/warn.log delete mode 100644 wiki/Automated Collections.wiki delete mode 100644 wiki/Book Attachment System.wiki delete mode 100644 wiki/Book Scraping System.wiki delete mode 100644 wiki/BrandBoard.pdf delete mode 100644 wiki/Client.wiki delete mode 100644 wiki/Description.wiki delete mode 100644 wiki/Frontend.wiki delete mode 100644 wiki/License.wiki delete mode 100644 wiki/Notes.wiki delete mode 100644 wiki/OPDS.wiki delete mode 100644 wiki/Program Flow.wiki delete mode 100644 wiki/REST API.wiki delete mode 100644 wiki/TOC.wiki delete mode 100644 wiki/doxygen.wiki delete mode 100644 wiki/index.wiki diff --git a/README.md b/README.md index c26934f..a2a798e 100755 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# pyShelf 0.7.0 +# pyShelf 0.8.0

Terminal based ebook server. Open source & Lightweight.

Having used Calibre for hosting my eBook collection in the past, I found myself frustrated having to install X on my server, or manage my library externally, Thus I have decided to spin up my own.

@@ -13,31 +13,20 @@ _Other solutions require you to have access to an X server to at the very least Follow or influence development @

Discord

-## General Notes -You may need to click import books a second time if your import fails on the first attempt -## 0.7.0 Patch Notes. +## 0.8.0 Patch Notes. -# New Features - -* Administration System -* PDF Support - -## Current Features +## Features * Recursive Scanning -* [Django](https://www.djangoproject.com/) based frontend -* Seach via author, title, & file name fields. +* Fuzzy Search with optional specifiers + - tag:fiction + - author:Clancy + - title:"The Hunt for Red October" + - The Expanse * Download System -* Automated Collections - * A work in progress, the collections are based on your folder structure. -* User System -* Per User Favorites +* Automated Collections based on folder structure * Expanded book information view -* Websocket server - * currently only responds to ping, and importBooks, more responders are planned. -* Full Docker integration. -* On Demand Importing | Branch | Support | Feature set | | --- | --- | --- | @@ -54,78 +43,29 @@ You may need to click import books a second time if your import fails on the fir ## Installation & Support Information # Installation + - curl -fsSL https://raw.githubusercontent.com/th3r00t/pyShelf/refs/heads/0.8.0--dev-zipapp/install.sh | sudo bash -## Docker - -The official Docker image for pyShelf is [`pyshelf/pyshelf`](https://hub.docker.com/r/pyshelf/pyshelf). The easiest way to get pyShelf running is through `docker-compose`. An example docker-compose.yml is included in the repo. - -You'll need a `.env` file wich sets the `LOCAL_BOOK_DIR` variable, for example: - -``` -LOCAL_BOOK_DIR=/home/someone/books -``` - -The Docker image is still new, so there could still be some issues and missing features. Feel free to create a bug-issue when you encounter a bug. Development of the Docker image is discussed in https://github.com/th3r00t/pyShelf/pull/53 . Currently the database needs to be [PostgreSQL](https://www.postgresql.org/) with the account details shown in the example `docker-compose.yml`. - - Default User/Pass for web interface: pyshelf/pyshelf - -## Self Hosted -This is targeted towards Network Administrators, and home enthusiasts whom I assume will know how to setup a [Django](https://www.djangoproject.com/) app, and a [PostgreSQL](https://www.postgresql.org/) server. For those unfamiliar with the required setup please use the included docker-compose.yml - -### Pre-req Dependencies - -* gcc -* python3 -* pip -* postgresql - -Once your database is ready very little is required to get the system up and running: - -From the main directory - -`pip install -r requirements.txt` - -`./configure` - -`cd src/ && daphne frontend.asgi:application` add -b 0.0.0.0 -p 8000 as required to specify which interface\'s and port to bind too - -As of 0.6.0 Django is being served up via Daphne, and the static files are served up via whitenoise. - -## Import Books -The first step is to login, after logging in the button whill show your username, click on it once again, and a new menu will pop up with the option to logout, or import books. ## In Progress ### Organizational tools. -- [x] Automated Collections -- [ ] Manual Collections -- [x] Books Removal -- [ ] Access Restrictions -- [ ] Metadata Manipulation -- [ ] Ui\Ux Improvements -- [ ] Others? +- [x] Automated Collections $id{29fda2fe-4134-4905-8682-aab074acfdb2} +- [ ] Manual Collections $id{c541949c-2e21-46c9-8089-a62fb6d043f6} +- [ ] Books Removal $id{6b577a16-ac19-4f95-bf84-47938d966adf} +- [ ] Access Restrictions $id{b6cf99a7-700b-46dd-9e75-5bc9fc7c4981} +- [ ] Metadata Manipulation $id{35652d34-5d76-4496-92e5-67617a3226ad} +- [ ] UiUx Improvements $id{9dd7c416-8919-40ed-a9a5-9503ad737e97} +- [ ] Others? $id{da6e44b4-312f-43b2-883d-3355a70464e8} ### Improved cover image storage, and acquisition. ### OPDS Support -### Support for other formats - -- [x] .mobi -- [x] .pdf -- [ ] .cbz -- [ ] .zip (Zipped book folders, is this a new idea? (Consider storing your library folders zipped and retrieving a book on demand)) - -## Future Goals - -### Terminal Backend for catalogue maintenance ## Development * [`pre-commit`](https://pre-commit.com/) _Before developing, run `pre-commit install` See the [documentation](https://pre-commit.com/) for more information._ -* ['Doxygen'](http://www.doxygen.nl/) -_Any changes to source should be documented and have run doxygen doxygen.conf prior to commiting._ * ['sem-ver'](https://semver.org) _Before advancing version numbers be sure to set PROJECT_NUMBER in doxygen.conf accordingly._ diff --git a/docs/Automated Collections.html b/docs/Automated Collections.html deleted file mode 100644 index 0d61087..0000000 --- a/docs/Automated Collections.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - -Automated Collections - - - - - -

Automated Collection Management System

-

-The collection management system needs rewritten from the ground up. -The model should look something like this. -

- -

-it is likely the book object will need rewritten as well. -

-
-  Book {
-    id: int
-    title: String
-    # other book metadata
-    collection: list(Collection.id)
-  }
-
- -

- - -

- - - diff --git a/docs/Book Attachment System.html b/docs/Book Attachment System.html deleted file mode 100644 index bf85dd0..0000000 --- a/docs/Book Attachment System.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - -Book Attachment System - - - - - -

-Home TOC github -

-

Book Attachment System

-

Introduction

- -

-The Book Attachment System is used for attaching various filetypes to a book. -This could be helpfull for storing code snippets or notes to technical documents. -

- - -

State

- -

-Concept. -

- - - diff --git a/docs/Book Scraping System.html b/docs/Book Scraping System.html deleted file mode 100644 index 151555c..0000000 --- a/docs/Book Scraping System.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - -Book Scraping System - - - - - -

-Home TOC github -

-

Book Scraping System

-

Introduction

- -

-The Book Scraping System is a custom ebook scraper built from the ground up -for pyShelf. It is designed to be a simple, easy to use, and easy to extend -system for scraping ebooks from the internet. It is powered by BeutifulSoup. -

- -

-pyShelf features a recursive scraping algorithm that itterates over all -sub-folders in your collection. -

- -

Scrapers

- -

Collections

- -

State

- -

-Fully functional. -Awaiting further feature implementation. -

- - - diff --git a/docs/Client.html b/docs/Client.html deleted file mode 100644 index 6fb6d23..0000000 --- a/docs/Client.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - -Client - - - - - -

-Home TOC github -

-

Client

-

-frontend ui -

- -

Dependency Management

-

-dependency -

- - -

T3.gg

-

User System

- -

User Experience

- - -

-ux -

- - -

Data Management

-

-data -

- - - - - diff --git a/docs/Description.html b/docs/Description.html deleted file mode 100644 index 6d87617..0000000 --- a/docs/Description.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - -Description - - - - - - - - diff --git a/docs/Frontend.html b/docs/Frontend.html deleted file mode 100644 index aa56cf1..0000000 --- a/docs/Frontend.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - -Frontend - - - - - -

-Home TOC github -

-

Frontend Services

-

-frontend ui -

- -

Dependency Management

-

-dependency -

- - -

User Management

-

-user -

- - -

User Experience

-

-ux -

- - -

Data Management

-

-data -

- - - - - diff --git a/docs/License.html b/docs/License.html deleted file mode 100644 index 59a416a..0000000 --- a/docs/License.html +++ /dev/null @@ -1,927 +0,0 @@ - - - - - -License - - - - - -

-Home TOC github -

-

GNU GENERAL PUBLIC LICENSE

-

Version 3, 29 June 2007

- -

- Copyright (C) 2007 Free Software Foundation, Inc. https://fsf.org/ - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. -

- -

Preamble

- -

- The GNU General Public License is a free, copyleft license for -software and other kinds of works. -

- -

- The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. -

- -

- When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. -

- -

- To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. -

- -

- For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. -

- -

- Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. -

- -

- For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. -

- -

- Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. -

- -

- Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. -

- -

- The precise terms and conditions for copying, distribution and -modification follow. -

- -

TERMS AND CONDITIONS

- -
    -
  1. -Definitions. - "This License" refers to version 3 of the GNU General Public License. - "Copyright" also means copyright-like laws that apply to other kinds of - -
-

-works, such as semiconductor masks. -

- -

- "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. -

- -

- To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. -

- -

- A "covered work" means either the unmodified Program or a work based -on the Program. -

- -

- To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. -

- -

- To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. -

- -

- An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. -

- -
    -
  1. -Source Code. - The "source code" for a work means the preferred form of the work - -
-

-for making modifications to it. "Object code" means any non-source -form of a work. -

- -

- A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. -

- -

- The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. -

- -

- The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. -

- -

- The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. -

- -

- The Corresponding Source for a work in source code form is that -same work. -

- -
    -
  1. -Basic Permissions. - All rights granted under this License are granted for the term of - -
-

-copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. -

- -

- You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. -

- -

- Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. -

- -
    -
  1. -Protecting Users' Legal Rights From Anti-Circumvention Law. - No covered work shall be deemed part of an effective technological - -
-

-measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. -

- -

- When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. -

- -
    -
  1. -Conveying Verbatim Copies. - You may convey verbatim copies of the Program's source code as you - -
-

-receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. -

- -

- You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. -

- -
    -
  1. -Conveying Modified Source Versions. - You may convey a work based on the Program, or the modifications to - -
-

-produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: -

- -
    -
  1. -The work must carry prominent notices stating that you modified - it, and giving a relevant date. - -
  2. -The work must carry prominent notices stating that it is - released under this License and any conditions added under section - -
  3. - This requirement modifies the requirement in section 4 to - "keep intact all notices". - -
  4. -You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - -
  5. -If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - A compilation of a covered work with other separate and independent - -
-

-works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. -

- -
    -
  1. -Conveying Non-Source Forms. - You may convey a covered work in object code form under the terms - -
-

-of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: -

- -
    -
  1. -Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - -
  2. -Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - -
  3. -Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - -
  4. -Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - -
  5. -Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - A separable portion of the object code, whose source code is excluded - -
-

-from the Corresponding Source as a System Library, need not be -included in conveying the object code work. -

- -

- A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. -

- -

- "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. -

- -

- If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). -

- -

- The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. -

- -

- Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. -

- -
    -
  1. -Additional Terms. - "Additional permissions" are terms that supplement the terms of this - -
-

-License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. -

- -

- When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. -

- -

- Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: -

- -
    -
  1. -Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - -
  2. -Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - -
  3. -Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - -
  4. -Limiting the use for publicity purposes of names of licensors or - authors of the material; or - -
  5. -Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - -
  6. -Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - -
  7. -with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - All other non-permissive additional terms are considered "further - -
-

-restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. -

- -

- If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. -

- -

- Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. -

- -
    -
  1. -Termination. - You may not propagate or modify a covered work except as expressly - -
-

-provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). -

- -

- However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. -

- -

- Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. -

- -

- Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. -

- -
    -
  1. -Acceptance Not Required for Having Copies. - You are not required to accept this License in order to receive or - -
-

-run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. -

- -
    -
  1. -Automatic Licensing of Downstream Recipients. - Each time you convey a covered work, the recipient automatically - -
-

-receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. -

- -

- An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. -

- -

- You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. -

- -
    -
  1. -Patents. - A "contributor" is a copyright holder who authorizes use under this - -
-

-License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". -

- -

- A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. -

- -

- Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. -

- -

- In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. -

- -

- If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. -

- -

- If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. -

- -

- A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. -

- -

- Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. -

- -
    -
  1. -No Surrender of Others' Freedom. - If conditions are imposed on you (whether by court order, agreement or - -
-

-otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. -

- -
    -
  1. -Use with the GNU Affero General Public License. - Notwithstanding any other provision of this License, you have - -
-

-permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. -

- -
    -
  1. -Revised Versions of this License. - The Free Software Foundation may publish revised and/or new versions of - -
-

-the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. -

- -

- Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. -

- -

- If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. -

- -

- Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. -

- -
    -
  1. -Disclaimer of Warranty. - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY - -
-

-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. -

- -
    -
  1. -Limitation of Liability. - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING - -
-

-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. -

- -
    -
  1. -Interpretation of Sections 15 and 16. - If the disclaimer of warranty and limitation of liability provided - -
-

-above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. -

- -

END OF TERMS AND CONDITIONS

- -

How to Apply These Terms to Your New Programs

- -

- If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. -

- -

- To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. -

-
-  <one line to give the program's name and a brief idea of what it does.>
-  Copyright (C) <year>  <name of author>
-
-  This program is free software: you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  This program is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with this program.  If not, see <https://www.gnu.org/licenses/>.
-
- -

-Also add information on how to contact you by electronic and paper mail. -

- -

- If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: -

-
-  <program>  Copyright (C) <year>  <name of author>
-  This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-  This is free software, and you are welcome to redistribute it
-  under certain conditions; type `show c' for details.
-
- -

-The hypothetical commands show w and show c should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". -

- -

- You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -https://www.gnu.org/licenses/. -

- -

- The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -https://www.gnu.org/licenses/why-not-lgpl.html. -

- - - diff --git a/docs/Notes.html b/docs/Notes.html deleted file mode 100644 index 871ba81..0000000 --- a/docs/Notes.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - -Notes - - - - - -

ux

-

Next / React / Material / Typescript

-

Guides

- - - - diff --git a/docs/OPDS.html b/docs/OPDS.html deleted file mode 100644 index 2a95484..0000000 --- a/docs/OPDS.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - -OPDS - - - - - -

-Home TOC github -

-

Open Public Distribution System

-

Introduction

- -

- https://opds-spec.org/ -

- -

- The Open Publication Distribution System (OPDS) Catalog format is a syndication - format for electronic publications based on Atom and HTTP. OPDS Catalogs enable - the aggregation, distribution, discovery, and acquisition of electronic - publications. OPDS Catalogs use existing or emergent open standards and - conventions, with a priority on simplicity. -

- -

State

-

- Concept. -

- - - diff --git a/docs/Program Flow.html b/docs/Program Flow.html deleted file mode 100644 index 2413a1d..0000000 --- a/docs/Program Flow.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - - -Program Flow - - - - - -

PyShelf's Program Flow Chart

- -

Entry Point

-
-  > ./pyShelf.py
-
-

pyShelf.py

- -

run_import()

-

-bookimport -

- - - - diff --git a/docs/REST API.html b/docs/REST API.html deleted file mode 100644 index cd8079f..0000000 --- a/docs/REST API.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - -REST API - - - - - -

-Home TOC github -

-

REST API |project:pyshelf:restapi

- -

Endpoints

- - - - diff --git a/docs/TOC.html b/docs/TOC.html deleted file mode 100644 index 5e15e97..0000000 --- a/docs/TOC.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - -TOC - - - - - -

-Home github -

-

Table Of Contents

- - - - diff --git a/docs/doxygen.html b/docs/doxygen.html deleted file mode 100644 index 5249fdd..0000000 --- a/docs/doxygen.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - -doxygen - - - - - -

-Home TOC github -

-

Doxygen

- -

-Any changes to source should be documented and have run doxygen doxygen.conf prior to commiting. -Before advancing version numbers be sure to set PROJECT_NUMBER in doxygen.conf accordingly. -

- - - diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index bd0a2ea..0000000 --- a/docs/index.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - -index - - - - - -

-TOC github -

-

pyShelf | project:pyshelf

- -

- -

- -

-Version 0.7.0 -GPLv3 -

- -

-pyShelf is an open source ebook server written in Python. -It is designed with ease of use in mind. -

- -

Branches

- -

Formats

- -

-pyShelf supports the following formats: -

- - -

Services

- -

TODO

- -

Development

- -

-pyShelf takes advantage of the following tools: -

- -

- pre-commit doxygen & - VimWiki we also follow - semver standards. -

- - - - - -

- Please note that I use task, vimwiki, & taskwiki to manage my projects. - Due to this Task entries marked via * [ ] task are postfixed with hex color - data. Anyone who knows how to fix that I'm all ears :). -

- - - diff --git a/docs/pyShelf/html/HTML/D/index.html b/docs/pyShelf/html/HTML/D/index.html deleted file mode 100644 index f931715..0000000 --- a/docs/pyShelf/html/HTML/D/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/pyShelf/html/HTML/FILEMAP b/docs/pyShelf/html/HTML/FILEMAP deleted file mode 100644 index d2c3b38..0000000 --- a/docs/pyShelf/html/HTML/FILEMAP +++ /dev/null @@ -1 +0,0 @@ -frontend/node_modules/flatted/php/flatted.php S/2760.html diff --git a/docs/pyShelf/html/HTML/GTAGSROOT b/docs/pyShelf/html/HTML/GTAGSROOT deleted file mode 100644 index 998e0fa..0000000 --- a/docs/pyShelf/html/HTML/GTAGSROOT +++ /dev/null @@ -1 +0,0 @@ -/home/th3r00t/.local/builds/pyShelf/src diff --git a/docs/pyShelf/html/HTML/I/index.html b/docs/pyShelf/html/HTML/I/index.html deleted file mode 100644 index f931715..0000000 --- a/docs/pyShelf/html/HTML/I/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/pyShelf/html/HTML/J/index.html b/docs/pyShelf/html/HTML/J/index.html deleted file mode 100644 index f931715..0000000 --- a/docs/pyShelf/html/HTML/J/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/pyShelf/html/HTML/R/1.html b/docs/pyShelf/html/HTML/R/1.html deleted file mode 100644 index 39423de..0000000 --- a/docs/pyShelf/html/HTML/R/1.html +++ /dev/null @@ -1,26 +0,0 @@ - - - -Flatted - - - - - - -
-Flatted            42 frontend/node_modules/flatted/php/flatted.php       return Flatted::loop(false, array_keys($value), $input, $set, $value);
-Flatted            44 frontend/node_modules/flatted/php/flatted.php       return Flatted::loop(true, Flatted::keys($value), $input, $set, $value);
-Flatted            54 frontend/node_modules/flatted/php/flatted.php     $i = intval(Flatted::index($known, $input, $value));
-Flatted            56 frontend/node_modules/flatted/php/flatted.php       $output[$i] = Flatted::transform($known, $input, $input[$i]);
-Flatted            88 frontend/node_modules/flatted/php/flatted.php         Flatted::ref($obj, $key, $input[$value->value], $input, $set, $output);
-Flatted            98 frontend/node_modules/flatted/php/flatted.php       return Flatted::index($known, $input, $value);
-Flatted           106 frontend/node_modules/flatted/php/flatted.php       $value = Flatted::loop(false, array_keys($value), $input, $set, $value);
-Flatted           110 frontend/node_modules/flatted/php/flatted.php       $value = Flatted::loop(true, Flatted::keys($value), $input, $set, $value);
-Flatted           124 frontend/node_modules/flatted/php/flatted.php           return Flatted::relate($known, $input, $value);
-Flatted           131 frontend/node_modules/flatted/php/flatted.php       $keys = Flatted::keys($value);
-Flatted           133 frontend/node_modules/flatted/php/flatted.php         $object->$key = Flatted::relate($known, $input, $value->$key);
-Flatted           147 frontend/node_modules/flatted/php/flatted.php       $keys = Flatted::keys($value);
-
- - diff --git a/docs/pyShelf/html/HTML/R/2.html b/docs/pyShelf/html/HTML/R/2.html deleted file mode 100644 index e17eeaf..0000000 --- a/docs/pyShelf/html/HTML/R/2.html +++ /dev/null @@ -1,17 +0,0 @@ - - - -FlattedString - - - - - - -
-FlattedString      64 frontend/node_modules/flatted/php/flatted.php     return $value instanceof FlattedString ? $value->value : $value;
-FlattedString      87 frontend/node_modules/flatted/php/flatted.php       if ($value instanceof FlattedString)
-FlattedString     141 frontend/node_modules/flatted/php/flatted.php       return new FlattedString($value);
-
- - diff --git a/docs/pyShelf/html/HTML/R/3.html b/docs/pyShelf/html/HTML/R/3.html deleted file mode 100644 index 2800772..0000000 --- a/docs/pyShelf/html/HTML/R/3.html +++ /dev/null @@ -1,19 +0,0 @@ - - - -index - - - - - - -
-index              54 frontend/node_modules/flatted/php/flatted.php     $i = intval(Flatted::index($known, $input, $value));
-index              69 frontend/node_modules/flatted/php/flatted.php     $index = strval(count($input) - 1);
-index              71 frontend/node_modules/flatted/php/flatted.php     $known->value[] = &$index;
-index              72 frontend/node_modules/flatted/php/flatted.php     return $index;
-index              98 frontend/node_modules/flatted/php/flatted.php       return Flatted::index($known, $input, $value);
-
- - diff --git a/docs/pyShelf/html/HTML/R/4.html b/docs/pyShelf/html/HTML/R/4.html deleted file mode 100644 index 5c1d9d7..0000000 --- a/docs/pyShelf/html/HTML/R/4.html +++ /dev/null @@ -1,25 +0,0 @@ - - - -keys - - - - - - -
-keys               44 frontend/node_modules/flatted/php/flatted.php       return Flatted::loop(true, Flatted::keys($value), $input, $set, $value);
-keys               78 frontend/node_modules/flatted/php/flatted.php     $keys = array();
-keys               80 frontend/node_modules/flatted/php/flatted.php       $keys[] = $prop->getName();
-keys               81 frontend/node_modules/flatted/php/flatted.php     return $keys;
-keys               84 frontend/node_modules/flatted/php/flatted.php   private static function loop($obj, $keys, &$input, &$set, &$output) {
-keys               85 frontend/node_modules/flatted/php/flatted.php     foreach ($keys as $key) {
-keys              110 frontend/node_modules/flatted/php/flatted.php       $value = Flatted::loop(true, Flatted::keys($value), $input, $set, $value);
-keys              131 frontend/node_modules/flatted/php/flatted.php       $keys = Flatted::keys($value);
-keys              132 frontend/node_modules/flatted/php/flatted.php       foreach ($keys as $key)
-keys              147 frontend/node_modules/flatted/php/flatted.php       $keys = Flatted::keys($value);
-keys              148 frontend/node_modules/flatted/php/flatted.php       foreach ($keys as $key) {
-
- - diff --git a/docs/pyShelf/html/HTML/R/5.html b/docs/pyShelf/html/HTML/R/5.html deleted file mode 100644 index 36a457a..0000000 --- a/docs/pyShelf/html/HTML/R/5.html +++ /dev/null @@ -1,18 +0,0 @@ - - - -loop - - - - - - -
-loop               42 frontend/node_modules/flatted/php/flatted.php       return Flatted::loop(false, array_keys($value), $input, $set, $value);
-loop               44 frontend/node_modules/flatted/php/flatted.php       return Flatted::loop(true, Flatted::keys($value), $input, $set, $value);
-loop              106 frontend/node_modules/flatted/php/flatted.php       $value = Flatted::loop(false, array_keys($value), $input, $set, $value);
-loop              110 frontend/node_modules/flatted/php/flatted.php       $value = Flatted::loop(true, Flatted::keys($value), $input, $set, $value);
-
- - diff --git a/docs/pyShelf/html/HTML/R/7.html b/docs/pyShelf/html/HTML/R/7.html deleted file mode 100644 index c565773..0000000 --- a/docs/pyShelf/html/HTML/R/7.html +++ /dev/null @@ -1,16 +0,0 @@ - - - -relate - - - - - - -
-relate            124 frontend/node_modules/flatted/php/flatted.php           return Flatted::relate($known, $input, $value);
-relate            133 frontend/node_modules/flatted/php/flatted.php         $object->$key = Flatted::relate($known, $input, $value->$key);
-
- - diff --git a/docs/pyShelf/html/HTML/R/index.html b/docs/pyShelf/html/HTML/R/index.html deleted file mode 100644 index f931715..0000000 --- a/docs/pyShelf/html/HTML/R/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/pyShelf/html/HTML/S/2760.html b/docs/pyShelf/html/HTML/S/2760.html deleted file mode 100644 index ad1de9c..0000000 --- a/docs/pyShelf/html/HTML/S/2760.html +++ /dev/null @@ -1,191 +0,0 @@ - - - -frontend/node_modules/flatted/php/flatted.php - - - - - - -

root/frontend/node_modules/flatted/php/flatted.php

-/* [<][>][^][v][top][bottom][index][help] */ -
-

DEFINITIONS

-This source file includes following definitions. -
    -
  1. __construct
  2. -
  3. parse
  4. -
  5. stringify
  6. -
  7. asString
  8. -
  9. index
  10. -
  11. keys
  12. -
  13. loop
  14. -
  15. relate
  16. -
  17. ref
  18. -
  19. transform
  20. -
  21. wrap
  22. -
-
-
-   1 <?php
-   2
-   3 /*!
-   4  * ISC License
-   5  * 
-   6  * Copyright (c) 2018-2021, Andrea Giammarchi, @WebReflection
-   7  *
-   8  * Permission to use, copy, modify, and/or distribute this software for any
-   9  * purpose with or without fee is hereby granted, provided that the above
-  10  * copyright notice and this permission notice appear in all copies.
-  11  *
-  12  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-  13  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-  14  * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-  15  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-  16  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-  17  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-  18  * PERFORMANCE OF THIS SOFTWARE.
-  19  */
-  20
-  21 class FlattedString {
-  22   public function __construct($value) {
-  23     $this->value = $value;
-  24   }
-  25 }
-  26
-  27 class Flatted {
-  28
-  29   // public utilities
-  30   public static function parse($json, $assoc = false, $depth = 512, $options = 0) {
-  31     $input = array_map(
-  32       'Flatted::asString',
-  33       array_map(
-  34         'Flatted::wrap',
-  35         json_decode($json, $assoc, $depth, $options)
-  36       )
-  37     );
-  38     $value = &$input[0];
-  39     $set = array();
-  40     $set[] = &$value;
-  41     if (is_array($value))
-  42       return Flatted::loop(false, array_keys($value), $input, $set, $value);
-  43     if (is_object($value))
-  44       return Flatted::loop(true, Flatted::keys($value), $input, $set, $value);
-  45     return $value;
-  46   }
-  47
-  48   public static function stringify($value, $options = 0, $depth = 512) {
-  49     $known = new stdClass;
-  50     $known->key = array();
-  51     $known->value = array();
-  52     $input = array();
-  53     $output = array();
-  54     $i = intval(Flatted::index($known, $input, $value));
-  55     while ($i < count($input)) {
-  56       $output[$i] = Flatted::transform($known, $input, $input[$i]);
-  57       $i++;
-  58     }
-  59     return json_encode($output, $options, $depth);
-  60   }
-  61
-  62   // private helpers
-  63   private static function asString($value) {
-  64     return $value instanceof FlattedString ? $value->value : $value;
-  65   }
-  66
-  67   private static function index(&$known, &$input, &$value) {
-  68     $input[] = &$value;
-  69     $index = strval(count($input) - 1);
-  70     $known->key[] = &$value;
-  71     $known->value[] = &$index;
-  72     return $index;
-  73   }
-  74
-  75   private static function keys(&$value) {
-  76     $obj = new ReflectionObject($value);
-  77     $props = $obj->getProperties();
-  78     $keys = array();
-  79     foreach ($props as $prop)
-  80       $keys[] = $prop->getName();
-  81     return $keys;
-  82   }
-  83
-  84   private static function loop($obj, $keys, &$input, &$set, &$output) {
-  85     foreach ($keys as $key) {
-  86       $value = $obj ? $output->$key : $output[$key];
-  87       if ($value instanceof FlattedString)
-  88         Flatted::ref($obj, $key, $input[$value->value], $input, $set, $output);
-  89     }
-  90     return $output;
-  91   }
-  92
-  93   private static function relate(&$known, &$input, &$value) {
-  94     if (is_string($value) || is_array($value) || is_object($value)) {
-  95       $key = array_search($value, $known->key, true);
-  96       if ($key !== false)
-  97         return $known->value[$key];
-  98       return Flatted::index($known, $input, $value);
-  99     }
- 100     return $value;
- 101   }
- 102
- 103   private static function ref($obj, &$key, &$value, &$input, &$set, &$output) {
- 104     if (is_array($value) && !in_array($value, $set, true)) {
- 105       $set[] = $value;
- 106       $value = Flatted::loop(false, array_keys($value), $input, $set, $value);
- 107     }
- 108     elseif (is_object($value) && !in_array($value, $set, true)) {
- 109       $set[] = $value;
- 110       $value = Flatted::loop(true, Flatted::keys($value), $input, $set, $value);
- 111     }
- 112     if ($obj) {
- 113       $output->$key = &$value;
- 114     }
- 115     else {
- 116       $output[$key] = &$value;
- 117     }
- 118   }
- 119
- 120   private static function transform(&$known, &$input, &$value) {
- 121     if (is_array($value)) {
- 122       return array_map(
- 123         function ($value) use(&$known, &$input) {
- 124           return Flatted::relate($known, $input, $value);
- 125         },
- 126         $value
- 127       );
- 128     }
- 129     if (is_object($value)) {
- 130       $object = new stdClass;
- 131       $keys = Flatted::keys($value);
- 132       foreach ($keys as $key)
- 133         $object->$key = Flatted::relate($known, $input, $value->$key);
- 134       return $object;
- 135     }
- 136     return $value;
- 137   }
- 138
- 139   private static function wrap($value) {
- 140     if (is_string($value)) {
- 141       return new FlattedString($value);
- 142     }
- 143     if (is_array($value)) {
- 144       return array_map('Flatted::wrap', $value);
- 145     }
- 146     if (is_object($value)) {
- 147       $keys = Flatted::keys($value);
- 148       foreach ($keys as $key) {
- 149         $value->$key = self::wrap($value->$key);
- 150       }
- 151       return $value;
- 152     }
- 153     return $value;
- 154   }
- 155 }
-
-
- -/* [<][>][^][v][top][bottom][index][help] */ - - diff --git a/docs/pyShelf/html/HTML/S/index.html b/docs/pyShelf/html/HTML/S/index.html deleted file mode 100644 index f931715..0000000 --- a/docs/pyShelf/html/HTML/S/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/pyShelf/html/HTML/Y/10.html b/docs/pyShelf/html/HTML/Y/10.html deleted file mode 100644 index c2640e8..0000000 --- a/docs/pyShelf/html/HTML/Y/10.html +++ /dev/null @@ -1,18 +0,0 @@ - - - -i - - - - - - -
-i                  54 frontend/node_modules/flatted/php/flatted.php     $i = intval(Flatted::index($known, $input, $value));
-i                  55 frontend/node_modules/flatted/php/flatted.php     while ($i < count($input)) {
-i                  56 frontend/node_modules/flatted/php/flatted.php       $output[$i] = Flatted::transform($known, $input, $input[$i]);
-i                  57 frontend/node_modules/flatted/php/flatted.php       $i++;
-
- - diff --git a/docs/pyShelf/html/HTML/Y/11.html b/docs/pyShelf/html/HTML/Y/11.html deleted file mode 100644 index 600fcb1..0000000 --- a/docs/pyShelf/html/HTML/Y/11.html +++ /dev/null @@ -1,16 +0,0 @@ - - - -in_array - - - - - - -
-in_array          104 frontend/node_modules/flatted/php/flatted.php     if (is_array($value) && !in_array($value, $set, true)) {
-in_array          108 frontend/node_modules/flatted/php/flatted.php     elseif (is_object($value) && !in_array($value, $set, true)) {
-
- - diff --git a/docs/pyShelf/html/HTML/Y/12.html b/docs/pyShelf/html/HTML/Y/12.html deleted file mode 100644 index 28807a7..0000000 --- a/docs/pyShelf/html/HTML/Y/12.html +++ /dev/null @@ -1,36 +0,0 @@ - - - -input - - - - - - -
-input              31 frontend/node_modules/flatted/php/flatted.php     $input = array_map(
-input              38 frontend/node_modules/flatted/php/flatted.php     $value = &$input[0];
-input              42 frontend/node_modules/flatted/php/flatted.php       return Flatted::loop(false, array_keys($value), $input, $set, $value);
-input              44 frontend/node_modules/flatted/php/flatted.php       return Flatted::loop(true, Flatted::keys($value), $input, $set, $value);
-input              52 frontend/node_modules/flatted/php/flatted.php     $input = array();
-input              54 frontend/node_modules/flatted/php/flatted.php     $i = intval(Flatted::index($known, $input, $value));
-input              55 frontend/node_modules/flatted/php/flatted.php     while ($i < count($input)) {
-input              56 frontend/node_modules/flatted/php/flatted.php       $output[$i] = Flatted::transform($known, $input, $input[$i]);
-input              67 frontend/node_modules/flatted/php/flatted.php   private static function index(&$known, &$input, &$value) {
-input              68 frontend/node_modules/flatted/php/flatted.php     $input[] = &$value;
-input              69 frontend/node_modules/flatted/php/flatted.php     $index = strval(count($input) - 1);
-input              84 frontend/node_modules/flatted/php/flatted.php   private static function loop($obj, $keys, &$input, &$set, &$output) {
-input              88 frontend/node_modules/flatted/php/flatted.php         Flatted::ref($obj, $key, $input[$value->value], $input, $set, $output);
-input              93 frontend/node_modules/flatted/php/flatted.php   private static function relate(&$known, &$input, &$value) {
-input              98 frontend/node_modules/flatted/php/flatted.php       return Flatted::index($known, $input, $value);
-input             103 frontend/node_modules/flatted/php/flatted.php   private static function ref($obj, &$key, &$value, &$input, &$set, &$output) {
-input             106 frontend/node_modules/flatted/php/flatted.php       $value = Flatted::loop(false, array_keys($value), $input, $set, $value);
-input             110 frontend/node_modules/flatted/php/flatted.php       $value = Flatted::loop(true, Flatted::keys($value), $input, $set, $value);
-input             120 frontend/node_modules/flatted/php/flatted.php   private static function transform(&$known, &$input, &$value) {
-input             123 frontend/node_modules/flatted/php/flatted.php         function ($value) use(&$known, &$input) {
-input             124 frontend/node_modules/flatted/php/flatted.php           return Flatted::relate($known, $input, $value);
-input             133 frontend/node_modules/flatted/php/flatted.php         $object->$key = Flatted::relate($known, $input, $value->$key);
-
- - diff --git a/docs/pyShelf/html/HTML/Y/14.html b/docs/pyShelf/html/HTML/Y/14.html deleted file mode 100644 index 2b8a384..0000000 --- a/docs/pyShelf/html/HTML/Y/14.html +++ /dev/null @@ -1,19 +0,0 @@ - - - -is_array - - - - - - -
-is_array           41 frontend/node_modules/flatted/php/flatted.php     if (is_array($value))
-is_array           94 frontend/node_modules/flatted/php/flatted.php     if (is_string($value) || is_array($value) || is_object($value)) {
-is_array          104 frontend/node_modules/flatted/php/flatted.php     if (is_array($value) && !in_array($value, $set, true)) {
-is_array          121 frontend/node_modules/flatted/php/flatted.php     if (is_array($value)) {
-is_array          143 frontend/node_modules/flatted/php/flatted.php     if (is_array($value)) {
-
- - diff --git a/docs/pyShelf/html/HTML/Y/15.html b/docs/pyShelf/html/HTML/Y/15.html deleted file mode 100644 index c6dddf9..0000000 --- a/docs/pyShelf/html/HTML/Y/15.html +++ /dev/null @@ -1,19 +0,0 @@ - - - -is_object - - - - - - -
-is_object          43 frontend/node_modules/flatted/php/flatted.php     if (is_object($value))
-is_object          94 frontend/node_modules/flatted/php/flatted.php     if (is_string($value) || is_array($value) || is_object($value)) {
-is_object         108 frontend/node_modules/flatted/php/flatted.php     elseif (is_object($value) && !in_array($value, $set, true)) {
-is_object         129 frontend/node_modules/flatted/php/flatted.php     if (is_object($value)) {
-is_object         146 frontend/node_modules/flatted/php/flatted.php     if (is_object($value)) {
-
- - diff --git a/docs/pyShelf/html/HTML/Y/16.html b/docs/pyShelf/html/HTML/Y/16.html deleted file mode 100644 index 1d96fcc..0000000 --- a/docs/pyShelf/html/HTML/Y/16.html +++ /dev/null @@ -1,16 +0,0 @@ - - - -is_string - - - - - - -
-is_string          94 frontend/node_modules/flatted/php/flatted.php     if (is_string($value) || is_array($value) || is_object($value)) {
-is_string         140 frontend/node_modules/flatted/php/flatted.php     if (is_string($value)) {
-
- - diff --git a/docs/pyShelf/html/HTML/Y/17.html b/docs/pyShelf/html/HTML/Y/17.html deleted file mode 100644 index 3805311..0000000 --- a/docs/pyShelf/html/HTML/Y/17.html +++ /dev/null @@ -1,16 +0,0 @@ - - - -json - - - - - - -
-json               30 frontend/node_modules/flatted/php/flatted.php   public static function parse($json, $assoc = false, $depth = 512, $options = 0) {
-json               35 frontend/node_modules/flatted/php/flatted.php         json_decode($json, $assoc, $depth, $options)
-
- - diff --git a/docs/pyShelf/html/HTML/Y/2.html b/docs/pyShelf/html/HTML/Y/2.html deleted file mode 100644 index 1d42fe2..0000000 --- a/docs/pyShelf/html/HTML/Y/2.html +++ /dev/null @@ -1,16 +0,0 @@ - - - -array_keys - - - - - - -
-array_keys         42 frontend/node_modules/flatted/php/flatted.php       return Flatted::loop(false, array_keys($value), $input, $set, $value);
-array_keys        106 frontend/node_modules/flatted/php/flatted.php       $value = Flatted::loop(false, array_keys($value), $input, $set, $value);
-
- - diff --git a/docs/pyShelf/html/HTML/Y/20.html b/docs/pyShelf/html/HTML/Y/20.html deleted file mode 100644 index 41b681c..0000000 --- a/docs/pyShelf/html/HTML/Y/20.html +++ /dev/null @@ -1,29 +0,0 @@ - - - -key - - - - - - -
-key                50 frontend/node_modules/flatted/php/flatted.php     $known->key = array();
-key                70 frontend/node_modules/flatted/php/flatted.php     $known->key[] = &$value;
-key                85 frontend/node_modules/flatted/php/flatted.php     foreach ($keys as $key) {
-key                86 frontend/node_modules/flatted/php/flatted.php       $value = $obj ? $output->$key : $output[$key];
-key                88 frontend/node_modules/flatted/php/flatted.php         Flatted::ref($obj, $key, $input[$value->value], $input, $set, $output);
-key                95 frontend/node_modules/flatted/php/flatted.php       $key = array_search($value, $known->key, true);
-key                96 frontend/node_modules/flatted/php/flatted.php       if ($key !== false)
-key                97 frontend/node_modules/flatted/php/flatted.php         return $known->value[$key];
-key               103 frontend/node_modules/flatted/php/flatted.php   private static function ref($obj, &$key, &$value, &$input, &$set, &$output) {
-key               113 frontend/node_modules/flatted/php/flatted.php       $output->$key = &$value;
-key               116 frontend/node_modules/flatted/php/flatted.php       $output[$key] = &$value;
-key               132 frontend/node_modules/flatted/php/flatted.php       foreach ($keys as $key)
-key               133 frontend/node_modules/flatted/php/flatted.php         $object->$key = Flatted::relate($known, $input, $value->$key);
-key               148 frontend/node_modules/flatted/php/flatted.php       foreach ($keys as $key) {
-key               149 frontend/node_modules/flatted/php/flatted.php         $value->$key = self::wrap($value->$key);
-
- - diff --git a/docs/pyShelf/html/HTML/Y/21.html b/docs/pyShelf/html/HTML/Y/21.html deleted file mode 100644 index f347913..0000000 --- a/docs/pyShelf/html/HTML/Y/21.html +++ /dev/null @@ -1,30 +0,0 @@ - - - -known - - - - - - -
-known              49 frontend/node_modules/flatted/php/flatted.php     $known = new stdClass;
-known              50 frontend/node_modules/flatted/php/flatted.php     $known->key = array();
-known              51 frontend/node_modules/flatted/php/flatted.php     $known->value = array();
-known              54 frontend/node_modules/flatted/php/flatted.php     $i = intval(Flatted::index($known, $input, $value));
-known              56 frontend/node_modules/flatted/php/flatted.php       $output[$i] = Flatted::transform($known, $input, $input[$i]);
-known              67 frontend/node_modules/flatted/php/flatted.php   private static function index(&$known, &$input, &$value) {
-known              70 frontend/node_modules/flatted/php/flatted.php     $known->key[] = &$value;
-known              71 frontend/node_modules/flatted/php/flatted.php     $known->value[] = &$index;
-known              93 frontend/node_modules/flatted/php/flatted.php   private static function relate(&$known, &$input, &$value) {
-known              95 frontend/node_modules/flatted/php/flatted.php       $key = array_search($value, $known->key, true);
-known              97 frontend/node_modules/flatted/php/flatted.php         return $known->value[$key];
-known              98 frontend/node_modules/flatted/php/flatted.php       return Flatted::index($known, $input, $value);
-known             120 frontend/node_modules/flatted/php/flatted.php   private static function transform(&$known, &$input, &$value) {
-known             123 frontend/node_modules/flatted/php/flatted.php         function ($value) use(&$known, &$input) {
-known             124 frontend/node_modules/flatted/php/flatted.php           return Flatted::relate($known, $input, $value);
-known             133 frontend/node_modules/flatted/php/flatted.php         $object->$key = Flatted::relate($known, $input, $value->$key);
-
- - diff --git a/docs/pyShelf/html/HTML/Y/22.html b/docs/pyShelf/html/HTML/Y/22.html deleted file mode 100644 index 38cf29f..0000000 --- a/docs/pyShelf/html/HTML/Y/22.html +++ /dev/null @@ -1,21 +0,0 @@ - - - -obj - - - - - - -
-obj                76 frontend/node_modules/flatted/php/flatted.php     $obj = new ReflectionObject($value);
-obj                77 frontend/node_modules/flatted/php/flatted.php     $props = $obj->getProperties();
-obj                84 frontend/node_modules/flatted/php/flatted.php   private static function loop($obj, $keys, &$input, &$set, &$output) {
-obj                86 frontend/node_modules/flatted/php/flatted.php       $value = $obj ? $output->$key : $output[$key];
-obj                88 frontend/node_modules/flatted/php/flatted.php         Flatted::ref($obj, $key, $input[$value->value], $input, $set, $output);
-obj               103 frontend/node_modules/flatted/php/flatted.php   private static function ref($obj, &$key, &$value, &$input, &$set, &$output) {
-obj               112 frontend/node_modules/flatted/php/flatted.php     if ($obj) {
-
- - diff --git a/docs/pyShelf/html/HTML/Y/23.html b/docs/pyShelf/html/HTML/Y/23.html deleted file mode 100644 index 1cb2161..0000000 --- a/docs/pyShelf/html/HTML/Y/23.html +++ /dev/null @@ -1,17 +0,0 @@ - - - -object - - - - - - -
-object            130 frontend/node_modules/flatted/php/flatted.php       $object = new stdClass;
-object            133 frontend/node_modules/flatted/php/flatted.php         $object->$key = Flatted::relate($known, $input, $value->$key);
-object            134 frontend/node_modules/flatted/php/flatted.php       return $object;
-
- - diff --git a/docs/pyShelf/html/HTML/Y/24.html b/docs/pyShelf/html/HTML/Y/24.html deleted file mode 100644 index 9825d1c..0000000 --- a/docs/pyShelf/html/HTML/Y/24.html +++ /dev/null @@ -1,18 +0,0 @@ - - - -options - - - - - - -
-options            30 frontend/node_modules/flatted/php/flatted.php   public static function parse($json, $assoc = false, $depth = 512, $options = 0) {
-options            35 frontend/node_modules/flatted/php/flatted.php         json_decode($json, $assoc, $depth, $options)
-options            48 frontend/node_modules/flatted/php/flatted.php   public static function stringify($value, $options = 0, $depth = 512) {
-options            59 frontend/node_modules/flatted/php/flatted.php     return json_encode($output, $options, $depth);
-
- - diff --git a/docs/pyShelf/html/HTML/Y/25.html b/docs/pyShelf/html/HTML/Y/25.html deleted file mode 100644 index dcfdcd0..0000000 --- a/docs/pyShelf/html/HTML/Y/25.html +++ /dev/null @@ -1,24 +0,0 @@ - - - -output - - - - - - -
-output             53 frontend/node_modules/flatted/php/flatted.php     $output = array();
-output             56 frontend/node_modules/flatted/php/flatted.php       $output[$i] = Flatted::transform($known, $input, $input[$i]);
-output             59 frontend/node_modules/flatted/php/flatted.php     return json_encode($output, $options, $depth);
-output             84 frontend/node_modules/flatted/php/flatted.php   private static function loop($obj, $keys, &$input, &$set, &$output) {
-output             86 frontend/node_modules/flatted/php/flatted.php       $value = $obj ? $output->$key : $output[$key];
-output             88 frontend/node_modules/flatted/php/flatted.php         Flatted::ref($obj, $key, $input[$value->value], $input, $set, $output);
-output             90 frontend/node_modules/flatted/php/flatted.php     return $output;
-output            103 frontend/node_modules/flatted/php/flatted.php   private static function ref($obj, &$key, &$value, &$input, &$set, &$output) {
-output            113 frontend/node_modules/flatted/php/flatted.php       $output->$key = &$value;
-output            116 frontend/node_modules/flatted/php/flatted.php       $output[$key] = &$value;
-
- - diff --git a/docs/pyShelf/html/HTML/Y/26.html b/docs/pyShelf/html/HTML/Y/26.html deleted file mode 100644 index 0f85d8e..0000000 --- a/docs/pyShelf/html/HTML/Y/26.html +++ /dev/null @@ -1,16 +0,0 @@ - - - -prop - - - - - - -
-prop               79 frontend/node_modules/flatted/php/flatted.php     foreach ($props as $prop)
-prop               80 frontend/node_modules/flatted/php/flatted.php       $keys[] = $prop->getName();
-
- - diff --git a/docs/pyShelf/html/HTML/Y/27.html b/docs/pyShelf/html/HTML/Y/27.html deleted file mode 100644 index bdcc710..0000000 --- a/docs/pyShelf/html/HTML/Y/27.html +++ /dev/null @@ -1,16 +0,0 @@ - - - -props - - - - - - -
-props              77 frontend/node_modules/flatted/php/flatted.php     $props = $obj->getProperties();
-props              79 frontend/node_modules/flatted/php/flatted.php     foreach ($props as $prop)
-
- - diff --git a/docs/pyShelf/html/HTML/Y/29.html b/docs/pyShelf/html/HTML/Y/29.html deleted file mode 100644 index ba947df..0000000 --- a/docs/pyShelf/html/HTML/Y/29.html +++ /dev/null @@ -1,27 +0,0 @@ - - - -set - - - - - - -
-set                39 frontend/node_modules/flatted/php/flatted.php     $set = array();
-set                40 frontend/node_modules/flatted/php/flatted.php     $set[] = &$value;
-set                42 frontend/node_modules/flatted/php/flatted.php       return Flatted::loop(false, array_keys($value), $input, $set, $value);
-set                44 frontend/node_modules/flatted/php/flatted.php       return Flatted::loop(true, Flatted::keys($value), $input, $set, $value);
-set                84 frontend/node_modules/flatted/php/flatted.php   private static function loop($obj, $keys, &$input, &$set, &$output) {
-set                88 frontend/node_modules/flatted/php/flatted.php         Flatted::ref($obj, $key, $input[$value->value], $input, $set, $output);
-set               103 frontend/node_modules/flatted/php/flatted.php   private static function ref($obj, &$key, &$value, &$input, &$set, &$output) {
-set               104 frontend/node_modules/flatted/php/flatted.php     if (is_array($value) && !in_array($value, $set, true)) {
-set               105 frontend/node_modules/flatted/php/flatted.php       $set[] = $value;
-set               106 frontend/node_modules/flatted/php/flatted.php       $value = Flatted::loop(false, array_keys($value), $input, $set, $value);
-set               108 frontend/node_modules/flatted/php/flatted.php     elseif (is_object($value) && !in_array($value, $set, true)) {
-set               109 frontend/node_modules/flatted/php/flatted.php       $set[] = $value;
-set               110 frontend/node_modules/flatted/php/flatted.php       $value = Flatted::loop(true, Flatted::keys($value), $input, $set, $value);
-
- - diff --git a/docs/pyShelf/html/HTML/Y/3.html b/docs/pyShelf/html/HTML/Y/3.html deleted file mode 100644 index 6eb3c08..0000000 --- a/docs/pyShelf/html/HTML/Y/3.html +++ /dev/null @@ -1,18 +0,0 @@ - - - -array_map - - - - - - -
-array_map          31 frontend/node_modules/flatted/php/flatted.php     $input = array_map(
-array_map          33 frontend/node_modules/flatted/php/flatted.php       array_map(
-array_map         122 frontend/node_modules/flatted/php/flatted.php       return array_map(
-array_map         144 frontend/node_modules/flatted/php/flatted.php       return array_map('Flatted::wrap', $value);
-
- - diff --git a/docs/pyShelf/html/HTML/Y/30.html b/docs/pyShelf/html/HTML/Y/30.html deleted file mode 100644 index 88a97d3..0000000 --- a/docs/pyShelf/html/HTML/Y/30.html +++ /dev/null @@ -1,16 +0,0 @@ - - - -stdClass - - - - - - -
-stdClass           49 frontend/node_modules/flatted/php/flatted.php     $known = new stdClass;
-stdClass          130 frontend/node_modules/flatted/php/flatted.php       $object = new stdClass;
-
- - diff --git a/docs/pyShelf/html/HTML/Y/32.html b/docs/pyShelf/html/HTML/Y/32.html deleted file mode 100644 index 4c478ed..0000000 --- a/docs/pyShelf/html/HTML/Y/32.html +++ /dev/null @@ -1,71 +0,0 @@ - - - -value - - - - - - -
-value              22 frontend/node_modules/flatted/php/flatted.php   public function __construct($value) {
-value              23 frontend/node_modules/flatted/php/flatted.php     $this->value = $value;
-value              38 frontend/node_modules/flatted/php/flatted.php     $value = &$input[0];
-value              40 frontend/node_modules/flatted/php/flatted.php     $set[] = &$value;
-value              41 frontend/node_modules/flatted/php/flatted.php     if (is_array($value))
-value              42 frontend/node_modules/flatted/php/flatted.php       return Flatted::loop(false, array_keys($value), $input, $set, $value);
-value              43 frontend/node_modules/flatted/php/flatted.php     if (is_object($value))
-value              44 frontend/node_modules/flatted/php/flatted.php       return Flatted::loop(true, Flatted::keys($value), $input, $set, $value);
-value              45 frontend/node_modules/flatted/php/flatted.php     return $value;
-value              48 frontend/node_modules/flatted/php/flatted.php   public static function stringify($value, $options = 0, $depth = 512) {
-value              51 frontend/node_modules/flatted/php/flatted.php     $known->value = array();
-value              54 frontend/node_modules/flatted/php/flatted.php     $i = intval(Flatted::index($known, $input, $value));
-value              63 frontend/node_modules/flatted/php/flatted.php   private static function asString($value) {
-value              64 frontend/node_modules/flatted/php/flatted.php     return $value instanceof FlattedString ? $value->value : $value;
-value              67 frontend/node_modules/flatted/php/flatted.php   private static function index(&$known, &$input, &$value) {
-value              68 frontend/node_modules/flatted/php/flatted.php     $input[] = &$value;
-value              70 frontend/node_modules/flatted/php/flatted.php     $known->key[] = &$value;
-value              71 frontend/node_modules/flatted/php/flatted.php     $known->value[] = &$index;
-value              75 frontend/node_modules/flatted/php/flatted.php   private static function keys(&$value) {
-value              76 frontend/node_modules/flatted/php/flatted.php     $obj = new ReflectionObject($value);
-value              86 frontend/node_modules/flatted/php/flatted.php       $value = $obj ? $output->$key : $output[$key];
-value              87 frontend/node_modules/flatted/php/flatted.php       if ($value instanceof FlattedString)
-value              88 frontend/node_modules/flatted/php/flatted.php         Flatted::ref($obj, $key, $input[$value->value], $input, $set, $output);
-value              93 frontend/node_modules/flatted/php/flatted.php   private static function relate(&$known, &$input, &$value) {
-value              94 frontend/node_modules/flatted/php/flatted.php     if (is_string($value) || is_array($value) || is_object($value)) {
-value              95 frontend/node_modules/flatted/php/flatted.php       $key = array_search($value, $known->key, true);
-value              97 frontend/node_modules/flatted/php/flatted.php         return $known->value[$key];
-value              98 frontend/node_modules/flatted/php/flatted.php       return Flatted::index($known, $input, $value);
-value             100 frontend/node_modules/flatted/php/flatted.php     return $value;
-value             103 frontend/node_modules/flatted/php/flatted.php   private static function ref($obj, &$key, &$value, &$input, &$set, &$output) {
-value             104 frontend/node_modules/flatted/php/flatted.php     if (is_array($value) && !in_array($value, $set, true)) {
-value             105 frontend/node_modules/flatted/php/flatted.php       $set[] = $value;
-value             106 frontend/node_modules/flatted/php/flatted.php       $value = Flatted::loop(false, array_keys($value), $input, $set, $value);
-value             108 frontend/node_modules/flatted/php/flatted.php     elseif (is_object($value) && !in_array($value, $set, true)) {
-value             109 frontend/node_modules/flatted/php/flatted.php       $set[] = $value;
-value             110 frontend/node_modules/flatted/php/flatted.php       $value = Flatted::loop(true, Flatted::keys($value), $input, $set, $value);
-value             113 frontend/node_modules/flatted/php/flatted.php       $output->$key = &$value;
-value             116 frontend/node_modules/flatted/php/flatted.php       $output[$key] = &$value;
-value             120 frontend/node_modules/flatted/php/flatted.php   private static function transform(&$known, &$input, &$value) {
-value             121 frontend/node_modules/flatted/php/flatted.php     if (is_array($value)) {
-value             123 frontend/node_modules/flatted/php/flatted.php         function ($value) use(&$known, &$input) {
-value             124 frontend/node_modules/flatted/php/flatted.php           return Flatted::relate($known, $input, $value);
-value             126 frontend/node_modules/flatted/php/flatted.php         $value
-value             129 frontend/node_modules/flatted/php/flatted.php     if (is_object($value)) {
-value             131 frontend/node_modules/flatted/php/flatted.php       $keys = Flatted::keys($value);
-value             133 frontend/node_modules/flatted/php/flatted.php         $object->$key = Flatted::relate($known, $input, $value->$key);
-value             136 frontend/node_modules/flatted/php/flatted.php     return $value;
-value             139 frontend/node_modules/flatted/php/flatted.php   private static function wrap($value) {
-value             140 frontend/node_modules/flatted/php/flatted.php     if (is_string($value)) {
-value             141 frontend/node_modules/flatted/php/flatted.php       return new FlattedString($value);
-value             143 frontend/node_modules/flatted/php/flatted.php     if (is_array($value)) {
-value             144 frontend/node_modules/flatted/php/flatted.php       return array_map('Flatted::wrap', $value);
-value             146 frontend/node_modules/flatted/php/flatted.php     if (is_object($value)) {
-value             147 frontend/node_modules/flatted/php/flatted.php       $keys = Flatted::keys($value);
-value             149 frontend/node_modules/flatted/php/flatted.php         $value->$key = self::wrap($value->$key);
-value             151 frontend/node_modules/flatted/php/flatted.php       return $value;
-value             153 frontend/node_modules/flatted/php/flatted.php     return $value;
-
- - diff --git a/docs/pyShelf/html/HTML/Y/5.html b/docs/pyShelf/html/HTML/Y/5.html deleted file mode 100644 index 1665b5a..0000000 --- a/docs/pyShelf/html/HTML/Y/5.html +++ /dev/null @@ -1,16 +0,0 @@ - - - -assoc - - - - - - -
-assoc              30 frontend/node_modules/flatted/php/flatted.php   public static function parse($json, $assoc = false, $depth = 512, $options = 0) {
-assoc              35 frontend/node_modules/flatted/php/flatted.php         json_decode($json, $assoc, $depth, $options)
-
- - diff --git a/docs/pyShelf/html/HTML/Y/6.html b/docs/pyShelf/html/HTML/Y/6.html deleted file mode 100644 index 8730e19..0000000 --- a/docs/pyShelf/html/HTML/Y/6.html +++ /dev/null @@ -1,16 +0,0 @@ - - - -count - - - - - - -
-count              55 frontend/node_modules/flatted/php/flatted.php     while ($i < count($input)) {
-count              69 frontend/node_modules/flatted/php/flatted.php     $index = strval(count($input) - 1);
-
- - diff --git a/docs/pyShelf/html/HTML/Y/7.html b/docs/pyShelf/html/HTML/Y/7.html deleted file mode 100644 index 0402737..0000000 --- a/docs/pyShelf/html/HTML/Y/7.html +++ /dev/null @@ -1,18 +0,0 @@ - - - -depth - - - - - - -
-depth              30 frontend/node_modules/flatted/php/flatted.php   public static function parse($json, $assoc = false, $depth = 512, $options = 0) {
-depth              35 frontend/node_modules/flatted/php/flatted.php         json_decode($json, $assoc, $depth, $options)
-depth              48 frontend/node_modules/flatted/php/flatted.php   public static function stringify($value, $options = 0, $depth = 512) {
-depth              59 frontend/node_modules/flatted/php/flatted.php     return json_encode($output, $options, $depth);
-
- - diff --git a/docs/pyShelf/html/HTML/Y/index.html b/docs/pyShelf/html/HTML/Y/index.html deleted file mode 100644 index f931715..0000000 --- a/docs/pyShelf/html/HTML/Y/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/pyShelf/html/HTML/defines.html b/docs/pyShelf/html/HTML/defines.html deleted file mode 100644 index 2c6549d..0000000 --- a/docs/pyShelf/html/HTML/defines.html +++ /dev/null @@ -1,24 +0,0 @@ - - - -DEFINITIONS - - - - - - -

DEFINITIONS

-[F] -[_] -[a] -[i] -[k] -[l] -[p] -[r] -[s] -[t] -[w] - - diff --git a/docs/pyShelf/html/HTML/defines/F.html b/docs/pyShelf/html/HTML/defines/F.html deleted file mode 100644 index 7af9b04..0000000 --- a/docs/pyShelf/html/HTML/defines/F.html +++ /dev/null @@ -1,19 +0,0 @@ - - - -[F] - - - - - - -

[F]

-[..] -
    -
  1. Flatted
  2. -
  3. FlattedString
  4. -
-[..] - - diff --git a/docs/pyShelf/html/HTML/defines/_.html b/docs/pyShelf/html/HTML/defines/_.html deleted file mode 100644 index 66df305..0000000 --- a/docs/pyShelf/html/HTML/defines/_.html +++ /dev/null @@ -1,18 +0,0 @@ - - - -[_] - - - - - - -

[_]

-[..] -
    -
  1. __construct
  2. -
-[..] - - diff --git a/docs/pyShelf/html/HTML/defines/index.html b/docs/pyShelf/html/HTML/defines/index.html deleted file mode 100644 index f931715..0000000 --- a/docs/pyShelf/html/HTML/defines/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/pyShelf/html/HTML/defines/la.html b/docs/pyShelf/html/HTML/defines/la.html deleted file mode 100644 index e154d93..0000000 --- a/docs/pyShelf/html/HTML/defines/la.html +++ /dev/null @@ -1,18 +0,0 @@ - - - -[a] - - - - - - -

[a]

-[..] -
    -
  1. asString
  2. -
-[..] - - diff --git a/docs/pyShelf/html/HTML/defines/li.html b/docs/pyShelf/html/HTML/defines/li.html deleted file mode 100644 index 716bf7e..0000000 --- a/docs/pyShelf/html/HTML/defines/li.html +++ /dev/null @@ -1,18 +0,0 @@ - - - -[i] - - - - - - -

[i]

-[..] -
    -
  1. index
  2. -
-[..] - - diff --git a/docs/pyShelf/html/HTML/defines/lk.html b/docs/pyShelf/html/HTML/defines/lk.html deleted file mode 100644 index ac476aa..0000000 --- a/docs/pyShelf/html/HTML/defines/lk.html +++ /dev/null @@ -1,18 +0,0 @@ - - - -[k] - - - - - - -

[k]

-[..] -
    -
  1. keys
  2. -
-[..] - - diff --git a/docs/pyShelf/html/HTML/defines/ll.html b/docs/pyShelf/html/HTML/defines/ll.html deleted file mode 100644 index 1e66d15..0000000 --- a/docs/pyShelf/html/HTML/defines/ll.html +++ /dev/null @@ -1,18 +0,0 @@ - - - -[l] - - - - - - -

[l]

-[..] -
    -
  1. loop
  2. -
-[..] - - diff --git a/docs/pyShelf/html/HTML/defines/lp.html b/docs/pyShelf/html/HTML/defines/lp.html deleted file mode 100644 index caaf28a..0000000 --- a/docs/pyShelf/html/HTML/defines/lp.html +++ /dev/null @@ -1,18 +0,0 @@ - - - -[p] - - - - - - -

[p]

-[..] -
    -
  1. parse
  2. -
-[..] - - diff --git a/docs/pyShelf/html/HTML/defines/lr.html b/docs/pyShelf/html/HTML/defines/lr.html deleted file mode 100644 index 9987e2c..0000000 --- a/docs/pyShelf/html/HTML/defines/lr.html +++ /dev/null @@ -1,19 +0,0 @@ - - - -[r] - - - - - - -

[r]

-[..] -
    -
  1. ref
  2. -
  3. relate
  4. -
-[..] - - diff --git a/docs/pyShelf/html/HTML/defines/ls.html b/docs/pyShelf/html/HTML/defines/ls.html deleted file mode 100644 index a238eed..0000000 --- a/docs/pyShelf/html/HTML/defines/ls.html +++ /dev/null @@ -1,18 +0,0 @@ - - - -[s] - - - - - - -

[s]

-[..] -
    -
  1. stringify
  2. -
-[..] - - diff --git a/docs/pyShelf/html/HTML/defines/lt.html b/docs/pyShelf/html/HTML/defines/lt.html deleted file mode 100644 index 2c137e9..0000000 --- a/docs/pyShelf/html/HTML/defines/lt.html +++ /dev/null @@ -1,18 +0,0 @@ - - - -[t] - - - - - - -

[t]

-[..] -
    -
  1. transform
  2. -
-[..] - - diff --git a/docs/pyShelf/html/HTML/defines/lw.html b/docs/pyShelf/html/HTML/defines/lw.html deleted file mode 100644 index 2bfcac8..0000000 --- a/docs/pyShelf/html/HTML/defines/lw.html +++ /dev/null @@ -1,18 +0,0 @@ - - - -[w] - - - - - - -

[w]

-[..] -
    -
  1. wrap
  2. -
-[..] - - diff --git a/docs/pyShelf/html/HTML/files.html b/docs/pyShelf/html/HTML/files.html deleted file mode 100644 index fc76e70..0000000 --- a/docs/pyShelf/html/HTML/files.html +++ /dev/null @@ -1,16 +0,0 @@ - - - -FILES - - - - - - -

FILES

-
    -
  1. frontend/
  2. -
- - diff --git a/docs/pyShelf/html/HTML/files/3572.html b/docs/pyShelf/html/HTML/files/3572.html deleted file mode 100644 index 04c981a..0000000 --- a/docs/pyShelf/html/HTML/files/3572.html +++ /dev/null @@ -1,18 +0,0 @@ - - - -frontend/ - - - - - - -

root/frontend/

-[..] -
    -
  1. node_modules/
  2. -
-[..] - - diff --git a/docs/pyShelf/html/HTML/files/3573.html b/docs/pyShelf/html/HTML/files/3573.html deleted file mode 100644 index 431c95c..0000000 --- a/docs/pyShelf/html/HTML/files/3573.html +++ /dev/null @@ -1,18 +0,0 @@ - - - -frontend/node_modules/ - - - - - - -

root/frontend/node_modules/

-[..] -
    -
  1. flatted/
  2. -
-[..] - - diff --git a/docs/pyShelf/html/HTML/files/3574.html b/docs/pyShelf/html/HTML/files/3574.html deleted file mode 100644 index 347e082..0000000 --- a/docs/pyShelf/html/HTML/files/3574.html +++ /dev/null @@ -1,18 +0,0 @@ - - - -frontend/node_modules/flatted/ - - - - - - -

root/frontend/node_modules/flatted/

-[..] -
    -
  1. php/
  2. -
-[..] - - diff --git a/docs/pyShelf/html/HTML/files/3575.html b/docs/pyShelf/html/HTML/files/3575.html deleted file mode 100644 index fb9faad..0000000 --- a/docs/pyShelf/html/HTML/files/3575.html +++ /dev/null @@ -1,18 +0,0 @@ - - - -frontend/node_modules/flatted/php/ - - - - - - -

root/frontend/node_modules/flatted/php/

-[..] -
    -
  1. flatted.php
  2. -
-[..] - - diff --git a/docs/pyShelf/html/HTML/files/index.html b/docs/pyShelf/html/HTML/files/index.html deleted file mode 100644 index f931715..0000000 --- a/docs/pyShelf/html/HTML/files/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/pyShelf/html/HTML/help.html b/docs/pyShelf/html/HTML/help.html deleted file mode 100644 index e3184e8..0000000 --- a/docs/pyShelf/html/HTML/help.html +++ /dev/null @@ -1,24 +0,0 @@ - - - -HELP - - - - - - -

Usage of Links

-
/* [<][>][^][v][top][bottom][index][help] */
-
-
[<]
Previous definition.
-
[>]
Next definition.
-
[^]
First definition in this file.
-
[v]
Last definition in this file.
-
[top]
Top of this file.
-
[bottom]
Bottom of this file.
-
[index]
Return to index page.
-
[help]
You are seeing now.
-
- - diff --git a/docs/pyShelf/html/HTML/index.html b/docs/pyShelf/html/HTML/index.html deleted file mode 100644 index 50e8990..0000000 --- a/docs/pyShelf/html/HTML/index.html +++ /dev/null @@ -1,40 +0,0 @@ - - - -pyShelf Open Source Ebook Server-0.8.0 - - - - - - -

pyShelf Open Source Ebook Server-0.8.0

-
-Last updated Sat Mar 18 00:12:14 EDT 2023
-Powered by GLOBAL-6.6.9.
-
-
-

MAINS

-
-
-
-

DEFINITIONS

-[F] -[_] -[a] -[i] -[k] -[l] -[p] -[r] -[s] -[t] -[w] -
-

FILES

-
    -
  1. frontend/
  2. -
-
- - diff --git a/docs/pyShelf/html/HTML/mains.html b/docs/pyShelf/html/HTML/mains.html deleted file mode 100644 index 50e8990..0000000 --- a/docs/pyShelf/html/HTML/mains.html +++ /dev/null @@ -1,40 +0,0 @@ - - - -pyShelf Open Source Ebook Server-0.8.0 - - - - - - -

pyShelf Open Source Ebook Server-0.8.0

-
-Last updated Sat Mar 18 00:12:14 EDT 2023
-Powered by GLOBAL-6.6.9.
-
-
-

MAINS

-
-
-
-

DEFINITIONS

-[F] -[_] -[a] -[i] -[k] -[l] -[p] -[r] -[s] -[t] -[w] -
-

FILES

-
    -
  1. frontend/
  2. -
-
- - diff --git a/docs/pyShelf/html/HTML/rebuild.sh b/docs/pyShelf/html/HTML/rebuild.sh deleted file mode 100644 index df2f0dc..0000000 --- a/docs/pyShelf/html/HTML/rebuild.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -# -# rebuild.sh: rebuild hypertext with the previous context. -# -# Usage: -# % sh rebuild.sh -# -cd /home/th3r00t/.local/builds/pyShelf/src && GTAGSCONF=':langmap=c\:.c.h,yacc\:.y,asm\:.s.S,java\:.java,cpp\:.c++.cc.hh.cpp.cxx.hxx.hpp.C.H,php\:.php.php3.phtml:skip=HTML/,HTML.pub/,tags,TAGS,ID,y.tab.c,y.tab.h,gtags.files,cscope.files,cscope.out,cscope.po.out,cscope.in.out,SCCS/,RCS/,CVS/,CVSROOT/,{arch}/,autom4te.cache/,*.orig,*.rej,*.bak,*~,#*#,*.swp,*.tmp,*_flymake.*,*_flymake,*.o,*.a,*.so,*.lo,*.zip,*.gz,*.bz2,*.xz,*.lzh,*.Z,*.tgz,*.min.js,*min.css:' htags -g -s -a -n -v -w -t 'pyShelf Open Source Ebook Server-0.8.0' /home/th3r00t/.local/builds/pyShelf/docs/pyShelf/html diff --git a/docs/pyShelf/html/annotated.html b/docs/pyShelf/html/annotated.html deleted file mode 100644 index 57b4676..0000000 --- a/docs/pyShelf/html/annotated.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: Class List - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - -
-
-
Class List
-
-
-
Here are the classes, structs, unions and interfaces with brief descriptions:
-
[detail level 12345]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 NDataHooks
 CBookInterface
 NFastAPIServer
 CFastAPIServer
 Nobjects
 CJSInterface
 Nsrc
 Nbackend
 Nlib
 Napi_hooks
 CDuckDuckGo
 Nconfig
 CConfig
 Nlibrary
 CCatalogue
 Nmodels
 CBase
 CBook
 CCollection
 Noveride
 CACatalogue
 NpyShelf
 CAdmin
 CInitFiles
 CServer
 Nstorage
 CStorage
 Ntests
 Nconfig_test
 CTestConfig
 Nlibrary_test
 CTest_Catalogue
 CTest_Config
 CTestCatalogue
-
-
- - - - diff --git a/docs/pyShelf/html/bc_s.png b/docs/pyShelf/html/bc_s.png deleted file mode 100644 index 224b29aa9847d5a4b3902efd602b7ddf7d33e6c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT diff --git a/docs/pyShelf/html/bc_sd.png b/docs/pyShelf/html/bc_sd.png deleted file mode 100644 index 31ca888dc71049713b35c351933a8d0f36180bf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 635 zcmV->0)+jEP)Jwi0r1~gdSq#w{Bu1q z`craw(p2!hu$4C_$Oc3X(sI6e=9QSTwPt{G) z=htT&^~&c~L2~e{r5_5SYe7#Is-$ln>~Kd%$F#tC65?{LvQ}8O`A~RBB0N~`2M+waajO;5>3B&-viHGJeEK2TQOiPRa zfDKyqwMc4wfaEh4jt>H`nW_Zidwk@Bowp`}(VUaj-pSI(-1L>FJVsX}Yl9~JsqgsZ zUD9(rMwf23Gez6KPa|wwInZodP-2}9@fK0Ga_9{8SOjU&4l`pH4@qlQp83>>HT$xW zER^U>)MyV%t(Lu=`d=Y?{k1@}&r7ZGkFQ%z%N+sE9BtYjovzxyxCPxN6&@wLK{soQ zSmkj$aLI}miuE^p@~4}mg9OjDfGEkgY4~^XzLRUBB*O{+&vq<3v(E%+k_i%=`~j%{ Vj14gnt9}3g002ovPDHLkV1n!oC4m3{ diff --git a/docs/pyShelf/html/bdwn.png b/docs/pyShelf/html/bdwn.png deleted file mode 100644 index 940a0b950443a0bb1b216ac03c45b8a16c955452..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T - - - - - - -pyShelf Open Source Ebook Server: Class Index - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - -
-
-
Class Index
-
-
-
A | B | C | D | F | I | J | S | T
-
-
-
A
-
ACatalogue (src.backend.lib.overide)
Admin (src.backend.lib.pyShelf)
-
-
B
-
Base (src.backend.lib.models)
Book (src.backend.lib.models)
BookInterface (DataHooks)
-
-
C
-
Catalogue (src.backend.lib.library)
Collection (src.backend.lib.models)
Config (src.backend.lib.config)
-
-
D
-
DuckDuckGo (src.backend.lib.api_hooks)
-
-
F
-
FastAPIServer (FastAPIServer)
-
-
I
-
InitFiles (src.backend.lib.pyShelf)
-
-
J
-
JSInterface (objects)
-
-
S
-
Server (src.backend.lib.pyShelf)
Storage (src.backend.lib.storage)
-
-
T
-
Test_Catalogue (src.backend.tests.library_test)
Test_Config (src.backend.tests.library_test)
TestCatalogue (src.backend.tests.library_test)
TestConfig (src.backend.tests.config_test)
-
-
- - - - diff --git a/docs/pyShelf/html/closed.png b/docs/pyShelf/html/closed.png deleted file mode 100644 index 98cc2c909da37a6df914fbf67780eebd99c597f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT diff --git a/docs/pyShelf/html/d0/d49/classsrc_1_1backend_1_1lib_1_1models_1_1Collection-members.html b/docs/pyShelf/html/d0/d49/classsrc_1_1backend_1_1lib_1_1models_1_1Collection-members.html deleted file mode 100644 index 0a1f181..0000000 --- a/docs/pyShelf/html/d0/d49/classsrc_1_1backend_1_1lib_1_1models_1_1Collection-members.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: Member List - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
-
src.backend.lib.models.Collection Member List
-
-
- -

This is the complete list of members for src.backend.lib.models.Collection, including all inherited members.

- - - - -
book_id (defined in src.backend.lib.models.Collection)src.backend.lib.models.Collectionstatic
collection (defined in src.backend.lib.models.Collection)src.backend.lib.models.Collectionstatic
collection_id (defined in src.backend.lib.models.Collection)src.backend.lib.models.Collectionstatic
- - - - diff --git a/docs/pyShelf/html/d0/d93/namespacesrc_1_1backend_1_1lib_1_1config.html b/docs/pyShelf/html/d0/d93/namespacesrc_1_1backend_1_1lib_1_1config.html deleted file mode 100644 index 3c3a464..0000000 --- a/docs/pyShelf/html/d0/d93/namespacesrc_1_1backend_1_1lib_1_1config.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: src.backend.lib.config Namespace Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
- -
src.backend.lib.config Namespace Reference
-
-
- - - - -

-Classes

class  Config
 
-

Detailed Description

-
Pyshelf's Configuration Object.
- - - - diff --git a/docs/pyShelf/html/d1/dca/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1InitFiles-members.html b/docs/pyShelf/html/d1/dca/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1InitFiles-members.html deleted file mode 100644 index 47d8994..0000000 --- a/docs/pyShelf/html/d1/dca/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1InitFiles-members.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: Member List - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
-
src.backend.lib.pyShelf.InitFiles Member List
-
-
- -

This is the complete list of members for src.backend.lib.pyShelf.InitFiles, including all inherited members.

- - - -
__init__(self, file_array) (defined in src.backend.lib.pyShelf.InitFiles)src.backend.lib.pyShelf.InitFiles
CreateFile(self, _pointer)src.backend.lib.pyShelf.InitFiles
- - - - diff --git a/docs/pyShelf/html/d2/dcb/classobjects_1_1JSInterface-members.html b/docs/pyShelf/html/d2/dcb/classobjects_1_1JSInterface-members.html deleted file mode 100644 index 2a12693..0000000 --- a/docs/pyShelf/html/d2/dcb/classobjects_1_1JSInterface-members.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: Member List - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
-
objects.JSInterface Member List
-
-
- -

This is the complete list of members for objects.JSInterface, including all inherited members.

- - - -
__init__(self, Config config)objects.JSInterface
install(self)objects.JSInterface
- - - - diff --git a/docs/pyShelf/html/d3/d29/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Config.html b/docs/pyShelf/html/d3/d29/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Config.html deleted file mode 100644 index 25c3688..0000000 --- a/docs/pyShelf/html/d3/d29/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Config.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: src.backend.tests.library_test.Test_Config Class Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
- -
src.backend.tests.library_test.Test_Config Class Reference
-
-
-
-Inheritance diagram for src.backend.tests.library_test.Test_Config:
-
-
- - -src.backend.lib.config.Config - -
- - - - - - -

-Public Member Functions

def __init__ (self)
 
def open_file (self, root="config.json")
 
-

Detailed Description

-

Constructor & Destructor Documentation

- -

◆ __init__()

- -
-
- - - - - - - - -
def src.backend.tests.library_test.Test_Config.__init__ ( self)
-
-
Initialize main configuration options.
-

Reimplemented from src.backend.lib.config.Config.

- -
-
-

Member Function Documentation

- -

◆ open_file()

- -
-
- - - - - - - - - - - - - - - - - - -
def src.backend.tests.library_test.Test_Config.open_file ( self,
 root = "config.json" 
)
-
-
Open config.json and reads in configuration options.
-

Reimplemented from src.backend.lib.config.Config.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/pyShelf/html/d3/d29/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Config.png b/docs/pyShelf/html/d3/d29/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Config.png deleted file mode 100644 index fbb313310259bd40dce86696f21a8cd58b83ed6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 872 zcmV-u1DE`XP)vTJr#LVva2S`&=)l0h|Ns9}lGCUF000SeQchC<|NsC0|NsC0Hv*f~0008> zNklyGOn41|Y?RQdg%_+&!@HaM4dx3^=ej8ecDK4YA}n5Jn8DNH08P=lN# zV`-3+WGwxjJdtE8x3l)oul$hYzEbLJ()=SyE60!|5A`x(xJRkzc;PPpxny`EsoZPLjvEZ1_dlPLhADK~9pfG{{LZmS*y4 znx=>XfVb%e03j8Y{C10q9+rFt4~ia_eAIRTh^9df0I@X40U(wJIRM1cAP0b08sq>F zOM@H$Vrh^AKr9V%0EneQ4gj$<$N?ah1~~x4(jW(b*DIxzLJCPlB%lVlh)66AauJbO zIw5xl_hzj9?XYRjjr@p+oXB^yR%Q`Vk8bv(xwrB62J!X|6}(r(VYU+w4r>b;y@@5mm0Kco=#{<1G~^o6{R==Im8 z=3Vz&8pUE;-Pr3#kvpq3EBlU`W9^5mk=b9nO+~Kko9SvFDm$E@bQ?Ak%{|vE>GlqJ zm+k&gPrkd&F56x5Ts16t?d!?cDzjaVKHJrd&9)7a>qwEiLywSqQFrETx3ftSH#wYB z>B(&rT5`A16tUxMKP7kevwzS1z6b9474rM;c^TXz@9w$E_F8RCZ7(&n)DE-pk_k;o zUfbrtYi(D)oe#6)$gS=5HmUD - - - - - - -pyShelf Open Source Ebook Server: Member List - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
-
src.backend.lib.config.Config Member List
-
-
- -

This is the complete list of members for src.backend.lib.config.Config, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
__init__(self, root)src.backend.lib.config.Config
_cp (defined in src.backend.lib.config.Config)src.backend.lib.config.Configprotected
_data (defined in src.backend.lib.config.Config)src.backend.lib.config.Configprotected
_fp (defined in src.backend.lib.config.Config)src.backend.lib.config.Configprotected
allowed_hosts (defined in src.backend.lib.config.Config)src.backend.lib.config.Config
auto_scan (defined in src.backend.lib.config.Config)src.backend.lib.config.Config
book_path (defined in src.backend.lib.config.Config)src.backend.lib.config.Config
book_shelf (defined in src.backend.lib.config.Config)src.backend.lib.config.Config
build_mode (defined in src.backend.lib.config.Config)src.backend.lib.config.Config
catalogue_db (defined in src.backend.lib.config.Config)src.backend.lib.config.Config
config_structure (defined in src.backend.lib.config.Config)src.backend.lib.config.Config
db_engine (defined in src.backend.lib.config.Config)src.backend.lib.config.Config
db_host (defined in src.backend.lib.config.Config)src.backend.lib.config.Config
db_pass (defined in src.backend.lib.config.Config)src.backend.lib.config.Config
db_port (defined in src.backend.lib.config.Config)src.backend.lib.config.Config
db_user (defined in src.backend.lib.config.Config)src.backend.lib.config.Config
file_array (defined in src.backend.lib.config.Config)src.backend.lib.config.Config
get_logger(self)src.backend.lib.config.Config
init_config(self) (defined in src.backend.lib.config.Config)src.backend.lib.config.Config
logger (defined in src.backend.lib.config.Config)src.backend.lib.config.Config
open_file(self)src.backend.lib.config.Config
password (defined in src.backend.lib.config.Config)src.backend.lib.config.Config
root (defined in src.backend.lib.config.Config)src.backend.lib.config.Config
TITLE (defined in src.backend.lib.config.Config)src.backend.lib.config.Config
user (defined in src.backend.lib.config.Config)src.backend.lib.config.Config
VERSION (defined in src.backend.lib.config.Config)src.backend.lib.config.Config
- - - - diff --git a/docs/pyShelf/html/d3/d95/classsrc_1_1backend_1_1tests_1_1library__test_1_1TestCatalogue-members.html b/docs/pyShelf/html/d3/d95/classsrc_1_1backend_1_1tests_1_1library__test_1_1TestCatalogue-members.html deleted file mode 100644 index e3e9ebd..0000000 --- a/docs/pyShelf/html/d3/d95/classsrc_1_1backend_1_1tests_1_1library__test_1_1TestCatalogue-members.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: Member List - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
-
src.backend.tests.library_test.TestCatalogue Member List
-
- - - - - diff --git a/docs/pyShelf/html/d4/d6b/classFastAPIServer_1_1FastAPIServer-members.html b/docs/pyShelf/html/d4/d6b/classFastAPIServer_1_1FastAPIServer-members.html deleted file mode 100644 index 98aee01..0000000 --- a/docs/pyShelf/html/d4/d6b/classFastAPIServer_1_1FastAPIServer-members.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: Member List - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
-
FastAPIServer.FastAPIServer Member List
-
-
- -

This is the complete list of members for FastAPIServer.FastAPIServer, including all inherited members.

- - - - - - - - - - - - -
__init__(self, config)FastAPIServer.FastAPIServer
book(Request request, int book_id) (defined in FastAPIServer.FastAPIServer)FastAPIServer.FastAPIServer
books(Request request, int skip=0, int limit=10, collection=None) (defined in FastAPIServer.FastAPIServer)FastAPIServer.FastAPIServer
collections(Request request) (defined in FastAPIServer.FastAPIServer)FastAPIServer.FastAPIServer
compile_static_files(self)FastAPIServer.FastAPIServer
config (defined in FastAPIServer.FastAPIServer)FastAPIServer.FastAPIServer
fe_config (defined in FastAPIServer.FastAPIServer)FastAPIServer.FastAPIServer
fe_server (defined in FastAPIServer.FastAPIServer)FastAPIServer.FastAPIServer
index(Request request, int skip=0, int limit=10) (defined in FastAPIServer.FastAPIServer)FastAPIServer.FastAPIServer
run(self)FastAPIServer.FastAPIServer
use_route_names_as_operation_ids(self, FastAPI app)FastAPIServer.FastAPIServer
- - - - diff --git a/docs/pyShelf/html/d4/d71/classDataHooks_1_1BookInterface-members.html b/docs/pyShelf/html/d4/d71/classDataHooks_1_1BookInterface-members.html deleted file mode 100644 index 6f9c510..0000000 --- a/docs/pyShelf/html/d4/d71/classDataHooks_1_1BookInterface-members.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: Member List - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
-
DataHooks.BookInterface Member List
-
-
- -

This is the complete list of members for DataHooks.BookInterface, including all inherited members.

- - - -
config (defined in DataHooks.BookInterface)DataHooks.BookInterface
db (defined in DataHooks.BookInterface)DataHooks.BookInterface
- - - - diff --git a/docs/pyShelf/html/d5/d80/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1Admin.html b/docs/pyShelf/html/d5/d80/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1Admin.html deleted file mode 100644 index f0ecc5c..0000000 --- a/docs/pyShelf/html/d5/d80/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1Admin.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: src.backend.lib.pyShelf.Admin Class Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
- -
src.backend.lib.pyShelf.Admin Class Reference
-
-
- - - - - - -

-Public Member Functions

def __init__ (self, root)
 
def createsuperuser (self)
 
- - - - - -

-Public Attributes

 config
 
 db
 
-

Detailed Description

-

Constructor & Destructor Documentation

- -

◆ __init__()

- -
-
- - - - - - - - - - - - - - - - - - -
def src.backend.lib.pyShelf.Admin.__init__ ( self,
 root 
)
-
- -
-
-

Member Function Documentation

- -

◆ createsuperuser()

- -
-
- - - - - - - - -
def src.backend.lib.pyShelf.Admin.createsuperuser ( self)
-
- -
-
-

Member Data Documentation

- -

◆ config

- -
-
- - - - -
src.backend.lib.pyShelf.Admin.config
-
- -
-
- -

◆ db

- -
-
- - - - -
src.backend.lib.pyShelf.Admin.db
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/pyShelf/html/d5/da5/classsrc_1_1backend_1_1lib_1_1library_1_1Catalogue.html b/docs/pyShelf/html/d5/da5/classsrc_1_1backend_1_1lib_1_1library_1_1Catalogue.html deleted file mode 100644 index 167164d..0000000 --- a/docs/pyShelf/html/d5/da5/classsrc_1_1backend_1_1lib_1_1library_1_1Catalogue.html +++ /dev/null @@ -1,732 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: src.backend.lib.library.Catalogue Class Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
- -
src.backend.lib.library.Catalogue Class Reference
-
-
-
-Inheritance diagram for src.backend.lib.library.Catalogue:
-
-
- - -src.backend.lib.overide.ACatalogue -src.backend.tests.library_test.Test_Catalogue - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

def __init__ (self, config)
 
def scan_folder (self, _path=None)
 
def filter_books (self)
 
def process_by_filetype (self, book)
 
def extract_metadata_epub (self, book)
 
def extract_metadata_pdf (self, book)
 
def extract_metadata_mobi (self, book)
 
def extract_content (self, book_zip, book)
 
def extract_cover_html (self, book_zip, book)
 
def extract_cover_image (self, book_zip, book)
 
def compare_shelf_current (self)
 
def import_books (self, list=None, **kwargs)
 
- - - - - -

-Static Public Member Functions

def process_epub (book)
 
def stripTags (source)
 
- - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Attributes

 file_list
 
 opf_regx
 
 cover_regx
 
 html_regx
 
 title_sanitization_regx
 
 title_sanitization_lvl2_regx
 
 title_sanitization_dirs_regx
 
 root_dir
 
 book_folder
 
 books
 
 db_pointer
 
 config
 
-

Detailed Description

-
Decodes book metadata for storage
-

Constructor & Destructor Documentation

- -

◆ __init__()

- -
-
- - - - - - - - - - - - - - - - - - -
def src.backend.lib.library.Catalogue.__init__ ( self,
 config 
)
-
- -
-
-

Member Function Documentation

- -

◆ compare_shelf_current()

- -
-
- - - - - - - - -
def src.backend.lib.library.Catalogue.compare_shelf_current ( self)
-
-
Calls storage system, gets list of books stored and compares against files on disk
-
-
-
- -

◆ extract_content()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
def src.backend.lib.library.Catalogue.extract_content ( self,
 book_zip,
 book 
)
-
-
Opens epub as zip file filters then stores as list any files matching opf_regx
-
-
-
- -

◆ extract_cover_html()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
def src.backend.lib.library.Catalogue.extract_cover_html ( self,
 book_zip,
 book 
)
-
-
Opens epub as zip file filters then stores as list any files matching html_regx
-
-
-
- -

◆ extract_cover_image()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
def src.backend.lib.library.Catalogue.extract_cover_image ( self,
 book_zip,
 book 
)
-
-
Opens epub as zip file filters then stores as list any files matching cover_regx
-
-
-
- -

◆ extract_metadata_epub()

- -
-
- - - - - - - - - - - - - - - - - - -
def src.backend.lib.library.Catalogue.extract_metadata_epub ( self,
 book 
)
-
-
Return extracted metadata and cover picture
-book['path'] == Full path to ebook file
-book['files'] == list of files from self.process_book(book)
-
-
-
- -

◆ extract_metadata_mobi()

- -
-
- - - - - - - - - - - - - - - - - - -
def src.backend.lib.library.Catalogue.extract_metadata_mobi ( self,
 book 
)
-
- -
-
- -

◆ extract_metadata_pdf()

- -
-
- - - - - - - - - - - - - - - - - - -
def src.backend.lib.library.Catalogue.extract_metadata_pdf ( self,
 book 
)
-
-
Return extracted metadata
-:NOTES: Retrieval of data has been problematic, some pdf's providing
-reliable titles that corespond with the actual, and others being
-nonsense.
-
-
-
- -

◆ filter_books()

- -
-
- - - - - - - - -
def src.backend.lib.library.Catalogue.filter_books ( self)
-
-
Calls scan_folder and filters out book files.
-
-:returns self._book_list_expanded: json string containing
-all book metadata
-
-

Reimplemented in src.backend.tests.library_test.Test_Catalogue.

- -
-
- -

◆ import_books()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
def src.backend.lib.library.Catalogue.import_books ( self,
 list = None,
** kwargs 
)
-
-
Main entry point for import operations.
-Gets a list of new files via compare_shelf_current.
-Iterates over list and inserts new books into database.
-
-

Reimplemented in src.backend.lib.overide.ACatalogue.

- -
-
- -

◆ process_by_filetype()

- -
-
- - - - - - - - - - - - - - - - - - -
def src.backend.lib.library.Catalogue.process_by_filetype ( self,
 book 
)
-
-
Determine books filetype and process.
-
-
- -

◆ process_epub()

- -
-
- - - - - -
- - - - - - - - -
def src.backend.lib.library.Catalogue.process_epub ( book)
-
-static
-
-
Return dictionary of epub file contents
-
-
- -

◆ scan_folder()

- -
-
- - - - - - - - - - - - - - - - - - -
def src.backend.lib.library.Catalogue.scan_folder ( self,
 _path = None 
)
-
-
Scan folder by _path, allows recurisive scanning
-
-

Reimplemented in src.backend.lib.overide.ACatalogue.

- -
-
- -

◆ stripTags()

- -
-
- - - - - -
- - - - - - - - -
def src.backend.lib.library.Catalogue.stripTags ( source)
-
-static
-
- -
-
-

Member Data Documentation

- -

◆ book_folder

- -
-
- - - - -
src.backend.lib.library.Catalogue.book_folder
-
- -
-
- -

◆ books

- -
-
- - - - -
src.backend.lib.library.Catalogue.books
-
- -
-
- -

◆ config

- -
-
- - - - -
src.backend.lib.library.Catalogue.config
-
- -
-
- -

◆ cover_regx

- -
-
- - - - -
src.backend.lib.library.Catalogue.cover_regx
-
- -
-
- -

◆ db_pointer

- -
-
- - - - -
src.backend.lib.library.Catalogue.db_pointer
-
- -
-
- -

◆ file_list

- -
-
- - - - -
src.backend.lib.library.Catalogue.file_list
-
- -
-
- -

◆ html_regx

- -
-
- - - - -
src.backend.lib.library.Catalogue.html_regx
-
- -
-
- -

◆ opf_regx

- -
-
- - - - -
src.backend.lib.library.Catalogue.opf_regx
-
- -
-
- -

◆ root_dir

- -
-
- - - - -
src.backend.lib.library.Catalogue.root_dir
-
- -
-
- -

◆ title_sanitization_dirs_regx

- -
-
- - - - -
src.backend.lib.library.Catalogue.title_sanitization_dirs_regx
-
- -
-
- -

◆ title_sanitization_lvl2_regx

- -
-
- - - - -
src.backend.lib.library.Catalogue.title_sanitization_lvl2_regx
-
- -
-
- -

◆ title_sanitization_regx

- -
-
- - - - -
src.backend.lib.library.Catalogue.title_sanitization_regx
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/pyShelf/html/d5/da5/classsrc_1_1backend_1_1lib_1_1library_1_1Catalogue.png b/docs/pyShelf/html/d5/da5/classsrc_1_1backend_1_1lib_1_1library_1_1Catalogue.png deleted file mode 100644 index 84c2afe52edf349d5a342cc5f54534a866d14b29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1462 zcmbtUX;f236n+VdvIq#WgvEk=wSa(vA`lUy1W9CzNer??c0t({kO~Nu#Tt-2LxfsH ztULk)WwU^w1d3v0sj`@;2LUYtAz(l%yA@wNr>FLJ=f^kS-1+X@duQg{izIjF4T`#o z003+t67XaIK!XS;t(QS?GwS+%WYQzKQk~Y;)(|S1o{wj?m)Y(xiP0(O5w*3oA$AID zpd8s#h$FjG0A&4T*q{ra0f5|oB7Q$L5%sQUGWQNv4X>J+@$r*Ka$b$~Fq$ZF9j6$X z{w^OqHY#ZaMs5b^$cHxpW@#l^Y;xV^0wYxUV@O9mtxEZ#5lYncFBQ8HxPSPhSj;!J zF00J*8Ei5){4TxzM~C)i#7A_-(C!?S3bV;an9(Q0kOS6SCWeZbv$M7z24i`e6XK=D zjLiBPUe~uo5lDNuQS#J9WqKgFb4n%8+_3Ue zC;=E2%*RnO-)aez2n)?qP)}sg=$4^r;_Y>v{f7^k?7bpQ*&ZD8s?N&hQxaCTJD!r| zWWdEyU6@jK|7nbR8lws>^hSq8km@Cm@s}-hZ^#maa~cF8(QXJx##O_GNoper;oasg zajFycT9T0vPEdc;Akni`#Dr$+!Ngi_YMilzvcZw&!bWhY$eM6&c94 z@Xu1&JhEb=G?!JQChUW43R_DzMLD8LeSQQRM6Myd5sbPcy7!8aB?!>Jq8lFUINB}e zk4i4t3MjRq%R3?9C}8fEXM(B$bP+c#oQustSA{e=67r%o0M=>?VxnZpwxPqiq*6DG zI-qpJ#1ZX}+J)p}mc~&=#Jy~(_?IvKi1@Xhwc9|j+rTaZIsfG)^l!mF)ABgahK?v8 zF64jHdGm&xQQJ>EPOLtEq#zQ*k2QN}OcahXAOfrYMWBuHMKC^?AjOccaNY_`2gkTH ziS!%h!@LD8R(lIgxv_G$q~ghU72G?}{kw_8)f8jD7*1c`5S0G?a#^(P!T{v^ir)|Q zI!FGRs?8e6i%y{Kep->(SGyDHk#$%IEqhP9RyjIyN>|vvV#);f^!wcDm00%s=G1Rw zkz!Mu*7TdNh9=))!wsfT^2zrBxlB(NyKHbQtPnHCaCGKFWZv1QwHi=F_Q>E&hv-T3 zh46sYK!eEbnFB}SSk^fzPB-gRxE>)RtY-H5drpv)Ta*q) zksADxm~UPP8XStr>sYi^bymcZSlFV}>8#zFT09eQ9LIYl4>~nhv?9T_O>)Eo=Ej;1 z@8Ty6U-ow!tww}e$v&IyIF{!I^WOGmg8~83<{Ph%*uQnQdPD5v8PR{`qCtV@j9r2} zORQkAXV~W6LI;L$mVN@!}KDQ zs$F6fcjjcSo_X2hxZcmq_Z+h}B~s^+JzkKq#J@RS*6VL>aF7LankUDHI-+OtsWm8S z{PC$h-CCD&4{4}QPVePEDb*vcWMd10ufqt5q|<)_TVOG6%>tZI&w*o7w}C#h_L{0p zuh+>XoS?NBuqi_H{JmmiNIxTrrCsg6D3 - - - - - - -pyShelf Open Source Ebook Server: Member List - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
-
src.backend.tests.library_test.Test_Config Member List
-
-
- -

This is the complete list of members for src.backend.tests.library_test.Test_Config, including all inherited members.

- - - -
__init__(self)src.backend.tests.library_test.Test_Config
open_file(self, root="config.json")src.backend.tests.library_test.Test_Config
- - - - diff --git a/docs/pyShelf/html/d5/dee/classsrc_1_1backend_1_1tests_1_1config__test_1_1TestConfig-members.html b/docs/pyShelf/html/d5/dee/classsrc_1_1backend_1_1tests_1_1config__test_1_1TestConfig-members.html deleted file mode 100644 index 4b98d4d..0000000 --- a/docs/pyShelf/html/d5/dee/classsrc_1_1backend_1_1tests_1_1config__test_1_1TestConfig-members.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: Member List - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
-
src.backend.tests.config_test.TestConfig Member List
-
- - - - - diff --git a/docs/pyShelf/html/d6/d1d/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1Admin-members.html b/docs/pyShelf/html/d6/d1d/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1Admin-members.html deleted file mode 100644 index 5140805..0000000 --- a/docs/pyShelf/html/d6/d1d/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1Admin-members.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: Member List - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
-
src.backend.lib.pyShelf.Admin Member List
-
-
- -

This is the complete list of members for src.backend.lib.pyShelf.Admin, including all inherited members.

- - - - - -
__init__(self, root) (defined in src.backend.lib.pyShelf.Admin)src.backend.lib.pyShelf.Admin
config (defined in src.backend.lib.pyShelf.Admin)src.backend.lib.pyShelf.Admin
createsuperuser(self) (defined in src.backend.lib.pyShelf.Admin)src.backend.lib.pyShelf.Admin
db (defined in src.backend.lib.pyShelf.Admin)src.backend.lib.pyShelf.Admin
- - - - diff --git a/docs/pyShelf/html/d6/d20/classsrc_1_1backend_1_1lib_1_1library_1_1Catalogue-members.html b/docs/pyShelf/html/d6/d20/classsrc_1_1backend_1_1lib_1_1library_1_1Catalogue-members.html deleted file mode 100644 index f37827e..0000000 --- a/docs/pyShelf/html/d6/d20/classsrc_1_1backend_1_1lib_1_1library_1_1Catalogue-members.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: Member List - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
-
src.backend.lib.library.Catalogue Member List
-
-
- -

This is the complete list of members for src.backend.lib.library.Catalogue, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
__init__(self, config) (defined in src.backend.lib.library.Catalogue)src.backend.lib.library.Catalogue
book_folder (defined in src.backend.lib.library.Catalogue)src.backend.lib.library.Catalogue
books (defined in src.backend.lib.library.Catalogue)src.backend.lib.library.Catalogue
compare_shelf_current(self)src.backend.lib.library.Catalogue
config (defined in src.backend.lib.library.Catalogue)src.backend.lib.library.Catalogue
cover_regx (defined in src.backend.lib.library.Catalogue)src.backend.lib.library.Catalogue
db_pointer (defined in src.backend.lib.library.Catalogue)src.backend.lib.library.Catalogue
extract_content(self, book_zip, book)src.backend.lib.library.Catalogue
extract_cover_html(self, book_zip, book)src.backend.lib.library.Catalogue
extract_cover_image(self, book_zip, book)src.backend.lib.library.Catalogue
extract_metadata_epub(self, book)src.backend.lib.library.Catalogue
extract_metadata_mobi(self, book) (defined in src.backend.lib.library.Catalogue)src.backend.lib.library.Catalogue
extract_metadata_pdf(self, book)src.backend.lib.library.Catalogue
file_list (defined in src.backend.lib.library.Catalogue)src.backend.lib.library.Catalogue
filter_books(self)src.backend.lib.library.Catalogue
html_regx (defined in src.backend.lib.library.Catalogue)src.backend.lib.library.Catalogue
import_books(self, list=None, **kwargs)src.backend.lib.library.Catalogue
opf_regx (defined in src.backend.lib.library.Catalogue)src.backend.lib.library.Catalogue
process_by_filetype(self, book)src.backend.lib.library.Catalogue
process_epub(book)src.backend.lib.library.Cataloguestatic
root_dir (defined in src.backend.lib.library.Catalogue)src.backend.lib.library.Catalogue
scan_folder(self, _path=None)src.backend.lib.library.Catalogue
stripTags(source) (defined in src.backend.lib.library.Catalogue)src.backend.lib.library.Cataloguestatic
title_sanitization_dirs_regx (defined in src.backend.lib.library.Catalogue)src.backend.lib.library.Catalogue
title_sanitization_lvl2_regx (defined in src.backend.lib.library.Catalogue)src.backend.lib.library.Catalogue
title_sanitization_regx (defined in src.backend.lib.library.Catalogue)src.backend.lib.library.Catalogue
- - - - diff --git a/docs/pyShelf/html/d6/d4e/classsrc_1_1backend_1_1lib_1_1models_1_1Book.html b/docs/pyShelf/html/d6/d4e/classsrc_1_1backend_1_1lib_1_1models_1_1Book.html deleted file mode 100644 index 7cee714..0000000 --- a/docs/pyShelf/html/d6/d4e/classsrc_1_1backend_1_1lib_1_1models_1_1Book.html +++ /dev/null @@ -1,419 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: src.backend.lib.models.Book Class Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
- -
src.backend.lib.models.Book Class Reference
-
-
-
-Inheritance diagram for src.backend.lib.models.Book:
-
-
- - -src.backend.lib.models.Base - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Static Public Attributes

Mapped book_id = mapped_column(primary_key=True, nullable=False)
 
Mapped title [str]
 
Mapped author [Optional[str]]
 
Mapped categories [Optional[str]]
 
Mapped cover [Optional[bytes]]
 
Mapped pages [Optional[int]]
 
Mapped progress [Optional[float]]
 
Mapped file_name [str]
 
Mapped description [Optional[str]]
 
Mapped date [timestamp]
 
Mapped rights [Optional[str]]
 
Mapped tags [Optional[str]]
 
Mapped identifier [Optional[str]]
 
Mapped publisher [Optional[str]]
 
-

Detailed Description

-
Book model.

Member Data Documentation

- -

◆ author

- -
-
- - - - - -
- - - - -
Mapped src.backend.lib.models.Book.author [Optional[str]]
-
-static
-
- -
-
- -

◆ book_id

- -
-
- - - - - -
- - - - -
Mapped src.backend.lib.models.Book.book_id = mapped_column(primary_key=True, nullable=False)
-
-static
-
- -
-
- -

◆ categories

- -
-
- - - - - -
- - - - -
Mapped src.backend.lib.models.Book.categories [Optional[str]]
-
-static
-
- -
-
- -

◆ cover

- -
-
- - - - - -
- - - - -
Mapped src.backend.lib.models.Book.cover [Optional[bytes]]
-
-static
-
- -
-
- -

◆ date

- -
-
- - - - - -
- - - - -
Mapped src.backend.lib.models.Book.date [timestamp]
-
-static
-
- -
-
- -

◆ description

- -
-
- - - - - -
- - - - -
Mapped src.backend.lib.models.Book.description [Optional[str]]
-
-static
-
- -
-
- -

◆ file_name

- -
-
- - - - - -
- - - - -
Mapped src.backend.lib.models.Book.file_name [str]
-
-static
-
- -
-
- -

◆ identifier

- -
-
- - - - - -
- - - - -
Mapped src.backend.lib.models.Book.identifier [Optional[str]]
-
-static
-
- -
-
- -

◆ pages

- -
-
- - - - - -
- - - - -
Mapped src.backend.lib.models.Book.pages [Optional[int]]
-
-static
-
- -
-
- -

◆ progress

- -
-
- - - - - -
- - - - -
Mapped src.backend.lib.models.Book.progress [Optional[float]]
-
-static
-
- -
-
- -

◆ publisher

- -
-
- - - - - -
- - - - -
Mapped src.backend.lib.models.Book.publisher [Optional[str]]
-
-static
-
- -
-
- -

◆ rights

- -
-
- - - - - -
- - - - -
Mapped src.backend.lib.models.Book.rights [Optional[str]]
-
-static
-
- -
-
- -

◆ tags

- -
-
- - - - - -
- - - - -
Mapped src.backend.lib.models.Book.tags [Optional[str]]
-
-static
-
- -
-
- -

◆ title

- -
-
- - - - - -
- - - - -
Mapped src.backend.lib.models.Book.title [str]
-
-static
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/pyShelf/html/d6/d4e/classsrc_1_1backend_1_1lib_1_1models_1_1Book.png b/docs/pyShelf/html/d6/d4e/classsrc_1_1backend_1_1lib_1_1models_1_1Book.png deleted file mode 100644 index 30837066b288d80400652ff94df72c13e3dc93e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1013 zcmeAS@N?(olHy`uVBq!ia0vp^>wvg}gBeJAsw;d4QqloFA+G=b{|7Q(y!l$%e`vXd zfo6fk^fNCG95?_J51w>+1yGK&B*-tA0mugfbEer>7#NrvJY5_^Dj46+ecSg~fyY(9 z@5<}%^^e}FFy=TdyWF>Dx5v7wwqrH22NM4+ni6!4u~j8pvDDM3>x$}0je8gF-uIdG z<;-vU#nZcHGkSblzGt!Z^xaogJ&&JdQ27~r@9N$E^JbTbm~F^^b^ZN%`{!)me=WQH z>wBQbC-#~})qZ!o^Gsdzb=S+@w(|I-y8p`C;+vW8OMKsL`&aMyea5w_TbI{Obzc%T z`)=-8Us=z84gTfVbF&pKAC&%Gea(6E?`D?)8`H#oJ|Xe@V-*`~6<| zLfOUn)wyz2#uJ|GSA#h=Xu8Vc2>pdKwB&Od zLxV+-IKv{3ScVRzQbvWYE36F~1O)Ed-`pA{{+h3{f(SA;%(cgt~A zNA_*E&A!n~w!PsG+ip20HQu>@%Oc<8=qrZ5gXNzHyg580Gv-~$UGKY*`K7l{{ds7? zUClRn>W@3J%$N1_&gZ_{)-`k8bcxdbz&&~WwJWmOW~e%^Hpt$vewO7U#gwjD-G>Wn zcIf@+cX@0b z&$O7EH+P))@BgZ+!)4+wC8fY6>pDC{Ucbz{y-k;y!Q}%(LurKf_m2^$%60E9f9tic z`{lE<3=D-!^caB383bHkF*%5=UhJ`-XBGY#?c6O{)fAK8R>kqt tKO)q$<4R~~uM*sM^L8zrvWcgjL6!0I-yqJfZ-5z;!PC{xWt~$(69A+2@DKn1 diff --git a/docs/pyShelf/html/d6/d90/classsrc_1_1backend_1_1lib_1_1models_1_1Base.html b/docs/pyShelf/html/d6/d90/classsrc_1_1backend_1_1lib_1_1models_1_1Base.html deleted file mode 100644 index cc02630..0000000 --- a/docs/pyShelf/html/d6/d90/classsrc_1_1backend_1_1lib_1_1models_1_1Base.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: src.backend.lib.models.Base Class Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
-
src.backend.lib.models.Base Class Reference
-
-
-
-Inheritance diagram for src.backend.lib.models.Base:
-
-
- - -src.backend.lib.models.Book -src.backend.lib.models.Collection - -
-

Detailed Description

-
Base class for all models.

The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/pyShelf/html/d6/d90/classsrc_1_1backend_1_1lib_1_1models_1_1Base.png b/docs/pyShelf/html/d6/d90/classsrc_1_1backend_1_1lib_1_1models_1_1Base.png deleted file mode 100644 index 793e09faeb23595c42810777068ed289faff6b51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1482 zcmb_cYfzGD6#mrKHYa1rNweD8*d1L<($>7Berg4Up;B7SN~L9ug`%bz)W??2Hfxr* z)RLg~Ycm8(&`L282_~mV16{#zEzwp=L@s7xWM0^B`rVJ6ojpI^b9vr#X3lxe`(E4? zx5L$Cg$n=xuF(WsJODVrh+X)#6LP*LpG6^R<*t}Lc)Q(>n4_ktQ)Q2NA^tummNONj zGMNmCCse3w5o}Rzd|U#6_@5=%@p>-+e6=?kw`I?12lMa7oW{__c#jk>)lB3>w97|F zE=9Fj5YZZzc>_i^8fY`I|msM=JO)i}RUVNzL z6*uf2&?aw(wnG|0JzjXP4zz|Z@f}2BI0zoS!+4cB$%02LKDwHPqY*=zM(RmpjWTJ! zF1|4^n8(Y_digoKD~?2`deMh^j1=eGX}_Q;naAb}*27^_(q08M37Yhl`Z}tV4prCUCsmF6~%y99` zfm1hD=b_QbTOkbQLwMh0G|wA)$g07VFd5+zd8@d{W>u45xs?HRSxw)&ChZuLPL7#$w^C zOPW1;Q!Vv`&9uH?TPx$Pgt7Cy)f9ZT;aI;gi6meoklYSk8Q8ha=!+TC`xz()R^4T% zh>0}0S*cD4Evek!w-HmVM-77FV%md-_Exo6AA+N!WY>;$n9E~3gRaIjkK7)SHKB}e zhb$B~4)wje;LP0)fmd7V;}IJUmpdzX}y9%uEv>T#}!D;t8GnpXjf; znWzr$p0sym!1`(XNJTnZsi=>tlPgRvgfdnlvX=^9tm;T=mAheM0P#5y@(O4K+dIj5 zepO|xeovvu7y`~K6ro)yXZLoK8d4H>^qIdI_5Da1o#v?B!1h~Gj^4c2#LTWnO3GL; z-eyJD)k-5byvVrU)eKT&XKeMZ59WsJvo30A*g*Lrr6SZBde2V@!_VBQ8lD&rnG?ZF zQ?SOgbYuxoX$)#WFK@-s>5YLg0kKSc5O^EOfJ&jIg6g*88M@<9kxCKl^?Jj(ysZy| zbNwkdg|=nwYqdRpS>S`r${7FN%EQaLttMTtI-Ho<{u@@T@#AYGqI+Jl2$7`DyJuY~ z^vRIitL6{y5_$~T$Fkb!GhrXa9oU|A1w8!^^C!Vro<5OrfX)_{ZA+3co}TL(hldV6 zIpmqlo=@*EXD=qsRyb)U`;&OuxGN8{XEtpayDHh94yTc87yV(_9I`l>m?>?!ge?gw z(YDaIbB^7W*IE6MPy9tJ)?E7+W?p2y#;UaKVzy1S(%jjeP diff --git a/docs/pyShelf/html/d7/d40/classsrc_1_1backend_1_1lib_1_1storage_1_1Storage.html b/docs/pyShelf/html/d7/d40/classsrc_1_1backend_1_1lib_1_1storage_1_1Storage.html deleted file mode 100644 index a12bedc..0000000 --- a/docs/pyShelf/html/d7/d40/classsrc_1_1backend_1_1lib_1_1storage_1_1Storage.html +++ /dev/null @@ -1,493 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: src.backend.lib.storage.Storage Class Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
- -
src.backend.lib.storage.Storage Class Reference
-
-
- - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

def __init__ (self, config)
 
def get_connection_string (self)
 
def create_tables (self)
 
def insert_book (self, book)
 
def book_paths_list (self)
 
def make_collections (self)
 
def get_books (self, collection=None, skip=None, limit=None)
 
def get_book (self, book_id)
 
def get_collections (self)
 
- - - - - - - - - - - - - - - -

-Public Attributes

 config
 
 sql
 
 user
 
 password
 
 db_host
 
 db_port
 
 engine
 
-

Detailed Description

-
Create a new Storage object.
-
->>> db = Storage(config)
-
-Parameters
-----------
-config : Config()
-    Main program configuration.
-
-Attributes
-----------
-config : Stores configuration
-sql : Database Name
-user : Database User Name
-password : Database Password
-db_host : Database Host
-db_port : Database Port
-engine : sqlalchemy.create_engine(url, executor, kw)
-

Constructor & Destructor Documentation

- -

◆ __init__()

- -
-
- - - - - - - - - - - - - - - - - - -
def src.backend.lib.storage.Storage.__init__ ( self,
 config 
)
-
-
Initialize storage object.
-
-
-

Member Function Documentation

- -

◆ book_paths_list()

- -
-
- - - - - - - - -
def src.backend.lib.storage.Storage.book_paths_list ( self)
-
-
Get file paths from database for comparison to system files.
-
-Returns
--------
-_result : ScalarResult Object
-
-
-
- -

◆ create_tables()

- -
-
- - - - - - - - -
def src.backend.lib.storage.Storage.create_tables ( self)
-
-
Create table structure.
-
-
- -

◆ get_book()

- -
-
- - - - - - - - - - - - - - - - - - -
def src.backend.lib.storage.Storage.get_book ( self,
 book_id 
)
-
-
Get book from database.
-
-Parameters
-----------
-book_id : int
-    Book ID to filter by.
-
-Returns
--------
-_result : ScalarResult Object
-
-
-
- -

◆ get_books()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
def src.backend.lib.storage.Storage.get_books ( self,
 collection = None,
 skip = None,
 limit = None 
)
-
-
Get books from database.
-
-Parameters
-----------
-collection : str
-    Collection to filter by.
-
-Returns
--------
-_result : ScalarResult Object
-
-
-
- -

◆ get_collections()

- -
-
- - - - - - - - -
def src.backend.lib.storage.Storage.get_collections ( self)
-
-
Get collections from database.
-
-Returns
--------
-_result : ScalarResult Object
-
-
-
- -

◆ get_connection_string()

- -
-
- - - - - - - - -
def src.backend.lib.storage.Storage.get_connection_string ( self)
-
-
Get connection string.
-
-Engine type references config.json:DB_ENGINE.
-
-Returns
--------
-str : sqlalchemy Connection String
-
-
-
- -

◆ insert_book()

- -
-
- - - - - - - - - - - - - - - - - - -
def src.backend.lib.storage.Storage.insert_book ( self,
 book 
)
-
-
Insert a new book into the database.
-
-Parameters
-----------
-book: dict()
-    Book object to insert.
-
-Returns
--------
-bool
-    True on success False on failure
-
-
-
- -

◆ make_collections()

- -
-
- - - - - - - - -
def src.backend.lib.storage.Storage.make_collections ( self)
-
-
Parse book path's to determine common folder structure.
-
-Stores collections based on shared paths.
-
-
-
-

Member Data Documentation

- -

◆ config

- -
-
- - - - -
src.backend.lib.storage.Storage.config
-
- -
-
- -

◆ db_host

- -
-
- - - - -
src.backend.lib.storage.Storage.db_host
-
- -
-
- -

◆ db_port

- -
-
- - - - -
src.backend.lib.storage.Storage.db_port
-
- -
-
- -

◆ engine

- -
-
- - - - -
src.backend.lib.storage.Storage.engine
-
- -
-
- -

◆ password

- -
-
- - - - -
src.backend.lib.storage.Storage.password
-
- -
-
- -

◆ sql

- -
-
- - - - -
src.backend.lib.storage.Storage.sql
-
- -
-
- -

◆ user

- -
-
- - - - -
src.backend.lib.storage.Storage.user
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/pyShelf/html/d7/d88/classsrc_1_1backend_1_1lib_1_1api__hooks_1_1DuckDuckGo.html b/docs/pyShelf/html/d7/d88/classsrc_1_1backend_1_1lib_1_1api__hooks_1_1DuckDuckGo.html deleted file mode 100644 index ca708bb..0000000 --- a/docs/pyShelf/html/d7/d88/classsrc_1_1backend_1_1lib_1_1api__hooks_1_1DuckDuckGo.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: src.backend.lib.api_hooks.DuckDuckGo Class Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
- -
src.backend.lib.api_hooks.DuckDuckGo Class Reference
-
-
- - - - - - - - -

-Public Member Functions

def __init__ (self)
 
def image_result (self, query)
 
def description_result (self, query)
 
- - - - - -

-Public Attributes

 url
 
 imageurl
 
-

Detailed Description

-
duckduckgo related searching

Constructor & Destructor Documentation

- -

◆ __init__()

- -
-
- - - - - - - - -
def src.backend.lib.api_hooks.DuckDuckGo.__init__ ( self)
-
- -
-
-

Member Function Documentation

- -

◆ description_result()

- -
-
- - - - - - - - - - - - - - - - - - -
def src.backend.lib.api_hooks.DuckDuckGo.description_result ( self,
 query 
)
-
- -
-
- -

◆ image_result()

- -
-
- - - - - - - - - - - - - - - - - - -
def src.backend.lib.api_hooks.DuckDuckGo.image_result ( self,
 query 
)
-
-
Returns json containing url to image
-:param _key: &t=h_&iar=images&iax=images&ia=images&format=json&pretty=1
-
-
-
-

Member Data Documentation

- -

◆ imageurl

- -
-
- - - - -
src.backend.lib.api_hooks.DuckDuckGo.imageurl
-
- -
-
- -

◆ url

- -
-
- - - - -
src.backend.lib.api_hooks.DuckDuckGo.url
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/pyShelf/html/d7/db9/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1Server.html b/docs/pyShelf/html/d7/db9/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1Server.html deleted file mode 100644 index 361dc60..0000000 --- a/docs/pyShelf/html/d7/db9/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1Server.html +++ /dev/null @@ -1,344 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: src.backend.lib.pyShelf.Server Class Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
- -
src.backend.lib.pyShelf.Server Class Reference
-
-
- - - - - - - - - - - - - - - - -

-Public Member Functions

def __init__ (self, root)
 
def __aexit__ (self, *args, **kwargs)
 
def initialize_server (self)
 
def runImport (self)
 
def socketio (self, websocket, path)
 
def pong (self)
 
def start (self)
 
- - - - - - - - - - - -

-Public Attributes

 root
 
 host
 
 config
 
 loop
 
 serve
 
-

Detailed Description

-
Main Server Container
-:TODO: Document this
-

Constructor & Destructor Documentation

- -

◆ __init__()

- -
-
- - - - - - - - - - - - - - - - - - -
def src.backend.lib.pyShelf.Server.__init__ ( self,
 root 
)
-
- -
-
-

Member Function Documentation

- -

◆ __aexit__()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
def src.backend.lib.pyShelf.Server.__aexit__ ( self,
args,
** kwargs 
)
-
- -
-
- -

◆ initialize_server()

- -
-
- - - - - - - - -
def src.backend.lib.pyShelf.Server.initialize_server ( self)
-
- -
-
- -

◆ pong()

- -
-
- - - - - - - - -
def src.backend.lib.pyShelf.Server.pong ( self)
-
- -
-
- -

◆ runImport()

- -
-
- - - - - - - - -
def src.backend.lib.pyShelf.Server.runImport ( self)
-
- -
-
- -

◆ socketio()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
def src.backend.lib.pyShelf.Server.socketio ( self,
 websocket,
 path 
)
-
- -
-
- -

◆ start()

- -
-
- - - - - - - - -
def src.backend.lib.pyShelf.Server.start ( self)
-
- -
-
-

Member Data Documentation

- -

◆ config

- -
-
- - - - -
src.backend.lib.pyShelf.Server.config
-
- -
-
- -

◆ host

- -
-
- - - - -
src.backend.lib.pyShelf.Server.host
-
- -
-
- -

◆ loop

- -
-
- - - - -
src.backend.lib.pyShelf.Server.loop
-
- -
-
- -

◆ root

- -
-
- - - - -
src.backend.lib.pyShelf.Server.root
-
- -
-
- -

◆ serve

- -
-
- - - - -
src.backend.lib.pyShelf.Server.serve
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/pyShelf/html/d7/df9/namespaceDataHooks.html b/docs/pyShelf/html/d7/df9/namespaceDataHooks.html deleted file mode 100644 index e4d711b..0000000 --- a/docs/pyShelf/html/d7/df9/namespaceDataHooks.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: DataHooks Namespace Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - -
-
- -
DataHooks Namespace Reference
-
-
- - - - -

-Classes

class  BookInterface
 
-

Detailed Description

-
pyShelf's frontend database hooks.
- - - - diff --git a/docs/pyShelf/html/d8/d3d/classsrc_1_1backend_1_1tests_1_1library__test_1_1TestCatalogue.html b/docs/pyShelf/html/d8/d3d/classsrc_1_1backend_1_1tests_1_1library__test_1_1TestCatalogue.html deleted file mode 100644 index 75964aa..0000000 --- a/docs/pyShelf/html/d8/d3d/classsrc_1_1backend_1_1tests_1_1library__test_1_1TestCatalogue.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: src.backend.tests.library_test.TestCatalogue Class Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
- -
src.backend.tests.library_test.TestCatalogue Class Reference
-
-
- - - - -

-Public Member Functions

def test_filter_books (self)
 
- - - - - -

-Static Public Attributes

os root = os.path.abspath(os.path.curdir)
 
Test_Config config = Test_Config()
 
-

Detailed Description

-

Member Function Documentation

- -

◆ test_filter_books()

- -
-
- - - - - - - - -
def src.backend.tests.library_test.TestCatalogue.test_filter_books ( self)
-
- -
-
-

Member Data Documentation

- -

◆ config

- -
-
- - - - - -
- - - - -
Test_Config src.backend.tests.library_test.TestCatalogue.config = Test_Config()
-
-static
-
- -
-
- -

◆ root

- -
-
- - - - - -
- - - - -
os src.backend.tests.library_test.TestCatalogue.root = os.path.abspath(os.path.curdir)
-
-static
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/pyShelf/html/d8/def/classobjects_1_1JSInterface.html b/docs/pyShelf/html/d8/def/classobjects_1_1JSInterface.html deleted file mode 100644 index fc91435..0000000 --- a/docs/pyShelf/html/d8/def/classobjects_1_1JSInterface.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: objects.JSInterface Class Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
- -
objects.JSInterface Class Reference
-
-
- - - - - - -

-Public Member Functions

def __init__ (self, Config config)
 
def install (self)
 
-

Detailed Description

-
A class to interface with the JavaScript side of pyShelf.

Constructor & Destructor Documentation

- -

◆ __init__()

- -
-
- - - - - - - - - - - - - - - - - - -
def objects.JSInterface.__init__ ( self,
Config config 
)
-
-
Initialize the JSInterface object.
-
-
-

Member Function Documentation

- -

◆ install()

- -
-
- - - - - - - - -
def objects.JSInterface.install ( self)
-
-
Install the JavaScript dependencies.
-
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/pyShelf/html/d8/dfe/classsrc_1_1backend_1_1lib_1_1config_1_1Config.html b/docs/pyShelf/html/d8/dfe/classsrc_1_1backend_1_1lib_1_1config_1_1Config.html deleted file mode 100644 index 05d1e26..0000000 --- a/docs/pyShelf/html/d8/dfe/classsrc_1_1backend_1_1lib_1_1config_1_1Config.html +++ /dev/null @@ -1,601 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: src.backend.lib.config.Config Class Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
- -
src.backend.lib.config.Config Class Reference
-
-
-
-Inheritance diagram for src.backend.lib.config.Config:
-
-
- - -src.backend.tests.library_test.Test_Config - -
- - - - - - - - - - -

-Public Member Functions

def __init__ (self, root)
 
def init_config (self)
 
def get_logger (self)
 
def open_file (self)
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Attributes

 root
 
 config_structure
 
 logger
 
 book_path
 
 TITLE
 
 VERSION
 
 book_shelf
 
 catalogue_db
 
 user
 
 password
 
 db_host
 
 db_port
 
 file_array
 
 auto_scan
 
 allowed_hosts
 
 db_engine
 
 db_user
 
 db_pass
 
 build_mode
 
- - - - - - - -

-Protected Attributes

 _fp
 
 _cp
 
 _data
 
-

Detailed Description

-
Main System Configuration.
-
->>> config = Config(root)
-
-Parameters
-----------
-root : File system root of program
-
-Attributes
-----------
-root : str() stores root.
-config_structure : dict() Default Configuration Structure.
-_fp : str() file pointer to main configuration.
-_cp : Path() object of configuration file.
-_data : dict() parsed json of _fp.
-logger : holds logging configuration from get_logger().
-book_path : directory pointer to main books folder.
-TITLE : str() Program title.
-VERSION : str() Program  version.
-TITLE : str() Combines TITLE & VERSION.
-book_shelf : Deprecation TODO: Is this still in use?
-catalogue_db : str() Database Name.
-user : str() Database user name.
-password : str() Database password.
-db_host : str() Database host.
-db_port : int() Database port.
-file_array : list() copy of book_shelf TODO: See book_shelf
-auto_scan: bool() Do we auto scan on launch?
-allowed_hosts : list() Allowed host list.
-db_engine : str() Desired database engine type.
-db_user : str() Database user name. Duplication Warning.
-db_pass : str() Database password. Duplication Warning.
-build_mode : str() Production | Development mode.
-
-Methods
--------
-get_logger : Setup loguru.
-open_file : Parse configuration file.
-

Constructor & Destructor Documentation

- -

◆ __init__()

- -
-
- - - - - - - - - - - - - - - - - - -
def src.backend.lib.config.Config.__init__ ( self,
 root 
)
-
-
Initialize main configuration options.
-

Reimplemented in src.backend.tests.library_test.Test_Config.

- -
-
-

Member Function Documentation

- -

◆ get_logger()

- -
-
- - - - - - - - -
def src.backend.lib.config.Config.get_logger ( self)
-
-
Instantiate logging system.
-
-
- -

◆ init_config()

- -
-
- - - - - - - - -
def src.backend.lib.config.Config.init_config ( self)
-
- -
-
- -

◆ open_file()

- -
-
- - - - - - - - -
def src.backend.lib.config.Config.open_file ( self)
-
-
Open config.json and reads in configuration options.
-

Reimplemented in src.backend.tests.library_test.Test_Config.

- -
-
-

Member Data Documentation

- -

◆ _cp

- -
-
- - - - - -
- - - - -
src.backend.lib.config.Config._cp
-
-protected
-
- -
-
- -

◆ _data

- -
-
- - - - - -
- - - - -
src.backend.lib.config.Config._data
-
-protected
-
- -
-
- -

◆ _fp

- -
-
- - - - - -
- - - - -
src.backend.lib.config.Config._fp
-
-protected
-
- -
-
- -

◆ allowed_hosts

- -
-
- - - - -
src.backend.lib.config.Config.allowed_hosts
-
- -
-
- -

◆ auto_scan

- -
-
- - - - -
src.backend.lib.config.Config.auto_scan
-
- -
-
- -

◆ book_path

- -
-
- - - - -
src.backend.lib.config.Config.book_path
-
- -
-
- -

◆ book_shelf

- -
-
- - - - -
src.backend.lib.config.Config.book_shelf
-
- -
-
- -

◆ build_mode

- -
-
- - - - -
src.backend.lib.config.Config.build_mode
-
- -
-
- -

◆ catalogue_db

- -
-
- - - - -
src.backend.lib.config.Config.catalogue_db
-
- -
-
- -

◆ config_structure

- -
-
- - - - -
src.backend.lib.config.Config.config_structure
-
- -
-
- -

◆ db_engine

- -
-
- - - - -
src.backend.lib.config.Config.db_engine
-
- -
-
- -

◆ db_host

- -
-
- - - - -
src.backend.lib.config.Config.db_host
-
- -
-
- -

◆ db_pass

- -
-
- - - - -
src.backend.lib.config.Config.db_pass
-
- -
-
- -

◆ db_port

- -
-
- - - - -
src.backend.lib.config.Config.db_port
-
- -
-
- -

◆ db_user

- -
-
- - - - -
src.backend.lib.config.Config.db_user
-
- -
-
- -

◆ file_array

- -
-
- - - - -
src.backend.lib.config.Config.file_array
-
- -
-
- -

◆ logger

- -
-
- - - - -
src.backend.lib.config.Config.logger
-
- -
-
- -

◆ password

- -
-
- - - - -
src.backend.lib.config.Config.password
-
- -
-
- -

◆ root

- -
-
- - - - -
src.backend.lib.config.Config.root
-
- -
-
- -

◆ TITLE

- -
-
- - - - -
src.backend.lib.config.Config.TITLE
-
- -
-
- -

◆ user

- -
-
- - - - -
src.backend.lib.config.Config.user
-
- -
-
- -

◆ VERSION

- -
-
- - - - -
src.backend.lib.config.Config.VERSION
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/pyShelf/html/d8/dfe/classsrc_1_1backend_1_1lib_1_1config_1_1Config.png b/docs/pyShelf/html/d8/dfe/classsrc_1_1backend_1_1lib_1_1config_1_1Config.png deleted file mode 100644 index c125235952a7328a1bd3ec8f4fbe5bf258098f53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 883 zcmV-(1C0EMP)vTJr#LVva2S`&=)l0h|Ns9}lGCUF000SeQchC<|NsC0|NsC0Hv*f~00091 zNkl#pM<41|Y4s^9!)J{17a@e;QV5ddP?KDe zd})$Pk}v%|`EdT8)3twjrALzX6+&n8QQ6ulxVxrHe^nu0?q7h zUiqFM8A{T*{{DL|NiWysP5xKpm#^!#Tetebc->@cL|Xs9cq%3 zq%Tc!lJun$@<5WUhMlFq9j@9-BRwQ}qOqfpek9FfoBe3&ZT!7~{J;ZA^Xxk6r<Ym$`YuIP?tpDC&cG z+wE+UWSAU-Q|Za;D756mMpML&v;CBOu%G>VKJI(so?jtOA88{dNu^T5%twwK#vzUSQ~+Ntd%`2o82r6v{T_o^1XWfiI?DfTDFtq?`V>fq%Tc!lJup8JjNJ3>JLkv(O#@?nT7xW002ov JPDHLkV1llT&inuX diff --git a/docs/pyShelf/html/d9/d71/classDataHooks_1_1BookInterface.html b/docs/pyShelf/html/d9/d71/classDataHooks_1_1BookInterface.html deleted file mode 100644 index 7de35ed..0000000 --- a/docs/pyShelf/html/d9/d71/classDataHooks_1_1BookInterface.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: DataHooks.BookInterface Class Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
- -
DataHooks.BookInterface Class Reference
-
-
- - - - - - -

-Public Attributes

 config
 
 db
 
-

Detailed Description

-
Access point for book database.

Member Data Documentation

- -

◆ config

- -
-
- - - - -
DataHooks.BookInterface.config
-
- -
-
- -

◆ db

- -
-
- - - - -
DataHooks.BookInterface.db
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/pyShelf/html/d9/d8b/classsrc_1_1backend_1_1lib_1_1overide_1_1ACatalogue-members.html b/docs/pyShelf/html/d9/d8b/classsrc_1_1backend_1_1lib_1_1overide_1_1ACatalogue-members.html deleted file mode 100644 index 72fd565..0000000 --- a/docs/pyShelf/html/d9/d8b/classsrc_1_1backend_1_1lib_1_1overide_1_1ACatalogue-members.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: Member List - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
-
src.backend.lib.overide.ACatalogue Member List
-
-
- -

This is the complete list of members for src.backend.lib.overide.ACatalogue, including all inherited members.

- - - - -
__init__(self) (defined in src.backend.lib.overide.ACatalogue)src.backend.lib.overide.ACatalogue
import_books(self, **kwargs)src.backend.lib.overide.ACatalogue
scan_folder(self, _path=None)src.backend.lib.overide.ACatalogue
- - - - diff --git a/docs/pyShelf/html/da/d3c/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1InitFiles.html b/docs/pyShelf/html/da/d3c/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1InitFiles.html deleted file mode 100644 index 879722f..0000000 --- a/docs/pyShelf/html/da/d3c/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1InitFiles.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: src.backend.lib.pyShelf.InitFiles Class Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
- -
src.backend.lib.pyShelf.InitFiles Class Reference
-
-
- - - - - - -

-Public Member Functions

def __init__ (self, file_array)
 
def CreateFile (self, _pointer)
 
-

Detailed Description

-
First run file creation operations

Constructor & Destructor Documentation

- -

◆ __init__()

- -
-
- - - - - - - - - - - - - - - - - - -
def src.backend.lib.pyShelf.InitFiles.__init__ ( self,
 file_array 
)
-
- -
-
-

Member Function Documentation

- -

◆ CreateFile()

- -
-
- - - - - - - - - - - - - - - - - - -
def src.backend.lib.pyShelf.InitFiles.CreateFile ( self,
 _pointer 
)
-
-
Checks if file exists and creates it if not
-
-
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/pyShelf/html/da/dc1/classsrc_1_1backend_1_1lib_1_1models_1_1Book-members.html b/docs/pyShelf/html/da/dc1/classsrc_1_1backend_1_1lib_1_1models_1_1Book-members.html deleted file mode 100644 index c86a9d8..0000000 --- a/docs/pyShelf/html/da/dc1/classsrc_1_1backend_1_1lib_1_1models_1_1Book-members.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: Member List - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
-
src.backend.lib.models.Book Member List
-
- - - - - diff --git a/docs/pyShelf/html/db/d9a/classsrc_1_1backend_1_1lib_1_1storage_1_1Storage-members.html b/docs/pyShelf/html/db/d9a/classsrc_1_1backend_1_1lib_1_1storage_1_1Storage-members.html deleted file mode 100644 index c4ecebb..0000000 --- a/docs/pyShelf/html/db/d9a/classsrc_1_1backend_1_1lib_1_1storage_1_1Storage-members.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: Member List - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
-
src.backend.lib.storage.Storage Member List
-
- - - - - diff --git a/docs/pyShelf/html/db/dd5/namespaceFastAPIServer.html b/docs/pyShelf/html/db/dd5/namespaceFastAPIServer.html deleted file mode 100644 index ddbae11..0000000 --- a/docs/pyShelf/html/db/dd5/namespaceFastAPIServer.html +++ /dev/null @@ -1,313 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: FastAPIServer Namespace Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - -
-
- -
FastAPIServer Namespace Reference
-
-
- - - - -

-Classes

class  FastAPIServer
 
- - - - - - - - - - - - - -

-Functions

str base64decode (string)
 
str summarize (string)
 
str convertDateTime (datetime timestamp)
 
dumps books_tojson (obj)
 
dumps book_tojson (book)
 
dumps collections_tojson (collection)
 
- - - - - - - - - - - - - - - -

-Variables

FastAPI app = FastAPI()
 
Jinja2Templates templates = Jinja2Templates(directory="src/frontend/templates")
 
list origins
 
 allow_origins
 
 allow_credentials
 
 allow_methods
 
 allow_headers
 
-

Detailed Description

-
pyShelf's main frontend library.

Function Documentation

- -

◆ base64decode()

- -
-
- - - - - - - - -
str FastAPIServer.base64decode ( string)
-
-
Decode a base64 string.
-
-
- -

◆ book_tojson()

- -
-
- - - - - - - - -
dumps FastAPIServer.book_tojson ( book)
-
-
Convert a book object to a json.
-
-
- -

◆ books_tojson()

- -
-
- - - - - - - - -
dumps FastAPIServer.books_tojson ( obj)
-
-
Convert an object to a dictionary.
-
-
- -

◆ collections_tojson()

- -
-
- - - - - - - - -
dumps FastAPIServer.collections_tojson ( collection)
-
-
Convert a collections object to json.
-
-
- -

◆ convertDateTime()

- -
-
- - - - - - - - -
str FastAPIServer.convertDateTime (datetime timestamp)
-
-
Convert a datetime object to a string.
-
-
- -

◆ summarize()

- -
-
- - - - - - - - -
str FastAPIServer.summarize ( string)
-
-
Summarize a string.
-
-
-

Variable Documentation

- -

◆ allow_credentials

- -
-
- - - - -
FastAPIServer.allow_credentials
-
- -
-
- -

◆ allow_headers

- -
-
- - - - -
FastAPIServer.allow_headers
-
- -
-
- -

◆ allow_methods

- -
-
- - - - -
FastAPIServer.allow_methods
-
- -
-
- -

◆ allow_origins

- -
-
- - - - -
FastAPIServer.allow_origins
-
- -
-
- -

◆ app

- -
-
- - - - -
FastAPI FastAPIServer.app = FastAPI()
-
- -
-
- -

◆ origins

- -
-
- - - - -
list FastAPIServer.origins
-
-Initial value:
1= [
-
2 "http://localhost",
-
3 "http://localhost:8081",
-
4 "http://localhost:8080",
-
5 "*"
-
6]
-
-
-
- -

◆ templates

- -
-
- - - - -
Jinja2Templates FastAPIServer.templates = Jinja2Templates(directory="src/frontend/templates")
-
- -
-
-
- - - - diff --git a/docs/pyShelf/html/db/dda/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Catalogue.html b/docs/pyShelf/html/db/dda/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Catalogue.html deleted file mode 100644 index ecbef76..0000000 --- a/docs/pyShelf/html/db/dda/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Catalogue.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: src.backend.tests.library_test.Test_Catalogue Class Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
- -
src.backend.tests.library_test.Test_Catalogue Class Reference
-
-
-
-Inheritance diagram for src.backend.tests.library_test.Test_Catalogue:
-
-
- - -src.backend.lib.library.Catalogue - -
- - - - - - -

-Public Member Functions

def __init__ (self)
 
def filter_books (self)
 
- - - -

-Public Attributes

 book_shelf
 
-

Detailed Description

-

Constructor & Destructor Documentation

- -

◆ __init__()

- -
-
- - - - - - - - -
def src.backend.tests.library_test.Test_Catalogue.__init__ ( self)
-
- -

Reimplemented from src.backend.lib.library.Catalogue.

- -
-
-

Member Function Documentation

- -

◆ filter_books()

- -
-
- - - - - - - - -
def src.backend.tests.library_test.Test_Catalogue.filter_books ( self)
-
-
Calls scan_folder and filters out book files.
-
-:returns self._book_list_expanded: json string containing
-all book metadata
-
-

Reimplemented from src.backend.lib.library.Catalogue.

- -
-
-

Member Data Documentation

- -

◆ book_shelf

- -
-
- - - - -
src.backend.tests.library_test.Test_Catalogue.book_shelf
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/pyShelf/html/db/dda/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Catalogue.png b/docs/pyShelf/html/db/dda/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Catalogue.png deleted file mode 100644 index 3fd03ee733a798e115d87f409d21bff962a0a01d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 981 zcmeAS@N?(olHy`uVBq!ia0y~yVB`g|12~w0q{-?F%Yl@1fKQ0)|NsAi%olIImi8Z7 zZegHVATj;SivtG^0L6nRU0wl{<17jC3uXZF!N8np_7w&O<^)d{$B+ufw{u_jy;k69 zQ5Vj9`n~?q8bnz^+m6H?Z_t=QB!@0HJ_?_cz!k{6$Jn6xr4*NAPu-{U(|-frv7 zZSH%N`K>;6arVNnqnjVjsc4pe_ zTI)JDTz@H>y_3vY`BsZfzh|YnOzPk2cKEEa&*_In%QYBHmvvrw;ODc2_w}rdw8wu% zdJB6e9-DdBP3rD8zr`uu*DJfG$n}5E=*gU}vVQ9{*T?UcvM+F}v+&6_aWgXR{XNm> ze20qs>()Jj=iVLl3A#PG^6@OU-NExtNh`jb@T7LHn5OMx{_;~Z9yl+&r^z?1ScvCt z{GP_w2kl?Ko*NXyKRx{S?}^r}D)*Nxef%$|-QFcRH`jZkZy`Y1Q!N)3rqdkMcL207^FT)8HsYQ$o zGhLib7!)RF0A*8zcrP+E_$*SCVwm7*;=;^e1dIa)2epgX75Dlt*_eAKW@?p#^4dMG0^e+`(vWZcY-(J+;7;Jle`(L+;$^abKNoJ^*LbX0c=z*+ zcXHF`8%8WDWV)Ldef@#l(aUfCpL%x9Y3-}(=eM>OSxA4*xPSj>_3g(uFIIRw)7oEU zUR8SM_Z8QY#mg^FyAchJzYDotKcO|OwOG#x%6V&Ot+IM?^@z6ugF#2 zab@D-iDA7HFD3ty>z!9tD>k=W{bk%@TbX5F1XOpMUzRxOB9)owH|6w1qxD*6r4?=T z_AJ>Z{^^*p$+b^zt829KkC@DK@jCzM@LVIc=K(9qy<`_Y{~aX9=e9q1&U?)_!R{~T zUQ*uZ9``YN?v$6j;t9WJzY{Uu%zt71SvA=ghcmwXc~O4*%$tc}R;^EdtTd_1)(gL3 zryF$U%sq8rJQ!~VMNeAVOg^dG+j1}c{KFja_wMz?T2U)t24wJb^>bP0l+XkKCN$gt diff --git a/docs/pyShelf/html/dc/d3e/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Catalogue-members.html b/docs/pyShelf/html/dc/d3e/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Catalogue-members.html deleted file mode 100644 index 841856a..0000000 --- a/docs/pyShelf/html/dc/d3e/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Catalogue-members.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: Member List - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
-
src.backend.tests.library_test.Test_Catalogue Member List
-
- - - - - diff --git a/docs/pyShelf/html/dc/ded/classsrc_1_1backend_1_1lib_1_1overide_1_1ACatalogue.html b/docs/pyShelf/html/dc/ded/classsrc_1_1backend_1_1lib_1_1overide_1_1ACatalogue.html deleted file mode 100644 index 0a9c379..0000000 --- a/docs/pyShelf/html/dc/ded/classsrc_1_1backend_1_1lib_1_1overide_1_1ACatalogue.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: src.backend.lib.overide.ACatalogue Class Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
- -
src.backend.lib.overide.ACatalogue Class Reference
-
-
-
-Inheritance diagram for src.backend.lib.overide.ACatalogue:
-
-
- - -src.backend.lib.library.Catalogue - -
- - - - - - - - -

-Public Member Functions

def __init__ (self)
 
def scan_folder (self, _path=None)
 
def import_books (self, **kwargs)
 
-

Detailed Description

-
Aynchronous overide of library.Catalogue,
-: TODO : Complete or discard this overide
-

Constructor & Destructor Documentation

- -

◆ __init__()

- -
-
- - - - - - - - -
def src.backend.lib.overide.ACatalogue.__init__ ( self)
-
- -

Reimplemented from src.backend.lib.library.Catalogue.

- -
-
-

Member Function Documentation

- -

◆ import_books()

- -
-
- - - - - - - - - - - - - - - - - - -
def src.backend.lib.overide.ACatalogue.import_books ( self,
** kwargs 
)
-
-
Async overide of import_books
-
-

Reimplemented from src.backend.lib.library.Catalogue.

- -
-
- -

◆ scan_folder()

- -
-
- - - - - - - - - - - - - - - - - - -
def src.backend.lib.overide.ACatalogue.scan_folder ( self,
 _path = None 
)
-
-
Scan folder by _path, allows recurisive scanning
-
-

Reimplemented from src.backend.lib.library.Catalogue.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/pyShelf/html/dc/ded/classsrc_1_1backend_1_1lib_1_1overide_1_1ACatalogue.png b/docs/pyShelf/html/dc/ded/classsrc_1_1backend_1_1lib_1_1overide_1_1ACatalogue.png deleted file mode 100644 index efb6c65ead8a61ab1cc851981727addb21f26eb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 856 zcmeAS@N?(olHy`uVBq!ia0vp^H-I>RgBeKr$a-f1Dd_;85ZC|z{{xvX-h3_XKeXJ! zK(jz%`k5C84jcfA2T!`Z0w~8>666=m0OW&#In(Sb3=B+J0%S_)C&Fp#1>$g7F71JN$2XdAlbC|R+u2yNz{03R?sd3%W({l6W(*9aZw>ST! zy+8R>r`ZdR^Z%E-vwy0I&)2#qc|!7j!_=GC9Jj74JhyVH+sld0SHdzb2-cYFb+p^` z>-w1&%rlB!DrppL-Ojk#HfW*a+r`^wYMOBiAAQZR`SRC<;|sSXTrHD-qa&16FuBY0 z;r+&&S;c`ie`dAap5)(o`%!g**e2HM`CV^&s?N>u?&Ds*aP8-w*ygFLZj>Io!}!+Y zXw+t(&@HN`Op8K8?wsm04ypfFJi+*N#r)NeUf!B=|I?2UQO{5IFORveN#p$s00RsNn#QVJxhoY`V*qL)MW7l7nf(3nS=!; zJ-K~cQdDXgxZ~q`E#Cfqyu-!i-s(O9!P3;jn|HYuTF?0}y3oyF2|m2TWPR<~ z)6MHH-?KUMtMHwB-jndU$&O?-TWH^gvj`Fn*w*MF5I+*;WkczosF-es?u_cQL6y5F?(!^5cfrkgLT zHar%I-jMa0S$k!=(dL{zrHArHm*j#Ur)&1z}?5NrMsQ>MQ1mCZ7SkKhlSPl%7&MgOAT-+{!gU33;OVf9Sy{p{D VpMUzatbuue!PC{xWt~$(697n!moNYT diff --git a/docs/pyShelf/html/dd/d22/classFastAPIServer_1_1FastAPIServer.html b/docs/pyShelf/html/dd/d22/classFastAPIServer_1_1FastAPIServer.html deleted file mode 100644 index ae2670b..0000000 --- a/docs/pyShelf/html/dd/d22/classFastAPIServer_1_1FastAPIServer.html +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: FastAPIServer.FastAPIServer Class Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
- -
FastAPIServer.FastAPIServer Class Reference
-
-
- - - - - - - - - - - - - - - - - - -

-Public Member Functions

def __init__ (self, config)
 
def compile_static_files (self)
 
None use_route_names_as_operation_ids (self, FastAPI app)
 
def index (Request request, int skip=0, int limit=10)
 
def books (Request request, int skip=0, int limit=10, collection=None)
 
def book (Request request, int book_id)
 
def collections (Request request)
 
def run (self)
 
- - - - - - - -

-Public Attributes

 config
 
 fe_config
 
 fe_server
 
-

Detailed Description

-
Entry point for FastAPI server.

Constructor & Destructor Documentation

- -

◆ __init__()

- -
-
- - - - - - - - - - - - - - - - - - -
def FastAPIServer.FastAPIServer.__init__ ( self,
 config 
)
-
-
Initialize FastAPIServer object parameters.
-
-
-

Member Function Documentation

- -

◆ book()

- -
-
- - - - - - - - - - - - - - - - - - -
def FastAPIServer.FastAPIServer.book (Request request,
int book_id 
)
-
- -
-
- -

◆ books()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
def FastAPIServer.FastAPIServer.books (Request request,
int  skip = 0,
int  limit = 10,
 collection = None 
)
-
- -
-
- -

◆ collections()

- -
-
- - - - - - - - -
def FastAPIServer.FastAPIServer.collections (Request request)
-
- -
-
- -

◆ compile_static_files()

- -
-
- - - - - - - - -
def FastAPIServer.FastAPIServer.compile_static_files ( self)
-
-
Compile static files for web frontend.
-
-
- -

◆ index()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
def FastAPIServer.FastAPIServer.index (Request request,
int  skip = 0,
int  limit = 10 
)
-
- -
-
- -

◆ run()

- -
-
- - - - - - - - -
def FastAPIServer.FastAPIServer.run ( self)
-
-
Front end server entrypoint.
-
-
- -

◆ use_route_names_as_operation_ids()

- -
-
- - - - - - - - - - - - - - - - - - -
None FastAPIServer.FastAPIServer.use_route_names_as_operation_ids ( self,
FastAPI app 
)
-
-
Use route name as operation id.
-
-
-

Member Data Documentation

- -

◆ config

- -
-
- - - - -
FastAPIServer.FastAPIServer.config
-
- -
-
- -

◆ fe_config

- -
-
- - - - -
FastAPIServer.FastAPIServer.fe_config
-
- -
-
- -

◆ fe_server

- -
-
- - - - -
FastAPIServer.FastAPIServer.fe_server
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/pyShelf/html/dd/de1/namespacesrc_1_1backend_1_1lib_1_1storage.html b/docs/pyShelf/html/dd/de1/namespacesrc_1_1backend_1_1lib_1_1storage.html deleted file mode 100644 index 4affba5..0000000 --- a/docs/pyShelf/html/dd/de1/namespacesrc_1_1backend_1_1lib_1_1storage.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: src.backend.lib.storage Namespace Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
- -
src.backend.lib.storage Namespace Reference
-
-
- - - - -

-Classes

class  Storage
 
-

Detailed Description

-
Pyshelf's Main Storage Class.
- - - - diff --git a/docs/pyShelf/html/de/d11/classsrc_1_1backend_1_1lib_1_1api__hooks_1_1DuckDuckGo-members.html b/docs/pyShelf/html/de/d11/classsrc_1_1backend_1_1lib_1_1api__hooks_1_1DuckDuckGo-members.html deleted file mode 100644 index 86b19f6..0000000 --- a/docs/pyShelf/html/de/d11/classsrc_1_1backend_1_1lib_1_1api__hooks_1_1DuckDuckGo-members.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: Member List - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
-
src.backend.lib.api_hooks.DuckDuckGo Member List
-
- - - - - diff --git a/docs/pyShelf/html/de/d6d/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1Server-members.html b/docs/pyShelf/html/de/d6d/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1Server-members.html deleted file mode 100644 index 1cf062d..0000000 --- a/docs/pyShelf/html/de/d6d/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1Server-members.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: Member List - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
-
src.backend.lib.pyShelf.Server Member List
-
- - - - - diff --git a/docs/pyShelf/html/df/d03/classsrc_1_1backend_1_1lib_1_1models_1_1Collection.html b/docs/pyShelf/html/df/d03/classsrc_1_1backend_1_1lib_1_1models_1_1Collection.html deleted file mode 100644 index b945c7a..0000000 --- a/docs/pyShelf/html/df/d03/classsrc_1_1backend_1_1lib_1_1models_1_1Collection.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: src.backend.lib.models.Collection Class Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
- -
src.backend.lib.models.Collection Class Reference
-
-
-
-Inheritance diagram for src.backend.lib.models.Collection:
-
-
- - -src.backend.lib.models.Base - -
- - - - - - - - -

-Static Public Attributes

Mapped collection [str]
 
Mapped book_id = mapped_column(ForeignKey(Book.book_id))
 
Mapped collection_id = mapped_column(primary_key=True)
 
-

Detailed Description

-
Collection model.

Member Data Documentation

- -

◆ book_id

- -
-
- - - - - -
- - - - -
Mapped src.backend.lib.models.Collection.book_id = mapped_column(ForeignKey(Book.book_id))
-
-static
-
- -
-
- -

◆ collection

- -
-
- - - - - -
- - - - -
Mapped src.backend.lib.models.Collection.collection [str]
-
-static
-
- -
-
- -

◆ collection_id

- -
-
- - - - - -
- - - - -
Mapped src.backend.lib.models.Collection.collection_id = mapped_column(primary_key=True)
-
-static
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/pyShelf/html/df/d03/classsrc_1_1backend_1_1lib_1_1models_1_1Collection.png b/docs/pyShelf/html/df/d03/classsrc_1_1backend_1_1lib_1_1models_1_1Collection.png deleted file mode 100644 index 7475422a1727e58a32d95f955a5ba8817108844e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1069 zcmeAS@N?(olHy`uVBq!ia0vp^r+~PFgBeIp)Nc6;q@)9ULR|m<{|{uoc=NTi|Il&^ z1I+@7>1SRXIB)@^jfg4X^IQZ6?l!TZ6v;Pn}|`ayr5I#f&?; z$G22Y-F4^8#3#3Z8LxjdZ}EgTPXcRhnqOXVe&UnvUv=!Wub<*Pn#&cUZ7SL(yXIKc z|7!Cqx4-W!(fOY(+oO`K33D!(am`6{=@eBK2K)8g3~Lsa2Ix&sjkxBxbJChan*_Yd z3>Z3=yD&Cnc!@A{EF*zY;e2~rZZ^m4juTv7B7zfv`hi3h_tK7zFH%yo|60AVS5h+G znz?<$oqwGjdzSoXe%kHo9}surmrUyZ-lF{%tBkLoznjy3e6GCw@sR&o*G>v9iH_cT zbLrKhH97K1N`Asqr0yr@)SL}!muiYFoO6BOtjV@No*k2U{OO~EE z4~M_p?J_+fZ(&Er^~q5$H)RPOzF@X?>gQ?lYegp~Y_0vl7Zx4uEik?5@6ThM`Bj_w zu1z{8^TUx{Sny{q!lz(X6n82x5I7kRoPW*4kewkr<#ej#w9v`muaVR)n& z$e=Jwh?QXxDU5ponoHLxiiBPjouaX7)kQGzg(cO(^7h9K@$G-zLra&L-PPT*RcZU1 zCmGNFqzCMa_`>q^-%~YrpmKH7DSwSl)t2v_@%nk*w!?@2e=PL*x;|;HjNz`WS7*m& z#VxnblF!?J?s)W+T`vvI_NA?K<~_L1qGsFrXDRmkb{ZbvQL{#4`N@lI?Wm)D_XFXhNDl3-uX@>%2GkL4O_?}WYTb?wgO z@A0~?`fRt67Uy!j>j_jK9?VF0A_3kPgg&ebxsLQ0DBPh A$^ZZW diff --git a/docs/pyShelf/html/df/d4c/namespaceobjects.html b/docs/pyShelf/html/df/d4c/namespaceobjects.html deleted file mode 100644 index f469771..0000000 --- a/docs/pyShelf/html/df/d4c/namespaceobjects.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: objects Namespace Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - -
-
- -
objects Namespace Reference
-
-
- - - - -

-Classes

class  JSInterface
 
-

Detailed Description

-
pyShelf's Frontend Objects.
- - - - diff --git a/docs/pyShelf/html/df/d83/classsrc_1_1backend_1_1tests_1_1config__test_1_1TestConfig.html b/docs/pyShelf/html/df/d83/classsrc_1_1backend_1_1tests_1_1config__test_1_1TestConfig.html deleted file mode 100644 index 7eba542..0000000 --- a/docs/pyShelf/html/df/d83/classsrc_1_1backend_1_1tests_1_1config__test_1_1TestConfig.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: src.backend.tests.config_test.TestConfig Class Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
- -
src.backend.tests.config_test.TestConfig Class Reference
-
-
- - - - - - - - -

-Public Member Functions

def test_book_dir (self)
 
def test_title (self)
 
def test_version (self)
 
- - - -

-Static Public Attributes

Config config = Config(os.path.abspath(os.path.curdir))
 
-

Detailed Description

-

Member Function Documentation

- -

◆ test_book_dir()

- -
-
- - - - - - - - -
def src.backend.tests.config_test.TestConfig.test_book_dir ( self)
-
- -
-
- -

◆ test_title()

- -
-
- - - - - - - - -
def src.backend.tests.config_test.TestConfig.test_title ( self)
-
- -
-
- -

◆ test_version()

- -
-
- - - - - - - - -
def src.backend.tests.config_test.TestConfig.test_version ( self)
-
- -
-
-

Member Data Documentation

- -

◆ config

- -
-
- - - - - -
- - - - -
Config src.backend.tests.config_test.TestConfig.config = Config(os.path.abspath(os.path.curdir))
-
-static
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/pyShelf/html/dir_1c7294442ce83d360610449d04c9d7fc.html b/docs/pyShelf/html/dir_1c7294442ce83d360610449d04c9d7fc.html deleted file mode 100644 index 5109080..0000000 --- a/docs/pyShelf/html/dir_1c7294442ce83d360610449d04c9d7fc.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: src/backend/lib Directory Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
-
lib Directory Reference
-
-
- - - - - - - - - - - - - - - - - - -

-Files

file  __init__.py [code]
 
file  api_hooks.py [code]
 
file  config.py [code]
 
file  library.py [code]
 
file  models.py [code]
 
file  overide.py [code]
 
file  pyShelf.py [code]
 
file  storage.py [code]
 
-
- - - - diff --git a/docs/pyShelf/html/dir_3f615ade772d23cefe5e20dcb18424a2.html b/docs/pyShelf/html/dir_3f615ade772d23cefe5e20dcb18424a2.html deleted file mode 100644 index e9c02c9..0000000 --- a/docs/pyShelf/html/dir_3f615ade772d23cefe5e20dcb18424a2.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: src/backend Directory Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
-
backend Directory Reference
-
-
- - - - - - -

-Directories

directory  lib
 
directory  tests
 
- - - - - - - -

-Files

file  __init__.py [code]
 
file  pyShelf_MakeCollections.py [code]
 
file  pyShelf_ScanLibrary.py [code]
 
-
- - - - diff --git a/docs/pyShelf/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/docs/pyShelf/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html deleted file mode 100644 index 4431a4e..0000000 --- a/docs/pyShelf/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: src Directory Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
-
src Directory Reference
-
-
- - - - -

-Directories

directory  backend
 
- - - -

-Files

file  __init__.py [code]
 
-
- - - - diff --git a/docs/pyShelf/html/dir_8509b06bafa958d2011203a730bf5778.html b/docs/pyShelf/html/dir_8509b06bafa958d2011203a730bf5778.html deleted file mode 100644 index af62fcc..0000000 --- a/docs/pyShelf/html/dir_8509b06bafa958d2011203a730bf5778.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: src/frontend Directory Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
-
frontend Directory Reference
-
-
- - - - -

-Directories

directory  lib
 
-
- - - - diff --git a/docs/pyShelf/html/dir_9020577e2da81c4cf5a5554c26431f94.html b/docs/pyShelf/html/dir_9020577e2da81c4cf5a5554c26431f94.html deleted file mode 100644 index 7dee3c2..0000000 --- a/docs/pyShelf/html/dir_9020577e2da81c4cf5a5554c26431f94.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: src/backend/tests Directory Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
-
tests Directory Reference
-
-
- - - - - - - - - - -

-Files

file  __init__.py [code]
 
file  config_test.py [code]
 
file  library_test.py [code]
 
file  server_test.py [code]
 
-
- - - - diff --git a/docs/pyShelf/html/dir_d6d65651a873fbc3232a07f3f4a594e4.html b/docs/pyShelf/html/dir_d6d65651a873fbc3232a07f3f4a594e4.html deleted file mode 100644 index dc608e4..0000000 --- a/docs/pyShelf/html/dir_d6d65651a873fbc3232a07f3f4a594e4.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: src/frontend/lib Directory Reference - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
-
lib Directory Reference
-
-
- - - - - - - - -

-Files

file  DataHooks.py [code]
 
file  FastAPIServer.py [code]
 
file  objects.py [code]
 
-
- - - - diff --git a/docs/pyShelf/html/doc.png b/docs/pyShelf/html/doc.png deleted file mode 100644 index 17edabff95f7b8da13c9516a04efe05493c29501..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t diff --git a/docs/pyShelf/html/docd.png b/docs/pyShelf/html/docd.png deleted file mode 100644 index d7c94fda9bf08ecc02c7190d968452b7a2dbf04b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 756 zcmV1wr-rhpn+wxm%q2)IkAYsr{iGq<}_z5JCD4J;FN?6Qh;@TCubdp(_XdD-^ zG_#)IP7_z6hKNdx5^+FGArwLWTWCG!j+oKji?U!hxA#d-ljgkN`+e^@-P+RWG{Bx= z2iQyYTtEf*o~ySWrIVW}HWHi0_hd4~$E6Jx1U`>Owo}EYJ1O>iZvS?!z8}B}QwLMA zC3Keqf1c}K@?C`X>68b(EUzYUYAS&OH^VPteZLPr{S&|nQvp@6W4GH-1U8!u&7l~A zx~RUSNH+>7@q38W6!BzirtjLFCzc|XGx)EF#G%^pWION*k@?vP<2O>|XkCD3ujl%1 z{55JSVkw{~HbX>iEZ2%yJ2eHj5Yh8OTpzs0A2;tZ^x!#5D+y-es{k1&0|Ns9-|+Xt ziGiTsZ8(^nUo#wdTpIDkb-Zp(3|A*FzW}GZ5SQD-r^R`&X@`26E3W|GyrwDIZjtQ& z$g5f8Sv=VgVtDien@J(!^BK+#l;s-LgP--p7C;7;E!ysXcXK6?+9D>_-B(?Wm(U zQbNm-5TyYxIU=rs0+)!ixqzhuxw(AqKc3?KKX32{D~Qibp*r0x&Wux5-9WCMMRi3U zTd6dOCQlj>a;gr;gLwRKulT&(m@^L{&HkSC(qH05HSSf$YEhynGvH zWNez``Z8FJXE+BSg=%ak{OR z+Nylcb{?evLYLuE1_HngYw0g%LC#=$a@?4~Tx>F9295Q>9UJ|_6v-KMw;!YZSgGj@ zR8fRov=hJ#QvsO@xw*{0%zH@OKVEUr - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/pyShelf/html/dynsections.js b/docs/pyShelf/html/dynsections.js deleted file mode 100644 index 1f4cd14..0000000 --- a/docs/pyShelf/html/dynsections.js +++ /dev/null @@ -1,130 +0,0 @@ -/* - @licstart The following is the entire license notice for the JavaScript code in this file. - - The MIT License (MIT) - - Copyright (C) 1997-2020 by Dimitri van Heesch - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software - and associated documentation files (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, publish, distribute, - sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - @licend The above is the entire license notice for the JavaScript code in this file - */ -function toggleVisibility(linkObj) -{ - var base = $(linkObj).attr('id'); - var summary = $('#'+base+'-summary'); - var content = $('#'+base+'-content'); - var trigger = $('#'+base+'-trigger'); - var src=$(trigger).attr('src'); - if (content.is(':visible')===true) { - content.hide(); - summary.show(); - $(linkObj).addClass('closed').removeClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); - } else { - content.show(); - summary.hide(); - $(linkObj).removeClass('closed').addClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); - } - return false; -} - -function updateStripes() -{ - $('table.directory tr'). - removeClass('even').filter(':visible:even').addClass('even'); - $('table.directory tr'). - removeClass('odd').filter(':visible:odd').addClass('odd'); -} - -function toggleLevel(level) -{ - $('table.directory tr').each(function() { - var l = this.id.split('_').length-1; - var i = $('#img'+this.id.substring(3)); - var a = $('#arr'+this.id.substring(3)); - if (l - - - - - - -pyShelf Open Source Ebook Server: File List - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - -
-
-
File List
-
-
-
Here is a list of all documented files with brief descriptions:
-
[detail level 1234]
- - - - - - - - - - - - - - - - - - - - - - - - - -
  src
  backend
  lib
 __init__.py
 api_hooks.py
 config.py
 library.py
 models.py
 overide.py
 pyShelf.py
 storage.py
  tests
 __init__.py
 config_test.py
 library_test.py
 server_test.py
 __init__.py
 pyShelf_MakeCollections.py
 pyShelf_ScanLibrary.py
  frontend
  lib
 DataHooks.py
 FastAPIServer.py
 objects.py
 __init__.py
-
-
- - - - diff --git a/docs/pyShelf/html/folderclosed.png b/docs/pyShelf/html/folderclosed.png deleted file mode 100644 index bb8ab35edce8e97554e360005ee9fc5bffb36e66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 616 zcmV-u0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA diff --git a/docs/pyShelf/html/functions.html b/docs/pyShelf/html/functions.html deleted file mode 100644 index 86bb94e..0000000 --- a/docs/pyShelf/html/functions.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: Class Members - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - - -
-
-
Here is a list of all documented class members with links to the class documentation for each member:
- -

- _ -

- - -

- b -

- - -

- c -

- - -

- e -

- - -

- f -

- - -

- g -

- - -

- i -

- - -

- m -

- - -

- o -

- - -

- p -

- - -

- r -

- - -

- s -

- - -

- u -

-
- - - - diff --git a/docs/pyShelf/html/functions_func.html b/docs/pyShelf/html/functions_func.html deleted file mode 100644 index c3ffc27..0000000 --- a/docs/pyShelf/html/functions_func.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: Class Members - Functions - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - - -
-
-  - -

- _ -

- - -

- b -

- - -

- c -

- - -

- e -

- - -

- f -

- - -

- g -

- - -

- i -

- - -

- m -

- - -

- o -

- - -

- p -

- - -

- r -

- - -

- s -

- - -

- u -

-
- - - - diff --git a/docs/pyShelf/html/hierarchy.html b/docs/pyShelf/html/hierarchy.html deleted file mode 100644 index d593775..0000000 --- a/docs/pyShelf/html/hierarchy.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: Class Hierarchy - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - -
-
-
Class Hierarchy
-
- - - - - diff --git a/docs/pyShelf/html/index.hhc b/docs/pyShelf/html/index.hhc deleted file mode 100644 index e77d1ad..0000000 --- a/docs/pyShelf/html/index.hhc +++ /dev/null @@ -1,270 +0,0 @@ - - - - - -
    -
  • -
      -
    • -
        -
      • -
          -
        • -
            -
          -
        -
      • -
          -
        • -
            -
          • -
          • -
          • -
          • -
          -
        • -
        • -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
            -
          • -
          • -
          -
        -
      -
    • -
        -
      • -
      • -
      -
    -
  • -
      -
    • -
        -
      • -
          -
        • -
            -
          -
        -
      • -
          -
        • -
            -
          • -
          • -
          • -
          • -
          -
        -
      • -
          -
        • -
            -
          • -
          • -
          -
        -
      • -
          -
        • -
            -
          • -
              -
            • -
                -
              • -
                  -
                • -
                -
              -
            • -
                -
              • -
                  -
                • -
                • -
                • -
                -
              -
            • -
                -
              • -
                  -
                • -
                • -
                • -
                • -
                • -
                • -
                • -
                • -
                • -
                • -
                -
              -
            • -
                -
              • -
              • -
                  -
                -
              • -
                  -
                -
              -
            • -
                -
              • -
                  -
                • -
                • -
                -
              -
            • -
                -
              • -
                  -
                -
              • -
                  -
                • -
                -
              • -
                  -
                -
              -
            • -
                -
              • -
                  -
                • -
                • -
                • -
                • -
                • -
                • -
                • -
                • -
                • -
                -
              -
            -
          • -
              -
            • -
                -
              • -
                  -
                -
              -
            • -
                -
              • -
                  -
                • -
                -
              • -
                  -
                • -
                • -
                -
              • -
                  -
                -
              -
            -
          -
        -
      -
    • -
    • -
        -
      • -
      • -
      • -
          -
        • -
        • -
        -
      • -
          -
        • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
          -
        • -
            -
          • -
          • -
          -
        -
      -
    • -
        -
      • -
      • -
      -
    -
  • -
      -
    • -
        -
      • -
          -
        • -
            -
          • -
              -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            -
          • -
              -
            • -
            • -
            • -
            • -
            -
          • -
          • -
          • -
          -
        • -
            -
          • -
              -
            • -
            • -
            • -
            -
          -
        • -
        -
      -
    -
- - diff --git a/docs/pyShelf/html/index.hhk b/docs/pyShelf/html/index.hhk deleted file mode 100644 index 65dfd6e..0000000 --- a/docs/pyShelf/html/index.hhk +++ /dev/null @@ -1,260 +0,0 @@ - - - - - -
    -
  • -
  • -
  • -
  • -
  • -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
  • -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
  • -
  • -
  • -
  • -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
  • -
      -
    • -
    -
  • -
  • -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
  • -
  • -
  • -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
  • -
  • -
      -
    • -
    -
  • -
  • -
  • -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
  • -
  • -
  • -
      -
    • -
    -
  • -
  • -
      -
    • -
    -
  • -
      -
    • -
    -
  • -
  • -
- - diff --git a/docs/pyShelf/html/index.hhp b/docs/pyShelf/html/index.hhp deleted file mode 100644 index dd527ef..0000000 --- a/docs/pyShelf/html/index.hhp +++ /dev/null @@ -1,111 +0,0 @@ -[OPTIONS] -Compiled file=pyShelf_docs -Compatibility=1.1 -Full-text search=Yes -Contents file=index.hhc -Default Window=main -Default topic=index.html -Index file=index.hhk -Language=0x409 English (United States) -Binary TOC=YES -Title=pyShelf Open Source Ebook Server - -[WINDOWS] -main="pyShelf Open Source Ebook Server","index.hhc","index.hhk","index.html","index.html",,,,,0x23520,,0x70387e,,,,,,,,0 - -[FILES] -annotated.html -classes.html -d0/d49/classsrc_1_1backend_1_1lib_1_1models_1_1Collection-members.html -d0/d93/namespacesrc_1_1backend_1_1lib_1_1config.html -d1/dca/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1InitFiles-members.html -d2/dcb/classobjects_1_1JSInterface-members.html -d3/d29/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Config.html -d3/d4a/classsrc_1_1backend_1_1lib_1_1config_1_1Config-members.html -d3/d95/classsrc_1_1backend_1_1tests_1_1library__test_1_1TestCatalogue-members.html -d4/d6b/classFastAPIServer_1_1FastAPIServer-members.html -d4/d71/classDataHooks_1_1BookInterface-members.html -d5/d80/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1Admin.html -d5/da5/classsrc_1_1backend_1_1lib_1_1library_1_1Catalogue.html -d5/ddf/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Config-members.html -d5/dee/classsrc_1_1backend_1_1tests_1_1config__test_1_1TestConfig-members.html -d6/d1d/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1Admin-members.html -d6/d20/classsrc_1_1backend_1_1lib_1_1library_1_1Catalogue-members.html -d6/d4e/classsrc_1_1backend_1_1lib_1_1models_1_1Book.html -d6/d90/classsrc_1_1backend_1_1lib_1_1models_1_1Base.html -d7/d40/classsrc_1_1backend_1_1lib_1_1storage_1_1Storage.html -d7/d88/classsrc_1_1backend_1_1lib_1_1api__hooks_1_1DuckDuckGo.html -d7/db9/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1Server.html -d7/df9/namespaceDataHooks.html -d8/d3d/classsrc_1_1backend_1_1tests_1_1library__test_1_1TestCatalogue.html -d8/def/classobjects_1_1JSInterface.html -d8/dfe/classsrc_1_1backend_1_1lib_1_1config_1_1Config.html -d9/d71/classDataHooks_1_1BookInterface.html -d9/d8b/classsrc_1_1backend_1_1lib_1_1overide_1_1ACatalogue-members.html -da/d3c/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1InitFiles.html -da/dc1/classsrc_1_1backend_1_1lib_1_1models_1_1Book-members.html -db/d9a/classsrc_1_1backend_1_1lib_1_1storage_1_1Storage-members.html -db/dd5/namespaceFastAPIServer.html -db/dda/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Catalogue.html -dc/d3e/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Catalogue-members.html -dc/ded/classsrc_1_1backend_1_1lib_1_1overide_1_1ACatalogue.html -dd/d22/classFastAPIServer_1_1FastAPIServer.html -dd/de1/namespacesrc_1_1backend_1_1lib_1_1storage.html -de/d11/classsrc_1_1backend_1_1lib_1_1api__hooks_1_1DuckDuckGo-members.html -de/d6d/classsrc_1_1backend_1_1lib_1_1pyShelf_1_1Server-members.html -df/d03/classsrc_1_1backend_1_1lib_1_1models_1_1Collection.html -df/d4c/namespaceobjects.html -df/d83/classsrc_1_1backend_1_1tests_1_1config__test_1_1TestConfig.html -dir_1c7294442ce83d360610449d04c9d7fc.html -dir_3f615ade772d23cefe5e20dcb18424a2.html -dir_68267d1309a1af8e8297ef4c3efbcdba.html -dir_8509b06bafa958d2011203a730bf5778.html -dir_9020577e2da81c4cf5a5554c26431f94.html -dir_d6d65651a873fbc3232a07f3f4a594e4.html -files.html -functions.html -functions_func.html -hierarchy.html -index.html -namespacemembers.html -namespacemembers_func.html -namespaces.html -bc_s.png -bc_sd.png -bdwn.png -closed.png -d3/d29/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Config.png -d5/da5/classsrc_1_1backend_1_1lib_1_1library_1_1Catalogue.png -d6/d4e/classsrc_1_1backend_1_1lib_1_1models_1_1Book.png -d6/d90/classsrc_1_1backend_1_1lib_1_1models_1_1Base.png -d8/dfe/classsrc_1_1backend_1_1lib_1_1config_1_1Config.png -db/dda/classsrc_1_1backend_1_1tests_1_1library__test_1_1Test__Catalogue.png -dc/ded/classsrc_1_1backend_1_1lib_1_1overide_1_1ACatalogue.png -df/d03/classsrc_1_1backend_1_1lib_1_1models_1_1Collection.png -doc.png -docd.png -doxygen.svg -folderclosed.png -folderopen.png -nav_f.png -nav_fd.png -nav_g.png -nav_h.png -nav_hd.png -open.png -splitbar.png -splitbard.png -sync_off.png -sync_on.png -tab_a.png -tab_ad.png -tab_b.png -tab_bd.png -tab_h.png -tab_hd.png -tab_s.png -tab_sd.png -doxygen.css -dynsections.js -jquery.js -tabs.css diff --git a/docs/pyShelf/html/index.html b/docs/pyShelf/html/index.html deleted file mode 100644 index d142e85..0000000 --- a/docs/pyShelf/html/index.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: Main Page - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - -
-
-
pyShelf Open Source Ebook Server Documentation
-
-
-
- - - - diff --git a/docs/pyShelf/html/jquery.js b/docs/pyShelf/html/jquery.js deleted file mode 100644 index 0e61ead..0000000 --- a/docs/pyShelf/html/jquery.js +++ /dev/null @@ -1,34 +0,0 @@ -/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 - * http://www.smartmenus.org/ - * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); diff --git a/docs/pyShelf/html/menudata.js b/docs/pyShelf/html/menudata.js deleted file mode 100644 index 8006205..0000000 --- a/docs/pyShelf/html/menudata.js +++ /dev/null @@ -1,66 +0,0 @@ -/* - @licstart The following is the entire license notice for the JavaScript code in this file. - - The MIT License (MIT) - - Copyright (C) 1997-2020 by Dimitri van Heesch - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software - and associated documentation files (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, publish, distribute, - sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - @licend The above is the entire license notice for the JavaScript code in this file -*/ -var menudata={children:[ -{text:"Main Page",url:"index.html"}, -{text:"Namespaces",url:"namespaces.html",children:[ -{text:"Namespace List",url:"namespaces.html"}, -{text:"Namespace Members",url:"namespacemembers.html",children:[ -{text:"All",url:"namespacemembers.html"}, -{text:"Functions",url:"namespacemembers_func.html"}]}]}, -{text:"Classes",url:"annotated.html",children:[ -{text:"Class List",url:"annotated.html"}, -{text:"Class Index",url:"classes.html"}, -{text:"Class Hierarchy",url:"hierarchy.html"}, -{text:"Class Members",url:"functions.html",children:[ -{text:"All",url:"functions.html",children:[ -{text:"_",url:"functions.html#index__5F"}, -{text:"b",url:"functions.html#index_b"}, -{text:"c",url:"functions.html#index_c"}, -{text:"e",url:"functions.html#index_e"}, -{text:"f",url:"functions.html#index_f"}, -{text:"g",url:"functions.html#index_g"}, -{text:"i",url:"functions.html#index_i"}, -{text:"m",url:"functions.html#index_m"}, -{text:"o",url:"functions.html#index_o"}, -{text:"p",url:"functions.html#index_p"}, -{text:"r",url:"functions.html#index_r"}, -{text:"s",url:"functions.html#index_s"}, -{text:"u",url:"functions.html#index_u"}]}, -{text:"Functions",url:"functions_func.html",children:[ -{text:"_",url:"functions_func.html#index__5F"}, -{text:"b",url:"functions_func.html#index_b"}, -{text:"c",url:"functions_func.html#index_c"}, -{text:"e",url:"functions_func.html#index_e"}, -{text:"f",url:"functions_func.html#index_f"}, -{text:"g",url:"functions_func.html#index_g"}, -{text:"i",url:"functions_func.html#index_i"}, -{text:"m",url:"functions_func.html#index_m"}, -{text:"o",url:"functions_func.html#index_o"}, -{text:"p",url:"functions_func.html#index_p"}, -{text:"r",url:"functions_func.html#index_r"}, -{text:"s",url:"functions_func.html#index_s"}, -{text:"u",url:"functions_func.html#index_u"}]}]}]}, -{text:"Files",url:"files.html",children:[ -{text:"File List",url:"files.html"}]}]} diff --git a/docs/pyShelf/html/namespacemembers.html b/docs/pyShelf/html/namespacemembers.html deleted file mode 100644 index 2c225d4..0000000 --- a/docs/pyShelf/html/namespacemembers.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: Namespace Members - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
-
Here is a list of all documented namespace members with links to the namespaces they belong to:
-
- - - - diff --git a/docs/pyShelf/html/namespacemembers_func.html b/docs/pyShelf/html/namespacemembers_func.html deleted file mode 100644 index 4bcfa7c..0000000 --- a/docs/pyShelf/html/namespacemembers_func.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: Namespace Members - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - - -
-
-
- - - - diff --git a/docs/pyShelf/html/namespaces.html b/docs/pyShelf/html/namespaces.html deleted file mode 100644 index 6ce007e..0000000 --- a/docs/pyShelf/html/namespaces.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - -pyShelf Open Source Ebook Server: Namespace List - - - - - - -
-
- - - - - - -
-
pyShelf Open Source Ebook Server 0.8.0 -
-
FOSS E-Book Server, https://pyshelf.com
-
-
- - - - -
-
-
Namespace List
-
-
-
Here is a list of all documented namespaces with brief descriptions:
-
[detail level 12]
- - - - - - -
 NDataHooks
 CBookInterface
 NFastAPIServer
 CFastAPIServer
 Nobjects
 CJSInterface
-
-
- - - - diff --git a/docs/pyShelf/html/nav_f.png b/docs/pyShelf/html/nav_f.png deleted file mode 100644 index 72a58a529ed3a9ed6aa0c51a79cf207e026deee2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U diff --git a/docs/pyShelf/html/nav_fd.png b/docs/pyShelf/html/nav_fd.png deleted file mode 100644 index 032fbdd4c54f54fa9a2e6423b94ef4b2ebdfaceb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQU#tajv*C{Z|C~*H7f|XvG1G8 zt7aS*L7xwMeS}!z6R#{C5tIw-s~AJ==F^i}x3XyJseHR@yF& zerFf(Zf;Dd{+(0lDIROL@Sj-Ju2JQ8&-n%4%q?>|^bShc&lR?}7HeMo@BDl5N(aHY Uj$gdr1MOz;boFyt=akR{0D!zeaR2}S diff --git a/docs/pyShelf/html/nav_g.png b/docs/pyShelf/html/nav_g.png deleted file mode 100644 index 2093a237a94f6c83e19ec6e5fd42f7ddabdafa81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL6W-eg#Jd_@e6*DPn)w;=|1H}Zvm9l6xXXB%>yL=NQU;mg M>FVdQ&MBb@0Bdt1Qvd(} diff --git a/docs/pyShelf/html/open.png b/docs/pyShelf/html/open.png deleted file mode 100644 index 30f75c7efe2dd0c9e956e35b69777a02751f048b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T diff --git a/docs/pyShelf/html/splitbard.png b/docs/pyShelf/html/splitbard.png deleted file mode 100644 index 8367416d757fd7b6dc4272b6432dc75a75abd068..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf@VhhFKy35^fiT zT~&lUj3=cDh^%3HDY9k5CEku}PHXNoNC(_$U3XPb&Q*ME25pT;2(*BOgAf<+R$lzakPG`kF31()Fx{L5Wrac|GQzjeE= zueY1`Ze{#x<8=S|`~MgGetGce)#vN&|J{Cd^tS%;tBYTo?+^d68<#n_Y_xx`J||4O V@QB{^CqU0Kc)I$ztaD0e0svEzbJzd? diff --git a/docs/pyShelf/html/sync_off.png b/docs/pyShelf/html/sync_off.png deleted file mode 100644 index 3b443fc62892114406e3d399421b2a881b897acc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* diff --git a/docs/pyShelf/html/sync_on.png b/docs/pyShelf/html/sync_on.png deleted file mode 100644 index e08320fb64e6fa33b573005ed6d8fe294e19db76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 diff --git a/docs/pyShelf/html/tab_a.png b/docs/pyShelf/html/tab_a.png deleted file mode 100644 index 3b725c41c5a527a3a3e40097077d0e206a681247..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 diff --git a/docs/pyShelf/html/tab_ad.png b/docs/pyShelf/html/tab_ad.png deleted file mode 100644 index e34850acfc24be58da6d2fd1ccc6b29cc84fe34d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QhuH;jv*C{Z|5d*H3V=pKi{In zd2jxLclDRPylmD}^l7{QOtL{vUjO{-WqItb5sQp2h-99b8^^Scr-=2mblCdZuUm?4 jzOJvgvt3{(cjKLW5(A@0qPS@<&}0TrS3j3^P6y&q2{!U5bk+Tso_B!YCpDh>v z{CM*1U8YvQRyBUHt^Ju0W_sq-?;9@_4equ-bavTs=gk796zopr0EBT&m;e9( diff --git a/docs/pyShelf/html/tab_s.png b/docs/pyShelf/html/tab_s.png deleted file mode 100644 index ab478c95b67371d700a20869f7de1ddd73522d50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QuUrLjv*C{Z|^p8HaRdjTwH7) zC?wLlL}}I{)n%R&r+1}IGmDnq;&J#%V6)9VsYhS`O^BVBQlxOUep0c$RENLq#g8A$ z)z7%K_bI&n@J+X_=x}fJoEKed-$<>=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ diff --git a/docs/pyShelf/html/tab_sd.png b/docs/pyShelf/html/tab_sd.png deleted file mode 100644 index 757a565ced4730f85c833fb2547d8e199ae68f19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qq7(&jv*C{Z|_!fH5o7*c=%9% zcILh!EA=pAQKdx-Cdiev=v{eg{8Ht<{e8_NAN~b=)%W>-WDCE0PyDHGemi$BoXwcK z{>e9^za6*c1ilttWw&V+U;WCPlV9{LdC~Ey%_H(qj`xgfES(4Yz5jSTZfCt`4E$0YRsR*S^mTCR^;V&sxC8{l_Cp7w8-YPgg&ebxsLQ00$vXK>z>% diff --git a/docs/pyShelf/man/man3/DataHooks.3 b/docs/pyShelf/man/man3/DataHooks.3 deleted file mode 100644 index 819ce33..0000000 --- a/docs/pyShelf/man/man3/DataHooks.3 +++ /dev/null @@ -1,27 +0,0 @@ -.TH "DataHooks" 3 "Sat Mar 18 2023" "Version 0.8.0" "pyShelf Open Source Ebook Server" \" -*- nroff -*- -.ad l -.nh -.SH NAME -DataHooks -.SH SYNOPSIS -.br -.PP -.SS "Classes" - -.in +1c -.ti -1c -.RI "class \fBBookInterface\fP" -.br -.in -1c -.SH "Detailed Description" -.PP - -.PP -.nf -pyShelf's frontend database hooks\&. -.fi -.PP - -.SH "Author" -.PP -Generated automatically by Doxygen for pyShelf Open Source Ebook Server from the source code\&. diff --git a/docs/pyShelf/man/man3/DataHooks_BookInterface.3 b/docs/pyShelf/man/man3/DataHooks_BookInterface.3 deleted file mode 100644 index 64dcd83..0000000 --- a/docs/pyShelf/man/man3/DataHooks_BookInterface.3 +++ /dev/null @@ -1,37 +0,0 @@ -.TH "DataHooks.BookInterface" 3 "Sat Mar 18 2023" "Version 0.8.0" "pyShelf Open Source Ebook Server" \" -*- nroff -*- -.ad l -.nh -.SH NAME -DataHooks.BookInterface -.SH SYNOPSIS -.br -.PP -.SS "Public Attributes" - -.in +1c -.ti -1c -.RI "\fBconfig\fP" -.br -.ti -1c -.RI "\fBdb\fP" -.br -.in -1c -.SH "Detailed Description" -.PP - -.PP -.nf -Access point for book database\&. -.fi -.PP - -.SH "Member Data Documentation" -.PP -.SS "DataHooks\&.BookInterface\&.config" - -.SS "DataHooks\&.BookInterface\&.db" - - -.SH "Author" -.PP -Generated automatically by Doxygen for pyShelf Open Source Ebook Server from the source code\&. diff --git a/docs/pyShelf/man/man3/FastAPIServer.3 b/docs/pyShelf/man/man3/FastAPIServer.3 deleted file mode 100644 index cc14024..0000000 --- a/docs/pyShelf/man/man3/FastAPIServer.3 +++ /dev/null @@ -1,149 +0,0 @@ -.TH "FastAPIServer" 3 "Sat Mar 18 2023" "Version 0.8.0" "pyShelf Open Source Ebook Server" \" -*- nroff -*- -.ad l -.nh -.SH NAME -FastAPIServer -.SH SYNOPSIS -.br -.PP -.SS "Classes" - -.in +1c -.ti -1c -.RI "class \fBFastAPIServer\fP" -.br -.in -1c -.SS "Functions" - -.in +1c -.ti -1c -.RI "str \fBbase64decode\fP (string)" -.br -.ti -1c -.RI "str \fBsummarize\fP (string)" -.br -.ti -1c -.RI "str \fBconvertDateTime\fP (datetime timestamp)" -.br -.ti -1c -.RI "dumps \fBbooks_tojson\fP (obj)" -.br -.ti -1c -.RI "dumps \fBbook_tojson\fP (book)" -.br -.ti -1c -.RI "dumps \fBcollections_tojson\fP (collection)" -.br -.in -1c -.SS "Variables" - -.in +1c -.ti -1c -.RI "FastAPI \fBapp\fP = FastAPI()" -.br -.ti -1c -.RI "Jinja2Templates \fBtemplates\fP = Jinja2Templates(directory='src/frontend/templates')" -.br -.ti -1c -.RI "list \fBorigins\fP" -.br -.ti -1c -.RI "\fBallow_origins\fP" -.br -.ti -1c -.RI "\fBallow_credentials\fP" -.br -.ti -1c -.RI "\fBallow_methods\fP" -.br -.ti -1c -.RI "\fBallow_headers\fP" -.br -.in -1c -.SH "Detailed Description" -.PP - -.PP -.nf -pyShelf's main frontend library\&. -.fi -.PP - -.SH "Function Documentation" -.PP -.SS " str FastAPIServer\&.base64decode ( string)" - -.PP -.nf -Decode a base64 string\&. -.fi -.PP - -.SS " dumps FastAPIServer\&.book_tojson ( book)" - -.PP -.nf -Convert a book object to a json\&. -.fi -.PP - -.SS " dumps FastAPIServer\&.books_tojson ( obj)" - -.PP -.nf -Convert an object to a dictionary\&. -.fi -.PP - -.SS " dumps FastAPIServer\&.collections_tojson ( collection)" - -.PP -.nf -Convert a collections object to json\&. -.fi -.PP - -.SS " str FastAPIServer\&.convertDateTime (datetime timestamp)" - -.PP -.nf -Convert a datetime object to a string\&. -.fi -.PP - -.SS " str FastAPIServer\&.summarize ( string)" - -.PP -.nf -Summarize a string\&. -.fi -.PP - -.SH "Variable Documentation" -.PP -.SS "FastAPIServer\&.allow_credentials" - -.SS "FastAPIServer\&.allow_headers" - -.SS "FastAPIServer\&.allow_methods" - -.SS "FastAPIServer\&.allow_origins" - -.SS "FastAPI FastAPIServer\&.app = FastAPI()" - -.SS "list FastAPIServer\&.origins" -\fBInitial value:\fP.PP -.nf -1 = [ -2 "http://localhost", -3 "http://localhost:8081", -4 "http://localhost:8080", -5 "*" -6 ] -.fi - -.SS "Jinja2Templates FastAPIServer\&.templates = Jinja2Templates(directory='src/frontend/templates')" - -.SH "Author" -.PP -Generated automatically by Doxygen for pyShelf Open Source Ebook Server from the source code\&. diff --git a/docs/pyShelf/man/man3/FastAPIServer_FastAPIServer.3 b/docs/pyShelf/man/man3/FastAPIServer_FastAPIServer.3 deleted file mode 100644 index 14035fa..0000000 --- a/docs/pyShelf/man/man3/FastAPIServer_FastAPIServer.3 +++ /dev/null @@ -1,114 +0,0 @@ -.TH "FastAPIServer.FastAPIServer" 3 "Sat Mar 18 2023" "Version 0.8.0" "pyShelf Open Source Ebook Server" \" -*- nroff -*- -.ad l -.nh -.SH NAME -FastAPIServer.FastAPIServer -.SH SYNOPSIS -.br -.PP -.SS "Public Member Functions" - -.in +1c -.ti -1c -.RI "def \fB__init__\fP (self, config)" -.br -.ti -1c -.RI "def \fBcompile_static_files\fP (self)" -.br -.ti -1c -.RI "None \fBuse_route_names_as_operation_ids\fP (self, FastAPI app)" -.br -.ti -1c -.RI "def \fBindex\fP (Request request, int skip=0, int limit=10)" -.br -.ti -1c -.RI "def \fBbooks\fP (Request request, int skip=0, int limit=10, collection=None)" -.br -.ti -1c -.RI "def \fBbook\fP (Request request, int book_id)" -.br -.ti -1c -.RI "def \fBcollections\fP (Request request)" -.br -.ti -1c -.RI "def \fBrun\fP (self)" -.br -.in -1c -.SS "Public Attributes" - -.in +1c -.ti -1c -.RI "\fBconfig\fP" -.br -.ti -1c -.RI "\fBfe_config\fP" -.br -.ti -1c -.RI "\fBfe_server\fP" -.br -.in -1c -.SH "Detailed Description" -.PP - -.PP -.nf -Entry point for FastAPI server\&. -.fi -.PP - -.SH "Constructor & Destructor Documentation" -.PP -.SS "def FastAPIServer\&.FastAPIServer\&.__init__ ( self, config)" - -.PP -.nf -Initialize FastAPIServer object parameters\&. -.fi -.PP - -.SH "Member Function Documentation" -.PP -.SS "def FastAPIServer\&.FastAPIServer\&.book (Request request, int book_id)" - -.SS "def FastAPIServer\&.FastAPIServer\&.books (Request request, int skip = \fC0\fP, int limit = \fC10\fP, collection = \fCNone\fP)" - -.SS "def FastAPIServer\&.FastAPIServer\&.collections (Request request)" - -.SS "def FastAPIServer\&.FastAPIServer\&.compile_static_files ( self)" - -.PP -.nf -Compile static files for web frontend\&. -.fi -.PP - -.SS "def FastAPIServer\&.FastAPIServer\&.index (Request request, int skip = \fC0\fP, int limit = \fC10\fP)" - -.SS "def FastAPIServer\&.FastAPIServer\&.run ( self)" - -.PP -.nf -Front end server entrypoint\&. -.fi -.PP - -.SS " None FastAPIServer\&.FastAPIServer\&.use_route_names_as_operation_ids ( self, FastAPI app)" - -.PP -.nf -Use route name as operation id\&. -.fi -.PP - -.SH "Member Data Documentation" -.PP -.SS "FastAPIServer\&.FastAPIServer\&.config" - -.SS "FastAPIServer\&.FastAPIServer\&.fe_config" - -.SS "FastAPIServer\&.FastAPIServer\&.fe_server" - - -.SH "Author" -.PP -Generated automatically by Doxygen for pyShelf Open Source Ebook Server from the source code\&. diff --git a/docs/pyShelf/man/man3/objects.3 b/docs/pyShelf/man/man3/objects.3 deleted file mode 100644 index 7282962..0000000 --- a/docs/pyShelf/man/man3/objects.3 +++ /dev/null @@ -1,27 +0,0 @@ -.TH "objects" 3 "Sat Mar 18 2023" "Version 0.8.0" "pyShelf Open Source Ebook Server" \" -*- nroff -*- -.ad l -.nh -.SH NAME -objects -.SH SYNOPSIS -.br -.PP -.SS "Classes" - -.in +1c -.ti -1c -.RI "class \fBJSInterface\fP" -.br -.in -1c -.SH "Detailed Description" -.PP - -.PP -.nf -pyShelf's Frontend Objects\&. -.fi -.PP - -.SH "Author" -.PP -Generated automatically by Doxygen for pyShelf Open Source Ebook Server from the source code\&. diff --git a/docs/pyShelf/man/man3/objects_JSInterface.3 b/docs/pyShelf/man/man3/objects_JSInterface.3 deleted file mode 100644 index 5cb1805..0000000 --- a/docs/pyShelf/man/man3/objects_JSInterface.3 +++ /dev/null @@ -1,51 +0,0 @@ -.TH "objects.JSInterface" 3 "Sat Mar 18 2023" "Version 0.8.0" "pyShelf Open Source Ebook Server" \" -*- nroff -*- -.ad l -.nh -.SH NAME -objects.JSInterface -.SH SYNOPSIS -.br -.PP -.SS "Public Member Functions" - -.in +1c -.ti -1c -.RI "def \fB__init__\fP (self, Config config)" -.br -.ti -1c -.RI "def \fBinstall\fP (self)" -.br -.in -1c -.SH "Detailed Description" -.PP - -.PP -.nf -A class to interface with the JavaScript side of pyShelf\&. -.fi -.PP - -.SH "Constructor & Destructor Documentation" -.PP -.SS "def objects\&.JSInterface\&.__init__ ( self, Config config)" - -.PP -.nf -Initialize the JSInterface object\&. -.fi -.PP - -.SH "Member Function Documentation" -.PP -.SS "def objects\&.JSInterface\&.install ( self)" - -.PP -.nf -Install the JavaScript dependencies\&. -.fi -.PP - - -.SH "Author" -.PP -Generated automatically by Doxygen for pyShelf Open Source Ebook Server from the source code\&. diff --git a/docs/pyShelf/man/man3/src_backend_lib_api_hooks_DuckDuckGo.3 b/docs/pyShelf/man/man3/src_backend_lib_api_hooks_DuckDuckGo.3 deleted file mode 100644 index 5b1ca50..0000000 --- a/docs/pyShelf/man/man3/src_backend_lib_api_hooks_DuckDuckGo.3 +++ /dev/null @@ -1,68 +0,0 @@ -.TH "src.backend.lib.api_hooks.DuckDuckGo" 3 "Sat Mar 18 2023" "Version 0.8.0" "pyShelf Open Source Ebook Server" \" -*- nroff -*- -.ad l -.nh -.SH NAME -src.backend.lib.api_hooks.DuckDuckGo -.SH SYNOPSIS -.br -.PP -.SS "Public Member Functions" - -.in +1c -.ti -1c -.RI "def \fB__init__\fP (self)" -.br -.ti -1c -.RI "def \fBimage_result\fP (self, query)" -.br -.ti -1c -.RI "def \fBdescription_result\fP (self, query)" -.br -.in -1c -.SS "Public Attributes" - -.in +1c -.ti -1c -.RI "\fBurl\fP" -.br -.ti -1c -.RI "\fBimageurl\fP" -.br -.in -1c -.SH "Detailed Description" -.PP - -.PP -.nf -duckduckgo related searching -.fi -.PP - -.SH "Constructor & Destructor Documentation" -.PP -.SS "def src\&.backend\&.lib\&.api_hooks\&.DuckDuckGo\&.__init__ ( self)" - -.SH "Member Function Documentation" -.PP -.SS "def src\&.backend\&.lib\&.api_hooks\&.DuckDuckGo\&.description_result ( self, query)" - -.SS "def src\&.backend\&.lib\&.api_hooks\&.DuckDuckGo\&.image_result ( self, query)" - -.PP -.nf -Returns json containing url to image -:param _key: &t=h_&iar=images&iax=images&ia=images&format=json&pretty=1 - -.fi -.PP - -.SH "Member Data Documentation" -.PP -.SS "src\&.backend\&.lib\&.api_hooks\&.DuckDuckGo\&.imageurl" - -.SS "src\&.backend\&.lib\&.api_hooks\&.DuckDuckGo\&.url" - - -.SH "Author" -.PP -Generated automatically by Doxygen for pyShelf Open Source Ebook Server from the source code\&. diff --git a/docs/pyShelf/man/man3/src_backend_lib_config.3 b/docs/pyShelf/man/man3/src_backend_lib_config.3 deleted file mode 100644 index 44a12a7..0000000 --- a/docs/pyShelf/man/man3/src_backend_lib_config.3 +++ /dev/null @@ -1,27 +0,0 @@ -.TH "src.backend.lib.config" 3 "Sat Mar 18 2023" "Version 0.8.0" "pyShelf Open Source Ebook Server" \" -*- nroff -*- -.ad l -.nh -.SH NAME -src.backend.lib.config -.SH SYNOPSIS -.br -.PP -.SS "Classes" - -.in +1c -.ti -1c -.RI "class \fBConfig\fP" -.br -.in -1c -.SH "Detailed Description" -.PP - -.PP -.nf -Pyshelf's Configuration Object\&. -.fi -.PP - -.SH "Author" -.PP -Generated automatically by Doxygen for pyShelf Open Source Ebook Server from the source code\&. diff --git a/docs/pyShelf/man/man3/src_backend_lib_config_Config.3 b/docs/pyShelf/man/man3/src_backend_lib_config_Config.3 deleted file mode 100644 index ed4be25..0000000 --- a/docs/pyShelf/man/man3/src_backend_lib_config_Config.3 +++ /dev/null @@ -1,231 +0,0 @@ -.TH "src.backend.lib.config.Config" 3 "Sat Mar 18 2023" "Version 0.8.0" "pyShelf Open Source Ebook Server" \" -*- nroff -*- -.ad l -.nh -.SH NAME -src.backend.lib.config.Config -.SH SYNOPSIS -.br -.PP -.PP -Inherited by \fBsrc\&.backend\&.tests\&.library_test\&.Test_Config\fP\&. -.SS "Public Member Functions" - -.in +1c -.ti -1c -.RI "def \fB__init__\fP (self, root)" -.br -.ti -1c -.RI "def \fBinit_config\fP (self)" -.br -.ti -1c -.RI "def \fBget_logger\fP (self)" -.br -.ti -1c -.RI "def \fBopen_file\fP (self)" -.br -.in -1c -.SS "Public Attributes" - -.in +1c -.ti -1c -.RI "\fBroot\fP" -.br -.ti -1c -.RI "\fBconfig_structure\fP" -.br -.ti -1c -.RI "\fBlogger\fP" -.br -.ti -1c -.RI "\fBbook_path\fP" -.br -.ti -1c -.RI "\fBTITLE\fP" -.br -.ti -1c -.RI "\fBVERSION\fP" -.br -.ti -1c -.RI "\fBbook_shelf\fP" -.br -.ti -1c -.RI "\fBcatalogue_db\fP" -.br -.ti -1c -.RI "\fBuser\fP" -.br -.ti -1c -.RI "\fBpassword\fP" -.br -.ti -1c -.RI "\fBdb_host\fP" -.br -.ti -1c -.RI "\fBdb_port\fP" -.br -.ti -1c -.RI "\fBfile_array\fP" -.br -.ti -1c -.RI "\fBauto_scan\fP" -.br -.ti -1c -.RI "\fBallowed_hosts\fP" -.br -.ti -1c -.RI "\fBdb_engine\fP" -.br -.ti -1c -.RI "\fBdb_user\fP" -.br -.ti -1c -.RI "\fBdb_pass\fP" -.br -.ti -1c -.RI "\fBbuild_mode\fP" -.br -.in -1c -.SS "Protected Attributes" - -.in +1c -.ti -1c -.RI "\fB_fp\fP" -.br -.ti -1c -.RI "\fB_cp\fP" -.br -.ti -1c -.RI "\fB_data\fP" -.br -.in -1c -.SH "Detailed Description" -.PP - -.PP -.nf -Main System Configuration\&. - ->>> config = Config(root) - -Parameters ----------- -root : File system root of program - -Attributes ----------- -root : str() stores root\&. -config_structure : dict() Default Configuration Structure\&. -_fp : str() file pointer to main configuration\&. -_cp : Path() object of configuration file\&. -_data : dict() parsed json of _fp\&. -logger : holds logging configuration from get_logger()\&. -book_path : directory pointer to main books folder\&. -TITLE : str() Program title\&. -VERSION : str() Program version\&. -TITLE : str() Combines TITLE & VERSION\&. -book_shelf : Deprecation TODO: Is this still in use? -catalogue_db : str() Database Name\&. -user : str() Database user name\&. -password : str() Database password\&. -db_host : str() Database host\&. -db_port : int() Database port\&. -file_array : list() copy of book_shelf TODO: See book_shelf -auto_scan: bool() Do we auto scan on launch? -allowed_hosts : list() Allowed host list\&. -db_engine : str() Desired database engine type\&. -db_user : str() Database user name\&. Duplication Warning\&. -db_pass : str() Database password\&. Duplication Warning\&. -build_mode : str() Production | Development mode\&. - -Methods -------- -get_logger : Setup loguru\&. -open_file : Parse configuration file\&. - -.fi -.PP - -.SH "Constructor & Destructor Documentation" -.PP -.SS "def src\&.backend\&.lib\&.config\&.Config\&.__init__ ( self, root)" - -.PP -.nf -Initialize main configuration options\&. -.fi -.PP - -.PP -Reimplemented in \fBsrc\&.backend\&.tests\&.library_test\&.Test_Config\fP\&. -.SH "Member Function Documentation" -.PP -.SS "def src\&.backend\&.lib\&.config\&.Config\&.get_logger ( self)" - -.PP -.nf -Instantiate logging system\&. -.fi -.PP - -.SS "def src\&.backend\&.lib\&.config\&.Config\&.init_config ( self)" - -.SS "def src\&.backend\&.lib\&.config\&.Config\&.open_file ( self)" - -.PP -.nf -Open config\&.json and reads in configuration options\&. -.fi -.PP - -.PP -Reimplemented in \fBsrc\&.backend\&.tests\&.library_test\&.Test_Config\fP\&. -.SH "Member Data Documentation" -.PP -.SS "src\&.backend\&.lib\&.config\&.Config\&._cp\fC [protected]\fP" - -.SS "src\&.backend\&.lib\&.config\&.Config\&._data\fC [protected]\fP" - -.SS "src\&.backend\&.lib\&.config\&.Config\&._fp\fC [protected]\fP" - -.SS "src\&.backend\&.lib\&.config\&.Config\&.allowed_hosts" - -.SS "src\&.backend\&.lib\&.config\&.Config\&.auto_scan" - -.SS "src\&.backend\&.lib\&.config\&.Config\&.book_path" - -.SS "src\&.backend\&.lib\&.config\&.Config\&.book_shelf" - -.SS "src\&.backend\&.lib\&.config\&.Config\&.build_mode" - -.SS "src\&.backend\&.lib\&.config\&.Config\&.catalogue_db" - -.SS "src\&.backend\&.lib\&.config\&.Config\&.config_structure" - -.SS "src\&.backend\&.lib\&.config\&.Config\&.db_engine" - -.SS "src\&.backend\&.lib\&.config\&.Config\&.db_host" - -.SS "src\&.backend\&.lib\&.config\&.Config\&.db_pass" - -.SS "src\&.backend\&.lib\&.config\&.Config\&.db_port" - -.SS "src\&.backend\&.lib\&.config\&.Config\&.db_user" - -.SS "src\&.backend\&.lib\&.config\&.Config\&.file_array" - -.SS "src\&.backend\&.lib\&.config\&.Config\&.logger" - -.SS "src\&.backend\&.lib\&.config\&.Config\&.password" - -.SS "src\&.backend\&.lib\&.config\&.Config\&.root" - -.SS "src\&.backend\&.lib\&.config\&.Config\&.TITLE" - -.SS "src\&.backend\&.lib\&.config\&.Config\&.user" - -.SS "src\&.backend\&.lib\&.config\&.Config\&.VERSION" - - -.SH "Author" -.PP -Generated automatically by Doxygen for pyShelf Open Source Ebook Server from the source code\&. diff --git a/docs/pyShelf/man/man3/src_backend_lib_library_Catalogue.3 b/docs/pyShelf/man/man3/src_backend_lib_library_Catalogue.3 deleted file mode 100644 index 044a637..0000000 --- a/docs/pyShelf/man/man3/src_backend_lib_library_Catalogue.3 +++ /dev/null @@ -1,263 +0,0 @@ -.TH "src.backend.lib.library.Catalogue" 3 "Sat Mar 18 2023" "Version 0.8.0" "pyShelf Open Source Ebook Server" \" -*- nroff -*- -.ad l -.nh -.SH NAME -src.backend.lib.library.Catalogue -.SH SYNOPSIS -.br -.PP -.PP -Inherited by \fBsrc\&.backend\&.lib\&.overide\&.ACatalogue\fP, and \fBsrc\&.backend\&.tests\&.library_test\&.Test_Catalogue\fP\&. -.SS "Public Member Functions" - -.in +1c -.ti -1c -.RI "def \fB__init__\fP (self, config)" -.br -.ti -1c -.RI "def \fBscan_folder\fP (self, _path=None)" -.br -.ti -1c -.RI "def \fBfilter_books\fP (self)" -.br -.ti -1c -.RI "def \fBprocess_by_filetype\fP (self, book)" -.br -.ti -1c -.RI "def \fBextract_metadata_epub\fP (self, book)" -.br -.ti -1c -.RI "def \fBextract_metadata_pdf\fP (self, book)" -.br -.ti -1c -.RI "def \fBextract_metadata_mobi\fP (self, book)" -.br -.ti -1c -.RI "def \fBextract_content\fP (self, book_zip, book)" -.br -.ti -1c -.RI "def \fBextract_cover_html\fP (self, book_zip, book)" -.br -.ti -1c -.RI "def \fBextract_cover_image\fP (self, book_zip, book)" -.br -.ti -1c -.RI "def \fBcompare_shelf_current\fP (self)" -.br -.ti -1c -.RI "def \fBimport_books\fP (self, list=None, **kwargs)" -.br -.in -1c -.SS "Static Public Member Functions" - -.in +1c -.ti -1c -.RI "def \fBprocess_epub\fP (book)" -.br -.ti -1c -.RI "def \fBstripTags\fP (source)" -.br -.in -1c -.SS "Public Attributes" - -.in +1c -.ti -1c -.RI "\fBfile_list\fP" -.br -.ti -1c -.RI "\fBopf_regx\fP" -.br -.ti -1c -.RI "\fBcover_regx\fP" -.br -.ti -1c -.RI "\fBhtml_regx\fP" -.br -.ti -1c -.RI "\fBtitle_sanitization_regx\fP" -.br -.ti -1c -.RI "\fBtitle_sanitization_lvl2_regx\fP" -.br -.ti -1c -.RI "\fBtitle_sanitization_dirs_regx\fP" -.br -.ti -1c -.RI "\fBroot_dir\fP" -.br -.ti -1c -.RI "\fBbook_folder\fP" -.br -.ti -1c -.RI "\fBbooks\fP" -.br -.ti -1c -.RI "\fBdb_pointer\fP" -.br -.ti -1c -.RI "\fBconfig\fP" -.br -.in -1c -.SH "Detailed Description" -.PP - -.PP -.nf -Decodes book metadata for storage - -.fi -.PP - -.SH "Constructor & Destructor Documentation" -.PP -.SS "def src\&.backend\&.lib\&.library\&.Catalogue\&.__init__ ( self, config)" - -.SH "Member Function Documentation" -.PP -.SS "def src\&.backend\&.lib\&.library\&.Catalogue\&.compare_shelf_current ( self)" - -.PP -.nf -Calls storage system, gets list of books stored and compares against files on disk - -.fi -.PP - -.SS "def src\&.backend\&.lib\&.library\&.Catalogue\&.extract_content ( self, book_zip, book)" - -.PP -.nf -Opens epub as zip file filters then stores as list any files matching opf_regx - -.fi -.PP - -.SS "def src\&.backend\&.lib\&.library\&.Catalogue\&.extract_cover_html ( self, book_zip, book)" - -.PP -.nf -Opens epub as zip file filters then stores as list any files matching html_regx - -.fi -.PP - -.SS "def src\&.backend\&.lib\&.library\&.Catalogue\&.extract_cover_image ( self, book_zip, book)" - -.PP -.nf -Opens epub as zip file filters then stores as list any files matching cover_regx - -.fi -.PP - -.SS "def src\&.backend\&.lib\&.library\&.Catalogue\&.extract_metadata_epub ( self, book)" - -.PP -.nf -Return extracted metadata and cover picture -book['path'] == Full path to ebook file -book['files'] == list of files from self\&.process_book(book) - -.fi -.PP - -.SS "def src\&.backend\&.lib\&.library\&.Catalogue\&.extract_metadata_mobi ( self, book)" - -.SS "def src\&.backend\&.lib\&.library\&.Catalogue\&.extract_metadata_pdf ( self, book)" - -.PP -.nf -Return extracted metadata -:NOTES: Retrieval of data has been problematic, some pdf's providing -reliable titles that corespond with the actual, and others being -nonsense\&. - -.fi -.PP - -.SS "def src\&.backend\&.lib\&.library\&.Catalogue\&.filter_books ( self)" - -.PP -.nf -Calls scan_folder and filters out book files\&. - -:returns self\&._book_list_expanded: json string containing -all book metadata - -.fi -.PP - -.PP -Reimplemented in \fBsrc\&.backend\&.tests\&.library_test\&.Test_Catalogue\fP\&. -.SS "def src\&.backend\&.lib\&.library\&.Catalogue\&.import_books ( self, list = \fCNone\fP, ** kwargs)" - -.PP -.nf -Main entry point for import operations\&. -Gets a list of new files via compare_shelf_current\&. -Iterates over list and inserts new books into database\&. - -.fi -.PP - -.PP -Reimplemented in \fBsrc\&.backend\&.lib\&.overide\&.ACatalogue\fP\&. -.SS "def src\&.backend\&.lib\&.library\&.Catalogue\&.process_by_filetype ( self, book)" - -.PP -.nf -Determine books filetype and process\&. -.fi -.PP - -.SS "def src\&.backend\&.lib\&.library\&.Catalogue\&.process_epub ( book)\fC [static]\fP" - -.PP -.nf -Return dictionary of epub file contents -.fi -.PP - -.SS "def src\&.backend\&.lib\&.library\&.Catalogue\&.scan_folder ( self, _path = \fCNone\fP)" - -.PP -.nf -Scan folder by _path, allows recurisive scanning - -.fi -.PP - -.PP -Reimplemented in \fBsrc\&.backend\&.lib\&.overide\&.ACatalogue\fP\&. -.SS "def src\&.backend\&.lib\&.library\&.Catalogue\&.stripTags ( source)\fC [static]\fP" - -.SH "Member Data Documentation" -.PP -.SS "src\&.backend\&.lib\&.library\&.Catalogue\&.book_folder" - -.SS "src\&.backend\&.lib\&.library\&.Catalogue\&.books" - -.SS "src\&.backend\&.lib\&.library\&.Catalogue\&.config" - -.SS "src\&.backend\&.lib\&.library\&.Catalogue\&.cover_regx" - -.SS "src\&.backend\&.lib\&.library\&.Catalogue\&.db_pointer" - -.SS "src\&.backend\&.lib\&.library\&.Catalogue\&.file_list" - -.SS "src\&.backend\&.lib\&.library\&.Catalogue\&.html_regx" - -.SS "src\&.backend\&.lib\&.library\&.Catalogue\&.opf_regx" - -.SS "src\&.backend\&.lib\&.library\&.Catalogue\&.root_dir" - -.SS "src\&.backend\&.lib\&.library\&.Catalogue\&.title_sanitization_dirs_regx" - -.SS "src\&.backend\&.lib\&.library\&.Catalogue\&.title_sanitization_lvl2_regx" - -.SS "src\&.backend\&.lib\&.library\&.Catalogue\&.title_sanitization_regx" - - -.SH "Author" -.PP -Generated automatically by Doxygen for pyShelf Open Source Ebook Server from the source code\&. diff --git a/docs/pyShelf/man/man3/src_backend_lib_models_Base.3 b/docs/pyShelf/man/man3/src_backend_lib_models_Base.3 deleted file mode 100644 index 2fd17d4..0000000 --- a/docs/pyShelf/man/man3/src_backend_lib_models_Base.3 +++ /dev/null @@ -1,25 +0,0 @@ -.TH "src.backend.lib.models.Base" 3 "Sat Mar 18 2023" "Version 0.8.0" "pyShelf Open Source Ebook Server" \" -*- nroff -*- -.ad l -.nh -.SH NAME -src.backend.lib.models.Base -.SH SYNOPSIS -.br -.PP -.PP -Inherits DeclarativeBase\&. -.PP -Inherited by \fBsrc\&.backend\&.lib\&.models\&.Book\fP, and \fBsrc\&.backend\&.lib\&.models\&.Collection\fP\&. -.SH "Detailed Description" -.PP - -.PP -.nf -Base class for all models\&. -.fi -.PP - - -.SH "Author" -.PP -Generated automatically by Doxygen for pyShelf Open Source Ebook Server from the source code\&. diff --git a/docs/pyShelf/man/man3/src_backend_lib_models_Book.3 b/docs/pyShelf/man/man3/src_backend_lib_models_Book.3 deleted file mode 100644 index 4c473fd..0000000 --- a/docs/pyShelf/man/man3/src_backend_lib_models_Book.3 +++ /dev/null @@ -1,99 +0,0 @@ -.TH "src.backend.lib.models.Book" 3 "Sat Mar 18 2023" "Version 0.8.0" "pyShelf Open Source Ebook Server" \" -*- nroff -*- -.ad l -.nh -.SH NAME -src.backend.lib.models.Book -.SH SYNOPSIS -.br -.PP -.PP -Inherits \fBsrc\&.backend\&.lib\&.models\&.Base\fP\&. -.SS "Static Public Attributes" - -.in +1c -.ti -1c -.RI "Mapped \fBbook_id\fP = mapped_column(primary_key=True, nullable=False)" -.br -.ti -1c -.RI "Mapped \fBtitle\fP [str]" -.br -.ti -1c -.RI "Mapped \fBauthor\fP [Optional[str]]" -.br -.ti -1c -.RI "Mapped \fBcategories\fP [Optional[str]]" -.br -.ti -1c -.RI "Mapped \fBcover\fP [Optional[bytes]]" -.br -.ti -1c -.RI "Mapped \fBpages\fP [Optional[int]]" -.br -.ti -1c -.RI "Mapped \fBprogress\fP [Optional[float]]" -.br -.ti -1c -.RI "Mapped \fBfile_name\fP [str]" -.br -.ti -1c -.RI "Mapped \fBdescription\fP [Optional[str]]" -.br -.ti -1c -.RI "Mapped \fBdate\fP [timestamp]" -.br -.ti -1c -.RI "Mapped \fBrights\fP [Optional[str]]" -.br -.ti -1c -.RI "Mapped \fBtags\fP [Optional[str]]" -.br -.ti -1c -.RI "Mapped \fBidentifier\fP [Optional[str]]" -.br -.ti -1c -.RI "Mapped \fBpublisher\fP [Optional[str]]" -.br -.in -1c -.SH "Detailed Description" -.PP - -.PP -.nf -Book model\&. -.fi -.PP - -.SH "Member Data Documentation" -.PP -.SS "Mapped src\&.backend\&.lib\&.models\&.Book\&.author [Optional[str]]\fC [static]\fP" - -.SS "Mapped src\&.backend\&.lib\&.models\&.Book\&.book_id = mapped_column(primary_key=True, nullable=False)\fC [static]\fP" - -.SS "Mapped src\&.backend\&.lib\&.models\&.Book\&.categories [Optional[str]]\fC [static]\fP" - -.SS "Mapped src\&.backend\&.lib\&.models\&.Book\&.cover [Optional[bytes]]\fC [static]\fP" - -.SS "Mapped src\&.backend\&.lib\&.models\&.Book\&.date [timestamp]\fC [static]\fP" - -.SS "Mapped src\&.backend\&.lib\&.models\&.Book\&.description [Optional[str]]\fC [static]\fP" - -.SS "Mapped src\&.backend\&.lib\&.models\&.Book\&.file_name [str]\fC [static]\fP" - -.SS "Mapped src\&.backend\&.lib\&.models\&.Book\&.identifier [Optional[str]]\fC [static]\fP" - -.SS "Mapped src\&.backend\&.lib\&.models\&.Book\&.pages [Optional[int]]\fC [static]\fP" - -.SS "Mapped src\&.backend\&.lib\&.models\&.Book\&.progress [Optional[float]]\fC [static]\fP" - -.SS "Mapped src\&.backend\&.lib\&.models\&.Book\&.publisher [Optional[str]]\fC [static]\fP" - -.SS "Mapped src\&.backend\&.lib\&.models\&.Book\&.rights [Optional[str]]\fC [static]\fP" - -.SS "Mapped src\&.backend\&.lib\&.models\&.Book\&.tags [Optional[str]]\fC [static]\fP" - -.SS "Mapped src\&.backend\&.lib\&.models\&.Book\&.title [str]\fC [static]\fP" - - -.SH "Author" -.PP -Generated automatically by Doxygen for pyShelf Open Source Ebook Server from the source code\&. diff --git a/docs/pyShelf/man/man3/src_backend_lib_models_Collection.3 b/docs/pyShelf/man/man3/src_backend_lib_models_Collection.3 deleted file mode 100644 index 57bd0ea..0000000 --- a/docs/pyShelf/man/man3/src_backend_lib_models_Collection.3 +++ /dev/null @@ -1,44 +0,0 @@ -.TH "src.backend.lib.models.Collection" 3 "Sat Mar 18 2023" "Version 0.8.0" "pyShelf Open Source Ebook Server" \" -*- nroff -*- -.ad l -.nh -.SH NAME -src.backend.lib.models.Collection -.SH SYNOPSIS -.br -.PP -.PP -Inherits \fBsrc\&.backend\&.lib\&.models\&.Base\fP\&. -.SS "Static Public Attributes" - -.in +1c -.ti -1c -.RI "Mapped \fBcollection\fP [str]" -.br -.ti -1c -.RI "Mapped \fBbook_id\fP = mapped_column(ForeignKey(Book\&.book_id))" -.br -.ti -1c -.RI "Mapped \fBcollection_id\fP = mapped_column(primary_key=True)" -.br -.in -1c -.SH "Detailed Description" -.PP - -.PP -.nf -Collection model\&. -.fi -.PP - -.SH "Member Data Documentation" -.PP -.SS "Mapped src\&.backend\&.lib\&.models\&.Collection\&.book_id = mapped_column(ForeignKey(Book\&.book_id))\fC [static]\fP" - -.SS "Mapped src\&.backend\&.lib\&.models\&.Collection\&.collection [str]\fC [static]\fP" - -.SS "Mapped src\&.backend\&.lib\&.models\&.Collection\&.collection_id = mapped_column(primary_key=True)\fC [static]\fP" - - -.SH "Author" -.PP -Generated automatically by Doxygen for pyShelf Open Source Ebook Server from the source code\&. diff --git a/docs/pyShelf/man/man3/src_backend_lib_overide_ACatalogue.3 b/docs/pyShelf/man/man3/src_backend_lib_overide_ACatalogue.3 deleted file mode 100644 index 013ce15..0000000 --- a/docs/pyShelf/man/man3/src_backend_lib_overide_ACatalogue.3 +++ /dev/null @@ -1,68 +0,0 @@ -.TH "src.backend.lib.overide.ACatalogue" 3 "Sat Mar 18 2023" "Version 0.8.0" "pyShelf Open Source Ebook Server" \" -*- nroff -*- -.ad l -.nh -.SH NAME -src.backend.lib.overide.ACatalogue -.SH SYNOPSIS -.br -.PP -.PP -Inherits \fBsrc\&.backend\&.lib\&.library\&.Catalogue\fP\&. -.SS "Public Member Functions" - -.in +1c -.ti -1c -.RI "def \fB__init__\fP (self)" -.br -.ti -1c -.RI "def \fBscan_folder\fP (self, _path=None)" -.br -.ti -1c -.RI "def \fBimport_books\fP (self, **kwargs)" -.br -.in -1c -.SH "Detailed Description" -.PP - -.PP -.nf -Aynchronous overide of library\&.Catalogue, -: TODO : Complete or discard this overide - -.fi -.PP - -.SH "Constructor & Destructor Documentation" -.PP -.SS "def src\&.backend\&.lib\&.overide\&.ACatalogue\&.__init__ ( self)" - -.PP -Reimplemented from \fBsrc\&.backend\&.lib\&.library\&.Catalogue\fP\&. -.SH "Member Function Documentation" -.PP -.SS "def src\&.backend\&.lib\&.overide\&.ACatalogue\&.import_books ( self, ** kwargs)" - -.PP -.nf -Async overide of import_books - -.fi -.PP - -.PP -Reimplemented from \fBsrc\&.backend\&.lib\&.library\&.Catalogue\fP\&. -.SS "def src\&.backend\&.lib\&.overide\&.ACatalogue\&.scan_folder ( self, _path = \fCNone\fP)" - -.PP -.nf -Scan folder by _path, allows recurisive scanning - -.fi -.PP - -.PP -Reimplemented from \fBsrc\&.backend\&.lib\&.library\&.Catalogue\fP\&. - -.SH "Author" -.PP -Generated automatically by Doxygen for pyShelf Open Source Ebook Server from the source code\&. diff --git a/docs/pyShelf/man/man3/src_backend_lib_pyShelf_Admin.3 b/docs/pyShelf/man/man3/src_backend_lib_pyShelf_Admin.3 deleted file mode 100644 index b0228ea..0000000 --- a/docs/pyShelf/man/man3/src_backend_lib_pyShelf_Admin.3 +++ /dev/null @@ -1,48 +0,0 @@ -.TH "src.backend.lib.pyShelf.Admin" 3 "Sat Mar 18 2023" "Version 0.8.0" "pyShelf Open Source Ebook Server" \" -*- nroff -*- -.ad l -.nh -.SH NAME -src.backend.lib.pyShelf.Admin -.SH SYNOPSIS -.br -.PP -.SS "Public Member Functions" - -.in +1c -.ti -1c -.RI "def \fB__init__\fP (self, root)" -.br -.ti -1c -.RI "def \fBcreatesuperuser\fP (self)" -.br -.in -1c -.SS "Public Attributes" - -.in +1c -.ti -1c -.RI "\fBconfig\fP" -.br -.ti -1c -.RI "\fBdb\fP" -.br -.in -1c -.SH "Detailed Description" -.PP -.SH "Constructor & Destructor Documentation" -.PP -.SS "def src\&.backend\&.lib\&.pyShelf\&.Admin\&.__init__ ( self, root)" - -.SH "Member Function Documentation" -.PP -.SS "def src\&.backend\&.lib\&.pyShelf\&.Admin\&.createsuperuser ( self)" - -.SH "Member Data Documentation" -.PP -.SS "src\&.backend\&.lib\&.pyShelf\&.Admin\&.config" - -.SS "src\&.backend\&.lib\&.pyShelf\&.Admin\&.db" - - -.SH "Author" -.PP -Generated automatically by Doxygen for pyShelf Open Source Ebook Server from the source code\&. diff --git a/docs/pyShelf/man/man3/src_backend_lib_pyShelf_InitFiles.3 b/docs/pyShelf/man/man3/src_backend_lib_pyShelf_InitFiles.3 deleted file mode 100644 index a129f8f..0000000 --- a/docs/pyShelf/man/man3/src_backend_lib_pyShelf_InitFiles.3 +++ /dev/null @@ -1,46 +0,0 @@ -.TH "src.backend.lib.pyShelf.InitFiles" 3 "Sat Mar 18 2023" "Version 0.8.0" "pyShelf Open Source Ebook Server" \" -*- nroff -*- -.ad l -.nh -.SH NAME -src.backend.lib.pyShelf.InitFiles -.SH SYNOPSIS -.br -.PP -.SS "Public Member Functions" - -.in +1c -.ti -1c -.RI "def \fB__init__\fP (self, file_array)" -.br -.ti -1c -.RI "def \fBCreateFile\fP (self, _pointer)" -.br -.in -1c -.SH "Detailed Description" -.PP - -.PP -.nf -First run file creation operations -.fi -.PP - -.SH "Constructor & Destructor Documentation" -.PP -.SS "def src\&.backend\&.lib\&.pyShelf\&.InitFiles\&.__init__ ( self, file_array)" - -.SH "Member Function Documentation" -.PP -.SS "def src\&.backend\&.lib\&.pyShelf\&.InitFiles\&.CreateFile ( self, _pointer)" - -.PP -.nf -Checks if file exists and creates it if not - -.fi -.PP - - -.SH "Author" -.PP -Generated automatically by Doxygen for pyShelf Open Source Ebook Server from the source code\&. diff --git a/docs/pyShelf/man/man3/src_backend_lib_pyShelf_Server.3 b/docs/pyShelf/man/man3/src_backend_lib_pyShelf_Server.3 deleted file mode 100644 index e583892..0000000 --- a/docs/pyShelf/man/man3/src_backend_lib_pyShelf_Server.3 +++ /dev/null @@ -1,97 +0,0 @@ -.TH "src.backend.lib.pyShelf.Server" 3 "Sat Mar 18 2023" "Version 0.8.0" "pyShelf Open Source Ebook Server" \" -*- nroff -*- -.ad l -.nh -.SH NAME -src.backend.lib.pyShelf.Server -.SH SYNOPSIS -.br -.PP -.SS "Public Member Functions" - -.in +1c -.ti -1c -.RI "def \fB__init__\fP (self, root)" -.br -.ti -1c -.RI "def \fB__aexit__\fP (self, *args, **kwargs)" -.br -.ti -1c -.RI "def \fBinitialize_server\fP (self)" -.br -.ti -1c -.RI "def \fBrunImport\fP (self)" -.br -.ti -1c -.RI "def \fBsocketio\fP (self, websocket, path)" -.br -.ti -1c -.RI "def \fBpong\fP (self)" -.br -.ti -1c -.RI "def \fBstart\fP (self)" -.br -.in -1c -.SS "Public Attributes" - -.in +1c -.ti -1c -.RI "\fBroot\fP" -.br -.ti -1c -.RI "\fBhost\fP" -.br -.ti -1c -.RI "\fBconfig\fP" -.br -.ti -1c -.RI "\fBloop\fP" -.br -.ti -1c -.RI "\fBserve\fP" -.br -.in -1c -.SH "Detailed Description" -.PP - -.PP -.nf -Main Server Container -:TODO: Document this - -.fi -.PP - -.SH "Constructor & Destructor Documentation" -.PP -.SS "def src\&.backend\&.lib\&.pyShelf\&.Server\&.__init__ ( self, root)" - -.SH "Member Function Documentation" -.PP -.SS "def src\&.backend\&.lib\&.pyShelf\&.Server\&.__aexit__ ( self, * args, ** kwargs)" - -.SS "def src\&.backend\&.lib\&.pyShelf\&.Server\&.initialize_server ( self)" - -.SS "def src\&.backend\&.lib\&.pyShelf\&.Server\&.pong ( self)" - -.SS "def src\&.backend\&.lib\&.pyShelf\&.Server\&.runImport ( self)" - -.SS "def src\&.backend\&.lib\&.pyShelf\&.Server\&.socketio ( self, websocket, path)" - -.SS "def src\&.backend\&.lib\&.pyShelf\&.Server\&.start ( self)" - -.SH "Member Data Documentation" -.PP -.SS "src\&.backend\&.lib\&.pyShelf\&.Server\&.config" - -.SS "src\&.backend\&.lib\&.pyShelf\&.Server\&.host" - -.SS "src\&.backend\&.lib\&.pyShelf\&.Server\&.loop" - -.SS "src\&.backend\&.lib\&.pyShelf\&.Server\&.root" - -.SS "src\&.backend\&.lib\&.pyShelf\&.Server\&.serve" - - -.SH "Author" -.PP -Generated automatically by Doxygen for pyShelf Open Source Ebook Server from the source code\&. diff --git a/docs/pyShelf/man/man3/src_backend_lib_storage.3 b/docs/pyShelf/man/man3/src_backend_lib_storage.3 deleted file mode 100644 index 32a7410..0000000 --- a/docs/pyShelf/man/man3/src_backend_lib_storage.3 +++ /dev/null @@ -1,27 +0,0 @@ -.TH "src.backend.lib.storage" 3 "Sat Mar 18 2023" "Version 0.8.0" "pyShelf Open Source Ebook Server" \" -*- nroff -*- -.ad l -.nh -.SH NAME -src.backend.lib.storage -.SH SYNOPSIS -.br -.PP -.SS "Classes" - -.in +1c -.ti -1c -.RI "class \fBStorage\fP" -.br -.in -1c -.SH "Detailed Description" -.PP - -.PP -.nf -Pyshelf's Main Storage Class\&. -.fi -.PP - -.SH "Author" -.PP -Generated automatically by Doxygen for pyShelf Open Source Ebook Server from the source code\&. diff --git a/docs/pyShelf/man/man3/src_backend_lib_storage_Storage.3 b/docs/pyShelf/man/man3/src_backend_lib_storage_Storage.3 deleted file mode 100644 index fa439a6..0000000 --- a/docs/pyShelf/man/man3/src_backend_lib_storage_Storage.3 +++ /dev/null @@ -1,238 +0,0 @@ -.TH "src.backend.lib.storage.Storage" 3 "Sat Mar 18 2023" "Version 0.8.0" "pyShelf Open Source Ebook Server" \" -*- nroff -*- -.ad l -.nh -.SH NAME -src.backend.lib.storage.Storage -.SH SYNOPSIS -.br -.PP -.SS "Public Member Functions" - -.in +1c -.ti -1c -.RI "def \fB__init__\fP (self, config)" -.br -.ti -1c -.RI "def \fBget_connection_string\fP (self)" -.br -.ti -1c -.RI "def \fBcreate_tables\fP (self)" -.br -.ti -1c -.RI "def \fBinsert_book\fP (self, book)" -.br -.ti -1c -.RI "def \fBbook_paths_list\fP (self)" -.br -.ti -1c -.RI "def \fBmake_collections\fP (self)" -.br -.ti -1c -.RI "def \fBget_books\fP (self, collection=None, skip=None, limit=None)" -.br -.ti -1c -.RI "def \fBget_book\fP (self, book_id)" -.br -.ti -1c -.RI "def \fBget_collections\fP (self)" -.br -.in -1c -.SS "Public Attributes" - -.in +1c -.ti -1c -.RI "\fBconfig\fP" -.br -.ti -1c -.RI "\fBsql\fP" -.br -.ti -1c -.RI "\fBuser\fP" -.br -.ti -1c -.RI "\fBpassword\fP" -.br -.ti -1c -.RI "\fBdb_host\fP" -.br -.ti -1c -.RI "\fBdb_port\fP" -.br -.ti -1c -.RI "\fBengine\fP" -.br -.in -1c -.SH "Detailed Description" -.PP - -.PP -.nf -Create a new Storage object\&. - ->>> db = Storage(config) - -Parameters ----------- -config : Config() - Main program configuration\&. - -Attributes ----------- -config : Stores configuration -sql : Database Name -user : Database User Name -password : Database Password -db_host : Database Host -db_port : Database Port -engine : sqlalchemy\&.create_engine(url, executor, kw) - -.fi -.PP - -.SH "Constructor & Destructor Documentation" -.PP -.SS "def src\&.backend\&.lib\&.storage\&.Storage\&.__init__ ( self, config)" - -.PP -.nf -Initialize storage object\&. -.fi -.PP - -.SH "Member Function Documentation" -.PP -.SS "def src\&.backend\&.lib\&.storage\&.Storage\&.book_paths_list ( self)" - -.PP -.nf -Get file paths from database for comparison to system files\&. - -Returns -------- -_result : ScalarResult Object - -.fi -.PP - -.SS "def src\&.backend\&.lib\&.storage\&.Storage\&.create_tables ( self)" - -.PP -.nf -Create table structure\&. -.fi -.PP - -.SS "def src\&.backend\&.lib\&.storage\&.Storage\&.get_book ( self, book_id)" - -.PP -.nf -Get book from database\&. - -Parameters ----------- -book_id : int - Book ID to filter by\&. - -Returns -------- -_result : ScalarResult Object - -.fi -.PP - -.SS "def src\&.backend\&.lib\&.storage\&.Storage\&.get_books ( self, collection = \fCNone\fP, skip = \fCNone\fP, limit = \fCNone\fP)" - -.PP -.nf -Get books from database\&. - -Parameters ----------- -collection : str - Collection to filter by\&. - -Returns -------- -_result : ScalarResult Object - -.fi -.PP - -.SS "def src\&.backend\&.lib\&.storage\&.Storage\&.get_collections ( self)" - -.PP -.nf -Get collections from database\&. - -Returns -------- -_result : ScalarResult Object - -.fi -.PP - -.SS "def src\&.backend\&.lib\&.storage\&.Storage\&.get_connection_string ( self)" - -.PP -.nf -Get connection string\&. - -Engine type references config\&.json:DB_ENGINE\&. - -Returns -------- -str : sqlalchemy Connection String - -.fi -.PP - -.SS "def src\&.backend\&.lib\&.storage\&.Storage\&.insert_book ( self, book)" - -.PP -.nf -Insert a new book into the database\&. - -Parameters ----------- -book: dict() - Book object to insert\&. - -Returns -------- -bool - True on success False on failure - -.fi -.PP - -.SS "def src\&.backend\&.lib\&.storage\&.Storage\&.make_collections ( self)" - -.PP -.nf -Parse book path's to determine common folder structure\&. - -Stores collections based on shared paths\&. - -.fi -.PP - -.SH "Member Data Documentation" -.PP -.SS "src\&.backend\&.lib\&.storage\&.Storage\&.config" - -.SS "src\&.backend\&.lib\&.storage\&.Storage\&.db_host" - -.SS "src\&.backend\&.lib\&.storage\&.Storage\&.db_port" - -.SS "src\&.backend\&.lib\&.storage\&.Storage\&.engine" - -.SS "src\&.backend\&.lib\&.storage\&.Storage\&.password" - -.SS "src\&.backend\&.lib\&.storage\&.Storage\&.sql" - -.SS "src\&.backend\&.lib\&.storage\&.Storage\&.user" - - -.SH "Author" -.PP -Generated automatically by Doxygen for pyShelf Open Source Ebook Server from the source code\&. diff --git a/docs/pyShelf/man/man3/src_backend_tests_config_test_TestConfig.3 b/docs/pyShelf/man/man3/src_backend_tests_config_test_TestConfig.3 deleted file mode 100644 index 7b2e608..0000000 --- a/docs/pyShelf/man/man3/src_backend_tests_config_test_TestConfig.3 +++ /dev/null @@ -1,46 +0,0 @@ -.TH "src.backend.tests.config_test.TestConfig" 3 "Sat Mar 18 2023" "Version 0.8.0" "pyShelf Open Source Ebook Server" \" -*- nroff -*- -.ad l -.nh -.SH NAME -src.backend.tests.config_test.TestConfig -.SH SYNOPSIS -.br -.PP -.SS "Public Member Functions" - -.in +1c -.ti -1c -.RI "def \fBtest_book_dir\fP (self)" -.br -.ti -1c -.RI "def \fBtest_title\fP (self)" -.br -.ti -1c -.RI "def \fBtest_version\fP (self)" -.br -.in -1c -.SS "Static Public Attributes" - -.in +1c -.ti -1c -.RI "\fBConfig\fP \fBconfig\fP = \fBConfig\fP(os\&.path\&.abspath(os\&.path\&.curdir))" -.br -.in -1c -.SH "Detailed Description" -.PP -.SH "Member Function Documentation" -.PP -.SS "def src\&.backend\&.tests\&.config_test\&.TestConfig\&.test_book_dir ( self)" - -.SS "def src\&.backend\&.tests\&.config_test\&.TestConfig\&.test_title ( self)" - -.SS "def src\&.backend\&.tests\&.config_test\&.TestConfig\&.test_version ( self)" - -.SH "Member Data Documentation" -.PP -.SS "\fBConfig\fP src\&.backend\&.tests\&.config_test\&.TestConfig\&.config = \fBConfig\fP(os\&.path\&.abspath(os\&.path\&.curdir))\fC [static]\fP" - - -.SH "Author" -.PP -Generated automatically by Doxygen for pyShelf Open Source Ebook Server from the source code\&. diff --git a/docs/pyShelf/man/man3/src_backend_tests_library_test_TestCatalogue.3 b/docs/pyShelf/man/man3/src_backend_tests_library_test_TestCatalogue.3 deleted file mode 100644 index 2f70127..0000000 --- a/docs/pyShelf/man/man3/src_backend_tests_library_test_TestCatalogue.3 +++ /dev/null @@ -1,41 +0,0 @@ -.TH "src.backend.tests.library_test.TestCatalogue" 3 "Sat Mar 18 2023" "Version 0.8.0" "pyShelf Open Source Ebook Server" \" -*- nroff -*- -.ad l -.nh -.SH NAME -src.backend.tests.library_test.TestCatalogue -.SH SYNOPSIS -.br -.PP -.SS "Public Member Functions" - -.in +1c -.ti -1c -.RI "def \fBtest_filter_books\fP (self)" -.br -.in -1c -.SS "Static Public Attributes" - -.in +1c -.ti -1c -.RI "os \fBroot\fP = os\&.path\&.abspath(os\&.path\&.curdir)" -.br -.ti -1c -.RI "\fBTest_Config\fP \fBconfig\fP = \fBTest_Config\fP()" -.br -.in -1c -.SH "Detailed Description" -.PP -.SH "Member Function Documentation" -.PP -.SS "def src\&.backend\&.tests\&.library_test\&.TestCatalogue\&.test_filter_books ( self)" - -.SH "Member Data Documentation" -.PP -.SS "\fBTest_Config\fP src\&.backend\&.tests\&.library_test\&.TestCatalogue\&.config = \fBTest_Config\fP()\fC [static]\fP" - -.SS "os src\&.backend\&.tests\&.library_test\&.TestCatalogue\&.root = os\&.path\&.abspath(os\&.path\&.curdir)\fC [static]\fP" - - -.SH "Author" -.PP -Generated automatically by Doxygen for pyShelf Open Source Ebook Server from the source code\&. diff --git a/docs/pyShelf/man/man3/src_backend_tests_library_test_Test_Catalogue.3 b/docs/pyShelf/man/man3/src_backend_tests_library_test_Test_Catalogue.3 deleted file mode 100644 index 0711761..0000000 --- a/docs/pyShelf/man/man3/src_backend_tests_library_test_Test_Catalogue.3 +++ /dev/null @@ -1,59 +0,0 @@ -.TH "src.backend.tests.library_test.Test_Catalogue" 3 "Sat Mar 18 2023" "Version 0.8.0" "pyShelf Open Source Ebook Server" \" -*- nroff -*- -.ad l -.nh -.SH NAME -src.backend.tests.library_test.Test_Catalogue -.SH SYNOPSIS -.br -.PP -.PP -Inherits \fBsrc\&.backend\&.lib\&.library\&.Catalogue\fP\&. -.SS "Public Member Functions" - -.in +1c -.ti -1c -.RI "def \fB__init__\fP (self)" -.br -.ti -1c -.RI "def \fBfilter_books\fP (self)" -.br -.in -1c -.SS "Public Attributes" - -.in +1c -.ti -1c -.RI "\fBbook_shelf\fP" -.br -.in -1c -.SH "Detailed Description" -.PP -.SH "Constructor & Destructor Documentation" -.PP -.SS "def src\&.backend\&.tests\&.library_test\&.Test_Catalogue\&.__init__ ( self)" - -.PP -Reimplemented from \fBsrc\&.backend\&.lib\&.library\&.Catalogue\fP\&. -.SH "Member Function Documentation" -.PP -.SS "def src\&.backend\&.tests\&.library_test\&.Test_Catalogue\&.filter_books ( self)" - -.PP -.nf -Calls scan_folder and filters out book files\&. - -:returns self\&._book_list_expanded: json string containing -all book metadata - -.fi -.PP - -.PP -Reimplemented from \fBsrc\&.backend\&.lib\&.library\&.Catalogue\fP\&. -.SH "Member Data Documentation" -.PP -.SS "src\&.backend\&.tests\&.library_test\&.Test_Catalogue\&.book_shelf" - - -.SH "Author" -.PP -Generated automatically by Doxygen for pyShelf Open Source Ebook Server from the source code\&. diff --git a/docs/pyShelf/man/man3/src_backend_tests_library_test_Test_Config.3 b/docs/pyShelf/man/man3/src_backend_tests_library_test_Test_Config.3 deleted file mode 100644 index 011d5a1..0000000 --- a/docs/pyShelf/man/man3/src_backend_tests_library_test_Test_Config.3 +++ /dev/null @@ -1,50 +0,0 @@ -.TH "src.backend.tests.library_test.Test_Config" 3 "Sat Mar 18 2023" "Version 0.8.0" "pyShelf Open Source Ebook Server" \" -*- nroff -*- -.ad l -.nh -.SH NAME -src.backend.tests.library_test.Test_Config -.SH SYNOPSIS -.br -.PP -.PP -Inherits \fBsrc\&.backend\&.lib\&.config\&.Config\fP\&. -.SS "Public Member Functions" - -.in +1c -.ti -1c -.RI "def \fB__init__\fP (self)" -.br -.ti -1c -.RI "def \fBopen_file\fP (self, root='config\&.json')" -.br -.in -1c -.SH "Detailed Description" -.PP -.SH "Constructor & Destructor Documentation" -.PP -.SS "def src\&.backend\&.tests\&.library_test\&.Test_Config\&.__init__ ( self)" - -.PP -.nf -Initialize main configuration options\&. -.fi -.PP - -.PP -Reimplemented from \fBsrc\&.backend\&.lib\&.config\&.Config\fP\&. -.SH "Member Function Documentation" -.PP -.SS "def src\&.backend\&.tests\&.library_test\&.Test_Config\&.open_file ( self, root = \fC'config\&.json'\fP)" - -.PP -.nf -Open config\&.json and reads in configuration options\&. -.fi -.PP - -.PP -Reimplemented from \fBsrc\&.backend\&.lib\&.config\&.Config\fP\&. - -.SH "Author" -.PP -Generated automatically by Doxygen for pyShelf Open Source Ebook Server from the source code\&. diff --git a/docs/style.css b/docs/style.css deleted file mode 100644 index 43d6b57..0000000 --- a/docs/style.css +++ /dev/null @@ -1,187 +0,0 @@ -body { - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;; - margin: 2em 4em 2em 4em; - font-size: 120%; - line-height: 130%; -} - -h1, h2, h3, h4, h5, h6 { - font-weight: bold; - line-height:100%; - margin-top: 1.5em; - margin-bottom: 0.5em; -} - -h1 {font-size: 2em; color: #000000;} -h2 {font-size: 1.8em; color: #404040;} -h3 {font-size: 1.6em; color: #707070;} -h4 {font-size: 1.4em; color: #909090;} -h5 {font-size: 1.2em; color: #989898;} -h6 {font-size: 1em; color: #9c9c9c;} - -p, pre, blockquote, table, ul, ol, dl { - margin-top: 1em; - margin-bottom: 1em; -} - -ul ul, ul ol, ol ol, ol ul { - margin-top: 0.5em; - margin-bottom: 0.5em; -} - -li { margin: 0.3em auto; } - -ul { - margin-left: 2em; - padding-left: 0; -} - -dt { font-weight: bold; } - -img { border: none; } - -pre { - border-left: 5px solid #dcdcdc; - background-color: #f5f5f5; - padding-left: 1em; - font-family: Monaco, "Courier New", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", monospace; - font-size: 0.8em; - border-radius: 6px; -} - -p > a { - color: white; - text-decoration: none; - font-size: 0.7em; - padding: 3px 6px; - border-radius: 3px; - background-color: #1e90ff; - text-transform: uppercase; - font-weight: bold; -} - -p > a:hover { - color: #dcdcdc; - background-color: #484848; -} - -li > a { - color: #1e90ff; - font-weight: bold; - text-decoration: none; -} - -li > a:hover { color: #ff4500; } - -blockquote { - color: #686868; - font-size: 0.8em; - line-height: 120%; - padding: 0.8em; - border-left: 5px solid #dcdcdc; -} - -th, td { - border: 1px solid #ccc; - padding: 0.3em; -} - -th { background-color: #f0f0f0; } - -hr { - border: none; - border-top: 1px solid #ccc; - width: 100%; -} - -del { - text-decoration: line-through; - color: #777777; -} - -.toc li { list-style-type: none; } - -.todo { - font-weight: bold; - background-color: #ff4500 ; - color: white; - font-size: 0.8em; - padding: 3px 6px; - border-radius: 3px; -} - -.justleft { text-align: left; } -.justright { text-align: right; } -.justcenter { text-align: center; } - -.center { - margin-left: auto; - margin-right: auto; -} - -.tag { - background-color: #eeeeee; - font-family: monospace; - padding: 2px; -} - -.header a { - text-decoration: none; - color: inherit; -} - -/* classes for items of todo lists */ - -.rejected { - /* list-style: none; */ - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAAACXBIWXMAAADFAAAAxQEdzbqoAAAAB3RJTUUH4QgEFhAtuWgv9wAAAPZQTFRFmpqam5iYnJaWnJeXnpSUn5OTopCQpoqKpouLp4iIqIiIrYCAt3V1vW1tv2xsmZmZmpeXnpKS/x4e/x8f/yAg/yIi/yQk/yUl/yYm/ygo/ykp/yws/zAw/zIy/zMz/zQ0/zU1/zY2/zw8/0BA/0ZG/0pK/1FR/1JS/1NT/1RU/1VV/1ZW/1dX/1pa/15e/19f/2Zm/2lp/21t/25u/3R0/3p6/4CA/4GB/4SE/4iI/46O/4+P/52d/6am/6ur/66u/7Oz/7S0/7e3/87O/9fX/9zc/93d/+Dg/+vr/+3t/+/v//Dw//Ly//X1//f3//n5//z8////gzaKowAAAA90Uk5T/Pz8/Pz8/Pz8/Pz8/f39ppQKWQAAAAFiS0dEEnu8bAAAAACuSURBVAhbPY9ZF4FQFEZPSKbIMmWep4gMGTKLkIv6/3/GPbfF97b3w17rA0kQOPgvAeHW6uJ6+5h7HqLdwowgOzejXRXBdx6UdSru216xuOMBHHNU0clTzeSUA6EhF8V8kqroluMiU6HKcuf4phGPr1o2q9kYZWwNq1qfRRmTaXpqsyjj17KkWCxKBUBgXWueHIyiAIg18gsse4KHkLF5IKIY10WQgv7fOy4ST34BRiopZ8WLNrgAAAAASUVORK5CYII=); - background-repeat: no-repeat; - background-position: 0 .2em; - padding-left: 1.5em; -} -.done0 { - /* list-style: none; */ - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAxQAAAMUBHc26qAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAA7SURBVCiR7dMxEgAgCANBI3yVRzF5KxNbW6wsuH7LQ2YKQK1mkswBVERYF5Os3UV3gwd/jF2SkXy66gAZkxS6BniubAAAAABJRU5ErkJggg==); - background-repeat: no-repeat; - background-position: 0 .2em; - padding-left: 1.5em; -} -.done1 { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAxQAAAMUBHc26qAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABtSURBVCiR1ZO7DYAwDER9BDmTeZQMFXmUbGYpOjrEryA0wOvO8itOslFrJYAug5BMM4BeSkmjsrv3aVTa8p48Xw1JSkSsWVUFwD05IqS1tmYzk5zzae9jnVVVzGyXb8sALjse+euRkEzu/uirFomVIdDGOLjuAAAAAElFTkSuQmCC); - background-repeat: no-repeat; - background-position: 0 .15em; - padding-left: 1.5em; -} -.done2 { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAxQAAAMUBHc26qAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAB1SURBVCiRzdO5DcAgDAVQGxjAYgTvxlDIu1FTIRYAp8qlFISkSH7l5kk+ZIwxKiI2mIyqWoeILYRgZ7GINDOLjnmF3VqklKCUMgTee2DmM661Qs55iI3Zm/1u5h9sm4ig9z4ERHTFzLyd4G4+nFlVrYg8+qoF/c0kdpeMsmcAAAAASUVORK5CYII=); - background-repeat: no-repeat; - background-position: 0 .15em; - padding-left: 1.5em; -} -.done3 { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAxQAAAMUBHc26qAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABoSURBVCiR7dOxDcAgDATA/0DtUdiKoZC3YhLkHjkVKF3idJHiztKfvrHZWnOSE8Fx95RJzlprimJVnXktvXeY2S0SEZRSAAAbmxnGGKH2I5T+8VfxPhIReQSuuY3XyYWa3T2p6quvOgGrvSFGlewuUAAAAABJRU5ErkJggg==); - background-repeat: no-repeat; - background-position: 0 .15em; - padding-left: 1.5em; -} -.done4 { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAQCAYAAAAbBi9cAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAzgAAAM4BlP6ToAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIISURBVDiNnZQ9SFtRFMd/773kpTaGJoQk1im4VDpWQcTNODhkFBcVTCNCF0NWyeDiIIiCm82QoIMIUkHUxcFBg1SEQoZszSat6cdTn1qNue92CMbEr9Sey+XC/Z/zu+f8h6ukUil3sVg0+M+4cFxk42/jH2wAqqqKSCSiPQdwcHHAnDHH9s/tN1h8V28ETdP+eU8fT9Nt62ancYdIPvJNtsu87bmjrJlrTDVM4RROJs1JrHPrD4Bar7A6cpc54iKOaTdJXCUI2UMVrQZ0Js7YPN18ECKkYNQcJe/OE/4dZsw7VqNXQMvHy3QZXQypQ6ycrtwDjf8aJ+PNEDSCzLpn7+m2pD8ZKHlKarYhy6XjEoCYGcN95qansQeA3fNdki+SaJZGTMQIOoL3W/Z89rxv+tokubNajlvk/vm+LFpF2XnUKZHI0I+QrI7Dw0OZTqdzUkpsM7mZTyfy5OPGyw1tK7AFSvmB/Ks8w8YwbUYbe6/3QEKv0vugfxWPnMLJun+d/kI/WLdizpNjMbAIKrhMF4OuwadBALqqs+RfInwUvuNi+fBd+wjogfogAFVRmffO02q01mZZ0HHdgXIzdz0QQLPezIQygX6llxNKKgOFARYCC49CqhoHIUTlss/Vx2phlYwjw8j1CAlfAiwQiJpiy7o1VHnsG5FISkoJu7Q/2YmmaV+i0ei7v38L2CBguSi5AAAAAElFTkSuQmCC); - background-repeat: no-repeat; - background-position: 0 .15em; - padding-left: 1.5em; -} - -code { - font-family: Monaco, "Courier New", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", monospace; - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - padding: 0px 3px; - display: inline-block; - color: #52595d; - border: 1px solid #ccc; - background-color: #f9f9f9; -} diff --git a/docs/warn.log b/docs/warn.log deleted file mode 100644 index 7357701..0000000 --- a/docs/warn.log +++ /dev/null @@ -1,205 +0,0 @@ -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/pyShelf.py:102: warning: Compound src::backend::lib::pyShelf::Admin is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/tests/config_test.py:6: warning: Compound src::backend::tests::config_test::TestConfig is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/tests/library_test.py:28: warning: Compound src::backend::tests::library_test::TestCatalogue is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/tests/library_test.py:19: warning: Compound src::backend::tests::library_test::Test_Catalogue is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/tests/library_test.py:8: warning: Compound src::backend::tests::library_test::Test_Config is not documented. -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/DataHooks.py:10: warning: Member config (variable) of class DataHooks::BookInterface is not documented. -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/DataHooks.py:11: warning: Member db (variable) of class DataHooks::BookInterface is not documented. -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:20: warning: Member app (variable) of namespace FastAPIServer is not documented. -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:21: warning: Member templates (variable) of namespace FastAPIServer is not documented. -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:22: warning: Member origins (variable) of namespace FastAPIServer is not documented. -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:30: warning: Member allow_origins (variable) of namespace FastAPIServer is not documented. -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:31: warning: Member allow_credentials (variable) of namespace FastAPIServer is not documented. -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:32: warning: Member allow_methods (variable) of namespace FastAPIServer is not documented. -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:33: warning: Member allow_headers (variable) of namespace FastAPIServer is not documented. -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:38: warning: parameters of member FastAPIServer.base64decode are not documented -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:38: warning: return type of member FastAPIServer.base64decode is not documented -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:90: warning: parameters of member FastAPIServer.book_tojson are not documented -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:90: warning: return type of member FastAPIServer.book_tojson is not documented -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:62: warning: parameters of member FastAPIServer.books_tojson are not documented -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:62: warning: return type of member FastAPIServer.books_tojson is not documented -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:110: warning: parameters of member FastAPIServer.collections_tojson are not documented -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:110: warning: return type of member FastAPIServer.collections_tojson is not documented -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:57: warning: parameters of member FastAPIServer.convertDateTime are not documented -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:57: warning: return type of member FastAPIServer.convertDateTime is not documented -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:47: warning: parameters of member FastAPIServer.summarize are not documented -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:47: warning: return type of member FastAPIServer.summarize is not documented -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:160: warning: Member index(Request request, int skip=0, int limit=10) (function) of class FastAPIServer::FastAPIServer is not documented. -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:168: warning: Member books(Request request, int skip=0, int limit=10, collection=None) (function) of class FastAPIServer::FastAPIServer is not documented. -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:177: warning: Member book(Request request, int book_id) (function) of class FastAPIServer::FastAPIServer is not documented. -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:184: warning: Member collections(Request request) (function) of class FastAPIServer::FastAPIServer is not documented. -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:131: warning: Member config (variable) of class FastAPIServer::FastAPIServer is not documented. -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:135: warning: Member fe_config (variable) of class FastAPIServer::FastAPIServer is not documented. -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:137: warning: Member fe_server (variable) of class FastAPIServer::FastAPIServer is not documented. -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:130: warning: parameters of member FastAPIServer.FastAPIServer.__init__ are not documented -:1: warning: parameters of member FastAPIServer.FastAPIServer.book are not documented -:1: warning: parameters of member FastAPIServer.FastAPIServer.books are not documented -:1: warning: parameters of member FastAPIServer.FastAPIServer.collections are not documented -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:142: warning: return type of member FastAPIServer.FastAPIServer.compile_static_files is not documented -:1: warning: parameters of member FastAPIServer.FastAPIServer.index are not documented -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:192: warning: return type of member FastAPIServer.FastAPIServer.run is not documented -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:154: warning: parameters of member FastAPIServer.FastAPIServer.use_route_names_as_operation_ids are not documented -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/FastAPIServer.py:154: warning: return type of member FastAPIServer.FastAPIServer.use_route_names_as_operation_ids is not documented -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/objects.py:13: warning: parameters of member objects.JSInterface.__init__ are not documented -/home/th3r00t/.local/builds/pyShelf/src/frontend/lib/objects.py:18: warning: return type of member objects.JSInterface.install is not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/api_hooks.py:10: warning: Member __init__(self) (function) of class src::backend::lib::api_hooks::DuckDuckGo is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/api_hooks.py:40: warning: Member description_result(self, query) (function) of class src::backend::lib::api_hooks::DuckDuckGo is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/api_hooks.py:11: warning: Member url (variable) of class src::backend::lib::api_hooks::DuckDuckGo is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/api_hooks.py:12: warning: Member imageurl (variable) of class src::backend::lib::api_hooks::DuckDuckGo is not documented. -<__init__>:1: warning: parameters of member src.backend.lib.api_hooks.DuckDuckGo.__init__ are not documented -:1: warning: parameters of member src.backend.lib.api_hooks.DuckDuckGo.description_result are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/api_hooks.py:15: warning: parameters of member src.backend.lib.api_hooks.DuckDuckGo.image_result are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/api_hooks.py:15: warning: return type of member src.backend.lib.api_hooks.DuckDuckGo.image_result is not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:101: warning: Member init_config(self) (function) of class src::backend::lib::config::Config is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:51: warning: Member root (variable) of class src::backend::lib::config::Config is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:52: warning: Member config_structure (variable) of class src::backend::lib::config::Config is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:81: warning: Member logger (variable) of class src::backend::lib::config::Config is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:82: warning: Member book_path (variable) of class src::backend::lib::config::Config is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:83: warning: Member TITLE (variable) of class src::backend::lib::config::Config is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:84: warning: Member VERSION (variable) of class src::backend::lib::config::Config is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:86: warning: Member book_shelf (variable) of class src::backend::lib::config::Config is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:87: warning: Member catalogue_db (variable) of class src::backend::lib::config::Config is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:88: warning: Member user (variable) of class src::backend::lib::config::Config is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:89: warning: Member password (variable) of class src::backend::lib::config::Config is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:90: warning: Member db_host (variable) of class src::backend::lib::config::Config is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:91: warning: Member db_port (variable) of class src::backend::lib::config::Config is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:92: warning: Member file_array (variable) of class src::backend::lib::config::Config is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:93: warning: Member auto_scan (variable) of class src::backend::lib::config::Config is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:94: warning: Member allowed_hosts (variable) of class src::backend::lib::config::Config is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:96: warning: Member db_engine (variable) of class src::backend::lib::config::Config is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:97: warning: Member db_user (variable) of class src::backend::lib::config::Config is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:98: warning: Member db_pass (variable) of class src::backend::lib::config::Config is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:99: warning: Member build_mode (variable) of class src::backend::lib::config::Config is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:72: warning: Member _fp (variable) of class src::backend::lib::config::Config is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:74: warning: Member _cp (variable) of class src::backend::lib::config::Config is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:77: warning: Member _data (variable) of class src::backend::lib::config::Config is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:50: warning: parameters of member src.backend.lib.config.Config.__init__ are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:111: warning: return type of member src.backend.lib.config.Config.get_logger is not documented -:1: warning: parameters of member src.backend.lib.config.Config.init_config are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:120: warning: return type of member src.backend.lib.config.Config.open_file is not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:19: warning: Member __init__(self, config) (function) of class src::backend::lib::library::Catalogue is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:225: warning: Member extract_metadata_mobi(self, book) (function) of class src::backend::lib::library::Catalogue is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:221: warning: Member stripTags(source) (function) of class src::backend::lib::library::Catalogue is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:20: warning: Member file_list (variable) of class src::backend::lib::library::Catalogue is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:21: warning: Member opf_regx (variable) of class src::backend::lib::library::Catalogue is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:22: warning: Member cover_regx (variable) of class src::backend::lib::library::Catalogue is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:23: warning: Member html_regx (variable) of class src::backend::lib::library::Catalogue is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:24: warning: Member title_sanitization_regx (variable) of class src::backend::lib::library::Catalogue is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:25: warning: Member title_sanitization_lvl2_regx (variable) of class src::backend::lib::library::Catalogue is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:26: warning: Member title_sanitization_dirs_regx (variable) of class src::backend::lib::library::Catalogue is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:27: warning: Member root_dir (variable) of class src::backend::lib::library::Catalogue is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:28: warning: Member book_folder (variable) of class src::backend::lib::library::Catalogue is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:29: warning: Member books (variable) of class src::backend::lib::library::Catalogue is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:30: warning: Member db_pointer (variable) of class src::backend::lib::library::Catalogue is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:31: warning: Member config (variable) of class src::backend::lib::library::Catalogue is not documented. -<__init__>:1: warning: parameters of member src.backend.lib.library.Catalogue.__init__ are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:303: warning: return type of member src.backend.lib.library.Catalogue.compare_shelf_current is not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:276: warning: parameters of member src.backend.lib.library.Catalogue.extract_content are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:276: warning: return type of member src.backend.lib.library.Catalogue.extract_content is not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:283: warning: parameters of member src.backend.lib.library.Catalogue.extract_cover_html are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:283: warning: return type of member src.backend.lib.library.Catalogue.extract_cover_html is not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:290: warning: parameters of member src.backend.lib.library.Catalogue.extract_cover_image are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:290: warning: return type of member src.backend.lib.library.Catalogue.extract_cover_image is not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:97: warning: parameters of member src.backend.lib.library.Catalogue.extract_metadata_epub are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:97: warning: return type of member src.backend.lib.library.Catalogue.extract_metadata_epub is not documented -:1: warning: parameters of member src.backend.lib.library.Catalogue.extract_metadata_mobi are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:171: warning: parameters of member src.backend.lib.library.Catalogue.extract_metadata_pdf are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:171: warning: return type of member src.backend.lib.library.Catalogue.extract_metadata_pdf is not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:54: warning: return type of member src.backend.lib.library.Catalogue.filter_books is not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:324: warning: parameters of member src.backend.lib.library.Catalogue.import_books are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:324: warning: return type of member src.backend.lib.library.Catalogue.import_books is not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:69: warning: parameters of member src.backend.lib.library.Catalogue.process_by_filetype are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:69: warning: return type of member src.backend.lib.library.Catalogue.process_by_filetype is not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:81: warning: parameters of member src.backend.lib.library.Catalogue.process_epub are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:81: warning: return type of member src.backend.lib.library.Catalogue.process_epub is not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:34: warning: parameters of member src.backend.lib.library.Catalogue.scan_folder are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:34: warning: return type of member src.backend.lib.library.Catalogue.scan_folder is not documented -:1: warning: parameters of member src.backend.lib.library.Catalogue.stripTags are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/models.py:24: warning: Member book_id (variable) of class src::backend::lib::models::Book is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/models.py:25: warning: Member title (variable) of class src::backend::lib::models::Book is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/models.py:26: warning: Member author (variable) of class src::backend::lib::models::Book is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/models.py:27: warning: Member categories (variable) of class src::backend::lib::models::Book is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/models.py:28: warning: Member cover (variable) of class src::backend::lib::models::Book is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/models.py:29: warning: Member pages (variable) of class src::backend::lib::models::Book is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/models.py:30: warning: Member progress (variable) of class src::backend::lib::models::Book is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/models.py:31: warning: Member file_name (variable) of class src::backend::lib::models::Book is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/models.py:32: warning: Member description (variable) of class src::backend::lib::models::Book is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/models.py:33: warning: Member date (variable) of class src::backend::lib::models::Book is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/models.py:34: warning: Member rights (variable) of class src::backend::lib::models::Book is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/models.py:35: warning: Member tags (variable) of class src::backend::lib::models::Book is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/models.py:36: warning: Member identifier (variable) of class src::backend::lib::models::Book is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/models.py:37: warning: Member publisher (variable) of class src::backend::lib::models::Book is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/models.py:46: warning: Member collection (variable) of class src::backend::lib::models::Collection is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/models.py:47: warning: Member book_id (variable) of class src::backend::lib::models::Collection is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/models.py:48: warning: Member collection_id (variable) of class src::backend::lib::models::Collection is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/overide.py:15: warning: Member __init__(self) (function) of class src::backend::lib::overide::ACatalogue is not documented. -<__init__>:1: warning: parameters of member src.backend.lib.overide.ACatalogue.__init__ are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/overide.py:38: warning: parameters of member src.backend.lib.overide.ACatalogue.import_books are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/overide.py:38: warning: return type of member src.backend.lib.overide.ACatalogue.import_books is not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/overide.py:19: warning: parameters of member src.backend.lib.overide.ACatalogue.scan_folder are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/overide.py:19: warning: return type of member src.backend.lib.overide.ACatalogue.scan_folder is not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/pyShelf.py:104: warning: Member __init__(self, root) (function) of class src::backend::lib::pyShelf::Admin is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/pyShelf.py:109: warning: Member createsuperuser(self) (function) of class src::backend::lib::pyShelf::Admin is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/pyShelf.py:105: warning: Member config (variable) of class src::backend::lib::pyShelf::Admin is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/pyShelf.py:106: warning: Member db (variable) of class src::backend::lib::pyShelf::Admin is not documented. -<__init__>:1: warning: parameters of member src.backend.lib.pyShelf.Admin.__init__ are not documented -:1: warning: parameters of member src.backend.lib.pyShelf.Admin.createsuperuser are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/pyShelf.py:25: warning: Member __init__(self, file_array) (function) of class src::backend::lib::pyShelf::InitFiles is not documented. -<__init__>:1: warning: parameters of member src.backend.lib.pyShelf.InitFiles.__init__ are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/pyShelf.py:33: warning: parameters of member src.backend.lib.pyShelf.InitFiles.CreateFile are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/pyShelf.py:33: warning: return type of member src.backend.lib.pyShelf.InitFiles.CreateFile is not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/pyShelf.py:48: warning: Member __init__(self, root) (function) of class src::backend::lib::pyShelf::Server is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/pyShelf.py:55: warning: Member __aexit__(self, *args, **kwargs) (function) of class src::backend::lib::pyShelf::Server is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/pyShelf.py:58: warning: Member initialize_server(self) (function) of class src::backend::lib::pyShelf::Server is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/pyShelf.py:64: warning: Member runImport(self) (function) of class src::backend::lib::pyShelf::Server is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/pyShelf.py:73: warning: Member socketio(self, websocket, path) (function) of class src::backend::lib::pyShelf::Server is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/pyShelf.py:91: warning: Member pong(self) (function) of class src::backend::lib::pyShelf::Server is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/pyShelf.py:95: warning: Member start(self) (function) of class src::backend::lib::pyShelf::Server is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/pyShelf.py:49: warning: Member root (variable) of class src::backend::lib::pyShelf::Server is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/pyShelf.py:50: warning: Member host (variable) of class src::backend::lib::pyShelf::Server is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/pyShelf.py:51: warning: Member config (variable) of class src::backend::lib::pyShelf::Server is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/pyShelf.py:52: warning: Member loop (variable) of class src::backend::lib::pyShelf::Server is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/pyShelf.py:53: warning: Member serve (variable) of class src::backend::lib::pyShelf::Server is not documented. -<__init__>:1: warning: parameters of member src.backend.lib.pyShelf.Server.__init__ are not documented -<__aexit__>:1: warning: parameters of member src.backend.lib.pyShelf.Server.__aexit__ are not documented -:1: warning: parameters of member src.backend.lib.pyShelf.Server.initialize_server are not documented -:1: warning: parameters of member src.backend.lib.pyShelf.Server.pong are not documented -:1: warning: parameters of member src.backend.lib.pyShelf.Server.runImport are not documented -:1: warning: parameters of member src.backend.lib.pyShelf.Server.socketio are not documented -:1: warning: parameters of member src.backend.lib.pyShelf.Server.start are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/storage.py:33: warning: Member config (variable) of class src::backend::lib::storage::Storage is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/storage.py:34: warning: Member sql (variable) of class src::backend::lib::storage::Storage is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/storage.py:35: warning: Member user (variable) of class src::backend::lib::storage::Storage is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/storage.py:36: warning: Member password (variable) of class src::backend::lib::storage::Storage is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/storage.py:37: warning: Member db_host (variable) of class src::backend::lib::storage::Storage is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/storage.py:38: warning: Member db_port (variable) of class src::backend::lib::storage::Storage is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/storage.py:39: warning: Member engine (variable) of class src::backend::lib::storage::Storage is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/storage.py:32: warning: parameters of member src.backend.lib.storage.Storage.__init__ are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/storage.py:109: warning: return type of member src.backend.lib.storage.Storage.book_paths_list is not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/storage.py:61: warning: return type of member src.backend.lib.storage.Storage.create_tables is not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/storage.py:193: warning: parameters of member src.backend.lib.storage.Storage.get_book are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/storage.py:193: warning: return type of member src.backend.lib.storage.Storage.get_book is not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/storage.py:169: warning: parameters of member src.backend.lib.storage.Storage.get_books are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/storage.py:169: warning: return type of member src.backend.lib.storage.Storage.get_books is not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/storage.py:210: warning: return type of member src.backend.lib.storage.Storage.get_collections is not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/storage.py:43: warning: return type of member src.backend.lib.storage.Storage.get_connection_string is not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/storage.py:67: warning: parameters of member src.backend.lib.storage.Storage.insert_book are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/storage.py:67: warning: return type of member src.backend.lib.storage.Storage.insert_book is not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/storage.py:121: warning: return type of member src.backend.lib.storage.Storage.make_collections is not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/tests/config_test.py:9: warning: Member test_book_dir(self) (function) of class src::backend::tests::config_test::TestConfig is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/tests/config_test.py:12: warning: Member test_title(self) (function) of class src::backend::tests::config_test::TestConfig is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/tests/config_test.py:15: warning: Member test_version(self) (function) of class src::backend::tests::config_test::TestConfig is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/tests/config_test.py:7: warning: Member config (variable) of class src::backend::tests::config_test::TestConfig is not documented. -:1: warning: parameters of member src.backend.tests.config_test.TestConfig.test_book_dir are not documented -:1: warning: parameters of member src.backend.tests.config_test.TestConfig.test_title are not documented -:1: warning: parameters of member src.backend.tests.config_test.TestConfig.test_version are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/tests/library_test.py:20: warning: Member __init__(self) (function) of class src::backend::tests::library_test::Test_Catalogue is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/tests/library_test.py:24: warning: Member book_shelf (variable) of class src::backend::tests::library_test::Test_Catalogue is not documented. -<__init__>:1: warning: parameters of member src.backend.tests.library_test.Test_Catalogue.__init__ are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/library.py:54: warning: return type of member src.backend.tests.library_test.Test_Catalogue.filter_books is not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:120: warning: parameters of member src.backend.tests.library_test.Test_Config.open_file are not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/lib/config.py:120: warning: return type of member src.backend.tests.library_test.Test_Config.open_file is not documented -/home/th3r00t/.local/builds/pyShelf/src/backend/tests/library_test.py:32: warning: Member test_filter_books(self) (function) of class src::backend::tests::library_test::TestCatalogue is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/tests/library_test.py:29: warning: Member root (variable) of class src::backend::tests::library_test::TestCatalogue is not documented. -/home/th3r00t/.local/builds/pyShelf/src/backend/tests/library_test.py:30: warning: Member config (variable) of class src::backend::tests::library_test::TestCatalogue is not documented. -:1: warning: parameters of member src.backend.tests.library_test.TestCatalogue.test_filter_books are not documented diff --git a/wiki/Automated Collections.wiki b/wiki/Automated Collections.wiki deleted file mode 100644 index 72a279e..0000000 --- a/wiki/Automated Collections.wiki +++ /dev/null @@ -1,24 +0,0 @@ -= Automated Collection Management System = -The collection management system needs rewritten from the ground up. -The model should look something like this. -* [ ] TODO :: Refactor collections algorithm. #aebaee91 -{{{python - Collection { - id: int - name: String - books: list(Book) - } -}}} - -it is likely the book object will need rewritten as well. -{{{python - Book { - id: int - title: String - # other book metadata - collection: list(Collection.id) - } -}}} - -{{file://$HOME/.local/builds/pyShelf/src/backend/lib/storage.py}} -{{file://$HOME/.local/builds/pyShelf/src/backend/pyShelf_ScanLibrary.py}} diff --git a/wiki/Book Attachment System.wiki b/wiki/Book Attachment System.wiki deleted file mode 100644 index 9e79a65..0000000 --- a/wiki/Book Attachment System.wiki +++ /dev/null @@ -1,11 +0,0 @@ -[[index|Home]] [[TOC]] [[https://github.com/th3r00t/pyShelf.git|github]] -= Book Attachment System = -== Introduction == - -The Book Attachment System is used for attaching various filetypes to a book. -This could be helpfull for storing code snippets or notes to technical documents. - - -== State == - -Concept. diff --git a/wiki/Book Scraping System.wiki b/wiki/Book Scraping System.wiki deleted file mode 100644 index fcdd627..0000000 --- a/wiki/Book Scraping System.wiki +++ /dev/null @@ -1,25 +0,0 @@ -[[index|Home]] [[TOC]] [[https://github.com/th3r00t/pyShelf.git|github]] -= Book Scraping System = -== Introduction == - -The Book Scraping System is a custom ebook scraper built from the ground up -for pyShelf. It is designed to be a simple, easy to use, and easy to extend -system for scraping ebooks from the internet. It is powered by BeutifulSoup. - -pyShelf features a recursive scraping algorithm that itterates over all -sub-folders in your collection. - -== Scrapers == - * [X] epub #2899a8e9 - * [X] mobi #ec035720 - * [X] pdf #05875e64 - * [ ] cbz #4a513e39 - -== Collections == - * [ ] Manual Collections #b07156f4 - * [ ] [[Automated Collections]] #f258c1f8 - -== State == - -Fully functional. -Awaiting further feature implementation. diff --git a/wiki/BrandBoard.pdf b/wiki/BrandBoard.pdf deleted file mode 100644 index b8d485e918b8e4bded7fe49a27ae7ec52816673a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39407 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 - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -}}} - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: -{{{ - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. -}}} - -The hypothetical commands `show w` and `show c` should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -[[https://www.gnu.org/licenses/]]. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -[[https://www.gnu.org/licenses/why-not-lgpl.html]]. diff --git a/wiki/Notes.wiki b/wiki/Notes.wiki deleted file mode 100644 index 394e580..0000000 --- a/wiki/Notes.wiki +++ /dev/null @@ -1,15 +0,0 @@ -= ux = -== Next / React / Material / Typescript == -=== Guides === -- {{https://nextjs.org/docs/getting-started|Next.js}} -- {{https://blog.logrocket.com/using-next-js-with-typescript/|Next w/ Typescript}} -- {{https://react-typescript-cheatsheet.netlify.app/|React Typescript Cheatsheet}} -- {{https://reactjs.org/docs/hooks-intro.html|React Hooks}} -- {{https://reactjs.org/docs/hooks-custom.html|React Custom Hooks}} -- {{https://reactjs.org/docs/hooks-reference.html|React Hooks Reference}} -- {{https://material-ui.com/|Material UI}} -- {{https://material-ui.com/guides/typescript/|Material UI w/ Typescript}} -- {{https://material-ui.com/guides/server-rendering/|Material UI Server Rendering}} -- {{https://material-ui.com/guides/minimizing-bundle-size/|Material UI Minimizing Bundle Size}} -- {{https://material-ui.com/guides/composition/|Material UI Composition}} -- {{https://www.prisma.io/|Prisma}} diff --git a/wiki/OPDS.wiki b/wiki/OPDS.wiki deleted file mode 100644 index 0ea6635..0000000 --- a/wiki/OPDS.wiki +++ /dev/null @@ -1,14 +0,0 @@ -[[index|Home]] [[TOC]] [[https://github.com/th3r00t/pyShelf.git|github]] - = Open Public Distribution System = -== Introduction == - - [[https://opds-spec.org/]] - - The Open Publication Distribution System (OPDS) Catalog format is a syndication - format for electronic publications based on Atom and HTTP. OPDS Catalogs enable - the aggregation, distribution, discovery, and acquisition of electronic - publications. OPDS Catalogs use existing or emergent open standards and - conventions, with a priority on simplicity. - -== State == - Concept. diff --git a/wiki/Program Flow.wiki b/wiki/Program Flow.wiki deleted file mode 100644 index 6d596df..0000000 --- a/wiki/Program Flow.wiki +++ /dev/null @@ -1,20 +0,0 @@ -= PyShelf's Program Flow Chart = - -== Entry Point == -{{{bash - > ./pyShelf.py -}}} -=== pyShelf.py === -- from src.backend.pyShelf_ScanLibrary import execute_scan -- from src.backend.pyShelf_MakeCollections import MakeCollections -- config = Config() -- PRG_PATH -- Storage(config).create_tables() -- Thread(run_import) -- FastAPIServer(config) - -==== run_import() ==== -:bookimport: -- execute_scan(PRG_PATH, config) *Book DB Insertion Point* -- MakeCollections(PRG_PATH, config) *Collection DB Insertion Point* -* [ ] TODO Move collections insertion to run in tandem with book insertion as this is the last time we have all of the information in one place. #a34ad104 diff --git a/wiki/REST API.wiki b/wiki/REST API.wiki deleted file mode 100644 index 6eac67e..0000000 --- a/wiki/REST API.wiki +++ /dev/null @@ -1,9 +0,0 @@ -[[index|Home]] [[TOC]] [[https://github.com/th3r00t/pyShelf.git|github]] -= REST API |project:pyshelf:restapi = - -== Endpoints == -* [X] Book /book/id #405f1aac -* [X] Books /books #932fd202 -* [X] Collections /collections #d4f585b6 -* [ ] User /user/id #3f538207 -* [ ] Users /users #c669d926 diff --git a/wiki/TOC.wiki b/wiki/TOC.wiki deleted file mode 100644 index 32303ec..0000000 --- a/wiki/TOC.wiki +++ /dev/null @@ -1,11 +0,0 @@ -[[index|Home]] [[https://github.com/th3r00t/pyShelf.git|github]] -= Table Of Contents = - - [[Book Attachment System]] - - [[Book Scraping System]] - - [[Frontend]] - - [[License]] - - [[OPDS]] - - [[REST API]] - - [[TOC]] - - [[doxygen]] - - [[index]] diff --git a/wiki/doxygen.wiki b/wiki/doxygen.wiki deleted file mode 100644 index 5012bbd..0000000 --- a/wiki/doxygen.wiki +++ /dev/null @@ -1,6 +0,0 @@ -[[index|Home]] [[TOC]] [[https://github.com/th3r00t/pyShelf.git|github]] -== Doxygen == - -Any changes to source should be documented and have run doxygen doxygen.conf prior to commiting. -Before advancing version numbers be sure to set PROJECT_NUMBER in doxygen.conf accordingly. - diff --git a/wiki/index.wiki b/wiki/index.wiki deleted file mode 100644 index 2947991..0000000 --- a/wiki/index.wiki +++ /dev/null @@ -1,57 +0,0 @@ -[[TOC]] [[https://github.com/th3r00t/pyShelf.git|github]] -= pyShelf | project:pyshelf = - -{{https://github.com/th3r00t/pyShelf/raw/0.7.1-dev/src/frontend/static/images/png/logo-no-background.png}} - -Version 0.7.0 -[[License|GPLv3]] - -pyShelf is an open source ebook server written in Python. -It is designed with ease of use in mind. - -== Branches == -- *Master* is the most stable branch, but may be behind in features. -- *Dev* is the most active branch, this branch is a rolling release branch. -- *--** are used for day to day development. - -== Formats == - -pyShelf supports the following formats: - - - epub - - mobi - - pdf - - -== Services == - - Backend - - [[Book Scraping System|Book Scraper]] - - [[OPDS]] - - Filesystem-io - - [[Book Attachment System]] - - [[Frontend]] - - [[REST API|RESTAPI]] - - [[Frontend#Dependency Management|Dependency Management]] - - [[Frontend#User Management|User Management]] - - [[Frontend#User Experience|User Experience]] - - [[Frontend#Data Management|Data Management]] -== TODO == - * [ ] [[Book Scraping System]] #f7edafb1 - * [ ] [[REST API]] #c7bc51c5 - * [ ] [[Client]] #21cbc756 - -== Development == - -pyShelf takes advantage of the following tools: - - [[https://pre-commit.com/|pre-commit]] [[http://www.doxygen.nl/|doxygen]] & - [[https://vimwiki.github.io/|VimWiki]] we also follow - [[https://semver.org|semver]] standards. - - - - [[Program Flow]] - - - Please note that I use task, vimwiki, & taskwiki to manage my projects. - Due to this Task entries marked via `* [ ] task` are postfixed with hex color - data. Anyone who knows how to fix that I'm all ears :).