Showing preview only (8,212K chars total). Download the full file or copy to clipboard to get everything.
Repository: zlsl/flibusta
Branch: main
Commit: a7e8fcccef6e
Files: 109
Total size: 6.3 MB
Directory structure:
gitextract_8w7z8v8t/
├── .gitignore
├── LICENSE
├── README.md
├── application/
│ ├── dbinit.php
│ ├── djvu.php
│ ├── epub.php
│ ├── functions.php
│ ├── init.php
│ ├── modules/
│ │ ├── 404/
│ │ │ ├── index.php
│ │ │ └── module.conf
│ │ ├── author/
│ │ │ ├── index.php
│ │ │ └── module.conf
│ │ ├── authors/
│ │ │ ├── index.php
│ │ │ └── module.conf
│ │ ├── book/
│ │ │ ├── djvu.php
│ │ │ ├── docx.php
│ │ │ ├── epub.php
│ │ │ ├── fb.php
│ │ │ ├── html.php
│ │ │ ├── index.php
│ │ │ ├── mobi.php
│ │ │ ├── module.conf
│ │ │ ├── pdf.php
│ │ │ ├── rtf.php
│ │ │ └── txt.php
│ │ ├── fav/
│ │ │ ├── index.php
│ │ │ └── module.conf
│ │ ├── favlist/
│ │ │ ├── index.php
│ │ │ └── module.conf
│ │ ├── genres/
│ │ │ ├── index.php
│ │ │ └── module.conf
│ │ ├── opds/
│ │ │ ├── index.php
│ │ │ └── module.conf
│ │ ├── primary/
│ │ │ ├── index.php
│ │ │ └── module.conf
│ │ ├── series/
│ │ │ ├── index.php
│ │ │ └── module.conf
│ │ └── service/
│ │ ├── index.php
│ │ └── module.conf
│ ├── opds/
│ │ ├── author.php
│ │ ├── authorsindex.php
│ │ ├── fav.php
│ │ ├── favs.php
│ │ ├── genres.php
│ │ ├── index.php
│ │ ├── list.php
│ │ ├── listgenres.php
│ │ ├── main.php
│ │ ├── search.php
│ │ ├── search_author.php
│ │ ├── search_book.php
│ │ └── sequencesindex.php
│ ├── public/
│ │ ├── bootstrap/
│ │ │ ├── css/
│ │ │ │ ├── bootstrap-grid.css
│ │ │ │ ├── bootstrap-grid.rtl.css
│ │ │ │ ├── bootstrap-reboot.css
│ │ │ │ ├── bootstrap-reboot.rtl.css
│ │ │ │ ├── bootstrap-utilities.css
│ │ │ │ ├── bootstrap-utilities.rtl.css
│ │ │ │ ├── bootstrap.css
│ │ │ │ └── bootstrap.rtl.css
│ │ │ └── js/
│ │ │ ├── bootstrap.bundle.js
│ │ │ ├── bootstrap.esm.js
│ │ │ └── bootstrap.js
│ │ ├── css/
│ │ │ ├── css.css
│ │ │ └── style.css
│ │ ├── extract_author.php
│ │ ├── extract_cover.php
│ │ ├── extract_usr.php
│ │ ├── fb2.php
│ │ ├── index.php
│ │ ├── js/
│ │ │ ├── EMFJS.bundle.js
│ │ │ ├── RTFJS.bundle.js
│ │ │ ├── WMFJS.bundle.js
│ │ │ ├── djvu.js
│ │ │ ├── djvu_viewer.js
│ │ │ ├── pdf.js
│ │ │ └── pdf.worker.js
│ │ ├── opds-opensearch.xml
│ │ ├── opds-opensearch.xml.php
│ │ ├── save_position.php
│ │ └── usr.php
│ ├── renderer.php
│ ├── tools/
│ │ ├── app_db_converter.py
│ │ ├── app_import_sql.sh
│ │ ├── app_reindex.sh
│ │ ├── app_topg
│ │ ├── app_update_zip_list.php
│ │ ├── cleanup_db.sql
│ │ ├── dbinit.sh
│ │ ├── external_services_config/
│ │ │ ├── README.md
│ │ │ ├── docker-compose.yml
│ │ │ ├── external_postgres_init.sql
│ │ │ ├── flibusta.conf
│ │ │ └── flibusta_entrypoint.sh
│ │ └── update_vectors.sql
│ └── webroot.php
├── blob/
│ └── 1
├── docker-compose.yml
├── getcovers.sh
├── getsql.sh
├── phpdocker/
│ ├── nginx/
│ │ └── nginx.conf
│ ├── pg/
│ │ ├── Dockerfile
│ │ └── init_db.sql
│ └── php-fpm/
│ ├── Dockerfile
│ ├── php-fpm.conf
│ └── php-ini-overrides.ini
├── secrets/
│ ├── flibusta_pwd.txt
│ └── postgres_admin_pwd.txt
└── update_daily.sh
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
cache/*
Flibusta.Net/*
FlibustaSQL/*
================================================
FILE: LICENSE
================================================
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) 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
this service 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 make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. 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.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
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
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the 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 a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE 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.
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
convey 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 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision 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, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This 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.
================================================
FILE: README.md
================================================
# Docker-контейнер для локальной копии Флибусты.
Отображение книг, поиск по заголовкам, сборникам, авторам, жанрам. Открываются в браузере форматы fb2, docx, rtf, mobi, epub, txt, html. Для fb2 сохраняется позиция чтения.
Возможность создания "книжных полок" для избранных книг, авторов и сборников.
Встроенный сервис OPDS для читалок.
|||||
|---|---|---|---|
## Установка:
1. Установить сервисы docker для вашего сервера.
2. Разместить файлы проекта в каталог на сервере.
3. Для выполнения обновления необходимо разместить фалы дампа Флибусты (*.sql) в каталог FlibustaSQL.
4. Файлы архивов Флибусты (*.zip) необходимо размещать в каталоге Flibusta.Net.
5. Выполнить docker-compose build
6. Выполнить docker-compose up -d
7. Локальный портал будет доступен на порту 27100. Доступен также OPDS каталог: /opds/
8. Выполнить "Обновление базы" через пункт меню "Сервис"
Каталоги FlibustaSQL, cache и их подкаталоги должны иметь права на запись для контейнера. Скрипты в каталоге /application/tools/ должны иметь права на выполнение.
Для обновления базы с новыми файлами выполнить пункты 3, 4, 5, 9
## Переменные окружения для docker-compose (docker-compose environmnet variables):
Параметры базы данных можно определить в docker-compose.yml.
Образ может использовать следующие переменные окружения
1. `FLIBUSTA_DBUSER` user базы данных. По умолчанию (если переменная не определена в файле) flibusta
2. `FLUBUSTA_DBNAME` имя схемы ( инстанса) базы данных. По умолчанию (если переменная не определена в файле) flibusta
3. `FLIBUSTA_DBTYPE` тип базы данных. В текущей версии поддерживается только postgres
4. `FLIBUSTA_DBHOST` имя хоста на которой установлена база данных. В докере по умолчанию совпадает с именем сервиса
определяющего базу данных. По умолчанию postgres
5. `FLIBUSTA_DBPASSWORD` пароль user базы данных. См. обсуждение в следующем абзаце. По умолчанию flibusta
Best practices docker compose не рекомендуют хранить пароль в переменной ( и тем более не рекомендуется задавать пароль в коде).
Для хранения паролей в есть механизм secrets. Можно создать текстовой файл содержащий единственную
строчку с паролем и указать полный путь к нему в глобальном разделе secrets. Обратите внимание на premissions файла - он должен быть
доступен для чтения для php из образа, в идеале только ему. Юзер под которым бежит php-fpm в pool www-data ( user id 82). Это стандартный
user из официального образа. Возможно он не существует на вашей системе. Можно дать числовой uid файлу если нет желания или возможности создать user. достаточно выполнить `sudo chown 82 /path/to/file`
## Конфигурация docker container для работы с reverse proxy и внешним сервером базы данных
Docker compose файл, используемый по умолчанию, поднимает веб сервер и базу данных для локального зеркала Флибусты. Однако, часто вебсервер и база данных уже работают на NAS.
В таком случае можно использовать их и сэкономить ресурсы сервера не поднимая несколько инстансов параллельно. Кроме того, использование централизованного reverse proxy может дать некотрые дополнительные преимущества. Папка application/tools/external_services_config
содержит необходимые скрипты и конфигурационные файлы для работы в такой конфигурации, а [README](application/tools/external_services_config/README.md) описывает процесс конфигурации.
================================================
FILE: application/dbinit.php
================================================
<?php
$dbname = getenv('FLIBUSTA_DBNAME')?getenv('FLIBUSTA_DBNAME'):'flibusta';
$dbhost = getenv('FLIBUSTA_DBHOST')?getenv('FLIBUSTA_DBHOST'):'postgres';
$dbuser = getenv('FLIBUSTA_DBUSER')?getenv('FLIBUSTA_DBUSER'):'flibusta';
if (getenv('FLIBUSTA_DBPASSWORD_FILE')){
$dbpasswd = file_get_contents(getenv('FLIBUSTA_DBPASSWORD_FILE'));
if ($dbpasswd) $dbpasswd = trim($dbpasswd);
}
if (empty($dbpasswd))
$dbpasswd = getenv('FLIBUSTA_DBPASSWORD')?getenv('FLIBUSTA_DBPASSWORD'):'flibusta';
$dbtype = getenv('FLIBUSTA_DBTYPE')?trim(strtolower(getenv('FLIBUSTA_DBTYPE'))):'postgres';
if ($dbtype != 'postgres') { // check for valid type, currently only postgress is supported, but in the future others e.g. mysql will be added
error_log('unsupported db type '.$dbtype.', reverting to postgress');
$dbtype = 'postgres';
}
$dsn = match($dbtype) {
'postgres' => "pgsql:host=".$dbhost.";dbname=".$dbname.";options='--client_encoding=UTF8'",
// dsn for supported db types should be added here
default => "pgsql:host=".$dbhost.";dbname=".$dbname.";options='--client_encoding=UTF8'"
};
try {
$dbh = new PDO($dsn, $dbuser, $dbpasswd);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbh->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
} catch(Exception $e) {
print_r($e);
}
?>
================================================
FILE: application/djvu.php
================================================
<?PHP
// $Id$
// $Author$
// Class: FreeMED.Djvu
//
// Wrapper class to handle Djvu documents.
//
class Djvu {
var $filename;
// Constructor: Djvu
//
// Parameters:
//
// $filename - Filename of source DjVu file.
//
function Djvu ( $filename ) {
$this->filename = $filename;
if (!file_exists($filename)) { die ("Djvu: file does not exist \"$filename\""); }
} // end constructor
// Method: NumberOfPages
//
// Returns:
//
// Number of pages in the current Djvu document.
//
function NumberOfPages ( ) {
$filename = $this->filename;
// Get basic info dump from file
$info = `djvudump "$filename" | grep "Document directory"`;
// If no info, one page
if (empty($info)) { return 1; }
// Split down to page number
$_h1 = explode(", ", $info);
$_h2 = explode(" ", trim($_h1[1]));
// Return next to last segment
return $_h2[count($_h2)-2];
} // end method NumberOfPages
// Method: GetPage
//
// Get page image
//
// Parameters:
//
// $page - Page number to return
//
// $contents - (optional) Boolean, return the contents instead of the
// filename. Defaults to false.
//
// $force_ps - (optional) Boolean, force no JPEG conversion. Defaults
// to false.
//
// $force_rotate - (optional) Boolean, force 90 degree rotation
//
// Returns:
//
// Either JPEG image of file in string or name of temporary file.
//
function GetPage ( $page, $contents = false, $force_ps = false, $force_rotation = true ) {
$filename = $this->filename;
$s = $size."x".$size;
$_t = tempnam('/tmp', 'fmdjvu');
$rotate = $force_rotation ? " -rotate 90 " : "";
if ($force_ps) {
// No conversion ...
$t = $_t.'.ps';
$temp = `djvups -page=$page "$filename" | /usr/bin/convert - ${rotate} "$t"`;
} else {
// Force convert to JPEG
$t = $_t.'.jpg';
$temp = `djvups -page=$page "$filename" | /usr/bin/convert - ${rotate} "$t"`;
}
if ($contents) {
ob_start();
readfile($t);
$c = ob_get_contents();
ob_end_clean();
unlink ($_t);
unlink ($t);
return $c;
} else {
unlink ($_t);
return $t;
}
} // end method GetPage
// Method: GetPageThumbnail
//
// Get textual content of a page thumbnail.
//
// Parameters:
//
// $page - Page number
//
// $size - (optional) Maximum dimension of thumbnail. Defaults to 300 (px).
//
// Returns:
//
// String containing JPEG thumbnail of specified page.
//
function GetPageThumbnail ( $page, $size=300 ) {
$filename = $this->filename;
$s = $size."x".$size;
$_t = tempnam('/tmp', 'fmdjvu');
$t = $_t.'.jpg';
$temp = `djvups -page=$page "$filename" | convert - -scale $s "$t"`;
$temp = `djvups -page=$page "$filename" | convert - "$t"`;
ob_start();
readfile($t);
$contents = ob_get_contents();
ob_end_clean();
unlink ($_t);
unlink ($t);
return $contents;
} // end method GetPageThumbnail
// Method: StoredChunks
//
// Get list of chunks contained in the parent DjVu file.
//
// Returns:
//
// Array of chunk names.
//
function StoredChunks ( ) {
$filename = $this->filename;
$raw = `djvm -l "$filename"`;
// deal by line
$lines = explode("\n", $raw);
foreach ($lines as $__garbage => $line) {
if (eregi('PAGE #', $line)) {
// Split out contents ....
$_h1 = explode('#', $line);
$_h2 = explode(' ', trim($_h1[1]));
$pages[] = trim($_h2[count($_h2) - 1]);
}
}
return $pages;
} // end method StoredChunks
} // end class Djvu
================================================
FILE: application/epub.php
================================================
<?php
/**
* PHP EPub Meta library
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
class EPub {
public $xml; //FIXME change to protected, later
protected $xpath;
protected $file;
protected $meta;
protected $namespaces;
protected $imagetoadd='';
/**
* Constructor
*
* @param string $file path to epub file to work on
* @throws Exception if metadata could not be loaded
*/
public function __construct($file){
// open file
$this->file = $file;
$zip = new ZipArchive();
if(!@$zip->open($this->file)){
throw new Exception('Failed to read epub file');
}
// read container data
$data = $zip->getFromName('META-INF/container.xml');
if($data == false){
throw new Exception('Failed to access epub container data');
}
$xml = new DOMDocument();
$xml->registerNodeClass('DOMElement','EPubDOMElement');
$xml->loadXML($data);
$xpath = new EPubDOMXPath($xml);
$nodes = $xpath->query('//n:rootfiles/n:rootfile[@media-type="application/oebps-package+xml"]');
$this->meta = $nodes->item(0)->attr('full-path');
// load metadata
$data = $zip->getFromName($this->meta);
if(!$data){
throw new Exception('Failed to access epub metadata');
}
$this->xml = new DOMDocument();
$this->xml->registerNodeClass('DOMElement','EPubDOMElement');
$this->xml->loadXML($data);
$this->xml->formatOutput = true;
$this->xpath = new EPubDOMXPath($this->xml);
$zip->close();
}
/**
* file name getter
*/
public function file(){
return $this->file;
}
/**
* Writes back all meta data changes
*/
public function save(){
$zip = new ZipArchive();
$res = @$zip->open($this->file, ZipArchive::CREATE);
if($res === false){
throw new Exception('Failed to write back metadata');
}
$zip->addFromString($this->meta,$this->xml->saveXML());
// add the cover image
if($this->imagetoadd){
$path = dirname('/'.$this->meta).'/php-epub-meta-cover.img'; // image path is relative to meta file
$path = ltrim($path,'/');
$zip->addFromString($path,file_get_contents($this->imagetoadd));
$this->imagetoadd='';
}
$zip->close();
}
/**
* Get or set the book author(s)
*
* Authors should be given with a "file-as" and a real name. The file as
* is used for sorting in e-readers.
*
* Example:
*
* array(
* 'Pratchett, Terry' => 'Terry Pratchett',
* 'Simpson, Jacqeline' => 'Jacqueline Simpson',
* )
*
* @params array $authors
*/
public function Authors($authors=false){
// set new data
if($authors !== false){
// Author where given as a comma separated list
if(is_string($authors)){
if($authors == ''){
$authors = array();
}else{
$authors = explode(',',$authors);
$authors = array_map('trim',$authors);
}
}
// delete existing nodes
$nodes = $this->xpath->query('//opf:metadata/dc:creator[@opf:role="aut"]');
foreach($nodes as $node) $node->delete();
// add new nodes
$parent = $this->xpath->query('//opf:metadata')->item(0);
foreach($authors as $as => $name){
if(is_int($as)) $as = $name; //numeric array given
$node = $parent->newChild('dc:creator',$name);
$node->attr('opf:role', 'aut');
$node->attr('opf:file-as', $as);
}
$this->reparse();
}
// read current data
$rolefix = false;
$authors = array();
$nodes = $this->xpath->query('//opf:metadata/dc:creator[@opf:role="aut"]');
if($nodes->length == 0){
// no nodes where found, let's try again without role
$nodes = $this->xpath->query('//opf:metadata/dc:creator');
$rolefix = true;
}
foreach($nodes as $node){
$name = $node->nodeValue;
$as = $node->attr('opf:file-as');
if(!$as){
$as = $name;
$node->attr('opf:file-as',$as);
}
if($rolefix){
$node->attr('opf:role','aut');
}
$authors[$as] = $name;
}
return $authors;
}
/**
* Set or get the book title
*
* @param string $title
*/
public function Title($title=false){
return $this->getset('dc:title',$title);
}
/**
* Set or get the book's language
*
* @param string $lang
*/
public function Language($lang=false){
return $this->getset('dc:language',$lang);
}
/**
* Set or get the book' publisher info
*
* @param string $publisher
*/
public function Publisher($publisher=false){
return $this->getset('dc:publisher',$publisher);
}
/**
* Set or get the book's copyright info
*
* @param string $rights
*/
public function Copyright($rights=false){
return $this->getset('dc:rights',$rights);
}
/**
* Set or get the book's description
*
* @param string $description
*/
public function Description($description=false){
return $this->getset('dc:description',$description);
}
/**
* Set or get the book's ISBN number
*
* @param string $isbn
*/
public function ISBN($isbn=false){
return $this->getset('dc:identifier',$isbn,'opf:scheme','ISBN');
}
/**
* Set or get the Google Books ID
*
* @param string $google
*/
public function Google($google=false){
return $this->getset('dc:identifier',$google,'opf:scheme','GOOGLE');
}
/**
* Set or get the Amazon ID of the book
*
* @param string $amazon
*/
public function Amazon($amazon=false){
return $this->getset('dc:identifier',$amazon,'opf:scheme','AMAZON');
}
/**
* Set or get the book's subjects (aka. tags)
*
* Subject should be given as array, but a comma separated string will also
* be accepted.
*
* @param array $subjects
*/
public function Subjects($subjects=false){
// setter
if($subjects !== false){
if(is_string($subjects)){
if($subjects === ''){
$subjects = array();
}else{
$subjects = explode(',',$subjects);
$subjects = array_map('trim',$subjects);
}
}
// delete previous
$nodes = $this->xpath->query('//opf:metadata/dc:subject');
foreach($nodes as $node){
$node->delete();
}
// add new ones
$parent = $this->xpath->query('//opf:metadata')->item(0);
foreach($subjects as $subj){
$node = $this->xml->createElement('dc:subject',htmlspecialchars($subj));
$node = $parent->appendChild($node);
}
$this->reparse();
}
//getter
$subjects = array();
$nodes = $this->xpath->query('//opf:metadata/dc:subject');
foreach($nodes as $node){
$subjects[] = $node->nodeValue;
}
return $subjects;
}
/**
* Read the cover data
*
* Returns an associative array with the following keys:
*
* mime - filetype (usually image/jpeg)
* data - the binary image data
* found - the internal path, or false if no image is set in epub
*
* When no image is set in the epub file, the binary data for a transparent
* GIF pixel is returned.
*
* When adding a new image this function return no or old data because the
* image contents are not in the epub file, yet. The image will be added when
* the save() method is called.
*
* @param string $path local filesystem path to a new cover image
* @param string $mime mime type of the given file
* @return array
*/
public function Cover($path=false, $mime=false){
// set cover
if($path !== false){
// remove current pointer
$nodes = $this->xpath->query('//opf:metadata/opf:meta[@name="cover"]');
foreach($nodes as $node) $node->delete();
// remove previous manifest entries if they where made by us
$nodes = $this->xpath->query('//opf:manifest/opf:item[@id="php-epub-meta-cover"]');
foreach($nodes as $node) $node->delete();
if($path){
// add pointer
$parent = $this->xpath->query('//opf:metadata')->item(0);
$node = $parent->newChild('opf:meta');
$node->attr('opf:name','cover');
$node->attr('opf:content','php-epub-meta-cover');
// add manifest
$parent = $this->xpath->query('//opf:manifest')->item(0);
$node = $parent->newChild('opf:item');
$node->attr('id','php-epub-meta-cover');
$node->attr('opf:href','php-epub-meta-cover.img');
$node->attr('opf:media-type',$mime);
// remember path for save action
$this->imagetoadd = $path;
}
$this->reparse();
}
// load cover
$nodes = $this->xpath->query('//opf:metadata/opf:meta[@name="cover"]');
if(!$nodes->length) return $this->no_cover();
$coverid = (String) $nodes->item(0)->attr('opf:content');
if(!$coverid) return $this->no_cover();
$nodes = $this->xpath->query('//opf:manifest/opf:item[@id="'.$coverid.'"]');
if(!$nodes->length) return $this->no_cover();
$mime = $nodes->item(0)->attr('opf:media-type');
$path = $nodes->item(0)->attr('opf:href');
$path = dirname('/'.$this->meta).'/'.$path; // image path is relative to meta file
$path = ltrim($path,'/');
$zip = new ZipArchive();
if(!@$zip->open($this->file)){
throw new Exception('Failed to read epub file');
}
$data = $zip->getFromName($path);
return array(
'mime' => $mime,
'data' => $data,
'found' => $path
);
}
/**
* A simple getter/setter for simple meta attributes
*
* It should only be used for attributes that are expected to be unique
*
* @param string $item XML node to set/get
* @param string $value New node value
* @param string $att Attribute name
* @param string $aval Attribute value
*/
protected function getset($item,$value=false,$att=false,$aval=false){
// construct xpath
$xpath = '//opf:metadata/'.$item;
if($att){
$xpath .= "[@$att=\"$aval\"]";
}
// set value
if($value !== false){
$value = htmlspecialchars($value);
$nodes = $this->xpath->query($xpath);
if($nodes->length == 1 ){
if($value === ''){
// the user want's to empty this value -> delete the node
$nodes->item(0)->delete();
}else{
// replace value
$nodes->item(0)->nodeValue = $value;
}
}else{
// if there are multiple matching nodes for some reason delete
// them. we'll replace them all with our own single one
foreach($nodes as $n) $n->delete();
// readd them
if($value){
$parent = $this->xpath->query('//opf:metadata')->item(0);
$node = $this->xml->createElement($item,$value);
$node = $parent->appendChild($node);
if($att) $node->attr($att,$aval);
}
}
$this->reparse();
}
// get value
$nodes = $this->xpath->query($xpath);
if($nodes->length){
return $nodes->item(0)->nodeValue;
}else{
return '';
}
}
/**
* Return a not found response for Cover()
*/
protected function no_cover(){
return array(
'data' => base64_decode('R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAEALAAAAAABAAEAAAIBTAA7'),
'mime' => 'image/gif',
'found' => false
);
}
/**
* Reparse the DOM tree
*
* I had to rely on this because otherwise xpath failed to find the newly
* added nodes
*/
protected function reparse() {
$this->xml->loadXML($this->xml->saveXML());
$this->xpath = new EPubDOMXPath($this->xml);
}
}
class EPubDOMXPath extends DOMXPath {
public function __construct(DOMDocument $doc){
parent::__construct($doc);
if(is_a($doc->documentElement, 'EPubDOMElement')){
foreach($doc->documentElement->namespaces as $ns => $url){
$this->registerNamespace($ns,$url);
}
}
}
}
class EPubDOMElement extends DOMElement {
public $namespaces = array(
'n' => 'urn:oasis:names:tc:opendocument:xmlns:container',
'opf' => 'http://www.idpf.org/2007/opf',
'dc' => 'http://purl.org/dc/elements/1.1/'
);
public function __construct($name, $value='', $namespaceURI=''){
list($ns,$name) = $this->splitns($name);
$value = htmlspecialchars($value);
if(!$namespaceURI && $ns){
$namespaceURI = $this->namespaces[$ns];
}
parent::__construct($name, $value, $namespaceURI);
}
/**
* Create and append a new child
*
* Works with our epub namespaces and omits default namespaces
*/
public function newChild($name, $value=''){
list($ns,$local) = $this->splitns($name);
if($ns){
$nsuri = $this->namespaces[$ns];
if($this->isDefaultNamespace($nsuri)){
$name = $local;
$nsuri = '';
}
}
// this doesn't call the construcor: $node = $this->ownerDocument->createElement($name,$value);
$node = new EPubDOMElement($name,$value,$nsuri);
return $this->appendChild($node);
}
/**
* Split given name in namespace prefix and local part
*
* @param string $name
* @return array (namespace, name)
*/
public function splitns($name){
$list = explode(':',$name,2);
if(count($list) < 2) array_unshift($list,'');
return $list;
}
/**
* Simple EPub namespace aware attribute accessor
*/
public function attr($attr,$value=null){
list($ns,$attr) = $this->splitns($attr);
$nsuri = '';
if($ns){
$nsuri = $this->namespaces[$ns];
if(!$this->namespaceURI){
if($this->isDefaultNamespace($nsuri)){
$nsuri = '';
}
}elseif($this->namespaceURI == $nsuri){
$nsuri = '';
}
}
if(!is_null($value)){
if($value === false){
// delete if false was given
if($nsuri){
$this->removeAttributeNS($nsuri,$attr);
}else{
$this->removeAttribute($attr);
}
}else{
// modify if value was given
if($nsuri){
$this->setAttributeNS($nsuri,$attr,$value);
}else{
$this->setAttribute($attr,$value);
}
}
}else{
// return value if none was given
if($nsuri){
return $this->getAttributeNS($nsuri,$attr);
}else{
return $this->getAttribute($attr);
}
}
}
/**
* Remove this node from the DOM
*/
public function delete(){
$this->parentNode->removeChild($this);
}
}
================================================
FILE: application/functions.php
================================================
<?php
function bbc2html($content) {
$search = array (
'/(\[b\])(.*?)(\[\/b\])/',
'/(\[i\])(.*?)(\[\/i\])/',
'/(\[u\])(.*?)(\[\/u\])/',
'/(\[ul\])(.*?)(\[\/ul\])/',
'/(\[li\])(.*?)(\[\/li\])/',
'/(\[url=)(.*?)(\])(.*?)(\[\/url\])/',
'/(\[url\])(.*?)(\[\/url\])/'
);
$replace = array (
'<strong>$2</strong>',
'<em>$2</em>',
'<u>$2</u>',
'<ul>$2</ul>',
'<li>$2</li>',
'<a href="$2" target="_blank">$4</a>',
'<a href="$2" target="_blank">$2</a>'
);
return preg_replace($search, $replace, $content);
}
function show_gpager($page_count, $block_size = 100) {
global $url;
if (isset($_GET['page'])) {
$page = intval($_GET['page']);
} else {
$page = 0;
}
if ($page_count > 1) {
echo "<nav><ul class='pagination pagination-sm'>";
$b1 = $page - $block_size;
$b2 = $block_size + $page;
if ($b1 < 1) {
$b1 = 1;
}
if ($b2 > $page_count) {
$b2 = $page_count;
}
if ($b1 > 1) {
echo "<li class='page-item'><a class='page-link' href='?page=", $b1 - 2, "' aria-label='Previous'><span aria-hidden='true'><i class='fas fa-angle-left'></i></span></a></li>";
}
for ($p = $b1; $p <= $b2; $p++) {
if ($p == $page + 1) {
$pv = 'active';
} else {
$pv = '';
}
echo "<li class='page-item $pv'><a class='page-link' href='?page=", $p - 1, "'>$p</a></li>";
}
$pv = '';
if ($b2 < $page_count) {
echo "<li class='page-item'><a class='page-link' href='?page=", $b2, "' aria-label='Next'><span aria-hidden='true'><i class='fas fa-angle-right'></i></span></a></li>";
}
echo '</ul></nav>';
}
}
function pg_array_parse($literal){
if ($literal == '') return;
preg_match_all('/(?<=^\{|,)(([^,"{]*)|\s*"((?:[^"\\\\]|\\\\(?:.|[0-9]+|x[0-9a-f]+))*)"\s*)(,|(?<!^\{)(?=\}$))/i', $literal, $matches, PREG_SET_ORDER);
$values = [];
foreach ($matches as $match) {
$values[] = $match[3] != '' ? stripcslashes($match[3]) : (strtolower($match[2]) == 'null' ? null : $match[2]);
}
return $values;
}
function to_pg_array($set) {
settype($set, 'array'); // can be called with a scalar or array
$result = array();
foreach ($set as $t) {
if (is_array($t)) {
$result[] = to_pg_array($t);
} else {
$t = str_replace('"', '\\"', $t); // escape double quote
if (! is_numeric($t)) // quote only non-numeric values
$t = '"' .addslashes($t) . '"';
$result[] = $t;
}
}
return '{' . implode(",", $result) . '}'; // format
}
function book_small_pg($book, $webroot='',$full = false) {
global $dbh, $user_uuid;
if (!isset($book->bookid)) {
return;
}
echo "<div class='col-sm-2 col-6 mb-3'>";
echo "<div style='height: 100%' class='cover rounded text-center d-flex align-items-end flex-column'>";
echo "<a class='w-100' href='$webroot/book/view/$book->bookid'>";
echo "<img class='w-100 card-image rounded-top' src='$webroot/extract_cover.php?id=$book->bookid&small' />";
$dt =DateTime::createFromFormat('Y-m-d H:i:se', $book->time)->format('Y-m-d');
if (trim($book->filetype) == 'fb2') {
$ft = 'success';
$fhref = "$webroot/fb2.php?id=$book->bookid";
} else {
$ft = 'secondary';
$fhref = "$webroot/usr.php?id=$book->bookid";
}
if ($book->year != 0) {
$year = $book->year;
} else {
$year = $dt;
}
$stmt = $dbh->prepare("SELECT COUNT(*) cnt FROM fav WHERE user_uuid=:uuid AND bookid=:id");
$stmt->bindParam(":uuid", $user_uuid);
$stmt->bindParam(":id", $book->bookid);
$stmt->execute();
if ($stmt->fetch()->cnt > 0) {
$fav = 'btn-primary';
$fav_url = "?unfav_book=$book->bookid";
} else {
$fav = 'btn-outline-secondary';
$fav_url = "?fav_book=$book->bookid";
}
echo "<div>$book->title</div></a>";
echo "<div class='btn-group w-100 mt-auto' role='group'>";
echo "<button type='button' class='btn btn-outline-secondary btn-sm'>$year</button>";
echo "<a href='$fhref' title='Скачать' type='button' class='btn btn-outline-$ft btn-sm'>$book->filetype</a>";
// echo "<button type='button' class='btn btn-outline-secondary btn-sm'>$book->lang</button>";
echo "<a href='$fav_url' title='В избранное' type='button' class='btn $fav btn-sm'><i class='fas fa-heart'></i></a>";
echo "</div></div></div>\n";
}
function book_info_pg($book, $webroot = '', $full = false) {
global $dbh, $user_uuid;
if (!isset($book->bookid)) {
return;
}
echo "<div class='hic card mb-3' itemscope='' itemtype='http://schema.org/Book'>";
// echo "<div class='card-header'>";
echo "<h4 class='rounded-top' style='background: #d0d0d0;'><a class='book-link' href='$webroot/book/view/$book->bookid'><i class='fas'></i> $book->title</h4></a>";
// echo "</div>";
echo "<div class='card-body'>";
echo "<div class='row'>";
echo "<div class='col-sm-2'>";
echo "<img class='w-100 card-image rounded cover' src='$webroot/extract_cover.php?id=$book->bookid&small' />";
$dt =DateTime::createFromFormat('Y-m-d H:i:se', $book->time)->format('Y-m-d');
if (trim($book->filetype) == 'fb2') {
$ft = 'success';
$fhref = "$webroot/fb2.php?id=$book->bookid";
} else {
$ft = 'secondary';
$fhref = "$webroot/usr.php?id=$book->bookid";
}
if ($book->year != 0) {
$year = $book->year;
} else {
$year = $dt;
}
echo "<div class='btn-group w-100 mt-1' role='group'>";
echo "<button type='button' class='btn btn-outline-secondary btn-sm'>$year</button>";
echo "<a href='$fhref' title='Скачать' type='button' class='btn btn-outline-$ft btn-sm'>$book->filetype</a>";
// echo "<button type='button' class='btn btn-outline-secondary btn-sm'>$book->lang</button>";
if ($user_uuid != '') {
$stmt = $dbh->prepare("SELECT COUNT(*) cnt FROM fav WHERE user_uuid=:uuid AND bookid=:id");
$stmt->bindParam(":uuid", $user_uuid);
$stmt->bindParam(":id", $book->bookid);
$stmt->execute();
if ($stmt->fetch()->cnt > 0) {
$fav = 'btn-primary';
$fav_url = "?unfav_book=$book->bookid";
} else {
$fav = 'btn-outline-secondary';
$fav_url = "?fav_book=$book->bookid";
}
echo "<a href='$fav_url' title='В избранное' type='button' class='btn $fav btn-sm'><i class='fas fa-heart'></i></a>";
}
echo "</div>";
echo "</div><div class='col-sm-10'>";
echo "<div class='authors-list'>";
$stmt = $dbh->prepare("SELECT AvtorId, LastName, FirstName, nickname, middlename, File FROM libavtor a
LEFT JOIN libavtorname USING(AvtorId)
LEFT JOIN libapics USING(AvtorId)
WHERE a.BookId=:id");
$stmt->bindParam(":id", $book->bookid);
$stmt->execute();
while ($a = $stmt->fetch()) {
echo "<div class='badge rounded-pill author'>";
if ($a->file != '') {
echo "<img class='rounded-circle contact' src='$webroot/extract_author.php?id=$a->avtorid' />";
}
echo "<a href='$webroot/author/view/$a->avtorid'>$a->lastname $a->middlename $a->firstname $a->nickname</a>";
echo "</div>";
}
echo "</div>";
echo "<div style='margin-bottom: 3px;'>";
$genres = $dbh->prepare("SELECT GenreId, GenreDesc FROM libgenre
JOIN libgenrelist USING(GenreId)
WHERE BookId=$book->bookid");
$genres->execute();
while ($g = $genres->fetch()) {
echo "<a class='badge bg-success p-1 text-white' href='$webroot/?gid=$g->genreid'>$g->genredesc</a> ";
}
echo "</div>";
echo "<div style='margin-bottom: 3px;'>";
$seq = $dbh->prepare("SELECT SeqId, SeqName, SeqNumb FROM libseq
JOIN libseqname USING(SeqId)
WHERE BookId=:id");
$seq->bindParam(":id", $book->bookid);
$seq->execute();
while ($s = $seq->fetch()) {
echo "<a class='badge bg-danger p-1 text-white' href='$webroot/?sid=$s->seqid'>$s->seqname ";
if ($s->seqnumb > 0) {
echo " $s->seqnumb";
}
echo "</a> ";
}
echo "</div>";
echo "<div style='margin-bottom: 3px;'>";
if ($book->keywords != '') {
$kw = explode(",", $book->keywords);
foreach ($kw as $k) {
echo "<a class='badge bg-secondary p-1 text-white' href='#'>$k</a> ";
}
}
echo "</div>";
echo "<div style='font-size: 0.8em;'>";
if (isset($book->body)) {
if ($full) {
echo "<p>" . trim($book->body) . "</p>";
} else {
echo "<p>" . cut_str(trim(strip_tags($book->body))) . "</p>";
}
}
echo "</div>";
echo "</div>";
echo "</div>";
echo "</div></div>\n";
}
date_default_timezone_set('Europe/Minsk');
date_default_timezone_set('Etc/GMT-3');
setlocale(LC_ALL, 'rus_RUS');
$m_time = explode(" ",microtime());
$m_time = $m_time[0] + $m_time[1];
$starttime = $m_time;
$sql_time = 0;
$cdt = date('Y-m-d H:i:s');
$today_from = date('Y-m-d') . ' 00:00:00';
$today_to = date('Y-m-d') . ' 23:59:59';
function russian_date() {
$translation = array(
"am" => "дп",
"pm" => "пп",
"AM" => "ДП",
"PM" => "ПП",
"Monday" => "Понедельник",
"Mon" => "Пн",
"Tuesday" => "Вторник",
"Tue" => "Вт",
"Wednesday" => "Среда",
"Wed" => "Ср",
"Thursday" => "Четверг",
"Thu" => "Чт",
"Friday" => "Пятница",
"Fri" => "Пт",
"Saturday" => "Суббота",
"Sat" => "Сб",
"Sunday" => "Воскресенье",
"Sun" => "Вс",
"January" => "Января",
"Jan" => "Янв",
"February" => "Февраля",
"Feb" => "Фев",
"March" => "Марта",
"Mar" => "Мар",
"April" => "Апреля",
"Apr" => "Апр",
"May" => "Мая",
"May" => "Мая",
"June" => "Июня",
"Jun" => "Июн",
"July" => "Июля",
"Jul" => "Июл",
"August" => "Августа",
"Aug" => "Авг",
"September" => "Сентября",
"Sep" => "Сен",
"October" => "Октября",
"Oct" => "Окт",
"November" => "Ноября",
"Nov" => "Ноя",
"December" => "Декабря",
"Dec" => "Дек",
"st" => "ое",
"nd" => "ое",
"rd" => "е",
"th" => "ое",
);
if (func_num_args() > 1) {
$timestamp = func_get_arg(1);
return strtr(date(func_get_arg(0), $timestamp), $translation);
} else {
return strtr(date(func_get_arg(0)), $translation);
};
}
/***************************************************************************/
function transliterate($string){
$cyr=array(
"Щ", "Ш", "Ч","Ц", "Ю", "Я", "Ж","А","Б","В",
"Г","Д","Е","Ё","З","И","Й","К","Л","М","Н",
"О","П","Р","С","Т","У","Ф","Х","Ь","Ы","Ъ",
"Э","Є", "Ї","І",
"щ", "ш", "ч","ц", "ю", "я", "ж","а","б","в",
"г","д","е","ё","з","и","й","к","л","м","н",
"о","п","р","с","т","у","ф","х","ь","ы","ъ",
"э","є", "ї","і", " "
);
$lat=array(
"Shch","Sh","Ch","C","Yu","Ya","J","A","B","V",
"G","D","e","e","Z","I","y","K","L","M","N",
"O","P","R","S","T","U","F","H","",
"Y","" ,"E","E","Yi","I",
"shch","sh","ch","c","Yu","Ya","j","a","b","v",
"g","d","e","e","z","i","y","k","l","m","n",
"o","p","r","s","t","u","f","h",
"", "y","" ,"e","e","yi","i", "%20"
);
for($i=0; $i<count($cyr); $i++) {
$c_cyr = $cyr[$i];
$c_lat = $lat[$i];
$string = str_replace($c_cyr, $c_lat, $string);
}
$string =
preg_replace(
"/([qwrtpsdfghklzxcvbnmQWRTPSDFGHKLZXCVBNM]+)[jJ]e/",
"\${1}e", $string);
/* $string =
preg_replace(
"/([qwrtpsdfghklzxcvbnmQWRTPSDFGHKLZXCVBNM]+)[jJ]/",
"\${1}'", $string);*/
$string = preg_replace("/([eyuioaEYUIOA]+)[Kk]h/", "\${1}h", $string);
$string = preg_replace("/^kh/", "h", $string);
$string = preg_replace("/^Kh/", "H", $string);
return $string;
}
function stars($rating, $webroot) {
$fullStar = '<img alt="1" class="star" src="'.$webroot.'/i/s1.png" />';
$emptyStar = '<img alt="0" class="star" src="'.$webroot.'/i/s0.png" />';
$rating = $rating <= 5?$rating:5;
$fullStarCount = (int)$rating;
$emptyStarCount = 5 - $fullStarCount;
$html = str_repeat($fullStar,$fullStarCount);
$html .= str_repeat($emptyStar,$emptyStarCount);
echo $html;
}
/***************************************************************************/
function cut_str($string, $maxlen=700) {
$len = (mb_strlen($string) > $maxlen)
? mb_strripos(mb_substr($string, 0, $maxlen), ' ')
: $maxlen
;
$cutStr = mb_substr($string, 0, $len);
return (mb_strlen($string) > $maxlen)
? $cutStr . '...'
: $cutStr
;
}
/***************************************************************************/
function cut_str2($string, $maxlen=700) {
$len = (mb_strlen($string) > $maxlen)
? mb_strripos(mb_substr($string, 0, $maxlen), ' ')
: $maxlen
;
$cutStr = mb_substr($string, 0, $len);
return $cutStr . $len;
}
/***************************************************************************/
function clean_str($input) {
if (!$input)
return $input;
$input = strip_tags($input);
$input = str_replace ("\n"," ", $input);
$input = str_replace ("\r","", $input);
$input = preg_replace("/[^(\w)|(\x7F-\xFF)|^(_,\-,\.,\;,\@)|(\s)]/", " ", $input);
return $input;
}
/***************************************************************************/
function decode_gurl($webroot,$mobile = false) {
global $last_modified, $url, $robot;
global $sex_post;
$urlx = parse_url(urldecode($_SERVER['REQUEST_URI']));
//remove leading webroot e.g. http://192.168.1.101/flibusta/authors/index.php should produce module= authors
// note this assumes path is not utf-8
$path = $urlx['path'];
if (!empty($webroot) && str_starts_with($path,$webroot) ) {
$path = substr($path, strlen($webroot));
}
list($x, $module, $action, $var1, $var2, $var3) = array_pad(explode('/', $path), 6, null);
$url = new stdClass();
$url->mod = safe_str($module);
$url->action = safe_str($action);
$url->var1 = intval($var1);
$url->var2 = intval($var2);
$url->var3 = intval($var3);
$url->title = '';
$url->description = '';
$url->mod_path = '';
$url->mod_menu = '';
$url->image = '';
$url->noindex = 0;
$url->index = 1;
$url->follow = 1;
$url->module_menu = '';
$url->js = array();
$url->editor = 0;
$url->access = 0;
$url->canonical = '';
$menu = true;
if ($url->mod == '') {
$url->mod ='primary';
}
if (file_exists(ROOT_PATH . 'modules/' . $url->mod . '/module.conf')) {
$last_modified = gmdate('D, d M Y H:i:s', filemtime(ROOT_PATH . 'modules/' . $url->mod . '/index.php')) . ' GMT';
$url->module = ROOT_PATH . 'modules/' . $url->mod . '/index.php';
$url->mod_path = ROOT_PATH . 'modules/' . $url->mod . '/';
include(ROOT_PATH . 'modules/' . $url->mod . '/module.conf');
} else {
$menu = false;
include(ROOT_PATH . 'modules/404/module.conf');
$url->module = ROOT_PATH . 'modules/404/index.php';
$url->mod = '404';
}
if ($url->access > 0) {
// if (!is_admin()) {
include(ROOT_PATH . 'modules/403/module.conf');
$url->module = ROOT_PATH . 'modules/403/index.php';
$url->mod = '403';
$menu = false;
// }
}
if ( (file_exists(ROOT_PATH . 'modules/' . $url->mod . '/module_menu.php')) && ($menu) ) {
$url->module_menu = ROOT_PATH . 'modules/' . $url->mod . '/module_menu.php';
}
return $url;
}
function safe_str($str) {
return ($str)?preg_replace("/[^A-Za-z0-9 -_]/", '', $str):$str;
}
function mobile() {
$devices = array(
"android" => "android.*mobile",
"androidtablet" => "android(?!.*mobile)",
"iphone" => "(iphone|ipod)",
"ipad" => "(ipad)",
"generic" => "(kindle|mobile|mmp|midp|pocket|psp|symbian|smartphone|treo|up.browser|up.link|vodafone|wap|opera mini)"
);
$isMobile = false;
if (isset($_SERVER['HTTP_USER_AGENT'])) {
$userAgent = $_SERVER['HTTP_USER_AGENT'];
} else {
$userAgent = "";
}
if (isset($_SERVER['HTTP_ACCEPT'])) {
$accept = $_SERVER['HTTP_ACCEPT'];
} else {
$accept = '';
}
if (isset($_SERVER['HTTP_X_WAP_PROFILE']) || isset($_SERVER['HTTP_PROFILE'])) {
$isMobile = true;
} elseif (strpos($accept, 'text/vnd.wap.wml') > 0 || strpos($accept, 'application/vnd.wap.xhtml+xml') > 0) {
$isMobile = true;
} else {
foreach ($devices as $device => $regexp) {
if (preg_match("/" . $devices[strtolower($device)] . "/i", $userAgent)) {
$isMobile = true;
}
}
}
return $isMobile;
}
function formatSizeUnits($bytes)
{
if ($bytes >= 1073741824)
{
$bytes = number_format($bytes / 1073741824, 2) . ' GB';
}
elseif ($bytes >= 1048576)
{
$bytes = number_format($bytes / 1048576, 2) . ' MB';
}
elseif ($bytes >= 1024)
{
$bytes = number_format($bytes / 1024, 2) . ' KB';
}
elseif ($bytes > 1)
{
$bytes = $bytes . ' bytes';
}
elseif ($bytes == 1)
{
$bytes = $bytes . ' byte';
}
else
{
$bytes = '0 bytes';
}
return $bytes;
}
function opds_book($b,$webroot = '') {
global $dbh;
echo "\n<entry> <updated>" . $b->time . "</updated>";
echo " <id>tag:book:$b->bookid</id>";
echo " <title>" . htmlspecialchars($b->title) . "</title>";
$ann = $dbh->prepare("SELECT body annotation FROM libbannotations WHERE bookid=:id LIMIT 1");
$ann->bindParam(":id", $b->bookid);
$ann->execute();
if ($tmp = $ann->fetch()) {
$an = $tmp->annotation;
} else {
$an = '';
}
$genres = $dbh->prepare("SELECT genrecode, GenreId, GenreDesc FROM libgenre
JOIN libgenrelist USING(GenreId)
WHERE bookid=:id");
$genres->bindParam(":id", $b->bookid);
$genres->execute();
while ($g = $genres->fetch()) {
echo "<category term='$webroot/subject/" . urlencode($g->genrecode) . "' label='$g->genredesc'/>";
}
$sq = '';
$seq = $dbh->prepare("SELECT SeqId, SeqName, SeqNumb FROM libseq
JOIN libseqname USING(SeqId)
WHERE BookId=:id");
$seq->bindParam(":id", $b->bookid);
$seq->execute();
while ($s = $seq->fetch()) {
$ssq = $s->seqname;
if ($s->seqnumb > 0) {
$ssq .= " ($s->seqnumb) ";
}
$sq .= $ssq;
echo " <link href='$webroot/opds/list?seq_id=".$s->seqid."' rel='related' type='application/atom+xml' title='Все книги серии "$ssq"' />";
}
if ($sq != '') {
$sq = "Сборник: $sq";
}
echo "<author>";
$au = $dbh->prepare("SELECT AvtorId, LastName, FirstName, nickname, middlename, File FROM libavtor a
LEFT JOIN libavtorname USING(AvtorId)
LEFT JOIN libapics USING(AvtorId)
WHERE a.bookid=:id");
$au->bindParam(":id", $b->bookid);
$au->execute();
while ($a = $au->fetch()) {
echo "<name>$a->lastname $a->firstname $a->middlename</name>";
echo "<uri>/opds/author?author_id=$a->avtorid</uri>";
}
echo "</author>";
$au->execute();
while ($a = $au->fetch()) {
echo "\n <link href='$webroot/opds/list?author_id=$a->avtorid' rel='related' type='application/atom+xml' title='Все книги автора $a->lastname $a->firstname $a->middlename' />";
}
echo " <dc:language>" . trim($b->lang) . "</dc:language>";
if ($b->year > 0) {
echo " <dc:issued>$b->year</dc:issued>";
}
// Include the type of the book as <dc:format> element
echo " <dc:format>" . trim($b->filetype) . "</dc:format>";
// Include the size of the book as <dcterms:extent> element using the FileSize attribute from $b
echo " <dcterms:extent>" . formatSizeUnits($b->filesize) . " bytes</dcterms:extent>";
echo "\n <summary type='text'>" . strip_tags($an);
echo "\n $sq ";
echo "\n $b->keywords";
if ($b->year > 0) {
echo "\n Год издания: $b->year";
}
echo "\n Формат: $b->filetype";
echo "\n Язык: $b->lang";
echo "\n Размер: " . formatSizeUnits($b->filesize);
echo "\n </summary>";
echo "\n <link rel='http://opds-spec.org/image/thumbnail' href='$webroot/extract_cover.php?id=$b->bookid' type='image/jpeg'/>";
echo "\n <link rel='http://opds-spec.org/image' href='$webroot/extract_cover.php?id=$b->bookid' type='image/jpeg'/>";
if (trim($b->filetype) == 'fb2') {
$ur = 'fb2';
} else {
$ur = 'usr';
}
echo "\n <link href='$webroot/$ur.php?id=$b->bookid' rel='http://opds-spec.org/acquisition/open-access' type='application/" . trim($b->filetype) . "' />";
echo "\n <link href='$webroot/book/view/$b->bookid' rel='alternate' type='text/html' title='Книга на сайте' />";
echo "</entry>\n";
}
================================================
FILE: application/init.php
================================================
<?php
define('ROOT_PATH', '/application/');
define('RECORDS_PAGE', 10);
define('BOOKS_PAGE', 10);
define('AUTHORS_PAGE', 50);
define('SERIES_PAGE', 50);
define('OPDS_FEED_COUNT', 100);
define('COUNT_BOOKS', true);
include(ROOT_PATH . 'functions.php');
include(ROOT_PATH . 'dbinit.php');
include_once(ROOT_PATH . 'webroot.php');
session_set_cookie_params(3600 * 24 * 31 * 12,"/");
#session_start();
error_reporting(E_ALL);
$cdt = date('Y-m-d H:i:s');
================================================
FILE: application/modules/404/index.php
================================================
<?php
header("HTTP/1.1 404 Not Found");
header("Status: 404 Not Found");
================================================
FILE: application/modules/404/module.conf
================================================
<?php
$url->title = 'Страница не найдена';
#$url->keywords .= '';
header("HTTP/1.0 404 Not Found");
================================================
FILE: application/modules/author/index.php
================================================
<?php
include_once(ROOT_PATH . "webroot.php");
$stmt = $dbh->prepare("SELECT * FROM libavtorname LEFT JOIN libapics USING(AvtorId) WHERE avtorid=:id");
$stmt->bindParam(":id", $url->var1);
$stmt->execute();
$a = $stmt->fetch();
echo "<div class='card mb-3'>";
echo "<div class='card-header'><h3>$a->lastname $a->firstname $a->middlename $a->nickname</h3></div>";
echo "<div class='card-body'><div class='row'>";
echo "<div class='col-sm-2 mb-3'>";
if (isset($a->file)) {
echo "<img src='$webroot/extract_author.php?id=$a->avtorid' style='width: 100%;' class='card-image' /><br />";
}
echo "<a class='btn btn-primary mt-2 w-100' href='$webroot/?aid=$a->avtorid'>Книги автора</a>";
try {
$stmt = $dbh->prepare("SELECT COUNT(*) cnt FROM fav WHERE user_uuid=:uuid AND avtorid=:id");
$stmt->bindParam(":uuid", $user_uuid);
$stmt->bindParam(":id", $a->avtorid);
$stmt->execute();
$is_fav = ($stmt->fetch()->cnt > 0);
if (!$is_fav) {
echo "<a class='btn btn-secondary mt-2 w-100' href='$webroot/?fav_author=$a->avtorid'>В избранное</a>";
} else {
echo "<a class='btn btn-warning mt-2 w-100' href='$webroot/?unfav_author=$a->avtorid'>Из избранного</a>";
}
} catch (PDOException $e) {
//
}
echo "</div>";
echo "<div class='col-sm-10 mb-3'>";
$stmt = $dbh->prepare("SELECT * FROM libaannotations WHERE AvtorId=:id");
$stmt->bindParam(":id", $url->var1);
$stmt->execute();
while ($an = $stmt->fetch()) {
echo "$an->title<br />";
echo "<p>", bbc2html(nl2br($an->body)), "</p>";
}
echo '</div>';
echo "</div></div></div>";
================================================
FILE: application/modules/author/module.conf
================================================
================================================
FILE: application/modules/authors/index.php
================================================
<style>
.c {
background: #eee;
border-radius: 50%;
border-color: #eee;
}
</style>
<?php
include_once(ROOT_PATH . "webroot.php");
$filter2 = "";
$letter = 'А%';
$get = '';
if (isset($_GET['q'])) {
$get = mb_strtolower($_GET['q']);
$letter = '%' . $get;
$_SESSION['authors_letter'] = $get;
}
if (isset($_SESSION['authors_letter'])) {
$get = $_SESSION['authors_letter'];
}
if (isset($_GET['letter'])) {
$get = mb_strtolower($_GET['letter']);
}
if ($get != '') {
$_SESSION['authors_letter'] = $get;
$letter = $get . "%";
} else {
unset($_SESSION['series_letter']);
}
echo "<ul class='pagination'>";
foreach (range(chr(0xC0), chr(0xDF)) as $b) {
$l = iconv('CP1251', 'UTF-8', $b);
if ($l == mb_strtoupper($get)) {
$cc = 'active';
} else {
$cc = '';
}
echo "<li class='page-item $cc'><a class='page-link' href='$webroot/authors/?letter=" . urlencode($l) . "'>$l</a></li>";
}
echo "</ul>";
echo "<ul class='pagination'>";
foreach (range('A', 'Z') as $b) {
$l = iconv('CP1251', 'UTF-8', $b);
if ($l == mb_strtoupper($get)) {
$cc = 'active';
} else {
$cc = '';
}
echo "<li class='page-item $cc'><a class='page-link' href='$webroot/authors/?letter=" . urlencode($l) . "'>$l</a></li>";
}
echo "</ul>";
echo "<form action='$webroot/authors/'>\n";
?>
<div class="input-group mb-3">
<input name="q" type="text" class="form-control" placeholder="Поиск автора" aria-label="Поиск серии" aria-describedby="basic-addon2">
<div class="input-group-append">
<input type='submit' class="btn btn-outline-secondary" value='Поиск' type="button">
</div>
</div>
</form>
<?php
$start = AUTHORS_PAGE * $page;
$stmt = $dbh->prepare("SELECT COUNT(*) cnt FROM libavtorname WHERE lower(libavtorname.lastname) LIKE :letter");
$stmt->bindParam(":letter", $letter);
$stmt->execute();
$cnt = $stmt->fetch()->cnt;
$stmt = $dbh->prepare("SELECT *,
(SELECT COUNT(*) FROM libavtor WHERE libavtor.avtorid=libavtorname.avtorid) cnt
FROM libavtorname
LEFT JOIN libapics USING(AvtorId)
WHERE LOWER(libavtorname.lastname) LIKE :letter
ORDER BY firstname LIMIT " . AUTHORS_PAGE . " OFFSET $start");
$stmt->bindParam(":letter", $letter);
$stmt->execute();
echo '<div class="row">';
show_gpager(ceil($cnt / AUTHORS_PAGE), 5);
while ($a = $stmt->fetch()) {
if ($a->cnt > 0) {
echo "<div class='col col-sm-6 mb-3 d-flex justify-content-between'>";
echo "<a class='mw-100 rounded-pill author' href='$webroot/author/view/$a->avtorid'>";
if ($a->file != '') {
echo "<img class='rounded-circle contact' src='$webroot/extract_author.php?id=$a->avtorid' />";
}
echo " $a->lastname $a->firstname $a->middlename $a->nickname </a>";
echo "<div class='badge bg-secondary'>$a->cnt</div>";
echo "</div>";
}
}
echo "</div>";
show_gpager(ceil($cnt / AUTHORS_PAGE), 5);
================================================
FILE: application/modules/authors/module.conf
================================================
<?php
$url->title = 'Авторы';
================================================
FILE: application/modules/book/djvu.php
================================================
<?php
include_once(ROOT_PATH . "webroot.php");
echo "<script src='$webroot/js/djvu.js'></script>\n";
echo "<script src='$webroot/js/djvu_viewer.js'></script>\n";
?>
<script>
window.ViewerInstance = new DjVu.Viewer();
window.ViewerInstance.render(
document.querySelector("#reader")
);
window.ViewerInstance.configure({
viewMode: 'single', //'continuous',
language: 'ru'
});
window.ViewerInstance.loadDocumentByUrl(url);
window.ViewerInstance.configure({
viewMode: 'single', //'continuous',
language: 'ru'
});
</script>
================================================
FILE: application/modules/book/docx.php
================================================
<?php
include_once(ROOT_PATH . "webroot.php");
echo "<script src='$webroot/js/jszip.min.js'></script>\n";
echo "<script src='$webroot/js/docx-preview.min.js'></script>\n";
?>
<script>
var reader = new FileReader();
fetch(url).then(res => res.arrayBuffer()).then(arrayBuffer => {
docx.renderAsync(arrayBuffer, document.getElementById("reader"));
});
</script>
================================================
FILE: application/modules/book/epub.php
================================================
<?php
echo "<script src='$webroot/js/jszip.min.js'></script>";
echo "<script src='$webroot/js/epub.min.js'></script>";
?>
<script>
const book = ePub({ replacements: 'blobUrl' });
book.open(url, 'epub');
var r = book.renderTo(document.body, {
flow: "scrolled-doc",
manager: "continuous",
// flow: "scrolled",
width: "69%"
});
r.themes.default({
p: {
'font-size': '1.2rem;',
'font-weight': '400;',
'line-height': '1.7;',
'color': '#333;',
'font-family': 'sans-serif;',
'margin-bottom': '15px;'
}
});
var displayed = r.display();
r.reportLocation();
</script>
================================================
FILE: application/modules/book/fb.php
================================================
<script>
var isScrolling;
window.addEventListener('scroll', function ( event ) {
window.clearTimeout( isScrolling );
isScrolling = setTimeout(function() {
console.log( this.scrollY );
var x = new XMLHttpRequest();
x.open("GET", "<?php echo "$webroot/save_position.php?user_uuid=$user_uuid&bookid=$url->var1&pos=";?>"
+ (100 / document.body.scrollHeight * this.scrollY), true);
x.send(null);
}, 66);
}, false);
</script>
<?php
if ($user_uuid != "") {
$stmt = $dbh->prepare("SELECT pos FROM progress WHERE user_uuid=:uuid AND bookid=:id LIMIT 1");
$stmt->bindParam(":uuid", $user_uuid);
$stmt->bindParam(":id", $url->var1);
$stmt->execute();
if ($p = $stmt->fetch()) {
echo "<script>";
echo 'document.addEventListener("DOMContentLoaded", function(event) {';
echo "window.scrollTo(0, (document.body.scrollHeight / 100 *" . $p->pos . "));\n";
echo "});\n";
echo "</script>";
}
}
$content = '';
$data = $zip->getFromName("$url->var1.fb2");
$fb2 = simplexml_load_string($data);
echo ($fb2 ? '' : 'FB2 Parse Error'), PHP_EOL;
$images = array();
foreach ($fb2->binary as $binary) {
$id = $binary->attributes()['id'];
$images["$id"] = $binary;
}
if (isset($fb2->body->section)) {
foreach ($fb2->body->section as $section) {
$s = $section->asXML();
$s = str_replace("<title>", "<subtitle>", $s);
$s = str_replace("</title>", "</subtitle>", $s);
$s = str_replace('<image l:href="#', '<img style="width:100%;" src="', $s);
foreach (array_keys($images) as $i) {
$s = str_replace($i, "data:image/jpeg;base64," . $images[$i], $s);
}
$content .= $s;
}
} else {
$s = $fb2->body->asXML();
$s = str_replace("<title>", "<subtitle>", $s);
$s = str_replace("</title>", "</subtitle>", $s);
$s = str_replace('<image l:href="#', '<img style="width:100%;" src="', $s);
foreach (array_keys($images) as $i) {
$s = str_replace($i, "data:image/jpeg;base64," . $images[$i], $s);
}
$content .= $s;
}
echo str_replace("<p>***</p>", '<div class="divider div-transparent div-dot"></div>', str_replace("section>>", "section>", $content));
================================================
FILE: application/modules/book/html.php
================================================
<script>
var reader = new FileReader();
fetch(url).then(res => res.arrayBuffer()).then(arrayBuffer => {
var td = new TextDecoder("windows-1251");
var htm = td.decode(arrayBuffer);
document.getElementById("reader").insertAdjacentHTML('beforeend', htm);
});
</script>
================================================
FILE: application/modules/book/index.php
================================================
<?php
echo "<script>var url = '$webroot/usr.php?id=$url->var1';</script>";
function nl2p($string) {
$paragraphs = '';
foreach (explode("\n", $string) as $line) {
if (trim($line)) {
$paragraphs .= '<p>' . $line . '</p>';
}
}
return $paragraphs;
}
book_info_pg($book, $webroot, true);
echo "<div class='card card-body p-3'><ul>";
$stmt = $dbh->prepare("SELECT name, text FROM libreviews WHERE bookid=:id ORDER BY time");
$stmt->bindParam(":id", $url->var1);
$stmt->execute();
while ($r = $stmt->fetch()) {
echo "<li><span class='badge bg-secondary'>$r->name</span> " . stripslashes($r->text) . "</li>";
}
echo "</ul></div>";
function str_replace_first($from, $to, $content) {
$from = '/'.preg_quote($from, '/').'/';
return preg_replace($from, $to, $content, 1);
}
$ext = strtolower(trim($book->filetype));
if ($ext == 'fb2') {
$stmt = $dbh->prepare("SELECT * FROM book_zip WHERE $url->var1 BETWEEN start_id AND end_id AND usr=0");
} else {
$stmt = $dbh->prepare("SELECT * FROM book_zip WHERE $url->var1 BETWEEN start_id AND end_id AND usr=1");
}
$stmt->execute();
$zip_name = $stmt->fetch()->filename;
$zip = new ZipArchive();
echo "<div id='reader' class='reader'>";
if ($zip->open(ROOT_PATH . "flibusta/" . $zip_name)) {
if ($ext == 'fb2') {
include('fb.php');
}
if ($ext == 'txt') {
include('txt.php');
}
if ($ext == 'epub') {
include('epub.php');
}
if ($ext == 'pdf') {
include('pdf.php');
}
if ($ext == 'mobi') {
include('mobi.php');
}
if (($ext == 'djvu') || ($ext == 'djv')) {
include('djvu.php');
}
if ($ext == 'rtf') {
include('rtf.php');
}
if ($ext == 'docx') {
include('docx.php');
}
if (($ext == 'html') || ($ext == 'htm')) {
include('html.php');
}
$zip->close();
}
?>
</div>
================================================
FILE: application/modules/book/mobi.php
================================================
<?php
echo "<script src='$webroot/js/mobi.min.js'></script>\n"; ?>
<script>
var reader = new FileReader();
fetch(url).then(res => res.arrayBuffer()).then(arrayBuffer => {
new MobiFile(arrayBuffer).render_to("reader");
});
</script>
================================================
FILE: application/modules/book/module.conf
================================================
<?php
global $url, $book, $dbh;
$stmt = $dbh->prepare("SELECT b.*,
(SELECT Body FROM libbannotations WHERE BookId=b.BookId LIMIT 1) Body
FROM libbook b WHERE bookid=:id LIMIT 1");
$stmt->bindParam(":id", $url->var1);
try {
$stmt->execute();
$book = $stmt->fetch(PDO::FETCH_OBJ);
} catch (Exception $e) {
$protocol = (isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0');
header($protocol . ' 504 Gateway Time-out');
echo "<div class='card m-3 border-danger'><div class='card-header bg-danger'>База данных</div><div class='card-body'>";
echo "<h3>" . $e->getMessage() . "</h3>";
echo "<p>Попробуйте упростить параметры поиска, убрать часть тэгов, направленность. Сервер маленький ^^.</p>";
echo "</div></div>";
}
if (isset($book->bookid)) {
$url->title = $book->title;
}
================================================
FILE: application/modules/book/pdf.php
================================================
<?php
echo "<script src='$webroot/js/pdf.js'></script>\n"; ?>
<script>
var pdfjsLib = window['pdfjs-dist/build/pdf'];
<?php echo "pdfjsLib.GlobalWorkerOptions.workerSrc = '$webroot/js/pdf.worker.js';\n"; ?>
var currPage = 1;
var numPages = 0;
var thePDF = null;
pdfjsLib.getDocument(url).promise.then(function(pdf) {
thePDF = pdf;
numPages = pdf.numPages;
pdf.getPage( 1 ).then( handlePages );
});
function handlePages(page) {
var viewport = page.getViewport( {scale: 1.5} );
viewer = document.getElementById('reader');
var canvas = document.createElement( "canvas" );
canvas.style.display = "block";
var context = canvas.getContext('2d');
viewer.appendChild(canvas);
canvas.height = viewport.height;
canvas.width = viewport.width;
page.render({canvasContext: context, viewport: viewport});
var line = document.createElement("hr");
document.body.appendChild( line );
currPage++;
if ( thePDF !== null && currPage <= numPages ) {
thePDF.getPage( currPage ).then( handlePages );
}
}
</script>
================================================
FILE: application/modules/book/rtf.php
================================================
<?php
echo <<< __HTML
<script src="$webroot/js/WMFJS.bundle.js"></script>
<script src="$webroot/js/EMFJS.bundle.js"></script>
<script src="$webroot/js/RTFJS.bundle.js"></script>
<script>
__HTML
?>
var reader = new FileReader();
fetch(url).then(res => res.arrayBuffer()).then(arrayBuffer => {
RTFJS.loggingEnabled(false);
WMFJS.loggingEnabled(false);
EMFJS.loggingEnabled(false);
const doc = new RTFJS.Document(arrayBuffer);
doc.render().then(html => {
viewer = document.getElementById('reader');
viewer.append(...html);
});
});
</script>
================================================
FILE: application/modules/book/txt.php
================================================
<?php
$content = $zip->getFromName("$url->var1.txt");
if (!mb_detect_encoding($content, 'UTF-8', true)) {
$content =iconv('windows-1251//IGNORE', 'UTF-8//IGNORE', $content);
}
$content = nl2p($content);
echo "<section>";
echo str_replace("<p>***</p>", '<div class="divider div-transparent div-dot"></div>', str_replace("section>>", "section>", $content));
echo "</section>";
================================================
FILE: application/modules/fav/index.php
================================================
<?php
$stmt = $dbh->prepare("SELECT COUNT(*) cnt FROM fav_users");
$stmt->execute();
$fav_count = $stmt->fetch()->cnt;
if ($fav_count == 0) {
die("Книжные полки не определены");
}
$stmt = $dbh->prepare("SELECT *
FROM fav
LEFT JOIN libavtorname USING(AvtorId)
LEFT JOIN libapics USING(AvtorId)
WHERE user_uuid=:uuid AND avtorid IS NOT NULL");
$stmt->bindParam(":uuid", $user_uuid);
try {
$stmt->execute();
} catch (PDOException $e) {
//
}
echo '<div class="row">';
while ($a = $stmt->fetch()) {
echo "<div class='col col-sm-333 mb-3 d-flex justify-content-between'>";
echo "<a class='mw-100 rounded-pill author' href='$webroot/author/view/$a->avtorid'>";
if ($a->file != '') {
echo "<img class='rounded-circle contact' src='$webroot/extract_author.php?id=$a->avtorid' />";
}
echo " $a->lastname $a->firstname $a->middlename $a->nickname </a>";
echo "</div>";
}
echo "</div>";
$stmt = $dbh->prepare("SELECT *
FROM fav
LEFT JOIN libseqname USING(seqid)
WHERE user_uuid=:uuid AND seqid IS NOT NULL");
$stmt->bindParam(":uuid", $user_uuid);
echo '<div class="row">';
echo '<div class="col mb-3">';
echo '<div class="block">';
try {
$stmt->execute();
while ($s = $stmt->fetch()) {
echo "<a class='btn btn-sm btn-dark' href='$webroot/?sid=$s->seqid'>";
echo " $s->seqname </a> ";
}
} catch (PDOException $e) {
print_r($e);
}
echo "</div>";
echo "</div>";
echo "</div>";
$stmt = $dbh->prepare("SELECT DISTINCT b.*
FROM fav f
LEFT JOIN libbook b USING(bookid)
WHERE user_uuid=:uuid AND f.bookid IS NOT NULL");
$stmt->bindParam(":uuid", $user_uuid);
$stmt->execute();
$cnt = $stmt->rowCount();
//show_gpager(ceil($cnt / RECORDS_PAGE), 5);
echo "<div class='contaner'>";
echo "<div class='row equal'>";
$c = 0;
while ($book = $stmt->fetch()) {
$c++;
if ($c > 10) {
// break;
}
book_small_pg($book,$webroot);
}
echo "</div>";
echo "</div>";
//show_gpager(ceil($cnt / RECORDS_PAGE), 5);
================================================
FILE: application/modules/fav/module.conf
================================================
<?php
$url->title = 'Книжная полка - Избранное';
================================================
FILE: application/modules/favlist/index.php
================================================
<?php
echo '<div class="block rounded" style="margin-bottom:8px;"><form action="'.$webroot.'/favlist/">'; ?>
<div class="input-group mb-3">
<input name="new_uuid" type="text" class="form-control" placeholder="Новая полка" aria-label="Новая полка" aria-describedby="basic-addon2">
<div class="input-group-append">
<input type="submit" class="btn btn-outline-secondary" value="Создать">
</div>
</div>
</form>
</div>
<?php
$stmt = $dbh->query("SELECT * FROM fav_users");
echo '<div class="row">';
while ($a = $stmt->fetch()) {
echo "<div class='col-sm-6'>";
echo "<div class='card mb-3'>";
echo "<div class='card-header'>";
echo "<a href='$webroot/fav/?login_uuid=$a->user_uuid'>$a->name</a>";
echo "</div>";
echo "<div class='card-body'>";
$bs = $dbh->prepare("SELECT (SELECT COUNT(*) cnt FROM fav WHERE user_uuid=:uuid AND bookid is not null) bcnt, (SELECT COUNT(*) cnt FROM fav WHERE user_uuid=:uuid AND avtorid is not null) acnt, (SELECT COUNT(*) cnt FROM fav WHERE user_uuid=:uuid AND seqid is not null) scnt");
$bs->bindParam(":uuid", $a->user_uuid);
$bs->execute();
$sta = $bs->fetch();
echo '<ul class="list-group list-group-horizontal">';
echo "<li class='list-group-item flex-fill'>Книг: $sta->bcnt</li>";
echo "<li class='list-group-item flex-fill'>Авторов: $sta->acnt</li>";
echo "<li class='list-group-item flex-fill'>Серий: $sta->scnt</li>";
echo "</ul>";
echo "</div>";
echo "<div class='card-footer'>";
echo "<a class='btn btn-danger btn-sm float-end' href='$webroot/favlist/?delete_uuid=$a->user_uuid'>Удалить</a>";
echo "</div>";
echo "</div>";
echo "</div>";
}
echo "</div>";
================================================
FILE: application/modules/favlist/module.conf
================================================
<?php
$url->title = 'Выбор книжной полки';
================================================
FILE: application/modules/genres/index.php
================================================
<style>
.c {
background: #eee;
border-radius: 50%;
border-color: #eee;
}
</style>
<?php
$stmt = $dbh->prepare("SELECT g.GenreMeta
FROM libgenrelist g
GROUP BY g.GenreMeta
ORDER BY (SELECT COUNT(*) FROM libgenrelist a WHERE g.GenreMeta=a.GenreMeta) DESC");
$stmt->execute();
$cn = 10;
echo "<div class='container'><div class='row'>";
while ($bg = $stmt->fetch()) {
$cn++;
if ($cn > 0) {
$cn = 0;
}
echo "<div class='col-sm-6 mb-3'>";
echo "<div class='card'>";
echo "<div class='card-header'><h3>$bg->genremeta</h3></div>";
echo "<div class='card-body'>";
$st2 = $dbh->prepare("SELECT libgenrelist.genreid, libgenrelist.genremeta, libgenrelist.genredesc,
(SELECT COUNT(*) FROM libgenre WHERE libgenre.GenreId=libgenrelist.GenreId) cnt
FROM libgenrelist
WHERE GenreMeta=:meta
ORDER BY genredesc");
$st2->bindParam(":meta", $bg->genremeta);
$st2->execute();
while ($g = $st2->fetch()) {
echo "<div class='mb-1'>";
echo "<a class='btn btn-outline-primary btn-sm' href='$webroot/?gid=$g->genreid/'>$g->genredesc</a> ";
echo "<a class='btn btn-outline-danger btn-sm' href='$webroot/?xgid=$g->genreid'>Исключить</a>";
echo "<span class='float-sm-end'>$g->cnt</span></div>";
}
echo "</div>";
echo "</div>";
echo "</div>";
}
echo "</div></div>";
================================================
FILE: application/modules/genres/module.conf
================================================
<?php
$url->title = 'Жанры';
================================================
FILE: application/modules/opds/index.php
================================================
================================================
FILE: application/modules/opds/module.conf
================================================
================================================
FILE: application/modules/primary/index.php
================================================
<?php
if (isset($_GET['fb2'])) {
if ($_GET['fb2'] == '') {
unset($_SESSION['fb2']);
} else {
$_SESSION['fb2'] = true;
}
}
if (isset($_GET['ru'])) {
if ($_GET['ru'] == '') {
unset($_SESSION['ru']);
} else {
$_SESSION['ru'] = true;
}
}
if (isset($_GET['q'])) {
if ($_GET['q'] == '') {
unset($_SESSION['search']);
} else {
$get = mb_strtolower($_GET['q']);
$search = str_replace(' ', '&', $get);
$_SESSION['search'] = $search;
}
}
if (isset($_GET['aid'])) {
if ($_GET['aid'] == '') {
unset($_SESSION['filter_author']);
} else {
$_SESSION['filter_author'] = intval($_GET['aid']);
}
}
if (isset($_GET['gid'])) {
if ($_GET['gid'] == '') {
unset($_SESSION['filter_genre']);
} else {
$_SESSION['filter_genre'] = intval($_GET['gid']);
}
}
if (isset($_GET['sid'])) {
if ($_GET['sid'] == '') {
unset($_SESSION['filter_series']);
} else {
$_SESSION['filter_series'] = intval($_GET['sid']);
}
}
if (isset($_GET['xgid'])) {
if ($_GET['xgid'] == '') {
unset($_SESSION['filter_xgenre']);
} else {
if ($_SESSION['filter_genre'] == intval($_GET['xgid'])) {
unset($_SESSION['filter_genre']);
}
$_SESSION['filter_xgenre'] = intval($_GET['xgid']);
}
}
$filter = '';
$fcontent = '';
$join = '';
$cols = '';
$fcontent .= '<div class="btn-group mt-1 me-1" role="group">';
if (isset($_SESSION['fb2'])) {
$filter .= "AND filetype='fb2' ";
$fcontent .= "<a class='btn bg-dark text-white bg-opacity-90 text-white' href='$webroot/?fb2'>Только FB2</a> ";
} else {
$fcontent .= "<a class='btn bg-dark text-white bg-opacity-50 text-white' href='$webroot/?fb2=1'>Все форматы</a> ";
}
if (isset($_SESSION['ru'])) {
$filter .= "AND lang='ru' ";
$fcontent .= "<a class='btn bg-success text-white bg-opacity-90 text-white' href='$webroot/?ru'>На русском</a> ";
} else {
$fcontent .= "<a class='btn bg-success text-white bg-opacity-50 text-white' href='$webroot/?ru=1'>Все языки</a> ";
}
$fcontent .= '</div>';
if (isset($_SESSION['filter_author'])) {
$do_cnt = true;
$filter .= 'AND avtorid=:aid ';
$join .= 'LEFT JOIN libavtor a USING(BookId) ';
$stmt = $dbh->prepare("SELECT * FROM libavtorname
LEFT JOIN libapics USING(AvtorId)
WHERE AvtorId=:id");
$stmt->bindParam(":id", $_SESSION['filter_author']);
$stmt->execute();
$a = $stmt->fetch();
$fcontent .= "<div class='badge rounded-pill author'>";
if ($a->file != '') {
$fcontent .= "<img class='rounded-circle contact' src='$webroot/extract_author.php?id=$a->avtorid' />";
}
$fcontent .= "<a href='$webroot/?aid'>$a->lastname $a->firstname $a->middlename $a->nickname</a> <i class='fas fa-times-circle'></i></div> ";
}
if (isset($_SESSION['filter_genre'])) {
$filter .= 'AND g.genreid=:gid ';
$join .= 'LEFT JOIN libgenre g USING(BookId) ';
$stmt = $dbh->prepare("SELECT * FROM libgenrelist
WHERE genreid=:id");
$stmt->bindParam(":id", $_SESSION['filter_genre']);
$stmt->execute();
$g = $stmt->fetch();
$fcontent .= "<div class='badge bg-success p-1 text-white'>";
$fcontent .= "<a class='text-white' href='$webroot/?xgid=$g->genreid'>$g->genremeta: $g->genredesc <i class='fas fa-times-circle'></i></a></div> ";
}
if (isset($_SESSION['filter_xgenre'])) {
$filter .= 'AND (SELECT COUNT(*) FROM libgenre xg WHERE xg.BookId=B.BookId AND xg.genreid=:xgid) = 0';
$stmt = $dbh->prepare("SELECT * FROM libgenrelist
WHERE genreid=:id");
$stmt->bindParam(":id", $_SESSION['filter_xgenre']);
$stmt->execute();
$xg = $stmt->fetch();
$fcontent .= "<div class='badge bg-secondary p-1 text-white'>";
$fcontent .= "<a style='text-decoration: line-through;' class='text-white' href='$webroot/?xgid'>$xg->genremeta: $xg->genredesc <i class='fas fa-times-circle'></i></a></div> ";
}
if (isset($_SESSION['filter_series'])) {
$do_cnt = true;
$cols = 's.seqnumb,';
$filter .= 'AND seqid=:sid ';
$join .= 'LEFT JOIN libseq s USING(BookId) ';
$stmt = $dbh->prepare("SELECT * FROM libseqname
WHERE seqid=:id");
$stmt->bindParam(":id", $_SESSION['filter_series']);
$stmt->execute();
$s = $stmt->fetch();
$fcontent .= "<div class='badge bg-danger p-1 text-white'>";
$fcontent .= "<a class='text-white' href='$webroot/?sid'>$s->seqname <i class='fas fa-times-circle'></i></a></div> ";
$order = "s.seqnumb, $order";
$seqname = $s->seqname;
$seqid = $_SESSION['filter_series'];
}
if (isset($_SESSION['search'])) {
$filter .= "AND vector @@ to_tsquery('russian', :search) ";
$join .= 'LEFT JOIN libbook_ts USING(bookid) ';
$fcontent .= "<div class='badge bg-success p-1 text-white'>";
$fcontent .= "<a class='text-white' href='$webroot/?q'>" . $_SESSION['search'] . " <i class='fas fa-times-circle'></i></a></div> ";
}
if (isset($_SESSION['filter_series'])) {
$fcontent .= "<a class='btn btn-sm btn-info float-end' href='$webroot/?fav_seq=$seqid'>$seqname в Избранное</a> ";
}
echo "<div class='block rounded' style='margin-bottom:8px;'>";
echo "<form action='$webroot/'>";
?>
<div class="input-group mb-3">
<input name="q" type="text" class="form-control" placeholder="Поиск по названию" aria-label="Поиск серии" aria-describedby="basic-addon2">
<div class="input-group-append">
<input type='submit' class="btn btn-outline-secondary" value='Поиск' type="button">
</div>
</div>
</form>
<?php
echo $fcontent;
echo "</div>";
$sql = "SELECT *, $cols
(SELECT Body FROM libbannotations WHERE BookId=b.BookId LIMIT 1) Body
FROM libbook b
$join
WHERE deleted='0'
$filter
ORDER BY $order LIMIT " . RECORDS_PAGE . " OFFSET $start";
//echo "$sql";
$stmt = $dbh->prepare($sql);
if (isset($_SESSION['filter_author'])) {
$stmt->bindParam(":aid", $_SESSION['filter_author']);
}
if (isset($_SESSION['filter_genre'])) {
$stmt->bindParam(":gid", $_SESSION['filter_genre']);
}
if (isset($_SESSION['filter_xgenre'])) {
$stmt->bindParam(":xgid", $_SESSION['filter_xgenre']);
}
if (isset($_SESSION['filter_series'])) {
$stmt->bindParam(":sid", $_SESSION['filter_series']);
}
if (isset($_SESSION['search'])) {
$stmt->bindParam(":search", $_SESSION['search']);
}
try {
$stmt->execute();
} catch (Exception $e) {
$protocol = (isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0');
header($protocol . ' 504 Gateway Time-out');
echo "<div class='card m-3 border-danger'><div class='card-header bg-danger'>База данных</div><div class='card-body'>";
echo "<h3>" . $e->getMessage() . "</h3>";
echo "<p>Попробуйте упростить параметры поиска, убрать часть тэгов, направленность. Сервер маленький ^^.</p>";
echo "</div></div>";
}
if (COUNT_BOOKS) {
$sql = "SELECT COUNT(*) cnt
FROM libbook b
$join
WHERE deleted='0'
$filter";
$stt = $dbh->prepare($sql);
if (isset($_SESSION['filter_author'])) {
$stt->bindParam(":aid", $_SESSION['filter_author']);
}
if (isset($_SESSION['filter_genre'])) {
$stt->bindParam(":gid", $_SESSION['filter_genre']);
}
if (isset($_SESSION['filter_xgenre'])) {
$stt->bindParam(":xgid", $_SESSION['filter_xgenre']);
}
if (isset($_SESSION['filter_series'])) {
$stt->bindParam(":sid", $_SESSION['filter_series']);
}
if (isset($_SESSION['search'])) {
$stt->bindParam(":search", $_SESSION['search']);
}
$stt->execute();
$cnt = $stt->fetch()->cnt;
echo "<span class='badge bg-primary mb-1'>Найдено: $cnt</span> ";
} else {
$cnt = 2000;
}
$rcnt = $stmt->rowCount();
if ($rcnt < RECORDS_PAGE) {
$cnt = $page * RECORDS_PAGE + $rcnt;
}
show_gpager(ceil($cnt / RECORDS_PAGE), 5);
$c = 0;
while ($book = $stmt->fetch()) {
$c++;
if ($c > 10) {
break;
}
book_info_pg($book, $webroot);
}
show_gpager(ceil($cnt / RECORDS_PAGE), 5);
================================================
FILE: application/modules/primary/module.conf
================================================
================================================
FILE: application/modules/series/index.php
================================================
<style>
.c {
background: #eee;
border-radius: 50%;
border-color: #eee;
}
</style>
<?php
$filter2 = "";
$letter = 'А%';
$get = '';
if (isset($_GET['q'])) {
$get = mb_strtolower($_GET['q']);
$letter = '%' . $get;
$_SESSION['series_letter'] = $get;
}
if (isset($_SESSION['series_letter'])) {
$get = $_SESSION['series_letter'];
}
if (isset($_GET['letter'])) {
$get = mb_strtolower($_GET['letter']);
}
if ($get != '') {
$_SESSION['series_letter'] = $get;
$letter = $get . "%";
} else {
unset($_SESSION['series_letter']);
}
echo "<ul class='pagination'>";
foreach (range(chr(0xC0), chr(0xDF)) as $b) {
$l = iconv('CP1251', 'UTF-8', $b);
if ($l == mb_strtoupper($get)) {
$cc = 'active';
} else {
$cc = '';
}
echo "<li class='page-item $cc'><a class='page-link' href='$webroot/series/?letter=" . urlencode($l) . "'>$l</a></li>";
}
echo "</ul>";
echo "<ul class='pagination'>";
foreach (range('A', 'Z') as $b) {
$l = iconv('CP1251', 'UTF-8', $b);
if ($l == mb_strtoupper($get)) {
$cc = 'active';
} else {
$cc = '';
}
echo "<li class='page-item $cc'><a class='page-link' href='$webroot/series/?letter=" . urlencode($l) . "'>$l</a></li>";
}
echo "</ul>";
echo "<form action='$webroot/series/'>\n";
?>
<div class="input-group mb-3">
<input name="q" type="text" class="form-control" placeholder="Поиск серии" aria-label="Поиск серии" aria-describedby="basic-addon2">
<div class="input-group-append">
<input type='submit' class="btn btn-outline-secondary" value='Поиск' type="button">
</div>
</div>
</form>
<?php
$start = SERIES_PAGE * $page;
$stmt = $dbh->prepare("SELECT COUNT(*) cnt FROM libseqname WHERE lower(libseqname.SeqName) LIKE :letter");
$stmt->bindParam(":letter", $letter);
$stmt->execute();
$cnt = $stmt->fetch()->cnt;
$stmt = $dbh->prepare("SELECT SeqName, SeqId,
(SELECT COUNT(*) FROM libseq WHERE libseq.SeqId=libseqname.SeqId) cnt
FROM libseqname
WHERE LOWER(libseqname.SeqName) LIKE :letter
ORDER BY seqname LIMIT " . SERIES_PAGE . " OFFSET $start");
$stmt->bindParam(":letter", $letter);
$stmt->execute();
echo '<div class="row">';
show_gpager(ceil($cnt / SERIES_PAGE), 5);
while ($bs = $stmt->fetch()) {
if ($bs->cnt > 0) {
echo "<div class='col col-sm-6 mb-3 d-flex justify-content-between'><a class='mw-100 text-dark' href='$webroot/?sid=$bs->seqid'>$bs->seqname</a><span class='badge bg-secondary'>$bs->cnt</span></div>";
}
}
echo "</div>";
show_gpager(ceil($cnt / SERIES_PAGE), 5);
================================================
FILE: application/modules/series/module.conf
================================================
<?php
$url->title = 'Жанры';
================================================
FILE: application/modules/service/index.php
================================================
<div class='row'>
<div class="col-sm-6">
<div class='card'>
<h4 class="rounded-top p-1" style="background: #d0d0d0;">Статистика</h4>
<div class='card-body'>
<?php
$status_import = (trim(shell_exec('ps aux|grep app_|grep -v grep') ?? '') !== '');
function get_ds($path){
$io = popen ( '/usr/bin/du -sk ' . $path, 'r' );
$size = fgets ( $io, 4096);
$size = substr ( $size, 0, strpos ( $size, "\t" ) );
pclose ( $io );
return round($size / 1024, 1);
}
if (!$status_import) {
$cache_size = get_ds("/application/cache/covers") + get_ds("/application/cache/authors");
$books_size = round(get_ds("/application/flibusta") / 1024, 1);
$qtotal = $dbh->query("SELECT (SELECT MAX(time) FROM libbook) mmod, (SELECT COUNT(*) FROM libbook) bcnt, (SELECT COUNT(*) FROM libbook WHERE deleted='0') bdcnt");
$qtotal->execute();
$total = $qtotal->fetch();
echo "<table class='table'><tbody>";
echo "<tr><td>Актуальность базы:</td><td>$total->mmod</td></tr>";
echo "<tr><td>Всего произведений:</td><td>$total->bcnt</td></tr>";
echo "<tr><td>Размер архива:</td><td>$books_size Gb</td></tr>";
echo "<tr><td>Размер кэша:</td><td>$cache_size Mb</td></tr>";
echo "</tbody></table>";
} else {
echo "Идёт процесс импорта...";
}
?>
</div>
</div>
</div>
<div class="col-sm-6">
<div class='card'>
<h4 class="rounded-top p-1" style="background: #d0d0d0;">Операции</h4>
<div class='card-body'>
<?php
if (isset($_GET['empty'])) {
shell_exec('rm /application/cache/authors/*');
shell_exec('rm /application/cache/covers/*');
header("location:$webroot/service/");
}
if (!$status_import) {
if (isset($_GET['import'])) {
shell_exec('stdbuf -o0 /application/tools/app_import_sql.sh 2>/dev/null >/dev/null &');
$status_fetch = true;
header("location:$webroot/service/");
}
if (isset($_GET['reindex'])) {
shell_exec('stdbuf -o0 /application/tools/app_reindex.sh 2>/dev/null >/dev/null &');
$status_fetch = true;
header("location:$webroot/service/");
}
}
if ($status_import) {
$status = 'disabled';
} else {
$status = '';
}
echo "<div class='d-flex justify-content-between'>";
echo "<a class='btn btn-primary m-1 $status' href='?import=sql'>Обновить базу</a> ";
echo "<a class='btn btn-warning m-1' href='?empty=cache'>Очистить кэш</a> ";
echo "<a class='btn btn-warning m-1' href='?reindex'>Сканирование ZIP</a> ";
echo "</div>";
if ($status_import) {
$op = file_get_contents('/application/sql/status');;
echo "<div class='d-flex align-items-center m-3'>";
echo nl2br($op);
echo "<div class='spinner-border ms-auto' role='status' aria-hidden='true'></div></div>";
header("Refresh:10");
}
?>
</div>
</div>
</div>
</div>
<div class='row'>
<div class="col-sm-12 mt-3">
<div class='card'>
<div class='card-body'>
<p>
Для выполнения обновления необходимо разместить фалы дампа Флибусты (*.sql) в каталог FlibustaSQL. Процесс занимает до 30 минут, в зависимости от быстродействия сервера (SSD значительно увеличивает скорость импорта)
</p>
<p>
Чтобы отображались фото авторов и обложек для форматов, отличных от FB2, необходимо разместить в каталоге cache файлы архивов lib.a.attached.zip и lib.b.attached.zip соответственно.
В кэше хранятся распакованные фото авторов и обложек для FB2, а также их уменьшенные версии.</p>
<p>Файлы архивов Флибусты (*.zip) необходимо размещать в каталоге Flibusta.Net. Обрабатываются также файлы ежедневных обновлений, но обязательно необходимо подгружать свежие SQL файлы.</p>
<?php echo "<p>Доступен также OPDS-каталог для читалок: <a href='$webroot/opds/'>/opds/</a></p>"; ?>
<p><b>Каталоги FlibustaSQL, cache и их подкаталоги должны иметь права на запись для контейнера. Скрипты в каталоге /application/tools/ должны иметь права на выполнение.</b></p>
</div></div></div></div>
================================================
FILE: application/modules/service/module.conf
================================================
<?php
global $url;
$url->title = 'Сервис и настройки';
================================================
FILE: application/opds/author.php
================================================
<?php
header('Content-Type: application/atom+xml; charset=utf-8');
echo '<?xml version="1.0" encoding="utf-8"?>';echo "\n";
echo '<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/terms/" xmlns:os="http://a9.com/-/spec/opensearch/1.1/" xmlns:opds="https://specs.opds.io/opds-1.2">';
$author_id = $_GET['author_id'];
if ($author_id == '')
die('author.php called without specifying id');
$seq_mode = isset($_GET['seq']);
if (! $seq_mode) {
$stmt = $dbh->prepare("SELECT a.LastName as LastName, a.MiddleName as MiddleName, a.FirstName as FirstName, a.NickName as NickName,
aa.Body as Body, p.File as picFile
from libavtorname a
LEFT JOIN libaannotations aa on a.avtorid = aa.avtorid
LEFT JOIN libapics p on a.avtorid=p.avtorid
where a.avtorID=:authorid ");
} else {
$stmt = $dbh->prepare("SELECT LastName, MiddleName, FirstName, NickName from libavtorname where avtorID=:authorid ");
}
$stmt->bindParam(':authorid', $author_id);
$stmt->execute();
if ($a = $stmt->fetchObject()){
$author_name = ($a->nickname !='')?"$a->firstname $a->middlename $a->lastname ($a->nickname)"
:"$a->firstname $a->middlename $a->lastname";
if ($seq_mode) { // show list of sequences with current author's works
echo <<<_XML
<id>tag:author:$author_id:sequences</id>
<title>$author_name : Книги по сериям</title>
<updated>$cdt</updated>
<icon>/favicon.ico</icon>
<link href="$webroot/opds-opensearch.xml.php" rel="search" type="application/opensearchdescription+xml" />
<link href="$webroot/opds/search?by=author&searchTerm={searchTerms}" rel="search" type="application/atom+xml" />
<link href="$webroot/opds" rel="start" type="application/atom+xml;profile=opds-catalog" />
_XML;
$sequences = $dbh->prepare("SELECT distinct sn.seqid seqid, sn.seqname seqname
from libseqname sn, libseq s, libavtor a
where sn.seqid = s.seqid and s.bookId= a.bookId and a.avtorId= :aid");
$sequences->bindParam(":aid", $author_id);
$sequences->execute();
while($seq = $sequences->fetchObject()){
echo "<entry>\n";
echo "<updated>$cdt</updated>\n";
echo "<title>" . htmlspecialchars($seq->seqname ?? '') . "</title>\n";
echo "<link href='$webroot/opds/list?seq_id=$seq->seqid' type='application/atom+xml;profile=opds-catalog' />\n";
echo "</entry>\n";
}
$sequences = null;
} else {
echo <<<_XML
<id>tag:author:$author_id</id>
<title>$author_name</title>
<updated>$cdt</updated>
<icon>/favicon.ico</icon>
<link href="$webroot/opds-opensearch.xml" rel="search" type="application/opensearchdescription+xml" />
<link href="$webroot/opds/search?by=author&searchTerm={searchTerms}" rel="search" type="application/atom+xml" />
<link href="$webroot/opds" rel="start" type="application/atom+xml;profile=opds-catalog" />
_XML;
if ($a->body != '') {
echo <<<_XML
<entry>
<updated>$cdt</updated>
<id>tag:author:bio:$author_id</id>
<title>Об авторе</title>
_XML;
if (!is_null($a->picfile)){
echo <<<_XML
<link href="$webroot/extract_author.php?id=$author_id" rel="http://opds-spec.org/image" type="image/jpeg" />
<link href="$webroot/extract_author.php?id=$author_id" rel="x-stanza-cover-image" type="image/jpeg" />
<link href="$webroot/extract_author.php?id=$author_id" rel="http://opds-spec.org/image/thumbnail" type="image/jpeg" />
<link href="$webroot/extract_author.php?id=$author_id" rel="x-stanza-cover-image-thumbnail" type="image/jpeg" />
_XML;
}
//echo '<content type = "text/html">';
echo '<content type="text/html">';
/* if (!is_null($a->picfile)){
echo "<img src="/extract_author.php?id=$author_id" align=left style="border:5px solid #ededed; margin: 12px;"><p>\n";
}*/
echo $a->body;
echo "\n";
echo <<< _XML
</content>
<link href="$webroot/author/view/$author_id" rel="alternate" type="text/html" title="Страница автора на сайте" />
<link href="$webroot/author/view/$author_id" rel="http://opds-spec.org/acquisition" type="text/html" title="Страница автора на сайте" />
<link href="$webroot/opds/list?author_id=$author_id&display_type=alphabet" rel="http://www.feedbooks.com/opds/facet" type="application/atom+xml;profile=opds-catalog" title="Книги автора по алфавиту" />
<link href="$webroot/opds/author?author_id=$author_id&seq=1" rel="http://www.feedbooks.com/opds/facet" type="application/atom+xml;profile=opds-catalog" title="Книжные серии с произведениями автора" />
<link href="$webroot/opds/list?author_id=$author_id&display_type=sequenceless" rel="http://www.feedbooks.com/opds/facet" type="application/atom+xml;profile=opds-catalog" title="Книги автора вне серий" />
</entry>
_XML;
}
echo <<< _XML
<entry>
<updated>$cdt</updated>
<title>Все книги автора (без сортировки)</title>
<id>tag:author:$author_id:list</id>
<link href="$webroot/opds/list?author_id=$author_id" type="application/atom+xml;profile=opds-catalog" />
</entry>
<entry>
<updated>$cdt</updated>
<title>Книги автора по алфавиту</title>
<id>tag:author:$author_id:alphabet</id>
<link href="$webroot/opds/list?author_id=$author_id&display_type=alphabet" type="application/atom+xml;profile=opds-catalog" />
</entry>
<entry>
<updated>$cdt</updated>
<title>Книги автора по году издания</title>
<id>tag:author:$author_id:year</id>
<link href="$webroot/opds/list?author_id=$author_id&display_type=year" type="application/atom+xml;profile=opds-catalog" />
</entry>
<entry>
<updated>$cdt</updated>
<title>Книжные серии с произведениями автора</title>
<id>tag:author:$author_id:sequences</id>
<link href="$webroot/opds/author?author_id=$author_id&seq=1" type="application/atom+xml;profile=opds-catalog" />
</entry>
<entry>
<updated>$cdt</updated>
<title>Произведения вне серий</title>
<id>tag:author:$author_id:sequenceless</id>
<link href="$webroot/opds/list?author_id=$author_id&display_type=sequenceless" type="application/atom+xml;profile=opds-catalog" />
</entry>
_XML;
}
}
else
die("author with id $author_id not found in the data base");
$stmt = null;
?>
</feed>
================================================
FILE: application/opds/authorsindex.php
================================================
<?php
header('Content-Type: application/atom+xml; charset=utf-8');
$letters = $_GET['letters'] ?? '';
if ($letters !== '') {
$length_letters = mb_strlen($letters, 'UTF-8');
} else {
$length_letters = 0; // Установите подходящее значение по умолчанию
}
echo '<?xml version="1.0" encoding="utf-8"?>';
echo <<< _XML
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/terms/" xmlns:os="http://a9.com/-/spec/opensearch/1.1/" xmlns:opds="http://opds-spec.org/2010/catalog"> <id>tag:root:authors</id>
<title>Книги по авторам</title>
<updated>$cdt</updated>
<icon>/favicon.ico</icon>
<link href="$webroot/opds-opensearch.xml.php" rel="search" type="application/opensearchdescription+xml" />
<link href="$webroot/opds/authorsindex?letters={searchTerms}" rel="search" type="application/atom+xml" />
<link href="$webroot/opds" rel="start" type="application/atom+xml;profile=opds-catalog" />\n
_XML;
$query="
SELECT UPPER(SUBSTR(LastName, 1, ".($length_letters + 1).")) as alpha, COUNT(*) as cnt
FROM libavtorname
WHERE UPPER(SUBSTR(LastName, 1, ".($length_letters + 1).")) SIMILAR TO '".$letters."[A-ZА-Я]'
GROUP BY UPPER(SUBSTR(LastName, 1, ".($length_letters + 1)."))
ORDER BY alpha";
$ai = $dbh->query($query);
while ($ach = $ai->fetchObject()) {
echo "\n<entry> <updated>$cdt</updated>";
echo "<id>tag:authors:$ach->alpha</id>";
echo "<title>$ach->alpha</title>";
echo "<content type='text'>$ach->cnt авторов на $ach->alpha</content>";
if ($ach->cnt>500) {
$url="$webroot/opds/authorsindex?letters=$ach->alpha";
} else {
$url="$webroot/opds/search?by=author&q=$ach->alpha";
}
echo "<link href='$url' type='application/atom+xml;profile=opds-catalog' />";
echo "</entry>";
}
echo '</feed>';
?>
================================================
FILE: application/opds/fav.php
================================================
<?php
header('Content-Type: application/atom+xml; charset=utf-8');
echo '<?xml version="1.0" encoding="utf-8"?>';
echo <<< _XML
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/terms/" xmlns:os="http://a9.com/-/spec/opensearch/1.1/" xmlns:opds="http://opds-spec.org/2010/catalog">
<id>tag:root:home</id>
<title>Книги по авторам</title>
_XML;
echo "<updated>$cdt</updated>";
echo <<< _XML
<icon>/favicon.ico</icon>
<link href="$webroot/opds-opensearch.xml.php" rel="search" type="application/opensearchdescription+xml" />
<link href="$webroot/opds/search?q={searchTerms}" rel="search" type="application/atom+xml" />
<link href="$webroot/opds/" rel="start" type="application/atom+xml;profile=opds-catalog" />
_XML;
echo "<link href=".$webroot.'/opds/fav/?uuid='.$_GET['uuid'].' rel="self" type="application/atom+xml;profile=opds-catalog" />';
$uuid = $_GET['uuid'];
$books = $dbh->prepare("SELECT DISTINCT b.*
FROM fav f
LEFT JOIN libbook b USING(bookid)
WHERE user_uuid=:uuid AND f.bookid IS NOT NULL");
$books->bindParam(":uuid", $uuid);
$books->execute();
while ($b = $books->fetch()) {
opds_book($b, $webroot);
}
echo "</feed>";
?>
================================================
FILE: application/opds/favs.php
================================================
<?php
header('Content-Type: application/atom+xml; charset=utf-8');
echo '<?xml version="1.0" encoding="utf-8"?>';
echo <<< _XML
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/terms/" xmlns:os="http://a9.com/-/spec/opensearch/1.1/" xmlns:opds="http://opds-spec.org/2010/catalog"> <id>tag:root</id>
<title>Книжные полки</title>
_XML;
echo "<updated>$cdt</updated>";
echo <<< _XML
<icon>/favicon.ico</icon>
<link href="$webroot/opds-opensearch.xml.php" rel="search" type="application/opensearchdescription+xml" />
<link href="$webroot/opds/search?q={searchTerms}" rel="search" type="application/atom+xml" />
<link href="$webroot/opds/" rel="start" type="application/atom+xml;profile=opds-catalog" />
<link href="$webroot/opds/favs/" rel="self" type="application/atom+xml;profile=opds-catalog" />
_XML;
$favs = $dbh->prepare("SELECT * FROM fav_users");
$favs->execute();
while ($fav = $favs->fetch()) {
echo "<entry> <updated>$cdt</updated>";
echo " <id>tag:fav:$fav->user_uuid</id>";
echo " <title>$fav->name</title>";
echo " <content type='text'></content>";
echo " <link href='$webroot/opds/fav/?uuid=$fav->user_uuid' type='application/atom+xml;profile=opds-catalog' />";
echo "</entry>";
}
echo '</feed>';
?>
================================================
FILE: application/opds/genres.php
================================================
<?php
header('Content-Type: application/atom+xml; charset=utf-8');
echo '<?xml version="1.0" encoding="utf-8"?>';
echo <<< _XML
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/terms/" xmlns:os="http://a9.com/-/spec/opensearch/1.1/" xmlns:opds="http://opds-spec.org/2010/catalog"> <id>tag:root</id>
<title>Категории жанров</title>
_XML;
echo "<updated>$cdt</updated>";
echo <<< _XML
<icon>/favicon.ico</icon>
<link href="$webroot/opds-opensearch.xml.php" rel="search" type="application/opensearchdescription+xml" />
<link href="$webroot/opds/search?q={searchTerms}" rel="search" type="application/atom+xml" />
<link href="$webroot/opds/" rel="start" type="application/atom+xml;profile=opds-catalog" />
<link href="$webroot/opds/genres/" rel="self" type="application/atom+xml;profile=opds-catalog" />
_XML;
$gs = $dbh->prepare("SELECT DISTINCT(genremeta) genre FROM libgenrelist ORDER BY genre");
$gs->execute();
while ($g = $gs->fetch()) {
echo "<entry> <updated>$cdt</updated>";
echo " <id>tag:genre:" . urlencode($g->genre) . "</id>";
echo " <title>$g->genre</title>";
echo " <content type='text'></content>";
echo " <link href='$webroot/opds/listgenres/?id=" . urlencode($g->genre) . "' type='application/atom+xml;profile=opds-catalog' />";
echo "</entry>\n";
}
echo "</feed>";
?>
================================================
FILE: application/opds/index.php
================================================
<?php
switch ($url->action) {
case 'list':
include('list.php');
break;
case 'authorsindex':
include('authorsindex.php');
break;
case 'author':
include('author.php');
break;
case 'sequencesindex':
include('sequencesindex.php');
break;
case 'genres':
include('genres.php');
break;
case 'listgenres':
include('listgenres.php');
break;
case 'fav':
include('fav.php');
break;
case 'favs':
include('favs.php');
break;
case 'search':
include('search.php');
break;
default:
include('main.php');
}
================================================
FILE: application/opds/list.php
================================================
<?php
header('Content-Type: application/atom+xml; charset=utf-8');
echo '<?xml version="1.0" encoding="utf-8"?>';
$filter = "deleted='0' ";
$join = '';
$orderby = ' time DESC ';
$title = 'в новинках';
if (isset($_GET['genre_id'])) {
$gid = intval($_GET['genre_id']);
$filter .= 'AND genreid=:gid ';
$join .= 'LEFT JOIN libgenre g USING(BookId) ';
$orderby = ' time DESC ';
$stmt = $dbh->prepare("SELECT * FROM libgenrelist
WHERE genreid=:gid");
$stmt->bindParam(":gid", $gid);
$stmt->execute();
$g = $stmt->fetch();
$title = "в $g->genremeta: $g->genredesc";
}
if (isset($_GET['seq_id'])) {
$sid = intval($_GET['seq_id']);
$filter .= 'AND seqid=:sid';
$join .= 'LEFT JOIN libseq s USING(BookId) ';
$orderby = " s.seqnumb ";
$stmt = $dbh->prepare("SELECT * FROM libseqname
WHERE seqid=:sid");
$stmt->bindParam(":sid", $sid);
$stmt->execute();
$s = $stmt->fetch();
$title = "в сборнике $s->seqname";
}
if (isset($_GET['author_id'])) {
$aid = intval($_GET['author_id']);
$filter .= 'AND avtorid=:aid ';
$join .= 'JOIN libavtor USING (bookid) JOIN libavtorname USING (avtorid) ';
$display_type = (isset($_GET['display_type']))? ($_GET['display_type'] ?? '') : '';
if ($display_type == 'sequenceless') {
$filter .= 'AND s.seqid is null ';
$join .= ' LEFT JOIN libseq s ON s.bookId= b.bookId ';
$orderby = ' time DESC ';
} else if ($display_type == 'year'){
$orderby = ' year ';
} else if ($display_type == 'alphabet') {
$orderby = ' title ';
} else {
$orderby = ' time DESC ';
}
$stmt = $dbh->prepare("SELECT * FROM libavtorname WHERE avtorid=:aid");
$stmt->bindParam(":aid", $aid);
$stmt->execute();
$a = $stmt->fetch();
$title = ($a->nickname !='')?"$a->firstname $a->middlename $a->lastname ($a->nickname)"
:"$a->firstname $a->middlename $a->lastname";
}
echo <<< _XML
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/terms/" xmlns:os="http://a9.com/-/spec/opensearch/1.1/" xmlns:opds="http://opds-spec.org/2010/catalog">
<id>tag:root:home</id>
_XML;
echo "<title>Книги $title</title>";
echo "<updated>$cdt</updated>";
echo <<< _XML
<icon>/favicon.ico</icon>
<link href="$webroot/opds-opensearch.xml.php" rel="search" type="application/opensearchdescription+xml" />
<link href="$webroot/opds/search?q={searchTerms}" rel="search" type="application/atom+xml" />
<link href="$webroot/opds/" rel="start" type="application/atom+xml;profile=opds-catalog" />\n
_XML;
$books = $dbh->prepare("SELECT b.*
FROM libbook b
$join
WHERE
$filter
ORDER BY $orderby
LIMIT ". OPDS_FEED_COUNT);
if (isset($_GET['genre_id'])) {
$books->bindParam(":gid", $gid);
}
if (isset($_GET['seq_id'])) {
$books->bindParam(":sid", $sid);
}
if (isset($_GET['author_id'])) {
$books->bindParam(":aid", $aid);
}
$books->execute();
while ($b = $books->fetch()) {
opds_book($b, $webroot);
}
echo "</feed>";
?>
================================================
FILE: application/opds/listgenres.php
================================================
<?php
header('Content-Type: application/atom+xml; charset=utf-8');
echo '<?xml version="1.0" encoding="utf-8"?>';
echo '<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/terms/" xmlns:os="http://a9.com/-/spec/opensearch/1.1/" xmlns:opds="http://opds-spec.org/2010/catalog"> <id>tag:root</id>';
echo "<title>Жанры в ".$_GET['id']."</title>";
echo "<updated>$cdt</updated>";
echo <<< _XML
<icon>/favicon.ico</icon>
<link href="$webroot/opds-opensearch.xml.php" rel="search" type="application/opensearchdescription+xml" />
<link href="$webroot/opds/search?q={searchTerms}" rel="search" type="application/atom+xml" />
<link href="$webroot/opds/" rel="start" type="application/atom+xml;profile=opds-catalog" />
_XML;
$gs = $dbh->prepare("SELECT *,
(SELECT COUNT(*) FROM libgenre WHERE libgenre.genreid=g.genreid) cnt
FROM libgenrelist g
WHERE g.genremeta=:id");
$gs->bindParam(":id", $_GET['id']);
$gs->execute();
while ($g = $gs->fetch()) {
echo "<entry> <updated>$cdt</updated>";
echo " <id>tag:genre:$g->genrecode</id>";
echo " <title>$g->genredesc</title>";
echo " <content type='text'>Книг: $g->cnt</content>";
echo " <link href='$webroot/opds/list/?genre_id=$g->genreid' type='application/atom+xml;profile=opds-catalog' />";
echo "</entry>\n";
}
echo '</feed>';
?>
================================================
FILE: application/opds/main.php
================================================
<?php
header('Content-Type: application/atom+xml; charset=utf-8');
echo '<?xml version="1.0" encoding="utf-8"?>';
echo <<< _XML
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/terms/" xmlns:os="http://a9.com/-/spec/opensearch/1.1/" xmlns:opds="https://specs.opds.io/opds-1.2">
<id>tag:root</id>
<title>Домашняя библиотека</title>
<icon>/favicon.ico</icon>
<link href="$webroot/opds-opensearch.xml.php" rel="search" type="application/opensearchdescription+xml" />
<link href="$webroot/opds/search?q={searchTerms}" rel="search" type="application/atom+xml" />
<link href="$webroot/opds/" rel="start" type="application/atom+xml;profile=opds-catalog" />
<link href="$webroot/opds/" rel="self" type="application/atom+xml;profile=opds-catalog" />
<entry>
<updated>$cdt</updated>
<id>tag:root:new</id>
<title>Новинки</title>
<content type="text">Последние поступления в библиотеку</content>
<link href="$webroot/opds/list/" rel="http://opds-spec.org/sort/new" type="application/atom+xml;profile=opds-catalog" />
<link href="$webroot/opds/list/" type="application/atom+xml;profile=opds-catalog" />
</entry>
<entry>
<updated>$cdt</updated>
<id>tag:root:shelf</id>
<title>Книжные полки</title>
<content type="text">Избранное</content>
<link href="$webroot/opds/favs/" type="application/atom+xml;profile=opds-catalog" />
</entry>
<entry> <updated>$cdt</updated>
<id>tag:root:genre</id>
<title>По жанрам</title>
<content type="text">Поиск книг по жанрам</content>
<link href="$webroot/opds/genres" type="application/atom+xml;profile=opds-catalog" />
</entry>
<entry> <updated>$cdt</updated>
<id>tag:root:authors</id>
<title>По авторам</title>
<content type="text">Поиск книг по авторам</content>
<link href="$webroot/opds/authorsindex" type="application/atom+xml;profile=opds-catalog" />
</entry>
<entry> <updated>$cdt</updated>
<id>tag:root:sequences</id>
<title>По сериям</title>
<content type="text">Поиск книг по сериям</content>
<link href="$webroot/opds/sequencesindex" type="application/atom+xml;profile=opds-catalog" />
</entry>
_XML
?>
</feed>
================================================
FILE: application/opds/search.php
================================================
<?php
$search = $_GET['by'];
switch ($search) {
case 'author':
include('search_author.php');
break;
default:
include('search_book.php');
}
?>
================================================
FILE: application/opds/search_author.php
================================================
<?php
header('Content-Type: application/atom+xml; charset=utf-8');
echo '<?xml version="1.0" encoding="utf-8"?>';
echo <<< _XML
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/terms/" xmlns:os="http://a9.com/-/spec/opensearch/1.1/" xmlns:opds="http://opds-spec.org/2010/catalog"> <id>tag:root:authors</id>
<title>Поиск по авторам</title>
<updated>$cdt</updated>
<icon>/favicon.ico</icon>
<link href="$webroot/opds-opensearch.xml.php" rel="search" type="application/opensearchdescription+xml" />
<link href="$webroot/opds/authorsindex?letters={searchTerm}" rel="search" type="application/atom+xml" />
<link href="$webroot/opds" rel="start" type="application/atom+xml;profile=opds-catalog" />
<entry> <updated>$cdt</updated>
<id>tag:search:author</id>
<title>Поиск авторов</title>
<content type="text">Поиск авторов по фамилии</content>
<link href="$webroot/opds/authorsindex?letters={searchTerm}" type="application/atom+xml;profile=opds-catalog" />
</entry>
_XML;
$q = $_GET['q'];
if ($q == '') {
die(':(');
}
$queryParam = $q . '%';
$authors = $dbh->prepare("SELECT *,
(SELECT COUNT(*) FROM libavtor, libbook WHERE
libbook.deleted='0' AND
libbook.bookid=libavtor.bookid AND
libavtor.avtorid=libavtorname.avtorid) cnt
FROM libavtorname
WHERE lastname ILIKE :q ORDER BY lastname, firstname");
$authors->bindParam(":q", $queryParam);
$authors->execute();
while ($a = $authors->fetch()) {
if ($a->cnt > 0) {
echo "\n<entry> <updated>$cdt</updated>";
echo " <id>tag:author:$a->avtorid</id>";
echo " <title>$a->lastname $a->firstname $a->middlename $a->nickname</title>";
$stmt = $dbh->query("SELECT COUNT(*) as cnt FROM libbook,libavtor WHERE deleted='0' AND libavtor.bookid=libbook.bookid AND libavtor.avtorid=$a->avtorid");
$stmt->execute();
$books_cnt = $stmt->fetch()->cnt;
$stmt = null;
echo " <content type='text'>$books_cnt книг</content>";
echo " <link href='$webroot/opds/author?author_id=$a->avtorid' type='application/atom+xml;profile=opds-catalog' />";
echo '</entry>';
}
}
/*
echo "<div class='mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid'>";
echo '<div class="mdl-grid">';
$seqs = DB::query("SELECT *,
(SELECT COUNT(*) FROM libseq WHERE libseq.seqid=libseqname.SeqId) cnt
FROM libseqname $filter4 ORDER BY seqname");
while ($s = $seqs->fetch_object()) {
if ($s->cnt > 0) {
echo "<div class='mdl-cell--4-col'>";
echo "<span class='mdl-chip' onclick=\"location='/library/seq/$s->SeqId'\">";
echo "<span class='mdl-chip__text'>$s->SeqName</span>";
echo "<span class='mdl-chip__action'>$s->cnt</span>";
echo "</span>";
echo "</div>";
}
}
*/
?>
</feed>
================================================
FILE: application/opds/search_book.php
================================================
<?php
header('Content-Type: application/atom+xml; charset=utf-8');
echo '<?xml version="1.0" encoding="utf-8"?>';
echo <<< _XML
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/terms/" xmlns:os="http://a9.com/-/spec/opensearch/1.1/" xmlns:opds="http://opds-spec.org/2010/catalog"> <id>tag:root:authors</id>
<title>Поиск по книгам</title>
<updated>$cdt</updated>
<icon>/favicon.ico</icon>
<link href="$webroot/opds-opensearch.xml.php" rel="search" type="application/opensearchdescription+xml" />
<link href="$webroot/opds/search?q={searchTerms}" rel="search" type="application/atom+xml" />
<link href="$webroot/opds" rel="start" type="application/atom+xml;profile=opds-catalog" />
_XML;
$q = $_GET['q'];
$get = "?q=$q";
if ($q == '') {
die(':(');
}
//$filter2 = "AND libbook.Title LIKE " . DB::es('%' . $q . '%');
$books = $dbh->prepare("SELECT DISTINCT BookId, libbook.Title as BookTitle,
(SELECT Body FROM libbannotations WHERE BookId=libbook.BookId LIMIT 1) as Body
FROM libbook
JOIN libgenre USING(BookId)
WHERE deleted='0' AND libbook.Title LIKE :q
GROUP BY BookId, BookTitle, Body
LIMIT 100");
$param = '%'.$q.'%';
$books->bindParam(":q", $param);
$books->execute();
while ($b = $books->fetchObject()) {
echo " <entry> <updated>$cdt</updated>";
echo " <id>tag:book:$b->bookid</id>";
echo " <title>" . htmlspecialchars($b->booktitle) . "</title>";
$as = '';
$authors = $dbh->query("SELECT lastname, firstname, middlename FROM libavtorname, libavtor WHERE libavtor.BookId=$b->bookid AND libavtor.AvtorId=libavtorname.AvtorId ORDER BY LastName");
while ($a = $authors->fetchObject()) {
$as .= $a->lastname . " " . $a->firstname . " " . $a->middlename . ", ";
}
$authors = null;
echo "<author> <name>$as</name>";
echo " <uri>/a/id</uri>";
echo "</author>";
echo " <content type='text/html'>" . htmlspecialchars($b->body ?? '') . "</content>";
echo "<link rel='http://opds-spec.org/image/thumbnail' href='$webroot/extract_cover.php?id=$b->bookid' type='image/jpeg'/>";
echo "<link rel='http://opds-spec.org/image' href='$webroot/extract_cover.php?id=$b->bookid' type='image/jpeg'/>";
echo " <link href='$webroot/fb2.php?id=$b->bookid' rel='http://opds-spec.org/acquisition/open-access' type='application/fb2+zip' />";
echo "</entry>\n";
}
$books = null;
?>
</feed>
================================================
FILE: application/opds/sequencesindex.php
================================================
<?php
header('Content-Type: application/atom+xml; charset=utf-8');
$letters = $_GET['letters'] ?? '';
if ($letters !== '') {
$length_letters = mb_strlen($letters, 'UTF-8');
} else {
$length_letters = 0; // Установите подходящее значение по умолчанию
}
echo '<?xml version="1.0" encoding="utf-8"?>';
echo <<< _XML
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/terms/" xmlns:os="http://a9.com/-/spec/opensearch/1.1/" xmlns:opds="http://opds-spec.org/2010/catalog"> <id>tag:root:authors</id>
<title>Книги по сериям</title>
<updated>$cdt</updated>
<icon>/favicon.ico</icon>
<link href="$webroot/opds-opensearch.xml.php" rel="search" type="application/opensearchdescription+xml" />
<link href="$webroot/opds/authorsindex?letters={searchTerms}" rel="search" type="application/atom+xml" />
<link href="$webroot/opds" rel="start" type="application/atom+xml;profile=opds-catalog" />\n
_XML;
$query="
SELECT UPPER(SUBSTR(SeqName, 1, ".($length_letters + 1).")) as alpha, COUNT(*) as cnt
FROM libseqname
WHERE UPPER(SUBSTR(SeqName, 1, ".($length_letters + 1).")) SIMILAR TO :pattern
GROUP BY UPPER(SUBSTR(SeqName, 1, ".($length_letters + 1)."))
ORDER BY alpha";
$ai = $dbh->prepare($query);
$bindparam1 = $letters."_";
$ai->bindParam(":pattern",$bindparam1);
$ai->execute();
while ($ach = $ai->fetchObject()) {
if ($ach->cnt>30) {
echo "\n<entry>\n <updated>$cdt</updated>";
echo "<id>tag:sequences:".urlencode($ach->alpha)."</id>\n";
echo "<title>".htmlspecialchars($ach->alpha)."</title>\n";
echo "<content type='text'>$ach->cnt книжных серий на ".htmlspecialchars($ach->alpha)."</content>\n";
echo "<link href='$webroot/opds/sequencesindex?letters=".urlencode($ach->alpha)."' type='application/atom+xml;profile=opds-catalog' />\n";
echo "</entry>";
} else {
// list individual serie
$sq = $dbh->prepare("SELECT SeqName, SeqId
from libseqname
where UPPER(SUBSTR(SeqName, 1, ".($length_letters + 1).")) = :pattern
ORDER BY UPPER(SeqName)");
$sq->bindParam(":pattern",$ach->alpha);
$sq->execute();
while($s = $sq->fetchObject()){
echo "\n<entry>\n <updated>$cdt</updated>";
echo "<id>tag:sequence:$s->seqid</id>\n";
echo "<title>". htmlspecialchars($s->seqname)."</title>\n";
echo " <content type='text'></content>";
echo " <link href='$webroot/opds/list?seq_id=" . $s->seqid . "' type='application/atom+xml;profile=opds-catalog' />";
echo "</entry>";
}
$sq = null;
}
}
echo '</feed>';
?>
================================================
FILE: application/public/bootstrap/css/bootstrap-grid.css
================================================
/*!
* Bootstrap Grid v5.1.3 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
:root {
--bs-blue: #0d6efd;
--bs-indigo: #6610f2;
--bs-purple: #6f42c1;
--bs-pink: #d63384;
--bs-red: #dc3545;
--bs-orange: #fd7e14;
--bs-yellow: #ffc107;
--bs-green: #198754;
--bs-teal: #20c997;
--bs-cyan: #0dcaf0;
--bs-white: #fff;
--bs-gray: #6c757d;
--bs-gray-dark: #343a40;
--bs-gray-100: #f8f9fa;
--bs-gray-200: #e9ecef;
--bs-gray-300: #dee2e6;
--bs-gray-400: #ced4da;
--bs-gray-500: #adb5bd;
--bs-gray-600: #6c757d;
--bs-gray-700: #495057;
--bs-gray-800: #343a40;
--bs-gray-900: #212529;
--bs-primary: #0d6efd;
--bs-secondary: #6c757d;
--bs-success: #198754;
--bs-info: #0dcaf0;
--bs-warning: #ffc107;
--bs-danger: #dc3545;
--bs-light: #f8f9fa;
--bs-dark: #212529;
--bs-primary-rgb: 13, 110, 253;
--bs-secondary-rgb: 108, 117, 125;
--bs-success-rgb: 25, 135, 84;
--bs-info-rgb: 13, 202, 240;
--bs-warning-rgb: 255, 193, 7;
--bs-danger-rgb: 220, 53, 69;
--bs-light-rgb: 248, 249, 250;
--bs-dark-rgb: 33, 37, 41;
--bs-white-rgb: 255, 255, 255;
--bs-black-rgb: 0, 0, 0;
--bs-body-color-rgb: 33, 37, 41;
--bs-body-bg-rgb: 255, 255, 255;
--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
--bs-body-font-family: var(--bs-font-sans-serif);
--bs-body-font-size: 1rem;
--bs-body-font-weight: 400;
--bs-body-line-height: 1.5;
--bs-body-color: #212529;
--bs-body-bg: #fff;
}
.container,
.container-fluid,
.container-xxl,
.container-xl,
.container-lg,
.container-md,
.container-sm {
width: 100%;
padding-right: var(--bs-gutter-x, 0.75rem);
padding-left: var(--bs-gutter-x, 0.75rem);
margin-right: auto;
margin-left: auto;
}
@media (min-width: 576px) {
.container-sm, .container {
max-width: 540px;
}
}
@media (min-width: 768px) {
.container-md, .container-sm, .container {
max-width: 720px;
}
}
@media (min-width: 992px) {
.container-lg, .container-md, .container-sm, .container {
max-width: 960px;
}
}
@media (min-width: 1200px) {
.container-xl, .container-lg, .container-md, .container-sm, .container {
max-width: 1140px;
}
}
@media (min-width: 1400px) {
.container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {
max-width: 1320px;
}
}
.row {
--bs-gutter-x: 1.5rem;
--bs-gutter-y: 0;
display: flex;
flex-wrap: wrap;
margin-top: calc(-1 * var(--bs-gutter-y));
margin-right: calc(-0.5 * var(--bs-gutter-x));
margin-left: calc(-0.5 * var(--bs-gutter-x));
}
.row > * {
box-sizing: border-box;
flex-shrink: 0;
width: 100%;
max-width: 100%;
padding-right: calc(var(--bs-gutter-x) * 0.5);
padding-left: calc(var(--bs-gutter-x) * 0.5);
margin-top: var(--bs-gutter-y);
}
.col {
flex: 1 0 0%;
}
.row-cols-auto > * {
flex: 0 0 auto;
width: auto;
}
.row-cols-1 > * {
flex: 0 0 auto;
width: 100%;
}
.row-cols-2 > * {
flex: 0 0 auto;
width: 50%;
}
.row-cols-3 > * {
flex: 0 0 auto;
width: 33.3333333333%;
}
.row-cols-4 > * {
flex: 0 0 auto;
width: 25%;
}
.row-cols-5 > * {
flex: 0 0 auto;
width: 20%;
}
.row-cols-6 > * {
flex: 0 0 auto;
width: 16.6666666667%;
}
.col-auto {
flex: 0 0 auto;
width: auto;
}
.col-1 {
flex: 0 0 auto;
width: 8.33333333%;
}
.col-2 {
flex: 0 0 auto;
width: 16.66666667%;
}
.col-3 {
flex: 0 0 auto;
width: 25%;
}
.col-4 {
flex: 0 0 auto;
width: 33.33333333%;
}
.col-5 {
flex: 0 0 auto;
width: 41.66666667%;
}
.col-6 {
flex: 0 0 auto;
width: 50%;
}
.col-7 {
flex: 0 0 auto;
width: 58.33333333%;
}
.col-8 {
flex: 0 0 auto;
width: 66.66666667%;
}
.col-9 {
flex: 0 0 auto;
width: 75%;
}
.col-10 {
flex: 0 0 auto;
width: 83.33333333%;
}
.col-11 {
flex: 0 0 auto;
width: 91.66666667%;
}
.col-12 {
flex: 0 0 auto;
width: 100%;
}
.offset-1 {
margin-left: 8.33333333%;
}
.offset-2 {
margin-left: 16.66666667%;
}
.offset-3 {
margin-left: 25%;
}
.offset-4 {
margin-left: 33.33333333%;
}
.offset-5 {
margin-left: 41.66666667%;
}
.offset-6 {
margin-left: 50%;
}
.offset-7 {
margin-left: 58.33333333%;
}
.offset-8 {
margin-left: 66.66666667%;
}
.offset-9 {
margin-left: 75%;
}
.offset-10 {
margin-left: 83.33333333%;
}
.offset-11 {
margin-left: 91.66666667%;
}
.g-0,
.gx-0 {
--bs-gutter-x: 0;
}
.g-0,
.gy-0 {
--bs-gutter-y: 0;
}
.g-1,
.gx-1 {
--bs-gutter-x: 0.25rem;
}
.g-1,
.gy-1 {
--bs-gutter-y: 0.25rem;
}
.g-2,
.gx-2 {
--bs-gutter-x: 0.5rem;
}
.g-2,
.gy-2 {
--bs-gutter-y: 0.5rem;
}
.g-3,
.gx-3 {
--bs-gutter-x: 1rem;
}
.g-3,
.gy-3 {
--bs-gutter-y: 1rem;
}
.g-4,
.gx-4 {
--bs-gutter-x: 1.5rem;
}
.g-4,
.gy-4 {
--bs-gutter-y: 1.5rem;
}
.g-5,
.gx-5 {
--bs-gutter-x: 3rem;
}
.g-5,
.gy-5 {
--bs-gutter-y: 3rem;
}
@media (min-width: 576px) {
.col-sm {
flex: 1 0 0%;
}
.row-cols-sm-auto > * {
flex: 0 0 auto;
width: auto;
}
.row-cols-sm-1 > * {
flex: 0 0 auto;
width: 100%;
}
.row-cols-sm-2 > * {
flex: 0 0 auto;
width: 50%;
}
.row-cols-sm-3 > * {
flex: 0 0 auto;
width: 33.3333333333%;
}
.row-cols-sm-4 > * {
flex: 0 0 auto;
width: 25%;
}
.row-cols-sm-5 > * {
flex: 0 0 auto;
width: 20%;
}
.row-cols-sm-6 > * {
flex: 0 0 auto;
width: 16.6666666667%;
}
.col-sm-auto {
flex: 0 0 auto;
width: auto;
}
.col-sm-1 {
flex: 0 0 auto;
width: 8.33333333%;
}
.col-sm-2 {
flex: 0 0 auto;
width: 16.66666667%;
}
.col-sm-3 {
flex: 0 0 auto;
width: 25%;
}
.col-sm-4 {
flex: 0 0 auto;
width: 33.33333333%;
}
.col-sm-5 {
flex: 0 0 auto;
width: 41.66666667%;
}
.col-sm-6 {
flex: 0 0 auto;
width: 50%;
}
.col-sm-7 {
flex: 0 0 auto;
width: 58.33333333%;
}
.col-sm-8 {
flex: 0 0 auto;
width: 66.66666667%;
}
.col-sm-9 {
flex: 0 0 auto;
width: 75%;
}
.col-sm-10 {
flex: 0 0 auto;
width: 83.33333333%;
}
.col-sm-11 {
flex: 0 0 auto;
width: 91.66666667%;
}
.col-sm-12 {
flex: 0 0 auto;
width: 100%;
}
.offset-sm-0 {
margin-left: 0;
}
.offset-sm-1 {
margin-left: 8.33333333%;
}
.offset-sm-2 {
margin-left: 16.66666667%;
}
.offset-sm-3 {
margin-left: 25%;
}
.offset-sm-4 {
margin-left: 33.33333333%;
}
.offset-sm-5 {
margin-left: 41.66666667%;
}
.offset-sm-6 {
margin-left: 50%;
}
.offset-sm-7 {
margin-left: 58.33333333%;
}
.offset-sm-8 {
margin-left: 66.66666667%;
}
.offset-sm-9 {
margin-left: 75%;
}
.offset-sm-10 {
margin-left: 83.33333333%;
}
.offset-sm-11 {
margin-left: 91.66666667%;
}
.g-sm-0,
.gx-sm-0 {
--bs-gutter-x: 0;
}
.g-sm-0,
.gy-sm-0 {
--bs-gutter-y: 0;
}
.g-sm-1,
.gx-sm-1 {
--bs-gutter-x: 0.25rem;
}
.g-sm-1,
.gy-sm-1 {
--bs-gutter-y: 0.25rem;
}
.g-sm-2,
.gx-sm-2 {
--bs-gutter-x: 0.5rem;
}
.g-sm-2,
.gy-sm-2 {
--bs-gutter-y: 0.5rem;
}
.g-sm-3,
.gx-sm-3 {
--bs-gutter-x: 1rem;
}
.g-sm-3,
.gy-sm-3 {
--bs-gutter-y: 1rem;
}
.g-sm-4,
.gx-sm-4 {
--bs-gutter-x: 1.5rem;
}
.g-sm-4,
.gy-sm-4 {
--bs-gutter-y: 1.5rem;
}
.g-sm-5,
.gx-sm-5 {
--bs-gutter-x: 3rem;
}
.g-sm-5,
.gy-sm-5 {
--bs-gutter-y: 3rem;
}
}
@media (min-width: 768px) {
.col-md {
flex: 1 0 0%;
}
.row-cols-md-auto > * {
flex: 0 0 auto;
width: auto;
}
.row-cols-md-1 > * {
flex: 0 0 auto;
width: 100%;
}
.row-cols-md-2 > * {
flex: 0 0 auto;
width: 50%;
}
.row-cols-md-3 > * {
flex: 0 0 auto;
width: 33.3333333333%;
}
.row-cols-md-4 > * {
flex: 0 0 auto;
width: 25%;
}
.row-cols-md-5 > * {
flex: 0 0 auto;
width: 20%;
}
.row-cols-md-6 > * {
flex: 0 0 auto;
width: 16.6666666667%;
}
.col-md-auto {
flex: 0 0 auto;
width: auto;
}
.col-md-1 {
flex: 0 0 auto;
width: 8.33333333%;
}
.col-md-2 {
flex: 0 0 auto;
width: 16.66666667%;
}
.col-md-3 {
flex: 0 0 auto;
width: 25%;
}
.col-md-4 {
flex: 0 0 auto;
width: 33.33333333%;
}
.col-md-5 {
flex: 0 0 auto;
width: 41.66666667%;
}
.col-md-6 {
flex: 0 0 auto;
width: 50%;
}
.col-md-7 {
flex: 0 0 auto;
width: 58.33333333%;
}
.col-md-8 {
flex: 0 0 auto;
width: 66.66666667%;
}
.col-md-9 {
flex: 0 0 auto;
width: 75%;
}
.col-md-10 {
flex: 0 0 auto;
width: 83.33333333%;
}
.col-md-11 {
flex: 0 0 auto;
width: 91.66666667%;
}
.col-md-12 {
flex: 0 0 auto;
width: 100%;
}
.offset-md-0 {
margin-left: 0;
}
.offset-md-1 {
margin-left: 8.33333333%;
}
.offset-md-2 {
margin-left: 16.66666667%;
}
.offset-md-3 {
margin-left: 25%;
}
.offset-md-4 {
margin-left: 33.33333333%;
}
.offset-md-5 {
margin-left: 41.66666667%;
}
.offset-md-6 {
margin-left: 50%;
}
.offset-md-7 {
margin-left: 58.33333333%;
}
.offset-md-8 {
margin-left: 66.66666667%;
}
.offset-md-9 {
margin-left: 75%;
}
.offset-md-10 {
margin-left: 83.33333333%;
}
.offset-md-11 {
margin-left: 91.66666667%;
}
.g-md-0,
.gx-md-0 {
--bs-gutter-x: 0;
}
.g-md-0,
.gy-md-0 {
--bs-gutter-y: 0;
}
.g-md-1,
.gx-md-1 {
--bs-gutter-x: 0.25rem;
}
.g-md-1,
.gy-md-1 {
--bs-gutter-y: 0.25rem;
}
.g-md-2,
.gx-md-2 {
--bs-gutter-x: 0.5rem;
}
.g-md-2,
.gy-md-2 {
--bs-gutter-y: 0.5rem;
}
.g-md-3,
.gx-md-3 {
--bs-gutter-x: 1rem;
}
.g-md-3,
.gy-md-3 {
--bs-gutter-y: 1rem;
}
.g-md-4,
.gx-md-4 {
--bs-gutter-x: 1.5rem;
}
.g-md-4,
.gy-md-4 {
--bs-gutter-y: 1.5rem;
}
.g-md-5,
.gx-md-5 {
--bs-gutter-x: 3rem;
}
.g-md-5,
.gy-md-5 {
--bs-gutter-y: 3rem;
}
}
@media (min-width: 992px) {
.col-lg {
flex: 1 0 0%;
}
.row-cols-lg-auto > * {
flex: 0 0 auto;
width: auto;
}
.row-cols-lg-1 > * {
flex: 0 0 auto;
width: 100%;
}
.row-cols-lg-2 > * {
flex: 0 0 auto;
width: 50%;
}
.row-cols-lg-3 > * {
flex: 0 0 auto;
width: 33.3333333333%;
}
.row-cols-lg-4 > * {
flex: 0 0 auto;
width: 25%;
}
.row-cols-lg-5 > * {
flex: 0 0 auto;
width: 20%;
}
.row-cols-lg-6 > * {
flex: 0 0 auto;
width: 16.6666666667%;
}
.col-lg-auto {
flex: 0 0 auto;
width: auto;
}
.col-lg-1 {
flex: 0 0 auto;
width: 8.33333333%;
}
.col-lg-2 {
flex: 0 0 auto;
width: 16.66666667%;
}
.col-lg-3 {
flex: 0 0 auto;
width: 25%;
}
.col-lg-4 {
flex: 0 0 auto;
width: 33.33333333%;
}
.col-lg-5 {
flex: 0 0 auto;
width: 41.66666667%;
}
.col-lg-6 {
flex: 0 0 auto;
width: 50%;
}
.col-lg-7 {
flex: 0 0 auto;
width: 58.33333333%;
}
.col-lg-8 {
flex: 0 0 auto;
width: 66.66666667%;
}
.col-lg-9 {
flex: 0 0 auto;
width: 75%;
}
.col-lg-10 {
flex: 0 0 auto;
width: 83.33333333%;
}
.col-lg-11 {
flex: 0 0 auto;
width: 91.66666667%;
}
.col-lg-12 {
flex: 0 0 auto;
width: 100%;
}
.offset-lg-0 {
margin-left: 0;
}
.offset-lg-1 {
margin-left: 8.33333333%;
}
.offset-lg-2 {
margin-left: 16.66666667%;
}
.offset-lg-3 {
margin-left: 25%;
}
.offset-lg-4 {
margin-left: 33.33333333%;
}
.offset-lg-5 {
margin-left: 41.66666667%;
}
.offset-lg-6 {
margin-left: 50%;
}
.offset-lg-7 {
margin-left: 58.33333333%;
}
.offset-lg-8 {
margin-left: 66.66666667%;
}
.offset-lg-9 {
margin-left: 75%;
}
.offset-lg-10 {
margin-left: 83.33333333%;
}
.offset-lg-11 {
margin-left: 91.66666667%;
}
.g-lg-0,
.gx-lg-0 {
--bs-gutter-x: 0;
}
.g-lg-0,
.gy-lg-0 {
--bs-gutter-y: 0;
}
.g-lg-1,
.gx-lg-1 {
--bs-gutter-x: 0.25rem;
}
.g-lg-1,
.gy-lg-1 {
--bs-gutter-y: 0.25rem;
}
.g-lg-2,
.gx-lg-2 {
--bs-gutter-x: 0.5rem;
}
.g-lg-2,
.gy-lg-2 {
--bs-gutter-y: 0.5rem;
}
.g-lg-3,
.gx-lg-3 {
--bs-gutter-x: 1rem;
}
.g-lg-3,
.gy-lg-3 {
--bs-gutter-y: 1rem;
}
.g-lg-4,
.gx-lg-4 {
--bs-gutter-x: 1.5rem;
}
.g-lg-4,
.gy-lg-4 {
--bs-gutter-y: 1.5rem;
}
.g-lg-5,
.gx-lg-5 {
--bs-gutter-x: 3rem;
}
.g-lg-5,
.gy-lg-5 {
--bs-gutter-y: 3rem;
}
}
@media (min-width: 1200px) {
.col-xl {
flex: 1 0 0%;
}
.row-cols-xl-auto > * {
flex: 0 0 auto;
width: auto;
}
.row-cols-xl-1 > * {
flex: 0 0 auto;
width: 100%;
}
.row-cols-xl-2 > * {
flex: 0 0 auto;
width: 50%;
}
.row-cols-xl-3 > * {
flex: 0 0 auto;
width: 33.3333333333%;
}
.row-cols-xl-4 > * {
flex: 0 0 auto;
width: 25%;
}
.row-cols-xl-5 > * {
flex: 0 0 auto;
width: 20%;
}
.row-cols-xl-6 > * {
flex: 0 0 auto;
width: 16.6666666667%;
}
.col-xl-auto {
flex: 0 0 auto;
width: auto;
}
.col-xl-1 {
flex: 0 0 auto;
width: 8.33333333%;
}
.col-xl-2 {
flex: 0 0 auto;
width: 16.66666667%;
}
.col-xl-3 {
flex: 0 0 auto;
width: 25%;
}
.col-xl-4 {
flex: 0 0 auto;
width: 33.33333333%;
}
.col-xl-5 {
flex: 0 0 auto;
width: 41.66666667%;
}
.col-xl-6 {
flex: 0 0 auto;
width: 50%;
}
.col-xl-7 {
flex: 0 0 auto;
width: 58.33333333%;
}
.col-xl-8 {
flex: 0 0 auto;
width: 66.66666667%;
}
.col-xl-9 {
flex: 0 0 auto;
width: 75%;
}
.col-xl-10 {
flex: 0 0 auto;
width: 83.33333333%;
}
.col-xl-11 {
flex: 0 0 auto;
width: 91.66666667%;
}
.col-xl-12 {
flex: 0 0 auto;
width: 100%;
}
.offset-xl-0 {
margin-left: 0;
}
.offset-xl-1 {
margin-left: 8.33333333%;
}
.offset-xl-2 {
margin-left: 16.66666667%;
}
.offset-xl-3 {
margin-left: 25%;
}
.offset-xl-4 {
margin-left: 33.33333333%;
}
.offset-xl-5 {
margin-left: 41.66666667%;
}
.offset-xl-6 {
margin-left: 50%;
}
.offset-xl-7 {
margin-left: 58.33333333%;
}
.offset-xl-8 {
margin-left: 66.66666667%;
}
.offset-xl-9 {
margin-left: 75%;
}
.offset-xl-10 {
margin-left: 83.33333333%;
}
.offset-xl-11 {
margin-left: 91.66666667%;
}
.g-xl-0,
.gx-xl-0 {
--bs-gutter-x: 0;
}
.g-xl-0,
.gy-xl-0 {
--bs-gutter-y: 0;
}
.g-xl-1,
.gx-xl-1 {
--bs-gutter-x: 0.25rem;
}
.g-xl-1,
.gy-xl-1 {
--bs-gutter-y: 0.25rem;
}
.g-xl-2,
.gx-xl-2 {
--bs-gutter-x: 0.5rem;
}
.g-xl-2,
.gy-xl-2 {
--bs-gutter-y: 0.5rem;
}
.g-xl-3,
.gx-xl-3 {
--bs-gutter-x: 1rem;
}
.g-xl-3,
.gy-xl-3 {
--bs-gutter-y: 1rem;
}
.g-xl-4,
.gx-xl-4 {
--bs-gutter-x: 1.5rem;
}
.g-xl-4,
.gy-xl-4 {
--bs-gutter-y: 1.5rem;
}
.g-xl-5,
.gx-xl-5 {
--bs-gutter-x: 3rem;
}
.g-xl-5,
.gy-xl-5 {
--bs-gutter-y: 3rem;
}
}
@media (min-width: 1400px) {
.col-xxl {
flex: 1 0 0%;
}
.row-cols-xxl-auto > * {
flex: 0 0 auto;
width: auto;
}
.row-cols-xxl-1 > * {
flex: 0 0 auto;
width: 100%;
}
.row-cols-xxl-2 > * {
flex: 0 0 auto;
width: 50%;
}
.row-cols-xxl-3 > * {
flex: 0 0 auto;
width: 33.3333333333%;
}
.row-cols-xxl-4 > * {
flex: 0 0 auto;
width: 25%;
}
.row-cols-xxl-5 > * {
flex: 0 0 auto;
width: 20%;
}
.row-cols-xxl-6 > * {
flex: 0 0 auto;
width: 16.6666666667%;
}
.col-xxl-auto {
flex: 0 0 auto;
width: auto;
}
.col-xxl-1 {
flex: 0 0 auto;
width: 8.33333333%;
}
.col-xxl-2 {
flex: 0 0 auto;
width: 16.66666667%;
}
.col-xxl-3 {
flex: 0 0 auto;
width: 25%;
}
.col-xxl-4 {
flex: 0 0 auto;
width: 33.33333333%;
}
.col-xxl-5 {
flex: 0 0 auto;
width: 41.66666667%;
}
.col-xxl-6 {
flex: 0 0 auto;
width: 50%;
}
.col-xxl-7 {
flex: 0 0 auto;
width: 58.33333333%;
}
.col-xxl-8 {
flex: 0 0 auto;
width: 66.66666667%;
}
.col-xxl-9 {
flex: 0 0 auto;
width: 75%;
}
.col-xxl-10 {
flex: 0 0 auto;
width: 83.33333333%;
}
.col-xxl-11 {
flex: 0 0 auto;
width: 91.66666667%;
}
.col-xxl-12 {
flex: 0 0 auto;
width: 100%;
}
.offset-xxl-0 {
margin-left: 0;
}
.offset-xxl-1 {
margin-left: 8.33333333%;
}
.offset-xxl-2 {
margin-left: 16.66666667%;
}
.offset-xxl-3 {
margin-left: 25%;
}
.offset-xxl-4 {
margin-left: 33.33333333%;
}
.offset-xxl-5 {
margin-left: 41.66666667%;
}
.offset-xxl-6 {
margin-left: 50%;
}
.offset-xxl-7 {
margin-left: 58.33333333%;
}
.offset-xxl-8 {
margin-left: 66.66666667%;
}
.offset-xxl-9 {
margin-left: 75%;
}
.offset-xxl-10 {
margin-left: 83.33333333%;
}
.offset-xxl-11 {
margin-left: 91.66666667%;
}
.g-xxl-0,
.gx-xxl-0 {
--bs-gutter-x: 0;
}
.g-xxl-0,
.gy-xxl-0 {
--bs-gutter-y: 0;
}
.g-xxl-1,
.gx-xxl-1 {
--bs-gutter-x: 0.25rem;
}
.g-xxl-1,
.gy-xxl-1 {
--bs-gutter-y: 0.25rem;
}
.g-xxl-2,
.gx-xxl-2 {
--bs-gutter-x: 0.5rem;
}
.g-xxl-2,
.gy-xxl-2 {
--bs-gutter-y: 0.5rem;
}
.g-xxl-3,
.gx-xxl-3 {
--bs-gutter-x: 1rem;
}
.g-xxl-3,
.gy-xxl-3 {
--bs-gutter-y: 1rem;
}
.g-xxl-4,
.gx-xxl-4 {
--bs-gutter-x: 1.5rem;
}
.g-xxl-4,
.gy-xxl-4 {
--bs-gutter-y: 1.5rem;
}
.g-xxl-5,
.gx-xxl-5 {
--bs-gutter-x: 3rem;
}
.g-xxl-5,
.gy-xxl-5 {
--bs-gutter-y: 3rem;
}
}
.d-inline {
display: inline !important;
}
.d-inline-block {
display: inline-block !important;
}
.d-block {
display: block !important;
}
.d-grid {
display: grid !important;
}
.d-table {
display: table !important;
}
.d-table-row {
display: table-row !important;
}
.d-table-cell {
display: table-cell !important;
}
.d-flex {
display: flex !important;
}
.d-inline-flex {
display: inline-flex !important;
}
.d-none {
display: none !important;
}
.flex-fill {
flex: 1 1 auto !important;
}
.flex-row {
flex-direction: row !important;
}
.flex-column {
flex-direction: column !important;
}
.flex-row-reverse {
flex-direction: row-reverse !important;
}
.flex-column-reverse {
flex-direction: column-reverse !important;
}
.flex-grow-0 {
flex-grow: 0 !important;
}
.flex-grow-1 {
flex-grow: 1 !important;
}
.flex-shrink-0 {
flex-shrink: 0 !important;
}
.flex-shrink-1 {
flex-shrink: 1 !important;
}
.flex-wrap {
flex-wrap: wrap !important;
}
.flex-nowrap {
flex-wrap: nowrap !important;
}
.flex-wrap-reverse {
flex-wrap: wrap-reverse !important;
}
.justify-content-start {
justify-content: flex-start !important;
}
.justify-content-end {
justify-content: flex-end !important;
}
.justify-content-center {
justify-content: center !important;
}
.justify-content-between {
justify-content: space-between !important;
}
.justify-content-around {
justify-content: space-around !important;
}
.justify-content-evenly {
justify-content: space-evenly !important;
}
.align-items-start {
align-items: flex-start !important;
}
.align-items-end {
align-items: flex-end !important;
}
.align-items-center {
align-items: center !important;
}
.align-items-baseline {
align-items: baseline !important;
}
.align-items-stretch {
align-items: stretch !important;
}
.align-content-start {
align-content: flex-start !important;
}
.align-content-end {
align-content: flex-end !important;
}
.align-content-center {
align-content: center !important;
}
.align-content-between {
align-content: space-between !important;
}
.align-content-around {
align-content: space-around !important;
}
.align-content-stretch {
align-content: stretch !important;
}
.align-self-auto {
align-self: auto !important;
}
.align-self-start {
align-self: flex-start !important;
}
.align-self-end {
align-self: flex-end !important;
}
.align-self-center {
align-self: center !important;
}
.align-self-baseline {
align-self: baseline !important;
}
.align-self-stretch {
align-self: stretch !important;
}
.order-first {
order: -1 !important;
}
.order-0 {
order: 0 !important;
}
.order-1 {
order: 1 !important;
}
.order-2 {
order: 2 !important;
}
.order-3 {
order: 3 !important;
}
.order-4 {
order: 4 !important;
}
.order-5 {
order: 5 !important;
}
.order-last {
order: 6 !important;
}
.m-0 {
margin: 0 !important;
}
.m-1 {
margin: 0.25rem !important;
}
.m-2 {
margin: 0.5rem !important;
}
.m-3 {
margin: 1rem !important;
}
.m-4 {
margin: 1.5rem !important;
}
.m-5 {
margin: 3rem !important;
}
.m-auto {
margin: auto !important;
}
.mx-0 {
margin-right: 0 !important;
margin-left: 0 !important;
}
.mx-1 {
margin-right: 0.25rem !important;
margin-left: 0.25rem !important;
}
.mx-2 {
margin-right: 0.5rem !important;
margin-left: 0.5rem !important;
}
.mx-3 {
margin-right: 1rem !important;
margin-left: 1rem !important;
}
.mx-4 {
margin-right: 1.5rem !important;
margin-left: 1.5rem !important;
}
.mx-5 {
margin-right: 3rem !important;
margin-left: 3rem !important;
}
.mx-auto {
margin-right: auto !important;
margin-left: auto !important;
}
.my-0 {
margin-top: 0 !important;
margin-bottom: 0 !important;
}
.my-1 {
margin-top: 0.25rem !important;
margin-bottom: 0.25rem !important;
}
.my-2 {
margin-top: 0.5rem !important;
margin-bottom: 0.5rem !important;
}
.my-3 {
margin-top: 1rem !important;
margin-bottom: 1rem !important;
}
.my-4 {
margin-top: 1.5rem !important;
margin-bottom: 1.5rem !important;
}
.my-5 {
margin-top: 3rem !important;
margin-bottom: 3rem !important;
}
.my-auto {
margin-top: auto !important;
margin-bottom: auto !important;
}
.mt-0 {
margin-top: 0 !important;
}
.mt-1 {
margin-top: 0.25rem !important;
}
.mt-2 {
margin-top: 0.5rem !important;
}
.mt-3 {
margin-top: 1rem !important;
}
.mt-4 {
margin-top: 1.5rem !important;
}
.mt-5 {
margin-top: 3rem !important;
}
.mt-auto {
margin-top: auto !important;
}
.me-0 {
margin-right: 0 !important;
}
.me-1 {
margin-right: 0.25rem !important;
}
.me-2 {
margin-right: 0.5rem !important;
}
.me-3 {
margin-right: 1rem !important;
}
.me-4 {
margin-right: 1.5rem !important;
}
.me-5 {
margin-right: 3rem !important;
}
.me-auto {
margin-right: auto !important;
}
.mb-0 {
margin-bottom: 0 !important;
}
.mb-1 {
margin-bottom: 0.25rem !important;
}
.mb-2 {
margin-bottom: 0.5rem !important;
}
.mb-3 {
margin-bottom: 1rem !important;
}
.mb-4 {
margin-bottom: 1.5rem !important;
}
.mb-5 {
margin-bottom: 3rem !important;
}
.mb-auto {
margin-bottom: auto !important;
}
.ms-0 {
margin-left: 0 !important;
}
.ms-1 {
margin-left: 0.25rem !important;
}
.ms-2 {
margin-left: 0.5rem !important;
}
.ms-3 {
margin-left: 1rem !important;
}
.ms-4 {
margin-left: 1.5rem !important;
}
.ms-5 {
margin-left: 3rem !important;
}
.ms-auto {
margin-left: auto !important;
}
.p-0 {
padding: 0 !important;
}
.p-1 {
padding: 0.25rem !important;
}
.p-2 {
padding: 0.5rem !important;
}
.p-3 {
padding: 1rem !important;
}
.p-4 {
padding: 1.5rem !important;
}
.p-5 {
padding: 3rem !important;
}
.px-0 {
padding-right: 0 !important;
padding-left: 0 !important;
}
.px-1 {
padding-right: 0.25rem !important;
padding-left: 0.25rem !important;
}
.px-2 {
padding-right: 0.5rem !important;
padding-left: 0.5rem !important;
}
.px-3 {
padding-right: 1rem !important;
padding-left: 1rem !important;
}
.px-4 {
padding-right: 1.5rem !important;
padding-left: 1.5rem !important;
}
.px-5 {
padding-right: 3rem !important;
padding-left: 3rem !important;
}
.py-0 {
padding-top: 0 !important;
padding-bottom: 0 !important;
}
.py-1 {
padding-top: 0.25rem !important;
padding-bottom: 0.25rem !important;
}
.py-2 {
padding-top: 0.5rem !important;
padding-bottom: 0.5rem !important;
}
.py-3 {
padding-top: 1rem !important;
padding-bottom: 1rem !important;
}
.py-4 {
padding-top: 1.5rem !important;
padding-bottom: 1.5rem !important;
}
.py-5 {
padding-top: 3rem !important;
padding-bottom: 3rem !important;
}
.pt-0 {
padding-top: 0 !important;
}
.pt-1 {
padding-top: 0.25rem !important;
}
.pt-2 {
padding-top: 0.5rem !important;
}
.pt-3 {
padding-top: 1rem !important;
}
.pt-4 {
padding-top: 1.5rem !important;
}
.pt-5 {
padding-top: 3rem !important;
}
.pe-0 {
padding-right: 0 !important;
}
.pe-1 {
padding-right: 0.25rem !important;
}
.pe-2 {
padding-right: 0.5rem !important;
}
.pe-3 {
padding-right: 1rem !important;
}
.pe-4 {
padding-right: 1.5rem !important;
}
.pe-5 {
padding-right: 3rem !important;
}
.pb-0 {
padding-bottom: 0 !important;
}
.pb-1 {
padding-bottom: 0.25rem !important;
}
.pb-2 {
padding-bottom: 0.5rem !important;
}
.pb-3 {
padding-bottom: 1rem !important;
}
.pb-4 {
padding-bottom: 1.5rem !important;
}
.pb-5 {
padding-bottom: 3rem !important;
}
.ps-0 {
padding-left: 0 !important;
}
.ps-1 {
padding-left: 0.25rem !important;
}
.ps-2 {
padding-left: 0.5rem !important;
}
.ps-3 {
padding-left: 1rem !important;
}
.ps-4 {
padding-left: 1.5rem !important;
}
.ps-5 {
padding-left: 3rem !important;
}
@media (min-width: 576px) {
.d-sm-inline {
display: inline !important;
}
.d-sm-inline-block {
display: inline-block !important;
}
.d-sm-block {
display: block !important;
}
.d-sm-grid {
display: grid !important;
}
.d-sm-table {
display: table !important;
}
.d-sm-table-row {
display: table-row !important;
}
.d-sm-table-cell {
display: table-cell !important;
}
.d-sm-flex {
display: flex !important;
}
.d-sm-inline-flex {
display: inline-flex !important;
}
.d-sm-none {
display: none !important;
}
.flex-sm-fill {
flex: 1 1 auto !important;
}
.flex-sm-row {
flex-direction: row !important;
}
.flex-sm-column {
flex-direction: column !important;
}
.flex-sm-row-reverse {
flex-direction: row-reverse !important;
}
.flex-sm-column-reverse {
flex-direction: column-reverse !important;
}
.flex-sm-grow-0 {
flex-grow: 0 !important;
}
.flex-sm-grow-1 {
flex-grow: 1 !important;
}
.flex-sm-shrink-0 {
flex-shrink: 0 !important;
}
.flex-sm-shrink-1 {
flex-shrink: 1 !important;
}
.flex-sm-wrap {
flex-wrap: wrap !important;
}
.flex-sm-nowrap {
flex-wrap: nowrap !important;
}
.flex-sm-wrap-reverse {
flex-wrap: wrap-reverse !important;
}
.justify-content-sm-start {
justify-content: flex-start !important;
}
.justify-content-sm-end {
justify-content: flex-end !important;
}
.justify-content-sm-center {
justify-content: center !important;
}
.justify-content-sm-between {
justify-content: space-between !important;
}
.justify-content-sm-around {
justify-content: space-around !important;
}
.justify-content-sm-evenly {
justify-content: space-evenly !important;
}
.align-items-sm-start {
align-items: flex-start !important;
}
.align-items-sm-end {
align-items: flex-end !important;
}
.align-items-sm-center {
align-items: center !important;
}
.align-items-sm-baseline {
align-items: baseline !important;
}
.align-items-sm-stretch {
align-items: stretch !important;
}
.align-content-sm-start {
align-content: flex-start !important;
}
.align-content-sm-end {
align-content: flex-end !important;
}
.align-content-sm-center {
align-content: center !important;
}
.align-content-sm-between {
align-content: space-between !important;
}
.align-content-sm-around {
align-content: space-around !important;
}
.align-content-sm-stretch {
align-content: stretch !important;
}
.align-self-sm-auto {
align-self: auto !important;
}
.align-self-sm-start {
align-self: flex-start !important;
}
.align-self-sm-end {
align-self: flex-end !important;
}
.align-self-sm-center {
align-self: center !important;
}
.align-self-sm-baseline {
align-self: baseline !important;
}
.align-self-sm-stretch {
align-self: stretch !important;
}
.order-sm-first {
order: -1 !important;
}
.order-sm-0 {
order: 0 !important;
}
.order-sm-1 {
order: 1 !important;
}
.order-sm-2 {
order: 2 !important;
}
.order-sm-3 {
order: 3 !important;
}
.order-sm-4 {
order: 4 !important;
}
.order-sm-5 {
order: 5 !important;
}
.order-sm-last {
order: 6 !important;
}
.m-sm-0 {
margin: 0 !important;
}
.m-sm-1 {
margin: 0.25rem !important;
}
.m-sm-2 {
margin: 0.5rem !important;
}
.m-sm-3 {
margin: 1rem !important;
}
.m-sm-4 {
margin: 1.5rem !important;
}
.m-sm-5 {
margin: 3rem !important;
}
.m-sm-auto {
margin: auto !important;
}
.mx-sm-0 {
margin-right: 0 !important;
margin-left: 0 !important;
}
.mx-sm-1 {
margin-right: 0.25rem !important;
margin-left: 0.25rem !important;
}
.mx-sm-2 {
margin-right: 0.5rem !important;
margin-left: 0.5rem !important;
}
.mx-sm-3 {
margin-right: 1rem !important;
margin-left: 1rem !important;
}
.mx-sm-4 {
margin-right: 1.5rem !important;
margin-left: 1.5rem !important;
}
.mx-sm-5 {
margin-right: 3rem !important;
margin-left: 3rem !important;
}
.mx-sm-auto {
margin-right: auto !important;
margin-left: auto !important;
}
.my-sm-0 {
margin-top: 0 !important;
margin-bottom: 0 !important;
}
.my-sm-1 {
margin-top: 0.25rem !important;
margin-bottom: 0.25rem !important;
}
.my-sm-2 {
margin-top: 0.5rem !important;
margin-bottom: 0.5rem !important;
}
.my-sm-3 {
margin-top: 1rem !important;
margin-bottom: 1rem !important;
}
.my-sm-4 {
margin-top: 1.5rem !important;
margin-bottom: 1.5rem !important;
}
.my-sm-5 {
margin-top: 3rem !important;
margin-bottom: 3rem !important;
}
.my-sm-auto {
margin-top: auto !important;
margin-bottom: auto !important;
}
.mt-sm-0 {
margin-top: 0 !important;
}
.mt-sm-1 {
margin-top: 0.25rem !important;
}
.mt-sm-2 {
margin-top: 0.5rem !important;
}
.mt-sm-3 {
margin-top: 1rem !important;
}
.mt-sm-4 {
margin-top: 1.5rem !important;
}
.mt-sm-5 {
margin-top: 3rem !important;
}
.mt-sm-auto {
margin-top: auto !important;
}
.me-sm-0 {
margin-right: 0 !important;
}
.me-sm-1 {
margin-right: 0.25rem !important;
}
.me-sm-2 {
margin-right: 0.5rem !important;
}
.me-sm-3 {
margin-right: 1rem !important;
}
.me-sm-4 {
margin-right: 1.5rem !important;
}
.me-sm-5 {
margin-right: 3rem !important;
}
.me-sm-auto {
margin-right: auto !important;
}
.mb-sm-0 {
margin-bottom: 0 !important;
}
.mb-sm-1 {
margin-bottom: 0.25rem !important;
}
.mb-sm-2 {
margin-bottom: 0.5rem !important;
}
.mb-sm-3 {
margin-bottom: 1rem !important;
}
.mb-sm-4 {
margin-bottom: 1.5rem !important;
}
.mb-sm-5 {
margin-bottom: 3rem !important;
}
.mb-sm-auto {
margin-bottom: auto !important;
}
.ms-sm-0 {
margin-left: 0 !important;
}
.ms-sm-1 {
margin-left: 0.25rem !important;
}
.ms-sm-2 {
margin-left: 0.5rem !important;
}
.ms-sm-3 {
margin-left: 1rem !important;
}
.ms-sm-4 {
margin-left: 1.5rem !important;
}
.ms-sm-5 {
margin-left: 3rem !important;
}
.ms-sm-auto {
margin-left: auto !important;
}
.p-sm-0 {
padding: 0 !important;
}
.p-sm-1 {
padding: 0.25rem !important;
}
.p-sm-2 {
padding: 0.5rem !important;
}
.p-sm-3 {
padding: 1rem !important;
}
.p-sm-4 {
padding: 1.5rem !important;
}
.p-sm-5 {
padding: 3rem !important;
}
.px-sm-0 {
padding-right: 0 !important;
padding-left: 0 !important;
}
.px-sm-1 {
padding-right: 0.25rem !important;
padding-left: 0.25rem !important;
}
.px-sm-2 {
padding-right: 0.5rem !important;
padding-left: 0.5rem !important;
}
.px-sm-3 {
padding-right: 1rem !important;
padding-left: 1rem !important;
}
.px-sm-4 {
padding-right: 1.5rem !important;
padding-left: 1.5rem !important;
}
.px-sm-5 {
padding-right: 3rem !important;
padding-left: 3rem !important;
}
.py-sm-0 {
padding-top: 0 !important;
padding-bottom: 0 !important;
}
.py-sm-1 {
padding-top: 0.25rem !important;
padding-bottom: 0.25rem !important;
}
.py-sm-2 {
padding-top: 0.5rem !important;
padding-bottom: 0.5rem !important;
}
.py-sm-3 {
padding-top: 1rem !important;
padding-bottom: 1rem !important;
}
.py-sm-4 {
padding-top: 1.5rem !important;
padding-bottom: 1.5rem !important;
}
.py-sm-5 {
padding-top: 3rem !important;
padding-bottom: 3rem !important;
}
.pt-sm-0 {
padding-top: 0 !important;
}
.pt-sm-1 {
padding-top: 0.25rem !important;
}
.pt-sm-2 {
padding-top: 0.5rem !important;
}
.pt-sm-3 {
padding-top: 1rem !important;
}
.pt-sm-4 {
padding-top: 1.5rem !important;
}
.pt-sm-5 {
padding-top: 3rem !important;
}
.pe-sm-0 {
padding-right: 0 !important;
}
.pe-sm-1 {
padding-right: 0.25rem !important;
}
.pe-sm-2 {
padding-right: 0.5rem !important;
}
.pe-sm-3 {
padding-right: 1rem !important;
}
.pe-sm-4 {
padding-right: 1.5rem !important;
}
.pe-sm-5 {
padding-right: 3rem !important;
}
.pb-sm-0 {
padding-bottom: 0 !important;
}
.pb-sm-1 {
padding-bottom: 0.25rem !important;
}
.pb-sm-2 {
padding-bottom: 0.5rem !important;
}
.pb-sm-3 {
padding-bottom: 1rem !important;
}
.pb-sm-4 {
padding-bottom: 1.5rem !important;
}
.pb-sm-5 {
padding-bottom: 3rem !important;
}
.ps-sm-0 {
padding-left: 0 !important;
}
.ps-sm-1 {
padding-left: 0.25rem !important;
}
.ps-sm-2 {
padding-left: 0.5rem !important;
}
.ps-sm-3 {
padding-left: 1rem !important;
}
.ps-sm-4 {
padding-left: 1.5rem !important;
}
.ps-sm-5 {
padding-left: 3rem !important;
}
}
@media (min-width: 768px) {
.d-md-inline {
display: inline !important;
}
.d-md-inline-block {
display: inline-block !important;
}
.d-md-block {
display: block !important;
}
.d-md-grid {
display: grid !important;
}
.d-md-table {
display: table !important;
}
.d-md-table-row {
display: table-row !important;
}
.d-md-table-cell {
display: table-cell !important;
}
.d-md-flex {
display: flex !important;
}
.d-md-inline-flex {
display: inline-flex !important;
}
.d-md-none {
display: none !important;
}
.flex-md-fill {
flex: 1 1 auto !important;
}
.flex-md-row {
flex-direction: row !important;
}
.flex-md-column {
flex-direction: column !important;
}
.flex-md-row-reverse {
flex-direction: row-reverse !important;
}
.flex-md-column-reverse {
flex-direction: column-reverse !important;
}
.flex-md-grow-0 {
flex-grow: 0 !important;
}
.flex-md-grow-1 {
flex-grow: 1 !important;
}
.flex-md-shrink-0 {
flex-shrink: 0 !important;
}
.flex-md-shrink-1 {
flex-shrink: 1 !important;
}
.flex-md-wrap {
flex-wrap: wrap !important;
}
.flex-md-nowrap {
flex-wrap: nowrap !important;
}
.flex-md-wrap-reverse {
flex-wrap: wrap-reverse !important;
}
.justify-content-md-start {
justify-content: flex-start !important;
}
.justify-content-md-end {
justify-content: flex-end !important;
}
.justify-content-md-center {
justify-content: center !important;
}
.justify-content-md-between {
justify-content: space-between !important;
}
.justify-content-md-around {
justify-content: space-around !important;
}
.justify-content-md-evenly {
justify-content: space-evenly !important;
}
.align-items-md-start {
align-items: flex-start !important;
}
.align-items-md-end {
align-items: flex-end !important;
}
.align-items-md-center {
align-items: center !important;
}
.align-items-md-baseline {
align-items: baseline !important;
}
.align-items-md-stretch {
align-items: stretch !important;
}
.align-content-md-start {
align-content: flex-start !important;
}
.align-content-md-end {
align-content: flex-end !important;
}
.align-content-md-center {
align-content: center !important;
}
.align-content-md-between {
align-content: space-between !important;
}
.align-content-md-around {
align-content: space-around !important;
}
.align-content-md-stretch {
align-content: stretch !important;
}
.align-self-md-auto {
align-self: auto !important;
}
.align-self-md-start {
align-self: flex-start !important;
}
.align-self-md-end {
align-self: flex-end !important;
}
.align-self-md-center {
align-self: center !important;
}
.align-self-md-baseline {
align-self: baseline !important;
}
.align-self-md-stretch {
align-self: stretch !important;
}
.order-md-first {
order: -1 !important;
}
.order-md-0 {
order: 0 !important;
}
.order-md-1 {
order: 1 !important;
}
.order-md-2 {
order: 2 !important;
}
.order-md-3 {
order: 3 !important;
}
.order-md-4 {
order: 4 !important;
}
.order-md-5 {
order: 5 !important;
}
.order-md-last {
order: 6 !important;
}
.m-md-0 {
margin: 0 !important;
}
.m-md-1 {
margin: 0.25rem !important;
}
.m-md-2 {
margin: 0.5rem !important;
}
.m-md-3 {
margin: 1rem !important;
}
.m-md-4 {
margin: 1.5rem !important;
}
.m-md-5 {
margin: 3rem !important;
}
.m-md-auto {
margin: auto !important;
}
.mx-md-0 {
margin-right: 0 !important;
margin-left: 0 !important;
}
.mx-md-1 {
margin-right: 0.25rem !important;
margin-left: 0.25rem !important;
}
.mx-md-2 {
margin-right: 0.5rem !important;
margin-left: 0.5rem !important;
}
.mx-md-3 {
margin-right: 1rem !important;
margin-left: 1rem !important;
}
.mx-md-4 {
margin-right: 1.5rem !important;
margin-left: 1.5rem !important;
}
.mx-md-5 {
margin-right: 3rem !important;
margin-left: 3rem !important;
}
.mx-md-auto {
margin-right: auto !important;
margin-left: auto !important;
}
.my-md-0 {
margin-top: 0 !important;
margin-bottom: 0 !important;
}
.my-md-1 {
margin-top: 0.25rem !important;
margin-bottom: 0.25rem !important;
}
.my-md-2 {
margin-top: 0.5rem !important;
margin-bottom: 0.5rem !important;
}
.my-md-3 {
margin-top: 1rem !important;
margin-bottom: 1rem !important;
}
.my-md-4 {
margin-top: 1.5rem !important;
margin-bottom: 1.5rem !important;
}
.my-md-5 {
margin-top: 3rem !important;
margin-bottom: 3rem !important;
}
.my-md-auto {
margin-top: auto !important;
margin-bottom: auto !important;
}
.mt-md-0 {
margin-top: 0 !important;
}
.mt-md-1 {
margin-top: 0.25rem !important;
}
.mt-md-2 {
margin-top: 0.5rem !important;
}
.mt-md-3 {
margin-top: 1rem !important;
}
.mt-md-4 {
margin-top: 1.5rem !important;
}
.mt-md-5 {
margin-top: 3rem !important;
}
.mt-md-auto {
margin-top: auto !important;
}
.me-md-0 {
margin-right: 0 !important;
}
.me-md-1 {
margin-right: 0.25rem !important;
}
.me-md-2 {
margin-right: 0.5rem !important;
}
.me-md-3 {
margin-right: 1rem !important;
}
.me-md-4 {
margin-right: 1.5rem !important;
}
.me-md-5 {
margin-right: 3rem !important;
}
.me-md-auto {
margin-right: auto !important;
}
.mb-md-0 {
margin-bottom: 0 !important;
}
.mb-md-1 {
margin-bottom: 0.25rem !important;
}
.mb-md-2 {
margin-bottom: 0.5rem !important;
}
.mb-md-3 {
margin-bottom: 1rem !important;
}
.mb-md-4 {
margin-bottom: 1.5rem !important;
}
.mb-md-5 {
margin-bottom: 3rem !important;
}
.mb-md-auto {
margin-bottom: auto !important;
}
.ms-md-0 {
margin-left: 0 !important;
}
.ms-md-1 {
margin-left: 0.25rem !important;
}
.ms-md-2 {
margin-left: 0.5rem !important;
}
.ms-md-3 {
margin-left: 1rem !important;
}
.ms-md-4 {
margin-left: 1.5rem !important;
}
.ms-md-5 {
margin-left: 3rem !important;
}
.ms-md-auto {
margin-left: auto !important;
}
.p-md-0 {
padding: 0 !important;
}
.p-md-1 {
padding: 0.25rem !important;
}
.p-md-2 {
padding: 0.5rem !important;
}
.p-md-3 {
padding: 1rem !important;
}
.p-md-4 {
padding: 1.5rem !important;
}
.p-md-5 {
padding: 3rem !important;
}
.px-md-0 {
padding-right: 0 !important;
padding-left: 0 !important;
}
.px-md-1 {
padding-right: 0.25rem !important;
padding-left: 0.25rem !important;
}
.px-md-2 {
padding-right: 0.5rem !important;
padding-left: 0.5rem !important;
}
.px-md-3 {
padding-right: 1rem !important;
padding-left: 1rem !important;
}
.px-md-4 {
padding-right: 1.5rem !important;
padding-left: 1.5rem !important;
}
.px-md-5 {
padding-right: 3rem !important;
padding-left: 3rem !important;
}
.py-md-0 {
padding-top: 0 !important;
padding-bottom: 0 !important;
}
.py-md-1 {
padding-top: 0.25rem !important;
padding-bottom: 0.25rem !important;
}
.py-md-2 {
padding-top: 0.5rem !important;
padding-bottom: 0.5rem !important;
}
.py-md-3 {
padding-top: 1rem !important;
padding-bottom: 1rem !important;
}
.py-md-4 {
padding-top: 1.5rem !important;
padding-bottom: 1.5rem !important;
}
.py-md-5 {
padding-top: 3rem !important;
padding-bottom: 3rem !important;
}
.pt-md-0 {
padding-top: 0 !important;
}
.pt-md-1 {
padding-top: 0.25rem !important;
}
.pt-md-2 {
padding-top: 0.5rem !important;
}
.pt-md-3 {
padding-top: 1rem !important;
}
.pt-md-4 {
padding-top: 1.5rem !important;
}
.pt-md-5 {
padding-top: 3rem !important;
}
.pe-md-0 {
padding-right: 0 !important;
}
.pe-md-1 {
padding-right: 0.25rem !important;
}
.pe-md-2 {
padding-right: 0.5rem !important;
}
.pe-md-3 {
padding-right: 1rem !important;
}
.pe-md-4 {
padding-right: 1.5rem !important;
}
.pe-md-5 {
padding-right: 3rem !important;
}
.pb-md-0 {
padding-bottom: 0 !important;
}
.pb-md-1 {
padding-bottom: 0.25rem !important;
}
.pb-md-2 {
padding-bottom: 0.5rem !important;
}
.pb-md-3 {
padding-bottom: 1rem !important;
}
.pb-md-4 {
padding-bottom: 1.5rem !important;
}
.pb-md-5 {
padding-bottom: 3rem !important;
}
.ps-md-0 {
padding-left: 0 !important;
}
.ps-md-1 {
padding-left: 0.25rem !important;
}
.ps-md-2 {
padding-left: 0.5rem !important;
}
.ps-md-3 {
padding-left: 1rem !important;
}
.ps-md-4 {
padding-left: 1.5rem !important;
}
.ps-md-5 {
padding-left: 3rem !important;
}
}
@media (min-width: 992px) {
.d-lg-inline {
display: inline !important;
}
.d-lg-inline-block {
display: inline-block !important;
}
.d-lg-block {
display: block !important;
}
.d-lg-grid {
display: grid !important;
}
.d-lg-table {
display: table !important;
}
.d-lg-table-row {
display: table-row !important;
}
.d-lg-table-cell {
display: table-cell !important;
}
.d-lg-flex {
display: flex !important;
}
.d-lg-inline-flex {
display: inline-flex !important;
}
.d-lg-none {
display: none !important;
}
.flex-lg-fill {
flex: 1 1 auto !important;
}
.flex-lg-row {
flex-direction: row !important;
}
.flex-lg-column {
flex-direction: column !important;
}
.flex-lg-row-reverse {
flex-direction: row-reverse !important;
}
.flex-lg-column-reverse {
flex-direction: column-reverse !important;
}
.flex-lg-grow-0 {
flex-grow: 0 !important;
}
.flex-lg-grow-1 {
flex-grow: 1 !important;
}
.flex-lg-shrink-0 {
flex-shrink: 0 !important;
}
.flex-lg-shrink-1 {
flex-shrink: 1 !important;
}
.flex-lg-wrap {
flex-wrap: wrap !important;
}
.flex-lg-nowrap {
flex-wrap: nowrap !important;
}
.flex-lg-wrap-reverse {
flex-wrap: wrap-reverse !important;
}
.justify-content-lg-start {
justify-content: flex-start !important;
}
.justify-content-lg-end {
justify-content: flex-end !important;
}
.justify-content-lg-center {
justify-content: center !important;
}
.justify-content-lg-between {
justify-content: space-between !important;
}
.justify-content-lg-around {
justify-content: space-around !important;
}
.justify-content-lg-evenly {
justify-content: space-evenly !important;
}
.align-items-lg-start {
align-items: flex-start !important;
}
.align-items-lg-end {
align-items: flex-end !important;
}
.align-items-lg-center {
align-items: center !important;
}
.align-items-lg-baseline {
align-items: baseline !important;
}
.align-items-lg-stretch {
align-items: stretch !important;
}
.align-content-lg-start {
align-content: flex-start !important;
}
.align-content-lg-end {
align-content: flex-end !important;
}
.align-content-lg-center {
align-content: center !important;
}
.align-content-lg-between {
align-content: space-between !important;
}
.align-content-lg-around {
align-content: space-around !important;
}
.align-content-lg-stretch {
align-content: stretch !important;
}
.align-self-lg-auto {
align-self: auto !important;
}
.align-self-lg-start {
align-self: flex-start !important;
}
.align-self-lg-end {
align-self: flex-end !important;
}
.align-self-lg-center {
align-self: center !important;
}
.align-self-lg-baseline {
align-self: baseline !important;
}
.align-self-lg-stretch {
align-self: stretch !important;
}
.order-lg-first {
order: -1 !important;
}
.order-lg-0 {
order: 0 !important;
}
.order-lg-1 {
order: 1 !important;
}
.order-lg-2 {
order: 2 !important;
}
.order-lg-3 {
order: 3 !important;
}
.order-lg-4 {
order: 4 !important;
}
.order-lg-5 {
order: 5 !important;
}
.order-lg-last {
order: 6 !important;
}
.m-lg-0 {
margin: 0 !important;
}
.m-lg-1 {
margin: 0.25rem !important;
}
.m-lg-2 {
margin: 0.5rem !important;
}
.m-lg-3 {
margin: 1rem !important;
}
.m-lg-4 {
margin: 1.5rem !important;
}
.m-lg-5 {
margin: 3rem !important;
}
.m-lg-auto {
margin: auto !important;
}
.mx-lg-0 {
margin-right: 0 !important;
margin-left: 0 !important;
}
.mx-lg-1 {
margin-right: 0.25rem !important;
margin-left: 0.25rem !important;
}
.mx-lg-2 {
margin-right: 0.5rem !important;
margin-left: 0.5rem !important;
}
.mx-lg-3 {
margin-right: 1rem !important;
margin-left: 1rem !important;
}
.mx-lg-4 {
margin-right: 1.5rem !important;
margin-left: 1.5rem !important;
}
.mx-lg-5 {
margin-right: 3rem !important;
margin-left: 3rem !important;
}
.mx-lg-auto {
margin-right: auto !important;
margin-left: auto !important;
}
.my-lg-0 {
margin-top: 0 !important;
margin-bottom: 0 !important;
}
.my-lg-1 {
margin-top: 0.25rem !important;
margin-bottom: 0.25rem !important;
}
.my-lg-2 {
margin-top: 0.5rem !important;
margin-bottom: 0.5rem !important;
}
.my-lg-3 {
margin-top: 1rem !important;
margin-bottom: 1rem !important;
}
.my-lg-4 {
margin-top: 1.5rem !important;
margin-bottom: 1.5rem !important;
}
.my-lg-5 {
margin-top: 3rem !important;
margin-bottom: 3rem !important;
}
.my-lg-auto {
margin-top: auto !important;
margin-bottom: auto !important;
}
.mt-lg-0 {
margin-top: 0 !important;
}
.mt-lg-1 {
margin-top: 0.25rem !important;
}
.mt-lg-2 {
margin-top: 0.5rem !important;
}
.mt-lg-3 {
margin-top: 1rem !important;
}
.mt-lg-4 {
margin-top: 1.5rem !important;
}
.mt-lg-5 {
margin-top: 3rem !important;
}
.mt-lg-auto {
margin-top: auto !important;
}
.me-lg-0 {
margin-right: 0 !important;
}
.me-lg-1 {
margin-right: 0.25rem !important;
}
.me-lg-2 {
margin-right: 0.5rem !important;
}
.me-lg-3 {
margin-right: 1rem !important;
}
.me-lg-4 {
margin-right: 1.5rem !important;
}
.me-lg-5 {
margin-right: 3rem !important;
}
.me-lg-auto {
margin-right: auto !important;
}
.mb-lg-0 {
margin-bottom: 0 !important;
}
.mb-lg-1 {
margin-bottom: 0.25rem !important;
}
.mb-lg-2 {
margin-bottom: 0.5rem !important;
}
.mb-lg-3 {
margin-bottom: 1rem !important;
}
.mb-lg-4 {
margin-bottom: 1.5rem !important;
}
.mb-lg-5 {
margin-bottom: 3rem !important;
}
.mb-lg-auto {
margin-bottom: auto !important;
}
.ms-lg-0 {
margin-left: 0 !important;
}
.ms-lg-1 {
margin-left: 0.25rem !important;
}
.ms-lg-2 {
margin-left: 0.5rem !important;
}
.ms-lg-3 {
margin-left: 1rem !important;
}
.ms-lg-4 {
margin-left: 1.5rem !important;
}
.ms-lg-5 {
margin-left: 3rem !important;
}
.ms-lg-auto {
margin-left: auto !important;
}
.p-lg-0 {
padding: 0 !important;
}
.p-lg-1 {
padding: 0.25rem !important;
}
.p-lg-2 {
padding: 0.5rem !important;
}
.p-lg-3 {
padding: 1rem !important;
}
.p-lg-4 {
padding: 1.5rem !important;
}
.p-lg-5 {
padding: 3rem !important;
}
.px-lg-0 {
padding-right: 0 !important;
padding-left: 0 !important;
}
.px-lg-1 {
padding-right: 0.25rem !important;
padding-left: 0.25rem !important;
}
.px-lg-2 {
padding-right: 0.5rem !important;
padding-left: 0.5rem !important;
}
.px-lg-3 {
padding-right: 1rem !important;
padding-left: 1rem !important;
}
.px-lg-4 {
padding-right: 1.5rem !important;
padding-left: 1.5rem !important;
}
.px-lg-5 {
padding-right: 3rem !important;
padding-left: 3rem !important;
}
.py-lg-0 {
padding-top: 0 !important;
padding-bottom: 0 !important;
}
.py-lg-1 {
padding-top: 0.25rem !important;
padding-bottom: 0.25rem !important;
}
.py-lg-2 {
padding-top: 0.5rem !important;
padding-bottom: 0.5rem !important;
}
.py-lg-3 {
padding-top: 1rem !important;
padding-bottom: 1rem !important;
}
.py-lg-4 {
padding-top: 1.5rem !important;
padding-bottom: 1.5rem !important;
}
.py-lg-5 {
padding-top: 3rem !important;
padding-bottom: 3rem !important;
}
.pt-lg-0 {
padding-top: 0 !important;
}
.pt-lg-1 {
padding-top: 0.25rem !important;
}
.pt-lg-2 {
padding-top: 0.5rem !important;
}
.pt-lg-3 {
padding-top: 1rem !important;
}
.pt-lg-4 {
padding-top: 1.5rem !important;
}
.pt-lg-5 {
padding-top: 3rem !important;
}
.pe-lg-0 {
padding-right: 0 !important;
}
.pe-lg-1 {
padding-right: 0.25rem !important;
}
.pe-lg-2 {
padding-right: 0.5rem !important;
}
.pe-lg-3 {
padding-right: 1rem !important;
}
.pe-lg-4 {
padding-right: 1.5rem !important;
}
.pe-lg-5 {
padding-right: 3rem !important;
}
.pb-lg-0 {
padding-bottom: 0 !important;
}
.pb-lg-1 {
padding-bottom: 0.25rem !important;
}
.pb-lg-2 {
padding-bottom: 0.5rem !important;
}
.pb-lg-3 {
padding-bottom: 1rem !important;
}
.pb-lg-4 {
padding-bottom: 1.5rem !important;
}
.pb-lg-5 {
padding-bottom: 3rem !important;
}
.ps-lg-0 {
padding-left: 0 !important;
}
.ps-lg-1 {
padding-left: 0.25rem !important;
}
.ps-lg-2 {
padding-left: 0.5rem !important;
}
.ps-lg-3 {
padding-left: 1rem !important;
}
.ps-lg-4 {
padding-left: 1.5rem !important;
}
.ps-lg-5 {
padding-left: 3rem !important;
}
}
@media (min-width: 1200px) {
.d-xl-inline {
display: inline !important;
}
.d-xl-inline-block {
display: inline-block !important;
}
.d-xl-block {
display: block !important;
}
.d-xl-grid {
display: grid !important;
}
.d-xl-table {
display: table !important;
}
.d-xl-table-row {
display: table-row !important;
}
.d-xl-table-cell {
display: table-cell !important;
}
.d-xl-flex {
display: flex !important;
}
.d-xl-inline-flex {
display: inline-flex !important;
}
.d-xl-none {
display: none !important;
}
.flex-xl-fill {
flex: 1 1 auto !important;
}
.flex-xl-row {
flex-direction: row !important;
}
.flex-xl-column {
flex-direction: column !important;
}
.flex-xl-row-reverse {
flex-direction: row-reverse !important;
}
.flex-xl-column-reverse {
flex-direction: column-reverse !important;
}
.flex-xl-grow-0 {
flex-grow: 0 !important;
}
.flex-xl-grow-1 {
flex-grow: 1 !important;
}
.flex-xl-shrink-0 {
flex-shrink: 0 !important;
}
.flex-xl-shrink-1 {
flex-shrink: 1 !important;
}
.flex-xl-wrap {
flex-wrap: wrap !important;
}
.flex-xl-nowrap {
flex-wrap: nowrap !important;
}
.flex-xl-wrap-reverse {
flex-wrap: wrap-reverse !important;
}
.justify-content-xl-start {
justify-content: flex-start !important;
}
.justify-content-xl-end {
justify-content: flex-end !important;
}
.justify-content-xl-center {
justify-content: center !important;
}
.justify-content-xl-between {
justify-content: space-between !important;
}
.justify-content-xl-around {
justify-content: space-around !important;
}
.justify-content-xl-evenly {
justify-content: space-evenly !important;
}
.align-items-xl-start {
align-items: flex-start !important;
}
.align-items-xl-end {
align-items: flex-end !important;
}
.align-items-xl-center {
align-items: center !important;
}
.align-items-xl-baseline {
align-items: baseline !important;
}
.align-items-xl-stretch {
align-items: stretch !important;
}
.align-content-xl-start {
align-content: flex-start !important;
}
.align-content-xl-end {
align-content: flex-end !important;
}
.align-content-xl-center {
align-content: center !important;
}
.align-content-xl-between {
align-content: space-between !important;
}
.align-content-xl-around {
align-content: space-around !important;
}
.align-content-xl-stretch {
align-content: stretch !important;
}
.align-self-xl-auto {
align-self: auto !important;
}
.align-self-xl-start {
align-self: flex-start !important;
}
.align-self-xl-end {
align-self: flex-end !important;
}
.align-self-xl-center {
align-self: center !important;
}
.align-self-xl-baseline {
align-self: baseline !important;
}
.align-self-xl-stretch {
align-self: stretch !important;
}
.order-xl-first {
order: -1 !important;
}
.order-xl-0 {
order: 0 !important;
}
.order-xl-1 {
order: 1 !important;
}
.order-xl-2 {
order: 2 !important;
}
.order-xl-3 {
order: 3 !important;
}
.order-xl-4 {
order: 4 !important;
}
.order-xl-5 {
order: 5 !important;
}
.order-xl-last {
order: 6 !important;
}
.m-xl-0 {
margin: 0 !important;
}
.m-xl-1 {
margin: 0.25rem !important;
}
.m-xl-2 {
margin: 0.5rem !important;
}
.m-xl-3 {
margin: 1rem !important;
}
.m-xl-4 {
margin: 1.5rem !important;
}
.m-xl-5 {
margin: 3rem !important;
}
.m-xl-auto {
margin: auto !important;
}
.mx-xl-0 {
margin-right: 0 !important;
margin-left: 0 !important;
}
.mx-xl-1 {
margin-right: 0.25rem !important;
margin-left: 0.25rem !important;
}
.mx-xl-2 {
margin-right: 0.5rem !important;
margin-left: 0.5rem !important;
}
.mx-xl-3 {
margin-right: 1rem !important;
margin-left: 1rem !important;
}
.mx-xl-4 {
margin-right: 1.5rem !important;
margin-left: 1.5rem !important;
}
.mx-xl-5 {
margin-right: 3rem !important;
margin-left: 3rem !important;
}
.mx-xl-auto {
margin-right: auto !important;
margin-left: auto !important;
}
.my-xl-0 {
margin-top: 0 !important;
margin-bottom: 0 !important;
}
.my-xl-1 {
margin-top: 0.25rem !important;
margin-bottom: 0.25rem !important;
}
.my-xl-2 {
margin-top: 0.5rem !important;
margin-bottom: 0.5rem !important;
}
.my-xl-3 {
margin-top: 1rem !important;
margin-bottom: 1rem !important;
}
.my-xl-4 {
margin-top: 1.5rem !important;
margin-bottom: 1.5rem !important;
}
.my-xl-5 {
margin-top: 3rem !important;
margin-bottom: 3rem !important;
}
.my-xl-auto {
margin-top: auto !important;
margin-bottom: auto !important;
}
.mt-xl-0 {
margin-top: 0 !important;
}
.mt-xl-1 {
margin-top: 0.25rem !important;
}
.mt-xl-2 {
margin-top: 0.5rem !important;
}
.mt-xl-3 {
margin-top: 1rem !important;
}
.mt-xl-4 {
margin-top: 1.5rem !important;
}
.mt-xl-5 {
margin-top: 3rem !important;
}
.mt-xl-auto {
margin-top: auto !important;
}
.me-xl-0 {
margin-right: 0 !important;
}
.me-xl-1 {
margin-right: 0.25rem !important;
}
.me-xl-2 {
margin-right: 0.5rem !important;
}
.me-xl-3 {
margin-right: 1rem !important;
}
.me-xl-4 {
margin-right: 1.5rem !important;
}
.me-xl-5 {
margin-right: 3rem !important;
}
.me-xl-auto {
margin-right: auto !important;
}
.mb-xl-0 {
margin-bottom: 0 !important;
}
.mb-xl-1 {
margin-bottom: 0.25rem !important;
}
.mb-xl-2 {
margin-bottom: 0.5rem !important;
}
.mb-xl-3 {
margin-bottom: 1rem !important;
}
.mb-xl-4 {
margin-bottom: 1.5rem !important;
}
.mb-xl-5 {
margin-bottom: 3rem !important;
}
.mb-xl-auto {
margin-bottom: auto !important;
}
.ms-xl-0 {
margin-left: 0 !important;
}
.ms-xl-1 {
margin-left: 0.25rem !important;
}
.ms-xl-2 {
margin-left: 0.5rem !important;
}
.ms-xl-3 {
margin-left: 1rem !important;
}
.ms-xl-4 {
margin-left: 1.5rem !important;
}
.ms-xl-5 {
margin-left: 3rem !important;
}
.ms-xl-auto {
margin-left: auto !important;
}
.p-xl-0 {
padding: 0 !important;
}
.p-xl-1 {
padding: 0.25rem !important;
}
.p-xl-2 {
padding: 0.5rem !important;
}
.p-xl-3 {
padding: 1rem !important;
}
.p-xl-4 {
padding: 1.5rem !important;
}
.p-xl-5 {
padding: 3rem !important;
}
.px-xl-0 {
padding-right: 0 !important;
padding-left: 0 !important;
}
.px-xl-1 {
padding-right: 0.25rem !important;
padding-left: 0.25rem !important;
}
.px-xl-2 {
padding-right: 0.5rem !important;
padding-left: 0.5rem !important;
}
.px-xl-3 {
padding-right: 1rem !important;
padding-left: 1rem !important;
}
.px-xl-4 {
padding-right: 1.5rem !important;
padding-left: 1.5rem !important;
}
.px-xl-5 {
padding-right: 3rem !important;
padding-left: 3rem !important;
}
.py-xl-0 {
padding-top: 0 !important;
padding-bottom: 0 !important;
}
.py-xl-1 {
padding-top: 0.25rem !important;
padding-bottom: 0.25rem !important;
}
.py-xl-2 {
padding-top: 0.5rem !important;
padding-bottom: 0.5rem !important;
}
.py-xl-3 {
padding-top: 1rem !important;
padding-bottom: 1rem !important;
}
.py-xl-4 {
padding-top: 1.5rem !important;
padding-bottom: 1.5rem !important;
}
.py-xl-5 {
padding-top: 3rem !important;
padding-bottom: 3rem !important;
}
.pt-xl-0 {
padding-top: 0 !important;
}
.pt-xl-1 {
padding-top: 0.25rem !important;
}
.pt-xl-2 {
padding-top: 0.5rem !important;
}
.pt-xl-3 {
padding-top: 1rem !important;
}
.pt-xl-4 {
padding-top: 1.5rem !important;
}
.pt-xl-5 {
padding-top: 3rem !important;
}
.pe-xl-0 {
padding-right: 0 !important;
}
.pe-xl-1 {
padding-right: 0.25rem !important;
}
.pe-xl-2 {
padding-right: 0.5rem !important;
}
.pe-xl-3 {
padding-right: 1rem !important;
}
.pe-xl-4 {
padding-right: 1.5rem !important;
}
.pe-xl-5 {
padding-right: 3rem !important;
}
.pb-xl-0 {
padding-bottom: 0 !important;
}
.pb-xl-1 {
padding-bottom: 0.25rem !important;
}
.pb-xl-2 {
padding-bottom: 0.5rem !important;
}
.pb-xl-3 {
padding-bottom: 1rem !important;
}
.pb-xl-4 {
padding-bottom: 1.5rem !important;
}
.pb-xl-5 {
padding-bottom: 3rem !important;
}
.ps-xl-0 {
padding-left: 0 !important;
}
.ps-xl-1 {
padding-left: 0.25rem !important;
}
.ps-xl-2 {
padding-left: 0.5rem !important;
}
.ps-xl-3 {
padding-left: 1rem !important;
}
.ps-xl-4 {
padding-left: 1.5rem !important;
}
.ps-xl-5 {
padding-left: 3rem !important;
}
}
@media (min-width: 1400px) {
.d-xxl-inline {
display: inline !important;
}
.d-xxl-inline-block {
display: inline-block !important;
}
.d-xxl-block {
display: block !important;
}
.d-xxl-grid {
display: grid !important;
}
.d-xxl-table {
display: table !important;
}
.d-xxl-table-row {
display: table-row !important;
}
.d-xxl-table-cell {
display: table-cell !important;
}
.d-xxl-flex {
display: flex !important;
}
.d-xxl-inline-flex {
display: inline-flex !important;
}
.d-xxl-none {
display: none !important;
}
.flex-xxl-fill {
flex: 1 1 auto !important;
}
.flex-xxl-row {
flex-direction: row !important;
}
.flex-xxl-column {
flex-direction: column !important;
}
.flex-xxl-row-reverse {
flex-direction: row-reverse !important;
}
.flex-xxl-column-reverse {
flex-direction: column-reverse !important;
}
.flex-xxl-grow-0 {
flex-grow: 0 !important;
}
.flex-xxl-grow-1 {
flex-grow: 1 !important;
}
.flex-xxl-shrink-0 {
flex-shrink: 0 !important;
}
.flex-xxl-shrink-1 {
flex-shrink: 1 !important;
}
.flex-xxl-wrap {
flex-wrap: wrap !important;
}
.flex-xxl-nowrap {
flex-wrap: nowrap !important;
}
.flex-xxl-wrap-reverse {
flex-wrap: wrap-reverse !important;
}
.justify-content-xxl-start {
justify-content: flex-start !important;
}
.justify-content-xxl-end {
justify-content: flex-end !important;
}
.justify-content-xxl-center {
justify-content: center !important;
}
.justify-content-xxl-between {
justify-content: space-between !important;
}
.justify-content-xxl-around {
justify-content: space-around !important;
}
.justify-content-xxl-evenly {
justify-content: space-evenly !important;
}
.align-items-xxl-start {
align-items: flex-start !important;
}
.align-items-xxl-end {
align-items: flex-end !important;
}
.align-items-xxl-center {
align-items: center !important;
}
.align-items-xxl-baseline {
align-items: baseline !important;
}
.align-items-xxl-stretch {
align-items: stretch !important;
}
.align-content-xxl-start {
align-content: flex-start !important;
}
.align-content-xxl-end {
align-content: flex-end !important;
}
.align-content-xxl-center {
align-content: center !important;
}
.align-content-xxl-between {
align-content: space-between !important;
}
.align-content-xxl-around {
align-content: space-around !important;
}
.align-content-xxl-stretch {
align-content: stretch !important;
}
.align-self-xxl-auto {
align-self: auto !important;
}
.align-self-xxl-start {
align-self: flex-start !important;
}
.align-self-xxl-end {
align-self: flex-end !important;
}
.align-self-xxl-center {
align-self: center !important;
}
.align-self-xxl-baseline {
align-self: baseline !important;
}
.align-self-xxl-stretch {
align-self: stretch !important;
}
.order-xxl-first {
order: -1 !important;
}
.order-xxl-0 {
order: 0 !important;
}
.order-xxl-1 {
order: 1 !important;
}
.order-xxl-2 {
order: 2 !important;
}
.order-xxl-3 {
order: 3 !important;
}
.order-xxl-4 {
order: 4 !important;
}
.order-xxl-5 {
order: 5 !important;
}
.order-xxl-last {
order: 6 !important;
}
.m-xxl-0 {
margin: 0 !important;
}
.m-xxl-1 {
margin: 0.25rem !important;
}
.m-xxl-2 {
margin: 0.5rem !important;
}
.m-xxl-3 {
margin: 1rem !important;
}
.m-xxl-4 {
margin: 1.5rem !important;
}
.m-xxl-5 {
margin: 3rem !important;
}
.m-xxl-auto {
margin: auto !important;
}
.mx-xxl-0 {
margin-right: 0 !important;
margin-left: 0 !important;
}
.mx-xxl-1 {
margin-right: 0.25rem !important;
margin-left: 0.25rem !important;
}
.mx-xxl-2 {
margin-right: 0.5rem !important;
margin-left: 0.5rem !important;
}
.mx-xxl-3 {
margin-right: 1rem !important;
margin-left: 1rem !important;
}
.mx-xxl-4 {
margin-right: 1.5rem !important;
margin-left: 1.5rem !important;
}
.mx-xxl-5 {
margin-right: 3rem !important;
margin-left: 3rem !important;
}
.mx-xxl-auto {
margin-right: auto !important;
margin-left: auto !important;
}
.my-xxl-0 {
margin-top: 0 !important;
margin-bottom: 0 !important;
}
.my-xxl-1 {
margin-top: 0.25rem !important;
margin-bottom: 0.25rem !important;
}
.my-xxl-2 {
margin-top: 0.5rem !important;
margin-bottom: 0.5rem !important;
}
.my-xxl-3 {
margin-top: 1rem !important;
margin-bottom: 1rem !important;
}
.my-xxl-4 {
margin-top: 1.5rem !important;
margin-bottom: 1.5rem !important;
}
.my-xxl-5 {
margin-top: 3rem !important;
margin-bottom: 3rem !important;
}
.my-xxl-auto {
margin-top: auto !important;
margin-bottom: auto !important;
}
.mt-xxl-0 {
margin-top: 0 !important;
}
.mt-xxl-1 {
margin-top: 0.25rem !important;
}
.mt-xxl-2 {
margin-top: 0.5rem !important;
}
.mt-xxl-3 {
margin-top: 1rem !important;
}
.mt-xxl-4 {
margin-top: 1.5rem !important;
}
.mt-xxl-5 {
margin-top: 3rem !important;
}
.mt-xxl-auto {
margin-top: auto !important;
}
.me-xxl-0 {
margin-right: 0 !important;
}
.me-xxl-1 {
margin-right: 0.25rem !important;
}
.me-xxl-2 {
margin-right: 0.5rem !important;
}
.me-xxl-3 {
margin-right: 1rem !important;
}
.me-xxl-4 {
margin-right: 1.5rem !important;
}
.me-xxl-5 {
margin-right: 3rem !important;
}
.me-xxl-auto {
margin-right: auto !important;
}
.mb-xxl-0 {
margin-bottom: 0 !important;
}
.mb-xxl-1 {
margin-bottom: 0.25rem !important;
}
.mb-xxl-2 {
margin-bottom: 0.5rem !important;
}
.mb-xxl-3 {
margin-bottom: 1rem !important;
}
.mb-xxl-4 {
margin-bottom: 1.5re
gitextract_8w7z8v8t/ ├── .gitignore ├── LICENSE ├── README.md ├── application/ │ ├── dbinit.php │ ├── djvu.php │ ├── epub.php │ ├── functions.php │ ├── init.php │ ├── modules/ │ │ ├── 404/ │ │ │ ├── index.php │ │ │ └── module.conf │ │ ├── author/ │ │ │ ├── index.php │ │ │ └── module.conf │ │ ├── authors/ │ │ │ ├── index.php │ │ │ └── module.conf │ │ ├── book/ │ │ │ ├── djvu.php │ │ │ ├── docx.php │ │ │ ├── epub.php │ │ │ ├── fb.php │ │ │ ├── html.php │ │ │ ├── index.php │ │ │ ├── mobi.php │ │ │ ├── module.conf │ │ │ ├── pdf.php │ │ │ ├── rtf.php │ │ │ └── txt.php │ │ ├── fav/ │ │ │ ├── index.php │ │ │ └── module.conf │ │ ├── favlist/ │ │ │ ├── index.php │ │ │ └── module.conf │ │ ├── genres/ │ │ │ ├── index.php │ │ │ └── module.conf │ │ ├── opds/ │ │ │ ├── index.php │ │ │ └── module.conf │ │ ├── primary/ │ │ │ ├── index.php │ │ │ └── module.conf │ │ ├── series/ │ │ │ ├── index.php │ │ │ └── module.conf │ │ └── service/ │ │ ├── index.php │ │ └── module.conf │ ├── opds/ │ │ ├── author.php │ │ ├── authorsindex.php │ │ ├── fav.php │ │ ├── favs.php │ │ ├── genres.php │ │ ├── index.php │ │ ├── list.php │ │ ├── listgenres.php │ │ ├── main.php │ │ ├── search.php │ │ ├── search_author.php │ │ ├── search_book.php │ │ └── sequencesindex.php │ ├── public/ │ │ ├── bootstrap/ │ │ │ ├── css/ │ │ │ │ ├── bootstrap-grid.css │ │ │ │ ├── bootstrap-grid.rtl.css │ │ │ │ ├── bootstrap-reboot.css │ │ │ │ ├── bootstrap-reboot.rtl.css │ │ │ │ ├── bootstrap-utilities.css │ │ │ │ ├── bootstrap-utilities.rtl.css │ │ │ │ ├── bootstrap.css │ │ │ │ └── bootstrap.rtl.css │ │ │ └── js/ │ │ │ ├── bootstrap.bundle.js │ │ │ ├── bootstrap.esm.js │ │ │ └── bootstrap.js │ │ ├── css/ │ │ │ ├── css.css │ │ │ └── style.css │ │ ├── extract_author.php │ │ ├── extract_cover.php │ │ ├── extract_usr.php │ │ ├── fb2.php │ │ ├── index.php │ │ ├── js/ │ │ │ ├── EMFJS.bundle.js │ │ │ ├── RTFJS.bundle.js │ │ │ ├── WMFJS.bundle.js │ │ │ ├── djvu.js │ │ │ ├── djvu_viewer.js │ │ │ ├── pdf.js │ │ │ └── pdf.worker.js │ │ ├── opds-opensearch.xml │ │ ├── opds-opensearch.xml.php │ │ ├── save_position.php │ │ └── usr.php │ ├── renderer.php │ ├── tools/ │ │ ├── app_db_converter.py │ │ ├── app_import_sql.sh │ │ ├── app_reindex.sh │ │ ├── app_topg │ │ ├── app_update_zip_list.php │ │ ├── cleanup_db.sql │ │ ├── dbinit.sh │ │ ├── external_services_config/ │ │ │ ├── README.md │ │ │ ├── docker-compose.yml │ │ │ ├── external_postgres_init.sql │ │ │ ├── flibusta.conf │ │ │ └── flibusta_entrypoint.sh │ │ └── update_vectors.sql │ └── webroot.php ├── blob/ │ └── 1 ├── docker-compose.yml ├── getcovers.sh ├── getsql.sh ├── phpdocker/ │ ├── nginx/ │ │ └── nginx.conf │ ├── pg/ │ │ ├── Dockerfile │ │ └── init_db.sql │ └── php-fpm/ │ ├── Dockerfile │ ├── php-fpm.conf │ └── php-ini-overrides.ini ├── secrets/ │ ├── flibusta_pwd.txt │ └── postgres_admin_pwd.txt └── update_daily.sh
Showing preview only (434K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (5804 symbols across 20 files)
FILE: application/djvu.php
class Djvu (line 9) | class Djvu {
method Djvu (line 19) | function Djvu ( $filename ) {
method NumberOfPages (line 30) | function NumberOfPages ( ) {
method GetPage (line 67) | function GetPage ( $page, $contents = false, $force_ps = false, $force...
method GetPageThumbnail (line 114) | function GetPageThumbnail ( $page, $size=300 ) {
method StoredChunks (line 142) | function StoredChunks ( ) {
FILE: application/epub.php
class EPub (line 7) | class EPub {
method __construct (line 21) | public function __construct($file){
method file (line 58) | public function file(){
method save (line 65) | public function save(){
method Authors (line 98) | public function Authors($authors=false){
method Title (line 156) | public function Title($title=false){
method Language (line 165) | public function Language($lang=false){
method Publisher (line 174) | public function Publisher($publisher=false){
method Copyright (line 183) | public function Copyright($rights=false){
method Description (line 192) | public function Description($description=false){
method ISBN (line 201) | public function ISBN($isbn=false){
method Google (line 210) | public function Google($google=false){
method Amazon (line 219) | public function Amazon($amazon=false){
method Subjects (line 231) | public function Subjects($subjects=false){
method Cover (line 287) | public function Cover($path=false, $mime=false){
method getset (line 354) | protected function getset($item,$value=false,$att=false,$aval=false){
method no_cover (line 401) | protected function no_cover(){
method reparse (line 415) | protected function reparse() {
class EPubDOMXPath (line 421) | class EPubDOMXPath extends DOMXPath {
method __construct (line 422) | public function __construct(DOMDocument $doc){
class EPubDOMElement (line 433) | class EPubDOMElement extends DOMElement {
method __construct (line 441) | public function __construct($name, $value='', $namespaceURI=''){
method newChild (line 456) | public function newChild($name, $value=''){
method splitns (line 477) | public function splitns($name){
method attr (line 486) | public function attr($attr,$value=null){
method delete (line 530) | public function delete(){
FILE: application/functions.php
function bbc2html (line 3) | function bbc2html($content) {
function show_gpager (line 28) | function show_gpager($page_count, $block_size = 100) {
function pg_array_parse (line 74) | function pg_array_parse($literal){
function to_pg_array (line 84) | function to_pg_array($set) {
function book_small_pg (line 101) | function book_small_pg($book, $webroot='',$full = false) {
function book_info_pg (line 148) | function book_info_pg($book, $webroot = '', $full = false) {
function russian_date (line 281) | function russian_date() {
function transliterate (line 338) | function transliterate($string){
function stars (line 379) | function stars($rating, $webroot) {
function cut_str (line 391) | function cut_str($string, $maxlen=700) {
function cut_str2 (line 404) | function cut_str2($string, $maxlen=700) {
function clean_str (line 414) | function clean_str($input) {
function decode_gurl (line 429) | function decode_gurl($webroot,$mobile = false) {
function safe_str (line 498) | function safe_str($str) {
function mobile (line 503) | function mobile() {
function formatSizeUnits (line 536) | function formatSizeUnits($bytes)
function opds_book (line 566) | function opds_book($b,$webroot = '') {
FILE: application/modules/book/index.php
function nl2p (line 4) | function nl2p($string) {
function str_replace_first (line 30) | function str_replace_first($from, $to, $content) {
FILE: application/modules/service/index.php
function get_ds (line 10) | function get_ds($path){
FILE: application/public/bootstrap/js/bootstrap.bundle.js
function getUidEvent (line 353) | function getUidEvent(element, uid) {
function getEvent (line 357) | function getEvent(element) {
function bootstrapHandler (line 364) | function bootstrapHandler(element, fn) {
function bootstrapDelegationHandler (line 376) | function bootstrapDelegationHandler(element, selector, fn) {
function findHandler (line 401) | function findHandler(events, handler, delegationSelector = null) {
function normalizeParams (line 415) | function normalizeParams(originalTypeEvent, handler, delegationFn) {
function addHandler (line 428) | function addHandler(element, originalTypeEvent, handler, delegationFn, o...
function removeHandler (line 476) | function removeHandler(element, events, typeEvent, handler, delegationSe...
function removeNamespacedHandlers (line 487) | function removeNamespacedHandlers(element, events, typeEvent, namespace) {
function getTypeEvent (line 497) | function getTypeEvent(event) {
method on (line 504) | on(element, event, handler, delegationFn) {
method one (line 508) | one(element, event, handler, delegationFn) {
method off (line 512) | off(element, originalTypeEvent, handler, delegationFn) {
method trigger (line 549) | trigger(element, event, args) {
method set (line 625) | set(element, key, instance) {
method get (line 642) | get(element, key) {
method remove (line 650) | remove(element, key) {
class BaseComponent (line 679) | class BaseComponent {
method constructor (line 680) | constructor(element) {
method dispose (line 691) | dispose() {
method _queueCallback (line 699) | _queueCallback(callback, element, isAnimated = true) {
method getInstance (line 705) | static getInstance(element) {
method getOrCreateInstance (line 709) | static getOrCreateInstance(element, config = {}) {
method VERSION (line 713) | static get VERSION() {
method NAME (line 717) | static get NAME() {
method DATA_KEY (line 721) | static get DATA_KEY() {
method EVENT_KEY (line 725) | static get EVENT_KEY() {
class Alert (line 782) | class Alert extends BaseComponent {
method NAME (line 784) | static get NAME() {
method close (line 789) | close() {
method _destroyElement (line 804) | _destroyElement() {
method jQueryInterface (line 812) | static jQueryInterface(config) {
class Button (line 871) | class Button extends BaseComponent {
method NAME (line 873) | static get NAME() {
method toggle (line 878) | toggle() {
method jQueryInterface (line 884) | static jQueryInterface(config) {
function normalizeData (line 923) | function normalizeData(val) {
function normalizeDataKey (line 943) | function normalizeDataKey(key) {
method setDataAttribute (line 948) | setDataAttribute(element, key, value) {
method removeDataAttribute (line 952) | removeDataAttribute(element, key) {
method getDataAttributes (line 956) | getDataAttributes(element) {
method getDataAttribute (line 970) | getDataAttribute(element, key) {
method offset (line 974) | offset(element) {
method position (line 982) | position(element) {
method find (line 999) | find(selector, element = document.documentElement) {
method findOne (line 1003) | findOne(selector, element = document.documentElement) {
method children (line 1007) | children(element, selector) {
method parents (line 1011) | parents(element, selector) {
method prev (line 1026) | prev(element, selector) {
method next (line 1040) | next(element, selector) {
method focusableChildren (line 1054) | focusableChildren(element) {
class Carousel (line 1144) | class Carousel extends BaseComponent {
method constructor (line 1145) | constructor(element, config) {
method Default (line 1164) | static get Default() {
method NAME (line 1168) | static get NAME() {
method next (line 1173) | next() {
method nextWhenVisible (line 1177) | nextWhenVisible() {
method prev (line 1185) | prev() {
method pause (line 1189) | pause(event) {
method cycle (line 1203) | cycle(event) {
method to (line 1220) | to(index) {
method _getConfig (line 1246) | _getConfig(config) {
method _handleSwipe (line 1255) | _handleSwipe() {
method _addEventListeners (line 1272) | _addEventListeners() {
method _addTouchEventListeners (line 1287) | _addTouchEventListeners() {
method _keydown (line 1346) | _keydown(event) {
method _getItemIndex (line 1360) | _getItemIndex(element) {
method _getItemByOrder (line 1365) | _getItemByOrder(order, activeElement) {
method _triggerSlideEvent (line 1370) | _triggerSlideEvent(relatedTarget, eventDirectionName) {
method _setActiveIndicatorElement (line 1383) | _setActiveIndicatorElement(element) {
method _updateInterval (line 1400) | _updateInterval() {
method _slide (line 1417) | _slide(directionOrOrder, element) {
method _directionToOrder (line 1501) | _directionToOrder(direction) {
method _orderToDirection (line 1513) | _orderToDirection(order) {
method carouselInterface (line 1526) | static carouselInterface(element, config) {
method jQueryInterface (line 1554) | static jQueryInterface(config) {
method dataApiClickHandler (line 1560) | static dataApiClickHandler(event) {
class Collapse (line 1655) | class Collapse extends BaseComponent {
method constructor (line 1656) | constructor(element, config) {
method Default (line 1687) | static get Default() {
method NAME (line 1691) | static get NAME() {
method toggle (line 1696) | toggle() {
method show (line 1704) | show() {
method hide (line 1777) | hide() {
method _isShown (line 1825) | _isShown(element = this._element) {
method _getConfig (line 1830) | _getConfig(config) {
method _getDimension (line 1842) | _getDimension() {
method _initializeChildren (line 1846) | _initializeChildren() {
method _addAriaAndCollapsedClass (line 1861) | _addAriaAndCollapsedClass(triggerArray, isOpen) {
method jQueryInterface (line 1878) | static jQueryInterface(config) {
function getNodeName (line 1961) | function getNodeName(element) {
function getWindow (line 1965) | function getWindow(node) {
function isElement (line 1978) | function isElement(node) {
function isHTMLElement (line 1983) | function isHTMLElement(node) {
function isShadowRoot (line 1988) | function isShadowRoot(node) {
function applyStyles (line 2000) | function applyStyles(_ref) {
function effect$2 (line 2027) | function effect$2(_ref2) {
function getBasePlacement (line 2081) | function getBasePlacement(placement) {
function getBoundingClientRect (line 2086) | function getBoundingClientRect(element, // eslint-disable-next-line unus...
function getLayoutRect (line 2123) | function getLayoutRect(element) {
function contains (line 2146) | function contains(parent, child) {
function getComputedStyle$1 (line 2169) | function getComputedStyle$1(element) {
function isTableElement (line 2173) | function isTableElement(element) {
function getDocumentElement (line 2177) | function getDocumentElement(element) {
function getParentNode (line 2183) | function getParentNode(element) {
function getTrueOffsetParent (line 2200) | function getTrueOffsetParent(element) {
function getContainingBlock (line 2211) | function getContainingBlock(element) {
function getOffsetParent (line 2243) | function getOffsetParent(element) {
function getMainAxisFromPlacement (line 2258) | function getMainAxisFromPlacement(placement) {
function within (line 2266) | function within(min$1, value, max$1) {
function getFreshSideObject (line 2270) | function getFreshSideObject() {
function mergePaddingObject (line 2279) | function mergePaddingObject(paddingObject) {
function expandToHashMap (line 2283) | function expandToHashMap(value, keys) {
function arrow (line 2297) | function arrow(_ref) {
function effect$1 (line 2334) | function effect$1(_ref2) {
function getVariation (line 2372) | function getVariation(placement) {
function roundOffsetsByDPR (line 2385) | function roundOffsetsByDPR(_ref) {
function mapToStyles (line 2396) | function mapToStyles(_ref2) {
function computeStyles (line 2466) | function computeStyles(_ref4) {
function effect (line 2520) | function effect(_ref) {
function getOppositePlacement (line 2570) | function getOppositePlacement(placement) {
function getOppositeVariationPlacement (line 2580) | function getOppositeVariationPlacement(placement) {
function getWindowScroll (line 2586) | function getWindowScroll(node) {
function getWindowScrollBarX (line 2596) | function getWindowScrollBarX(element) {
function getViewportRect (line 2607) | function getViewportRect(element) {
function getDocumentRect (line 2647) | function getDocumentRect(element) {
function isScrollParent (line 2670) | function isScrollParent(element) {
function getScrollParent (line 2680) | function getScrollParent(node) {
function listScrollParents (line 2700) | function listScrollParents(element, list) {
function rectToClientRect (line 2716) | function rectToClientRect(rect) {
function getInnerBoundingClientRect (line 2725) | function getInnerBoundingClientRect(element) {
function getClientRectFromMixedType (line 2738) | function getClientRectFromMixedType(element, clippingParent) {
function getClippingParents (line 2745) | function getClippingParents(element) {
function getClippingRect (line 2762) | function getClippingRect(element, boundary, rootBoundary) {
function computeOffsets (line 2781) | function computeOffsets(_ref) {
function detectOverflow (line 2846) | function detectOverflow(state, options) {
function computeAutoPlacement (line 2900) | function computeAutoPlacement(state, options) {
function getExpandedFallbackPlacements (line 2940) | function getExpandedFallbackPlacements(placement) {
function flip (line 2949) | function flip(_ref) {
function getSideOffsets (line 3080) | function getSideOffsets(overflow, rect, preventedOffsets) {
function isAnySideFullyClipped (line 3096) | function isAnySideFullyClipped(overflow) {
function hide (line 3102) | function hide(_ref) {
function distanceAndSkiddingToXY (line 3139) | function distanceAndSkiddingToXY(placement, rects, offset) {
function offset (line 3160) | function offset(_ref2) {
function popperOffsets (line 3191) | function popperOffsets(_ref) {
function getAltAxis (line 3215) | function getAltAxis(axis) {
function preventOverflow (line 3219) | function preventOverflow(_ref) {
function getHTMLElementScroll (line 3331) | function getHTMLElementScroll(element) {
function getNodeScroll (line 3338) | function getNodeScroll(node) {
function isElementScaled (line 3346) | function isElementScaled(element) {
function getCompositeRect (line 3355) | function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
function order (line 3396) | function order(modifiers) {
function orderModifiers (line 3428) | function orderModifiers(modifiers) {
function debounce (line 3439) | function debounce(fn) {
function mergeByName (line 3455) | function mergeByName(modifiers) {
function areValidElements (line 3476) | function areValidElements() {
function popperGenerator (line 3486) | function popperGenerator(generatorOptions) {
class Dropdown (line 3783) | class Dropdown extends BaseComponent {
method constructor (line 3784) | constructor(element, config) {
method Default (line 3793) | static get Default() {
method DefaultType (line 3797) | static get DefaultType() {
method NAME (line 3801) | static get NAME() {
method toggle (line 3806) | toggle() {
method show (line 3810) | show() {
method hide (line 3851) | hide() {
method dispose (line 3863) | dispose() {
method update (line 3871) | update() {
method _completeHide (line 3880) | _completeHide(relatedTarget) {
method _getConfig (line 3907) | _getConfig(config) {
method _createPopper (line 3922) | _createPopper(parent) {
method _isShown (line 3947) | _isShown(element = this._element) {
method _getMenuElement (line 3951) | _getMenuElement() {
method _getPlacement (line 3955) | _getPlacement() {
method _detectNavbar (line 3976) | _detectNavbar() {
method _getOffset (line 3980) | _getOffset() {
method _getPopperConfig (line 3996) | _getPopperConfig() {
method _selectMenuItem (line 4024) | _selectMenuItem({
method jQueryInterface (line 4040) | static jQueryInterface(config) {
method clearMenus (line 4056) | static clearMenus(event) {
method getParentFromElement (line 4100) | static getParentFromElement(element) {
method dataApiKeydownHandler (line 4104) | static dataApiKeydownHandler(event) {
class ScrollBarHelper (line 4186) | class ScrollBarHelper {
method constructor (line 4187) | constructor() {
method getWidth (line 4191) | getWidth() {
method hide (line 4197) | hide() {
method _disableOverFlow (line 4211) | _disableOverFlow() {
method _setElementAttributes (line 4217) | _setElementAttributes(selector, styleProp, callback) {
method reset (line 4234) | reset() {
method _saveInitialAttribute (line 4244) | _saveInitialAttribute(element, styleProp) {
method _resetElementAttributes (line 4252) | _resetElementAttributes(selector, styleProp) {
method _applyManipulationCallback (line 4267) | _applyManipulationCallback(selector, callBack) {
method isOverflowing (line 4275) | isOverflowing() {
class Backdrop (line 4308) | class Backdrop {
method constructor (line 4309) | constructor(config) {
method show (line 4315) | show(callback) {
method hide (line 4334) | hide(callback) {
method _getElement (line 4349) | _getElement() {
method _getConfig (line 4364) | _getConfig(config) {
method _append (line 4374) | _append() {
method dispose (line 4387) | dispose() {
method _emulateAnimation (line 4399) | _emulateAnimation(callback) {
class FocusTrap (line 4429) | class FocusTrap {
method constructor (line 4430) | constructor(config) {
method activate (line 4436) | activate() {
method deactivate (line 4457) | deactivate() {
method _handleFocusin (line 4467) | _handleFocusin(event) {
method _handleKeydown (line 4490) | _handleKeydown(event) {
method _getConfig (line 4498) | _getConfig(config) {
class Modal (line 4560) | class Modal extends BaseComponent {
method constructor (line 4561) | constructor(element, config) {
method Default (line 4574) | static get Default() {
method NAME (line 4578) | static get NAME() {
method toggle (line 4583) | toggle(relatedTarget) {
method show (line 4587) | show(relatedTarget) {
method hide (line 4627) | hide() {
method dispose (line 4660) | dispose() {
method handleUpdate (line 4670) | handleUpdate() {
method _initializeBackDrop (line 4675) | _initializeBackDrop() {
method _initializeFocusTrap (line 4683) | _initializeFocusTrap() {
method _getConfig (line 4689) | _getConfig(config) {
method _showElement (line 4698) | _showElement(relatedTarget) {
method _setEscapeEvent (line 4742) | _setEscapeEvent() {
method _setResizeEvent (line 4757) | _setResizeEvent() {
method _hideModal (line 4765) | _hideModal() {
method _showBackdrop (line 4787) | _showBackdrop(callback) {
method _isAnimated (line 4808) | _isAnimated() {
method _triggerBackdropTransition (line 4812) | _triggerBackdropTransition() {
method _adjustDialog (line 4852) | _adjustDialog() {
method _resetAdjustments (line 4868) | _resetAdjustments() {
method jQueryInterface (line 4874) | static jQueryInterface(config, relatedTarget) {
class Offcanvas (line 4981) | class Offcanvas extends BaseComponent {
method constructor (line 4982) | constructor(element, config) {
method NAME (line 4993) | static get NAME() {
method Default (line 4997) | static get Default() {
method toggle (line 5002) | toggle(relatedTarget) {
method show (line 5006) | show(relatedTarget) {
method hide (line 5049) | hide() {
method dispose (line 5089) | dispose() {
method _getConfig (line 5098) | _getConfig(config) {
method _initializeBackDrop (line 5107) | _initializeBackDrop() {
method _initializeFocusTrap (line 5117) | _initializeFocusTrap() {
method _addEventListeners (line 5123) | _addEventListeners() {
method jQueryInterface (line 5132) | static jQueryInterface(config) {
function sanitizeHtml (line 5271) | function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {
class Tooltip (line 5397) | class Tooltip extends BaseComponent {
method constructor (line 5398) | constructor(element, config) {
method Default (line 5418) | static get Default() {
method NAME (line 5422) | static get NAME() {
method Event (line 5426) | static get Event() {
method DefaultType (line 5430) | static get DefaultType() {
method enable (line 5435) | enable() {
method disable (line 5439) | disable() {
method toggleEnabled (line 5443) | toggleEnabled() {
method toggle (line 5447) | toggle(event) {
method dispose (line 5473) | dispose() {
method show (line 5486) | show() {
method hide (line 5577) | hide() {
method update (line 5625) | update() {
method isWithContent (line 5632) | isWithContent() {
method getTipElement (line 5636) | getTipElement() {
method setContent (line 5650) | setContent(tip) {
method _sanitizeAndSetContent (line 5654) | _sanitizeAndSetContent(template, content, selector) {
method setElementContent (line 5666) | setElementContent(element, content) {
method getTitle (line 5697) | getTitle() {
method updateAttachment (line 5703) | updateAttachment(attachment) {
method _initializeOnDelegatedTarget (line 5716) | _initializeOnDelegatedTarget(event, context) {
method _getOffset (line 5720) | _getOffset() {
method _resolvePossibleFunction (line 5736) | _resolvePossibleFunction(content) {
method _getPopperConfig (line 5740) | _getPopperConfig(attachment) {
method _addAttachmentClass (line 5780) | _addAttachmentClass(attachment) {
method _getAttachment (line 5784) | _getAttachment(placement) {
method _setListeners (line 5788) | _setListeners() {
method _fixTitle (line 5820) | _fixTitle() {
method _enter (line 5836) | _enter(event, context) {
method _leave (line 5863) | _leave(event, context) {
method _isWithActiveTrigger (line 5889) | _isWithActiveTrigger() {
method _getConfig (line 5899) | _getConfig(config) {
method _getDelegateConfig (line 5936) | _getDelegateConfig() {
method _cleanTipClass (line 5951) | _cleanTipClass() {
method _getBasicClassPrefix (line 5961) | _getBasicClassPrefix() {
method _handlePopperPlacementChange (line 5965) | _handlePopperPlacementChange(popperData) {
method _disposePopper (line 5981) | _disposePopper() {
method jQueryInterface (line 5990) | static jQueryInterface(config) {
class Popover (line 6061) | class Popover extends Tooltip {
method Default (line 6063) | static get Default() {
method NAME (line 6067) | static get NAME() {
method Event (line 6071) | static get Event() {
method DefaultType (line 6075) | static get DefaultType() {
method isWithContent (line 6080) | isWithContent() {
method setContent (line 6084) | setContent(tip) {
method _getContent (line 6091) | _getContent() {
method _getBasicClassPrefix (line 6095) | _getBasicClassPrefix() {
method jQueryInterface (line 6100) | static jQueryInterface(config) {
class ScrollSpy (line 6172) | class ScrollSpy extends BaseComponent {
method constructor (line 6173) | constructor(element, config) {
method Default (line 6188) | static get Default() {
method NAME (line 6192) | static get NAME() {
method refresh (line 6197) | refresh() {
method dispose (line 6225) | dispose() {
method _getConfig (line 6231) | _getConfig(config) {
method _getScrollTop (line 6241) | _getScrollTop() {
method _getScrollHeight (line 6245) | _getScrollHeight() {
method _getOffsetHeight (line 6249) | _getOffsetHeight() {
method _process (line 6253) | _process() {
method _activate (line 6291) | _activate(target) {
method _clear (line 6319) | _clear() {
method jQueryInterface (line 6324) | static jQueryInterface(config) {
class Tab (line 6398) | class Tab extends BaseComponent {
method NAME (line 6400) | static get NAME() {
method show (line 6405) | show() {
method _activate (line 6451) | _activate(element, container, callback) {
method _transitionComplete (line 6467) | _transitionComplete(element, active, callback) {
method jQueryInterface (line 6515) | static jQueryInterface(config) {
class Toast (line 6602) | class Toast extends BaseComponent {
method constructor (line 6603) | constructor(element, config) {
method DefaultType (line 6614) | static get DefaultType() {
method Default (line 6618) | static get Default() {
method NAME (line 6622) | static get NAME() {
method show (line 6627) | show() {
method hide (line 6660) | hide() {
method dispose (line 6687) | dispose() {
method _getConfig (line 6698) | _getConfig(config) {
method _maybeScheduleHide (line 6707) | _maybeScheduleHide() {
method _onInteraction (line 6721) | _onInteraction(event, isInteracting) {
method _setListeners (line 6749) | _setListeners() {
method _clearTimeout (line 6756) | _clearTimeout() {
method jQueryInterface (line 6762) | static jQueryInterface(config) {
FILE: application/public/bootstrap/js/bootstrap.esm.js
constant MAX_UID (line 14) | const MAX_UID = 1000000;
constant MILLISECONDS_MULTIPLIER (line 15) | const MILLISECONDS_MULTIPLIER = 1000;
constant TRANSITION_END (line 16) | const TRANSITION_END = 'transitionend';
function getUidEvent (line 349) | function getUidEvent(element, uid) {
function getEvent (line 353) | function getEvent(element) {
function bootstrapHandler (line 360) | function bootstrapHandler(element, fn) {
function bootstrapDelegationHandler (line 372) | function bootstrapDelegationHandler(element, selector, fn) {
function findHandler (line 397) | function findHandler(events, handler, delegationSelector = null) {
function normalizeParams (line 411) | function normalizeParams(originalTypeEvent, handler, delegationFn) {
function addHandler (line 424) | function addHandler(element, originalTypeEvent, handler, delegationFn, o...
function removeHandler (line 472) | function removeHandler(element, events, typeEvent, handler, delegationSe...
function removeNamespacedHandlers (line 483) | function removeNamespacedHandlers(element, events, typeEvent, namespace) {
function getTypeEvent (line 493) | function getTypeEvent(event) {
method on (line 500) | on(element, event, handler, delegationFn) {
method one (line 504) | one(element, event, handler, delegationFn) {
method off (line 508) | off(element, originalTypeEvent, handler, delegationFn) {
method trigger (line 545) | trigger(element, event, args) {
method set (line 621) | set(element, key, instance) {
method get (line 638) | get(element, key) {
method remove (line 646) | remove(element, key) {
constant VERSION (line 673) | const VERSION = '5.1.3';
class BaseComponent (line 675) | class BaseComponent {
method constructor (line 676) | constructor(element) {
method dispose (line 687) | dispose() {
method _queueCallback (line 695) | _queueCallback(callback, element, isAnimated = true) {
method getInstance (line 701) | static getInstance(element) {
method getOrCreateInstance (line 705) | static getOrCreateInstance(element, config = {}) {
method VERSION (line 709) | static get VERSION() {
method NAME (line 713) | static get NAME() {
method DATA_KEY (line 717) | static get DATA_KEY() {
method EVENT_KEY (line 721) | static get EVENT_KEY() {
constant EVENT_CLOSE (line 768) | const EVENT_CLOSE = `close${EVENT_KEY$c}`;
constant EVENT_CLOSED (line 769) | const EVENT_CLOSED = `closed${EVENT_KEY$c}`;
class Alert (line 778) | class Alert extends BaseComponent {
method NAME (line 780) | static get NAME() {
method close (line 785) | close() {
method _destroyElement (line 800) | _destroyElement() {
method jQueryInterface (line 808) | static jQueryInterface(config) {
class Button (line 867) | class Button extends BaseComponent {
method NAME (line 869) | static get NAME() {
method toggle (line 874) | toggle() {
method jQueryInterface (line 880) | static jQueryInterface(config) {
function normalizeData (line 919) | function normalizeData(val) {
function normalizeDataKey (line 939) | function normalizeDataKey(key) {
method setDataAttribute (line 944) | setDataAttribute(element, key, value) {
method removeDataAttribute (line 948) | removeDataAttribute(element, key) {
method getDataAttributes (line 952) | getDataAttributes(element) {
method getDataAttribute (line 966) | getDataAttribute(element, key) {
method offset (line 970) | offset(element) {
method position (line 978) | position(element) {
constant NODE_TEXT (line 993) | const NODE_TEXT = 3;
method find (line 995) | find(selector, element = document.documentElement) {
method findOne (line 999) | findOne(selector, element = document.documentElement) {
method children (line 1003) | children(element, selector) {
method parents (line 1007) | parents(element, selector) {
method prev (line 1022) | prev(element, selector) {
method next (line 1036) | next(element, selector) {
method focusableChildren (line 1050) | focusableChildren(element) {
constant ARROW_LEFT_KEY (line 1073) | const ARROW_LEFT_KEY = 'ArrowLeft';
constant ARROW_RIGHT_KEY (line 1074) | const ARROW_RIGHT_KEY = 'ArrowRight';
constant TOUCHEVENT_COMPAT_WAIT (line 1075) | const TOUCHEVENT_COMPAT_WAIT = 500;
constant SWIPE_THRESHOLD (line 1077) | const SWIPE_THRESHOLD = 40;
constant ORDER_NEXT (line 1094) | const ORDER_NEXT = 'next';
constant ORDER_PREV (line 1095) | const ORDER_PREV = 'prev';
constant DIRECTION_LEFT (line 1096) | const DIRECTION_LEFT = 'left';
constant DIRECTION_RIGHT (line 1097) | const DIRECTION_RIGHT = 'right';
constant KEY_TO_DIRECTION (line 1098) | const KEY_TO_DIRECTION = {
constant EVENT_SLIDE (line 1102) | const EVENT_SLIDE = `slide${EVENT_KEY$a}`;
constant EVENT_SLID (line 1103) | const EVENT_SLID = `slid${EVENT_KEY$a}`;
constant EVENT_KEYDOWN (line 1104) | const EVENT_KEYDOWN = `keydown${EVENT_KEY$a}`;
constant EVENT_MOUSEENTER (line 1105) | const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$a}`;
constant EVENT_MOUSELEAVE (line 1106) | const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$a}`;
constant EVENT_TOUCHSTART (line 1107) | const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$a}`;
constant EVENT_TOUCHMOVE (line 1108) | const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$a}`;
constant EVENT_TOUCHEND (line 1109) | const EVENT_TOUCHEND = `touchend${EVENT_KEY$a}`;
constant EVENT_POINTERDOWN (line 1110) | const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$a}`;
constant EVENT_POINTERUP (line 1111) | const EVENT_POINTERUP = `pointerup${EVENT_KEY$a}`;
constant EVENT_DRAG_START (line 1112) | const EVENT_DRAG_START = `dragstart${EVENT_KEY$a}`;
constant CLASS_NAME_CAROUSEL (line 1115) | const CLASS_NAME_CAROUSEL = 'carousel';
constant CLASS_NAME_SLIDE (line 1117) | const CLASS_NAME_SLIDE = 'slide';
constant CLASS_NAME_END (line 1118) | const CLASS_NAME_END = 'carousel-item-end';
constant CLASS_NAME_START (line 1119) | const CLASS_NAME_START = 'carousel-item-start';
constant CLASS_NAME_NEXT (line 1120) | const CLASS_NAME_NEXT = 'carousel-item-next';
constant CLASS_NAME_PREV (line 1121) | const CLASS_NAME_PREV = 'carousel-item-prev';
constant CLASS_NAME_POINTER_EVENT (line 1122) | const CLASS_NAME_POINTER_EVENT = 'pointer-event';
constant SELECTOR_ACTIVE_ITEM (line 1124) | const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';
constant SELECTOR_ITEM (line 1125) | const SELECTOR_ITEM = '.carousel-item';
constant SELECTOR_ITEM_IMG (line 1126) | const SELECTOR_ITEM_IMG = '.carousel-item img';
constant SELECTOR_NEXT_PREV (line 1127) | const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';
constant SELECTOR_INDICATORS (line 1128) | const SELECTOR_INDICATORS = '.carousel-indicators';
constant SELECTOR_INDICATOR (line 1129) | const SELECTOR_INDICATOR = '[data-bs-target]';
constant SELECTOR_DATA_SLIDE (line 1130) | const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';
constant SELECTOR_DATA_RIDE (line 1131) | const SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]';
constant POINTER_TYPE_TOUCH (line 1132) | const POINTER_TYPE_TOUCH = 'touch';
constant POINTER_TYPE_PEN (line 1133) | const POINTER_TYPE_PEN = 'pen';
class Carousel (line 1140) | class Carousel extends BaseComponent {
method constructor (line 1141) | constructor(element, config) {
method Default (line 1160) | static get Default() {
method NAME (line 1164) | static get NAME() {
method next (line 1169) | next() {
method nextWhenVisible (line 1173) | nextWhenVisible() {
method prev (line 1181) | prev() {
method pause (line 1185) | pause(event) {
method cycle (line 1199) | cycle(event) {
method to (line 1216) | to(index) {
method _getConfig (line 1242) | _getConfig(config) {
method _handleSwipe (line 1251) | _handleSwipe() {
method _addEventListeners (line 1268) | _addEventListeners() {
method _addTouchEventListeners (line 1283) | _addTouchEventListeners() {
method _keydown (line 1342) | _keydown(event) {
method _getItemIndex (line 1356) | _getItemIndex(element) {
method _getItemByOrder (line 1361) | _getItemByOrder(order, activeElement) {
method _triggerSlideEvent (line 1366) | _triggerSlideEvent(relatedTarget, eventDirectionName) {
method _setActiveIndicatorElement (line 1379) | _setActiveIndicatorElement(element) {
method _updateInterval (line 1396) | _updateInterval() {
method _slide (line 1413) | _slide(directionOrOrder, element) {
method _directionToOrder (line 1497) | _directionToOrder(direction) {
method _orderToDirection (line 1509) | _orderToDirection(order) {
method carouselInterface (line 1522) | static carouselInterface(element, config) {
method jQueryInterface (line 1550) | static jQueryInterface(config) {
method dataApiClickHandler (line 1556) | static dataApiClickHandler(event) {
constant CLASS_NAME_COLLAPSE (line 1636) | const CLASS_NAME_COLLAPSE = 'collapse';
constant CLASS_NAME_COLLAPSING (line 1637) | const CLASS_NAME_COLLAPSING = 'collapsing';
constant CLASS_NAME_COLLAPSED (line 1638) | const CLASS_NAME_COLLAPSED = 'collapsed';
constant CLASS_NAME_DEEPER_CHILDREN (line 1639) | const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CL...
constant CLASS_NAME_HORIZONTAL (line 1640) | const CLASS_NAME_HORIZONTAL = 'collapse-horizontal';
constant WIDTH (line 1641) | const WIDTH = 'width';
constant HEIGHT (line 1642) | const HEIGHT = 'height';
constant SELECTOR_ACTIVES (line 1643) | const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';
class Collapse (line 1651) | class Collapse extends BaseComponent {
method constructor (line 1652) | constructor(element, config) {
method Default (line 1683) | static get Default() {
method NAME (line 1687) | static get NAME() {
method toggle (line 1692) | toggle() {
method show (line 1700) | show() {
method hide (line 1773) | hide() {
method _isShown (line 1821) | _isShown(element = this._element) {
method _getConfig (line 1826) | _getConfig(config) {
method _getDimension (line 1838) | _getDimension() {
method _initializeChildren (line 1842) | _initializeChildren() {
method _addAriaAndCollapsedClass (line 1857) | _addAriaAndCollapsedClass(triggerArray, isOpen) {
method jQueryInterface (line 1874) | static jQueryInterface(config) {
constant SPACE_KEY (line 1942) | const SPACE_KEY = 'Space';
constant ARROW_UP_KEY (line 1944) | const ARROW_UP_KEY = 'ArrowUp';
constant ARROW_DOWN_KEY (line 1945) | const ARROW_DOWN_KEY = 'ArrowDown';
constant RIGHT_MOUSE_BUTTON (line 1946) | const RIGHT_MOUSE_BUTTON = 2;
constant REGEXP_KEYDOWN (line 1948) | const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${E...
constant EVENT_KEYDOWN_DATA_API (line 1954) | const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$8}${DATA_API_KEY$4}`;
constant EVENT_KEYUP_DATA_API (line 1955) | const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$8}${DATA_API_KEY$4}`;
constant CLASS_NAME_DROPUP (line 1957) | const CLASS_NAME_DROPUP = 'dropup';
constant CLASS_NAME_DROPEND (line 1958) | const CLASS_NAME_DROPEND = 'dropend';
constant CLASS_NAME_DROPSTART (line 1959) | const CLASS_NAME_DROPSTART = 'dropstart';
constant CLASS_NAME_NAVBAR (line 1960) | const CLASS_NAME_NAVBAR = 'navbar';
constant SELECTOR_MENU (line 1962) | const SELECTOR_MENU = '.dropdown-menu';
constant SELECTOR_NAVBAR_NAV (line 1963) | const SELECTOR_NAVBAR_NAV = '.navbar-nav';
constant SELECTOR_VISIBLE_ITEMS (line 1964) | const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disab...
constant PLACEMENT_TOP (line 1965) | const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';
constant PLACEMENT_TOPEND (line 1966) | const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';
constant PLACEMENT_BOTTOM (line 1967) | const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';
constant PLACEMENT_BOTTOMEND (line 1968) | const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';
constant PLACEMENT_RIGHT (line 1969) | const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';
constant PLACEMENT_LEFT (line 1970) | const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';
class Dropdown (line 1993) | class Dropdown extends BaseComponent {
method constructor (line 1994) | constructor(element, config) {
method Default (line 2003) | static get Default() {
method DefaultType (line 2007) | static get DefaultType() {
method NAME (line 2011) | static get NAME() {
method toggle (line 2016) | toggle() {
method show (line 2020) | show() {
method hide (line 2061) | hide() {
method dispose (line 2073) | dispose() {
method update (line 2081) | update() {
method _completeHide (line 2090) | _completeHide(relatedTarget) {
method _getConfig (line 2117) | _getConfig(config) {
method _createPopper (line 2132) | _createPopper(parent) {
method _isShown (line 2157) | _isShown(element = this._element) {
method _getMenuElement (line 2161) | _getMenuElement() {
method _getPlacement (line 2165) | _getPlacement() {
method _detectNavbar (line 2186) | _detectNavbar() {
method _getOffset (line 2190) | _getOffset() {
method _getPopperConfig (line 2206) | _getPopperConfig() {
method _selectMenuItem (line 2234) | _selectMenuItem({
method jQueryInterface (line 2250) | static jQueryInterface(config) {
method clearMenus (line 2266) | static clearMenus(event) {
method getParentFromElement (line 2310) | static getParentFromElement(element) {
method dataApiKeydownHandler (line 2314) | static dataApiKeydownHandler(event) {
constant SELECTOR_FIXED_CONTENT (line 2393) | const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .s...
constant SELECTOR_STICKY_CONTENT (line 2394) | const SELECTOR_STICKY_CONTENT = '.sticky-top';
class ScrollBarHelper (line 2396) | class ScrollBarHelper {
method constructor (line 2397) | constructor() {
method getWidth (line 2401) | getWidth() {
method hide (line 2407) | hide() {
method _disableOverFlow (line 2421) | _disableOverFlow() {
method _setElementAttributes (line 2427) | _setElementAttributes(selector, styleProp, callback) {
method reset (line 2444) | reset() {
method _saveInitialAttribute (line 2454) | _saveInitialAttribute(element, styleProp) {
method _resetElementAttributes (line 2462) | _resetElementAttributes(selector, styleProp) {
method _applyManipulationCallback (line 2477) | _applyManipulationCallback(selector, callBack) {
method isOverflowing (line 2485) | isOverflowing() {
constant EVENT_MOUSEDOWN (line 2516) | const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$8}`;
class Backdrop (line 2518) | class Backdrop {
method constructor (line 2519) | constructor(config) {
method show (line 2525) | show(callback) {
method hide (line 2544) | hide(callback) {
method _getElement (line 2559) | _getElement() {
method _getConfig (line 2574) | _getConfig(config) {
method _append (line 2584) | _append() {
method dispose (line 2597) | dispose() {
method _emulateAnimation (line 2609) | _emulateAnimation(callback) {
constant EVENT_KEYDOWN_TAB (line 2634) | const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$7}`;
constant TAB_KEY (line 2635) | const TAB_KEY = 'Tab';
constant TAB_NAV_FORWARD (line 2636) | const TAB_NAV_FORWARD = 'forward';
constant TAB_NAV_BACKWARD (line 2637) | const TAB_NAV_BACKWARD = 'backward';
class FocusTrap (line 2639) | class FocusTrap {
method constructor (line 2640) | constructor(config) {
method activate (line 2646) | activate() {
method deactivate (line 2667) | deactivate() {
method _handleFocusin (line 2677) | _handleFocusin(event) {
method _handleKeydown (line 2700) | _handleKeydown(event) {
method _getConfig (line 2708) | _getConfig(config) {
constant EVENT_HIDE_PREVENTED (line 2746) | const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;
constant EVENT_RESIZE (line 2750) | const EVENT_RESIZE = `resize${EVENT_KEY$6}`;
constant EVENT_CLICK_DISMISS (line 2751) | const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$6}`;
constant EVENT_MOUSEUP_DISMISS (line 2753) | const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;
constant EVENT_MOUSEDOWN_DISMISS (line 2754) | const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;
constant CLASS_NAME_OPEN (line 2756) | const CLASS_NAME_OPEN = 'modal-open';
constant CLASS_NAME_STATIC (line 2759) | const CLASS_NAME_STATIC = 'modal-static';
constant SELECTOR_DIALOG (line 2761) | const SELECTOR_DIALOG = '.modal-dialog';
constant SELECTOR_MODAL_BODY (line 2762) | const SELECTOR_MODAL_BODY = '.modal-body';
class Modal (line 2770) | class Modal extends BaseComponent {
method constructor (line 2771) | constructor(element, config) {
method Default (line 2784) | static get Default() {
method NAME (line 2788) | static get NAME() {
method toggle (line 2793) | toggle(relatedTarget) {
method show (line 2797) | show(relatedTarget) {
method hide (line 2837) | hide() {
method dispose (line 2870) | dispose() {
method handleUpdate (line 2880) | handleUpdate() {
method _initializeBackDrop (line 2885) | _initializeBackDrop() {
method _initializeFocusTrap (line 2893) | _initializeFocusTrap() {
method _getConfig (line 2899) | _getConfig(config) {
method _showElement (line 2908) | _showElement(relatedTarget) {
method _setEscapeEvent (line 2952) | _setEscapeEvent() {
method _setResizeEvent (line 2967) | _setResizeEvent() {
method _hideModal (line 2975) | _hideModal() {
method _showBackdrop (line 2997) | _showBackdrop(callback) {
method _isAnimated (line 3018) | _isAnimated() {
method _triggerBackdropTransition (line 3022) | _triggerBackdropTransition() {
method _adjustDialog (line 3062) | _adjustDialog() {
method _resetAdjustments (line 3078) | _resetAdjustments() {
method jQueryInterface (line 3084) | static jQueryInterface(config, relatedTarget) {
constant ESCAPE_KEY (line 3164) | const ESCAPE_KEY = 'Escape';
constant CLASS_NAME_BACKDROP (line 3176) | const CLASS_NAME_BACKDROP = 'offcanvas-backdrop';
constant OPEN_SELECTOR (line 3177) | const OPEN_SELECTOR = '.offcanvas.show';
constant EVENT_KEYDOWN_DISMISS (line 3183) | const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;
class Offcanvas (line 3191) | class Offcanvas extends BaseComponent {
method constructor (line 3192) | constructor(element, config) {
method NAME (line 3203) | static get NAME() {
method Default (line 3207) | static get Default() {
method toggle (line 3212) | toggle(relatedTarget) {
method show (line 3216) | show(relatedTarget) {
method hide (line 3259) | hide() {
method dispose (line 3299) | dispose() {
method _getConfig (line 3308) | _getConfig(config) {
method _initializeBackDrop (line 3317) | _initializeBackDrop() {
method _initializeFocusTrap (line 3327) | _initializeFocusTrap() {
method _addEventListeners (line 3333) | _addEventListeners() {
method jQueryInterface (line 3342) | static jQueryInterface(config) {
constant ARIA_ATTRIBUTE_PATTERN (line 3410) | const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
constant SAFE_URL_PATTERN (line 3417) | const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:...
constant DATA_URL_PATTERN (line 3424) | const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|w...
function sanitizeHtml (line 3481) | function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {
constant DISALLOWED_ATTRIBUTES (line 3531) | const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitiz...
constant CLASS_NAME_MODAL (line 3590) | const CLASS_NAME_MODAL = 'modal';
constant HOVER_STATE_SHOW (line 3592) | const HOVER_STATE_SHOW = 'show';
constant HOVER_STATE_OUT (line 3593) | const HOVER_STATE_OUT = 'out';
constant SELECTOR_TOOLTIP_INNER (line 3594) | const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
constant SELECTOR_MODAL (line 3595) | const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;
constant EVENT_MODAL_HIDE (line 3596) | const EVENT_MODAL_HIDE = 'hide.bs.modal';
constant TRIGGER_HOVER (line 3597) | const TRIGGER_HOVER = 'hover';
constant TRIGGER_FOCUS (line 3598) | const TRIGGER_FOCUS = 'focus';
constant TRIGGER_CLICK (line 3599) | const TRIGGER_CLICK = 'click';
constant TRIGGER_MANUAL (line 3600) | const TRIGGER_MANUAL = 'manual';
class Tooltip (line 3607) | class Tooltip extends BaseComponent {
method constructor (line 3608) | constructor(element, config) {
method Default (line 3628) | static get Default() {
method NAME (line 3632) | static get NAME() {
method Event (line 3636) | static get Event() {
method DefaultType (line 3640) | static get DefaultType() {
method enable (line 3645) | enable() {
method disable (line 3649) | disable() {
method toggleEnabled (line 3653) | toggleEnabled() {
method toggle (line 3657) | toggle(event) {
method dispose (line 3683) | dispose() {
method show (line 3696) | show() {
method hide (line 3787) | hide() {
method update (line 3835) | update() {
method isWithContent (line 3842) | isWithContent() {
method getTipElement (line 3846) | getTipElement() {
method setContent (line 3860) | setContent(tip) {
method _sanitizeAndSetContent (line 3864) | _sanitizeAndSetContent(template, content, selector) {
method setElementContent (line 3876) | setElementContent(element, content) {
method getTitle (line 3907) | getTitle() {
method updateAttachment (line 3913) | updateAttachment(attachment) {
method _initializeOnDelegatedTarget (line 3926) | _initializeOnDelegatedTarget(event, context) {
method _getOffset (line 3930) | _getOffset() {
method _resolvePossibleFunction (line 3946) | _resolvePossibleFunction(content) {
method _getPopperConfig (line 3950) | _getPopperConfig(attachment) {
method _addAttachmentClass (line 3990) | _addAttachmentClass(attachment) {
method _getAttachment (line 3994) | _getAttachment(placement) {
method _setListeners (line 3998) | _setListeners() {
method _fixTitle (line 4030) | _fixTitle() {
method _enter (line 4046) | _enter(event, context) {
method _leave (line 4073) | _leave(event, context) {
method _isWithActiveTrigger (line 4099) | _isWithActiveTrigger() {
method _getConfig (line 4109) | _getConfig(config) {
method _getDelegateConfig (line 4146) | _getDelegateConfig() {
method _cleanTipClass (line 4161) | _cleanTipClass() {
method _getBasicClassPrefix (line 4171) | _getBasicClassPrefix() {
method _handlePopperPlacementChange (line 4175) | _handlePopperPlacementChange(popperData) {
method _disposePopper (line 4191) | _disposePopper() {
method jQueryInterface (line 4200) | static jQueryInterface(config) {
constant CLASS_PREFIX (line 4240) | const CLASS_PREFIX = 'bs-popover';
constant SELECTOR_TITLE (line 4263) | const SELECTOR_TITLE = '.popover-header';
constant SELECTOR_CONTENT (line 4264) | const SELECTOR_CONTENT = '.popover-body';
class Popover (line 4271) | class Popover extends Tooltip {
method Default (line 4273) | static get Default() {
method NAME (line 4277) | static get NAME() {
method Event (line 4281) | static get Event() {
method DefaultType (line 4285) | static get DefaultType() {
method isWithContent (line 4290) | isWithContent() {
method setContent (line 4294) | setContent(tip) {
method _getContent (line 4301) | _getContent() {
method _getBasicClassPrefix (line 4305) | _getBasicClassPrefix() {
method jQueryInterface (line 4310) | static jQueryInterface(config) {
constant EVENT_ACTIVATE (line 4361) | const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;
constant EVENT_SCROLL (line 4362) | const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;
constant EVENT_LOAD_DATA_API (line 4363) | const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;
constant CLASS_NAME_DROPDOWN_ITEM (line 4364) | const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
constant SELECTOR_DATA_SPY (line 4366) | const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]';
constant SELECTOR_NAV_LINKS (line 4368) | const SELECTOR_NAV_LINKS = '.nav-link';
constant SELECTOR_NAV_ITEMS (line 4369) | const SELECTOR_NAV_ITEMS = '.nav-item';
constant SELECTOR_LIST_ITEMS (line 4370) | const SELECTOR_LIST_ITEMS = '.list-group-item';
constant SELECTOR_LINK_ITEMS (line 4371) | const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEM...
constant METHOD_OFFSET (line 4374) | const METHOD_OFFSET = 'offset';
constant METHOD_POSITION (line 4375) | const METHOD_POSITION = 'position';
class ScrollSpy (line 4382) | class ScrollSpy extends BaseComponent {
method constructor (line 4383) | constructor(element, config) {
method Default (line 4398) | static get Default() {
method NAME (line 4402) | static get NAME() {
method refresh (line 4407) | refresh() {
method dispose (line 4435) | dispose() {
method _getConfig (line 4441) | _getConfig(config) {
method _getScrollTop (line 4451) | _getScrollTop() {
method _getScrollHeight (line 4455) | _getScrollHeight() {
method _getOffsetHeight (line 4459) | _getOffsetHeight() {
method _process (line 4463) | _process() {
method _activate (line 4501) | _activate(target) {
method _clear (line 4529) | _clear() {
method jQueryInterface (line 4534) | static jQueryInterface(config) {
constant DATA_API_KEY (line 4585) | const DATA_API_KEY = '.data-api';
constant EVENT_CLICK_DATA_API (line 4590) | const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;
constant CLASS_NAME_DROPDOWN_MENU (line 4591) | const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';
constant CLASS_NAME_ACTIVE (line 4592) | const CLASS_NAME_ACTIVE = 'active';
constant SELECTOR_DROPDOWN (line 4595) | const SELECTOR_DROPDOWN = '.dropdown';
constant SELECTOR_NAV_LIST_GROUP (line 4596) | const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
constant SELECTOR_ACTIVE (line 4597) | const SELECTOR_ACTIVE = '.active';
constant SELECTOR_ACTIVE_UL (line 4598) | const SELECTOR_ACTIVE_UL = ':scope > li > .active';
constant SELECTOR_DATA_TOGGLE (line 4599) | const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="p...
constant SELECTOR_DROPDOWN_TOGGLE (line 4600) | const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
constant SELECTOR_DROPDOWN_ACTIVE_CHILD (line 4601) | const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';
class Tab (line 4608) | class Tab extends BaseComponent {
method NAME (line 4610) | static get NAME() {
method show (line 4615) | show() {
method _activate (line 4661) | _activate(element, container, callback) {
method _transitionComplete (line 4677) | _transitionComplete(element, active, callback) {
method jQueryInterface (line 4725) | static jQueryInterface(config) {
constant NAME (line 4780) | const NAME = 'toast';
constant DATA_KEY (line 4781) | const DATA_KEY = 'bs.toast';
constant EVENT_KEY (line 4782) | const EVENT_KEY = `.${DATA_KEY}`;
constant EVENT_MOUSEOVER (line 4783) | const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;
constant EVENT_MOUSEOUT (line 4784) | const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;
constant EVENT_FOCUSIN (line 4785) | const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;
constant EVENT_FOCUSOUT (line 4786) | const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;
constant EVENT_HIDE (line 4787) | const EVENT_HIDE = `hide${EVENT_KEY}`;
constant EVENT_HIDDEN (line 4788) | const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
constant EVENT_SHOW (line 4789) | const EVENT_SHOW = `show${EVENT_KEY}`;
constant EVENT_SHOWN (line 4790) | const EVENT_SHOWN = `shown${EVENT_KEY}`;
constant CLASS_NAME_FADE (line 4791) | const CLASS_NAME_FADE = 'fade';
constant CLASS_NAME_HIDE (line 4792) | const CLASS_NAME_HIDE = 'hide';
constant CLASS_NAME_SHOW (line 4794) | const CLASS_NAME_SHOW = 'show';
constant CLASS_NAME_SHOWING (line 4795) | const CLASS_NAME_SHOWING = 'showing';
class Toast (line 4812) | class Toast extends BaseComponent {
method constructor (line 4813) | constructor(element, config) {
method DefaultType (line 4824) | static get DefaultType() {
method Default (line 4828) | static get Default() {
method NAME (line 4832) | static get NAME() {
method show (line 4837) | show() {
method hide (line 4870) | hide() {
method dispose (line 4897) | dispose() {
method _getConfig (line 4908) | _getConfig(config) {
method _maybeScheduleHide (line 4917) | _maybeScheduleHide() {
method _onInteraction (line 4931) | _onInteraction(event, isInteracting) {
method _setListeners (line 4959) | _setListeners() {
method _clearTimeout (line 4966) | _clearTimeout() {
method jQueryInterface (line 4972) | static jQueryInterface(config) {
FILE: application/public/bootstrap/js/bootstrap.js
function _interopNamespace (line 12) | function _interopNamespace(e) {
function getUidEvent (line 373) | function getUidEvent(element, uid) {
function getEvent (line 377) | function getEvent(element) {
function bootstrapHandler (line 384) | function bootstrapHandler(element, fn) {
function bootstrapDelegationHandler (line 396) | function bootstrapDelegationHandler(element, selector, fn) {
function findHandler (line 421) | function findHandler(events, handler, delegationSelector = null) {
function normalizeParams (line 435) | function normalizeParams(originalTypeEvent, handler, delegationFn) {
function addHandler (line 448) | function addHandler(element, originalTypeEvent, handler, delegationFn, o...
function removeHandler (line 496) | function removeHandler(element, events, typeEvent, handler, delegationSe...
function removeNamespacedHandlers (line 507) | function removeNamespacedHandlers(element, events, typeEvent, namespace) {
function getTypeEvent (line 517) | function getTypeEvent(event) {
method on (line 524) | on(element, event, handler, delegationFn) {
method one (line 528) | one(element, event, handler, delegationFn) {
method off (line 532) | off(element, originalTypeEvent, handler, delegationFn) {
method trigger (line 569) | trigger(element, event, args) {
method set (line 645) | set(element, key, instance) {
method get (line 662) | get(element, key) {
method remove (line 670) | remove(element, key) {
class BaseComponent (line 699) | class BaseComponent {
method constructor (line 700) | constructor(element) {
method dispose (line 711) | dispose() {
method _queueCallback (line 719) | _queueCallback(callback, element, isAnimated = true) {
method getInstance (line 725) | static getInstance(element) {
method getOrCreateInstance (line 729) | static getOrCreateInstance(element, config = {}) {
method VERSION (line 733) | static get VERSION() {
method NAME (line 737) | static get NAME() {
method DATA_KEY (line 741) | static get DATA_KEY() {
method EVENT_KEY (line 745) | static get EVENT_KEY() {
class Alert (line 802) | class Alert extends BaseComponent {
method NAME (line 804) | static get NAME() {
method close (line 809) | close() {
method _destroyElement (line 824) | _destroyElement() {
method jQueryInterface (line 832) | static jQueryInterface(config) {
class Button (line 891) | class Button extends BaseComponent {
method NAME (line 893) | static get NAME() {
method toggle (line 898) | toggle() {
method jQueryInterface (line 904) | static jQueryInterface(config) {
function normalizeData (line 943) | function normalizeData(val) {
function normalizeDataKey (line 963) | function normalizeDataKey(key) {
method setDataAttribute (line 968) | setDataAttribute(element, key, value) {
method removeDataAttribute (line 972) | removeDataAttribute(element, key) {
method getDataAttributes (line 976) | getDataAttributes(element) {
method getDataAttribute (line 990) | getDataAttribute(element, key) {
method offset (line 994) | offset(element) {
method position (line 1002) | position(element) {
method find (line 1019) | find(selector, element = document.documentElement) {
method findOne (line 1023) | findOne(selector, element = document.documentElement) {
method children (line 1027) | children(element, selector) {
method parents (line 1031) | parents(element, selector) {
method prev (line 1046) | prev(element, selector) {
method next (line 1060) | next(element, selector) {
method focusableChildren (line 1074) | focusableChildren(element) {
class Carousel (line 1164) | class Carousel extends BaseComponent {
method constructor (line 1165) | constructor(element, config) {
method Default (line 1184) | static get Default() {
method NAME (line 1188) | static get NAME() {
method next (line 1193) | next() {
method nextWhenVisible (line 1197) | nextWhenVisible() {
method prev (line 1205) | prev() {
method pause (line 1209) | pause(event) {
method cycle (line 1223) | cycle(event) {
method to (line 1240) | to(index) {
method _getConfig (line 1266) | _getConfig(config) {
method _handleSwipe (line 1275) | _handleSwipe() {
method _addEventListeners (line 1292) | _addEventListeners() {
method _addTouchEventListeners (line 1307) | _addTouchEventListeners() {
method _keydown (line 1366) | _keydown(event) {
method _getItemIndex (line 1380) | _getItemIndex(element) {
method _getItemByOrder (line 1385) | _getItemByOrder(order, activeElement) {
method _triggerSlideEvent (line 1390) | _triggerSlideEvent(relatedTarget, eventDirectionName) {
method _setActiveIndicatorElement (line 1403) | _setActiveIndicatorElement(element) {
method _updateInterval (line 1420) | _updateInterval() {
method _slide (line 1437) | _slide(directionOrOrder, element) {
method _directionToOrder (line 1521) | _directionToOrder(direction) {
method _orderToDirection (line 1533) | _orderToDirection(order) {
method carouselInterface (line 1546) | static carouselInterface(element, config) {
method jQueryInterface (line 1574) | static jQueryInterface(config) {
method dataApiClickHandler (line 1580) | static dataApiClickHandler(event) {
class Collapse (line 1675) | class Collapse extends BaseComponent {
method constructor (line 1676) | constructor(element, config) {
method Default (line 1707) | static get Default() {
method NAME (line 1711) | static get NAME() {
method toggle (line 1716) | toggle() {
method show (line 1724) | show() {
method hide (line 1797) | hide() {
method _isShown (line 1845) | _isShown(element = this._element) {
method _getConfig (line 1850) | _getConfig(config) {
method _getDimension (line 1862) | _getDimension() {
method _initializeChildren (line 1866) | _initializeChildren() {
method _addAriaAndCollapsedClass (line 1881) | _addAriaAndCollapsedClass(triggerArray, isOpen) {
method jQueryInterface (line 1898) | static jQueryInterface(config) {
class Dropdown (line 2017) | class Dropdown extends BaseComponent {
method constructor (line 2018) | constructor(element, config) {
method Default (line 2027) | static get Default() {
method DefaultType (line 2031) | static get DefaultType() {
method NAME (line 2035) | static get NAME() {
method toggle (line 2040) | toggle() {
method show (line 2044) | show() {
method hide (line 2085) | hide() {
method dispose (line 2097) | dispose() {
method update (line 2105) | update() {
method _completeHide (line 2114) | _completeHide(relatedTarget) {
method _getConfig (line 2141) | _getConfig(config) {
method _createPopper (line 2156) | _createPopper(parent) {
method _isShown (line 2181) | _isShown(element = this._element) {
method _getMenuElement (line 2185) | _getMenuElement() {
method _getPlacement (line 2189) | _getPlacement() {
method _detectNavbar (line 2210) | _detectNavbar() {
method _getOffset (line 2214) | _getOffset() {
method _getPopperConfig (line 2230) | _getPopperConfig() {
method _selectMenuItem (line 2258) | _selectMenuItem({
method jQueryInterface (line 2274) | static jQueryInterface(config) {
method clearMenus (line 2290) | static clearMenus(event) {
method getParentFromElement (line 2334) | static getParentFromElement(element) {
method dataApiKeydownHandler (line 2338) | static dataApiKeydownHandler(event) {
class ScrollBarHelper (line 2420) | class ScrollBarHelper {
method constructor (line 2421) | constructor() {
method getWidth (line 2425) | getWidth() {
method hide (line 2431) | hide() {
method _disableOverFlow (line 2445) | _disableOverFlow() {
method _setElementAttributes (line 2451) | _setElementAttributes(selector, styleProp, callback) {
method reset (line 2468) | reset() {
method _saveInitialAttribute (line 2478) | _saveInitialAttribute(element, styleProp) {
method _resetElementAttributes (line 2486) | _resetElementAttributes(selector, styleProp) {
method _applyManipulationCallback (line 2501) | _applyManipulationCallback(selector, callBack) {
method isOverflowing (line 2509) | isOverflowing() {
class Backdrop (line 2542) | class Backdrop {
method constructor (line 2543) | constructor(config) {
method show (line 2549) | show(callback) {
method hide (line 2568) | hide(callback) {
method _getElement (line 2583) | _getElement() {
method _getConfig (line 2598) | _getConfig(config) {
method _append (line 2608) | _append() {
method dispose (line 2621) | dispose() {
method _emulateAnimation (line 2633) | _emulateAnimation(callback) {
class FocusTrap (line 2663) | class FocusTrap {
method constructor (line 2664) | constructor(config) {
method activate (line 2670) | activate() {
method deactivate (line 2691) | deactivate() {
method _handleFocusin (line 2701) | _handleFocusin(event) {
method _handleKeydown (line 2724) | _handleKeydown(event) {
method _getConfig (line 2732) | _getConfig(config) {
class Modal (line 2794) | class Modal extends BaseComponent {
method constructor (line 2795) | constructor(element, config) {
method Default (line 2808) | static get Default() {
method NAME (line 2812) | static get NAME() {
method toggle (line 2817) | toggle(relatedTarget) {
method show (line 2821) | show(relatedTarget) {
method hide (line 2861) | hide() {
method dispose (line 2894) | dispose() {
method handleUpdate (line 2904) | handleUpdate() {
method _initializeBackDrop (line 2909) | _initializeBackDrop() {
method _initializeFocusTrap (line 2917) | _initializeFocusTrap() {
method _getConfig (line 2923) | _getConfig(config) {
method _showElement (line 2932) | _showElement(relatedTarget) {
method _setEscapeEvent (line 2976) | _setEscapeEvent() {
method _setResizeEvent (line 2991) | _setResizeEvent() {
method _hideModal (line 2999) | _hideModal() {
method _showBackdrop (line 3021) | _showBackdrop(callback) {
method _isAnimated (line 3042) | _isAnimated() {
method _triggerBackdropTransition (line 3046) | _triggerBackdropTransition() {
method _adjustDialog (line 3086) | _adjustDialog() {
method _resetAdjustments (line 3102) | _resetAdjustments() {
method jQueryInterface (line 3108) | static jQueryInterface(config, relatedTarget) {
class Offcanvas (line 3215) | class Offcanvas extends BaseComponent {
method constructor (line 3216) | constructor(element, config) {
method NAME (line 3227) | static get NAME() {
method Default (line 3231) | static get Default() {
method toggle (line 3236) | toggle(relatedTarget) {
method show (line 3240) | show(relatedTarget) {
method hide (line 3283) | hide() {
method dispose (line 3323) | dispose() {
method _getConfig (line 3332) | _getConfig(config) {
method _initializeBackDrop (line 3341) | _initializeBackDrop() {
method _initializeFocusTrap (line 3351) | _initializeFocusTrap() {
method _addEventListeners (line 3357) | _addEventListeners() {
method jQueryInterface (line 3366) | static jQueryInterface(config) {
function sanitizeHtml (line 3505) | function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {
class Tooltip (line 3631) | class Tooltip extends BaseComponent {
method constructor (line 3632) | constructor(element, config) {
method Default (line 3652) | static get Default() {
method NAME (line 3656) | static get NAME() {
method Event (line 3660) | static get Event() {
method DefaultType (line 3664) | static get DefaultType() {
method enable (line 3669) | enable() {
method disable (line 3673) | disable() {
method toggleEnabled (line 3677) | toggleEnabled() {
method toggle (line 3681) | toggle(event) {
method dispose (line 3707) | dispose() {
method show (line 3720) | show() {
method hide (line 3811) | hide() {
method update (line 3859) | update() {
method isWithContent (line 3866) | isWithContent() {
method getTipElement (line 3870) | getTipElement() {
method setContent (line 3884) | setContent(tip) {
method _sanitizeAndSetContent (line 3888) | _sanitizeAndSetContent(template, content, selector) {
method setElementContent (line 3900) | setElementContent(element, content) {
method getTitle (line 3931) | getTitle() {
method updateAttachment (line 3937) | updateAttachment(attachment) {
method _initializeOnDelegatedTarget (line 3950) | _initializeOnDelegatedTarget(event, context) {
method _getOffset (line 3954) | _getOffset() {
method _resolvePossibleFunction (line 3970) | _resolvePossibleFunction(content) {
method _getPopperConfig (line 3974) | _getPopperConfig(attachment) {
method _addAttachmentClass (line 4014) | _addAttachmentClass(attachment) {
method _getAttachment (line 4018) | _getAttachment(placement) {
method _setListeners (line 4022) | _setListeners() {
method _fixTitle (line 4054) | _fixTitle() {
method _enter (line 4070) | _enter(event, context) {
method _leave (line 4097) | _leave(event, context) {
method _isWithActiveTrigger (line 4123) | _isWithActiveTrigger() {
method _getConfig (line 4133) | _getConfig(config) {
method _getDelegateConfig (line 4170) | _getDelegateConfig() {
method _cleanTipClass (line 4185) | _cleanTipClass() {
method _getBasicClassPrefix (line 4195) | _getBasicClassPrefix() {
method _handlePopperPlacementChange (line 4199) | _handlePopperPlacementChange(popperData) {
method _disposePopper (line 4215) | _disposePopper() {
method jQueryInterface (line 4224) | static jQueryInterface(config) {
class Popover (line 4295) | class Popover extends Tooltip {
method Default (line 4297) | static get Default() {
method NAME (line 4301) | static get NAME() {
method Event (line 4305) | static get Event() {
method DefaultType (line 4309) | static get DefaultType() {
method isWithContent (line 4314) | isWithContent() {
method setContent (line 4318) | setContent(tip) {
method _getContent (line 4325) | _getContent() {
method _getBasicClassPrefix (line 4329) | _getBasicClassPrefix() {
method jQueryInterface (line 4334) | static jQueryInterface(config) {
class ScrollSpy (line 4406) | class ScrollSpy extends BaseComponent {
method constructor (line 4407) | constructor(element, config) {
method Default (line 4422) | static get Default() {
method NAME (line 4426) | static get NAME() {
method refresh (line 4431) | refresh() {
method dispose (line 4459) | dispose() {
method _getConfig (line 4465) | _getConfig(config) {
method _getScrollTop (line 4475) | _getScrollTop() {
method _getScrollHeight (line 4479) | _getScrollHeight() {
method _getOffsetHeight (line 4483) | _getOffsetHeight() {
method _process (line 4487) | _process() {
method _activate (line 4525) | _activate(target) {
method _clear (line 4553) | _clear() {
method jQueryInterface (line 4558) | static jQueryInterface(config) {
class Tab (line 4632) | class Tab extends BaseComponent {
method NAME (line 4634) | static get NAME() {
method show (line 4639) | show() {
method _activate (line 4685) | _activate(element, container, callback) {
method _transitionComplete (line 4701) | _transitionComplete(element, active, callback) {
method jQueryInterface (line 4749) | static jQueryInterface(config) {
class Toast (line 4836) | class Toast extends BaseComponent {
method constructor (line 4837) | constructor(element, config) {
method DefaultType (line 4848) | static get DefaultType() {
method Default (line 4852) | static get Default() {
method NAME (line 4856) | static get NAME() {
method show (line 4861) | show() {
method hide (line 4894) | hide() {
method dispose (line 4921) | dispose() {
method _getConfig (line 4932) | _getConfig(config) {
method _maybeScheduleHide (line 4941) | _maybeScheduleHide() {
method _onInteraction (line 4955) | _onInteraction(event, isInteracting) {
method _setListeners (line 4983) | _setListeners() {
method _clearTimeout (line 4990) | _clearTimeout() {
method jQueryInterface (line 4996) | static jQueryInterface(config) {
FILE: application/public/extract_author.php
function lastm (line 6) | function lastm($path) {
FILE: application/public/extract_cover.php
function resizeCover (line 7) | function resizeCover($filename, $newwidth, $newheight){
function lastm (line 24) | function lastm($path) {
FILE: application/public/js/EMFJS.bundle.js
function BitmapCoreHeader (line 55) | function BitmapCoreHeader(reader, skipsize) {
function BitmapInfoHeader (line 70) | function BitmapInfoHeader(reader, skipsize) {
function BitmapInfo (line 96) | function BitmapInfo(reader, usergb) {
function DIBitmap (line 130) | function DIBitmap(reader, bitmapInfo) {
function Blob (line 235) | function Blob(blob, offset) {
function EmfHeader (line 404) | function EmfHeader(reader, headerSize) {
function EMFRecords (line 473) | function EMFRecords(reader, first) {
function __ (line 995) | function __() { this.constructor = d; }
function Path (line 1005) | function Path(svgPath, copy) {
function createStockObjects (line 1023) | function createStockObjects() {
function GDIContextState (line 1065) | function GDIContextState(copy, defObjects) {
function GDIContext (line 1137) | function GDIContext(svg) {
function __ (line 1792) | function __() { this.constructor = d; }
function EMFJSError (line 1798) | function EMFJSError(message) {
function loggingEnabled (line 1808) | function loggingEnabled(enabled) {
function Helper (line 1812) | function Helper() {
function PointS (line 2168) | function PointS(reader, x, y) {
function PointL (line 2188) | function PointL(reader, x, y) {
function RectL (line 2208) | function RectL(reader, left, top, right, bottom) {
function SizeL (line 2246) | function SizeL(reader, cx, cy) {
function Obj (line 2266) | function Obj(type) {
function __ (line 2333) | function __() { this.constructor = d; }
function Region (line 2341) | function Region(reader, copy) {
function CreateSimpleRegion (line 2627) | function CreateSimpleRegion(left, top, right, bottom) {
function Scan (line 2634) | function Scan(r, copy) {
function Renderer (line 2786) | function Renderer(blob) {
function EMF (line 2828) | function EMF(reader, hdrsize) {
function __ (line 2894) | function __() { this.constructor = d; }
function ColorRef (line 2902) | function ColorRef(reader, r, g, b) {
function Font (line 2930) | function Font(reader, copy) {
function Brush (line 3001) | function Brush(reader, copy) {
function Pen (line 3063) | function Pen(reader, style, width, color, brush) {
function SVGFilters (line 3145) | function SVGFilters() {
function SVGPathBuilder (line 3169) | function SVGPathBuilder() {
function SVG (line 3194) | function SVG(svg) {
function __webpack_require__ (line 3405) | function __webpack_require__(moduleId) {
FILE: application/public/js/RTFJS.bundle.js
function Document (line 6948) | function Document(settings) {
function DocumentFacade (line 7024) | function DocumentFacade(blob, settings) {
function __ (line 7098) | function __() { this.constructor = d; }
function RTFJSError (line 7104) | function RTFJSError(message) {
function loggingEnabled (line 7114) | function loggingEnabled(enabled) {
function Helper (line 7118) | function Helper() {
function Chp (line 7376) | function Chp(parent) {
function Pap (line 7403) | function Pap(parent) {
function Sep (line 7431) | function Sep(parent) {
function Dop (line 7455) | function Dop(parent) {
function State (line 7487) | function State(parent) {
function GlobalState (line 7517) | function GlobalState(blob, renderer) {
function PlainText (line 7533) | function PlainText(text) {
function HexText (line 7540) | function HexText(hex, chp) {
function Parser (line 7603) | function Parser(document, blob, renderer) {
function __ (line 8111) | function __() { this.constructor = d; }
function ColortblDestination (line 8119) | function ColortblDestination(parser, inst) {
function __ (line 8276) | function __() { this.constructor = d; }
function DestinationFactory (line 8282) | function DestinationFactory() {
function DestinationBase (line 8304) | function DestinationBase(name) {
function DestinationTextBase (line 8311) | function DestinationTextBase(name) {
function DestinationFormattedTextBase (line 8322) | function DestinationFormattedTextBase(parser, name) {
function GenericPropertyDestinationFactory (line 8362) | function GenericPropertyDestinationFactory(parentdest, metaprop) {
function GenericSubTextPropertyDestinationFactory (line 8391) | function GenericSubTextPropertyDestinationFactory(name, parentDest, prop...
function RequiredDestinationFactory (line 8425) | function RequiredDestinationFactory(name) {
function __ (line 8597) | function __() { this.constructor = d; }
function FieldDestination (line 8606) | function FieldDestination() {
function FieldBase (line 8652) | function FieldBase(fldinst) {
function FieldHyperlink (line 8666) | function FieldHyperlink(fldinst, data) {
function FldinstDestination (line 8708) | function FldinstDestination(parser, inst) {
function FldrsltDestination (line 8811) | function FldrsltDestination(parser, inst) {
function __ (line 8897) | function __() { this.constructor = d; }
function FonttblDestinationSub (line 8905) | function FonttblDestinationSub(fonttbl) {
function FonttblDestination (line 9001) | function FonttblDestination(parser, inst) {
function __ (line 9091) | function __() { this.constructor = d; }
function InfoDestination (line 9099) | function InfoDestination(parser, inst, name) {
function MetaPropertyDestinationFactory (line 9119) | function MetaPropertyDestinationFactory(metaprop) {
function MetaPropertyTimeDestinationFactory (line 9144) | function MetaPropertyTimeDestinationFactory(metaprop) {
function __ (line 9260) | function __() { this.constructor = d; }
function PictGroupDestinationFactory (line 9270) | function PictGroupDestinationFactory(legacy) {
function PictDestination (line 9291) | function PictDestination(parser, inst) {
function __ (line 9609) | function __() { this.constructor = d; }
function RtfDestination (line 9620) | function RtfDestination(parser, inst, name, param) {
function __ (line 9881) | function __() { this.constructor = d; }
function StylesheetDestinationSub (line 9889) | function StylesheetDestinationSub(stylesheet) {
function StylesheetDestination (line 9946) | function StylesheetDestination(parser, inst) {
function RenderChp (line 10015) | function RenderChp(chp) {
function RenderPap (line 10103) | function RenderPap(pap) {
function Renderer (line 10189) | function Renderer(doc) {
function __webpack_require__ (line 10379) | function __webpack_require__(moduleId) {
FILE: application/public/js/WMFJS.bundle.js
function SVGFilters (line 53) | function SVGFilters() {
function SVGPathBuilder (line 77) | function SVGPathBuilder() {
function SVG (line 102) | function SVG(svg) {
function __ (line 357) | function __() { this.constructor = d; }
function BitmapCoreHeader (line 363) | function BitmapCoreHeader(reader, skipsize) {
function BitmapInfoHeader (line 378) | function BitmapInfoHeader(reader, skipsize) {
function BitmapInfo (line 404) | function BitmapInfo(reader, usergb) {
function DIBitmap (line 439) | function DIBitmap(reader, size) {
function Bitmap16 (line 496) | function Bitmap16(reader, size) {
function PatternBitmap16 (line 543) | function PatternBitmap16(reader, size) {
function Blob (line 598) | function Blob(blob, offset) {
function GDIContextState (line 752) | function GDIContextState(copy, defObjects) {
function GDIContext (line 814) | function GDIContext(svg) {
function __ (line 1457) | function __() { this.constructor = d; }
function WMFJSError (line 1463) | function WMFJSError(message) {
function loggingEnabled (line 1473) | function loggingEnabled(enabled) {
function Helper (line 1477) | function Helper() {
function PointS (line 1779) | function PointS(reader, x, y) {
function Rect (line 1799) | function Rect(reader, left, top, right, bottom) {
function Obj (line 1837) | function Obj(type) {
function __ (line 1903) | function __() { this.constructor = d; }
function Region (line 1911) | function Region(reader, copy) {
function CreateSimpleRegion (line 2192) | function CreateSimpleRegion(left, top, right, bottom) {
function Scan (line 2199) | function Scan(reader, copy, top, bottom, scanlines) {
function Renderer (line 2362) | function Renderer(blob) {
function WMFRect16 (line 2425) | function WMFRect16(reader) {
function WMFPlacable (line 2438) | function WMFPlacable(reader) {
function WMF (line 2449) | function WMF(reader, placable, version, hdrsize) {
function __ (line 2518) | function __() { this.constructor = d; }
function ColorRef (line 2526) | function ColorRef(reader, r, g, b) {
function Font (line 2554) | function Font(reader, copy) {
function Brush (line 2625) | function Brush(reader, copy, forceDibPattern) {
function Pen (line 2706) | function Pen(reader, style, width, color, linecap, join) {
function PaletteEntry (line 2736) | function PaletteEntry(reader, copy) {
function Palette (line 2758) | function Palette(reader, copy) {
function WMFRecords (line 2840) | function WMFRecords(reader, first) {
function __webpack_require__ (line 3323) | function __webpack_require__(moduleId) {
FILE: application/public/js/djvu.js
function DjVuScript (line 4) | function DjVuScript() {
FILE: application/public/js/djvu_viewer.js
function n (line 2) | function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{...
function p (line 2) | function p(){return(p=Object.assign||function(e){for(var t=1;t<arguments...
function b (line 2) | function b(e){return"function"==typeof e}
function y (line 2) | function y(e){return e.displayName||e.name||"Component"}
function w (line 2) | function w(e){return e&&"string"==typeof e.styledComponentId}
function j (line 2) | function j(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;...
function e (line 2) | function e(e){this.groupSizes=new Uint32Array(512),this.length=512,this....
function e (line 2) | function e(e){var t=this.element=z(e);t.appendChild(document.createTextN...
function e (line 2) | function e(e){var t=this.element=z(e);this.nodes=t.childNodes,this.lengt...
function e (line 2) | function e(e){this.rules=[],this.length=0}
function e (line 2) | function e(e,t,n){void 0===e&&(e=v),void 0===t&&(t={}),this.options=p({}...
function q (line 2) | function q(e){var t,n="";for(t=Math.abs(e);t>52;t=t/52|0)n=G(t%52)+n;ret...
function Q (line 2) | function Q(e){for(var t=0;t<e.length;t+=1){var n=e[t];if(b(n)&&!w(n))ret...
function e (line 2) | function e(e,t,n){this.rules=e,this.staticRulesId="",this.isStatic=(void...
function te (line 2) | function te(e){var t,n,r,o,i=void 0===e?v:e,a=i.options,l=void 0===a?v:a...
function ae (line 2) | function ae(){return Object(o.useContext)(ne)||oe}
function le (line 2) | function le(){return Object(o.useContext)(re)||ie}
function se (line 2) | function se(e){var t=Object(o.useState)(e.stylisPlugins),n=t[0],r=t[1],a...
function e (line 2) | function e(e,t){var n=this;this.inject=function(e,t){void 0===t&&(t=ie);...
function he (line 2) | function he(e){return ce.test(e)?e.replace(de,pe).replace(fe,"-ms-"):e}
function ge (line 2) | function ge(e,t,n,r){if(Array.isArray(e)){for(var o,i=[],a=0,l=e.length;...
function be (line 2) | function be(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t...
function Oe (line 2) | function Oe(e){return e.replace(we,"-").replace(Se,"")}
function _e (line 2) | function _e(e){return"string"==typeof e&&!0}
function Ce (line 2) | function Ce(e,t,n){var r=e[n];je(t)&&je(r)?ke(r,t):e[n]=t}
function ke (line 2) | function ke(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t...
function Pe (line 2) | function Pe(e){var t=Object(o.useContext)(Te),n=Object(o.useMemo)((funct...
function Ie (line 2) | function Ie(e,t,n){var r=w(e),a=!_e(e),l=t.attrs,s=void 0===l?g:l,u=t.co...
function e (line 2) | function e(e,t){this.rules=e,this.componentId=t,this.isStatic=Q(e),H.reg...
function De (line 2) | function De(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t...
function Le (line 2) | function Le(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t...
function e (line 2) | function e(){var e=this;this._emitSheetCSS=function(){var t=e.instance.t...
function s (line 2) | function s(e){return r.isMemo(e)?a:l[e.$$typeof]||o}
function a (line 2) | function a(e){if(null===e||void 0===e)throw new TypeError("Object.assign...
function i (line 2) | function i(){throw new Error("setTimeout has not been defined")}
function a (line 2) | function a(){throw new Error("clearTimeout has not been defined")}
function l (line 2) | function l(e){if(n===setTimeout)return setTimeout(e,0);if((n===i||!n)&&s...
function f (line 2) | function f(){c&&s&&(c=!1,s.length?u=s.concat(u):d=-1,u.length&&p())}
function p (line 2) | function p(){if(!c){var e=l(f);c=!0;for(var t=u.length;t;){for(s=u,u=[];...
function h (line 2) | function h(e,t){this.fun=e,this.array=t}
function m (line 2) | function m(){}
function t (line 2) | function t(e,r,s,u,f){for(var p,h,m,g,w,O=0,x=0,_=0,j=0,E=0,I=0,A=m=p=0,...
function n (line 2) | function n(e,t,n){var o=t.trim().split(m);t=o;var i=o.length,a=e.length;...
function r (line 2) | function r(e,t,n){var r=t.charCodeAt(0);switch(33>r&&(r=(t=t.trim()).cha...
function o (line 2) | function o(e,t,n,r){var a=e+";",l=2*t+3*n+4*r;if(944===l){e=a.indexOf(":...
function i (line 2) | function i(e,t){var n=e.indexOf(1===t?":":"{"),r=e.substring(0,3!==t?n:1...
function a (line 2) | function a(e,t){var n=o(t,t.charCodeAt(0),t.charCodeAt(1),t.charCodeAt(2...
function l (line 2) | function l(e,t,n,r,o,i,a,l,s,c){for(var d,f=0,p=t;f<R;++f)switch(d=I[f]....
function s (line 2) | function s(e){return void 0!==(e=e.prefix)&&(A=null,e?"function"!==typeo...
function u (line 2) | function u(e,n){var r=e;if(33>r.charCodeAt(0)&&(r=r.trim()),r=[r],0<R){v...
function g (line 2) | function g(e){var t=h.exec(e);if(!t)throw new TypeError("invalid extende...
function v (line 2) | function v(e){return String(e).replace(s,"?")}
function b (line 2) | function b(e,t){return String.fromCharCode(parseInt(t,16))}
function y (line 2) | function y(e){return"%"+String(e).charCodeAt(0).toString(16).toUpperCase()}
function w (line 2) | function w(e){return'"'+String(e).replace(c,"\\$1")+'"'}
function S (line 2) | function S(e){var t=String(e);return"UTF-8''"+encodeURIComponent(t).repl...
function O (line 2) | function O(e,t){this.type=e,this.parameters=t}
function i (line 2) | function i(){}
function a (line 2) | function a(e,t,n){this.fn=e,this.context=t,this.once=n||!1}
function l (line 2) | function l(e,t,n,r,i){if("function"!==typeof n)throw new TypeError("The ...
function s (line 2) | function s(e,t){0===--e._eventsCount?e._events=new i:delete e._events[t]}
function u (line 2) | function u(){this._events=new i,this._eventsCount=0}
function p (line 2) | function p(e){for(var t="https://reactjs.org/docs/error-decoder.html?inv...
function g (line 2) | function g(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n...
function v (line 2) | function v(){}
function b (line 2) | function b(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n...
function x (line 2) | function x(e,t,n){var r,i={},a=null,l=null;if(null!=t)for(r in void 0!==...
function _ (line 2) | function _(e){return"object"===typeof e&&null!==e&&e.$$typeof===o}
function E (line 2) | function E(e,t){return"object"===typeof e&&null!==e&&null!=e.key?functio...
function C (line 2) | function C(e,t,n,r,a){var l=typeof e;"undefined"!==l&&"boolean"!==l||(e=...
function k (line 2) | function k(e,t,n){if(null==e)return e;var r=[],o=0;return C(e,r,"","",(f...
function T (line 2) | function T(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._re...
function N (line 2) | function N(){var e=P.current;if(null===e)throw Error(p(321));return e}
function a (line 2) | function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?inv...
function u (line 2) | function u(e,t){c(e,t),c(e+"Capture",t)}
function c (line 2) | function c(e,t){for(s[e]=t,e=0;e<t.length;e++)l.add(t[e])}
function g (line 2) | function g(e,t,n,r,o,i,a){this.acceptsBooleans=2===t||3===t||4===t,this....
function y (line 2) | function y(e){return e[1].toUpperCase()}
function w (line 2) | function w(e,t,n,r){var o=v.hasOwnProperty(t)?v[t]:null;(null!==o?0===o....
function V (line 2) | function V(e){return null===e||"object"!==typeof e?null:"function"===typ...
function W (line 2) | function W(e){if(void 0===F)try{throw Error()}catch(n){var t=n.stack.tri...
function $ (line 2) | function $(e,t){if(!e||H)return"";H=!0;var n=Error.prepareStackTrace;Err...
function G (line 2) | function G(e){switch(e.tag){case 5:return W(e.type);case 16:return W("La...
function q (line 2) | function q(e){if(null==e)return null;if("function"===typeof e)return e.d...
function Y (line 2) | function Y(e){switch(typeof e){case"boolean":case"number":case"object":c...
function K (line 2) | function K(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase...
function Q (line 2) | function Q(e){e._valueTracker||(e._valueTracker=function(e){var t=K(e)?"...
function X (line 2) | function X(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=...
function Z (line 2) | function Z(e){if("undefined"===typeof(e=e||("undefined"!==typeof documen...
function J (line 2) | function J(e,t){var n=t.checked;return o({},t,{defaultChecked:void 0,def...
function ee (line 2) | function ee(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t....
function te (line 2) | function te(e,t){null!=(t=t.checked)&&w(e,"checked",t,!1)}
function ne (line 2) | function ne(e,t){te(e,t);var n=Y(t.value),r=t.type;if(null!=n)"number"==...
function re (line 2) | function re(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defau...
function oe (line 2) | function oe(e,t,n){"number"===t&&Z(e.ownerDocument)===e||(null==n?e.defa...
function ie (line 2) | function ie(e,t){return e=o({children:void 0},t),(t=function(e){var t=""...
function ae (line 2) | function ae(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t...
function le (line 2) | function le(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(a(91));r...
function se (line 2) | function se(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultVa...
function ue (line 2) | function ue(e,t){var n=Y(t.value),r=Y(t.defaultValue);null!=n&&((n=""+n)...
function ce (line 2) | function ce(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!...
function pe (line 2) | function pe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";ca...
function he (line 2) | function he(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?pe(t...
function be (line 2) | function be(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.n...
function Se (line 2) | function Se(e,t,n){return null==t||"boolean"===typeof t||""===t?"":n||"n...
function Oe (line 2) | function Oe(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=...
function _e (line 2) | function _e(e,t){if(t){if(xe[e]&&(null!=t.children||null!=t.dangerouslyS...
function je (line 2) | function je(e,t){if(-1===e.indexOf("-"))return"string"===typeof t.is;swi...
function Ee (line 2) | function Ee(e){return(e=e.target||e.srcElement||window).correspondingUse...
function Pe (line 2) | function Pe(e){if(e=eo(e)){if("function"!==typeof Ce)throw Error(a(280))...
function Ne (line 2) | function Ne(e){ke?Te?Te.push(e):Te=[e]:ke=e}
function Ie (line 2) | function Ie(){if(ke){var e=ke,t=Te;if(Te=ke=null,Pe(e),t)for(e=0;e<t.len...
function Re (line 2) | function Re(e,t){return e(t)}
function Ae (line 2) | function Ae(e,t,n,r,o){return e(t,n,r,o)}
function De (line 2) | function De(){}
function Ue (line 2) | function Ue(){null===ke&&null===Te||(De(),Ie())}
function Fe (line 2) | function Fe(e,t){var n=e.stateNode;if(null===n)return null;var r=no(n);i...
function We (line 2) | function We(e,t,n,r,o,i,a,l,s){var u=Array.prototype.slice.call(argument...
function Ke (line 2) | function Ke(e,t,n,r,o,i,a,l,s){He=!1,$e=null,We.apply(Ye,arguments)}
function Qe (line 2) | function Qe(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else...
function Xe (line 2) | function Xe(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!=...
function Ze (line 2) | function Ze(e){if(Qe(e)!==e)throw Error(a(188))}
function Je (line 2) | function Je(e){if(!(e=function(e){var t=e.alternate;if(!t){if(null===(t=...
function et (line 2) | function et(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return...
function ht (line 2) | function ht(e,t,n,r,o){return{blockedOn:e,domEventName:t,eventSystemFlag...
function mt (line 2) | function mt(e,t){switch(e){case"focusin":case"focusout":lt=null;break;ca...
function gt (line 2) | function gt(e,t,n,r,o,i){return null===e||e.nativeEvent!==i?(e=ht(t,n,r,...
function vt (line 2) | function vt(e){var t=Jr(e.target);if(null!==t){var n=Qe(t);if(null!==n)i...
function bt (line 2) | function bt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContaine...
function yt (line 2) | function yt(e,t,n){bt(e)&&n.delete(t)}
function wt (line 2) | function wt(){for(it=!1;0<at.length;){var e=at[0];if(null!==e.blockedOn)...
method constructor (line 2) | constructor(...e){super(...e),this.onInputChange=e=>{this.setNewPageNu...
method setNewPageNumber (line 2) | setNewPageNumber(e,t=!0){e>=1&&e<=this.props.pagesQuantity?this.props....
method render (line 2) | render(){const e=this.context;return Object(it.jsxs)(bt,{title:e("Clic...
function St (line 2) | function St(e,t){e.blockedOn===t&&(e.blockedOn=null,it||(it=!0,i.unstabl...
function Ot (line 2) | function Ot(e){function t(t){return St(t,e)}if(0<at.length){St(at[0],e);...
function xt (line 2) | function xt(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["W...
function Ct (line 2) | function Ct(e){if(jt[e])return jt[e];if(!_t[e])return e;var t,n=_t[e];fo...
function Dt (line 2) | function Dt(e,t){for(var n=0;n<e.length;n+=2){var r=e[n],o=e[n+1];o="on"...
function Mt (line 2) | function Mt(e){if(0!==(1&e))return Lt=15,1;if(0!==(2&e))return Lt=14,2;i...
function zt (line 2) | function zt(e,t){var n=e.pendingLanes;if(0===n)return Lt=0;var r=0,o=0,i...
function Ut (line 2) | function Ut(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?...
function Ft (line 2) | function Ft(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:ret...
function Bt (line 2) | function Bt(e){return e&-e}
function Vt (line 2) | function Vt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}
function Wt (line 2) | function Wt(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pin...
function Qt (line 2) | function Qt(e,t,n,r){Me||De();var o=Zt,i=Me;Me=!0;try{Ae(o,e,t,n,r)}fina...
function Xt (line 2) | function Xt(e,t,n,r){Yt(qt,Zt.bind(null,e,t,n,r))}
function Zt (line 2) | function Zt(e,t,n,r){var o;if(Kt)if((o=0===(4&t))&&0<at.length&&-1<pt.in...
function Jt (line 2) | function Jt(e,t,n,r){var o=Ee(r);if(null!==(o=Jr(o))){var i=Qe(o);if(nul...
function rn (line 2) | function rn(){if(nn)return nn;var e,t,n=tn,r=n.length,o="value"in en?en....
function on (line 2) | function on(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&...
function an (line 2) | function an(){return!0}
method constructor (line 2) | constructor(...e){super(...e),this.onChange=e=>{if(!e.target.files.len...
method render (line 2) | render(){const e=this.context;return Object(it.jsxs)(on,{className:"fi...
function ln (line 2) | function ln(){return!1}
function sn (line 2) | function sn(e){function t(t,n,r,o,i){for(var a in this._reactName=t,this...
function En (line 2) | function En(e){var t=this.nativeEvent;return t.getModifierState?t.getMod...
function Cn (line 2) | function Cn(){return En}
function Fn (line 2) | function Fn(e,t){switch(e){case"keyup":return-1!==Rn.indexOf(t.keyCode);...
function Bn (line 2) | function Bn(e){return"object"===typeof(e=e.detail)&&"data"in e?e.data:null}
function Hn (line 2) | function Hn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"inpu...
function $n (line 2) | function $n(e,t,n,r){Ne(r),0<(t=Ar(t,"onChange")).length&&(n=new pn("onC...
function Yn (line 2) | function Yn(e){Er(e,0)}
function Kn (line 2) | function Kn(e){if(X(to(e)))return e}
function Qn (line 2) | function Qn(e,t){if("change"===e)return t}
function tr (line 2) | function tr(){Gn&&(Gn.detachEvent("onpropertychange",nr),qn=Gn=null)}
method constructor (line 2) | constructor(...e){super(...e),this.state={isDragOver:!1},this.onChange...
method processFile (line 2) | processFile(e){var t=new FileReader;t.readAsArrayBuffer(e),t.onload=()...
method render (line 2) | render(){const e=this.context;return Object(it.jsxs)(er,{$dragOver:thi...
function nr (line 2) | function nr(e){if("value"===e.propertyName&&Kn(qn)){var t=[];if($n(t,qn,...
function rr (line 2) | function rr(e,t,n){"focusin"===e?(tr(),qn=n,(Gn=t).attachEvent("onproper...
function or (line 2) | function or(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)retu...
function ir (line 2) | function ir(e,t){if("click"===e)return Kn(t)}
function ar (line 2) | function ar(e,t){if("input"===e||"change"===e)return Kn(t)}
function ur (line 2) | function ur(e,t){if(lr(e,t))return!0;if("object"!==typeof e||null===e||"...
function cr (line 2) | function cr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}
function dr (line 2) | function dr(e,t){var n,r=cr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.t...
function fr (line 2) | function fr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===...
function pr (line 2) | function pr(){for(var e=window,t=Z();t instanceof e.HTMLIFrameElement;){...
function hr (line 2) | function hr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(...
function wr (line 2) | function wr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.owne...
function jr (line 2) | function jr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,funct...
function Er (line 2) | function Er(e,t){t=0!==(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r....
function Cr (line 2) | function Cr(e,t){var n=ro(t),r=e+"__bubble";n.has(r)||(Nr(t,e,2,!1),n.ad...
function Tr (line 2) | function Tr(e){e[kr]||(e[kr]=!0,l.forEach((function(t){_r.has(t)||Pr(t,!...
function Pr (line 2) | function Pr(e,t,n,r){var o=4<arguments.length&&void 0!==arguments[4]?arg...
function Nr (line 2) | function Nr(e,t,n,r){var o=Rt.get(t);switch(void 0===o?2:o){case 0:o=Qt;...
function Ir (line 2) | function Ir(e,t,n,r,o){var i=r;if(0===(1&t)&&0===(2&t)&&null!==r)e:for(;...
function Rr (line 2) | function Rr(e,t,n){return{instance:e,listener:t,currentTarget:n}}
function Ar (line 2) | function Ar(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,i=o.state...
function Dr (line 2) | function Dr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag)...
function Lr (line 2) | function Lr(e,t,n,r,o){for(var i=t._reactName,a=[];null!==n&&n!==r;){var...
function Mr (line 2) | function Mr(){}
function Fr (line 2) | function Fr(e,t){switch(e){case"button":case"input":case"select":case"te...
function Br (line 2) | function Br(e,t){return"textarea"===e||"option"===e||"noscript"===e||"st...
function Hr (line 2) | function Hr(e){1===e.nodeType?e.textContent="":9===e.nodeType&&(null!=(e...
function $r (line 2) | function $r(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||...
function Gr (line 2) | function Gr(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){va...
function Jr (line 2) | function Jr(e){var t=e[Kr];if(t)return t;for(var n=e.parentNode;n;){if(t...
function eo (line 2) | function eo(e){return!(e=e[Kr]||e[Xr])||5!==e.tag&&6!==e.tag&&13!==e.tag...
function to (line 2) | function to(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(a(...
function no (line 2) | function no(e){return e[Qr]||null}
function ro (line 2) | function ro(e){var t=e[Zr];return void 0===t&&(t=e[Zr]=new Set),t}
method constructor (line 2) | constructor(e){super(e),this.onClick=()=>{this.props.callback&&this.pr...
method renderChildren (line 2) | renderChildren(){return this.props.children?Object(it.jsx)(oo,{childre...
method render (line 2) | render(){const e=this.state.isCollapsed?Je:Ze;return Object(it.jsxs)(n...
function ao (line 2) | function ao(e){return{current:e}}
function lo (line 2) | function lo(e){0>io||(e.current=oo[io],oo[io]=null,io--)}
function so (line 2) | function so(e,t){io++,oo[io]=e.current,e.current=t}
method constructor (line 2) | constructor(...e){super(...e),this.onTreeItemClick=e=>{this.props.disp...
method convertBookmarkArrayToTreeItemDataArray (line 2) | convertBookmarkArrayToTreeItemDataArray(e){return e&&e.map((e=>this.ma...
method makeTreeItemDataByBookmark (line 2) | makeTreeItemDataByBookmark(e){return{name:e.description,children:this....
method render (line 2) | render(){const{contents:e,dispatch:t}=this.props,n=this.context;return...
function ho (line 2) | function ho(e,t){var n=e.type.contextTypes;if(!n)return uo;var r=e.state...
function mo (line 2) | function mo(e){return null!==(e=e.childContextTypes)&&void 0!==e}
function go (line 2) | function go(){lo(fo),lo(co)}
method constructor (line 2) | constructor(...e){super(...e),this.prevIsMobile=null,this.lastContents...
method componentDidUpdate (line 2) | componentDidUpdate(e,t,n){this.prevIsMobile!==this.context.isMobile&&(...
method render (line 2) | render(){const{contents:e,isContentsOpened:t}=this.props,n=this.contex...
function vo (line 2) | function vo(e,t,n){if(co.current!==uo)throw Error(a(168));so(co,t),so(fo...
function bo (line 2) | function bo(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"...
function yo (line 2) | function yo(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMerged...
function wo (line 2) | function wo(e,t,n){var r=e.stateNode;if(!r)throw Error(a(169));n?(e=bo(e...
method constructor (line 2) | constructor(e){super(e),this.showTimeout=null,this.rootRef=i.a.createR...
method componentDidMount (line 2) | componentDidMount(){this.showTimeout=setTimeout((()=>{this.rootRef.cur...
method componentWillUnmount (line 2) | componentWillUnmount(){this.showTimeout&&clearTimeout(this.showTimeout)}
method render (line 2) | render(){return Object(it.jsxs)("div",{style:{display:"none"},ref:this...
function Vo (line 2) | function Vo(){switch(To()){case Po:return 99;case No:return 98;case Io:r...
function Wo (line 2) | function Wo(e){switch(e){case 99:return Po;case 98:return No;case 97:ret...
function Ho (line 2) | function Ho(e,t){return e=Wo(e),xo(e,t)}
function $o (line 2) | function $o(e,t,n){return e=Wo(e),_o(e,t,n)}
function Go (line 2) | function Go(){if(null!==zo){var e=zo;zo=null,jo(e)}qo()}
function qo (line 2) | function qo(){if(!Uo&&null!==Mo){Uo=!0;var e=0;try{var t=Mo;Ho(99,(funct...
function Ko (line 2) | function Ko(e,t){if(e&&e.defaultProps){for(var n in t=o({},t),e=e.defaul...
function ei (line 2) | function ei(){Jo=Zo=Xo=null}
function ti (line 2) | function ti(e){var t=Qo.current;lo(Qo),e.type._context._currentValue=t}
function ni (line 2) | function ni(e,t){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)==...
function ri (line 2) | function ri(e,t){Xo=e,Jo=Zo=null,null!==(e=e.dependencies)&&null!==e.fir...
function oi (line 2) | function oi(e,t){if(Jo!==e&&!1!==t&&0!==t)if("number"===typeof t&&107374...
function ai (line 2) | function ai(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:...
function li (line 2) | function li(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={base...
function si (line 2) | function si(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:n...
function ui (line 2) | function ui(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending...
function ci (line 2) | function ci(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r...
function di (line 2) | function di(e,t,n,r){var i=e.updateQueue;ii=!1;var a=i.firstBaseUpdate,l...
function fi (line 2) | function fi(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.le...
function hi (line 2) | function hi(e,t,n,r){n=null===(n=n(r,t=e.memoizedState))||void 0===n?t:o...
function gi (line 2) | function gi(e,t,n,r,o,i,a){return"function"===typeof(e=e.stateNode).shou...
function vi (line 2) | function vi(e,t,n){var r=!1,o=uo,i=t.contextType;return"object"===typeof...
function bi (line 2) | function bi(e,t,n,r){e=t.state,"function"===typeof t.componentWillReceiv...
function yi (line 2) | function yi(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState...
function Si (line 2) | function Si(e,t,n){if(null!==(e=n.ref)&&"function"!==typeof e&&"object"!...
function Oi (line 2) | function Oi(e,t){if("textarea"!==e.type)throw Error(a(31,"[object Object...
function xi (line 2) | function xi(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.next...
function Pi (line 2) | function Pi(e){if(e===Ei)throw Error(a(174));return e}
function Ni (line 2) | function Ni(e,t){switch(so(Ti,t),so(ki,e),so(Ci,Ei),e=t.nodeType){case 9...
function Ii (line 2) | function Ii(){lo(Ci),lo(ki),lo(Ti)}
function Ri (line 2) | function Ri(e){Pi(Ti.current);var t=Pi(Ci.current),n=he(t,e.type);t!==n&...
function Ai (line 2) | function Ai(e){ki.current===e&&(lo(Ci),lo(ki))}
function Li (line 2) | function Li(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedSta...
function Fi (line 2) | function Fi(e,t){var n=Bs(5,null,null,0);n.elementType="DELETED",n.type=...
function Bi (line 2) | function Bi(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==...
function Vi (line 2) | function Vi(e){if(Ui){var t=zi;if(t){var n=t;if(!Bi(e,t)){if(!(t=$r(n.ne...
function Wi (line 2) | function Wi(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag...
function Hi (line 2) | function Hi(e){if(e!==Mi)return!1;if(!Ui)return Wi(e),Ui=!0,!1;var t=e.t...
function $i (line 2) | function $i(){zi=Mi=null,Ui=!1}
function qi (line 2) | function qi(){for(var e=0;e<Gi.length;e++)Gi[e]._workInProgressVersionPr...
function na (line 2) | function na(){throw Error(a(321))}
function ra (line 2) | function ra(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length...
function oa (line 2) | function oa(e,t,n,r,o,i){if(Qi=i,Xi=t,t.memoizedState=null,t.updateQueue...
function ia (line 2) | function ia(){var e={memoizedState:null,baseState:null,baseQueue:null,qu...
function aa (line 2) | function aa(){if(null===Zi){var e=Xi.alternate;e=null!==e?e.memoizedStat...
function la (line 2) | function la(e,t){return"function"===typeof t?t(e):t}
function sa (line 2) | function sa(e){var t=aa(),n=t.queue;if(null===n)throw Error(a(311));n.la...
function ua (line 2) | function ua(e){var t=aa(),n=t.queue;if(null===n)throw Error(a(311));n.la...
function ca (line 2) | function ca(e,t,n){var r=t._getVersion;r=r(t._source);var o=t._workInPro...
function da (line 2) | function da(e,t,n,r){var o=Pl;if(null===o)throw Error(a(349));var i=t._g...
function fa (line 2) | function fa(e,t,n){return da(aa(),e,t,n)}
function pa (line 2) | function pa(e){var t=ia();return"function"===typeof e&&(e=e()),t.memoize...
function ha (line 2) | function ha(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null...
function ma (line 2) | function ma(e){return e={current:e},ia().memoizedState=e}
function ga (line 2) | function ga(){return aa().memoizedState}
function va (line 2) | function va(e,t,n,r){var o=ia();Xi.flags|=e,o.memoizedState=ha(1|t,n,voi...
function ba (line 2) | function ba(e,t,n,r){var o=aa();r=void 0===r?null:r;var i=void 0;if(null...
function ya (line 2) | function ya(e,t){return va(516,4,e,t)}
function wa (line 2) | function wa(e,t){return ba(516,4,e,t)}
function Sa (line 2) | function Sa(e,t){return ba(4,2,e,t)}
function Oa (line 2) | function Oa(e,t){return"function"===typeof t?(e=e(),t(e),function(){t(nu...
function xa (line 2) | function xa(e,t,n){return n=null!==n&&void 0!==n?n.concat([e]):null,ba(4...
function _a (line 2) | function _a(){}
function ja (line 2) | function ja(e,t){var n=aa();t=void 0===t?null:t;var r=n.memoizedState;re...
function Ea (line 2) | function Ea(e,t){var n=aa();t=void 0===t?null:t;var r=n.memoizedState;re...
function Ca (line 2) | function Ca(e,t){var n=Vo();Ho(98>n?98:n,(function(){e(!0)})),Ho(97<n?97...
function ka (line 2) | function ka(e,t,n){var r=us(),o=cs(e),i={lane:o,action:n,eagerReducer:nu...
function Da (line 2) | function Da(e,t,n,r){t.child=null===e?ji(t,null,n,r):_i(t,e.child,n,r)}
function La (line 2) | function La(e,t,n,r,o){n=n.render;var i=t.ref;return ri(t,o),r=oa(e,t,n,...
function Ma (line 2) | function Ma(e,t,n,r,o,i){if(null===e){var a=n.type;return"function"!==ty...
function za (line 2) | function za(e,t,n,r,o,i){if(null!==e&&ur(e.memoizedProps,r)&&e.ref===t.r...
function Ua (line 2) | function Ua(e,t,n){var r=t.pendingProps,o=r.children,i=null!==e?e.memoiz...
function Fa (line 2) | function Fa(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&...
function Ba (line 2) | function Ba(e,t,n,r,o){var i=mo(n)?po:co.current;return i=ho(t,i),ri(t,o...
function Va (line 2) | function Va(e,t,n,r,o){if(mo(n)){var i=!0;yo(t)}else i=!1;if(ri(t,o),nul...
function Wa (line 2) | function Wa(e,t,n,r,o,i){Fa(e,t);var a=0!==(64&t.flags);if(!r&&!a)return...
function Ha (line 2) | function Ha(e){var t=e.stateNode;t.pendingContext?vo(0,t.pendingContext,...
function Ka (line 2) | function Ka(e,t,n){var r,o=t.pendingProps,i=Di.current,a=!1;return(r=0!=...
function Qa (line 2) | function Qa(e,t,n,r){var o=e.mode,i=e.child;return t={mode:"hidden",chil...
function Xa (line 2) | function Xa(e,t,n,r){var o=e.child;return e=o.sibling,n=Ws(o,{mode:"visi...
function Za (line 2) | function Za(e,t,n,r,o){var i=t.mode,a=e.child;e=a.sibling;var l={mode:"h...
function Ja (line 2) | function Ja(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),ni(...
function el (line 2) | function el(e,t,n,r,o,i){var a=e.memoizedState;null===a?e.memoizedState=...
function tl (line 2) | function tl(e,t,n){var r=t.pendingProps,o=r.revealOrder,i=r.tail;if(Da(e...
function nl (line 2) | function nl(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),zl|=t.la...
function rl (line 2) | function rl(e,t){if(!Ui)switch(e.tailMode){case"hidden":t=e.tail;for(var...
function ol (line 2) | function ol(e,t,n){var r=t.pendingProps;switch(t.tag){case 2:case 16:cas...
function il (line 2) | function il(e){switch(e.tag){case 1:mo(e.type)&&go();var t=e.flags;retur...
function al (line 2) | function al(e,t){try{var n="",r=t;do{n+=G(r),r=r.return}while(r);var o=n...
function ll (line 2) | function ll(e,t){try{console.error(t.value)}catch(n){setTimeout((functio...
function ul (line 2) | function ul(e,t,n){(n=si(-1,n)).tag=3,n.payload={element:null};var r=t.v...
function cl (line 2) | function cl(e,t,n){(n=si(-1,n)).tag=3;var r=e.type.getDerivedStateFromEr...
function fl (line 2) | function fl(e){var t=e.ref;if(null!==t)if("function"===typeof t)try{t(nu...
function pl (line 2) | function pl(e,t){switch(t.tag){case 0:case 11:case 15:case 22:return;cas...
function hl (line 2) | function hl(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(null!...
function ml (line 2) | function ml(e,t){for(var n=e;;){if(5===n.tag){var r=n.stateNode;if(t)"fu...
function gl (line 2) | function gl(e,t){if(Oo&&"function"===typeof Oo.onCommitFiberUnmount)try{...
function vl (line 2) | function vl(e){e.alternate=null,e.child=null,e.dependencies=null,e.first...
function bl (line 2) | function bl(e){return 5===e.tag||3===e.tag||4===e.tag}
function yl (line 2) | function yl(e){e:{for(var t=e.return;null!==t;){if(bl(t))break e;t=t.ret...
function wl (line 2) | function wl(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.sta...
function Sl (line 2) | function Sl(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.sta...
function Ol (line 2) | function Ol(e,t){for(var n,r,o=t,i=!1;;){if(!i){i=o.return;e:for(;;){if(...
function xl (line 2) | function xl(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:va...
function _l (line 2) | function _l(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n...
function jl (line 2) | function jl(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e....
function Hl (line 2) | function Hl(){Wl=Bo()+500}
method constructor (line 2) | constructor(e){this.dispatch=e,this.callbacks={};const t=rr?document.q...
method getImageData (line 2) | *getImageData(){const e=yield Ya(),t=Ie.currentPageNumber(e),n=Ie.page...
method fetchPageData (line 2) | *fetchPageData(){const e=yield Ya(),t=Ie.viewMode(e);if(t===ue.CONTINU...
method fetchPageText (line 2) | *fetchPageText(e){try{const[t,n]=yield this.djvuWorker.run(this.djvuWo...
method fetchPageTextIfRequired (line 2) | *fetchPageTextIfRequired(){const e=yield Ya(),t=Ie.currentPageNumber(e...
method prepareForContinuousMode (line 2) | *prepareForContinuousMode(){const e=yield this.djvuWorker.doc.getPages...
method configure (line 2) | *configure({pageNumber:e,pageRotation:t,viewMode:n,pageScale:r,languag...
method createDocumentFromArrayBuffer (line 2) | *createDocumentFromArrayBuffer({arrayBuffer:e,fileName:t,config:n}){th...
method loadContents (line 2) | *loadContents(){const e=yield this.djvuWorker.doc.getContents().run();...
method resetCurrentPageNumber (line 2) | *resetCurrentPageNumber(){const e=yield Ya();yield Ha(tt.setNewPageNum...
method setPageByUrl (line 2) | *setPageByUrl(e){const t=e.url;if(t&&"#"!==t[0]){const e=this.document...
method withErrorHandler (line 2) | withErrorHandler(e){return e=e.bind(this),function*(t){try{const n=e(t...
method saveDocument (line 2) | *saveDocument(){const e=yield Ya(),t=Ie.fileName(e);if(t){const e=yiel...
method resetWorkerAndStorages (line 2) | resetWorkerAndStorages(){this.pageStorage.reset(),this.pagesCache.rese...
method setCallback (line 2) | setCallback(e){this.callbacks[e.callbackName]=e.callback}
method switchToContinuousScrollMode (line 2) | *switchToContinuousScrollMode(e=!1){this.djvuWorker.cancelAllTasks(),t...
method switchToSinglePageMode (line 2) | *switchToSinglePageMode(e=!1){this.djvuWorker.cancelAllTasks(),this.co...
method switchToTextMode (line 2) | *switchToTextMode(){this.djvuWorker.cancelAllTasks(),this.continuousSc...
method handleViewModeSwitch (line 2) | *handleViewModeSwitch({notSave:e=!1}={}){const t=yield Ya(Ie.isDocumen...
method updateOptions (line 2) | *updateOptions(e){if(e.notSave)return;const t=yield Ya(),n=Ie.options(...
method loadOptions (line 2) | *loadOptions(){try{let t={};rr?(t=yield new Promise((e=>window.chrome....
method loadDocumentByUrl (line 2) | *loadDocumentByUrl({url:e,config:t}){t=t||{};const n=e=>{try{const t=/...
method bundleDocument (line 2) | *bundleDocument(){try{this.djvuWorker.cancelAllTasks(),this.isBundling...
method hardReloadIfRequired (line 2) | *hardReloadIfRequired(){this.isBundling&&this.documentContructorData&&...
method preparePagesForPrinting (line 2) | *preparePagesForPrinting(e){const{from:t,to:n}=e.payload;this.printTas...
method cancelPrintTaskIfRequired (line 2) | *cancelPrintTaskIfRequired(){if(this.printTask){this.printTask.cancel(...
method main (line 2) | *main(){yield Ul(ue.CREATE_DOCUMENT_FROM_ARRAY_BUFFER_ACTION,this.with...
function us (line 2) | function us(){return 0!==(48&Tl)?Bo():-1!==os?os:os=Bo()}
function cs (line 2) | function cs(e){if(0===(2&(e=e.mode)))return 1;if(0===(4&e))return 99===V...
function ds (line 2) | function ds(e,t,n){if(50<ns)throw ns=0,rs=null,Error(a(185));if(null===(...
function fs (line 2) | function fs(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t)...
function ps (line 2) | function ps(e,t){for(var n=e.callbackNode,r=e.suspendedLanes,o=e.pingedL...
function hs (line 2) | function hs(e){if(os=-1,as=is=0,0!==(48&Tl))throw Error(a(327));var t=e....
function ms (line 2) | function ms(e,t){for(t&=~Fl,t&=~Ul,e.suspendedLanes|=t,e.pingedLanes&=~t...
function gs (line 2) | function gs(e){if(0!==(48&Tl))throw Error(a(327));if(Is(),e===Pl&&0!==(e...
function vs (line 2) | function vs(e,t){var n=Tl;Tl|=1;try{return e(t)}finally{0===(Tl=n)&&(Hl(...
function bs (line 2) | function bs(e,t){var n=Tl;Tl&=-2,Tl|=8;try{return e(t)}finally{0===(Tl=n...
function ys (line 2) | function ys(e,t){so(Al,Rl),Rl|=t,Ml|=t}
function ws (line 2) | function ws(){Rl=Al.current,lo(Al)}
function Ss (line 2) | function Ss(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHa...
function Os (line 2) | function Os(e,t){for(;;){var n=Nl;try{if(ei(),Yi.current=Ta,ea){for(var ...
function xs (line 2) | function xs(){var e=Cl.current;return Cl.current=Ta,null===e?Ta:e}
function _s (line 2) | function _s(e,t){var n=Tl;Tl|=16;var r=xs();for(Pl===e&&Il===t||Ss(e,t);...
function js (line 2) | function js(){for(;null!==Nl;)Cs(Nl)}
function Es (line 2) | function Es(){for(;null!==Nl&&!Eo();)Cs(Nl)}
function Cs (line 2) | function Cs(e){var t=$l(e.alternate,e,Rl);e.memoizedProps=e.pendingProps...
function ks (line 2) | function ks(e){var t=e;do{var n=t.alternate;if(e=t.return,0===(2048&t.fl...
function Ts (line 2) | function Ts(e){var t=Vo();return Ho(99,Ps.bind(null,e,t)),null}
function Ps (line 2) | function Ps(e,t){do{Is()}while(null!==Xl);if(0!==(48&Tl))throw Error(a(3...
function Ns (line 2) | function Ns(){for(;null!==Gl;){var e=Gl.alternate;ss||null===ls||(0!==(8...
function Is (line 2) | function Is(){if(90!==Zl){var e=97<Zl?97:Zl;return Zl=90,Ho(e,Ds)}return!1}
function Rs (line 2) | function Rs(e,t){Jl.push(t,e),Ql||(Ql=!0,$o(97,(function(){return Is(),n...
function As (line 2) | function As(e,t){es.push(t,e),Ql||(Ql=!0,$o(97,(function(){return Is(),n...
function Ds (line 2) | function Ds(){if(null===Xl)return!1;var e=Xl;if(Xl=null,0!==(48&Tl))thro...
function Ls (line 2) | function Ls(e,t,n){ui(e,t=ul(0,t=al(n,t),1)),t=us(),null!==(e=fs(e,1))&&...
function Ms (line 2) | function Ms(e,t){if(3===e.tag)Ls(e,e,t);else for(var n=e.return;null!==n...
function zs (line 2) | function zs(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=us(),e.ping...
function Us (line 2) | function Us(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(0==...
function Fs (line 2) | function Fs(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this....
function Bs (line 2) | function Bs(e,t,n,r){return new Fs(e,t,n,r)}
function Vs (line 2) | function Vs(e){return!(!(e=e.prototype)||!e.isReactComponent)}
function Ws (line 2) | function Ws(e,t){var n=e.alternate;return null===n?((n=Bs(e.tag,t,e.key,...
function Hs (line 2) | function Hs(e,t,n,r,o,i){var l=2;if(r=e,"function"===typeof e)Vs(e)&&(l=...
function $s (line 2) | function $s(e,t,n,r){return(e=Bs(7,e,r,t)).lanes=n,e}
function Gs (line 2) | function Gs(e,t,n,r){return(e=Bs(23,e,r,t)).elementType=M,e.lanes=n,e}
function qs (line 2) | function qs(e,t,n){return(e=Bs(6,e,null,t)).lanes=n,e}
function Ys (line 2) | function Ys(e,t,n){return(t=Bs(4,null!==e.children?e.children:[],e.key,t...
function Ks (line 2) | function Ks(e,t,n){this.tag=t,this.containerInfo=e,this.finishedWork=thi...
function Qs (line 2) | function Qs(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?argum...
function Xs (line 2) | function Xs(e,t,n,r){var o=t.current,i=us(),l=cs(o);e:if(n){t:{if(Qe(n=n...
function Zs (line 2) | function Zs(e){if(!(e=e.current).child)return null;switch(e.child.tag){c...
function Js (line 2) | function Js(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var...
function eu (line 2) | function eu(e,t){Js(e,t),(e=e.alternate)&&Js(e,t)}
function tu (line 2) | function tu(e,t,n){var r=null!=n&&null!=n.hydrationOptions&&n.hydrationO...
function nu (line 2) | function nu(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeTy...
function ru (line 2) | function ru(e,t,n,r,o){var i=n._reactRootContainer;if(i){var a=i._intern...
function ou (line 2) | function ou(e,t){var n=2<arguments.length&&void 0!==arguments[2]?argumen...
function x (line 2) | function x(e,t){var n=e.length;e.push(t);e:for(;;){var r=n-1>>>1,o=e[r];...
function _ (line 2) | function _(e){return void 0===(e=e[0])?null:e}
function j (line 2) | function j(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e...
function E (line 2) | function E(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}
function D (line 2) | function D(e){for(var t=_(k);null!==t;){if(null===t.callback)j(k);else{i...
function L (line 2) | function L(e){if(A=!1,D(e),!R)if(null!==_(C))R=!0,r(M);else{var t=_(k);n...
function M (line 2) | function M(e,n){R=!1,A&&(A=!1,i()),I=!0;var r=N;try{for(D(n),P=_(C);null...
function o (line 2) | function o(){}
function i (line 2) | function i(){}
function e (line 2) | function e(e,t,n,o,i,a){if(a!==r){var l=new Error("Calling PropTypes val...
function t (line 2) | function t(){return e}
function O (line 2) | function O(e){if("object"===typeof e&&null!==e){var t=e.$$typeof;switch(...
function x (line 2) | function x(e){return O(e)===f}
function O (line 2) | function O(e){if("object"===typeof e&&null!==e){var t=e.$$typeof;switch(...
function x (line 2) | function x(e){return O(e)===f}
function S (line 2) | function S(e){if("object"===typeof e&&null!==e){var t=e.$$typeof;switch(...
function u (line 2) | function u(e,t,n){var r,i={},u=null,c=null;for(r in void 0!==n&&(u=""+n)...
function n (line 2) | function n(e,t){for(var n=0,r=e.length-1;r>=0;r--){var o=e[r];"."===o?e....
function r (line 2) | function r(e,t){if(e.filter)return e.filter(t);for(var n=[],r=0;r<e.leng...
function r (line 2) | function r(e){for(var t=0;t<e.length&&""===e[t];t++);for(var n=e.length-...
function i (line 2) | function i(e,t){for(var n in e)t[n]=e[n]}
function a (line 2) | function a(e,t,n){return o(e,t,n)}
function a (line 2) | function a(){return s.TYPED_ARRAY_SUPPORT?2147483647:1073741823}
function l (line 2) | function l(e,t){if(a()<t)throw new RangeError("Invalid typed array lengt...
function s (line 2) | function s(e,t,n){if(!s.TYPED_ARRAY_SUPPORT&&!(this instanceof s))return...
function u (line 2) | function u(e,t,n,r){if("number"===typeof t)throw new TypeError('"value" ...
function c (line 2) | function c(e){if("number"!==typeof e)throw new TypeError('"size" argumen...
function d (line 2) | function d(e,t){if(c(t),e=l(e,t<0?0:0|p(t)),!s.TYPED_ARRAY_SUPPORT)for(v...
function f (line 2) | function f(e,t){var n=t.length<0?0:0|p(t.length);e=l(e,n);for(var r=0;r<...
function p (line 2) | function p(e){if(e>=a())throw new RangeError("Attempt to allocate Buffer...
function h (line 2) | function h(e,t){if(s.isBuffer(e))return e.length;if("undefined"!==typeof...
function m (line 2) | function m(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)ret...
function g (line 2) | function g(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}
function v (line 2) | function v(e,t,n,r,o){if(0===e.length)return-1;if("string"===typeof n?(r...
function b (line 2) | function b(e,t,n,r,o){var i,a=1,l=e.length,s=t.length;if(void 0!==r&&("u...
function y (line 2) | function y(e,t,n,r){n=Number(n)||0;var o=e.length-n;r?(r=Number(r))>o&&(...
function w (line 2) | function w(e,t,n,r){return W(B(t,e.length-n),e,n,r)}
function S (line 2) | function S(e,t,n,r){return W(function(e){for(var t=[],n=0;n<e.length;++n...
function O (line 2) | function O(e,t,n,r){return S(e,t,n,r)}
function x (line 2) | function x(e,t,n,r){return W(V(t),e,n,r)}
function _ (line 2) | function _(e,t,n,r){return W(function(e,t){for(var n,r,o,i=[],a=0;a<e.le...
function j (line 2) | function j(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromBy...
function E (line 2) | function E(e,t,n){n=Math.min(e.length,n);for(var r=[],o=t;o<n;){var i,a,...
function k (line 2) | function k(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;o<n;++o)r+...
function T (line 2) | function T(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;o<n;++o)r+...
function P (line 2) | function P(e,t,n){var r=e.length;(!t||t<0)&&(t=0),(!n||n<0||n>r)&&(n=r);...
function N (line 2) | function N(e,t,n){for(var r=e.slice(t,n),o="",i=0;i<r.length;i+=2)o+=Str...
function I (line 2) | function I(e,t,n){if(e%1!==0||e<0)throw new RangeError("offset is not ui...
function R (line 2) | function R(e,t,n,r,o,i){if(!s.isBuffer(e))throw new TypeError('"buffer" ...
function A (line 2) | function A(e,t,n,r){t<0&&(t=65535+t+1);for(var o=0,i=Math.min(e.length-n...
function D (line 2) | function D(e,t,n,r){t<0&&(t=4294967295+t+1);for(var o=0,i=Math.min(e.len...
function L (line 2) | function L(e,t,n,r,o,i){if(n+r>e.length)throw new RangeError("Index out ...
function M (line 2) | function M(e,t,n,r,i){return i||L(e,0,n,4),o.write(e,t,n,r,23,4),n+4}
function z (line 2) | function z(e,t,n,r,i){return i||L(e,0,n,8),o.write(e,t,n,r,52,8),n+8}
function F (line 2) | function F(e){return e<16?"0"+e.toString(16):e.toString(16)}
function B (line 2) | function B(e,t){var n;t=t||1/0;for(var r=e.length,o=null,i=[],a=0;a<r;++...
function V (line 2) | function V(e){return r.toByteArray(function(e){if((e=function(e){return ...
function W (line 2) | function W(e,t,n,r){for(var o=0;o<r&&!(o+n>=t.length||o>=e.length);++o)t...
function u (line 2) | function u(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. L...
function c (line 2) | function c(e,t,n){for(var o,i,a=[],l=t;l<n;l+=3)o=(e[l]<<16&16711680)+(e...
function c (line 2) | function c(){var e=u,t=null,n=null;return{clear:function(){t=null,n=null...
function f (line 2) | function f(e,t){var n,r=d;function o(){a.onStateChange&&a.onStateChange(...
function m (line 2) | function m(){return(m=Object.assign||function(e){for(var t=1;t<arguments...
function g (line 2) | function g(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=...
function _ (line 2) | function _(e,t){var n=e[1];return[t.payload,n+1]}
function j (line 2) | function j(e,t,n){p((function(){return e.apply(void 0,t)}),n)}
function E (line 2) | function E(e,t,n,r,o,i,a){e.current=r,t.current=o,n.current=!1,i.current...
function C (line 2) | function C(e,t,n,r,o,i,a,l,s,u){if(e){var c=!1,d=null,f=function(){if(!c...
function T (line 2) | function T(e,t){void 0===t&&(t={});var n=t,r=n.getDisplayName,a=void 0==...
function P (line 2) | function P(e,t){return e===t?0!==e||0!==t||1/e===1/t:e!==e&&t!==t}
function N (line 2) | function N(e,t){if(P(e,t))return!0;if("object"!==typeof e||null===e||"ob...
function I (line 2) | function I(e){return function(t,n){var r=e(t,n);function o(){return r}re...
function R (line 2) | function R(e){return null!==e.dependsOnOwnProps&&void 0!==e.dependsOnOwn...
function A (line 2) | function A(e,t){return function(t,n){n.displayName;var r=function(e,t){r...
function M (line 2) | function M(e,t,n){return m({},n,e,t)}
function F (line 2) | function F(e,t,n,r){return function(o,i){return n(e(o,i),t(r,i),i)}}
function B (line 2) | function B(e,t,n,r,o){var i,a,l,s,u,c=o.areStatesEqual,d=o.areOwnPropsEq...
function V (line 2) | function V(e,t){var n=t.initMapStateToProps,r=t.initMapDispatchToProps,o...
function H (line 2) | function H(e,t,n){for(var r=t.length-1;r>=0;r--){var o=t[r](e);if(o)retu...
function $ (line 2) | function $(e,t){return e===t}
function G (line 2) | function G(e){var t=void 0===e?{}:e,n=t.connectHOC,r=void 0===n?T:n,o=t....
function Y (line 2) | function Y(){return Object(o.useContext)(s)}
function K (line 2) | function K(e){void 0===e&&(e=s);var t=e===s?Y:function(){return Object(o...
function X (line 2) | function X(e){void 0===e&&(e=s);var t=e===s?Q:K(e);return function(){ret...
function ee (line 2) | function ee(e){void 0===e&&(e=s);var t=e===s?Y:function(){return Object(...
function oe (line 2) | function oe(e,t){return e===t}
function ie (line 2) | function ie(e,t,n){if(null===t||null===n||t.length!==n.length)return!1;f...
function ae (line 2) | function ae(e){var t=Array.isArray(e[0])?e[0]:e;if(!t.every((function(e)...
function se (line 2) | function se(e){for(const t in e)null===e[t]&&(e[t]=t);return Object.free...
function fe (line 2) | function fe(e=de,t){switch(t.type){case ue.START_FILE_LOADING_ACTION:ret...
function ve (line 2) | function ve(e=ge,t){const n=t.payload;switch(t.type){case ue.DROP_PAGE_A...
function Oe (line 2) | function Oe(e){return{...Se,appContext:e.appContext,isFullPageView:e.isF...
function je (line 2) | function je(e=_e,t){const{type:n,payload:r}=t;switch(n){case ce.OPEN_SAV...
function Te (line 2) | function Te(e=ke,t){const{type:n,payload:r}=t;switch(n){case ce.OPEN_PRI...
function ze (line 2) | function ze(e){return e&&e.map((function(e,t){return i.a.createElement(e...
function Ue (line 2) | function Ue(e){return function(t){return i.a.createElement(Fe,Le({attr:L...
function Fe (line 2) | function Fe(e){var t=function(t){var n,r=e.attr,o=e.size,a=e.title,l=Me(...
function Be (line 2) | function Be(e){return Ue({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[...
function Ve (line 2) | function Ve(e){return Ue({tag:"svg",attr:{viewBox:"0 0 448 512"},child:[...
function We (line 2) | function We(e){return Ue({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[...
function He (line 2) | function He(e){return Ue({tag:"svg",attr:{viewBox:"0 0 576 512"},child:[...
function $e (line 2) | function $e(e){return Ue({tag:"svg",attr:{viewBox:"0 0 448 512"},child:[...
function Ge (line 2) | function Ge(e){return Ue({tag:"svg",attr:{viewBox:"0 0 448 512"},child:[...
function qe (line 2) | function qe(e){return Ue({tag:"svg",attr:{viewBox:"0 0 448 512"},child:[...
function Ye (line 2) | function Ye(e){return Ue({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[...
function Ke (line 2) | function Ke(e){return Ue({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[...
function Qe (line 2) | function Qe(e){return Ue({tag:"svg",attr:{viewBox:"0 0 384 512"},child:[...
function Xe (line 2) | function Xe(e){return Ue({tag:"svg",attr:{viewBox:"0 0 384 512"},child:[...
function Ze (line 2) | function Ze(e){return Ue({tag:"svg",attr:{viewBox:"0 0 448 512"},child:[...
function Je (line 2) | function Je(e){return Ue({tag:"svg",attr:{viewBox:"0 0 448 512"},child:[...
class st (line 2) | class st extends i.a.Component{constructor(e){super(e),this.startPageNum...
method constructor (line 2) | constructor(e){super(e),this.startPageNumberEditing=()=>{this.setState...
method componentDidUpdate (line 2) | componentDidUpdate(){this.input&&setTimeout((()=>{try{this.input&&(thi...
method setNewPageNumber (line 2) | setNewPageNumber(e){this.props.pagesQuantity&&(e<1?e=1:e>this.props.pa...
method render (line 2) | render(){if(this.state.isEditing)return Object(it.jsx)(lt,{onKeyPress:...
function vt (line 2) | function vt(e){return(t,n=null)=>{const r=e[t]||we.en[t]||t;if(we.en[t]|...
class wt (line 2) | class wt extends i.a.Component{constructor(...e){super(...e),this.onInpu...
method constructor (line 2) | constructor(...e){super(...e),this.onInputChange=e=>{this.setNewPageNu...
method setNewPageNumber (line 2) | setNewPageNumber(e,t=!0){e>=1&&e<=this.props.pagesQuantity?this.props....
method render (line 2) | render(){const e=this.context;return Object(it.jsxs)(bt,{title:e("Clic...
class jt (line 2) | class jt extends i.a.Component{constructor(e){super(e),this.increaseScal...
method constructor (line 2) | constructor(e){super(e),this.increaseScale=e=>{e.preventDefault();var ...
method render (line 2) | render(){const e=Math.round(100*this.props.scale),t=this.context;retur...
class At (line 2) | class At extends i.a.Component{constructor(...e){super(...e),this.enable...
method constructor (line 2) | constructor(...e){super(...e),this.enableContinuousScrollMode=()=>{thi...
method render (line 2) | render(){const{viewMode:e,isIndirect:t}=this.props,n=this.context;retu...
function Wt (line 2) | function Wt(e){return Ue({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[...
function Ht (line 2) | function Ht(e){return Ue({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[...
function $t (line 2) | function $t(e){return Ue({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[...
function Kt (line 2) | function Kt(e){return Ue({tag:"svg",attr:{viewBox:"0 0 24 24",fill:"none...
class an (line 2) | class an extends i.a.Component{constructor(...e){super(...e),this.onChan...
method constructor (line 2) | constructor(...e){super(...e),this.onChange=e=>{if(!e.target.files.len...
method render (line 2) | render(){const e=this.context;return Object(it.jsxs)(on,{className:"fi...
class mn (line 2) | class mn extends i.a.Component{render(){const{onClose:e,isError:t,isFixe...
method render (line 2) | render(){const{onClose:e,isError:t,isFixedSize:n,className:r="",usePor...
class tr (line 2) | class tr extends i.a.Component{constructor(...e){super(...e),this.state=...
method constructor (line 2) | constructor(...e){super(...e),this.state={isDragOver:!1},this.onChange...
method processFile (line 2) | processFile(e){var t=new FileReader;t.readAsArrayBuffer(e),t.onload=()...
method render (line 2) | render(){const e=this.context;return Object(it.jsxs)(er,{$dragOver:thi...
function qr (line 2) | function qr(e,t){let n,o,i=!1;switch(t.code){case r.ErrorCodes.NETWORK_E...
class ro (line 2) | class ro extends i.a.Component{constructor(e){super(e),this.onClick=()=>...
method constructor (line 2) | constructor(e){super(e),this.onClick=()=>{this.props.callback&&this.pr...
method renderChildren (line 2) | renderChildren(){return this.props.children?Object(it.jsx)(oo,{childre...
method render (line 2) | render(){const e=this.state.isCollapsed?Je:Ze;return Object(it.jsxs)(n...
class so (line 2) | class so extends i.a.Component{constructor(...e){super(...e),this.onTree...
method constructor (line 2) | constructor(...e){super(...e),this.onTreeItemClick=e=>{this.props.disp...
method convertBookmarkArrayToTreeItemDataArray (line 2) | convertBookmarkArrayToTreeItemDataArray(e){return e&&e.map((e=>this.ma...
method makeTreeItemDataByBookmark (line 2) | makeTreeItemDataByBookmark(e){return{name:e.description,children:this....
method render (line 2) | render(){const{contents:e,dispatch:t}=this.props,n=this.context;return...
class go (line 2) | class go extends i.a.Component{constructor(...e){super(...e),this.prevIs...
method constructor (line 2) | constructor(...e){super(...e),this.prevIsMobile=null,this.lastContents...
method componentDidUpdate (line 2) | componentDidUpdate(e,t,n){this.prevIsMobile!==this.context.isMobile&&(...
method render (line 2) | render(){const{contents:e,isContentsOpened:t}=this.props,n=this.contex...
class wo (line 2) | class wo extends i.a.Component{constructor(e){super(e),this.showTimeout=...
method constructor (line 2) | constructor(e){super(e),this.showTimeout=null,this.rootRef=i.a.createR...
method componentDidMount (line 2) | componentDidMount(){this.showTimeout=setTimeout((()=>{this.rootRef.cur...
method componentWillUnmount (line 2) | componentWillUnmount(){this.showTimeout&&clearTimeout(this.showTimeout)}
method render (line 2) | render(){return Object(it.jsxs)("div",{style:{display:"none"},ref:this...
function Oo (line 2) | function Oo(e,t){if(e.length!==t.length)return!1;for(var n=0;n<e.length;...
class _o (line 2) | class _o extends i.a.Component{constructor(e){super(e),this.canvasRef=e=...
method constructor (line 2) | constructor(e){super(e),this.canvasRef=e=>{this.canvas=e,this.canvas&&...
method componentWillUnmount (line 2) | componentWillUnmount(){clearTimeout(this.redrawImageTimeout)}
method componentDidUpdate (line 2) | componentDidUpdate(){this.updateImageIfRequired()}
method componentDidMount (line 2) | componentDidMount(){this.updateImageIfRequired()}
method getScaleFactor (line 2) | getScaleFactor(){return(this.props.imageDpi?this.props.imageDpi/ue.DEF...
method getScaledImageWidth (line 2) | getScaledImageWidth(){return Math.floor(this.props.imageData.width/thi...
method getScaledImageHeight (line 2) | getScaledImageHeight(){return Math.floor(this.props.imageData.height/t...
method updateImageIfRequired (line 2) | updateImageIfRequired(){this.canvas&&this.lastUserScale!==this.props.u...
method logarithmicScale (line 2) | logarithmicScale(){const e=this.props.imageData;var t,n,r,o;let i=this...
method drawImageOnCanvas (line 2) | drawImageOnCanvas(){this.putImageData(this.logarithmicScale()),this.la...
method putImageData (line 2) | putImageData(e){this.canvas&&(this.canvas.width=e.width,this.canvas.he...
method render (line 2) | render(){return Object(it.jsx)("canvas",{style:{width:this.getScaledIm...
class To (line 2) | class To extends i.a.PureComponent{constructor(...e){super(...e),this.re...
method constructor (line 2) | constructor(...e){super(...e),this.resizeImageIfRequired=xo((e=>{const...
method render (line 2) | render(){const e=this.props.imageData&&this.resizeImageIfRequired(this...
class Io (line 2) | class Io extends i.a.PureComponent{constructor(...e){super(...e),this.st...
method constructor (line 2) | constructor(...e){super(...e),this.state={startIndex:0,stopIndex:-1},t...
method viewportHeight (line 2) | get viewportHeight(){return this.topNode.getBoundingClientRect().height}
method componentDidMount (line 2) | componentDidMount(){this.topNode.addEventListener("scroll",this.onScro...
method componentWillUnmount (line 2) | componentWillUnmount(){this.topNode.removeEventListener("scroll",this....
method itemTops (line 2) | get itemTops(){return this._prepareSpacialDataAndStyles(this.props.ite...
method contentHeight (line 2) | get contentHeight(){return this._prepareSpacialDataAndStyles(this.prop...
method itemStyles (line 2) | get itemStyles(){return this._prepareSpacialDataAndStyles(this.props.i...
method findItemIndexByScrollTop (line 2) | findItemIndexByScrollTop(e){if(e<=0)return 0;let t=0,n=this.itemTops.l...
method renderItems (line 2) | renderItems(){const{startIndex:e,stopIndex:t}=this.state,n=new Array(t...
method isItemVisible (line 2) | isItemVisible(e){const t=this.topNode.scrollTop,n=this.itemTops[e]+thi...
method getCurrentVisibleItemIndex (line 2) | getCurrentVisibleItemIndex(){const e=this.findItemIndexByScrollTop(thi...
method scrollToItem (line 2) | scrollToItem(e){this.topNode.scrollTop=this.itemTops[e]}
method render (line 2) | render(){const e=this.props.itemSizes;return Object(it.jsx)(No,{ref:th...
function Lo (line 2) | function Lo(e,t,n,r){e.removeEventListener(t,n,r),e.addEventListener(t,n...
class Mo (line 2) | class Mo extends i.a.Component{constructor(...e){super(...e),this.initia...
method constructor (line 2) | constructor(...e){super(...e),this.initialGrabbingState=null,this.poin...
method getSnapshotBeforeUpdate (line 2) | getSnapshotBeforeUpdate(){if(!this.wrapper)return null;let e=null;this...
method scrollCurrentPageIntoViewIfRequired (line 2) | scrollCurrentPageIntoViewIfRequired(e){this.props.viewMode!==ue.CONTIN...
method componentDidUpdate (line 2) | componentDidUpdate(e,t,n){if(this.wrapper){var r=this.wrapper.scrollWi...
method componentDidMount (line 2) | componentDidMount(){window.addEventListener("keydown",this.enableScale...
method componentWillUnmount (line 2) | componentWillUnmount(){window.removeEventListener("keydown",this.enabl...
method isGrabMode (line 2) | isGrabMode(){return this.props.cursorMode===ue.GRAB_CURSOR_MODE}
method setNewPageNumber (line 2) | setNewPageNumber(e){e&&e!==this.props.currentPageNumber&&this.props.di...
method render (line 2) | render(){const e=this.props.cursorMode===ue.GRAB_CURSOR_MODE,{document...
function bi (line 2) | function bi(e){const t=new Array(e);for(let n=1;n<=e;n++)t[n-1]=Object(i...
function Di (line 2) | function Di(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enum...
function Li (line 2) | function Li(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){v...
function Mi (line 2) | function Mi(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments...
function zi (line 2) | function zi(e){return"Minified Redux error #"+e+"; visit https://redux.j...
function Vi (line 2) | function Vi(e){if("object"!==typeof e||null===e)return!1;for(var t=e;nul...
function Wi (line 2) | function Wi(e,t,n){var r;if("function"===typeof t&&"function"===typeof n...
function Hi (line 2) | function Hi(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]...
function $i (line 2) | function $i(e){return function(t){var n=t.dispatch,r=t.getState;return f...
function Sa (line 2) | function Sa(e,t){var n=e.indexOf(t);n>=0&&e.splice(n,1)}
function Oa (line 2) | function Oa(e){var t=!1;return function(){t||(t=!0,e())}}
function ja (line 2) | function ja(e,t,n){void 0===t&&(t=xa),void 0===n&&(n="iterator");var r={...
function Ea (line 2) | function Ea(e,t){var n=t.sagaStack;console.error(e),console.error(n)}
function Ia (line 2) | function Ia(e,t){var n=Object.keys(e),r=n.length;var o,i=0,a=ca(e)?Ca(r)...
function Ra (line 2) | function Ra(e){return{name:e.name||"anonymous",location:Aa(e)}}
function Aa (line 2) | function Aa(e){return e[ia]}
function Da (line 2) | function Da(e,t){void 0===e&&(e=10);var n=new Array(e),r=0,o=0,i=0,a=fun...
function Wa (line 2) | function Wa(e,t){return void 0===e&&(e="*"),pa(e)?Va(Ma,{pattern:e}):ha(...
function Ha (line 2) | function Ha(e,t){return aa(t)&&(t=e,e=void 0),Va(za,{channel:e,action:t})}
function $a (line 2) | function $a(e,t){var n,r=null;return sa(e)?n=e:(ca(e)?(r=e[0],n=e[1]):(r...
function Ga (line 2) | function Ga(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t...
function qa (line 2) | function qa(e){return void 0===e&&(e=ta),Va(Fa,e)}
function Ya (line 2) | function Ya(e){void 0===e&&(e=ya);for(var t=arguments.length,n=new Array...
function Ka (line 2) | function Ka(){var e={};return e.promise=new Promise((function(t,n){e.res...
function Ja (line 2) | function Ja(e){try{nl(),e()}finally{rl()}}
function el (line 2) | function el(e){Xa.push(e),Za||(nl(),ol())}
function tl (line 2) | function tl(e){try{return nl(),e()}finally{ol()}}
function nl (line 2) | function nl(){Za++}
function rl (line 2) | function rl(){Za--}
function ol (line 2) | function ol(){var e;for(rl();!Za&&void 0!==(e=Xa.shift());)Ja(e)}
function cl (line 2) | function cl(e){var t="*"===e?ul:ua(e)?ll:ca(e)?il:ma(e)?ll:sa(e)?al:ga(e...
function pl (line 2) | function pl(e){void 0===e&&(e=La());var t=!1,n=[];return{take:function(r...
function hl (line 2) | function hl(){var e=function(){var e,t=!1,n=[],r=n,o=function(){r===n&&(...
function ml (line 2) | function ml(e,t){var n=e[Ki];sa(n)&&(t.cancel=n),e.then(t,(function(e){t...
function yl (line 2) | function yl(e){e.isRunning()&&e.cancel()}
function Sl (line 2) | function Sl(e,t){return e+"?"+t}
function Ol (line 2) | function Ol(e){var t=e.name,n=e.location;return n?t+" "+Sl(n.fileName,n...
function xl (line 2) | function xl(e){var t=function(e,t){var n;return(n=[]).concat.apply(n,t.m...
function kl (line 2) | function kl(e,t,n,r,o,i,a){var l;void 0===a&&(a=ba);var s,u,c=0,d=null,f...
function Tl (line 2) | function Tl(e,t,n,r,o,i,a){var l=e.finalizeRunEffect((function(t,n,r){if...
function Pl (line 2) | function Pl(e,t){var n=e.channel,r=void 0===n?hl():n,o=e.dispatch,i=e.ge...
function u (line 2) | function u(e){var n=e.getState,r=e.dispatch;return t=Pl.bind(null,m({},s...
function Ll (line 2) | function Ll(e){return ha(e)?"channel":ma(e)?String(e):sa(e)?e.name:Strin...
function Ml (line 2) | function Ml(e,t,n){var r,o,i,a=t;function l(t,n){if(a===Dl)return Al(t);...
function zl (line 2) | function zl(e,t){for(var n=arguments.length,r=new Array(n>2?n-2:0),o=2;o...
function Ul (line 2) | function Ul(e,t){for(var n=arguments.length,r=new Array(n>2?n-2:0),o=2;o...
class Fl (line 2) | class Fl{constructor(e){this.djvuWorker=e,this.pages={},this.imageDataPr...
method constructor (line 2) | constructor(e){this.djvuWorker=e,this.pages={},this.imageDataPromise=n...
method cancelCachingTask (line 2) | cancelCachingTask(){this.lastCachingTask&&this.lastCachingTask.isRunni...
method resetPagesCache (line 2) | resetPagesCache(){this.cancelCachingTask(),this.pages={},this.imageDat...
method fetchCurrentPageByNumber (line 2) | *fetchCurrentPageByNumber(e,t){const n={[e]:this.pages[e]};var r=null;...
method cachePages (line 2) | *cachePages(e){for(var t of e)yield*this.fetchImageDataByPageNumber(t)}
method fetchImageDataByPageNumber (line 2) | *fetchImageDataByPageNumber(e){if(null!==e&&(!this.pages[e]||this.page...
class Bl (line 2) | class Bl{constructor(e,t,n){this._reset(e,t,n)}_reset(e,t,n){this.pagesC...
method constructor (line 2) | constructor(e,t,n){this._reset(e,t,n)}
method _reset (line 2) | _reset(e,t,n){this.pagesCount=t,this.pageStorage=n,this.djvuWorker=e,t...
method reset (line 2) | *reset(){yield*this.dropAllPages(),this._reset(this.djvuWorker,this.pa...
method setPageNumber (line 2) | setPageNumber(e){var t=0;this.pageNumber=e,this.leftNumber=e-15,this.l...
method updateRegistries (line 2) | updateRegistries(){this.obsoletePageNumbers=[];for(const e of this.pag...
method dropAllPages (line 2) | *dropAllPages(){yield Ha({type:ue.DROP_ALL_PAGES_ACTION}),this.pageSto...
method dropPage (line 2) | *dropPage(e){yield Ha(tt.dropPageAction(e)),this.pageStorage.removePag...
method removeObsoletePagesIfRequired (line 2) | *removeObsoletePagesIfRequired(){const e=this.pageStorage.getAllPageNu...
method loadPageFromLastPromise (line 2) | *loadPageFromLastPromise(){try{const[e,t]=yield this.lastLoadPagePromi...
method loadPage (line 2) | *loadPage(e){const t=this.pageStorage.getPage(e);t&&t.hasOwnProperty("...
method startDataFetching (line 2) | *startDataFetching(){this.lastLoadPagePromise&&(yield*this.loadPageFro...
class Vl (line 2) | class Vl{constructor(e,t){this.djvuWorker=e,this.pageStorage=t}*prepareP...
method constructor (line 2) | constructor(e,t){this.djvuWorker=e,this.pageStorage=t}
method preparePagesForPrinting (line 2) | *preparePagesForPrinting(e,t){this.djvuWorker.cancelAllTasks();let n=0...
class Wl (line 2) | class Wl{constructor(){this.pages={}}reset(){this.removeAllPages()}getAl...
method constructor (line 2) | constructor(){this.pages={}}
method reset (line 2) | reset(){this.removeAllPages()}
method getAllPageNumbers (line 2) | getAllPageNumbers(){return Object.keys(this.pages)}
method getPage (line 2) | getPage(e){return this.pages[e]}
method addPage (line 2) | addPage(e,t){this.pages[e]=t}
method removePage (line 2) | removePage(e){const t=this.pages[e];t&&(URL.revokeObjectURL(t.url),del...
method removeAllPages (line 2) | removeAllPages(){for(const e of Object.keys(this.pages))URL.revokeObje...
class Hl (line 2) | class Hl{constructor(e){this.dispatch=e,this.callbacks={};const t=rr?doc...
method constructor (line 2) | constructor(e){this.dispatch=e,this.callbacks={};const t=rr?document.q...
method getImageData (line 2) | *getImageData(){const e=yield Ya(),t=Ie.currentPageNumber(e),n=Ie.page...
method fetchPageData (line 2) | *fetchPageData(){const e=yield Ya(),t=Ie.viewMode(e);if(t===ue.CONTINU...
method fetchPageText (line 2) | *fetchPageText(e){try{const[t,n]=yield this.djvuWorker.run(this.djvuWo...
method fetchPageTextIfRequired (line 2) | *fetchPageTextIfRequired(){const e=yield Ya(),t=Ie.currentPageNumber(e...
method prepareForContinuousMode (line 2) | *prepareForContinuousMode(){const e=yield this.djvuWorker.doc.getPages...
method configure (line 2) | *configure({pageNumber:e,pageRotation:t,viewMode:n,pageScale:r,languag...
method createDocumentFromArrayBuffer (line 2) | *createDocumentFromArrayBuffer({arrayBuffer:e,fileName:t,config:n}){th...
method loadContents (line 2) | *loadContents(){const e=yield this.djvuWorker.doc.getContents().run();...
method resetCurrentPageNumber (line 2) | *resetCurrentPageNumber(){const e=yield Ya();yield Ha(tt.setNewPageNum...
method setPageByUrl (line 2) | *setPageByUrl(e){const t=e.url;if(t&&"#"!==t[0]){const e=this.document...
method withErrorHandler (line 2) | withErrorHandler(e){return e=e.bind(this),function*(t){try{const n=e(t...
method saveDocument (line 2) | *saveDocument(){const e=yield Ya(),t=Ie.fileName(e);if(t){const e=yiel...
method resetWorkerAndStorages (line 2) | resetWorkerAndStorages(){this.pageStorage.reset(),this.pagesCache.rese...
method setCallback (line 2) | setCallback(e){this.callbacks[e.callbackName]=e.callback}
method switchToContinuousScrollMode (line 2) | *switchToContinuousScrollMode(e=!1){this.djvuWorker.cancelAllTasks(),t...
method switchToSinglePageMode (line 2) | *switchToSinglePageMode(e=!1){this.djvuWorker.cancelAllTasks(),this.co...
method switchToTextMode (line 2) | *switchToTextMode(){this.djvuWorker.cancelAllTasks(),this.continuousSc...
method handleViewModeSwitch (line 2) | *handleViewModeSwitch({notSave:e=!1}={}){const t=yield Ya(Ie.isDocumen...
method updateOptions (line 2) | *updateOptions(e){if(e.notSave)return;const t=yield Ya(),n=Ie.options(...
method loadOptions (line 2) | *loadOptions(){try{let t={};rr?(t=yield new Promise((e=>window.chrome....
method loadDocumentByUrl (line 2) | *loadDocumentByUrl({url:e,config:t}){t=t||{};const n=e=>{try{const t=/...
method bundleDocument (line 2) | *bundleDocument(){try{this.djvuWorker.cancelAllTasks(),this.isBundling...
method hardReloadIfRequired (line 2) | *hardReloadIfRequired(){this.isBundling&&this.documentContructorData&&...
method preparePagesForPrinting (line 2) | *preparePagesForPrinting(e){const{from:t,to:n}=e.payload;this.printTas...
method cancelPrintTaskIfRequired (line 2) | *cancelPrintTaskIfRequired(){if(this.printTask){this.printTask.cancel(...
method main (line 2) | *main(){yield Ul(ue.CREATE_DOCUMENT_FROM_ARRAY_BUFFER_ACTION,this.with...
class Kl (line 2) | class Kl extends ql.a{static getAvailableLanguages(){return Object.keys(...
method getAvailableLanguages (line 2) | static getAvailableLanguages(){return Object.keys(we)}
method constructor (line 2) | constructor(e=null){super(),this.eventMiddleware=e=>e=>t=>{let n;switc...
method getPageNumber (line 2) | getPageNumber(){return Ie.currentPageNumber(this.store.getState())}
method getDocumentName (line 2) | getDocumentName(){return Ie.fileName(this.store.getState())}
method _render (line 2) | _render(e){l.a.render(Object(it.jsx)(h,{store:this.store,children:Obje...
method render (line 2) | render(e){this.unmount(),this.htmlElement=e,this._render(this.htmlElem...
method unmount (line 2) | unmount(){this.htmlElement&&l.a.unmountComponentAtNode(this.htmlElemen...
method destroy (line 2) | destroy(){this.unmount(),this.store.dispatch({type:ce.DESTROY})}
method configure (line 2) | configure({pageNumber:e,pageRotation:t,viewMode:n,pageScale:r,language...
method loadDocument (line 2) | loadDocument(e,t="***",n={}){return new Promise((r=>{this.once(Yl.DOCU...
method loadDocumentByUrl (line 2) | loadDocumentByUrl(e,t=null){return new Promise((n=>{this.once(ue.END_F...
FILE: application/public/js/pdf.js
function setVerbosityLevel (line 416) | function setVerbosityLevel(level) {
function getVerbosityLevel (line 422) | function getVerbosityLevel() {
function info (line 426) | function info(msg) {
function warn (line 432) | function warn(msg) {
function unreachable (line 438) | function unreachable(msg) {
function assert (line 442) | function assert(cond, msg) {
function _isValidProtocol (line 448) | function _isValidProtocol(url) {
function createValidAbsoluteUrl (line 466) | function createValidAbsoluteUrl(url, baseUrl = null, options = null) {
function shadow (line 498) | function shadow(obj, prop, value) {
function BaseException (line 509) | function BaseException(message, name) {
class PasswordException (line 525) | class PasswordException extends BaseException {
method constructor (line 526) | constructor(msg, code) {
class UnknownErrorException (line 535) | class UnknownErrorException extends BaseException {
method constructor (line 536) | constructor(msg, details) {
class InvalidPDFException (line 545) | class InvalidPDFException extends BaseException {
method constructor (line 546) | constructor(msg) {
class MissingPDFException (line 554) | class MissingPDFException extends BaseException {
method constructor (line 555) | constructor(msg) {
class UnexpectedResponseException (line 563) | class UnexpectedResponseException extends BaseException {
method constructor (line 564) | constructor(msg, status) {
class FormatError (line 573) | class FormatError extends BaseException {
method constructor (line 574) | constructor(msg) {
class AbortException (line 582) | class AbortException extends BaseException {
method constructor (line 583) | constructor(msg) {
function bytesToString (line 591) | function bytesToString(bytes) {
function stringToBytes (line 614) | function stringToBytes(str) {
function arrayByteLength (line 629) | function arrayByteLength(arr) {
function arraysToBytes (line 641) | function arraysToBytes(arr) {
function string32 (line 676) | function string32(value) {
function objectSize (line 680) | function objectSize(obj) {
function objectFromMap (line 684) | function objectFromMap(map) {
function isLittleEndian (line 694) | function isLittleEndian() {
method value (line 702) | get value() {
function isEvalSupported (line 709) | function isEvalSupported() {
method value (line 719) | get value() {
class Util (line 727) | class Util {
method makeHexColor (line 728) | static makeHexColor(r, g, b) {
method transform (line 732) | static transform(m1, m2) {
method applyTransform (line 736) | static applyTransform(p, m) {
method applyInverseTransform (line 742) | static applyInverseTransform(p, m) {
method getAxialAlignedBoundingBox (line 749) | static getAxialAlignedBoundingBox(r, m) {
method inverseTransform (line 757) | static inverseTransform(m) {
method apply3dTransform (line 762) | static apply3dTransform(m, v) {
method singularValueDecompose2dScale (line 766) | static singularValueDecompose2dScale(m) {
method normalizeRect (line 779) | static normalizeRect(rect) {
method intersect (line 795) | static intersect(rect1, rect2) {
method bezierBoundingBox (line 823) | static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3) {
function stringToPDFString (line 897) | function stringToPDFString(str) {
function escapeString (line 932) | function escapeString(str) {
function isAscii (line 944) | function isAscii(str) {
function stringToUTF16BEString (line 948) | function stringToUTF16BEString(str) {
function stringToUTF8String (line 959) | function stringToUTF8String(str) {
function utf8StringToString (line 963) | function utf8StringToString(str) {
function isArrayBuffer (line 967) | function isArrayBuffer(v) {
function isArrayEqual (line 971) | function isArrayEqual(arr1, arr2) {
function getModificationDate (line 985) | function getModificationDate(date = new Date()) {
function createPromiseCapability (line 990) | function createPromiseCapability() {
function setPDFNetworkStreamFactory (line 1086) | function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) {
function getDocument (line 1090) | function getDocument(src) {
function _fetchDocument (line 1285) | async function _fetchDocument(worker, source, pdfDataRangeTransport, doc...
class PDFDocumentLoadingTask (line 1327) | class PDFDocumentLoadingTask {
method idCounters (line 1328) | static get idCounters() {
method constructor (line 1334) | constructor() {
method promise (line 1345) | get promise() {
method destroy (line 1349) | async destroy() {
class PDFDataRangeTransport (line 1365) | class PDFDataRangeTransport {
method constructor (line 1366) | constructor(length, initialData, progressiveDone = false, contentDispo...
method addRangeListener (line 1378) | addRangeListener(listener) {
method addProgressListener (line 1382) | addProgressListener(listener) {
method addProgressiveReadListener (line 1386) | addProgressiveReadListener(listener) {
method addProgressiveDoneListener (line 1390) | addProgressiveDoneListener(listener) {
method onDataRange (line 1394) | onDataRange(begin, chunk) {
method onDataProgress (line 1400) | onDataProgress(loaded, total) {
method onDataProgressiveRead (line 1408) | onDataProgressiveRead(chunk) {
method onDataProgressiveDone (line 1416) | onDataProgressiveDone() {
method transportReady (line 1424) | transportReady() {
method requestDataRange (line 1428) | requestDataRange(begin, end) {
method abort (line 1432) | abort() {}
class PDFDocumentProxy (line 1438) | class PDFDocumentProxy {
method constructor (line 1439) | constructor(pdfInfo, transport) {
method annotationStorage (line 1460) | get annotationStorage() {
method numPages (line 1464) | get numPages() {
method fingerprints (line 1468) | get fingerprints() {
method stats (line 1472) | get stats() {
method isPureXfa (line 1476) | get isPureXfa() {
method allXfaHtml (line 1480) | get allXfaHtml() {
method getPage (line 1484) | getPage(pageNumber) {
method getPageIndex (line 1488) | getPageIndex(ref) {
method getDestinations (line 1492) | getDestinations() {
method getDestination (line 1496) | getDestination(id) {
method getPageLabels (line 1500) | getPageLabels() {
method getPageLayout (line 1504) | getPageLayout() {
method getPageMode (line 1508) | getPageMode() {
method getViewerPreferences (line 1512) | getViewerPreferences() {
method getOpenAction (line 1516) | getOpenAction() {
method getAttachments (line 1520) | getAttachments() {
method getJavaScript (line 1524) | getJavaScript() {
method getJSActions (line 1528) | getJSActions() {
method getOutline (line 1532) | getOutline() {
method getOptionalContentConfig (line 1536) | getOptionalContentConfig() {
method getPermissions (line 1540) | getPermissions() {
method getMetadata (line 1544) | getMetadata() {
method getMarkInfo (line 1548) | getMarkInfo() {
method getData (line 1552) | getData() {
method getDownloadInfo (line 1556) | getDownloadInfo() {
method cleanup (line 1560) | cleanup(keepLoadedFonts = false) {
method destroy (line 1564) | destroy() {
method loadingParams (line 1568) | get loadingParams() {
method loadingTask (line 1572) | get loadingTask() {
method saveDocument (line 1576) | saveDocument() {
method getFieldObjects (line 1584) | getFieldObjects() {
method hasJSActions (line 1588) | hasJSActions() {
method getCalculationOrderIds (line 1592) | getCalculationOrderIds() {
class PDFPageProxy (line 1600) | class PDFPageProxy {
method constructor (line 1601) | constructor(pageIndex, pageInfo, transport, ownerDocument, pdfBug = fa...
method pageNumber (line 1617) | get pageNumber() {
method rotate (line 1621) | get rotate() {
method ref (line 1625) | get ref() {
method userUnit (line 1629) | get userUnit() {
method view (line 1633) | get view() {
method getViewport (line 1637) | getViewport({
method getAnnotations (line 1654) | getAnnotations({
method getJSActions (line 1696) | getJSActions() {
method getXfa (line 1700) | async getXfa() {
method render (line 1704) | render({
method getOperatorList (line 1843) | getOperatorList({
method streamTextContent (line 1887) | streamTextContent({
method getTextContent (line 1906) | getTextContent(params = {}) {
method getStructTree (line 1940) | getStructTree() {
method _destroy (line 1944) | _destroy() {
method cleanup (line 1975) | cleanup(resetStats = false) {
method _tryCleanup (line 1980) | _tryCleanup(resetStats = false) {
method _startRenderPage (line 2011) | _startRenderPage(transparency, cacheKey) {
method _renderPageChunk (line 2027) | _renderPageChunk(operatorListChunk, intentState) {
method _pumpOperatorList (line 2044) | _pumpOperatorList({
method _abortOperatorList (line 2108) | _abortOperatorList({
method stats (line 2154) | get stats() {
class LoopbackPort (line 2162) | class LoopbackPort {
method constructor (line 2163) | constructor() {
method postMessage (line 2168) | postMessage(obj, transfers) {
method addEventListener (line 2180) | addEventListener(name, listener) {
method removeEventListener (line 2184) | removeEventListener(name, listener) {
method terminate (line 2190) | terminate() {
class PDFWorker (line 2238) | class PDFWorker {
method _workerPorts (line 2239) | static get _workerPorts() {
method constructor (line 2243) | constructor({
method promise (line 2271) | get promise() {
method port (line 2275) | get port() {
method messageHandler (line 2279) | get messageHandler() {
method _initializeFromPort (line 2283) | _initializeFromPort(port) {
method _initialize (line 2292) | _initialize() {
method _setupFakeWorker (line 2385) | _setupFakeWorker() {
method destroy (line 2416) | destroy() {
method fromPort (line 2436) | static fromPort(params) {
method workerSrc (line 2448) | static get workerSrc() {
method _mainThreadWorkerMessageHandler (line 2464) | static get _mainThreadWorkerMessageHandler() {
method _setupFakeWorkerGlobal (line 2472) | static get _setupFakeWorkerGlobal() {
class WorkerTransport (line 2502) | class WorkerTransport {
method constructor (line 2508) | constructor(messageHandler, loadingTask, networkStream, params) {
method annotationStorage (line 2540) | get annotationStorage() {
method stats (line 2544) | get stats() {
method getRenderingIntent (line 2548) | getRenderingIntent(intent, annotationMode = _util.AnnotationMode.ENABL...
method destroy (line 2599) | destroy() {
method setupMessageHandler (line 2647) | setupMessageHandler() {
method _onUnsupportedFeature (line 2970) | _onUnsupportedFeature({
method getData (line 2980) | getData() {
method getPage (line 2984) | getPage(pageNumber) {
method getPageIndex (line 3011) | getPageIndex(ref) {
method getAnnotations (line 3022) | getAnnotations(pageIndex, intent) {
method saveDocument (line 3029) | saveDocument() {
method getFieldObjects (line 3040) | getFieldObjects() {
method hasJSActions (line 3044) | hasJSActions() {
method getCalculationOrderIds (line 3048) | getCalculationOrderIds() {
method getDestinations (line 3052) | getDestinations() {
method getDestination (line 3056) | getDestination(id) {
method getPageLabels (line 3066) | getPageLabels() {
method getPageLayout (line 3070) | getPageLayout() {
method getPageMode (line 3074) | getPageMode() {
method getViewerPreferences (line 3078) | getViewerPreferences() {
method getOpenAction (line 3082) | getOpenAction() {
method getAttachments (line 3086) | getAttachments() {
method getJavaScript (line 3090) | getJavaScript() {
method getDocJSActions (line 3094) | getDocJSActions() {
method getPageJSActions (line 3098) | getPageJSActions(pageIndex) {
method getStructTree (line 3104) | getStructTree(pageIndex) {
method getOutline (line 3110) | getOutline() {
method getOptionalContentConfig (line 3114) | getOptionalContentConfig() {
method getPermissions (line 3120) | getPermissions() {
method getMetadata (line 3124) | getMetadata() {
method getMarkInfo (line 3135) | getMarkInfo() {
method startCleanup (line 3139) | async startCleanup(keepLoadedFonts = false) {
method loadingParams (line 3165) | get loadingParams() {
class PDFObjects (line 3175) | class PDFObjects {
method #ensureObj (line 3178) | #ensureObj(objId) {
method get (line 3191) | get(objId, callback = null) {
method has (line 3207) | has(objId) {
method resolve (line 3212) | resolve(objId, data = null) {
method clear (line 3218) | clear() {
class RenderTask (line 3224) | class RenderTask {
method constructor (line 3225) | constructor(internalRenderTask) {
method promise (line 3230) | get promise() {
method cancel (line 3234) | cancel() {
class InternalRenderTask (line 3242) | class InternalRenderTask {
method canvasInUse (line 3243) | static get canvasInUse() {
method constructor (line 3247) | constructor({
method completed (line 3283) | get completed() {
method initializeGraphics (line 3287) | initializeGraphics({
method cancel (line 3331) | cancel(error = null) {
method operatorListChanged (line 3346) | operatorListChanged() {
method _continue (line 3366) | _continue() {
method _scheduleNext (line 3380) | _scheduleNext() {
method _next (line 3390) | async _next() {
class PixelsPerInch (line 3444) | class PixelsPerInch {
class DOMCanvasFactory (line 3452) | class DOMCanvasFactory extends _base_factory.BaseCanvasFactory {
method constructor (line 3453) | constructor({
method _createCanvas (line 3460) | _createCanvas(width, height) {
function fetchData (line 3472) | async function fetchData(url, asTypedArray = false) {
class DOMCMapReaderFactory (line 3518) | class DOMCMapReaderFactory extends _base_factory.BaseCMapReaderFactory {
method _fetchData (line 3519) | _fetchData(url, compressionType) {
class DOMStandardFontDataFactory (line 3532) | class DOMStandardFontDataFactory extends _base_factory.BaseStandardFontD...
method _fetchData (line 3533) | _fetchData(url) {
class DOMSVGFactory (line 3541) | class DOMSVGFactory extends _base_factory.BaseSVGFactory {
method _createSVG (line 3542) | _createSVG(type) {
class PageViewport (line 3550) | class PageViewport {
method constructor (line 3551) | constructor({
method clone (line 3631) | clone({
method convertToViewportPoint (line 3648) | convertToViewportPoint(x, y) {
method convertToViewportRectangle (line 3652) | convertToViewportRectangle(rect) {
method convertToPdfPoint (line 3660) | convertToPdfPoint(x, y) {
class RenderingCancelledException (line 3668) | class RenderingCancelledException extends _util.BaseException {
method constructor (line 3669) | constructor(msg, type) {
function isDataScheme (line 3678) | function isDataScheme(url) {
function isPdfFile (line 3689) | function isPdfFile(filename) {
function getFilenameFromUrl (line 3693) | function getFilenameFromUrl(url) {
function getPdfFilenameFromUrl (line 3700) | function getPdfFilenameFromUrl(url, defaultFilename = "document.pdf") {
class StatTimer (line 3728) | class StatTimer {
method constructor (line 3729) | constructor() {
method time (line 3734) | time(name) {
method timeEnd (line 3742) | timeEnd(name) {
method toString (line 3755) | toString() {
function isValidFetchUrl (line 3779) | function isValidFetchUrl(url, baseUrl) {
function loadScript (line 3790) | function loadScript(src, removeScriptElement = false) {
function deprecated (line 3811) | function deprecated(details) {
class PDFDateString (line 3817) | class PDFDateString {
method toDateObject (line 3818) | static toDateObject(input) {
function getXfaPageViewport (line 3865) | function getXfaPageViewport(xfaPage, {
class BaseCanvasFactory (line 3894) | class BaseCanvasFactory {
method constructor (line 3895) | constructor() {
method create (line 3901) | create(width, height) {
method reset (line 3914) | reset(canvasAndContext, width, height) {
method destroy (line 3927) | destroy(canvasAndContext) {
method _createCanvas (line 3938) | _createCanvas(width, height) {
class BaseCMapReaderFactory (line 3946) | class BaseCMapReaderFactory {
method constructor (line 3947) | constructor({
method fetch (line 3959) | async fetch({
method _fetchData (line 3977) | _fetchData(url, compressionType) {
class BaseStandardFontDataFactory (line 3985) | class BaseStandardFontDataFactory {
method constructor (line 3986) | constructor({
method fetch (line 3996) | async fetch({
method _fetchData (line 4013) | _fetchData(url) {
class BaseSVGFactory (line 4021) | class BaseSVGFactory {
method constructor (line 4022) | constructor() {
method create (line 4028) | create(width, height) {
method createElement (line 4043) | createElement(type) {
method _createSVG (line 4051) | _createSVG(type) {
class BaseFontLoader (line 4072) | class BaseFontLoader {
method constructor (line 4073) | constructor({
method addNativeFontFace (line 4090) | addNativeFontFace(nativeFontFace) {
method insertRule (line 4096) | insertRule(rule) {
method clear (line 4110) | clear() {
method bind (line 4123) | async bind(font) {
method _queueLoadingCallback (line 4169) | _queueLoadingCallback(callback) {
method isFontLoadingAPISupported (line 4173) | get isFontLoadingAPISupported() {
method isSyncFontLoadingSupported (line 4178) | get isSyncFontLoadingSupported() {
method _loadTestFont (line 4182) | get _loadTestFont() {
method _prepareFontLoadEvent (line 4186) | _prepareFontLoadEvent(rules, fontsToLoad, request) {
method constructor (line 4196) | constructor(params) {
method isSyncFontLoadingSupported (line 4205) | get isSyncFontLoadingSupported() {
method _queueLoadingCallback (line 4221) | _queueLoadingCallback(callback) {
method _loadTestFont (line 4243) | get _loadTestFont() {
method _prepareFontLoadEvent (line 4251) | _prepareFontLoadEvent(rules, fonts, request) {
class FontFaceObject (line 4346) | class FontFaceObject {
method constructor (line 4347) | constructor(translatedData, {
method createNativeFontFace (line 4367) | createNativeFontFace() {
method createFontFaceRule (line 4395) | createFontFaceRule() {
method getPathGenerator (line 4423) | getPathGenerator(objs, character) {
method constructor (line 4489) | constructor() {
method constructor (line 4496) | constructor() {
method constructor (line 4503) | constructor() {
method _createCanvas (line 4527) | _createCanvas(width, height) {
method _fetchData (line 4535) | _fetchData(url, compressionType) {
method _fetchData (line 4546) | _fetchData(url) {
class AnnotationStorage (line 4566) | class AnnotationStorage {
method constructor (line 4567) | constructor() {
method getValue (line 4575) | getValue(key, defaultValue) {
method setValue (line 4585) | setValue(key, value) {
method getAll (line 4610) | getAll() {
method size (line 4614) | get size() {
method _setModified (line 4618) | _setModified() {
method resetModified (line 4628) | resetModified() {
method serializable (line 4638) | get serializable() {
method lastModified (line 4642) | get lastModified() {
function mirrorContextOperations (line 4677) | function mirrorContextOperations(ctx, destCtx) {
function addContextCurrentTransform (line 4808) | function addContextCurrentTransform(ctx) {
class CachedCanvases (line 4927) | class CachedCanvases {
method constructor (line 4928) | constructor(canvasFactory) {
method getCanvas (line 4933) | getCanvas(id, width, height, trackTransform) {
method clear (line 4952) | clear() {
function compileType3Glyph (line 4962) | function compileType3Glyph(imgData) {
class CanvasExtraState (line 5135) | class CanvasExtraState {
method constructor (line 5136) | constructor(width, height) {
method clone (line 5164) | clone() {
method setCurrentPoint (line 5170) | setCurrentPoint(x, y) {
method updatePathMinMax (line 5175) | updatePathMinMax(transform, x, y) {
method updateCurvePathMinMax (line 5183) | updateCurvePathMinMax(transform, x0, y0, x1, y1, x2, y2, x3, y3) {
method getPathBoundingBox (line 5190) | getPathBoundingBox(pathType = _pattern_helper.PathType.FILL, transform...
method updateClipFromPath (line 5211) | updateClipFromPath() {
method startNewPathAndClipBox (line 5217) | startNewPathAndClipBox(box) {
method getClippedPathBoundingBox (line 5225) | getClippedPathBoundingBox(pathType = _pattern_helper.PathType.FILL, tr...
function putBinaryImageData (line 5231) | function putBinaryImageData(ctx, imgData, transferMaps = null) {
function putBinaryImageMask (line 5417) | function putBinaryImageMask(ctx, imgData) {
function copyCtxState (line 5452) | function copyCtxState(sourceCtx, destCtx) {
function resetCtxToDefault (line 5469) | function resetCtxToDefault(ctx) {
function composeSMaskBackdrop (line 5487) | function composeSMaskBackdrop(bytes, r0, g0, b0) {
function composeSMaskAlpha (line 5506) | function composeSMaskAlpha(maskData, layerData, transferMap) {
function composeSMaskLuminosity (line 5516) | function composeSMaskLuminosity(maskData, layerData, transferMap) {
function genericComposeSMask (line 5525) | function genericComposeSMask(maskCtx, layerCtx, width, height, subtype, ...
function composeSMask (line 5555) | function composeSMask(ctx, smask, layerCtx, layerBox) {
function getImageSmoothingEnabled (line 5574) | function getImageSmoothingEnabled(transform, interpolate) {
class CanvasGraphics (line 5595) | class CanvasGraphics {
method constructor (line 5596) | constructor(canvasCtx, commonObjs, objs, canvasFactory, imageLayer, op...
method beginDrawing (line 5635) | beginDrawing({
method executeOperatorList (line 5675) | executeOperatorList(operatorList, executionStartIdx, continueCallback,...
method endDrawing (line 5730) | endDrawing() {
method _scaleImage (line 5754) | _scaleImage(img, inverseTransform) {
method _createMaskCanvas (line 5795) | _createMaskCanvas(img) {
method setLineWidth (line 5842) | setLineWidth(width) {
method setLineCap (line 5851) | setLineCap(style) {
method setLineJoin (line 5855) | setLineJoin(style) {
method setMiterLimit (line 5859) | setMiterLimit(limit) {
method setDash (line 5863) | setDash(dashArray, dashPhase) {
method setRenderingIntent (line 5872) | setRenderingIntent(intent) {}
method setFlatness (line 5874) | setFlatness(flatness) {}
method setGState (line 5876) | setGState(states) {
method inSMaskMode (line 5940) | get inSMaskMode() {
method checkSMaskState (line 5944) | checkSMaskState() {
method beginSMaskMode (line 5954) | beginSMaskMode() {
method endSMaskMode (line 5972) | endSMaskMode() {
method compose (line 5984) | compose(dirtyBox) {
method save (line 6007) | save() {
method restore (line 6020) | restore() {
method transform (line 6042) | transform(a, b, c, d, e, f) {
method constructPath (line 6048) | constructPath(ops, args) {
method closePath (line 6132) | closePath() {
method stroke (line 6136) | stroke(consumePath) {
method closeStroke (line 6160) | closeStroke() {
method fill (line 6165) | fill(consumePath) {
method eoFill (line 6198) | eoFill() {
method fillStroke (line 6203) | fillStroke() {
method eoFillStroke (line 6209) | eoFillStroke() {
method closeFillStroke (line 6214) | closeFillStroke() {
method closeEOFillStroke (line 6219) | closeEOFillStroke() {
method endPath (line 6225) | endPath() {
method clip (line 6229) | clip() {
method eoClip (line 6233) | eoClip() {
method beginText (line 6237) | beginText() {
method endText (line 6244) | endText() {
method setCharSpacing (line 6269) | setCharSpacing(spacing) {
method setWordSpacing (line 6273) | setWordSpacing(spacing) {
method setHScale (line 6277) | setHScale(scale) {
method setLeading (line 6281) | setLeading(leading) {
method setFont (line 6285) | setFont(fontRefName, size) {
method setTextRenderingMode (line 6336) | setTextRenderingMode(mode) {
method setTextRise (line 6340) | setTextRise(rise) {
method moveText (line 6344) | moveText(x, y) {
method setLeadingMoveText (line 6349) | setLeadingMoveText(x, y) {
method setTextMatrix (line 6354) | setTextMatrix(a, b, c, d, e, f) {
method nextLine (line 6361) | nextLine() {
method paintChar (line 6365) | paintChar(character, x, y, patternTransform) {
method isFontSubpixelAAEnabled (line 6421) | get isFontSubpixelAAEnabled() {
method showText (line 6440) | showText(glyphs) {
method showType3Text (line 6589) | showType3Text(glyphs) {
method setCharWidth (line 6653) | setCharWidth(xWidth, yWidth) {}
method setCharWidthAndBounds (line 6655) | setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) {
method getColorN_Pattern (line 6661) | getColorN_Pattern(IR) {
method setStrokeColorN (line 6680) | setStrokeColorN() {
method setFillColorN (line 6684) | setFillColorN() {
method setStrokeRGBColor (line 6689) | setStrokeRGBColor(r, g, b) {
method setFillRGBColor (line 6696) | setFillRGBColor(r, g, b) {
method _getPattern (line 6704) | _getPattern(objId, matrix = null) {
method shadingFill (line 6721) | shadingFill(objId) {
method beginInlineImage (line 6760) | beginInlineImage() {
method beginImageData (line 6764) | beginImageData() {
method paintFormXObjectBegin (line 6768) | paintFormXObjectBegin(matrix, bbox) {
method paintFormXObjectEnd (line 6793) | paintFormXObjectEnd() {
method beginGroup (line 6802) | beginGroup(group) {
method endGroup (line 6895) | endGroup(group) {
method beginAnnotations (line 6924) | beginAnnotations() {
method endAnnotations (line 6932) | endAnnotations() {
method beginAnnotation (line 6936) | beginAnnotation(id, rect, transform, matrix, hasOwnCanvas) {
method endAnnotation (line 6985) | endAnnotation() {
method paintImageMaskXObject (line 6995) | paintImageMaskXObject(img) {
method paintImageMaskXObjectRepeat (line 7032) | paintImageMaskXObjectRepeat(imgData, scaleX, skewX = 0, skewY = 0, sca...
method paintImageMaskXObjectGroup (line 7058) | paintImageMaskXObjectGroup(images) {
method paintImageXObject (line 7089) | paintImageXObject(objId) {
method paintImageXObjectRepeat (line 7104) | paintImageXObjectRepeat(objId, scaleX, scaleY, positions) {
method paintInlineImageXObject (line 7133) | paintInlineImageXObject(imgData) {
method paintInlineImageXObjectGroup (line 7174) | paintInlineImageXObjectGroup(imgData, map) {
method paintSolidColorImageMask (line 7210) | paintSolidColorImageMask() {
method markPoint (line 7219) | markPoint(tag) {}
method markPointProps (line 7221) | markPointProps(tag, properties) {}
method beginMarkedContent (line 7223) | beginMarkedContent(tag) {
method beginMarkedContentProps (line 7229) | beginMarkedContentProps(tag, properties) {
method endMarkedContent (line 7243) | endMarkedContent() {
method beginCompat (line 7248) | beginCompat() {}
method endCompat (line 7250) | endCompat() {}
method consumePath (line 7252) | consumePath(clipBox) {
method getSinglePixelWidth (line 7277) | getSinglePixelWidth() {
method getScaleForStroking (line 7294) | getScaleForStroking() {
method rescaleAndStroke (line 7336) | rescaleAndStroke(saveRestore) {
method getCanvasPosition (line 7372) | getCanvasPosition(x, y) {
method isContentVisible (line 7377) | isContentVisible() {
function applyBoundingBox (line 7418) | function applyBoundingBox(ctx, bbox) {
class BaseShadingPattern (line 7430) | class BaseShadingPattern {
method constructor (line 7431) | constructor() {
method getPattern (line 7437) | getPattern() {
class RadialAxialShadingPattern (line 7443) | class RadialAxialShadingPattern extends BaseShadingPattern {
method constructor (line 7444) | constructor(IR) {
method _createGradient (line 7456) | _createGradient(ctx) {
method getPattern (line 7472) | getPattern(ctx, owner, inverse, pathType) {
function drawTriangle (line 7513) | function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) {
function drawFigure (line 7638) | function drawFigure(data, figure, context) {
class MeshShadingPattern (line 7672) | class MeshShadingPattern extends BaseShadingPattern {
method constructor (line 7673) | constructor(IR) {
method _createMeshCanvas (line 7684) | _createMeshCanvas(combinedScale, backgroundColor, cachedCanvases) {
method getPattern (line 7736) | getPattern(ctx, owner, inverse, pathType) {
class DummyShadingPattern (line 7769) | class DummyShadingPattern extends BaseShadingPattern {
method getPattern (line 7770) | getPattern() {
function getShadingPattern (line 7776) | function getShadingPattern(IR) {
class TilingPattern (line 7796) | class TilingPattern {
method MAX_PATTERN_SIZE (line 7797) | static get MAX_PATTERN_SIZE() {
method constructor (line 7801) | constructor(IR, color, ctx, canvasGraphicsFactory, baseTransform) {
method createPatternCanvas (line 7815) | createPatternCanvas(owner) {
method getSizeAndScale (line 7873) | getSizeAndScale(step, realOutputSize, scale) {
method clipBbox (line 7890) | clipBbox(graphics, x0, y0, x1, y1) {
method setFillAndStrokeStyleToContext (line 7898) | setFillAndStrokeStyleToContext(graphics, paintType, color) {
method getPattern (line 7925) | getPattern(ctx, owner, inverse, pathType) {
function wrapReason (line 8000) | function wrapReason(reason) {
class MessageHandler (line 8026) | class MessageHandler {
method constructor (line 8027) | constructor(sourceName, targetName, comObj) {
method on (line 8115) | on(actionName, handler) {
method send (line 8125) | send(actionName, data, transfers) {
method sendWithPromise (line 8134) | sendWithPromise(actionName, data, transfers) {
method sendWithStream (line 8154) | sendWithStream(actionName, data, queueingStrategy, transfers) {
method _createStreamSink (line 8208) | _createStreamSink(data) {
method _processStreamMessage (line 8301) | _processStreamMessage(data) {
method _deleteStreamController (line 8443) | async _deleteStreamController(streamController, streamId) {
method destroy (line 8448) | destroy() {
class Metadata (line 8469) | class Metadata {
method constructor (line 8473) | constructor({
method getRaw (line 8481) | getRaw() {
method get (line 8485) | get(name) {
method getAll (line 8489) | getAll() {
method has (line 8493) | has(name) {
class OptionalContentGroup (line 8514) | class OptionalContentGroup {
method constructor (line 8515) | constructor(name, intent) {
class OptionalContentConfig (line 8523) | class OptionalContentConfig {
method constructor (line 8524) | constructor(data) {
method _evaluateVisibilityExpression (line 8557) | _evaluateVisibilityExpression(array) {
method isVisible (line 8605) | isVisible(group) {
method setVisibility (line 8689) | setVisibility(id, visible = true) {
method getOrder (line 8698) | getOrder() {
method getGroups (line 8710) | getGroups() {
method getGroup (line 8714) | getGroup(id) {
class PDFDataTransportStream (line 8737) | class PDFDataTransportStream {
method constructor (line 8738) | constructor(params, pdfDataRangeTransport) {
method _onReceiveData (line 8785) | _onReceiveData(args) {
method _progressiveDataLength (line 8809) | get _progressiveDataLength() {
method _onProgress (line 8813) | _onProgress(evt) {
method _onProgressiveDone (line 8834) | _onProgressiveDone() {
method _removeRangeReader (line 8842) | _removeRangeReader(reader) {
method getFullReader (line 8850) | getFullReader() {
method getRangeReader (line 8857) | getRangeReader(begin, end) {
method cancelAllRequests (line 8871) | cancelAllRequests(reason) {
class PDFDataTransportStreamReader (line 8887) | class PDFDataTransportStreamReader {
method constructor (line 8888) | constructor(stream, queuedChunks, progressiveDone = false, contentDisp...
method _enqueue (line 8905) | _enqueue(chunk) {
method headersReady (line 8924) | get headersReady() {
method filename (line 8928) | get filename() {
method isRangeSupported (line 8932) | get isRangeSupported() {
method isStreamingSupported (line 8936) | get isStreamingSupported() {
method contentLength (line 8940) | get contentLength() {
method read (line 8944) | async read() {
method cancel (line 8968) | cancel(reason) {
method progressiveDone (line 8981) | progressiveDone() {
class PDFDataTransportStreamRangeReader (line 8991) | class PDFDataTransportStreamRangeReader {
method constructor (line 8992) | constructor(stream, begin, end) {
method _enqueue (line 9002) | _enqueue(chunk) {
method isStreamingSupported (line 9032) | get isStreamingSupported() {
method read (line 9036) | async read() {
method cancel (line 9060) | cancel(reason) {
class XfaText (line 9088) | class XfaText {
method textContent (line 9089) | static textContent(xfa) {
method shouldBuildText (line 9133) | static shouldBuildText(name) {
function getRectDims (line 9165) | function getRectDims(rect) {
class AnnotationElementFactory (line 9172) | class AnnotationElementFactory {
method create (line 9173) | static create(parameters) {
class AnnotationElement (line 9257) | class AnnotationElement {
method constructor (line 9258) | constructor(parameters, {
method _createContainer (line 9288) | _createContainer(ignoreBorder = false) {
method _createQuadrilaterals (line 9385) | _createQuadrilaterals(ignoreBorder = false) {
method _createPopup (line 9402) | _createPopup(trigger, data) {
method _renderQuadrilaterals (line 9432) | _renderQuadrilaterals(className) {
method render (line 9440) | render() {
method _getElementsByName (line 9444) | _getElementsByName(name, skipId = null) {
method platform (line 9507) | static get platform() {
class LinkAnnotationElement (line 9517) | class LinkAnnotationElement extends AnnotationElement {
method constructor (line 9518) | constructor(parameters, options = null) {
method render (line 9527) | render() {
method _bindLink (line 9569) | _bindLink(link, destination) {
method _bindNamedAction (line 9585) | _bindNamedAction(link, action) {
method _bindJSAction (line 9596) | _bindJSAction(link, data) {
method _bindResetFormAction (line 9626) | _bindResetFormAction(link, resetForm) {
class TextAnnotationElement (line 9753) | class TextAnnotationElement extends AnnotationElement {
method constructor (line 9754) | constructor(parameters) {
method render (line 9761) | render() {
class WidgetAnnotationElement (line 9783) | class WidgetAnnotationElement extends AnnotationElement {
method render (line 9784) | render() {
method _getKeyModifier (line 9792) | _getKeyModifier(event) {
method _setEventListener (line 9800) | _setEventListener(element, baseName, eventName, valueGetter) {
method _setEventListeners (line 9828) | _setEventListeners(element, names, getter) {
method _setBackgroundColor (line 9836) | _setBackgroundColor(element) {
method _dispatchEventFromSandbox (line 9841) | _dispatchEventFromSandbox(actions, jsEvent) {
class TextWidgetAnnotationElement (line 9920) | class TextWidgetAnnotationElement extends WidgetAnnotationElement {
method constructor (line 9921) | constructor(parameters) {
method setPropertyOnSiblings (line 9928) | setPropertyOnSiblings(base, key, value, keyInStorage) {
method render (line 9942) | render() {
method _setTextStyle (line 10148) | _setTextStyle(element) {
class CheckboxWidgetAnnotationElement (line 10169) | class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement {
method constructor (line 10170) | constructor(parameters) {
method render (line 10176) | render() {
class RadioButtonWidgetAnnotationElement (line 10258) | class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {
method constructor (line 10259) | constructor(parameters) {
method render (line 10265) | render() {
class PushButtonWidgetAnnotationElement (line 10349) | class PushButtonWidgetAnnotationElement extends LinkAnnotationElement {
method constructor (line 10350) | constructor(parameters) {
method render (line 10356) | render() {
class ChoiceWidgetAnnotationElement (line 10369) | class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {
method constructor (line 10370) | constructor(parameters) {
method render (line 10376) | render() {
class PopupAnnotationElement (line 10607) | class PopupAnnotationElement extends AnnotationElement {
method constructor (line 10608) | constructor(parameters) {
method render (line 10615) | render() {
class PopupElement (line 10654) | class PopupElement {
method constructor (line 10655) | constructor(parameters) {
method render (line 10667) | render() {
method _formatContents (line 10732) | _formatContents({
method _toggle (line 10753) | _toggle() {
method _show (line 10761) | _show(pin = false) {
method _hide (line 10772) | _hide(unpin = true) {
class FreeTextAnnotationElement (line 10785) | class FreeTextAnnotationElement extends AnnotationElement {
method constructor (line 10786) | constructor(parameters) {
method render (line 10794) | render() {
class LineAnnotationElement (line 10806) | class LineAnnotationElement extends AnnotationElement {
method constructor (line 10807) | constructor(parameters) {
method render (line 10815) | render() {
class SquareAnnotationElement (line 10841) | class SquareAnnotationElement extends AnnotationElement {
method constructor (line 10842) | constructor(parameters) {
method render (line 10850) | render() {
class CircleAnnotationElement (line 10877) | class CircleAnnotationElement extends AnnotationElement {
method constructor (line 10878) | constructor(parameters) {
method render (line 10886) | render() {
class PolylineAnnotationElement (line 10913) | class PolylineAnnotationElement extends AnnotationElement {
method constructor (line 10914) | constructor(parameters) {
method render (line 10924) | render() {
class PolygonAnnotationElement (line 10956) | class PolygonAnnotationElement extends PolylineAnnotationElement {
method constructor (line 10957) | constructor(parameters) {
class CaretAnnotationElement (line 10965) | class CaretAnnotationElement extends AnnotationElement {
method constructor (line 10966) | constructor(parameters) {
method render (line 10974) | render() {
class InkAnnotationElement (line 10986) | class InkAnnotationElement extends AnnotationElement {
method constructor (line 10987) | constructor(parameters) {
method render (line 10997) | render() {
class HighlightAnnotationElement (line 11033) | class HighlightAnnotationElement extends AnnotationElement {
method constructor (line 11034) | constructor(parameters) {
method render (line 11043) | render() {
class UnderlineAnnotationElement (line 11058) | class UnderlineAnnotationElement extends AnnotationElement {
method constructor (line 11059) | constructor(parameters) {
method render (line 11068) | render() {
class SquigglyAnnotationElement (line 11083) | class SquigglyAnnotationElement extends AnnotationElement {
method constructor (line 11084) | constructor(parameters) {
method render (line 11093) | render() {
class StrikeOutAnnotationElement (line 11108) | class StrikeOutAnnotationElement extends AnnotationElement {
method constructor (line 11109) | constructor(parameters) {
method render (line 11118) | render() {
class StampAnnotationElement (line 11133) | class StampAnnotationElement extends AnnotationElement {
method constructor (line 11134) | constructor(parameters) {
method render (line 11142) | render() {
class FileAttachmentAnnotationElement (line 11154) | class FileAttachmentAnnotationElement extends AnnotationElement {
method constructor (line 11155) | constructor(parameters) {
method render (line 11173) | render() {
method _download (line 11188) | _download() {
class AnnotationLayer (line 11194) | class AnnotationLayer {
method render (line 11195) | static render(parameters) {
method update (line 11271) | static update(parameters) {
method #setAnnotationCanvasMap (line 11319) | static #setAnnotationCanvasMap(div, annotationCanvasMap) {
function makeColorComp (line 11360) | function makeColorComp(n) {
class ColorConverters (line 11364) | class ColorConverters {
method CMYK_G (line 11365) | static CMYK_G([c, y, m, k]) {
method G_CMYK (line 11369) | static G_CMYK([g]) {
method G_RGB (line 11373) | static G_RGB([g]) {
method G_HTML (line 11377) | static G_HTML([g]) {
method RGB_G (line 11382) | static RGB_G([r, g, b]) {
method RGB_HTML (line 11386) | static RGB_HTML([r, g, b]) {
method T_HTML (line 11393) | static T_HTML() {
method CMYK_RGB (line 11397) | static CMYK_RGB([c, y, m, k]) {
method CMYK_HTML (line 11401) | static CMYK_HTML(components) {
method RGB_CMYK (line 11405) | static RGB_CMYK([r, g, b]) {
class XfaLayer (line 11430) | class XfaLayer {
method setupStorage (line 11431) | static setupStorage(html, id, element, storage, intent) {
method setAttributes (line 11508) | static setAttributes({
method render (line 11557) | static render(parameters) {
method update (line 11655) | static update(parameters) {
function getAscent (line 11684) | function getAscent(fontFamily, ctx) {
function appendText (line 11741) | function appendText(task, geom, styles, ctx) {
function render (line 11859) | function render(task) {
function findPositiveMin (line 11884) | function findPositiveMin(ts, offset, count) {
function expand (line 11898) | function expand(task) {
function expandBounds (line 11958) | function expandBounds(width, height, boxes) {
function expandBoundsLTR (line 12005) | function expandBoundsLTR(width, bounds) {
class TextLayerRenderTask (line 12156) | class TextLayerRenderTask {
method constructor (line 12157) | constructor({
method promise (line 12199) | get promise() {
method cancel (line 12203) | cancel() {
method _processItems (line 12220) | _processItems(items, styleCache) {
method _layoutText (line 12247) | _layoutText(textDiv) {
method _render (line 12303) | _render(timeout = 0) {
method expandTextDivs (line 12361) | expandTextDivs(expandDivs = false) {
function renderTextLayer (line 12431) | function renderTextLayer(renderParameters) {
method constructor (line 12465) | constructor() {
function crc32 (line 12525) | function crc32(data, start, end) {
function writePngChunk (line 12537) | function writePngChunk(type, body, data, offset) {
function adler32 (line 12559) | function adler32(data, start, end) {
function deflateSync (line 12571) | function deflateSync(literals) {
function deflateSyncUncompressed (line 12597) | function deflateSyncUncompressed(literals) {
function encode (line 12634) | function encode(imgData, kind, forceDataSchema, isMask) {
class SVGExtraState (line 12707) | class SVGExtraState {
method constructor (line 12708) | constructor() {
method clone (line 12741) | clone() {
method setCurrentPoint (line 12745) | setCurrentPoint(x, y) {
function opListToTree (line 12752) | function opListToTree(opList) {
function pf (line 12778) | function pf(value) {
function pm (line 12797) | function pm(m) {
method constructor (line 12824) | constructor(commonObjs, objs, forceDataSchema = false) {
method save (line 12845) | save() {
method restore (line 12852) | restore() {
method group (line 12859) | group(items) {
method loadDependencies (line 12865) | loadDependencies(operatorList) {
method transform (line 12886) | transform(a, b, c, d, e, f) {
method getSVG (line 12892) | getSVG(operatorList, viewport) {
method convertOpList (line 12904) | convertOpList(operatorList) {
method executeOpTree (line 12922) | executeOpTree(opTree) {
method setWordSpacing (line 13135) | setWordSpacing(wordSpacing) {
method setCharSpacing (line 13139) | setCharSpacing(charSpacing) {
method nextLine (line 13143) | nextLine() {
method setTextMatrix (line 13147) | setTextMatrix(a, b, c, d, e, f) {
method beginText (line 13163) | beginText() {
method moveText (line 13177) | moveText(x, y) {
method showText (line 13189) | showText(glyphs) {
method setLeadingMoveText (line 13320) | setLeadingMoveText(x, y) {
method addFontStyle (line 13325) | addFontStyle(fontObj) {
method setFont (line 13340) | setFont(details) {
method endText (line 13379) | endText() {
method setLineWidth (line 13389) | setLineWidth(width) {
method setLineCap (line 13395) | setLineCap(style) {
method setLineJoin (line 13399) | setLineJoin(style) {
method setMiterLimit (line 13403) | setMiterLimit(limit) {
method setStrokeAlpha (line 13407) | setStrokeAlpha(strokeAlpha) {
method setStrokeRGBColor (line 13411) | setStrokeRGBColor(r, g, b) {
method setFillAlpha (line 13415) | setFillAlpha(fillAlpha) {
method setFillRGBColor (line 13419) | setFillRGBColor(r, g, b) {
method setStrokeColorN (line 13426) | setStrokeColorN(args) {
method setFillColorN (line 13430) | setFillColorN(args) {
method shadingFill (line 13434) | shadingFill(args) {
method _makeColorN_Pattern (line 13466) | _makeColorN_Pattern(args) {
method _makeTilingPattern (line 13474) | _makeTilingPattern(args) {
method _makeShadingPattern (line 13522) | _makeShadingPattern(args) {
method setDash (line 13588) | setDash(dashArray, dashPhase) {
method constructPath (line 13593) | constructPath(ops, args) {
method endPath (line 13667) | endPath() {
method clip (line 13710) | clip(type) {
method closePath (line 13714) | closePath() {
method setLeading (line 13723) | setLeading(leading) {
method setTextRise (line 13727) | setTextRise(textRise) {
method setTextRenderingMode (line 13731) | setTextRenderingMode(textRenderingMode) {
method setHScale (line 13735) | setHScale(scale) {
method setRenderingIntent (line 13739) | setRenderingIntent(intent) {}
method setFlatness (line 13741) | setFlatness(flatness) {}
method setGState (line 13743) | setGState(states) {
method fill (line 13793) | fill() {
method stroke (line 13803) | stroke() {
method _setStrokeAttributes (line 13814) | _setStrokeAttributes(element, lineWidthScale = 1) {
method eoFill (line 13834) | eoFill() {
method fillStroke (line 13842) | fillStroke() {
method eoFillStroke (line 13847) | eoFillStroke() {
method closeStroke (line 13855) | closeStroke() {
method closeFillStroke (line 13860) | closeFillStroke() {
method closeEOFillStroke (line 13865) | closeEOFillStroke() {
method paintSolidColorImageMask (line 13870) | paintSolidColorImageMask() {
method paintImageXObject (line 13881) | paintImageXObject(objId) {
method paintInlineImageXObject (line 13892) | paintInlineImageXObject(imgData, mask) {
method paintImageMaskXObject (line 13918) | paintImageMaskXObject(imgData) {
method paintFormXObjectBegin (line 13940) | paintFormXObjectBegin(matrix, bbox) {
method paintFormXObjectEnd (line 13959) | paintFormXObjectEnd() {}
method _initialize (line 13961) | _initialize(viewport) {
method _ensureClipGroup (line 13973) | _ensureClipGroup() {
method _ensureTransformGroup (line 13984) | _ensureTransformGroup() {
function parseUrl (line 14029) | function parseUrl(sourceUrl) {
class PDFNodeStream (line 14047) | class PDFNodeStream {
method constructor (line 14048) | constructor(
Condensed preview — 109 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (8,475K chars).
[
{
"path": ".gitignore",
"chars": 36,
"preview": "cache/*\nFlibusta.Net/*\nFlibustaSQL/*"
},
{
"path": "LICENSE",
"chars": 18092,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 2, June 1991\n\n Copyright (C) 1989, 1991 Fr"
},
{
"path": "README.md",
"chars": 3413,
"preview": "# Docker-контейнер для локальной копии Флибусты.\n\nОтображение книг, поиск по заголовкам, сборникам, авторам, жанрам. Отк"
},
{
"path": "application/dbinit.php",
"chars": 1366,
"preview": "<?php\n$dbname = getenv('FLIBUSTA_DBNAME')?getenv('FLIBUSTA_DBNAME'):'flibusta';\n$dbhost = getenv('FLIBUSTA_DBHOST')?gete"
},
{
"path": "application/djvu.php",
"chars": 5116,
"preview": "<?PHP\n // $Id$\n // $Author$\n \n// Class: FreeMED.Djvu\n//\n// Wrapper class to handle Djvu documents.\n//"
},
{
"path": "application/epub.php",
"chars": 16421,
"preview": "<?php\n/**\n * PHP EPub Meta library\n *\n * @author Andreas Gohr <andi@splitbrain.org>\n */\nclass EPub {\n public $xml; //"
},
{
"path": "application/functions.php",
"chars": 20126,
"preview": "<?php\n\nfunction bbc2html($content) {\n $search = array (\n '/(\\[b\\])(.*?)(\\[\\/b\\])/',\n '/(\\[i\\])(.*?)(\\[\\/i\\])/',\n "
},
{
"path": "application/init.php",
"chars": 453,
"preview": "<?php\ndefine('ROOT_PATH', '/application/');\ndefine('RECORDS_PAGE', 10);\ndefine('BOOKS_PAGE', 10);\ndefine('AUTHORS_PAGE',"
},
{
"path": "application/modules/404/index.php",
"chars": 75,
"preview": "<?php\nheader(\"HTTP/1.1 404 Not Found\");\nheader(\"Status: 404 Not Found\");\n\n\n"
},
{
"path": "application/modules/404/module.conf",
"chars": 100,
"preview": "<?php\n$url->title = 'Страница не найдена';\n#$url->keywords .= '';\nheader(\"HTTP/1.0 404 Not Found\");\n"
},
{
"path": "application/modules/author/index.php",
"chars": 1536,
"preview": "<?php\ninclude_once(ROOT_PATH . \"webroot.php\");\n$stmt = $dbh->prepare(\"SELECT * FROM libavtorname LEFT JOIN libapics USIN"
},
{
"path": "application/modules/author/module.conf",
"chars": 0,
"preview": ""
},
{
"path": "application/modules/authors/index.php",
"chars": 2815,
"preview": "<style>\n.c {\n\tbackground: #eee;\n\tborder-radius: 50%;\n\tborder-color: #eee;\n}\n</style>\n\n<?php\n\ninclude_once(ROOT_PATH . \"w"
},
{
"path": "application/modules/authors/module.conf",
"chars": 30,
"preview": "<?php\n$url->title = 'Авторы';\n"
},
{
"path": "application/modules/book/djvu.php",
"chars": 531,
"preview": "<?php\ninclude_once(ROOT_PATH . \"webroot.php\");\necho \"<script src='$webroot/js/djvu.js'></script>\\n\";\necho \"<script src='"
},
{
"path": "application/modules/book/docx.php",
"chars": 361,
"preview": "<?php\ninclude_once(ROOT_PATH . \"webroot.php\");\necho \"<script src='$webroot/js/jszip.min.js'></script>\\n\";\necho \"<script "
},
{
"path": "application/modules/book/epub.php",
"chars": 599,
"preview": "<?php\necho \"<script src='$webroot/js/jszip.min.js'></script>\";\necho \"<script src='$webroot/js/epub.min.js'></script>\";\n?"
},
{
"path": "application/modules/book/fb.php",
"chars": 2075,
"preview": "<script>\nvar isScrolling;\n\nwindow.addEventListener('scroll', function ( event ) {\n\twindow.clearTimeout( isScrolling );\n\t"
},
{
"path": "application/modules/book/html.php",
"chars": 270,
"preview": "<script>\nvar reader = new FileReader();\nfetch(url).then(res => res.arrayBuffer()).then(arrayBuffer => {\n\tvar td = new Te"
},
{
"path": "application/modules/book/index.php",
"chars": 1805,
"preview": "<?php\necho \"<script>var url = '$webroot/usr.php?id=$url->var1';</script>\";\n\nfunction nl2p($string) {\n $paragraphs = '"
},
{
"path": "application/modules/book/mobi.php",
"chars": 236,
"preview": "<?php \necho \"<script src='$webroot/js/mobi.min.js'></script>\\n\"; ?>\n<script>\nvar reader = new FileReader();\n\nfetch(url)."
},
{
"path": "application/modules/book/module.conf",
"chars": 845,
"preview": "<?php\nglobal $url, $book, $dbh;\n\n\n$stmt = $dbh->prepare(\"SELECT b.*,\n (SELECT Body FROM libbannotations WHERE Boo"
},
{
"path": "application/modules/book/pdf.php",
"chars": 1098,
"preview": "<?php\necho \"<script src='$webroot/js/pdf.js'></script>\\n\"; ?>\n\n<script>\nvar pdfjsLib = window['pdfjs-dist/build/pdf'];\n\n"
},
{
"path": "application/modules/book/rtf.php",
"chars": 565,
"preview": "<?php\necho <<< __HTML\n<script src=\"$webroot/js/WMFJS.bundle.js\"></script>\n<script src=\"$webroot/js/EMFJS.bundle.js\"></sc"
},
{
"path": "application/modules/book/txt.php",
"chars": 379,
"preview": "<?php\n\n$content = $zip->getFromName(\"$url->var1.txt\");\nif (!mb_detect_encoding($content, 'UTF-8', true)) {\n\t$content =ic"
},
{
"path": "application/modules/fav/index.php",
"chars": 1949,
"preview": "<?php\n$stmt = $dbh->prepare(\"SELECT COUNT(*) cnt FROM fav_users\");\n$stmt->execute();\n$fav_count = $stmt->fetch()->cnt;\n\n"
},
{
"path": "application/modules/fav/module.conf",
"chars": 49,
"preview": "<?php\n$url->title = 'Книжная полка - Избранное';\n"
},
{
"path": "application/modules/favlist/index.php",
"chars": 1631,
"preview": "<?php \necho '<div class=\"block rounded\" style=\"margin-bottom:8px;\"><form action=\"'.$webroot.'/favlist/\">'; ?>\n<div class"
},
{
"path": "application/modules/favlist/module.conf",
"chars": 43,
"preview": "<?php\n$url->title = 'Выбор книжной полки';\n"
},
{
"path": "application/modules/genres/index.php",
"chars": 1295,
"preview": "<style>\n.c {\n\tbackground: #eee;\n\tborder-radius: 50%;\n\tborder-color: #eee;\n}\n</style>\n\n<?php\n$stmt = $dbh->prepare(\"SELEC"
},
{
"path": "application/modules/genres/module.conf",
"chars": 29,
"preview": "<?php\n$url->title = 'Жанры';\n"
},
{
"path": "application/modules/opds/index.php",
"chars": 0,
"preview": ""
},
{
"path": "application/modules/opds/module.conf",
"chars": 0,
"preview": ""
},
{
"path": "application/modules/primary/index.php",
"chars": 7574,
"preview": "<?php\nif (isset($_GET['fb2'])) {\n\tif ($_GET['fb2'] == '') {\n\t\tunset($_SESSION['fb2']);\n\t} else {\n\t\t$_SESSION['fb2'] = tr"
},
{
"path": "application/modules/primary/module.conf",
"chars": 0,
"preview": ""
},
{
"path": "application/modules/series/index.php",
"chars": 2479,
"preview": "<style>\n.c {\n\tbackground: #eee;\n\tborder-radius: 50%;\n\tborder-color: #eee;\n}\n</style>\n\n<?php\n\n$filter2 = \"\";\n$letter = 'А"
},
{
"path": "application/modules/series/module.conf",
"chars": 29,
"preview": "<?php\n$url->title = 'Жанры';\n"
},
{
"path": "application/modules/service/index.php",
"chars": 3723,
"preview": "\n<div class='row'>\n<div class=\"col-sm-6\">\n<div class='card'>\n<h4 class=\"rounded-top p-1\" style=\"background: #d0d0d0;\">Ст"
},
{
"path": "application/modules/service/module.conf",
"chars": 56,
"preview": "<?php\nglobal $url;\n\n$url->title = 'Сервис и настройки';\n"
},
{
"path": "application/opds/author.php",
"chars": 6974,
"preview": "<?php\nheader('Content-Type: application/atom+xml; charset=utf-8');\necho '<?xml version=\"1.0\" encoding=\"utf-8\"?>';echo \"\\"
},
{
"path": "application/opds/authorsindex.php",
"chars": 1745,
"preview": "<?php\nheader('Content-Type: application/atom+xml; charset=utf-8');\n\n$letters = $_GET['letters'] ?? '';\n\nif ($letters !=="
},
{
"path": "application/opds/fav.php",
"chars": 1167,
"preview": "<?php\nheader('Content-Type: application/atom+xml; charset=utf-8');\necho '<?xml version=\"1.0\" encoding=\"utf-8\"?>';\necho <"
},
{
"path": "application/opds/favs.php",
"chars": 1252,
"preview": "<?php\nheader('Content-Type: application/atom+xml; charset=utf-8');\necho '<?xml version=\"1.0\" encoding=\"utf-8\"?>';\necho <"
},
{
"path": "application/opds/genres.php",
"chars": 1323,
"preview": "<?php\nheader('Content-Type: application/atom+xml; charset=utf-8');\necho '<?xml version=\"1.0\" encoding=\"utf-8\"?>';\necho <"
},
{
"path": "application/opds/index.php",
"chars": 538,
"preview": "<?php\nswitch ($url->action) {\n\tcase 'list':\n\t\tinclude('list.php');\n\t\tbreak;\n\tcase 'authorsindex':\n\t\tinclude('authorsinde"
},
{
"path": "application/opds/list.php",
"chars": 2869,
"preview": "<?php\nheader('Content-Type: application/atom+xml; charset=utf-8');\necho '<?xml version=\"1.0\" encoding=\"utf-8\"?>';\n\n$filt"
},
{
"path": "application/opds/listgenres.php",
"chars": 1306,
"preview": "<?php\nheader('Content-Type: application/atom+xml; charset=utf-8');\necho '<?xml version=\"1.0\" encoding=\"utf-8\"?>';\necho '"
},
{
"path": "application/opds/main.php",
"chars": 2097,
"preview": "<?php\nheader('Content-Type: application/atom+xml; charset=utf-8');\necho '<?xml version=\"1.0\" encoding=\"utf-8\"?>';\necho <"
},
{
"path": "application/opds/search.php",
"chars": 150,
"preview": "<?php\n$search = $_GET['by'];\nswitch ($search) {\n\tcase 'author':\n\t\tinclude('search_author.php');\n\t\tbreak;\n\n\tdefault:\n\t\tin"
},
{
"path": "application/opds/search_author.php",
"chars": 2685,
"preview": "<?php\nheader('Content-Type: application/atom+xml; charset=utf-8');\necho '<?xml version=\"1.0\" encoding=\"utf-8\"?>';\necho <"
},
{
"path": "application/opds/search_book.php",
"chars": 2342,
"preview": "<?php\nheader('Content-Type: application/atom+xml; charset=utf-8');\necho '<?xml version=\"1.0\" encoding=\"utf-8\"?>';\necho <"
},
{
"path": "application/opds/sequencesindex.php",
"chars": 2631,
"preview": "<?php\nheader('Content-Type: application/atom+xml; charset=utf-8');\n\n$letters = $_GET['letters'] ?? '';\n\nif ($letters !=="
},
{
"path": "application/public/bootstrap/css/bootstrap-grid.css",
"chars": 72279,
"preview": "/*!\n * Bootstrap Grid v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-"
},
{
"path": "application/public/bootstrap/css/bootstrap-grid.rtl.css",
"chars": 72353,
"preview": "/*!\n * Bootstrap Grid v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-"
},
{
"path": "application/public/bootstrap/css/bootstrap-reboot.css",
"chars": 7578,
"preview": "/*!\n * Bootstrap Reboot v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 201"
},
{
"path": "application/public/bootstrap/css/bootstrap-reboot.rtl.css",
"chars": 7555,
"preview": "/*!\n * Bootstrap Reboot v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 201"
},
{
"path": "application/public/bootstrap/css/bootstrap-utilities.css",
"chars": 71560,
"preview": "/*!\n * Bootstrap Utilities v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright "
},
{
"path": "application/public/bootstrap/css/bootstrap-utilities.rtl.css",
"chars": 71427,
"preview": "/*!\n * Bootstrap Utilities v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright "
},
{
"path": "application/public/bootstrap/css/bootstrap.css",
"chars": 205481,
"preview": "@charset \"UTF-8\";\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Co"
},
{
"path": "application/public/bootstrap/css/bootstrap.rtl.css",
"chars": 205148,
"preview": "@charset \"UTF-8\";\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Co"
},
{
"path": "application/public/bootstrap/js/bootstrap.bundle.js",
"chars": 209713,
"preview": "/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors (https://github.com/t"
},
{
"path": "application/public/bootstrap/js/bootstrap.esm.js",
"chars": 139773,
"preview": "/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors (https://github.com/t"
},
{
"path": "application/public/bootstrap/js/bootstrap.js",
"chars": 148892,
"preview": "/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors (https://github.com/t"
},
{
"path": "application/public/css/css.css",
"chars": 0,
"preview": ""
},
{
"path": "application/public/css/style.css",
"chars": 4244,
"preview": ".whb {\n\tbackground-color: #fff;\n}\n\nsection title {\n display: block;\n\n}\n\n.block {\n width: 100%;\n background: #fa"
},
{
"path": "application/public/extract_author.php",
"chars": 1174,
"preview": "<?php\ninclude('../init.php');\n$cover = '';\nheader('Cache-Control: public, max-age=86400');\n\nfunction lastm($path) {\n\t$fm"
},
{
"path": "application/public/extract_cover.php",
"chars": 4312,
"preview": "<?php\ninclude('../init.php');\n$cover = '';\n$q = 75;\nheader('Cache-Control: public, max-age=86400');\n\nfunction resizeCove"
},
{
"path": "application/public/extract_usr.php",
"chars": 1455,
"preview": "<?php\ninclude('../init.php');\n\nif (isset($_GET['id'])) {\n\t$id = $_GET['id'];\n} else {\n\t$id = 610095;\n}\n\n$book = DBO::que"
},
{
"path": "application/public/fb2.php",
"chars": 1358,
"preview": "<?php\nif (isset($_GET['id'])) {\n\t$id = $_GET['id'];\n} else {\n\tdie();\n}\nerror_reporting(E_ALL);\ninclude('../init.php');\n\n"
},
{
"path": "application/public/index.php",
"chars": 3802,
"preview": "<?php\nob_start();\n\ninclude(\"../init.php\");\nsession_start();\ndecode_gurl($webroot);\n\n$user_name = 'Книжные полки';\nif (is"
},
{
"path": "application/public/js/EMFJS.bundle.js",
"chars": 154395,
"preview": "(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object"
},
{
"path": "application/public/js/RTFJS.bundle.js",
"chars": 1508388,
"preview": "(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object"
},
{
"path": "application/public/js/WMFJS.bundle.js",
"chars": 150275,
"preview": "(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object"
},
{
"path": "application/public/js/djvu.js",
"chars": 556638,
"preview": "var DjVu = (function () {\n 'use strict';\n\n function DjVuScript() {\n 'use strict';\n\n var DjVu = {\n VER"
},
{
"path": "application/public/js/djvu_viewer.js",
"chars": 428965,
"preview": "/*! For license information please see djvu_viewer.js.LICENSE.txt */\n!function(e){var t={};function n(r){if(t[r])return "
},
{
"path": "application/public/js/pdf.js",
"chars": 417918,
"preview": "/**\n * @licstart The following is the entire license notice for the\n * Javascript code in this page\n *\n * Copyright 2022"
},
{
"path": "application/public/js/pdf.worker.js",
"chars": 1928008,
"preview": "/**\n * @licstart The following is the entire license notice for the\n * Javascript code in this page\n *\n * Copyright 2022"
},
{
"path": "application/public/opds-opensearch.xml",
"chars": 643,
"preview": "<OpenSearchDescription xmlns=\"http://a9.com/-/spec/opensearch/1.1/\">\n<ShortName>Библиотека</ShortName>\n<Description>Библ"
},
{
"path": "application/public/opds-opensearch.xml.php",
"chars": 714,
"preview": "<?php\ninclude(\"../init.php\");\necho <<< __HTML\n<OpenSearchDescription xmlns=\"http://a9.com/-/spec/opensearch/1.1/\">\n<Shor"
},
{
"path": "application/public/save_position.php",
"chars": 743,
"preview": "<?php\ninclude('../init.php');\nsession_start();\n\nif (!isset($_GET['user_uuid'])) {\n\tdie();\n}\n\n$user_uuid = $_GET['user_uu"
},
{
"path": "application/public/usr.php",
"chars": 1403,
"preview": "<?php\nif (isset($_GET['id'])) {\n\t$id = $_GET['id'];\n} else {\n\tdie();\n}\nerror_reporting(E_ALL);\ninclude('../init.php');\n\n"
},
{
"path": "application/renderer.php",
"chars": 3186,
"preview": "<!doctype html>\n<html lang=\"ru\">\n<head>\n\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initi"
},
{
"path": "application/tools/app_db_converter.py",
"chars": 9250,
"preview": "#!/usr/bin/env python\n\n\"\"\"\nFixes a MySQL dump made with the right format so it can be directly\nimported to a new Postgre"
},
{
"path": "application/tools/app_import_sql.sh",
"chars": 1492,
"preview": "#!/bin/sh\nsource /application/tools/dbinit.sh\n\nmkdir -p /application/sql/psql\nmkdir -p /application/cache/authors\nmkdir "
},
{
"path": "application/tools/app_reindex.sh",
"chars": 152,
"preview": "#!/bin/sh\necho \"Создание индекса zip-файлов\">>/application/sql/status\nphp /application/tools/app_update_zip_list.php\n\nec"
},
{
"path": "application/tools/app_topg",
"chars": 648,
"preview": "#/bin/sh\necho \"Конвертация $1\">>/application/sql/status\nif ! grep -q INSERT \"/application/sql/$1\"; then \n echo \"Empty"
},
{
"path": "application/tools/app_update_zip_list.php",
"chars": 1052,
"preview": "<?php\nerror_reporting(E_ALL);\ninclude('../dbinit.php');\n\nif ($handle = opendir('/application/flibusta')) {\n\t$stmt = $dbh"
},
{
"path": "application/tools/cleanup_db.sql",
"chars": 331,
"preview": "delete from libgenrelist where not exists (select 1 from libgenre where libgenrelist.genreid = libgenre.genreid);\ndelete"
},
{
"path": "application/tools/dbinit.sh",
"chars": 823,
"preview": "#!/bin/sh\n\nif [ -z \"$FLIBUSTA_DBNAME\" ]; then\n export FLIBUSTA_DBNAME=flibusta\nfi\n\nif [ -z \"$FLIBUSTA_DBHOST\" ]; then\n "
},
{
"path": "application/tools/external_services_config/README.md",
"chars": 6827,
"preview": "# Конфигурация docker container для работы с reverse proxy и внешним сервером базы данных\n\n## Почему Вы можете предпочес"
},
{
"path": "application/tools/external_services_config/docker-compose.yml",
"chars": 1727,
"preview": "services:\n\n flibusta-fpm:\n build: phpdocker/php-fpm\n working_dir: /application\n container_name: f"
},
{
"path": "application/tools/external_services_config/external_postgres_init.sql",
"chars": 35955,
"preview": "-- parameters of the script FLIBUSTA_DBUSER FLIBUSTA_DBPASSWORD FLIBUSTA_DBNAME\n-- "
},
{
"path": "application/tools/external_services_config/flibusta.conf",
"chars": 927,
"preview": "location ^~ /mylib {\n allow 192.168.1.0/24;\n deny all;\n root /srv;\n index index.php;\n try_files $uri /myl"
},
{
"path": "application/tools/external_services_config/flibusta_entrypoint.sh",
"chars": 1776,
"preview": "#!/bin/sh\n. /application/tools/dbinit.sh\n\nif [ -z \"$DB_HOST_PINGS\" ]; then\n DB_HOST_PINGS=3\nfi\n\nfor i in `seq 1 $DB_HO"
},
{
"path": "application/tools/update_vectors.sql",
"chars": 418,
"preview": "INSERT INTO libavtorname_ts\nselect avtorid, to_tsvector('russian', concat(lastname, ' ', middlename, ' ', firstname, ' "
},
{
"path": "application/webroot.php",
"chars": 77,
"preview": "<?php\n$webroot = getenv('FLIBUSTA_WEBROOT')?getenv('FLIBUSTA_WEBROOT'):'';\n?>"
},
{
"path": "blob/1",
"chars": 1,
"preview": "\n"
},
{
"path": "docker-compose.yml",
"chars": 1590,
"preview": "version: '3.1'\nservices:\n postgres:\n build: phpdocker/pg\n working_dir: /application\n volumes:\n "
},
{
"path": "getcovers.sh",
"chars": 1042,
"preview": "#!/bin/sh\n\n#zipchkcdm='zip -T'\nzipchkcmd='7z -bsp0 -bso0 t'\n\necho \"Backup old zip files\"\nmv cache/lib.a.attached.zip cac"
},
{
"path": "getsql.sh",
"chars": 1622,
"preview": "#!/bin/sh\nwget --directory-prefix=FlibustaSQL -c -nc http://flibusta.is/sql/lib.libavtor.sql.gz\nwget --directory-prefix="
},
{
"path": "phpdocker/nginx/nginx.conf",
"chars": 803,
"preview": "server {\n listen 80 default;\n\n client_max_body_size 508M;\n\n access_log /var/log/nginx/application.access.log;\n\n"
},
{
"path": "phpdocker/pg/Dockerfile",
"chars": 124,
"preview": "FROM postgres:16\nWORKDIR /docker-entrypoint-initdb.d\nENV POSTGRES_DB flibusta\nCOPY init_db.sql /docker-entrypoint-initdb"
},
{
"path": "phpdocker/pg/init_db.sql",
"chars": 35310,
"preview": "--\n-- PostgreSQL database dump\n--\n\n-- Dumped from database version 13.4 (Debian 13.4-4.pgdg110+1)\n-- Dumped by pg_dump v"
},
{
"path": "phpdocker/php-fpm/Dockerfile",
"chars": 354,
"preview": "FROM php:8.1-fpm-alpine\n\nADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-"
},
{
"path": "phpdocker/php-fpm/php-fpm.conf",
"chars": 90,
"preview": "php_flag[display_errors] = off\nphp_admin_flag[log_errors] = on\n[www]\npm.max_children = 10\n"
},
{
"path": "phpdocker/php-fpm/php-ini-overrides.ini",
"chars": 48,
"preview": "upload_max_filesize = 500M\npost_max_size = 508M\n"
},
{
"path": "secrets/flibusta_pwd.txt",
"chars": 0,
"preview": ""
},
{
"path": "secrets/postgres_admin_pwd.txt",
"chars": 8,
"preview": "flibusta"
},
{
"path": "update_daily.sh",
"chars": 316,
"preview": "#!/bin/sh\nURL=\"http://flibusta.is/daily/\"\nDEST_DIR=\"./Flibusta.Net\"\nmkdir -p \"$DEST_DIR\"\ncurl -s \"$URL\" > page.html\ngrep"
}
]
About this extraction
This page contains the full source code of the zlsl/flibusta GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 109 files (6.3 MB), approximately 1.7M tokens, and a symbol index with 5804 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.