Update to Lepton 7.4.0

This commit is contained in:
RealStickman 2023-07-04 15:15:50 +02:00
parent aeba2808bc
commit 4b6b26a251
270 changed files with 326 additions and 23842 deletions

View File

@ -1,273 +0,0 @@
This is at least a partial credits-file of people that have contributed to the 'Firefox-UI-Fix' project.
It is sorted by name.
The fields are: name (N), email (E), web-address(W), Copyright(C), license(L).
Thanks,
black7375
----------
Major Contributors
N: 2641a40fd44383320adde4b027a1d0b03bd550
W: https://github.com/2641a40fd44383320adde4b027a1d0b03bd550
N: AveYo
E: aveyo@yahoo.com
W: https://github.com/AveYo
N: Jan Janssen
E: medhefgo@web.de
W: https://github.com/medhefgo
N: Yunsup Sim
E: pedogunu@gmail.com
W: https://ethansup.net
----------
Sponsors
N: Jani Haiko
E: haiko.jani@gmail.com
W: https://github.com/ojaha065
N: Jiho Lee
E: optional.int@kakao.com
W: https://github.com/DPS0340
N: kanlukasz
W: https://github.com/kanlukasz
N: nikkehtine
E: nikkehtine@int.pl
W: https://github.com/nikkehtine
N: OSS.kr
W: https://www.oss.kr/
N: ZachKnife1
W: https://github.com/ZachKnife1
----------
Contributors
N: 7k5x
E: 7k5xlp0onfire@gmail.com
W: https://github.com/7k5x
N: Ajith-stark
E: ajith.kum.12342@gmail.com
W: https://github.com/Ajith-stark
N: akay
W: https://github.com/akay
N: Andmagdo
W: https://github.com/andmagdo
N: anzz1
W: https://github.com/anzz1
N: Backseat-Driver
W: https://www.reddit.com/user/Backseat-Driver/
N: badprogramshere
W: https://github.com/badprogramshere
N: BPower0036
W: https://github.com/BPower0036
N: Burak Yigit Kaya
E: ben@byk.im
W: https://byk.im/
N: dr460nf1r3
E: njcrypted@protonmail.com
W: https://dr460nf1r3.me/
N: Dusk Banks
E: me@bb010g.com
W: https://static.bb010g.com/
N: Filip Š
E: filip.stamcar@hotmail.com
W: https://www.filips.si/
N: hellojaccc
E: kim@taekyeong.me
W: https://github.com/hellojaccc
N: James Upjohn
E: jammehcow@jammehcow.co.nz
W: https://github.com/jammehcow
N: Jonta
W: https://github.com/Jonta
N: mamen
W: https://www.mamen.at
N: MarNicGit
W: https://github.com/MarNicGit
N: Oondanomala
W: https://github.com/Oondanomala
N: Patricek
E: pk22.games@gmail.com
W: https://github.com/Patricek0056
N: ph3b3
E: phoebeleong8@gmail.com
W: https://phoebe-leong.github.io/
N: Rahul Ramkumar
E: rahulram226@gmail.com
W: https://rahulramkumar.dev
N: Roel
E: Nyubis@gmail.com
W: https://github.com/Nyubis
N: roland-rollo
W: https://github.com/roland-rollo
N: ryenyuku
E: teamworks1732@gmail.com
W: https://github.com/ryenyuku
N: SanderTheDragon
E: sanderthedragon@zoho.com
W: https://gitlab.com/SanderTheDragon
N: sean z
E: ean@vsxd.com
W: https://vsxd.com/
N: Sylvain
E: B00ze64@hotmail.com
W: https://github.com/B00ze64
N: Tatsuyuki Ishi
E: ishitatsuyuki@gmail.com
W: https://github.com/ishitatsuyuki
N: thunderstone135
W: https://github.com/thunderstone135
----------
Reference Projects & Resources
N: Compact Mode Firefox Css
W: https://github.com/Godiesc/compactmodefirefoxcss
C: Copyright (c) 2021 Godiesc
L: MPL 2.0
N: EdgeFox
W: https://github.com/23Bluemaster23/EdgeFox
C: Copyright (c) 2021 23Bluemaster23
L: Unspecified License (Copyright holder approved)
N: EdgeTabSeparater.userChrome.css
W: https://gist.github.com/mmis1000/08d8de4bbe70c04423f0b966bcc286b1
C: Copyright (c) 2021 Mmis1000 <mmis10002@gmail.com>
L: MIT
N: edge-frfox
W: https://github.com/bmFtZQ/edge-frfox
C: Copyright (c) 2021 bmFtZQ
L: MIT
N: Feather
W: https://github.com/feathericons/feather
C: Copyright (c) 2013-2017 Cole Bemis
L: MIT
N: firefox-csshacks
W: https://github.com/MrOtherGuy/firefox-csshacks
C: Copyright (c) 2018 MrOtherGuy
L: MPL 2.0
N: Fluent UI System Icons
W: https://github.com/microsoft/fluentui-system-icons
C: Copyright (c) 2020 Microsoft Corporation
L: MIT
N: gecko-dev
W: https://hg.mozilla.org/mozilla-central/
C: Copyright (c) 19982021 The Mozilla Foundation
L: MPL 2.0
N: MaterialFox
W: https://github.com/muckSponge/MaterialFox
C: Copyright (c) 2018 muckSponge
L: MIT
N: Multi-Account-Containers
W: https://github.com/mozilla/multi-account-containers
C: Copyright (c) 19982021 The Mozilla Foundation
L: MPL 2.0
N: plyr
W: https://github.com/sampotts/plyr
C: Copyright (c) 2017 Sam Potts
L: MIT
N: PS-Menu
W: https://github.com/chrisseroka/ps-menu
C: Copyright (c) 2016 chrisseroka
L: MIT
N: Quantum Nox Firefox Dark Full Theme
W: https://github.com/Izheil/Quantum-Nox-Firefox-Dark-Full-Theme
C: Copyright (c) 2017 Izheil
L: MPL 2.0
N: quietfox
W: https://github.com/coekuss/quietfox
C: Copyright (c) 2019 coekuss
L: MIT
N: RainFox
W: https://github.com/1280px/rainfox
C: Copyright (c) 2020 1280px
L: MIT
N: ShadowFox
W: https://github.com/overdodactyl/ShadowFox
C: Copyright (c) 2017 overdodactyl
L: MIT
N: SVG Repo
E: info@svgrepo.com
W: https://www.svgrepo.com
C: Copyright (c) 2017 svgrepo.com
L: CC0
N: uc.css.js
W: https://github.com/aminomancer/uc.css.js
C: Copyright (c) 2019 aminomancer
L: CC BY-NC-SA 4.0
N: userChrome.csshacks
W: https://gist.github.com/DCzajkowski/baaf7bc81aae5278d690eaae951a823b
C: Copyright (c) 2021 Dariusz Czajkowski
L: CC0
N: userChrome.css
W: https://gist.github.com/Dragoner7/ec2319e5038a6b4722d3e692713f9471
C: Copyright (c) 2021 Dragoner7
L: MPL 2.0
N: userChrome.org
W: https://www.userchrome.org/what-is-userchrome-css.html
C: Copyright (c) 2021 Jefferson Scher
L: CC BY 4.0
N: Waterfox
W: https://github.com/WaterfoxCo/Waterfox
C: Copyright (c) 2012 Waterfox Limited
L: MPL 2.0
N: WaveFox
W: https://github.com/QNetITQ/WaveFox
C: Copyright (c) 2021 QNetITQ
L: MIT

View File

@ -1,373 +0,0 @@
Mozilla Public License Version 2.0
==================================
1. Definitions
--------------
1.1. "Contributor"
means each individual or legal entity that creates, contributes to
the creation of, or owns Covered Software.
1.2. "Contributor Version"
means the combination of the Contributions of others (if any) used
by a Contributor and that particular Contributor's Contribution.
1.3. "Contribution"
means Covered Software of a particular Contributor.
1.4. "Covered Software"
means Source Code Form to which the initial Contributor has attached
the notice in Exhibit A, the Executable Form of such Source Code
Form, and Modifications of such Source Code Form, in each case
including portions thereof.
1.5. "Incompatible With Secondary Licenses"
means
(a) that the initial Contributor has attached the notice described
in Exhibit B to the Covered Software; or
(b) that the Covered Software was made available under the terms of
version 1.1 or earlier of the License, but not also under the
terms of a Secondary License.
1.6. "Executable Form"
means any form of the work other than Source Code Form.
1.7. "Larger Work"
means a work that combines Covered Software with other material, in
a separate file or files, that is not Covered Software.
1.8. "License"
means this document.
1.9. "Licensable"
means having the right to grant, to the maximum extent possible,
whether at the time of the initial grant or subsequently, any and
all of the rights conveyed by this License.
1.10. "Modifications"
means any of the following:
(a) any file in Source Code Form that results from an addition to,
deletion from, or modification of the contents of Covered
Software; or
(b) any new file in Source Code Form that contains any Covered
Software.
1.11. "Patent Claims" of a Contributor
means any patent claim(s), including without limitation, method,
process, and apparatus claims, in any patent Licensable by such
Contributor that would be infringed, but for the grant of the
License, by the making, using, selling, offering for sale, having
made, import, or transfer of either its Contributions or its
Contributor Version.
1.12. "Secondary License"
means either the GNU General Public License, Version 2.0, the GNU
Lesser General Public License, Version 2.1, the GNU Affero General
Public License, Version 3.0, or any later versions of those
licenses.
1.13. "Source Code Form"
means the form of the work preferred for making modifications.
1.14. "You" (or "Your")
means an individual or a legal entity exercising rights under this
License. For legal entities, "You" includes any entity that
controls, is controlled by, or is under common control with You. For
purposes of this definition, "control" means (a) the power, direct
or indirect, to cause the direction or management of such entity,
whether by contract or otherwise, or (b) ownership of more than
fifty percent (50%) of the outstanding shares or beneficial
ownership of such entity.
2. License Grants and Conditions
--------------------------------
2.1. Grants
Each Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license:
(a) under intellectual property rights (other than patent or trademark)
Licensable by such Contributor to use, reproduce, make available,
modify, display, perform, distribute, and otherwise exploit its
Contributions, either on an unmodified basis, with Modifications, or
as part of a Larger Work; and
(b) under Patent Claims of such Contributor to make, use, sell, offer
for sale, have made, import, and otherwise transfer either its
Contributions or its Contributor Version.
2.2. Effective Date
The licenses granted in Section 2.1 with respect to any Contribution
become effective for each Contribution on the date the Contributor first
distributes such Contribution.
2.3. Limitations on Grant Scope
The licenses granted in this Section 2 are the only rights granted under
this License. No additional rights or licenses will be implied from the
distribution or licensing of Covered Software under this License.
Notwithstanding Section 2.1(b) above, no patent license is granted by a
Contributor:
(a) for any code that a Contributor has removed from Covered Software;
or
(b) for infringements caused by: (i) Your and any other third party's
modifications of Covered Software, or (ii) the combination of its
Contributions with other software (except as part of its Contributor
Version); or
(c) under Patent Claims infringed by Covered Software in the absence of
its Contributions.
This License does not grant any rights in the trademarks, service marks,
or logos of any Contributor (except as may be necessary to comply with
the notice requirements in Section 3.4).
2.4. Subsequent Licenses
No Contributor makes additional grants as a result of Your choice to
distribute the Covered Software under a subsequent version of this
License (see Section 10.2) or under the terms of a Secondary License (if
permitted under the terms of Section 3.3).
2.5. Representation
Each Contributor represents that the Contributor believes its
Contributions are its original creation(s) or it has sufficient rights
to grant the rights to its Contributions conveyed by this License.
2.6. Fair Use
This License is not intended to limit any rights You have under
applicable copyright doctrines of fair use, fair dealing, or other
equivalents.
2.7. Conditions
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
in Section 2.1.
3. Responsibilities
-------------------
3.1. Distribution of Source Form
All distribution of Covered Software in Source Code Form, including any
Modifications that You create or to which You contribute, must be under
the terms of this License. You must inform recipients that the Source
Code Form of the Covered Software is governed by the terms of this
License, and how they can obtain a copy of this License. You may not
attempt to alter or restrict the recipients' rights in the Source Code
Form.
3.2. Distribution of Executable Form
If You distribute Covered Software in Executable Form then:
(a) such Covered Software must also be made available in Source Code
Form, as described in Section 3.1, and You must inform recipients of
the Executable Form how they can obtain a copy of such Source Code
Form by reasonable means in a timely manner, at a charge no more
than the cost of distribution to the recipient; and
(b) You may distribute such Executable Form under the terms of this
License, or sublicense it under different terms, provided that the
license for the Executable Form does not attempt to limit or alter
the recipients' rights in the Source Code Form under this License.
3.3. Distribution of a Larger Work
You may create and distribute a Larger Work under terms of Your choice,
provided that You also comply with the requirements of this License for
the Covered Software. If the Larger Work is a combination of Covered
Software with a work governed by one or more Secondary Licenses, and the
Covered Software is not Incompatible With Secondary Licenses, this
License permits You to additionally distribute such Covered Software
under the terms of such Secondary License(s), so that the recipient of
the Larger Work may, at their option, further distribute the Covered
Software under the terms of either this License or such Secondary
License(s).
3.4. Notices
You may not remove or alter the substance of any license notices
(including copyright notices, patent notices, disclaimers of warranty,
or limitations of liability) contained within the Source Code Form of
the Covered Software, except that You may alter any license notices to
the extent required to remedy known factual inaccuracies.
3.5. Application of Additional Terms
You may choose to offer, and to charge a fee for, warranty, support,
indemnity or liability obligations to one or more recipients of Covered
Software. However, You may do so only on Your own behalf, and not on
behalf of any Contributor. You must make it absolutely clear that any
such warranty, support, indemnity, or liability obligation is offered by
You alone, and You hereby agree to indemnify every Contributor for any
liability incurred by such Contributor as a result of warranty, support,
indemnity or liability terms You offer. You may include additional
disclaimers of warranty and limitations of liability specific to any
jurisdiction.
4. Inability to Comply Due to Statute or Regulation
---------------------------------------------------
If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Software due to
statute, judicial order, or regulation then You must: (a) comply with
the terms of this License to the maximum extent possible; and (b)
describe the limitations and the code they affect. Such description must
be placed in a text file included with all distributions of the Covered
Software under this License. Except to the extent prohibited by statute
or regulation, such description must be sufficiently detailed for a
recipient of ordinary skill to be able to understand it.
5. Termination
--------------
5.1. The rights granted under this License will terminate automatically
if You fail to comply with any of its terms. However, if You become
compliant, then the rights granted under this License from a particular
Contributor are reinstated (a) provisionally, unless and until such
Contributor explicitly and finally terminates Your grants, and (b) on an
ongoing basis, if such Contributor fails to notify You of the
non-compliance by some reasonable means prior to 60 days after You have
come back into compliance. Moreover, Your grants from a particular
Contributor are reinstated on an ongoing basis if such Contributor
notifies You of the non-compliance by some reasonable means, this is the
first time You have received notice of non-compliance with this License
from such Contributor, and You become compliant prior to 30 days after
Your receipt of the notice.
5.2. If You initiate litigation against any entity by asserting a patent
infringement claim (excluding declaratory judgment actions,
counter-claims, and cross-claims) alleging that a Contributor Version
directly or indirectly infringes any patent, then the rights granted to
You by any and all Contributors for the Covered Software under Section
2.1 of this License shall terminate.
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
end user license agreements (excluding distributors and resellers) which
have been validly granted by You or Your distributors under this License
prior to termination shall survive termination.
************************************************************************
* *
* 6. Disclaimer of Warranty *
* ------------------------- *
* *
* Covered Software is provided under this License on an "as is" *
* basis, without warranty of any kind, either expressed, implied, or *
* statutory, including, without limitation, warranties that the *
* Covered Software is free of defects, merchantable, fit for a *
* particular purpose or non-infringing. The entire risk as to the *
* quality and performance of the Covered Software is with You. *
* Should any Covered Software prove defective in any respect, You *
* (not any Contributor) assume the cost of any necessary servicing, *
* repair, or correction. This disclaimer of warranty constitutes an *
* essential part of this License. No use of any Covered Software is *
* authorized under this License except under this disclaimer. *
* *
************************************************************************
************************************************************************
* *
* 7. Limitation of Liability *
* -------------------------- *
* *
* Under no circumstances and under no legal theory, whether tort *
* (including negligence), contract, or otherwise, shall any *
* Contributor, or anyone who distributes Covered Software as *
* permitted above, be liable to You for any direct, indirect, *
* special, incidental, or consequential damages of any character *
* including, without limitation, damages for lost profits, loss of *
* goodwill, work stoppage, computer failure or malfunction, or any *
* and all other commercial damages or losses, even if such party *
* shall have been informed of the possibility of such damages. This *
* limitation of liability shall not apply to liability for death or *
* personal injury resulting from such party's negligence to the *
* extent applicable law prohibits such limitation. Some *
* jurisdictions do not allow the exclusion or limitation of *
* incidental or consequential damages, so this exclusion and *
* limitation may not apply to You. *
* *
************************************************************************
8. Litigation
-------------
Any litigation relating to this License may be brought only in the
courts of a jurisdiction where the defendant maintains its principal
place of business and such litigation shall be governed by laws of that
jurisdiction, without reference to its conflict-of-law provisions.
Nothing in this Section shall prevent a party's ability to bring
cross-claims or counter-claims.
9. Miscellaneous
----------------
This License represents the complete agreement concerning the subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. Any law or regulation which provides
that the language of a contract shall be construed against the drafter
shall not be used to construe this License against a Contributor.
10. Versions of the License
---------------------------
10.1. New Versions
Mozilla Foundation is the license steward. Except as provided in Section
10.3, no one other than the license steward has the right to modify or
publish new versions of this License. Each version will be given a
distinguishing version number.
10.2. Effect of New Versions
You may distribute the Covered Software under the terms of the version
of the License under which You originally received the Covered Software,
or under the terms of any subsequent version published by the license
steward.
10.3. Modified Versions
If you create software not governed by this License, and you want to
create a new license for such software, you may create and use a
modified version of this License if you rename the license and remove
any references to the name of the license steward (except to note that
such modified license differs from this License).
10.4. Distributing Source Code Form that is Incompatible With Secondary
Licenses
If You choose to distribute Source Code Form that is Incompatible With
Secondary Licenses under the terms of this version of the License, the
notice described in Exhibit B of this License must be attached.
Exhibit A - Source Code Form License Notice
-------------------------------------------
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
If it is not possible or desirable to put the notice in a particular
file, then You may include the notice in a location (such as a LICENSE
file in a relevant directory) where a recipient would be likely to look
for such a notice.
You may add additional accurate notices of copyright ownership.
Exhibit B - "Incompatible With Secondary Licenses" Notice
---------------------------------------------------------
This Source Code Form is "Incompatible With Secondary Licenses", as
defined by the Mozilla Public License, v. 2.0.

View File

@ -1,128 +0,0 @@
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
`github issue`.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.

View File

