0&&g.right<=f,v=t?u||s:u&&s,b=t?c||a:c&&a;if("both"===o)return l&&v&&b;if("vertical"===o)return l&&v;if("horizontal"===o)return l&&b}else{var d=i.scrollTop(),p=d+h,w=i.scrollLeft(),m=w+f,y=r.offset(),z=y.top,B=z+r.height(),C=y.left,R=C+r.width(),j=t===!0?B:z,q=t===!0?z:B,H=t===!0?R:C,L=t===!0?C:R;if("both"===o)return!!l&&p>=q&&j>=d&&m>=L&&H>=w;if("vertical"===o)return!!l&&p>=q&&j>=d;if("horizontal"===o)return!!l&&m>=L&&H>=w}}}}(jQuery);
2 |
--------------------------------------------------------------------------------
/cps/static/js/libs/pwstrength/locales/ar.json:
--------------------------------------------------------------------------------
1 | {
2 | "wordMinLength": "كلمة المرور قصيرة جداً",
3 | "wordMaxLength": "كلمة المرور طويلة جدا",
4 | "wordInvalidChar": "تحتوي كلمة المرور على رموز غير صالحة",
5 | "wordNotEmail": "لا تستخدم بريدك الإلكتروني ككلمة مرور",
6 | "wordSimilarToUsername": "لا يمكن ان تحتوي كلمة المرور على إسم المستخدم",
7 | "wordTwoCharacterClasses": "إستخدم فئات أحرف مختلفة",
8 | "wordRepetitions": "تكرارات كثيرة",
9 | "wordSequences": "تحتوي كلمة المرور على أنماط متتابعة",
10 | "errorList": "الأخطاء:",
11 | "veryWeak": "ضعيفة جداً",
12 | "weak": "ضعيفة",
13 | "normal": "عادية",
14 | "medium": "متوسطة",
15 | "strong": "قوية",
16 | "veryStrong": "قوية جداً"
17 | }
18 |
--------------------------------------------------------------------------------
/cps/static/js/libs/pwstrength/locales/cs.json:
--------------------------------------------------------------------------------
1 | {
2 | "wordMinLength": "Vaše heslo je příliš krátké",
3 | "wordMaxLength": "Vaše heslo je příliš dlouhé",
4 | "wordInvalidChar": "Vaše heslo obsahuje neplatný znak",
5 | "wordNotEmail": "Nepoužívejte Váš email jako Vaše heslo",
6 | "wordSimilarToUsername": "Vaše heslo nesmí obsahovat přihlašovací jméno",
7 | "wordTwoCharacterClasses": "Použijte různé druhy znaků",
8 | "wordRepetitions": "Příliš mnoho opakování",
9 | "wordSequences": "Vaše heslo obsahuje postupnost",
10 | "errorList": "Chyby:",
11 | "veryWeak": "Velmi slabé",
12 | "weak": "Slabé",
13 | "normal": "Normální",
14 | "medium": "Středně silné",
15 | "strong": "Silné",
16 | "veryStrong": "Velmi silné"
17 | }
--------------------------------------------------------------------------------
/cps/static/js/libs/pwstrength/locales/de.json:
--------------------------------------------------------------------------------
1 | {
2 | "wordMinLength": "Das Passwort ist zu kurz",
3 | "wordMaxLength": "Das Passwort ist zu lang",
4 | "wordInvalidChar": "Das Passwort enthält ein ungültiges Zeichen",
5 | "wordNotEmail": "Das Passwort darf die E-Mail Adresse nicht enthalten",
6 | "wordSimilarToUsername": "Das Passwort darf den Benutzernamen nicht enthalten",
7 | "wordTwoCharacterClasses": "Bitte Buchstaben und Ziffern verwenden",
8 | "wordRepetitions": "Zu viele Wiederholungen",
9 | "wordSequences": "Das Passwort enthält Buchstabensequenzen",
10 | "wordLowercase": "Bitte mindestens einen Kleinbuchstaben verwenden",
11 | "wordUppercase": "Bitte mindestens einen Großbuchstaben verwenden",
12 | "word": "Bitte mindestens einen Buchstaben verwenden",
13 | "wordOneNumber": "Bitte mindestens eine Ziffern verwenden",
14 | "wordOneSpecialChar": "Bitte mindestens ein Sonderzeichen verwenden",
15 | "errorList": "Fehler:",
16 | "veryWeak": "Sehr schwach",
17 | "weak": "Schwach",
18 | "normal": "Normal",
19 | "medium": "Mittel",
20 | "strong": "Stark",
21 | "veryStrong": "Sehr stark"
22 | }
23 |
--------------------------------------------------------------------------------
/cps/static/js/libs/pwstrength/locales/el.json:
--------------------------------------------------------------------------------
1 | {
2 | "wordMinLength": "Ο κωδικός πρόσβασης δεν έχει τον ελάχιστο αριθμό χαρακτήρων",
3 | "wordMaxLength": "Ο κωδικός πρόσβασής σας είναι πολύ μεγάλος",
4 | "wordInvalidChar": "Ο κωδικός πρόσβασής σας περιέχει έναν μη έγκυρο χαρακτήρα",
5 | "wordNotEmail": "Μη χρησιμοποιείτε το email ως κωδικό",
6 | "wordSimilarToUsername": "Ο κωδικός πρόσβασης δεν πρέπει να περιέχει το username",
7 | "wordTwoCharacterClasses": "Χρησιμοποιήστε διαφορετικές κλάσεις χαρακτήρων",
8 | "wordRepetitions": "Πολλές επαναλήψεις",
9 | "wordSequences": "Ο κωδικός πρόσβασης περιέχει επαναλήψεις",
10 | "errorList": "Σφάλματα:",
11 | "veryWeak": "Πολύ Αδύνατος",
12 | "weak": "Αδύνατος",
13 | "normal": "Κανονικός",
14 | "medium": "Μέτριος",
15 | "strong": "Δυνατός",
16 | "veryStrong": "Πολύ Δυνατός"
17 | }
18 |
--------------------------------------------------------------------------------
/cps/static/js/libs/pwstrength/locales/en.json:
--------------------------------------------------------------------------------
1 | {
2 | "wordMinLength": "Your password is too short",
3 | "wordMaxLength": "Your password is too long",
4 | "wordInvalidChar": "Your password contains an invalid character",
5 | "wordNotEmail": "Do not use your email as your password",
6 | "wordSimilarToUsername": "Your password cannot contain your username",
7 | "wordTwoCharacterClasses": "Use different character classes",
8 | "wordRepetitions": "Too many repetitions",
9 | "wordSequences": "Your password contains sequences",
10 | "wordLowercase": "Use at least one lowercase character",
11 | "word": "Use at least one character",
12 | "wordUppercase": "Use at least one uppercase character",
13 | "wordOneNumber": "Use at least one number",
14 | "wordOneSpecialChar": "Use at least one special character",
15 | "errorList": "Errors:",
16 | "veryWeak": "Very Weak",
17 | "weak": "Weak",
18 | "normal": "Normal",
19 | "medium": "Medium",
20 | "strong": "Strong",
21 | "veryStrong": "Very Strong"
22 | }
23 |
--------------------------------------------------------------------------------
/cps/static/js/libs/pwstrength/locales/eo.json:
--------------------------------------------------------------------------------
1 | {
2 | "wordMinLength": "Via pasvorto estas tro mallonga",
3 | "wordMaxLength": "Via pasvorto estas tro longa",
4 | "wordInvalidChar": "Via pasvorto enhavas nevalidan karaktero",
5 | "wordNotEmail": "Ne uzu vian retpoŝtadreson kiel la pasvorton",
6 | "wordSimilarToUsername": "Via pasvorto enhavas vian uzanto-nomon",
7 | "wordTwoCharacterClasses": "Uzu signojn de diversaj tipoj (ekz., literoj kaj ciferoj)",
8 | "wordRepetitions": "Tro multaj ripetiĝantaj signoj",
9 | "wordSequences": "Via pasvorto enhavas simplan sinsekvon de signoj",
10 | "errorList": "Eraroj:",
11 | "veryWeak": "Trosimpla",
12 | "weak": "Malforta",
13 | "normal": "Mezforta",
14 | "medium": "Akceptebla",
15 | "strong": "Forta",
16 | "veryStrong": "Elstare Forta"
17 | }
18 |
--------------------------------------------------------------------------------
/cps/static/js/libs/pwstrength/locales/es.json:
--------------------------------------------------------------------------------
1 | {
2 | "wordMinLength": "Tu contraseña es demasiado corta",
3 | "wordMaxLength": "Tu contraseña es muy larga",
4 | "wordInvalidChar": "Tu contraseña contiene un carácter no válido",
5 | "wordNotEmail": "No uses tu email como tu contraseña",
6 | "wordSimilarToUsername": "Tu contraseña no puede contener tu nombre de usuario",
7 | "wordTwoCharacterClasses": "Mezcla diferentes clases de caracteres",
8 | "wordRepetitions": "Demasiadas repeticiones",
9 | "wordSequences": "Tu contraseña contiene secuencias",
10 | "errorList": "Errores:",
11 | "veryWeak": "Muy Débil",
12 | "weak": "Débil",
13 | "normal": "Normal",
14 | "medium": "Media",
15 | "strong": "Fuerte",
16 | "veryStrong": "Muy Fuerte"
17 | }
18 |
--------------------------------------------------------------------------------
/cps/static/js/libs/pwstrength/locales/fr.json:
--------------------------------------------------------------------------------
1 | {
2 | "wordMinLength": "Votre mot de passe est trop court",
3 | "wordMaxLength": "Votre mot de passe est trop long",
4 | "wordInvalidChar": "Votre mot de passe contient un caractère invalide",
5 | "wordNotEmail": "Ne pas utiliser votre adresse e-mail comme mot de passe",
6 | "wordSimilarToUsername": "Votre mot de passe ne peut pas contenir votre nom d'utilisateur",
7 | "wordTwoCharacterClasses": "Utilisez différents type de caractères",
8 | "wordRepetitions": "Trop de répétitions",
9 | "wordSequences": "Votre mot de passe contient des séquences",
10 | "errorList": "Erreurs:",
11 | "veryWeak": "Très Faible",
12 | "weak": "Faible",
13 | "normal": "Normal",
14 | "medium": "Moyen",
15 | "strong": "Fort",
16 | "veryStrong": "Très Fort"
17 | }
18 |
--------------------------------------------------------------------------------
/cps/static/js/libs/pwstrength/locales/it.json:
--------------------------------------------------------------------------------
1 | {
2 | "wordMinLength": "La tua password è troppo corta",
3 | "wordMaxLength": "La tua password è troppo lunga",
4 | "wordInvalidChar": "La tua password contiene un carattere non valido",
5 | "wordNotEmail": "Non usare la tua e-mail come password",
6 | "wordSimilarToUsername": "La tua password non può contenere il tuo nome",
7 | "wordTwoCharacterClasses": "Usa classi di caratteri diversi",
8 | "wordRepetitions": "Troppe ripetizioni",
9 | "wordSequences": "La tua password contiene sequenze",
10 | "errorList": "Errori:",
11 | "veryWeak": "Molto debole",
12 | "weak": "Debole",
13 | "normal": "Normale",
14 | "medium": "Media",
15 | "strong": "Forte",
16 | "veryStrong": "Molto forte"
17 | }
18 |
--------------------------------------------------------------------------------
/cps/static/js/libs/pwstrength/locales/no.json:
--------------------------------------------------------------------------------
1 | {
2 | "wordMinLength": "Ditt passord er for kort",
3 | "wordMaxLength": "Ditt passord er for langt",
4 | "wordInvalidChar": "Ditt passord inneholder et ugyldig tegn",
5 | "wordNotEmail": "Ikke bruk din epost som ditt passord",
6 | "wordSimilarToUsername": "Ditt passord er for likt ditt brukernavn",
7 | "wordTwoCharacterClasses": "Bruk en kombinasjon av bokstaver, tall og andre tegn",
8 | "wordRepetitions": "For mange repitisjoner",
9 | "wordSequences": "Ditt passord inneholder repeterende tegn",
10 | "errorList": "Feil:",
11 | "veryWeak": "Veldig Svakt",
12 | "weak": "Svakt",
13 | "normal": "Normal",
14 | "medium": "Medium",
15 | "strong": "Sterkt",
16 | "veryStrong": "Veldig Sterkt"
17 | }
18 |
--------------------------------------------------------------------------------
/cps/static/js/libs/pwstrength/locales/pl.json:
--------------------------------------------------------------------------------
1 | {
2 | "wordMinLength": "Hasło jest zbyt krótkie",
3 | "wordMaxLength": "Hasło jest za długie",
4 | "wordInvalidChar": "Hasło zawiera nieprawidłowy znak",
5 | "wordNotEmail": "Hasło nie może być Twoim emailem",
6 | "wordSimilarToUsername": "Hasło nie może zawierać nazwy użytkownika",
7 | "wordTwoCharacterClasses": "Użyj innych klas znaków",
8 | "wordRepetitions": "Zbyt wiele powtórzeń",
9 | "wordSequences": "Hasło zawiera sekwencje",
10 | "errorList": "Błędy:",
11 | "veryWeak": "Bardzo słabe",
12 | "weak": "Słabe",
13 | "normal": "Normalne",
14 | "medium": "Średnie",
15 | "strong": "Silne",
16 | "veryStrong": "Bardzo silne"
17 | }
18 |
--------------------------------------------------------------------------------
/cps/static/js/libs/pwstrength/locales/pt.json:
--------------------------------------------------------------------------------
1 | {
2 | "wordMinLength": "Sua senha é muito curta",
3 | "wordMaxLength": "Sua senha é muito longa",
4 | "wordInvalidChar": "Sua senha contém um caractere inválido",
5 | "wordNotEmail": "Não use seu e-mail como senha",
6 | "wordSimilarToUsername": "Sua senha não pode conter o seu nome de usuário",
7 | "wordTwoCharacterClasses": "Use diferentes classes de caracteres",
8 | "wordRepetitions": "Muitas repetições",
9 | "wordSequences": "Sua senha contém sequências",
10 | "errorList": "Erros:",
11 | "veryWeak": "Muito Fraca",
12 | "weak": "Fraca",
13 | "normal": "Normal",
14 | "medium": "Média",
15 | "strong": "Forte",
16 | "veryStrong": "Muito Forte"
17 | }
18 |
--------------------------------------------------------------------------------
/cps/static/js/libs/pwstrength/locales/ru.json:
--------------------------------------------------------------------------------
1 | {
2 | "wordMinLength": "Слишком короткий пароль",
3 | "wordMaxLength": "Ваш пароль слишком длинный",
4 | "wordInvalidChar": "Ваш пароль содержит недопустимый символ",
5 | "wordNotEmail": "Не используйте e-mail в качестве пароля",
6 | "wordSimilarToUsername": "Пароль не должен содержать логин",
7 | "wordTwoCharacterClasses": "Используйте разные классы символов",
8 | "wordRepetitions": "Слишком много повторений",
9 | "wordSequences": "Пароль содержит последовательности",
10 | "errorList": "Ошибки:",
11 | "veryWeak": "Очень слабый",
12 | "weak": "Слабый",
13 | "normal": "Нормальный",
14 | "medium": "Средний",
15 | "strong": "Сильный",
16 | "veryStrong": "Очень сильный"
17 | }
18 |
--------------------------------------------------------------------------------
/cps/static/js/libs/pwstrength/locales/sk.json:
--------------------------------------------------------------------------------
1 | {
2 | "wordMinLength": "Vaše heslo je príliž krátke",
3 | "wordMaxLength": "Vaše heslo je príliš dlhé",
4 | "wordInvalidChar": "Vaše heslo obsahuje neplatný znak",
5 | "wordNotEmail": "Nepoužívajte Váš email ako Vaše heslo",
6 | "wordSimilarToUsername": "Vaše heslo nesmie obsahovať prihlasovacie meno",
7 | "wordTwoCharacterClasses": "Použite rôzne druhy znakov",
8 | "wordRepetitions": "Príliš veľa opakovaní",
9 | "wordSequences": "Vaše heslo obsahuje postupnosť",
10 | "errorList": "Chyby:",
11 | "veryWeak": "Veľmi slabé",
12 | "weak": "Slabé",
13 | "normal": "Normálne",
14 | "medium": "Stredne silné",
15 | "strong": "Silné",
16 | "veryStrong": "Veľmi silné"
17 | }
18 |
--------------------------------------------------------------------------------
/cps/static/js/libs/pwstrength/locales/th.json:
--------------------------------------------------------------------------------
1 | {
2 | "wordMinLength": "รหัสผ่านของคุณสั้นเกินไป",
3 | "wordMaxLength": "รหัสผ่านของคุณยาวเกินไป",
4 | "wordInvalidChar": "รหัสผ่านของคุณมีอักษรที่ไม่ถูกต้อง",
5 | "wordNotEmail": "คุณไม่สามารถใช้รหัสผ่านเหมือนกับอีเมล์ของคุณได้",
6 | "wordSimilarToUsername": "รหัสผ่านไม่ควรประกอบด้วยคำที่เป็น username",
7 | "wordTwoCharacterClasses": "ลองเป็นกลุ่มคำใหม่",
8 | "wordRepetitions": "มีอักษรซ้ำเยอะเกินไป",
9 | "wordSequences": "รหัสผ่านของคุณเดาง่ายเกินไป",
10 | "errorList": "Errors:",
11 | "veryWeak": "เดาง่ายมาก",
12 | "weak": "เดาง่าย",
13 | "normal": "พอใช้",
14 | "medium": "กำลังดี",
15 | "strong": "ค่อนข้างดี",
16 | "veryStrong": "ดีมาก"
17 | }
18 |
--------------------------------------------------------------------------------
/cps/static/js/libs/pwstrength/locales/tr.json:
--------------------------------------------------------------------------------
1 | {
2 | "wordMinLength": "Girdiğiniz şifre çok Kısa",
3 | "wordMaxLength": "Parolanız çok uzun",
4 | "wordInvalidChar": "Şifreniz geçersiz bir karakter içeriyor",
5 | "wordNotEmail": "E-mail adresinizi şifreniz içerisinde kullanmayınız",
6 | "wordSimilarToUsername": "Kullanıcı Adınızı şifreniz içerisinde kullanmayınız",
7 | "wordTwoCharacterClasses": "Başka karakter sınıfı kullanınız",
8 | "wordRepetitions": "Çok fazla tekrar var",
9 | "wordSequences": "Şifreniz Dizi içermektedir",
10 | "errorList": "Hatalar:",
11 | "veryWeak": "Çok Zayıf",
12 | "weak": "Zayıf",
13 | "normal": "Normal",
14 | "medium": "Orta",
15 | "strong": "Güçlü",
16 | "veryStrong": "Çok Güçlü"
17 | }
18 |
--------------------------------------------------------------------------------
/cps/static/js/libs/pwstrength/locales/zh-TW.json:
--------------------------------------------------------------------------------
1 | {
2 | "wordMinLength": "您的密碼太短",
3 | "wordMaxLength": "您的密碼太長",
4 | "wordInvalidChar": "您的密碼包含無效字符",
5 | "wordNotEmail": "不要使用電子郵件作為密碼",
6 | "wordSimilarToUsername": "您的密碼不能包含您的用戶名",
7 | "wordTwoCharacterClasses": "使用不同的字元類型 例如: 大小寫混合",
8 | "wordRepetitions": "太多的重複。例如:1111",
9 | "wordSequences": "你的密碼包含連續英/數字 例如:123 or abc",
10 | "errorList": "錯誤:",
11 | "veryWeak": "非常弱",
12 | "weak": "弱",
13 | "normal": "普通",
14 | "medium": "中等",
15 | "strong": "強",
16 | "veryStrong": "非常強"
17 | }
18 |
--------------------------------------------------------------------------------
/cps/static/js/libs/tinymce/plugins/code/plugin.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | *
7 | * Version: 5.10.0 (2021-10-11)
8 | */
9 | !function(){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("code",function(e){var t,o;function n(){return o.execCommand("mceCodeEditor")}return(t=e).addCommand("mceCodeEditor",function(){var n,e;e=(n=t).getContent({source_view:!0}),n.windowManager.open({title:"Source Code",size:"large",body:{type:"panel",items:[{type:"textarea",name:"code"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{code:e},onSubmit:function(e){var t=n,o=e.getData().code;t.focus(),t.undoManager.transact(function(){t.setContent(o)}),t.selection.setCursorLocation(),t.nodeChanged(),e.close()}})}),(o=e).ui.registry.addButton("code",{icon:"sourcecode",tooltip:"Source code",onAction:n}),o.ui.registry.addMenuItem("code",{icon:"sourcecode",text:"Source code",onAction:n}),{}})}();
--------------------------------------------------------------------------------
/cps/static/js/libs/tinymce/skins/ui/oxide/content.mobile.min.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | */
7 | .tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection{background-color:green;display:inline-block;opacity:.5;position:absolute}body{-webkit-text-size-adjust:none}body img{max-width:96vw}body table img{max-width:95%}body{font-family:sans-serif}table{border-collapse:collapse}
8 |
--------------------------------------------------------------------------------
/cps/static/js/libs/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/static/js/libs/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff
--------------------------------------------------------------------------------
/cps/static/js/libs/tinymce/skins/ui/oxide/skin.shadowdom.min.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | */
7 | body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;-ms-scroll-chaining:none;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}
8 |
--------------------------------------------------------------------------------
/cps/static/js/reading/djvu_reader.js:
--------------------------------------------------------------------------------
1 | /* This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web)
2 | * Copyright (C) 2021 Ozzieisaacs
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 |
18 | var DJVU_CONTEXT = {
19 | background: "#666",
20 | uiHideDelay: 1500,
21 | };
22 |
--------------------------------------------------------------------------------
/cps/static/js/reading/locationchange-polyfill.js:
--------------------------------------------------------------------------------
1 | // register new event emitter locationchange that fires on urlchange
2 | // source: https://stackoverflow.com/a/52809105/21941129
3 | (() => {
4 | let oldPushState = history.pushState;
5 | history.pushState = function pushState() {
6 | let ret = oldPushState.apply(this, arguments);
7 | window.dispatchEvent(new Event('locationchange'));
8 | return ret;
9 | };
10 |
11 | let oldReplaceState = history.replaceState;
12 | history.replaceState = function replaceState() {
13 | let ret = oldReplaceState.apply(this, arguments);
14 | window.dispatchEvent(new Event('locationchange'));
15 | return ret;
16 | };
17 |
18 | window.addEventListener('popstate', () => {
19 | window.dispatchEvent(new Event('locationchange'));
20 | });
21 | })();
22 |
--------------------------------------------------------------------------------
/cps/static/standard_fonts/FoxitDingbats.pfb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/static/standard_fonts/FoxitDingbats.pfb
--------------------------------------------------------------------------------
/cps/static/standard_fonts/FoxitFixed.pfb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/static/standard_fonts/FoxitFixed.pfb
--------------------------------------------------------------------------------
/cps/static/standard_fonts/FoxitFixedBold.pfb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/static/standard_fonts/FoxitFixedBold.pfb
--------------------------------------------------------------------------------
/cps/static/standard_fonts/FoxitFixedBoldItalic.pfb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/static/standard_fonts/FoxitFixedBoldItalic.pfb
--------------------------------------------------------------------------------
/cps/static/standard_fonts/FoxitFixedItalic.pfb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/static/standard_fonts/FoxitFixedItalic.pfb
--------------------------------------------------------------------------------
/cps/static/standard_fonts/FoxitSerif.pfb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/static/standard_fonts/FoxitSerif.pfb
--------------------------------------------------------------------------------
/cps/static/standard_fonts/FoxitSerifBold.pfb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/static/standard_fonts/FoxitSerifBold.pfb
--------------------------------------------------------------------------------
/cps/static/standard_fonts/FoxitSerifBoldItalic.pfb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/static/standard_fonts/FoxitSerifBoldItalic.pfb
--------------------------------------------------------------------------------
/cps/static/standard_fonts/FoxitSerifItalic.pfb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/static/standard_fonts/FoxitSerifItalic.pfb
--------------------------------------------------------------------------------
/cps/static/standard_fonts/FoxitSymbol.pfb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/static/standard_fonts/FoxitSymbol.pfb
--------------------------------------------------------------------------------
/cps/static/standard_fonts/LiberationSans-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/static/standard_fonts/LiberationSans-Bold.ttf
--------------------------------------------------------------------------------
/cps/static/standard_fonts/LiberationSans-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/static/standard_fonts/LiberationSans-BoldItalic.ttf
--------------------------------------------------------------------------------
/cps/static/standard_fonts/LiberationSans-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/static/standard_fonts/LiberationSans-Italic.ttf
--------------------------------------------------------------------------------
/cps/static/standard_fonts/LiberationSans-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/static/standard_fonts/LiberationSans-Regular.ttf
--------------------------------------------------------------------------------
/cps/string_helper.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web)
4 | # Copyright (C) 2024 OzzieIsaacs
5 | #
6 | # This program is free software: you can redistribute it and/or modify
7 | # it under the terms of the GNU General Public License as published by
8 | # the Free Software Foundation, either version 3 of the License, or
9 | # (at your option) any later version.
10 | #
11 | # This program is distributed in the hope that it will be useful,
12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | # GNU General Public License for more details.
15 | #
16 | # You should have received a copy of the GNU General Public License
17 | # along with this program. If not, see .
18 | import re
19 |
20 |
21 | def strip_whitespaces(text):
22 | return re.sub(r"(^[\s\u200B-\u200D\ufeff]+)|([\s\u200B-\u200D\ufeff]+$)","", text)
23 |
24 |
--------------------------------------------------------------------------------
/cps/tasks/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/tasks/__init__.py
--------------------------------------------------------------------------------
/cps/templates/basic_index.html:
--------------------------------------------------------------------------------
1 | {% extends "basic_layout.html" %}
2 | {% block body %}
3 |
4 |
16 |
17 | {% if entries|length < 1 %}
18 | {{_('No Results Found')}}
19 | {% endif %}
20 |
21 | {% for entry in entries %}
22 | {% if entry.Books.authors %}
23 | {% set author = entry.Books.authors[0].name.replace('|',',')|shortentitle(30) %}
24 | {% else %}
25 | {% set author = '' %}
26 | {% endif %}
27 |
28 | {{ author }} - {{entry.Books.title|shortentitle}}
29 |
30 | {% endfor %}
31 |
32 | {% endblock %}
33 |
--------------------------------------------------------------------------------
/cps/templates/book_exists_flash.html:
--------------------------------------------------------------------------------
1 |
2 | {{entry.title|shortentitle}}
3 |
4 |
--------------------------------------------------------------------------------
/cps/templates/fragment.html:
--------------------------------------------------------------------------------
1 | {% import 'image.html' as image %}
2 |
3 | {% block body %}{% endblock %}
4 |
5 | {% block js %}{% endblock %}
6 |
--------------------------------------------------------------------------------
/cps/templates/generate_kobo_auth_url.html:
--------------------------------------------------------------------------------
1 | {% extends "fragment.html" %}
2 | {% block body %}
3 |
4 |
5 | {% if not warning %}
6 | {{_('Open the .kobo/Kobo/Kobo eReader.conf file in a text editor and add (or edit):')}}
7 |
8 | api_endpoint={{url_for("kobo.TopLevelEndpoint", auth_token=auth_token, _external=True)}}
9 | {% else %}
10 | {{warning}}
11 |
{{_('Kobo Token:')}} {{ auth_token }}
12 | {% endif %}
13 |
14 |
15 | {% endblock %}
16 |
--------------------------------------------------------------------------------
/cps/templates/image.html:
--------------------------------------------------------------------------------
1 | {% macro book_cover(book, alt=None) -%}
2 | {%- set image_title = book.title if book.title else book.name -%}
3 | {%- set image_alt = alt if alt else image_title -%}
4 | {% set srcset = book|get_cover_srcset %}
5 |
10 | {%- endmacro %}
11 |
12 | {% macro series(series, alt=None) -%}
13 | {%- set image_alt = alt if alt else image_title -%}
14 | {% set srcset = series|get_series_srcset %}
15 |
20 | {%- endmacro %}
21 |
--------------------------------------------------------------------------------
/cps/templates/osd.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{instance}}
4 | {{instance}}
5 | {{_('Calibre-Web eBook Catalog')}}
6 | Janeczku
7 | https://github.com/janeczku/calibre-web
8 |
10 |
12 | open
13 | {{lang}}
14 | UTF-8
15 | UTF-8
16 |
17 |
--------------------------------------------------------------------------------
/cps/templates/remote_login.html:
--------------------------------------------------------------------------------
1 | {% extends "layout.html" %}
2 | {% block body %}
3 |
4 |
5 |
{{_('Magic Link - Authorise New Device')}}
6 |
7 | {{_('On another device, login and visit:')}}
8 |
10 |
11 | {{_('Once verified, you will automatically be logged in on this device.')}}
12 |
13 |
14 | {{_('This verification link will expire in 10 minutes.')}}
15 |
16 |
17 | {% endblock %}
18 |
19 | {% block js %}
20 |
21 | {% endblock %}
22 |
--------------------------------------------------------------------------------
/cps/translations/cs/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/cs/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/cps/translations/de/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/de/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/cps/translations/el/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/el/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/cps/translations/es/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/es/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/cps/translations/fi/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/fi/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/cps/translations/fr/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/fr/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/cps/translations/gl/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/gl/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/cps/translations/hu/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/hu/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/cps/translations/id/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/id/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/cps/translations/it/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/it/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/cps/translations/ja/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/ja/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/cps/translations/km/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/km/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/cps/translations/ko/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/ko/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/cps/translations/nl/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/nl/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/cps/translations/no/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/no/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/cps/translations/pl/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/pl/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/cps/translations/pt/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/pt/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/cps/translations/pt_BR/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/pt_BR/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/cps/translations/ru/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/ru/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/cps/translations/sk/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/sk/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/cps/translations/sl/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/sl/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/cps/translations/sv/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/sv/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/cps/translations/tr/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/tr/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/cps/translations/uk/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/uk/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/cps/translations/vi/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/vi/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/cps/translations/zh_Hant_TW/LC_MESSAGES/messages.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/cps/translations/zh_Hant_TW/LC_MESSAGES/messages.mo
--------------------------------------------------------------------------------
/exclude.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/janeczku/calibre-web/4dce8abb1de74c919aee9bafcabc66b29d6f3fba/exclude.txt
--------------------------------------------------------------------------------
/optional-requirements.txt:
--------------------------------------------------------------------------------
1 | # GDrive Integration
2 | google-api-python-client>=1.7.11,<2.200.0
3 | gevent>20.6.0,<24.12.0
4 | greenlet>=0.4.17,<3.2.0
5 | httplib2>=0.9.2,<0.23.0
6 | oauth2client>=4.0.0,<4.1.4
7 | uritemplate>=3.0.0,<4.2.0
8 | pyasn1-modules>=0.0.8,<0.7.0
9 | pyasn1>=0.1.9,<0.7.0
10 | PyDrive2>=1.3.1,<1.22.0
11 | PyYAML>=3.12,<6.1
12 | rsa>=3.4.2,<4.10.0
13 |
14 | # Gmail
15 | google-auth-oauthlib>=0.4.3,<1.3.0
16 | google-api-python-client>=1.7.11,<2.200.0
17 |
18 | # goodreads
19 | goodreads>=0.3.2,<0.4.0
20 | python-Levenshtein>=0.12.0,<0.28.0
21 |
22 | # ldap login
23 | python-ldap>=3.0.0,<3.5.0
24 | Flask-SimpleLDAP>=1.4.0,<2.1.0
25 |
26 | # oauth
27 | Flask-Dance>=2.0.0,<7.2.0
28 | SQLAlchemy-Utils>=0.33.5,<0.42.0
29 |
30 | # metadata extraction
31 | rarfile>=3.2,<5.0
32 | scholarly>=1.2.0,<1.8
33 | markdown2>=2.0.0,<2.6.0
34 | html2text>=2020.1.16,<2025.2.26
35 | python-dateutil>=2.1,<2.10.0
36 | beautifulsoup4>=4.0.1,<4.14.0
37 | faust-cchardet>=2.1.18,<2.1.20
38 | py7zr>=0.15.0,<0.21.0
39 | mutagen>=1.40.0,<1.50.0
40 | pycountry>=20.0.0,<25.0.0
41 |
42 | # Comics
43 | natsort>=2.2.0,<8.5.0
44 | comicapi>=2.2.0,<3.3.0
45 |
46 | # Kobo integration
47 | jsonschema>=3.2.0,<4.24.0
48 |
--------------------------------------------------------------------------------
/qodana.yaml:
--------------------------------------------------------------------------------
1 | #-------------------------------------------------------------------------------#
2 | # Qodana analysis is configured by qodana.yaml file #
3 | # https://www.jetbrains.com/help/qodana/qodana-yaml.html #
4 | #-------------------------------------------------------------------------------#
5 | version: "1.0"
6 |
7 | #Specify inspection profile for code analysis
8 | profile:
9 | name: qodana.starter
10 |
11 | #Enable inspections
12 | #include:
13 | # - name:
14 |
15 | #Disable inspections
16 | #exclude:
17 | # - name:
18 | # paths:
19 | # -
20 |
21 | #Execute shell command before Qodana execution (Applied in CI/CD pipeline)
22 | #bootstrap: sh ./prepare-qodana.sh
23 |
24 | #Install IDE plugins before Qodana execution (Applied in CI/CD pipeline)
25 | #plugins:
26 | # - id: #(plugin id can be found at https://plugins.jetbrains.com)
27 |
28 | #Specify Qodana linter for analysis (Applied in CI/CD pipeline)
29 | linter: jetbrains/qodana-python:latest
30 | exclude:
31 | - name: All
32 | paths:
33 | - cps/static/js/libs
34 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | APScheduler>=3.6.3,<3.12.0
2 | Babel>=1.3,<3.0
3 | Flask-Babel>=3.0.0,<4.1.0
4 | Flask-Principal>=0.3.2,<0.5.1
5 | Flask>=1.0.2,<3.2.0
6 | iso-639>=0.4.5,<0.5.0;python_version<'3.12'
7 | pycountry>=20.0.0,<25.0.0;python_version>='3.12'
8 | PyPDF>=3.15.6,<5.5.0
9 | pytz>=2016.10
10 | requests>=2.32.0,<2.33.0
11 | SQLAlchemy>=1.3.0,<2.1.0
12 | tornado>=6.4.2,<6.6
13 | Wand>=0.4.4,<0.7.0
14 | unidecode>=0.04.19,<1.4.0
15 | lxml>=4.9.1,<5.4.0
16 | flask-wtf>=0.14.2,<1.3.0
17 | chardet>=3.0.0,<5.3.0
18 | netifaces-plus>=0.12.0,<0.13.0
19 | urllib3>=1.22,<3.0
20 | Flask-Limiter>=2.3.0,<3.13.0
21 | regex>=2022.3.2,<2025.3.20
22 | bleach>=6.0.0,<6.3.0
23 | python-magic>=0.4.27,<0.5.0
24 | python-magic-bin>=0.4.0,<0.5.0;sys_platform=='win32'
25 | flask-httpAuth>=4.4.0,<5.0.0
26 | cryptography>=39.0.0,<45.0.0
27 |
--------------------------------------------------------------------------------