Showing preview only (4,371K chars total). Download the full file or copy to clipboard to get everything.
Repository: gildas-lormeau/SingleFile-MV3
Branch: main
Commit: aa5441cdb8d5
Files: 138
Total size: 4.1 MB
Directory structure:
gitextract_jf_v4fxn/
├── .github/
│ ├── FUNDING.yml
│ └── ISSUE_TEMPLATE/
│ ├── bug_report.md
│ └── feature_request.md
├── .gitignore
├── LICENSE
├── README.MD
├── _locales/
│ ├── az/
│ │ └── messages.json
│ ├── de/
│ │ └── messages.json
│ ├── en/
│ │ └── messages.json
│ ├── es/
│ │ └── messages.json
│ ├── fr/
│ │ └── messages.json
│ ├── it/
│ │ └── messages.json
│ ├── ja/
│ │ └── messages.json
│ ├── nl_NL/
│ │ └── messages.json
│ ├── pl/
│ │ └── messages.json
│ ├── pt_PT/
│ │ └── messages.json
│ ├── pt_br/
│ │ └── messages.json
│ ├── ru/
│ │ └── messages.json
│ ├── sv/
│ │ └── messages.json
│ ├── tr/
│ │ └── messages.json
│ ├── uk/
│ │ └── messages.json
│ ├── zh_CN/
│ │ └── messages.json
│ └── zh_TW/
│ └── messages.json
├── build-dev.sh
├── build-extension.sh
├── build.sh
├── eslint.config.mjs
├── faq.md
├── lib/
│ ├── chrome-browser-polyfill.js
│ ├── single-file-background.js
│ ├── single-file-bootstrap.bundle.js
│ ├── single-file-bootstrap.js
│ ├── single-file-extension-background.js
│ ├── single-file-extension-bootstrap.js
│ ├── single-file-extension-core.js
│ ├── single-file-extension-editor-helper.js
│ ├── single-file-extension-editor.js
│ ├── single-file-extension-frames.js
│ ├── single-file-extension-offscreen-document.js
│ ├── single-file-extension.js
│ ├── single-file-frames.bundle.js
│ ├── single-file-frames.js
│ ├── single-file-hooks-frames.js
│ ├── single-file-infobar.js
│ ├── single-file-z-worker.js
│ ├── single-file-zip.js
│ └── single-file.js
├── manifest.json
├── package.json
├── privacy.md
├── rollup.config.dev.js
├── rollup.config.js
└── src/
├── core/
│ ├── bg/
│ │ ├── autosave-util.js
│ │ ├── autosave.js
│ │ ├── bookmarks.js
│ │ ├── bootstrap.js
│ │ ├── business.js
│ │ ├── companion.js
│ │ ├── config.js
│ │ ├── devtools.js
│ │ ├── download-util.js
│ │ ├── downloads.js
│ │ ├── editor.js
│ │ ├── external-messages.js
│ │ ├── index.js
│ │ ├── offscreen-document.js
│ │ ├── offscreen.js
│ │ ├── page-orphan-hack.js
│ │ ├── sw-reload-hack.js
│ │ ├── tabs-data.js
│ │ ├── tabs-util.js
│ │ └── tabs.js
│ ├── common/
│ │ └── download.js
│ ├── content/
│ │ ├── content-bootstrap.js
│ │ ├── content-frames.js
│ │ └── content.js
│ └── devtools/
│ ├── devtools.html
│ └── devtools.js
├── index.js
├── lib/
│ ├── dropbox/
│ │ └── dropbox.js
│ ├── gdrive/
│ │ └── gdrive.js
│ ├── github/
│ │ └── github.js
│ ├── mcp/
│ │ └── mcp.js
│ ├── mhtml-to-html/
│ │ ├── convert.js
│ │ ├── mod.js
│ │ ├── parse.js
│ │ ├── srcset-parser.js
│ │ ├── util.js
│ │ └── vendor/
│ │ ├── LICENSE.txt
│ │ ├── README.md
│ │ └── csstree.esm.js
│ ├── readability/
│ │ ├── Readability-readerable.js
│ │ └── Readability.js
│ ├── rest-form-api/
│ │ └── index.js
│ ├── s3/
│ │ └── s3.js
│ ├── single-file/
│ │ ├── background.js
│ │ ├── browser-polyfill/
│ │ │ └── chrome-browser-polyfill.js
│ │ ├── fetch/
│ │ │ ├── bg/
│ │ │ │ └── fetch.js
│ │ │ └── content/
│ │ │ └── content-fetch.js
│ │ ├── frame-tree/
│ │ │ └── bg/
│ │ │ └── frame-tree.js
│ │ └── lazy/
│ │ └── bg/
│ │ └── lazy-timeout.js
│ ├── webdav/
│ │ └── webdav.js
│ ├── woleet/
│ │ └── woleet.js
│ └── yabson/
│ └── yabson.js
└── ui/
├── bg/
│ ├── index.js
│ ├── ui-batch-save-urls.js
│ ├── ui-button.js
│ ├── ui-commands.js
│ ├── ui-editor.js
│ ├── ui-help.js
│ ├── ui-menus.js
│ ├── ui-options-editor.js
│ ├── ui-options.js
│ ├── ui-panel.js
│ ├── ui-pendings.js
│ └── ui-viewer.js
├── common/
│ └── common-content-ui.js
├── content/
│ ├── content-ui-editor-web.js
│ └── content-ui.js
└── pages/
├── batch-save-urls.css
├── batch-save-urls.html
├── editor-frame-web.css
├── editor-mask-web.css
├── editor-note-web.css
├── editor.css
├── editor.html
├── help.css
├── help.html
├── help_zh_CN.html
├── offscreen-document.html
├── options-editor.html
├── options.css
├── options.html
├── panel.css
├── panel.html
├── pendings.css
├── pendings.html
└── viewer.html
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/FUNDING.yml
================================================
custom: https://www.paypal.me/glormeau
liberapay: gildas
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
---
<!--
For questions, please create or update a thread here:
https://github.com/gildas-lormeau/SingleFile/discussions
Please ensure that you do not find an answer before reporting the issue:
- in the FAQ: https://github.com/gildas-lormeau/SingleFile/blob/master/faq.md
- in the list of known issues: https://github.com/gildas-lormeau/SingleFile#known-issues
- in the help page embedded in the extension
-->
**Describe the bug**
<!-- A clear and concise description of what the bug is. -->
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
<!-- A clear and concise description of what you expected to happen. -->
**Screenshots**
<!-- If applicable, add screenshots to help explain your problem. -->
**Environment**
- OS: [e.g. Win10 Pro, Ubuntu 18.04.1, Android 7.1.2]
- Browser: [e.g. Chrome, Firefox]
- Version: [e.g. 64]
**Additional context**
<!-- Add any other context about the problem here. -->
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
labels: 'feature request'
---
**Is your feature request related to a problem? Please describe.**
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
**Describe the solution you'd like**
<!-- A clear and concise description of what you want to happen. -->
**Describe alternatives you've considered (optional)**
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
**Additional context (optional)**
<!-- Add any other context or screenshots about the feature request here. -->
================================================
FILE: .gitignore
================================================
/.vscode/
**/node_modules/
.idea/
================================================
FILE: LICENSE
================================================
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<https://www.gnu.org/licenses/>.
================================================
FILE: README.MD
================================================
# SingleFile MV3
This is the new version of [SingleFile](https://www.getsinglefile.com) compatible with the Manifest V3.
## Manual install
Download the zip file
(https://github.com/gildas-lormeau/SingleFile-MV3/archive/master.zip) of the project
and install it manually by unzipping it somewhere on your disk and following
these instructions:
- Chrome:
https://developer.chrome.com/docs/extensions/mv3/getstarted/development-basics/#load-unpacked
- Microsoft Edge:
https://docs.microsoft.com/en-us/microsoft-edge/extensions-chromium/getting-started/extension-sideloading
================================================
FILE: _locales/az/messages.json
================================================
{
"extensionDescription": {
"message": "Extensionin təsviri.",
"description": "Description of the extension."
},
"commandSaveSelectedTabs": {
"message": "Seçilmiş tabları yaddaşa qeyd et",
"description": "Command (Ctrl+Shift+Y): 'Save the selected tabs or their selected contents'"
},
"commandSaveAllTabs": {
"message": "Bütün tabları yaddaşa qeyd et",
"description": "Command (Ctrl+Shift+U): 'Save all tabs'"
},
"commandCustomShortcut": {
"message": "Xüsusi qısa yol",
"description": "Command label: 'Custom shortcut'"
},
"commandCustomShortcut0": {
"message": "Xüsusi qısa yol #1",
"description": "Command label: 'Custom shortcut #1'"
},
"commandCustomShortcut1": {
"message": "Xüsusi qısa yol #2",
"description": "Command label: 'Custom shortcut #2'"
},
"commandCustomShortcut2": {
"message": "Xüsusi qısa yol #3",
"description": "Command label: 'Custom shortcut #3'"
},
"commandCustomShortcut3": {
"message": "Xüsusi qısa yol #4",
"description": "Command label: 'Custom shortcut #4'"
},
"commandCustomShortcut4": {
"message": "Xüsusi qısa yol #5",
"description": "Command label: 'Custom shortcut #5'"
},
"commandCustomShortcut5": {
"message": "Xüsusi qısa yol #6",
"description": "Command label: 'Custom shortcut #6'"
},
"commandCustomShortcut6": {
"message": "Xüsusi qısa yol #7",
"description": "Command label: 'Custom shortcut #7'"
},
"commandCustomShortcut7": {
"message": "Xüsusi qısa yol #8",
"description": "Command label: 'Custom shortcut #8'"
},
"commandCustomShortcut8": {
"message": "Xüsusi qısa yol #9",
"description": "Command label: 'Custom shortcut #9'"
},
"commandCustomShortcut9": {
"message": "Xüsusi qısa yol #10",
"description": "Command label: 'Custom shortcut #10'"
},
"menuSavePage": {
"message": "Səhifəni SingleFile ilə yaddaşa qeyd et",
"description": "Menu entry: 'Save page with SingleFile'"
},
"menuSaveSelectedLinks": {
"message": "Seçilmiş linkləri yaddaşa qeyd et",
"description": "Menu entry: 'Save selected links'"
},
"menuEditPage": {
"message": "Səhifəni redaktə et...",
"description": "Menu entry: 'Annotate the page...'"
},
"menuEditAndSavePage": {
"message": "Səhifəni redaktə et və yaddaşa qeyd et...",
"description": "Menu entry: 'Annotate and save the page...'"
},
"menuSaveWithProfile": {
"message": "Profil ilə yaddaşa qeyd et",
"description": "Menu entry: 'Save with profile'"
},
"menuViewPendingSaves": {
"message": "Gözləyən yaddaşları göstər...",
"description": "Menu entry: 'View pending saves...'"
},
"menuSelectProfile": {
"message": "Standart profil seç",
"description": "Menu entry: 'Select the default profile'"
},
"menuUpdateRule": {
"message": "Qayda yenilə",
"description": "Menu entry: 'Select the profile of the current rule'"
},
"menuCreateDomainRule": {
"message": "Domain qaydası yarat",
"description": "Menu entry: 'Select the profile of the current domain'"
},
"menuSaveSelection": {
"message": "Seçimi yaddaşa qeyd et",
"description": "Menu entry: 'Save selection'"
},
"menuSaveFrame": {
"message": "Frame-i yaddaşa qeyd et",
"description": "Menu entry: 'Save frame'"
},
"menuSaveTabs": {
"message": "Tabları yaddaşa qeyd et",
"description": "Menu entry (SingleFile button only): 'Save tabs'"
},
"menuSaveSelectedTabs": {
"message": "Seçilmiş tabları yaddaşa qeyd et",
"description": "Menu entry: 'Save selected tabs'"
},
"menuSaveUnpinnedTabs": {
"message": "Sabit olmayan tabları yaddaşa qeyd et",
"description": "Menu entry: 'Save unpinned tabs'"
},
"menuSaveAllTabs": {
"message": "Bütün tabları yaddaşa qeyd et",
"description": "Menu entry: 'Save all tabs'"
},
"menuBatchSaveUrls": {
"message": "URL-ləri toplu yaddaşa qeyd et...",
"description": "Menu entry: 'Batch save URLs...'"
},
"menuAutoSave": {
"message": "Avtomatik yaddaşa qeyd",
"description": "Menu entry: 'Auto-save'"
},
"menuAutoSaveDisabled": {
"message": "Deaktiv edildi",
"description": "Menu entry: 'Auto-save' > Disabled'"
},
"menuAutoSaveTab": {
"message": "Bu tabı avtomatik yaddaşa qeyd et",
"description": "Menu entry: 'Auto-save' > Auto-save this tab'"
},
"menuAutoSaveUnpinnedTabs": {
"message": "Sabit olmayan tabları avtomatik yaddaşa qeyd et",
"description": "Menu entry: 'Auto-save' > Auto-save unpinned tabs'"
},
"menuAutoSaveAllTabs": {
"message": "Bütün tabları avtomatik yaddaşa qeyd et",
"description": "Menu entry: 'Auto-save' > Auto-save all tabs'"
},
"buttonDefaultTooltip": {
"message": "SingleFile ilə səhifəni yaddaşa qeyd et",
"description": "Button title: 'Save page with SingleFile'"
},
"buttonBlockedBadge": {
"message": "🚫",
"description": "Button badge when the page is blocked: '🚫'"
},
"buttonBlockedTooltip": {
"message": "Bu səhifə SingleFile ilə yaddaşa qeyd edilə bilmir",
"description": "Button title: 'This page cannot be saved with SingleFile'"
},
"buttonInitializingTooltip": {
"message": "SingleFile Başlatırlır",
"description": "Button title during initialization: 'Initializing SingleFile (x/2)'"
},
"buttonInitializingBadge": {
"message": "•••",
"description": "Badge label during initialization: '•••'"
},
"buttonSaveProgressTooltip": {
"message": "Yaddaşa qeyd etmək progressi: ",
"description": "Button title during save: 'Save progress: xx%'"
},
"buttonUploadProgressTooltip": {
"message": "Yükləmə progressi: ",
"description": "Button title during save: 'Upload progress: xx%'"
},
"buttonOKBadge": {
"message": "OK",
"description": "Badge label: 'OK'"
},
"buttonErrorBadge": {
"message": "Xəta",
"description": "Badge label for unexpected errors"
},
"buttonAutoSaveActiveTooltip": {
"message": "Avtomatik yaddaşa qeyd aktivdir",
"description": "Button title: 'Auto-save active'"
},
"buttonAutoSaveActiveBadge": {
"message": "[A]",
"description": "Badge label when auto-save is active"
},
"optionsTitle": {
"message": "SingleFile seçimləri",
"description": "Options page title"
},
"optionsUserInterfaceSubTitle": {
"message": "İstifadəçi interfeysi",
"description": "Options sub-title: 'User interface'"
},
"optionAddMenuEntry": {
"message": "səhifənin kontekst menyusuna əlavə edin",
"description": "Options page label: 'add entry in the context menu of the webpage'"
},
"optionDisplayShadow": {
"message": "işləmə zamanı səhifəyə gölge əlavə edin",
"description": "Options page label: 'overlay a shadow on the page during processing'"
},
"optionDisplayInfobar": {
"message": "yaddaşa qeyd edilmiş səhifəni baxarkən infobar göstərin",
"description": "Options page label: 'display an infobar when viewing a saved page'"
},
"optionInfobarTemplate": {
"message": "infobar məzmununun şablonu",
"description": "Options page label: 'template of the infobar content'"
},
"optionBlockMixedContent": {
"message": "qarışıq məzmunu blok edin",
"description": "Options page label: 'block mixed content'"
},
"optionSaveOriginalURLs": {
"message": "mənbə URL-lərini yaddaşa qeyd edin",
"description": "Options page label: 'save original URLs of embedded resources'"
},
"optionIncludeInfobar": {
"message": "infobarı yaddaşa qeyd edin",
"description": "Options page label: 'include the infobar in the saved page'"
},
"optionOpenInfobar": {
"message": "infobarı yaddaşa qeyd edilmiş səhifəni baxarkən açın",
"description": "Options page label: 'keep infobar open'"
},
"optionRemoveInfobarSavedDate": {
"message": "yaddaşa qeyd edilmiş tarixi daxil etməyin",
"description": "Options page label: 'do not include the saved date'"
},
"optionConfirmInfobar": {
"message": "infobarın açılmasını təsdiqləyin",
"description": "Options page label: 'open a prompt dialog to edit the infobar content'"
},
"optionAutoClose": {
"message": "səhifə yaddaşa qeyd edildikdən sonra tabı avtomatik olaraq bağlayın",
"description": "Options page label: 'auto-close the tab after the page is saved'"
},
"optionCustomShortcut": {
"message": "klaviatura qısa yolu əmri",
"description": "Options page label: 'keyboard shortcut command'"
},
"optionCustomShortcutDefault": {
"message": "standart qısa yol",
"description": "Options page label: 'default shortcut'"
},
"optionsFileNameSubTitle": {
"message": "Fayl adı",
"description": "Options sub-title: 'File name'"
},
"optionFilenameTemplate": {
"message": "şablon",
"description": "Options page label: 'template'"
},
"optionFilenameMaxLength": {
"message": "maksimum uzunluq",
"description": "Options page label: 'max length'"
},
"optionFilenameMaxLengthBytesUnit": {
"message": "bayt",
"description": "Options page label: 'bytes'"
},
"optionFilenameMaxLengthCharsUnit": {
"message": "simvol",
"description": "Options page label: 'characters'"
},
"optionFilenameReplacementCharacter": {
"message": "əvəz olunan simvol",
"description": "Options page label: 'replacement character'"
},
"optionReplaceEmojisInFilename": {
"message": "emoji-ləri mətnlə əvəz edin",
"description": "Options page label: 'replace emojis with text'"
},
"optionSaveFilenameTemplateData": {
"message": "fayl adı şablon məlumatlarını səhifəyə yaddaşa qeyd edin",
"description": "Options page label: 'save the filename template data into the page'"
},
"optionConfirmFilename": {
"message": "fayl adını təsdiqləmək üçün \"Fərqli qeyd et\" açın",
"description": "Options page label: 'open the \"Save as\" dialog to confirm the file name'"
},
"optionFilenameConflictAction": {
"message": "fayl adı çatışmalarının həllini seçin",
"description": "Options page label: 'filename conflict resolution'"
},
"optionFilenameConflictActionUniquify": {
"message": "fərqli ad yaratmaq",
"description": "Value for 'filename conflict resolution' option: 'create a unique name'"
},
"optionFilenameConflictActionOverwrite": {
"message": "mövcud faylı üzərindən yazmaq",
"description": "Value for 'filename conflict resolution' option: 'overwrite the existing file'"
},
"optionFilenameConflictActionPrompt": {
"message": "fayl adını sorğulamaq",
"description": "Value for 'name conflict resolution' option: 'prompt for a name'"
},
"optionFilenameConflictActionSkip": {
"message": "təkrar faylları atlayın",
"description": "Value for 'filename conflict resolution' option: 'skip duplicate files'"
},
"optionsHTMLContentSubTitle": {
"message": "HTML məzmunu",
"description": "Options sub-title: 'HTML content'"
},
"optionCompressHTML": {
"message": "HTML məzmununu sıxışdırın",
"description": "Options page label: 'compress HTML content'"
},
"optionRemoveFrames": {
"message": "frame-ləri çıxarın",
"description": "Options page label: 'remove frames'"
},
"optionRemoveHiddenElements": {
"message": "gizli elementləri çıxarın",
"description": "Options page label: 'remove hidden elements'"
},
"optionRemovedElementsSelector": {
"message": "müəyyən elementləri çıxarın",
"description": "Options page label: 'remove specific elements'"
},
"optionsFileFormatSubTitle": {
"message": "Fayl formatı",
"description": "Options sub-title: 'File format'"
},
"optionFileFormat": {
"message": "format",
"description": "Options page label: 'format'"
},
"optionFileFormatSelectHTML": {
"message": "HTML",
"description": "Options page label: 'HTML'"
},
"optionFileFormatSelectSelfExtractingUniversal": {
"message": "öz-çıxarılma ZIP (universal)",
"description": "Options page label: 'self-extracting ZIP (universal)'"
},
"optionFileFormatSelectSelfExtracting": {
"message": "öz-çıxarılma ZIP",
"description": "Options page label: 'self-extracting ZIP'"
},
"optionFileFormatSelectZIP": {
"message": "ZIP",
"description": "Options page label: 'ZIP'"
},
"optionPassword": {
"message": "şifrə",
"description": "Options page label: 'password'"
},
"optionCreateRootDirectory": {
"message": "kök qovluğu yarat",
"description": "Options page label: 'create a root directory'"
},
"optionDisableCompression": {
"message": "sıxışdırmanı deaktiv edin",
"description": "Options page label: 'disable compression'"
},
"optionPreventAppendedData": {
"message": "ZIP məzmunundan sonra məlumat əlavə etməyin",
"description": "Options page label: 'do not append data after the ZIP data'"
},
"optionInsertTextBody": {
"message": "mətn məzmununu əlavə edin",
"description": "Options page label: 'make text searchable'"
},
"optionInsertEmbeddedImage": {
"message": "gömülü şəkil",
"description": "Options page label: 'embed image'"
},
"optionInsertEmbeddedScreenshotImage": {
"message": "screenshot",
"description": "Options page label: 'page screenshot'"
},
"optionInsertEmbeddedCustomImage": {
"message": "özəl şəkil",
"description": "Options page label: 'custom image'"
},
"optionsInfobarSubTitle": {
"message": "Infobar",
"description": "Options sub-title: 'Infobar'"
},
"optionsImagesSubTitle": {
"message": "Şəkillər",
"description": "Options sub-title: 'Images'"
},
"optionGroupDuplicateImages": {
"message": "şəkilləri qruplaşdırın",
"description": "Options page label: 'group duplicate images together'"
},
"optionImageReductionFactor": {
"message": "şəkil ölçüsünü azaltma əmsalı",
"description": "Options page label: 'image reduction factor'"
},
"optionLoadDeferredImages": {
"message": "gözləyən şəkilləri yükləyin",
"description": "Options page label: 'save deferred images'"
},
"optionLoadDeferredImagesMaxIdleTime": {
"message": "maksimum boş vaxt (ms)",
"description": "Options page label: 'maximum idle time (ms)'"
},
"optionLoadDeferredImagesKeepZoomLevel": {
"message": "zoom səviyyəsini saxlayın",
"description": "Options page label: 'zoom out the page'"
},
"optionLoadDeferredImagesDispatchScrollEvent": {
"message": "\"scroll\" hadisəsini göndərin",
"description": "Options page label: 'dispatch \"scroll\" event'"
},
"optionLoadDeferredImagesBeforeFrames": {
"message": "frame-lərdən əvvəl yükləyin",
"description": "Options page label: 'load deferred frames'"
},
"optionRemoveAlternativeImages": {
"message": "alternativ ekran çözünürlüklü şəkilləri çıxarın",
"description": "Options page label: 'remove images for alternative screen resolutions'"
},
"optionsFontsSubTitle": {
"message": "Şriftlər",
"description": "Options sub-title: 'Fonts'"
},
"optionRemoveUnusedFonts": {
"message": "istifadə olunmayan şriftləri çıxarın",
"description": "Options page label: 'remove unused fonts'"
},
"optionRemoveAlternativeFonts": {
"message": "alternativ şriftləri çıxarın",
"description": "Options page label: 'remove alternative fonts'"
},
"optionsStylesheetsSubTitle": {
"message": "Stil",
"description": "Options sub-title: 'Stylesheets'"
},
"optionCompressCSS": {
"message": "CSS məzmununu sıxışdırın",
"description": "Options page label: 'compress CSS content'"
},
"optionGroupDuplicateStylesheets": {
"message": "stil-ləri qruplaşdırın",
"description": "Options page label: 'group duplicate stylesheets together'"
},
"optionMoveStylesInHead": {
"message": "baş elementdə stil-ləri köçürün",
"description": "Options page label: 'move in the head element the styles found outside of it'"
},
"optionRemoveUnusedStyles": {
"message": "istifadə olunmayan stil-ləri çıxarın",
"description": "Options page label: 'remove unused styles'"
},
"optionRemoveAlternativeMedias": {
"message": "alternativ cihazlar üçün stil-ləri çıxarın",
"description": "Options page label: 'remove stylesheets for alternative devices to screens'"
},
"optionsNetworkSubTitle": {
"message": "Şəbəkə",
"description": "Options sub-title: 'Network'"
},
"optionsBlockedResources": {
"message": "bloklanmış resurslar",
"description": "Options page label: 'blocked resources'"
},
"optionsAcceptHeaders": {
"message": "\"Accept\" başlığı",
"description": "Options page label: '\"Accept\" header'"
},
"optionResourceScript": {
"message": "skriptlər",
"description": "Options page label: 'scripts'"
},
"optionResourceVideo": {
"message": "videolar",
"description": "Options page label: 'videos'"
},
"optionResourceAudio": {
"message": "audio",
"description": "Options page label: 'audios'"
},
"optionResourceDocument": {
"message": "sənədlər",
"description": "Options page label: 'documents'"
},
"optionResourceFont": {
"message": "şriftlər",
"description": "Options page label: 'fonts'"
},
"optionResourceStylesheet": {
"message": "stil-lər",
"description": "Options page label: 'stylesheets'"
},
"optionResourceImage": {
"message": "şəkillər",
"description": "Options page label: 'images'"
},
"optionsDestinationSubTitle": {
"message": "Göstərici",
"description": "Options sub-title: 'Destination'"
},
"optionsBookmarkSubTitle": {
"message": "Bookmarks",
"description": "Options sub-title: 'Bookmarks'"
},
"optionsAutoSaveSubTitle": {
"message": "Avtomatik yaddaşa qeyd",
"description": "Options sub-title: 'Auto-save'"
},
"optionsAutoSettingsSubTitle": {
"message": "Avtomatik ayarlar qaydaları",
"description": "Options sub-title: 'Auto-settings rules'"
},
"optionsDeleteDisplayedRulesConfirm": {
"message": "Göstərilən bütün qaydaların silinməsini təsdiqləyin",
"description": "Popup text 'Confirm the deletion of all displayed rules'"
},
"optionsDeleteRulesTooltip": {
"message": "Göstərilən bütün qaydaları silin",
"description": "Popup text 'Delete all displayed rules'"
},
"optionsAutoSettingsUrl": {
"message": "URL",
"description": "Options label in the Auto-settings rules: 'URL'"
},
"optionsAutoSettingsUrlPlaceholder": {
"message": "Tam və ya qısmi URL daxil edin (məsələn, example.com)",
"description": "Placeholder in the Auto-settings rules: 'Type a complete or partial URL (e.g. example.com)'"
},
"optionsAutoSettingsProfile": {
"message": "Profil",
"description": "Options label in the Auto-settings rules: 'Profile'"
},
"optionsAutoSettingsAutoSaveProfile": {
"message": "Auto-save profil",
"description": "Options label in the Auto-settings rules: 'Auto-save profile'"
},
"optionsAutoSettingsShowAllProfiles": {
"message": "bütün profiləri göstərin",
"description": "Options label in the Auto-settings rules: 'display all profiles'"
},
"optionsAutoSettingsShowAutoSaveProfile": {
"message": "Auto-save profilini göstərin",
"description": "Options label in the Auto-settings rules: 'display 'Auto-save profile' column'"
},
"optionsUpdateRuleTooltip": {
"message": "Qayda yenilə",
"description": "Popup text 'Update the rule' in the options page"
},
"optionsDeleteRuleTooltip": {
"message": "Qayda sil",
"description": "Popup text 'Delete the rule' in the options page"
},
"optionsAddRuleTooltip": {
"message": "Qayda əlavə et",
"description": "Popup text 'Add the rule' in the options page"
},
"optionsValidateChangesTooltip": {
"message": "Dəyişiklikləri təsdiqlə",
"description": "Popup text 'Validate changes' in the options page"
},
"optionsCancelChangesTooltip": {
"message": "Dəyişiklikləri ləğv et",
"description": "Popup text 'Cancel changes' in the options page"
},
"optionsDeleteRuleConfirm": {
"message": "Seçilmiş qaydanın silinməsini təsdiqləyin",
"description": "Popup text 'Confirm the deletion of the selected rule' in the options page"
},
"optionAutoSaveLoadOrUnload": {
"message": "səhifə yükləndikdən sonra və ya səhifə yüklənmədən qabaq avtomatik yaddaşa qeyd edin",
"description": "auto-save after page load or on page unload"
},
"optionAutoSaveLoad": {
"message": "səhifə yükləndikdən sonra avtomatik yaddaşa qeyd edin",
"description": "Options page label: 'auto-save after page load'"
},
"optionAutoSaveUnload": {
"message": "səhifə yüklənmədən qabaq avtomatik yaddaşa qeyd edin",
"description": "Options page label: 'auto-save on page unload'"
},
"optionAutoSaveDiscard": {
"message": "tabı atdıqda avtomatik yaddaşa qeyd edin",
"description": "Options page label: 'auto-save on tab discard'"
},
"optionAutoSaveRemove": {
"message": "tabı çıxardıqda avtomatik yaddaşa qeyd edin",
"description": "Options page label: 'auto-save on tab removal'"
},
"optionAutoSaveDelay": {
"message": "səhifə yükləndikdən sonra avtomatik yaddaşa qeyd etmə gecikməsi (s)",
"description": "Options page label: 'auto-save waiting delay after page load (s)'"
},
"optionAutoSaveRepeat": {
"message": "avtomatik olaraq yaddaşa qeyd et",
"description": "Options page label: 'auto-save periodically'"
},
"optionAutoSaveRepeatDelay": {
"message": "dövrədən sonra gecikmə (s)",
"description": "Options page label: 'period (s)'"
},
"optionAutoSaveExternalSave": {
"message": "xarici yaddaşa qeyd et",
"description": "Options page label: 'save the page with SingleFile Companion'"
},
"optionsEditorSubTitle": {
"message": "Redaktor",
"description": "Options sub-title: 'Annotation editor'"
},
"optionOpenEditor": {
"message": "səhifəni yaddaşa qeyd etdikdən sonra redaktoru açın",
"description": "Options page label: 'annotate the page before saving'"
},
"optionOpenSavedPage": {
"message": "yaddaşa qeyd edilmiş səhifəni yeni tabda açın",
"description": "Options page label: 'open saved pages in a new tab'"
},
"optionAutoOpenEditor": {
"message": "səhifəni yaddaşa qeyd etdikdən sonra redaktoru avtomatik olaraq açın",
"description": "Options page label: 'open pages saved with SingleFile in the annotation editor'"
},
"optionDefaultEditorMode": {
"message": "standart rejim",
"description": "Options page label: 'default mode'"
},
"optionDefaultEditorModeNormal": {
"message": "normal",
"description": "Options page label: 'default mode > normal'"
},
"optionDefaultEditorModeEdit": {
"message": "səhifəni redaktə edin",
"description": "Options page label: 'default mode > edit the page'"
},
"optionDefaultEditorModeFormat": {
"message": "səhifəni formatlayın",
"description": "Options page label: 'default mode > format the page'"
},
"optionDefaultEditorModeCut": {
"message": "elementləri çıxarın",
"description": "Options page label: 'default mode > remove elements'"
},
"optionDefaultEditorModeCutExternal": {
"message": "xarici elementləri çıxarın",
"description": "Options page label: 'default mode > remove external elements'"
},
"optionApplySystemTheme": {
"message": "sistem mövzusunu tətbiq edin",
"description": "Title of the button 'apply the system theme when formatting a page'"
},
"optionContentWidth": {
"message": "formatlama zamanı səhifənin məzmun genişliyi (em)",
"description": "Options page label: 'content width when formatting a page (em)'"
},
"optionWarnUnsavedPage": {
"message": "yaddaşa qeyd edilməmiş dəyişiklikləri saxlayın",
"description": "Title of the button 'warn if leaving page with unsaved changes'"
},
"optionDisplayInfobarInEditor": {
"message": "redaktorun infobarını göstərin",
"description": "Title of the button 'display the infobar'"
},
"optionsMiscSubTitle": {
"message": "Müxtəlif",
"description": "Options sub-title: 'Misc.'"
},
"optionBackgroundSave": {
"message": "səhifələri arxa planda yaddaşa qeyd edin",
"description": "Options page label: 'save pages in background'"
},
"optionDisplayStats": {
"message": "işləmədən sonra statistikaları konsolda göstərin",
"description": "Options page label: 'display stats in the console after processing'"
},
"optionSetMaxResourceSize": {
"message": "maksimum ölçü təyin edin",
"description": "Options page label: 'set maximum size'"
},
"optionMaxResourceSize": {
"message": "maksimum ölçü (MB)",
"description": "Options page label: 'maximum size (MB)'"
},
"optionSetMaxResourceDelay": {
"message": "maksimum yükləmə vaxtını təyin edin",
"description": "Options page label: 'set maximum download time'"
},
"optionMaxResourceDelay": {
"message": "maksimum yükləmə vaxtı (s)",
"description": "Options page label: 'maximum download time (s)'"
},
"optionPassReferrerOnError": {
"message": "çap \"Referer\" başlığını keçirin",
"description": "Options page label: 'pass \"Referer\" header after a cross-origin request error'"
},
"optionSaveRawPage": {
"message": "raw səhifəni yaddaşa qeyd edin",
"description": "Options page label: 'save raw page'"
},
"optionInsertMetaCSP": {
"message": "mətni təhlükəsizlik siyasəti ilə əlavə edin",
"description": "Options page label: 'set content security policy'"
},
"optionSaveToClipboard": {
"message": "mətni kəsənlərə kopyalayın",
"description": "Options page label: 'copy to clipboard'"
},
"optionSaveToFilesystem": {
"message": "fayla yaddaşa qeyd edin",
"description": "Options page label: 'save to filesystem'"
},
"optionSharePage": {
"message": "səhifəni paylaşın",
"description": "Options page label: 'share page'"
},
"optionAddProof": {
"message": "məzmunun mövcudluğunu əlavə edin",
"description": "Options page label: 'add proof of existence'"
},
"optionsAddProofConfirm": {
"message": "SingleFile-a saxlayacağınız hər səhifənin SHA256 hash-ini Woleet API-yə göndərməyə icazə verdiyinizi təsdiq edin. Bu funksiya haqqında daha çox məlumatı yardım səhifəsində və ya seçimin yanındakı sual işarəsinə klikləməklə tapa bilərsiniz.",
"description": "Popup text displayed wen enabling the option 'add proof of existence'"
},
"optionWoleetKey": {
"message": "giriş tokeni",
"description": "Options page label: 'access token'"
},
"optionSaveToGDrive": {
"message": "Google Drive-a yaddaşa qeyd edin",
"description": "Options page label: 'upload to Google Drive'"
},
"optionSaveToDropbox": {
"message": "Dropbox-a yaddaşa qeyd edin",
"description": "Options page label: 'upload to Dropbox'"
},
"optionSaveToGitHub": {
"message": "GitHub-a yaddaşa qeyd edin",
"description": "Options page label: 'upload to GitHub'"
},
"optionGitHubToken": {
"message": "giriş tokeni",
"description": "Options page label: 'access token'"
},
"optionGitHubUser": {
"message": "istifadəçi adı",
"description": "Options page label: 'user name'"
},
"optionGitHubRepository": {
"message": "repo adı",
"description": "Options page label: 'repository name'"
},
"optionGitHubBranch": {
"message": "branch adı",
"description": "Options page label: 'branch name'"
},
"optionSaveToS3": {
"message": "Amazon S3-ə yaddaşa qeyd edin",
"description": "Options page label: 'upload to Amazon S3'"
},
"optionS3Domain": {
"message": "domain",
"description": "Options page label: 'domain'"
},
"optionS3Region": {
"message": "region",
"description": "Options page label: 'region'"
},
"optionS3Bucket": {
"message": "bucket adı",
"description": "Options page label: 'bucket name'"
},
"optionS3AccessKey": {
"message": "access key",
"description": "Options page label: 'access key'"
},
"optionS3SecretKey": {
"message": "secret key",
"description": "Options page label: 'secret key'"
},
"optionSaveWithWebDAV": {
"message": "WebDAV serverinə yaddaşa qeyd edin",
"description": "Options page label: 'upload to a WebDAV server'"
},
"optionWebDAVURL": {
"message": "URL",
"description": "Options page label: 'URL'"
},
"optionWebDAVUser": {
"message": "istifadəçi adı",
"description": "Options page label: 'user identifier'"
},
"optionWebDAVPassword": {
"message": "şifrə",
"description": "Options page label: 'password'"
},
"optionSaveWithMCP": {
"message": "MCP serverinə yaddaşa qeyd edin",
"description": "Options page label: 'upload to an MCP server'"
},
"optionMCPServerUrl": {
"message": "server URL",
"description": "Options page label: 'server URL'"
},
"optionMCPAuthToken": {
"message": "avtorizasiya tokeni",
"description": "Options page label: 'authentication token'"
},
"optionSaveWithCompanion": {
"message": "SingleFile Companion ilə yaddaşa qeyd edin",
"description": "Options page label: 'save with SingleFile Companion'"
},
"optionSaveCreatedBookmarks": {
"message": "yaddaşa qeyd edilmiş səhifənin yerini yaddaşa qeyd edin",
"description": "Options page label: 'save the page of a newly created bookmark'"
},
"optionReplaceBookmarkURL": {
"message": "yaddaşa qeyd edilmiş səhifənin URL-ni əvəz edin",
"description": "Options page label: 'link the new bookmark to the saved page'"
},
"optionAllowedBookmarkFolders": {
"message": "icazə verilmiş qovluqlar",
"description": "Options page label: 'allowed folders'"
},
"optionIgnoredBookmarkFolders": {
"message": "sorğulanan qovluqlar",
"description": "Options page label: 'ignored folders'"
},
"optionsHelpLink": {
"message": "kömək",
"description": "Options help link"
},
"optionSynchronize": {
"message": "seçimləri sinxronlaşdır",
"description": "Options label: 'synchronize options'"
},
"optionsResetButton": {
"message": "Sıfırla",
"description": "Options button: 'Reset'"
},
"optionsResetTooltip": {
"message": "Seçimləri və ya cari profil sıfırlayın",
"description": "Options 'Reset' button tooltip"
},
"optionsResetConfirm": {
"message": "Bütün seçimləri və ya cari profil sıfırlamaq üçün təsdiqləyin",
"description": "Popup text 'Confirm the reset of all options or the current profile' in the options page"
},
"optionsResetAllButton": {
"message": "Bütün seçimləri sıfırla",
"description": "Options confirm button: 'Reset all options'"
},
"optionsResetCurrentButton": {
"message": "Cari profili sıfırla",
"description": "Options confirm button: 'Reset current profile'"
},
"optionsOKButton": {
"message": "OK",
"description": "Options confirm button: 'OK'"
},
"optionsCancelButton": {
"message": "İmtina",
"description": "Options confirm button: 'Cancel'"
},
"optionsExportButton": {
"message": "İxrac",
"description": "Options button: 'Export'"
},
"optionsImportButton": {
"message": "İçəri al",
"description": "Options button: 'Import'"
},
"logPanelDeferredImages": {
"message": "Gözləyən şəkillər",
"description": "Label 'Deferred images' in the log panel"
},
"logPanelFrameContents": {
"message": "Frame məzmunu",
"description": "Label 'Frame contents' in the log panel"
},
"logPanelEmbeddedImage": {
"message": "Gömülü şəkil",
"description": "Label 'Embedded image' in the log panel"
},
"logPanelStep": {
"message": "Addım",
"description": "Label 'Step' (for 'Step x / 4') in the log panel"
},
"logPanelWidth": {
"message": "122",
"description": "Width of the log panel in pixels, it should be adjusted for the longest label beginning with 'log' (e.g. 'logPanelDeferredImages')"
},
"topPanelError": {
"message": "SingleFile xətası: ",
"description": "Label 'SingleFile error: ' in the top panel when displaying an error message"
},
"topPanelEmbeddedImageButton": {
"message": "Şəkil əlavə et...",
"description": "Top panel button 'Open image...' when embedding an image"
},
"topPanelSharePageButton": {
"message": "Səhifəni paylaş...",
"description": "Top panel button 'Share page...' when sharing a page"
},
"topPanelShareSelectionButton": {
"message": "Seçimi paylaş...",
"description": "Top panel button 'Share selection...' when sharing selected content"
},
"profileDefaultSettings": {
"message": "Standart ayarlar",
"description": "Label 'Default settings' of the default settings in the options page"
},
"profileDisabled": {
"message": "Deaktiv edilmiş",
"description": "Label 'Disabled' of the disabled profile name in the options page"
},
"profileAddButtonTooltip": {
"message": "Yeni profil əlavə edin",
"description": "Tooltip 'Add a new profile' in the options page"
},
"profileRenameButtonTooltip": {
"message": "Profilin adını dəyişdirin",
"description": "Tooltip 'Rename the profile' in the options page"
},
"profileDeleteButtonTooltip": {
"message": "Profil silin",
"description": "Tooltip 'Delete the profile' in the options page"
},
"profileAddPrompt": {
"message": "Yeni profilin adını daxil edin",
"description": "Popup text 'Enter a name for this new profile' in the options page"
},
"profileDeleteConfirm": {
"message": "Seçilmiş profilin silinməsini təsdiqləyin",
"description": "Popup text 'Confirm the deletion of the selected profile' in the options page"
},
"profileRenamePrompt": {
"message": "Seçilmiş profilin yeni adını daxil edin",
"description": "Popup text 'Enter a new name for the selected profile' in the options page"
},
"editorAddYellowNote": {
"message": "Sarı qeyd əlavə edin",
"description": "Title of the button 'Add a yellow note' in the editor"
},
"editorAddPinkNote": {
"message": "Çəhrayı qeyd əlavə edin",
"description": "Title of the button 'Add a pink note' in the editor"
},
"editorAddBlueNote": {
"message": "Mavi qeyd əlavə edin",
"description": "Title of the button 'Add a blue note' in the editor"
},
"editorAddGreenNote": {
"message": "Yaşıl qeyd əlavə edin",
"description": "Title of the button 'Add a green note' in the editor"
},
"editorHighlightYellow": {
"message": "Seçilmiş mətni sarı rəngdə işarələyin",
"description": "Title of the button 'Highlight selected text in yellow' in the editor"
},
"editorHighlightPink": {
"message": "Seçilmiş mətni çəhrayı rəngdə işarələyin",
"description": "Title of the button 'Highlight selected text in pink' in the editor"
},
"editorHighlightBlue": {
"message": "Seçilmiş mətni mavi rəngdə işarələyin",
"description": "Title of the button 'Highlight selected text in blue' in the editor"
},
"editorHighlightGreen": {
"message": "Seçilmiş mətni yaşıl rəngdə işarələyin",
"description": "Title of the button 'Highlight selected text in green' in the editor"
},
"editorToggleNotes": {
"message": "Qeydləri göstərin/gizlədin",
"description": "Title of the button 'Display/hide notes' in the editor"
},
"editorToggleHighlights": {
"message": "İşarələmələri göstərin/gizlədin",
"description": "Title of the button 'Display/hide the highlighted text' in the editor"
},
"editorRemoveHighlight": {
"message": "Seçilmiş işarələməni silin",
"description": "Title of the button 'Remove the selected highlighted text' in the editor"
},
"editorEditPage": {
"message": "Səhifəni redaktə edin",
"description": "Title of the button 'Enable/disable read-only' in the editor"
},
"editorFormatPage": {
"message": "Səhifəni daha yaxşı oxunacaq şəkildə formatlayın",
"description": "Title of the button 'Format the page for better readability' in the editor"
},
"editorCutInnerPage": {
"message": "İç elementlərin çıxarılmasını aktivləşdirin/deaktivləşdirin",
"description": "Title of the button 'Enable/disable removing of internal elements' in the editor"
},
"editorCutOuterPage": {
"message": "Xarici elementlərin çıxarılmasını aktivləşdirin/deaktivləşdirin",
"description": "Title of the button 'Enable/disable removing of external elements' in the editor"
},
"editorUndoCutPage": {
"message": "Son silinmiş elementi geri qaytarın",
"description": "Title of the button 'Restore last removed element' in the editor"
},
"editorUndoAllCutPage": {
"message": "Bütün silinmiş elementləri geri qaytarın",
"description": "Title of the button 'Restore all removed elements' in the editor"
},
"editorRedoCutPage": {
"message": "Son geri qaytarılmış elementi silin",
"description": "Title of the button 'Remove last restored element' in the editor"
},
"editorSavePage": {
"message": "Səhifəni yaddaşa qeyd edin",
"description": "Title of the button 'Save the page' in the editor"
},
"editorPrintPage": {
"message": "Səhifəni çap edin",
"description": "Title of the button 'Print the page' in the editor"
},
"editorImportMht": {
"message": "MHTML faylını daxil et",
"description": "Title of the button 'Import MHTML file' in the editor"
},
"pendingsTitle": {
"message": "Gözləyənlər",
"description": "Title of the pending save page 'Pending saves' in the editor"
},
"pendingsCancelAllButton": {
"message": "Bütününü ləğv edin",
"description": "Pending saves button 'Cancel all'"
},
"pendingsURLTitle": {
"message": "URL",
"description": "Title of the first column in the table of the pending saves 'URL'"
},
"pendingsTitleTitle": {
"message": "başlıq",
"description": "Title of the first column in the table of the pending saves 'Title'"
},
"pendingsStatusTitle": {
"message": "status",
"description": "Title of the second column in the table of the pending saves 'status'"
},
"pendingsPendingStatus": {
"message": "gözləyən",
"description": "Value of 'status' for pending saves"
},
"pendingsProcessingStatus": {
"message": "işlənir",
"description": "Value of 'status' for current saves"
},
"pendingsCancellingStatus": {
"message": "ləğv edilir",
"description": "Value of 'status' for cancelled saves"
},
"pendingsNoPendings": {
"message": "Gözləyən yaddaşlar yoxdur",
"description": "Label displayed when there are no pending saves"
},
"pendingsAddUrlsButton": {
"message": "URL əlavə edin",
"description": "button 'Add URLs'"
},
"pendingsAddUrls": {
"message": "Yeni satırlar qeydləri ilə ayrılmış bir URL siyahısı girin",
"description": "Label of the add URLs input"
},
"pendingsAddUrlsOKButton": {
"message": "OK",
"description": "Add URLs popup confirm button: 'OK'"
},
"pendingsAddUrlsCancelButton": {
"message": "İmtina",
"description": "Add URLs popup cancel button: 'Cancel'"
},
"batchSaveUrlsTitle": {
"message": "Toplu saxlama URL-ləri",
"description": "Title of the 'batch save URLs' page"
},
"batchSaveUrlsNoURLs": {
"message": "URL yoxdur",
"description": "Label displayed when there are no URLs"
},
"batchSaveUrlsAddUrlButton": {
"message": "URL əlavə edin",
"description": "label of the button 'Add URL'"
},
"batchSaveUrlsAddUrlsButton": {
"message": "URL-ləri əlavə edin...",
"description": "label of the button 'Add URLs...'"
},
"batchSaveUrlsRemoveAllButton": {
"message": "Bütününü silin",
"description": "label of the button 'Remove all'"
},
"batchSaveUrlsSavePagesButton": {
"message": "Səhifələri yaddaşa qeyd edin",
"description": "label of the button 'Save pages'"
},
"batchSaveUrlsURLTitle": {
"message": "URL",
"description": "Title of the column in the table of the URLs"
},
"optionSaveToRestFormApi": {
"message": "REST Form API-yə yaddaşa qeyd edin",
"description": "Options page label: 'upload to a REST Form API'"
},
"optionRestFormApiUrl": {
"message": "URL",
"description": "Options page label: 'URL'"
},
"optionRestFormApiToken": {
"message": "giriş tokeni",
"description": "Options page label: 'authorization token'"
},
"optionRestFormApiFileFieldName": {
"message": "fayl sahə adı",
"description": "Options page label: 'archive data field name'"
},
"optionRestFormApiUrlFieldName": {
"message": "URL sahə adı",
"description": "Options page label: 'archive URL field name'"
},
"optionsEditorTitle": {
"message": "Redaktor seçimləri",
"description": "Options title: 'Options editor'"
},
"optionsEditorSaveButton": {
"message": "Yaddaşa qeyd edin",
"description": "Options editor button: 'Save'"
},
"optionsEditorConfigSaved": {
"message": "Konfiqurasiya yaddaşa qeyd edildi",
"description": "Options editor message: 'Configuration saved'"
},
"optionsEditorInvalidJSON": {
"message": "Yanlış JSON",
"description": "Options editor error message: 'Invalid JSON'"
}
}
================================================
FILE: _locales/de/messages.json
================================================
{
"extensionDescription": {
"message": "Speichern einer kompletten Webseite in eine einzige HTML-Datei",
"description": "Description of the extension."
},
"commandSaveSelectedTabs": {
"message": "Speichern der ausgewählten Tabs oder ihrer ausgewählten Inhalte",
"description": "Command (Ctrl+Shift+Y): 'Save the selected tabs or their selected contents'"
},
"commandSaveAllTabs": {
"message": "Speichern aller Tabs",
"description": "Command (Ctrl+Shift+U): 'Save all tabs'"
},
"commandCustomShortcut": {
"message": "Benutzerdefinierte Tastenkombination",
"description": "Command label: 'Custom shortcut'"
},
"commandCustomShortcut0": {
"message": "Benutzerdefinierte Tastenkombination #1",
"description": "Command label: 'Custom shortcut #1'"
},
"commandCustomShortcut1": {
"message": "Benutzerdefinierte Tastenkombination #2",
"description": "Command label: 'Custom shortcut #2'"
},
"commandCustomShortcut2": {
"message": "Benutzerdefinierte Tastenkombination #3",
"description": "Command label: 'Custom shortcut #3'"
},
"commandCustomShortcut3": {
"message": "Benutzerdefinierte Tastenkombination #4",
"description": "Command label: 'Custom shortcut #4'"
},
"commandCustomShortcut4": {
"message": "Benutzerdefinierte Tastenkombination #5",
"description": "Command label: 'Custom shortcut #5'"
},
"commandCustomShortcut5": {
"message": "Benutzerdefinierte Tastenkombination #6",
"description": "Command label: 'Custom shortcut #6'"
},
"commandCustomShortcut6": {
"message": "Benutzerdefinierte Tastenkombination #7",
"description": "Command label: 'Custom shortcut #7'"
},
"commandCustomShortcut7": {
"message": "Benutzerdefinierte Tastenkombination #8",
"description": "Command label: 'Custom shortcut #8'"
},
"commandCustomShortcut8": {
"message": "Benutzerdefinierte Tastenkombination #9",
"description": "Command label: 'Custom shortcut #9'"
},
"commandCustomShortcut9": {
"message": "Benutzerdefinierte Tastenkombination #10",
"description": "Command label: 'Custom shortcut #10'"
},
"menuSavePage": {
"message": "Speichern der Webseite mit SingleFile",
"description": "Menu entry: 'Save page with SingleFile'"
},
"menuSaveSelectedLinks": {
"message": "Speichern ausgewählter Links",
"description": "Menu entry: 'Save selected links'"
},
"menuEditPage": {
"message": "Annotieren der Webseite...",
"description": "Menu entry: 'Annotate the page...'"
},
"menuEditAndSavePage": {
"message": "Annotieren und Speichern der Webseite...",
"description": "Menu entry: 'Annotate and save the page...'"
},
"menuSaveWithProfile": {
"message": "Speichern der Webseite mit Profil",
"description": "Menu entry: 'Save with profile'"
},
"menuViewPendingSaves": {
"message": "Anzeigen der aktuellen Speichern...",
"description": "Menu entry: 'View pending saves...'"
},
"menuSelectProfile": {
"message": "Wählen Sie das Standardprofil aus",
"description": "Menu entry: 'Select the default profile'"
},
"menuUpdateRule": {
"message": "Profil der aktuellen Regel auswählen",
"description": "Menu entry: 'Select the profile of the current rule'"
},
"menuCreateDomainRule": {
"message": "Profil der aktuellen Domain auswählen",
"description": "Menu entry: 'Select the profile of the current domain'"
},
"menuSaveSelection": {
"message": "Auswahl speichern",
"description": "Menu entry: 'Save selection'"
},
"menuSaveFrame": {
"message": "Rahmen speichern",
"description": "Menu entry: 'Save frame'"
},
"menuSaveTabs": {
"message": "Tab speichern",
"description": "Menu entry (SingleFile button only): 'Save tabs'"
},
"menuSaveSelectedTabs": {
"message": "Speichern der ausgewählten Tabs",
"description": "Menu entry: 'Save selected tabs'"
},
"menuSaveUnpinnedTabs": {
"message": "Speichern der nicht angehefteten Tabs",
"description": "Menu entry: 'Save unpinned tabs'"
},
"menuSaveAllTabs": {
"message": "Speichern aller Tabs",
"description": "Menu entry: 'Save all tabs'"
},
"menuBatchSaveUrls": {
"message": "Stapelweise URLs speichern...",
"description": "Menu entry: 'Batch save URLs...'"
},
"menuAutoSave": {
"message": "Automatische Speicherung",
"description": "Menu entry: 'Auto-save'"
},
"menuAutoSaveDisabled": {
"message": "Deaktiviert",
"description": "Menu entry: 'Auto-save' > Disabled'"
},
"menuAutoSaveTab": {
"message": "Automatische Speicherung dieses Tabs",
"description": "Menu entry: 'Auto-save' > Auto-save this tab'"
},
"menuAutoSaveUnpinnedTabs": {
"message": "Automatische Speicherung der nicht angehefteten Tabs",
"description": "Menu entry: 'Auto-save' > Auto-save unpinned tabs'"
},
"menuAutoSaveAllTabs": {
"message": "Automatische Speicherung aller Tabs",
"description": "Menu entry: 'Auto-save' > Auto-save all tabs'"
},
"buttonDefaultTooltip": {
"message": "Webseite mit SingleFile abspeichern",
"description": "Button title: 'Save page with SingleFile'"
},
"buttonBlockedBadge": {
"message": "🚫",
"description": "Button badge when the page is blocked: '🚫'"
},
"buttonBlockedTooltip": {
"message": "SingleFile kann diese Webseite nicht speichern",
"description": "Button title: 'This page cannot be saved with SingleFile'"
},
"buttonInitializingTooltip": {
"message": "Initialisierung von SingleFile",
"description": "Button title during initialization: 'Initializing SingleFile (x/2)'"
},
"buttonInitializingBadge": {
"message": "•••",
"description": "Badge label during initialization: '•••'"
},
"buttonSaveProgressTooltip": {
"message": "Speicherung aktiviert: ",
"description": "Button title during save: 'Save progress: xx%'"
},
"buttonUploadProgressTooltip": {
"message": "Upload aktiviert: ",
"description": "Button title during save: 'Upload progress: xx%'"
},
"buttonOKBadge": {
"message": "OK",
"description": "Badge label: 'OK'"
},
"buttonErrorBadge": {
"message": "ERR",
"description": "Badge label for unexpected errors"
},
"buttonAutoSaveActiveTooltip": {
"message": "Automatische Speicherung ist aktiv",
"description": "Button title: 'Auto-save active'"
},
"buttonAutoSaveActiveBadge": {
"message": "[A]",
"description": "Badge label when auto-save is active"
},
"optionsTitle": {
"message": "Auswahlmenu",
"description": "Options page title"
},
"optionsUserInterfaceSubTitle": {
"message": "Benutzerschnittstelle",
"description": "Options sub-title: 'User interface'"
},
"optionAddMenuEntry": {
"message": "Eintrag im Kontextmenü der Webseite hinzufügen",
"description": "Options page label: 'add entry in the context menu of the webpage'"
},
"optionDisplayShadow": {
"message": "Während der Speicherung die Webseite grau unterlegen",
"description": "Options page label: 'overlay a shadow on the page during processing'"
},
"optionDisplayInfobar": {
"message": "Infoknopf beim Betrachten einer gespeicherten Seite anzeigen",
"description": "Options page label: 'display an infobar when viewing a saved page'"
},
"optionInfobarTemplate": {
"message": "Muster für Inhalt des Infoknopfs",
"description": "Options page label: 'template of the infobar content'"
},
"optionBlockMixedContent": {
"message": "Blockieren gemischter Inhalte",
"description": "Options page label: 'block mixed content'"
},
"optionSaveOriginalURLs": {
"message": "Speichern der Original-URLs von eingebetteten Ressourcen",
"description": "Options page label: 'save original URLs of embedded resources'"
},
"optionIncludeInfobar": {
"message": "Einfügen Inhalt des Infoknopfs in die gespeicherte Seite",
"description": "Options page label: 'include the infobar in the saved page'"
},
"optionOpenInfobar": {
"message": "Infobar offen halten",
"description": "Options page label: 'keep infobar open'"
},
"optionRemoveInfobarSavedDate": {
"message": "Enthalten nicht das gespeicherte Datum",
"description": "Options page label: 'do not include the saved date'"
},
"optionConfirmInfobar": {
"message": "Inhalt des Infoknopfs im Dialogfenster eingeben",
"description": "Options page label: 'open a prompt dialog to edit the infobar content'"
},
"optionAutoClose": {
"message": "Automatisches Schließen des Tabs nach dem Speichern der Seite",
"description": "Options page label: 'auto-close the tab after the page is saved'"
},
"optionCustomShortcut": {
"message": "Tastenkombination Befehl",
"description": "Options page label: 'keyboard shortcut command'"
},
"optionCustomShortcutDefault": {
"message": "Standard-Tastenkombination",
"description": "Options page label: 'default shortcut'"
},
"optionsFileNameSubTitle": {
"message": "Dateiname",
"description": "Options sub-title: 'File name'"
},
"optionFilenameTemplate": {
"message": "Vorlage",
"description": "Options page label: 'template'"
},
"optionFilenameMaxLength": {
"message": "Maximale Länge",
"description": "Options page label: 'max length'"
},
"optionFilenameMaxLengthBytesUnit": {
"message": "Bytes",
"description": "Options page label: 'bytes'"
},
"optionFilenameMaxLengthCharsUnit": {
"message": "Zeichen",
"description": "Options page label: 'characters'"
},
"optionFilenameReplacementCharacter": {
"message": "Ersetzungszeichen",
"description": "Options page label: 'replacement character'"
},
"optionReplaceEmojisInFilename": {
"message": "Emojis durch Text ersetzen",
"description": "Options page label: 'replace emojis with text'"
},
"optionSaveFilenameTemplateData": {
"message": "Speichern der Daten der Dateinamenvorlage auf der Seite",
"description": "Options page label: 'save the filename template data into the page'"
},
"optionConfirmFilename": {
"message": "Dialogfenster \"Sichern als\" zur Bestätigung des Dateinamens öffnen",
"description": "Options page label: 'open the \"Save as\" dialog to confirm the file name'"
},
"optionFilenameConflictAction": {
"message": "Vorgehensweise bei Konflikt mit dem Dateinamen",
"description": "Options page label: 'filename conflict resolution'"
},
"optionFilenameConflictActionUniquify": {
"message": "Eindeutigen Dateinamen erzeugen",
"description": "Value for 'filename conflict resolution' option: 'create a unique name'"
},
"optionFilenameConflictActionOverwrite": {
"message": "Bestehende Datei überschreiben",
"description": "Value for 'filename conflict resolution' option: 'overwrite the existing file'"
},
"optionFilenameConflictActionPrompt": {
"message": "Dialogfenster zur Eingabe eines Dateinamens",
"description": "Value for 'name conflict resolution' option: 'prompt for a name'"
},
"optionFilenameConflictActionSkip": {
"message": "Überspringen doppelter Dateien",
"description": "Value for 'filename conflict resolution' option: 'skip duplicate files'"
},
"optionsHTMLContentSubTitle": {
"message": "HTML-Inhalt",
"description": "Options sub-title: 'HTML content'"
},
"optionCompressHTML": {
"message": "HTML-Inhalt komprimieren",
"description": "Options page label: 'compress HTML content'"
},
"optionRemoveFrames": {
"message": "Rahmen entfernen",
"description": "Options page label: 'remove frames'"
},
"optionRemoveHiddenElements": {
"message": "Verborgene Elemente entfernen",
"description": "Options page label: 'remove hidden elements'"
},
"optionRemovedElementsSelector": {
"message": "spezifische Elemente entfernen",
"description": "Options page label: 'remove specific elements'"
},
"optionsFileFormatSubTitle": {
"message": "Dateiformat",
"description": "Options sub-title: 'File format'"
},
"optionFileFormat": {
"message": "format",
"description": "Options page label: 'format'"
},
"optionFileFormatSelectHTML": {
"message": "HTML",
"description": "Options page label: 'HTML'"
},
"optionFileFormatSelectSelfExtractingUniversal": {
"message": "selbstextrahierendes ZIP (universal)",
"description": "Options page label: 'self-extracting ZIP (universal)'"
},
"optionFileFormatSelectSelfExtracting": {
"message": "selbstextrahierendes ZIP",
"description": "Options page label: 'self-extracting ZIP'"
},
"optionFileFormatSelectZIP": {
"message": "ZIP",
"description": "Options page label: 'ZIP'"
},
"optionPassword": {
"message": "Passwort",
"description": "Options page label: 'password'"
},
"optionCreateRootDirectory": {
"message": "Stammverzeichnis erstellen",
"description": "Options page label: 'create a root directory'"
},
"optionDisableCompression": {
"message": "Komprimierung deaktivieren",
"description": "Options page label: 'disable compression'"
},
"optionPreventAppendedData": {
"message": "Keine Daten nach den ZIP-Daten anhängen",
"description": "Options page label: 'do not append data after the ZIP data'"
},
"optionInsertTextBody": {
"message": "Text durchsuchbar machen",
"description": "Options page label: 'make text searchable'"
},
"optionInsertEmbeddedImage": {
"message": "Eingebettetes Bild",
"description": "Options page label: 'embed image'"
},
"optionInsertEmbeddedScreenshotImage": {
"message": "Bildschirmfoto",
"description": "Options page label: 'page screenshot'"
},
"optionInsertEmbeddedCustomImage": {
"message": "Benutzerdefiniertes Bild",
"description": "Options page label: 'custom image'"
},
"optionsInfobarSubTitle": {
"message": "Infoknopf",
"description": "Options sub-title: 'Infobar'"
},
"optionsImagesSubTitle": {
"message": "Bilder",
"description": "Options sub-title: 'Images'"
},
"optionGroupDuplicateImages": {
"message": "Doppelte Bilder zusammenfassen",
"description": "Options page label: 'group duplicate images together'"
},
"optionImageReductionFactor": {
"message": "Größenreduktionsfaktor",
"description": "Options page label: 'image reduction factor'"
},
"optionLoadDeferredImages": {
"message": "Speicherung zurückgestellter Bilder",
"description": "Options page label: 'save deferred images'"
},
"optionLoadDeferredImagesMaxIdleTime": {
"message": "maximale Inaktivitätszeit (ms)",
"description": "Options page label: 'maximum idle time (ms)'"
},
"optionLoadDeferredImagesKeepZoomLevel": {
"message": "Seite verkleinern",
"description": "Options page label: 'zoom out the page'"
},
"optionLoadDeferredImagesDispatchScrollEvent": {
"message": "Ereignis \"scroll\" versenden",
"description": "Options page label: 'dispatch \"scroll\" event'"
},
"optionLoadDeferredImagesBeforeFrames": {
"message": "Speicherung zurückgestellter Rahmen",
"description": "Options page label: 'load deferred frames'"
},
"optionRemoveAlternativeImages": {
"message": "Bilder für alternative Bildschirmauflösungen entfernen",
"description": "Options page label: 'remove images for alternative screen resolutions'"
},
"optionsFontsSubTitle": {
"message": "Schriftarten",
"description": "Options sub-title: 'Fonts'"
},
"optionRemoveUnusedFonts": {
"message": "Unbenutze Schriftarten entfernen",
"description": "Options page label: 'remove unused fonts'"
},
"optionRemoveAlternativeFonts": {
"message": "Alternative Schriftarten entfernen",
"description": "Options page label: 'remove alternative fonts'"
},
"optionsStylesheetsSubTitle": {
"message": "Formatvorlagen",
"description": "Options sub-title: 'Stylesheets'"
},
"optionCompressCSS": {
"message": "CSS-Inhalte komprimieren",
"description": "Options page label: 'compress CSS content'"
},
"optionGroupDuplicateStylesheets": {
"message": "Doppelte Formatvorlagen zusammenfassen",
"description": "Options page label: 'group duplicate stylesheets together'"
},
"optionMoveStylesInHead": {
"message": "Die Stile, die sich außerhalb des Head-Elements befinden, in dieses verschieben",
"description": "Options page label: 'move in the head element the styles found outside of it'"
},
"optionRemoveUnusedStyles": {
"message": "Nicht verwendete Stile entfernen",
"description": "Options page label: 'remove unused styles'"
},
"optionRemoveAlternativeMedias": {
"message": "Formatvorlagen für alternative Bildschirme löschen",
"description": "Options page label: 'remove stylesheets for alternative devices to screens'"
},
"optionsNetworkSubTitle": {
"message": "Netzwerk",
"description": "Options sub-title: 'Network'"
},
"optionsBlockedResources": {
"message": "blockierte Ressourcen",
"description": "Options page label: 'blocked resources'"
},
"optionsAcceptHeaders": {
"message": "Kopfzeile \"Accept\"",
"description": "Options page label: '\"Accept\" header'"
},
"optionResourceScript": {
"message": "Scripts",
"description": "Options page label: 'scripts'"
},
"optionResourceVideo": {
"message": "Videos",
"description": "Options page label: 'videos'"
},
"optionResourceAudio": {
"message": "Audios",
"description": "Options page label: 'audios'"
},
"optionResourceDocument": {
"message": "Dokumente",
"description": "Options page label: 'documents'"
},
"optionResourceFont": {
"message": "Schriftarten",
"description": "Options page label: 'fonts'"
},
"optionResourceStylesheet": {
"message": "Stylesheets",
"description": "Options page label: 'stylesheets'"
},
"optionResourceImage": {
"message": "Bilder",
"description": "Options page label: 'images'"
},
"optionsDestinationSubTitle": {
"message": "Datei-Ziel",
"description": "Options sub-title: 'Destination'"
},
"optionsBookmarkSubTitle": {
"message": "Bookmarks",
"description": "Options sub-title: 'Bookmarks'"
},
"optionsAutoSaveSubTitle": {
"message": "Automatische Speicherung",
"description": "Options sub-title: 'Auto-save'"
},
"optionsAutoSettingsSubTitle": {
"message": "Automatische Einstellung festlegen",
"description": "Options sub-title: 'Auto-settings rules'"
},
"optionsDeleteDisplayedRulesConfirm": {
"message": "Löschbestätigung für alle aufgelisteten Regeln",
"description": "Popup text 'Confirm the deletion of all displayed rules'"
},
"optionsDeleteRulesTooltip": {
"message": "Löschen aller aufgelisteten Regeln",
"description": "Popup text 'Delete all displayed rules'"
},
"optionsAutoSettingsUrl": {
"message": "URL",
"description": "Options label in the Auto-settings rules: 'URL'"
},
"optionsAutoSettingsUrlPlaceholder": {
"message": "URL komplett oder teilweise eingeben (z.B. example.com)",
"description": "Placeholder in the Auto-settings rules: 'Type a complete or partial URL (e.g. example.com)'"
},
"optionsAutoSettingsProfile": {
"message": "Profil",
"description": "Options label in the Auto-settings rules: 'Profile'"
},
"optionsAutoSettingsAutoSaveProfile": {
"message": "Profil für automatische Speicherung",
"description": "Options label in the Auto-settings rules: 'Auto-save profile'"
},
"optionsAutoSettingsShowAllProfiles": {
"message": "Alle Profiles auflisten",
"description": "Options label in the Auto-settings rules: 'display all profiles'"
},
"optionsAutoSettingsShowAutoSaveProfile": {
"message": "'Profil für automatische Speicherung' anzeigen Spalte",
"description": "Options label in the Auto-settings rules: 'display 'Auto-save profile' column'"
},
"optionsUpdateRuleTooltip": {
"message": "Regel ändern",
"description": "Popup text 'Update the rule' in the options page"
},
"optionsDeleteRuleTooltip": {
"message": "Regel löschen",
"description": "Popup text 'Delete the rule' in the options page"
},
"optionsAddRuleTooltip": {
"message": "Regel hinzufügen",
"description": "Popup text 'Add the rule' in the options page"
},
"optionsValidateChangesTooltip": {
"message": "Änderungen bestätigen",
"description": "Popup text 'Validate changes' in the options page"
},
"optionsCancelChangesTooltip": {
"message": "Änderungen verwerfen",
"description": "Popup text 'Cancel changes' in the options page"
},
"optionsDeleteRuleConfirm": {
"message": "Löschung der auswählten Regel bestätigen",
"description": "Popup text 'Confirm the deletion of the selected rule' in the options page"
},
"optionAutoSaveLoadOrUnload": {
"message": "Automatische Speicherung nach dem Laden oder Schließen der Seite",
"description": "auto-save after page load or on page unload"
},
"optionAutoSaveLoad": {
"message": "Automatische Speicherung nach dem Laden der Seite",
"description": "Options page label: 'auto-save after page load'"
},
"optionAutoSaveUnload": {
"message": "Automatische Speicherung beim Schließen der Seite",
"description": "Options page label: 'auto-save on page unload'"
},
"optionAutoSaveDiscard": {
"message": "Automatische Speicherung beim Schließen des Tabs",
"description": "Options page label: 'auto-save on tab discard'"
},
"optionAutoSaveRemove": {
"message": "Automatisches Speichern beim Entfernen des Tabs",
"description": "Options page label: 'auto-save on tab removal'"
},
"optionAutoSaveDelay": {
"message": "Automatische Speicherung nach Seitenaufbau verzögern (s)",
"description": "Options page label: 'auto-save waiting delay after page load (s)'"
},
"optionAutoSaveRepeat": {
"message": "Automatische Speicherung in regelmäßigen Abständen wiederholen",
"description": "Options page label: 'auto-save periodically'"
},
"optionAutoSaveRepeatDelay": {
"message": "Zeitraum (s.)",
"description": "Options page label: 'period (s)'"
},
"optionAutoSaveExternalSave": {
"message": "Speichern der Seite mit SingleFile Companion",
"description": "Options page label: 'save the page with SingleFile Companion'"
},
"optionsEditorSubTitle": {
"message": "Annotation-Editor",
"description": "Options sub-title: 'Annotation editor'"
},
"optionOpenEditor": {
"message": "Seite vor dem Speichern annotieren",
"description": "Options page label: 'annotate the page before saving'"
},
"optionOpenSavedPage": {
"message": "Gespeicherte Seiten in einem neuen Tab öffnen",
"description": "Options page label: 'open saved pages in a new tab'"
},
"optionAutoOpenEditor": {
"message": "Seiten, die mit SingleFile gespeichert wurden, im Annotation-Editor öffnen",
"description": "Options page label: 'open pages saved with SingleFile in the annotation editor'"
},
"optionDefaultEditorMode": {
"message": "Default-Modus",
"description": "Options page label: 'default mode'"
},
"optionDefaultEditorModeNormal": {
"message": "Normal",
"description": "Options page label: 'default mode > normal'"
},
"optionDefaultEditorModeEdit": {
"message": "Editieren der Seite",
"description": "Options page label: 'default mode > edit the page'"
},
"optionDefaultEditorModeFormat": {
"message": "Formatieren der Seite",
"description": "Options page label: 'default mode > format the page'"
},
"optionDefaultEditorModeCut": {
"message": "Entfernen von Elementen",
"description": "Options page label: 'default mode > remove elements'"
},
"optionDefaultEditorModeCutExternal": {
"message": "Entfernen externer Elemente",
"description": "Options page label: 'default mode > remove external elements'"
},
"optionApplySystemTheme": {
"message": "System-Design beim Formatieren einer Seite anwenden",
"description": "Title of the button 'apply the system theme when formatting a page'"
},
"optionContentWidth": {
"message": "Inhaltbreite (em) beim Formatieren einer Seite",
"description": "Options page label: 'content width when formatting a page (em)'"
},
"optionWarnUnsavedPage": {
"message": "Warnen beim Verlassen der Seite mit ungespeicherten Änderungen",
"description": "Title of the button 'warn if leaving page with unsaved changes'"
},
"optionDisplayInfobarInEditor": {
"message": "Anzeige der Infoknopf",
"description": "Title of the button 'display the infobar'"
},
"optionsMiscSubTitle": {
"message": "Sonstiges",
"description": "Options sub-title: 'Misc.'"
},
"optionBackgroundSave": {
"message": "Speicherung der Seiten im Hintergrund",
"description": "Options page label: 'save pages in background'"
},
"optionDisplayStats": {
"message": "Statistik nach Verarbeitung in der Konsole anzeigen",
"description": "Options page label: 'display stats in the console after processing'"
},
"optionSetMaxResourceSize": {
"message": "maximale Größe festlegen",
"description": "Options page label: 'set maximum size'"
},
"optionMaxResourceSize": {
"message": "Maximale Größe (MB)",
"description": "Options page label: 'maximum size (MB)'"
},
"optionSetMaxResourceDelay": {
"message": "maximale Zeit für den Download festlegen",
"description": "Options page label: 'set maximum download time'"
},
"optionMaxResourceDelay": {
"message": "maximale Downloadzeit (s)",
"description": "Options page label: 'maximum download time (s)'"
},
"optionPassReferrerOnError": {
"message": "Den \"Referer\"-Header nach einem Fehler bei einer Cross-Origin-Anfrage übergeben",
"description": "Options page label: 'pass \"Referer\" header after a cross-origin request error'"
},
"optionSaveRawPage": {
"message": "Originalseite sichern",
"description": "Options page label: 'save raw page'"
},
"optionInsertMetaCSP": {
"message": "Content Security Policy einfügen",
"description": "Options page label: 'set content security policy'"
},
"optionSaveToClipboard": {
"message": "Kopieren in die Zwischenablage",
"description": "Options page label: 'copy to clipboard'"
},
"optionSaveToFilesystem": {
"message": "Speichern im Dateisystem",
"description": "Options page label: 'save to filesystem'"
},
"optionSharePage": {
"message": "Seite teilen",
"description": "Options page label: 'share page'"
},
"optionAddProof": {
"message": "Existenzberechtigung hinzufügen",
"description": "Options page label: 'add proof of existence'"
},
"optionsAddProofConfirm": {
"message": "Confirm you allow SingleFile to send to the Woleet API a SHA256 hash of each page you are going to save. You can find more information about this feature in the help page or by clicking on the question mark next to the option.",
"description": "Popup text displayed wen enabling the option 'add proof of existence'"
},
"optionWoleetKey": {
"message": "Zugangstoken",
"description": "Options page label: 'access token'"
},
"optionSaveToGDrive": {
"message": "Hochladen auf Google Drive",
"description": "Options page label: 'upload to Google Drive'"
},
"optionSaveToDropbox": {
"message": "Hochladen auf Dropbox",
"description": "Options page label: 'upload to Dropbox'"
},
"optionSaveToGitHub": {
"message": "Hochladen auf GitHub",
"description": "Options page label: 'upload to GitHub'"
},
"optionGitHubToken": {
"message": "Zugangstoken",
"description": "Options page label: 'access token'"
},
"optionGitHubUser": {
"message": "Nutzername",
"description": "Options page label: 'user name'"
},
"optionGitHubRepository": {
"message": "Repository-Name",
"description": "Options page label: 'repository name'"
},
"optionGitHubBranch": {
"message": "Zweigname",
"description": "Options page label: 'branch name'"
},
"optionSaveToS3": {
"message": "Hochladen auf Amazon S3",
"description": "Options page label: 'upload to Amazon S3'"
},
"optionS3Domain": {
"message": "Domain",
"description": "Options page label: 'domain'"
},
"optionS3Region": {
"message": "Region",
"description": "Options page label: 'region'"
},
"optionS3Bucket": {
"message": "Bucket-Name",
"description": "Options page label: 'bucket name'"
},
"optionS3AccessKey": {
"message": "Zugangsschlüssel",
"description": "Options page label: 'access key'"
},
"optionS3SecretKey": {
"message": "Geheimschlüssel",
"description": "Options page label: 'secret key'"
},
"optionSaveWithWebDAV": {
"message": "Hochladen auf einen WebDAV-Server",
"description": "Options page label: 'upload to a WebDAV server'"
},
"optionWebDAVURL": {
"message": "URL",
"description": "Options page label: 'URL'"
},
"optionWebDAVUser": {
"message": "Benutzerkennwort",
"description": "Options page label: 'user identifier'"
},
"optionWebDAVPassword": {
"message": "Passwort",
"description": "Options page label: 'password'"
},
"optionSaveWithMCP": {
"message": "Hochladen auf einen MCP-Server",
"description": "Options page label: 'upload to an MCP server'"
},
"optionMCPServerUrl": {
"message": "Server-URL",
"description": "Options page label: 'server URL'"
},
"optionMCPAuthToken": {
"message": "Authentifizierungstoken",
"description": "Options page label: 'authentication token'"
},
"optionSaveWithCompanion": {
"message": "Speichern mit SingleFile Companion",
"description": "Options page label: 'save with SingleFile Companion'"
},
"optionSaveCreatedBookmarks": {
"message": "Speichern der Seite eines neu angelegten Lesezeichens",
"description": "Options page label: 'save the page of a newly created bookmark'"
},
"optionReplaceBookmarkURL": {
"message": "Verlinken Das neue Bookmark mit der gespeicherten Seite",
"description": "Options page label: 'link the new bookmark to the saved page'"
},
"optionAllowedBookmarkFolders": {
"message": "Erlaubte Ordner",
"description": "Options page label: 'allowed folders'"
},
"optionIgnoredBookmarkFolders": {
"message": "Ignorierte Ordner",
"description": "Options page label: 'ignored folders'"
},
"optionsHelpLink": {
"message": "Hilfe",
"description": "Options help link"
},
"optionSynchronize": {
"message": "Optionen synchronisieren",
"description": "Options label: 'synchronize options'"
},
"optionsResetButton": {
"message": "Zurücksetzen",
"description": "Options button: 'Reset'"
},
"optionsResetTooltip": {
"message": "Zurücksetzung aller Optionen auf Standardeinstellung",
"description": "Options 'Reset' button tooltip"
},
"optionsResetConfirm": {
"message": "Zurücksetzung aller Optionen des aktuellen Profils bestätigen",
"description": "Popup text 'Confirm the reset of all options or the current profile' in the options page"
},
"optionsResetAllButton": {
"message": "Alle Optionen zurücksetzen",
"description": "Options confirm button: 'Reset all options'"
},
"optionsResetCurrentButton": {
"message": "Das aktuelle Profil zurücksetzen",
"description": "Options confirm button: 'Reset current profile'"
},
"optionsOKButton": {
"message": "OK",
"description": "Options confirm button: 'OK'"
},
"optionsCancelButton": {
"message": "Abbrechen",
"description": "Options confirm button: 'Cancel'"
},
"optionsExportButton": {
"message": "Exportieren",
"description": "Options button: 'Export'"
},
"optionsImportButton": {
"message": "Importieren",
"description": "Options button: 'Import'"
},
"logPanelDeferredImages": {
"message": "Zurückgestellte Bilder",
"description": "Label 'Deferred images' in the log panel"
},
"logPanelFrameContents": {
"message": "Rahmeninhalte",
"description": "Label 'Frame contents' in the log panel"
},
"logPanelEmbeddedImage": {
"message": "Eingebettetes Bild",
"description": "Label 'Embedded image' in the log panel"
},
"logPanelStep": {
"message": "Schritt",
"description": "Label 'Step' (for 'Step x / 4') in the log panel"
},
"logPanelWidth": {
"message": "150",
"description": "Width of the log panel in pixels, it should be adjusted for the longest label beginning with 'log' (e.g. 'logPanelDeferredImages')"
},
"topPanelError": {
"message": "SingleFile Fehler : ",
"description": "Label 'SingleFile error: ' in the top panel when displaying an error message"
},
"topPanelEmbeddedImageButton": {
"message": "Bild öffnen...",
"description": "Top panel button 'Open image...' when embedding an image"
},
"topPanelSharePageButton": {
"message": "Seite teilen...",
"description": "Top panel button 'Share page...' when sharing a page"
},
"topPanelShareSelectionButton": {
"message": "Auswahl teilen...",
"description": "Top panel button 'Share selection...' when sharing selected content"
},
"profileDefaultSettings": {
"message": "Standardeinstellungen",
"description": "Label 'Default settings' of the default settings in the options page"
},
"profileDisabled": {
"message": "Deaktiviert",
"description": "Label 'Disabled' of the disabled profile name in the options page"
},
"profileAddButtonTooltip": {
"message": "Neues Profil anlegen",
"description": "Tooltip 'Add a new profile' in the options page"
},
"profileRenameButtonTooltip": {
"message": "Profil umbenennen",
"description": "Tooltip 'Rename the profile' in the options page"
},
"profileDeleteButtonTooltip": {
"message": "Profil löschen",
"description": "Tooltip 'Delete the profile' in the options page"
},
"profileAddPrompt": {
"message": "Neuen Profilnamen eingeben",
"description": "Popup text 'Enter a name for this new profile' in the options page"
},
"profileDeleteConfirm": {
"message": "Löschung des auswählten Profils bestätigen",
"description": "Popup text 'Confirm the deletion of the selected profile' in the options page"
},
"profileRenamePrompt": {
"message": "Neuen Namen für das ausgewählte Profil eingeben",
"description": "Popup text 'Enter a new name for the selected profile' in the options page"
},
"editorAddYellowNote": {
"message": "Fügen eine gelbe Notiz hinzu",
"description": "Title of the button 'Add a yellow note' in the editor"
},
"editorAddPinkNote": {
"message": "Fügen eine rosa Notiz hinzu",
"description": "Title of the button 'Add a pink note' in the editor"
},
"editorAddBlueNote": {
"message": "Fügen eine blaue Notiz hinzu",
"description": "Title of the button 'Add a blue note' in the editor"
},
"editorAddGreenNote": {
"message": "Fügen eine grüne Notiz hinzu",
"description": "Title of the button 'Add a green note' in the editor"
},
"editorHighlightYellow": {
"message": "Hervorheben des selektierten Textes in Gelb",
"description": "Title of the button 'Highlight selected text in yellow' in the editor"
},
"editorHighlightPink": {
"message": "Hervorheben des selektierten Textes in Rosa",
"description": "Title of the button 'Highlight selected text in pink' in the editor"
},
"editorHighlightBlue": {
"message": "Hervorheben des selektierten Textes in Blau",
"description": "Title of the button 'Highlight selected text in blue' in the editor"
},
"editorHighlightGreen": {
"message": "Hervorheben des selektierten Textes in Grün",
"description": "Title of the button 'Highlight selected text in green' in the editor"
},
"editorToggleNotes": {
"message": "Anzeigen/Verbergen von Notizen",
"description": "Title of the button 'Display/hide notes' in the editor"
},
"editorToggleHighlights": {
"message": "Anzeigen/Verbergen von hervorgehobenem Text",
"description": "Title of the button 'Display/hide the highlighted text' in the editor"
},
"editorRemoveHighlight": {
"message": "Entfernen des selektierten hervorgehobenen Textes",
"description": "Title of the button 'Remove the selected highlighted text' in the editor"
},
"editorEditPage": {
"message": "Aktivieren/Deaktivieren des Nur-Lese-Modus",
"description": "Title of the button 'Enable/disable read-only' in the editor"
},
"editorFormatPage": {
"message": "Die Seite zur besseren Lesbarkeit formatieren",
"description": "Title of the button 'Format the page for better readability' in the editor"
},
"editorCutInnerPage": {
"message": "Aktivieren/Deaktivieren der Entfernung interner Elemente",
"description": "Title of the button 'Enable/disable removing of internal elements' in the editor"
},
"editorCutOuterPage": {
"message": "Aktivieren/Deaktivieren der Entfernung externer Elemente",
"description": "Title of the button 'Enable/disable removing of external elements' in the editor"
},
"editorUndoCutPage": {
"message": "Wiederherstellen des zuletzt entfernten Elements",
"description": "Title of the button 'Restore last removed element' in the editor"
},
"editorUndoAllCutPage": {
"message": "Wiederherstellen aller entfernten Elemente",
"description": "Title of the button 'Restore all removed elements' in the editor"
},
"editorRedoCutPage": {
"message": "Entfernen des zuletzt wiederhergestellten Elements",
"description": "Title of the button 'Remove last restored element' in the editor"
},
"editorSavePage": {
"message": "Speichern der Webseite",
"description": "Title of the button 'Save the page' in the editor"
},
"editorPrintPage": {
"message": "Drucken der Webseite",
"description": "Title of the button 'Print the page' in the editor"
},
"editorImportMht": {
"message": "MHTML-Datei importieren",
"description": "Title of the button 'Import MHTML file' in the editor"
},
"pendingsTitle": {
"message": "Ausstehende Speicherungen",
"description": "Title of the pending save page 'Pending saves' in the editor"
},
"pendingsCancelAllButton": {
"message": "Alle abbrechen",
"description": "Pending saves button 'Cancel all'"
},
"pendingsURLTitle": {
"message": "URL",
"description": "Title of the first column in the table of the pending saves 'URL'"
},
"pendingsTitleTitle": {
"message": "Titel",
"description": "Title of the first column in the table of the pending saves 'Title'"
},
"pendingsStatusTitle": {
"message": "Status",
"description": "Title of the second column in the table of the pending saves 'status'"
},
"pendingsPendingStatus": {
"message": "ausstehend",
"description": "Value of 'status' for pending saves"
},
"pendingsProcessingStatus": {
"message": "in Bearbeitung",
"description": "Value of 'status' for current saves"
},
"pendingsCancellingStatus": {
"message": "wird abgebrochen",
"description": "Value of 'status' for cancelled saves"
},
"pendingsNoPendings": {
"message": "Keine ausstehenden Speicherungen",
"description": "Label displayed when they are no pending saves"
},
"pendingsAddUrlsButton": {
"message": "URLs hinzufügen",
"description": "button 'Add URLs'"
},
"pendingsAddUrls": {
"message": "Geben Sie eine Liste von URLs ein, die durch einen Zeilenumbruch getrennt sind",
"description": "Label of the add URLs input"
},
"pendingsAddUrlsOKButton": {
"message": "OK",
"description": "Add URLs popup confirm button: 'OK'"
},
"pendingsAddUrlsCancelButton": {
"message": "Abbrechen",
"description": "Add URLs popup cancel button: 'Cancel'"
},
"batchSaveUrlsTitle": {
"message": "URLs stapelweise speichern",
"description": "Title of the 'batch save URLs' page"
},
"batchSaveUrlsNoURLs": {
"message": "Keine URLs",
"description": "Label displayed when they are no URLs"
},
"batchSaveUrlsAddUrlButton": {
"message": "URL hinzufügen",
"description": "label of the button 'Add URL'"
},
"batchSaveUrlsAddUrlsButton": {
"message": "URLs hinzufügen...",
"description": "label of the button 'Add URLs...'"
},
"batchSaveUrlsRemoveAllButton": {
"message": "Alle entfernen",
"description": "label of the button 'Remove all'"
},
"batchSaveUrlsSavePagesButton": {
"message": "Seiten speichern",
"description": "label of the button 'Save pages'"
},
"batchSaveUrlsURLTitle": {
"message": "URL",
"description": "Title of the column in the table of the URLs"
},
"optionSaveToRestFormApi": {
"message": "Hochladen auf ein REST-Formular-API",
"description": "Options page label: 'upload to a REST Form API'"
},
"optionRestFormApiUrl": {
"message": "URL",
"description": "Options page label: 'URL'"
},
"optionRestFormApiToken": {
"message": "Authentifizierungstoken",
"description": "Options page label: 'authorization token'"
},
"optionRestFormApiFileFieldName": {
"message": "Feldname der Datei",
"description": "Options page label: 'archive data field name'"
},
"optionRestFormApiUrlFieldName": {
"message": "Feldname der URL",
"description": "Options page label: 'archive URL field name'"
},
"optionsEditorTitle": {
"message": "Optionen-Editor",
"description": "Options title: 'Options editor'"
},
"optionsEditorSaveButton": {
"message": "Speichern",
"description": "Options editor button: 'Save'"
},
"optionsEditorConfigSaved": {
"message": "Konfiguration gespeichert",
"description": "Options editor message: 'Configuration saved'"
},
"optionsEditorInvalidJSON": {
"message": "Ungültiges JSON",
"description": "Options editor error message: 'Invalid JSON'"
}
}
================================================
FILE: _locales/en/messages.json
================================================
{
"extensionDescription": {
"message": "Save a complete page into a single HTML file",
"description": "Description of the extension."
},
"commandSaveSelectedTabs": {
"message": "Save the selected tabs or their selected contents",
"description": "Command (Ctrl+Shift+Y): 'Save the selected tabs or their selected contents'"
},
"commandSaveAllTabs": {
"message": "Save all tabs",
"description": "Command (Ctrl+Shift+U): 'Save all tabs'"
},
"commandCustomShortcut": {
"message": "Custom shortcut",
"description": "Command label: 'Custom shortcut'"
},
"commandCustomShortcut0": {
"message": "Custom shortcut #1",
"description": "Command label: 'Custom shortcut #1'"
},
"commandCustomShortcut1": {
"message": "Custom shortcut #2",
"description": "Command label: 'Custom shortcut #2'"
},
"commandCustomShortcut2": {
"message": "Custom shortcut #3",
"description": "Command label: 'Custom shortcut #3'"
},
"commandCustomShortcut3": {
"message": "Custom shortcut #4",
"description": "Command label: 'Custom shortcut #4'"
},
"commandCustomShortcut4": {
"message": "Custom shortcut #5",
"description": "Command label: 'Custom shortcut #5'"
},
"commandCustomShortcut5": {
"message": "Custom shortcut #6",
"description": "Command label: 'Custom shortcut #6'"
},
"commandCustomShortcut6": {
"message": "Custom shortcut #7",
"description": "Command label: 'Custom shortcut #7'"
},
"commandCustomShortcut7": {
"message": "Custom shortcut #8",
"description": "Command label: 'Custom shortcut #8'"
},
"commandCustomShortcut8": {
"message": "Custom shortcut #9",
"description": "Command label: 'Custom shortcut #9'"
},
"commandCustomShortcut9": {
"message": "Custom shortcut #10",
"description": "Command label: 'Custom shortcut #10'"
},
"menuSavePage": {
"message": "Save page with SingleFile",
"description": "Menu entry: 'Save page with SingleFile'"
},
"menuSaveSelectedLinks": {
"message": "Save selected links",
"description": "Menu entry: 'Save selected links'"
},
"menuEditPage": {
"message": "Annotate the page...",
"description": "Menu entry: 'Annotate the page...'"
},
"menuEditAndSavePage": {
"message": "Annotate and save the page...",
"description": "Menu entry: 'Annotate and save the page...'"
},
"menuSaveWithProfile": {
"message": "Save page with profile",
"description": "Menu entry: 'Save with profile'"
},
"menuViewPendingSaves": {
"message": "View pending saves...",
"description": "Menu entry: 'View pending saves...'"
},
"menuSelectProfile": {
"message": "Select the default profile",
"description": "Menu entry: 'Select the default profile'"
},
"menuUpdateRule": {
"message": "Select the profile of the current rule",
"description": "Menu entry: 'Select the profile of the current rule'"
},
"menuCreateDomainRule": {
"message": "Select the profile of the current domain",
"description": "Menu entry: 'Select the profile of the current domain'"
},
"menuSaveSelection": {
"message": "Save selection",
"description": "Menu entry: 'Save selection'"
},
"menuSaveFrame": {
"message": "Save frame",
"description": "Menu entry: 'Save frame'"
},
"menuSaveTabs": {
"message": "Save tabs",
"description": "Menu entry (SingleFile button only): 'Save tabs'"
},
"menuSaveSelectedTabs": {
"message": "Save selected tabs",
"description": "Menu entry: 'Save selected tabs'"
},
"menuSaveUnpinnedTabs": {
"message": "Save unpinned tabs",
"description": "Menu entry: 'Save unpinned tabs'"
},
"menuSaveAllTabs": {
"message": "Save all tabs",
"description": "Menu entry: 'Save all tabs'"
},
"menuBatchSaveUrls": {
"message": "Batch save URLs...",
"description": "Menu entry: 'Batch save URLs...'"
},
"menuAutoSave": {
"message": "Auto-save",
"description": "Menu entry: 'Auto-save'"
},
"menuAutoSaveDisabled": {
"message": "Disabled",
"description": "Menu entry: 'Auto-save' > Disabled'"
},
"menuAutoSaveTab": {
"message": "Auto-save this tab",
"description": "Menu entry: 'Auto-save' > Auto-save this tab'"
},
"menuAutoSaveUnpinnedTabs": {
"message": "Auto-save unpinned tabs",
"description": "Menu entry: 'Auto-save' > Auto-save unpinned tabs'"
},
"menuAutoSaveAllTabs": {
"message": "Auto-save all tabs",
"description": "Menu entry: 'Auto-save' > Auto-save all tabs'"
},
"buttonDefaultTooltip": {
"message": "Save page with SingleFile",
"description": "Button title: 'Save page with SingleFile'"
},
"buttonBlockedBadge": {
"message": "🚫",
"description": "Button badge when the page is blocked: '🚫'"
},
"buttonBlockedTooltip": {
"message": "This page cannot be saved with SingleFile",
"description": "Button title: 'This page cannot be saved with SingleFile'"
},
"buttonInitializingTooltip": {
"message": "Initializing SingleFile",
"description": "Button title during initialization: 'Initializing SingleFile (x/2)'"
},
"buttonInitializingBadge": {
"message": "•••",
"description": "Badge label during initialization: '•••'"
},
"buttonSaveProgressTooltip": {
"message": "Save progress: ",
"description": "Button title during save: 'Save progress: xx%'"
},
"buttonUploadProgressTooltip": {
"message": "Upload progress: ",
"description": "Button title during save: 'Upload progress: xx%'"
},
"buttonOKBadge": {
"message": "OK",
"description": "Badge label: 'OK'"
},
"buttonErrorBadge": {
"message": "ERR",
"description": "Badge label for unexpected errors"
},
"buttonAutoSaveActiveTooltip": {
"message": "Auto-save active",
"description": "Button title: 'Auto-save active'"
},
"buttonAutoSaveActiveBadge": {
"message": "[A]",
"description": "Badge label when auto-save is active"
},
"optionsTitle": {
"message": "Options",
"description": "Options page title"
},
"optionsUserInterfaceSubTitle": {
"message": "User interface",
"description": "Options sub-title: 'User interface'"
},
"optionAddMenuEntry": {
"message": "add entry in the context menu of the webpage",
"description": "Options page label: 'add entry in the context menu of the webpage'"
},
"optionDisplayShadow": {
"message": "overlay a shadow on the page during processing",
"description": "Options page label: 'overlay a shadow on the page during processing'"
},
"optionDisplayInfobar": {
"message": "display an infobar when viewing a saved page",
"description": "Options page label: 'display an infobar when viewing a saved page'"
},
"optionInfobarTemplate": {
"message": "template of the infobar content",
"description": "Options page label: 'template of the infobar content'"
},
"optionBlockMixedContent": {
"message": "block mixed content",
"description": "Options page label: 'block mixed content'"
},
"optionSaveOriginalURLs": {
"message": "save original URLs of embedded resources",
"description": "Options page label: 'save original URLs of embedded resources'"
},
"optionIncludeInfobar": {
"message": "include the infobar in the saved page",
"description": "Options page label: 'include the infobar in the saved page'"
},
"optionOpenInfobar": {
"message": "keep infobar open",
"description": "Options page label: 'keep infobar open'"
},
"optionRemoveInfobarSavedDate": {
"message": "do not include the saved date",
"description": "Options page label: 'do not include the saved date'"
},
"optionConfirmInfobar": {
"message": "open a prompt dialog to edit the infobar content",
"description": "Options page label: 'open a prompt dialog to edit the infobar content'"
},
"optionAutoClose": {
"message": "auto-close the tab after the page is saved",
"description": "Options page label: 'auto-close the tab after the page is saved'"
},
"optionCustomShortcut": {
"message": "keyboard shortcut command",
"description": "Options page label: 'keyboard shortcut command'"
},
"optionCustomShortcutDefault": {
"message": "default shortcut",
"description": "Options page label: 'default shortcut'"
},
"optionsFileNameSubTitle": {
"message": "File name",
"description": "Options sub-title: 'File name'"
},
"optionFilenameTemplate": {
"message": "template",
"description": "Options page label: 'template'"
},
"optionFilenameMaxLength": {
"message": "max length",
"description": "Options page label: 'max length'"
},
"optionFilenameMaxLengthBytesUnit": {
"message": "bytes",
"description": "Options page label: 'bytes'"
},
"optionFilenameMaxLengthCharsUnit": {
"message": "characters",
"description": "Options page label: 'characters'"
},
"optionFilenameReplacementCharacter": {
"message": "replacement character",
"description": "Options page label: 'replacement character'"
},
"optionReplaceEmojisInFilename": {
"message": "replace emojis with text",
"description": "Options page label: 'replace emojis with text'"
},
"optionSaveFilenameTemplateData": {
"message": "save the filename template data into the page",
"description": "Options page label: 'save the filename template data into the page'"
},
"optionConfirmFilename": {
"message": "open the \"Save as\" dialog to confirm the file name",
"description": "Options page label: 'open the \"Save as\" dialog to confirm the file name'"
},
"optionFilenameConflictAction": {
"message": "file name conflict resolution",
"description": "Options page label: 'filename conflict resolution'"
},
"optionFilenameConflictActionUniquify": {
"message": "create a unique name",
"description": "Value for 'filename conflict resolution' option: 'create a unique name'"
},
"optionFilenameConflictActionOverwrite": {
"message": "overwrite the existing file",
"description": "Value for 'filename conflict resolution' option: 'overwrite the existing file'"
},
"optionFilenameConflictActionPrompt": {
"message": "prompt for a name",
"description": "Value for 'name conflict resolution' option: 'prompt for a name'"
},
"optionFilenameConflictActionSkip": {
"message": "skip duplicate files",
"description": "Value for 'filename conflict resolution' option: 'skip duplicate files'"
},
"optionsHTMLContentSubTitle": {
"message": "HTML content",
"description": "Options sub-title: 'HTML content'"
},
"optionCompressHTML": {
"message": "compress HTML content",
"description": "Options page label: 'compress HTML content'"
},
"optionRemoveFrames": {
"message": "remove frames",
"description": "Options page label: 'remove frames'"
},
"optionRemoveHiddenElements": {
"message": "remove hidden elements",
"description": "Options page label: 'remove hidden elements'"
},
"optionRemovedElementsSelector": {
"message": "remove specific elements",
"description": "Options page label: 'remove specific elements'"
},
"optionsFileFormatSubTitle": {
"message": "File format",
"description": "Options sub-title: 'File format'"
},
"optionFileFormat": {
"message": "format",
"description": "Options page label: 'format'"
},
"optionFileFormatSelectHTML": {
"message": "HTML",
"description": "Options page label: 'HTML'"
},
"optionFileFormatSelectSelfExtractingUniversal": {
"message": "self-extracting ZIP (universal)",
"description": "Options page label: 'self-extracting ZIP (universal)'"
},
"optionFileFormatSelectSelfExtracting": {
"message": "self-extracting ZIP",
"description": "Options page label: 'self-extracting ZIP'"
},
"optionFileFormatSelectZIP": {
"message": "ZIP",
"description": "Options page label: 'ZIP'"
},
"optionPassword": {
"message": "password",
"description": "Options page label: 'password'"
},
"optionCreateRootDirectory": {
"message": "create a root directory",
"description": "Options page label: 'create a root directory'"
},
"optionDisableCompression": {
"message": "disable compression",
"description": "Options page label: 'disable compression'"
},
"optionPreventAppendedData": {
"message": "do not append data after the ZIP data",
"description": "Options page label: 'do not append data after the ZIP data'"
},
"optionInsertTextBody": {
"message": "make text searchable",
"description": "Options page label: 'make text searchable'"
},
"optionInsertEmbeddedImage": {
"message": "embed image",
"description": "Options page label: 'embed image'"
},
"optionInsertEmbeddedScreenshotImage": {
"message": "page screenshot",
"description": "Options page label: 'page screenshot'"
},
"optionInsertEmbeddedCustomImage": {
"message": "custom image",
"description": "Options page label: 'custom image'"
},
"optionsInfobarSubTitle": {
"message": "Infobar",
"description": "Options sub-title: 'Infobar'"
},
"optionsImagesSubTitle": {
"message": "Images",
"description": "Options sub-title: 'Images'"
},
"optionGroupDuplicateImages": {
"message": "group duplicate images together",
"description": "Options page label: 'group duplicate images together'"
},
"optionImageReductionFactor": {
"message": "image reduction factor",
"description": "Options page label: 'image reduction factor'"
},
"optionLoadDeferredImages": {
"message": "save deferred images",
"description": "Options page label: 'save deferred images'"
},
"optionLoadDeferredImagesMaxIdleTime": {
"message": "maximum idle time (ms)",
"description": "Options page label: 'maximum idle time (ms)'"
},
"optionLoadDeferredImagesKeepZoomLevel": {
"message": "zoom out the page",
"description": "Options page label: 'zoom out the page'"
},
"optionLoadDeferredImagesDispatchScrollEvent": {
"message": "dispatch \"scroll\" event",
"description": "Options page label: 'dispatch \"scroll\" event'"
},
"optionLoadDeferredImagesBeforeFrames": {
"message": "load deferred frames",
"description": "Options page label: 'load deferred frames'"
},
"optionRemoveAlternativeImages": {
"message": "remove images for alternative screen resolutions",
"description": "Options page label: 'remove images for alternative screen resolutions'"
},
"optionsFontsSubTitle": {
"message": "Fonts",
"description": "Options sub-title: 'Fonts'"
},
"optionRemoveUnusedFonts": {
"message": "remove unused fonts",
"description": "Options page label: 'remove unused fonts'"
},
"optionRemoveAlternativeFonts": {
"message": "remove alternative fonts",
"description": "Options page label: 'remove alternative fonts'"
},
"optionsStylesheetsSubTitle": {
"message": "Stylesheets",
"description": "Options sub-title: 'Stylesheets'"
},
"optionCompressCSS": {
"message": "compress CSS content",
"description": "Options page label: 'compress CSS content'"
},
"optionGroupDuplicateStylesheets": {
"message": "group duplicate stylesheets together",
"description": "Options page label: 'group duplicate stylesheets together'"
},
"optionMoveStylesInHead": {
"message": "move in the head element the styles found outside of it",
"description": "Options page label: 'move in the head element the styles found outside of it'"
},
"optionRemoveUnusedStyles": {
"message": "remove unused styles",
"description": "Options page label: 'remove unused styles'"
},
"optionRemoveAlternativeMedias": {
"message": "remove stylesheets for alternative devices to screens",
"description": "Options page label: 'remove stylesheets for alternative devices to screens'"
},
"optionsNetworkSubTitle": {
"message": "Network",
"description": "Options sub-title: 'Network'"
},
"optionsBlockedResources": {
"message": "blocked resources",
"description": "Options page label: 'blocked resources'"
},
"optionsAcceptHeaders": {
"message": "\"Accept\" header",
"description": "Options page label: '\"Accept\" header'"
},
"optionResourceScript": {
"message": "scripts",
"description": "Options page label: 'scripts'"
},
"optionResourceVideo": {
"message": "videos",
"description": "Options page label: 'videos'"
},
"optionResourceAudio": {
"message": "audios",
"description": "Options page label: 'audios'"
},
"optionResourceDocument": {
"message": "documents",
"description": "Options page label: 'documents'"
},
"optionResourceFont": {
"message": "fonts",
"description": "Options page label: 'fonts'"
},
"optionResourceStylesheet": {
"message": "stylesheets",
"description": "Options page label: 'stylesheets'"
},
"optionResourceImage": {
"message": "images",
"description": "Options page label: 'images'"
},
"optionsDestinationSubTitle": {
"message": "Destination",
"description": "Options sub-title: 'Destination'"
},
"optionsBookmarkSubTitle": {
"message": "Bookmarks",
"description": "Options sub-title: 'Bookmarks'"
},
"optionsAutoSaveSubTitle": {
"message": "Auto-save",
"description": "Options sub-title: 'Auto-save'"
},
"optionsAutoSettingsSubTitle": {
"message": "Auto-settings rules",
"description": "Options sub-title: 'Auto-settings rules'"
},
"optionsDeleteDisplayedRulesConfirm": {
"message": "Confirm the deletion of all displayed rules",
"description": "Popup text 'Confirm the deletion of all displayed rules'"
},
"optionsDeleteRulesTooltip": {
"message": "Delete all displayed rules",
"description": "Popup text 'Delete all displayed rules'"
},
"optionsAutoSettingsUrl": {
"message": "URL",
"description": "Options label in the Auto-settings rules: 'URL'"
},
"optionsAutoSettingsUrlPlaceholder": {
"message": "Type a complete or partial URL (e.g. example.com)",
"description": "Placeholder in the Auto-settings rules: 'Type a complete or partial URL (e.g. example.com)'"
},
"optionsAutoSettingsProfile": {
"message": "Profile",
"description": "Options label in the Auto-settings rules: 'Profile'"
},
"optionsAutoSettingsAutoSaveProfile": {
"message": "Auto-save profile",
"description": "Options label in the Auto-settings rules: 'Auto-save profile'"
},
"optionsAutoSettingsShowAllProfiles": {
"message": "display all profiles",
"description": "Options label in the Auto-settings rules: 'display all profiles'"
},
"optionsAutoSettingsShowAutoSaveProfile": {
"message": "display 'Auto-save profile' column",
"description": "Options label in the Auto-settings rules: 'display 'Auto-save profile' column'"
},
"optionsUpdateRuleTooltip": {
"message": "Update the rule",
"description": "Popup text 'Update the rule' in the options page"
},
"optionsDeleteRuleTooltip": {
"message": "Delete the rule",
"description": "Popup text 'Delete the rule' in the options page"
},
"optionsAddRuleTooltip": {
"message": "Add the rule",
"description": "Popup text 'Add the rule' in the options page"
},
"optionsValidateChangesTooltip": {
"message": "Validate changes",
"description": "Popup text 'Validate changes' in the options page"
},
"optionsCancelChangesTooltip": {
"message": "Cancel changes",
"description": "Popup text 'Cancel changes' in the options page"
},
"optionsDeleteRuleConfirm": {
"message": "Confirm the deletion of the selected rule",
"description": "Popup text 'Confirm the deletion of the selected rule' in the options page"
},
"optionAutoSaveLoadOrUnload": {
"message": "auto-save after page load or on page unload",
"description": "auto-save after page load or on page unload"
},
"optionAutoSaveLoad": {
"message": "auto-save after page load",
"description": "Options page label: 'auto-save after page load'"
},
"optionAutoSaveUnload": {
"message": "auto-save on page unload",
"description": "Options page label: 'auto-save on page unload'"
},
"optionAutoSaveDiscard": {
"message": "auto-save on tab discard",
"description": "Options page label: 'auto-save on tab discard'"
},
"optionAutoSaveRemove": {
"message": "auto-save on tab removal",
"description": "Options page label: 'auto-save on tab removal'"
},
"optionAutoSaveDelay": {
"message": "auto-save waiting delay after page load (s)",
"description": "Options page label: 'auto-save waiting delay after page load (s)'"
},
"optionAutoSaveRepeat": {
"message": "auto-save periodically",
"description": "Options page label: 'auto-save periodically'"
},
"optionAutoSaveRepeatDelay": {
"message": "period (s.)",
"description": "Options page label: 'period (s)'"
},
"optionAutoSaveExternalSave": {
"message": "save the page with SingleFile Companion",
"description": "Options page label: 'save the page with SingleFile Companion'"
},
"optionsEditorSubTitle": {
"message": "Annotation editor",
"description": "Options sub-title: 'Annotation editor'"
},
"optionOpenEditor": {
"message": "annotate the page before saving",
"description": "Options page label: 'annotate the page before saving'"
},
"optionOpenSavedPage": {
"message": "open saved pages in a new tab",
"description": "Options page label: 'open saved pages in a new tab'"
},
"optionAutoOpenEditor": {
"message": "open pages saved with SingleFile in the annotation editor",
"description": "Options page label: 'open pages saved with SingleFile in the annotation editor'"
},
"optionDefaultEditorMode": {
"message": "default mode",
"description": "Options page label: 'default mode'"
},
"optionDefaultEditorModeNormal": {
"message": "normal",
"description": "Options page label: 'default mode > normal'"
},
"optionDefaultEditorModeEdit": {
"message": "edit the page",
"description": "Options page label: 'default mode > edit the page'"
},
"optionDefaultEditorModeFormat": {
"message": "format the page",
"description": "Options page label: 'default mode > format the page'"
},
"optionDefaultEditorModeCut": {
"message": "remove elements",
"description": "Options page label: 'default mode > remove elements'"
},
"optionDefaultEditorModeCutExternal": {
"message": "remove external elements",
"description": "Options page label: 'default mode > remove external elements'"
},
"optionApplySystemTheme": {
"message": "apply the system theme when formatting a page",
"description": "Title of the button 'apply the system theme when formatting a page'"
},
"optionContentWidth": {
"message": "content width when formatting a page (em)",
"description": "Options page label: 'content width when formatting a page (em)'"
},
"optionWarnUnsavedPage": {
"message": "warn if leaving page with unsaved changes",
"description": "Title of the button 'warn if leaving page with unsaved changes'"
},
"optionDisplayInfobarInEditor": {
"message": "display the infobar",
"description": "Title of the button 'display the infobar'"
},
"optionsMiscSubTitle": {
"message": "Misc.",
"description": "Options sub-title: 'Misc.'"
},
"optionBackgroundSave": {
"message": "save pages in background",
"description": "Options page label: 'save pages in background'"
},
"optionDisplayStats": {
"message": "display stats in the console after processing",
"description": "Options page label: 'display stats in the console after processing'"
},
"optionSetMaxResourceSize": {
"message": "set maximum size",
"description": "Options page label: 'set maximum size'"
},
"optionMaxResourceSize": {
"message": "maximum size (MB)",
"description": "Options page label: 'maximum size (MB)'"
},
"optionSetMaxResourceDelay": {
"message": "set maximum download time",
"description": "Options page label: 'set maximum download time'"
},
"optionMaxResourceDelay": {
"message": "maximum download time (s)",
"description": "Options page label: 'maximum download time (s)'"
},
"optionPassReferrerOnError": {
"message": "pass \"Referer\" header after a cross-origin request error",
"description": "Options page label: 'pass \"Referer\" header after a cross-origin request error'"
},
"optionSaveRawPage": {
"message": "save raw page",
"description": "Options page label: 'save raw page'"
},
"optionInsertMetaCSP": {
"message": "set content security policy",
"description": "Options page label: 'set content security policy'"
},
"optionSaveToClipboard": {
"message": "copy to clipboard",
"description": "Options page label: 'copy to clipboard'"
},
"optionSaveToFilesystem": {
"message": "save to filesystem",
"description": "Options page label: 'save to filesystem'"
},
"optionSharePage": {
"message": "share page",
"description": "Options page label: 'share page'"
},
"optionAddProof": {
"message": "add proof of existence",
"description": "Options page label: 'add proof of existence'"
},
"optionsAddProofConfirm": {
"message": "Confirm you allow SingleFile to send to the Woleet API a SHA256 hash of each page you are going to save. You can find more information about this feature in the help page or by clicking on the question mark next to the option.",
"description": "Popup text displayed wen enabling the option 'add proof of existence'"
},
"optionWoleetKey": {
"message": "access token",
"description": "Options page label: 'access token'"
},
"optionSaveToGDrive": {
"message": "upload to Google Drive",
"description": "Options page label: 'upload to Google Drive'"
},
"optionSaveToDropbox": {
"message": "upload to Dropbox",
"description": "Options page label: 'upload to Dropbox'"
},
"optionSaveToGitHub": {
"message": "upload to GitHub",
"description": "Options page label: 'upload to GitHub'"
},
"optionGitHubToken": {
"message": "access token",
"description": "Options page label: 'access token'"
},
"optionGitHubUser": {
"message": "user name",
"description": "Options page label: 'user name'"
},
"optionGitHubRepository": {
"message": "repository name",
"description": "Options page label: 'repository name'"
},
"optionGitHubBranch": {
"message": "branch name",
"description": "Options page label: 'branch name'"
},
"optionSaveToS3": {
"message": "upload to Amazon S3",
"description": "Options page label: 'upload to Amazon S3'"
},
"optionS3Domain": {
"message": "domain",
"description": "Options page label: 'domain'"
},
"optionS3Region": {
"message": "region",
"description": "Options page label: 'region'"
},
"optionS3Bucket": {
"message": "bucket name",
"description": "Options page label: 'bucket name'"
},
"optionS3AccessKey": {
"message": "access key",
"description": "Options page label: 'access key'"
},
"optionS3SecretKey": {
"message": "secret key",
"description": "Options page label: 'secret key'"
},
"optionSaveWithWebDAV": {
"message": "upload to a WebDAV server",
"description": "Options page label: 'upload to a WebDAV server'"
},
"optionWebDAVURL": {
"message": "URL",
"description": "Options page label: 'URL'"
},
"optionWebDAVUser": {
"message": "user identifier",
"description": "Options page label: 'user identifier'"
},
"optionWebDAVPassword": {
"message": "password",
"description": "Options page label: 'password'"
},
"optionSaveWithMCP": {
"message": "upload to an MCP server",
"description": "Options page label: 'upload to an MCP server'"
},
"optionMCPServerUrl": {
"message": "server URL",
"description": "Options page label: 'server URL'"
},
"optionMCPAuthToken": {
"message": "authentication token",
"description": "Options page label: 'authentication token'"
},
"optionSaveWithCompanion": {
"message": "save with SingleFile Companion",
"description": "Options page label: 'save with SingleFile Companion'"
},
"optionSaveCreatedBookmarks": {
"message": "save the page of a newly created bookmark",
"description": "Options page label: 'save the page of a newly created bookmark'"
},
"optionReplaceBookmarkURL": {
"message": "link the new bookmark to the saved page",
"description": "Options page label: 'link the new bookmark to the saved page'"
},
"optionAllowedBookmarkFolders": {
"message": "allowed folders",
"description": "Options page label: 'allowed folders'"
},
"optionIgnoredBookmarkFolders": {
"message": "ignored folders",
"description": "Options page label: 'ignored folders'"
},
"optionsHelpLink": {
"message": "help",
"description": "Options help link"
},
"optionSynchronize": {
"message": "synchronize options",
"description": "Options label: 'synchronize options'"
},
"optionsResetButton": {
"message": "Reset",
"description": "Options button: 'Reset'"
},
"optionsResetTooltip": {
"message": "Reset all options to their default values",
"description": "Options 'Reset' button tooltip"
},
"optionsResetConfirm": {
"message": "Confirm the reset of all options or the current profile",
"description": "Popup text 'Confirm the reset of all options or the current profile' in the options page"
},
"optionsResetAllButton": {
"message": "Reset all options",
"description": "Options confirm button: 'Reset all options'"
},
"optionsResetCurrentButton": {
"message": "Reset the current profile",
"description": "Options confirm button: 'Reset current profile'"
},
"optionsOKButton": {
"message": "OK",
"description": "Options confirm button: 'OK'"
},
"optionsCancelButton": {
"message": "Cancel",
"description": "Options confirm button: 'Cancel'"
},
"optionsExportButton": {
"message": "Export",
"description": "Options button: 'Export'"
},
"optionsImportButton": {
"message": "Import",
"description": "Options button: 'Import'"
},
"logPanelDeferredImages": {
"message": "Deferred images",
"description": "Label 'Deferred images' in the log panel"
},
"logPanelFrameContents": {
"message": "Frame contents",
"description": "Label 'Frame contents' in the log panel"
},
"logPanelEmbeddedImage": {
"message": "Embedded image",
"description": "Label 'Embedded image' in the log panel"
},
"logPanelStep": {
"message": "Step",
"description": "Label 'Step' (for 'Step x / 4') in the log panel"
},
"logPanelWidth": {
"message": "122",
"description": "Width of the log panel in pixels, it should be adjusted for the longest label beginning with 'log' (e.g. 'logPanelDeferredImages')"
},
"topPanelError": {
"message": "SingleFile error: ",
"description": "Label 'SingleFile error: ' in the top panel when displaying an error message"
},
"topPanelEmbeddedImageButton": {
"message": "Open image...",
"description": "Top panel button 'Open image...' when embedding an image"
},
"topPanelSharePageButton": {
"message": "Share page...",
"description": "Top panel button 'Share page...' when sharing a page"
},
"topPanelShareSelectionButton": {
"message": "Share selection...",
"description": "Top panel button 'Share selection...' when sharing selected content"
},
"profileDefaultSettings": {
"message": "Default settings",
"description": "Label 'Default settings' of the default settings in the options page"
},
"profileDisabled": {
"message": "Disabled",
"description": "Label 'Disabled' of the disabled profile name in the options page"
},
"profileAddButtonTooltip": {
"message": "Add a new profile",
"description": "Tooltip 'Add a new profile' in the options page"
},
"profileRenameButtonTooltip": {
"message": "Rename the profile",
"description": "Tooltip 'Rename the profile' in the options page"
},
"profileDeleteButtonTooltip": {
"message": "Delete the profile",
"description": "Tooltip 'Delete the profile' in the options page"
},
"profileAddPrompt": {
"message": "Enter a name for this new profile",
"description": "Popup text 'Enter a name for this new profile' in the options page"
},
"profileDeleteConfirm": {
"message": "Confirm the deletion of the selected profile",
"description": "Popup text 'Confirm the deletion of the selected profile' in the options page"
},
"profileRenamePrompt": {
"message": "Enter a new name for the selected profile",
"description": "Popup text 'Enter a new name for the selected profile' in the options page"
},
"editorAddYellowNote": {
"message": "Add a yellow note",
"description": "Title of the button 'Add a yellow note' in the editor"
},
"editorAddPinkNote": {
"message": "Add a pink note",
"description": "Title of the button 'Add a pink note' in the editor"
},
"editorAddBlueNote": {
"message": "Add a blue note",
"description": "Title of the button 'Add a blue note' in the editor"
},
"editorAddGreenNote": {
"message": "Add a green note",
"description": "Title of the button 'Add a green note' in the editor"
},
"editorHighlightYellow": {
"message": "Highlight selected text in yellow",
"description": "Title of the button 'Highlight selected text in yellow' in the editor"
},
"editorHighlightPink": {
"message": "Highlight selected text in pink",
"description": "Title of the button 'Highlight selected text in pink' in the editor"
},
"editorHighlightBlue": {
"message": "Highlight selected text in blue",
"description": "Title of the button 'Highlight selected text in blue' in the editor"
},
"editorHighlightGreen": {
"message": "Highlight selected text in green",
"description": "Title of the button 'Highlight selected text in green' in the editor"
},
"editorToggleNotes": {
"message": "Display/hide notes",
"description": "Title of the button 'Display/hide notes' in the editor"
},
"editorToggleHighlights": {
"message": "Display/hide the highlighted text",
"description": "Title of the button 'Display/hide the highlighted text' in the editor"
},
"editorRemoveHighlight": {
"message": "Remove the selected highlighted text",
"description": "Title of the button 'Remove the selected highlighted text' in the editor"
},
"editorEditPage": {
"message": "Enable/disable read-only",
"description": "Title of the button 'Enable/disable read-only' in the editor"
},
"editorFormatPage": {
"message": "Format the page for better readability",
"description": "Title of the button 'Format the page for better readability' in the editor"
},
"editorCutInnerPage": {
"message": "Enable/disable removing of internal elements",
"description": "Title of the button 'Enable/disable removing of internal elements' in the editor"
},
"editorCutOuterPage": {
"message": "Enable/disable removing of external elements",
"description": "Title of the button 'Enable/disable removing of external elements' in the editor"
},
"editorUndoCutPage": {
"message": "Restore last removed element",
"description": "Title of the button 'Restore last removed element' in the editor"
},
"editorUndoAllCutPage": {
"message": "Restore all removed elements",
"description": "Title of the button 'Restore all removed elements' in the editor"
},
"editorRedoCutPage": {
"message": "Remove last restored element",
"description": "Title of the button 'Remove last restored element' in the editor"
},
"editorSavePage": {
"message": "Save the page",
"description": "Title of the button 'Save the page' in the editor"
},
"editorPrintPage": {
"message": "Print the page",
"description": "Title of the button 'Print the page' in the editor"
},
"editorImportMht": {
"message": "Import MHTML file",
"description": "Title of the button 'Import MHTML file' in the editor"
},
"pendingsTitle": {
"message": "Pending saves",
"description": "Title of the pending save page 'Pending saves' in the editor"
},
"pendingsCancelAllButton": {
"message": "Cancel all",
"description": "Pending saves button 'Cancel all'"
},
"pendingsURLTitle": {
"message": "URL",
"description": "Title of the first column in the table of the pending saves 'URL'"
},
"pendingsTitleTitle": {
"message": "Title",
"description": "Title of the first column in the table of the pending saves 'Title'"
},
"pendingsStatusTitle": {
"message": "status",
"description": "Title of the second column in the table of the pending saves 'status'"
},
"pendingsPendingStatus": {
"message": "pending",
"description": "Value of 'status' for pending saves"
},
"pendingsProcessingStatus": {
"message": "processing",
"description": "Value of 'status' for current saves"
},
"pendingsCancellingStatus": {
"message": "cancelling",
"description": "Value of 'status' for cancelled saves"
},
"pendingsNoPendings": {
"message": "No pending saves",
"description": "Label displayed when there are no pending saves"
},
"pendingsAddUrlsButton": {
"message": "Add URLs",
"description": "button 'Add URLs'"
},
"pendingsAddUrls": {
"message": "Enter a list of URLs separated by a new line",
"description": "Label of the add URLs input"
},
"pendingsAddUrlsOKButton": {
"message": "OK",
"description": "Add URLs popup confirm button: 'OK'"
},
"pendingsAddUrlsCancelButton": {
"message": "Cancel",
"description": "Add URLs popup cancel button: 'Cancel'"
},
"batchSaveUrlsTitle": {
"message": "Batch save URLs",
"description": "Title of the 'batch save URLs' page"
},
"batchSaveUrlsNoURLs": {
"message": "No URLs",
"description": "Label displayed when there are no URLs"
},
"batchSaveUrlsAddUrlButton": {
"message": "Add URL",
"description": "label of the button 'Add URL'"
},
"batchSaveUrlsAddUrlsButton": {
"message": "Add URLs...",
"description": "label of the button 'Add URLs...'"
},
"batchSaveUrlsRemoveAllButton": {
"message": "Remove all",
"description": "label of the button 'Remove all'"
},
"batchSaveUrlsSavePagesButton": {
"message": "Save pages",
"description": "label of the button 'Save pages'"
},
"batchSaveUrlsURLTitle": {
"message": "URL",
"description": "Title of the column in the table of the URLs"
},
"optionSaveToRestFormApi": {
"message": "upload to a REST Form API",
"description": "Options page label: 'upload to a REST Form API'"
},
"optionRestFormApiUrl": {
"message": "URL",
"description": "Options page label: 'URL'"
},
"optionRestFormApiToken": {
"message": "authorization token",
"description": "Options page label: 'authorization token'"
},
"optionRestFormApiFileFieldName": {
"message": "archive data field name",
"description": "Options page label: 'archive data field name'"
},
"optionRestFormApiUrlFieldName": {
"message": "archive URL field name",
"description": "Options page label: 'archive URL field name'"
},
"optionsEditorTitle": {
"message": "Options editor",
"description": "Options title: 'Options editor'"
},
"optionsEditorSaveButton": {
"message": "Save",
"description": "Options editor button: 'Save'"
},
"optionsEditorConfigSaved": {
"message": "Configuration saved",
"description": "Options editor message: 'Configuration saved'"
},
"optionsEditorInvalidJSON": {
"message": "Invalid JSON",
"description": "Options editor error message: 'Invalid JSON'"
}
}
================================================
FILE: _locales/es/messages.json
================================================
{
"extensionDescription": {
"message": "Guarda una página completa en un único archivo HTML",
"description": "Description of the extension."
},
"commandSaveSelectedTabs": {
"message": "Guardar las pestañas seleccionadas o su contenidos seleccionados",
"description": "Command (Ctrl+Shift+Y): 'Save the selected tabs or their selected contents'"
},
"commandSaveAllTabs": {
"message": "Guardar todas las pestañas",
"description": "Command (Ctrl+Shift+U): 'Save all tabs'"
},
"commandCustomShortcut": {
"message": "Atajo personalizado",
"description": "Command label: 'Custom shortcut'"
},
"commandCustomShortcut0": {
"message": "Atajo personalizado #1",
"description": "Command label: 'Custom shortcut #1'"
},
"commandCustomShortcut1": {
"message": "Atajo personalizado #2",
"description": "Command label: 'Custom shortcut #2'"
},
"commandCustomShortcut2": {
"message": "Atajo personalizado #3",
"description": "Command label: 'Custom shortcut #3'"
},
"commandCustomShortcut3": {
"message": "Atajo personalizado #4",
"description": "Command label: 'Custom shortcut #4'"
},
"commandCustomShortcut4": {
"message": "Atajo personalizado #5",
"description": "Command label: 'Custom shortcut #5'"
},
"commandCustomShortcut5": {
"message": "Atajo personalizado #6",
"description": "Command label: 'Custom shortcut #6'"
},
"commandCustomShortcut6": {
"message": "Atajo personalizado #7",
"description": "Command label: 'Custom shortcut #7'"
},
"commandCustomShortcut7": {
"message": "Atajo personalizado #8",
"description": "Command label: 'Custom shortcut #8'"
},
"commandCustomShortcut8": {
"message": "Atajo personalizado #9",
"description": "Command label: 'Custom shortcut #9'"
},
"commandCustomShortcut9": {
"message": "Atajo personalizado #10",
"description": "Command label: 'Custom shortcut #10'"
},
"menuSavePage": {
"message": "Guardar página con SingleFile",
"description": "Menu entry: 'Save page with SingleFile'"
},
"menuSaveSelectedLinks": {
"message": "Guardar los links seleccionados",
"description": "Menu entry: 'Save selected links'"
},
"menuEditPage": {
"message": "Anotar la página",
"description": "Menu entry: 'Annotate the page...'"
},
"menuEditAndSavePage": {
"message": "Anotar y guardar la página",
"description": "Menu entry: 'Annotate and save the page...'"
},
"menuSaveWithProfile": {
"message": "Guardar página con el perfil",
"description": "Menu entry: 'Save with profile'"
},
"menuViewPendingSaves": {
"message": "Ver guardados pendientes...",
"description": "Menu entry: 'View pending saves...'"
},
"menuSelectProfile": {
"message": "Seleccionar el perfil predeterminado",
"description": "Menu entry: 'Select the default profile'"
},
"menuUpdateRule": {
"message": "Seleccionar el perfil de la regla actual",
"description": "Menu entry: 'Select the profile of the current rule'"
},
"menuCreateDomainRule": {
"message": "Seleccionar el perfil del dominio actual",
"description": "Menu entry: 'Select the profile of the current domain'"
},
"menuSaveSelection": {
"message": "Guardar selección",
"description": "Menu entry: 'Save selection'"
},
"menuSaveFrame": {
"message": "Guardar marco (frame)",
"description": "Menu entry: 'Save frame'"
},
"menuSaveTabs": {
"message": "Guardar pestañas",
"description": "Menu entry (SingleFile button only): 'Save tabs'"
},
"menuSaveSelectedTabs": {
"message": "Guardar pestañas seleccionadas",
"description": "Menu entry: 'Save selected tabs'"
},
"menuSaveUnpinnedTabs": {
"message": "Guardar pestañas no fijadas",
"description": "Menu entry: 'Save unpinned tabs'"
},
"menuSaveAllTabs": {
"message": "Guardar todas las pestañas",
"description": "Menu entry: 'Save all tabs'"
},
"menuBatchSaveUrls": {
"message": "Guardar por lotes URLs...",
"description": "Menu entry: 'Batch save URLs...'"
},
"menuAutoSave": {
"message": "Auto-guardar",
"description": "Menu entry: 'Auto-save'"
},
"menuAutoSaveDisabled": {
"message": "Deshabilitado",
"description": "Menu entry: 'Auto-save' > Disabled'"
},
"menuAutoSaveTab": {
"message": "Auto-guardar esta pestaña",
"description": "Menu entry: 'Auto-save' > Auto-save this tab'"
},
"menuAutoSaveUnpinnedTabs": {
"message": "Auto-guardar pestañas no fijadas",
"description": "Menu entry: 'Auto-save' > Auto-save unpinned tabs'"
},
"menuAutoSaveAllTabs": {
"message": "Auto-guardar todas las pestañas",
"description": "Menu entry: 'Auto-save' > Auto-save all tabs'"
},
"buttonDefaultTooltip": {
"message": "Guardar página con SingleFile",
"description": "Button title: 'Save page with SingleFile'"
},
"buttonBlockedBadge": {
"message": "🚫",
"description": "Button badge when the page is blocked: '🚫'"
},
"buttonBlockedTooltip": {
"message": "Esta página no se puede guardar con SingleFile",
"description": "Button title: 'This page cannot be saved with SingleFile'"
},
"buttonInitializingTooltip": {
"message": "Inicializando SingleFile",
"description": "Button title during initialization: 'Initializing SingleFile (x/2)'"
},
"buttonInitializingBadge": {
"message": "•••",
"description": "Badge label during initialization: '•••'"
},
"buttonSaveProgressTooltip": {
"message": "Progresión del guardado: ",
"description": "Button title during save: 'Save progress: xx%'"
},
"buttonUploadProgressTooltip": {
"message": "Progresión del upload: ",
"description": "Button title during save: 'Upload progress: xx%'"
},
"buttonOKBadge": {
"message": "OK",
"description": "Badge label: 'OK'"
},
"buttonErrorBadge": {
"message": "ERR",
"description": "Badge label for unexpected errors"
},
"buttonAutoSaveActiveTooltip": {
"message": "Auto-guardar activado",
"description": "Button title: 'Auto-save active'"
},
"buttonAutoSaveActiveBadge": {
"message": "[A]",
"description": "Badge label when auto-save is active"
},
"optionsTitle": {
"message": "Opciones",
"description": "Options page title"
},
"optionsUserInterfaceSubTitle": {
"message": "Interfaz de usuario",
"description": "Options sub-title: 'User interface'"
},
"optionAddMenuEntry": {
"message": "añadir entrada en el menú contextual de la página web",
"description": "Options page label: 'add entry in the context menu of the webpage'"
},
"optionDisplayShadow": {
"message": "cubrir la página con un sombreado durante el procesado",
"description": "Options page label: 'overlay a shadow on the page during processing'"
},
"optionDisplayInfobar": {
"message": "mostrar una barra informativa al ver una página guardada",
"description": "Options page label: 'display an infobar when viewing a saved page'"
},
"optionInfobarTemplate": {
"message": "plantilla del contenido de la barra informativa",
"description": "Options page label: 'template of the infobar content'"
},
"optionBlockMixedContent": {
"message": "bloqueo de contenido mixto",
"description": "Options page label: 'block mixed content'"
},
"optionSaveOriginalURLs": {
"message": "guardar las URL originales de los recursos incrustados",
"description": "Options page label: 'save original URLs of embedded resources'"
},
"optionIncludeInfobar": {
"message": "incluir la barra informativa en la página guardada",
"description": "Options page label: 'include the infobar in the saved page'"
},
"optionOpenInfobar": {
"message": "mantener abierta la barra de información",
"description": "Options page label: 'keep infobar open'"
},
"optionRemoveInfobarSavedDate": {
"message": "no incluya la fecha guardada",
"description": "Options page label: 'do not include the saved date'"
},
"optionConfirmInfobar": {
"message": "abrir un cuadro de diálogo para editar el contenido de la barra informativa",
"description": "Options page label: 'open a prompt dialog to edit the infobar content'"
},
"optionAutoClose": {
"message": "cerrar automáticamente la pestaña después de guardar la página",
"description": "Options page label: 'auto-close the tab after the page is saved'"
},
"optionCustomShortcut": {
"message": "comando de atajo de teclado",
"description": "Options page label: 'keyboard shortcut command'"
},
"optionCustomShortcutDefault": {
"message": "atajo predeterminado",
"description": "Options page label: 'default shortcut'"
},
"optionsFileNameSubTitle": {
"message": "Nombre del archivo",
"description": "Options sub-title: 'File name'"
},
"optionFilenameTemplate": {
"message": "plantilla",
"description": "Options page label: 'template'"
},
"optionFilenameMaxLength": {
"message": "longitud máxima",
"description": "Options page label: 'max length'"
},
"optionFilenameMaxLengthBytesUnit": {
"message": "bytes",
"description": "Options page label: 'bytes'"
},
"optionFilenameMaxLengthCharsUnit": {
"message": "caracteres",
"description": "Options page label: 'characters'"
},
"optionFilenameReplacementCharacter": {
"message": "carácter de reemplazo",
"description": "Options page label: 'replacement character'"
},
"optionReplaceEmojisInFilename": {
"message": "reemplazar emojis con texto",
"description": "Options page label: 'replace emojis with text'"
},
"optionSaveFilenameTemplateData": {
"message": "guardar los datos de la plantilla de nombre de archivo en la página",
"description": "Options page label: 'save the filename template data into the page'"
},
"optionConfirmFilename": {
"message": "abrir el cuadro de diálogo \"Guardar como\" para confirmar el nombre del archivo",
"description": "Options page label: 'open the \"Save as\" dialog to confirm the file name'"
},
"optionFilenameConflictAction": {
"message": "resolución de conflictos de nombre de archivo",
"description": "Options page label: 'filename conflict resolution'"
},
"optionFilenameConflictActionUniquify": {
"message": "crear un nombre exclusivo",
"description": "Value for 'filename conflict resolution' option: 'create a unique name'"
},
"optionFilenameConflictActionOverwrite": {
"message": "sobrescribir el archivo existente",
"description": "Value for 'filename conflict resolution' option: 'overwrite the existing file'"
},
"optionFilenameConflictActionPrompt": {
"message": "preguntar por un nombre",
"description": "Value for 'name conflict resolution' option: 'prompt for a name'"
},
"optionFilenameConflictActionSkip": {
"message": "saltar los archivos duplicados",
"description": "Value for 'filename conflict resolution' option: 'skip duplicate files'"
},
"optionsHTMLContentSubTitle": {
"message": "Contenido HTML",
"description": "Options sub-title: 'HTML content'"
},
"optionCompressHTML": {
"message": "comprimir contenido HTML",
"description": "Options page label: 'compress HTML content'"
},
"optionRemoveFrames": {
"message": "eliminar marcos (frame)",
"description": "Options page label: 'remove frames'"
},
"optionRemoveHiddenElements": {
"message": "eliminar elementos ocultos (hidden)",
"description": "Options page label: 'remove hidden elements'"
},
"optionRemovedElementsSelector": {
"message": "eliminar elementos específicos",
"description": "Options page label: 'remove specific elements'"
},
"optionsFileFormatSubTitle": {
"message": "Formato de archivo",
"description": "Options sub-title: 'File format'"
},
"optionFileFormat": {
"message": "formato",
"description": "Options page label: 'format'"
},
"optionFileFormatSelectHTML": {
"message": "HTML",
"description": "Options page label: 'HTML'"
},
"optionFileFormatSelectSelfExtractingUniversal": {
"message": "ZIP autoextraíble (universal)",
"description": "Options page label: 'self-extracting ZIP (universal)'"
},
"optionFileFormatSelectSelfExtracting": {
"message": "ZIP autoextraíble",
"description": "Options page label: 'self-extracting ZIP'"
},
"optionFileFormatSelectZIP": {
"message": "ZIP",
"description": "Options page label: 'ZIP'"
},
"optionPassword": {
"message": "contraseña",
"description": "Options page label: 'password'"
},
"optionCreateRootDirectory": {
"message": "crear un directorio raíz",
"description": "Options page label: 'create a root directory'"
},
"optionDisableCompression": {
"message": "deshabilitar compresión",
"description": "Options page label: 'disable compression'"
},
"optionPreventAppendedData": {
"message": "no añadir datos después de los datos ZIP",
"description": "Options page label: 'do not append data after the ZIP data'"
},
"optionInsertTextBody": {
"message": "hacer buscable el texto",
"description": "Options page label: 'make text searchable'"
},
"optionInsertEmbeddedImage": {
"message": "imagen incrustada",
"description": "Options page label: 'embed image'"
},
"optionInsertEmbeddedScreenshotImage": {
"message": "captura de pantalla",
"description": "Options page label: 'page screenshot'"
},
"optionInsertEmbeddedCustomImage": {
"message": "imagen personalizada",
"description": "Options page label: 'custom image'"
},
"optionsInfobarSubTitle": {
"message": "Barra informativa",
"description": "Options sub-title: 'Infobar'"
},
"optionsImagesSubTitle": {
"message": "Imágenes",
"description": "Options sub-title: 'Images'"
},
"optionGroupDuplicateImages": {
"message": "agrupar imágenes duplicadas combinadamente",
"description": "Options page label: 'group duplicate images together'"
},
"optionImageReductionFactor": {
"message": "factor de reducción del tamaño de la imagen",
"description": "Options page label: 'image reduction factor'"
},
"optionLoadDeferredImages": {
"message": "guardar imágenes diferidas",
"description": "Options page label: 'save deferred images'"
},
"optionLoadDeferredImagesMaxIdleTime": {
"message": "periodo máximo de espera (ms)",
"description": "Options page label: 'maximum idle time (ms)'"
},
"optionLoadDeferredImagesKeepZoomLevel": {
"message": "alejar la página",
"description": "Options page label: 'zoom out the page'"
},
"optionLoadDeferredImagesDispatchScrollEvent": {
"message": "enviar evento \"scroll\"",
"description": "Options page label: 'dispatch \"scroll\" event'"
},
"optionLoadDeferredImagesBeforeFrames": {
"message": "guardar marco (frame) diferidas",
"description": "Options page label: 'load deferred frames'"
},
"optionRemoveAlternativeImages": {
"message": "eliminar imágenes para resoluciones alternativas de pantalla",
"description": "Options page label: 'remove images for alternative screen resolutions'"
},
"optionsFontsSubTitle": {
"message": "Fuentes",
"description": "Options sub-title: 'Fonts'"
},
"optionRemoveUnusedFonts": {
"message": "eliminar fuentes no usadas",
"description": "Options page label: 'remove unused fonts'"
},
"optionRemoveAlternativeFonts": {
"message": "eliminar fuentes alternativas",
"description": "Options page label: 'remove alternative fonts'"
},
"optionsStylesheetsSubTitle": {
"message": "Hojas de estilo",
"description": "Options sub-title: 'Stylesheets'"
},
"optionCompressCSS": {
"message": "comprimir contenido CSS",
"description": "Options page label: 'compress CSS content'"
},
"optionGroupDuplicateStylesheets": {
"message": "agrupar hojas de estilo duplicadas combinadamente",
"description": "Options page label: 'group duplicate stylesheets together'"
},
"optionMoveStylesInHead": {
"message": "mover al elemento de head los estilos que se encuentran fuera de él",
"description": "Options page label: 'move in the head element the styles found outside of it'"
},
"optionRemoveUnusedStyles": {
"message": "eliminar estilos no usados",
"description": "Options page label: 'remove unused styles'"
},
"optionRemoveAlternativeMedias": {
"message": "eliminar hojas de estilo para dispositivos alternativos a las pantallas",
"description": "Options page label: 'remove stylesheets for alternative devices to screens'"
},
"optionsNetworkSubTitle": {
"message": "Red",
"description": "Options sub-title: 'Network'"
},
"optionsBlockedResources": {
"message": "recursos bloqueados",
"description": "Options page label: 'blocked resources'"
},
"optionsAcceptHeaders": {
"message": "Cabecera \"Accept\"",
"description": "Options page label: '\"Accept\" header'"
},
"optionResourceScript": {
"message": "scripts",
"description": "Options page label: 'scripts'"
},
"optionResourceVideo": {
"message": "videos",
"description": "Options page label: 'videos'"
},
"optionResourceAudio": {
"message": "audios",
"description": "Options page label: 'audios'"
},
"optionResourceDocument": {
"message": "documentos",
"description": "Options page label: 'documents'"
},
"optionResourceFont": {
"message": "fuentes",
"description": "Options page label: 'fonts'"
},
"optionResourceStylesheet": {
"message": "hojas de estilo",
"description": "Options page label: 'stylesheets'"
},
"optionResourceImage": {
"message": "imágenes",
"description": "Options page label: 'images'"
},
"optionsDestinationSubTitle": {
"message": "Destino",
"description": "Options sub-title: 'Destination'"
},
"optionsBookmarkSubTitle": {
"message": "Marcadores",
"description": "Options sub-title: 'Bookmarks'"
},
"optionsAutoSaveSubTitle": {
"message": "Auto-guardado",
"description": "Options sub-title: 'Auto-save'"
},
"optionsAutoSettingsSubTitle": {
"message": "Reglas de auto-guardado",
"description": "Options sub-title: 'Auto-settings rules'"
},
"optionsDeleteDisplayedRulesConfirm": {
"message": "Confirmar la eliminación de todas las reglas mostradas",
"description": "Popup text 'Confirm the deletion of all displayed rules'"
},
"optionsDeleteRulesTooltip": {
"message": "Elimina todas las reglas mostradas",
"description": "Popup text 'Delete all displayed rules'"
},
"optionsAutoSettingsUrl": {
"message": "URL",
"description": "Options label in the Auto-settings rules: 'URL'"
},
"optionsAutoSettingsUrlPlaceholder": {
"message": "Escriba una URL parcial o completa (ej. ejemplo.com)",
"description": "Placeholder in the Auto-settings rules: 'Type a complete or partial URL (e.g. example.com)'"
},
"optionsAutoSettingsProfile": {
"message": "Perfil",
"description": "Options label in the Auto-settings rules: 'Profile'"
},
"optionsAutoSettingsAutoSaveProfile": {
"message": "Perfil de auto-guardado",
"description": "Options label in the Auto-settings rules: 'Auto-save profile'"
},
"optionsAutoSettingsShowAllProfiles": {
"message": "mostrar todos los perfiles",
"description": "Options label in the Auto-settings rules: 'display all profiles'"
},
"optionsAutoSettingsShowAutoSaveProfile": {
"message": "mostrar columna 'Perfil de auto-guardado'",
"description": "Options label in the Auto-settings rules: 'display 'Auto-save profile' column'"
},
"optionsUpdateRuleTooltip": {
"message": "Actualizar la regla",
"description": "Popup text 'Update the rule' in the options page"
},
"optionsDeleteRuleTooltip": {
"message": "Eliminar la regla",
"description": "Popup text 'Delete the rule' in the options page"
},
"optionsAddRuleTooltip": {
"message": "Añadir la regla",
"description": "Popup text 'Add the rule' in the options page"
},
"optionsValidateChangesTooltip": {
"message": "Validar cambios",
"description": "Popup text 'Validate changes' in the options page"
},
"optionsCancelChangesTooltip": {
"message": "Cancelar cambios",
"description": "Popup text 'Cancel changes' in the options page"
},
"optionsDeleteRuleConfirm": {
"message": "Confirmar la eliminación de la regla seleccionada",
"description": "Popup text 'Confirm the deletion of the selected rule' in the options page"
},
"optionAutoSaveLoadOrUnload": {
"message": "auto-guardar tras cargar la página o al purgar la página",
"description": "auto-save after page load or on page unload"
},
"optionAutoSaveLoad": {
"message": "auto-guardar tras cargar la página",
"description": "Options page label: 'auto-save after page load'"
},
"optionAutoSaveUnload": {
"message": "auto-guardar al purgar la página",
"description": "Options page label: 'auto-save on page unload'"
},
"optionAutoSaveDiscard": {
"message": "auto-guardado al descartar la pestaña",
"description": "Options page label: 'auto-save on tab discard'"
},
"optionAutoSaveRemove": {
"message": "auto-guardado al cerrar la pestaña",
"description": "Options page label: 'auto-save on tab removal'"
},
"optionAutoSaveDelay": {
"message": "retardo de auto-guardado tras cargar la página (s)",
"description": "Options page label: 'auto-save waiting delay after page load (s)'"
},
"optionAutoSaveRepeat": {
"message": "auto-guardar periódicamente",
"description": "Options page label: 'auto-save periodically'"
},
"optionAutoSaveRepeatDelay": {
"message": "periodo (s)",
"description": "Options page label: 'period (s)'"
},
"optionAutoSaveExternalSave": {
"message": "guardar la página con SingleFile Companion",
"description": "Options page label: 'save the page with SingleFile Companion'"
},
"optionsEditorSubTitle": {
"message": "editor de anotaciones",
"description": "Options sub-title: 'Annotation editor'"
},
"optionOpenEditor": {
"message": "anotar página antes de guardarla",
"description": "Options page label: 'annotate the page before saving'"
},
"optionOpenSavedPage": {
"message": "abrir las páginas guardadas en una nueva pestaña",
"description": "Options page label: 'open saved pages in a new tab'"
},
"optionAutoOpenEditor": {
"message": "abrir páginas guardadas con SingleFile en el editor de anotaciones",
"description": "Options page label: 'open pages saved with SingleFile in the annotation editor'"
},
"optionDefaultEditorMode": {
"message": "modo predeterminado",
"description": "Options page label: 'default mode'"
},
"optionDefaultEditorModeNormal": {
"message": "normal",
"description": "Options page label: 'default mode > normal'"
},
"optionDefaultEditorModeEdit": {
"message": "editar la página",
"description": "Options page label: 'default mode > edit the page'"
},
"optionDefaultEditorModeFormat": {
"message": "formatear la página",
"description": "Options page label: 'default mode > format the page'"
},
"optionDefaultEditorModeCut": {
"message": "eliminar elementos",
"description": "Options page label: 'default mode > remove elements'"
},
"optionDefaultEditorModeCutExternal": {
"message": "eliminar los elementos externos",
"description": "Options page label: 'default mode > remove external elements'"
},
"optionApplySystemTheme": {
"message": "aplicar diseño del sistema al formatear una páginae",
"description": "Title of the button 'apply the system theme when formatting a page'"
},
"optionContentWidth": {
"message": "ancho del contenido al formatear una página (em)",
"description": "Options page label: 'content width when formatting a page (em)'"
},
"optionWarnUnsavedPage": {
"message": "mostrar advertencia al salir de una página con cambios no guardados",
"description": "Title of the button 'warn if leaving page with unsaved changes'"
},
"optionDisplayInfobarInEditor": {
"message": "mostrar la barra informativa",
"description": "Title of the button 'display the infobar'"
},
"optionsMiscSubTitle": {
"message": "Miscelánea",
"description": "Options sub-title: 'Misc.'"
},
"optionBackgroundSave": {
"message": "guardar páginas en segundo plano",
"description": "Options page label: 'save pages in background'"
},
"optionDisplayStats": {
"message": "mostrar estadísticas en la consola tras el procesado",
"description": "Options page label: 'display stats in the console after processing'"
},
"optionSetMaxResourceSize": {
"message": "establecer el tamaño máximo",
"description": "Options page label: 'set maximum size'"
},
"optionMaxResourceSize": {
"message": "tamaño máximo (MB)",
"description": "Options page label: 'maximum size (MB)'"
},
"optionSetMaxResourceDelay": {
"message": "establecer el tiempo máximo de descarga",
"description": "Options page label: 'set maximum download time'"
},
"optionMaxResourceDelay": {
"message": "tiempo máximo de descarga (s)",
"description": "Options page label: 'maximum download time (s)'"
},
"optionPassReferrerOnError": {
"message": "pasar el encabezado \"Referer\" después de un error de solicitud de origen cruzado",
"description": "Options page label: 'pass \"Referer\" header after a cross-origin request error'"
},
"optionSaveRawPage": {
"message": "guardar página en crudo",
"description": "Options page label: 'save raw page'"
},
"optionInsertMetaCSP": {
"message": "establecer la política de seguridad del contenido",
"description": "Options page label: 'set content security policy'"
},
"optionSaveToClipboard": {
"message": "guardar en el portapapeles",
"description": "Options page label: 'copy to clipboard'"
},
"optionSaveToFilesystem": {
"message": "guardar en el sistema de archivos",
"description": "Options page label: 'save to filesystem'"
},
"optionSharePage": {
"message": "compartir página",
"description": "Options page label: 'share page'"
},
"optionAddProof": {
"message": "añadir prueba de existencia",
"description": "Options page label: 'add proof of existence'"
},
"optionsAddProofConfirm": {
"message": "Confirm you allow SingleFile to send to the Woleet API a SHA256 hash of each page you are going to save. You can find more information about this feature in the help page or by clicking on the question mark next to the option.",
"description": "Popup text displayed wen enabling the option 'add proof of existence'"
},
"optionWoleetKey": {
"message": "token de acceso",
"description": "Options page label: 'access token'"
},
"optionSaveToGDrive": {
"message": "subir a Google Drive",
"description": "Options page label: 'upload to Google Drive'"
},
"optionSaveToDropbox": {
"message": "subir a Dropbox",
"description": "Options page label: 'upload to Dropbox'"
},
"optionSaveToGitHub": {
"message": "subir a GitHub",
"description": "Options page label: 'upload to GitHub'"
},
"optionGitHubToken": {
"message": "token de acceso",
"description": "Options page label: 'access token'"
},
"optionGitHubUser": {
"message": "nombre de usuario",
"description": "Options page label: 'user name'"
},
"optionGitHubRepository": {
"message": "nombre del repositorio",
"description": "Options page label: 'repository name'"
},
"optionGitHubBranch": {
"message": "nombre de la rama",
"description": "Options page label: 'branch name'"
},
"optionSaveToS3": {
"message": "subir a Amazon S3",
"description": "Options page label: 'upload to Amazon S3'"
},
"optionS3Domain": {
"message": "dominio",
"description": "Options page label: 'domain'"
},
"optionS3Region": {
"message": "región",
"description": "Options page label: 'region'"
},
"optionS3Bucket": {
"message": "bucket nombre",
"description": "Options page label: 'bucket name'"
},
"optionS3AccessKey": {
"message": "clave de acceso",
"description": "Options page label: 'access key'"
},
"optionS3SecretKey": {
"message": "clave secreta",
"description": "Options page label: 'secret key'"
},
"optionSaveWithWebDAV": {
"message": "subir a un servidor WebDAV",
"description": "Options page label: 'upload to a WebDAV server'"
},
"optionWebDAVURL": {
"message": "URL",
"description": "Options page label: 'URL'"
},
"optionWebDAVUser": {
"message": "identificador de usuario",
"description": "Options page label: 'user identifier'"
},
"optionWebDAVPassword": {
"message": "contraseña",
"description": "Options page label: 'password'"
},
"optionSaveWithMCP": {
"message": "subir a un servidor MCP",
"description": "Options page label: 'upload to an MCP server'"
},
"optionMCPServerUrl": {
"message": "URL del servidor",
"description": "Options page label: 'server URL'"
},
"optionMCPAuthToken": {
"message": "token de autenticación",
"description": "Options page label: 'authentication token'"
},
"optionSaveWithCompanion": {
"message": "guardar la página con SingleFile Companion",
"description": "Options page label: 'save with SingleFile Companion'"
},
"optionSaveCreatedBookmarks": {
"message": "guardar la página de un marcador recién creado",
"description": "Options page label: 'save the page of a newly created bookmark'"
},
"optionReplaceBookmarkURL": {
"message": "enlazar el nuevo marcador a la página guardada",
"description": "Options page label: 'link the new bookmark to the saved page'"
},
"optionAllowedBookmarkFolders": {
"message": "carpetas permitidas",
"description": "Options page label: 'allowed folders'"
},
"optionIgnoredBookmarkFolders": {
"message": "carpetas ignoradas",
"description": "Options page label: 'ignored folders'"
},
"optionsHelpLink": {
"message": "ayuda",
"description": "Options help link"
},
"optionSynchronize": {
"message": "sincronizar opciones",
"description": "Options label: 'synchronize options'"
},
"optionsResetButton": {
"message": "Restablecer",
"description": "Options button: 'Reset'"
},
"optionsResetTooltip": {
"message": "Restablece todas las opciones a sus valores predeterminados",
"description": "Options 'Reset' button tooltip"
},
"optionsResetConfirm": {
"message": "Confirmar el restablecimiento de todas las opciones o del perfil actual",
"description": "Popup text 'Confirm the reset of all options or the current profile' in the options page"
},
"optionsResetAllButton": {
"message": "Restablecer todas las ocpiones",
"description": "Options confirm button: 'Reset all options'"
},
"optionsResetCurrentButton": {
"message": "Restablecer el perfil actual",
"description": "Options confirm button: 'Reset current profile'"
},
"optionsOKButton": {
"message": "Aceptar",
"description": "Options confirm button: 'OK'"
},
"optionsCancelButton": {
"message": "Cancelar",
"description": "Options confirm button: 'Cancel'"
},
"optionsExportButton": {
"message": "Exportar",
"description": "Options button: 'Export'"
},
"optionsImportButton": {
"message": "Importar",
"description": "Options button: 'Import'"
},
"logPanelDeferredImages": {
"message": "Imágenes diferidas",
"description": "Label 'Deferred images' in the log panel"
},
"logPanelFrameContents": {
"message": "Contenidos de marco (frame)",
"description": "Label 'Frame contents' in the log panel"
},
"logPanelEmbeddedImage": {
"message": "Imagen incrustada",
"description": "Label 'Embedded image' in the log panel"
},
"logPanelStep": {
"message": "Nivel",
"description": "Label 'Step' (for 'Step x / 4') in the log panel"
},
"logPanelWidth": {
"message": "192",
"description": "Width of the log panel in pixels, it should be adjusted for the longest label beginning with 'log' (e.g. 'logPanelDeferredImages')"
},
"topPanelError": {
"message": "Error de SingleFile: ",
"description": "Label 'SingleFile error: ' in the top panel when displaying an error message"
},
"topPanelEmbeddedImageButton": {
"message": "Abrir imagen...",
"description": "Top panel button 'Open image...' when embedding an image"
},
"topPanelSharePageButton": {
"message": "Compartir página...",
"description": "Top panel button 'Share page...' when sharing a page"
},
"topPanelShareSelectionButton": {
"message": "Compartir selección...",
"description": "Top panel button 'Share selection...' when sharing selected content"
},
"profileDefaultSettings": {
"message": "Configuración predeterminada",
"description": "Label 'Default settings' of the default settings in the options page"
},
"profileDisabled": {
"message": "Deshabilitado",
"description": "Label 'Disabled' of the disabled profile name in the options page"
},
"profileAddButtonTooltip": {
"message": "Añade un perfil nuevo",
"description": "Tooltip 'Add a new profile' in the options page"
},
"profileRenameButtonTooltip": {
"message": "Renombra el perfil",
"description": "Tooltip 'Rename the profile' in the options page"
},
"profileDeleteButtonTooltip": {
"message": "Elimina el perfil",
"description": "Tooltip 'Delete the profile' in the options page"
},
"profileAddPrompt": {
"message": "Introducir un nombre para este nuevo perfil",
"description": "Popup text 'Enter a name for this new profile' in the options page"
},
"profileDeleteConfirm": {
"message": "Confirmar la eliminación del perfil seleccionado",
"description": "Popup text 'Confirm the deletion of the selected profile' in the options page"
},
"profileRenamePrompt": {
"message": "Introducir un nuevo nombre para el perfil seleccionado",
"description": "Popup text 'Enter a new name for the selected profile' in the options page"
},
"editorAddYellowNote": {
"message": "Añadir una nota amarilla",
"description": "Title of the button 'Add a yellow note' in the editor"
},
"editorAddPinkNote": {
"message": "Añadir una nota rosa",
"description": "Title of the button 'Add a pink note' in the editor"
},
"editorAddBlueNote": {
"message": "Añadir una nota azul",
"description": "Title of the button 'Add a blue note' in the editor"
},
"editorAddGreenNote": {
"message": "Añadir una nota verde",
"description": "Title of the button 'Add a green note' in the editor"
},
"editorHighlightYellow": {
"message": "Resaltar texto seleccionado en amarillo",
"description": "Title of the button 'Highlight selected text in yellow' in the editor"
},
"editorHighlightPink": {
"message": "Resaltar texto seleccionado en rosa",
"description": "Title of the button 'Highlight selected text in pink' in the editor"
},
"editorHighlightBlue": {
"message": "Resaltar texto seleccionado en azul",
"description": "Title of the button 'Highlight selected text in blue' in the editor"
},
"editorHighlightGreen": {
"message": "Resaltar texto seleccionado en verde",
"description": "Title of the button 'Highlight selected text in green' in the editor"
},
"editorToggleNotes": {
"message": "Mostrar/ocultar notas",
"description": "Title of the button 'Display/hide notes' in the editor"
},
"editorToggleHighlights": {
"message": "Mostrar/ocultar el texto resaltado",
"description": "Title of the button 'Display/hide the highlighted text' in the editor"
},
"editorRemoveHighlight": {
"message": "Eliminar el texto resaltado seleccionado",
"description": "Title of the button 'Remove the selected highlighted text' in the editor"
},
"editorEditPage": {
"message": "Activar/desactivar solo lectura",
"description": "Title of the button 'Enable/disable read-only' in the editor"
},
"editorFormatPage": {
"message": "Formatear la página para una mejor legibilidad",
"description": "Title of the button 'Format the page for better readability' in the editor"
},
"editorCutInnerPage": {
"message": "Activar/desactivar la eliminación de elementos internos",
"description": "Title of the button 'Enable/disable removing of internal elements' in the editor"
},
"editorCutOuterPage": {
"message": "Activar/desactivar la eliminación de elementos externos",
"description": "Title of the button 'Enable/disable removing of external elements' in the editor"
},
"editorUndoCutPage": {
"message": "Restaurar el último elemento eliminado",
"description": "Title of the button 'Restore last removed element' in the editor"
},
"editorUndoAllCutPage": {
"message": "Restaurar todos los elementos eliminados",
"description": "Title of the button 'Restore all removed elements' in the editor"
},
"editorRedoCutPage": {
"message": "Eliminar el último elemento restaurado",
"description": "Title of the button 'Remove last restored element' in the editor"
},
"editorSavePage": {
"message": "Guardar la página",
"description": "Title of the button 'Save the page' in the editor"
},
"editorPrintPage": {
"message": "Imprimir la página",
"description": "Title of the button 'Print the page' in the editor"
},
"editorImportMht": {
"message": "Importar archivo MHTML",
"description": "Title of the button 'Import MHTML file' in the editor"
},
"pendingsTitle": {
"message": "Guardados pendientes",
"description": "Title of the pending save page 'Pending saves' in the editor"
},
"pendingsCancelAllButton": {
"message": "Cancelar todo",
"description": "Pending saves button 'Cancel all'"
},
"pendingsURLTitle": {
"message": "URL",
"description": "Title of the first column in the table of the pending saves 'URL'"
},
"pendingsTitleTitle": {
"message": "Título",
"description": "Title of the first column in the table of the pending saves 'Title'"
},
"pendingsStatusTitle": {
"message": "estado",
"description": "Title of the second column in the table of the pending saves 'status'"
},
"pendingsPendingStatus": {
"message": "pendiente",
"description": "Value of 'status' for pending saves"
},
"pendingsProcessingStatus": {
"message": "procesando",
"description": "Value of 'status' for current saves"
},
"pendingsCancellingStatus": {
"message": "cancelando",
"description": "Value of 'status' for cancelled saves"
},
"pendingsNoPendings": {
"message": "No hay guardados pendientes",
"description": "Label displayed when they are no pending saves"
},
"pendingsAddUrlsButton": {
"message": "Añadir URLs",
"description": "button 'Add URLs'"
},
"pendingsAddUrls": {
"message": "Introduce una lista de URLs separadas por una nueva línea",
"description": "Label of the add URLs input"
},
"pendingsAddUrlsOKButton": {
"message": "OK",
"description": "Add URLs popup confirm button: 'OK'"
},
"pendingsAddUrlsCancelButton": {
"message": "Cancelar",
"description": "Add URLs popup cancel button: 'Cancel'"
},
"batchSaveUrlsTitle": {
"message": "Guardar URLs en lote",
"description": "Title of the 'batch save URLs' page"
},
"batchSaveUrlsNoURLs": {
"message": "Sin URLs",
"description": "Label displayed when they are no URLs"
},
"batchSaveUrlsAddUrlButton": {
"message": "Añadir URL",
"description": "label of the button 'Add URL'"
},
"batchSaveUrlsAddUrlsButton": {
"message": "Añadir URLs...",
"description": "label of the button 'Add URLs...'"
},
"batchSaveUrlsRemoveAllButton": {
"message": "Eliminar todo",
"description": "label of the button 'Remove all'"
},
"batchSaveUrlsSavePagesButton": {
"message": "Guardar páginas",
"description": "label of the button 'Save pages'"
},
"batchSaveUrlsURLTitle": {
"message": "URL",
"description": "Title of the column in the table of the URLs"
},
"optionSaveToRestFormApi": {
"message": "subir a un formulario REST Api",
"description": "Options page label: 'upload to a REST Form API'"
},
"optionRestFormApiUrl": {
"message": "URL",
"description": "Options page label: 'URL'"
},
"optionRestFormApiToken": {
"message": "authorization token",
"description": "Options page label: 'authorization token'"
},
"optionRestFormApiFileFieldName": {
"message": "archive data field name",
"description": "Options page label: 'archive data field name'"
},
"optionRestFormApiUrlFieldName": {
"message": "archive URL field name",
"description": "Options page label: 'archive URL field name'"
},
"optionsEditorTitle": {
"message": "Editor de opciones",
"description": "Options title: 'Options editor'"
},
"optionsEditorSaveButton": {
"message": "Guardar",
"description": "Options editor button: 'Save'"
},
"optionsEditorConfigSaved": {
"message": "Configuración guardada",
"description": "Options editor message: 'Configuration saved'"
},
"optionsEditorInvalidJSON": {
"message": "JSON no válido",
"description": "Options editor error message: 'Invalid JSON'"
}
}
================================================
FILE: _locales/fr/messages.json
================================================
{
"extensionDescription": {
"message": "Sauvegardez une page complète dans un simple fichier HTML",
"description": "Description of the extension."
},
"commandSaveSelectedTabs": {
"message": "Sauvegarder les onglets sélectionnés ou leurs contenus sélectionnés",
"description": "Command (Ctrl+Shift+Y): 'Save the selected tabs or their selected contents'"
},
"commandSaveAllTabs": {
"message": "Sauver tous les onglets",
"description": "Command (Ctrl+Shift+U): 'Save all tabs'"
},
"commandCustomShortcut": {
"message": "Raccourci personnalisé",
"description": "Command label: 'Custom shortcut'"
},
"commandCustomShortcut0": {
"message": "Raccourci personnalisé #1",
"description": "Command label: 'Custom shortcut #1'"
},
"commandCustomShortcut1": {
"message": "Raccourci personnalisé #2",
"description": "Command label: 'Custom shortcut #2'"
},
"commandCustomShortcut2": {
"message": "Raccourci personnalisé #3",
"description": "Command label: 'Custom shortcut #3'"
},
"commandCustomShortcut3": {
"message": "Raccourci personnalisé #4",
"description": "Command label: 'Custom shortcut #4'"
},
"commandCustomShortcut4": {
"message": "Raccourci personnalisé #5",
"description": "Command label: 'Custom shortcut #5'"
},
"commandCustomShortcut5": {
"message": "Raccourci personnalisé #6",
"description": "Command label: 'Custom shortcut #6'"
},
"commandCustomShortcut6": {
"message": "Raccourci personnalisé #7",
"description": "Command label: 'Custom shortcut #7'"
},
"commandCustomShortcut7": {
"message": "Raccourci personnalisé #8",
"description": "Command label: 'Custom shortcut #8'"
},
"commandCustomShortcut8": {
"message": "Raccourci personnalisé #9",
"description": "Command label: 'Custom shortcut #9'"
},
"commandCustomShortcut9": {
"message": "Raccourci personnalisé #10",
"description": "Command label: 'Custom shortcut #10'"
},
"menuSavePage": {
"message": "Sauver la page avec SingleFile",
"description": "Menu entry: 'Save page with SingleFile'"
},
"menuSaveSelectedLinks": {
"message": "Sauver les liens selectionnés",
"description": "Menu entry: 'Save selected links'"
},
"menuEditPage": {
"message": "Annoter la page...",
"description": "Menu entry: 'Annotate the page...'"
},
"menuEditAndSavePage": {
"message": "Annoter et sauver la page...",
"description": "Menu entry: 'Annotate and save the page...'"
},
"menuSaveWithProfile": {
"message": "Sauver la page avec le profil",
"description": "Menu entry: 'Save with profile'"
},
"menuViewPendingSaves": {
"message": "Afficher les sauvegardes en cours...",
"description": "Menu entry: 'View pending saves...'"
},
"menuSelectProfile": {
"message": "Sélectionner le profil par défaut",
"description": "Menu entry: 'Select the default profile'"
},
"menuUpdateRule": {
"message": "Sélectionner le profil de la règle courante",
"description": "Menu entry: 'Select the profile of the current rule'"
},
"menuCreateDomainRule": {
"message": "Sélectionner le profil du domaine courant",
"description": "M
gitextract_jf_v4fxn/
├── .github/
│ ├── FUNDING.yml
│ └── ISSUE_TEMPLATE/
│ ├── bug_report.md
│ └── feature_request.md
├── .gitignore
├── LICENSE
├── README.MD
├── _locales/
│ ├── az/
│ │ └── messages.json
│ ├── de/
│ │ └── messages.json
│ ├── en/
│ │ └── messages.json
│ ├── es/
│ │ └── messages.json
│ ├── fr/
│ │ └── messages.json
│ ├── it/
│ │ └── messages.json
│ ├── ja/
│ │ └── messages.json
│ ├── nl_NL/
│ │ └── messages.json
│ ├── pl/
│ │ └── messages.json
│ ├── pt_PT/
│ │ └── messages.json
│ ├── pt_br/
│ │ └── messages.json
│ ├── ru/
│ │ └── messages.json
│ ├── sv/
│ │ └── messages.json
│ ├── tr/
│ │ └── messages.json
│ ├── uk/
│ │ └── messages.json
│ ├── zh_CN/
│ │ └── messages.json
│ └── zh_TW/
│ └── messages.json
├── build-dev.sh
├── build-extension.sh
├── build.sh
├── eslint.config.mjs
├── faq.md
├── lib/
│ ├── chrome-browser-polyfill.js
│ ├── single-file-background.js
│ ├── single-file-bootstrap.bundle.js
│ ├── single-file-bootstrap.js
│ ├── single-file-extension-background.js
│ ├── single-file-extension-bootstrap.js
│ ├── single-file-extension-core.js
│ ├── single-file-extension-editor-helper.js
│ ├── single-file-extension-editor.js
│ ├── single-file-extension-frames.js
│ ├── single-file-extension-offscreen-document.js
│ ├── single-file-extension.js
│ ├── single-file-frames.bundle.js
│ ├── single-file-frames.js
│ ├── single-file-hooks-frames.js
│ ├── single-file-infobar.js
│ ├── single-file-z-worker.js
│ ├── single-file-zip.js
│ └── single-file.js
├── manifest.json
├── package.json
├── privacy.md
├── rollup.config.dev.js
├── rollup.config.js
└── src/
├── core/
│ ├── bg/
│ │ ├── autosave-util.js
│ │ ├── autosave.js
│ │ ├── bookmarks.js
│ │ ├── bootstrap.js
│ │ ├── business.js
│ │ ├── companion.js
│ │ ├── config.js
│ │ ├── devtools.js
│ │ ├── download-util.js
│ │ ├── downloads.js
│ │ ├── editor.js
│ │ ├── external-messages.js
│ │ ├── index.js
│ │ ├── offscreen-document.js
│ │ ├── offscreen.js
│ │ ├── page-orphan-hack.js
│ │ ├── sw-reload-hack.js
│ │ ├── tabs-data.js
│ │ ├── tabs-util.js
│ │ └── tabs.js
│ ├── common/
│ │ └── download.js
│ ├── content/
│ │ ├── content-bootstrap.js
│ │ ├── content-frames.js
│ │ └── content.js
│ └── devtools/
│ ├── devtools.html
│ └── devtools.js
├── index.js
├── lib/
│ ├── dropbox/
│ │ └── dropbox.js
│ ├── gdrive/
│ │ └── gdrive.js
│ ├── github/
│ │ └── github.js
│ ├── mcp/
│ │ └── mcp.js
│ ├── mhtml-to-html/
│ │ ├── convert.js
│ │ ├── mod.js
│ │ ├── parse.js
│ │ ├── srcset-parser.js
│ │ ├── util.js
│ │ └── vendor/
│ │ ├── LICENSE.txt
│ │ ├── README.md
│ │ └── csstree.esm.js
│ ├── readability/
│ │ ├── Readability-readerable.js
│ │ └── Readability.js
│ ├── rest-form-api/
│ │ └── index.js
│ ├── s3/
│ │ └── s3.js
│ ├── single-file/
│ │ ├── background.js
│ │ ├── browser-polyfill/
│ │ │ └── chrome-browser-polyfill.js
│ │ ├── fetch/
│ │ │ ├── bg/
│ │ │ │ └── fetch.js
│ │ │ └── content/
│ │ │ └── content-fetch.js
│ │ ├── frame-tree/
│ │ │ └── bg/
│ │ │ └── frame-tree.js
│ │ └── lazy/
│ │ └── bg/
│ │ └── lazy-timeout.js
│ ├── webdav/
│ │ └── webdav.js
│ ├── woleet/
│ │ └── woleet.js
│ └── yabson/
│ └── yabson.js
└── ui/
├── bg/
│ ├── index.js
│ ├── ui-batch-save-urls.js
│ ├── ui-button.js
│ ├── ui-commands.js
│ ├── ui-editor.js
│ ├── ui-help.js
│ ├── ui-menus.js
│ ├── ui-options-editor.js
│ ├── ui-options.js
│ ├── ui-panel.js
│ ├── ui-pendings.js
│ └── ui-viewer.js
├── common/
│ └── common-content-ui.js
├── content/
│ ├── content-ui-editor-web.js
│ └── content-ui.js
└── pages/
├── batch-save-urls.css
├── batch-save-urls.html
├── editor-frame-web.css
├── editor-mask-web.css
├── editor-note-web.css
├── editor.css
├── editor.html
├── help.css
├── help.html
├── help_zh_CN.html
├── offscreen-document.html
├── options-editor.html
├── options.css
├── options.html
├── panel.css
├── panel.html
├── pendings.css
├── pendings.html
└── viewer.html
Showing preview only (438K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (4731 symbols across 74 files)
FILE: lib/chrome-browser-polyfill.js
method lastError (line 1) | get lastError(){return e.runtime.lastError}
method tabId (line 1) | get tabId(){return e.devtools.inspectedWindow.tabId}
FILE: lib/single-file-background.js
method lastError (line 1) | get lastError(){return e.runtime.lastError}
method tabId (line 1) | get tabId(){return e.devtools.inspectedWindow.tabId}
function r (line 1) | async function r(t,r,s){for(let a=0;a*e<=s.array.length;a++){const n={me...
function s (line 1) | async function s(e,r){const s=t++;return await browser.declarativeNetReq...
function n (line 1) | function n(e,t){e.delete(t)}
FILE: lib/single-file-bootstrap.bundle.js
method lastError (line 1) | get lastError(){return e.runtime.lastError}
method tabId (line 1) | get tabId(){return e.devtools.inspectedWindow.tabId}
function m (line 2) | function m(){a instanceof r&&(a.addEventListener("single-file-new-font-f...
function oe (line 2) | function oe(e,t,s){e.querySelectorAll("noscript:not(["+H+"])").forEach(e...
function ne (line 2) | function ne(e,t,s,o,n={usedFonts:new Map,canvases:[],images:[],posters:[...
function ie (line 2) | function ie(e,t=new Map){if(e){const s=[];for(const o of Array.from(e))i...
function ae (line 2) | function ae(e,t,s){if(e){const o=e.getPropertyValue("font-style")||"norm...
function re (line 2) | function re(e){const t=globalThis.chrome;if(e.openOrClosedShadowRoot)ret...
function le (line 2) | function le(e=""){return function(e){e=e.match(Y)?e.replace(Y,"$1"):e.re...
function de (line 2) | function de(e,t){let s=!1;if(t){const o=t.getPropertyValue("display"),n=...
function ce (line 2) | function ce(e,t,s){if(e.querySelectorAll("["+H+"]").forEach(e=>{e.textCo...
function ue (line 2) | function ue(e){if(e){const t=[];return e.querySelectorAll("style").forEa...
function me (line 2) | function me(e,t){if(t.getPropertyValue(e).endsWith("px"))return parseFlo...
function ge (line 2) | function ge(e){const t=e.doctype;let s="";return t&&(s="<!DOCTYPE "+t.no...
function he (line 2) | function he(e,t,s){try{return e.getComputedStyle(t,s)}catch(e){}}
function Ie (line 2) | async function Ie(e){if(be.documentElement){ye.clear();const o=be.body?M...
function Ae (line 2) | async function Ae(e,t,s){await Re("loadTimeout",()=>Se(e,t,s),t.loadDefe...
function ve (line 2) | async function ve(e,t,s){await Re("maxTimeout",async()=>{await Pe("loadT...
function Se (line 2) | async function Se(e,t,s){await Pe("idleTimeout"),function(e){e.loadDefer...
function Re (line 2) | async function Re(e,t,s,o){if(Te&&Te.runtime&&Te.runtime.sendMessage&&!o...
function Ne (line 2) | function Ne(e,t,s){const o=ye.get(e);o&&globalThis.clearTimeout(o),ye.se...
function Pe (line 2) | async function Pe(e){if(Te&&Te.runtime&&Te.runtime.sendMessage)try{await...
function Me (line 2) | function Me(e){const t=ye.get(e);ye.delete(e),t&&globalThis.clearTimeout...
function Ge (line 2) | function Ge(){globalThis.addEventListener("message",async e=>{if("string...
function Ke (line 2) | function Ke(){return globalThis.crypto.getRandomValues(new Uint32Array(3...
function $e (line 2) | async function $e(e){const t=e.sessionId;delete globalThis._singleFile_c...
function Xe (line 2) | function Xe(e){if(!globalThis._singleFile_cleaningUp){globalThis._single...
function Ze (line 2) | function Ze(e){e.frames.forEach(t=>Qe("responseTimeouts",e.sessionId,t.w...
function Je (line 2) | function Je(e,t,s,o){const n=it(e);!function(e,t,s,o,n){const i=[];let a...
function Qe (line 2) | function Qe(e,t,s){const o=je.get(t);if(o&&o[e]){const t=o[e][s];t&&(glo...
function et (line 2) | function et(e,t){const s=je.get(e);s&&s.responseTimeouts&&(s.responseTim...
function tt (line 2) | function tt(e,t,s){e.forEach((e,o)=>{const n=t+Fe+o;e.removeAttribute(Le...
function st (line 2) | function st(e){e.method=_e;try{qe.singlefile.processors.frameTree.initRe...
function ot (line 2) | function ot(e,t,s){if(e==qe&&Ue&&Ue.runtime&&Ue.runtime.sendMessage)Ue.r...
function nt (line 2) | function nt(e,t,s,o,n){const i=Le.preProcessDoc(e,t,o),a=Le.serialize(e)...
function it (line 2) | function it(e){let t=Array.from(e.querySelectorAll('iframe, frame, objec...
function ct (line 2) | function ct(e,t,s){return 3==e.nodeType?function(e){const t=e.parentNode...
function ut (line 2) | function ut(e){return Boolean(e.match(/^[ \t\n\f\r]/))}
function mt (line 2) | function mt(e){return e.tagName&&e.tagName.toUpperCase()}
function p (line 3) | async function p(){if(document.documentElement.dataset&&void 0!==documen...
function g (line 3) | function g(){return new Promise((e,t)=>{const o=new XMLHttpRequest;o.ope...
function b (line 3) | async function b(e){return i&&"content.autosave"==e.method?(async functi...
function S (line 3) | function S(){const e=document.querySelector("singlefile-infobar");e&&e.r...
function w (line 3) | async function w(){const e=o.helper;if((!l||c)&&!u)if(l=!0,r.autoSaveDel...
function T (line 3) | function T(){i&&r&&(r.autoSaveUnload||r.autoSaveLoadOrUnload||r.autoSave...
function A (line 3) | function A(){"hidden"==document.visibilityState&&r.autoSaveDiscard&&I({a...
function R (line 3) | function R(){!u&&(r.autoSaveUnload||r.autoSaveLoadOrUnload||r.autoSaveRe...
function I (line 3) | function I({autoSaveUnload:e,autoSaveDiscard:t,autoSaveRemove:n}){const ...
function C (line 3) | function C(e,t,{autoSaveUnload:n,autoSaveDiscard:a,autoSaveRemove:i}={})...
function D (line 3) | async function D(n){let a;h?a=await g():(P(n),function(e){s(e.body);cons...
function M (line 3) | async function M(e){if(137==e[0]&&80==e[1]&&78==e[2]&&71==e[3]){let t=ne...
function O (line 3) | function O(e){if(void 0===f){const t=o.helper,n=e.documentElement.firstC...
function P (line 3) | function P(e){e.querySelectorAll("*").forEach(e=>{const t=o.helper.getSh...
function o (line 4) | function o(o,i,t){if(!o.querySelector(n)){let t;i.infobarContent?t=i.inf...
function a (line 4) | async function a(){let n={displayInfobar:!0};const t=function(n,o="Singl...
FILE: lib/single-file-bootstrap.js
function m (line 1) | function m(){a instanceof r&&(a.addEventListener("single-file-new-font-f...
function oe (line 1) | function oe(e,t,s){e.querySelectorAll("noscript:not(["+H+"])").forEach(e...
function ne (line 1) | function ne(e,t,s,o,n={usedFonts:new Map,canvases:[],images:[],posters:[...
function ie (line 1) | function ie(e,t=new Map){if(e){const s=[];for(const o of Array.from(e))i...
function ae (line 1) | function ae(e,t,s){if(e){const o=e.getPropertyValue("font-style")||"norm...
function re (line 1) | function re(e){const t=globalThis.chrome;if(e.openOrClosedShadowRoot)ret...
function le (line 1) | function le(e=""){return function(e){e=e.match(Y)?e.replace(Y,"$1"):e.re...
function de (line 1) | function de(e,t){let s=!1;if(t){const o=t.getPropertyValue("display"),n=...
function ce (line 1) | function ce(e,t,s){if(e.querySelectorAll("["+H+"]").forEach(e=>{e.textCo...
function ue (line 1) | function ue(e){if(e){const t=[];return e.querySelectorAll("style").forEa...
function me (line 1) | function me(e,t){if(t.getPropertyValue(e).endsWith("px"))return parseFlo...
function ge (line 1) | function ge(e){const t=e.doctype;let s="";return t&&(s="<!DOCTYPE "+t.no...
function he (line 1) | function he(e,t,s){try{return e.getComputedStyle(t,s)}catch(e){}}
function Ie (line 1) | async function Ie(e){if(be.documentElement){ye.clear();const o=be.body?M...
function Ae (line 1) | async function Ae(e,t,s){await Re("loadTimeout",()=>Se(e,t,s),t.loadDefe...
function ve (line 1) | async function ve(e,t,s){await Re("maxTimeout",async()=>{await Pe("loadT...
function Se (line 1) | async function Se(e,t,s){await Pe("idleTimeout"),function(e){e.loadDefer...
function Re (line 1) | async function Re(e,t,s,o){if(Te&&Te.runtime&&Te.runtime.sendMessage&&!o...
function Ne (line 1) | function Ne(e,t,s){const o=ye.get(e);o&&globalThis.clearTimeout(o),ye.se...
function Pe (line 1) | async function Pe(e){if(Te&&Te.runtime&&Te.runtime.sendMessage)try{await...
function Me (line 1) | function Me(e){const t=ye.get(e);ye.delete(e),t&&globalThis.clearTimeout...
function Ge (line 1) | function Ge(){globalThis.addEventListener("message",async e=>{if("string...
function Ke (line 1) | function Ke(){return globalThis.crypto.getRandomValues(new Uint32Array(3...
function $e (line 1) | async function $e(e){const t=e.sessionId;delete globalThis._singleFile_c...
function Xe (line 1) | function Xe(e){if(!globalThis._singleFile_cleaningUp){globalThis._single...
function Ze (line 1) | function Ze(e){e.frames.forEach(t=>Qe("responseTimeouts",e.sessionId,t.w...
function Je (line 1) | function Je(e,t,s,o){const n=it(e);!function(e,t,s,o,n){const i=[];let a...
function Qe (line 1) | function Qe(e,t,s){const o=je.get(t);if(o&&o[e]){const t=o[e][s];t&&(glo...
function et (line 1) | function et(e,t){const s=je.get(e);s&&s.responseTimeouts&&(s.responseTim...
function tt (line 1) | function tt(e,t,s){e.forEach((e,o)=>{const n=t+Fe+o;e.removeAttribute(Le...
function st (line 1) | function st(e){e.method=_e;try{qe.singlefile.processors.frameTree.initRe...
function ot (line 1) | function ot(e,t,s){if(e==qe&&Ue&&Ue.runtime&&Ue.runtime.sendMessage)Ue.r...
function nt (line 1) | function nt(e,t,s,o,n){const i=Le.preProcessDoc(e,t,o),a=Le.serialize(e)...
function it (line 1) | function it(e){let t=Array.from(e.querySelectorAll('iframe, frame, objec...
function ct (line 1) | function ct(e,t,s){return 3==e.nodeType?function(e){const t=e.parentNode...
function ut (line 1) | function ut(e){return Boolean(e.match(/^[ \t\n\f\r]/))}
function mt (line 1) | function mt(e){return e.tagName&&e.tagName.toUpperCase()}
FILE: lib/single-file-extension-background.js
method lastError (line 1) | get lastError(){return e.runtime.lastError}
method tabId (line 1) | get tabId(){return e.devtools.inspectedWindow.tabId}
method lastError (line 1) | get lastError(){return e.runtime.lastError}
method tabId (line 1) | get tabId(){return e.devtools.inspectedWindow.tabId}
function a (line 1) | async function a(t,a,n){for(let o=0;o*e<=n.array.length;o++){const r={me...
function o (line 1) | function o(e,t){e.delete(t)}
function r (line 1) | async function r(e,t){let a;const n=new Promise((e,t)=>{browser.download...
function l (line 1) | async function l(e,t,a){e[a]&&!e[t]&&(e[t]=e[a],delete e[a])}
function d (line 1) | async function d(e){s&&delete s[e];const t=await f();if(t[e]){const a=t[...
function u (line 1) | function u(e){return s||(s={}),void 0===e||s[e]||(s[e]={}),s}
function f (line 1) | async function f(e){if(!i){const e=await browser.storage.local.get();i=e...
function m (line 1) | async function m(e){i=e,await browser.storage.local.set({tabsData:e})}
function E (line 1) | async function E(){const{sync:e}=await browser.storage.local.get();S=e?b...
function L (line 1) | async function L(e,t){const{rules:a}=await S.get(["rules"]),n=a.filter(e...
function R (line 1) | async function R(){await P;const{maxParallelWorkers:e,processInForegroun...
function M (line 1) | function M(e,t){return t.url.length-e.url.length}
function U (line 1) | function U(e){return e.url.toLowerCase().startsWith(b)}
function W (line 1) | async function W(e){if(e.method.endsWith(".get"))return await R();if(e.m...
function D (line 1) | async function D(){await P;const e=await B(),t=await S.get(e),a={};retur...
function F (line 1) | async function F(e,t){await P;const[a,n]=await Promise.all([L(e),f()]),o...
function N (line 1) | async function N(){return(await S.get(["rules"])).rules}
function _ (line 1) | async function _(){return Object.keys(await S.get()).filter(e=>e.startsW...
function B (line 1) | async function B(){return Object.keys(await S.get()).filter(e=>e.startsW...
function O (line 1) | async function O(e){const t=g+e;return(await S.get([t]))[t]}
function j (line 1) | async function j(e,t){const a=g+e;await S.set({[a]:t})}
function z (line 1) | async function z(e,t,a){if(!e)throw new Error("URL is empty");const n=aw...
function q (line 1) | async function q(e,t,a,n){if(!e||!t)throw new Error("URL is empty");cons...
function K (line 1) | async function K(){return(await S.get()).authInfo}
function $ (line 1) | async function $(){return(await S.get()).dropboxAuthInfo}
function V (line 1) | async function V(e){await S.set({authInfo:e})}
function G (line 1) | async function G(e){await S.set({dropboxAuthInfo:e})}
function J (line 1) | async function J(){let e=K();e.revokableAccessToken?V({revokableAccessTo...
function H (line 1) | async function H(){let e=$();e.revokableAccessToken?G({revokableAccessTo...
function Y (line 1) | function Y(e,t){return e.length==t.length&&e.every((e,a)=>e==t[a])}
function Z (line 1) | async function Z(e){if(e){const[t,a]=await Promise.all([f(),L(e.url)]);r...
function ne (line 1) | async function ne({tabIndex:e,content:t,filename:a,compressContent:n,sel...
function oe (line 1) | function oe(e){return e.url==ae}
function re (line 1) | async function re(e){return(await browser.tabs.query(e)).sort((e,t)=>e.i...
function ie (line 1) | function ie(e){return new Promise((t,a)=>{browser.tabs.onUpdated.addList...
function se (line 1) | async function se(e){const t=await browser.tabs.create({url:e.url,active...
function Ie (line 1) | function Ie(e,t){if(e.method.endsWith(".processInit")){delete u(t.tab.id...
function Ce (line 1) | function Ce(e){Re(e,Ue("error"))}
function Se (line 1) | function Se(e,t){Re(e,t?Ue("default",!0):Ue("end"))}
function Pe (line 1) | function Pe(e){Le(e)}
function Ee (line 1) | function Ee(e,t,a,n){const o=Math.max(Math.min(20,Math.floor(t/a*20)),0)...
function Le (line 1) | async function Le(e){const t=Ue("default",await Z(e));await Re(e.id,t)}
function Re (line 1) | async function Re(e,t){try{const a=u(e);if(t){a[e].button||(a[e].button=...
function Me (line 1) | async function Me(e,t,a){if(browser.action[t]){const n=JSON.parse(JSON.s...
function Ue (line 1) | function Ue(e,t){return JSON.parse(JSON.stringify(t?xe.autosave[e]:xe[e]))}
function Nt (line 1) | async function Nt(e){const[t,a]=await Promise.all([D(),f()]);let n=await...
function _t (line 1) | async function _t(e){const t=await f(e.id);await async function(){const ...
function Bt (line 1) | async function Bt(e){if(Rt){const t=[],a=await f(e.id);if(a[e.id].editor...
function Ot (line 1) | async function Ot(e){const t=Dt;if(Dt=e,void 0===t||t!=e){const t=[];try...
function jt (line 1) | async function jt(e,t){const a=Lt.get(e);try{(void 0===a||a!=t)&&await W...
function zt (line 1) | async function zt(e,t){t=Boolean(t);try{await We.update(e,{checked:t}),E...
function Kt (line 1) | function Kt(e,t){return e.method.endsWith(".refreshMenu")?function(e){if...
function $t (line 1) | function $t(e){!function(e){Re(e.id,Ue("forbidden"))}(e)}
function Vt (line 1) | function Vt(e,t,a){!function(e,t,a){let n;a?n=Ue("inject",!0):(n=Ue(1==t...
function Gt (line 1) | async function Gt(e,t,a){Ce(e);try{t&&await browser.tabs.sendMessage(e,{...
function Jt (line 1) | function Jt(e){!function(e){Re(e,Ue("edit"))}(e)}
function Ht (line 1) | function Ht(e,t){Se(e,t)}
function Yt (line 1) | function Yt(e,t,a){!function(e,t,a){Ee(e,t,a,ge)}(e,t,a)}
function Zt (line 1) | function Zt(e){Bt(e)}
function ha (line 1) | async function ha(e){let t;try{t=await xa(e.id)}catch(e){}if(t){const t=...
function wa (line 1) | async function wa(){return browser.tabs.create({active:!0,url:"/src/ui/p...
function pa (line 1) | async function pa(e,t={}){await ya(),await Promise.all(e.map(async e=>{c...
function ba (line 1) | async function ba(e,t={}){await ya(),await Promise.all(e.map(async e=>{c...
function ga (line 1) | function ga(e){const t={id:fa,status:e.status,tab:e.tab,options:e.option...
function ya (line 1) | async function ya(){if(!da){const e=await R();ua=e.processInForeground,d...
function va (line 1) | function va(){const e=la.filter(e=>e.status==oa).length;for(let t=0;t<Ma...
function ka (line 1) | async function ka(e){const t=e.id;if(e.status=oa,!e.tab.id){let t;try{co...
function Aa (line 1) | function Aa(e){const t=la.find(t=>t.id==e);t&&(t.options.autoClose&&!t.c...
function xa (line 1) | async function xa(e,t={},a=!0){let n;const o=(await browser.scripting.ex...
function Ta (line 1) | function Ta(e,t){const a=la.find(t=>t.id==e);a&&(a.cancel=t)}
function Ia (line 1) | function Ia(e,t=!0){Array.from(la).filter(a=>a.tab.id==e&&!a.options.aut...
function Ca (line 1) | function Ca(e){return la.find(t=>t.id==e)}
function Sa (line 1) | function Sa(e,t){const a=e.tab.id;e.cancelled=!0,a&&(browser.tabs.sendMe...
function Pa (line 1) | function Pa(e){return{id:e.id,tabId:e.tab.id,index:e.tab.index,url:e.tab...
function Ea (line 1) | async function Ea(e){let t;try{t=await browser.runtime.sendNativeMessage...
function Ra (line 1) | async function Ra(e){return e.method.endsWith(".saveCreatedBookmarks")?(...
function Ma (line 1) | async function Ma(){try{browser.bookmarks.onCreated.removeListener(Wa),b...
function Ua (line 1) | async function Ua(e,t){try{await browser.bookmarks.update(e,t)}catch(e){}}
function Wa (line 1) | async function Wa(e,t){La.add(e),await Fa(e,t.url,t)}
function Da (line 1) | async function Da(e,t){if(La.has(e)){const a=await browser.bookmarks.get...
function Fa (line 1) | async function Fa(e,t,a){const n=await browser.tabs.query({lastFocusedWi...
function Na (line 1) | async function Na(e,t){let a=t||"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhYzZmZT...
method constructor (line 1) | constructor(e){this.file=e.file,this.onProgress=e.onProgress,this.conten...
method upload (line 1) | async upload(e=1){let t,a="POST";const n=Ja(await fetch(Ba+`?q=name = '$...
function za (line 1) | async function za(e,t){const a=await fetch(_a,{method:"POST",headers:{"C...
function qa (line 1) | function qa(e={}){return Boolean(browser.identity&&browser.identity.getA...
function Ka (line 1) | async function Ka(e,t,a=!0){const n=t.split("/");n.pop();const o=e.folde...
function $a (line 1) | async function $a(e,t,a){const n=await async function(e,t,a){const n=awa...
function Va (line 1) | async function Va(e){let t=e.file,a=e.file.size;(e.offset||e.chunkSize)&...
function Ga (line 1) | async function Ga(e){e=Ja(e);const t=await e.json();if(t.error)throw new...
function Ja (line 1) | function Ja(e){if(200==e.status)return e;throw 404==e.status?new Error("...
class Xa (line 1) | class Xa{constructor(e){this.file=e.file,this.onProgress=e.onProgress,th...
method constructor (line 1) | constructor(e){this.file=e.file,this.onProgress=e.onProgress,this.cont...
method upload (line 1) | async upload(){const e=nn(await fetch("https://api.dropboxapi.com/2/fi...
function en (line 1) | async function en(e,t){const a=await fetch(Ha,{method:"POST",headers:{"C...
function tn (line 1) | async function tn(e){let t=e.file,a=e.file.size;(e.offset||e.chunkSize)&...
function an (line 1) | async function an(e){e=nn(e);const t=await e.json();if(t.error)throw new...
function nn (line 1) | function nn(e){if(200==e.status)return e;throw 401==e.status?new Error("...
function on (line 1) | function on(e){return JSON.stringify(e).replace(Qa,function(e){return"\\...
class pn (line 1) | class pn{constructor(e,t,a){e.endsWith(ln)||(e+=ln),this.url=e,this.auth...
method constructor (line 1) | constructor(e,t,a){e.endsWith(ln)||(e+=ln),this.url=e,this.authorizati...
method upload (line 1) | upload(e,t,a){return this.controller=new AbortController,a.signal=this...
method abort (line 1) | abort(){this.controller&&this.controller.abort()}
function bn (line 1) | async function bn(e,t,a){const{authorization:n,filenameConflictAction:o,...
class Mn (line 1) | class Mn{constructor(e,t,a,n){this.headers=new Map([["Authorization","Be...
method constructor (line 1) | constructor(e,t,a,n){this.headers=new Map([["Authorization","Bearer "+...
method upload (line 1) | async upload(e,t,a){this.controller=new AbortController,a.signal=this....
method abort (line 1) | abort(){this.controller&&this.controller.abort()}
class Nn (line 1) | class Nn{constructor(e,t,a,n,o="s3.amazonaws.com"){this.api=new zn({doma...
method constructor (line 1) | constructor(e,t,a,n,o="s3.amazonaws.com"){this.api=new zn({domain:o,re...
method upload (line 1) | async upload(e,t,a){const{filenameConflictAction:n,prompt:o}=a;this.co...
method abort (line 1) | abort(){this.controller&&this.controller.abort()}
function _n (line 1) | async function _n(e){return new Uint8Array(await new Response(e).arrayBu...
class zn (line 1) | class zn{constructor({domain:e,region:t,bucket:a,accessKey:n,secretKey:o...
method constructor (line 1) | constructor({domain:e,region:t,bucket:a,accessKey:n,secretKey:o}){this...
method putObject (line 1) | async putObject({path:e},{headers:t={},body:a}){return qn(this,{path:e...
method getObject (line 1) | async getObject({path:e},{headers:t={}}={}){return qn(this,{path:e},{m...
method headObject (line 1) | async headObject({path:e},{headers:t={}}={}){return qn(this,{path:e},{...
method listObjects (line 1) | async listObjects({path:e},{headers:t={},continuationToken:a,delimiter...
function qn (line 1) | async function qn({region:e,bucket:t,accessKey:a,secretKey:n,domain:o},{...
function Kn (line 1) | function Kn(e){let t=encodeURIComponent(e);return t=t.startsWith("%")?t....
function $n (line 1) | function $n(e){return Object.keys(e).map(e=>e.toLowerCase()).sort().join...
function Vn (line 1) | async function Vn(e=new Uint8Array(0)){return Zn(await Jn(e))}
function Gn (line 1) | function Gn(e,t,a){return e.substring(0,8)+"/"+t+"/"+a+"/"+jn}
function Jn (line 1) | async function Jn(e){return crypto.subtle.digest("SHA-256",e)}
function Hn (line 1) | async function Hn(e,t){const a={name:"HMAC",hash:{name:"SHA-256"}},n=awa...
function Yn (line 1) | function Yn(e){return(new TextEncoder).encode(e)}
function Zn (line 1) | function Zn(e){return Array.from(new Uint8Array(e)).map(e=>e.toString(16...
class ro (line 1) | class ro{constructor(e,t){this.serverUrl=e,this.authToken=t,this.request...
method constructor (line 1) | constructor(e,t){this.serverUrl=e,this.authToken=t,this.requestId=0}
method upload (line 1) | async upload(e,t,a){let n;return this.controller=new AbortController,a...
method abort (line 1) | abort(){this.controller&&this.controller.abort()}
function io (line 1) | async function io(e,t,a){const{filenameConflictAction:n,prompt:o,signal:...
function ho (line 1) | function ho(e,t,a,n){if(void 0===n){if(mo++,!(fo.length-mo>=so.length))t...
class wo (line 1) | class wo{constructor(e,t){this.stream=new po(e,t),this.objects=[]}append...
method constructor (line 1) | constructor(e,t){this.stream=new po(e,t),this.objects=[]}
method append (line 1) | append(e){return this.stream.append(e)}
method flush (line 1) | flush(){return this.stream.flush()}
method addObject (line 1) | addObject(e){this.objects.push(jo(e)&&!Uo(e,this)?e:void 0)}
class po (line 1) | class po{constructor(e,t){this.offset=0,this.appendData=e,this.value=new...
method constructor (line 1) | constructor(e,t){this.offset=0,this.appendData=e,this.value=new Uint8A...
method append (line 1) | async append(e){if(this.offset+e.length>this.value.length){const t=thi...
method flush (line 1) | async flush(){this.offset&&await this.appendData({value:new Uint8Array...
function bo (line 1) | function bo(e,{chunkSize:t=8388608}={}){let a,n,o,r,i,s;return{[Symbol.a...
function go (line 1) | async function go(e,t){const a=fo.findIndex(({test:a}={})=>a&&a(t,e));e....
function yo (line 1) | async function yo(e,t){await go(e,t.length);const a=Object.keys(t).filte...
function vo (line 1) | async function vo(e,t){const a=lo.encode(t);await go(e,a.length),await e...
function ko (line 1) | async function ko(e,t){await go(e,t.length),await e.append("Uint8Array"=...
function Ao (line 1) | async function Ao(e,t){const a=new Uint8Array(new Float64Array([t]).buff...
function xo (line 1) | async function xo(e,t){const a=new Uint8Array([Number(t)]);await e.appen...
class To (line 1) | class To{constructor(e,t){this.index=e,this.data=t}getObject(){return th...
method constructor (line 1) | constructor(e,t){this.index=e,this.data=t}
method getObject (line 1) | getObject(){return this.data.objects[this.index]}
class Io (line 1) | class Io{constructor(e){this.stream=new Co(e),this.objects=[],this.sette...
method constructor (line 1) | constructor(e){this.stream=new Co(e),this.objects=[],this.setters=[]}
method consume (line 1) | consume(e){return this.stream.consume(e)}
method getObjectId (line 1) | getObjectId(){const e=this.objects.length;return this.objects.push(voi...
method resolveObject (line 1) | resolveObject(e,t){jo(t)&&!Wo(t)&&(this.objects[e]=t)}
method setObject (line 1) | setObject(e,t){this.setters.push({functionArguments:e,setterFunction:t})}
method executeSetters (line 1) | executeSetters(){this.setters.forEach(({functionArguments:e,setterFunc...
class Co (line 1) | class Co{constructor(e){this.offset=0,this.value=new Uint8Array(0),this....
method constructor (line 1) | constructor(e){this.offset=0,this.value=new Uint8Array(0),this.consume...
method consume (line 1) | async consume(e){if(this.offset+e>this.value.length){const t=new Uint8...
function So (line 1) | function So(){let e,t,a,n,o,r;return{next:async t=>t?async function(t){o...
function Po (line 1) | async function Po(e){const t=(await e.consume(1))[0],a=fo[t].parse,n=e.g...
function Eo (line 1) | async function Eo(e){const t=await Po(e),a=new Array(t);return t&&await ...
function Lo (line 1) | async function Lo(e){const t=await Po(e),a=await e.consume(t);return uo....
function Ro (line 1) | async function Ro(e){const t=await e.consume(8);return new Float64Array(...
function Mo (line 1) | async function Mo(e){const t=await e.consume(1);return Boolean(t[0])}
function Uo (line 1) | function Uo(e,t){return Do(e)&&t.objects.includes(e)}
function Wo (line 1) | function Wo(e){return e instanceof To}
function Do (line 1) | function Do(e){return e===Object(e)}
function Fo (line 1) | function Fo(e){return"number"==typeof e.length}
function No (line 1) | function No(e){return e===co}
function _o (line 1) | function _o(e){return"number"==typeof e}
function Bo (line 1) | function Bo(e){return _o(e)&&Number.isInteger(e)}
function Oo (line 1) | function Oo(e){return"symbol"==typeof e}
function jo (line 1) | function jo(e){return Do(e)||Oo(e)}
class zo (line 1) | class zo{constructor(e,t,a,n){this.headers=new Map([["Authorization","Be...
method constructor (line 1) | constructor(e,t,a,n){this.headers=new Map([["Authorization","Bearer "+...
method upload (line 1) | async upload(e,t,a){this.controller=new AbortController;const n=t inst...
method abort (line 1) | abort(){this.controller&&this.controller.abort()}
function Go (line 1) | async function Go(e){return await Yo(),browser.runtime.sendMessage({meth...
function Jo (line 1) | async function Jo(e,t){return await Yo(),Zo({method:"getBlobURL",mimeTyp...
function Ho (line 1) | async function Ho(e,t,a){return await Yo(),browser.runtime.sendMessage({...
function Yo (line 1) | async function Yo(){const e=browser.runtime.getURL(qo);(await browser.ru...
function Zo (line 1) | async function Zo(e,t){let a;Vo++;for(let n=0;n*Ko<t.length;n++)e.trunca...
method constructor (line 1) | constructor(e,t,a){this.clientId=e,this.clientKey=t,this.scopes=a,this.f...
method auth (line 1) | async auth(e={interactive:!0}){return qa(e)?(this.accessToken=await brow...
method setAuthInfo (line 1) | setAuthInfo(e,t){qa(t)||(e?(this.accessToken=e.accessToken,this.refreshT...
method refreshAuthToken (line 1) | async refreshAuthToken(){if(this.refreshToken){const e=await fetch(_a,{m...
method revokeAuthToken (line 1) | async revokeAuthToken(e){if(e){if(browser.identity&&browser.identity.rem...
method upload (line 1) | async upload(e,t,a,n,o=!0){const r=await Ka(this,e),i=e.split("/").pop()...
method constructor (line 1) | constructor(e,t){this.clientId=e,this.clientKey=t}
method auth (line 1) | async auth(e={interactive:!0}){return this.authURL="https://www.dropbox....
method setAuthInfo (line 1) | setAuthInfo(e){e?(this.accessToken=e.accessToken,this.refreshToken=e.ref...
method refreshAuthToken (line 1) | async refreshAuthToken(){if(this.refreshToken){const e=await fetch(Ha,{m...
method revokeAuthToken (line 1) | async revokeAuthToken(e){if(e){const t=await fetch("https://api.dropboxa...
method upload (line 1) | async upload(e,t,a,n){const o=new Xa({token:this.accessToken,file:t,file...
function ir (line 1) | async function ir(e,t){if(e.method.endsWith(".download"))return async fu...
function sr (line 1) | async function sr(e,t){const a=t.id;try{let n;if(e.backgroundSave&&!e.sa...
function cr (line 1) | async function cr(e,t){const a=t.id;let n;try{const o=e=>yr(a,e);let r,i...
function lr (line 1) | function lr(e){return e.replace(/#/g,"%23")}
function dr (line 1) | async function dr(e,t){let a=await K();const n={interactive:!0,forceWebA...
function ur (line 1) | async function ur(e){let t=await $();const a={launchWebAuthFlow:e=>se(e)...
function fr (line 1) | async function fr(e,t,a,n,o,r,i,{filenameConflictAction:s,prompt:c}){try...
function mr (line 1) | async function mr(e,t,a,n,o,r,i,s,{filenameConflictAction:c,prompt:l}){t...
function hr (line 1) | async function hr(e,t,a,n,o,r,{filenameConflictAction:i,prompt:s}){try{c...
function wr (line 1) | async function wr(e,t,a,n,o,{filenameConflictAction:r,prompt:i}){try{con...
function pr (line 1) | async function pr(e,t,a,n,o){try{await dr(n);const r=Ca(e);if(!r||!r.can...
function br (line 1) | async function br(e,t,a,n){try{await ur();const o=Ca(e);if(!o||!o.cancel...
function gr (line 1) | async function gr(e,t){let a,n=t.filenameConflictAction;if("skip"==n){(a...
function yr (line 1) | function yr(e,t){return browser.tabs.sendMessage(e,{method:"content.prom...
function vr (line 1) | async function vr(e,t){const a={url:e.url,saveAs:t.confirmFilename,filen...
function kr (line 1) | async function kr(e,t,a,n,o,r,i,s){try{const c=Ca(e);if(!c||!c.cancelled...
function Ar (line 1) | async function Ar(e,t,a,n,o,{foregroundSave:r,sharePage:i}={}){const s=b...
function Ir (line 1) | async function Ir(e,t){if("enableAutoSave"==e.method){const a=await f(t....
function Cr (line 1) | async function Cr(e,t){const a=t.id,n=await F(t.url,!0);if(n){let o;Vt(a...
function Sr (line 1) | async function Sr(e,t){return e.method.endsWith(".init")&&(await async f...
function Pr (line 1) | async function Pr(e,t){const{width:a,height:n,scale:o=1}=t,r=Math.floor(...
function Er (line 1) | async function Er(e){return(await browser.tabs.query(e)).sort((e,t)=>e.i...
FILE: lib/single-file-extension-bootstrap.js
function p (line 1) | async function p(){if(document.documentElement.dataset&&void 0!==documen...
function g (line 1) | function g(){return new Promise((e,t)=>{const o=new XMLHttpRequest;o.ope...
function b (line 1) | async function b(e){return i&&"content.autosave"==e.method?(async functi...
function S (line 1) | function S(){const e=document.querySelector("singlefile-infobar");e&&e.r...
function w (line 1) | async function w(){const e=o.helper;if((!l||c)&&!u)if(l=!0,r.autoSaveDel...
function T (line 1) | function T(){i&&r&&(r.autoSaveUnload||r.autoSaveLoadOrUnload||r.autoSave...
function A (line 1) | function A(){"hidden"==document.visibilityState&&r.autoSaveDiscard&&I({a...
function R (line 1) | function R(){!u&&(r.autoSaveUnload||r.autoSaveLoadOrUnload||r.autoSaveRe...
function I (line 1) | function I({autoSaveUnload:e,autoSaveDiscard:t,autoSaveRemove:n}){const ...
function C (line 1) | function C(e,t,{autoSaveUnload:n,autoSaveDiscard:a,autoSaveRemove:i}={})...
function D (line 1) | async function D(n){let a;h?a=await g():(P(n),function(e){s(e.body);cons...
function M (line 1) | async function M(e){if(137==e[0]&&80==e[1]&&78==e[2]&&71==e[3]){let t=ne...
function O (line 1) | function O(e){if(void 0===f){const t=o.helper,n=e.documentElement.firstC...
function P (line 1) | function P(e){e.querySelectorAll("*").forEach(e=>{const t=o.helper.getSh...
FILE: lib/single-file-extension-core.js
function o (line 1) | async function o(c,d={},u=!0){try{const n={cache:d.cache||"force-cache",...
function c (line 1) | async function c(e,r){const t=await f({method:"singlefile.fetchFrame",ur...
function f (line 1) | async function f(e){const r=await browser.runtime.sendMessage(e);if(!r||...
FILE: lib/single-file-extension-editor-helper.js
function r (line 1) | function r(n,e){const t=n.doctype;let a="";return t&&(a="<!DOCTYPE "+t.n...
function s (line 1) | function s(n,e,r){return 3==n.nodeType?function(n){const e=n.parentNode;...
function l (line 1) | function l(n){return Boolean(n.match(/^[ \t\n\f\r]/))}
function c (line 1) | function c(n){return n.tagName&&n.tagName.toUpperCase()}
function m (line 1) | function m(n,e,t,a){this.message=n,this.expected=e,this.found=t,this.loc...
function d (line 1) | async function d(n,e){e=void 0!==e?e:{};var t,a={},o={start:an},i=an,r=f...
function t (line 1) | function t(){this.constructor=n}
function a (line 1) | function a(n){return n.charCodeAt(0).toString(16).toUpperCase()}
function o (line 1) | function o(n){return n.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace...
function i (line 1) | function i(n){return n.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replac...
method constructor (line 1) | constructor(n){this._map=n}
method size (line 1) | get size(){return this._map.size}
method get (line 1) | get(n){return n=t(String(n)),this._map.get(n)}
method has (line 1) | has(n){return n=t(String(n)),this._map.has(n)}
method set (line 1) | set(n,e){if(n=t(String(n)),e=String(e),!a(n))throw new Error(`Invalid ...
method clear (line 1) | clear(){this._map.clear()}
method delete (line 1) | delete(n){return n=t(String(n)),this._map.delete(n)}
method forEach (line 1) | forEach(n,e){this._map.forEach(n,e)}
method keys (line 1) | keys(){return this._map.keys()}
method values (line 1) | values(){return this._map.values()}
method entries (line 1) | entries(){return this._map.entries()}
function r (line 1) | function r(n){return t[n.type](n)}
function u (line 1) | function u(n){return n.replace(p,(n,e,t)=>{const a="0x"+e-65536;return a...
function S (line 1) | function S(){b instanceof f&&(b.addEventListener("single-file-new-font-f...
function L (line 1) | function L(n,e,t){if(!n.querySelector(z)){let a;e.infobarContent?a=e.inf...
function A (line 1) | function A(n,e=C){const t=n.evaluate("//comment()",n,null,XPathResult.FI...
function T (line 1) | function T(n,{saveUrl:e,infobarContent:t,saveDate:a}){if(e){const o=n.qu...
function I (line 1) | function I(n,e){const t=A(n,e);t&&t.saveUrl&&T(n,t)}
function jn (line 1) | function jn(n,e,t){n.querySelectorAll("noscript:not(["+X+"])").forEach(n...
function Sn (line 1) | function Sn(n){!function n(e,t=0,a=""){const o=a?`${a}.${t+1}`:`${t+1}`;...
function xn (line 1) | function xn(n,e,t=!1){const a={};n.currentScript&&n.currentScript.remove...
function Cn (line 1) | function Cn(n,e,t,a,o={usedFonts:new Map,canvases:[],images:[],posters:[...
function zn (line 1) | function zn(n,e=new Map){if(n){const t=[];for(const a of Array.from(n))i...
function Ln (line 1) | function Ln(n,e,t){if(n){const a=n.getPropertyValue("font-style")||"norm...
function An (line 1) | function An(n=""){return En(u(n.trim())).toLowerCase()}
function Tn (line 1) | function Tn(n,e){let t=!1;if(e){const a=e.getPropertyValue("display"),o=...
function In (line 1) | function In(n){if(n){const e=[];return n.querySelectorAll("style").forEa...
function Rn (line 1) | function Rn(n,e){if(e.getPropertyValue(n).endsWith("px"))return parseFlo...
function En (line 1) | function En(n){return(n=n.match(rn)?n.replace(rn,"$1"):n.replace(sn,"$1"...
function Dn (line 1) | function Dn(n){return ln[n.toLowerCase().trim()]||n}
function Mn (line 1) | function Mn(n){return new fn([n]).size}
function Bn (line 1) | async function Bn(n,e){try{return function(n){const e=[],t=new DataView(...
function Nn (line 1) | function Nn(n){return n.flat?n.flat():n.reduce((n,e)=>n.concat(Array.isA...
function Pn (line 1) | function Pn(n,e,t){try{return n.getComputedStyle(e,t)}catch(n){}}
function On (line 1) | function On(n,e=hn,t="_",a=pn){return a.forEach((t,o)=>n=n.replace(new R...
function _n (line 1) | function _n(n,e){const t=(new vn).parseFromString(n,"text/html");t.head|...
function Zn (line 1) | async function Zn(n,e,t){let a=await $n(t.filenameTemplate,t,n,e)||"";a=...
function $n (line 1) | async function $n(n="",e,t,a,o={}){const{dontReplaceSlash:i}=o;o.current...
function Xn (line 1) | function Xn(n,e,t){if("function"==typeof n.replaceAll)return n.replaceAl...
function Qn (line 1) | async function Qn(n,e,t,a){const{maxLength:o,maxCharLength:i}=function(n...
function ne (line 1) | function ne(n){try{return decodeURI(n)}catch(e){return n}}
function ee (line 1) | function ee(n,e){let t=n.pathname.match(/\/([^/]+)$/),a=t&&t[0];return a...
function te (line 1) | function te(n,e){const t=new Fn([n]),a=new qn;return a.readAsText(t.slic...
function ae (line 1) | function ae(n){const e=Object.assign({},n);return delete e.content,delet...
class Qe (line 1) | class Qe{constructor(n){return class extends ze{constructor(e,t){const a...
method constructor (line 1) | constructor(n){return class extends ze{constructor(e,t){const a=new n(...
function at (line 1) | function at(){return tt}
function ot (line 1) | function ot(n){return ce.max(n.chunkSize,64)}
function it (line 1) | function it(n){const{baseURL:e,chunkSize:t,maxWorkers:a,terminateWorkerT...
function rt (line 1) | function rt(n,e){e!==Ze&&(tt[n]=e)}
function st (line 1) | function st(n,e,t){return class{constructor(a){const o=this;var i,r;i=a,...
class ct (line 1) | class ct{constructor(n){this.crc=n||-1}append(n){let e=0|this.crc;for(le...
method constructor (line 1) | constructor(n){this.crc=n||-1}
method append (line 1) | append(n){let e=0|this.crc;for(let t=0,a=0|n.length;t<a;t++)e=e>>>8^lt...
method get (line 1) | get(){return~this.crc}
class mt (line 1) | class mt extends ze{constructor(){let n;const e=new ct;super({transform(...
method constructor (line 1) | constructor(){let n;const e=new ct;super({transform(n,t){e.append(n),t...
function dt (line 1) | function dt(n){if(typeof je==$e){n=unescape(encodeURIComponent(n));const...
method concat (line 1) | concat(n,e){if(0===n.length||0===e.length)return n.concat(e);const t=n[n...
method bitLength (line 1) | bitLength(n){const e=n.length;if(0===e)return 0;const t=n[e-1];return 32...
method clamp (line 1) | clamp(n,e){if(32*n.length<e)return n;const t=(n=n.slice(0,ce.ceil(e/32))...
method _shiftRight (line 1) | _shiftRight(n,e,t,a){for(void 0===a&&(a=[]);e>=32;e-=32)a.push(t),t=0;if...
method fromBits (line 1) | fromBits(n){const e=ht.bitLength(n)/8,t=new we(e);let a;for(let o=0;o<e;...
method toBits (line 1) | toBits(n){const e=[];let t,a=0;for(t=0;t<n.length;t++)a=a<<8|n[t],3&~t||...
method constructor (line 1) | constructor(n){const e=this;e.blockSize=512,e._init=[1732584193,40232334...
method reset (line 1) | reset(){const n=this;return n._h=n._init.slice(0),n._buffer=[],n._length...
method update (line 1) | update(n){const e=this;"string"==typeof n&&(n=pt.utf8String.toBits(n));c...
method finalize (line 1) | finalize(){const n=this;let e=n._buffer;const t=n._h;e=ht.concat(e,[ht.p...
method _f (line 1) | _f(n,e,t,a){return n<=19?e&t|~e&a:n<=39?e^t^a:n<=59?e&t|e&a|t&a:n<=79?e^...
method _S (line 1) | _S(n,e){return e<<n|e>>>32-n}
method _block (line 1) | _block(n){const e=this,t=e._h,a=oe(80);for(let e=0;e<16;e++)a[e]=n[e];le...
method constructor (line 1) | constructor(n){const e=this;e._tables=[[[],[],[],[],[]],[[],[],[],[],[]]...
method encrypt (line 1) | encrypt(n){return this._crypt(n,0)}
method decrypt (line 1) | decrypt(n){return this._crypt(n,1)}
method _precompute (line 1) | _precompute(){const n=this._tables[0],e=this._tables[1],t=n[4],a=e[4],o=...
method _crypt (line 1) | _crypt(n,e){if(4!==n.length)throw new ge("invalid aes block size");const...
method getRandomValues (line 1) | getRandomValues(n){const e=new fe(n.buffer),t=n=>{let e=987654321;const ...
method constructor (line 1) | constructor(n,e){this._prf=n,this._initIv=e,this._iv=e}
method reset (line 1) | reset(){this._iv=this._initIv}
method update (line 1) | update(n){return this.calculate(this._prf,n,this._iv)}
method incWord (line 1) | incWord(n){if(255&~(n>>24))n+=1<<24;else{let e=n>>16&255,t=n>>8&255,a=25...
method incCounter (line 1) | incCounter(n){0===(n[0]=this.incWord(n[0]))&&(n[1]=this.incWord(n[1]))}
method calculate (line 1) | calculate(n,e,t){let a;if(!(a=e.length))return[];const o=ht.bitLength(e)...
method pbkdf2 (line 1) | pbkdf2(n,e,t,a){if(t=t||1e4,a<0||t<0)throw new ge("invalid params to pbk...
method constructor (line 1) | constructor(n){const e=this,t=e._hash=ut.sha1,a=[[],[]];e._baseHash=[new...
method reset (line 1) | reset(){const n=this;n._resultHash=new n._hash(n._baseHash[0]),n._update...
method update (line 1) | update(n){this._updated=!0,this._resultHash.update(n)}
method digest (line 1) | digest(){const n=this,e=n._resultHash.finalize(),t=new n._hash(n._baseHa...
method encrypt (line 1) | encrypt(n){if(this._updated)throw new ge("encrypt on already updated hma...
function St (line 1) | function St(n){return kt?xe.getRandomValues(n):wt.getRandomValues(n)}
class Ut (line 1) | class Ut extends ze{constructor({password:n,rawPassword:e,signed:t,encry...
method constructor (line 1) | constructor({password:n,rawPassword:e,signed:t,encryptionStrength:a,ch...
class Ht (line 1) | class Ht extends ze{constructor({password:n,rawPassword:e,encryptionStre...
method constructor (line 1) | constructor({password:n,rawPassword:e,encryptionStrength:t}){let a;sup...
function Wt (line 1) | function Wt(n,e,t,a,o,i){const{ctr:r,hmac:s,pending:l}=n,c=e.length-o;le...
function Gt (line 1) | async function Gt(n,e,t,a){n.password=null;const o=await async function(...
function Vt (line 1) | function Vt(n,e){return e===Ze?dt(n):e}
function Kt (line 1) | function Kt(n,e){let t=n;return n.length+e.length&&(t=new we(n.length+e....
function Jt (line 1) | function Jt(n,e,t){return n.subarray(e,t)}
function Yt (line 1) | function Yt(n,e){return n.fromBits(e)}
function Zt (line 1) | function Zt(n,e){return n.toBits(e)}
class Xt (line 1) | class Xt extends ze{constructor({password:n,passwordVerification:e,check...
method constructor (line 1) | constructor({password:n,passwordVerification:e,checkPasswordOnly:t}){s...
class Qt (line 1) | class Qt extends ze{constructor({password:n,passwordVerification:e}){sup...
method constructor (line 1) | constructor({password:n,passwordVerification:e}){super({start(){ie.ass...
function na (line 1) | function na(n,e){const t=new we(e.length);for(let a=0;a<e.length;a++)t[a...
function ea (line 1) | function ea(n,e){const t=new we(e.length);for(let a=0;a<e.length;a++)t[a...
function ta (line 1) | function ta(n,e){const t=[305419896,591751049,878082192];ie.assign(n,{ke...
function aa (line 1) | function aa(n,e){let[t,a,o]=n.keys;n.crcKey0.append([e]),t=~n.crcKey0.ge...
function oa (line 1) | function oa(n){const e=2|n.keys[2];return ia(ce.imul(e,1^e)>>>8)}
function ia (line 1) | function ia(n){return 255&n}
function ra (line 1) | function ra(n){return 4294967295&n}
class la (line 1) | class la extends ze{constructor(n,{chunkSize:e,CompressionStream:t,Compr...
method constructor (line 1) | constructor(n,{chunkSize:e,CompressionStream:t,CompressionStreamNative...
class ca (line 1) | class ca extends ze{constructor(n,{chunkSize:e,DecompressionStream:t,Dec...
method constructor (line 1) | constructor(n,{chunkSize:e,DecompressionStream:t,DecompressionStreamNa...
function ma (line 1) | function ma(n){return pa(n,new ze({transform(n,e){n&&n.length&&e.enqueue...
function da (line 1) | function da(n,e,t){e=pa(e,new ze({flush:t})),ie.defineProperty(n,"readab...
function ha (line 1) | function ha(n,e,t,a,o){try{n=pa(n,new(e&&a?a:o)(sa,t))}catch(a){if(!e)re...
function pa (line 1) | function pa(n,e){return n.pipeThrough(e)}
class va (line 1) | class va extends ze{constructor(n,e){super({});const t=this,{codecType:a...
method constructor (line 1) | constructor(n,e){super({});const t=this,{codecType:a}=n;let o;a.starts...
class ja (line 1) | class ja extends ze{constructor(n){let e;super({transform:function t(a,o...
method constructor (line 1) | constructor(n){let e;super({transform:function t(a,o){if(e){const n=ne...
class xa (line 1) | class xa{constructor(n,{readable:e,writable:t},{options:a,config:o,strea...
method constructor (line 1) | constructor(n,{readable:e,writable:t},{options:a,config:o,streamOption...
class Ca (line 1) | class Ca extends ze{constructor(n,{onstart:e,onprogress:t,size:a,onend:o...
method constructor (line 1) | constructor(n,{onstart:e,onprogress:t,size:a,onend:o}){let i=0;super({...
function za (line 1) | async function za(n,...e){try{await n(...e)}catch(n){}}
function La (line 1) | function La(n,e){return{run:()=>async function({options:n,readable:e,wri...
function Aa (line 1) | function Aa(n,e){const{baseURL:t,chunkSize:a}=e;if(!n.interface){let o;t...
function Ra (line 1) | function Ra(n,{worker:e,writer:t,onTaskFinished:a,transferStreams:o}){tr...
function Ba (line 1) | async function Ba(n,e){const{options:t,config:a}=e,{transferStreams:o,us...
function Na (line 1) | function Na(n){const{terminateTimeout:e}=n;e&&(clearTimeout(e),n.termina...
class Ga (line 1) | class Ga{constructor(){this.size=0}init(){this.initialized=!0}}
method constructor (line 1) | constructor(){this.size=0}
method init (line 1) | init(){this.initialized=!0}
class Va (line 1) | class Va extends Ga{get readable(){const n=this,{chunkSize:e=Ha}=n,t=new...
method readable (line 1) | get readable(){const n=this,{chunkSize:e=Ha}=n,t=new Le({start(){this....
class Ka (line 1) | class Ka extends Ga{constructor(){super();const n=this,e=new Ae({write:e...
method constructor (line 1) | constructor(){super();const n=this,e=new Ae({write:e=>n.writeUint8Arra...
method writeUint8Array (line 1) | writeUint8Array(){}
class Ja (line 1) | class Ja extends Va{constructor(n){super(),ie.assign(this,{blob:n,size:n...
method constructor (line 1) | constructor(n){super(),ie.assign(this,{blob:n,size:n.size})}
method readUint8Array (line 1) | async readUint8Array(n,e){const t=this,a=n+e,o=n||a<t.size?t.blob.slic...
class Ya (line 1) | class Ya extends Ga{constructor(n){super();const e=new ze,t=[];n&&t.push...
method constructor (line 1) | constructor(n){super();const e=new ze,t=[];n&&t.push(["Content-Type",n...
method getData (line 1) | getData(){return this.blob}
class Za (line 1) | class Za extends Va{constructor(n,e){super(),Xa(this,n,e)}async init(){a...
method constructor (line 1) | constructor(n,e){super(),Xa(this,n,e)}
method init (line 1) | async init(){await Qa(this,so,ao),super.init()}
method readUint8Array (line 1) | readUint8Array(n,e){return no(this,n,e,so,ao)}
class $a (line 1) | class $a extends Va{constructor(n,e){super(),Xa(this,n,e)}async init(){a...
method constructor (line 1) | constructor(n,e){super(),Xa(this,n,e)}
method init (line 1) | async init(){await Qa(this,lo,oo),super.init()}
method readUint8Array (line 1) | readUint8Array(n,e){return no(this,n,e,lo,oo)}
function Xa (line 1) | function Xa(n,e,t){const{preventHeadRequest:a,useRangeHeader:o,forceRang...
function Qa (line 1) | async function Qa(n,e,t){const{url:a,preventHeadRequest:o,useRangeHeader...
function no (line 1) | async function no(n,e,t,a,o){const{useRangeHeader:i,forceRangeRequests:r...
function eo (line 1) | function eo(n,e=0,t=1){return ie.assign({},to(n),{[Fa]:Ua+"="+(e<0?e:e+"...
function to (line 1) | function to({options:n}){const{headers:e}=n;if(e)return Symbol.iterator ...
function ao (line 1) | async function ao(n){await io(n,so)}
function oo (line 1) | async function oo(n){await io(n,lo)}
function io (line 1) | async function io(n,e){const t=await e(qa,n,to(n));n.data=new we(await t...
function ro (line 1) | async function ro(n,e,t){if(n.preventHeadRequest)await t(n,n.options);el...
function so (line 1) | async function so(n,{options:e,url:t},a){const o=await fetch(t,ie.assign...
function lo (line 1) | function lo(n,{url:e},t){return new ve((a,o)=>{const i=new XMLHttpReques...
class co (line 1) | class co extends Va{constructor(n,e={}){super(),ie.assign(this,{url:n,re...
method constructor (line 1) | constructor(n,e={}){super(),ie.assign(this,{url:n,reader:e.useXHR?new ...
method size (line 1) | set size(n){}
method size (line 1) | get size(){return this.reader.size}
method init (line 1) | async init(){await this.reader.init(),super.init()}
method readUint8Array (line 1) | readUint8Array(n,e){return this.reader.readUint8Array(n,e)}
class mo (line 1) | class mo extends Va{constructor(n){super(),this.readers=n}async init(){c...
method constructor (line 1) | constructor(n){super(),this.readers=n}
method init (line 1) | async init(){const n=this,{readers:e}=n;n.lastDiskNumber=0,n.lastDiskO...
method readUint8Array (line 1) | async readUint8Array(n,e,t=0){const a=this,{readers:o}=this;let i,r=t;...
class ho (line 1) | class ho extends Ga{constructor(n,e=4294967295){super();const t=this;let...
method constructor (line 1) | constructor(n,e=4294967295){super();const t=this;let a,o,i;ie.assign(t...
function po (line 1) | async function po(n,e){if(!n.init||n.initialized)return ve.resolve();awa...
function uo (line 1) | function uo(n){return oe.isArray(n)&&(n=new mo(n)),n instanceof Le&&(n={...
function go (line 1) | function go(n){n.writable===Ze&&typeof n.next==Xe&&(n=new ho(n)),n insta...
function wo (line 1) | function wo(n,e,t,a){return n.readUint8Array(e,t,a)}
function vo (line 1) | function vo(n,e){return e&&"cp437"==e.trim().toLowerCase()?function(n){i...
class qo (line 1) | class qo{constructor(n){Fo.forEach(e=>this[e]=n[e])}}
method constructor (line 1) | constructor(n){Fo.forEach(e=>this[e]=n[e])}
class ti (line 1) | class ti{constructor(n,e={}){ie.assign(this,{reader:uo(n),options:e,conf...
method constructor (line 1) | constructor(n,e={}){ie.assign(this,{reader:uo(n),options:e,config:at()})}
method getEntriesGenerator (line 1) | async*getEntriesGenerator(n={}){const e=this;let{reader:t}=e;const{con...
method getEntries (line 1) | async getEntries(n={}){const e=[];for await(const t of this.getEntries...
method close (line 1) | async close(){}
class ai (line 1) | class ai{constructor(n,e,t){ie.assign(this,{reader:n,config:e,options:t}...
method constructor (line 1) | constructor(n,e,t){ie.assign(this,{reader:n,config:e,options:t})}
method getData (line 1) | async getData(n,e,t={}){const a=this,{reader:o,offset:i,diskNumberStar...
function oi (line 1) | function oi(n,e,t){const a=n.rawBitFlag=di(e,t+2),o=!(1&~a),i=hi(e,t+6);...
function ii (line 1) | async function ii(n,e,t,a,o){const{rawExtraField:i}=e,r=e.extraField=new...
function ri (line 1) | async function ri(n,e,t,a,o){const i=ui(n.data),r=new ct;r.append(o[t]);...
function si (line 1) | function si(n,e,t){return e[t]===Ze?n.options[t]:e[t]}
function li (line 1) | function li(n){const e=(4294901760&n)>>16,t=65535&n;try{return new me(19...
function ci (line 1) | function ci(n){return new me(se(n/le(1e4)-le(116444736e5)))}
function mi (line 1) | function mi(n,e){return n.getUint8(e)}
function di (line 1) | function di(n,e){return n.getUint16(e,!0)}
function hi (line 1) | function hi(n,e){return n.getUint32(e,!0)}
function pi (line 1) | function pi(n,e){return se(n.getBigUint64(e,!0))}
function ui (line 1) | function ui(n){return new ke(n.buffer)}
class Li (line 1) | class Li{constructor(n,e={}){const t=(n=go(n)).availableSize!==Ze&&n.ava...
method constructor (line 1) | constructor(n,e={}){const t=(n=go(n)).availableSize!==Ze&&n.availableS...
method add (line 1) | async add(n="",e,t={}){const a=this,{pendingAddFileCalls:o,config:i}=a...
method close (line 1) | async close(n=new we,e={}){const{pendingAddFileCalls:t,writer:a}=this,...
function Ai (line 1) | async function Ai(n,e){const t=n.getWriter();try{await t.ready,n.size+=P...
function Ti (line 1) | function Ti(n){if(n)return(le(n.getTime())+le(116444736e5))*le(1e4)}
function Ii (line 1) | function Ii(n,e,t,a){const o=e[t]===Ze?n.options[t]:e[t];return o===Ze?a:o}
function Ri (line 1) | function Ri(n,e,t){n.setUint8(e,t)}
function Ei (line 1) | function Ei(n,e,t){n.setUint16(e,t,!0)}
function Di (line 1) | function Di(n,e,t){n.setUint32(e,t,!0)}
function Mi (line 1) | function Mi(n,e,t){n.setBigUint64(e,t,!0)}
function Bi (line 1) | function Bi(n,e,t){n.set(e,t)}
function Ni (line 1) | function Ni(n){return new ke(n.buffer)}
function Pi (line 1) | function Pi(...n){let e=0;return n.forEach(n=>n&&(e+=n.length)),e}
method constructor (line 1) | constructor(n){super();let e=n.length;for(;"="==n.charAt(e-1);)e--;const...
method readUint8Array (line 1) | readUint8Array(n,e){const{dataStart:t,dataURI:a}=this,o=new we(e),i=4*ce...
method constructor (line 1) | constructor(n){super(),ie.assign(this,{data:"data:"+(n||"")+";base64,",p...
method writeUint8Array (line 1) | writeUint8Array(n){const e=this;let t=0,a=e.pending;const o=e.pending.le...
method getData (line 1) | getData(){return this.data+Ce(this.pending)}
method constructor (line 1) | constructor(n,e={}){e.useRangeHeader=!0,super(n,e)}
method constructor (line 1) | constructor(n){super(new ye([n],{type:"text/plain"}))}
method constructor (line 1) | constructor(n){super(n),ie.assign(this,{encoding:n,utf8:!n||"utf-8"==n.t...
method getData (line 1) | async getData(){const{encoding:n,utf8:e}=this,t=await super.getData();if...
method constructor (line 1) | constructor(n){super(),ie.assign(this,{array:n,size:n.length})}
method readUint8Array (line 1) | readUint8Array(n,e){return this.array.slice(n,n+e)}
method init (line 1) | init(n=0){ie.assign(this,{offset:0,array:new we(n)}),super.init()}
method writeUint8Array (line 1) | writeUint8Array(n){const e=this;if(e.offset+n.length>e.array.length){con...
method getData (line 1) | getData(){return this.array}
method constructor (line 1) | constructor(n={}){const{readable:e,writable:t}=new ze,a=new ti(e,n).getE...
method constructor (line 1) | constructor(n={}){const{readable:e,writable:t}=new ze;this.readable=e,th...
method transform (line 1) | transform(n){const{readable:e,writable:t}=new ze({flush:()=>{this.zipWri...
method writable (line 1) | writable(n){const{readable:e,writable:t}=new ze;return this.zipWriter.ad...
method close (line 1) | close(n=void 0,e={}){return this.zipWriter.close(n,e)}
function a (line 1) | function a(n){var t=n.match(e);return t?{scheme:t[1],auth:t[2],host:t[3]...
function o (line 1) | function o(n){var e="";return n.scheme&&(e+=n.scheme+":"),e+="//",n.auth...
function r (line 1) | function r(n,e){""===n&&(n="."),""===e&&(e=".");var r=a(e),s=a(n);if(s&&...
function l (line 1) | function l(n){return n}
function c (line 1) | function c(n){if(!n)return!1;var e=n.length;if(e<9||95!==n.charCodeAt(e-...
function m (line 1) | function m(n,e){return n===e?0:null===n?1:null===e?-1:n>e?1:-1}
function o (line 1) | function o(){this._array=[],this._set=a?new Map:Object.create(null)}
function t (line 1) | function t(){this._array=[],this._sorted=!0,this._last={generatedLine:-1...
function i (line 1) | function i(n){n||(n={}),this._file=t.getArg(n,"file",null),this._sourceR...
method constructor (line 1) | constructor(n){this._map=n}
method size (line 1) | get size(){return this._map.size}
method get (line 1) | get(n){return n=t(String(n)),this._map.get(n)}
method has (line 1) | has(n){return n=t(String(n)),this._map.has(n)}
method set (line 1) | set(n,e){if(n=t(String(n)),e=String(e),!a(n))throw new Error(`Invalid ...
method clear (line 1) | clear(){this._map.clear()}
method delete (line 1) | delete(n){return n=t(String(n)),this._map.delete(n)}
method forEach (line 1) | forEach(n,e){this._map.forEach(n,e)}
method keys (line 1) | keys(){return this._map.keys()}
method values (line 1) | values(){return this._map.values()}
method entries (line 1) | entries(){return this._map.entries()}
function zr (line 1) | function zr(n){return n>=48&&n<=57}
function Lr (line 1) | function Lr(n){return zr(n)||n>=65&&n<=70||n>=97&&n<=102}
function Ar (line 1) | function Ar(n){return n>=65&&n<=90}
function Tr (line 1) | function Tr(n){return function(n){return Ar(n)||function(n){return n>=97...
function Ir (line 1) | function Ir(n){return Tr(n)||zr(n)||45===n}
function Rr (line 1) | function Rr(n){return n>=0&&n<=8||11===n||n>=14&&n<=31||127===n}
function Er (line 1) | function Er(n){return 10===n||13===n||12===n}
function Dr (line 1) | function Dr(n){return Er(n)||32===n||9===n}
function Mr (line 1) | function Mr(n,e){return!(92!==n||Er(e)||0===e)}
function Br (line 1) | function Br(n,e,t){return 45===n?Tr(e)||45===e||Mr(e,t):!!Tr(n)||92===n&...
function Nr (line 1) | function Nr(n,e,t){return 43===n||45===n?zr(e)?2:46===e&&zr(t)?3:0:46===...
function Pr (line 1) | function Pr(n){return 65279===n||65534===n?1:0}
function Fr (line 1) | function Fr(n){return n<128?Or[n]:132}
function qr (line 1) | function qr(n,e){return e<n.length?n.charCodeAt(e):0}
function Ur (line 1) | function Ur(n,e,t){return 13===t&&10===qr(n,e+1)?2:1}
function Hr (line 1) | function Hr(n,e,t){let a=n.charCodeAt(e);return Ar(a)&&(a|=32),a===t}
function Wr (line 1) | function Wr(n,e,t,a){if(t-e!==a.length||e<0||t>n.length)return!1;for(let...
function Gr (line 1) | function Gr(n,e){for(;e<n.length&&Dr(n.charCodeAt(e));e++);return e}
function Vr (line 1) | function Vr(n,e){for(;e<n.length&&zr(n.charCodeAt(e));e++);return e}
function Kr (line 1) | function Kr(n,e){if(Lr(qr(n,(e+=2)-1))){for(let t=Math.min(n.length,e+5)...
function Jr (line 1) | function Jr(n,e){for(;e<n.length;e++){let t=n.charCodeAt(e);if(!Ir(t)){i...
function Yr (line 1) | function Yr(n,e){let t=n.charCodeAt(e);if((43===t||45===t)&&(t=n.charCod...
function Zr (line 1) | function Zr(n,e){for(;e<n.length;e++){let t=n.charCodeAt(e);if(41===t){e...
function $r (line 1) | function $r(n){if(1===n.length&&!Lr(n.charCodeAt(0)))return n[0];let e=p...
function Qr (line 1) | function Qr(n=null,e){return null===n||n.length<e?new Uint32Array(Math.m...
function ns (line 1) | function ns(n){let e=n.source,t=e.length,a=e.length>0?Pr(e.charCodeAt(0)...
method constructor (line 1) | constructor(n,e,t,a){this.setSource(n,e,t,a),this.lines=null,this.column...
method setSource (line 1) | setSource(n="",e=0,t=1,a=1){this.source=n,this.startOffset=e,this.startL...
method getLocation (line 1) | getLocation(n,e){return this.computed||ns(this),{source:e,offset:this.st...
method getLocationRange (line 1) | getLocationRange(n,e,t){return this.computed||ns(this),{source:t,start:{...
function rs (line 1) | function rs(n,e,t){return n<e?e:n>t?t:n}
method constructor (line 1) | constructor(n,e){this.setSource(n,e)}
method reset (line 1) | reset(){this.eof=!1,this.tokenIndex=-1,this.tokenType=0,this.tokenStart=...
method setSource (line 1) | setSource(n="",e=()=>{}){let t=(n=String(n||"")).length,a=Qr(this.offset...
method lookupType (line 1) | lookupType(n){return(n+=this.tokenIndex)<this.tokenCount?this.offsetAndT...
method lookupTypeNonSC (line 1) | lookupTypeNonSC(n){for(let e=this.tokenIndex;e<this.tokenCount;e++){let ...
method lookupOffset (line 1) | lookupOffset(n){return(n+=this.tokenIndex)<this.tokenCount?this.offsetAn...
method lookupOffsetNonSC (line 1) | lookupOffsetNonSC(n){for(let e=this.tokenIndex;e<this.tokenCount;e++){le...
method lookupValue (line 1) | lookupValue(n,e){return(n+=this.tokenIndex)<this.tokenCount&&Wr(this.sou...
method getTokenStart (line 1) | getTokenStart(n){return n===this.tokenIndex?this.tokenStart:n>0?n<this.t...
method getTokenEnd (line 1) | getTokenEnd(n){return n===this.tokenIndex?this.tokenEnd:this.offsetAndTy...
method getTokenType (line 1) | getTokenType(n){return n===this.tokenIndex?this.tokenType:this.offsetAnd...
method substrToCursor (line 1) | substrToCursor(n){return this.source.substring(n,this.tokenStart)}
method isBlockOpenerTokenType (line 1) | isBlockOpenerTokenType(n){return 1===is[n]}
method isBlockCloserTokenType (line 1) | isBlockCloserTokenType(n){return 2===is[n]}
method getBlockTokenPairIndex (line 1) | getBlockTokenPairIndex(n){let e=this.getTokenType(n);if(1===is[e]){let t...
method isBalanceEdge (line 1) | isBalanceEdge(n){return this.balance[this.tokenIndex]<n}
method isDelim (line 1) | isDelim(n,e){return e?9===this.lookupType(e)&&this.source.charCodeAt(thi...
method skip (line 1) | skip(n){let e=this.tokenIndex+n;e<this.tokenCount?(this.tokenIndex=e,thi...
method next (line 1) | next(){let n=this.tokenIndex+1;n<this.tokenCount?(this.tokenIndex=n,this...
method skipSC (line 1) | skipSC(){for(;13===this.tokenType||25===this.tokenType;)this.next()}
method skipUntilBalanced (line 1) | skipUntilBalanced(n,e){let t=n,a=0,o=0;n:for(;t<this.tokenCount&&(a=this...
method forEachToken (line 1) | forEachToken(n){for(let e=0,t=this.firstCharOffset;e<this.tokenCount;e++...
method dump (line 1) | dump(){let n=new Array(this.tokenCount);return this.forEachToken((e,t,a,...
function ls (line 1) | function ls(n,e){function t(e){return e<s?n.charCodeAt(e):0}function a()...
method createItem (line 1) | static createItem(n){return{prev:null,next:null,data:n}}
method constructor (line 1) | constructor(){this.head=null,this.tail=null,this.cursor=null}
method createItem (line 1) | createItem(e){return n.createItem(e)}
method allocateCursor (line 1) | allocateCursor(n,e){let t;return null!==cs?(t=cs,cs=cs.cursor,t.prev=n,t...
method releaseCursor (line 1) | releaseCursor(){let{cursor:n}=this;this.cursor=n.cursor,n.prev=null,n.ne...
method updateCursors (line 1) | updateCursors(n,e,t,a){let{cursor:o}=this;for(;null!==o;)o.prev===n&&(o....
method [Symbol.iterator] (line 1) | *[Symbol.iterator](){for(let n=this.head;null!==n;n=n.next)yield n.data}
method size (line 1) | get size(){let n=0;for(let e=this.head;null!==e;e=e.next)n++;return n}
method isEmpty (line 1) | get isEmpty(){return null===this.head}
method first (line 1) | get first(){return this.head&&this.head.data}
method last (line 1) | get last(){return this.tail&&this.tail.data}
method fromArray (line 1) | fromArray(e){let t=null;this.head=null;for(let a of e){let e=n.createIte...
method toArray (line 1) | toArray(){return[...this]}
method toJSON (line 1) | toJSON(){return[...this]}
method forEach (line 1) | forEach(n,e=this){let t=this.allocateCursor(null,this.head);for(;null!==...
method forEachRight (line 1) | forEachRight(n,e=this){let t=this.allocateCursor(this.tail,null);for(;nu...
method reduce (line 1) | reduce(n,e,t=this){let a,o=this.allocateCursor(null,this.head),i=e;for(;...
method reduceRight (line 1) | reduceRight(n,e,t=this){let a,o=this.allocateCursor(this.tail,null),i=e;...
method some (line 1) | some(n,e=this){for(let t=this.head;null!==t;t=t.next)if(n.call(e,t.data,...
method map (line 1) | map(e,t=this){let a=new n;for(let n=this.head;null!==n;n=n.next)a.append...
method filter (line 1) | filter(e,t=this){let a=new n;for(let n=this.head;null!==n;n=n.next)e.cal...
method nextUntil (line 1) | nextUntil(n,e,t=this){if(null===n)return;let a=this.allocateCursor(null,...
method prevUntil (line 1) | prevUntil(n,e,t=this){if(null===n)return;let a=this.allocateCursor(n,nul...
method clear (line 1) | clear(){this.head=null,this.tail=null}
method copy (line 1) | copy(){let e=new n;for(let n of this)e.appendData(n);return e}
method prepend (line 1) | prepend(n){return this.updateCursors(null,n,this.head,n),null!==this.hea...
method prependData (line 1) | prependData(e){return this.prepend(n.createItem(e))}
method append (line 1) | append(n){return this.insert(n)}
method appendData (line 1) | appendData(e){return this.insert(n.createItem(e))}
method insert (line 1) | insert(n,e=null){if(null!==e)if(this.updateCursors(e.prev,n,e,n),null===...
method insertData (line 1) | insertData(e,t){return this.insert(n.createItem(e),t)}
method remove (line 1) | remove(n){if(this.updateCursors(n,n.prev,n,n.next),null!==n.prev)n.prev....
method push (line 1) | push(e){this.insert(n.createItem(e))}
method pop (line 1) | pop(){return null!==this.tail?this.remove(this.tail):null}
method unshift (line 1) | unshift(e){this.prepend(n.createItem(e))}
method shift (line 1) | shift(){return null!==this.head?this.remove(this.head):null}
method prependList (line 1) | prependList(n){return this.insertList(n,this.head)}
method appendList (line 1) | appendList(n){return this.insertList(n)}
method insertList (line 1) | insertList(n,e){return null===n.head||(null!=e?(this.updateCursors(e.pre...
method replace (line 1) | replace(n,e){"head"in e?this.insertList(e,n):this.insert(e,n),this.remov...
function ds (line 1) | function ds(n,e){let t=Object.create(SyntaxError.prototype),a=new Error;...
function ps (line 1) | function ps({source:n,line:e,column:t,baseLine:a,baseColumn:o},i){functi...
function us (line 1) | function us(n,e,t,a,o,i=1,r=1){return Object.assign(ds("SyntaxError",n),...
function gs (line 1) | function gs(n){let e=this.createList(),t=!1,a={recognizer:n};for(;!this....
function bs (line 1) | function bs(n){return function(){return this[n]()}}
function fs (line 1) | function fs(n){let e=Object.create(null);for(let t of Object.keys(n)){le...
function ks (line 1) | function ks(n){let e="",t="<unknown>",a=!1,o=ws,i=!1,r=new es,s=Object.a...
function zs (line 1) | function zs(n){let e=new Set(n.map(([n,e])=>Ss(n)<<16|Ss(e)));return fun...
function Ts (line 1) | function Ts(n,e){if("function"==typeof e){let t=null;return void n.child...
function Is (line 1) | function Is(n){ls(n,(e,t,a)=>{this.token(e,n.slice(t,a))})}
function Rs (line 1) | function Rs(n){let e=new Map;for(let[t,a]of Object.entries(n.node))"func...
function Ms (line 1) | function Ms(n){return"function"==typeof n?n:Ds}
function Bs (line 1) | function Bs(n,e){return function(t,a,o){t.type===e&&n.call(this,t,a,o)}}
function Ns (line 1) | function Ns(n,e){let t=e.structure,a=[];for(let n in t){if(!1===Es.call(...
function Ps (line 1) | function Ps(n,e){let t=n.fields.slice(),a=n.context,o="string"==typeof a...
function Os (line 1) | function Os({StyleSheet:n,Atrule:e,Rule:t,Block:a,DeclarationList:o}){re...
function _s (line 1) | function _s(n){let e=function(n){let e={};for(let t in n.node)if(Es.call...
function Fs (line 1) | function Fs(n){return n}
function qs (line 1) | function qs(n,e,t,a){let o;switch(n.type){case"Group":o=function(n,e,t,a...
function Us (line 1) | function Us(n,e){let t=Fs,a=!1,o=!1;return"function"==typeof e?t=e:e&&(a...
function Ws (line 1) | function Ws(n,e){let t=n&&n.loc&&n.loc[e];return t?"line"in t?Gs(t):t:null}
function Gs (line 1) | function Gs({offset:n,line:e,column:t},a){let o={offset:n,line:e,column:...
function Xs (line 1) | function Xs(n,e){return e=e||0,n.length-e>=2&&45===n.charCodeAt(e)&&45==...
function Qs (line 1) | function Qs(n,e){if(e=e||0,n.length-e>=3&&45===n.charCodeAt(e)&&45!==n.c...
function al (line 1) | function al(n,e){return null!==n&&9===n.type&&n.value.charCodeAt(0)===e}
function ol (line 1) | function ol(n,e,t){for(;null!==n&&(13===n.type||25===n.type);)n=t(++e);r...
function il (line 1) | function il(n,e,t,a){if(!n)return 0;let o=n.value.charCodeAt(e);if(43===...
function rl (line 1) | function rl(n,e,t){let a=!1,o=ol(n,e,t);if(null===(n=t(o)))return e;if(1...
function sl (line 1) | function sl(n,e){return null!==n&&9===n.type&&n.value.charCodeAt(0)===e}
function ll (line 1) | function ll(n,e,t){let a=0;for(let o=e;o<n.value.length;o++){let i=n.val...
function cl (line 1) | function cl(n,e,t){if(!n)return 0;for(;sl(t(e),63);){if(++n>6)return 0;e...
function hl (line 1) | function hl(n,e){return e<n.length?n.charCodeAt(e):0}
function pl (line 1) | function pl(n,e){return Wr(n,0,n.length,e)}
function ul (line 1) | function ul(n,e){for(let t=0;t<e.length;t++)if(pl(n,e[t]))return!0;retur...
function gl (line 1) | function gl(n,e){return e===n.length-2&&(92===hl(n,e)&&zr(hl(n,e+1)))}
function wl (line 1) | function wl(n,e,t){if(n&&"Range"===n.type){let a=Number(void 0!==t&&t!==...
function bl (line 1) | function bl(n){return function(e,t,a){return null===e?0:2===e.type&&ul(e...
function fl (line 1) | function fl(n){return function(e){return null===e||e.type!==n?0:1}}
function kl (line 1) | function kl(n){return null===n||1!==n.type||45!==hl(n.value,0)||45!==hl(...
function yl (line 1) | function yl(n){return n&&(n=new Set(n)),function(e,t,a){if(null===e||12!...
function vl (line 1) | function vl(n){return"function"!=typeof n&&(n=function(){return 0}),func...
function xl (line 1) | function xl(n){let{angle:e,decibel:t,frequency:a,flex:o,length:i,resolut...
function Ml (line 1) | function Ml(n,e,t){return Object.assign(ds("SyntaxError",n),{input:e,off...
method constructor (line 1) | constructor(n){this.str=n,this.pos=0}
method charCodeAt (line 1) | charCodeAt(n){return n<this.str.length?this.str.charCodeAt(n):0}
method charCode (line 1) | charCode(){return this.charCodeAt(this.pos)}
method isNameCharCode (line 1) | isNameCharCode(n=this.charCode()){return n<128&&1===Bl[n]}
method nextCharCode (line 1) | nextCharCode(){return this.charCodeAt(this.pos+1)}
method nextNonWsCode (line 1) | nextNonWsCode(n){return this.charCodeAt(this.findWsEnd(n))}
method skipWs (line 1) | skipWs(){this.pos=this.findWsEnd(this.pos)}
method findWsEnd (line 1) | findWsEnd(n){for(;n<this.str.length;n++){let e=this.str.charCodeAt(n);if...
method substringToPos (line 1) | substringToPos(n){return this.str.substring(this.pos,this.pos=n)}
method eat (line 1) | eat(n){this.charCode()!==n&&this.error("Expect `"+String.fromCharCode(n)...
method peek (line 1) | peek(){return this.pos<this.str.length?this.str.charAt(this.pos++):""}
method error (line 1) | error(n){throw new Ml(n,this.str,this.pos)}
method scanSpaces (line 1) | scanSpaces(){return this.substringToPos(this.findWsEnd(this.pos))}
method scanWord (line 1) | scanWord(){let n=this.pos;for(;n<this.str.length;n++){let e=this.str.cha...
method scanNumber (line 1) | scanNumber(){let n=this.pos;for(;n<this.str.length;n++){let e=this.str.c...
method scanString (line 1) | scanString(){let n=this.str.indexOf("'",this.pos+1);return-1===n&&(this....
function cc (line 1) | function cc(n){let e=null,t=null;return n.eat(oc),n.skipWs(),e=n.scanNum...
function mc (line 1) | function mc(n,e){let t=function(n){let e=null,t=!1;switch(n.charCode()){...
function dc (line 1) | function dc(n){let e=n.peek();return""===e?null:mc(n,{type:"Token",value...
function hc (line 1) | function hc(n){let e,t=null;if(n.eat(Xl),e=n.scanWord(),"boolean-expr"==...
function pc (line 1) | function pc(n,e){function t(n,e){return{type:"Group",terms:n,combinator:...
function uc (line 1) | function uc(n,e){let t,a=Object.create(null),o=[],i=null,r=n.pos;for(;n....
function gc (line 1) | function gc(n,e){let t=n.charCode();switch(t){case ac:break;case tc:retu...
function wc (line 1) | function wc(n){let e=new Nl(n),t=uc(e);return e.pos!==n.length&&e.error(...
function fc (line 1) | function fc(n){return"function"==typeof n?n:bc}
function kc (line 1) | function kc(n,e,t){let a=bc,o=bc;if("function"==typeof e?a=e:e&&(a=fc(e....
method decorator (line 1) | decorator(n){let e=[],t=null;return{...n,node(e){let a=t;t=e,n.node.call...
function vc (line 1) | function vc(n,e){return"string"==typeof n?function(n){let e=[];return ls...
function Cc (line 1) | function Cc(n,e,t){return e===jc&&t===Sc||n===jc&&e===jc&&t===jc?n:("If"...
function zc (line 1) | function zc(n){return n.length>2&&40===n.charCodeAt(n.length-2)&&41===n....
function Lc (line 1) | function Lc(n){return"Keyword"===n.type||"AtKeyword"===n.type||"Function...
function Ac (line 1) | function Ac(n,e=" ",t=!1){return{type:"Group",terms:n,combinator:e,disal...
function Tc (line 1) | function Tc(n,e,t=new Set){if(!t.has(n))switch(t.add(n),n.type){case"If"...
function Ic (line 1) | function Ic(n,e,t){switch(n){case" ":{let n=jc;for(let t=e.length-1;t>=0...
function Rc (line 1) | function Rc(n){if("function"==typeof n)return{type:"Generic",fn:n};switc...
function Ec (line 1) | function Ec(n,e){return"string"==typeof n&&(n=wc(n)),{type:"MatchGraph",...
function Bc (line 1) | function Bc(n,e){if(n.length!==e.length)return!1;for(let t=0;t<n.length;...
function Nc (line 1) | function Nc(n){return null===n||(18===n.type||2===n.type||21===n.type||1...
function Pc (line 1) | function Pc(n){return null===n||(22===n.type||20===n.type||24===n.type||...
function Oc (line 1) | function Oc(n,e,t){let a=function(n,e,t){function a(){do{f++,b=f<n.lengt...
function Fc (line 1) | function Fc(n){function e(n){return null!==n&&("Type"===n.type||"Propert...
function qc (line 1) | function qc(n,e){return Wc(this,n,n=>"Type"===n.type&&n.name===e)}
function Uc (line 1) | function Uc(n,e){return Wc(this,n,n=>"Property"===n.type&&n.name===e)}
function Hc (line 1) | function Hc(n){return Wc(this,n,n=>"Keyword"===n.type)}
function Wc (line 1) | function Wc(n,e,t){let a=Fc.call(n,e);return null!==a&&a.some(t)}
function Gc (line 1) | function Gc(n){return"node"in n?n.node:Gc(n.match[0])}
function Vc (line 1) | function Vc(n){return"node"in n?n.node:Vc(n.match[n.match.length-1])}
function Kc (line 1) | function Kc(n,e,t,a,o){let i=[];return null!==t.matched&&function t(r){i...
function Yc (line 1) | function Yc(n){return"number"==typeof n&&isFinite(n)&&Math.floor(n)===n&...
function Zc (line 1) | function Zc(n){return!!n&&Yc(n.offset)&&Yc(n.line)&&Yc(n.column)}
function $c (line 1) | function $c(n,e){return function(t,a){if(!t||t.constructor!==Object)retu...
function Xc (line 1) | function Xc(n,e){let t=[];for(let a=0;a<n.length;a++){let o=n[a];if(o===...
function Qc (line 1) | function Qc(n,e){let t=e.structure,a={type:String,loc:!0},o={type:'"'+n+...
function nm (line 1) | function nm(n,e,t){let a={};for(let o in n)n[o].syntax&&(a[o]=t?n[o].syn...
function em (line 1) | function em(n,e,t){let a={};for(let[o,i]of Object.entries(n))a[o]={prelu...
function tm (line 1) | function tm(n,e,t){return{matched:n,iterations:t,error:e,..._c}}
function am (line 1) | function am(n,e,t,a){let o,i=vc(t,n.syntax);return function(n){for(let e...
method constructor (line 1) | constructor(n,e,t){if(this.cssWideKeywords=nl,this.syntax=e,this.generic...
method checkStructure (line 1) | checkStructure(n){function e(n,e){a.push({node:n,message:e})}let t=this....
method createDescriptor (line 1) | createDescriptor(n,e,t,a=null){let o={type:e,name:t},i={type:e,name:t,pa...
method addAtrule_ (line 1) | addAtrule_(n,e){e&&(this.atrules[n]={type:"Atrule",name:n,prelude:e.prel...
method addProperty_ (line 1) | addProperty_(n,e){e&&(this.properties[n]=this.createDescriptor(e,"Proper...
method addType_ (line 1) | addType_(n,e){e&&(this.types[n]=this.createDescriptor(e,"Type",n))}
method checkAtruleName (line 1) | checkAtruleName(n){if(!this.getAtrule(n))return new Vs("Unknown at-rule"...
method checkAtrulePrelude (line 1) | checkAtrulePrelude(n,e){let t=this.checkAtruleName(n);if(t)return t;let ...
method checkAtruleDescriptorName (line 1) | checkAtruleDescriptorName(n,e){let t=this.checkAtruleName(n);if(t)return...
method checkPropertyName (line 1) | checkPropertyName(n){if(!this.getProperty(n))return new Vs("Unknown prop...
method matchAtrulePrelude (line 1) | matchAtrulePrelude(n,e){let t=this.checkAtrulePrelude(n,e);if(t)return t...
method matchAtruleDescriptor (line 1) | matchAtruleDescriptor(n,e,t){let a=this.checkAtruleDescriptorName(n,e);i...
method matchDeclaration (line 1) | matchDeclaration(n){return"Declaration"!==n.type?tm(null,new Error("Not ...
method matchProperty (line 1) | matchProperty(n,e){if($s(n).custom)return tm(null,new Error("Lexer match...
method matchType (line 1) | matchType(n,e){let t=this.getType(n);return t?am(this,t,e,!1):tm(null,ne...
method match (line 1) | match(n,e){return"string"==typeof n||n&&n.type?(("string"==typeof n||!n....
method findValueFragments (line 1) | findValueFragments(n,e,t,a){return Kc(this,e,this.matchProperty(n,e),t,a)}
method findDeclarationValueFragments (line 1) | findDeclarationValueFragments(n,e,t){return Kc(this,n.value,this.matchDe...
method findAllFragments (line 1) | findAllFragments(n,e,t){let a=[];return this.syntax.walk(n,{visit:"Decla...
method getAtrule (line 1) | getAtrule(n,e=!0){let t=Zs(n);return(t.vendor&&e?this.atrules[t.name]||t...
method getAtrulePrelude (line 1) | getAtrulePrelude(n,e=!0){let t=this.getAtrule(n,e);return t&&t.prelude||...
method getAtruleDescriptor (line 1) | getAtruleDescriptor(n,e){return this.atrules.hasOwnProperty(n)&&this.atr...
method getProperty (line 1) | getProperty(n,e=!0){let t=$s(n);return(t.vendor&&e?this.properties[t.nam...
method getType (line 1) | getType(n){return hasOwnProperty.call(this.types,n)?this.types[n]:null}
method validate (line 1) | validate(){function n(n,e){return e?`<${n}>`:`<'${n}'>`}function e(i,r,s...
method dump (line 1) | dump(n,e){return{generic:this.generic,cssWideKeywords:this.cssWideKeywor...
method toString (line 1) | toString(){return JSON.stringify(this.dump())}
function im (line 1) | function im(n,e){return"string"==typeof e&&/^\s*\|/.test(e)?"string"==ty...
function rm (line 1) | function rm(n,e){let t=Object.create(null);for(let a of Object.keys(n))e...
function sm (line 1) | function sm(n,e,t){let a={...n};for(let[n,o]of Object.entries(e))a[n]={....
function lm (line 1) | function lm(n,e){let t={...n};for(let[a,o]of Object.entries(e))switch(a)...
function cm (line 1) | function cm(n){let e=ks(n),t=_s(n),a=Rs(n),{fromPlainObject:o,toPlainObj...
function bm (line 1) | function bm(n,e){let t=this.tokenStart+n,a=this.charCodeAt(t);for((a===h...
function fm (line 1) | function fm(n){return bm.call(this,0,n)}
function km (line 1) | function km(n,e){if(!this.cmpChar(this.tokenStart+n,e)){let t="";switch(...
function ym (line 1) | function ym(){let n=0,e=0,t=this.tokenType;for(;13===t||25===t;)t=this.l...
function Sm (line 1) | function Sm(){let n=this.tokenStart,e=null,t=null;if(10===this.tokenType...
function xm (line 1) | function xm(n){if(n.a){let e=("+1"===n.a||"1"===n.a?"n":"-1"===n.a&&"-n"...
function zm (line 1) | function zm(){return this.Raw(this.consumeUntilLeftCurlyBracketOrSemicol...
function Lm (line 1) | function Lm(){for(let n,e=1;n=this.lookupType(e);e++){if(24===n)return!0...
function Rm (line 1) | function Rm(n=!1){let e,t,a=this.tokenStart,o=null,i=null;switch(this.ea...
function Em (line 1) | function Em(n){this.token(3,"@"+n.name),null!==n.prelude&&this.node(n.pr...
function Pm (line 1) | function Pm(n){let e=null;return null!==n&&(n=n.toLowerCase()),this.skip...
function Om (line 1) | function Om(n){this.children(n)}
function Vm (line 1) | function Vm(){this.eof&&this.error("Unexpected end of input");let n=this...
function Km (line 1) | function Km(){let n=this.tokenStart,e=this.charCodeAt(n);return e!==Um&&...
function Zm (line 1) | function Zm(){let n,e=this.tokenStart,t=null,a=null,o=null;return this.e...
function $m (line 1) | function $m(n){this.token(9,"["),this.node(n.name),null!==n.matcher&&(th...
function nd (line 1) | function nd(){return this.Raw(null,!0)}
function ed (line 1) | function ed(){return this.parseWithFallback(this.Rule,nd)}
function td (line 1) | function td(){return this.Raw(this.consumeUntilSemicolonIncluded,!0)}
function ad (line 1) | function ad(){if(17===this.tokenType)return td.call(this,this.tokenIndex...
function sd (line 1) | function sd(n){let e=n?ad:ed,t=this.tokenStart,a=this.createList();this....
function ld (line 1) | function ld(n){this.token(23,"{"),this.children(n,n=>{"Declaration"===n....
function hd (line 1) | function hd(n,e){let t=this.tokenStart,a=null;return this.eat(19),a=n.ca...
function pd (line 1) | function pd(n){this.token(9,"["),this.children(n),this.token(9,"]")}
function bd (line 1) | function bd(){let n=this.tokenStart;return this.eat(15),{type:"CDC",loc:...
function fd (line 1) | function fd(){this.token(15,"--\x3e")}
function jd (line 1) | function jd(){let n=this.tokenStart;return this.eat(14),{type:"CDO",loc:...
function Sd (line 1) | function Sd(){this.token(14,"\x3c!--")}
function Ad (line 1) | function Ad(){return this.eatDelim(Cd),{type:"ClassSelector",loc:this.ge...
function Td (line 1) | function Td(n){this.token(9,"."),this.token(1,n.name)}
function Pd (line 1) | function Pd(){let n,e=this.tokenStart;switch(this.tokenType){case 13:n="...
function Od (line 1) | function Od(n){this.tokenize(n.name)}
function Wd (line 1) | function Wd(){let n=this.tokenStart,e=this.tokenEnd;return this.eat(25),...
function Gd (line 1) | function Gd(n){this.token(25,"/*"+n.value+"*/")}
function Zd (line 1) | function Zd(n){return 1===this.lookupTypeNonSC(1)&&Kd.has(this.lookupTyp...
method supports (line 1) | supports(){return this.SupportsDeclaration()}
function Xd (line 1) | function Xd(n="media"){let e=this.createList();n:for(;!this.eof;)switch(...
function Qd (line 1) | function Qd(n){n.children.forEach(n=>{"Condition"===n.type?(this.token(2...
function lh (line 1) | function lh(){return this.Raw(this.consumeUntilExclamationMarkOrSemicolo...
function ch (line 1) | function ch(){return this.Raw(this.consumeUntilExclamationMarkOrSemicolo...
function mh (line 1) | function mh(){let n=this.tokenIndex,e=this.Value();return"Raw"!==e.type&...
function uh (line 1) | function uh(){let n,e=this.tokenStart,t=this.tokenIndex,a=wh.call(this),...
function gh (line 1) | function gh(n){this.token(1,n.property),this.token(16,":"),this.node(n.v...
function wh (line 1) | function wh(){let n=this.tokenStart;if(9===this.tokenType)switch(this.ch...
function bh (line 1) | function bh(){this.eat(9),this.skipSC();let n=this.consume(1);return"imp...
function yh (line 1) | function yh(){return this.Raw(this.consumeUntilSemicolonIncluded,!0)}
function Sh (line 1) | function Sh(){let n=this.createList();for(;!this.eof;)switch(this.tokenT...
function xh (line 1) | function xh(n){this.children(n,n=>{"Declaration"===n.type&&this.token(17...
function Ah (line 1) | function Ah(){let n=this.tokenStart,e=this.consumeNumber(12);return{type...
function Th (line 1) | function Th(n){this.token(12,n.value+n.unit)}
function Mh (line 1) | function Mh(n){let e,t=this.tokenStart,a=null;if(this.eat(21),this.skipS...
function Bh (line 1) | function Bh(n){this.token(21,"("),this.token(1,n.name),null!==n.value&&(...
function _h (line 1) | function _h(n,e){let t=(this.features[n]||{})[e];return"function"!=typeo...
function Fh (line 1) | function Fh(n="unknown"){let e=this.tokenStart,t=this.consumeFunctionNam...
function qh (line 1) | function qh(n){this.token(2,n.feature+"("),this.node(n.value),this.token...
function Yh (line 1) | function Yh(){switch(this.skipSC(),this.tokenType){case 10:return this.i...
function Zh (line 1) | function Zh(n){if(this.skipSC(),this.isDelim(Wh)||this.isDelim(Vh)){let ...
function $h (line 1) | function $h(n="unknown"){let e=this.tokenStart;this.skipSC(),this.eat(21...
function Xh (line 1) | function Xh(n){this.token(21,"("),this.node(n.left),this.tokenize(n.left...
function ap (line 1) | function ap(n,e){let t,a=this.tokenStart,o=this.consumeFunctionName(),i=...
function op (line 1) | function op(n){this.token(2,n.name+"("),this.children(n),this.token(22,"...
function lp (line 1) | function lp(n){let e=this.tokenStart,t=null;2===this.tokenType?t=this.co...
function cp (line 1) | function cp(n){n.function?this.token(2,n.function+"("):this.token(21,"("...
function up (line 1) | function up(){let n=this.tokenStart;return this.eat(4),{type:"Hash",loc:...
function gp (line 1) | function gp(n){this.token(4,"#"+n.value)}
function kp (line 1) | function kp(){return{type:"Identifier",loc:this.getLocation(this.tokenSt...
function yp (line 1) | function yp(n){this.token(1,n.name)}
function xp (line 1) | function xp(){let n=this.tokenStart;return this.eat(4),{type:"IdSelector...
function Cp (line 1) | function Cp(n){this.token(9,"#"+n.name)}
function Ip (line 1) | function Ip(){let n=this.tokenStart,e=this.consume(1);for(;this.isDelim(...
function Rp (line 1) | function Rp(n){this.tokenize(n.name)}
function Bp (line 1) | function Bp(){let n=this.createList();for(this.skipSC();!this.eof&&(n.pu...
function Np (line 1) | function Np(n){this.children(n,()=>this.token(18,","))}
function Fp (line 1) | function Fp(){let n=this.tokenStart,e=null,t=null,a=null;if(this.skipSC(...
function qp (line 1) | function qp(n){n.mediaType?(n.modifier&&this.token(1,n.modifier),this.to...
function Gp (line 1) | function Gp(){let n=this.createList();for(this.skipSC();!this.eof&&(n.pu...
function Vp (line 1) | function Vp(n){this.children(n,()=>this.token(18,","))}
function $p (line 1) | function $p(){let n=this.tokenStart;return this.eatDelim(Jp),{type:"Nest...
function Xp (line 1) | function Xp(){this.token(9,"&")}
function tu (line 1) | function tu(){this.skipSC();let n,e=this.tokenStart,t=e,a=null;return n=...
function au (line 1) | function au(n){this.node(n.nth),null!==n.selector&&(this.token(1,"of"),t...
function su (line 1) | function su(){return{type:"Number",loc:this.getLocation(this.tokenStart,...
function lu (line 1) | function lu(n){this.token(10,n.value)}
function hu (line 1) | function hu(){let n=this.tokenStart;return this.next(),{type:"Operator",...
function pu (line 1) | function pu(n){this.tokenize(n.value)}
function bu (line 1) | function bu(n,e){let t=this.tokenStart,a=null;return this.eat(21),a=n.ca...
function fu (line 1) | function fu(n){this.token(21,"("),this.children(n),this.token(22,")")}
function ju (line 1) | function ju(){return{type:"Percentage",loc:this.getLocation(this.tokenSt...
function Su (line 1) | function Su(n){this.token(11,n.value+"%")}
function Au (line 1) | function Au(){let n,e,t=this.tokenStart,a=null;return this.eat(16),2===t...
function Tu (line 1) | function Tu(n){this.token(16,":"),null===n.children?this.token(1,n.name)...
function Mu (line 1) | function Mu(){let n,e,t=this.tokenStart,a=null;return this.eat(16),this....
function Bu (line 1) | function Bu(n){this.token(16,":"),this.token(16,":"),null===n.children?t...
function Ou (line 1) | function Ou(){switch(this.skipSC(),this.tokenType){case 10:return this.N...
function qu (line 1) | function qu(){let n=this.tokenStart,e=Ou.call(this),t=null;return this.s...
function Uu (line 1) | function Uu(n){this.node(n.left),this.token(9,"/"),n.right?this.node(n.r...
function Wu (line 1) | function Wu(){return this.tokenIndex>0&&13===this.lookupType(-1)?this.to...
function Ku (line 1) | function Ku(n,e){let t,a=this.getTokenStart(this.tokenIndex);return this...
function Ju (line 1) | function Ju(n){this.tokenize(n.value)}
function Zu (line 1) | function Zu(){return this.Raw(this.consumeUntilLeftCurlyBracket,!0)}
function $u (line 1) | function $u(){let n=this.SelectorList();return"Raw"!==n.type&&!1===this....
function eg (line 1) | function eg(){let n,e,t=this.tokenIndex,a=this.tokenStart;return n=this....
function tg (line 1) | function tg(n){this.node(n.prelude),this.node(n.block)}
function rg (line 1) | function rg(){let n=null,e=null;this.skipSC();let t=this.tokenStart;retu...
function sg (line 1) | function sg(n){n.root&&(this.token(21,"("),this.node(n.root),this.token(...
function dg (line 1) | function dg(){let n=this.readSequence(this.scope.Selector);return null==...
function hg (line 1) | function hg(n){this.children(n)}
function bg (line 1) | function bg(){let n=this.createList();for(;!this.eof&&(n.push(this.Selec...
function fg (line 1) | function fg(n){this.children(n,()=>this.token(18,","))}
function Sg (line 1) | function Sg(n){let e=n.length,t=n.charCodeAt(0),a=t===vg||t===jg?1:0,o=1...
function xg (line 1) | function xg(n,e){let t=e?"'":'"',a=e?jg:vg,o="",i=!1;for(let e=0;e<n.len...
function Lg (line 1) | function Lg(){return{type:"String",loc:this.getLocation(this.tokenStart,...
function Ag (line 1) | function Ag(n){this.token(5,xg(n.value))}
function Rg (line 1) | function Rg(){return this.Raw(null,!1)}
function Bg (line 1) | function Bg(){let n,e=this.tokenStart,t=this.createList();for(;!this.eof...
function Ng (line 1) | function Ng(n){this.children(n)}
function Fg (line 1) | function Fg(){let n=this.tokenStart;this.eat(21),this.skipSC();let e=thi...
function qg (line 1) | function qg(n){this.token(21,"("),this.node(n.declaration),this.token(22...
function Gg (line 1) | function Gg(){1!==this.tokenType&&!1===this.isDelim(Hg)&&this.error("Ide...
function Jg (line 1) | function Jg(){let n=this.tokenStart;return this.isDelim(Wg)?(this.next()...
function Yg (line 1) | function Yg(n){this.tokenize(n.name)}
function nw (line 1) | function nw(n,e){let t=0;for(let a=this.tokenStart+n;a<this.tokenEnd;a++...
function ew (line 1) | function ew(n){let e=0;for(;this.isDelim(Qg);)++e>n&&this.error("Too man...
function tw (line 1) | function tw(n){this.charCodeAt(this.tokenStart)!==n&&this.error((n===$g?...
function aw (line 1) | function aw(){let n=0;switch(this.tokenType){case 10:if(n=nw.call(this,1...
function rw (line 1) | function rw(){let n=this.tokenStart;return this.eatIdent("u"),aw.call(th...
function sw (line 1) | function sw(n){this.tokenize(n.value)}
function gw (line 1) | function gw(n){let e=n.length,t=4,a=n.charCodeAt(e-1)===uw?e-2:e-1,o="";...
function ww (line 1) | function ww(n){let e="",t=!1;for(let a=0;a<n.length;a++){let o=n.charCod...
function kw (line 1) | function kw(){let n,e=this.tokenStart;switch(this.tokenType){case 7:n=gw...
function yw (line 1) | function yw(n){this.token(7,ww(n.value))}
function xw (line 1) | function xw(){let n=this.tokenStart,e=this.readSequence(this.scope.Value...
function Cw (line 1) | function Cw(n){this.children(n)}
function Iw (line 1) | function Iw(){return this.eat(13),Lw}
function Rw (line 1) | function Rw(n){this.token(13,n.value)}
function Mw (line 1) | function Mw(n){switch(this.tokenType){case 4:return this.Hash();case 18:...
function Pw (line 1) | function Pw(n){return null!==n&&"Operator"===n.type&&("-"===n.value[n.va...
method onWhiteSpace (line 1) | onWhiteSpace(n,e){Pw(n)&&(n.value=" "+n.value),Pw(e.last)&&(e.last.value...
method prelude (line 1) | prelude(){let n=this.createList();if(1===this.tokenType){let e=this.subs...
method block (line 1) | block(n=!1){return this.Block(n)}
method block (line 1) | block(){return this.Block(!0)}
function Uw (line 1) | function Uw(n,e){return this.parseWithFallback(()=>{try{return n.call(th...
method layer (line 1) | layer(){this.skipSC();let n=this.createList(),e=Uw.call(this,this.Layer)...
method supports (line 1) | supports(){this.skipSC();let n=this.createList(),e=Uw.call(this,this.Dec...
method prelude (line 1) | prelude(){let n=this.createList();switch(this.tokenType){case 5:n.push(t...
method prelude (line 1) | prelude(){return this.createSingleNodeList(this.LayerList())}
method block (line 1) | block(){return this.Block(!1)}
method prelude (line 1) | prelude(){return this.createSingleNodeList(this.MediaQueryList())}
method block (line 1) | block(n=!1){return this.Block(n)}
method prelude (line 1) | prelude(){return this.createSingleNodeList(this.SelectorList())}
method block (line 1) | block(){return this.Block(!0)}
method prelude (line 1) | prelude(){return this.createSingleNodeList(this.SelectorList())}
method block (line 1) | block(){return this.Block(!0)}
method prelude (line 1) | prelude(){return this.createSingleNodeList(this.Scope())}
method block (line 1) | block(n=!1){return this.Block(n)}
method block (line 1) | block(n=!1){return this.Block(n)}
method prelude (line 1) | prelude(){return this.createSingleNodeList(this.Condition("supports"))}
method block (line 1) | block(n=!1){return this.Block(n)}
method parse (line 1) | parse(){return this.createSingleNodeList(this.SelectorList())}
method parse (line 1) | parse(){return this.createSingleNodeList(this.Selector())}
method parse (line 1) | parse(){return this.createSingleNodeList(this.Identifier())}
method parse (line 1) | parse(){return this.createSingleNodeList(this.Nth())}
method atrulePrelude (line 1) | atrulePrelude(n){return this.AtrulePrelude(n.atrule?String(n.atrule):null)}
method condition (line 1) | condition(n){return this.Condition(n.kind)}
method block (line 1) | block(){return this.Block(!0)}
method selector (line 1) | selector(){return this.Selector()}
method style (line 1) | style(){return this.Declaration()}
function lb (line 1) | function lb(n){let e={};for(let t of Object.keys(n)){let a=n[t];a&&(Arra...
function mb (line 1) | function mb(n){let e=n.length-1,t="";for(let a=0;a<n.length;a++){let o=n...
function db (line 1) | function db(n){let e="";if(1===n.length&&45===n.charCodeAt(0))return"\\-...
function Bb (line 1) | function Bb(n){return new Error("[parse-css-font] "+n)}
function Nb (line 1) | function Nb(n){return n?(('"'===n[0]&&'"'===n[n.length-1]||"'"===n[0]&&"...
function Pb (line 1) | function Pb(n,e=0){const t=[{mode:"normal",character:null}],a=[];let o=0...
function Ob (line 1) | function Ob(n,e=0){const t=[];let a,o=0,i=!1;function r(){return{before:...
function _b (line 1) | function _b(n){this.constructor(n),this.nodes=n.nodes,void 0===this.afte...
function Fb (line 1) | function Fb(n){this.after=n.after,this.before=n.before,this.type=n.type,...
function lk (line 1) | function lk(n="",e=Ub){const t=[],a=[];let o;const i=n;function r(e){n=n...
function ck (line 1) | function ck(n){function e(n){return" "===n||"\t"===n||"\n"===n||"\f"===n...
method constructor (line 1) | constructor(e){e=String(e);const t=n(e);if(null===t)throw new Error(`Cou...
method parse (line 1) | static parse(n){try{return new this(n)}catch(n){return null}}
method essence (line 1) | get essence(){return`${this.type}/${this.subtype}`}
method type (line 1) | get type(){return this._type}
method type (line 1) | set type(n){if(0===(n=t(String(n))).length)throw new Error("Invalid type...
method subtype (line 1) | get subtype(){return this._subtype}
method subtype (line 1) | set subtype(n){if(0===(n=t(String(n))).length)throw new Error("Invalid s...
method parameters (line 1) | get parameters(){return this._parameters}
method toString (line 1) | toString(){return e(this)}
method isJavaScript (line 1) | isJavaScript({allowParameters:n=!1}={}){switch(this._type){case"text":sw...
method isXML (line 1) | isXML(){return"xml"===this._subtype&&("text"===this._type||"application"...
method isHTML (line 1) | isHTML(){return"html"===this._subtype&&"text"===this._type}
class i (line 1) | class i{constructor(n){this._map=n}get size(){return this._map.size}get(...
method constructor (line 1) | constructor(n){this._map=n}
method size (line 1) | get size(){return this._map.size}
method get (line 1) | get(n){return n=t(String(n)),this._map.get(n)}
method has (line 1) | has(n){return n=t(String(n)),this._map.has(n)}
method set (line 1) | set(n,e){if(n=t(String(n)),e=String(e),!a(n))throw new Error(`Invalid ...
method clear (line 1) | clear(){this._map.clear()}
method delete (line 1) | delete(n){return n=t(String(n)),this._map.delete(n)}
method forEach (line 1) | forEach(n,e){this._map.forEach(n,e)}
method keys (line 1) | keys(){return this._map.keys()}
method values (line 1) | values(){return this._map.values()}
method entries (line 1) | entries(){return this._map.entries()}
method [Symbol.iterator] (line 1) | [Symbol.iterator](){return this._map[Symbol.iterator]()}
function yk (line 1) | function yk(n,e,t,a){const o={rules:{processed:0,discarded:0},fonts:{pro...
function vk (line 1) | function vk(n,e,t){n.forEach(n=>{if("Atrule"==n.type&&("media"==n.name||...
function jk (line 1) | function jk(n,e,t,a,o){const i=[];for(let r=n.head;r;r=r.next){const n=r...
function Sk (line 1) | function Sk(n,e,t,a){let o;const i=a&&a.get(e);if(i&&i.length){let a=zk(...
function xk (line 1) | function xk(n,e){let t;for(const a of n.split(",")){let{min:n,max:o}=Ck(...
function Ck (line 1) | function Ck(n){const e=n.split(" ");return{min:Number.parseInt(uk.getFon...
function zk (line 1) | function zk(n,e){let t;if(n&&(t=n.filter(n=>n.property==e).tail),t)try{r...
function Lk (line 1) | function Lk(n,e){let t=n.children.filter(n=>"font-family"==n.property).t...
function Ak (line 1) | function Ak(n,e){let t=n.children.head;for(;t;)if("Identifier"==t.data.t...
function Tk (line 1) | function Tk(n,e,t){let a;if(t=t.map(n=>n.map(n=>String(Number.parseInt(n...
function Ik (line 1) | function Ik(n,e){return e.slice().reverse().find(e=>e[e.length-1]<n)}
function Rk (line 1) | function Rk(n,e){return e.find(e=>e[0]>n)}
function Ek (line 1) | function Ek(n,e,t,a){return e.forEach(e=>{e.block&&e.block.children&&e.p...
function Dk (line 1) | function Dk(n,e,t){const a=Mk(n,"content",e),o=Mk(n,"quotes",e);return t...
function Mk (line 1) | function Mk(n,e,t){const a=zk(n,e)||"";return a?(t.textContent='tmp { co...
function Bk (line 1) | function Bk(n,e){if(e){const t=e.split(gk),a=t.filter(e=>{const t=e.spli...
function Nk (line 1) | function Nk(n){return n=n.replace(fk,""),parseInt(n,16)}
function Pk (line 1) | function Pk(n){return function(n){const e=[];let t=0,a=0;const o=/^(\s*)...
function Ok (line 1) | function Ok(n){if(!n||!n.nodes)return!1;for(const e of n.nodes)if(e&&"ke...
function _k (line 1) | function _k(n,e){for(let t=e-1;t>=0;t--){const e=n.nodes[t];if(e){if("op...
function Fk (line 1) | function Fk(n,e=[]){for(let t=0;t<n.nodes.length;t++){const a=n.nodes[t]...
function qk (line 1) | function qk(n){if(!n||!n.nodes)return!1;for(const e of n.nodes)if(e){if(...
function Wk (line 1) | function Wk(n,{keepPrintStyleSheets:e}={}){const t={processed:0,discarde...
function Gk (line 1) | function Gk(n,e,t,a=[]){for(let o=n.head;o;o=o.next){const i=o.data;"Atr...
function Vk (line 1) | function Vk(n,e){let t;try{t=Pk(n);for(const n of t)if(n&&n.nodes){if(qk...
function Kk (line 1) | function Kk(n,e={a:0,b:0,c:0}){if(!n||!n.type)return e;switch(n.type){ca...
function Jk (line 1) | function Jk(n,e){n.a+=e.a,n.b+=e.b,n.c+=e.c}
function Yk (line 1) | function Yk(n,e){if(!n)return;let t=n.head;for(;t;)e(t.data),t=t.next}
function Zk (line 1) | function Zk(n){let e={a:0,b:0,c:0};return Yk(n.children,n=>{const t=Kk(n...
function $k (line 1) | function $k(n,e,t){if(!e||!e.length){let e={a:0,b:0,c:0};const a=[];retu...
function Qk (line 1) | function Qk(n){if(!n||!n.children)return[];const e=[];for(let t=n.childr...
function ay (line 1) | function ay(n,e,t){if(t.normalizedSelectorText||(t.normalizedSelectorTex...
function oy (line 1) | function oy(n,e){let t=n.children.head;for(;t;){const a=t.next,o=t.data;...
function iy (line 1) | function iy(n,e){null==e.prev||"Combinator"==e.prev.data.type||"WhiteSpa...
function ry (line 1) | function ry(n){const e=n.name.toLowerCase();return n.children?!ey.includ...
function Cy (line 1) | function Cy(n,e){const t={doc:n,stats:{processed:0,discarded:0},matchedE...
function zy (line 1) | function zy(n,e,t){const{layerStack:a,conditionalStack:o}=e;for(let i=n....
function Ly (line 1) | function Ly(n,e,t,a){if(n.block){const o=Yy(n.prelude,a);Ty(e,o,t,a),zy(...
function Ay (line 1) | function Ay(n,e,t){return my.has(e.name)?[...n,{name:e.name,prelude:Yy(e...
function Ty (line 1) | function Ty(n,e,t,a){const o=Zy([...n,e]);a.layerDeclarations.push({name...
function Iy (line 1) | function Iy(n,e,t,a){const o=new Set;for(let i=n.head;i;i=i.next)a.stats...
function Ry (line 1) | function Ry(n,e,t,a,o,i){n.type===hy&&"import"===n.name&&Ky(n.prelude)&&...
function Ey (line 1) | function Ey(n){let e=!1,t=!1;bb(n,{enter(n){("PseudoElementSelector"===n...
function Dy (line 1) | function Dy(n,e,t){n.forEach(n=>{t.matchedElements.add(n);let a=t.matchi...
function My (line 1) | function My(n,e,t,a){const{ancestorsSelectors:o,layerStack:i,scopeStack:...
function By (line 1) | function By(n){return n.map(n=>`${n.name}:${n.prelude}`).join("|")}
function Ny (line 1) | function Ny(n,e){let t=[];if(n){const a=e.selectorData.get(n);a&&a.condi...
function Py (line 1) | function Py(n,e,t,a){const o=function(n,e,t){let a;if(e&&e.length){a=fun...
function Oy (line 1) | function Oy(n,e){const t=new Set;if(!n||1!==n.nodeType)return t;let a;_y...
function _y (line 1) | function _y(n,e){if(!n||1!==n.nodeType)return!1;try{return n.matches(e)}...
function Fy (line 1) | function Fy(n,e,t){const a=[],o=new Set,i=[];for(n.forEach(n=>{n&&1===n....
function qy (line 1) | function qy(n){if(!n)return[];if(9===n.nodeType||11===n.nodeType){const ...
function Uy (line 1) | function Uy(n,e){return e&&e.length?n.filter(n=>function(n,e){if(!n)retu...
function Hy (line 1) | function Hy(n,e){let t=n;for(;t&&1===t.nodeType;){if(e.stopElements&&e.s...
function Wy (line 1) | function Wy(n,e){const t=new Set;for(let a=n.head;a;a=a.next){const n=a....
function Gy (line 1) | function Gy(n){const e=[];if(Ky(n.block))for(let t=n.block.children.head...
function Vy (line 1) | function Vy(n,e){const t=$y(e||"&"),a=n?$y(n):null;let o=!1;if(bb(t,{vis...
function Ky (line 1) | function Ky(n){return Boolean(n&&n.children&&n.children.head)}
function Jy (line 1) | function Jy(n,e){return e.selectorTexts.has(n)||e.selectorTexts.set(n,ub...
function Yy (line 1) | function Yy(n,e){return n?(e.preludeTexts.has(n)||e.preludeTexts.set(n,u...
function Zy (line 1) | function Zy(n){return n.map(n=>""===n?"\0":n).join(".")}
function $y (line 1) | function $y(n,e="selector"){return pb(n,{context:e})}
function Xy (line 1) | function Xy(n,e){if(!n)return[];const t=9===n.nodeType||11===n.nodeType,...
function nv (line 1) | function nv(n){n.querySelectorAll("picture").forEach(n=>{const e=n.query...
function ev (line 1) | function ev(n){let e=n.getAttribute("src");e==Qy&&(e=null);let t=av(n.ge...
function tv (line 1) | function tv(n,e,t){n.src?(e.setAttribute("src",n.src),e.setAttribute("sr...
function av (line 1) | function av(n){if(n)try{const e=ck(n);if(e.length)return e.find(n=>n.url...
function pv (line 1) | function pv(n){return n&&!iv.includes(uv(n))}
function uv (line 1) | function uv(n){return n.tagName&&n.tagName.toUpperCase()}
function Cv (line 1) | async function Cv(n,e,t,a,o){if(t)if(e.asBinary)if(e.inline){const n=new...
function zv (line 1) | function zv(n){const e=n.doctype;let t="";return e&&(t="<!DOCTYPE "+e.no...
method getFilenameExtension (line 1) | getFilenameExtension(n,e,t,a){let o;try{o=new fv(n).pathname.match(/(\.[...
function t (line 1) | function t(n,t){let a=!0,o=0;if(e.byteLength>=t.length){const i=new Uint...
method resolveURL (line 1) | resolveURL(n,e){return this.parseURL(n,e).href}
method parseSVGContent (line 1) | parseSVGContent(n){const e=(new kv).parseFromString(n,"image/svg+xml");r...
method fixInvalidNesting (line 1) | fixInvalidNesting(n,e=!0){xn(n,un,e)}
method markInvalidNesting (line 1) | markInvalidNesting(n){Sn(n)}
method postProcessDoc (line 1) | postProcessDoc(n,e,t){!function(n,e,t){if(n.querySelectorAll("["+X+"]")....
method findLast (line 1) | findLast(n,e){if(n.findLast&&"function"==typeof n.findLast)return n.find...
function C (line 1) | async function C(n){return n.filename.match(m)&&!n.filename.match(d)||o?...
function z (line 1) | function z(n,e,t){if("function"==typeof n.replaceAll)return n.replaceAll...
function L (line 1) | function L(n,e){const t=e.filename.length-n.filename.length;return t||e....
FILE: lib/single-file-extension-editor.js
function setLabels (line 39) | function setLabels(labels) {
function getSharePageBar (line 43) | function getSharePageBar() {
function displayBar (line 70) | function displayBar(tagName, message, { link, buttonLabel, buttonOnclick...
function createElement$1 (line 182) | function createElement$1(tagName, parentElement) {
function registerType (line 236) | function registerType(serialize, parse, test, type) {
function serializeValue (line 249) | async function serializeValue(data, value) {
function serializeSymbols (line 263) | async function serializeSymbols(data, value) {
function serializeOwnProperties (line 269) | async function serializeOwnProperties(data, value) {
function serializeCircularReference (line 285) | async function serializeCircularReference(data, value) {
function serializeArray (line 290) | async function serializeArray(data, array) {
function serializeString (line 304) | async function serializeString(data, string) {
function serializeTypedArray (line 310) | async function serializeTypedArray(data, array) {
function serializeArrayBuffer (line 315) | async function serializeArrayBuffer(data, arrayBuffer) {
function serializeNumber (line 320) | async function serializeNumber(data, number) {
function serializeUint32 (line 325) | async function serializeUint32(data, number) {
function serializeInt32 (line 330) | async function serializeInt32(data, number) {
function serializeUint16 (line 335) | async function serializeUint16(data, number) {
function serializeInt16 (line 340) | async function serializeInt16(data, number) {
function serializeUint8 (line 345) | async function serializeUint8(data, number) {
function serializeInt8 (line 350) | async function serializeInt8(data, number) {
function serializeBoolean (line 355) | async function serializeBoolean(data, boolean) {
function serializeMap (line 360) | async function serializeMap(data, map) {
function serializeSet (line 369) | async function serializeSet(data, set) {
function serializeDate (line 376) | async function serializeDate(data, date) {
function serializeError (line 380) | async function serializeError(data, error) {
function serializeRegExp (line 385) | async function serializeRegExp(data, regExp) {
function serializeStringObject (line 390) | async function serializeStringObject(data, string) {
function serializeNumberObject (line 394) | async function serializeNumberObject(data, number) {
function serializeBooleanObject (line 398) | async function serializeBooleanObject(data, boolean) {
function serializeSymbol (line 402) | async function serializeSymbol(data, symbol) {
class Reference (line 406) | class Reference {
method constructor (line 407) | constructor(index, data) {
method getObject (line 412) | getObject() {
function parseValue (line 417) | async function parseValue(data) {
function parseSymbols (line 431) | async function parseSymbols(data, value) {
function parseOwnProperties (line 436) | async function parseOwnProperties(data, object) {
function parseCircularReference (line 452) | async function parseCircularReference(data) {
function parseObject (line 458) | function parseObject() {
function parseArray (line 462) | async function parseArray(data) {
function parseEmptySlot (line 481) | function parseEmptySlot() {
function parseString (line 485) | async function parseString(data) {
function parseFloat64Array (line 491) | async function parseFloat64Array(data) {
function parseFloat32Array (line 497) | async function parseFloat32Array(data) {
function parseUint32Array (line 503) | async function parseUint32Array(data) {
function parseInt32Array (line 509) | async function parseInt32Array(data) {
function parseUint16Array (line 515) | async function parseUint16Array(data) {
function parseInt16Array (line 521) | async function parseInt16Array(data) {
function parseUint8ClampedArray (line 527) | async function parseUint8ClampedArray(data) {
function parseUint8Array (line 533) | async function parseUint8Array(data) {
function parseInt8Array (line 539) | async function parseInt8Array(data) {
function parseArrayBuffer (line 545) | async function parseArrayBuffer(data) {
function parseNumber (line 551) | async function parseNumber(data) {
function parseUint32 (line 556) | async function parseUint32(data) {
function parseInt32 (line 561) | async function parseInt32(data) {
function parseUint16 (line 566) | async function parseUint16(data) {
function parseInt16 (line 571) | async function parseInt16(data) {
function parseUint8 (line 576) | async function parseUint8(data) {
function parseInt8 (line 581) | async function parseInt8(data) {
function parseUndefined (line 586) | function parseUndefined() {
function parseNull (line 590) | function parseNull() {
function parseNaN (line 594) | function parseNaN() {
function parseBoolean (line 598) | async function parseBoolean(data) {
function parseMap (line 603) | async function parseMap(data) {
function parseSet (line 621) | async function parseSet(data) {
function parseDate (line 638) | async function parseDate(data) {
function parseError (line 643) | async function parseError(data) {
function parseRegExp (line 651) | async function parseRegExp(data) {
function parseStringObject (line 657) | async function parseStringObject(data) {
function parseNumberObject (line 661) | async function parseNumberObject(data) {
function parseBooleanObject (line 665) | async function parseBooleanObject(data) {
function parseSymbol (line 669) | async function parseSymbol(data) {
function testCircularReference (line 674) | function testCircularReference(value, data) {
function testObject (line 678) | function testObject(value) {
function testArray (line 682) | function testArray(value) {
function testEmptySlot (line 686) | function testEmptySlot(value) {
function testString (line 690) | function testString(value) {
function testFloat64Array (line 694) | function testFloat64Array(value) {
function testUint32Array (line 698) | function testUint32Array(value) {
function testInt32Array (line 702) | function testInt32Array(value) {
function testUint16Array (line 706) | function testUint16Array(value) {
function testFloat32Array (line 710) | function testFloat32Array(value) {
function testInt16Array (line 714) | function testInt16Array(value) {
function testUint8ClampedArray (line 718) | function testUint8ClampedArray(value) {
function testUint8Array (line 722) | function testUint8Array(value) {
function testInt8Array (line 726) | function testInt8Array(value) {
function testArrayBuffer (line 730) | function testArrayBuffer(value) {
function testNumber (line 734) | function testNumber(value) {
function testUint32 (line 738) | function testUint32(value) {
function testInt32 (line 742) | function testInt32(value) {
function testUint16 (line 746) | function testUint16(value) {
function testInt16 (line 750) | function testInt16(value) {
function testUint8 (line 754) | function testUint8(value) {
function testInt8 (line 758) | function testInt8(value) {
function testInteger (line 762) | function testInteger(value) {
function testUndefined (line 766) | function testUndefined(value) {
function testNull (line 770) | function testNull(value) {
function testNaN (line 774) | function testNaN(value) {
function testBoolean (line 778) | function testBoolean(value) {
function testMap (line 782) | function testMap(value) {
function testSet (line 786) | function testSet(value) {
function testDate (line 790) | function testDate(value) {
function testError (line 794) | function testError(value) {
function testRegExp (line 798) | function testRegExp(value) {
function testStringObject (line 802) | function testStringObject(value) {
function testNumberObject (line 806) | function testNumberObject(value) {
function testBooleanObject (line 810) | function testBooleanObject(value) {
function testSymbol (line 814) | function testSymbol(value) {
function promptMessage (line 868) | function promptMessage(message, defaultValue) {
function createLogsWindowElement (line 872) | function createLogsWindowElement() {
function createElement (line 932) | function createElement(tagName, parentElement) {
function downloadPageForeground (line 983) | async function downloadPageForeground(pageData, options) {
function sharePage (line 1010) | async function sharePage(pageData, options) {
function decodeQuotedPrintable (line 1145) | function decodeQuotedPrintable(array) {
function decodeBinary (line 1167) | function decodeBinary(array) {
function decodeBase64 (line 1175) | function decodeBase64(value, charset) {
function decodeMimeHeader (line 1180) | function decodeMimeHeader(encodedSubject) {
function parseDOM (line 1216) | function parseDOM(asset, contentType = "text/html", DOMParser = globalTh...
function serializeDocType (line 1237) | function serializeDocType(doctype) {
function decodeString (line 1241) | function decodeString(array, charset) {
function encodeString (line 1245) | function encodeString(string, charset) {
function getCharset (line 1249) | function getCharset(contentType) {
function removeQuotes (line 1256) | function removeQuotes(value) {
function replaceCharset (line 1260) | function replaceCharset(contentType, charset) {
function isDocument (line 1264) | function isDocument(contentType) {
function isStylesheet (line 1268) | function isStylesheet(contentType) {
function isText (line 1272) | function isText(contentType) {
function isMultipartAlternative (line 1276) | function isMultipartAlternative(contentType) {
function getBoundary (line 1280) | function getBoundary(contentType) {
function indexOf (line 1289) | function indexOf(array, string) {
function isLineFeed (line 1309) | function isLineFeed(array) {
function endsWithCRLF (line 1313) | function endsWithCRLF(array) {
function endsWithLF (line 1317) | function endsWithLF(array) {
function startsWithBoundary (line 1321) | function startsWithBoundary(array) {
function getResourceURI (line 1325) | function getResourceURI({ contentType, transferEncoding, data }) {
function resolvePath (line 1329) | function resolvePath(path, base) {
function Za (line 1375) | function Za(e){return e<0?(-e<<1)+1:(e<<1)+0}
function Ja (line 1375) | function Ja(e){var t=(e&1)===1,r=e>>1;return t?-r:r}
function el (line 1375) | function el(e,t,r){if(t in e)return e[t];if(arguments.length===3)return ...
function lt (line 1375) | function lt(e){var t=e.match(zo);return t?{scheme:t[1],auth:t[2],host:t[...
function Ge (line 1375) | function Ge(e){var t="";return e.scheme&&(t+=e.scheme+":"),t+="//",e.aut...
function nl (line 1375) | function nl(e){var t=[];return function(r){for(var n=0;n<t.length;n++)if...
function Po (line 1375) | function Po(e,t){e===""&&(e="."),t===""&&(t=".");var r=lt(t),n=lt(e);if(...
function il (line 1375) | function il(e,t){e===""&&(e="."),e=e.replace(/\/$/,"");for(var r=0;t.ind...
function Do (line 1375) | function Do(e){return e}
function ol (line 1375) | function ol(e){return No(e)?"$"+e:e}
function sl (line 1375) | function sl(e){return No(e)?e.slice(1):e}
function No (line 1375) | function No(e){if(!e)return false;var t=e.length;if(t<9||e.charCodeAt(t...
function al (line 1375) | function al(e,t,r){var n=ke(e.source,t.source);return n!==0||(n=e.origin...
function ll (line 1375) | function ll(e,t,r){var n;return n=e.originalLine-t.originalLine,n!==0||(...
function cl (line 1375) | function cl(e,t,r){var n=e.generatedLine-t.generatedLine;return n!==0||(...
function ul (line 1375) | function ul(e,t,r){var n=e.generatedColumn-t.generatedColumn;return n!==...
function ke (line 1375) | function ke(e,t){return e===t?0:e===null?1:t===null?-1:e>t?1:-1}
function pl (line 1375) | function pl(e,t){var r=e.generatedLine-t.generatedLine;return r!==0||(r=...
function hl (line 1375) | function hl(e){return JSON.parse(e.replace(/^\)]}'[^\n]*\n/,""))}
function ml (line 1375) | function ml(e,t,r){if(t=t||"",e&&(e[e.length-1]!=="/"&&t[0]!=="/"&&(e+="...
function we (line 1375) | function we(){this._array=[],this._set=Ne?new Map:Object.create(null);}
function dl (line 1375) | function dl(e,t){var r=e.generatedLine,n=t.generatedLine,i=e.generatedCo...
function Ft (line 1375) | function Ft(){this._array=[],this._sorted=true,this._last={generatedLine...
function ne (line 1375) | function ne(e){e||(e={}),this._file=F.getArg(e,"file",null),this._source...
function O (line 1375) | function O(e){return e>=48&&e<=57}
function J (line 1375) | function J(e){return O(e)||e>=65&&e<=70||e>=97&&e<=102}
function Lt (line 1375) | function Lt(e){return e>=65&&e<=90}
function ja (line 1375) | function ja(e){return e>=97&&e<=122}
function Ua (line 1375) | function Ua(e){return Lt(e)||ja(e)}
function Ha (line 1375) | function Ha(e){return e>=128}
function At (line 1375) | function At(e){return Ua(e)||Ha(e)||e===95}
function _e (line 1375) | function _e(e){return At(e)||O(e)||e===45}
function Ga (line 1375) | function Ga(e){return e>=0&&e<=8||e===11||e>=14&&e<=31||e===127}
function tt (line 1375) | function tt(e){return e===10||e===13||e===12}
function me (line 1375) | function me(e){return tt(e)||e===32||e===9}
function K (line 1375) | function K(e,t){return !(e!==92||tt(t)||t===0)}
function We (line 1375) | function We(e,t,r){return e===45?At(t)||t===45||K(t,r):At(e)?true:e===92...
function Et (line 1375) | function Et(e,t,r){return e===43||e===45?O(t)?2:t===46&&O(r)?3:0:e===46?...
function zt (line 1375) | function zt(e){return e===65279||e===65534?1:0}
function It (line 1375) | function It(e){return e<128?ar[e]:Pt}
function qe (line 1375) | function qe(e,t){return t<e.length?e.charCodeAt(t):0}
function Dt (line 1375) | function Dt(e,t,r){return r===13&&qe(e,t+1)===10?2:1}
function xe (line 1375) | function xe(e,t,r){let n=e.charCodeAt(t);return Lt(n)&&(n=n|32),n===r}
function ye (line 1375) | function ye(e,t,r,n){if(r-t!==n.length||t<0||r>e.length)return false;fo...
function lo (line 1375) | function lo(e,t){for(;t>=0&&me(e.charCodeAt(t));t--);return t+1}
function nt (line 1375) | function nt(e,t){for(;t<e.length&&me(e.charCodeAt(t));t++);return t}
function ur (line 1375) | function ur(e,t){for(;t<e.length&&O(e.charCodeAt(t));t++);return t}
function se (line 1375) | function se(e,t){if(t+=2,J(qe(e,t-1))){for(let n=Math.min(e.length,t+5);...
function it (line 1375) | function it(e,t){for(;t<e.length;t++){let r=e.charCodeAt(t);if(!_e(r)){i...
function Pe (line 1375) | function Pe(e,t){let r=e.charCodeAt(t);if((r===43||r===45)&&(r=e.charCod...
function Nt (line 1375) | function Nt(e,t){for(;t<e.length;t++){let r=e.charCodeAt(t);if(r===41){t...
function je (line 1375) | function je(e){if(e.length===1&&!J(e.charCodeAt(0)))return e[0];let t=pa...
function Ue (line 1375) | function Ue(e=null,t){return e===null||e.length<t?new Uint32Array(Math.m...
function po (line 1375) | function po(e){let t=e.source,r=t.length,n=t.length>0?zt(t.charCodeAt(0)...
method constructor (line 1375) | constructor(t,r,n,i){this.setSource(t,r,n,i),this.lines=null,this.column...
method setSource (line 1375) | setSource(t="",r=0,n=1,i=1){this.source=t,this.startOffset=r,this.startL...
method getLocation (line 1375) | getLocation(t,r){return this.computed||po(this),{source:r,offset:this.st...
method getLocationRange (line 1375) | getLocationRange(t,r,n){return this.computed||po(this),{source:n,start:{...
function ho (line 1375) | function ho(e,t,r){return e<t?t:e>r?r:e}
method constructor (line 1375) | constructor(t,r){this.setSource(t,r);}
method reset (line 1375) | reset(){this.eof=false,this.tokenIndex=-1,this.tokenType=0,this.tokenSta...
method setSource (line 1375) | setSource(t="",r=()=>{}){t=String(t||"");let n=t.length,i=Ue(this.offset...
method lookupType (line 1375) | lookupType(t){return t+=this.tokenIndex,t<this.tokenCount?this.offsetAnd...
method lookupTypeNonSC (line 1375) | lookupTypeNonSC(t){for(let r=this.tokenIndex;r<this.tokenCount;r++){let ...
method lookupOffset (line 1375) | lookupOffset(t){return t+=this.tokenIndex,t<this.tokenCount?this.offsetA...
method lookupOffsetNonSC (line 1375) | lookupOffsetNonSC(t){for(let r=this.tokenIndex;r<this.tokenCount;r++){le...
method lookupValue (line 1375) | lookupValue(t,r){return t+=this.tokenIndex,t<this.tokenCount?ye(this.sou...
method getTokenStart (line 1375) | getTokenStart(t){return t===this.tokenIndex?this.tokenStart:t>0?t<this.t...
method getTokenEnd (line 1375) | getTokenEnd(t){return t===this.tokenIndex?this.tokenEnd:this.offsetAndTy...
method getTokenType (line 1375) | getTokenType(t){return t===this.tokenIndex?this.tokenType:this.offsetAnd...
method substrToCursor (line 1375) | substrToCursor(t){return this.source.substring(t,this.tokenStart)}
method isBlockOpenerTokenType (line 1375) | isBlockOpenerTokenType(t){return ce[t]===at}
method isBlockCloserTokenType (line 1375) | isBlockCloserTokenType(t){return ce[t]===Ot}
method getBlockTokenPairIndex (line 1375) | getBlockTokenPairIndex(t){let r=this.getTokenType(t);if(ce[r]===1){let n...
method isBalanceEdge (line 1375) | isBalanceEdge(t){return this.balance[this.tokenIndex]<t}
method isDelim (line 1375) | isDelim(t,r){return r?this.lookupType(r)===9&&this.source.charCodeAt(thi...
method skip (line 1375) | skip(t){let r=this.tokenIndex+t;r<this.tokenCount?(this.tokenIndex=r,thi...
method next (line 1375) | next(){let t=this.tokenIndex+1;t<this.tokenCount?(this.tokenIndex=t,this...
method skipSC (line 1375) | skipSC(){for(;this.tokenType===13||this.tokenType===25;)this.next();}
method skipUntilBalanced (line 1375) | skipUntilBalanced(t,r){let n=t,i=0,o=0;e:for(;n<this.tokenCount;n++){if(...
method forEachToken (line 1375) | forEachToken(t){for(let r=0,n=this.firstCharOffset;r<this.tokenCount;r++...
method dump (line 1375) | dump(){let t=new Array(this.tokenCount);return this.forEachToken((r,n,i,...
function Ce (line 1375) | function Ce(e,t){function r(p){return p<u?e.charCodeAt(p):0}function n()...
method createItem (line 1375) | static createItem(t){return {prev:null,next:null,data:t}}
method constructor (line 1375) | constructor(){this.head=null,this.tail=null,this.cursor=null;}
method createItem (line 1375) | createItem(t){return e.createItem(t)}
method allocateCursor (line 1375) | allocateCursor(t,r){let n;return He!==null?(n=He,He=He.cursor,n.prev=t,n...
method releaseCursor (line 1375) | releaseCursor(){let{cursor:t}=this;this.cursor=t.cursor,t.prev=null,t.ne...
method updateCursors (line 1375) | updateCursors(t,r,n,i){let{cursor:o}=this;for(;o!==null;)o.prev===t&&(o....
method [Symbol.iterator] (line 1375) | *[Symbol.iterator](){for(let t=this.head;t!==null;t=t.next)yield t.data;}
method size (line 1375) | get size(){let t=0;for(let r=this.head;r!==null;r=r.next)t++;return t}
method isEmpty (line 1375) | get isEmpty(){return this.head===null}
method first (line 1375) | get first(){return this.head&&this.head.data}
method last (line 1375) | get last(){return this.tail&&this.tail.data}
method fromArray (line 1375) | fromArray(t){let r=null;this.head=null;for(let n of t){let i=e.createIte...
method toArray (line 1375) | toArray(){return [...this]}
method toJSON (line 1375) | toJSON(){return [...this]}
method forEach (line 1375) | forEach(t,r=this){let n=this.allocateCursor(null,this.head);for(;n.next!...
method forEachRight (line 1375) | forEachRight(t,r=this){let n=this.allocateCursor(this.tail,null);for(;n....
method reduce (line 1375) | reduce(t,r,n=this){let i=this.allocateCursor(null,this.head),o=r,s;for(;...
method reduceRight (line 1375) | reduceRight(t,r,n=this){let i=this.allocateCursor(this.tail,null),o=r,s;...
method some (line 1375) | some(t,r=this){for(let n=this.head;n!==null;n=n.next)if(t.call(r,n.data,...
method map (line 1375) | map(t,r=this){let n=new e;for(let i=this.head;i!==null;i=i.next)n.append...
method filter (line 1375) | filter(t,r=this){let n=new e;for(let i=this.head;i!==null;i=i.next)t.cal...
method nextUntil (line 1375) | nextUntil(t,r,n=this){if(t===null)return;let i=this.allocateCursor(null,...
method prevUntil (line 1375) | prevUntil(t,r,n=this){if(t===null)return;let i=this.allocateCursor(t,nul...
method clear (line 1375) | clear(){this.head=null,this.tail=null;}
method copy (line 1375) | copy(){let t=new e;for(let r of this)t.appendData(r);return t}
method prepend (line 1375) | prepend(t){return this.updateCursors(null,t,this.head,t),this.head!==nul...
method prependData (line 1375) | prependData(t){return this.prepend(e.createItem(t))}
method append (line 1375) | append(t){return this.insert(t)}
method appendData (line 1375) | appendData(t){return this.insert(e.createItem(t))}
method insert (line 1375) | insert(t,r=null){if(r!==null)if(this.updateCursors(r.prev,t,r,t),r.prev=...
method insertData (line 1375) | insertData(t,r){return this.insert(e.createItem(t),r)}
method remove (line 1375) | remove(t){if(this.updateCursors(t,t.prev,t,t.next),t.prev!==null)t.prev....
method push (line 1375) | push(t){this.insert(e.createItem(t));}
method pop (line 1375) | pop(){return this.tail!==null?this.remove(this.tail):null}
method unshift (line 1375) | unshift(t){this.prepend(e.createItem(t));}
method shift (line 1375) | shift(){return this.head!==null?this.remove(this.head):null}
method prependList (line 1375) | prependList(t){return this.insertList(t,this.head)}
method appendList (line 1375) | appendList(t){return this.insertList(t)}
method insertList (line 1375) | insertList(t,r){return t.head===null?this:(r!=null?(this.updateCursors(r...
method replace (line 1375) | replace(t,r){"head"in r?this.insertList(r,t):this.insert(r,t),this.remov...
function De (line 1375) | function De(e,t){let r=Object.create(SyntaxError.prototype),n=new Error;...
function go (line 1376) | function go({source:e,line:t,column:r,baseLine:n,baseColumn:i},o){functi...
function hr (line 1379) | function hr(e,t,r,n,i,o=1,s=1){return Object.assign(De("SyntaxError",e),...
function bo (line 1380) | function bo(e){let t=this.createList(),r=false,n={recognizer:e};for(;!th...
function Xa (line 1380) | function Xa(e){return function(){return this[e]()}}
function dr (line 1380) | function dr(e){let t=Object.create(null);for(let r of Object.keys(e)){le...
function $a (line 1380) | function $a(e){let t={context:Object.create(null),features:Object.assign...
function wo (line 1380) | function wo(e){let t="",r="<unknown>",n=false,i=xo,o=false,s=new ot,u=Ob...
function Uo (line 1380) | function Uo(e){let t=new jo.SourceMapGenerator,r={line:1,column:0},n={li...
function Go (line 1380) | function Go(e){let t=new Set(e.map(([r,n])=>wr(r)<<16|wr(n)));return fun...
function wl (line 1380) | function wl(e,t){if(typeof t=="function"){let r=null;e.children.forEach(...
function vl (line 1380) | function vl(e){Ce(e,(t,r,n)=>{this.token(t,e.slice(r,n));});}
function Yo (line 1380) | function Yo(e){let t=new Map;for(let[r,n]of Object.entries(e.node))typeo...
function Ko (line 1381) | function Ko(e){return {fromPlainObject(t){return e(t,{enter(r){r.childre...
function Vo (line 1381) | function Vo(e){return typeof e=="function"?e:ut}
function Qo (line 1381) | function Qo(e,t){return function(r,n,i){r.type===t&&e.call(this,r,n,i);}}
function Sl (line 1381) | function Sl(e,t){let r=t.structure,n=[];for(let i in r){if(Sr.call(r,i)=...
function Cl (line 1381) | function Cl(e){let t={};for(let r in e.node)if(Sr.call(e.node,r)){let n=...
function Xo (line 1381) | function Xo(e,t){let r=e.fields.slice(),n=e.context,i=typeof n=="string"...
function $o (line 1381) | function $o({StyleSheet:e,Atrule:t,Rule:r,Block:n,DeclarationList:i}){re...
function Zo (line 1381) | function Zo(e){let t=Cl(e),r={},n={},i=Symbol("break-walk"),o=Symbol("sk...
function Tl (line 1381) | function Tl(e){return e}
function Al (line 1381) | function Al(e){let{min:t,max:r,comma:n}=e;return t===0&&r===0?n?"#?":"*"...
function Ll (line 1381) | function Ll(e){switch(e.type){case "Range":return " ["+(e.min===null?"-\...
function El (line 1381) | function El(e,t,r,n){let i=e.combinator===" "||n?e.combinator:" "+e.comb...
function _t (line 1381) | function _t(e,t,r,n){let i;switch(e.type){case "Group":i=El(e,t,r,n)+(e....
function Oe (line 1381) | function Oe(e,t){let r=Tl,n=false,i=false;return typeof t=="function"?r=...
function zl (line 1381) | function zl(e,t){let r=e.tokens,n=e.longestMatch,i=n<r.length&&r[n].node...
function Wt (line 1381) | function Wt(e,t){let r=e&&e.loc&&e.loc[t];return r?"line"in r?pt(r):r:null}
function pt (line 1381) | function pt({offset:e,line:t,column:r},n){let i={offset:e,line:t,column:...
function Ht (line 1384) | function Ht(e,t){return t=t||0,e.length-t>=2&&e.charCodeAt(t)===jt&&e.ch...
function Tr (line 1384) | function Tr(e,t){if(t=t||0,e.length-t>=3&&e.charCodeAt(t)===jt&&e.charCo...
function Pl (line 1384) | function Pl(e){if(qt.has(e))return qt.get(e);let t=e.toLowerCase(),r=qt....
function Il (line 1384) | function Il(e){if(Ke.has(e))return Ke.get(e);let t=e,r=e[0];r==="/"?r=e[...
function Er (line 1384) | function Er(e,t){return e!==null&&e.type===9&&e.value.charCodeAt(0)===t}
function ht (line 1384) | function ht(e,t,r){for(;e!==null&&(e.type===13||e.type===25);)e=r(++t);r...
function Te (line 1384) | function Te(e,t,r,n){if(!e)return 0;let i=e.value.charCodeAt(t);if(i===m...
function Lr (line 1384) | function Lr(e,t,r){let n=false,i=ht(e,t,r);if(e=r(i),e===null)return t;i...
function zr (line 1384) | function zr(e,t){let r=0;if(!e)return 0;if(e.type===10)return Te(e,0,Nl,...
function Pr (line 1384) | function Pr(e,t){return e!==null&&e.type===9&&e.value.charCodeAt(0)===t}
function Fl (line 1384) | function Fl(e,t){return e.value.charCodeAt(0)===t}
function dt (line 1384) | function dt(e,t,r){let n=0;for(let i=t;i<e.value.length;i++){let o=e.val...
function Gt (line 1384) | function Gt(e,t,r){if(!e)return 0;for(;Pr(r(t),rs);){if(++e>6)return 0;t...
function Ir (line 1384) | function Ir(e,t){let r=0;if(e===null||e.type!==1||!xe(e.value,0,Rl)||(e=...
function ue (line 1384) | function ue(e,t){return t<e.length?e.charCodeAt(t):0}
function ns (line 1384) | function ns(e,t){return ye(e,0,e.length,t)}
function is (line 1384) | function is(e,t){for(let r=0;r<t.length;r++)if(ns(e,t[r]))return true;r...
function os (line 1384) | function os(e,t){return t!==e.length-2?false:ue(e,t)===92&&O(ue(e,t+1))}
function Yt (line 1384) | function Yt(e,t,r){if(e&&e.type==="Range"){let n=Number(r!==void 0&&r!==...
function Bl (line 1384) | function Bl(e,t){let r=0,n=[],i=0;e:do{switch(e.type){case 24:case 22:ca...
function ie (line 1384) | function ie(e){return function(t,r,n){return t===null?0:t.type===2&&is(t...
function I (line 1384) | function I(e){return function(t){return t===null||t.type!==e?0:1}}
function _l (line 1384) | function _l(e){if(e===null||e.type!==1)return 0;let t=e.value.toLowerCas...
function ss (line 1384) | function ss(e){return e===null||e.type!==1||ue(e.value,0)!==45||ue(e.val...
function Wl (line 1384) | function Wl(e){return !ss(e)||e.value==="--"?0:1}
function ql (line 1384) | function ql(e){if(e===null||e.type!==4)return 0;let t=e.value.length;if(...
function jl (line 1384) | function jl(e){return e===null||e.type!==4||!We(ue(e.value,1),ue(e.value...
function Ul (line 1384) | function Ul(e,t){if(!e)return 0;let r=0,n=[],i=0;e:do{switch(e.type){cas...
function Hl (line 1384) | function Hl(e,t){if(!e)return 0;let r=0,n=[],i=0;e:do{switch(e.type){cas...
function ve (line 1384) | function ve(e){return e&&(e=new Set(e)),function(t,r,n){if(t===null||t.t...
function Gl (line 1384) | function Gl(e,t,r){return e===null||e.type!==11||Yt(r,e.value,e.value.le...
function as (line 1384) | function as(e){return typeof e!="function"&&(e=function(){return 0}),fun...
function Yl (line 1384) | function Yl(e,t,r){if(e===null)return 0;let n=Pe(e.value,0);return !(n==...
function Kl (line 1384) | function Kl(e,t,r){if(e===null||e.type!==10)return 0;let n=ue(e.value,0)...
function Xl (line 1384) | function Xl(e){let{angle:t,decibel:r,frequency:n,flex:i,length:o,resolut...
function ls (line 1384) | function ls(e){return {...Vl,...Ql,...Xl(e)}}
function Vt (line 1384) | function Vt(e,t,r){return Object.assign(De("SyntaxError",e),{input:t,off...
method constructor (line 1386) | constructor(t){this.str=t,this.pos=0;}
method charCodeAt (line 1386) | charCodeAt(t){return t<this.str.length?this.str.charCodeAt(t):0}
method charCode (line 1386) | charCode(){return this.charCodeAt(this.pos)}
method isNameCharCode (line 1386) | isNameCharCode(t=this.charCode()){return t<128&&cs[t]===1}
method nextCharCode (line 1386) | nextCharCode(){return this.charCodeAt(this.pos+1)}
method nextNonWsCode (line 1386) | nextNonWsCode(t){return this.charCodeAt(this.findWsEnd(t))}
method skipWs (line 1386) | skipWs(){this.pos=this.findWsEnd(this.pos);}
method findWsEnd (line 1386) | findWsEnd(t){for(;t<this.str.length;t++){let r=this.str.charCodeAt(t);if...
method substringToPos (line 1386) | substringToPos(t){return this.str.substring(this.pos,this.pos=t)}
method eat (line 1386) | eat(t){this.charCode()!==t&&this.error("Expect `"+String.fromCharCode(t)...
method peek (line 1386) | peek(){return this.pos<this.str.length?this.str.charAt(this.pos++):""}
method error (line 1386) | error(t){throw new Vt(t,this.str,this.pos)}
method scanSpaces (line 1386) | scanSpaces(){return this.substringToPos(this.findWsEnd(this.pos))}
method scanWord (line 1386) | scanWord(){let t=this.pos;for(;t<this.str.length;t++){let r=this.str.cha...
method scanNumber (line 1386) | scanNumber(){let t=this.pos;for(;t<this.str.length;t++){let r=this.str.c...
method scanString (line 1386) | scanString(){let t=this.str.indexOf("'",this.pos+1);return t===-1&&(this...
function gs (line 1386) | function gs(e){let t=null,r=null;return e.eat($t),e.skipWs(),t=e.scanNum...
function bc (line 1386) | function bc(e){let t=null,r=false;switch(e.charCode()){case ys:e.pos++,t...
function Ae (line 1386) | function Ae(e,t){let r=bc(e);return r!==null?(r.term=t,e.charCode()===Fr...
function Nr (line 1386) | function Nr(e){let t=e.peek();return t===""?null:Ae(e,{type:"Token",valu...
function xc (line 1386) | function xc(e){let t;return e.eat(_r),e.eat(Xt),t=e.scanWord(),e.eat(Xt)...
function yc (line 1386) | function yc(e){let t=null,r=null,n=1;return e.eat(ft),e.charCode()===ps&...
function kc (line 1386) | function kc(e){let t,r=null;if(e.eat(_r),t=e.scanWord(),t==="boolean-exp...
function wc (line 1386) | function wc(e){let t=e.scanWord();return e.charCode()===xs?(e.pos++,{typ...
function vc (line 1386) | function vc(e,t){function r(i,o){return {type:"Group",terms:i,combinator...
function Wr (line 1386) | function Wr(e,t){let r=Object.create(null),n=[],i,o=null,s=e.pos;for(;e....
function Sc (line 1386) | function Sc(e,t){let r;return e.eat(ft),r=Wr(e,t),e.eat(gt),r.explicit=t...
function Cc (line 1386) | function Cc(e,t){let r=e.charCode();switch(r){case gt:break;case ft:retu...
function Xe (line 1386) | function Xe(e){let t=new Qt(e),r=Wr(t);return t.pos!==e.length&&t.error(...
function ks (line 1386) | function ks(e){return typeof e=="function"?e:bt}
function Zt (line 1386) | function Zt(e,t,r){function n(s){switch(i.call(r,s),s.type){case "Group"...
method decorator (line 1386) | decorator(e){let t=[],r=null;return {...e,node(n){let i=r;r=n,e.node.cal...
function Ac (line 1386) | function Ac(e){let t=[];return Ce(e,(r,n,i)=>t.push({type:r,value:e.slic...
function vs (line 1386) | function vs(e,t){return typeof e=="string"?Ac(e):t.generate(e,Tc)}
function Q (line 1386) | function Q(e,t,r){return t===C&&r===E||e===C&&t===C&&r===C?e:(e.type==="...
function Cs (line 1386) | function Cs(e){return e.length>2&&e.charCodeAt(e.length-2)===Lc&&e.charC...
function Ss (line 1386) | function Ss(e){return e.type==="Keyword"||e.type==="AtKeyword"||e.type==...
function Le (line 1386) | function Le(e,t=" ",r=false){return {type:"Group",terms:e,combinator:t,d...
function xt (line 1386) | function xt(e,t,r=new Set){if(!r.has(e))switch(r.add(e),e.type){case "If...
function qr (line 1386) | function qr(e,t,r){switch(e){case " ":{let n=C;for(let i=t.length-1;i>=0...
function zc (line 1386) | function zc(e){let t=C,r=$e(e.term);if(e.max===0)r=Q(r,Jt,E),t=Q(r,null,...
function $e (line 1386) | function $e(e){if(typeof e=="function")return {type:"Generic",fn:e};swit...
function yt (line 1386) | function yt(e,t){return typeof e=="string"&&(e=Xe(e)),{type:"MatchGraph"...
function Rc (line 1386) | function Rc(e){let t=null,r=null,n=e;for(;n!==null;)r=n.prev,n.prev=t,t=...
function jr (line 1386) | function jr(e,t){if(e.length!==t.length)return false;for(let r=0;r<e.le...
function Fc (line 1386) | function Fc(e){return e.type!==9?false:e.value!=="?"}
function Es (line 1386) | function Es(e){return e===null?true:e.type===18||e.type===2||e.type===21...
function zs (line 1386) | function zs(e){return e===null?true:e.type===22||e.type===20||e.type===2...
function Mc (line 1386) | function Mc(e,t,r){function n(){do T++,w=T<e.length?e[T]:null;while(w!==...
function Hr (line 1386) | function Hr(e,t,r){let n=Mc(e,t,r||{});if(n.match===null)return n;let i=...
function Is (line 1386) | function Is(e){function t(i){return i===null?false:i.type==="Type"||i.ty...
function Bc (line 1386) | function Bc(e,t){return Gr(this,e,r=>r.type==="Type"&&r.name===t)}
function _c (line 1386) | function _c(e,t){return Gr(this,e,r=>r.type==="Property"&&r.name===t)}
function Wc (line 1386) | function Wc(e){return Gr(this,e,t=>t.type==="Keyword")}
function Gr (line 1386) | function Gr(e,t,r){let n=Is.call(e,t);return n===null?false:n.some(r)}
function Ds (line 1386) | function Ds(e){return "node"in e?e.node:Ds(e.match[0])}
function Ns (line 1386) | function Ns(e){return "node"in e?e.node:Ns(e.match[e.match.length-1])}
function Kr (line 1386) | function Kr(e,t,r,n,i){function o(u){if(u.syntax!==null&&u.syntax.type==...
function Vr (line 1386) | function Vr(e){return typeof e=="number"&&isFinite(e)&&Math.floor(e)===e...
function Os (line 1386) | function Os(e){return !!e&&Vr(e.offset)&&Vr(e.line)&&Vr(e.column)}
function qc (line 1386) | function qc(e,t){return function(n,i){if(!n||n.constructor!==Object)retu...
function Rs (line 1386) | function Rs(e,t){let r=[];for(let n=0;n<e.length;n++){let i=e[n];if(i===...
function jc (line 1386) | function jc(e,t){let r=t.structure,n={type:String,loc:true},i={type:'"'+...
function Fs (line 1386) | function Fs(e){let t={};if(e.node){for(let r in e.node)if(kt.call(e.node...
function Qr (line 1386) | function Qr(e,t,r){let n={};for(let i in e)e[i].syntax&&(n[i]=r?e[i].syn...
function Uc (line 1386) | function Uc(e,t,r){let n={};for(let[i,o]of Object.entries(e))n[i]={prelu...
function Hc (line 1386) | function Hc(e){for(let t=0;t<e.length;t++)if(e[t].value.toLowerCase()===...
function Gc (line 1386) | function Gc(e){let t=e.terms[0];return e.explicit===false&&e.terms.lengt...
function pe (line 1386) | function pe(e,t,r){return {matched:e,iterations:r,error:t,...Yr}}
function Ze (line 1386) | function Ze(e,t,r,n){let i=vs(r,e.syntax),o;return Hc(i)?pe(null,new Err...
method constructor (line 1386) | constructor(t,r,n){if(this.cssWideKeywords=Ve,this.syntax=r,this.generic...
method checkStructure (line 1386) | checkStructure(t){function r(o,s){i.push({node:o,message:s});}let n=this...
method createDescriptor (line 1386) | createDescriptor(t,r,n,i=null){let o={type:r,name:n},s={type:r,name:n,pa...
method addAtrule_ (line 1386) | addAtrule_(t,r){r&&(this.atrules[t]={type:"Atrule",name:t,prelude:r.prel...
method addProperty_ (line 1386) | addProperty_(t,r){r&&(this.properties[t]=this.createDescriptor(r,"Proper...
method addType_ (line 1386) | addType_(t,r){r&&(this.types[t]=this.createDescriptor(r,"Type",t));}
method checkAtruleName (line 1386) | checkAtruleName(t){if(!this.getAtrule(t))return new Ye("Unknown at-rule"...
method checkAtrulePrelude (line 1386) | checkAtrulePrelude(t,r){let n=this.checkAtruleName(t);if(n)return n;let ...
method checkAtruleDescriptorName (line 1386) | checkAtruleDescriptorName(t,r){let n=this.checkAtruleName(t);if(n)return...
method checkPropertyName (line 1386) | checkPropertyName(t){if(!this.getProperty(t))return new Ye("Unknown prop...
method matchAtrulePrelude (line 1386) | matchAtrulePrelude(t,r){let n=this.checkAtrulePrelude(t,r);if(n)return p...
method matchAtruleDescriptor (line 1386) | matchAtruleDescriptor(t,r,n){let i=this.checkAtruleDescriptorName(t,r);i...
method matchDeclaration (line 1386) | matchDeclaration(t){return t.type!=="Declaration"?pe(null,new Error("Not...
method matchProperty (line 1386) | matchProperty(t,r){if(Cr(t).custom)return pe(null,new Error("Lexer match...
method matchType (line 1386) | matchType(t,r){let n=this.getType(t);return n?Ze(this,n,r,false):pe(null...
method match (line 1386) | match(t,r){return typeof t!="string"&&(!t||!t.type)?pe(null,new Ye("Bad ...
method findValueFragments (line 1386) | findValueFragments(t,r,n,i){return Kr(this,r,this.matchProperty(t,r),n,i)}
method findDeclarationValueFragments (line 1386) | findDeclarationValueFragments(t,r,n){return Kr(this,t.value,this.matchDe...
method findAllFragments (line 1386) | findAllFragments(t,r,n){let i=[];return this.syntax.walk(t,{visit:"Decla...
method getAtrule (line 1386) | getAtrule(t,r=true){let n=Ut(t);return (n.vendor&&r?this.atrules[n.name]...
method getAtrulePrelude (line 1386) | getAtrulePrelude(t,r=true){let n=this.getAtrule(t,r);return n&&n.prelude...
method getAtruleDescriptor (line 1386) | getAtruleDescriptor(t,r){return this.atrules.hasOwnProperty(t)&&this.atr...
method getProperty (line 1386) | getProperty(t,r=true){let n=Cr(t);return (n.vendor&&r?this.properties[n....
method getType (line 1386) | getType(t){return hasOwnProperty.call(this.types,t)?this.types[t]:null}
method validate (line 1386) | validate(){function t(c,a){return a?`<${c}>`:`<'${c}'>`}function r(c,a,l...
method dump (line 1386) | dump(t,r){return {generic:this.generic,cssWideKeywords:this.cssWideKeywo...
method toString (line 1386) | toString(){return JSON.stringify(this.dump())}
function Xr (line 1386) | function Xr(e,t){return typeof t=="string"&&/^\s*\|/.test(t)?typeof e=="...
function Yc (line 1386) | function Yc(e,t){let r=Object.create(null);for(let n of Object.keys(e))t...
function $r (line 1386) | function $r(e,t,r){let n={...e};for(let[i,o]of Object.entries(t))n[i]={....
function wt (line 1386) | function wt(e,t){let r={...e};for(let[n,i]of Object.entries(t))switch(n)...
function Ms (line 1386) | function Ms(e){let t=wo(e),r=Zo(e),n=Yo(e),{fromPlainObject:i,toPlainObj...
function tr (line 1386) | function tr(e,t){let r=this.tokenStart+e,n=this.charCodeAt(r);for((n===f...
function et (line 1386) | function et(e){return tr.call(this,0,e)}
function Ee (line 1386) | function Ee(e,t){if(!this.cmpChar(this.tokenStart+e,t)){let r="";switch(...
function Jr (line 1386) | function Jr(){let e=0,t=0,r=this.tokenType;for(;r===13||r===25;)r=this.l...
function en (line 1386) | function en(){let e=this.tokenStart,t=null,r=null;if(this.tokenType===10...
function Xc (line 1386) | function Xc(e){if(e.a){let t=e.a==="+1"&&"n"||e.a==="1"&&"n"||e.a==="-1"...
function _s (line 1386) | function _s(){return this.Raw(this.consumeUntilLeftCurlyBracketOrSemicol...
function $c (line 1386) | function $c(){for(let e=1,t;t=this.lookupType(e);e++){if(t===24)return ...
function rn (line 1386) | function rn(e=false){let t=this.tokenStart,r,n,i=null,o=null;switch(this...
function tu (line 1386) | function tu(e){this.token(3,"@"+e.name),e.prelude!==null&&this.node(e.pr...
function on (line 1386) | function on(e){let t=null;return e!==null&&(e=e.toLowerCase()),this.skip...
function ou (line 1386) | function ou(e){this.children(e);}
function cu (line 1386) | function cu(){this.eof&&this.error("Unexpected end of input");let e=this...
function uu (line 1386) | function uu(){let e=this.tokenStart,t=this.charCodeAt(e);return t!==rr&&...
function ln (line 1386) | function ln(){let e=this.tokenStart,t,r=null,n=null,i=null;return this.e...
function mu (line 1386) | function mu(e){this.token(9,"["),this.node(e.name),e.matcher!==null&&(th...
function Us (line 1386) | function Us(){return this.Raw(null,true)}
function qs (line 1386) | function qs(){return this.parseWithFallback(this.Rule,Us)}
function js (line 1386) | function js(){return this.Raw(this.consumeUntilSemicolonIncluded,true)}
function fu (line 1386) | function fu(){if(this.tokenType===17)return js.call(this,this.tokenIndex...
function un (line 1386) | function un(e){let t=e?fu:qs,r=this.tokenStart,n=this.createList();this....
function yu (line 1386) | function yu(e){this.token(23,"{"),this.children(e,t=>{t.type==="Declarat...
function hn (line 1386) | function hn(e,t){let r=this.tokenStart,n=null;return this.eat(19),n=e.ca...
function vu (line 1386) | function vu(e){this.token(9,"["),this.children(e),this.token(9,"]");}
function dn (line 1386) | function dn(){let e=this.tokenStart;return this.eat(15),{type:"CDC",loc:...
function Tu (line 1386) | function Tu(){this.token(15,"-->");}
function gn (line 1386) | function gn(){let e=this.tokenStart;return this.eat(14),{type:"CDO",loc:...
function Eu (line 1386) | function Eu(){this.token(14,"<!--");}
function xn (line 1386) | function xn(){return this.eatDelim(zu),{type:"ClassSelector",loc:this.ge...
function Du (line 1386) | function Du(e){this.token(9,"."),this.token(1,e.name);}
function kn (line 1386) | function kn(){let e=this.tokenStart,t;switch(this.tokenType){case 13:t="...
function Bu (line 1386) | function Bu(e){this.tokenize(e.name);}
function vn (line 1386) | function vn(){let e=this.tokenStart,t=this.tokenEnd;return this.eat(25),...
function Uu (line 1386) | function Uu(e){this.token(25,"/*"+e.value+"*/");}
function Gs (line 1386) | function Gs(e){return this.lookupTypeNonSC(1)===1&&Hu.has(this.lookupTyp...
method supports (line 1386) | supports(){return this.SupportsDeclaration()}
function Cn (line 1386) | function Cn(e="media"){let t=this.createList();e:for(;!this.eof;)switch(...
function Vu (line 1386) | function Vu(e){e.children.forEach(t=>{t.type==="Condition"?(this.token(2...
function ep (line 1386) | function ep(){return this.Raw(this.consumeUntilExclamationMarkOrSemicolo...
function tp (line 1386) | function tp(){return this.Raw(this.consumeUntilExclamationMarkOrSemicolo...
function rp (line 1386) | function rp(){let e=this.tokenIndex,t=this.Value();return t.type!=="Raw"...
function An (line 1386) | function An(){let e=this.tokenStart,t=this.tokenIndex,r=ap.call(this),n=...
function sp (line 1386) | function sp(e){this.token(1,e.property),this.token(16,":"),this.node(e.v...
function ap (line 1386) | function ap(){let e=this.tokenStart;if(this.tokenType===9)switch(this.ch...
function lp (line 1386) | function lp(){this.eat(9),this.skipSC();let e=this.consume(1);return e==...
function En (line 1386) | function En(){return this.Raw(this.consumeUntilSemicolonIncluded,true)}
function zn (line 1386) | function zn(){let e=this.createList();for(;!this.eof;)switch(this.tokenT...
function hp (line 1386) | function hp(e){this.children(e,t=>{t.type==="Declaration"&&this.token(17...
function In (line 1386) | function In(){let e=this.tokenStart,t=this.consumeNumber(12);return {typ...
function fp (line 1386) | function fp(e){this.token(12,e.value+e.unit);}
function Nn (line 1386) | function Nn(e){let t=this.tokenStart,r,n=null;if(this.eat(21),this.skipS...
function yp (line 1386) | function yp(e){this.token(21,"("),this.token(1,e.name),e.value!==null&&(...
function vp (line 1386) | function vp(e,t){let n=(this.features[e]||{})[t];return typeof n!="funct...
function Rn (line 1386) | function Rn(e="unknown"){let t=this.tokenStart,r=this.consumeFunctionNam...
function Sp (line 1386) | function Sp(e){this.token(2,e.feature+"("),this.node(e.value),this.token...
function Mn (line 1386) | function Mn(){switch(this.skipSC(),this.tokenType){case 10:return this.i...
function Xs (line 1386) | function Xs(e){if(this.skipSC(),this.isDelim(Cp)||this.isDelim(Tp)){let ...
function Bn (line 1386) | function Bn(e="unknown"){let t=this.tokenStart;this.skipSC(),this.eat(21...
function Ep (line 1386) | function Ep(e){this.token(21,"("),this.node(e.left),this.tokenize(e.left...
function Wn (line 1386) | function Wn(e,t){let r=this.tokenStart,n=this.consumeFunctionName(),i=n....
function Dp (line 1386) | function Dp(e){this.token(2,e.name+"("),this.children(e),this.token(22,"...
function jn (line 1386) | function jn(e){let t=this.tokenStart,r=null;this.tokenType===2?r=this.co...
function Rp (line 1386) | function Rp(e){e.function?this.token(2,e.function+"("):this.token(21,"("...
function Hn (line 1386) | function Hn(){let e=this.tokenStart;return this.eat(4),{type:"Hash",loc:...
function _p (line 1386) | function _p(e){this.token(4,"#"+e.value);}
function Yn (line 1386) | function Yn(){return {type:"Identifier",loc:this.getLocation(this.tokenS...
function jp (line 1386) | function jp(e){this.token(1,e.name);}
function Vn (line 1386) | function Vn(){let e=this.tokenStart;return this.eat(4),{type:"IdSelector...
function Gp (line 1386) | function Gp(e){this.token(9,"#"+e.name);}
function Xn (line 1386) | function Xn(){let e=this.tokenStart,t=this.consume(1);for(;this.isDelim(...
function Qp (line 1386) | function Qp(e){this.tokenize(e.name);}
function Zn (line 1386) | function Zn(){let e=this.createList();for(this.skipSC();!this.eof&&(e.pu...
function Zp (line 1386) | function Zp(e){this.children(e,()=>this.token(18,","));}
function ei (line 1386) | function ei(){let e=this.tokenStart,t=null,r=null,n=null;if(this.skipSC(...
function th (line 1386) | function th(e){e.mediaType?(e.modifier&&this.token(1,e.modifier),this.to...
function ri (line 1386) | function ri(){let e=this.createList();for(this.skipSC();!this.eof&&(e.pu...
function ih (line 1386) | function ih(e){this.children(e,()=>this.token(18,","));}
function ii (line 1386) | function ii(){let e=this.tokenStart;return this.eatDelim(oh),{type:"Nest...
function lh (line 1386) | function lh(){this.token(9,"&");}
function si (line 1386) | function si(){this.skipSC();let e=this.tokenStart,t=e,r=null,n;return th...
function ph (line 1386) | function ph(e){this.node(e.nth),e.selector!==null&&(this.token(1,"of"),t...
function li (line 1386) | function li(){return {type:"Number",loc:this.getLocation(this.tokenStart...
function dh (line 1386) | function dh(e){this.token(10,e.value);}
function ui (line 1386) | function ui(){let e=this.tokenStart;return this.next(),{type:"Operator",...
function bh (line 1386) | function bh(e){this.tokenize(e.value);}
function hi (line 1386) | function hi(e,t){let r=this.tokenStart,n=null;return this.eat(21),n=e.ca...
function kh (line 1386) | function kh(e){this.token(21,"("),this.children(e),this.token(22,")");}
function di (line 1386) | function di(){return {type:"Percentage",loc:this.getLocation(this.tokenS...
function Sh (line 1386) | function Sh(e){this.token(11,e.value+"%");}
function gi (line 1386) | function gi(){let e=this.tokenStart,t=null,r,n;return this.eat(16),this....
function Lh (line 1386) | function Lh(e){this.token(16,":"),e.children===null?this.token(1,e.name)...
function xi (line 1386) | function xi(){let e=this.tokenStart,t=null,r,n;return this.eat(16),this....
function Ih (line 1386) | function Ih(e){this.token(16,":"),this.token(16,":"),e.children===null?t...
function Zs (line 1386) | function Zs(){switch(this.skipSC(),this.tokenType){case 10:return this.N...
function ki (line 1386) | function ki(){let e=this.tokenStart,t=Zs.call(this),r=null;return this.s...
function Oh (line 1386) | function Oh(e){this.node(e.left),this.token(9,"/"),e.right?this.node(e.r...
function Rh (line 1386) | function Rh(){return this.tokenIndex>0&&this.lookupType(-1)===13?this.to...
function vi (line 1386) | function vi(e,t){let r=this.getTokenStart(this.tokenIndex),n;return this...
function Bh (line 1386) | function Bh(e){this.tokenize(e.value);}
function Js (line 1386) | function Js(){return this.Raw(this.consumeUntilLeftCurlyBracket,true)}
function _h (line 1386) | function _h(){let e=this.SelectorList();return e.type!=="Raw"&&this.eof=...
function Ci (line 1386) | function Ci(){let e=this.tokenIndex,t=this.tokenStart,r,n;return this.pa...
function Uh (line 1386) | function Uh(e){this.node(e.prelude),this.node(e.block);}
function Ai (line 1386) | function Ai(){let e=null,t=null;this.skipSC();let r=this.tokenStart;retu...
function Yh (line 1386) | function Yh(e){e.root&&(this.token(21,"("),this.node(e.root),this.token(...
function Ei (line 1386) | function Ei(){let e=this.readSequence(this.scope.Selector);return this.g...
function Qh (line 1386) | function Qh(e){this.children(e);}
function Pi (line 1386) | function Pi(){let e=this.createList();for(;!this.eof;){if(e.push(this.Se...
function Jh (line 1386) | function Jh(e){this.children(e,()=>this.token(18,","));}
function vt (line 1386) | function vt(e){let t=e.length,r=e.charCodeAt(0),n=r===ea||r===ta?1:0,i=n...
function Ni (line 1386) | function Ni(e,t){let r=t?"'":'"',n=t?ta:ea,i="",o=false;for(let s=0;s<e....
function Ri (line 1386) | function Ri(){return {type:"String",loc:this.getLocation(this.tokenStart...
function rm (line 1386) | function rm(e){this.token(5,Ni(e.value));}
function ra (line 1386) | function ra(){return this.Raw(null,false)}
function Mi (line 1386) | function Mi(){let e=this.tokenStart,t=this.createList(),r;for(;!this.eof...
function am (line 1386) | function am(e){this.children(e);}
function _i (line 1386) | function _i(){let e=this.tokenStart;this.eat(21),this.skipSC();let t=thi...
function um (line 1386) | function um(e){this.token(21,"("),this.node(e.declaration),this.token(22...
function qi (line 1386) | function qi(){this.tokenType!==1&&this.isDelim(pm)===false&&this.error("...
function ji (line 1386) | function ji(){let e=this.tokenStart;return this.isDelim(na)?(this.next()...
function dm (line 1386) | function dm(e){this.tokenize(e.name);}
function St (line 1386) | function St(e,t){let r=0;for(let n=this.tokenStart+e;n<this.tokenEnd;n++...
function nr (line 1386) | function nr(e){let t=0;for(;this.isDelim(Hi);)++t>e&&this.error("Too man...
function fm (line 1386) | function fm(e){this.charCodeAt(this.tokenStart)!==e&&this.error((e===ia?...
function gm (line 1386) | function gm(){let e=0;switch(this.tokenType){case 10:if(e=St.call(this,1...
function Gi (line 1386) | function Gi(){let e=this.tokenStart;return this.eatIdent("u"),gm.call(th...
function ym (line 1386) | function ym(e){this.tokenize(e.value);}
function Vi (line 1386) | function Vi(e){let t=e.length,r=4,n=e.charCodeAt(t-1)===sa?t-2:t-1,i="";...
function Qi (line 1386) | function Qi(e){let t="",r=false;for(let n=0;n<e.length;n++){let i=e.char...
function $i (line 1386) | function $i(){let e=this.tokenStart,t;switch(this.tokenType){case 7:t=Vi...
function Am (line 1386) | function Am(e){this.token(7,Qi(e.value));}
function Ji (line 1386) | function Ji(){let e=this.tokenStart,t=this.readSequence(this.scope.Value...
function zm (line 1386) | function zm(e){this.children(e);}
function to (line 1386) | function to(){return this.eat(13),Pm}
function Nm (line 1386) | function Nm(e){this.token(13,e.value);}
function Tt (line 1386) | function Tt(e){switch(this.tokenType){case 4:return this.Hash();case 18:...
function Km (line 1386) | function Km(e,t){t.last!==null&&t.last.type!=="Combinator"&&e!==null&&e....
function Vm (line 1386) | function Vm(){switch(this.tokenType){case 19:return this.AttributeSelect...
function ha (line 1386) | function ha(){return this.createSingleNodeList(this.Raw(null,false))}
function ma (line 1386) | function ma(){let e=this.createList();if(this.skipSC(),e.push(this.Ident...
function da (line 1386) | function da(e){return e!==null&&e.type==="Operator"&&(e.value[e.value.le...
method onWhiteSpace (line 1386) | onWhiteSpace(e,t){da(e)&&(e.value=" "+e.value),da(t.last)&&(t.last.value...
method prelude (line 1386) | prelude(){let e=this.createList();if(this.tokenType===1){let t=this.subs...
method block (line 1386) | block(e=false){return this.Block(e)}
method block (line 1386) | block(){return this.Block(true)}
function io (line 1386) | function io(e,t){return this.parseWithFallback(()=>{try{return e.call(th...
method layer (line 1386) | layer(){this.skipSC();let e=this.createList(),t=io.call(this,this.Layer)...
method supports (line 1386) | supports(){this.skipSC();let e=this.createList(),t=io.call(this,this.Dec...
method prelude (line 1386) | prelude(){let e=this.createList();switch(this.tokenType){case 5:e.push(t...
method prelude (line 1386) | prelude(){return this.createSingleNodeList(this.LayerList())}
method block (line 1386) | block(){return this.Block(false)}
method prelude (line 1386) | prelude(){return this.createSingleNodeList(this.MediaQueryList())}
method block (line 1386) | block(e=false){return this.Block(e)}
method prelude (line 1386) | prelude(){return this.createSingleNodeList(this.SelectorList())}
method block (line 1386) | block(){return this.Block(true)}
method prelude (line 1386) | prelude(){return this.createSingleNodeList(this.SelectorList())}
method block (line 1386) | block(){return this.Block(true)}
method prelude (line 1386) | prelude(){return this.createSingleNodeList(this.Scope())}
method block (line 1386) | block(e=false){return this.Block(e)}
method block (line 1386) | block(e=false){return this.Block(e)}
method prelude (line 1386) | prelude(){return this.createSingleNodeList(this.Condition("supports"))}
method block (line 1386) | block(e=false){return this.Block(e)}
function Ea (line 1386) | function Ea(){let e=this.createList();this.skipSC();e:for(;!this.eof;){s...
method parse (line 1386) | parse(){return this.createSingleNodeList(this.SelectorList())}
method parse (line 1386) | parse(){return this.createSingleNodeList(this.Selector())}
method parse (line 1386) | parse(){return this.createSingleNodeList(this.Identifier())}
method parse (line 1386) | parse(){return this.createSingleNodeList(this.Nth())}
method atrulePrelude (line 1386) | atrulePrelude(e){return this.AtrulePrelude(e.atrule?String(e.atrule):null)}
method condition (line 1386) | condition(e){return this.Condition(e.kind)}
method block (line 1386) | block(){return this.Block(true)}
method selector (line 1386) | selector(){return this.Selector()}
method style (line 1386) | style(){return this.Declaration()}
function Zm (line 1386) | function Zm(e){let t=e.length-1,r="";for(let n=0;n<e.length;n++){let i=e...
function Jm (line 1386) | function Jm(e){let t="";if(e.length===1&&e.charCodeAt(0)===45)return "\\...
function parse$2 (line 1392) | function parse$2(input) {
function serialize (line 1682) | function serialize(srcset) {
function fetchAndConvert (line 1795) | async function fetchAndConvert(mhtml, config, failedResources = []) {
function convert$1 (line 1842) | function convert$1({ headers, frames, resources, unfoundResources = new ...
function setAttribute (line 2222) | function setAttribute(element, attribute, newValue) {
function replaceStylesheetUrls (line 2232) | function replaceStylesheetUrls(resources, base, resource, options = {}, ...
function getResource (line 2304) | function getResource(resources, id, rawId) {
function addMissingResource (line 2312) | function addMissingResource(missingResources, id, transferEncoding) {
function getOriginalUrlFunction (line 2318) | function getOriginalUrlFunction(id, resourceURI = id) {
function getPageInfo (line 2322) | function getPageInfo(headers, index) {
function parse$1 (line 2357) | function parse$1(mhtml, { DOMParser } = { DOMParser: globalThis.DOMParse...
function getMetaCharsetElement (line 2607) | function getMetaCharsetElement(document) {
function getMetaContentTypeElement (line 2612) | function getMetaContentTypeElement(document) {
function convert (line 2621) | function convert(mhtml, config = {}) {
function parse (line 2631) | function parse(data, config = {}) {
function initEventListeners (line 2710) | function initEventListeners() {
function init (line 2923) | async function init({ content, password, compressContent }, { filename, ...
function loadOptionsFromPage (line 3030) | function loadOptionsFromPage(doc) {
function initPage (line 3037) | async function initPage() {
function initConstants (line 3061) | async function initConstants() {
function addNote (line 3069) | function addNote({ color }) {
function attachNoteListeners (line 3121) | function attachNoteListeners(containerElement, editable = false) {
function onMouseDown (line 3305) | function onMouseDown(event) {
function onMouseUp (line 3311) | function onMouseUp(event) {
function onMouseOver (line 3363) | function onMouseOver(event) {
function onMouseOut (line 3384) | function onMouseOut() {
function onTouchMove (line 3393) | function onTouchMove(event) {
function onKeyDown (line 3408) | function onKeyDown(event) {
function printPage (line 3472) | function printPage() {
function highlightCutElement (line 3478) | function highlightCutElement() {
function unhighlightCutElement (line 3483) | function unhighlightCutElement() {
function disableHighlight (line 3491) | function disableHighlight(doc = document) {
function undoCutPage (line 3497) | function undoCutPage() {
function redoCutPage (line 3504) | function redoCutPage() {
function validateCutElement (line 3511) | function validateCutElement(invert) {
function resetSelectedElements (line 3575) | function resetSelectedElements(doc = document) {
function anchorNote (line 3582) | function anchorNote(event, noteElement, deltaX, deltaY) {
function resetAnchorNote (line 3622) | function resetAnchorNote(containerElement) {
function getPosition (line 3631) | function getPosition(event) {
function highlightSelection (line 3640) | function highlightSelection() {
function getParents (line 3719) | function getParents(element) {
function formatPage (line 3728) | function formatPage(applySystemTheme, contentWidth) {
function cancelFormatPage (line 3817) | async function cancelFormatPage() {
function insertHighlightStylesheet (line 3833) | function insertHighlightStylesheet(doc) {
function getContent (line 3841) | function getContent(compressHTML, updatedResources) {
function onUpdate (line 3908) | function onUpdate(saved) {
function waitResourcesLoad (line 3912) | function waitResourcesLoad() {
function reflowNotes (line 3933) | function reflowNotes() {
function resetHighlightedElement (line 3963) | function resetHighlightedElement(element) {
function serializeShadowRoots (line 3972) | function serializeShadowRoots(node) {
function deserializeShadowRoots (line 3985) | function deserializeShadowRoots(node) {
function getMaskElement (line 4010) | function getMaskElement(className, containerClassName) {
function getStyleFormattedPage (line 4033) | function getStyleFormattedPage(contentWidth) {
function getEmbedScript (line 4946) | function getEmbedScript() {
function getStyleElement (line 5022) | function getStyleElement(stylesheet) {
function getAnchorElement (line 5028) | function getAnchorElement(containerElement) {
function addNoteRef (line 5032) | function addNoteRef(anchorElement, noteId) {
function deleteNoteRef (line 5038) | function deleteNoteRef(containerElement, noteId) {
function getNoteRefs (line 5048) | function getNoteRefs(anchorElement) {
function setNoteRefs (line 5052) | function setNoteRefs(anchorElement, noteRefs) {
function minifyText (line 5056) | function minifyText(text) {
function isAncestor (line 5060) | function isAncestor(element, otherElement) {
function getShadowRoot (line 5064) | function getShadowRoot(element) {
function detectSavedPage (line 5080) | function detectSavedPage(document) {
FILE: lib/single-file-extension-offscreen-document.js
method lastError (line 1) | get lastError(){return e.runtime.lastError}
method tabId (line 1) | get tabId(){return e.devtools.inspectedWindow.tabId}
function s (line 1) | function s(t,n,a,s){if(void 0===s){if(o++,!(r.length-o>=e.length))throw ...
function i (line 1) | async function i(e,t){const n=r.findIndex(({test:n}={})=>n&&n(t,e));e.ad...
function c (line 1) | async function c(e,n){await i(e,n.length);const a=Object.keys(n).filter(...
function u (line 1) | async function u(e,t){const a=n.encode(t);await i(e,a.length),await e.ap...
function f (line 1) | async function f(e,t){await i(e,t.length),await e.append("Uint8Array"==t...
function d (line 1) | async function d(e,t){const n=new Uint8Array(new Float64Array([t]).buffe...
function w (line 1) | async function w(e,t){const n=new Uint8Array([Number(t)]);await e.append...
class l (line 1) | class l{constructor(e,t){this.index=e,this.data=t}getObject(){return thi...
method constructor (line 1) | constructor(e,t){this.index=e,this.data=t}
method getObject (line 1) | getObject(){return this.data.objects[this.index]}
class m (line 1) | class m{constructor(e){this.stream=new y(e),this.objects=[],this.setters...
method constructor (line 1) | constructor(e){this.stream=new y(e),this.objects=[],this.setters=[]}
method consume (line 1) | consume(e){return this.stream.consume(e)}
method getObjectId (line 1) | getObjectId(){const e=this.objects.length;return this.objects.push(voi...
method resolveObject (line 1) | resolveObject(e,t){(function(e){return U(e)||x(e)})(t)&&!A(t)&&(this.o...
method setObject (line 1) | setObject(e,t){this.setters.push({functionArguments:e,setterFunction:t})}
method executeSetters (line 1) | executeSetters(){this.setters.forEach(({functionArguments:e,setterFunc...
class y (line 1) | class y{constructor(e){this.offset=0,this.value=new Uint8Array(0),this.c...
method constructor (line 1) | constructor(e){this.offset=0,this.value=new Uint8Array(0),this.consume...
method consume (line 1) | async consume(e){if(this.offset+e>this.value.length){const t=new Uint8...
function g (line 1) | function g(){let e,t,n,a,r,o;return{next:async t=>t?async function(t){r?...
function b (line 1) | async function b(e){const t=(await e.consume(1))[0],n=r[t].parse,a=e.get...
function h (line 1) | async function h(e){const t=await b(e),n=new Array(t);return t&&await as...
function p (line 1) | async function p(e){const t=await b(e),n=await e.consume(t);return a.dec...
function v (line 1) | async function v(e){const t=await e.consume(8);return new Float64Array(t...
function L (line 1) | async function L(e){const t=await e.consume(1);return Boolean(t[0])}
function A (line 1) | function A(e){return e instanceof l}
function U (line 1) | function U(e){return e===Object(e)}
function R (line 1) | function R(e){return"number"==typeof e.length}
function k (line 1) | function k(e){return e===t}
function C (line 1) | function C(e){return"number"==typeof e}
function j (line 1) | function j(e){return C(e)&&Number.isInteger(e)}
function x (line 1) | function x(e){return"symbol"==typeof e}
function E (line 1) | function E(e,t={}){return new Promise((n,a)=>{const r=new XMLHttpRequest...
function T (line 1) | function T({requestId:e,truncated:t,finished:n,data:a}){let r;if(t?(r=O....
function n (line 1) | function n(t){t.clipboardData.setData(e.mimeType,e.content),t.clipboardD...
FILE: lib/single-file-extension.js
function i (line 1) | function i(e,n,r,i){if(void 0===i){if(a++,!(o.length-a>=t.length))throw ...
function s (line 1) | async function s(t,e){const n=d(t,e);let r=new Uint8Array([]);for await(...
class c (line 1) | class c{constructor(t,e){this.stream=new l(t,e),this.objects=[]}append(t...
method constructor (line 1) | constructor(t,e){this.stream=new l(t,e),this.objects=[]}
method append (line 1) | append(t){return this.stream.append(t)}
method flush (line 1) | flush(){return this.stream.flush()}
method addObject (line 1) | addObject(t){this.objects.push(M(t)&&!I(t,this)?t:void 0)}
class l (line 1) | class l{constructor(t,e){this.offset=0,this.appendData=t,this.value=new ...
method constructor (line 1) | constructor(t,e){this.offset=0,this.appendData=t,this.value=new Uint8A...
method append (line 1) | async append(t){if(this.offset+t.length>this.value.length){const e=thi...
method flush (line 1) | async flush(){this.offset&&await this.appendData({value:new Uint8Array...
function d (line 1) | function d(t,{chunkSize:e=8388608}={}){let n,r,o,a,i,s;return{[Symbol.as...
function u (line 1) | async function u(t,e){const n=o.findIndex(({test:n}={})=>n&&n(e,t));t.ad...
function f (line 1) | async function f(t,n){await u(t,n.length);const r=Object.keys(n).filter(...
function m (line 1) | async function m(t,e){const r=n.encode(e);await u(t,r.length),await t.ap...
function p (line 1) | async function p(t,e){await u(t,e.length),await t.append("Uint8Array"==e...
function h (line 1) | async function h(t,e){const n=new Uint8Array(new Float64Array([e]).buffe...
function y (line 1) | async function y(t,e){const n=new Uint8Array([Number(e)]);await t.append...
class g (line 1) | class g{constructor(t,e){this.index=t,this.data=e}getObject(){return thi...
method constructor (line 1) | constructor(t,e){this.index=t,this.data=e}
method getObject (line 1) | getObject(){return this.data.objects[this.index]}
class w (line 1) | class w{constructor(t){this.stream=new b(t),this.objects=[],this.setters...
method constructor (line 1) | constructor(t){this.stream=new b(t),this.objects=[],this.setters=[]}
method consume (line 1) | consume(t){return this.stream.consume(t)}
method getObjectId (line 1) | getObjectId(){const t=this.objects.length;return this.objects.push(voi...
method resolveObject (line 1) | resolveObject(t,e){M(e)&&!C(e)&&(this.objects[t]=e)}
method setObject (line 1) | setObject(t,e){this.setters.push({functionArguments:t,setterFunction:e})}
method executeSetters (line 1) | executeSetters(){this.setters.forEach(({functionArguments:t,setterFunc...
class b (line 1) | class b{constructor(t){this.offset=0,this.value=new Uint8Array(0),this.c...
method constructor (line 1) | constructor(t){this.offset=0,this.value=new Uint8Array(0),this.consume...
method consume (line 1) | async consume(t){if(this.offset+t>this.value.length){const e=new Uint8...
function A (line 1) | function A(){let t,e,n,r,o,a;return{next:async e=>e?async function(e){o?...
function v (line 1) | async function v(t){const e=(await t.consume(1))[0],n=o[e].parse,r=t.get...
function E (line 1) | async function E(t){const e=await v(t),n=new Array(e);return e&&await as...
function S (line 1) | async function S(t){const e=await v(t),n=await t.consume(e);return r.dec...
function T (line 1) | async function T(t){const e=await t.consume(8);return new Float64Array(e...
function P (line 1) | async function P(t){const e=await t.consume(1);return Boolean(e[0])}
function I (line 1) | function I(t,e){return R(t)&&e.objects.includes(t)}
function C (line 1) | function C(t){return t instanceof g}
function R (line 1) | function R(t){return t===Object(t)}
function x (line 1) | function x(t){return"number"==typeof t.length}
function U (line 1) | function U(t){return t===e}
function L (line 1) | function L(t){return"number"==typeof t}
function D (line 1) | function D(t){return L(t)&&Number.isInteger(t)}
function k (line 1) | function k(t){return"symbol"==typeof t}
function M (line 1) | function M(t){return R(t)||k(t)}
function nt (line 1) | function nt(t,e){return prompt(t,e)}
function rt (line 1) | function rt(t){const e=document.querySelector(B);e&&e.style.setProperty(...
function ot (line 1) | function ot(t){if(!document.querySelector(B)&&(t.logsEnabled&&document.d...
function at (line 1) | function at(){const t=document.querySelector(B);t&&t.remove(),et.remove(...
function it (line 1) | function it(t,e,n){n.shadowEnabled&&n.progressBarEnabled&&function(t,e){...
function st (line 1) | function st(t){yt("insert-embedded-image",Y,"…",t)}
function ct (line 1) | function ct(t){yt("insert-embedded-image",Y,"✓",t)}
function lt (line 1) | function lt(){let t;const e=[],n=getSelection();for(let r=0;r<n.rangeCou...
function dt (line 1) | async function dt(t){let e=ut();return e||t?e:(e=await new Promise(t=>{l...
function ut (line 1) | function ut(){const t=getSelection();let e;for(let n=0;n<t.rangeCount;n+...
function ft (line 1) | function ft(t){(t.nodeType==Node.ELEMENT_NODE?t:t.parentElement).setAttr...
function mt (line 1) | function mt(t){t.parentElement&&(ft(t),mt(t.parentElement))}
function pt (line 1) | function pt(){let t=document.querySelector(W);return t||(t=bt(W,document...
function ht (line 1) | function ht(){try{if(et=document.querySelector(G),!et){et=bt(G);const t=...
function yt (line 1) | function yt(t,e,n,r){try{if(r.logsEnabled){const r=et.shadowRoot.querySe...
function gt (line 1) | function gt(t,e){let n,r=t,o=[];do{const t=r.getBoundingClientRect();if(...
function wt (line 1) | function wt(t,e,n,r){return Math[t](n/8)<=r.length&&(e=r[r.length-Math[t...
function bt (line 1) | function bt(t,e){const n=document.createElement(t);return n.className=X,...
function xt (line 1) | function xt(t){({EMBEDDED_IMAGE_BUTTON_MESSAGE:Tt,SHARE_PAGE_BUTTON_MESS...
function Ut (line 1) | function Ut(t,e){console.error("SingleFile",t,e),Lt("singlefile-error-ba...
function Lt (line 1) | function Lt(t,e,{link:n,buttonLabel:r,buttonOnclick:o}={}){try{if(!docum...
function Ft (line 1) | async function Ft(t,e){e.includeBOM&&(t.content="\ufeff"+t.content);cons...
function _t (line 1) | async function _t(t,e){if(Array.isArray(t.content)&&(t.content=new Uint8...
function jt (line 1) | async function jt(t,e){Bt=function(){let t;return{display:async function...
function Kt (line 1) | async function Kt(t,e={},n=!0){try{const r={cache:e.cache||"force-cache"...
function Zt (line 1) | async function Zt(t){const e=await browser.runtime.sendMessage(t);if(!e|...
FILE: lib/single-file-frames.bundle.js
method lastError (line 1) | get lastError(){return e.runtime.lastError}
method tabId (line 1) | get tabId(){return e.devtools.inspectedWindow.tabId}
function m (line 2) | function m(){r instanceof a&&(r.addEventListener("single-file-new-font-f...
function oe (line 2) | function oe(e,t,s,o,n={usedFonts:new Map,canvases:[],images:[],posters:[...
function ne (line 2) | function ne(e,t=new Map){if(e){const s=[];for(const o of Array.from(e))i...
function ie (line 2) | function ie(e,t,s){if(e){const o=e.getPropertyValue("font-style")||"norm...
function re (line 2) | function re(e){const t=globalThis.chrome;if(e.openOrClosedShadowRoot)ret...
function ae (line 2) | function ae(e=""){return function(e){e=e.match(j)?e.replace(j,"$1"):e.re...
function le (line 2) | function le(e,t){let s=!1;if(t){const o=t.getPropertyValue("display"),n=...
function de (line 2) | function de(e){if(e){const t=[];return e.querySelectorAll("style").forEa...
function ce (line 2) | function ce(e,t){if(t.getPropertyValue(e).endsWith("px"))return parseFlo...
function ue (line 2) | function ue(e){const t=e.doctype;let s="";return t&&(s="<!DOCTYPE "+t.no...
function me (line 2) | function me(e,t,s){try{return e.getComputedStyle(t,s)}catch(e){}}
function Te (line 2) | async function Te(e){if(pe.documentElement){ye.clear();const o=pe.body?M...
function we (line 2) | async function we(e,t,s){await Ae("loadTimeout",()=>Ie(e,t,s),t.loadDefe...
function ve (line 2) | async function ve(e,t,s){await Ae("maxTimeout",async()=>{await Re("loadT...
function Ie (line 2) | async function Ie(e,t,s){await Re("idleTimeout"),function(e){e.loadDefer...
function Ae (line 2) | async function Ae(e,t,s,o){if(fe&&fe.runtime&&fe.runtime.sendMessage&&!o...
function Se (line 2) | function Se(e,t,s){const o=ye.get(e);o&&globalThis.clearTimeout(o),ye.se...
function Re (line 2) | async function Re(e){if(fe&&fe.runtime&&fe.runtime.sendMessage)try{await...
function Me (line 2) | function Me(e){const t=ye.get(e);ye.delete(e),t&&globalThis.clearTimeout...
function i (line 2) | function i(e,t=0,s=""){const o=s?`${s}.${t+1}`:`${t+1}`;e.setAttribute(Z...
function r (line 2) | function r(e){const t={};return s(e),t;function s(e){if(e.getAttribute){...
function a (line 2) | function a(e,t){const s=e.getAttribute(Z);s&&!t.has(s)&&e.removeAttribut...
function je (line 2) | function je(){globalThis.addEventListener("message",async e=>{if("string...
function Ye (line 2) | function Ye(){return globalThis.crypto.getRandomValues(new Uint32Array(3...
function Ge (line 2) | async function Ge(e){const t=e.sessionId;delete globalThis._singleFile_c...
function $e (line 2) | function $e(e){if(!globalThis._singleFile_cleaningUp){globalThis._single...
function Ke (line 2) | function Ke(e){e.frames.forEach(t=>Je("responseTimeouts",e.sessionId,t.w...
function Ze (line 2) | function Ze(e,t,s,o){const n=ot(e);!function(e,t,s,o,n){const i=[];let r...
function Je (line 2) | function Je(e,t,s){const o=Be.get(t);if(o&&o[e]){const t=o[e][s];t&&(glo...
function Xe (line 2) | function Xe(e,t){const s=Be.get(e);s&&s.responseTimeouts&&(s.responseTim...
function Qe (line 2) | function Qe(e,t,s){e.forEach((e,o)=>{const n=t+Fe+o;e.removeAttribute(Le...
function et (line 2) | function et(e){e.method=xe;try{De.singlefile.processors.frameTree.initRe...
function tt (line 2) | function tt(e,t,s){if(e==De&&Ne&&Ne.runtime&&Ne.runtime.sendMessage)Ne.r...
function st (line 2) | function st(e,t,s,o,n){const i=Le.preProcessDoc(e,t,o),r=Le.serialize(e)...
function ot (line 2) | function ot(e){let t=Array.from(e.querySelectorAll('iframe, frame, objec...
FILE: lib/single-file-frames.js
function m (line 1) | function m(){r instanceof a&&(r.addEventListener("single-file-new-font-f...
function oe (line 1) | function oe(e,t,s,o,n={usedFonts:new Map,canvases:[],images:[],posters:[...
function ne (line 1) | function ne(e,t=new Map){if(e){const s=[];for(const o of Array.from(e))i...
function ie (line 1) | function ie(e,t,s){if(e){const o=e.getPropertyValue("font-style")||"norm...
function re (line 1) | function re(e){const t=globalThis.chrome;if(e.openOrClosedShadowRoot)ret...
function ae (line 1) | function ae(e=""){return function(e){e=e.match(j)?e.replace(j,"$1"):e.re...
function le (line 1) | function le(e,t){let s=!1;if(t){const o=t.getPropertyValue("display"),n=...
function de (line 1) | function de(e){if(e){const t=[];return e.querySelectorAll("style").forEa...
function ce (line 1) | function ce(e,t){if(t.getPropertyValue(e).endsWith("px"))return parseFlo...
function ue (line 1) | function ue(e){const t=e.doctype;let s="";return t&&(s="<!DOCTYPE "+t.no...
function me (line 1) | function me(e,t,s){try{return e.getComputedStyle(t,s)}catch(e){}}
function Te (line 1) | async function Te(e){if(pe.documentElement){ye.clear();const o=pe.body?M...
function we (line 1) | async function we(e,t,s){await Ae("loadTimeout",()=>Ie(e,t,s),t.loadDefe...
function ve (line 1) | async function ve(e,t,s){await Ae("maxTimeout",async()=>{await Re("loadT...
function Ie (line 1) | async function Ie(e,t,s){await Re("idleTimeout"),function(e){e.loadDefer...
function Ae (line 1) | async function Ae(e,t,s,o){if(fe&&fe.runtime&&fe.runtime.sendMessage&&!o...
function Se (line 1) | function Se(e,t,s){const o=ye.get(e);o&&globalThis.clearTimeout(o),ye.se...
function Re (line 1) | async function Re(e){if(fe&&fe.runtime&&fe.runtime.sendMessage)try{await...
function Me (line 1) | function Me(e){const t=ye.get(e);ye.delete(e),t&&globalThis.clearTimeout...
function i (line 1) | function i(e,t=0,s=""){const o=s?`${s}.${t+1}`:`${t+1}`;e.setAttribute(Z...
function r (line 1) | function r(e){const t={};return s(e),t;function s(e){if(e.getAttribute){...
function a (line 1) | function a(e,t){const s=e.getAttribute(Z);s&&!t.has(s)&&e.removeAttribut...
function je (line 1) | function je(){globalThis.addEventListener("message",async e=>{if("string...
function Ye (line 1) | function Ye(){return globalThis.crypto.getRandomValues(new Uint32Array(3...
function Ge (line 1) | async function Ge(e){const t=e.sessionId;delete globalThis._singleFile_c...
function $e (line 1) | function $e(e){if(!globalThis._singleFile_cleaningUp){globalThis._single...
function Ke (line 1) | function Ke(e){e.frames.forEach(t=>Je("responseTimeouts",e.sessionId,t.w...
function Ze (line 1) | function Ze(e,t,s,o){const n=ot(e);!function(e,t,s,o,n){const i=[];let r...
function Je (line 1) | function Je(e,t,s){const o=Be.get(t);if(o&&o[e]){const t=o[e][s];t&&(glo...
function Xe (line 1) | function Xe(e,t){const s=Be.get(e);s&&s.responseTimeouts&&(s.responseTim...
function Qe (line 1) | function Qe(e,t,s){e.forEach((e,o)=>{const n=t+Fe+o;e.removeAttribute(Le...
function et (line 1) | function et(e){e.method=xe;try{De.singlefile.processors.frameTree.initRe...
function tt (line 1) | function tt(e,t,s){if(e==De&&Ne&&Ne.runtime&&Ne.runtime.sendMessage)Ne.r...
function st (line 1) | function st(e,t,s,o,n){const i=Le.preProcessDoc(e,t,o),r=Le.serialize(e)...
function ot (line 1) | function ot(e){let t=Array.from(e.querySelectorAll('iframe, frame, objec...
FILE: lib/single-file-hooks-frames.js
function init (line 1) | function init(){l.addEventListener("single-file-load-deferred-images-sta...
function loadDeferredImagesStart (line 1) | function loadDeferredImagesStart(i){const r=l.scrollingElement||l.docume...
function loadDeferredImagesEnd (line 1) | function loadDeferredImagesEnd(n){l.querySelectorAll("["+t+"]").forEach(...
function resetScreenSize (line 1) | function resetScreenSize(){const t=l.scrollingElement||l.documentElement...
function getAdoptedStylesheetsListener (line 1) | function getAdoptedStylesheetsListener(e){const t=e.target.shadowRoot;if...
function getDetailObject (line 1) | async function getDetailObject(e,t,n){const i={};return i["font-family"]...
function dispatchResizeEvent (line 1) | function dispatchResizeEvent(){try{e.dispatchEvent(new d("resize")),E&&e...
FILE: lib/single-file-infobar.js
function o (line 1) | function o(o,i,t){if(!o.querySelector(n)){let t;i.infobarContent?t=i.inf...
function a (line 1) | async function a(){let n={displayInfobar:!0};const t=function(n,o="Singl...
FILE: lib/single-file-z-worker.js
class _ (line 1) | class _{constructor(e){return class extends g{constructor(t,n){const s=n...
method constructor (line 1) | constructor(e){return class extends g{constructor(t,n){const s=new e(n...
class S (line 1) | class S{constructor(e){this.crc=e||-1}append(e){let t=0|this.crc;for(let...
method constructor (line 1) | constructor(e){this.crc=e||-1}
method append (line 1) | append(e){let t=0|this.crc;for(let n=0,s=0|e.length;s>n;n++)t=t>>>8^k[...
method get (line 1) | get(){return~this.crc}
class z (line 1) | class z extends g{constructor(){let e;const t=new S;super({transform(e,n...
method constructor (line 1) | constructor(){let e;const t=new S;super({transform(e,n){t.append(e),n....
method concat (line 1) | concat(e,t){if(0===e.length||0===t.length)return e.concat(t);const n=e[e...
method bitLength (line 1) | bitLength(e){const t=e.length;if(0===t)return 0;const n=e[t-1];return 32...
method clamp (line 1) | clamp(e,t){if(32*e.length<t)return e;const n=(e=e.slice(0,s.ceil(t/32)))...
method _shiftRight (line 1) | _shiftRight(e,t,n,s){for(void 0===s&&(s=[]);t>=32;t-=32)s.push(n),n=0;if...
method fromBits (line 1) | fromBits(e){const t=D.bitLength(e)/8,n=new a(t);let s;for(let r=0;t>r;r+...
method toBits (line 1) | toBits(e){const t=[];let n,s=0;for(n=0;n<e.length;n++)s=s<<8|e[n],3&~n||...
method constructor (line 1) | constructor(e){const t=this;t.blockSize=512,t._init=[1732584193,40232334...
method reset (line 1) | reset(){const e=this;return e._h=e._init.slice(0),e._buffer=[],e._length...
method update (line 1) | update(e){const t=this;"string"==typeof e&&(e=C.utf8String.toBits(e));co...
method finalize (line 1) | finalize(){const e=this;let t=e._buffer;const n=e._h;t=D.concat(t,[D.par...
method _f (line 1) | _f(e,t,n,s){return e>19?e>39?e>59?e>79?void 0:t^n^s:t&n|t&s|n&s:t^n^s:t&...
method _S (line 1) | _S(e,t){return t<<e|t>>>32-e}
method _block (line 1) | _block(t){const n=this,r=n._h,a=e(80);for(let e=0;16>e;e++)a[e]=t[e];let...
method getRandomValues (line 1) | getRandomValues(e){const t=new o(e.buffer),n=e=>{let t=987654321;const n...
method pbkdf2 (line 1) | pbkdf2(e,t,n,s){if(n=n||1e4,0>s||0>n)throw new r("invalid params to pbkd...
method constructor (line 1) | constructor(e){const t=this,n=t._hash=x,s=[[],[]];t._baseHash=[new n,new...
method reset (line 1) | reset(){const e=this;e._resultHash=new e._hash(e._baseHash[0]),e._update...
method update (line 1) | update(e){this._updated=!0,this._resultHash.update(e)}
method digest (line 1) | digest(){const e=this,t=e._resultHash.finalize(),n=new e._hash(e._baseHa...
method encrypt (line 1) | encrypt(e){if(this._updated)throw new r("encrypt on already updated hmac...
function P (line 1) | function P(e){return A?p.getRandomValues(e):I.getRandomValues(e)}
method constructor (line 1) | constructor(e){const t=this;t._tables=[[[],[],[],[],[]],[[],[],[],[],[]]...
method encrypt (line 1) | encrypt(e){return this._crypt(e,0)}
method decrypt (line 1) | decrypt(e){return this._crypt(e,1)}
method _precompute (line 1) | _precompute(){const e=this._tables[0],t=this._tables[1],n=e[4],s=t[4],r=...
method _crypt (line 1) | _crypt(e,t){if(4!==e.length)throw new r("invalid aes block size");const ...
method constructor (line 1) | constructor(e,t){this._prf=e,this._initIv=t,this._iv=t}
method reset (line 1) | reset(){this._iv=this._initIv}
method update (line 1) | update(e){return this.calculate(this._prf,e,this._iv)}
method incWord (line 1) | incWord(e){if(255&~(e>>24))e+=1<<24;else{let t=e>>16&255,n=e>>8&255,s=25...
method incCounter (line 1) | incCounter(e){0===(e[0]=this.incWord(e[0]))&&(e[1]=this.incWord(e[1]))}
method calculate (line 1) | calculate(e,t,n){let s;if(!(s=t.length))return[];const r=D.bitLength(t);...
class $ (line 1) | class $ extends g{constructor({password:e,rawPassword:n,signed:s,encrypt...
method constructor (line 1) | constructor({password:e,rawPassword:n,signed:s,encryptionStrength:i,ch...
class ee (line 1) | class ee extends g{constructor({password:e,rawPassword:n,encryptionStren...
method constructor (line 1) | constructor({password:e,rawPassword:n,encryptionStrength:s}){let r;sup...
function te (line 1) | function te(e,t,n,s,r,i){const{ctr:o,hmac:l,pending:c}=e,h=t.length-r;le...
function ne (line 1) | async function ne(n,s,r,i){n.password=null;const o=await(async(e,t,n,s,r...
function se (line 1) | function se(e,t){return t===v?(e=>{if(typeof u==b){const t=new a((e=unes...
function re (line 1) | function re(e,t){let n=e;return e.length+t.length&&(n=new a(e.length+t.l...
function ae (line 1) | function ae(e,t,n){return e.subarray(t,n)}
function ie (line 1) | function ie(e,t){return e.fromBits(t)}
function oe (line 1) | function oe(e,t){return e.toBits(t)}
class le (line 1) | class le extends g{constructor({password:e,passwordVerification:n,checkP...
method constructor (line 1) | constructor({password:e,passwordVerification:n,checkPasswordOnly:s}){s...
class ce (line 1) | class ce extends g{constructor({password:e,passwordVerification:n}){supe...
method constructor (line 1) | constructor({password:e,passwordVerification:n}){super({start(){t.assi...
function he (line 1) | function he(e,t){const n=new a(t.length);for(let s=0;s<t.length;s++)n[s]...
function fe (line 1) | function fe(e,t){const n=new a(t.length);for(let s=0;s<t.length;s++)n[s]...
function ue (line 1) | function ue(e,n){const s=[305419896,591751049,878082192];t.assign(e,{key...
function pe (line 1) | function pe(e,t){let[n,r,a]=e.keys;e.crcKey0.append([t]),n=~e.crcKey0.ge...
function de (line 1) | function de(e){const t=2|e.keys[2];return ge(s.imul(t,1^t)>>>8)}
function ge (line 1) | function ge(e){return 255&e}
function we (line 1) | function we(e){return 4294967295&e}
class ve (line 1) | class ve extends g{constructor(e,{chunkSize:t,CompressionStream:n,Compre...
method constructor (line 1) | constructor(e,{chunkSize:t,CompressionStream:n,CompressionStreamNative...
class be (line 1) | class be extends g{constructor(e,{chunkSize:t,DecompressionStream:n,Deco...
method constructor (line 1) | constructor(e,{chunkSize:t,DecompressionStream:n,DecompressionStreamNa...
function me (line 1) | function me(e){return Se(e,new g({transform(e,t){e&&e.length&&t.enqueue(...
function _e (line 1) | function _e(e,n,s){n=Se(n,new g({flush:s})),t.defineProperty(e,"readable...
function ke (line 1) | function ke(e,t,n,s,r){try{e=Se(e,new(t&&s?s:r)(ye,n))}catch(s){if(!t)re...
function Se (line 1) | function Se(e,t){return e.pipeThrough(t)}
class Ce (line 1) | class Ce extends g{constructor(e,n){super({});const s=this,{codecType:r}...
method constructor (line 1) | constructor(e,n){super({});const s=this,{codecType:r}=e;let a;r.starts...
class xe (line 1) | class xe extends g{constructor(e){let t;super({transform:function n(s,r)...
method constructor (line 1) | constructor(e){let t;super({transform:function n(s,r){if(t){const e=ne...
function He (line 1) | async function He(e){try{const{options:t,scripts:s,config:r}=e;if(s&&s.l...
function Pe (line 1) | async function Pe(e){for(const t of e)await import(t)}
function Be (line 1) | function Be(e){let{value:t}=e;if(t)if(t.length)try{t=new a(t),e.value=t....
function Ke (line 1) | function Ke(e=new r("Unknown error")){const{message:t,stack:n,code:s,nam...
function e (line 1) | function e(e,t){if("function"==typeof e&&(t=e,e={}),this.ondata=t,this.o...
function e (line 1) | function e(e,t){"function"==typeof e&&(t=e,e={}),this.ondata=t;var n=e&&...
function Ct (line 1) | function Ct(e,n,s){return class{constructor(r){const i=this;var o,l;o=r,...
FILE: lib/single-file-zip.js
class j (line 1) | class j{constructor(e){return class extends v{constructor(t,n){const s=n...
method constructor (line 1) | constructor(e){return class extends v{constructor(t,n){const s=new e(n...
function Q (line 1) | function Q(){return Y}
function ee (line 1) | function ee(e){return a.max(e.chunkSize,64)}
function te (line 1) | function te(t){const{baseURL:n,chunkSize:s,maxWorkers:r,terminateWorkerT...
function ne (line 1) | function ne(e,t){t!==$&&(Y[e]=t)}
function se (line 1) | function se(){return"application/octet-stream"}
function re (line 1) | function re(e,t={},n){return{Deflate:ae(e.Deflate,t.deflate,n),Inflate:a...
function ae (line 1) | function ae(e,n,s){return class{constructor(r){const a=this;var i,o;i=r,...
class oe (line 1) | class oe{constructor(e){this.crc=e||-1}append(e){let t=0|this.crc;for(le...
method constructor (line 1) | constructor(e){this.crc=e||-1}
method append (line 1) | append(e){let t=0|this.crc;for(let n=0,s=0|e.length;n<s;n++)t=t>>>8^ie...
method get (line 1) | get(){return~this.crc}
class ce (line 1) | class ce extends v{constructor(){let e;const t=new oe;super({transform(e...
method constructor (line 1) | constructor(){let e;const t=new oe;super({transform(e,n){t.append(e),n...
function le (line 1) | function le(e){if(typeof y==Z){e=unescape(encodeURIComponent(e));const t...
method concat (line 1) | concat(e,t){if(0===e.length||0===t.length)return e.concat(t);const n=e[e...
method bitLength (line 1) | bitLength(e){const t=e.length;if(0===t)return 0;const n=e[t-1];return 32...
method clamp (line 1) | clamp(e,t){if(32*e.length<t)return e;const n=(e=e.slice(0,a.ceil(t/32)))...
method _shiftRight (line 1) | _shiftRight(e,t,n,s){for(void 0===s&&(s=[]);t>=32;t-=32)s.push(n),n=0;if...
method fromBits (line 1) | fromBits(e){const t=ue.bitLength(e)/8,n=new d(t);let s;for(let r=0;r<t;r...
method toBits (line 1) | toBits(e){const t=[];let n,s=0;for(n=0;n<e.length;n++)s=s<<8|e[n],3&~n||...
method constructor (line 1) | constructor(e){const t=this;t.blockSize=512,t._init=[1732584193,40232334...
method reset (line 1) | reset(){const e=this;return e._h=e._init.slice(0),e._buffer=[],e._length...
method update (line 1) | update(e){const t=this;"string"==typeof e&&(e=fe.utf8String.toBits(e));c...
method finalize (line 1) | finalize(){const e=this;let t=e._buffer;const n=e._h;t=ue.concat(t,[ue.p...
method _f (line 1) | _f(e,t,n,s){return e<=19?t&n|~t&s:e<=39?t^n^s:e<=59?t&n|t&s|n&s:e<=79?t^...
method _S (line 1) | _S(e,t){return t<<e|t>>>32-e}
method _block (line 1) | _block(t){const n=this,s=n._h,r=e(80);for(let e=0;e<16;e++)r[e]=t[e];let...
method constructor (line 1) | constructor(e){const t=this;t._tables=[[[],[],[],[],[]],[[],[],[],[],[]]...
method encrypt (line 1) | encrypt(e){return this._crypt(e,0)}
method decrypt (line 1) | decrypt(e){return this._crypt(e,1)}
method _precompute (line 1) | _precompute(){const e=this._tables[0],t=this._tables[1],n=e[4],s=t[4],r=...
method _crypt (line 1) | _crypt(e,t){if(4!==e.length)throw new f("invalid aes block size");const ...
method getRandomValues (line 1) | getRandomValues(e){const t=new p(e.buffer),n=e=>{let t=987654321;const n...
method constructor (line 1) | constructor(e,t){this._prf=e,this._initIv=t,this._iv=t}
method reset (line 1) | reset(){this._iv=this._initIv}
method update (line 1) | update(e){return this.calculate(this._prf,e,this._iv)}
method incWord (line 1) | incWord(e){if(255&~(e>>24))e+=1<<24;else{let t=e>>16&255,n=e>>8&255,s=25...
method incCounter (line 1) | incCounter(e){0===(e[0]=this.incWord(e[0]))&&(e[1]=this.incWord(e[1]))}
method calculate (line 1) | calculate(e,t,n){let s;if(!(s=t.length))return[];const r=ue.bitLength(t)...
method pbkdf2 (line 1) | pbkdf2(e,t,n,s){if(n=n||1e4,s<0||n<0)throw new f("invalid params to pbkd...
method constructor (line 1) | constructor(e){const t=this,n=t._hash=de.sha1,s=[[],[]];t._baseHash=[new...
method reset (line 1) | reset(){const e=this;e._resultHash=new e._hash(e._baseHash[0]),e._update...
method update (line 1) | update(e){this._updated=!0,this._resultHash.update(e)}
method digest (line 1) | digest(){const e=this,t=e._resultHash.finalize(),n=new e._hash(e._baseHa...
method encrypt (line 1) | encrypt(e){if(this._updated)throw new f("encrypt on already updated hmac...
function Se (line 1) | function Se(e){return me?z.getRandomValues(e):pe.getRandomValues(e)}
class Ie (line 1) | class Ie extends v{constructor({password:e,rawPassword:n,signed:s,encryp...
method constructor (line 1) | constructor({password:e,rawPassword:n,signed:s,encryptionStrength:r,ch...
class Me (line 1) | class Me extends v{constructor({password:e,rawPassword:n,encryptionStren...
method constructor (line 1) | constructor({password:e,rawPassword:n,encryptionStrength:s}){let r;sup...
function Le (line 1) | function Le(e,t,n,s,r,a){const{ctr:i,hmac:o,pending:c}=e,l=t.length-r;le...
function Oe (line 1) | async function Oe(n,s,r,a){n.password=null;const i=await async function(...
function Ve (line 1) | function Ve(e,t){return t===$?le(e):t}
function Ke (line 1) | function Ke(e,t){let n=e;return e.length+t.length&&(n=new d(e.length+t.l...
function $e (line 1) | function $e(e,t,n){return e.subarray(t,n)}
function Ze (line 1) | function Ze(e,t){return e.fromBits(t)}
function Ge (line 1) | function Ge(e,t){return e.toBits(t)}
class Je (line 1) | class Je extends v{constructor({password:e,passwordVerification:n,checkP...
method constructor (line 1) | constructor({password:e,passwordVerification:n,checkPasswordOnly:s}){s...
class Xe (line 1) | class Xe extends v{constructor({password:e,passwordVerification:n}){supe...
method constructor (line 1) | constructor({password:e,passwordVerification:n}){super({start(){t.assi...
function Ye (line 1) | function Ye(e,t){const n=new d(t.length);for(let s=0;s<t.length;s++)n[s]...
function Qe (line 1) | function Qe(e,t){const n=new d(t.length);for(let s=0;s<t.length;s++)n[s]...
function et (line 1) | function et(e,n){const s=[305419896,591751049,878082192];t.assign(e,{key...
function tt (line 1) | function tt(e,t){let[n,s,r]=e.keys;e.crcKey0.append([t]),n=~e.crcKey0.ge...
function nt (line 1) | function nt(e){const t=2|e.keys[2];return st(a.imul(t,1^t)>>>8)}
function st (line 1) | function st(e){return 255&e}
function rt (line 1) | function rt(e){return 4294967295&e}
class it (line 1) | class it extends v{constructor(e,{chunkSize:t,CompressionStream:n,Compre...
method constructor (line 1) | constructor(e,{chunkSize:t,CompressionStream:n,CompressionStreamNative...
class ot (line 1) | class ot extends v{constructor(e,{chunkSize:t,DecompressionStream:n,Deco...
method constructor (line 1) | constructor(e,{chunkSize:t,DecompressionStream:n,DecompressionStreamNa...
function ct (line 1) | function ct(e){return ft(e,new v({transform(e,t){e&&e.length&&t.enqueue(...
function lt (line 1) | function lt(e,n,s){n=ft(n,new v({flush:s})),t.defineProperty(e,"readable...
function ut (line 1) | function ut(e,t,n,s,r){try{e=ft(e,new(t&&s?s:r)(at,n))}catch(s){if(!t)re...
function ft (line 1) | function ft(e,t){return e.pipeThrough(t)}
class bt
Condensed preview — 138 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,643K chars).
[
{
"path": ".github/FUNDING.yml",
"chars": 57,
"preview": "custom: https://www.paypal.me/glormeau\nliberapay: gildas\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 1075,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\n\n---\n<!--\nFor questions, please create or update a thread"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 646,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\nlabels: 'feature request'\n---\n\n**Is your feature reque"
},
{
"path": ".gitignore",
"chars": 33,
"preview": "/.vscode/\n**/node_modules/\n.idea/"
},
{
"path": "LICENSE",
"chars": 34523,
"preview": " GNU AFFERO GENERAL PUBLIC LICENSE\n Version 3, 19 November 2007\n\n Copyright (C)"
},
{
"path": "README.MD",
"chars": 594,
"preview": "# SingleFile MV3\r\n\r\nThis is the new version of [SingleFile](https://www.getsinglefile.com) compatible with the Manifest "
},
{
"path": "_locales/az/messages.json",
"chars": 39535,
"preview": "{\n\t\"extensionDescription\": {\n\t\t\"message\": \"Extensionin təsviri.\",\n\t\t\"description\": \"Description of the extension.\"\n\t},\n\t"
},
{
"path": "_locales/de/messages.json",
"chars": 40469,
"preview": "{\n\t\"extensionDescription\": {\n\t\t\"message\": \"Speichern einer kompletten Webseite in eine einzige HTML-Datei\",\n\t\t\"descripti"
},
{
"path": "_locales/en/messages.json",
"chars": 38497,
"preview": "{\n\t\"extensionDescription\": {\n\t\t\"message\": \"Save a complete page into a single HTML file\",\n\t\t\"description\": \"Description "
},
{
"path": "_locales/es/messages.json",
"chars": 40052,
"preview": "{\n\t\"extensionDescription\": {\n\t\t\"message\": \"Guarda una página completa en un único archivo HTML\",\n\t\t\"description\": \"Descr"
},
{
"path": "_locales/fr/messages.json",
"chars": 40516,
"preview": "{\n\t\"extensionDescription\": {\n\t\t\"message\": \"Sauvegardez une page complète dans un simple fichier HTML\",\n\t\t\"description\": "
},
{
"path": "_locales/it/messages.json",
"chars": 39868,
"preview": "{\n\t\"extensionDescription\": {\n\t\t\"message\": \"Salva una pagina completa in un singolo file HTML\",\n\t\t\"description\": \"Descrip"
},
{
"path": "_locales/ja/messages.json",
"chars": 36241,
"preview": "{\n\t\"extensionDescription\": {\n\t\t\"message\": \"完全なページを単一の HTML ファイルに保存する\",\n\t\t\"description\": \"Description of the extension.\"\n"
},
{
"path": "_locales/nl_NL/messages.json",
"chars": 39882,
"preview": "{\n\t\"extensionDescription\": {\n\t\t\"message\": \"Sla een complete website op in één HTML-bestand\",\n\t\t\"description\": \"Descripti"
},
{
"path": "_locales/pl/messages.json",
"chars": 39490,
"preview": "{\n\t\"extensionDescription\": {\n\t\t\"message\": \"Zapisuj kompletną stronę w pojedynczym pliku HTML.\",\n\t\t\"description\": \"Descri"
},
{
"path": "_locales/pt_PT/messages.json",
"chars": 40160,
"preview": "{\n\t\"extensionDescription\": {\n\t\t\"message\": \"Guardar uma página completa num único ficheiro HTML\",\n\t\t\"description\": \"Descr"
},
{
"path": "_locales/pt_br/messages.json",
"chars": 39489,
"preview": "{\n\t\"extensionDescription\": {\n\t\t\"message\": \"Salvar página inteira num único arquivo HTML\",\n\t\t\"description\": \"Description "
},
{
"path": "_locales/ru/messages.json",
"chars": 39842,
"preview": "{\n\t\"extensionDescription\": {\n\t\t\"message\": \"Сохранение полной страницы в едином HTML-файле\",\n\t\t\"description\": \"Descriptio"
},
{
"path": "_locales/sv/messages.json",
"chars": 39063,
"preview": "{\n\t\"extensionDescription\": {\n\t\t\"message\": \"Spara en hel sida i en enda HTML-fil\",\n\t\t\"description\": \"Description of the e"
},
{
"path": "_locales/tr/messages.json",
"chars": 39262,
"preview": "{\n\t\"extensionDescription\": {\n\t\t\"message\": \"Tam bir sayfayı tek bir HTML dosyasına kaydet\",\n\t\t\"description\": \"Description"
},
{
"path": "_locales/uk/messages.json",
"chars": 39764,
"preview": "{\n\t\"extensionDescription\": {\n\t\t\"message\": \"Зберегти всю сторінку в один HTML-файл\",\n\t\t\"description\": \"Description of the"
},
{
"path": "_locales/zh_CN/messages.json",
"chars": 34929,
"preview": "{\n\t\"extensionDescription\": {\n\t\t\"message\": \"将一个完整的页面保存到单个 HTML 文件中\",\n\t\t\"description\": \"Description of the extension.\"\n\t},"
},
{
"path": "_locales/zh_TW/messages.json",
"chars": 34929,
"preview": "{\n\t\"extensionDescription\": {\n\t\t\"message\": \"將一個完整的頁面保存到單個 HTML 文件中\",\n\t\t\"description\": \"Description of the extension.\"\n\t},"
},
{
"path": "build-dev.sh",
"chars": 348,
"preview": "#!/bin/bash\n\nnpx rollup -c rollup.config.dev.js\n\ncat lib/chrome-browser-polyfill.js lib/single-file-frames.js lib/single"
},
{
"path": "build-extension.sh",
"chars": 950,
"preview": "#!/bin/bash\n\ndpkg -s zip &> /dev/null\nif [ $? -ne 0 ]\nthen\n if ! command -v zip &> /dev/null; then\n echo \"Inst"
},
{
"path": "build.sh",
"chars": 344,
"preview": "#!/bin/bash\n\nnpx rollup -c rollup.config.js\n\ncat lib/chrome-browser-polyfill.js lib/single-file-frames.js lib/single-fil"
},
{
"path": "eslint.config.mjs",
"chars": 394,
"preview": "import js from \"@eslint/js\";\n\nexport default [\n\tjs.configs.recommended,\n\t{\n\t\tlanguageOptions: {\n\t\t\tecmaVersion: 2025,\n\t\t"
},
{
"path": "faq.md",
"chars": 4625,
"preview": "# FAQ\r\n\r\n## What does SingleFile do?\r\nSingleFile is a browser extension designed to help users save web pages as complet"
},
{
"path": "lib/chrome-browser-polyfill.js",
"chars": 4113,
"preview": "!function(){\"use strict\";\"undefined\"==typeof globalThis&&(window.globalThis=window),(()=>{const e=globalThis.chrome;glob"
},
{
"path": "lib/single-file-background.js",
"chars": 6947,
"preview": "!function(){\"use strict\";\"undefined\"==typeof globalThis&&(window.globalThis=window),(()=>{const e=globalThis.chrome;glob"
},
{
"path": "lib/single-file-bootstrap.bundle.js",
"chars": 51088,
"preview": "!function(){\"use strict\";\"undefined\"==typeof globalThis&&(window.globalThis=window),(()=>{const e=globalThis.chrome;glob"
},
{
"path": "lib/single-file-bootstrap.js",
"chars": 28811,
"preview": "!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?def"
},
{
"path": "lib/single-file-extension-background.js",
"chars": 107616,
"preview": "!function(){\"use strict\";self.oninstall=()=>skipWaiting(),self.onactivate=()=>clients.claim(),\"undefined\"==typeof global"
},
{
"path": "lib/single-file-extension-bootstrap.js",
"chars": 8825,
"preview": "!function(){\"use strict\";const e=33554432,t=\"data-sf-nesting-track-id\",o=globalThis.singlefileBootstrap,n=new Map;let a,"
},
{
"path": "lib/single-file-extension-core.js",
"chars": 2914,
"preview": "!function(){\"use strict\";const e=\"single-file-response-fetch\",r=\"Host fetch error (SingleFile)\",t=Boolean(window.wrapped"
},
{
"path": "lib/single-file-extension-editor-helper.js",
"chars": 717271,
"preview": "!function(n,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?e(exports):\"function\"==typeof define&&define.amd?def"
},
{
"path": "lib/single-file-extension-editor.js",
"chars": 383993,
"preview": "(function () {\n\t'use strict';\n\n\t/*\n\t * Copyright 2010-2020 Gildas Lormeau\n\t * contact : gildas.lormeau <at> gmail.com\n\t "
},
{
"path": "lib/single-file-extension-frames.js",
"chars": 956,
"preview": "!function(){\"use strict\";const r=window.fetch.bind(window);let e=new Map;browser.runtime.onMessage.addListener(a=>\"singl"
},
{
"path": "lib/single-file-extension-offscreen-document.js",
"chars": 15346,
"preview": "!function(){\"use strict\";\"undefined\"==typeof globalThis&&(window.globalThis=window),(()=>{const e=globalThis.chrome;glob"
},
{
"path": "lib/single-file-extension.js",
"chars": 42603,
"preview": "!function(){\"use strict\";const t=[0],e=Symbol(),n=new TextEncoder,r=new TextDecoder,o=new Array(256);let a=0;function i("
},
{
"path": "lib/single-file-frames.bundle.js",
"chars": 29815,
"preview": "!function(){\"use strict\";\"undefined\"==typeof globalThis&&(window.globalThis=window),(()=>{const e=globalThis.chrome;glob"
},
{
"path": "lib/single-file-frames.js",
"chars": 24746,
"preview": "!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?def"
},
{
"path": "lib/single-file-hooks-frames.js",
"chars": 12749,
"preview": "!function(){\"use strict\";(e=>{const t=\"single-file-lazy-load\",n=\"single-file-load-image\",i=\"single-file-request-get-adop"
},
{
"path": "lib/single-file-infobar.js",
"chars": 9339,
"preview": "!function(){\"use strict\";const n=\"single-file-infobar\";function o(o,i,t){if(!o.querySelector(n)){let t;i.infobarContent?"
},
{
"path": "lib/single-file-z-worker.js",
"chars": 25930,
"preview": "!function(){const{Array:e,Object:t,Number:n,Math:s,Error:r,Uint8Array:a,Uint16Array:i,Uint32Array:o,Int32Array:l,Map:c,D"
},
{
"path": "lib/single-file-zip.js",
"chars": 79504,
"preview": "const{Array:e,Object:t,String:n,Number:s,BigInt:r,Math:a,Date:i,Map:o,Set:c,Response:l,URL:u,Error:f,Uint8Array:d,Uint16"
},
{
"path": "lib/single-file.js",
"chars": 824310,
"preview": "!function(n,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?e(exports):\"function\"==typeof define&&define.amd?def"
},
{
"path": "manifest.json",
"chars": 3789,
"preview": "{\n\t\"name\": \"SingleFile\",\n\t\"author\": \"Gildas Lormeau\",\n\t\"homepage_url\": \"https://www.getsinglefile.com\",\n\t\"icons\": {\n\t\t\"1"
},
{
"path": "package.json",
"chars": 488,
"preview": "{\n\t\"name\": \"single-file-mv3\",\n\t\"version\": \"1.0.0\",\n\t\"description\": \"SingleFile\",\n\t\"author\": \"Gildas Lormeau\",\n\t\"license\""
},
{
"path": "privacy.md",
"chars": 1979,
"preview": "# Privacy Policy\r\nYour data always belongs to you, and only you. SingleFile does not collect any data.\r\n\r\n## How your da"
},
{
"path": "rollup.config.dev.js",
"chars": 3390,
"preview": "import resolve from \"@rollup/plugin-node-resolve\";\nimport terser from \"@rollup/plugin-terser\";\n\nconst PLUGINS = [resolve"
},
{
"path": "rollup.config.js",
"chars": 3616,
"preview": "import resolve from \"@rollup/plugin-node-resolve\";\nimport terser from \"@rollup/plugin-terser\";\n\nconst PLUGINS = [resolve"
},
{
"path": "src/core/bg/autosave-util.js",
"chars": 1996,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/core/bg/autosave.js",
"chars": 9503,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/core/bg/bookmarks.js",
"chars": 4954,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/core/bg/bootstrap.js",
"chars": 1517,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/core/bg/business.js",
"chars": 12481,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/core/bg/companion.js",
"chars": 2043,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/core/bg/config.js",
"chars": 22889,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/core/bg/devtools.js",
"chars": 1323,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/core/bg/download-util.js",
"chars": 4367,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/core/bg/downloads.js",
"chars": 25392,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/core/bg/editor.js",
"chars": 4417,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/core/bg/external-messages.js",
"chars": 3197,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n *\n * This file is part of SingleFil"
},
{
"path": "src/core/bg/index.js",
"chars": 2990,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/core/bg/offscreen-document.js",
"chars": 5329,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/core/bg/offscreen.js",
"chars": 3705,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/core/bg/page-orphan-hack.js",
"chars": 213,
"preview": "/* global navigator, location */\n\n// see https://groups.google.com/a/chromium.org/g/chromium-extensions/c/ld3n-rTmj54\n\nn"
},
{
"path": "src/core/bg/sw-reload-hack.js",
"chars": 171,
"preview": "/* global self, skipWaiting, clients */\n\n// See https://issues.chromium.org/issues/40805401\n\nself.oninstall = () => skip"
},
{
"path": "src/core/bg/tabs-data.js",
"chars": 3313,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/core/bg/tabs-util.js",
"chars": 2173,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/core/bg/tabs.js",
"chars": 6014,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/core/common/download.js",
"chars": 11126,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/core/content/content-bootstrap.js",
"chars": 17652,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/core/content/content-frames.js",
"chars": 1084,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/core/content/content.js",
"chars": 13325,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/core/devtools/devtools.html",
"chars": 222,
"preview": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n <title>DevTools page</title>\r\n</head>\r\n\r\n<body>\r\n <script src=\"/lib/chrome-bro"
},
{
"path": "src/core/devtools/devtools.js",
"chars": 1538,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/index.js",
"chars": 1338,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/lib/dropbox/dropbox.js",
"chars": 10099,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/lib/gdrive/gdrive.js",
"chars": 14473,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/lib/github/github.js",
"chars": 6704,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/lib/mcp/mcp.js",
"chars": 7849,
"preview": "/*\n * Copyright 2010-2025 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/lib/mhtml-to-html/convert.js",
"chars": 32539,
"preview": "/* global URL */\n\nimport {\n decodeMimeHeader,\n parseDOM,\n decodeBase64,\n decodeBinary,\n getCharset,\n g"
},
{
"path": "src/lib/mhtml-to-html/mod.js",
"chars": 1932,
"preview": "/// <reference types=\"./mod.d.ts\" />\n\n// derived from https://github.com/msindwan/mhtml2html\n\n/**\n * The MIT License(MIT"
},
{
"path": "src/lib/mhtml-to-html/parse.js",
"chars": 12039,
"preview": "import {\n decodeQuotedPrintable,\n decodeBinary,\n parseDOM,\n decodeString,\n encodeString,\n getCharset,\n"
},
{
"path": "src/lib/mhtml-to-html/srcset-parser.js",
"chars": 11646,
"preview": "// deno-lint-ignore-file no-control-regex\n\n// derived from https://github.com/albell/parse-srcset\n\n/*\n * The MIT License"
},
{
"path": "src/lib/mhtml-to-html/util.js",
"chars": 9335,
"preview": "/* global URL, TextDecoder, TextEncoder, btoa, atob */\n\nconst EVENT_HANDLER_ATTRIBUTES = [\n \"onafterprint\",\n \"onbe"
},
{
"path": "src/lib/mhtml-to-html/vendor/LICENSE.txt",
"chars": 1064,
"preview": "Copyright (C) 2016-2024 by Roman Dvornov\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\no"
},
{
"path": "src/lib/mhtml-to-html/vendor/README.md",
"chars": 81,
"preview": "This folder contains the distributable file of https://github.com/csstree/csstree"
},
{
"path": "src/lib/mhtml-to-html/vendor/csstree.esm.js",
"chars": 197781,
"preview": "// dist/csstree.esm.js from https://github.com/csstree/csstree/tree/b3fe3e026ce131aa559427162451a60792589730\n\n/*\n * Copy"
},
{
"path": "src/lib/readability/Readability-readerable.js",
"chars": 4401,
"preview": "/*\r\n * Copyright (c) 2010 Arc90 Inc\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may "
},
{
"path": "src/lib/readability/Readability.js",
"chars": 93020,
"preview": "/*\r\n * Copyright (c) 2010 Arc90 Inc\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may "
},
{
"path": "src/lib/rest-form-api/index.js",
"chars": 2397,
"preview": "/*\n * Copyright 2010-2024 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * author: gildas.lormeau <at> gmail"
},
{
"path": "src/lib/s3/s3.js",
"chars": 11170,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/lib/single-file/background.js",
"chars": 1181,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/lib/single-file/browser-polyfill/chrome-browser-polyfill.js",
"chars": 8480,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/lib/single-file/fetch/bg/fetch.js",
"chars": 4284,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/lib/single-file/fetch/content/content-fetch.js",
"chars": 6468,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/lib/single-file/frame-tree/bg/frame-tree.js",
"chars": 1328,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/lib/single-file/lazy/bg/lazy-timeout.js",
"chars": 2894,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/lib/webdav/webdav.js",
"chars": 6964,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/lib/woleet/woleet.js",
"chars": 2033,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/lib/yabson/yabson.js",
"chars": 24232,
"preview": "/* global TextEncoder, TextDecoder */\n\nconst DEFAULT_CHUNK_SIZE = 8 * 1024 * 1024;\nconst TYPE_REFERENCE = 0;\nconst SPECI"
},
{
"path": "src/ui/bg/index.js",
"chars": 2643,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/ui/bg/ui-batch-save-urls.js",
"chars": 6958,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/ui/bg/ui-button.js",
"chars": 9351,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/ui/bg/ui-commands.js",
"chars": 2136,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/ui/bg/ui-editor.js",
"chars": 31232,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/ui/bg/ui-help.js",
"chars": 1617,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/ui/bg/ui-menus.js",
"chars": 22689,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/ui/bg/ui-options-editor.js",
"chars": 2671,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/ui/bg/ui-options.js",
"chars": 92975,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/ui/bg/ui-panel.js",
"chars": 2296,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/ui/bg/ui-pendings.js",
"chars": 4963,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/ui/bg/ui-viewer.js",
"chars": 1727,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/ui/common/common-content-ui.js",
"chars": 9739,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/ui/content/content-ui-editor-web.js",
"chars": 88291,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/ui/content/content-ui.js",
"chars": 23005,
"preview": "/*\n * Copyright 2010-2020 Gildas Lormeau\n * contact : gildas.lormeau <at> gmail.com\n * \n * This file is part of SingleFi"
},
{
"path": "src/ui/pages/batch-save-urls.css",
"chars": 9800,
"preview": "html {\r\n background-color: #f0f0f0;\r\n color: black;\r\n}\r\n\r\nbody {\r\n margin: 0;\r\n margin-left: 5px;\r\n margi"
},
{
"path": "src/ui/pages/batch-save-urls.html",
"chars": 1525,
"preview": "<!DOCTYPE html>\n<html>\n\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title> </titl"
},
{
"path": "src/ui/pages/editor-frame-web.css",
"chars": 2234,
"preview": ".single-file-highlight-yellow, .single-file-highlight-yellow-mode ::selection {\n background-color: #ffff7c !important"
},
{
"path": "src/ui/pages/editor-mask-web.css",
"chars": 696,
"preview": ".note-mask {\n all: initial;\n position: fixed;\n z-index: 2147483645;\n pointer-events: none;\n background-co"
},
{
"path": "src/ui/pages/editor-note-web.css",
"chars": 2363,
"preview": ".note {\n all: initial;\n display: flex;\n flex-direction: column;\n height: 150px;\n width: 150px;\n positi"
},
{
"path": "src/ui/pages/editor.css",
"chars": 2702,
"preview": "html,\nbody {\n height: 100%;\n overflow: hidden;\n}\n\nbody {\n margin: 0;\n display: flex;\n flex-direction: col"
},
{
"path": "src/ui/pages/editor.html",
"chars": 4211,
"preview": "<!DOCTYPE html>\n<html>\n\n<head>\n\t<meta charset=\"utf-8\">\n\t<link rel=\"stylesheet\" href=\"editor.css\">\n\t<meta name=\"viewport\""
},
{
"path": "src/ui/pages/help.css",
"chars": 4559,
"preview": "body {\n background-color: #eee;\n font-size: 12pt;\n}\n\nbody>div {\n position: relative;\n background-color: #fff"
},
{
"path": "src/ui/pages/help.html",
"chars": 86670,
"preview": "<!DOCTYPE html>\n<html>\n\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>SingleFile h"
},
{
"path": "src/ui/pages/help_zh_CN.html",
"chars": 69278,
"preview": "<!DOCTYPE html>\n<html>\n\n<head>\n <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\">\n <title>Single"
},
{
"path": "src/ui/pages/offscreen-document.html",
"chars": 349,
"preview": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n <meta charset=\"utf-8\">\r\n <title>[SingleFile] Autosave offscreen document</titl"
},
{
"path": "src/ui/pages/options-editor.html",
"chars": 986,
"preview": "<!DOCTYPE html>\n<html class=\"maximized\">\n\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<"
},
{
"path": "src/ui/pages/options.css",
"chars": 11541,
"preview": "* {\n box-sizing: content-box;\n}\n\nbody {\n background-color: #fff;\n font-family: sans-serif;\n font-size: 12px;"
},
{
"path": "src/ui/pages/options.html",
"chars": 31030,
"preview": "<!DOCTYPE html>\n<html>\n\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>SingleFile o"
},
{
"path": "src/ui/pages/panel.css",
"chars": 733,
"preview": "html,\nbody {\n height: 100%;\n font-family: sans-serif;\n font-size: 12px;\n}\n\nbody {\n display: flex;\n flex-d"
},
{
"path": "src/ui/pages/panel.html",
"chars": 746,
"preview": "<!DOCTYPE html>\n<html>\n\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Panel</title"
},
{
"path": "src/ui/pages/pendings.css",
"chars": 4415,
"preview": "html {\r\n background-color: #f0f0f0;\r\n color: black;\r\n}\r\n\r\nbody {\r\n margin: 0;\r\n margin-left: 5px;\r\n margi"
},
{
"path": "src/ui/pages/pendings.html",
"chars": 1016,
"preview": "<!DOCTYPE html>\n<html>\n\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title> </titl"
},
{
"path": "src/ui/pages/viewer.html",
"chars": 245,
"preview": "<!DOCTYPE html>\n<html>\n\n<head>\n <meta charset=\"utf-8\">\n <title>Page viewer</title>\n</head>\n\n<body></body>\n<script "
}
]
About this extraction
This page contains the full source code of the gildas-lormeau/SingleFile-MV3 GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 138 files (4.1 MB), approximately 1.1M tokens, and a symbol index with 4731 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.