@ -1,101 +0,0 @@
# Contributing
<!-- markdown-toc start - Don't edit this section. Run M-x markdown-toc-refresh-toc -->
**Table of Contents**
- [Introduce](#introduce)
* [Code of Conduct](#code-of-conduct)
* [We Develop with Github](#we-develop-with-github)
* [Your First Contribution](#your-first-contribution)
* [Contribution Targets](#contribution-targets)
- [License](#license)
- [References](#references)
<!-- markdown-toc end -->
## Introduce
I'm really glad you're reading this, because we need volunteer developers to help this project come to fruition.
This document is intended to help, not burden you.
You can use it as a reference for various guidelines and information, and PR comfortably.
Please note we have a code of conduct, please follow it in all your interactions with the project.
### Code of Conduct
Refer to [CODE\_OF\_CONDUCT.md](./CODE_OF_CONDUCT.md).
### We Develop with Github
We use [github](https://github.com/black7375/Firefox-UI-Fix) to host code, to track [issues](https://github.com/black7375/Firefox-UI-Fix/issues) and feature requests, as well as accept [pull requests](https://github.com/black7375/Firefox-UI-Fix/pulls).
After feedback has been given we expect responses within two weeks. After two weeks we may close the issue and pull request if it isn't showing any activity.
### Your First Contribution
**Working on your first Pull Request?**
You can learn how from this *free* series [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github)
And, Please refer to the [development documentation](./docs/).
### Contribution Targets
We love your input! We want to make contributing to this project as easy and transparent as possible, whether it's:
**Codes**
- New Features.
- Bug fixes.
- Improved compatibility or accessibility.
- Refactoring.
**Graphic Resources**
- Icons ([#213](https://github.com/black7375/Firefox-UI-Fix/issues/213), We need the help of a designer!!)
- Social preview image ([sample](https://github.com/topics/firefox-theme))
**Issues**
- Report a bug.
- Discussing the current state of the code.
- Tell us about related or relevant projects and documents.
- Help other users issue.
- Proposing others..
**Docs**
- Fix typos, alignments.
- Correct awkward sentences.
- Improve document readability.
**Promotions**
- Introduce project
- Video (Recommend!!, We need it)
- Blog
- SNS
- Reddit, Hackernews..etc
- Sample
- [Producthunt](https://www.producthunt.com/posts/firefox-ui-fix-proton)([#43](https://github.com/black7375/Firefox-UI-Fix/issues/43))
- [Youtube](https://www.youtube.com/watch?v=ECta0icNMgY)
## License
**Any contributions you make will be under the MPL 2.0 Software License**
In short, when you submit code changes, your submissions are understood to be under the same [MPL 2.0 License](https://choosealicense.com/licenses/mpl-2.0/) that covers the project.
Feel free to contact the maintainers if that's a concern.
**Reference specification**
Even if you copy the code snippet, it is recommended that you leave a link.
**FAQ**
If you have any questions about other licenses, please see [Moailla's MPL 2.0 FAQ](https://www.mozilla.org/en-US/MPL/2.0/FAQ/).
## References
- [Good-CONTRIBUTING.md-template](https://gist.github.com/PurpleBooth/b24679402957c63ec426)
- [Contributing to Transcriptase](https://gist.github.com/briandk/3d2e8b3ec8daf5a27a62)
- [contributing-template](https://github.com/nayafia/contributing-template/blob/master/CONTRIBUTING-template.md)
- [Contributing to Open Source Projects](https://www.contribution-guide.org/)

View File

@ -1,218 +0,0 @@
This is at least a partial credits-file of people that have contributed to the 'Firefox-UI-Fix' project.
It is sorted by name.
The fields are: name (N), email (E), web-address(W), Copyright(C), license(L).
Thanks,
black7375
----------
Major Contributors
N: AveYo
E: aveyo@yahoo.com
W: https://github.com/AveYo
N: Jan Janssen
E: medhefgo@web.de
W: https://github.com/medhefgo
N: Yunsup Sim
E: pedogunu@gmail.com
W: https://ethansup.net
----------
Contributors
N: 7k5x
E: 7k5xlp0onfire@gmail.com
W: https://github.com/7k5x
N: Ajith-stark
E: ajith.kum.12342@gmail.com
W: https://github.com/Ajith-stark
N: Andmagdo
W: https://github.com/andmagdo
N: anzz1
W: https://github.com/anzz1
N: Backseat-Driver
W: https://www.reddit.com/user/Backseat-Driver/
N: badprogramshere
W: https://github.com/badprogramshere
N: BPower0036
W: https://github.com/BPower0036
N: Burak Yigit Kaya
E: ben@byk.im
W: https://byk.im/
N: dr460nf1r3
E: njcrypted@protonmail.com
W: https://dr460nf1r3.me/
N: Filip Š
E: filip.stamcar@hotmail.com
W: https://www.filips.si/
N: hellojaccc
E: kim@taekyeong.me
W: https://github.com/hellojaccc
N: James Upjohn
E: jammehcow@jammehcow.co.nz
W: https://github.com/jammehcow
N: Jonta
W: https://github.com/Jonta
N: mamen
W: https://www.mamen.at
N: MarNicGit
W: https://github.com/MarNicGit
N: Oondanomala
W: https://github.com/Oondanomala
N: ph3b3
E: phoebeleong8@gmail.com
W: https://phoebe-leong.github.io/
N: Rahul Ramkumar
E: rahulram226@gmail.com
W: https://rahulramkumar.dev
N: Roel
E: Nyubis@gmail.com
W: https://github.com/Nyubis
N: SanderTheDragon
E: sanderthedragon@zoho.com
W: https://gitlab.com/SanderTheDragon
N: sean z
E: ean@vsxd.com
W: https://vsxd.com/
N: Sylvain
E: B00ze64@hotmail.com
W: https://github.com/B00ze64
N: Tatsuyuki Ishi
E: ishitatsuyuki@gmail.com
W: https://github.com/ishitatsuyuki
N: thunderstone135
W: https://github.com/thunderstone135
----------
Reference Projects & Resources
N: Compact Mode Firefox Css
W: https://github.com/Godiesc/compactmodefirefoxcss
C: Copyright (c) 2021 Godiesc
L: MPL 2.0
N: EdgeFox
W: https://github.com/23Bluemaster23/EdgeFox
C: Copyright (c) 2021 23Bluemaster23
L: Unspecified License (Copyright holder approved)
N: EdgeTabSeparater.userChrome.css
W: https://gist.github.com/mmis1000/08d8de4bbe70c04423f0b966bcc286b1
C: Copyright (c) 2021 Mmis1000 <mmis10002@gmail.com>
L: MIT
N: Feather
W: https://github.com/feathericons/feather
C: Copyright (c) 2013-2017 Cole Bemis
L: MIT
N: firefox-csshacks
W: https://github.com/MrOtherGuy/firefox-csshacks
C: Copyright (c) 2018 MrOtherGuy
L: MPL 2.0
N: Fluent UI System Icons
W: https://github.com/microsoft/fluentui-system-icons
C: Copyright (c) 2020 Microsoft Corporation
L: MIT
N: gecko-dev
W: https://hg.mozilla.org/mozilla-central/
C: Copyright (c) 19982021 The Mozilla Foundation
L: MPL 2.0
N: MaterialFox
W: https://github.com/muckSponge/MaterialFox
C: Copyright (c) 2018 muckSponge
L: MIT
N: Multi-Account-Containers
W: https://github.com/mozilla/multi-account-containers
C: Copyright (c) 19982021 The Mozilla Foundation
L: MPL 2.0
N: plyr
W: https://github.com/sampotts/plyr
C: Copyright (c) 2017 Sam Potts
L: MIT
N: PS-Menu
W: https://github.com/chrisseroka/ps-menu
C: Copyright (c) 2016 chrisseroka
L: MIT
N: Quantum Nox Firefox Dark Full Theme
W: https://github.com/Izheil/Quantum-Nox-Firefox-Dark-Full-Theme
C: Copyright (c) 2017 Izheil
L: MPL 2.0
N: quietfox
W: https://github.com/coekuss/quietfox
C: Copyright (c) 2019 coekuss
L: MIT
N: RainFox
W: https://github.com/1280px/rainfox
C: Copyright (c) 2020 1280px
L: MIT
N: ShadowFox
W: https://github.com/overdodactyl/ShadowFox
C: Copyright (c) 2017 overdodactyl
L: MIT
N: SVG Repo
E: info@svgrepo.com
W: https://www.svgrepo.com
C: Copyright (c) 2017 svgrepo.com
L: CC0
N: uc.css.js
W: https://github.com/aminomancer/uc.css.js
C: Copyright (c) 2019 aminomancer
L: CC BY-NC-SA 4.0
N: userChrome.csshacks
W: https://gist.github.com/DCzajkowski/baaf7bc81aae5278d690eaae951a823b
C: Copyright (c) 2021 Dariusz Czajkowski
L: CC0
N: userChrome.css
W: https://gist.github.com/Dragoner7/ec2319e5038a6b4722d3e692713f9471
C: Copyright (c) 2021 Dragoner7
L: MPL 2.0
N: userChrome.org
W: https://www.userchrome.org/what-is-userchrome-css.html
C: Copyright (c) 2021 Jefferson Scher
L: CC BY 4.0
N: Waterfox
W: https://github.com/WaterfoxCo/Waterfox
C: Copyright (c) 2012 Waterfox Limited
L: MPL 2.0

View File

@ -1,3 +1,3 @@
[Info]
Ver=v7.3.1
Ver=v7.4.0
Branch=photon-style

View File

@ -1,373 +0,0 @@
Mozilla Public License Version 2.0
==================================
1. Definitions
--------------
1.1. "Contributor"
means each individual or legal entity that creates, contributes to
the creation of, or owns Covered Software.
1.2. "Contributor Version"
means the combination of the Contributions of others (if any) used
by a Contributor and that particular Contributor's Contribution.
1.3. "Contribution"
means Covered Software of a particular Contributor.
1.4. "Covered Software"
means Source Code Form to which the initial Contributor has attached
the notice in Exhibit A, the Executable Form of such Source Code
Form, and Modifications of such Source Code Form, in each case
including portions thereof.
1.5. "Incompatible With Secondary Licenses"
means
(a) that the initial Contributor has attached the notice described
in Exhibit B to the Covered Software; or
(b) that the Covered Software was made available under the terms of
version 1.1 or earlier of the License, but not also under the
terms of a Secondary License.
1.6. "Executable Form"
means any form of the work other than Source Code Form.
1.7. "Larger Work"
means a work that combines Covered Software with other material, in
a separate file or files, that is not Covered Software.
1.8. "License"
means this document.
1.9. "Licensable"
means having the right to grant, to the maximum extent possible,
whether at the time of the initial grant or subsequently, any and
all of the rights conveyed by this License.
1.10. "Modifications"
means any of the following:
(a) any file in Source Code Form that results from an addition to,
deletion from, or modification of the contents of Covered
Software; or
(b) any new file in Source Code Form that contains any Covered
Software.
1.11. "Patent Claims" of a Contributor
means any patent claim(s), including without limitation, method,
process, and apparatus claims, in any patent Licensable by such
Contributor that would be infringed, but for the grant of the
License, by the making, using, selling, offering for sale, having
made, import, or transfer of either its Contributions or its
Contributor Version.
1.12. "Secondary License"
means either the GNU General Public License, Version 2.0, the GNU
Lesser General Public License, Version 2.1, the GNU Affero General
Public License, Version 3.0, or any later versions of those
licenses.
1.13. "Source Code Form"
means the form of the work preferred for making modifications.
1.14. "You" (or "Your")
means an individual or a legal entity exercising rights under this
License. For legal entities, "You" includes any entity that
controls, is controlled by, or is under common control with You. For
purposes of this definition, "control" means (a) the power, direct
or indirect, to cause the direction or management of such entity,
whether by contract or otherwise, or (b) ownership of more than
fifty percent (50%) of the outstanding shares or beneficial
ownership of such entity.
2. License Grants and Conditions
--------------------------------
2.1. Grants
Each Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license:
(a) under intellectual property rights (other than patent or trademark)
Licensable by such Contributor to use, reproduce, make available,
modify, display, perform, distribute, and otherwise exploit its
Contributions, either on an unmodified basis, with Modifications, or
as part of a Larger Work; and
(b) under Patent Claims of such Contributor to make, use, sell, offer
for sale, have made, import, and otherwise transfer either its
Contributions or its Contributor Version.
2.2. Effective Date
The licenses granted in Section 2.1 with respect to any Contribution
become effective for each Contribution on the date the Contributor first
distributes such Contribution.
2.3. Limitations on Grant Scope
The licenses granted in this Section 2 are the only rights granted under
this License. No additional rights or licenses will be implied from the
distribution or licensing of Covered Software under this License.
Notwithstanding Section 2.1(b) above, no patent license is granted by a
Contributor:
(a) for any code that a Contributor has removed from Covered Software;
or
(b) for infringements caused by: (i) Your and any other third party's
modifications of Covered Software, or (ii) the combination of its
Contributions with other software (except as part of its Contributor
Version); or
(c) under Patent Claims infringed by Covered Software in the absence of
its Contributions.
This License does not grant any rights in the trademarks, service marks,
or logos of any Contributor (except as may be necessary to comply with
the notice requirements in Section 3.4).
2.4. Subsequent Licenses
No Contributor makes additional grants as a result of Your choice to
distribute the Covered Software under a subsequent version of this
License (see Section 10.2) or under the terms of a Secondary License (if
permitted under the terms of Section 3.3).
2.5. Representation
Each Contributor represents that the Contributor believes its
Contributions are its original creation(s) or it has sufficient rights
to grant the rights to its Contributions conveyed by this License.
2.6. Fair Use
This License is not intended to limit any rights You have under
applicable copyright doctrines of fair use, fair dealing, or other
equivalents.
2.7. Conditions
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
in Section 2.1.
3. Responsibilities
-------------------
3.1. Distribution of Source Form
All distribution of Covered Software in Source Code Form, including any
Modifications that You create or to which You contribute, must be under
the terms of this License. You must inform recipients that the Source
Code Form of the Covered Software is governed by the terms of this
License, and how they can obtain a copy of this License. You may not
attempt to alter or restrict the recipients' rights in the Source Code
Form.
3.2. Distribution of Executable Form
If You distribute Covered Software in Executable Form then:
(a) such Covered Software must also be made available in Source Code
Form, as described in Section 3.1, and You must inform recipients of
the Executable Form how they can obtain a copy of such Source Code
Form by reasonable means in a timely manner, at a charge no more
than the cost of distribution to the recipient; and
(b) You may distribute such Executable Form under the terms of this
License, or sublicense it under different terms, provided that the
license for the Executable Form does not attempt to limit or alter
the recipients' rights in the Source Code Form under this License.
3.3. Distribution of a Larger Work
You may create and distribute a Larger Work under terms of Your choice,
provided that You also comply with the requirements of this License for
the Covered Software. If the Larger Work is a combination of Covered
Software with a work governed by one or more Secondary Licenses, and the
Covered Software is not Incompatible With Secondary Licenses, this
License permits You to additionally distribute such Covered Software
under the terms of such Secondary License(s), so that the recipient of
the Larger Work may, at their option, further distribute the Covered
Software under the terms of either this License or such Secondary
License(s).
3.4. Notices
You may not remove or alter the substance of any license notices
(including copyright notices, patent notices, disclaimers of warranty,
or limitations of liability) contained within the Source Code Form of
the Covered Software, except that You may alter any license notices to
the extent required to remedy known factual inaccuracies.
3.5. Application of Additional Terms
You may choose to offer, and to charge a fee for, warranty, support,
indemnity or liability obligations to one or more recipients of Covered
Software. However, You may do so only on Your own behalf, and not on
behalf of any Contributor. You must make it absolutely clear that any
such warranty, support, indemnity, or liability obligation is offered by
You alone, and You hereby agree to indemnify every Contributor for any
liability incurred by such Contributor as a result of warranty, support,
indemnity or liability terms You offer. You may include additional
disclaimers of warranty and limitations of liability specific to any
jurisdiction.
4. Inability to Comply Due to Statute or Regulation
---------------------------------------------------
If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Software due to
statute, judicial order, or regulation then You must: (a) comply with
the terms of this License to the maximum extent possible; and (b)
describe the limitations and the code they affect. Such description must
be placed in a text file included with all distributions of the Covered
Software under this License. Except to the extent prohibited by statute
or regulation, such description must be sufficiently detailed for a
recipient of ordinary skill to be able to understand it.
5. Termination
--------------
5.1. The rights granted under this License will terminate automatically
if You fail to comply with any of its terms. However, if You become
compliant, then the rights granted under this License from a particular
Contributor are reinstated (a) provisionally, unless and until such
Contributor explicitly and finally terminates Your grants, and (b) on an
ongoing basis, if such Contributor fails to notify You of the
non-compliance by some reasonable means prior to 60 days after You have
come back into compliance. Moreover, Your grants from a particular
Contributor are reinstated on an ongoing basis if such Contributor
notifies You of the non-compliance by some reasonable means, this is the
first time You have received notice of non-compliance with this License
from such Contributor, and You become compliant prior to 30 days after
Your receipt of the notice.
5.2. If You initiate litigation against any entity by asserting a patent
infringement claim (excluding declaratory judgment actions,
counter-claims, and cross-claims) alleging that a Contributor Version
directly or indirectly infringes any patent, then the rights granted to
You by any and all Contributors for the Covered Software under Section
2.1 of this License shall terminate.
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
end user license agreements (excluding distributors and resellers) which
have been validly granted by You or Your distributors under this License
prior to termination shall survive termination.
************************************************************************
* *
* 6. Disclaimer of Warranty *
* ------------------------- *
* *
* Covered Software is provided under this License on an "as is" *
* basis, without warranty of any kind, either expressed, implied, or *
* statutory, including, without limitation, warranties that the *
* Covered Software is free of defects, merchantable, fit for a *
* particular purpose or non-infringing. The entire risk as to the *
* quality and performance of the Covered Software is with You. *
* Should any Covered Software prove defective in any respect, You *
* (not any Contributor) assume the cost of any necessary servicing, *
* repair, or correction. This disclaimer of warranty constitutes an *
* essential part of this License. No use of any Covered Software is *
* authorized under this License except under this disclaimer. *
* *
************************************************************************
************************************************************************
* *
* 7. Limitation of Liability *
* -------------------------- *
* *
* Under no circumstances and under no legal theory, whether tort *
* (including negligence), contract, or otherwise, shall any *
* Contributor, or anyone who distributes Covered Software as *
* permitted above, be liable to You for any direct, indirect, *
* special, incidental, or consequential damages of any character *
* including, without limitation, damages for lost profits, loss of *
* goodwill, work stoppage, computer failure or malfunction, or any *
* and all other commercial damages or losses, even if such party *
* shall have been informed of the possibility of such damages. This *
* limitation of liability shall not apply to liability for death or *
* personal injury resulting from such party's negligence to the *
* extent applicable law prohibits such limitation. Some *
* jurisdictions do not allow the exclusion or limitation of *
* incidental or consequential damages, so this exclusion and *
* limitation may not apply to You. *
* *
************************************************************************
8. Litigation
-------------
Any litigation relating to this License may be brought only in the
courts of a jurisdiction where the defendant maintains its principal
place of business and such litigation shall be governed by laws of that
jurisdiction, without reference to its conflict-of-law provisions.
Nothing in this Section shall prevent a party's ability to bring
cross-claims or counter-claims.
9. Miscellaneous
----------------
This License represents the complete agreement concerning the subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. Any law or regulation which provides
that the language of a contract shall be construed against the drafter
shall not be used to construe this License against a Contributor.
10. Versions of the License
---------------------------
10.1. New Versions
Mozilla Foundation is the license steward. Except as provided in Section
10.3, no one other than the license steward has the right to modify or
publish new versions of this License. Each version will be given a
distinguishing version number.
10.2. Effect of New Versions
You may distribute the Covered Software under the terms of the version
of the License under which You originally received the Covered Software,
or under the terms of any subsequent version published by the license
steward.
10.3. Modified Versions
If you create software not governed by this License, and you want to
create a new license for such software, you may create and use a
modified version of this License if you rename the license and remove
any references to the name of the license steward (except to note that
such modified license differs from this License).
10.4. Distributing Source Code Form that is Incompatible With Secondary
Licenses
If You choose to distribute Source Code Form that is Incompatible With
Secondary Licenses under the terms of this version of the License, the
notice described in Exhibit B of this License must be attached.
Exhibit A - Source Code Form License Notice
-------------------------------------------
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
If it is not possible or desirable to put the notice in a particular
file, then You may include the notice in a location (such as a LICENSE
file in a relevant directory) where a recipient would be likely to look
for such a notice.
You may add additional accurate notices of copyright ownership.
Exhibit B - "Incompatible With Secondary Licenses" Notice
---------------------------------------------------------
This Source Code Form is "Incompatible With Secondary Licenses", as
defined by the Mozilla Public License, v. 2.0.

View File

@ -1,220 +0,0 @@
* Lepton (old name: Proton Fix) - Photon Styled
:PROPERTIES:
:TOC: :include all
:END:
*Table of Contents*
:CONTENTS:
- [[#lepton-old-name-proton-fix---photon-stlyed][Lepton (old name: Proton Fix) - Photon Stlyed]]
- [[#introduction][Introduction]]
- [[#installation-guide][Installation Guide]]
- [[#why-proton][WHY Proton?]]
- [[#why-not-proton][WHY Not Proton?]]
- [[#padding-comparisons][Padding Comparisons]]
- [[#contributors][Contributors]]
- [[#faq][FAQ]]
:END:
-----
🔔🔔 Did you set a custom, but not work?
You should copy [[./user.js][ ~user.js~ ]] file before the theme works.
The option system depends on user configuration, and nothing applies without settings. \\
Also, real-time changes are difficult for [[./docs/Restrictions.md#supports][technical limitations]] and require restarts.
Some settings [[https://github.com/black7375/Firefox-UI-Fix/wiki/Options#using-userjs][can be conflict]] and should be explicitly =false=.
-----
** Introduction
[[https://wiki.mozilla.org/Firefox/Proton][Proton]] is Firefox's new design, starting from Firefox 89. \\
[[https://design.firefox.com/photon/][Photon]] is the old design of Firefox which was used until version 88.
Proton's [[#why-proton][overall feel is good]], but there were a few things I [[#why-not-proton][didn't like]] and wanted to improve. \\
That's why this project was born, and Lepton to denote light theme layer.
Lepton's photon styled is preserve Photon's feeling while keep [[https://github.com/black7375/Firefox-UI-Fix][Original Lepton]].'s strengths.
/Disclaimer:/ It works on *Firefox 89* and above!!
| *Wiki* | | | | |
| [[https://github.com/black7375/Firefox-UI-Fix/wiki/Installation-Guide][Installation Guide]] | [[https://github.com/black7375/Firefox-UI-Fix/wiki/Screenshots][Screenshots]] | [[https://github.com/black7375/Firefox-UI-Fix/wiki/Options][Options]] | [[https://github.com/black7375/Firefox-UI-Fix/wiki/Compatibility-Issues-Solution][Compatibility Issues Solution]] | [[https://github.com/black7375/Firefox-UI-Fix/wiki/Tips][Tips]] |
[[https://user-images.githubusercontent.com/25581533/120091976-41ea4e00-c0ff-11eb-88ca-a204cfcebe72.png]]
(Lepton's Photon styled design :arrow_up:)
@@html:<details>@@@@html:<summary>@@ *Feature List (Click)* @@html:</summary>@@
- *Color*
- Default light/dark theme contrast enhancement
- Colorful context menu
- More dark mode support
- GTK system theme support
- Windows system theme support
- Mac system theme support
- Windows7 compatibility
- *Icons*
- Panel: like Photon
- Context Menu
- Global Menu
- Library's open context
- Video Player
- *Padding Narrower*
- Tab
- Panel
- Menu
- Density
- Others...
- *Tabbar Layouts*
- Tabs on Bottom
- One Liner
- Vertical Tab Support
- *Tab Design*
- General:
- Connect with toolbar(Buttons like tabs): like Photon
- Selected:
- Context Line: like Photon
- Bottom Rounding: Natural
- MultiSelected
- Adjust Color: Easily recognizable.
- Unselect:
- Divide Line: like Photon
- Unloaded:
- Dimmed: Looks like inactive
- Clipped:
- Clearer Text: Adjusted clipped gradation
- Closed Button: Visible on hover
- Sound:
- Remove Second Label
- Show Favicon: Always show favicon
- PIP Icon
- Container Tab:
- Highlight line position: Displayed under tab.
- *Button Design*
- New tab: like Photon
- *Activity Stream Design*
- Search Bar:
- Focused Shadow: Same as the accent color
- Hand off to Awesomebar
- Icons:
- Size: Fill(Changes dynamically to your size)
- *Error Page Design*
- Illustrations: Restore error page illustrations
- *Video Player*
- Background Style
- Size at fullscreen
- *Fullscreen*
- Overlap mode
- *Others*
- Animations
- Hidden & Auto Hide
- Activate calculator at address bar
- Mouse pointer for each context
@@html:</details>@@
** Installation Guide
*Script Installation (experimental)*
Linux, mac users:
#+BEGIN_SRC bash
bash -c "$(curl -fsSL https://raw.githubusercontent.com/black7375/Firefox-UI-Fix/master/install.sh)"
#+END_SRC
Windows users: Run with powershell ([[https://github.com/black7375/Firefox-UI-Fix/wiki/Compatibility-Issues-Solution#windows-7-powershell-script-not-works][Does not work at Win7?]])
#+BEGIN_SRC powershell
Powershell -c "Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iwr https://raw.githubusercontent.com/black7375/Firefox-UI-Fix/master/install.ps1 -useb | iex"
#+END_SRC
*Manual Installation*
You can see the [[https://github.com/black7375/Firefox-UI-Fix/wiki/Installation-Guide][installation guide]] with screenshots on the wiki.
1. Download files
- Click the green ":arrow_down: Code"-button above
- Select ":package: Download Zip"
2. Find your profile directory
- Open =about:support= in a new tab
- Find the =Profile Folder= entry and click the =Open Folder= button
3. Copy downloaded files
- Extract the downloaded zip file
- Copy the =user.js= file to the previously opened profile directory
- Create a new directory inside your profile directory called =chrome=
- Copy the remaining files from the extracted zip-file into previously created the =chrome= directory
4. Restart Firefox
- Click the =Clear startup cache...= at the top of =about:support=
If you prefer Proton(89 or above), see [[https://github.com/black7375/Firefox-UI-Fix][Original Lepton]].\\
If you prefer Proton tab shape, see [[https://github.com/black7375/Firefox-UI-Fix/tree/proton-style][Lepton's proton-style]].
** WHY Proton?
I think a lot has improved.
[[https://user-images.githubusercontent.com/25581533/119773764-a6639e00-beb0-11eb-8023-498b6293c4b2.png]]
(Proton's design :arrow_up:)
- Neatly organized menu
- Icon beautiful enough to remind you of Edge
- Nice color scheme
- Satisfied Rounding
- Modal window & Scrollbar!!
** WHY Not Proton?
However, there are also many flaws.
[[https://user-images.githubusercontent.com/25581533/119773812-b5e2e700-beb0-11eb-923c-55ae1a8ca249.png]]
(Photon's design :arrow_up:)
- Is it a tab or a button?
- Where are the menu icons?
- Icons in ActivityStream are too small
- Padding gaps are wide
- :warning: Address bar 3-point menu, screenshot moves to toolbar (can't fix)
** Padding Comparisons
[[https://user-images.githubusercontent.com/25581533/120262929-38412180-c28a-11eb-8680-e278403873e4.png]]
[[https://user-images.githubusercontent.com/25581533/120263320-0086a980-c28b-11eb-8b58-acde49dd80ee.png]]
[[https://user-images.githubusercontent.com/25581533/118402352-1e33fc00-b659-11eb-89fc-3cb38207fe39.png]]
[[https://user-images.githubusercontent.com/25581533/124066951-0eb21c00-da29-11eb-9ac4-c6b82a268c6f.png]]
- Photon (Quantum)
- Proton
- Lepton
** Contributors
Thanks to all contributors to this project for providing help and developing features!
[[https://github.com/black7375/Firefox-UI-Fix/graphs/contributors][@@html:<img src="https://contrib.rocks/image?repo=black7375/Firefox-UI-Fix"/>@@]]
A list of all contributors can be found in [[./CREDITS][CREDITS]].
** FAQ
- *Black pixels around the selected tab bottom corners* \\
[[https://user-images.githubusercontent.com/5571586/120401980-edf58a00-c2f5-11eb-9e64-ce50c5b189b2.png]]
Please follow the [[https://github.com/black7375/Firefox-UI-Fix/wiki/Installation-Guide][Installation Guide]], \\
or set =about:config='s =svg.context-properties.content.enabled= to =true= .
- *The closed button and some panel menu icons are not visible.* \\
[[https://user-images.githubusercontent.com/77958663/130395848-7af58241-bbbf-4273-bb62-14382c44098d.png]]
[[https://user-images.githubusercontent.com/25581533/120487528-93b40200-c3a5-11eb-98ad-3498beb9f38e.png]]
Please follow the [[https://github.com/black7375/Firefox-UI-Fix/wiki/Installation-Guide][Installation Guide]], \\
or copy the =icons= directory to =chrome= .
- *Less icons in the panel with photon-style*\\
[[https://user-images.githubusercontent.com/25581533/123761424-5746c980-d8b1-11eb-9a0f-83fb305f9f08.png]]
[[https://user-images.githubusercontent.com/25581533/123762962-d4bf0980-d8b2-11eb-8492-d497d330c72a.png]]
I didn't put all the icons like before.\\
[[https://user-images.githubusercontent.com/25581533/123602947-dd4b0d80-d7e8-11eb-93a6-2b263bdd99f7.png]]

View File

@ -1,62 +0,0 @@
@use "true" as *;
@use "../src/utils/accent_color" as *;
@include test-module("Accent Color Option [mix]") {
@include test("simple") {
@include assert {
@include output {
@include AccentColor {
body {
background-color: $accentColor;
color: $accentTextColor;
}
}
}
@include expect {
body {
background-color: AccentColor;
color: AccentColorText;
}
@supports -moz-bool-pref("userChrome.compatibility.accent_color") {
body {
background-color: -moz-accent-color;
color: -moz-accent-color-foreground;
}
}
}
}
}
@include test("css var") {
@include assert {
@include output {
:root {
@include AccentColor {
// Don't use like this!!
--uc-accent-color: $accentColor;
--uc-accent-text-color: $accentTextColor;
// Use like this
--uc-accent-color: #{$accentColor};
--uc-accent-text-color: #{$accentTextColor};
}
}
}
@include expect {
:root {
--uc-accent-color: $accentColor;
--uc-accent-text-color: $accentTextColor;
--uc-accent-color: AccentColor;
--uc-accent-text-color: AccentColorText;
}
@supports -moz-bool-pref("userChrome.compatibility.accent_color") {
:root {
--uc-accent-color: $accentColor;
--uc-accent-text-color: $accentTextColor;
--uc-accent-color: -moz-accent-color;
--uc-accent-text-color: -moz-accent-color-foreground;
}
}
}
}
}
}

View File

@ -1,126 +0,0 @@
@use 'true' as *;
@use "example" as *;
@use "../src/utils/color_scheme";
@include test-module("Color scheme is dark [mix]") {
@include test("simple") {
@include assert {
@include output {
@include color_scheme.Dark {
@include example;
}
}
@include expect {
@media (-moz-toolbar-prefers-color-scheme: dark), (prefers-color-scheme: dark) {
@include example;
}
}
}
}
@include test("simple reversed") {
@include assert {
@include output {
@include example_tag {
@include color_scheme.Dark {
@include example_property;
}
}
}
@include expect {
@media (-moz-toolbar-prefers-color-scheme: dark), (prefers-color-scheme: dark) {
@include example_tag {
@include example_property;
}
}
}
}
}
}
@include test-module("Color scheme is light [mix]") {
@include test("simple") {
@include assert {
@include output {
@include color_scheme.Light {
@include example;
}
}
@include expect {
@media (-moz-toolbar-prefers-color-scheme: light), (prefers-color-scheme: light) {
@include example;
}
}
}
}
@include test("simple reversed") {
@include assert {
@include output {
@include example_tag {
@media (-moz-toolbar-prefers-color-scheme: light), (prefers-color-scheme: light) {
@include example_property;
}
}
}
@include expect {
@media (-moz-toolbar-prefers-color-scheme: light), (prefers-color-scheme: light) {
@include example_tag {
@include example_property;
}
}
}
}
}
}
@include test-module("Color contrast [mix]") {
@include test("simple") {
@include assert {
@include output {
@include color_scheme.Contrast {
@include example;
}
}
@include expect {
@media (prefers-contrast) {
@include example;
}
}
}
}
}
@include test-module("Color not contrast [mix]") {
@include test("simple") {
@include assert {
@include output {
@include color_scheme.NotContrast {
@include example;
}
}
@include expect {
@media not all and (prefers-contrast) {
@include example;
}
}
}
}
}
@include test-module("Animate, not reduced motion [mix]") {
@include test("simple") {
@include assert {
@include output {
@include color_scheme.Animate {
@include example;
}
}
@include expect {
@media (prefers-reduced-motion: no-preference) {
@include example;
}
}
}
}
}

View File

@ -1,98 +0,0 @@
@use 'true' as *;
@use "example" as *;
@use "../src/utils/each";
@include test-module("Create each at rules [mix]") {
@include test("prefix single") {
@include assert {
@include output {
@include each.AtEach("-moz-document", "about:home", "url") {
@include example;
}
}
@include expect {
@-moz-document url(about:home) {
@include example;
}
}
}
}
@include test("prefix multiple") {
@include assert {
@include output {
$input: "about:home" "about:newtab";
@include each.AtEach("-moz-document", $input, "url") {
@include example;
}
}
@include expect {
@-moz-document url(about:home), url(about:newtab) {
@include example;
}
}
}
}
@include test("null prefix single") {
@include assert {
@include output {
@include each.AtEach("media", "max-width: 1024px") {
@include example;
}
}
@include expect {
@media (max-width: 1024px) {
@include example;
}
}
}
}
@include test("null prefix multiple") {
@include assert {
@include output {
$input: "hover: hover" "max-width: 1024px";
@include each.AtEach("media", $input) {
@include example;
}
}
@include expect {
@media (hover: hover), (max-width: 1024px) {
@include example;
}
}
}
}
@include test("prefix custom option") {
@include assert {
@include output {
@include each.AtEach("supports", "userChrome.tab.photon", "-moz-bool-pref", ("seperator": " or ", "quoted": true)) {
@include example;
}
}
@include expect {
@supports -moz-bool-pref("userChrome.tab.photon") {
@include example;
}
}
}
}
@include test("prefix custom option multiple") {
@include assert {
@include output {
$input: "userChrome.tab.photon" "userChrome.padding.photon";
@include each.AtEach("supports", $input, "-moz-bool-pref", ("seperator": " or ", "quoted": true)) {
@include example;
}
}
@include expect {
@supports -moz-bool-pref("userChrome.tab.photon") or -moz-bool-pref("userChrome.padding.photon") {
@include example;
}
}
}
}
}

View File

@ -1,14 +0,0 @@
@mixin example_tag() {
body {
@content;
}
}
@mixin example_property() {
font-size: 16px;
}
@mixin example() {
@include example_tag {
@include example_property;
}
}

View File

@ -1,31 +0,0 @@
@use 'true' as *;
@use "../src/utils/list";
// TODO: Need more tests..
$simpleList: (ab cd efgh ijk);
$dupList: (ab cd efgh efgh efgh ijk);
@include test-module("Remove at list [fn]") {
@include test("simple") {
@include assert-equal(
list.remove($simpleList, "cd"),
(ab efgh ijk)
);
}
@include test("duplicate") {
@include assert-equal(
list.remove($dupList, "efgh"),
(ab cd ijk)
);
}
}
@include test-module("Convert to str [fn]") {
@include test("simple") {
@include assert-equal(
list.to-string($simpleList),
(((null ab) cd) efgh) ijk
);
}
}

View File

@ -1,72 +0,0 @@
@use 'true' as *;
@use "example" as *;
@use "../src/utils/media";
// TODO: Need more tests..
@include test-module("Create each media at once [mix]") {
@include test("simple") {
@include assert {
@include output {
$input: "hover: hover" "max-width: 1024px";
@include media.each($input...) {
@include example;
}
}
@include expect {
@media (hover: hover), (max-width: 1024px) {
@include example;
}
}
}
}
@include test("beyond") {
@include assert {
@include output {
$input: "hover: hover" "max-width: 1024px";
@include example_tag {
@include media.each($input...) {
font-size: 16px;
}
}
}
@include expect {
@media (hover: hover), (max-width: 1024px) {
@include example_tag {
@include example_property;
}
}
}
}
}
@include test("null") {
@include assert {
@include output {
$input: ();
@include example_tag {
@include media.each($input) {
@include example_property;
}
}
}
@include expect {
}
}
}
@include test("null element") {
@include assert {
@include output {
$input: (null);
@include example_tag {
@include media.each($input) {
@include example_property;
}
}
}
@include expect {
}
}
}
}

View File

@ -1,20 +0,0 @@
@use 'true' as *;
@use "example" as *;
@use "../src/utils/native_menu";
@include test-module("Native Menu Option [mix]") {
@include test("simple") {
@include assert {
@include output {
@include native_menu.NativeMenu {
@include example;
}
}
@include expect {
@supports -moz-bool-pref("widget.macos.native-context-menus") or -moz-bool-pref("widget.gtk.native-context-menus") {
@include example;
}
}
}
}
}

View File

@ -1,118 +0,0 @@
@use 'true' as *;
@use "example" as *;
@use "../src/utils/one_liner";
@include test-module("One Liner [mix]") {
@include test("content") {
@include assert {
@include output {
@include one_liner.OneLinerContent {
@include example;
}
}
@include expect {
@supports not -moz-bool-pref("userChrome.tabbar.one_liner.responsive") {
@include example;
}
@supports -moz-bool-pref("userChrome.tabbar.one_liner.responsive") {
@media screen and (min-width: 1100px) {
@include example;
}
}
}
}
}
@include test("explicitly") {
@include assert {
@include output {
@include one_liner.OneLiner {
@include example;
}
}
@include expect {
@supports -moz-bool-pref("userChrome.tabbar.one_liner") {
@supports not -moz-bool-pref("userChrome.tabbar.one_liner.responsive") {
@include example;
}
@supports -moz-bool-pref("userChrome.tabbar.one_liner.responsive") {
@media screen and (min-width: 1100px) {
@include example;
}
}
}
}
}
}
}
@include test-module("One Liner for Responsive [mix]") {
@include test("Tabs on bottom") {
@include assert {
@include output {
@include one_liner.OneLinerOnBottom {
@include example;
}
}
@include expect {
@supports not -moz-bool-pref("userChrome.tabbar.one_liner") {
@include example;
}
@supports -moz-bool-pref("userChrome.tabbar.one_liner") {
@supports -moz-bool-pref("userChrome.tabbar.one_liner.responsive") {
@media screen and (max-width: 1100px) {
@include example;
}
}
}
}
}
}
@include test("Tab bar") {
@include assert {
@include output {
@include one_liner.OneLinerTabbar {
@include example;
}
}
@include expect {
@supports not -moz-bool-pref("userChrome.tabbar.one_liner.responsive") {
@include example;
}
@supports -moz-bool-pref("userChrome.tabbar.one_liner.responsive") {
@media screen and (min-width: 1100px) {
@include example;
}
@supports -moz-bool-pref("userChrome.autohide.tabbar") {
@include example;
}
}
}
}
}
@include test("Nav Bar") {
@include assert {
@include output {
@include one_liner.OneLinerNavbar {
@include example;
}
}
@include expect {
@supports -moz-bool-pref("userChrome.autohide.navbar") {
@supports not -moz-bool-pref("userChrome.tabbar.one_liner") {
@include example;
}
@supports -moz-bool-pref("userChrome.tabbar.one_liner") {
@supports -moz-bool-pref("userChrome.tabbar.one_liner.responsive") {
@media screen and (max-width: 1100px) {
@include example;
}
}
}
}
}
}
}
}

View File

@ -1,54 +0,0 @@
@use 'true' as *;
@use "example" as *;
@use "../src/utils/option";
@include test-module("If exist pref [mix]") {
@include test("simple") {
@include assert {
@include output {
@include option.Option("userChrome.tab.photon") {
@include example;
}
}
@include expect {
@supports -moz-bool-pref("userChrome.tab.photon") {
@include example;
}
}
}
}
@include test("multiple") {
@include assert {
@include output {
@include option.Option("userChrome.tab.photon", "userChrome.padding.photon") {
@include example;
}
}
@include expect {
@supports -moz-bool-pref("userChrome.tab.photon") or -moz-bool-pref("userChrome.padding.photon") {
@include example;
}
}
}
}
}
@include test-module("If not exist pref [mx]") {
@include test("simple") {
@include assert {
@include output {
@include option.NotOption("userChrome.tab.photon") {
@include example;
}
}
@include expect {
@supports not -moz-bool-pref("userChrome.tab.photon") {
@include example;
}
}
}
}
// Need multiple test
}

View File

@ -1,147 +0,0 @@
@use 'true' as *;
@use "example" as *;
@use "../src/utils/os" as *;
// TODO: Need more tests..
@include test-module("Create OS related media [mix]") {
@include test("win7") {
@include assert {
@include output {
@include OS($win7) {
@include example;
}
}
@include expect {
@media (-moz-os-version: windows-win7), (-moz-platform: windows-win7) {
@include example;
}
}
}
}
@include test("win8") {
@include assert {
@include output {
@include OS($win8) {
@include example;
}
}
@include expect {
@media (-moz-os-version: windows-win8), (-moz-platform: windows-win8) {
@include example;
}
}
}
}
@include test("win10") {
@include assert {
@include output {
@include OS($win10) {
@include example;
}
}
@include expect {
@media (-moz-os-version: windows-win10), (-moz-platform: windows-win10) {
@include example;
}
}
}
}
@include test("linux") {
@include assert {
@include output {
@include OS($linux) {
@include example;
}
}
@include expect {
@media (-moz-gtk-csd-available) {
@include example;
}
}
}
}
@include test("mac") {
@include assert {
@include output {
@include OS($mac) {
@include example;
}
}
@include expect {
@supports -moz-bool-pref("layout.css.osx-font-smoothing.enabled") {
@include example;
}
}
}
}
@include test("bigsur") {
@include assert {
@include output {
@include OS($bigsur) {
@include example;
}
}
@include expect {
@media (-moz-mac-big-sur-theme: 0) {
@include example;
}
}
}
}
@include test("win") {
@include assert {
@include output {
@include OS($win) {
@include example;
}
}
@include expect {
@media (-moz-os-version: windows-win7), (-moz-platform: windows-win7), (-moz-os-version: windows-win8), (-moz-platform: windows-win8), (-moz-os-version: windows-win10), (-moz-platform: windows-win10) {
@include example;
}
}
}
}
@include test("all os - win7, win8, win10, mac, bigsur, linux") {
@include assert {
@include output {
@include OS($win7, $win8, $win10, $mac, $bigsur, $linux) {
@include example;
}
}
@include expect {
@media (-moz-os-version: windows-win7), (-moz-platform: windows-win7), (-moz-os-version: windows-win8), (-moz-platform: windows-win8), (-moz-os-version: windows-win10), (-moz-platform: windows-win10), (-moz-mac-big-sur-theme: 0), (-moz-gtk-csd-available) {
@include example;
}
@supports -moz-bool-pref("layout.css.osx-font-smoothing.enabled") {
@include example;
}
}
}
}
@include test("all os - win, mac, bigsur, linux") {
@include assert {
@include output {
@include OS($win, $mac, $bigsur, $linux) {
@include example;
}
}
@include expect {
@media (-moz-mac-big-sur-theme: 0), (-moz-gtk-csd-available), (-moz-os-version: windows-win7), (-moz-platform: windows-win7), (-moz-os-version: windows-win8), (-moz-platform: windows-win8), (-moz-os-version: windows-win10), (-moz-platform: windows-win10) {
@include example;
}
@supports -moz-bool-pref("layout.css.osx-font-smoothing.enabled") {
@include example;
}
}
}
}
}

View File

@ -1,14 +0,0 @@
const path = require("path");
const sassTrue = require("sass-true");
const glob = require("fast-glob");
// https://www.educative.io/blog/sass-tutorial-unit-testing-with-sass-true
// Find all of the Sass files that end in `*.test.scss` in any directory of this project.
// I use path.resolve because True requires absolute paths to compile test files.
const pattern = path.resolve(process.cwd(), "__tests__/**/*.test.scss");
const sassTestFiles = glob.sync([pattern]);
// Run True on every file found with the describe and it methods provided
sassTestFiles.forEach(file => {
describe(file, () => sassTrue.runSass({ file }, { describe, it }));
});

View File

@ -1,192 +0,0 @@
@use 'true' as *;
@use "example" as *;
@use "sass:selector";
@use "../src/utils/theme";
@include test-module("System Default Theme Selector [fn]") {
@include test("simple") {
@include assert {
@include output {
#{theme.system-default-theme()} {
@include example_property;
}
}
@include expect {
:root:not(:-moz-lwtheme), :root[lwt-default-theme-in-dark-mode] {
@include example_property;
}
}
}
}
@include test("append selector") {
@include assert {
@include output {
#{selector.append(theme.system-default-theme(), "[inFullscreen=true]")} {
@include example_property;
}
}
@include expect {
:root:not(:-moz-lwtheme)[inFullscreen=true], :root[lwt-default-theme-in-dark-mode][inFullscreen=true] {
@include example_property;
}
}
}
}
@include test("nested selector") {
@include assert {
@include output {
#{selector.nest(theme.system-default-theme(), "#navigator-toolbox")} {
@include example_property;
}
}
@include expect {
:root:not(:-moz-lwtheme) #navigator-toolbox, :root[lwt-default-theme-in-dark-mode] #navigator-toolbox {
@include example_property;
}
}
}
}
}
@include test-module("Built-In Default Theme Selector [fn]") {
@include test("simple") {
@include assert {
@include output {
#{theme.built-in-default-theme()} {
@include example_property;
}
}
@include expect {
:root[lwtheme-mozlightdark], :root:is([style*="--lwt-accent-color: rgb(240, 240, 244); --lwt-text-color: rgba(21, 20, 26);"], [style*="--lwt-accent-color: rgb(28, 27, 34); --lwt-text-color: rgba(251, 251, 254);"]) {
@include example_property;
}
}
}
}
@include test("append selector") {
@include assert {
@include output {
#{selector.append(theme.built-in-default-theme(), "[inFullscreen=true]")} {
@include example_property;
}
}
@include expect {
:root[lwtheme-mozlightdark][inFullscreen=true], :root:is([style*="--lwt-accent-color: rgb(240, 240, 244); --lwt-text-color: rgba(21, 20, 26);"], [style*="--lwt-accent-color: rgb(28, 27, 34); --lwt-text-color: rgba(251, 251, 254);"])[inFullscreen=true] {
@include example_property;
}
}
}
}
@include test("nested selector") {
@include assert {
@include output {
#{selector.nest(theme.built-in-default-theme(), "#navigator-toolbox")} {
@include example_property;
}
}
@include expect {
:root[lwtheme-mozlightdark] #navigator-toolbox, :root:is([style*="--lwt-accent-color: rgb(240, 240, 244); --lwt-text-color: rgba(21, 20, 26);"], [style*="--lwt-accent-color: rgb(28, 27, 34); --lwt-text-color: rgba(251, 251, 254);"]) #navigator-toolbox {
@include example_property;
}
}
}
}
}
@include test-module("Built-In Light Theme Selector [fn]") {
@include test("simple") {
@include assert {
@include output {
#{theme.built-in-light-theme()} {
@include example_property;
}
}
@include expect {
:root[lwtheme-mozlightdark]:not([lwthemetextcolor=bright]), :root[style*="--lwt-accent-color: rgb(240, 240, 244); --lwt-text-color: rgba(21, 20, 26);"] {
@include example_property;
}
}
}
}
@include test("append selector") {
@include assert {
@include output {
#{selector.append(theme.built-in-light-theme(), "[inFullscreen=true]")} {
@include example_property;
}
}
@include expect {
:root[lwtheme-mozlightdark]:not([lwthemetextcolor=bright])[inFullscreen=true], :root[style*="--lwt-accent-color: rgb(240, 240, 244); --lwt-text-color: rgba(21, 20, 26);"][inFullscreen=true] {
@include example_property;
}
}
}
}
@include test("nested selector") {
@include assert {
@include output {
#{selector.nest(theme.built-in-light-theme(), "#navigator-toolbox")} {
@include example_property;
}
}
@include expect {
:root[lwtheme-mozlightdark]:not([lwthemetextcolor=bright]) #navigator-toolbox, :root[style*="--lwt-accent-color: rgb(240, 240, 244); --lwt-text-color: rgba(21, 20, 26);"] #navigator-toolbox {
@include example_property;
}
}
}
}
}
@include test-module("Built-In Dark Theme Selector [fn]") {
@include test("simple") {
@include assert {
@include output {
#{theme.built-in-dark-theme()} {
@include example_property;
}
}
@include expect {
:root[lwtheme-mozlightdark][lwthemetextcolor=bright], :root[style*="--lwt-accent-color: rgb(28, 27, 34); --lwt-text-color: rgba(251, 251, 254);"] {
@include example_property;
}
}
}
}
@include test("append selector") {
@include assert {
@include output {
#{selector.append(theme.built-in-dark-theme(), "[inFullscreen=true]")} {
@include example_property;
}
}
@include expect {
:root[lwtheme-mozlightdark][lwthemetextcolor=bright][inFullscreen=true], :root[style*="--lwt-accent-color: rgb(28, 27, 34); --lwt-text-color: rgba(251, 251, 254);"][inFullscreen=true] {
@include example_property;
}
}
}
}
@include test("nested selector") {
@include assert {
@include output {
#{selector.nest(theme.built-in-dark-theme(), "#navigator-toolbox")} {
@include example_property;
}
}
@include expect {
:root[lwtheme-mozlightdark][lwthemetextcolor=bright] #navigator-toolbox, :root[style*="--lwt-accent-color: rgb(28, 27, 34); --lwt-text-color: rgba(251, 251, 254);"] #navigator-toolbox {
@include example_property;
}
}
}
}
}

View File

@ -55,6 +55,9 @@
menu.subviewbutton {
padding-inline-end: 0 !important;
}
#allTabsMenu-allTabsView .subviewbutton.subviewbutton-nav:not([shortcut]) {
padding-inline-end: var(--arrowpanel-menuitem-padding-inline) !important;
}
/*= Icon Fill Color ==========================================================*/
:root:-moz-lwtheme {
/* Auto create --lwt-toolbarbutton-icon-fill-attention, fix for nightly default theme
@ -3174,11 +3177,6 @@
--tab-border-radius: var(--toolbarbutton-border-radius);
}
}
@supports -moz-bool-pref("userChrome.rounding.square_dialog") {
.dialogBox {
border-radius: 0 !important;
}
}
@supports -moz-bool-pref("userChrome.rounding.square_panel") {
:root {
--arrowpanel-border-radius: 0 !important;
@ -3204,6 +3202,11 @@
border-radius: 0 !important;
}
}
@supports -moz-bool-pref("userChrome.rounding.square_infobox") {
#sanitizeEverythingWarningBox {
border-radius: 0 !important;
}
}
@supports -moz-bool-pref("userChrome.rounding.square_toolbar") {
:root {
--uc-rounding-toolbar: 0;
@ -3245,6 +3248,12 @@
border-radius: 0 !important;
}
}
@supports -moz-bool-pref("userChrome.rounding.square_dialog") {
dialog,
.dialogBox {
border-radius: 0 !important;
}
}
/*= Library ==============================================================*/
@supports -moz-bool-pref("userChrome.rounding.square_button") {
#placesToolbar > toolbarbutton,
@ -3360,6 +3369,10 @@
--newtab-button-minus-width-padding: 2px;
--newtab-button-width-padding: calc(var(--toolbarbutton-inner-padding) - var(--newtab-button-minus-width-padding));
}
#widget-overflow-mainView #new-tab-button,
#widget-overflow-mainView #alltabs-button {
--newtab-button-width-padding: 0px;
}
#new-tab-button > .toolbarbutton-icon,
#alltabs-button > .toolbarbutton-badge-stack {
/* Original: calc(2 * var(--toolbarbutton-inner-padding) + 16px) */
@ -3371,14 +3384,14 @@
@supports not -moz-bool-pref("userChrome.tab.photon_like_padding") {
#tabbrowser-tabs[haspinnedtabs]:not([positionpinnedtabs])
> #tabbrowser-arrowscrollbox
> .tabbrowser-tab[first-visible-unpinned-tab] {
> .tabbrowser-tab:is([first-visible-unpinned-tab], :nth-child(1 of :not([pinned], [hidden]))) {
margin-inline-start: 1px !important;
}
}
@supports -moz-bool-pref("userChrome.tab.photon_like_padding") {
#tabbrowser-tabs[haspinnedtabs]:not([positionpinnedtabs])
> #tabbrowser-arrowscrollbox
> .tabbrowser-tab[first-visible-unpinned-tab] {
> .tabbrowser-tab:is([first-visible-unpinned-tab], :nth-child(1 of :not([pinned], [hidden]))) {
margin-inline-start: 0 !important;
}
}
@ -3427,15 +3440,23 @@
max-width: var(--tab-max-width) !important; /* Original: 225px */
}
/* neighbouring tabs should "pinch" together */
#tabbrowser-tabs:not([hasadjacentnewtabbutton]):not([overflow="true"])
> #tabbrowser-arrowscrollbox
> #tabbrowser-arrowscrollbox-periphery {
min-width: 3px;
}
@supports not -moz-bool-pref("userChrome.tab.photon_like_padding") {
@supports -moz-bool-pref("userChrome.tab.lepton_like_padding") {
.tabbrowser-tab {
.tabbrowser-tab[pinned] {
padding-inline: 1px !important;
}
.tabbrowser-tab:not([pinned]) {
margin-inline: -1px !important;
}
}
@supports not -moz-bool-pref("userChrome.tabbar.multi_row") {
#TabsToolbar:not([multibar]) .tabbrowser-tab:not(:last-of-type) {
margin-inline-end: -1px !important;
margin-inline-end: -2px !important;
}
}
}
@ -3772,14 +3793,25 @@
--menu-padding: 0px;
}
}
menupopup:not(.in-menulist) > menuitem,
menupopup > menuitem,
menupopup > menu {
/* Original: 0.5em */
padding-block: var(--menu-padding) !important;
}
#ContentSelectDropdown > menupopup > menucaption,
#ContentSelectDropdown > menupopup > menuitem {
padding-block: 0 !important;
@media (-moz-os-version: windows-win7),
(-moz-platform: windows-win7),
(-moz-os-version: windows-win8),
(-moz-platform: windows-win8),
(-moz-os-version: windows-win10),
(-moz-platform: windows-win10) {
#ContentSelectDropdown > menupopup > menucaption,
#ContentSelectDropdown > menupopup > menuitem {
padding-block: 0 !important;
}
#ContentSelectDropdown > menupopup > menucaption > .menu-iconic-text,
#ContentSelectDropdown > menupopup > menuitem > .menu-iconic-text {
padding-block: var(--menu-padding) !important;
}
}
@media (-moz-gtk-csd-available) {
#ContentSelectDropdown > menupopup > menucaption,
@ -3787,6 +3819,12 @@
padding-block: var(--menu-padding) !important;
}
}
@supports -moz-bool-pref("layout.css.osx-font-smoothing.enabled") {
#ContentSelectDropdown > menupopup > menucaption,
#ContentSelectDropdown > menupopup > menuitem {
padding-block: var(--menu-padding) !important;
}
}
@supports -moz-bool-pref("layout.css.osx-font-smoothing.enabled") {
:root:not([uidensity="touch"]) .menu-text,
:root:not([uidensity="touch"]) .menu-iconic-text {
@ -3927,6 +3965,9 @@
.unified-extensions-item-menu-button.subviewbutton {
padding: 8px !important; /* Original: var(--arrowpanel-menuitem-padding-inline) */
}
:root[uidensity="compact"] :is(.unified-extensions-item, .unified-extensions-item-action-button) {
padding-block: 0 !important;
}
}
@supports -moz-bool-pref("userChrome.padding.panel_header") {
.panel-header {
@ -6085,8 +6126,12 @@
/** Tab UI ********************************************************************/
/*= Tab - Connect to window ==============================================*/
@supports -moz-bool-pref("userChrome.tab.connect_to_window") {
#tabbrowser-tabs[orient="vertical"] {
--uc-tab-border-bottom-radius: var(--tab-border-radius);
}
.tab-background {
border-radius: var(--tab-border-radius) var(--tab-border-radius) 0px 0px !important;
border-radius: var(--tab-border-radius) var(--tab-border-radius) var(--uc-tab-border-bottom-radius, 0px)
var(--uc-tab-border-bottom-radius, 0px) !important;
margin-bottom: 0px !important;
}
.tab-content {
@ -6570,7 +6615,8 @@
}
#tabbrowser-tabs[positionpinnedtabs],
#tabbrowser-tabs:not([overflow]) .tabbrowser-tab:first-of-type,
#tabbrowser-tabs[overflow] .tabbrowser-tab[first-visible-unpinned-tab] {
#tabbrowser-tabs[overflow]
.tabbrowser-tab:is([first-visible-unpinned-tab], :nth-child(1 of :not([pinned], [hidden]))) {
margin-left: var(--uc-tab-corner-half-size) !important;
}
.tabbrowser-tab:last-of-type {
@ -6773,11 +6819,13 @@
}
}
#navigator-toolbox:not([movingtab])
.tabbrowser-tab[first-visible-unpinned-tab]:is([visuallyselected], [multiselected], :hover)
.tabbrowser-tab:is([first-visible-unpinned-tab], :nth-child(1
of
:not([pinned], [hidden]))):is([visuallyselected], [multiselected], :hover)
.tab-stack::before,
#navigator-toolbox:not([movingtab])
#tabbrowser-arrowscrollbox[overflowing]
tab.tabbrowser-tab[first-visible-unpinned-tab]
tab.tabbrowser-tab:is([first-visible-unpinned-tab], :nth-child(1 of :not([pinned], [hidden])))
.tab-stack::before {
opacity: 0 !important;
}
@ -10192,6 +10240,9 @@
#appMenu-find-button2 {
list-style-image: url("chrome://global/skin/icons/search-glass.svg");
}
#appMenu-translate-button {
list-style-image: url(chrome://browser/skin/translations.svg);
}
#appMenu-zoom-controls2::before,
#appMenu-zoom-controls::before {
content: url("../icons/screenshot.svg");
@ -10430,6 +10481,9 @@
#appMenu_menu_HelpPopup_reportPhishingtoolmenu {
list-style-image: url("chrome://global/skin/icons/warning.svg");
}
#appMenu_helpSwitchDevice {
list-style-image: url("../icons/add-device.svg");
}
#appMenu_aboutName {
list-style-image: url("chrome://global/skin/icons/info.svg");
}
@ -10569,6 +10623,8 @@
@supports -moz-bool-pref("userChrome.icon.menu") {
menupopup menuitem:not([type="checkbox"][checked="true"], [type="radio"]),
menupopup menu:not([type="checkbox"][checked="true"], [type="radio"]),
menupopup menuitem:not([type="checkbox"][checked="true"], [type="radio"]) > .menu-iconic-left > .menu-iconic-icon,
menupopup menu:not([type="checkbox"][checked="true"], [type="radio"]) > .menu-iconic-left > .menu-iconic-icon,
#main-menubar > menu {
-moz-appearance: none !important; /* Linux: menulist */
}
@ -10587,7 +10643,8 @@
menupopup:is(#organizeButtonPopup, #maintenanceButtonPopup)
> menuitem:not(.menuitem-iconic, .bookmark-item, .in-menulist, [checked="true"]),
menupopup:is(#viewMenuPopup, #maintenanceButtonPopup) > menu:not(.menu-iconic, .in-menulist, [checked="true"]),
menupopup:is(#context_sendTabToDevicePopupMenu, #context-sendpagetodevice-popup, #context-sendlinktodevice-popup)
menupopup:is(#context_sendTabToDevicePopupMenu, #context-sendpagetodevice-popup, #context-sendlinktodevice-popup, #frame
> menupopup)
> menuitem,
.openintabs-menuitem,
#blockedPopupDontShowMessage,
@ -10643,7 +10700,8 @@
menupopup:is(#organizeButtonPopup, #maintenanceButtonPopup)
> menuitem:not(.menuitem-iconic, .bookmark-item, .in-menulist, [checked="true"]),
menupopup:is(#viewMenuPopup, #maintenanceButtonPopup) > menu:not(.menu-iconic, .in-menulist, [checked="true"]),
menupopup:is(#context_sendTabToDevicePopupMenu, #context-sendpagetodevice-popup, #context-sendlinktodevice-popup)
menupopup:is(#context_sendTabToDevicePopupMenu, #context-sendpagetodevice-popup, #context-sendlinktodevice-popup, #frame
> menupopup)
> menuitem,
.openintabs-menuitem,
#blockedPopupDontShowMessage,
@ -10797,7 +10855,8 @@
menupopup:is(#organizeButtonPopup, #maintenanceButtonPopup)
> menuitem:not(.menuitem-iconic, .bookmark-item, .in-menulist, [checked="true"]),
menupopup:is(#viewMenuPopup, #maintenanceButtonPopup) > menu:not(.menu-iconic, .in-menulist, [checked="true"]),
menupopup:is(#context_sendTabToDevicePopupMenu, #context-sendpagetodevice-popup, #context-sendlinktodevice-popup)
menupopup:is(#context_sendTabToDevicePopupMenu, #context-sendpagetodevice-popup, #context-sendlinktodevice-popup, #frame
> menupopup)
> menuitem,
.openintabs-menuitem,
#blockedPopupDontShowMessage,
@ -10821,7 +10880,8 @@
menupopup:is(#organizeButtonPopup, #maintenanceButtonPopup)
> menuitem:not(.menuitem-iconic, .bookmark-item, .in-menulist, [checked="true"]),
menupopup:is(#viewMenuPopup, #maintenanceButtonPopup) > menu:not(.menu-iconic, .in-menulist, [checked="true"]),
menupopup:is(#context_sendTabToDevicePopupMenu, #context-sendpagetodevice-popup, #context-sendlinktodevice-popup)
menupopup:is(#context_sendTabToDevicePopupMenu, #context-sendpagetodevice-popup, #context-sendlinktodevice-popup, #frame
> menupopup)
> menuitem,
.openintabs-menuitem,
#blockedPopupDontShowMessage,
@ -11474,6 +11534,37 @@
--menuitem-image: url("chrome://browser/skin/bookmark.svg");
}
}
/*= main-context-menu-frame ==================================================*/
#context-showonlythisframe {
--menuitem-image: url("../icons/eye-show.svg");
}
#context-openframeintab {
--menuitem-image: url("chrome://browser/skin/new-tab.svg");
}
#context-openframe {
--menuitem-image: url("chrome://browser/skin/window.svg");
}
#context-reloadframe {
--menuitem-image: url("../icons/reload.svg");
}
#context-bookmarkframe {
--menuitem-image: url("chrome://browser/skin/bookmark.svg");
}
#context-saveframe {
--menuitem-image: url("../icons/toolbarButton-download.svg");
}
#context-printframe {
--menuitem-image: url("chrome://global/skin/icons/print.svg");
}
#context-take-frame-screenshot {
--menuitem-image: url("chrome://browser/skin/screenshot.svg");
}
#context-viewframesource {
--menuitem-image: url("../icons/document-search.svg");
}
#context-viewframeinfo {
--menuitem-image: url("chrome://global/skin/icons/info.svg");
}
/*= Tab Mix Plus =============================================================*/
#tm-autoreload_menu {
--menuitem-image: url("../icons/timer10.svg");
@ -12141,6 +12232,12 @@
#menu_HelpPopup_reportPhishingtoolmenu {
--menuitem-image: url("chrome://global/skin/icons/warning.svg");
}
#menu_HelpPopup_reportPhishingErrortoolmenu {
--menuitem-image: url("../icons/checkmark-circle.svg");
}
#helpSwitchDevice {
--menuitem-image: url("../icons/add-device.svg");
}
#aboutName {
--menuitem-image: url("chrome://global/skin/icons/info.svg");
}
@ -12204,7 +12301,8 @@
}
}
}
/** Waterfox ******************************************************************/
/** Icons for fork browsers ***************************************************/
/*= Waterfox =================================================================*/
@supports -moz-bool-pref("userChrome.icon.panel") {
#appMenu-restart-button {
list-style-image: url("../icons/refresh-cw.svg") !important;
@ -12221,7 +12319,7 @@
--menuitem-image: url("../icons/private-favicon.svg");
}
}
/** Tor Browser ***************************************************************/
/*= Tor Browser ==============================================================*/
@supports -moz-bool-pref("userChrome.icon.panel") {
#appMenuNewIdentity {
list-style-image: url("chrome://browser/skin/new_identity.svg");
@ -12244,4 +12342,35 @@
--menuitem-image: url("chrome://browser/skin/onion.svg");
}
}
/*= Floorp Browser ===========================================================*/
@supports -moz-bool-pref("userChrome.icon.panel") {
#rebootappmenu {
list-style-image: url("../icons/refresh-cw.svg");
}
#openprofiledir {
list-style-image: url("../icons//folder.svg");
}
}
@supports -moz-bool-pref("userChrome.icon.menu") {
#usercssloader-menu {
--menuitem-image: url("../icons/developer.svg");
}
#toggle_statusBar {
--menuitem-image: url("../icons/pulse-square.svg");
}
#muteMenu {
--menuitem-image: url("chrome://browser/skin/tabbrowser/tab-audio-muted-small.svg");
stroke: transparent !important;
}
#unloadWebpanelMenu {
--menuitem-image: url("../icons/tab-unload.svg");
}
#changeUAWebpanelMenu {
--menuitem-image: url("chrome://devtools/skin/images/command-responsivemode.svg");
fill-opacity: 0;
}
#deleteWebpanelMenu {
--menuitem-image: url("chrome://global/skin/icons/delete.svg");
}
}
}

View File

@ -1,5 +1,37 @@
@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
@namespace html url("http://www.w3.org/1999/xhtml");
/** Compatibility *************************************************************/
@-moz-document url-prefix("about:preferences") {
.content-blocking-warning.info-box-container > hbox > .content-blocking-warning-image {
margin-inline-start: -7px !important;
margin-inline-end: 8px !important;
width: 20px !important;
}
#pane-experimental-search-results-header,
#pane-experimental-subtitle {
min-height: 27px !important;
padding-inline-start: 35px !important;
}
#firefoxExperimentalCategory:not([hidden="true"]) {
display: inline-block;
}
#firefoxExperimentalCategory > label {
float: left;
}
#firefoxExperimentalCategory > hbox {
transform: translateY(5px);
}
#pane-experimental-featureGates > html|p[data-l10n-id="pane-experimental-description2"] {
border-bottom: 1px solid var(--in-content-border-color);
padding-bottom: 1.5em;
}
}
@-moz-document url-prefix("about:addons") {
#updates-message + .page-options-menu > .more-options-button {
box-sizing: content-box;
padding: 0 !important;
}
}
/** Video player **************************************************************/
/* Control Bar Size */
@supports -moz-bool-pref("userContent.player.size") {
@ -2834,21 +2866,11 @@
}
}
@supports -moz-bool-pref("userChrome.rounding.square_dialog") {
@-moz-document url-prefix("about:") {
.dialogBox {
border-radius: 0 !important;
}
}
@-moz-document url("about:home"), url("about:newtab") {
.modal {
border-radius: 0 !important;
}
}
@-moz-document regexp(".*.pdf$") {
dialog {
border-radius: 0 !important;
}
}
}
@supports -moz-bool-pref("userChrome.rounding.square_checklabel") {
@-moz-document url-prefix("about:"), regexp("^chrome://\\w+/content/.*.xhtml$")
@ -2872,7 +2894,8 @@
richlistbox,
search-textbox,
.web-appearance-choice,
.content-blocking-category {
.content-blocking-category,
#translations-manage-install-list {
border-radius: 0 !important;
}
}
@ -2897,6 +2920,7 @@
@supports -moz-bool-pref("userChrome.rounding.square_menupopup") {
@-moz-document url-prefix("about:"), url-prefix("chrome://")
{
panel,
menupopup {
--panel-border-radius: 0 !important;
}
@ -2944,6 +2968,23 @@
border-radius: 0 !important;
}
}
@-moz-document url-prefix("about:firefoxview") {
.card,
.card::before,
.empty-container,
.synced-tab-a,
.synced-tab-li-placeholder {
border-radius: 0 !important;
}
}
}
@-moz-document url-prefix("about:"), regexp(".*.pdf$") {
@supports -moz-bool-pref("userChrome.rounding.square_dialog") {
dialog,
.dialogBox {
border-radius: 0 !important;
}
}
}
@-moz-document url("chrome://browser/content/places/places.xhtml")
{
@ -2979,7 +3020,9 @@
@-moz-document url("chrome://browser/content/places/places.xhtml"), url("about:downloads")
{
menupopup menuitem:not([type="checkbox"][checked="true"], [type="radio"]),
menupopup menu:not([type="checkbox"][checked="true"], [type="radio"]) {
menupopup menu:not([type="checkbox"][checked="true"], [type="radio"]),
menupopup menuitem:not([type="checkbox"][checked="true"], [type="radio"]) > .menu-iconic-left > .menu-iconic-icon,
menupopup menu:not([type="checkbox"][checked="true"], [type="radio"]) > .menu-iconic-left > .menu-iconic-icon {
-moz-appearance: none !important; /* Linux: menulist */
}
menupopup:is(#placesContext, #placesColumnsContext, #downloadsContextMenu)

View File

@ -1,40 +0,0 @@
# Omni.ja
<!-- markdown-toc start - Don't edit this section. Run M-x markdown-toc-refresh-toc -->
**Table of Contents**
- [Basics](#basics)
- [Related Project](#related-project)
- [Related Source file](#related-source-file)
<!-- markdown-toc end -->
## Basics
**Related Docs**
- [UDN: omni.ja (formerly omni.jar)](https://udn.realityripple.com/docs/Mozilla/About_omni.ja_(formerly_omni.jar))
- [Firefox 4: jar jar jar](https://web.archive.org/web/20161003115800/https://blog.mozilla.org/tglek/2010/09/14/firefox-4-jar-jar-jar/)
- [Firefox's Optimized Zip Format: Reading Zip Files Really Quickly](https://taras.glek.net/post/optimized-zip-format/)
- [How to Optimize or Deoptimize Firefox OMNI.JA File](https://www.raymond.cc/blog/edit-files-inside-firefox-4-omni-jar-to-auto-save-password/)
**Explanation**
Firefox achieve performance improvements by moving many of their internal parts from being standalone files or sets of JAR files into just one JAR file called `omni.ja`.
This reduces the amount of I/O needed to load the application.
Chrome content, modules, non-binary components, and many other elements are packaged in an omni.jar file for each base directory.
- `actors/`: [JSActors](https://firefox-source-docs.mozilla.org/dom/ipc/jsactors.html) related files.
- `chrome.manifest`: The [chrome manifest](https://udn.realityripple.com/docs/Mozilla/Chrome_Registration) file.
- `chrome/`: User interface files for the application
- `components/`: XPCOM components the application relies upon.
- `defaults/`: Default preference files.
- `modules/`: [JavaScript code modules](https://udn.realityripple.com/docs/Mozilla/JavaScript_code_modules).
- `res/`: Miscellaneous resource files.
## Related Project
- https://github.com/SebastianSimon/firefox-omni-tweaks
## Related Source file
- https://github.com/mozilla/gecko-dev/blob/de91f5ee41251779ff2973d24d195d116cb6ebd7/python/mozbuild/mozpack/packager/formats.py#L258-L359
- https://github.com/humphd/mozilla-central-old/blob/9d4d9f265e24e6358c067ae1e300c1ce3227a91d/config/optimizejars.py

View File

@ -1,246 +0,0 @@
# Preference
<!-- markdown-toc start - Don't edit this section. Run M-x markdown-toc-refresh-toc -->
**Table of Contents**
- [Basics](#basics)
- [Default Config](#default-config)
- [User Config](#user-config)
* [about:config](#aboutconfig)
* [prefs.js](#prefsjs)
* [user.js](#userjs)
- [Auto Config](#auto-config)
- [Using with User Custom CSS](#using-with-user-custom-css)
- [Sync](#sync)
- [Related Source file](#related-source-file)
<!-- markdown-toc end -->
## Basics
**Related Docs**
- [Firefox Source Docs: libpref](https://firefox-source-docs.mozilla.org/modules/libpref/index.html)
**Key/Value**
- Key:
- Pref name
- Type: 8-bit string
- Convention is to use a dotted segmented form (Ex. `browser.cache.disk.enable`)
- Value:
- Type: bool, 32-bit ints, 8-bit C string
- When you need an float, use a string. (Ex. `general.smoothScroll.currentVelocityWeighting`: `"0.25"`)
**Main Purpose**
- Feature enable/disable flags (Ex. `xpinstall.signatures.required`).
- User preferences (Ex. things set from `about:preferences`)
- Internal application parameters (Ex. `javascript.options.mem.nursery.max_kb`).
- Application data (Ex. `browser.onboarding.tour.onboarding-tour-addons.completed`, `services.sync.clients.lastSync`).
- Things that might need locking in an enterprise installation.
**Preference file RFC**
Key information on the sets that can be used in the configuration file.
- `pref()`: Set default pref
- `sticky` attr: same as `sticky_pref()`
- `locked` attr: cannot change from default.
- `sticky_pref()`: Always logged even if the defaults match
- `user_pref()`: Set user pref
The following is a method of operating the configuration file parser.
See [EBNF(Extended Backus-Naur form)](https://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form) if you want to know about syntax.
```ebnf
<pref-file> = <pref>*
<pref> = <pref-spec> "(" <pref-name> "," <pref-value> <pref-attrs> ")" ";"
<pref-spec> = "user_pref" | "pref" | "sticky_pref" // in default pref files
<pref-spec> = "user_pref" // in user pref files
<pref-name> = <string-literal>
<pref-value> = <string-literal> | "true" | "false" | <int-value>
<int-value> = <sign>? <int-literal>
<sign> = "+" | "-"
<int-literal> = [0-9]+ (and cannot be followed by [A-Za-z_])
<string-literal> =
A single or double-quoted string, with the following escape sequences
allowed: \", \', \\, \n, \r, \xNN, \uNNNN, where \xNN gives a raw byte
value that is copied directly into an 8-bit string value, and \uNNNN
gives a UTF-16 code unit that is converted to UTF-8 before being copied
into an 8-bit string value. \x00 and \u0000 are disallowed because they
would cause C++ code handling such strings to misbehave.
<pref-attrs> = ("," <pref-attr>)* // in default pref files
= <empty> // in user pref files
<pref-attr> = "sticky" | "locked" // default pref files only
```
## Default Config
- [`modules/libpref/init/all.js`](https://github.com/mozilla/gecko-dev/blob/master/modules/libpref/init/all.js): all products
- [`browser/app/profile/firefox.js`](https://github.com/mozilla/gecko-dev/blob/master/browser/app/profile/firefox.js): only firefox deskstop
In release builds these are all put into [`omni.ja`](./Omni_ja.md).
## User Config
**Related Docs**
- [mozillaZine: Editing configuration](https://kb.mozillazine.org/Editing_configuration)
- [Support Mozilla: How to fix preferences that won't save](https://support.mozilla.org/en-US/kb/how-to-fix-preferences-wont-save)
- [Support Mozilla: Reset Firefox preferences to troubleshoot and fix problems](https://support.mozilla.org/en-US/kb/reset-preferences-fix-problems)
- [UDN: A brief guide to Mozilla preferences](https://udn.realityripple.com/docs/Mozilla/Preferences/A_brief_guide_to_Mozilla_preferences)
**Restrictions**
It can be defined using only `user_pref()`.
> User pref file syntax is slightly more restrictive than default pref file syntax. In user pref files `user_pref` definitions are allowed but `pref` and `sticky_pref` definitions are not, and attributes (such as `locked`) are not allowed.
**File Path**
`prefs.js`, `user.js` is located in the profile directory.
### about:config
It is written to `prefs.js` in a way that can be set by the GUI.
- [Support Mozilla: Configuration Editor for Firefox](https://support.mozilla.org/en-US/kb/about-config-editor-firefox)
### prefs.js
**Related Docs**
- [mozillaZine: Prefs.js file](https://kb.mozillazine.org/Prefs.js_file)
**Basics**
It exists in the profile directory, and is used to store settings that are changed from *defaults* or when users added *new settings*.
In general, Do NOT edit `prefs.js` directly.
### user.js
**Related Docs**
- [mozillaZine: User.js file](https://kb.mozillazine.org/User.js_file)
**Restrictions**
A `user.js` file can make certain preference settings more or less "permanent" in a specific profile.
Once an entry for a preference setting exists in the `user.js` file, any change you make to that setting in the options and preference dialogs or via `about:config` will be lost when you restart your firefox because the `user.js` entry will override it.
You'll have to first delete or edit the `user.js` file to remove the entries before the preferences can be changed in the application.
**Example**
```javascript
// user.js
user_pref("browser.cache.disk.enable", false); // Bool
user_pref("layout.css.prefers-color-scheme.content-override", 3); // Int
user_pref("general.smoothScroll.currentVelocityWeighting", "0.12"); // String
```
## Auto Config
**Related Docs**
- [Support Mozilla: Customizing Firefox Using AutoConfig](https://support.mozilla.org/en-US/kb/customizing-firefox-using-autoconfig)
- [What is Autoconfig Startup Scripting (AKA userChrome.js)?](https://www.userchrome.org/what-is-userchrome-js.html)
- [UDN: Gecko Chrome](https://udn.realityripple.com/docs/Mozilla/Gecko/Chrome)
- [UDN: JavaScript code modules](https://udn.realityripple.com/docs/Mozilla/JavaScript_code_modules)
- [UDN: Limitations of chrome scripts](https://udn.realityripple.com/docs/Mozilla/Firefox/Multiprocess_Leftovers/Limitations_of_chrome_scripts)
**Basics**
Customizations that cannot be done with add-on and [`User Custom CSS`](./README.md#user-custom-css), such as adding browser UI elements directly or changing default behavior, must use `Auto Config`.
**How to**
```javascript
pref("general.config.filename", "config.js"); // alternative to "firefox.cfg", for using highlight
pref("general.config.obscure_value", 0);
```
**Example**
```javascript
pref("general.config.filename", "config.js"); // alternative to "firefox.cfg", for using highlight
pref("general.config.obscure_value", 0);
```
## Using with User Custom CSS
**Related Docs**
- [MDN: @supports](https://developer.mozilla.org/en-US/docs/Web/CSS/@supports)
- [UDN: `CSS -moz-bool-pref() @supports function`](https://udn.realityripple.com/docs/Mozilla/Gecko/Chrome/CSS/-moz-bool-pref)
**Restrictions**
Please refer to [Doc: Restrictions.md](./Restrictions.md#supports)'s `@support`.
**Example**
Test each case by turning on/off the following settings.
- `userChrome.navBar.red`
- `userChrome.navBar.margin`
```css
/* userChrome.css */
/* 1. If config is true */
@supports -moz-bool-pref("userChrome.navBar.red") {
#nav-bar {
background-color: red !important;
}
}
/* 2. When any one of the config is true */
@supports -moz-bool-pref("userChrome.navBar.red") or -moz-bool-pref("userChrome.navBar.margin") {
#nav-bar {
background-color: red !important;
margin-block: 20px;
}
}
/* 3. Multiple configs must all be satisfied */
@supports -moz-bool-pref("userChrome.navBar.red") and -moz-bool-pref("userChrome.navBar.margin") {
#nav-bar {
background-color: red !important;
margin-block: 20px;
}
}
/* 4. 3's Other version */
@supports -moz-bool-pref("userChrome.navBar.red") {
@supports -moz-bool-pref("userChrome.navBar.margin") {
#nav-bar {
background-color: red !important;
margin-block: 20px;
}
}
}
/* 5. If not exist or false */
@supports not -moz-bool-pref("userChrome.navBar.red") {
#nav-bar {
background-color: blue !important;
}
}
```
## Sync
**Related Docs**
- [Support Mozilla: Sync custom preferences](https://support.mozilla.org/en-US/kb/sync-custom-preferences)
**How to**
Firefox Sync allows you to [choose the types of data](https://support.mozilla.org/en-US/kb/how-do-i-choose-what-information-sync-firefox) to sync across all devices.
![Choose sync data](https://user-images.githubusercontent.com/25581533/162106009-85f8efe6-c310-488b-9940-763b6e7dd271.png)
The following options are required to sync custom configs.
- `services.sync.prefs.dangerously_allow_arbitrary` to `true`
Then, subsequently any pref can be pushed there by creating a remote with prefix.
- `services.sync.prefs.sync.`
**Example**
```javascript
// user.js
user_pref("services.sync.prefs.dangerously_allow_arbitrary", true); // Must need
// Sync UI
user_pref("services.sync.prefs.sync.browser.uiCustomization.state", true);
user_pref("services.sync.prefs.sync.browser.uidensity", true);
```
## Related Source file
- https://github.com/mozilla/gecko-dev/blob/master/modules/libpref/parser/src/lib.rs
- https://github.com/mozilla/gecko-dev/blob/master/extensions/pref/autoconfig/src/prefcalls.js

View File

@ -1,98 +0,0 @@
# Project Structure
<!-- markdown-toc start - Don't edit this section. Run M-x markdown-toc-refresh-toc -->
**Table of Contents**
- [Basics](#basics)
- [Icon files](#icon-files)
- [Install Scripts](#install-scripts)
* [Meta Info files](#meta-info-files)
* [Overriding](#overriding)
<!-- markdown-toc end -->
## Basics
The overall structure of this project.
```
root
|- __tests__/: Mixin spec test
|- icons/: Icons, illustrations
|- css/: Build result of SCSS Files
|- docs/: Development Documents
|- src/: Source files
|- src/leptonChrome.scss: Entry of SCSS for Browser UI
|- src/leptonContent.scss: Entry of SCSS for Web pages
|- .gitattributes: Exclude at `Download Zip`
|- .github: Issue/PR Template, Github Actions
|- .prettierignore: Exclude coding style
|- .prettierrc.json: Coding style
|- install.ps1: Install script write in powersehll
|- install.sh: Install script write in bash
|- package.json: Build setup, package dependency
|- LEPTON: Meta infos (branch, version)
|- user.js: about:config settings
|- userChrome.css: Entry of css for Browser UI (Don't modify directly!!)
|- userContent.css: Entry of css for Web pages (Don't modify directly!!)
|- yarn.lock: Auto generated dependency (Don't modify directly!!)
```
## Icon files
Most of them are made in SVG.
Except for illustrations, there must be an `fill="context-fill" fill-opacity="context-fill-opacity"` property to dynamically determine color and transparency.
Icons are mainly [FirefoxUX/photon-icons](https://github.com/FirefoxUX/photon-icons)
or [microsoft/fluentui-system-icons](https://github.com/microsoft/fluentui-system-icons).
Although not yet used, [tabler/tabler-icons](https://github.com/tabler/tabler-icons) and [feathericons/feather](https://github.com/feathericons/feather) can also be referred to.
You can see more in the issue, [Unify icon design langauge #213](https://github.com/black7375/Firefox-UI-Fix/issues/213).
## Install Scripts
### Meta Info files
It comes from [install.sh](https://github.com/black7375/Firefox-UI-Fix/blob/01ae88bf2c4710e1f364d9eb2901ca2b722cefe7/install.sh#L442).
**`LEPTON` file format**
If this file exist in same directory as the `userChrome.css` file,
it is recognized as the "Lepton" installation directory.
```ini
[Info]
Branch=master | photon-style | proton-style
Ver=<git tag> | <git hash> | [NULL]
```
**`lepton.ini` file Format**
In `lepton.ini`, various information is stored during the installation process.\
This file is recreated every time the installer is created.
```ini
[Profile Name]
Type=Local | Release | Git
Branch=master | photon-style | proton-style
Ver=<git tag> | <git hash> | [NULL]
Path=<Full PATH>
```
**Update Policy according to `Type`**
- Local(unknown): force latest commit update
- Release(<git tag>): force latest tag update
- Git<git hash>: latest commit update
## Overriding
Inspired by [arkenfox](https://github.com/arkenfox/user.js/wiki/3.1-Overrides).
These files need to use a shell script and has some priorities.
CSS override settings(`userChrome-overrides.css`, `userContent-overrides.css`) are relatively simple.
- `./<CSS_OVERRIDES>` (Will be copied `<FIREFOX_PROFILE>/chrome/`)
- `<FIREFOX_PROFILE>/chrome/<CSS_OVERRIDES>`
`user-overrides.js` needs to use a shell script and has some priorities.
- `<FIREFOX_PROFILE>/user-overrides.js`
- `./user-overrides.js` (Will be copied `<FIREFOX_PROFILE>/chrome/`)
- `<FIREFOX_PROFILE>/chrome/user-overrides.js`

View File

@ -1,119 +0,0 @@
# Develper Documents for Firefox Custom
<!-- markdown-toc start - Don't edit this section. Run M-x markdown-toc-refresh-toc -->
**Table of Contents**
- [Basics](#basics)
- [Project-Specific](#project-specific)
* [Environment](#environment)
* [Project Structure](#project-structure)
* [Rules](#rules)
- [Advanced Customizing](#advanced-customizing)
* [Smart Bookmarks](#smart-bookmarks)
* [Policies](#policies)
* [Preference](#preference)
- [User Custom CSS](#user-custom-css)
* [Basics](#basics-1)
* [Restrictions](#restrictions)
<!-- markdown-toc end -->
## Basics
The following documents may be helpful:
- [Roadmap](https://github.com/black7375/Firefox-UI-Fix/issues/2)
- [Each Versions Plan](https://github.com/black7375/Firefox-UI-Fix/milestones)
- [Wiki:Compatibility Issues Solution](https://github.com/black7375/Firefox-UI-Fix/wiki/Compatibility-Issues-Solution)
- [Wiki:Tips](https://github.com/black7375/Firefox-UI-Fix/wiki/Tips)
Firefox Source Code:
- [Github](https://github.com/mozilla/gecko-dev)
- [Searchfox](https://searchfox.org/)
- [Firefox Source Docs](https://firefox-source-docs.mozilla.org/)
Firefox Documents:
- [Support Mozilla: Firefox advanced customization and configuration options](https://support.mozilla.org/en-US/kb/firefox-advanced-customization-and-configuration)
- [Support Mozilla: Profiles - Where Firefox stores your bookmarks, passwords and other user data](https://support.mozilla.org/en-US/kb/profiles-where-firefox-stores-user-data)
Test for None mac users:
- [Docker-OSX](https://github.com/sickcodes/Docker-OSX)
## Project-Specific
### Environment
[`git`](https://git-scm.com/) and [`yarn`](https://yarnpkg.com/) should be installed.
You can configure it as follows:
```shell
## clone repository
git clone https://github.com/black7375/Firefox-UI-Fix.git
cd ./Firefox-UI-Fix
## checkout branch
git checkout <BRANCH_NAME>
## env setup
yarn install
```
You can build with this command:
```shell
yarn build
```
You can check test and css validate:
```shell
## test - When you make mixin or function
# __tests__ direcory, You can also find out how to use internal utils.
yarn test
## validate - Will be failed, this project uses non-standard features.
# Just use only for checking.
yarn validate
```
### Project Structure
- [Doc: Project\_Structure.md](./Project_Structure.md).
### Rules
This is a rough guideline. (Not forced)
- [Doc: Rules.md](./Rules.md).
## Advanced Customizing
### Smart Bookmarks
- [Doc: Smart_Bookmarks.md](./Smart_Bookmarks.md).
### Policies
- [Support Mozilla: Policies overview](https://support.mozilla.org/en-US/products/firefox-enterprise/policies-customization-enterprise/policies-overview-enterprise)
- [Policy Templates](https://github.com/mozilla/policy-templates)
### Preference
- [Doc: Preference.md](./Preference.md).
## User Custom CSS
### Basics
`userChrome.css` file is for browser UI, `userContent.css` file is for web contents.
Unlike [User config](./Preference.md#user-config), they are located in `<FIREFPX_PROFILE>/chrome/`.
Start Guide:
- [What is userChrome.css? What can it do?](https://www.userchrome.org/what-is-userchrome-css.html)
- [How to Create a userChrome.css File](https://www.userchrome.org/how-create-userchrome-css.html)
- [Where to Find Style Recipes](https://www.userchrome.org/find-user-style-recipes.html)
CSS, SASS Documents:
- [MDN: CSS](https://developer.mozilla.org/en-US/docs/Web/CSS)
- [MDN: Introducing the CSS Cascade](https://developer.mozilla.org/en-US/docs/Web/CSS/Cascade)
- [SASS(SCSS)](https://sass-lang.com/documentation)
- [SASS Live Compile](https://www.sassmeister.com/)
Live Debugging:
- [Tutorial: How to create and live-debug userChrome.css](https://www.reddit.com/r/FirefoxCSS/comments/73dvty/tutorial_how_to_create_and_livedebug_userchromecss/)
- [Browser Toolbox](https://developer.mozilla.org/en-US/docs/Tools/Browser_Toolbox)
- [Style Editor](https://developer.mozilla.org/en-US/docs/Tools/Style_Editor)
Advanced CSS keywords:
- [UDN: Chrome-only CSS reference](https://udn.realityripple.com/docs/Mozilla/Gecko/Chrome/CSS)
- [UDN: Mozilla CSS extensions](https://udn.realityripple.com/docs/Web/CSS/Mozilla_Extensions)
### Restrictions
- [Doc: Restrictions.md](./Restrictions.md).

View File

@ -1,228 +0,0 @@
# Restrictions
<!-- markdown-toc start - Don't edit this section. Run M-x markdown-toc-refresh-toc -->
**Table of Contents**
- [Compatibility](#compatibility)
* [Cross Platform](#cross-platform)
* [Firefox Version](#firefox-version)
* [Side Effect](#side-effect)
* [`-moz-accent-color` Related](#-moz-accent-color-related)
- [Internals](#internals)
* [CSS Loading Order](#css-loading-order)
* [DOM structure cannot be modified](#dom-structure-cannot-be-modified)
* [Shadow DOM](#shadow-dom)
* [XUL](#xul)
* [Supports](#supports)
* [Namespace](#namespace)
* [Import](#import)
<!-- markdown-toc end -->
## Compatibility
### Cross Platform
Different compatibility issues occur in Win7, Win8, Win10, KDE, Gnome, Mac, etc.
For example, The appearance of the context menu varies from platform to platform.
![context menu](https://user-images.githubusercontent.com/25581533/124066951-0eb21c00-da29-11eb-9ac4-c6b82a268c6f.png)
Consider compatibility as much as possible, but use [dedicated media queries](https://github.com/mozilla/gecko-dev/blob/d6188c9ce02efeea309e7177fc14c9eb2f09db37/servo/components/style/gecko/media_features.rs#L906-L930) in special cases.
Even the implementation is also different like [Context menu's image](https://github.com/black7375/Firefox-UI-Fix/blob/36e9c94844fee2417662251cbd50c2b874d5b576/userChrome.css#L4558-L4595).
If you need to implement it in a variety of forms, make a sort of API using [`css var()`](https://developer.mozilla.org/en-US/docs/Web/CSS/var).
Problems that are not [`appearance: auto`](https://developer.mozilla.org/en-US/docs/Web/CSS/appearance#values) may require emulation like [Win7, 8's menu active color](https://github.com/black7375/Firefox-UI-Fix/blob/36e9c94844fee2417662251cbd50c2b874d5b576/userChrome.css#L146-L223).
Complex UI emulation is quite tricky. [[Linux's Proton UI Library Chrome](https://github.com/black7375/Firefox-UI-Fix/blob/36e9c94844fee2417662251cbd50c2b874d5b576/userChrome.css#L2113-L2504), [Linux's Proton UI Library Content](https://github.com/black7375/Firefox-UI-Fix/blob/36e9c94844fee2417662251cbd50c2b874d5b576/userContent.css#L1458)]
[Bookmark menu](https://github.com/black7375/Firefox-UI-Fix/issues/136) is also similar example([code](https://github.com/black7375/Firefox-UI-Fix/blob/36e9c94844fee2417662251cbd50c2b874d5b576/userChrome.css#L4745-L4840)).
### Firefox Version
There may be changes that change by version of Firefox.
It's [more frequent than your thought](https://github.com/black7375/Firefox-UI-Fix/issues?q=is%3Aissue+label%3Aupstream+), and we need to respond to compatibility between [Nightly](https://www.mozilla.org/en-US/firefox/nightly/notes/) and [ESR](https://www.mozilla.org/en-US/firefox/organizations/notes/) versions.
This project is using SCSS to make a [reusable compatible mixins](../src/utils).
```scss
@include OS($linux) {
// Your CSS
}
@include Dark {
// Your CSS
}
```
**Main compatibility bugs**
- `-moz-toolbar-prefers-color-scheme` -> `prefers-color-scheme` [#250](https://github.com/black7375/Firefox-UI-Fix/issues/250)
- `:root[lwtheme-mozlightdark]` is removed [#288](https://github.com/black7375/Firefox-UI-Fix/issues/288)
- `-moz-os-version` -> `-moz-platform` [#331](https://github.com/black7375/Firefox-UI-Fix/issues/331)
- Breaking change with `-moz-accent-color`/`-moz-accent-color-foreground` -> `AccentColor`/`AccentColorText` [#433](https://github.com/black7375/Firefox-UI-Fix/issues/433)
### `-moz-accent-color`
I don't know the exact reason, but it can be a problem if it is not applied to [CSS Variable](https://developer.mozilla.org/en-US/docs/Web/CSS/var). [#437](https://github.com/black7375/Firefox-UI-Fix/issues/437)
### Side Effect
Only CSS modifications can cause bugs that are hard to think of in the general web, such as the [context menu not appearing](https://github.com/black7375/Firefox-UI-Fix/issues/114).
Especially be careful when customizing XUL elements.
The following code will cause extension panels fail to open and trying to open them might even crash Firefox. ([@MrOtherGuy](https://www.reddit.com/r/FirefoxCSS/comments/u1mdld/comment/i4eg29n/?utm_source=share&utm_medium=web2x&context=3) reports)
```css
#nav-bar {
display: flex;
}
```
Info: `#nav-bar` is [`toolbar`](https://udn.realityripple.com/docs/Archive/Mozilla/XUL/toolbar).
Another `display: flex`'s side effect examples. [#368](https://github.com/black7375/Firefox-UI-Fix/issues/368) [#372](https://github.com/black7375/Firefox-UI-Fix/issues/372)
## Internals
### CSS Loading Order
User CSS(`userChrome.css`, `userContent.css`) is usually loaded first.
In many cases, overriding should be prevented with [`important!`](https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity#the_!important_exception)(Anti-pattern in general web), and side effects should also be considered. [#11](https://github.com/black7375/Firefox-UI-Fix/issues/11)
### DOM structure cannot be modified
It is possible with [JS(Autoconfig)](./Preference.md#auto-config), but there are security and configuration issues, so we should make the most of CSS.
[`::before`](https://developer.mozilla.org/en-US/docs/Web/CSS/::before) and [`::after`](https://developer.mozilla.org/en-US/docs/Web/CSS/::after) can indirectly add CSS elements.
Many implementations using `::before`, `::after`.
- [Bottom Rounded Corner](https://github.com/black7375/Firefox-UI-Fix/blob/36e9c94844fee2417662251cbd50c2b874d5b576/userChrome.css#L3319-L3393)
- [Dynamic Tab Separator](https://github.com/black7375/Firefox-UI-Fix/blob/36e9c94844fee2417662251cbd50c2b874d5b576/userChrome.css#L3394-L3457)
- [Static Tab Separator](https://github.com/black7375/Firefox-UI-Fix/blob/0f78a73b856e1335954ecded93d377b85134bd61/userChrome.css#L3387-L3428)
- [Picture In Picture Indicator](https://github.com/black7375/Firefox-UI-Fix/blob/36e9c94844fee2417662251cbd50c2b874d5b576/userChrome.css#L3716-L3753)
- [Contaner Indicator](https://github.com/black7375/Firefox-UI-Fix/blob/36e9c94844fee2417662251cbd50c2b874d5b576/userChrome.css#L3754-L3852)
For icons, [`list-style-image`](https://developer.mozilla.org/en-US/docs/Web/CSS/list-style-image) and [`background-image`](https://developer.mozilla.org/en-US/docs/Web/CSS/background-image) are available.
It is recommended to use `list-style-image` when a layout is provided for the image.
`background-image` may require many calculations to fit the layout.
- [Replace Library Icon](https://github.com/black7375/Firefox-UI-Fix/blob/36e9c94844fee2417662251cbd50c2b874d5b576/userChrome.css#L3923-L3965)
- [Panel Icon](https://github.com/black7375/Firefox-UI-Fix/blob/36e9c94844fee2417662251cbd50c2b874d5b576/userChrome.css#L4136-L4214)
- [Menu Item Icon](https://github.com/black7375/Firefox-UI-Fix/blob/36e9c94844fee2417662251cbd50c2b874d5b576/userChrome.css#L4551-L4744)
- [Error Illustration](https://github.com/black7375/Firefox-UI-Fix/blob/36e9c94844fee2417662251cbd50c2b874d5b576/userContent.css#L275-L380)
You can use [`-moz-box-ordinal-group`](https://udn.realityripple.com/docs/Web/CSS/box-ordinal-group)([`-moz-box`](https://udn.realityripple.com/docs/Web/CSS/Mozilla_Extensions#display)) and [`order`](https://developer.mozilla.org/en-US/docs/Web/CSS/order)(at [flex](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox)) to change the order of the layout.
In experience, the detailed actions of `-moz-box` and `flex` are different, so tests are required.
- [Separator Order](https://github.com/black7375/Firefox-UI-Fix/blob/36e9c94844fee2417662251cbd50c2b874d5b576/userChrome.css#L4286-L4288)
- [Sync Menu Item's Image Order](https://github.com/black7375/Firefox-UI-Fix/blob/36e9c94844fee2417662251cbd50c2b874d5b576/userChrome.css#L4234-L4238)
- [Tabs On Bottom](https://github.com/black7375/Firefox-UI-Fix/blob/c453ef43a699759f55800a5d266a89ac11321b2b/src/tabbar/_tabs_on_bottom.scss#L4-L32)
Finally, it's time to respond to various states.
By default, [attribute selectors](https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors) is used, and sometimes [hard coding](https://github.com/black7375/Firefox-UI-Fix/blob/36e9c94844fee2417662251cbd50c2b874d5b576/userChrome.css#L873-L893) according to [selector specificity](https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity) may be required.
If there is no state attributes, you can bypass by using [both transitions and keyframes](https://github.com/black7375/Firefox-UI-Fix/blob/36e9c94844fee2417662251cbd50c2b874d5b576/userChrome.css#L2704-L2730) for animation.
### Shadow DOM
Firefox actively uses [shadow dom](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM) internally.
To modify, it is often a roundabout approach or impossible to inherit.
Onething bypass method is to declare [`var()`](https://developer.mozilla.org/en-US/docs/Web/CSS/var) to shadow root.
- [Scrollbutton Padding](https://github.com/black7375/Firefox-UI-Fix/blob/36e9c94844fee2417662251cbd50c2b874d5b576/userChrome.css#L2906-L2924)
- [Audio, Video Player UI](https://github.com/black7375/Firefox-UI-Fix/blob/36e9c94844fee2417662251cbd50c2b874d5b576/userContent.css#L5-L47)
- [Video Player Twoline UI](https://github.com/black7375/Firefox-UI-Fix/blob/cbf14cd55a9edada7ab2f5f1b626608fb9fe38a2/src/contents/_video_player.scss#L68-L171): It is pretty difficult when the condition becomes complicated.
Another limitation of shadow dom in user style is that you cannot use shadow dom related selectors like [`:host`](https://developer.mozilla.org/en-US/docs/Web/CSS/:host_function) and [`::part`](https://developer.mozilla.org/en-US/docs/Web/CSS/::part).
- [Using ::part() selector in userchrome.css?](https://www.reddit.com/r/FirefoxCSS/comments/d2sukj/using_part_selector_in_userchromecss/)
- [Can't change some shadow-dom properties](https://www.reddit.com/r/FirefoxCSS/comments/rebn3s/cant_change_some_shadowdom_properties/)
- [Bug 1575507 - Shadow parts should work in user-origin stylesheets.](https://bugzilla.mozilla.org/show_bug.cgi?id=1575507)
### XUL
Sometimes firefox can use [XUL](https://en.wikipedia.org/wiki/XUL) that have been written and binded with C++ for performance like a treeview of bookmarks.
XUL's [box model](https://udn.realityripple.com/docs/Archive/Mozilla/XUL/Tutorial/The_Box_Model) and [DOM](https://udn.realityripple.com/docs/Archive/Mozilla/XUL/Tutorial/Document_Object_Model) are different from HTML.
There ar few appropriate documents, so we have to read the source code and work. (Ex. [1](https://github.com/mozilla/gecko-dev/blob/master/layout/style/nsCSSAnonBoxList.h), [2](https://github.com/mozilla/gecko-dev/blob/master/layout/xul/tree/nsITreeView.idl))
Available CSS features are also restricted.
Example of legacy documents that will help.
- [UDN: ::-moz-tree-cell](https://udn.realityripple.com/docs/Mozilla/Gecko/Chrome/CSS/::-moz-tree-cell)
- [UDN: ::-moz-tree-cell-text](https://udn.realityripple.com/docs/Mozilla/Gecko/Chrome/CSS/::-moz-tree-cell-text)
Another case.
Like [`<toolbar align="end"></toolbar>`](https://udn.realityripple.com/docs/Archive/Mozilla/XUL/Attribute/align), [`attributes`](https://udn.realityripple.com/docs/Archive/Mozilla/XUL/Attribute) is set and CSS of same property may not be appplied. (Ex. [`box-align: start`](https://udn.realityripple.com/docs/Web/CSS/box-align))
### Supports
[`@supports`](https://developer.mozilla.org/en-US/docs/Web/CSS/@supports) change in CSS is not detected in real time. (Caching after checking only once)
So a restart is required, and if the mozilla need real time changes, are using `@media` to handle it.
If project only use pure CSS, we cannot add `@media rules`.
- [Bug 1267890 - Support detecting bool preferences in chrome stylesheets](https://bugzilla.mozilla.org/show_bug.cgi?id=1267890)
- [Bug 1698132 - Improve caching behaviour of -moz-bool-pref](https://bugzilla.mozilla.org/show_bug.cgi?id=1698132)
This restriction is also related to the [Doc: Preference.md](./Preference.md#using-with-user-custom-css).
### Namespace
In older codes, the following [namespace](https://developer.mozilla.org/en-US/docs/Web/CSS/@namespace) is commonly seen:
```css
@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);
```
However, it is [only applicable to XUL](https://www.userchrome.org/adding-style-recipes-userchrome-css.html#namespaces), so it is recommended to use with `prefix`.
```css
@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
@namespace html url("http://www.w3.org/1999/xhtml");
/* Use */
xul|search-textbox {
border: 2px solid red !important;
}
html|input {
border: 2px solid green !important;
}
```
If you want to limit the coverage to some pages, you can use [`@-moz-document`](https://developer.mozilla.org/en-US/docs/Web/CSS/@document):
```css
/* Main browser UI */
@-moz-document url("chrome://browser/content/browser.xhtml") {
/* Your CSS */
}
/* Library UI */
@-moz-document url("chrome://browser/content/places/places.xhtml") {
/* Your CSS */
}
/* PageInfo UI */
@-moz-document url("chrome://browser/content/pageinfo/pageInfo.xhtml") {
/* Your CSS */
}
```
### Import
There are a few caveats when you [`@import`](https://developer.mozilla.org/en-US/docs/Web/CSS/@import) the CSS.
It's because of specification definition, not Firefox design, but to prevent some mistakes.
`@import` rule is not a [nested statement](https://developer.mozilla.org/en-US/docs/Web/CSS/Syntax#nested_statements). Therefore, it cannot be used inside [conditional group at-rules](https://developer.mozilla.org/en-US/docs/Web/CSS/At-rule#conditional_group_rules).
```css
/* Precede */
@import url("YourFile.css"); /* Works */
/* Nested */
@supports -moz-bool-pref("userChrome.test.pref") {
@import url("AnotherFile.css"); /* Not Works */
}
```
Any [`@namespace`](https://developer.mozilla.org/en-US/docs/Web/CSS/@namespace) rules must follow all `@charset` and @import rules, and precede all other at-rules and style declarations in a style sheet.
```css
/* Before - Namespace */
@import url("YourFile.css"); /* Works */
/* Declare - Namespace */
@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
@namespace html url("http://www.w3.org/1999/xhtml");
/* After - Namespace */
@import url("YourFile.css"); /* Not Works */
```

View File

@ -1,86 +0,0 @@
# Rules
<!-- markdown-toc start - Don't edit this section. Run M-x markdown-toc-refresh-toc -->
**Table of Contents**
- [Basics](#basics)
* [Issue](#issue)
* [Version](#version)
* [Branch](#branch)
- [Edit](#edit)
* [Modify only source file](#modify-only-source-file)
* [Coding style](#coding-style)
- [Commits](#commits)
* [Commit](#commit)
* [Commit Message](#commit-message)
* [Pull request](#pull-request)
<!-- markdown-toc end -->
## Basics
This is a rough guideline. (Not forced)
Feel free to make PR.
### Issue
**Search:**
- Search the projects [issues](https://github.com/black7375/Firefox-UI-Fix/issues) to make sure it's not a known issue.
**Versions:**
- Make sure youre on the latest version.
- Try older versions.
- Try switching up dependency versions.
### Version
Milestone, The versioning scheme we use is [SemVer](https://semver.org/). (Maintainer decides, do not pull request.)
We will release the feature as soon as it is complete, but the cycle should be 2-4 weeks.
Rapid releases.
It comes from [#109](https://github.com/black7375/Firefox-UI-Fix/issues/109#issuecomment-873313945).
### Branch
Stable: Only bugfix, Documentation.
- `master`: Common bugfix, documentation.
- `photon-style`: Bugfix, documentation specified in `photon-style`.
- `proton-sryle`: Bugfix, documentation specified in `proton-style`.
Development: New Features.
- `dev`: Common new features.
- `photon-style-dev`: New features specified in `photon-style`.
- `proton-style-dev`: New features specified in `proton-style`.
## Edit
### Modify only source file
Do not modify files that are built directly or automatically generated.
### Coding style
- **Indent:** 2 spaces for indentation rather than tabs.
- **Columns:** Fit `80`~`100` columns as much as possible. (Auto formatting is using 120 to avoid the worst case)
## Commits
### Commit
- **Meaningfully:**: It doesn't make meaningless commits.
- **One per task:** It's difficult to distinguish when various tasks are mixed.
- **Often:** Codes may corrupt during large changes.
### Commit Message
For intuitive recognition, I [put a **prefix**](https://github.com/black7375/Firefox-UI-Fix/commits/master).
- `Add:` Add feature or enhanced.
- `Bump:` Update dependency packages.
- `Fix:` Bug fix or change default values.
- `Clean:` Refactoring.
- `Doc:` Update docs.
### Pull request
- **Branch:** Check the [Branch](#branch) section and PR to the correct branch.
- **Issue:** We recommend that you open the issue first to discuss the changes with the owner of this repository.
- **Build:** Please check if it was built before PR.

View File

@ -1,150 +0,0 @@
# Smart Bookmarks(Query Bookmarks)
<!-- markdown-toc start - Don't edit this section. Run M-x markdown-toc-refresh-toc -->
**Table of Contents**
- [Basics](#basics)
- [Places query URIs](#places-query-uris)
- [Query parameters](#query-parameters)
- [Query operators](#query-operators)
<!-- markdown-toc end -->
## Basics
**Related Docs**
- [Support Mozilla: Restore the default Smart Bookmarks Folders](https://support.mozilla.org/en-US/kb/restore-default-smart-bookmarks-folders) (Not works)
- [Smart Bookmarks. A quick guide.](https://www.reddit.com/r/firefox/comments/2i4qcy/smart_bookmarks_a_quick_guide/)
- [Smart Bookmarks. A quick guide. (extended)](https://www.reddit.com/r/firefox/comments/fvcw96/query_bookmarks_smart_bookmarks_a_quick_guide/)
- [How to Create Custom Smart Bookmarks Folders in Firefox](https://www.howtogeek.com/111820/how-to-create-custom-smart-bookmarks-folders-in-firefox/)
- [MDN: Places query URIs(Archived)](https://web.archive.org/web/20210531033430/https://developer.mozilla.org/en-US/docs/Mozilla/Tech/Places/Places_query_URIs)
- [UDN: Querying Places](https://udn.realityripple.com/docs/Mozilla/Tech/Places/Querying)
- [mozillaZine: Places query syntax](https://forums.mozillazine.org/viewtopic.php?p=3260477)
**Explanation**
Firefox 3 switched to "places" sqlite database as a main bookmarks and history container. (Previously used [MDN: Mork file format(Achieved)](https://web.archive.org/web/20120509214427/https://developer.mozilla.org/en/Mork_Structure))
You can get a glimpse of SQL query power by using serialized `places:` query strings.
Simple strings that can be added to your bookmarks that will perform queries over database.
**Current State**
`browser.places.smartBookmarksVersion` does not work.
There is [no search in the source code](https://searchfox.org/mozilla-central/search?q=browser.places.smartBookmarksVersion&path=&case=false&regexp=false), and you can see that [the code in ESR 60](https://searchfox.org/mozilla-esr60/search?q=browser.places.smartBookmarksVersion&path=&case=false&regexp=false) has been removed.
Place query URIS related information was also removed from MDN, but fortunately it is still operable.
## Places query URIs
This article describes the parameters you can use when constructing `place` URIs. These URIs perform [Places](https://udn.realityripple.com/docs/Mozilla/Tech/Places) queries.
You can use a `place` URI as a bookmark. For example, if you right-click on the toolbar and choose "New Bookmark," you can enter a `place` URI there to create a new query on your toolbar that, when clicked, will reveal a popup containing the results of the query.
The following `place` URI is used to implement the "Most Visited" smart bookmark in the default set of smart bookmarks created when you first start using Firefox 3:
```
place:queryType=0&sort=8&maxResults=10
```
The parameters used in this query are:
- `queryType=0`: This indicates that the query should look only at the user's history and not at bookmarks.
- `sort=8`: The `sort` parameter indicates that the query results should be listed in reverse numeric order, based on visit count. In other words, the most visited result will be first, and the least visited result last.
- `maxResults=10`: This parameter specifies that a maximum of 10 results should be returned by the query.
If you wanted to change this query to only consider visits that took place today, you could change it to:
```
place:queryType=0&sort=8&maxResults=10&beginTimeRef=1&beginTime=0
```
The new parameters added here are:
- `beginTimeRef=1`: Indicates that the `beginTime` parameter that follows is specified as relative to midnight this morning.
- `beginTime`: Specifies the amount of time, in microseconds, from midnight at which to begin looking for visits. By specifying zero for this value, we indicate that we wish to consider all visits that occurred today.
## Query parameters
Here's a list of the parameters available that you can look for.
| **Parameter** | **Type** | **Description** |
|------------------|-----------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `beginTime` | `unsigned long` | The time, in microseconds of the earliest result to return. |
| `beginTimeRef` | `unsigned long` | Indicates the type of reference specified in `beginTime`: |
| | | `0`: The time is relative to January 1, 1970 GMT. This is the default. |
| | | `1`: The time is relative to this morning at midnight. This is useful for queries relative to "today." |
| | | `2`: The time is relative to right now. |
| `endTime` | `unsigned long` | The time, in microseconds, of the latest result to return. |
| `endTimeRef` | `unsigned long` | Indicates the type of reference specified in `endTime`. The values are the same as for beginTime. |
| `terms` | `string` | The term to query. |
| `minVisits` | `long` | Filters results based on the minimum number of visits. Specify -1 (the default) to return all results, or any other number to only include results with a visit count higher than the given value. |
| `maxVisits` | `long` | Filters results based on the maximum number of visits. Only items that have been visited fewer than this number of times are included in the results. Specify -1 (which is the default) to not filter based on a maximum number of visits. |
| `onlyBookmarked` | `boolean` | If `true`, only bookmarked items are included in the results. |
| `domainIsHost` | `boolean` | If `true`, `domain` must be an exact match. Otherwise, anything that ends in `domain` is considered a match. |
| `domain` | `string` | Query for items matching this host or domain name. See `domainIsHost` for more information. |
| `folder` | `string` | The folder to query. This may be one of the following: |
| | | `PLACES_ROOT`: The Places root folder. |
| | | `BOOKMARKS_MENU`: The Bookmarks menu. |
| | | `TOOLBAR`: The bookmarks toolbar. |
| | | `TAGS`: Tags |
| | | `UNFILED_BOOKMARKS`: Unfiled bookmarks |
| `!annotation` | `boolean` | Indicates whether to include or reject items matching the annotation specified by `annotation`. If `true`, items that don't have the specified annotation are rejected. |
| `annotation` | `string` | The annotation to match when querying. |
| `uri` | `string` | The URI to match. |
| `uriIsPrefix` | `boolean` | If `false`, the uri must be an exact match; this is the default. If `true`, any entry that begins with the specified URI is considered a match. |
| `tag` | `string` | - |
| `!tas` | - | - |
## Query operators
The following attributes allow you to control the results more precisely.
| **Operator** | **Type** | **Description** |
|----------------------------------------------------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `OR` | | This is the OR logical operator. |
| `applyOptionsToContainers` | | |
| `excludeItemIfParentHasAnnotation` - Obsolete since Gecko 13.0 | `string` | Items whose parent has this value as an annotation are excluded from the query results. This parameter is ignored for queries over history. For example, you can exclude livemark entries by specifying "livemark/feedURI" here. |
| `excludeItems` | `boolean` | If `true`, all URIs and separators are excluded from the bookmark query results, so that only folders and queries are returned. If `false`, all items are returned; this is the default. |
| `excludeQueries` | `boolean` | If `true`, queries are excluded from the results; however, simple folder queries like bookmark folder symlinks will still be included. `false`, the default, indicates that queries should be included in the results. |
| `excludeReadOnlyFolders` | `boolean` | If `true`, read-only folders are excluded from the results. This only affects cases in which the actual folder result node would appear in its parent folder. The default is `false`. |
| `expandQueries` | `boolean` | If `true`, `place` URIs appear as containers in the results, with the contents filled in from the stored query. This doesn't do anything if `excludeQueries` is `true`. The default is `false`, which causes `place` URIs to appear as normal items. |
| `group` | | |
| `includeHidden` | `boolean` | If `true`, items that would normally be hidden in a history query (such as the content of iframes as well as images) are included in the results. This is `false` by default. |
| `maxResults` | `unsigned long` | The maximum number of results to return. This doesn't work when sorting by title. The result is `0`, which means that all results are returned. |
| `originalTitle` | `string` | Retrieves the original page title. |
| `queryType` | `unsigned short` | The type of search to use when querying the database. This attribute is only honored by query nodes. It's ignored for simple folder queries. |
| | | `0`: History |
| | | `1`: Bookmarks |
| | | `2`: Both history and bookmarks (**Not yet implemented** -- see [bug 378798](https://bugzilla.mozilla.org/show_bug.cgi?id=378798)) |
| `resolveNullBookmarkTitles` | `boolean` | If `true`, bookmarks with null titles get their page titles fetched from history if possible. This doesn't apply to bookmarks with empty titles. The default is `false`. |
| `showSessions` | `boolean` | If `true`, session information is used to group history items. This only makes a difference when sorting by date. The default is `false`. |
| `sort` | `unsigned short` | The sort order to use for the results. |
| | | `0`: Natural bookmark order |
| | | `1`: Sort by title, A-Z |
| | | `2`: Sort by title, Z-A |
| | | `3`: Sort by visit date, most recent last |
| | | `4`: Sort by visit date, most recent first |
| | | `5`: Sort by uri, A-Z |
| | | `6`: Sort by uri, Z-A |
| | | `7`: Sort by visit count, ascending |
| | | `8`: Sort by visit count, descending |
| | | `9`: Sort by keyword, A-Z |
| | | `10`: Sort by keyword, Z-A |
| | | `11`: Sort by date added, most recent last |
| | | `12`: Sort by date added, most recent first |
| | | `13`: Sort by last modified date, most recent last |
| | | `14`: Sort by last modified date, most recent first |
| | | `17`: Sort by tags, ascending |
| | | `18`: Sort by tags, descending |
| | | `19`: Sort by annotation, ascending |
| | | `20`: Sort by annotation, descending |
| `sortingAnnotation` | `string` | The annotation to use when sorting by annotation. |
| `type` | `unsigned short` | The type of results to return. |
| | | `0`: Results as URI ("URI" results, one for each URI visited in the range). |
| | | `1`: Results as visit ("visit" results, with one for each time a page was visited this will often give you multiple results for one URI). |
| | | `2`: Results as full visits (like "visit", but returns all attributes for each result) |
| | | `3`: Results as date query (returns results for given date range) |
| | | `4`: Results as site query (returns last visit for each url in the given host) |
| | | `5`: Results as date+site query (returns list of hosts visited in the given period) |
| | | `6`: Results as tag query (returns list of bookmarks with the given tag) |
| | | `7`: Results as tag container (returns bookmarks with given tag; for same uri uses last modified. `folder=tag_folder_id` must be present in the query |

View File

@ -1,3 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="context-fill" fill-opacity="context-fill-opacity" xmlns="http://www.w3.org/2000/svg">
<path d="M8 2C11.3137 2 14 4.68629 14 8C14 11.3137 11.3137 14 8 14C4.68629 14 2 11.3137 2 8C2 4.68629 4.68629 2 8 2ZM8 3C5.23858 3 3 5.23858 3 8C3 10.7614 5.23858 13 8 13C10.7614 13 13 10.7614 13 8C13 5.23858 10.7614 3 8 3ZM7.24953 9.04242L10.1203 6.16398C10.3153 5.96846 10.6319 5.96803 10.8274 6.16304C11.0012 6.33637 11.0208 6.60577 10.8861 6.80082L10.8283 6.87014L7.60403 10.1031C7.43053 10.277 7.16082 10.2965 6.96576 10.1615L6.89645 10.1036L5.14645 8.35355C4.95118 8.15829 4.95118 7.84171 5.14645 7.64645C5.32001 7.47288 5.58944 7.4536 5.78431 7.58859L5.85355 7.64645L7.24953 9.04242L10.1203 6.16398L7.24953 9.04242Z"/>
<path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0Zm0 1.333a6.667 6.667 0 1 0 0 13.334A6.667 6.667 0 0 0 8 1.333zM7 9.39l3.827-3.838a.667.667 0 0 1 1.021.85l-.077.092-4.299 4.31a.667.667 0 0 1-.851.078l-.092-.077L4.195 8.47a.667.667 0 0 1 .85-1.02l.093.078L7 9.389l3.828-3.837z"/>
</svg>

Before

Width:  |  Height:  |  Size: 773 B

After

Width:  |  Height:  |  Size: 422 B

View File

@ -1,3 +0,0 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="context-fill" fill-opacity="context-fill-opacity" xmlns="http://www.w3.org/2000/svg">
<path d="M4.838.852h14.223a4.02 4.02 0 014.014 3.791l.006.228v14.224a4.02 4.02 0 01-3.792 4.013l-.228.007H4.838a4.02 4.02 0 01-4.013-3.792l-.007-.228V4.871A4.02 4.02 0 014.61.858l.228-.006zm2.566 14.223H2.673v4.02c0 1.136.875 2.067 1.987 2.157l.178.007h14.223a2.165 2.165 0 002.158-1.987l.007-.177v-4.02h-4.731a4.64 4.64 0 01-4.298 3.704l-.247.007a4.64 4.64 0 01-4.492-3.478l-.054-.233zM19.061 2.707H4.838a2.164 2.164 0 00-2.157 1.987l-.008.177v8.349h5.566c.47 0 .858.349.919.802l.009.126a2.783 2.783 0 005.559.19l.007-.19c0-.47.349-.858.801-.92l.126-.008h5.566V4.871a2.165 2.165 0 00-1.987-2.157l-.178-.007zM5.456 8.891h12.987a.928.928 0 01.126 1.847l-.126.008H5.456A.927.927 0 015.33 8.9l.126-.009h12.987H5.456zm0-3.71h12.987a.928.928 0 01.126 1.846l-.126.009H5.456a.927.927 0 01-.126-1.847l.126-.008h12.987H5.456z"/>
</svg>

Before

Width:  |  Height:  |  Size: 966 B

View File

@ -1,3 +0,0 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="context-fill" fill-opacity="context-fill-opacity" xmlns="http://www.w3.org/2000/svg">
<path d="M4.872.843h14.256a4.029 4.029 0 014.022 3.801l.007.228v14.256a4.029 4.029 0 01-3.801 4.022l-.228.007H4.872A4.029 4.029 0 01.85 19.356l-.007-.228V4.872A4.029 4.029 0 014.644.85l.228-.007h14.256H4.872zM2.703 15.099v4.029c0 1.138.876 2.072 1.991 2.162l.178.007h14.256a2.169 2.169 0 002.162-1.991l.007-.178v-4.029h-4.741a4.65 4.65 0 01-4.308 3.712l-.248.007a4.651 4.651 0 01-4.502-3.485l-.054-.234H2.703v4.029-4.029zM19.128 2.703H4.872A2.169 2.169 0 002.71 4.694l-.007.178v8.368h5.578c.471 0 .86.349.921.803l.009.126a2.79 2.79 0 005.572.191l.006-.191c0-.47.35-.859.804-.921l.126-.008h5.578V4.872a2.169 2.169 0 00-1.991-2.162l-.178-.007z"/>
</svg>

Before

Width:  |  Height:  |  Size: 791 B

View File

@ -1,4 +0,0 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="context-fill" fill-opacity="context-fill-opacity" xmlns="http://www.w3.org/2000/svg">
<path d="M12.5 3A3.5 3.5 0 0 1 16 6.5V9c0 .818-.393 1.544-1 2V6.5A2.5 2.5 0 0 0 12.5 4H3c.456-.607 1.182-1 2-1h7.5Z"/>
<path d="M15.995 12.432 16 12.5c0 .253-.226.462-.519.495L15.4 13H.6c-.331 0-.6-.224-.6-.5 0-.253.226-.462.519-.495L.6 12H1V7a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v5h1.4c.304 0 .555.188.595.432ZM13 7a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v5h11V7Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 501 B

View File

@ -1,9 +0,0 @@
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="context-fill" fill-opacity="context-fill-opacity">
<circle cx="8" cy="8" r="7.5"/>
<path filter="invert(100%) brightness(1.3)" d="M13.948 5.886c-1.143-1.501-3.388-1.693-4.785-.409l-.782.718-.765 0-.782-.718c-1.398-1.284-3.642-1.092-4.786.409-.148.585.081 2.745.21 3.085.26 1.372 1.382 2.404 2.726 2.404.671 0 1.279-.268 1.76-.697l.293-.251a1.451 1.451 0 0 1 1.883-.016l.44.364 0-.002a2.622 2.622 0 0 0 1.652.601c1.344 0 2.466-1.032 2.726-2.404.13-.339.367-2.49.21-3.084z"/>
<path d="M5.3 6.843c-.558 0-1.054.233-1.374.594a.519.519 0 0 0 0 .678c.32.362.816.594 1.374.594s1.054-.233 1.374-.594a.519.519 0 0 0 0-.678A1.828 1.828 0 0 0 5.3 6.843z"/>
<path d="M10.7 6.843c-.558 0-1.054.233-1.374.594a.519.519 0 0 0 0 .678c.32.362.816.594 1.374.594s1.054-.233 1.374-.594a.519.519 0 0 0 0-.678 1.828 1.828 0 0 0-1.374-.594z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -1,5 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<path
style="fill:context-fill;fill-opacity:context-fill-opacity"
d="M 3.5 0 C 2.67157 0 2 0.67157 2 1.5 L 2 5.4160156 C 2.3175 5.2772956 2.6522 5.1702094 3 5.0996094 L 3 1.5 C 3 1.22386 3.22386 1 3.5 1 L 8 1 L 8 4.5 C 8 5.32843 8.6716 6 9.5 6 L 13 6 L 13 14.5 C 13 14.7761 12.910861 15 12.634766 15 L 11.076172 15 C 11.139982 15.380805 11.123616 15.698627 11.103516 16 L 12.5 16 C 13.3284 16 14 15.3284 14 14.5 L 14 5.4140625 C 14 5.0162425 13.841847 4.6348256 13.560547 4.3535156 L 9.6464844 0.43945312 C 9.3651844 0.15815313 8.9837375 0 8.5859375 0 L 3.5 0 z M 9 1.2070312 L 12.792969 5 L 9.5 5 C 9.2239 5 9 4.77614 9 4.5 L 9 1.2070312 z M 4 6 C 1.79086 6 0 7.79086 0 10 C 0 12.2091 1.79086 14 4 14 C 4.92432 14 5.775795 13.686656 6.453125 13.160156 L 9.1445312 15.851562 C 9.3398312 16.046863 9.6562625 16.046862 9.8515625 15.851562 C 10.046862 15.656363 10.046862 15.339831 9.8515625 15.144531 L 7.1601562 12.453125 C 7.6867262 11.775725 8 10.9244 8 10 C 8 7.79086 6.20914 6 4 6 z M 4 7 C 5.65685 7 7 8.3431 7 10 C 7 11.6569 5.65685 13 4 13 C 2.34315 13 1 11.6569 1 10 C 1 8.3431 2.34315 7 4 7 z " />
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -1,5 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<path
style="fill:context-fill;fill-opacity:context-fill-opacity"
d="M 2.5 0 C 1.11929 0 0 1.11928 0 2.5 L 0 11.5 C 0 12.8807 1.11929 14 2.5 14 L 7.6425781 14 C 7.6765097 13.919413 7.7052647 13.837248 7.75 13.759766 L 8.1894531 13 L 2.5 13 C 1.67157 13 1 12.3284 1 11.5 L 1 3.9980469 L 13 3.9980469 L 14 4 L 14 2.5 C 14 1.11929 12.8807 0 11.5 0 L 2.5 0 z M 2.4980469 0.99804688 L 11.498047 0.99804688 C 12.326547 0.99804688 12.998047 1.6696169 12.998047 2.4980469 L 12.998047 2.9980469 L 0.99804688 2.9980469 L 0.99804688 2.4980469 C 0.99804688 1.6696169 1.6696269 0.99804688 2.4980469 0.99804688 z M 5.9980469 4.9980469 C 5.8700856 4.9980469 5.7421664 5.046901 5.6445312 5.1445312 L 3.1445312 7.6445312 C 2.9492714 7.8397913 2.9492613 8.1562625 3.1445312 8.3515625 L 5.6445312 10.851562 C 5.8397913 11.046762 6.1563025 11.046762 6.3515625 10.851562 C 6.5468225 10.656263 6.5468225 10.339731 6.3515625 10.144531 L 4.2050781 7.9980469 L 6.3515625 5.8515625 C 6.5468225 5.6563025 6.5468225 5.3397913 6.3515625 5.1445312 C 6.2539325 5.0469013 6.1260081 4.9980469 5.9980469 4.9980469 z M 8.4980469 4.9980469 C 8.3700844 4.9980469 8.2421313 5.046901 8.1445312 5.1445312 C 7.9492315 5.3397913 7.9492315 5.6563025 8.1445312 5.8515625 L 9.6796875 7.3867188 C 9.7505735 7.1156932 9.8564801 6.8485697 10.005859 6.5898438 C 10.041239 6.5285607 10.084749 6.4745821 10.123047 6.4160156 L 8.8515625 5.1445312 C 8.7539125 5.0469012 8.6260094 4.9980469 8.4980469 4.9980469 z M 13.339844 5.7011719 C 12.363581 5.6718839 11.401509 6.1725423 10.878906 7.0898438 C 10.323396 8.0648784 10.418654 9.239876 11.025391 10.099609 L 8.6523438 14.261719 C 8.3366865 14.815769 8.5255408 15.523863 9.0722656 15.84375 C 9.6189902 16.163637 10.317156 15.973972 10.632812 15.419922 L 13.009766 11.25 C 14.040834 11.34363 15.079101 10.839456 15.630859 9.8710938 C 16.228121 8.8227091 16.076258 7.5442644 15.341797 6.6738281 L 14.048828 8.9433594 C 13.796341 9.3865797 13.236286 9.5410257 12.798828 9.2851562 C 12.361468 9.0292867 12.212358 8.4607985 12.464844 8.0175781 L 13.757812 5.7460938 C 13.618935 5.7199177 13.479311 5.705356 13.339844 5.7011719 z M 9.6191406 8.6699219 L 8.1445312 10.144531 C 7.9492315 10.339731 7.9492314 10.656263 8.1445312 10.851562 C 8.3397312 11.046762 8.6562625 11.046762 8.8515625 10.851562 L 9.9023438 9.8027344 C 9.7556562 9.4367904 9.6641372 9.0567522 9.6191406 8.6699219 z " />
</svg>

Before

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -1,997 +0,0 @@
<#
.SYNOPSIS
Installer for Lepton
.DESCRIPTION
Installs Lepton onto selected Firefox profiles
.INPUTS
TODO: input directories for installation?
Would need to discuss a non-interactive install system
.OUTPUTS
TODO: output directories that Lepton has been installed to?
.PARAMETER u
Specifies whether to update a current installation
Defaults to false
.PARAMETER f
Specifies a custom path to look for Firefox profiles in
.PARAMETER p
Specifies a custom name to use when creating a profile
.PARAMETER h
Shows this help message
.PARAMETER ?
Shows this help message
.PARAMETER WhatIf
Runs the installer without actioning any file copies/moves
Equivelant to a dry-run
.EXAMPLE
PS> .\Install.ps1 -u -f C:\Users\someone\ff-profiles
Updates current installations in the profile directory 'C:\Users\someone\ff-profiles'
.LINK
https://github.com/black7375/Firefox-UI-Fix#readme
#>
[CmdletBinding(
SupportsShouldProcess = $true,
PositionalBinding = $false
)]
param(
[Alias("u")]
[switch]$updateMode,
[Alias("f")]
[string]$profileDir,
[Alias("p")]
[string]$profileName,
[Alias("h")]
[switch]$help = $false
)
#** Helper Utils ***************************************************************
#== Message ====================================================================
function Lepton-ErrorMessage() {
Write-Error "FAILED: ${args}"
exit -1
}
function Lepton-OKMessage() {
$local:SIZE = 50
$local:FILLED = ""
for ($i = 0; $i -le ($SIZE - 2); $i++) {
$FILLED += "."
}
$FILLED += "OK"
$local:message = "${args}"
Write-Host ${message}(${FILLED}.Substring(${message}.Length))
}
$PSMinSupportedVersion = 2
function Verify-PowerShellVersion {
Write-Host -NoNewline "Checking PowerShell version... "
$PSVersion = [int](Select-Object -Property Major -First 1 -ExpandProperty Major -InputObject $PSVersionTable.PSVersion)
Write-Host "[$PSVersion]"
if ($PSVersion -lt $PSMinSupportedVersion) {
Write-Error -Category NotInstalled "You need a minimum PowerShell version of [$PSMinSupportedVersion] to use this installer"
exit -1
}
}
#== Required Tools =============================================================
function Install-Choco() {
# https://chocolatey.org/install
# https://docs.chocolatey.org/en-us/choco/setup#non-administrative-install
$InstallDir='C:\ProgramData\chocoportable'
$env:ChocolateyInstall="$InstallDir"
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
$env:Path += ";C:\ProgramData\chocoportable" # Adimin: ";C:\ProgramData\chocolatey"
refreshenv
}
function Check-Git() {
if ( -Not (Get-Command git -errorAction SilentlyContinue) ) {
if ( -Not (Get-Command choco -errorAction SilentlyContinue) ) {
Install-Choco
}
choco install git.commandline -y
$env:Path += ";C:\tools\git\bin" # Adimin: ";C:\Program Files\Git\bin"
refreshenv
}
Lepton-OKMessage "Required - git"
}
#== PATH / File ================================================================
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
$currentDir = (Get-Location).path
function Filter-Path() {
Param (
[Parameter(Mandatory=$true, Position=0)]
[string[]] $pathList,
[Parameter(Position=1)]
[string] $option = "Any"
)
return $pathList.Where({ Test-Path -Path "$_" -PathType "${option}" })
}
function Copy-Auto() {
Param (
[Parameter(Mandatory=$true, Position=0)]
[string] $file,
[Parameter(Mandatory=$true, Position=1)]
[string] $target
)
if ( "${file}" -eq "${target}" ) {
Write-Host "'${file}' and ${target} are same file"
return 0
}
if ( Test-Path -Path "${target}" ) {
Write-Host "${target} already exists."
Write-Host "Now making a backup.."
Copy-Auto "${target}" "${target}.bak"
Remove-Item "${target}" -Recurse -Force
Write-Host ""
}
Copy-Item -Path "${file}" -Destination "${target}" -Force -Recurse
}
function Move-Auto() {
Param (
[Parameter(Mandatory=$true, Position=0)]
[string] $file,
[Parameter(Mandatory=$true, Position=1)]
[string] $target
)
if ( "${file}" -eq "${target}" ) {
Write-Host "'${file}' and ${target} are same file"
return 0
}
if ( Test-Path -Path "${target}" ) {
Write-Host "${target} already exists."
Write-Host "Now making a backup.."
Move-Auto "${target}" "${target}.bak"
Write-Host ""
}
Get-ChildItem -Path "${target}" -Recurse | Move-Item -Path "${file}" -Destination "${target}" -Force
}
function Restore-Auto() {
Param (
[Parameter(Mandatory=$true, Position=0)]
[string] $file
)
$local:target = "${file}.bak"
if ( Test-Path -Path "${file}" ) {
Remove-Item "${file}" -Recurse -Force
}
Get-ChildItem -Path "${target}" -Recurse | Move-Item -Destination "${file}" -Force
$local:lookupTarget = "${target}.bak"
if ( Test-Path -Path "${lookupTarget}" ) {
Restore-Auto "${target}"
}
}
function Write-File() {
Param (
[Parameter(Mandatory=$true, Position=0)]
[string] $filePath,
[Parameter(Position=1)]
[string] $fileContent = ""
)
if ( "${fileContent}" -eq "" ) {
New-Item -Path "${filePath}" -Force
}
else {
Out-File -FilePath "${filePath}" -InputObject "${fileContent}" -Force
}
}
#== INI File ================================================================
# https://devblogs.microsoft.com/scripting/use-powershell-to-work-with-any-ini-file/
function Get-IniContent () {
Param (
[Parameter(Mandatory=$true, Position=0)]
[string] $filePath
)
$ini = @{}
switch -regex -file $filePath {
"^\[(.+)\]" {
# Section
$section = $matches[1]
$ini[$section] = @{}
$CommentCount = 0
}
"^(;.*)$" {
# Comment
$value = $matches[1]
$CommentCount = $CommentCount + 1
$name = Comment + $CommentCount
$ini[$section][$name] = $value
}
"(.+?)\s*=(.*)" {
# For compatibility
if ( $section -eq $null ) {
$section = "Info"
$ini[$section] = @{}
}
# Key
$name,$value = $matches[1..2]
$ini[$section][$name] = $value
}
}
return $ini
}
function Out-IniFile() {
Param (
[Parameter(Mandatory=$true, Position=0)]
[string] $filePath,
[Parameter(Position=1)]
[hashtable] $iniObject = @{}
)
# Create new file
$local:outFile = New-Item -ItemType file -Path "${filepath}" -Force
foreach ($i in $iniObject.keys) {
if (!($($iniObject[$i].GetType().Name) -eq "Hashtable")) {
#No Sections
Add-Content -Path $outFile -Value "$i=$($iniObject[$i])"
}
else {
#Sections
Add-Content -Path $outFile -Value "[$i]"
Foreach ($j in ($iniObject[$i].keys | Sort-Object)) {
if ($j -match "^Comment[\d]+") {
Add-Content -Path $outFile -Value "$($iniObject[$i][$j])"
}
else {
Add-Content -Path $outFile -Value "$j=$($iniObject[$i][$j])"
}
}
Add-Content -Path $outFile -Value ""
}
}
}
#** Select Menu ****************************************************************
# https://github.com/chrisseroka/ps-menu
function Check-PsMenu() {
if(-Not (Get-InstalledModule ps-menu -ErrorAction silentlycontinue)) {
Set-PSRepository PSGallery -InstallationPolicy Trusted
Install-Module -Name ps-menu -Confirm:$False -Force
}
}
function DrawMenu {
param ($menuItems, $menuPosition, $Multiselect, $selection)
$l = $menuItems.length
for ($i = 0; $i -le $l; $i++) {
if ($menuItems[$i] -ne $null){
$item = $menuItems[$i]
if ($Multiselect) {
if ($selection -contains $i){
$item = '[x] ' + $item
}
else {
$item = '[ ] ' + $item
}
}
if ($i -eq $menuPosition) {
Write-Host "> $($item)" -ForegroundColor Green
}
else {
Write-Host " $($item)"
}
}
}
}
function Toggle-Selection {
param ($pos, [array]$selection)
if ($selection -contains $pos){
$result = $selection | where {$_ -ne $pos}
}
else {
$selection += $pos
$result = $selection
}
$result
}
function Menu {
param ([array]$menuItems, [switch]$ReturnIndex=$false, [switch]$Multiselect)
$vkeycode = 0
$pos = 0
$selection = @()
if ($menuItems.Length -gt 0) {
try {
[console]::CursorVisible=$false #prevents cursor flickering
DrawMenu $menuItems $pos $Multiselect $selection
While ($vkeycode -ne 13 -and $vkeycode -ne 27) {
$press = $host.ui.rawui.readkey("NoEcho,IncludeKeyDown")
$vkeycode = $press.virtualkeycode
If ($vkeycode -eq 38 -or $press.Character -eq 'k') {$pos--}
If ($vkeycode -eq 40 -or $press.Character -eq 'j') {$pos++}
If ($vkeycode -eq 36) { $pos = 0 }
If ($vkeycode -eq 35) { $pos = $menuItems.length - 1 }
If ($press.Character -eq ' ') { $selection = Toggle-Selection $pos $selection }
if ($pos -lt 0) {$pos = 0}
If ($vkeycode -eq 27) {$pos = $null }
if ($pos -ge $menuItems.length) {$pos = $menuItems.length -1}
if ($vkeycode -ne 27) {
$startPos = [System.Console]::CursorTop - $menuItems.Length
[System.Console]::SetCursorPosition(0, $startPos)
DrawMenu $menuItems $pos $Multiselect $selection
}
}
}
finally {
[System.Console]::SetCursorPosition(0, $startPos + $menuItems.Length)
[console]::CursorVisible = $true
}
}
else {
$pos = $null
}
if ($ReturnIndex -eq $false -and $pos -ne $null) {
if ($Multiselect){
return $menuItems[$selection]
}
else {
return $menuItems[$pos]
}
}
else {
if ($Multiselect) {
return $selection
}
else {
return $pos
}
}
}
#** Profile ********************************************************************
#== Profile Dir ================================================================
# $HOME = (get-psprovider 'FileSystem').Home
$firefoxProfileDirPaths = @(
"${HOME}\AppData\Roaming\Mozilla\Firefox",
"${HOME}\AppData\Roaming\Waterfox",
"${HOME}\AppData\Roaming\librewolf",
"${HOME}\AppData\Roaming\Ghostery Browser",
"${HOME}\Desktop\Tor Browser\Browser\TorBrowser\Data\Browser"
)
function Check-ProfileDir() {
Param (
[Parameter(Position=0)]
[string] $profileDir = ""
)
if ( "${profileDir}" -ne "" ) {
$global:firefoxProfileDirPaths = @("${profileDir}")
}
$global:firefoxProfileDirPaths = Filter-Path $global:firefoxProfileDirPaths "Container"
if ( $firefoxProfileDirPaths.Length -eq 0 ) {
Lepton-ErrorMessage "Unable to find firefox profile dir."
}
Lepton-OKMessage "Profiles dir found"
}
#== Profile Info ===============================================================
$PROFILEINFOFILE="profiles.ini"
function Check-ProfileIni() {
foreach ( $profileDir in $global:firefoxProfileDirPaths ) {
if ( -Not (Test-Path -Path "${profileDir}\${PROFILEINFOFILE}" -PathType "Leaf") ) {
Lepton-ErrorMessage "Unable to find ${PROFILEINFOFILE} at ${profileDir}"
}
}
Lepton-OKMessage "Profiles info file found"
}
#== Profile PATH ===============================================================
$firefoxProfilePaths = @()
function Update-ProfilePaths() {
foreach ( $profileDir in $global:firefoxProfileDirPaths ) {
$local:iniContent = Get-IniContent "${profileDir}\${PROFILEINFOFILE}"
$global:firefoxProfilePaths += $iniContent.Values.Path | ForEach-Object { "${profileDir}\${PSItem}" }
}
if ( $firefoxProfilePaths.Length -ne 0 ) {
Lepton-OkMessage "Profile paths updated"
}
else {
Lepton-ErrorMessage "Doesn't exist profiles"
}
}
# TODO: Multi select support
function Select-Profile() {
Param (
[Parameter(Position=0)]
[string] $profileName = ""
)
if ( "${profileName}" -ne "" ) {
$local:targetPath = ""
foreach ( $profilePath in $global:firefoxProfilePaths ) {
if ( "${profilePath}" -like "*${profileName}" ) {
$targetPath = "${profilePath}"
break
}
}
if ( "${targetPath}" -ne "" ) {
Lepton-OkMessage "Profile, `"${profileName}`" found"
$global:firefoxProfilePaths = @("${targetPath}")
}
else {
Lepton-ErrorMessage "Unable to find ${profileName}"
}
}
else {
if ( $firefoxProfilePaths.Length -eq 1 ) {
Lepton-OkMessage "Auto detected profile"
}
else {
$global:firefoxProfilePaths = Menu $firefoxProfilePaths
if ( $firefoxProfilePaths.Length -eq 0 ) {
Lepton-ErrorMessage "Please select profiles"
}
Lepton-OkMessage "Selected profile"
}
}
}
#** Lepton Info File ***********************************************************
# If you interst RFC, see install.sh
#== Lepton Info ================================================================
$LEPTONINFOFILE ="lepton.ini"
function Check-LeptonIni() {
foreach ( $profileDir in $global:firefoxProfileDirPaths ) {
if ( -Not (Test-Path -Path "${profileDir}\${LEPTONINFOFILE}") ) {
Lepton-ErrorMessage "Unable to find ${LEPTONINFOFILE} at ${profileDir}"
}
}
Lepton-OkMessage "Lepton info file found"
}
#== Create info file ===========================================================
# We should always create a new one, as it also takes into account the possibility of setting it manually.
# Updates happen infrequently, so the creation overhead is less significant.
function Get-ProfileDir() {
Param (
[Parameter(Mandatory=$true, Position=0)]
[string] $profilePath
)
foreach ( $profileDir in $firefoxProfileDirPaths ) {
if ( "$profilePath" -like "${profileDir}*" ) {
return "$profileDir"
}
}
}
$CHROMEINFOFILE="LEPTON"
function Write-LeptonInfo() {
# Init info
$local:output = @{}
$local:prevDir = $firefoxProfileDirPaths[0]
$local:latestPath = ( $firefoxProfilePaths | Select-Object -Last 1 )
foreach ( $profilePath in $global:firefoxProfilePaths ) {
$local:LEPTONINFOPATH = "${profilePath}\chrome\${CHROMEINFOFILE}"
$local:LEPTONGITPATH = "${profilePath}\chrome\.git"
# Profile info
$local:Type = ""
$local:Ver = ""
$local:Branch = ""
$local:Path = ""
if ( Test-Path -Path "${LEPTONINFOPATH}" ) {
if ( Test-Path -Path "${LEPTONGITPATH}" -PathType "Container" ) {
$Type = "Git"
$Ver = $(git --git-dir "${LEPTONGITPATH}" rev-parse HEAD)
$Branch = $(git --git-dir "${LEPTONGITPATH}" rev-parse --abbrev-ref HEAD)
}
else {
$local:iniContent = Get-IniContent "${LEPTONINFOPATH}"
$Type = $iniContent["Info"]["Type"]
$Ver = $iniContent["Info"]["Ver"]
$Branch = $iniContent["Info"]["Branch"]
if ( "${Type}" -eq "" ) {
$Type = "Local"
}
}
$Path = "${profilePath}"
}
# Flushing
$local:profileDir = Get-ProfileDir "${profilePath}"
$local:profileName = Split-Path "${profilePath}" -Leaf
if ( "${prevDir}" -ne "${profileDir}" ) {
Out-IniFile "${prevDir}\${LEPTONINFOFILE}" $output
$output = @{}
}
# Make output contents
foreach ( $key in @("Type", "Branch", "Ver", "Path") ) {
$local:value = (Get-Variable -Name "${key}").Value
if ( "$value" -ne "" ) {
$output["${profileName}"] += @{"${key}" = "${value}"}
}
}
# Latest element flushing
if ( "${profilePath}" -eq "${latestPath}" ) {
Out-IniFile "${profileDir}\${LEPTONINFOFILE}" $output
}
$prevDir = "${profileDir}"
}
# Verify
Check-LeptonIni
Lepton-OkMessage "Lepton info file created"
}
#** Install ********************************************************************
#== Install Types ==============================================================
$updateMode = $false
$leptonBranch = "master"
function Select-Distribution() {
while ( $true ) {
$local:selected = $false
$local:selectedDistribution = Menu @("Original(default)", "Photon-Style", "Proton-Style", "Update")
switch ( $selectedDistribution ) {
"Original(default)" { $global:leptonBranch = "master" ; $selected = $true }
"Photon-Style" { $global:leptonBranch = "photon-style"; $selected = $true }
"Proton-Style" { $global:leptonBranch = "proton-style"; $selected = $true }
"Update" { $global:updateMode = $true ; $selected = $true }
default { Write-Host "Invalid option, reselect please." }
}
if ( $selected -eq $true ) {
break
}
}
Lepton-OkMessage "Selected ${selectedDistribution}"
}
$leptonInstallType = "Network" # Other types: Local, Release
function Check-InstallType() {
Param (
[Parameter(Mandatory=$true, Position=0)]
[string[]] $targetList,
[Parameter(Mandatory=$true, Position=1)]
[string] $installType
)
$local:targetCount = $targetList.Length
$local:foundCount = (Filter-Path $targetList ).Length
if ( "${targetCount}" -eq "${foundCount}" ) {
$global:leptonInstallType="${installType}"
}
}
$checkLocalFiles = @(
"userChrome.css",
"userContent.css",
"icons"
)
$checkReleaseFiles = @(
"user.js"
"chrome\userChrome.css"
"chrome\userContent.css"
"chrome\icons"
)
function Check-InstallTypes() {
Check-InstallType $checkLocalFiles "Local"
Check-InstallType $checkReleaseFiles "Release"
Lepton-OkMessage "Checked install type: ${leptonInstallType}"
if ( "${leptonInstallType}" -eq "Network" ) {
Select-Distribution
}
if ( "${leptonInstallType}" -eq "Local" ) {
if ( Test-Path -Path ".git" -PathType "Container" ) {
Select-Distribution
git checkout "${leptonBranch}"
}
}
}
#== Custom Install =============================================================
$customFiles = @(
"user-overrides.js",
"userChrome-overrides.css",
"userContent-overrides.css"
)
$localCustomFiles = $customFiles.Clone()
$customFileExist = $false
function Check-CustomFiles() {
$global:localCustomFiles = Filter-Path $localCustomFiles
if ( $global:localCustomFiles.Length -gt 0 ) {
$global:customFileExist = $true
Lepton-OKMessage "Check custom file detected"
foreach ( $customFile in $global:localCustomFiles ) {
Write-Host "- ${customFile}"
}
}
}
function Copy-CustomFiles() {
if ( "${customFileExist}" -eq $true ) {
# If Release or Network mode, Local is passed (Already copied)
if ( "${leptonInstallType}" -ne "Local" ) {
foreach ( $profilePath in $global:firefoxProfilePaths ) {
foreach ( $customFile in $global:localCustomFiles ) {
if ( "${customFile}" -eq "user-overrides.js" ) {
Copy-Auto "${customFile}" "${profilePath}\${customFile}"
}
else {
Copy-Auto "${customFile}" "${profilePath}\chrome\${customFile}"
}
}
}
}
Lepton-OKMessage "End custom file copy"
}
}
$customMethod = ""
$customReset = $false
$customAppend = $false
function Set-CustomMethod() {
$local:menuAppend="Append - Maintain changes in existing files and apply custom"
$local:menuOverwrite="Overwrite - After initializing the change, apply only custom"
$local:menuNone="None - Maintain changes in existing files"
$local:menuReset="Reset- Reset to pure lepton theme without custom"
Write-Host "Select custom method"
while ( "${customMethod}" -eq "" ) {
$local:applyMethod = Menu @("${menuAppend}", "${menuOverwrite}", "${menuNone}", "${menuReset}")
switch ( $applyMethod ) {
"${menuAppend}" {
$global:customMethod = "Append"
$global:customAppend = $true
}
"${menuOverwrite}" {
$global:customMethod = "Overwrite"
$global:customReset = $true
$global:customAppend = $true
}
"${menuNone}" {
$global:customMethod = "None"
}
"${menuReset}" {
$global:customMethod = "Reset"
$global:customReset = $true
}
default { Write-Host "Invalid option, reselect please." }
}
}
Lepton-OKMessage "Selected ${customMethod}"
}
$customFileApplied = $false
function Apply-CustomFile() {
Param (
[Parameter(Mandatory=$true, Position=0)]
[string] $profilePath,
[Parameter(Mandatory=$true, Position=1)]
[string] $targetPath,
[Parameter(Mandatory=$true, Position=2)]
[string] $customPath,
[Parameter(Position=3)]
[string] $otherCustomPath = ""
)
$local:leptonDir = "${profilePath}\chrome"
$local:gitDir = "${leptonDir}\.git"
if ( Test-Path -Path "${customPath}" -PathType leaf ) {
$global:customFileApplied = $true
if ( "${customMethod}" -eq "" ) {
Set-CustomMethod
}
if ( "${customReset}" -eq $true ) {
if ( "${targetPath}" -like "*user.js" ) {
Copy-Item -Path "${leptonDir}\user.js" -Destination "${targetPath}" -Force
}
else {
git --git-dir "${gitDir}" --work-tree "${leptonDir}" checkout HEAD -- "${targetPath}"
}
}
if ( "${customAppend}" -eq $true ) {
# Apply without duplication
if ( -not (Write-Output "$(Write-Output $(Get-Content -Path "${targetPath}"))" | Select-String -Pattern "$(Write-Output $(Get-Content -Path "${customPath}"))" -SimpleMatch -Quiet) ) {
Get-Content -Path "${customPath}" | Out-File -FilePath "${targetPath}" -Append
}
}
}
elseif ( "${otherCustomPath}" -ne "" ) {
Apply-CustomFile "${profilePath}" "${targetPath}" "${otherCustomPath}"
}
}
function Apply-CustomFiles() {
foreach ( $profilePath in $global:firefoxProfilePaths ) {
foreach ( $customFile in $global:customFiles ) {
$local:targetFile = $customFile.Replace("-overrides", "")
if ( "${customFile}" -eq "user-overrides.js" ) {
$local:targetPath = "${profilePath}\${targetFile}"
$local:customPath = "${profilePath}\user-overrides.js"
$local:otherCustomPath = "${profilePath}\chrome\user-overrides.js"
Apply-CustomFile "${profilePath}" "${targetPath}" "${customPath}" "${otherCustomPath}"
}
else {
Apply-CustomFile "${profilePath}" "${profilePath}\chrome\${targetFile}" "${profilePath}\chrome\${customFile}"
}
}
}
if ( "${customFileApplied}" -eq $true ) {
Lepton-OKMessage "End custom file applied"
}
}
#== Install Helpers ============================================================
$chromeDuplicate = $false
function Check-ChromeExist() {
if ( (Test-Path -Path "chrome") -and (-Not (Test-Path -Path "chrome\${LEPTONINFOFILE}")) ) {
$global:chromeDuplicate = $true
Move-Auto "chrome" "chrome.bak"
Lepton-OkMessage "Backup files"
}
}
function Check-ChromeRestore() {
if ( "${chromeDuplicate}" -eq $true ) {
Restore-Auto "chrome"
Lepton-OkMessage "End restore files"
}
Lepton-OkMessage "End check restore files"
}
function Clean-Lepton() {
if ( ($chromeDuplicate -ne $true) -and (Test-Path -Path "chrome") ) {
Remove-Item -Path "chrome" -Recurse -Force
}
Lepton-OkMessage "End clean files"
}
function Clone-Lepton() {
Param (
[Parameter(Position=0)]
[string] $branch = ""
)
if ( "${branch}" -eq "" ) {
$branch = "${leptonBranch}"
}
git clone -b "${branch}" https://github.com/black7375/Firefox-UI-Fix.git chrome
if ( -Not (Test-Path -Path "chrome" -PathType "Container") ) {
Lepton-ErrorMessage "Unable to find downloaded files"
}
}
function Copy-Lepton() {
Param (
[Parameter(Position=0)]
[string] $chromeDir = "chrome",
[Parameter(Position=1)]
[string] $userJSPath = "${chromeDir}\user.js"
)
foreach ( $profilePath in $global:firefoxProfilePaths ) {
Copy-Auto "${userJSPath}" "${profilePath}\user.js"
Copy-Auto "${chromeDir}" "${profilePath}\chrome"
}
Lepton-OkMessage "End profile copy"
}
#== Each Install ===============================================================
function Install-Local() {
Copy-Lepton "${currentDir}" "user.js"
Copy-CustomFiles
Apply-CustomFiles
}
function Install-Release() {
Copy-Lepton "chrome" "user.js"
Copy-CustomFiles
Apply-CustomFiles
}
function Install-Network() {
Check-ChromeExist
Check-Git
Clone-Lepton
Copy-Lepton
Copy-CustomFiles
Clean-Lepton
Check-ChromeRestore
Apply-CustomFiles
}
function Install-Profile() {
Lepton-OkMessage "Started install"
switch ( "${leptonInstallType}" ) {
"Local" { Install-Local }
"Release" { Install-Release }
"Network" { Install-Network }
}
Lepton-OkMessage "End install"
}
#** Update *********************************************************************
function Stash-File() {
Param (
[Parameter(Mandatory=$true, Position=0)]
[string] $leptonDir,
[Parameter(Mandatory=$true, Position=1)]
[string] $gitDir
)
if ( "$(git --git-dir "${gitDir}" --work-tree "${leptonDir}" diff --stat)" -ne '' ) {
git --git-dir "${gitDir}" --work-tree "${leptonDir}" stash --quiet
return $true
}
return $false
}
function Restore-File() {
Param (
[Parameter(Mandatory=$true, Position=0)]
[string] $leptonDir,
[Parameter(Mandatory=$true, Position=1)]
[string] $gitDir,
[Parameter(Position=2)]
[string] $gitDirty = "$false"
)
if ( "${gitDirty}" -eq $true ) {
git --git-dir "${gitDir}" --work-tree "${leptonDir}" stash pop --quiet
}
}
function Update-Profile() {
Check-Git
foreach ( $profileDir in $global:firefoxProfileDirPaths ) {
$local:LEPTONINFOPATH = "${profileDir}\${LEPTONINFOFILE}"
$local:LEPTONINFO = Get-IniContent "${LEPTONINFOPATH}"
$local:sections = $LEPTONINFO.Keys
if ( $sections.Length -ne 0 ) {
foreach ( $section in $sections ) {
$local:Type = $LEPTONINFO["${section}"]["Type"]
$local:Branch = $LEPTONINFO["${section}"]["Branch"]
$local:Path = $LEPTONINFO["${section}"]["Path"]
$local:leptonDir = "${Path}\chrome"
$local:gitDir = "${leptonDir}\.git"
if ( "${Type}" -eq "Git" ) {
$local:gitDirty = $(Stash-File "${leptonDir}" "${gitDir}")
git --git-dir "${gitDir}" --work-tree "${leptonDir}" checkout "${Branch}"
git --git-dir "${gitDir}" --work-tree "${leptonDir}" pull --no-edit
Restore-File "${leptonDir}" "${gitDir}" "$gitDirty"
}
elseif ( "${Type}" -eq "Local" -or "${Type}" -eq "Release" ) {
Check-ChromeExist
Clone-Lepton
$firefoxProfilePaths = @("${Path}")
Copy-Lepton
if ( "${Branch}" -eq $null ) {
$Branch = "${leptonBranch}"
}
git --git-dir "${gitDir}" --work-tree "${leptonDir}" checkout "${Branch}"
if ( "${Type}" -eq "Release" ) {
$local:Ver=$(git --git-dir "${gitDir}" describe --tags --abbrev=0)
git --git-dir "${gitDir}" --work-tree "${leptonDir}" checkout "tags/${Ver}"
}
Clean-Lepton
Check-ChromeRestore
}
else {
Lepton-ErrorMessage "Unable to find update type, ${Type} at ${section}"
}
}
}
}
Apply-CustomFiles
}
#** Main ***********************************************************************
function Check-Help {
# Cheap and dirty way of getting the same output as '-?' for '-h' and '-Help'
if ($help) {
Get-Help "$PSCommandPath"
exit 0
}
}
function Install-Lepton {
Verify-PowerShellVersion # Check installed version meets minimum
Check-InstallTypes
Check-ProfileDir $profileDir
Check-ProfileIni
Update-ProfilePaths
Write-LeptonInfo
Check-CustomFiles
if ( $updateMode ) {
Update-Profile
}
else {
Select-Profile $profileName
Install-Profile
}
Write-LeptonInfo
}
Check-Help
Install-Lepton

View File

@ -1,30 +0,0 @@
{
"name": "Lepton",
"version": "5.0.0",
"description": "I respect proton UI and aim to improve it. ",
"author": "alstjr7375 <alstjr7375@daum.net>",
"license": "MPL 2.0",
"private": true,
"repository": {
"type": "git",
"url": "git+https://github.com/black7375/Firefox-UI-Fix.git"
},
"bugs": {
"url": "https://github.com/black7375/Firefox-UI-Fix/issues"
},
"homepage": "https://github.com/black7375/Firefox-UI-Fix#readme",
"scripts": {
"build": "sass --no-source-map src/leptonChrome.scss css/leptonChrome.css && sass --no-source-map src/leptonContent.scss css/leptonContent.css && prettier --write css/leptonChrome.css css/leptonContent.css",
"format": "prettier --write .",
"test": "jest",
"validate": "csstree-validator css/leptonChrome.css; csstree-validator css/leptonContent.css"
},
"devDependencies": {
"csstree-validator": "^3.0.0",
"fast-glob": "^3.2.11",
"jest": "^27.5.1",
"prettier": "^2.6.1",
"sass": "^1.49.0",
"sass-true": "^6.1.0"
}
}

View File

@ -1,16 +0,0 @@
#back-button[disabled="true"] {
margin-left: -36px !important;
opacity: 0 !important;
pointer-events: none;
}
@include Animate {
#back-button {
transition-property: background-color, opacity, margin-left !important;
}
#back-button[disabled="true"] {
transition: background-color 1s var(--animation-easing-function),
opacity 1s var(--animation-easing-function),
margin-left 0.5s ease !important;
}
}

View File

@ -1,30 +0,0 @@
// Based on https://github.com/MrOtherGuy/firefox-csshacks/blob/master/chrome/autohide_bookmarks_toolbar.css
#PersonalToolbar:not([customizing]) {
margin-bottom: var(--uc-bm-hide-height);
opacity: 0;
will-change: margin-bottom, opacity;
@include Option("userChrome.autohide.toolbar_overlap") {
&[collapsed="true"] {
visibility: visible !important;
max-height: unset !important;
}
}
}
#navigator-toolbox:is(:hover, :focus-within) #PersonalToolbar:not([customizing]) {
margin-bottom: 0;
opacity: 1;
}
@include Animate {
#PersonalToolbar:not([customizing]) {
// --ext-theme-background-transition: background-color 0.1s cubic-bezier(.17,.67,.83,.67);
transition: margin-bottom 0.25s var(--animation-easing-function) var(--uc-autohide-toolbar-delay),
opacity 0.25s var(--animation-easing-function) var(--uc-autohide-toolbar-delay),
min-height 170ms ease-out, max-height 170ms ease-out, var(--ext-theme-background-transition) !important;
}
#navigator-toolbox:is(:hover, :focus-within) #PersonalToolbar:not([customizing]) {
transition-delay: 0s !important;
}
}

View File

@ -1,50 +0,0 @@
@include Option("userChrome.autohide.tabbar", "userChrome.autohide.navbar", "userChrome.autohide.bookmarkbar", "userChrome.tabbar.one_liner") {
:root {
--uc-tabbar-height: var(--tab-min-height); // calc((var(--tab-block-margin) * 2) + var(--tab-min-height));
--uc-tabbar-hide-height: calc(-1 * var(--uc-tabbar-height));
--uc-navbar-height: calc(16px + 2 * (var(--toolbarbutton-inner-padding) + var(--toolbarbutton-outer-padding)));
--uc-navbar-hide-height: calc(-1 * var(--uc-navbar-height));
--uc-bm-height: calc(20px + (2 * var(--bookmark-block-padding, 4px))); /* 20px = 16px + (2px * 2) [margin block] */
--uc-bm-hide-height: calc(-1 * var(--uc-bm-height));
@include Option("userChrome.hidden.tabbar") {
@include OneLinerNavbarContent() {
--uc-tabbar-height: 0px;
}
}
@include Option("userChrome.hidden.navbar") {
--uc-navbar-height: 0px;
}
}
}
@include Option("userChrome.autohide.tabbar", "userChrome.autohide.navbar", "userChrome.autohide.bookmarkbar", "userChrome.autohide.infobar") {
:root {
--uc-autohide-toolbar-delay: 600ms;
}
#navigator-toolbox {
position: relative;
z-index: 2;
}
#navigator-toolbox:not(:hover) {
animation: 1s keepfront;
}
@keyframes keepfront {
from {
z-index: 3;
}
to {
z-index: 3;
}
}
#sidebar-box:is(:hover, :focus-within) {
position: relative;
z-index: 2 !important;
}
@include Option("userChrome.autohide.toolbar_overlap") {
@import "toolbar_overlap";
}
}

View File

@ -1,31 +0,0 @@
#nav-bar:not(:hover, :focus-within, [urlbar-exceeds-toolbar-bounds="true"]) #urlbar-container {
-moz-box-ordinal-group: 0;
min-width: calc(var(--uc-navbar-width, 100vw) - ((2 * var(--urlbar-margin-inline)) + var(--uc-window-drag-space-pre, 0px) + var(--uc-navbar-gap, 0px))) !important;
}
@include Option("userChrome.tabbar.one_liner") {
#nav-bar:is(:hover, :focus-within, [urlbar-exceeds-toolbar-bounds="true"]) {
--uc-tabbar-width: calc(100vw - var(--uc-navbar-width-origin));
}
}
@include Animate {
@include OneLiner {
#nav-bar {
transition: margin-inline 0.25s var(--animation-easing-function) var(--uc-autohide-toolbar-delay),
var(--ext-theme-background-transition) !important;
}
#nav-bar:is(:hover, :focus-within, [urlbar-exceeds-toolbar-bounds="true"]) {
transition-delay: 0s !important;
}
}
@include OneLinerNavbarContent {
#urlbar-container {
transition: min-width 0.25s var(--animation-easing-function) var(--uc-autohide-toolbar-delay);
}
#nav-bar:is(:hover, :focus-within, [urlbar-exceeds-toolbar-bounds="true"]) #urlbar-container {
transition-delay: 0s !important;
}
}
}

View File

@ -1,16 +0,0 @@
#forward-button[disabled="true"] {
margin-left: -36px !important;
opacity: 0 !important;
pointer-events: none;
}
@include Animate {
#forward-button {
transition-property: background-color, opacity, margin-left !important;
}
#forward-button[disabled="true"] {
transition: background-color 1s var(--animation-easing-function),
opacity 1s var(--animation-easing-function),
margin-left 0.5s ease !important;
}
}

View File

@ -1,35 +0,0 @@
@include Option("userChrome.autohide.back_button") {
@import "back_button";
}
@include Option("userChrome.autohide.forward_button") {
@import "forward_button";
}
@include Option("userChrome.autohide.page_action") {
@import "page_action";
}
@include Option("userChrome.autohide.tab") {
@import "tab";
}
@import "common";
@include Option("userChrome.autohide.tabbar", "userChrome.autohide.navbar") {
@include Option("userChrome.autohide.tabbar", "userChrome.tabbar.one_liner") {
@import "tabbar";
}
@include Option("userChrome.autohide.navbar", "userChrome.tabbar.one_liner") {
@import "navbar";
}
}
@include Option("userChrome.autohide.bookmarkbar") {
@import "bookmarkbar";
}
@include Option("userChrome.autohide.infobar") {
@import "infobar";
}
@import "sidebar";
@include Option("userChrome.autohide.fill_urlbar") {
@import "fill_urlbar";
}

View File

@ -1,32 +0,0 @@
#tab-notification-deck:not([customizing]) > .notificationbox-stack {
$infobarFixedHeight: 13px + ((1px + 5px) * 2); // button height + (button border + [button.small-button padding]) * 2
// fiexedHeight + (button margin * 2) + messagebar margin
--infobar-height: calc(#{ $infobarFixedHeight } + (var(--infobar-button-vertical-margin, 4px) * 2) + var(--infobar-message-vertical-margin, 8px));
}
#tab-notification-deck:not([customizing]) > .notificationbox-stack[slot="selected"] > notification-message {
--infobar-message-margin: 0 4px calc(-1 * var(--infobar-height));
opacity: 0;
will-change: margin-bottom, opacity;
}
#navigator-toolbox:is(:hover, :focus-within) #tab-notification-deck:not([customizing]) > .notificationbox-stack[slot="selected"] > notification-message {
--infobar-message-margin: 0 4px var(--infobar-message-vertical-margin, 8px);
opacity: 1;
}
@include Option("userChrome.autohide.toolbar_overlap") {
#tab-notification-deck:not([customizing]) {
height: 0;
}
}
@include Animate {
#tab-notification-deck:not([customizing]) > .notificationbox-stack[slot="selected"] > notification-message {
transition: margin-bottom 0.25s var(--animation-easing-function) var(--uc-autohide-toolbar-delay),
opacity 0.25s var(--animation-easing-function) var(--uc-autohide-toolbar-delay),
var(--ext-theme-background-transition) !important;
}
#navigator-toolbox:is(:hover, :focus-within) #tab-notification-deck:not([customizing]) > .notificationbox-stack[slot="selected"] > notification-message {
transition-delay: 0s !important;
}
}

View File

@ -1,29 +0,0 @@
@include OneLinerNavbar {
#nav-bar:not([customizing]) {
margin-bottom: var(--uc-navbar-hide-height);
opacity: 0;
will-change: margin-bottom, opacity;
}
#navigator-toolbox:is(:hover, :focus-within) #nav-bar:not([customizing]) {
margin-bottom: 0;
opacity: 1;
}
}
@include Animate {
#nav-bar:not([customizing]) {
transition: margin-bottom 0.25s var(--animation-easing-function) var(--uc-autohide-toolbar-delay),
opacity 0.25s var(--animation-easing-function) var(--uc-autohide-toolbar-delay),
var(--ext-theme-background-transition) !important;
@include Option("userChrome.autohide.fill_urlbar") {
transition: margin-inline 0.25s var(--animation-easing-function) var(--uc-autohide-toolbar-delay),
margin-bottom 0.25s var(--animation-easing-function) var(--uc-autohide-toolbar-delay),
opacity 0.25s var(--animation-easing-function) var(--uc-autohide-toolbar-delay),
var(--ext-theme-background-transition) !important;
}
}
#navigator-toolbox:is(:hover, :focus-within) #nav-bar:not([customizing]) {
transition-delay: 0s !important;
}
}

View File

@ -1,29 +0,0 @@
#page-action-buttons > .urlbar-page-action {
margin-inline-end: calc(-16px - 2 * var(--urlbar-icon-padding) );
opacity: 0;
}
#urlbar-container:is(:hover, :focus-within) #page-action-buttons > .urlbar-page-action,
.urlbar-page-action[open],
.urlbar-page-action[open] ~ .urlbar-page-action {
margin-inline-end: 0px !important;
opacity: 1;
}
@include Animate {
#page-action-buttons > .urlbar-page-action {
transition: margin-inline-end 50ms var(--animation-easing-function) 900ms,
opacity 1.5s var(--animation-easing-function) 600ms !important;
@include Option("userChrome.decoration.animate") {
transition: margin-inline-end 50ms var(--animation-easing-function) 900ms,
opacity 1.5s var(--animation-easing-function) 600ms,
background-color 2.5s var(--animation-easing-function) !important;
}
}
#urlbar-container:is(:hover, :focus-within) #page-action-buttons > .urlbar-page-action,
.urlbar-page-action[open],
.urlbar-page-action[open] ~ .urlbar-page-action{
transition-delay: 0s !important;
}
}

View File

@ -1,20 +0,0 @@
// Refer variable `src/sidebar/overlap`
@include Option("userChrome.autohide.sidebar") {
#sidebar-box {
min-width: var(--uc-sidebar-width) !important;
max-width: var(--uc-sidebar-width) !important;
}
:root[inFullscreen="true"] #sidebar-box {
min-width: var(--uc-sidebar-activate-width) !important;
max-width: var(--uc-sidebar-activate-width) !important;
}
@include Option("userChrome.sidebar.overlap") {
@import "sidebar/overlap";
}
@include NotOption("userChrome.sidebar.overlap") {
@import "sidebar/static";
}
}

View File

@ -1,34 +0,0 @@
.tabbrowser-tab:not([multiselected]) .tab-content:not(:hover):not([selected]) {
@include NotOption("userChrome.autohide.tab.opacity") {
@include NotOption("userChrome.autohide.tab.blur") {
margin-bottom: -64px;
}
}
@include Option("userChrome.autohide.tab.opacity") {
opacity: 0%;
}
@include Option("userChrome.autohide.tab.blur") {
filter: blur(8px);
}
@include Animate {
transition-timing-function: var(--animation-easing-function);
transition-duration: 0.2s;
transition-delay: 600ms;
&:is(:hover, :focus-within) {
transition-delay: 0s;
}
@include NotOption("userChrome.autohide.tab.opacity") {
@include NotOption("userChrome.autohide.tab.blur") {
transition-property: margin-bottom;
}
}
@include Option("userChrome.autohide.tab.opacity") {
transition-property: opacity;
}
@include Option("userChrome.autohide.tab.blur") {
transition-property: filter;
}
}
}

View File

@ -1,64 +0,0 @@
//-- Mixin ---------------------------------------------------------------------
@mixin _autohide_tabbar() {
@include NotOption("userChrome.tabbar.on_bottom") {
@content;
}
@include Option("userChrome.tabbar.on_bottom") {
> *:not(.titlebar-buttonbox-container) {
@content;
}
}
}
//------------------------------------------------------------------------------
@include OneLinerTabbar {
:root:not([customizing]) #titlebar {
margin-bottom: var(--uc-tabbar-hide-height);
will-change: margin-bottom;
}
#TabsToolbar:not([customizing]) {
@include _autohide_tabbar {
opacity: 0;
will-change: opacity;
}
}
#navigator-toolbox:is(:hover, :focus-within) {
> #titlebar {
margin-bottom: 0px;
}
#TabsToolbar {
@include _autohide_tabbar {
opacity: 1;
}
}
}
}
@include Animate {
#titlebar:not([customizing]) {
transition: margin-bottom 0.25s var(--animation-easing-function) var(--uc-autohide-toolbar-delay),
background-color 1s var(--animation-easing-function) !important;
}
#TabsToolbar:not([customizing]) {
@include _autohide_tabbar {
transition: opacity 0.25s var(--animation-easing-function) var(--uc-autohide-toolbar-delay) !important;
}
}
#navigator-toolbox:is(:hover, :focus-within) {
transition-delay: 0s !important;
> #titlebar:not([customizing]) {
transition-delay: 0s !important;
}
#TabsToolbar:not([customizing]) {
@include _autohide_tabbar {
transition-delay: 0s !important;
}
}
}
}

View File

@ -1,68 +0,0 @@
#navigator-toolbox {
--uc-toolbar-hide-height: calc(-1 * var(--uc-toolbar-height, 0));
margin-bottom: var(--uc-toolbar-hide-height) !important;
@include Animate {
@include Option("userChrome.decoration.animate") {
transition: margin-top 1s ease,
margin-bottom 0.25s var(--animation-easing-function) var(--uc-autohide-toolbar-delay);
&:is(:hover, :focus-within) {
transition-delay: 0s !important;
}
&[inFullscreen="true"] {
transition: margin-top 1.3s var(--animation-easing-function) 50ms,
margin-bottom 0.25s var(--animation-easing-function) var(--uc-autohide-toolbar-delay);
}
}
@include NotOption("userChrome.decoration.animate") {
transition: margin-bottom 0.25s var(--animation-easing-function) var(--uc-autohide-toolbar-delay);
&:is(:hover, :focus-within) {
transition-delay: 0s !important;
}
}
}
&:is(:hover, :focus-within) {
@include Option("userChrome.autohide.tabbar", "userChrome.autohide.navbar") {
@include Option("userChrome.autohide.tabbar", "userChrome.tabbar.one_liner") {
--uc-toolbar-height: var(--uc-tabbar-height);
@include NotOption("userChrome.autohide.navbar") {
@include Option("userChrome.autohide.bookmarkbar") {
--uc-toolbar-height: calc(var(--uc-tabbar-height) + var(--uc-bm-height));
}
}
@include OneLinerNavbar {
@include NotOption("userChrome.autohide.bookmarkbar") {
--uc-toolbar-height: calc(var(--uc-tabbar-height) + var(--uc-navbar-height));
}
@include Option("userChrome.autohide.bookmarkbar") {
--uc-toolbar-height: calc(var(--uc-tabbar-height) + var(--uc-navbar-height) + var(--uc-bm-height));
}
}
}
}
@include NotOption("userChrome.autohide.tabbar") {
@include NotOption("userChrome.autohide.navbar") {
@include Option("userChrome.autohide.bookmarkbar") {
--uc-toolbar-height: var(--uc-bm-height);
}
}
@include Option("userChrome.autohide.navbar", "userChrome.tabbar.one_liner") {
@include OneLinerNavbar {
@include NotOption("userChrome.autohide.bookmarkbar") {
--uc-toolbar-height: var(--uc-navbar-height);
}
@include Option("userChrome.autohide.bookmarkbar") {
--uc-toolbar-height: calc(var(--uc-navbar-height) + var(--uc-bm-height));
}
}
}
}
}
}

View File

@ -1,47 +0,0 @@
#sidebar {
min-width: var(--uc-sidebar-width) !important;
max-width: var(--uc-sidebar-width) !important;
will-change: min-width, max-width;
}
#sidebar-box:is(:hover, :focus-within) > #sidebar {
min-width: var(--uc-sidebar-activate-width) !important;
max-width: var(--uc-sidebar-activate-width) !important;
}
:root[inFullscreen="true"] #sidebar-box {
margin-inline-start: var(--uc-sidebar-activate-width-reverse) !important;
padding-inline-start: var(--uc-sidebar-fullscreen-width);
will-change: padding-inline-start;
&:is(:hover, :focus-within) {
padding-inline-start: var(--uc-sidebar-activate-width);
}
#sidebar-header,
#sidebar {
min-width: calc(var(--uc-sidebar-activate-width)) !important;
max-width: calc(var(--uc-sidebar-activate-width)) !important;
will-change: unset;
}
}
@include Animate {
#sidebar {
transition: min-width 750ms var(--animation-easing-function) var(--uc-autohide-sidebar-delay) !important;
}
#sidebar-box:is(:hover, :focus-within) > #sidebar {
transition-delay: 0ms !important;
}
:root[inFullscreen="true"] #sidebar-box {
transition: padding-inline-start 1s var(--animation-easing-function) var(--uc-autohide-sidebar-delay) !important;
&:is(:hover, :focus-within) {
transition-delay: 0ms !important;
}
}
}

View File

@ -1,52 +0,0 @@
#sidebar-box {
--uc-sidebar-fullscreen-margin: calc(var(--uc-sidebar-fullscreen-width) + var(--uc-sidebar-activate-width-reverse));
overflow: hidden;
will-change: min-width, max-width;
&:is(:hover, :focus-within) {
min-width: var(--uc-sidebar-activate-width) !important;
max-width: var(--uc-sidebar-activate-width) !important;
}
}
:root[inFullscreen="true"] #sidebar-box {
&:not([positionend="true"]) {
margin-inline-start: var(--uc-sidebar-fullscreen-margin) !important;
will-change: margin-inline-start;
&:is(:hover, :focus-within) {
margin-inline-start: 0 !important;
}
}
&[positionend="true"] {
margin-inline-end: var(--uc-sidebar-fullscreen-margin) !important;
will-change: margin-inline-end;
&:is(:hover, :focus-within) {
margin-inline-end: 0 !important;
}
}
}
@include Animate {
#sidebar-box {
transition: min-width 750ms var(--animation-easing-function) var(--uc-autohide-sidebar-delay) !important;
&:is(:hover, :focus-within) {
transition-delay: 0ms !important;
}
}
:root[inFullscreen="true"] #sidebar-box {
transition: margin-inline-start 1s var(--animation-easing-function) var(--uc-autohide-sidebar-delay) !important;
&[positionend="true"] {
transition-property: margin-inline-end !important;
}
&:is(:hover, :focus-within) {
transition-delay: 0ms !important;
}
}
}

View File

@ -1,4 +0,0 @@
#PlacesToolbarItems {
display: flex !important;
justify-content: safe center !important;
}

View File

@ -1,12 +0,0 @@
/*= Centered - Tab ===========================================================*/
@import "tab";
/*= Centered - URL Bar =======================================================*/
@include Option("userChrome.centered.urlbar") {
@import "urlbar";
}
/*= Centered - Bookmark Bar ==================================================*/
@include Option("userChrome.centered.bookmarkbar") {
@import "bookmarkbar";
}

View File

@ -1,10 +0,0 @@
@include Option("userChrome.centered.tab") {
@import "tab/layout";
@include NotOption("userChrome.centered.tab.label") {
@import "tab/content";
}
@include Option("userChrome.centered.tab.label") {
@import "tab/label";
}
}

View File

@ -1,9 +0,0 @@
// Source file https://github.com/MrOtherGuy/firefox-csshacks/tree/master/chrome/urlbar_centered_text.css made available under Mozilla Public License v. 2.0
// See the above repository for updates as well as full license text.
#urlbar:not([focused]) {
#urlbar-input,
.urlbar-input {
text-align: center !important;
}
}

View File

@ -1,4 +0,0 @@
.tab-icon-stack {
-moz-box-flex: 1;
justify-content: end;
}

View File

@ -1,15 +0,0 @@
/* Based on https://github.com/MrOtherGuy/firefox-csshacks/blob/master/chrome/centered_tab_label.css */
.tab-label-container {
display: grid;
justify-content: safe center;
align-items: safe center;
}
.tab-label,
.tab-secondary-label {
overflow: hidden;
}
.tabbrowser-tab[selected]:not(:hover) .tab-label-container:not([textoverflow]),
.tabbrowser-tab:not(:hover,[pinned]) .tab-label-container:not([textoverflow]) {
margin-inline-end: 5px;
}

View File

@ -1,13 +0,0 @@
.tabbrowser-tab[selected]:not(:hover) .tab-label-container:not([textoverflow]),
.tabbrowser-tab:not(:hover,[pinned]) .tab-label-container:not([textoverflow]) {
margin-inline-end: 5px;
}
@include Option("userChrome.tab.close_button_at_hover") {
#tabbrowser-tabs[closebuttons="activetab"] .tabbrowser-tab:not(:hover,[pinned]) .tab-label-container:not([textoverflow]) {
margin-inline-end: 1px;
}
#tabbrowser-tabs[closebuttons="activetab"] .tabbrowser-tab:not([selected]):not(:hover, [pinned]) .tab-label-container label {
padding-inline-end: 18px;
}
}

View File

@ -1,12 +0,0 @@
/*= Theme - Compatibility ====================================================*/
@include Option("userChrome.compatibility.theme") {
@import "theme";
}
/*= OS - Compatibility =======================================================*/
@include Option("userChrome.compatibility.os") {
@import "os";
}
/*= Others - Compatibility ===================================================*/
@import "others";

View File

@ -1,196 +0,0 @@
/*= Windows 10 - Top border of accent color at ESR #358 ======================*/
@include OS($win10) {
:root[sizemode=normal][tabsintitlebar] {
#navigator-toolbox {
border-top: .5px solid rgb(47, 47, 47) !important;
}
&:-moz-window-inactive #navigator-toolbox {
border-top-color: rgb(57, 57, 57) !important;
}
@media (-moz-windows-accent-color-in-titlebar) {
#navigator-toolbox {
@include AccentColor {
border-top-color: $accentColor !important;
}
}
}
}
}
/*= Windows 7, 8 - Tab Bar Background *****************************************/
@include OS($win7, $win8) {
/* Header Color */
:root:not([lwtheme-image]):-moz-lwtheme {
background-color: var(--lwt-accent-color) !important;
}
}
//-- Mixin ---------------------------------------------------------------------
@mixin _os_winTabBarTextColor {
/* background textcolor */
color: var(--lwt-text-color) !important;
}
//------------------------------------------------------------------------------
@include OS($win7) {
#TabsToolbar {
&:-moz-lwtheme {
@include _os_winTabBarTextColor;
}
/* Remove Aero */
/* Original: radial-gradient(eclipse at bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.5) 80%, transparent) */
background-image: unset !important;
}
}
@include OS($win8) {
#navigator-toolbox:-moz-lwtheme {
@include _os_winTabBarTextColor;
}
}
/*= Windows 7, 8 - Menu Active Color =========================================*/
@include OS($win7, $win8) {
menupopup > menu,
menupopup > menuitem,
#context-navigation > menuitem {
border: 1px solid transparent; /* Need reduce 2px at menu */
}
#main-menubar > menu[open="true"],
#main-menubar > menu[_moz-menuactive="true"] {
background-color: -moz-menuhover !important; /* Make to original */
}
:root:-moz-lwtheme #main-menubar > menu[open="true"],
:root:-moz-lwtheme #main-menubar > menu[_moz-menuactive="true"] {
color: inherit !important; /* Original: -moz-menubarhovertext */
background-color: color-mix(in srgb, currentColor 20%, transparent) !important; /* Original: -moz-menuhover */
}
menulist > menupopup > menuitem[_moz-menuactive="true"],
menulist > menupopup > menu[_moz-menuactive="true"] {
background-color: highlight !important;
color: highlighttext !important;
}
#PlacesToolbar menu,
#PlacesToolbar menuitem,
#BMB_bookmarksPopup menu,
#BMB_bookmarksPopup menuitem {
border: none !important; /* Remove border */
&:not([disabled], :active)[_moz-menuactive="true"] {
background-color: var(--button-hover-bgcolor) !important;
}
}
}
//-- Mixin ---------------------------------------------------------------------
@mixin _os_menuEmulate($bgRate, $bdRate) {
menu[_moz-menuactive="true"],
menuitem[_moz-menuactive="true"] {
background-color: color-mix(in srgb, -moz-menuhover $bgRate, transparent) !important;
border-color: color-mix(in srgb, -moz-menuhover $bdRate, transparent) !important;
&[disabled="true"] {
background-color: color-mix(in srgb, currentColor $bgRate, transparent) !important;
border-color: color-mix(in srgb, currentColor $bdRate, transparent) !important;
}
}
}
//------------------------------------------------------------------------------
@include OS($win7) {
@include _os_menuEmulate(5%, 60%);
/* Remove text shadow */
:root:-moz-lwtheme #toolbar-menubar {
text-shadow: unset !important;
/* Original: 0 0 .5em white, 0 0 .5em white, 0 1px 0 rgba(255, 255, 255, .4) */
}
/* Remove Color */
:root:-moz-lwtheme #main-menubar:not(:-moz-window-inactive) {
background-color: unset !important; /* Original: rgba(255, 255, 255, .5) */
color: unset !important; /* Original: black */
}
}
@include OS($win8) {
@include _os_menuEmulate(17%, 80%);
}
@include OS($linux) {
/*= Linux - Global Menubar Active Color ====================================*/
#main-menubar > menu[open="true"],
#main-menubar > menu[_moz-menuactive="true"] {
color: inherit !important; /* Original: -moz-menubarhovertext */
background-color: color-mix(in srgb, currentColor 20%, transparent) !important; /* Original: -moz-menuhover */
}
/*= Linux - Titlebar button at lwtheme =====================================*/
@include NotOption("userChrome.compatiblity.os.linux_non_native_titlebar_button") {
.titlebar-button:-moz-lwtheme {
appearance: auto !important;
}
.titlebar-min:-moz-lwtheme,
.titlebar-max:-moz-lwtheme,
.titlebar-restore:-moz-lwtheme,
.titlebar-close:-moz-lwtheme {
list-style-image: none !important;
}
.titlebar-button:-moz-lwtheme:hover,
.titlebar-button:-moz-lwtheme:hover:active {
background-color: unset !important;
color: unset !important;
}
}
}
/*= Linux - Light System Default Theme's Selected Tab ========================*/
//-- Mixin ---------------------------------------------------------------------
$_os_linuxDefaultShadow: 0 0 4px rgba(128, 128, 142, 0.5);
@mixin _os_linuxDefaultThemeSelectedTab {
#tabbrowser-tabs:not([noshadowfortests])
.tabbrowser-tab:is([visuallyselected="true"], [multiselected])
> .tab-stack
> .tab-background:not(:-moz-lwtheme) {
@content;
}
}
//------------------------------------------------------------------------------
@include OS($linux) {
@include Light {
/* Because of
#TabsToolbar:not([brighttext]) #tabbrowser-tabs:not([noshadowfortests]) .tabbrowser-tab:is([visuallyselected=true], [multiselected]) > .tab-stack > .tab-background {
border: 1px solid var(--tab-line-color, rgba(128,128,142,0.9));
box-shadow: 0 0 4px rgba(128,128,142,0.5);
}
*/
@include _os_linuxDefaultThemeSelectedTab {
box-shadow: $_os_linuxDefaultShadow !important;
}
#TabsToolbar:not([brighttext]) {
@include _os_linuxDefaultThemeSelectedTab {
box-shadow: 0 0 1px var(--tab-line-color, rgba(128, 128, 142, 0.9)), $_os_linuxDefaultShadow !important;
}
}
}
}
/*= Titlebar Container Size at maximized #384 ================================*/
@include Option("userChrome.compatibility.os.windows_maximized") {
@include OS($win) {
:root[tabsintitlebar][sizemode="maximized"] #titlebar {
/* -moz-default-appearance: -moz-window-titlebar */
appearance: none !important;
// Prevent sideeffect #370
padding-top: 8px; // Don't use margin-top for reserved fullscreen animation
}
}
}

View File

@ -1,11 +0,0 @@
@include Option("userChrome.compatibility.panel_cutoff") {
#appMenu-popup panelview {
width: 24.5em !important; /* can modify panel width, Original: 22.5em */
}
}
@include Option("userChrome.compatibility.navbar_top_border") {
#nav-bar {
box-shadow: none !important;
}
}

View File

@ -1,119 +0,0 @@
/*= Hotfix #98 ===============================================================*/
/* Hidden Tab Panel Padding */
#allTabsMenu-hiddenTabsView .all-tabs-item {
margin-inline: 8px;
border-radius: 4px;
}
/*= Remote Tabs Panel's Bottom Padding =======================================*/
#PanelUI-remotetabs #PanelUI-remotetabs-main {
margin-bottom: 6px;
}
/*= Identity Popup Icon Crop =================================================*/
.identity-popup-security-connection.identity-button {
padding-block: 1px !important;
}
/*= Zoom in button's plus icon horizontal rate ===============================*/
#customization-palette-container,
#customization-panel-container,
#widget-overflow-mainView {
#zoom-in-button > .toolbarbutton-icon {
padding-inline-start: 0px !important;
}
}
/*= Icon Fill Color ==========================================================*/
:root:-moz-lwtheme {
/* Auto create --lwt-toolbarbutton-icon-fill-attention, fix for nightly default theme
Default Color: rgb(0,97,224) -> rgb(0, 120, 215) for more light
*/
--lwt-toolbarbutton-icon-fill-attention: var(--button-primary-bgcolor, rgb(0, 120, 215));
}
/*= First visible tab margin at maximized #332 ===============================*/
:root[tabsintitlebar="true"][sizemode="maximized"] #TabsToolbar {
margin-left: -1px;
}
/*= Disabled menu background color ===========================================*/
menuitem,
menu {
&[disabled="true"] {
background-color: transparent !important;
}
}
/*= Remove Tab Border ========================================================*/
@mixin _theme_removeTabBorder($options...) {
%noneBorder {
/* Nigtly 96: 1px solid var(--tab-line-color, rgba(128,128,142,0.9)); */
border: unset !important;
}
@each $prefix, $postfix in $options {
#TabsToolbar#{$prefix}
#tabbrowser-tabs:not([noshadowfortests])
.tabbrowser-tab:is([visuallyselected="true"], [multiselected])
> .tab-stack
> .tab-background#{$postfix} {
@extend %noneBorder;
}
}
}
@include Option("userChrome.tab.connect_to_window") {
/* TARGET: original, photon */
@include _theme_removeTabBorder(
// Light Theme
":not([brighttext])",
// Dark Theme
"[brighttext]" ":-moz-lwtheme"
);
#TabsToolbar #firefox-view-button[open] > .toolbarbutton-icon:-moz-lwtheme,
.tab-background[selected]:-moz-lwtheme {
// Nightly 102: outline: 1px solid var(--lwt-tab-line-color, var(--lwt-tabs-border-color, currentColor));
outline-color: transparent !important;
}
.keyboard-focused-tab > .tab-stack > .tab-background,
.tabbrowser-tab:focus:not([aria-activedescendant]) > .tab-stack > .tab-background {
outline: var(--focus-outline) !important;
}
}
/*= Light Weight Theme =======================================================*/
/* Header Image */
:root[lwtheme-image] {
background-image: var(--lwt-header-image) !important; /* Original: var(--lwt-header-image) */
background-repeat: no-repeat !important;
background-position: right top !important;
// For high-resolution screen's image ratio
@media (min-width: 2500px) {
background-size: contain;
@include Option("userChrome.compatibility.covered_header_image") {
background-size: cover;
}
}
// lwtheme compatibility
#navigator-toolbox:-moz-lwtheme {
background-image: var(--lwt-header-image), var(--lwt-additional-images) !important;
background-repeat: var(--lwt-background-tiling) !important;
background-position: var(--lwt-background-alignment) !important;
background-color: unset !important; /* Original: var(--lwt-accent-color) */
}
}
/* Navbar Border */
#navigator-toolbox:-moz-lwtheme {
--tabs-border-color: rgba(0, 0, 0, 0.3); /* Legacy: v96 */
--lwt-tabs-border-color: rgba(0, 0, 0, 0.3);
}
/*= Findbar Border Color =====================================================*/
html|input.findbar-textbox {
border: 1px solid var(--input-border-color, var(--toolbar-field-border-color, ThreeDShadow)) !important; /* Original: 1px solid var(--input-border-color, var(--toolbar-field-border-color)) */
}

View File

@ -1,196 +0,0 @@
@-moz-document url("about:home"), url("about:newtab") {
/** Activity Stream - Search Focus Border: like URL *************************/
@include Option("userContent.page.field_border") {
/* At DarkMode, Color */
body[style*="--newtab-background-color:rgba(28, 27, 34, 1);"],
body[style*="--newtab-background-color:rgba(42, 42, 46, 1);"],
body[style*="--newtab-background-color: rgba(42, 42, 46, 1);"],
body[style*="--newtab-background-color: rgba(43, 42, 51, 1);"],
body[style*="--newtab-background-color: rgb(43, 42, 51);"] {
/* inner */
--newtab-focus-border: rgba(
0,
221,
255,
0.5
) !important; /* Original: #B5D3FF, Better color-mix(in srgb, #B5D3FF 70%, transparent) */
--newtab-focus-border-selected: var(--newtab-focus-border) !important; /* Original: #B5D3FF */
/* For Nightly */
--newtab-primary-action-background: var(--newtab-focus-border) !important;
@include Option("userContent.page.proton_color") {
@include Option("userContent.page.proton_color.dark_blue_accent") {
--newtab-focus-border: var(--in-content-focus-outline-color) !important;
}
}
}
}
/** Activity Stream - Menu Icons ********************************************/
@include Option("userChrome.icon.context_menu") {
@import "../icons/layout/activity_stream";
@import "../icons/activity_stream";
}
/** Activity Stream - Web Site Icon: full size ******************************/
@include Option("userContent.newTab.full_icon") {
.top-site-outer .tile {
overflow: hidden;
.icon-wrapper {
width: 100% !important; /* Original: 48px */
height: 100% !important; /* Original: 48px */
}
}
}
/** Activity Stream - Animate ***********************************************/
@include Option("userContent.newTab.animate") {
@include Animate {
:root {
--animation-easing-function: cubic-bezier(0.07, 0.95, 0, 1);
}
/* Background */
.top-site-outer,
#searchSubmit,
button.icon,
button.close-button {
transition: background 1.5s var(--animation-easing-function);
&:hover {
transition: background 0.5s var(--animation-easing-function);
}
}
/* Search Bar */
.search-inner-wrapper input {
transition: 1s var(--animation-easing-function);
transition-property: border-color, box-shadow;
}
.search-wrapper .search-inner-wrapper:active input,
.search-wrapper input:focus {
transition: border-color 0.5s var(--animation-easing-function), box-shadow 1s var(--animation-easing-function);
}
@include Option("userContent.page.field_border") {
.search-wrapper .search-inner-wrapper:hover input {
border-color: var(--newtab-primary-action-background) !important;
transition: border-color 0.5s var(--animation-easing-function);
}
}
}
}
/** Activity Stream - Pocket order to last **********************************/
@include Option("userContent.newTab.pocket_to_last") {
.body-wrapper.on {
display: flex;
flex-wrap: wrap;
> .discovery-stream.ds-layout {
flex-basis: 100%;
}
}
.body-wrapper.on > .collapsible-section[data-section-id="topstories"],
.home-section > #pocket-section,
.home-section > .divider,
.home-section > div:not(.section) {
order: 2;
}
}
/** Activity Stream - Home Search Bar looks like proton *********************/
@include Option("userContent.newTab.animate") {
/* Dropdown Colors */
#root {
--newtab-search-background-color: rgba(255, 255, 255, 1); /* Same as light theme's --panel-background */
/* Set search dropdown background */
--newtab-search-dropdown-header-color: var(--newtab-search-background-color) !important;
--newtab-search-dropdown-color: var(--newtab-search-background-color) !important;
--newtab-element-hover-color: color-mix(in srgb, currentColor 9%, transparent) !important;
@include Dark {
/* Default Dark Mode */
--newtab-search-background-color: rgba(66, 65, 77, 1); /* Same as dark theme's --panel-background */
}
}
.activity-stream[lwt-sidebar]:not([style*="--newtab-background-color: rgba(43, 42, 51, 1);"]) #root {
/* Light weight theme */
--newtab-search-background-color: var(--lwt-sidebar-background-color);
}
/* Padding */
#searchSuggestionTable {
border-radius: 4px !important;
-moz-window-shadow: cliprounded;
}
.contentSearchSuggestionTable .contentSearchOneOffItem {
width: 32px !important;
height: 32px !important;
/* Margin */
margin-block: 5px !important;
margin-inline-start: 5px !important;
margin-inline-end: 8px !important;
/* Border */
border-radius: 4px !important;
border-image: none !important; /* Original: linear-gradient(transparent 18%, var(--newtab-border-secondary-color) 18%, var(--newtab-border-secondary-color) 82%, transparent 82%) 1; */
border-inline-end: none !important; /* Original: 1px solid; */
}
#contentSearchSettingsButton::before {
content: url("chrome://global/skin/icons/settings.svg") !important;
display: -moz-inline-box;
/* Color */
-moz-context-properties: fill, fill-opacity !important;
fill: currentColor !important;
/* Align */
margin-inline-end: 5px;
vertical-align: -25%;
}
/* Pointer */
.contentSearchSuggestionTable .contentSearchOneOffItem,
#contentSearchSettingsButton {
cursor: pointer;
}
/*- Fix Color For Nightly ------------------------------------------------*/
.contentSearchSuggestionTable,
.contentSearchHeaderRow,
.contentSearchHeader,
.contentSearchSuggestionsContainer {
color: var(--newtab-text-primary-color) !important;
background: var(--newtab-search-background-color) !important;
}
.contentSearchSuggestionTable {
.contentSearchSuggestionRow.selected,
.contentSearchSettingsButton:hover {
color: var(--newtab-text-primary-color) !important;
}
.contentSearchSuggestionRow.selected,
.contentSearchSettingsButton:hover,
.contentSearchOneOffItem.selected {
background: var(--newtab-element-hover-color) !important;
}
.contentSearchSuggestionRow.selected:active,
.contentSearchOneOffItem:active {
background: var(--newtab-element-active-color) !important;
}
.contentSearchSuggestionRow.selected .historyIcon {
fill: var(--newtab-icon-secondary-color) !important;
}
}
}
}

View File

@ -1,14 +0,0 @@
@-moz-document url("chrome://browser/content/places/places.xhtml"),
url("about:downloads") {
@import "../icons/layout/menu_contents";
/*= Context Menu ===========================================================*/
@include Option("userChrome.icon.context_menu") {
/* Icon lists */
@import "../icons/context_menu/downloads";
@import "../icons/context_menu/place";
}
@include Option("userChrome.icon.global_menu") {
@import "../icons/library";
}
}

View File

@ -1,5 +0,0 @@
@include Dark {
@import "dark_mode/addons_org";
@import "dark_mode/support_org";
@import "dark_mode/accounts_com";
}

View File

@ -1,7 +0,0 @@
@-moz-document url-prefix("about:downloads") {
@include Animate {
@include Option("userChrome.decoration.download_panel") {
@import "../decoration/download_panel";
}
}
}

View File

@ -1,114 +0,0 @@
@-moz-document url-prefix("about:neterror"),
url("about:restartrequired"), url("chrome://browser/content/aboutRestartRequired.xhtml"),
url("about:sessionrestore"), url("chrome://browser/content/aboutSessionRestore.xhtml")
{
/* Illustrations Position */
#errorPageContainer,
.description-wrapper {
min-height: 300px;
background-position: left center;
background-repeat: no-repeat;
background-size: 38%;
}
#errorPageContainer {
display: flex;
flex-direction: column;
}
.description-wrapper {
padding-inline-start: 38%;
}
/* Container */
.container {
min-width: var(--in-content-container-min-width); /* 13em */
max-width: var(--in-content-container-max-width); /* 52em */
}
/* Text Position */
#text-container {
margin: auto;
padding-inline-start: 38%;
}
}
//-- Mixin ---------------------------------------------------------------------
@mixin _backgroundImage($imgURL, $important: false) {
background-image: url($imgURL) if($important, !important, null);
@content;
}
@mixin _errorContainerImage($imgURL) {
#errorPageContainer {
@include _backgroundImage($imgURL) {
@content;
}
}
}
@mixin _errorDescriptionImage($imgURL) {
.description-wrapper {
@include _backgroundImage($imgURL) {
@content;
}
}
}
@mixin _errorTitleImage($imgURL) {
@media (min-width: 970px) {
.title {
@include _backgroundImage($imgURL, true) {
@content;
}
}
}
}
//------------------------------------------------------------------------------
@-moz-document url-prefix("about:neterror?e=connectionFailure"),
url-prefix("about:neterror?e=netInterrupt"),
url-prefix("about:neterror?e=netTimeout"),
url-prefix("about:neterror?e=netReset"),
url-prefix("about:neterror?e=netOffline"),
url("about:restartrequired"), url("chrome://browser/content/aboutRestartRequired.xhtml")
{
@include _errorContainerImage("../icons/error-connection-failure.svg");
}
@-moz-document url-prefix("about:neterror?e=dnsNotFound") {
@include _errorContainerImage("../icons/error-server-not-found.svg");
}
@-moz-document url-prefix("about:neterror?e=malformedURI") {
@include _errorContainerImage("chrome://browser/skin/illustrations/error-malformed-url.svg");
}
@-moz-document url-prefix("about:neterror?e=clockSkewError"),
url-prefix("about:neterror?e=nssFailure") {
@include _errorContainerImage("../icons/blue-berror.svg") {
background-size: 18.5em;
}
}
@-moz-document url("about:sessionrestore"), url("chrome://browser/content/aboutSessionRestore.xhtml")
{
@include _errorDescriptionImage("../icons/error-session-restore.svg");
}
@-moz-document url-prefix("about:neterror?e=fileNotFound") {
@include _errorTitleImage("chrome://global/skin/icons/info.svg");
#text-container {
padding-inline-start: 0;
}
}
@-moz-document url-prefix("about:tabcrashed") {
@include _errorTitleImage("chrome://browser/skin/tab-crashed.svg");
}
@-moz-document url("about:robots"), url("chrome://browser/content/aboutRobots.xhtml")
{
@include _errorTitleImage("chrome://browser/content/aboutRobots-icon.png");
}
@-moz-document url("about:welcomeBack"), url("chrome://browser/content/aboutWelcomeBack.xhtml")
{
@include _errorTitleImage("../icons/welcome-back.svg");
}

View File

@ -1,5 +0,0 @@
@-moz-document url-prefix("about:"),
url-prefix("chrome://browser/content/places/places.xhtml"),
regexp("^(((jar:)?file:\/\/\/)|(chrome:\/\/)).*\/$") {
@import "../theme/monospace";
}

View File

@ -1,30 +0,0 @@
@-moz-document url-prefix("about:"),
url-prefix("chrome://browser/content/places/places.xhtml"),
url-prefix("https://addons.mozilla.org"),
url-prefix("https://support.mozilla.org"),
url-prefix("https://accounts.firefox.com"),
url-prefix("view-source"),
regexp("^(((jar:)?file:\/\/\/)|(chrome:\/\/)).*\/$") {
@import "../theme/proton_color";
@include Option("userContent.page.proton_color.dark_blue_accent") {
@include Dark {
@import "../theme/dark_blue_color";
:host, :root {
@include DarkBlueContent;
}
}
}
@include Option("userContent.page.proton_color.system_accent") {
:host, :root {
@include AccentColor {
--in-content-primary-button-text-color: #{$accentTextColor} !important;
}
--in-content-primary-button-background: Highlight !important;
--in-content-primary-button-background-hover: color-mix(in srgb, black 10%, Highlight) !important;
--in-content-primary-button-background-active: color-mix(in srgb, black 20%, Highlight) !important;
}
}
}

View File

@ -1,30 +0,0 @@
/*= Common contents ==========================================================*/
@import "proton_contents/proton_commons";
/*= Field Border =============================================================*/
@include Option("userContent.page.field_border") {
@include Animate {
@import "proton_contents/field_border";
}
}
/*= View Source ==============================================================*/
@import "proton_contents/view_source";
/*= Directory View ===========================================================*/
@import "proton_contents/directory_view";
/*= about:plugins ============================================================*/
@import "proton_contents/about_plugins";
/*= about:cache ==============================================================*/
@import "proton_contents/about_cache";
/*= about:checkerboard =======================================================*/
@import "proton_contents/about_checkerboard";
/*= about:memory =============================================================*/
@import "proton_contents/about_memory";
/*= chrome://browser/content/places/places.xhtml =============================*/
@import "../library/contents";

View File

@ -1,243 +0,0 @@
/* Control Bar Size */
@include Option("userContent.player.size") {
#controlsContainer {
// --button-size: 32px !important; /* Original: 30px */ Disabled for issue #404
--controlBar-height: 40px; /* Original: 40px, Replace to this value */
.touch {
--button-size: 48px !important; /* Original: 40px */
--controlBar-height: 52px; /* Original: 52px */
}
.controlBar {
height: var(--controlBar-height) !important; /* Original: 40px */
}
}
.videocontrols[inDOMFullscreen] {
#controlsContainer {
--button-size: 64px !important; /* Original: 30px */
--track-size: 6px !important; /* Original: 5px, Touch: 7px */
--thumb-size: 15px !important; /* Original: 13px, Touch: 16px */
--controlBar-height: 64px; /* Original: 40px */
.touch {
--button-size: 72px !important; /* Original: 40px */
--controlBar-height: 64px; /* Original: 52px */
}
.controlBar {
padding-bottom: 8px !important;
}
}
}
}
/* Control Bar UI */
@include Option("userContent.player.ui") {
audio {
--duration-color: #929292; /* Like Original */
--media-background: rgba(26,26,26,.8); /* Like Original */
border-radius: 8px;
--box-shadow1: rgba(14,13,26,.12);
--box-shadow2: rgba(7,48,114,.12);
--box-shadow3: rgba(34,0,51,.04);
box-shadow: 0 5px 10px -3px var(--box-shadow1), 0 3px 16px 2px var(--box-shadow2),
0 8px 12px 1px var(--box-shadow3);
/* Or: 0 2px 15px rgba(0,0,0,.1); */
@include Dark {
--box-shadow1: rgba(249, 249, 250, 0.12);
--box-shadow2: rgba(91, 91, 102, 0.12);
--box-shadow3: rgba(82, 82, 94, 0.04);
}
}
video {
--duration-color: #eee;
--media-background: linear-gradient(transparent, rgba(26,26,26,.85));
@include Contrast {
--duration-color: #929292; /* Like Original */
--media-background: rgba(26,26,26,.8); /* Like Original */
}
}
#controlsContainer {
.controlBar {
background: var(--media-background) !important;
}
.duration {
color: var(--duration-color) !important; /* Original: #929292 */
}
}
@include Option("userContent.player.ui.twoline") {
audio {
// All thing like original
/* #controlsContainer .controlBar */
--controlBar-flex-wrap: unset;
--controlBar-justify-content: center;
--controlBar-align-content: unset;
--controlBar-twoline-more-height: 0px;
--controlBar-padding-inline: 9px;
/* #controlsContainer .scrubberStack */
/* .scrubberStack - Vertical */
--scrubberStack-order: unset;
--scrubberStack-height: 100%;
--scrubberStack-transform: none;
/* .scrubberStack - Horizontal */
--scrubberStack-margin-inline: 9px;
/* #controlsContainer .positionDurationBox */
--positionDurationBox-flex-grow: unset;
--positionDurationBox-margin-left: unset;
--positionDurationBox-text-align: center;
/* Others */
--button-outside-margin: 0;
}
video {
/* #scrubber .scrubber::-moz-range-thumb */
--scrubber-thumb-scale: 0;
--scrubber-thumb-color: #48a0f7; /* Color as hover, Prevent flashing */
/* .progressBar::-moz-progress-bar */
--progressBar-scale: 0.65;
/* #controlsContainer .controlBar */
--controlBar-flex-wrap: wrap;
--controlBar-justify-content: space-between;
--controlBar-align-content: space-around;
--controlBar-padding-inline: 0 !important; /* Original: 9px */
/* #controlsContainer .scrubberStack */
/* .scrubberStack - Vertical */
--scrubberStack-order: -1;
/* .scrubberStack - Horizontal */
--scrubberStack-flex-basis: auto;
--scrubberStack-twoline-width: 100%;
--scrubberStack-margin-inline: 0;
/* #controlsContainer .positionDurationBox */
--positionDurationBox-flex-grow: 2;
--positionDurationBox-margin-left: 15px;
--positionDurationBox-text-align: left;
/* Others */
--duration-color: #dadada;
--button-outside-margin: 9px;
}
.scrubber:not(:hover)::-moz-range-thumb {
transform: scale(var(--scrubber-thumb-scale, 1));
background-color: var(--scrubber-thumb-color, currentColor) !important;
}
.progressStack {
transform-origin: bottom;
transform: scaleY(var(--progressBar-scale, 1));
}
.scrubber:hover::-moz-range-thumb,
.progressContainer:hover .progressStack {
transform:scale(1);
}
#controlsContainer {
.controlBar {
flex-wrap: var(--controlBar-flex-wrap);
justify-content: var(--controlBar-justify-content);
align-content: var(--controlBar-align-content);
height: calc(var(--controlBar-height) + var(--controlBar-twoline-more-height, var(--thumb-size))) !important;
padding-inline: var(--controlBar-padding-inline) !important; /* Original: 9px */
}
.scrubberStack {
/* Vertical */
order: var(--scrubberStack-order);
height: var(--scrubberStack-height, var(--thumb-size)) !important;
transform: var(--scrubberStack-transform, translateY(calc(var(--thumb-size) / 2)));
/* Horizontal */
flex-basis: var(--scrubberStack-flex-basis, calc(var(--scrubberStack-width) - 18px)) !important;
width: var(--scrubberStack-twoline-width, var(--scrubberStack-width));
margin-inline: var(--scrubberStack-margin-inline) !important;
}
.positionDurationBox {
flex-grow: var(--positionDurationBox-flex-grow);
margin-left: var(--positionDurationBox-margin-left);
text-align: var(--positionDurationBox-text-align) !important;
}
}
#playButton {
margin-left: var(--button-outside-margin) !important;
}
#fullscreenButton {
margin-right: var(--button-outside-margin) !important;
}
}
}
@include Option("userContent.player.icon") {
#controlsContainer .fullscreenButton {
background-image: url("../icons/enter-fullscreen.svg") !important;
&[fullscreened] {
background-image: url("../icons/exit-fullscreen.svg") !important;
}
}
}
@include Option("userContent.player.noaudio") {
#controlsContainer .muteButton[noAudio] {
/* Remove volume button at noAudio */
display: none !important;
}
}
/* Click to play UI */
@include Option("userContent.player.click_to_play") {
#controlsContainer {
.clickToPlay {
cursor: pointer;
opacity: 0.65 !important;
}
.controlsSpacerStack:hover > .clickToPlay {
opacity: 0.85 !important;
&:hover {
opacity: 1 !important;
fill: #48a0f7 !important; /* color as .scrubber */
}
}
}
}
/* Animation */
@include Option("userContent.player.animate") {
@include Animate {
/* Control Bar */
#controlsContainer .controlBar {
transition: transform 350ms ease;
opacity: 1 !important;
&[hidden] {
transform: translateY(100%);
transition: transform 350ms ease-in-out, opacity 1s ease 100ms !important;
opacity: 0 !important;
.progressBar,
.bufferBar {
display: unset !important;
opacity: 0.55;
transition: opacity 150ms ease 50ms;
}
}
}
/* Two line Control Bar */
.scrubber::-moz-range-thumb,
.progressStack {
transition:transform .1s cubic-bezier(0, 0, 0.2, 1);
}
/* Click to play */
#controlsContainer .clickToPlay {
transition: opacity 150ms ease-in-out, fill 150ms ease-in-out;
}
}
}

View File

@ -1,149 +0,0 @@
/*= Accounts.com ===========================================================*/
@-moz-document url-prefix("https://accounts.firefox.com")
{
/* Basic */
body {
color: var(--in-content-page-color) !important;
background: var(--in-content-page-background) !important;
}
.button.primary-button,
.button[type="submit"]:not(.secondary-button),
.settings-button.primary-button,
.settings-button[type="submit"]:not(.secondary-button),
button.primary-button,
button[type="submit"]:not(.secondary-button) {
color: var(--in-content-primary-button-text-color) !important;
background: var(--in-content-primary-button-background) !important;
}
/* Text */
header h1,
.info,
.info a,
.prefillEmail,
.faint a:hover,
.cta-neutral:hover {
color: var(--in-content-page-color) !important;
}
#main-content.panel a,
.links a,
.link-blue,
.text-blue-500 {
color: var(--in-content-link-color) !important;
}
.link-blue:hover {
color: var(--in-content-link-color-hover) !important;
}
.signed-in-email-message,
.verification-email-message,
.verification-message,
.verification-recovery-code-message,
.verification-totp-message,
.input-row input[type="email"],
.input-row input[type="number"],
.input-row input[type="password"],
.input-row input[type="tel"],
.input-row input[type="text"],
.input-row input::placeholder,
.firefox-family-services > ul > .firefox-service,
.faint,
.faint a,
.text-grey-400 {
color: var(--in-content-deemphasized-text) !important;
}
/* Background */
.flex .flex-wrap {
background: var(--in-content-page-background);
}
.password-row .show-password-label {
background-color: unset !important;
}
#main-content,
.modal,
.firefox-family-services,
.input-row input[type="email"],
.input-row input[type="number"],
.input-row input[type="password"],
.input-row input[type="tel"],
.input-row input[type="text"],
header,
.bg-white:not(nav) {
background: var(--in-content-box-background) !important;
}
#suggest-sync,
.cta-neutral {
background: var(--in-content-button-background) !important;
}
.cta-neutral:hover,
.bg-grey-50:hover,
.hover\:bg-grey-100:hover {
background: var(--in-content-button-background-hover) !important;
}
.text-blue-500 .cta-neutral,
.text-blue-500 .bg-grey-50,
.text-blue-500 .hover\:bg-grey-100 {
background: var(--in-content-button-background) !important;
}
.hover\:bg-grey-200:hover {
background: var(--in-content-button-background-active) !important;
}
.button.primary-button:hover:enabled,
.button[type="submit"]:not(.secondary-button):hover:enabled,
.settings-button.primary-button:hover:enabled,
.settings-button[type="submit"]:not(.secondary-button):hover:enabled,
button.primary-button:hover:enabled,
button[type="submit"]:not(.secondary-button):hover:enabled {
background: var(--in-content-primary-button-background-hover) !important;
}
.tooltip,
.tooltip::before {
background: var(--in-content-danger-button-background) !important;
}
/* Fill */
.dismiss,
#about-mozilla,
.show-password-label,
footer a[data-testid="link-mozilla"] {
filter: invert(95%) !important;
}
header button svg,
header .rounded svg,
#service svg {
filter: brightness(15) !important;
}
button.relative,
#fxa-settings nav svg {
filter: brightness(2) !important;
}
/* Others */
.input-row input[type="email"],
.input-row input[type="number"],
.input-row input[type="password"],
.input-row input[type="tel"],
.input-row input[type="text"],
.unit-row-hr .border-grey-100 {
border-color: var(--in-content-border-color) !important;
}
.input-row input[type="email"]:hover,
.input-row input[type="number"]:hover,
.input-row input[type="password"]:hover,
.input-row input[type="tel"]:hover,
.input-row input[type="text"]:hover {
border-color: var(--in-content-border-hover) !important;
}
#main-content {
box-shadow: 0 12px 18px 2px rgba(249, 249, 250, 0.12), 0 6px 22px 4px rgba(91, 91, 102, 0.12),
0 6px 10px -4px rgba(82, 82, 94, 0.04) !important;
}
.input-row input[type="email"]:focus,
.input-row input[type="number"]:focus,
.input-row input[type="password"]:focus,
.input-row input[type="tel"]:focus,
.input-row input[type="text"]:focus {
box-shadow: 0 0 0 3px color-mix(in srgb, var(--in-content-primary-button-background-hover) 80%, transparent) !important;
}
}

View File

@ -1,545 +0,0 @@
/*= Addons.org =============================================================*/
@-moz-document url-prefix("https://addons.mozilla.org")
{
/* Basic */
.Page-content,
.SecondaryHero,
body,
main[aria-label="Content"] {
color: var(--in-content-page-color) !important;
background: var(--in-content-page-background) !important;
}
/* Text */
input,
textarea,
select,
.AutoSearchInput-query,
.AutoSearchInput-suggestions-list,
.Page-content h1,
.Page-content h2,
.SearchResult-link,
.Home-SubjectShelf-link:link,
.Home-SubjectShelf-link:visited,
.DropdownMenuItem-link a,
.DropdownMenuItem-link button,
.Select,
.Badge,
.Notice-generic,
.Notice-genericWarning,
.Notice-button,
.Paginate .Button.Paginate-item:first-child,
.Paginate .Button.Paginate-item:last-child,
.Paginate .Button.Paginate-item--current-page,
.Button--neutral,
.blog-entry-title,
.blogpost-nav * {
color: var(--in-content-text-color) !important;
}
.AutoSearchInput-suggestions-item:is(:active, :focus, :hover),
.AutoSearchInput-suggestions-item--highlighted,
.SecondaryHero-message-link,
.SecondaryHero-module-link,
.Card-contents a:not(.Button),
.Card-footer-link a,
.Card-shelf-footer-in-header a,
.SearchResult-link:is(:active, :focus, :hover),
.SearchResult:hover .SearchResult-link,
.Home-SubjectShelf-link:is(:active, :focus, :hover),
.DropdownMenuItem-link a:is(:active, :focus, :hover),
.DropdownMenuItem-link button:is(:active, :focus, :hover),
.AddonMeta .MetadataCard-title a:is(:active, :hover),
.AddonMeta .MetadataCard-title a.AddonMeta-reviews-content-link:is(:active, :hover),
.AddonMeta .MetadataCard-content a:is(:active, :hover),
.AddonMeta .MetadataCard-content a.AddonMeta-reviews-content-link:is(:active, :hover),
.Addon-summary a,
.RatingsByStar-count a:hover,
.RatingsByStar-star a:hover,
.Paginate .Button.Paginate-item:not(:first-child, :last-child, .Paginate-item--current-page),
.AddonTitle-author a,
.PermissionsCard-learn-more,
.DefinitionList a,
.ShowMoreCard-contents a,
.AddonDescription-contents a,
.AddonTitle a,
.TooltipMenu-opener,
.LanguageTools .Card-contents a,
.Button--primary,
.blog-entry-read-more-link,
.blogpost-nav-next.blogpost-nav-no-prev:hover p,
.blogpost-content-wrapper p a,
.blogpost-nav-prev:hover p,
.blogpost-nav-next:hover p {
color: var(--in-content-link-color) !important;
}
.SearchResult--meta-section,
.MetadataCard-title,
.MetadataCard-title a,
.MetadataCard-content a,
.CollectionSort-label,
.SearchResult-summary,
.AddonMeta .MetadataCard-content a.AddonMeta-reviews-content-link,
.AddonMeta .MetadataCard-title a.AddonMeta-reviews-content-link,
.PermissionsCard-subhead--optional,
.PermissionsCard-subhead--required,
.Definition-dt,
.RatingsByStar-count a,
.RatingsByStar-star a,
.Paginate-page-number,
.AddonSummaryCard-addonAverage,
.AddonReviewCard-authorByLine,
.UserReview-byLine,
.UserReview-reply-header,
.Home-heroHeader-subtitle,
.blog-entry-date,
.blogpost-breadcrumb *,
.AddonTitle-author,
.ExpandableCard-ToggleLink,
.SearchFilters-label,
.PromotedBadge-label--line {
color: var(--in-content-deemphasized-text) !important;
}
.PromotedBadge-label--recommended {
color: color-mix(in srgb, #712b00 15%, #ff9400) !important;
}
/* Background */
.Button--action,
.DevHub-Navigation ul li.DevHub-Navigation-Register .Button,
.DevHub-MyAddons-item-buttons-submit .Button {
color: var(--in-content-primary-button-text-color) !important;
background: var(--in-content-primary-button-background) !important;
}
select,
.Select,
.Button--primary,
.Button--neutral,
.Button--neutral:link,
.Notice-button,
.AMInstallButton .AMInstallButton-loading-button {
background-color: var(--in-content-button-background) !important;
}
.Button--primary:hover,
.Button--neutral.Button--micro:not(.Button--disabled):hover,
.Button--neutral:not(.Button--disabled):hover,
.Notice-button:hover {
background: var(--in-content-button-background-hover) !important;
}
.Button--action.Button--micro:not(.Button--disabled):hover,
.Button--action:not(.Button--disabled):hover,
.DevHub-Navigation ul li.DevHub-Navigation-Register .Button:hover,
.DevHub-MyAddons-item-buttons-submit .Button:hover {
background: var(--in-content-primary-button-background-hover) !important;
}
.ShowMoreCard-contents::after {
background: linear-gradient(hsla(0, 0%, 100%, 0), var(--in-content-table-background)) !important;
}
input,
textarea,
.AutoSearchInput-query,
.AutoSearchInput-suggestions-list,
.SecondaryHero-module,
.Card-header,
.Card-contents,
.CardList ul > li,
.AddonsCard--horizontal ul.AddonsCard-list .SearchResult-wrapper:is(:focus, :hover),
.Paginate,
.LandingPage-header,
.DropdownMenu-items,
.DropdownMenu-items::after,
.MetadataCard,
.AddonsCard-list,
.Card-footer,
.StaticAddonCard,
.blogpost-nav,
.blogpost-nav * {
background: var(--in-content-table-background) !important;
}
.Paginate .Button.Paginate-item:is(:active, :hover) {
background: var(--in-content-button-background-hover) !important;
}
.Notice-generic,
.Notice-genericWarning {
background: color-mix(
in srgb,
var(--in-content-page-background) 40%,
var(--in-content-table-background)
) !important;
}
.LanguageTools-header-row {
color: var(--in-content-table-header-color) !important;
background: var(--in-content-table-header-background) !important;
}
.LanguageTools-table.responsiveTable tbody tr:nth-child(2n) {
background-color: var(--in-content-box-background-odd) !important;
}
/* Fill */
.Icon-arrow-blue.SearchSuggestion-icon-arrow {
filter: hue-rotate(330deg) brightness(1.3) !important;
}
.SecondaryHero-module-icon {
filter: invert(85%) !important;
}
.Icon-magnifying-glass,
.Notice-icon {
filter: invert(65%) !important;
}
.PermissionsCard-learn-more .Icon,
.Permission .Icon {
filter: invert(100%) !important;
}
.Icon-heart {
filter: brightness(0) !important;
}
/* Others */
.DropdownMenu-items {
box-shadow: 0 0 2px var(--in-content-border-color) !important;
}
input,
textarea,
select {
border-color: var(--in-content-box-border-color) !important;
}
.UserProfileEdit input:disabled,
.UserProfileEdit textarea:disabled {
background-color: var(--in-content-box-background-odd) !important;
}
.AutoSearchInput-query {
border: 1px solid var(--in-content-table-background) !important;
}
.AutoSearchInput-query:is(:hover, :focus),
.UserProfileEditNotifications .UserProfileEditNotification-input:checked ~ .UserProfileEditNotification-checkbox {
border-color: var(--in-content-primary-button-background) !important;
}
.UserProfileEdit input:focus,
.UserProfileEdit textarea:focus,
.AutoSearchInput-query:focus,
.UserProfileEditNotifications .UserProfileEditNotification-input:focus ~ .UserProfileEditNotification-checkbox {
box-shadow: inset 0 0 0 1px var(--in-content-primary-button-background),
0 0 0 1px var(--in-content-primary-button-background), 0 0 0 4px rgba(0, 211, 255, 0.3) !important;
}
.PromotedBadge-link--line {
border-color: var(--in-content-deemphasized-text) !important;
}
.PromotedBadge-link--line:hover {
border-color: var(--in-content-button-background-hover) !important;
}
.blog-entry-read-more-link {
border-color: var(--in-content-link-color) !important;
}
.blogpost-nav-arrow-left .cls-1,
.blogpost-nav-arrow-right .cls-1 {
stroke: var(--in-content-text-color) !important;
}
/* /developers/ */
.DevHub-Navigation-Logo > .Logo::before {
-moz-context-properties: fill !important;
fill: var(--in-content-primary-button-background) !important;
background-image: url("../icons/addons-logo.svg") !important;
}
.DevHub-Navigation,
.DevHub-submit-addon,
.DevHub-get-involved,
.DevHub-MyAddons > * {
background: var(--in-content-page-background) !important;
color: var(--in-content-page-color) !important;
}
.DevHub-Footer {
background: var(--in-content-box-background) !important;
color: var(--in-content-page-color) !important;
}
.DevHub-callout-box {
background: var(--in-content-box-background-odd) !important;
color: var(--in-content-page-color) !important;
}
.DevHub-Navigation.scheme-light ul li a,
.DevHub-Footer-sections-header,
.DevHub-Footer-section h4,
.DevHub-Footer-section p,
.DevHub-content-copy h2 {
color: var(--in-content-page-color) !important;
}
.DevHub-content-copy p,
.DevHub-callout-box p {
color: var(--in-content-deemphasized-text) !important;
}
.DevHub-Banner a,
.DevHub-Footer a,
.DevHub-MyAddons-list a,
.DevHub-MyAddons-item-buttons-all,
.DevHub-content-copy a,
.DevHub-callout-box a {
color: var(--in-content-link-color) !important;
}
body:is(.developer-hub, .statistics) {
#main-wrapper,
.menu-nav > ul > li > ul::after,
.menu-nav > ul > li:hover::after,
.menu-nav > ul > li > ul,
.menu-nav > ul > li > ul a,
.menu-nav em,
.primary, .secondary,
.dashboard .listing .item {
background: var(--in-content-page-background) !important;
color: var(--in-content-page-color) !important;
}
/* Elements */
.menu-nav > ul > li > ul a:hover,
.install-note,
.modal,
.popup {
background: var(--in-content-box-background-odd) !important;
}
.menu-nav > ul > li > ul::after,
.menu-nav > ul > li > ul {
box-shadow: 0 0 3px var(--in-content-border-color) !important;
}
/* .developer-hub */
#footer {
background: linear-gradient(
to bottom,var(--in-content-page-background) 0,
var(--in-content-page-background) 123px,
#0c99d5 123px,
#0c99d5 200px,
var(--in-content-page-background) 200px,
rgba(12,153,213,0) 400px
) !important;
}
/* Text */
/* .developer-hub */ #homepage h2,
/* .developer-hub */ header h2,
.primary h2,
h1,
hgroup h2.addon,
hgroup h2.collection,
h3,
.results h4,
.dashboard .listing .item,
.dashboard .listing .item:hover h5,
.secondary .addon-status,
.secondary .addon-status .addon-details li.addon-listed-status,
#refine-results h5,
.island.criteria li,
.two-up div {
color: var(--in-content-page-color) !important;
}
.item-actions h5, .item-actions > ul, .item-actions > ul > li,
.dashboard .listing .item .item-actions a,
.edit-media-details,
.devhub-form table th,
#recent-activity .listing .item .timestamp,
#upload-file .upload-status #uploadstatus,
#addon-validator-suite,
#addon-validator-suite .msg > *,
.island.criteria li a.inactive {
color: var(--in-content-deemphasized-text) !important;
}
section[role="main"] a,
header a,
.more-info,
.primary a,
.secondary a,
.submission-type-tabs a,
.popup a,
.dashboard .listing .item:hover a,
.dashboard .listing .item:hover .item-actions a,
#upload-status-results.status-pass strong,
#addon-validator-suite a,
#create-addon a,
.html-support {
color: var(--in-content-link-color) !important;
}
.dashboard .listing .item:hover a {
color: var(--in-content-link-color-hover) !important;
}
.dashboard .listing .item .item-info .downloads,
.dashboard .listing .item .item-info .price,
.dashboard .listing .item .item-info .users {
color: var(--green-60) !important;
}
.status-admin-disabled b,
.status-disabled b,
.status-incomplete b,
.status-purgatory b {
color: var(--red-60) !important;
}
.submission-type-tabs a.active,
.island.criteria li.selected a {
color: var(--orange-50) !important;
}
/* Background */
.secondary .addon-status,
.devhub-form .item,
#icons_default,
.listing .item,
.object-lead,
#addon-validator-suite .results .tier-results,
#addon-validator-suite .suite,
#addon-validator-suite .suite-container {
border-color: var(--in-content-border-color) !important;
background: var(--in-content-box-background) !important;
}
.highlight,
.listing-footer, .tab-wrapper .fm-control {
color: var(--in-content-page-color) !important;
background: var(--in-content-box-info-background) !important;
}
.submission-type-tabs a,
#head-chart {
background: var(--in-content-page-background) !important;
}
#head-chart {
rect {
fill: var(--in-content-page-background) !important;
}
text{
fill: var(--in-content-deemphasized-text) !important;
}
.highcharts-legend .highcharts-legend-item:hover text {
fill: var(--in-content-page-color) !important;
paint-order: stroke !important;
stroke: var(--in-content-page-color) !important;
stroke-width: 0.4px !important;
stroke-linecap: butt !important;
stroke-linejoin: miter !important;
}
.highcharts-legend .highcharts-legend-item path[stroke="#CCC"] ~ text {
fill: #CCC !important;
}
}
#icons_default li a:hover,
#side-nav .active a,
span.tip,
.addon-submission-process .tip,
.devhub-form .tip,
a.remove,
span.remove,
ul.errorlist li span.tip {
background-color: var(--in-content-box-info-background) !important;
}
a.remove:hover, span.tip:hover {
background-color: var(--in-content-primary-button-background-hover) !important;
}
/* Border */
.submission-type-tabs a,
.devhub-sidebar,
.devhub-sidebar div.item,
.devhub-form .listing-footer {
border-color: var(--in-content-border-color) !important;
}
#background-wrapper,
#main-wrapper {
border-color: var(--in-content-page-background) !important;
}
.item-actions a.more-actions:hover:after,
.item-actions button.link.more-actions:hover:after,
#change-locale::after {
border-top-color: var(--in-content-link-color) !important;
}
install-note::after, .popup::after {
border-bottom-color: var(--in-content-box-background) !important;
}
.install-note::before, .popup::before {
border-bottom-color: grey !important;
}
#refine-results, .other-categories,
.versions .primary > .warning {
border-color: transparent !important;
}
.results {
border-color: var(--in-content-box-background-odd) !important;
background: transparent !important;
}
.results-inner {
border-color: var(--in-content-border-color) !important;
background: var(--in-content-border-color) !important;
}
/* Othres */
#promos .view-button a,
#upload-file-finish.button,
#upload-file-widget .button.prominent,
.button,
.cta a.button:link,
.cta a.button:visited,
.linux .button.linux,
.mac .button.mac,
.other .button.bsd,
.other .button.solaris,
.sidebar a.button,
.sidebar button,
.theme .choices button,
.theme-queue a.button,
.theme-queue button,
.windows .button.windows,
a.button:link,
a.button:visited,
a.delete-button.delete-addon,
button,
button.button,
input:not(.upvotes):not(.downvotes)[type="submit"] {
color: var(--in-content-primary-button-text-color) !important;
background: var(--in-content-primary-button-background) !important;
&:is(.selected, :focus, :hover) {
background: var(--in-content-primary-button-background-hover) !important;
}
}
.edit_with_prefix span,
.edit_with_suffix span {
border-color: var(--in-content-box-border-color) !important;
background-color: var(--in-content-box-background-odd) !important;
color: var(--in-content-deemphasized-text) !important;
padding-block: 3px !important;
cursor: not-allowed;
}
.devhub-form .item_wrapper input[type="email"] {
appearance: none !important;
padding: 2px 5px;
border: 1px solid;
}
#addon-validator-suite .suite-summary {
color: var(--in-content-deemphasized-text) !important;
background: var(--in-content-button-background) !important;
border-top-color: var(--in-content-border-color) !important;;
}
#addon-validator-suite .context {
border-color: var(--in-content-box-border-color) !important;
background-color: var(--in-content-button-background) !important;
background: var(--in-content-table-background) !important;
}
}
}

View File

@ -1,181 +0,0 @@
/*= Support.org ============================================================*/
@-moz-document url-prefix("https://support.mozilla.org")
{
/* Basic */
:root {
--color-blue-06: var(--in-content-link-color) !important;
--color-blue-07: var(--in-content-link-color-hover) !important;
--color-blue-09: var(--in-content-link-color-active) !important;
--page-bg: var(--in-content-page-background) !important;
--color-white: var(--in-content-page-background) !important;
--color-shade-bg: var(--in-content-page-background) !important;
--color-marketing-gray-02: var(--card-outline-color) !important;
--color-inverse-bg: var(--in-content-page-color) !important;
--color-inverse: var(--in-content-page-background) !important;
--color-text: var(--in-content-page-color) !important;
--color-moz-text: var(--in-content-page-color) !important;
--color-moz-heading: var(--in-content-page-color) !important;
--color-text-light: var(--in-content-deemphasized-text) !important;
--color-link: var(--in-content-link-color) !important;
--color-success: var(--green-70) !important;
--color-warning: var(--yellow-80) !important;
--color-error: var(--red-60) !important;
--color-error-hover: var(--red-50) !important;
--color-moz-heading: #fff;
--color-moz-inverse-bg: var(red) !important;
--focus-shadow: 0 0 0 4px color-mix(in srgb, var(--in-content-primary-button-background) 30%, transparent),
0 0 0 2px var(--in-content-primary-button-background-active);
}
.warning {
--color-link: rgb(55, 255, 255) !important;
}
body,
#main-content,
#instant-search-content,
#mzp-c-menu-panel-help,
.mzp-c-navigation,
.kbox-container {
color: var(--in-content-page-color) !important;
background: var(--in-content-page-background) !important;
}
#editor {
border: 2px solid var(--in-content-border-color) !important;
}
.CodeMirror-linenumbers {
background: var(--in-content-table-background);
}
.CodeMirror-lines {
color: var(--in-content-deemphasized-text) !important;
background: var(--in-content-page-background) !important;
}
.CodeMirror-scroll {
background: var(--in-content-page-background) !important;
}
/* Text */
.mzp-c-menu-category .mzp-c-menu-title,
.mzp-c-menu-item .mzp-c-menu-item-link,
.mzp-c-menu-item .mzp-c-menu-item-link > *,
.mzp-c-menu-item .mzp-c-menu-item-list a,
#doc-content .menu,
.document--content .menu,
.forum--entry-content .menu,
.tag-name a {
color: var(--in-content-page-color) !important;
}
.ts-select-trigger,
input[type="date"],
input[type="email"],
input[type="number"],
input[type="password"],
input[type="search"],
input[type="tel"],
input[type="text"],
input[type="time"],
input[type="url"],
select,
textarea,
#doc-content .button,
#doc-content .key,
.document--content .button,
.document--content .key,
.forum--entry-content .button,
.forum--entry-content .key {
color: var(--in-content-deemphasized-text) !important;
}
.tag-list a {
color: var(--color-marketing-gray-10) !important;
}
.tag-list a:hover,
.sidebar-nav a:hover {
color: var(--color-link) !important;
}
.tag-list li {
background: var(--in-content-page-color) !important;
}
.tag-list li:hover {
background: var(--in-content-deemphasized-text) !important;
}
#remaining-characters {
color: var(--in-content-page-color) !important;
}
/* Background */
.sidebar-nav.topics,
.sidebar-nav.topics > li {
background: var(--in-content-page-background) !important;
}
.mzp-c-menu-panel {
color: var(--in-content-page-color) !important;
background: var(--in-content-page-background) !important;
}
.mzp-c-menu-list-list,
.mzp-c-menu-list-list:hover {
color: var(--in-content-page-color) !important;
background: var(--in-content-box-background) !important;
}
.mzp-c-menu-list-item:focus,
.mzp-c-menu-list-item:hover {
background: var(--in-content-button-background-hover) !important;
}
.cm-bold {
color: var(--in-content-page-color) !important;
}
/* Fill */
.sumo-nav--logo,
.sumo-nav--search-button,
.sumo-nav--toggle-button,
.card:not(.is-inverse) .card--icon-sm,
.mzp-c-menu-item-icon,
.mzp-c-menu-button-close,
.topic-article--icon,
.card--topic > .card--icon,
.mzp-c-details .is-summary button::before,
details .is-summary button::before,
summary::before,
.icon-button > button,
.search-button {
filter: invert(95%) !important;
}
button.markup-toolbar-button {
/*using 0.5 because in middle*/
filter: invert(0.5) !important;
}
/* Others */
.support-callouts > .card.is-inverse {
background: #20133a !important;
}
.support-callouts > .card.is-inverse :is(h1, h2, h3, h4, h5, h6, li, p) {
color: var(--in-content-page-color) !important;
}
.sumo-button.secondary-button {
border-color: transparent !important;
}
.mzp-c-menu-panel {
border-color: var(--in-content-button-background-hover) !important;
}
.mzp-c-menu-item:is(:focus, :hover, :active) .mzp-c-menu-item-link .mzp-c-menu-item-title {
border-color: var(--in-content-page-color) !important;
}
@media screen and (min-width: 768px) {
.mzp-c-menu-panel {
box-shadow: 0 16px 16px -16px rgba(255, 255, 255, 0.3) !important;
}
}
.card--product,
.card--topic,
.card--article {
box-shadow: 0 5px 10px -3px rgba(249, 249, 250, 0.12), 0 3px 16px 2px rgba(91, 91, 102, 0.12),
0 8px 12px 1px rgba(82, 82, 94, 0.04) !important;
}
}

View File

@ -1,11 +0,0 @@
@-moz-document url-prefix("about:cache") {
table {
padding: 0 !important;
}
th,
td {
padding: 4px !important;
text-align: match-parent !important;
}
}

View File

@ -1,8 +0,0 @@
@-moz-document url-prefix("about:checkerboard") {
#canvas {
border: 1px solid var(--in-content-border-color) !important;
}
#excludePageFromZoom {
vertical-align: bottom !important;
}
}

View File

@ -1,10 +0,0 @@
@-moz-document url-prefix("about:memory") {
.opsRow,
.section {
background-color: var(--in-content-box-background) !important;
color: var(--in-content-page-color) !important;
}
.opsRowLabel input {
vertical-align: bottom !important;
}
}

View File

@ -1,6 +0,0 @@
@-moz-document url-prefix("about:plugins") {
.notice {
background: var(--in-content-box-background) !important;
border: 1px solid var(--in-content-border-color) !important;
}
}

View File

@ -1,13 +0,0 @@
@-moz-document url-prefix("about:sync-log"),
regexp("^(((jar:)?file:\/\/\/)|(chrome:\/\/)).*\/$") {
body {
background-color: var(--in-content-box-background) !important;
margin: 4em auto !important; /* Override to default */
}
thead a {
color: var(--in-content-page-color) !important;
}
td ::before {
vertical-align: top !important;
}
}

View File

@ -1,8 +0,0 @@
@-moz-document url-prefix("about:") {
html|input:is([type="email"], [type="tel"], [type="text"], [type="password"], [type="url"], [type="number"]):not(#newtab-search-text):hover,
html|textarea:hover,
xul|search-textbox:hover {
border-color: var(--in-content-focus-outline-color) !important;
transition: border-color 0.5s var(--animation-easing-function);
}
}

View File

@ -1,232 +0,0 @@
/*= abouts' common ===========================================================*/
@-moz-document url-prefix("about:plugins"),
url-prefix("about:cache"),
url-prefix("about:checkerboard"),
url-prefix("about:sync-log"),
url-prefix("about:memory"),
regexp("^(((jar:)?file:\/\/\/)|(chrome:\/\/)).*\/$") {
/* Base */
html,
body {
font: message-box !important;
appearance: none !important;
background-color: var(--in-content-page-background) !important;
color: var(--in-content-page-color) !important;
}
body {
font-size: 15px !important;
font-weight: normal !important;
margin: 0 !important;
}
h1 {
line-height: 1.2 !important;
}
h2 {
line-height: 1.4em !important;
}
/* Link */
a {
color: var(--in-content-link-color) !important;
}
a:hover,
.text-link:hover {
color: var(--in-content-link-color-hover) !important;
text-decoration: underline !important;
}
a:visited {
color: var(--in-content-link-color-visited) !important;
}
a:hover:active,
.text-link:hover:active {
color: var(--in-content-link-color-active) !important;
}
a:-moz-focusring,
.text-link:-moz-focusring {
outline: 2px solid var(--in-content-focus-outline-color) !important;
outline-offset: 1px !important;
border-radius: 4px !important;
}
/* Button */
button {
font: inherit;
}
button,
select,
input[type="color"] {
appearance: none !important;
min-height: 32px !important;
color: var(--in-content-button-text-color, inherit) !important;
border: 1px solid transparent !important; /* shows up in high-contrast mode */
border-radius: var(--in-content-button-border-radius) !important;
background-color: var(--in-content-button-background) !important;
font-weight: 400 !important;
padding: var(--in-content-button-vertical-padding) var(--in-content-button-horizontal-padding) !important;
text-decoration: none !important;
margin: 4px 8px !important;
/* Ensure font-size isn't overridden by widget styling (e.g. in forms.css) */
font-size: 1em !important;
}
button {
font-weight: 600 !important;
/* Use the same margin of other elements for the alignment */
margin-inline: 4px !important;
min-width: 6.3em !important;
}
/* Medium and small buttons get sized to 7/14 and 6/12px padding (when adding
* the 1px border): */
button.medium {
--in-content-button-vertical-padding: 6px;
--in-content-button-horizontal-padding: 13px;
min-height: 28px !important;
font-size: 0.95em !important;
}
button.small {
--in-content-button-vertical-padding: 5px;
--in-content-button-horizontal-padding: 11px;
min-height: 24px !important;
font-size: 0.9em !important;
}
::-moz-focus-inner {
border: none !important;
}
button:-moz-focusring {
box-shadow: none !important;
outline: 2px solid var(--in-content-focus-outline-color) !important;
outline-offset: 2px !important;
}
button:enabled:hover,
input[type="color"]:hover {
background-color: var(--in-content-button-background-hover) !important;
color: var(--in-content-button-text-color-hover) !important;
border-color: transparent !important;
}
button:enabled:hover:active,
input[type="color"]:enabled:hover:active {
background-color: var(--in-content-button-background-active) !important;
}
button:disabled,
input[type="color"]:disabled {
opacity: 0.4 !important;
}
button[autofocus],
button[type="submit"],
button.primary {
background-color: var(--in-content-primary-button-background) !important;
color: var(--in-content-primary-button-text-color) !important;
}
button[autofocus]:enabled:hover,
button[type="submit"]:enabled:hover,
button.primary:enabled:hover {
background-color: var(--in-content-primary-button-background-hover) !important;
color: var(--in-content-primary-button-text-color-hover) !important;
}
button[autofocus]:enabled:hover:active,
button[type="submit"]:enabled:hover:active,
button.primary:enabled:hover:active {
background-color: var(--in-content-primary-button-background-active) !important;
}
/* Checkbox */
input[type="checkbox"] {
margin-block: 2px !important;
}
input[type="checkbox"] {
appearance: none !important;
height: 16px !important;
width: 16px !important;
border: 1px solid var(--checkbox-border-color) !important;
background-color: var(--checkbox-unchecked-bgcolor) !important;
border-radius: 2px !important;
margin-inline: 0 6px !important;
flex-shrink: 0 !important; /* avoid shrinking inside flex container */
}
input[type="checkbox"]:enabled:hover {
background-color: var(--checkbox-unchecked-hover-bgcolor) !important;
}
input[type="checkbox"]:enabled:hover:active {
background-color: var(--checkbox-unchecked-active-bgcolor) !important;
}
input[type="checkbox"]:checked {
border-color: var(--checkbox-checked-border-color) !important;
background-color: var(--checkbox-checked-bgcolor) !important;
background-image: url("chrome://global/skin/icons/check.svg") !important;
background-position: center !important;
background-repeat: no-repeat !important;
-moz-context-properties: fill !important;
fill: currentColor !important;
color: var(--checkbox-checked-color) !important;
/* Style the button also when printing with "Print Backgrounds" unchecked */
color-adjust: exact !important;
}
input[type="checkbox"]:enabled:checked:hover {
background-color: var(--checkbox-checked-hover-bgcolor) !important;
}
input[type="checkbox"]:enabled:checked:hover:active {
background-color: var(--checkbox-checked-active-bgcolor) !important;
}
/* Textarea */
input:is([type="email"], [type="tel"], [type="text"], [type="password"], [type="url"], [type="number"]),
textarea {
appearance: none !important;
border: 1px solid var(--in-content-box-border-color) !important;
border-radius: 4px !important;
color: inherit !important;
background-color: var(--in-content-box-background) !important;
}
input:is([type="email"], [type="tel"], [type="text"], [type="password"], [type="url"], [type="number"]),
textarea {
font-family: inherit !important;
font-size: inherit !important;
padding: 8px !important;
margin: 2px 4px !important;
}
input:is([type="email"], [type="tel"], [type="text"], [type="password"], [type="url"], [type="number"]):focus,
textarea:focus,
search-textbox[focused],
tree:focus-visible,
richlistbox:focus-visible {
border-color: transparent !important;
outline: 2px solid var(--in-content-focus-outline-color) !important;
outline-offset: -1px !important; /* Prevents antialising around the corners */
}
input:is([type="email"], [type="tel"], [type="text"], [type="password"], [type="url"], [type="number"]):-moz-ui-invalid,
textarea:-moz-ui-invalid {
border-color: transparent !important;
outline: 2px solid var(--in-content-border-invalid) !important;
outline-offset: -1px !important; /* Prevents antialising around the corners */
}
input:is([type="email"], [type="tel"], [type="text"], [type="password"], [type="url"], [type="number"]):disabled,
textarea:disabled,
search-textbox[disabled="true"] {
opacity: 0.4 !important;
}
/* Table */
table {
width: 100% !important;
}
}
@-moz-document url-prefix("about:plugins"),
url-prefix("about:cache"),
url-prefix("about:checkerboard") {
table {
border: 1px solid var(--in-content-table-border-color) !important;
border-radius: 0 !important;
}
}
@-moz-document url-prefix("about:cache"),
url-prefix("about:checkerboard") {
th,
td {
border: 1px solid var(--in-content-table-border-color) !important;
}
th {
background-color: var(--in-content-table-header-background) !important;
color: var(--in-content-table-header-color) !important;
}
}

View File

@ -1,59 +0,0 @@
@-moz-document url-prefix("view-source") {
:root {
background-color: var(--in-content-page-background) !important; /* Original: white */
color: var(--in-content-page-color) !important; /* Original: black */
/* Colors */
--view-source-green: var(--green-80);
--view-source-purple: #800080; /* Like alphenglow */
}
@include Dark {
:root {
--view-source-green: var(--green-60);
--view-source-purple: #c68aff;
}
}
pre[id]::before,
span[id]::before {
color: color-mix(
in srgb,
var(--in-content-page-color) 70%,
var(--in-content-page-background)
) !important; /* Original: #ccc */
}
.highlight .start-tag,
.highlight .end-tag {
color: var(--view-source-purple) !important; /* Original: purple */
}
.highlight .comment {
color: var(--view-source-green) !important; /* Original: green */
}
.highlight .cdata {
color: var(--in-content-border-invalid) !important; /* Original: #CC0066 */
}
.highlight .doctype {
color: #4682b4 !important; /* Original: steelblue */
}
.highlight .pi {
color: orchid !important; /* Original: orchid */
}
.highlight .entity {
color: #ff4500 !important; /* Original: #FF4500 */
}
.highlight .attribute-name {
color: var(--view-source-green) !important; /* Original: black */
}
.highlight .attribute-value {
color: var(--in-content-link-color) !important; /* Original: blue */
}
.highlight .markupdeclaration {
color: #4682b4 !important; /* Original: steelblue */
}
.highlight .error,
.highlight
.error
> :-moz-any(.start-tag, .end-tag, .comment, .cdata, .doctype, .pi, .entity, .attribute-name, .attribute-value) {
color: var(--in-content-error-text-color) !important; /* Original: red */
}
}

View File

@ -1,202 +0,0 @@
/*- Background Color -------------------------------------------------------*/
//-- Mixin ---------------------------------------------------------------------
@mixin _animate_bgColor($duration, $presudo: "") {
button#{$presudo},
toolbarbutton#{$presudo},
stack#{$presudo},
vbox#{$presudo},
.toolbarbutton-icon#{$presudo},
#tabs-newtab-button#{$presudo} > .toolbarbutton-icon {
transition: background-color $duration var(--animation-easing-function) !important;
}
}
//------------------------------------------------------------------------------
@include _animate_bgColor(1s);
@include _animate_bgColor(0.25s, ":hover");
@include OS($linux) {
.tabbrowser-tab:is([visuallyselected], [multiselected], [selected]) .tab-background:not(:-moz-lwtheme) {
transition: background-image 0.25s var(--animation-easing-function) !important;
}
}
.subviewbutton {
/* treechildren::-moz-tree-row: Can't apply
menu, menuitem is not apply.
*/
transition: background-color 0.5s var(--animation-easing-function) !important;
&:hover {
transition: background-color 0.1s var(--animation-easing-function) !important;
}
}
/*- Pinned Tab -------------------------------------------------------------*/
#tabbrowser-tabs:not([movingtab]) {
.tabbrowser-tab {
&:not([collapsed]) {
/* -moz-box-flex may be caused #tabbrowser-tabs[closebuttons] */
transition: -moz-box-flex 0.2s var(--animation-easing-function),
margin-inline-start 0.2s var(--animation-easing-function), min-width 0.1s ease-out, max-width 0.1s ease-out !important;
}
&[pinned] {
transition: -moz-box-flex 0.2s var(--animation-easing-function),
margin-inline-start 0.2s var(--animation-easing-function) !important;
}
}
.tab-content {
&::before,
&::after {
transition: width 0.2s var(--animation-easing-function), transform 0.2s var(--animation-easing-function) !important;
}
.tab-label-container {
transition: width 0.3s var(--animation-easing-function) !important;
}
.tab-icon-image {
transition: all 0.3s var(--animation-easing-function) !important;
}
}
}
/*- URL / Search Bar -------------------------------------------------------*/
#urlbar-background,
#searchbar {
transition: border-color 1s var(--animation-easing-function), background-color 1.5s var(--animation-easing-function) !important;
&:hover {
transition: border-color 0.5s var(--animation-easing-function), background-color 1s var(--animation-easing-function) !important;
}
}
/* Buttons in URL bar */
#tracking-protection-icon-container,
#identity-icon-box,
#identity-permission-box,
#notification-popup-box,
#page-action-buttons > .urlbar-page-action {
transition: background-color 2.5s var(--animation-easing-function) !important;
&:hover {
transition: background-color 1.25s var(--animation-easing-function) !important;
}
}
/*- Border - Other Fields --------------------------------------------------*/
#search-box,
xul|search-textbox.tabsFilter,
#editBMPanel_namePicker,
#editBMPanel_tagsField,
.findbar-container .findbar-textbox {
transition: border-color 1s var(--animation-easing-function) !important;
&:hover {
transition: border-color 0.5s var(--animation-easing-function) !important;
}
}
/*- Sidebar ----------------------------------------------------------------*/
@include NotOption("userChrome.decoration.disable_sidebar_animate") {
#sidebar-box {
/* like #sidebar-box > #sidebar */
min-width: 14em;
width: 18em;
max-width: 36em;
/* Animation */
transition: margin-inline-start 0.25s var(--animation-easing-function), opacity 0.25s ease-in-out,
visibility 0s linear !important;
will-change: margin-inline-start, opacity, visibility;
&[hidden="true"] {
display: -moz-box !important;
margin-inline-start: -18em;
opacity: 0;
visibility: collapse;
transition-delay: 0s, 0s, 0.25s !important;
}
}
}
/*- Full Screen ------------------------------------------------------------*/
#navigator-toolbox {
/* Full screen out */
transition: margin-top 1s ease;
transform-origin: top;
&[inFullscreen="true"] {
/* Full screen enter */
animation-duration: 1s;
animation-name: fullscreen;
animation-timing-function: ease;
/* Full screen navbar not hover */
// transition: margin-top 0.3s var(--animation-easing-function) 50ms;
transition: margin-top 1.3s var(--animation-easing-function) 50ms;
&:hover {
// Full screen navbar hover
// transition-duration: 1.5s; // Not works, because !important
// transition-delay: 0.5s;
margin-top: 0 !important;
}
}
}
@keyframes fullscreen {
from {
margin-top: 0;
}
/* Dont' use `to`: Depending on density */
}
/*- Expand - Synced Tabs ---------------------------------------------------*/
@-moz-document url("chrome://browser/content/syncedtabs/sidebar.xhtml")
{
.item-tabs-list {
transition: transform 0.2s ease-out, opacity 0.2s ease-out;
transform: translateY(0%);
opacity: 1;
max-height: 100%;
}
.item.client.closed .item-tabs-list {
display: flex !important;
transition: transform 0.2s ease-out, opacity 0.2s ease-out,
max-height 0.25s cubic-bezier(0.82, 0.085, 0.395, 0.895) 0.05s;
visibility: hidden;
transform: translateY(-100%);
opacity: 0;
max-height: 0;
}
}
/*- Arrow - Synced Tabs ----------------------------------------------------*/
@-moz-document url("chrome://browser/content/syncedtabs/sidebar.xhtml")
{
/* treechildren::-moz-tree-twisty: Can't apply */
#template-container .item.client {
.item-twisty-container {
transition: transform 0.1s var(--animation-easing-function) !important;
}
&.closed .item-twisty-container {
transform: rotate(-90deg);
background-image: url("chrome://global/skin/icons/arrow-down-12.svg") !important;
&:dir(rtl) {
transform: rotate(90deg);
}
}
}
}
/*- Arrow - Edit Bookmark Popup --------------------------------------------*/
#editBookmarkPanelRows .expander-up .button-icon,
#editBookmarkPanelRows .expander-down .button-icon {
transition: transform 0.1s var(--animation-easing-function) !important;
}
#editBookmarkPanelRows .expander-up {
list-style-image: url("chrome://global/skin/icons/arrow-down.svg") !important;
.button-icon {
transform: rotate(180deg);
}
}

View File

@ -1,33 +0,0 @@
#appMenu-proton-update-banner,
#appMenu-fxa-status2:not([fxastatus]) > #appMenu-fxa-label2,
#appMenu-zoomReduce-button2,
#appMenu-zoomReset-button2,
#appMenu-zoomEnlarge-button2,
#appMenu-fullscreen-button2,
#panelMenu_showAllBookmarks,
#PanelUI-historyMore,
#appMenuClearRecentHistory:not([disabled]),
#appMenu-library-recentlyClosedTabs > .restoreallitem.panel-subview-footer-button,
#appMenu-library-recentlyClosedWindows > .restoreallitem.panel-subview-footer-button,
#BMB_viewBookmarksSidebar,
#BMB_bookmarksShowAllTop,
#BMB_bookmarksShowAll,
#import-button,
menuitem.openintabs-menuitem,
#downloadsListBox .downloadButton,
#downloadsListBox .download-state[exists],
#downloadsListBox .download-state[exists] .downloadDetails,
#downloadsHistory,
#protections-popup-footer .protections-popup-footer-button,
#protections-popup-multiView .panel-subview-footer-button,
#identity-popup-clear-sitedata-button,
#identity-popup-more-info {
cursor: pointer !important;
}
/* TODO: For now, fxa-menu doesn't show any status.
(JS required, observe .syncNowBtn status)
#PanelUI-fxa-menu-syncnow-button[syncstatus="active"] {
cursor: progress !important;
}
*/

View File

@ -1,21 +0,0 @@
/* Accent Color for downloaded item */
#downloadsListBox .download-state[exists] .downloadDetails {
color: var(--button-primary-bgcolor);
&.downloadDetailsHover {
color: var(--button-primary-hover-bgcolor);
}
}
/* File moved or missing */
#downloadsListBox .download-state:not([exists], [state="0"]) {
.downloadTarget {
text-decoration: line-through;
text-decoration-color: color-mix(in srgb, currentColor 65%, transparent);
&:hover {
text-decoration: none;
}
}
.downloadTypeIcon {
filter: grayscale(100%) !important;
}
}

View File

@ -1,27 +0,0 @@
/*- URL, Search Bar --------------------------------------------------------*/
#urlbar:hover:not([focused="true"]) > #urlbar-background,
#searchbar:hover:not(:focus-within) {
--toolbar-field-border-color: var(--toolbar-field-focus-border-color);
}
/*- Other Fields -----------------------------------------------------------*/
/* Sidebar */
.sidebar-panel[lwt-sidebar] #search-box:hover,
body[lwt-sidebar] xul|search-textbox.tabsFilter:hover {
border-color: var(--lwt-sidebar-highlight-background-color, Highlight) !important;
}
.sidebar-panel:not([lwt-sidebar]) #search-box:hover,
body:not([lwt-sidebar]) xul|search-textbox.tabsFilter:hover {
@include AccentColor {
border-color: $accentColor !important;
}
}
/* Others */
#editBMPanel_namePicker:hover,
#editBMPanel_tagsField:hover,
.findbar-container .findbar-textbox:hover {
@include AccentColor {
--input-border-color: color-mix(in srgb, var(--focus-outline-color, #{$accentColor}) 50%, transparent);
}
}

View File

@ -1,26 +0,0 @@
/*= Cursor Types =============================================================*/
@include Option("userChrome.decoration.cursor") {
@import "cursor";
}
@include Animate {
/*= Field Border ===========================================================*/
@include Option("userChrome.decoration.field_border") {
@import "field_border";
}
/*= Downloads Panel ========================================================*/
@include Option("userChrome.decoration.download_panel") {
@import "download_panel";
}
/*= Animate ================================================================*/
@include Option("userChrome.decoration.animate") {
@import "animate";
}
@include Option("userChrome.decoration.disable_panel_animate") {
:root {
--panelui-subview-transition-duration: 1ms !important; /* Disable top right corner menu sliding animation (0ms will not work!) */
}
}
}

View File

@ -1,9 +0,0 @@
@include Option("userChrome.fullscreen.overlap") {
@include Option("browser.fullscreen.autohide") {
@import "overlap";
}
}
@include Option("userChrome.fullscreen.show_bookmarkbar") {
@import "show_bookmarkbar";
}

View File

@ -1,15 +0,0 @@
:root[sizemode="fullscreen"] #navigator-toolbox {
position: fixed !important; /* Needed for content to take up entire height */
z-index: 1000 !important; /* Puts the UI above the content */
}
:root[sizemode="fullscreen"] :-moz-any(#navigator-toolbox, #titlebar, #nav-bar, #PersonalToolbar) {
width: 100%; /* Makes the UI take up the entire width */
}
@include OS($linux) {
/* Fix transparent backgorund */
:root[tabsintitlebar][sizemode="fullscreen"] #TabsToolbar:not(:-moz-lwtheme) {
appearance: auto !important;
}
}

View File

@ -1,4 +0,0 @@
:root:not([sizemode="fullscreen"]) #PersonalToolbar[initialized="true"]:not([collapsed="true"]),
:root[sizemode="fullscreen"] #PersonalToolbar[initialized="true"] {
visibility: unset !important; /* Makes the bookmarks toolbar visible if enabled */
}

View File

@ -1,91 +0,0 @@
@include OneLinerNavbarContent() {
@include Option("userChrome.hidden.tabbar") {
#TabsToolbar {
display: none !important;
}
}
@include Option("userChrome.hidden.navbar") {
#nav-bar {
visibility: collapse; /* display: none is not work */
}
}
}
@include Option("userChrome.hidden.tab_icon") {
.tabbrowser-tab:not([pinned="true"]) {
@include NotOption("userChrome.hidden.tab_icon.always") {
.tab-icon-image {
display: none;
}
}
@include Option("userChrome.hidden.tab_icon.always") {
.tab-icon-stack {
display: none;
}
}
}
}
@include Option("userChrome.hidden.sidebar_header") {
@include NotOption("userChrome.hidden.sidebar_header.vertical_tab_only") {
#sidebar-header {
display: none !important;
}
}
@include Option("userChrome.hidden.sidebar_header.vertical_tab_only") {
#sidebar-box:is(
[sidebarcommand="treestyletab_piro_sakura_ne_jp-sidebar-action"],
[sidebarcommand="tabcenter-reborn_ariasuni-sidebar-action"],
[sidebarcommand="sidebartabs_asamuzak_jp-sidebar-action"]
) #sidebar-header {
display: none !important;
}
}
}
@include Option("userChrome.hidden.urlbar_iconbox") {
#identity-box[pageproxystate="valid"] {
&.notSecureText #identity-icon-label,
&.chromeUI #identity-icon-box,
&.extensionPage #identity-icon-box {
display: none;
}
&.notSecureText #identity-icon-box {
padding-inline-end: 5px; /* Original: 8px */
}
}
}
#PlacesToolbarItems .bookmark-item {
@include Option("userChrome.hidden.bookmarkbar_icon") {
> .toolbarbutton-icon {
display: none;
}
}
@include Option("userChrome.hidden.bookmarkbar_label") {
> .toolbarbutton-text {
visibility: collapse; /* display: none is not work */
}
}
}
@include Option("userChrome.hidden.disabled_menu") {
menu,
menuitem:not(#context-back, #context-forward) {
&[disabled="true"] {
display: none !important;
}
}
@include NativeMenu {
#context-back,
#context-forward {
&[disabled="true"] {
display: none !important;
}
}
}
}

View File

@ -1,41 +0,0 @@
.context-menu-item span[data-l10n-id="newtab-menu-pin"] {
--menuitem-image: url("../icons/pin-tab.svg");
}
.context-menu-item span[data-l10n-id="newtab-menu-unpin"] {
--menuitem-image: url("../icons/unpin-tab.svg");
}
.context-menu-item span[data-l10n-id="newtab-menu-edit-topsites"] {
--menuitem-image: url("chrome://global/skin/icons/edit.svg");
}
.context-menu-item span[data-l10n-id="newtab-menu-bookmark"] {
--menuitem-image: url("chrome://browser/skin/bookmark.svg");
}
.context-menu-item span[data-l10n-id="newtab-menu-remove-bookmark"] {
--menuitem-image: url("chrome://browser/skin/bookmark-hollow.svg");
}
.context-menu-item span[data-l10n-id="newtab-menu-save-to-pocket"] {
--menuitem-image: url("../icons/pocket-outline.svg");
}
.context-menu-item span[data-l10n-id="newtab-menu-open-file"] {
--menuitem-image: url("../icons/fluid.svg");
}
.context-menu-item span[data-l10n-id="newtab-menu-show-file"] {
--menuitem-image: url("chrome://global/skin/icons/folder.svg");
@include Option("userChrome.icon.library") {
--menuitem-image: url("../icons/folder.svg");
}
}
.context-menu-item span[data-l10n-id="newtab-menu-open-new-window"] {
--menuitem-image: url("chrome://browser/skin/window.svg");
}
.context-menu-item span[data-l10n-id="newtab-menu-open-new-private-window"] {
--menuitem-image: url("chrome://browser/skin/privateBrowsing.svg");
}
.context-menu-item span[data-l10n-id="newtab-menu-dismiss"] {
--menuitem-image: url("chrome://global/skin/icons/delete.svg");
}
.context-menu-item span[data-l10n-id="newtab-menu-delete-history"] {
--menuitem-image: url("../icons/eraser.svg");
}

View File

@ -1,6 +0,0 @@
/** Context Menu - Icons ******************************************************/
@import "context_menu/tab_toolbar.scss";
@import "context_menu/content_area.scss";
@import "context_menu/downloads";
@import "context_menu/place";
@import "context_menu/others";

View File

@ -1,315 +0,0 @@
/** Global Menu ***************************************************************/
/*= menu_FilePopup ===========================================================*/
#menu_newNavigatorTab {
--menuitem-image: url("chrome://browser/skin/new-tab.svg");
}
#menu_newUserContext {
--menuitem-image: url("../icons/container-openin-16.svg");
}
#menu_newNavigator {
--menuitem-image: url("chrome://browser/skin/window.svg");
}
#menu_newPrivateWindow {
--menuitem-image: url("chrome://browser/skin/privateBrowsing.svg");
}
#menu_newFissionWindow {
}
#menu_newNonFissionWindow {
}
#menu_openLocation {
}
#menu_openFile {
--menuitem-image: url("chrome://browser/skin/open.svg");
}
#menu_close {
}
#menu_closeWindow {
}
#menu_savePage {
--menuitem-image: url("chrome://browser/skin/save.svg");
}
#menu_sendLink {
--menuitem-image: url("chrome://browser/skin/mail.svg");
}
menu.share-tab-url-item {
--menuitem-image: url("chrome://browser/skin/share.svg");
}
#menu_printPreview {
}
#menu_print {
--menuitem-image: url("chrome://global/skin/icons/print.svg");
}
#menu_importFromAnotherBrowser {
--menuitem-image: url("chrome://browser/skin/import.svg");
}
#goOfflineMenuitem {
/* checkbox */
--menuitem-image: url("../icons/plug-disconnected.svg");
}
#menu_FileQuitItem {
--menuitem-image: url("../icons/quit.svg");
}
/* Mange Containers */
#menu_newUserContext menupopup menuitem:last-child {
--menuitem-image: url("chrome://global/skin/icons/settings.svg");
}
/*= menu_EditPopup ===========================================================*/
#menu_undo {
--menuitem-image: url("../icons/undo.svg");
}
#menu_redo {
@include Option("userChrome.icon.menu.full") {
--menuitem-image: url("../icons/redo.svg");
}
}
#menu_cut {
--menuitem-image: url("chrome://browser/skin/edit-cut.svg");
}
#menu_copy {
--menuitem-image: url("../icons/edit-copy.svg");
}
#menu_paste {
--menuitem-image: url("chrome://browser/skin/edit-paste.svg");
}
#menu_delete {
--menuitem-image: url("chrome://global/skin/icons/delete.svg");
}
#menu_selectAll {
--menuitem-image: url("../icons/select-all-on.svg");
}
#menu_find {
--menuitem-image: url("chrome://global/skin/icons/search-glass.svg");
}
#menu_findAgain {
}
#textfieldDirection-swap {
}
#menu_preferences {
--menuitem-image: url("chrome://global/skin/icons/settings.svg");
}
/*= menu_viewPopup ===========================================================*/
#viewToolbarsMenu {
--menuitem-image: url("../icons/toolbar.svg");
}
#viewSidebarMenuMenu {
--menuitem-image: url("chrome://browser/skin/sidebars.svg");
}
#viewFullZoomMenu {
--menuitem-image: url("../icons/screenshot.svg");
}
#pageStyleMenu {
--menuitem-image: url("../icons/document-css.svg");
}
#repair-text-encoding {
--menuitem-image: url("chrome://browser/skin/characterEncoding.svg");
}
#enterFullScreenItem {
--menuitem-image: url("chrome://browser/skin/fullscreen.svg");
}
#exitFullScreenItem {
--menuitem-image: url("chrome://browser/skin/fullscreen-exit.svg");
}
#fullScreenItem {
/* checkbox */
--menuitem-image: url("chrome://browser/skin/fullscreen.svg");
}
#menu_readerModeItem {
--menuitem-image: url("chrome://browser/skin/reader-mode.svg");
}
#menu_showAllTabs {
--menuitem-image: url("../icons/tab.svg");
}
#documentDirection-swap {
--menuitem-image: url("../icons/text-direction-horizontal-ltr.svg");
}
/* view-menu-popup sub menu */
#menu_customizeToolbars {
--menuitem-image: url("chrome://browser/skin/customize.svg");
}
/* viewFullZoomMenu sub menu */
#menu_zoomEnlarge {
--menuitem-image: url("chrome://browser/skin/add-circle-fill.svg");
}
#menu_zoomReduce {
--menuitem-image: url("chrome://browser/skin/subtract-circle-fill.svg");
}
#menu_zoomReset {
--menuitem-image: url("../icons/resize.svg");
}
#toggle_zoom {
--menuitem-image: url("../icons/screenshot.svg");
}
/*= goPopup ==================================================================*/
#menu_showAllHistory {
--menuitem-image: url("chrome://browser/skin/history.svg");
}
#sanitizeItem {
--menuitem-image: url("chrome://browser/skin/forget.svg");
}
#sync-tabs-menuitem {
--menuitem-image: url("chrome://browser/skin/sync.svg");
}
#historyRestoreLastSession {
--menuitem-image: url("../icons/restore-session.svg");
}
#hiddenTabsMenu {
--menuitem-image: url("../icons/eye-hide.svg")
}
#historyUndoMenu {
--menuitem-image: url("chrome://browser/skin/tab.svg");
}
#historyUndoWindowMenu {
--menuitem-image: url("chrome://browser/skin/window.svg");
}
/* sub menu */
#historyUndoPopup .restoreallitem {
--menuitem-image: url("../icons/movetowindow-16.svg");
}
#historyUndoWindowPopup .restoreallitem {
--menuitem-image: url("../icons/restore-session.svg");
}
/*= bookmarksMenuPopup =======================================================*/
#bookmarksShowAll {
--menuitem-image: url("chrome://browser/skin/bookmark-star-on-tray.svg");
}
#menu_bookmarkThisPage,
#menu_bookmarkAllTabs {
--menuitem-image: url("chrome://browser/skin/bookmark-hollow.svg");
}
#menu_bookmarkThisPage[data-l10n-id="menu-bookmark-edit"] {
--menuitem-image: url("chrome://browser/skin/bookmark.svg");
}
#bookmarksToolbarFolderMenu {
}
#menu_unsortedBookmarks {
}
#menu_mobileBookmarks {
}
/*= menu_ToolsPopup ==========================================================*/
#menu_openDownloads {
--menuitem-image: url("chrome://browser/skin/downloads/downloads.svg");
}
#menu_openAddons {
--menuitem-image: url("chrome://mozapps/skin/extensions/extension.svg");
}
#sync-setup {
--menuitem-image: url("chrome://browser/skin/fxa/avatar-empty.svg");
}
#sync-enable {
}
#sync-unverifieditem {
}
#sync-syncnowitem {
--menuitem-image: url("chrome://browser/skin/sync.svg");
}
#sync-reauthitem {
}
#webDeveloperMenu, /* Legacy */
#browserToolsMenu {
--menuitem-image: url("../icons/developer.svg");
}
#menu_pageInfo {
--menuitem-image: url("../icons/document-endnote.svg");
}
/* menuWebDeveloperPopup sub menu */
#enableDeveloperTools {
}
#menu_devToolbox {
/* checkbox */
--menuitem-image: url("../icons/developer.svg");
}
#menu_taskManager {
--menuitem-image: url("../icons/performance.svg");
}
#menu_devtools_remotedebugging {
--menuitem-image: url("../icons/bug.svg");
}
#menu_browserToolbox {
--menuitem-image: url("../icons/window-dev-tools.svg");
}
#menu_browserContentToolbox {
--menuitem-image: url("../icons/command-frames.svg");
}
#menu_browserConsole {
--menuitem-image: url("chrome://devtools/skin/images/command-console.svg");
}
#menu_responsiveUI {
/* checkbox */
--menuitem-image: url("../icons/command-responsivemode.svg");
}
#menu_eyedropper {
/* checkbox */
--menuitem-image: url("chrome://devtools/skin/images/command-eyedropper.svg");
}
#menu_pageSource {
--menuitem-image: url("../icons/document-search.svg");
}
#extensionsForDevelopers {
--menuitem-image: url("chrome://devtools/skin/images/debugging-addons.svg");
}
/*= windowPopup ==============================================================*/
#windowPopup > menuitem {
&[command="minimizeWindow"] {
--menuitem-image: url("../icons/arrow-between-down.svg");
}
&[command="zoomWindow"] {
--menuitem-image: url("../icons/auto-fit-width.svg");
}
}
/*= menu_HelpPopup ===========================================================*/
#menu_openHelp {
--menuitem-image: url("chrome://global/skin/icons/help.svg");
}
#feedbackPage {
--menuitem-image: url("../icons/send.svg");
}
#helpSafeMode {
--menuitem-image: url("chrome://devtools/skin/images/debugging-workers.svg");
}
#troubleShooting {
--menuitem-image: url("chrome://global/skin/icons/more.svg");
}
#help_reportSiteIssue {
--menuitem-image: url("chrome://global/skin/icons/lightbulb.svg");
}
#menu_HelpPopup_reportPhishingtoolmenu {
--menuitem-image: url("chrome://global/skin/icons/warning.svg");
}
#menu_HelpPopup_reportPhishingErrortoolmenu {
}
#aboutName {
--menuitem-image: url("chrome://global/skin/icons/info.svg");
}
#helpPolicySupport {
}

View File

@ -1,22 +0,0 @@
/*= main-menubar =============================================================*/
#file-menu {
--menuitem-image: url("../icons/mail-inbox-all.svg");
}
#edit-menu {
--menuitem-image: url("chrome://global/skin/icons/edit.svg");
}
#view-menu {
--menuitem-image: url("../icons/content-view.svg");
}
#history-menu {
--menuitem-image: url("chrome://browser/skin/history.svg");
}
#bookmarksMenu {
--menuitem-image: url("chrome://browser/skin/bookmark.svg");
}
#tools-menu {
--menuitem-image: url("../icons/toolbox.svg");
}
#helpMenu {
--menuitem-image: url("chrome://global/skin/icons/help.svg");
}

View File

@ -1,33 +0,0 @@
/** Library - Icons Replace ***************************************************/
@include Option("userChrome.icon.library") {
@import "../library/chrome";
}
/** Panel - Icons *************************************************************/
@include Option("userChrome.icon.panel") {
@import "layout/panel";
@import "panel";
}
/** Menu - Icons Layout *******************************************************/
@include Option("userChrome.icon.menu") {
@import "layout/menu";
@import "layout/bookmark_menu";
@include Option("userChrome.icon.context_menu") {
@import "context_menu";
}
@include Option("userChrome.icon.global_menubar") {
@import "global_menubar";
}
@include Option("userChrome.icon.global_menu") {
@import "global_menu";
}
}
/** Libray Menu ***************************************************************/
@include Option("userChrome.icon.library") {
@include Option("userChrome.icon.menu") {
@import "library";
}
}

View File

@ -1,16 +0,0 @@
.context-menu-list .context-menu-item button {
padding-inline-start: 0 !important;
}
.context-menu-list .context-menu-item button span {
padding-inline-start: 24px; /* 16p + (4px * 2) */
-moz-context-properties: fill, fill-opacity !important;
fill: currentColor !important;
/* Layout */
background-size: 16px;
background-repeat: no-repeat;
background-image: var(--menuitem-image);
background-position: left 4px center;
}

Some files were not shown because too many files have changed in this diff Show More