mirror of
				https://github.com/zen-browser/desktop.git
				synced 2025-10-26 12:27:50 +00:00 
			
		
		
		
	Compare commits
	
		
			13 Commits
		
	
	
		
			stable
			...
			window-syn
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | af20a65fa1 | ||
|   | 4a7f8fc9c0 | ||
|   | a738a829de | ||
|   | 240a031e38 | ||
|   | 9bc7b9ce4e | ||
|   | 86006c8891 | ||
|   | a55b1c7495 | ||
|   | 6e6337a95b | ||
|   | 6b12153c8a | ||
|   | f6922ef2ba | ||
|   | 91f5d58fbc | ||
|   | 7a4cdaa45c | ||
|   | 81e854a89f | 
| @@ -1 +0,0 @@ | ||||
| https://zen-browser.app/funding.json | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Next | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Allowed | ||||
| zen-site-data-setting-block = Blocked | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Extension | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Add Extensions | ||||
| zen-site-data-site-settings =  | ||||
|     .label = All Site Settings | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Share This Page | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copy URL | ||||
| zen-site-data-setting-site-protection = Tracking Protection | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Següent | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Permès | ||||
| zen-site-data-setting-block = Bloquejat | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Galetes entre llocs | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Extensió | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Afegeix extensions | ||||
| zen-site-data-site-settings =  | ||||
|     .label = Totes les configuracions del lloc | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Comparteix aquesta pàgina | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copia l'URL | ||||
| zen-site-data-setting-site-protection = Protecció contra el seguiment | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Next | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Povoleno | ||||
| zen-site-data-setting-block = Blokováno | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Rozšíření | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Přidat rozšíření | ||||
| zen-site-data-site-settings =  | ||||
|     .label = Nastavení všech stránek | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Share This Page | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copy URL | ||||
| zen-site-data-setting-site-protection = Tracking Protection | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Next | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Allowed | ||||
| zen-site-data-setting-block = Blocked | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Extension | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Add Extensions | ||||
| zen-site-data-site-settings =  | ||||
|     .label = All Site Settings | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Share This Page | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copy URL | ||||
| zen-site-data-setting-site-protection = Tracking Protection | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Næste | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Tilladt | ||||
| zen-site-data-setting-block = Blokeret | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Udvidelse | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Tilføj udvidelser | ||||
| zen-site-data-site-settings =  | ||||
|     .label = All Site Settings | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Del denne side | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Kopiér URL | ||||
| zen-site-data-setting-site-protection = Sporingsbeskyttelse | ||||
|   | ||||
| @@ -38,7 +38,7 @@ zen-library-sidebar-workspaces = | ||||
| zen-library-sidebar-mods =  | ||||
|     .label = Mods | ||||
| zen-toggle-compact-mode-button =  | ||||
|     .label = Kompakter Modus | ||||
|     .label = Compact Mode | ||||
|     .tooltiptext = Compact Mode umschalten | ||||
|  | ||||
| # note: Do not translate the "<br/>" tags in the following string | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Weiter | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Erlaubt | ||||
| zen-site-data-setting-block = Blockiert | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site-Cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Erweiterung | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Erweiterungen hinzufügen | ||||
| zen-site-data-site-settings =  | ||||
|     .label = Alle Website-Einstellungen | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Diese Seite teilen | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = URL kopieren | ||||
| zen-site-data-setting-site-protection = Tracking-Schutz | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Next | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Allowed | ||||
| zen-site-data-setting-block = Blocked | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Extension | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Add Extensions | ||||
| zen-site-data-site-settings =  | ||||
|     .label = All Site Settings | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Share This Page | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copy URL | ||||
| zen-site-data-setting-site-protection = Tracking Protection | ||||
|   | ||||
| @@ -57,8 +57,6 @@ zen-generic-next = Next | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Allowed | ||||
| zen-site-data-setting-block = Blocked | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Extension | ||||
| @@ -72,14 +70,8 @@ zen-site-data-get-addons = | ||||
|     .label = Add Extensions | ||||
| zen-site-data-site-settings =  | ||||
|     .label = All Site Settings | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Share This Page | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copy URL | ||||
| zen-site-data-setting-site-protection = Tracking Protection | ||||
|   | ||||
| @@ -77,8 +77,6 @@ zen-generic-next = Next | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Allowed | ||||
| zen-site-data-setting-block = Blocked | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension = | ||||
|     .label = Extension | ||||
| @@ -93,16 +91,8 @@ zen-site-data-get-addons = | ||||
|     .label = Add Extensions | ||||
| zen-site-data-site-settings = | ||||
|     .label = All Site Settings | ||||
|  | ||||
|  | ||||
| zen-site-data-header-share = | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode = | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot = | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark = | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share = | ||||
|     .label = Share This Page | ||||
|  | ||||
| zen-urlbar-copy-url-button = | ||||
|   .tooltiptext = Copy URL | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Siguiente | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Permitido | ||||
| zen-site-data-setting-block = Bloqueado | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cookie de terceros | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Extensión | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Añadir extensión | ||||
| zen-site-data-site-settings =  | ||||
|     .label = Todas las configuraciones del sitio | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Compartir esta página | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copiar URL | ||||
| zen-site-data-setting-site-protection = Protección contra el rastreo | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Next | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Lubatud | ||||
| zen-site-data-setting-block = Keelatud | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Laiendus | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Lisa laiendusi | ||||
| zen-site-data-site-settings =  | ||||
|     .label = Kõik saidi sätted | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Share This Page | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copy URL | ||||
| zen-site-data-setting-site-protection = Tracking Protection | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Next | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Allowed | ||||
| zen-site-data-setting-block = Blocked | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Extension | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Add Extensions | ||||
| zen-site-data-site-settings =  | ||||
|     .label = All Site Settings | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Share This Page | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copy URL | ||||
| zen-site-data-setting-site-protection = Tracking Protection | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Next | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Allowed | ||||
| zen-site-data-setting-block = Blocked | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Extension | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Add Extensions | ||||
| zen-site-data-site-settings =  | ||||
|     .label = All Site Settings | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Share This Page | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copy URL | ||||
| zen-site-data-setting-site-protection = Tracking Protection | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Suivant | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Autorisé | ||||
| zen-site-data-setting-block = Bloqué | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cookie intersite | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Extension | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Ajouter des extensions | ||||
| zen-site-data-site-settings =  | ||||
|     .label = Tous les paramètres du site | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Partager cette page | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copier l'URL | ||||
| zen-site-data-setting-site-protection = Protection contre le pistage | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Ar Aghaidh | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Ceadaithe | ||||
| zen-site-data-setting-block = Blocáilte | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Fianán Tras-Láithreáin | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Síneadh | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Cuir Síneadh leis | ||||
| zen-site-data-site-settings =  | ||||
|     .label = Gach Socrú Suímh | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Comhroinn an Leathanach seo | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Cóipeáil URL | ||||
| zen-site-data-setting-site-protection = Cosaint Rianaithe | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Next | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = אושר | ||||
| zen-site-data-setting-block = חסום | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = תוספים | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = הוספת תוספים | ||||
| zen-site-data-site-settings =  | ||||
|     .label = כל הגדרות אתר | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Share This Page | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copy URL | ||||
| zen-site-data-setting-site-protection = Tracking Protection | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Következő | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Engedélyezve | ||||
| zen-site-data-setting-block = Letiltva | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Webhelyek közötti sütik | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Kiegészítő | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Kiegészítő hozzáadása | ||||
| zen-site-data-site-settings =  | ||||
|     .label = Minden webhelybeállítás | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Oldal megosztása | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = URL másolása | ||||
| zen-site-data-setting-site-protection = Nyomkövetés védelem | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Lanjut | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Diizinkan | ||||
| zen-site-data-setting-block = Diblokir | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Kuki Lintas Situs | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Ekstensi | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Tambahkan Ekstensi | ||||
| zen-site-data-site-settings =  | ||||
|     .label = Semua Pengaturan Situs | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Bagikan Halaman Ini | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Salin URL | ||||
| zen-site-data-setting-site-protection = Perlindungan Pelacakan | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Next | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Allowed | ||||
| zen-site-data-setting-block = Blocked | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Extension | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Add Extensions | ||||
| zen-site-data-site-settings =  | ||||
|     .label = All Site Settings | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Share This Page | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copy URL | ||||
| zen-site-data-setting-site-protection = Tracking Protection | ||||
|   | ||||
| @@ -57,8 +57,6 @@ zen-generic-next = Next | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Consentito | ||||
| zen-site-data-setting-block = Bloccato | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Estensione | ||||
| @@ -72,14 +70,8 @@ zen-site-data-get-addons = | ||||
|     .label = Aggiungi estensioni | ||||
| zen-site-data-site-settings =  | ||||
|     .label = Tutte le impostazioni del sito | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Condividi questa pagina | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copia URL | ||||
| zen-site-data-setting-site-protection = Tracking Protection | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Next | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Allowed | ||||
| zen-site-data-setting-block = Blocked | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Extension | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Add Extensions | ||||
| zen-site-data-site-settings =  | ||||
|     .label = All Site Settings | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Share This Page | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copy URL | ||||
| zen-site-data-setting-site-protection = Tracking Protection | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = 다음 | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = 허용됨 | ||||
| zen-site-data-setting-block = 금지됨 | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = 사이트 간 공유 쿠키 | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = 확장 | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = 확장 프로그램 추가 | ||||
| zen-site-data-site-settings =  | ||||
|     .label = 모든 사이트 설정 | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = 이 페이지 공유 | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = URL 복사 | ||||
| zen-site-data-setting-site-protection = 추적 보호 | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Next | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Leidžiama | ||||
| zen-site-data-setting-block = Užblokuota | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Plėtinys | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Įtraukti plėtinius | ||||
| zen-site-data-site-settings =  | ||||
|     .label = Visi svetainės nustatymai | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Share This Page | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copy URL | ||||
| zen-site-data-setting-site-protection = Tracking Protection | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Next | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Allowed | ||||
| zen-site-data-setting-block = Blocked | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Extension | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Add Extensions | ||||
| zen-site-data-site-settings =  | ||||
|     .label = All Site Settings | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Share This Page | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copy URL | ||||
| zen-site-data-setting-site-protection = Tracking Protection | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Next | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Allowed | ||||
| zen-site-data-setting-block = Blocked | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Extension | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Add Extensions | ||||
| zen-site-data-site-settings =  | ||||
|     .label = All Site Settings | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Share This Page | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copy URL | ||||
| zen-site-data-setting-site-protection = Tracking Protection | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Next | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Allowed | ||||
| zen-site-data-setting-block = Blocked | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Extension | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Add Extensions | ||||
| zen-site-data-site-settings =  | ||||
|     .label = All Site Settings | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Share This Page | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copy URL | ||||
| zen-site-data-setting-site-protection = Tracking Protection | ||||
|   | ||||
| @@ -57,8 +57,6 @@ zen-generic-next = Next | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Permitido | ||||
| zen-site-data-setting-block = Bloqueado | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Extensão | ||||
| @@ -72,14 +70,8 @@ zen-site-data-get-addons = | ||||
|     .label = Adicionar Extensões | ||||
| zen-site-data-site-settings =  | ||||
|     .label = Todas as Configurações do Site | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Share This Page | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copy URL | ||||
| zen-site-data-setting-site-protection = Tracking Protection | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Seguinte | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Permitido | ||||
| zen-site-data-setting-block = Bloqueado | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cookies entre sites | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Extensão | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Adicionar Extensões | ||||
| zen-site-data-site-settings =  | ||||
|     .label = Todas as Definições do Site | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Partilhar Esta Página | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copiar URL | ||||
| zen-site-data-setting-site-protection = Proteção contra rastreio | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Далее | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Разрешено | ||||
| zen-site-data-setting-block = Запрещено | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Расширение | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Добавить расширения | ||||
| zen-site-data-site-settings =  | ||||
|     .label = Все настройки сайта | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Поделиться этой страницей | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Скопировать URL | ||||
| zen-site-data-setting-site-protection = Tracking Protection | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Next | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Allowed | ||||
| zen-site-data-setting-block = Blocked | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Extension | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Add Extensions | ||||
| zen-site-data-site-settings =  | ||||
|     .label = All Site Settings | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Share This Page | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copy URL | ||||
| zen-site-data-setting-site-protection = Tracking Protection | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Next | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Allowed | ||||
| zen-site-data-setting-block = Blocked | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Extension | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Add Extensions | ||||
| zen-site-data-site-settings =  | ||||
|     .label = All Site Settings | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Share This Page | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copy URL | ||||
| zen-site-data-setting-site-protection = Tracking Protection | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Next | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Allowed | ||||
| zen-site-data-setting-block = Blocked | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Extension | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Add Extensions | ||||
| zen-site-data-site-settings =  | ||||
|     .label = All Site Settings | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Share This Page | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copy URL | ||||
| zen-site-data-setting-site-protection = Tracking Protection | ||||
|   | ||||
| @@ -59,9 +59,7 @@ zen-generic-next = Далі | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Дозволено | ||||
| zen-site-data-setting-block = Заблоковано | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Міжсайтові cookie | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Розширення | ||||
| zen-site-data-security-info-secure =  | ||||
| @@ -74,17 +72,11 @@ zen-site-data-get-addons = | ||||
|     .label = Додати розширення | ||||
| zen-site-data-site-settings =  | ||||
|     .label = Усі налаштування сайту | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Поділитися цією сторінкою | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Копіювати URL-адресу | ||||
| zen-site-data-setting-site-protection = Захист від відстеження | ||||
| zen-site-data-setting-site-protection = Tracking Protection | ||||
|  | ||||
| # Section: Feature callouts | ||||
|  | ||||
|   | ||||
| @@ -59,8 +59,6 @@ zen-generic-next = Next | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Allowed | ||||
| zen-site-data-setting-block = Blocked | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Extension | ||||
| @@ -74,14 +72,8 @@ zen-site-data-get-addons = | ||||
|     .label = Add Extensions | ||||
| zen-site-data-site-settings =  | ||||
|     .label = All Site Settings | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Share This Page | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copy URL | ||||
| zen-site-data-setting-site-protection = Tracking Protection | ||||
|   | ||||
| @@ -57,8 +57,6 @@ zen-generic-next = Next | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Allowed | ||||
| zen-site-data-setting-block = Blocked | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Extension | ||||
| @@ -72,14 +70,8 @@ zen-site-data-get-addons = | ||||
|     .label = 添加扩展 | ||||
| zen-site-data-site-settings =  | ||||
|     .label = 所有站点设置 | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Share This Page | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copy URL | ||||
| zen-site-data-setting-site-protection = Tracking Protection | ||||
|   | ||||
| @@ -57,8 +57,6 @@ zen-generic-next = Next | ||||
| # These labels will be used for the site data panel settings | ||||
| zen-site-data-setting-allow = Allowed | ||||
| zen-site-data-setting-block = Blocked | ||||
| zen-site-data-protections-enabled = Enabled | ||||
| zen-site-data-protections-disabled = Disabled | ||||
| zen-site-data-setting-cross-site = Cross-Site cookie | ||||
| zen-site-data-security-info-extension =  | ||||
|     .label = Extension | ||||
| @@ -72,14 +70,8 @@ zen-site-data-get-addons = | ||||
|     .label = Add Extensions | ||||
| zen-site-data-site-settings =  | ||||
|     .label = All Site Settings | ||||
| zen-site-data-header-share =  | ||||
|     .tooltiptext = Share This Page | ||||
| zen-site-data-header-reader-mode =  | ||||
|     .tooltiptext = Enter Reader Mode | ||||
| zen-site-data-header-screenshot =  | ||||
|     .tooltiptext = Take a Screenshot | ||||
| zen-site-data-header-bookmark =  | ||||
|     .tooltiptext = Bookmark This Page | ||||
| zen-site-data-share =  | ||||
|     .label = Share This Page | ||||
| zen-urlbar-copy-url-button =  | ||||
|     .tooltiptext = Copy URL | ||||
| zen-site-data-setting-site-protection = Tracking Protection | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js | ||||
| index 32b67f846b9942ad3da4276bb8748fee915eb485..529ef8895d2ab01b4cbebd2992fd3b64225e42b0 100644 | ||||
| index 32b67f846b9942ad3da4276bb8748fee915eb485..f77d5df7c8ef49c0366ada8b3153c5a6c676239b 100644 | ||||
| --- a/browser/base/content/browser.js | ||||
| +++ b/browser/base/content/browser.js | ||||
| @@ -31,6 +31,7 @@ ChromeUtils.defineESModuleGetters(this, { | ||||
| @@ -19,33 +19,6 @@ index 32b67f846b9942ad3da4276bb8748fee915eb485..529ef8895d2ab01b4cbebd2992fd3b64 | ||||
|      PictureInPicture.updateUrlbarToggle(gBrowser.selectedBrowser); | ||||
|   | ||||
|      if (!gMultiProcessBrowser) { | ||||
| @@ -3795,7 +3798,7 @@ function warnAboutClosingWindow() { | ||||
|   | ||||
|    if (!isPBWindow && !toolbar.visible) { | ||||
|      return gBrowser.warnAboutClosingTabs( | ||||
| -      gBrowser.openTabs.length, | ||||
| +      gBrowser.visibleTabs.filter(t => t.getAttribute("pending")!=="true").length, | ||||
|        gBrowser.closingTabsEnum.ALL | ||||
|      ); | ||||
|    } | ||||
| @@ -3835,7 +3838,7 @@ function warnAboutClosingWindow() { | ||||
|      return ( | ||||
|        isPBWindow || | ||||
|        gBrowser.warnAboutClosingTabs( | ||||
| -        gBrowser.openTabs.length, | ||||
| +        gBrowser.visibleTabs.filter(t => t.getAttribute("pending")!=="true").length, | ||||
|          gBrowser.closingTabsEnum.ALL | ||||
|        ) | ||||
|      ); | ||||
| @@ -3860,7 +3863,7 @@ function warnAboutClosingWindow() { | ||||
|      AppConstants.platform != "macosx" || | ||||
|      isPBWindow || | ||||
|      gBrowser.warnAboutClosingTabs( | ||||
| -      gBrowser.openTabs.length, | ||||
| +      gBrowser.visibleTabs.filter(t => t.getAttribute("pending")!=="true").length, | ||||
|        gBrowser.closingTabsEnum.ALL | ||||
|      ) | ||||
|    ); | ||||
| @@ -4782,6 +4785,9 @@ var ConfirmationHint = { | ||||
|      MozXULElement.insertFTLIfNeeded("toolkit/branding/brandings.ftl"); | ||||
|      MozXULElement.insertFTLIfNeeded("browser/confirmationHints.ftl"); | ||||
|   | ||||
| @@ -1,13 +1,12 @@ | ||||
| diff --git a/browser/base/content/browser-pageActions.js b/browser/base/content/browser-pageActions.js | ||||
| index 00da33bc11189db17b6a2e656acb3a778531197c..bdca62e9ed5513e1e1922f1f9498755f5459e0c2 100644 | ||||
| index 00da33bc11189db17b6a2e656acb3a778531197c..9571155baccad9a886cbe9c7bf0bd76a135331c4 100644 | ||||
| --- a/browser/base/content/browser-pageActions.js | ||||
| +++ b/browser/base/content/browser-pageActions.js | ||||
| @@ -449,7 +449,7 @@ var BrowserPageActions = { | ||||
|        document.getElementById( | ||||
|          action && this.urlbarButtonNodeIDForActionID(action.id) | ||||
| @@ -451,6 +451,7 @@ var BrowserPageActions = { | ||||
|        ), | ||||
| -      document.getElementById(this.mainButtonNode.id), | ||||
| +      document.getElementById("zen-site-data-icon-button"), | ||||
|        document.getElementById(this.mainButtonNode.id), | ||||
|        document.getElementById("identity-icon"), | ||||
| +      document.getElementById("zen-site-data-icon-button"), | ||||
|      ]; | ||||
|      for (let node of potentialAnchorNodes) { | ||||
|        if (node && !node.hidden) { | ||||
|   | ||||
| @@ -58,3 +58,4 @@ | ||||
| <script type="text/javascript" src="chrome://browser/content/zen-components/ZenDownloadAnimation.mjs"></script> | ||||
| <script type="text/javascript" src="chrome://browser/content/zen-components/ZenEmojiPicker.mjs"></script> | ||||
| <script type="text/javascript" src="chrome://browser/content/zen-components/ZenWorkspaceCreation.mjs"></script> | ||||
| <script type="text/javascript" src="chrome://browser/content/zen-components/ZenWindowSyncing.mjs"></script> | ||||
|   | ||||
| @@ -42,6 +42,7 @@ | ||||
|         content/browser/zen-components/ZenWorkspaceIcons.mjs                    (../../zen/workspaces/ZenWorkspaceIcons.mjs) | ||||
|         content/browser/zen-components/ZenWorkspace.mjs                         (../../zen/workspaces/ZenWorkspace.mjs) | ||||
|         content/browser/zen-components/ZenWorkspaces.mjs                        (../../zen/workspaces/ZenWorkspaces.mjs) | ||||
|         content/browser/zen-components/ZenWindowSyncing.mjs                     (../../zen/workspaces/ZenWindowSyncing.mjs) | ||||
|         content/browser/zen-components/ZenWorkspaceCreation.mjs                 (../../zen/workspaces/ZenWorkspaceCreation.mjs) | ||||
|         content/browser/zen-components/ZenWorkspacesStorage.mjs                 (../../zen/workspaces/ZenWorkspacesStorage.mjs) | ||||
|         content/browser/zen-components/ZenWorkspacesSync.mjs                    (../../zen/workspaces/ZenWorkspacesSync.mjs) | ||||
|   | ||||
| @@ -16,20 +16,16 @@ | ||||
|                 mainview-with-header="true"> | ||||
|       <hbox id="zen-site-data-header"> | ||||
|         <toolbarbutton id="zen-site-data-header-share" | ||||
|                         data-l10n-id="zen-site-data-header-share" | ||||
|                         data-l10n-id="zen-site-data-share" | ||||
|                         flex="1" | ||||
|                         closemenu="none" /> | ||||
|         <toolbarbutton id="zen-site-data-header-reader-mode" | ||||
|                         data-l10n-id="zen-site-data-header-reader-mode" | ||||
|                         command="View:ReaderView" | ||||
|                         tooltip="dynamic-shortcut-tooltip" | ||||
|                         flex="1" /> | ||||
|         <toolbarbutton id="zen-site-data-header-screenshot" | ||||
|                         data-l10n-id="zen-site-data-header-screenshot" | ||||
|                         command="Browser:Screenshot" | ||||
|                         flex="1" /> | ||||
|         <toolbarbutton id="zen-site-data-header-bookmark" | ||||
|                         data-l10n-id="zen-site-data-header-bookmark" | ||||
|                         command="Browser:AddBookmarkAs" | ||||
|                         flex="1" /> | ||||
|       </hbox> | ||||
| @@ -39,6 +35,10 @@ | ||||
|           <label data-l10n-id="zen-generic-manage" id="zen-site-data-manage-addons" /> | ||||
|         </hbox> | ||||
|         <hbox class="panel-subview-body" context="unified-extensions-context-menu" id="zen-site-data-addons"> | ||||
|           <html:div id="unified-extensions-messages-container"> | ||||
|             <!-- messages will be inserted here --> | ||||
|           </html:div> | ||||
|  | ||||
|           <vbox id="overflowed-extensions-list"> | ||||
|             <!-- overflowed extension buttons from the nav-bar will go here --> | ||||
|           </vbox> | ||||
| @@ -82,9 +82,6 @@ | ||||
|                        closemenu="none" | ||||
|                        context="zenSiteDataActions" /> | ||||
|       </hbox> | ||||
| # Messages will be inserted here. | ||||
| # Dont write anything directly here, even comments, as this may break the layout | ||||
|       <html:div id="unified-extensions-messages-container"></html:div> | ||||
|     </panelview> | ||||
|   </panelmultiview> | ||||
| </panel> | ||||
| @@ -1,12 +0,0 @@ | ||||
| diff --git a/browser/components/asrouter/modules/FeatureCallout.sys.mjs b/browser/components/asrouter/modules/FeatureCallout.sys.mjs | ||||
| index 2a2c5a6fe903694abbac0be86c7b3c8adc1d0275..5571b827198474a2635a9bd968adbc8c96dbc353 100644 | ||||
| --- a/browser/components/asrouter/modules/FeatureCallout.sys.mjs | ||||
| +++ b/browser/components/asrouter/modules/FeatureCallout.sys.mjs | ||||
| @@ -776,6 +776,7 @@ export class FeatureCallout { | ||||
|      ) { | ||||
|        return false; | ||||
|      } | ||||
| +    if (el?.id === "zen-site-data-icon-button") return true; | ||||
|   | ||||
|      const style = this.win.getComputedStyle(el); | ||||
|      return style?.visibility === "visible" && style?.display !== "none"; | ||||
| @@ -1,5 +1,5 @@ | ||||
| diff --git a/browser/components/customizableui/CustomizableUI.sys.mjs b/browser/components/customizableui/CustomizableUI.sys.mjs | ||||
| index d9a059f608779fea7cd8c595a432f6fe95183e0c..c359e5115b315dbb4b14e07ab34526aab438565f 100644 | ||||
| index d9a059f608779fea7cd8c595a432f6fe95183e0c..09a7c4045afd0b96027d0bbbad22e02e52fd7b22 100644 | ||||
| --- a/browser/components/customizableui/CustomizableUI.sys.mjs | ||||
| +++ b/browser/components/customizableui/CustomizableUI.sys.mjs | ||||
| @@ -14,6 +14,7 @@ ChromeUtils.defineESModuleGetters(lazy, { | ||||
| @@ -158,7 +158,7 @@ index d9a059f608779fea7cd8c595a432f6fe95183e0c..c359e5115b315dbb4b14e07ab34526aa | ||||
|            continue; | ||||
|          } | ||||
| -        sum += parseFloat(style.marginLeft) + parseFloat(style.marginRight); | ||||
| +        sum += parseFloat(style.marginLeft) + (win.gZenVerticalTabsManager._hasSetSingleToolbar ? Math.max(0, parseFloat(style.marginRight)) : parseFloat(style.marginRight)); | ||||
| +        sum += parseFloat(style.marginLeft) + Math.max(0, parseFloat(style.marginRight)); | ||||
|          if (child != aExceptChild) { | ||||
|            sum += getInlineSize(child); | ||||
|          } | ||||
| @@ -176,23 +176,17 @@ index d9a059f608779fea7cd8c595a432f6fe95183e0c..c359e5115b315dbb4b14e07ab34526aa | ||||
|      }); | ||||
|   | ||||
|      lazy.log.debug( | ||||
| @@ -7909,7 +7909,14 @@ class OverflowableToolbar { | ||||
| @@ -7909,7 +7909,8 @@ class OverflowableToolbar { | ||||
|        Math.max(targetWidth, targetChildrenWidth) | ||||
|      ); | ||||
|      totalAvailWidth = Math.ceil(totalAvailWidth); | ||||
| -    let isOverflowing = targetContentWidth > totalAvailWidth; | ||||
| +    if (win.gZenVerticalTabsManager._hasSetSingleToolbar && this.#toolbar.id == 'nav-bar') return { isOverflowing: false, targetContentWidth, totalAvailWidth }; | ||||
| +    let isOverflowing = targetContentWidth + (win.gZenVerticalTabsManager._hasSetSingleToolbar ? 0.1 : 0) > totalAvailWidth; | ||||
| +    if (win.gZenVerticalTabsManager._hasSetSingleToolbar && | ||||
| +      this.#target.id == 'zen-sidebar-top-buttons-customization-target' && | ||||
| +      Array.from(this.#target.children).filter(child => child.getAttribute("overflows") != "false").length == 1 && | ||||
| +      this.#overflowedInfo.size == 0) { | ||||
| +      isOverflowing = false; | ||||
| +    } | ||||
|      return { isOverflowing, targetContentWidth, totalAvailWidth }; | ||||
|    } | ||||
|   | ||||
| @@ -7970,7 +7977,11 @@ class OverflowableToolbar { | ||||
| @@ -7970,7 +7971,11 @@ class OverflowableToolbar { | ||||
|              return; | ||||
|            } | ||||
|          } | ||||
| @@ -205,7 +199,7 @@ index d9a059f608779fea7cd8c595a432f6fe95183e0c..c359e5115b315dbb4b14e07ab34526aa | ||||
|            lazy.log.debug( | ||||
|              `Need ${minSize} but width is ${totalAvailWidth} so bailing` | ||||
|            ); | ||||
| @@ -8003,7 +8014,7 @@ class OverflowableToolbar { | ||||
| @@ -8003,7 +8008,7 @@ class OverflowableToolbar { | ||||
|          } | ||||
|        } | ||||
|        if (!inserted) { | ||||
| @@ -214,7 +208,7 @@ index d9a059f608779fea7cd8c595a432f6fe95183e0c..c359e5115b315dbb4b14e07ab34526aa | ||||
|        } | ||||
|        child.removeAttribute("cui-anchorid"); | ||||
|        child.removeAttribute("overflowedItem"); | ||||
| @@ -8348,7 +8359,7 @@ class OverflowableToolbar { | ||||
| @@ -8348,7 +8353,7 @@ class OverflowableToolbar { | ||||
|          break; | ||||
|        } | ||||
|        case "mousedown": { | ||||
|   | ||||
| @@ -1,12 +0,0 @@ | ||||
| diff --git a/browser/components/tabbrowser/AsyncTabSwitcher.sys.mjs b/browser/components/tabbrowser/AsyncTabSwitcher.sys.mjs | ||||
| index 773f595e89e268578ba153907babec95b58a155a..abe86fc3d243a85c4a8dbee854a2d0130f7270fd 100644 | ||||
| --- a/browser/components/tabbrowser/AsyncTabSwitcher.sys.mjs | ||||
| +++ b/browser/components/tabbrowser/AsyncTabSwitcher.sys.mjs | ||||
| @@ -937,6 +937,7 @@ export class AsyncTabSwitcher { | ||||
|      return !( | ||||
|        this.tabbrowser._printPreviewBrowsers.has(browser) || | ||||
|        lazy.PictureInPicture.isOriginatingBrowser(browser) | ||||
| +      || browser?.hasAttribute('zen-glance-background') | ||||
|      ); | ||||
|    } | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| diff --git a/browser/components/urlbar/UrlbarInput.sys.mjs b/browser/components/urlbar/UrlbarInput.sys.mjs | ||||
| index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d355858bcf37b 100644 | ||||
| index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..b286fc5b40a6e32a3af0bb0f209e58c64ab7bed9 100644 | ||||
| --- a/browser/components/urlbar/UrlbarInput.sys.mjs | ||||
| +++ b/browser/components/urlbar/UrlbarInput.sys.mjs | ||||
| @@ -76,6 +76,13 @@ ChromeUtils.defineLazyGetter(lazy, "logger", () => | ||||
| @@ -122,13 +122,14 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558 | ||||
|      // Enable the animation only after the first extend call to ensure it | ||||
|      // doesn't run when opening a new window. | ||||
|      if (!this.hasAttribute("breakout-extend-animate")) { | ||||
| @@ -2331,6 +2396,24 @@ export class UrlbarInput { | ||||
| @@ -2331,6 +2396,25 @@ export class UrlbarInput { | ||||
|        return; | ||||
|      } | ||||
|   | ||||
| +    if (this._zenHandleUrlbarClose) { | ||||
| +      this._zenHandleUrlbarClose(); | ||||
| +    } | ||||
| +    this.window.gZenUIManager.onUrlbarClose(); | ||||
| +     | ||||
| +    // Arc like URLbar: Blur the input on exit | ||||
| +    const zenToolbox = this.document.getElementById("navigator-toolbox"); | ||||
| @@ -141,22 +142,13 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558 | ||||
| +    this.document.ownerGlobal.setTimeout(() => { | ||||
| +      this.window.document.documentElement.removeAttribute("supress-primary-adjustment"); | ||||
| +    }, 100); | ||||
| +    this.window.gZenUIManager.onUrlbarClose(); | ||||
| +     | ||||
| +    this.removeAttribute("zen-floating-urlbar"); | ||||
| + | ||||
|      this.removeAttribute("breakout-extend"); | ||||
|      this.#updateTextboxPosition(); | ||||
|    } | ||||
| @@ -2361,7 +2444,7 @@ export class UrlbarInput { | ||||
|      forceUnifiedSearchButtonAvailable = false | ||||
|    ) { | ||||
|      let prevState = this.getAttribute("pageproxystate"); | ||||
| - | ||||
| +    this.removeAttribute("had-proxystate"); | ||||
|      this.setAttribute("pageproxystate", state); | ||||
|      this._inputContainer.setAttribute("pageproxystate", state); | ||||
|      this._identityBox?.setAttribute("pageproxystate", state); | ||||
| @@ -2595,10 +2678,12 @@ export class UrlbarInput { | ||||
| @@ -2595,10 +2679,12 @@ export class UrlbarInput { | ||||
|        return; | ||||
|      } | ||||
|      this.textbox.style.top = px( | ||||
| @@ -169,7 +161,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558 | ||||
|      ); | ||||
|    } | ||||
|   | ||||
| @@ -2658,9 +2743,10 @@ export class UrlbarInput { | ||||
| @@ -2658,9 +2744,10 @@ export class UrlbarInput { | ||||
|            return; | ||||
|          } | ||||
|   | ||||
| @@ -181,7 +173,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558 | ||||
|          ); | ||||
|          this.textbox.style.setProperty( | ||||
|            "--urlbar-height", | ||||
| @@ -3093,6 +3179,7 @@ export class UrlbarInput { | ||||
| @@ -3093,6 +3180,7 @@ export class UrlbarInput { | ||||
|    } | ||||
|   | ||||
|    _toggleActionOverride(event) { | ||||
| @@ -189,7 +181,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558 | ||||
|      if ( | ||||
|        event.keyCode == KeyEvent.DOM_VK_SHIFT || | ||||
|        event.keyCode == KeyEvent.DOM_VK_ALT || | ||||
| @@ -3197,7 +3284,7 @@ export class UrlbarInput { | ||||
| @@ -3197,7 +3285,7 @@ export class UrlbarInput { | ||||
|        return val; | ||||
|      } | ||||
|      let trimmedValue = lazy.UrlbarPrefs.get("trimURLs") | ||||
| @@ -198,7 +190,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558 | ||||
|        : val; | ||||
|      // Only trim value if the directionality doesn't change to RTL and we're not | ||||
|      // showing a strikeout https protocol. | ||||
| @@ -3501,6 +3588,7 @@ export class UrlbarInput { | ||||
| @@ -3501,6 +3589,7 @@ export class UrlbarInput { | ||||
|      resultDetails = null, | ||||
|      browser = this.window.gBrowser.selectedBrowser | ||||
|    ) { | ||||
| @@ -206,7 +198,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558 | ||||
|      if (this.isAddressbar) { | ||||
|        this.#prepareAddressbarLoad( | ||||
|          url, | ||||
| @@ -3608,6 +3696,10 @@ export class UrlbarInput { | ||||
| @@ -3608,6 +3697,10 @@ export class UrlbarInput { | ||||
|        } | ||||
|        reuseEmpty = true; | ||||
|      } | ||||
| @@ -217,7 +209,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558 | ||||
|      if ( | ||||
|        where == "tab" && | ||||
|        reuseEmpty && | ||||
| @@ -3615,6 +3707,9 @@ export class UrlbarInput { | ||||
| @@ -3615,6 +3708,9 @@ export class UrlbarInput { | ||||
|      ) { | ||||
|        where = "current"; | ||||
|      } | ||||
| @@ -227,7 +219,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558 | ||||
|      return where; | ||||
|    } | ||||
|   | ||||
| @@ -3872,6 +3967,7 @@ export class UrlbarInput { | ||||
| @@ -3872,6 +3968,7 @@ export class UrlbarInput { | ||||
|        this.setResultForCurrentValue(null); | ||||
|        this.handleCommand(); | ||||
|        this.controller.clearLastQueryContextCache(); | ||||
| @@ -235,7 +227,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558 | ||||
|   | ||||
|        this._suppressStartQuery = false; | ||||
|      }); | ||||
| @@ -3879,7 +3975,6 @@ export class UrlbarInput { | ||||
| @@ -3879,7 +3976,6 @@ export class UrlbarInput { | ||||
|      contextMenu.addEventListener("popupshowing", () => { | ||||
|        // Close the results pane when the input field contextual menu is open, | ||||
|        // because paste and go doesn't want a result selection. | ||||
| @@ -243,7 +235,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558 | ||||
|   | ||||
|        let controller = | ||||
|          this.document.commandDispatcher.getControllerForCommand("cmd_paste"); | ||||
| @@ -3991,7 +4086,11 @@ export class UrlbarInput { | ||||
| @@ -3991,7 +4087,11 @@ export class UrlbarInput { | ||||
|      if (!engineName && !source && !this.hasAttribute("searchmode")) { | ||||
|        return; | ||||
|      } | ||||
| @@ -256,7 +248,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558 | ||||
|      if (this._searchModeIndicatorTitle) { | ||||
|        this._searchModeIndicatorTitle.textContent = ""; | ||||
|        this._searchModeIndicatorTitle.removeAttribute("data-l10n-id"); | ||||
| @@ -4302,6 +4401,7 @@ export class UrlbarInput { | ||||
| @@ -4302,6 +4402,7 @@ export class UrlbarInput { | ||||
|   | ||||
|      this.document.l10n.setAttributes( | ||||
|        this.inputField, | ||||
| @@ -264,7 +256,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558 | ||||
|        l10nId, | ||||
|        l10nId == "urlbar-placeholder-with-name" ? { name } : undefined | ||||
|      ); | ||||
| @@ -4413,6 +4513,11 @@ export class UrlbarInput { | ||||
| @@ -4413,6 +4514,11 @@ export class UrlbarInput { | ||||
|    } | ||||
|   | ||||
|    _on_click(event) { | ||||
| @@ -276,7 +268,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558 | ||||
|      if ( | ||||
|        event.target == this.inputField || | ||||
|        event.target == this._inputContainer | ||||
| @@ -4485,7 +4590,7 @@ export class UrlbarInput { | ||||
| @@ -4485,7 +4591,7 @@ export class UrlbarInput { | ||||
|        } | ||||
|      } | ||||
|   | ||||
| @@ -285,7 +277,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558 | ||||
|        this.view.autoOpen({ event }); | ||||
|      } else { | ||||
|        if (this._untrimOnFocusAfterKeydown) { | ||||
| @@ -4525,9 +4630,16 @@ export class UrlbarInput { | ||||
| @@ -4525,9 +4631,16 @@ export class UrlbarInput { | ||||
|    } | ||||
|   | ||||
|    _on_mousedown(event) { | ||||
| @@ -303,7 +295,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558 | ||||
|   | ||||
|          if ( | ||||
|            event.target != this.inputField && | ||||
| @@ -4538,6 +4650,10 @@ export class UrlbarInput { | ||||
| @@ -4538,6 +4651,10 @@ export class UrlbarInput { | ||||
|   | ||||
|          this.focusedViaMousedown = !this.focused; | ||||
|          this._preventClickSelectsAll = this.focused; | ||||
| @@ -314,7 +306,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558 | ||||
|   | ||||
|          // Keep the focus status, since the attribute may be changed | ||||
|          // upon calling this.focus(). | ||||
| @@ -4573,7 +4689,7 @@ export class UrlbarInput { | ||||
| @@ -4573,7 +4690,7 @@ export class UrlbarInput { | ||||
|          } | ||||
|          // Don't close the view when clicking on a tab; we may want to keep the | ||||
|          // view open on tab switch, and the TabSelect event arrived earlier. | ||||
| @@ -323,7 +315,7 @@ index afc7a6c6ddbf4cf5a5b27c0bd60577b833c63093..f28c9a1ac086af429a93bd01be5d3558 | ||||
|            break; | ||||
|          } | ||||
|   | ||||
| @@ -4890,7 +5006,7 @@ export class UrlbarInput { | ||||
| @@ -4890,7 +5007,7 @@ export class UrlbarInput { | ||||
|      // When we are in actions search mode we can show more results so | ||||
|      // increase the limit. | ||||
|      let maxResults = | ||||
|   | ||||
| @@ -544,12 +544,6 @@ groupbox h2 { | ||||
|   } | ||||
| } | ||||
|  | ||||
| @media (max-width: 1320px) { | ||||
|   #zenLayoutList { | ||||
|     flex-wrap: wrap; | ||||
|   } | ||||
| } | ||||
|  | ||||
| /* Disable mozilla's settings */ | ||||
|  | ||||
| #dataCollectionCategory, | ||||
|   | ||||
| @@ -1,16 +1,8 @@ | ||||
| diff --git a/browser/themes/shared/tabbrowser/content-area.css b/browser/themes/shared/tabbrowser/content-area.css | ||||
| index e06addf1602dc26ff4e75a8db6251231690f3f80..ffac005d5040852eda8f574f65f2eadf5ecbd642 100644 | ||||
| index e06addf1602dc26ff4e75a8db6251231690f3f80..86e2cd0194bb37fa140a2f93eccfdd61419a9aec 100644 | ||||
| --- a/browser/themes/shared/tabbrowser/content-area.css | ||||
| +++ b/browser/themes/shared/tabbrowser/content-area.css | ||||
| @@ -134,7 +134,6 @@ | ||||
|    } | ||||
|   | ||||
|    browser:is([blank], [pendingpaint]) { | ||||
| -    opacity: 0; | ||||
|    } | ||||
|   | ||||
|    browser[type="content"] { | ||||
| @@ -276,7 +275,7 @@ | ||||
| @@ -276,7 +276,7 @@ | ||||
|   | ||||
|  .dialogStack { | ||||
|    z-index: var(--browser-stack-z-index-dialog-stack); | ||||
|   | ||||
| @@ -1,24 +0,0 @@ | ||||
| diff --git a/toolkit/content/widgets/panel.js b/toolkit/content/widgets/panel.js | ||||
| index 1dd4fc2a839fc6fde1ce2fc6437625e8d22bbb90..04fcb049225148f1b1f9c4b16cf2d2537887fbec 100644 | ||||
| --- a/toolkit/content/widgets/panel.js | ||||
| +++ b/toolkit/content/widgets/panel.js | ||||
| @@ -138,6 +138,9 @@ | ||||
|              this.anchorNode.closest("toolbarbutton, .anchor-root") || | ||||
|              this.anchorNode; | ||||
|            anchorRoot.setAttribute("open", "true"); | ||||
| +          if (anchorRoot.closest("#urlbar") && window.gURLBar) { | ||||
| +            gURLBar.setAttribute("has-popup-open", "true"); | ||||
| +          } | ||||
|          } | ||||
|   | ||||
|          if (this.getAttribute("animate") != "false") { | ||||
| @@ -208,6 +211,9 @@ | ||||
|              this.anchorNode.closest("toolbarbutton, .anchor-root") || | ||||
|              this.anchorNode; | ||||
|            anchorRoot.removeAttribute("open"); | ||||
| +          if (anchorRoot.closest("#urlbar") && window.gURLBar) { | ||||
| +            gURLBar.removeAttribute("has-popup-open"); | ||||
| +          } | ||||
|          } | ||||
|        } | ||||
|   | ||||
| @@ -69,12 +69,12 @@ export var ZenCustomizableUI = new (class { | ||||
|         addon-webext-overflowtarget="overflowed-extensions-list" | ||||
|         mode="icons"> | ||||
|         <hbox id="zen-sidebar-top-buttons-customization-target" class="customization-target" flex="1"> | ||||
|           <toolbaritem id="zen-toggle-compact-mode" removable="true" data-l10n-id="zen-toggle-compact-mode-button"> | ||||
|           <toolbaritem id="zen-toggle-compact-mode" removable="true"> | ||||
|             <toolbarbutton | ||||
|               class="toolbarbutton-1" | ||||
|               command="cmd_toggleCompactModeIgnoreHover" | ||||
|               data-l10n-id="zen-toggle-compact-mode-button" | ||||
|               flex="1" /> | ||||
|               flex="1" | ||||
|               data-l10n-id="zen-toggle-compact-mode-button" /> | ||||
|           </toolbaritem> | ||||
|           <html:div id="zen-sidebar-top-buttons-separator" skipintoolbarset="true" overflows="false"></html:div> | ||||
|         </hbox> | ||||
|   | ||||
| @@ -24,11 +24,11 @@ | ||||
|         const { exists: shouldExist = true } = descendantSelectors; | ||||
|         if (exists === shouldExist) { | ||||
|           if (!element.hasAttribute(stateAttribute)) { | ||||
|             gZenCompactModeManager._setElementExpandAttribute(element, true, stateAttribute); | ||||
|             element.setAttribute(stateAttribute, 'true'); | ||||
|           } | ||||
|         } else { | ||||
|           if (element.hasAttribute(stateAttribute)) { | ||||
|             gZenCompactModeManager._setElementExpandAttribute(element, false, stateAttribute); | ||||
|             element.removeAttribute(stateAttribute); | ||||
|           } | ||||
|         } | ||||
|       }; | ||||
|   | ||||
| @@ -275,18 +275,15 @@ var gZenUIManager = { | ||||
|   // Section: URL bar | ||||
|  | ||||
|   onUrlbarOpen() { | ||||
|     setTimeout(() => { | ||||
|       const hadValid = gURLBar.getAttribute('pageproxystate') === 'valid'; | ||||
|       gURLBar.setPageProxyState('invalid', false); | ||||
|       gURLBar.setAttribute('had-proxystate', hadValid); | ||||
|     }, 0); | ||||
|     gURLBar.setAttribute('had-proxystate', gURLBar.getAttribute('pageproxystate')); | ||||
|     gURLBar.setPageProxyState('invalid', false); | ||||
|   }, | ||||
|  | ||||
|   onUrlbarClose() { | ||||
|     if (gURLBar.getAttribute('had-proxystate') == 'true') { | ||||
|       gURLBar.setPageProxyState('valid', false); | ||||
|     if (gURLBar.hasAttribute('had-proxystate')) { | ||||
|       gURLBar.setURI(); | ||||
|       gURLBar.removeAttribute('had-proxystate'); | ||||
|     } | ||||
|     gURLBar.removeAttribute('had-proxystate'); | ||||
|   }, | ||||
|  | ||||
|   onUrlbarSearchModeChanged(event) { | ||||
|   | ||||
| @@ -133,16 +133,12 @@ | ||||
| } | ||||
|  | ||||
| :root:not([zen-single-toolbar='true']) #zen-appcontent-wrapper { | ||||
|   z-index: 3; | ||||
|   z-index: 2; | ||||
| } | ||||
|  | ||||
| #nav-bar { | ||||
|   border-top-color: transparent !important; | ||||
|  | ||||
|   :root[zen-single-toolbar='true'] & { | ||||
|     border-top: none !important; | ||||
|     --zen-toolbar-height: 37px; | ||||
|   } | ||||
| :root[zen-single-toolbar='true'] #nav-bar { | ||||
|   border-top: none !important; | ||||
|   --zen-toolbar-height: 37px; | ||||
| } | ||||
|  | ||||
| #zen-main-app-wrapper { | ||||
| @@ -247,7 +243,6 @@ | ||||
| @media (-moz-platform: macos) { | ||||
|   :root[zen-window-buttons-reversed='true'][zen-right-side='true'] .titlebar-buttonbox-container { | ||||
|     margin-inline-start: max(calc(var(--zen-element-separation) - 3px), 4px); | ||||
|     margin-block: auto; | ||||
|   } | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -136,20 +136,16 @@ | ||||
|   } | ||||
|  | ||||
|   .identity-box-button, | ||||
|   .urlbar-page-action { | ||||
|   #zen-copy-url-button { | ||||
|     opacity: 0; | ||||
|     height: 100%; /* To still be able to open popups */ | ||||
|     transition: | ||||
|       opacity 0.15s, | ||||
|       visibility 0.15s; | ||||
|     visibility: collapse; | ||||
|  | ||||
|     :root:not([supress-primary-adjustment='true']) & { | ||||
|       transition: | ||||
|         opacity 0.15s, | ||||
|         visibility 0.15s; | ||||
|     } | ||||
|     height: 100%; /* To still be able to open popups */ | ||||
|  | ||||
|     #navigator-toolbox:hover &, | ||||
|     &[open], | ||||
|     #urlbar[has-popup-open='true'] &, | ||||
|     #identity-box[pageproxystate='invalid'] & { | ||||
|       opacity: 1; | ||||
|       visibility: visible; | ||||
| @@ -300,6 +296,13 @@ | ||||
| :root[zen-single-toolbar='true'] { | ||||
|   --urlbar-icon-border-radius: 8px !important; | ||||
|  | ||||
|   .urlbar-page-action:not([open]):not([showing]):not( | ||||
|       :is(#zen-copy-url-button, #identity-permission-box) | ||||
|     ), | ||||
|   #tracking-protection-icon-container { | ||||
|     display: none; | ||||
|   } | ||||
|  | ||||
|   #identity-permission-box > *:not(#zen-site-data-icon-button) { | ||||
|     visibility: collapse; | ||||
|   } | ||||
| @@ -310,7 +313,7 @@ | ||||
|  | ||||
|   #urlbar:not([breakout-extend='true']) { | ||||
|     #identity-box:not([pageproxystate='invalid']) { | ||||
|       order: 2; | ||||
|       order: 9; | ||||
|     } | ||||
|   } | ||||
|  | ||||
| @@ -739,9 +742,7 @@ | ||||
|  * them into a single, unified button */ | ||||
| #reader-mode-button, | ||||
| #urlbar-go-button, | ||||
| #star-button-box, | ||||
| #picture-in-picture-button, | ||||
| #pageActionButton:not([open]) { | ||||
| #star-button-box { | ||||
|   display: none !important; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -33,12 +33,6 @@ | ||||
|   display: none !important; | ||||
| } | ||||
|  | ||||
| /* hide Mozilla services from the app menu */ | ||||
| #PanelUI-fxa-menu-services, | ||||
| #PanelUI-fxa-cta-menu { | ||||
|   display: none !important; | ||||
| } | ||||
|  | ||||
| body > #confetti { | ||||
|   z-index: 1; | ||||
| } | ||||
| @@ -296,23 +290,16 @@ body > #confetti { | ||||
|   --arrowpanel-menuitem-border-radius: 10px; | ||||
| } | ||||
|  | ||||
| #unified-extensions-messages-container { | ||||
|   display: none; | ||||
| } | ||||
|  | ||||
| #zen-site-data-addons { | ||||
|   display: flex; | ||||
|   flex-wrap: wrap; | ||||
|   gap: 8px; | ||||
|   overflow: visible; | ||||
|  | ||||
|   unified-extensions-item-messagebar-wrapper, | ||||
|   .unified-extensions-item-contents { | ||||
|     display: none !important; | ||||
|   } | ||||
|  | ||||
|   &[overflowing='true'] { | ||||
|     overflow-x: auto; | ||||
|     max-height: 420px; | ||||
|     mask-image: linear-gradient(to top, transparent, black 5%); | ||||
|   } | ||||
|  | ||||
|   .unified-extensions-item-name, | ||||
|   .unified-extensions-item-message, | ||||
|   .unified-extensions-item-message-hover, | ||||
| @@ -339,11 +326,6 @@ body > #confetti { | ||||
|       justify-content: center; | ||||
|       align-items: center; | ||||
|       border-radius: 6px; | ||||
|  | ||||
|       @media not (-moz-platform: macos) { | ||||
|         border-radius: 4px; | ||||
|       } | ||||
|  | ||||
|       transition: | ||||
|         background-color 0.1s ease-in-out, | ||||
|         transform 0.12s ease-in-out; | ||||
| @@ -503,10 +485,6 @@ body > #confetti { | ||||
|   padding: 8px; | ||||
|   padding-bottom: 0; | ||||
|  | ||||
|   :root[zen-single-toolbar='true']:not([zen-right-side='true']) & { | ||||
|     flex-direction: row-reverse; | ||||
|   } | ||||
|  | ||||
|   & toolbarbutton { | ||||
|     margin: 0; | ||||
|     appearance: none; | ||||
| @@ -537,27 +515,18 @@ body > #confetti { | ||||
|       position: absolute; | ||||
|       width: 100%; | ||||
|       height: 100%; | ||||
|       @media (-moz-platform: macos) { | ||||
|         background: linear-gradient( | ||||
|           to bottom, | ||||
|           light-dark(rgb(255, 255, 255), rgb(34, 34, 34)), | ||||
|           light-dark(rgb(246, 246, 246), rgb(21, 21, 21)) | ||||
|         ); | ||||
|  | ||||
|         box-shadow: | ||||
|           0px 2px 4px rgba(0, 0, 0, 0.075), | ||||
|           inset 0px 1px 0px light-dark(transparent, rgba(255, 255, 255, 0.15)); | ||||
|         border-radius: 6px; | ||||
|         --base-border-color: light-dark(rgba(0, 0, 0, 0.175), rgba(255, 255, 255, 0.1)); | ||||
|         border: 1px solid light-dark(var(--base-border-color), rgb(21, 21, 21)); | ||||
|       } | ||||
|  | ||||
|       @media not (-moz-platform: macos) { | ||||
|         border-radius: 4px; | ||||
|         background-color: color-mix(in srgb, currentcolor 6%, transparent); | ||||
|       } | ||||
|  | ||||
|       background: linear-gradient( | ||||
|         to bottom, | ||||
|         light-dark(rgb(255, 255, 255), rgb(34, 34, 34)), | ||||
|         light-dark(rgb(246, 246, 246), rgb(21, 21, 21)) | ||||
|       ); | ||||
|       transition: transform 0.12s ease-in-out; | ||||
|       box-shadow: | ||||
|         0px 2px 4px rgba(0, 0, 0, 0.075), | ||||
|         inset 0px 1px 0px light-dark(transparent, rgba(255, 255, 255, 0.15)); | ||||
|       border-radius: 6px; | ||||
|       --base-border-color: light-dark(rgba(0, 0, 0, 0.175), rgba(255, 255, 255, 0.1)); | ||||
|       border: 1px solid light-dark(var(--base-border-color), rgb(21, 21, 21)); | ||||
|       box-sizing: border-box; | ||||
|       will-change: transform; | ||||
|     } | ||||
| @@ -584,10 +553,6 @@ body > #confetti { | ||||
|   margin: 6px 0; | ||||
| } | ||||
|  | ||||
| #unified-extensions-messages-container:empty { | ||||
|   display: none; | ||||
| } | ||||
|  | ||||
| /* Overflow panel */ | ||||
| #widget-overflow-mainView { | ||||
|   --menu-panel-width-wide: 200px; | ||||
|   | ||||
| @@ -195,8 +195,7 @@ | ||||
|  | ||||
|   /* Transitions */ | ||||
|   --zen-tabbox-element-indent-transition: margin-inline-start 0.1s ease-in-out; | ||||
|   --zen-hidden-toolbar-transition-duration: 0.15s; | ||||
|   --zen-hidden-toolbar-transition: var(--zen-hidden-toolbar-transition-duration) ease-in-out; | ||||
|   --zen-hidden-toolbar-transition: 0.15s ease-in-out; | ||||
|  | ||||
|   /* XUL */ | ||||
|   --zen-main-browser-background: light-dark(rgb(235, 235, 235), #1b1b1b); | ||||
|   | ||||
| @@ -143,7 +143,6 @@ var gZenCompactModeManager = { | ||||
|   }, | ||||
|  | ||||
|   addHasPolyfillObserver() { | ||||
|     const attributes = ['panelopen', 'open', 'breakout-extend', 'zen-floating-urlbar']; | ||||
|     this.sidebarObserverId = ZenHasPolyfill.observeSelectorExistence( | ||||
|       this.sidebar, | ||||
|       [ | ||||
| @@ -153,21 +152,8 @@ var gZenCompactModeManager = { | ||||
|         }, | ||||
|       ], | ||||
|       'zen-compact-mode-active', | ||||
|       attributes | ||||
|       ['panelopen', 'open', 'breakout-extend', 'zen-floating-urlbar'] | ||||
|     ); | ||||
|     this.toolbarObserverId = ZenHasPolyfill.observeSelectorExistence( | ||||
|       document.getElementById('zen-appcontent-navbar-wrapper'), | ||||
|       [ | ||||
|         { | ||||
|           selector: | ||||
|             ":is([panelopen='true'], [open='true'], #urlbar:focus-within, [breakout-extend='true']):not(.zen-compact-mode-ignore)", | ||||
|         }, | ||||
|       ], | ||||
|       'zen-compact-mode-active', | ||||
|       attributes | ||||
|     ); | ||||
|     // Always connect this observer, we need it even if compact mode is disabled | ||||
|     ZenHasPolyfill.connectObserver(this.toolbarObserverId); | ||||
|   }, | ||||
|  | ||||
|   flashSidebarIfNecessary(aInstant = false) { | ||||
| @@ -216,7 +202,7 @@ var gZenCompactModeManager = { | ||||
|   }, | ||||
|  | ||||
|   updateCompactModeContext(isSingleToolbar) { | ||||
|     const isIllegalState = this.checkIfIllegalState(); | ||||
|     isSingleToolbar ||= this.checkIfIllegalState(); | ||||
|     const menuitem = document.getElementById('zen-context-menu-compact-mode-toggle'); | ||||
|     const menu = document.getElementById('zen-context-menu-compact-mode'); | ||||
|     if (isSingleToolbar) { | ||||
| @@ -226,14 +212,6 @@ var gZenCompactModeManager = { | ||||
|       menu.removeAttribute('hidden'); | ||||
|       menu.querySelector('menupopup').prepend(menuitem); | ||||
|     } | ||||
|     const hideToolbarMenuItem = document.getElementById( | ||||
|       'zen-context-menu-compact-mode-hide-toolbar' | ||||
|     ); | ||||
|     if (isIllegalState) { | ||||
|       hideToolbarMenuItem.setAttribute('disabled', 'true'); | ||||
|     } else { | ||||
|       hideToolbarMenuItem.removeAttribute('disabled'); | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|   hideSidebar() { | ||||
| @@ -623,7 +601,7 @@ var gZenCompactModeManager = { | ||||
|   }, | ||||
|  | ||||
|   _setElementExpandAttribute(element, value, attr = 'zen-has-hover') { | ||||
|     const kVerifiedAttributes = ['zen-has-hover', 'has-popup-menu', 'zen-compact-mode-active']; | ||||
|     const kVerifiedAttributes = ['zen-has-hover', 'has-popup-menu']; | ||||
|     const isToolbar = element.id === 'zen-appcontent-navbar-wrapper'; | ||||
|     if (value) { | ||||
|       element.setAttribute(attr, 'true'); | ||||
| @@ -634,7 +612,8 @@ var gZenCompactModeManager = { | ||||
|             document.documentElement.hasAttribute('zen-has-bookmarks'))) || | ||||
|           (this.preference && | ||||
|             Services.prefs.getBoolPref('zen.view.compact.hide-toolbar') && | ||||
|             !gZenVerticalTabsManager._hasSetSingleToolbar)) | ||||
|             !gZenVerticalTabsManager._hasSetSingleToolbar && | ||||
|             !gURLBar.hasAttribute('breakout-extend'))) | ||||
|       ) { | ||||
|         gBrowser.tabpanels.setAttribute('has-toolbar-hovered', 'true'); | ||||
|       } | ||||
|   | ||||
| @@ -35,8 +35,7 @@ | ||||
|     overflow: clip; | ||||
|  | ||||
|     & #urlbar:not([breakout-extend='true']) { | ||||
|       /* Sometimes, "opacity: 1" is forced elsewhere */ | ||||
|       opacity: 0 !important; | ||||
|       opacity: 0; | ||||
|       pointer-events: none; | ||||
|       transition: opacity var(--zen-hidden-toolbar-transition); | ||||
|     } | ||||
| @@ -49,18 +48,20 @@ | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   & #zen-appcontent-navbar-wrapper:is( | ||||
|     [zen-has-hover], | ||||
|     [has-popup-menu], | ||||
|     [zen-compact-mode-active] | ||||
|   ) { | ||||
|   & #zen-appcontent-navbar-wrapper[zen-has-hover], | ||||
|   & #zen-appcontent-navbar-wrapper[has-popup-menu], | ||||
|   & | ||||
|     #zen-appcontent-navbar-wrapper:has( | ||||
|       *:is([panelopen='true'], [open='true'], #urlbar:focus-within, [breakout-extend='true']):not(.zen-compact-mode-ignore) | ||||
|     ) { | ||||
|  | ||||
|     height: var(--zen-toolbar-height-with-bookmarks); | ||||
|     overflow: inherit; | ||||
|  | ||||
| %include windows-captions-fix-active.inc.css | ||||
|  | ||||
|     & #urlbar { | ||||
|       opacity: 1 !important; | ||||
|       opacity: 1; | ||||
|       pointer-events: auto; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -5,6 +5,6 @@ | ||||
|  */ | ||||
|  | ||||
| & .titlebar-buttonbox-container { | ||||
|   max-height: 100%; | ||||
|   visibility: visible; | ||||
|   transition: none; | ||||
| } | ||||
|   | ||||
| @@ -5,15 +5,9 @@ | ||||
|  */ | ||||
|  | ||||
| & .titlebar-buttonbox-container { | ||||
|   max-height: 0px; | ||||
|   display: collapse; | ||||
|   /* We need to hide them since on Windows the native | ||||
|    * panels when hovering over them can interfere with the | ||||
|    * web content */ | ||||
|   transition: max-height 0s; | ||||
|   transition-delay: calc(var(--zen-hidden-toolbar-transition-duration) + 0.2s); | ||||
|  | ||||
|   & .titlebar-button { | ||||
|     padding-top: 0 !important; | ||||
|     padding-bottom: 0 !important; | ||||
|   } | ||||
|   transition: visibility var(--zen-hidden-toolbar-transition); | ||||
| } | ||||
|   | ||||
| @@ -24,9 +24,6 @@ | ||||
|     #duringOpening = false; | ||||
|     #ignoreClose = false; | ||||
|  | ||||
|     // Click handling | ||||
|     #lastLinkClickData = { clientX: 0, clientY: 0, height: 0, width: 0 }; | ||||
|  | ||||
|     // Arc animation configuration | ||||
|     #ARC_CONFIG = Object.freeze({ | ||||
|       ARC_STEPS: 70, // Increased for smoother bounce | ||||
| @@ -247,7 +244,7 @@ | ||||
|         { | ||||
|           duration: 0.3, | ||||
|           type: 'spring', | ||||
|           delay: 0.2, | ||||
|           delay: 0.15, | ||||
|           bounce: 0, | ||||
|         } | ||||
|       ); | ||||
| @@ -271,31 +268,10 @@ | ||||
|         data.height | ||||
|       ); | ||||
|       return await this.#imageBitmapToBase64( | ||||
|         await window.browsingContext.currentWindowGlobal.drawSnapshot( | ||||
|           rect, | ||||
|           1, | ||||
|           'transparent', | ||||
|           undefined | ||||
|         ) | ||||
|         await window.browsingContext.currentWindowGlobal.drawSnapshot(rect, 1, 'transparent', true) | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Set the last link click data | ||||
|      * @param {Object} data - The link click data | ||||
|      */ | ||||
|     set lastLinkClickData(data) { | ||||
|       this.#lastLinkClickData = data; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get the last link click data | ||||
|      * @returns {Object} The last link click data | ||||
|      */ | ||||
|     get lastLinkClickData() { | ||||
|       return this.#lastLinkClickData; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Open a glance overlay with the specified data | ||||
|      * @param {Object} data - Glance data including URL, position, and dimensions | ||||
| @@ -313,13 +289,6 @@ | ||||
|         return; | ||||
|       } | ||||
|  | ||||
|       if (!data.height || !data.width) { | ||||
|         data = { | ||||
|           ...data, | ||||
|           ...this.lastLinkClickData, | ||||
|         }; | ||||
|       } | ||||
|  | ||||
|       this.#setAnimationState(true); | ||||
|       const currentTab = ownerTab ?? gBrowser.selectedTab; | ||||
|       const browserElement = this.#createBrowserElement(data.url, currentTab, existingTab); | ||||
| @@ -356,13 +325,12 @@ | ||||
|         gZenViewSplitter.onLocationChange(browserElement); | ||||
|         this.#prepareGlanceAnimation(data, browserElement); | ||||
|         if (data.width && data.height) { | ||||
|           // It is guaranteed that we will animate this opacity later on | ||||
|           // when we start animating the glance. | ||||
|           this.contentWrapper.style.opacity = 0; | ||||
|           data.elementData = await this.#getElementPreviewData(data); | ||||
|         } | ||||
|         this.#glances.get(this.#currentGlanceID).elementData = data.elementData; | ||||
|         this.#executeGlanceAnimation(data, browserElement, resolve); | ||||
|         window.requestAnimationFrame(() => { | ||||
|           this.#executeGlanceAnimation(data, browserElement, resolve); | ||||
|         }); | ||||
|       }); | ||||
|     } | ||||
|  | ||||
| @@ -376,6 +344,7 @@ | ||||
|       const newButtons = this.#createNewOverlayButtons(); | ||||
|       this.browserWrapper.appendChild(newButtons); | ||||
|  | ||||
|       this.#animateParentBackground(); | ||||
|       this.#setupGlancePositioning(data); | ||||
|       this.#configureBrowserElement(browserElement); | ||||
|     } | ||||
| @@ -434,16 +403,6 @@ | ||||
|       }; | ||||
|     } | ||||
|  | ||||
|     #createGlancePreviewElement(src) { | ||||
|       const imageDataElement = document.createXULElement('image'); | ||||
|       imageDataElement.setAttribute('src', src); | ||||
|  | ||||
|       const parent = document.createElement('div'); | ||||
|       parent.classList.add('zen-glance-element-preview'); | ||||
|       parent.appendChild(imageDataElement); | ||||
|       return parent; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Handle element preview if provided | ||||
|      * @param {Object} data - Glance data | ||||
| @@ -454,7 +413,13 @@ | ||||
|         return null; | ||||
|       } | ||||
|  | ||||
|       const imageDataElement = this.#createGlancePreviewElement(data.elementData); | ||||
|       const imageDataElement = document.createXULElement('image'); | ||||
|       imageDataElement.setAttribute('src', data.elementData); | ||||
|       imageDataElement.classList.add('zen-glance-element-preview'); | ||||
|  | ||||
|       // set an aspect ratio to prevent stretching during animation | ||||
|       imageDataElement.style.aspectRatio = `${data.width} / ${data.height}`; | ||||
|  | ||||
|       this.browserWrapper.prepend(imageDataElement); | ||||
|       this.#glances.get(this.#currentGlanceID).elementImageData = data.elementData; | ||||
|  | ||||
| @@ -464,7 +429,7 @@ | ||||
|           opacity: [1, 0], | ||||
|         }, | ||||
|         { | ||||
|           duration: 0.25, | ||||
|           duration: 0.3, | ||||
|           easing: 'easeInOut', | ||||
|         } | ||||
|       ); | ||||
| @@ -523,6 +488,7 @@ | ||||
|       // nice fade-in effect to the content. But if it doesn't exist, | ||||
|       // we just fall back to always showing the browser directly. | ||||
|       if (data.elementData) { | ||||
|         this.contentWrapper.style.opacity = 0; | ||||
|         gZenUIManager.motion | ||||
|           .animate( | ||||
|             this.contentWrapper, | ||||
| @@ -537,7 +503,6 @@ | ||||
|           }); | ||||
|       } | ||||
|  | ||||
|       this.#animateParentBackground(); | ||||
|       gZenUIManager.motion | ||||
|         .animate(this.browserWrapper, arcSequence, { | ||||
|           duration: gZenUIManager.testingEnabled ? 0 : 0.4, | ||||
| @@ -952,7 +917,7 @@ | ||||
|         const originalPosition = this.#glances.get(this.#currentGlanceID).originalPosition; | ||||
|         const elementImageData = this.#glances.get(this.#currentGlanceID).elementImageData; | ||||
|  | ||||
|         this.#addElementPreview(elementImageData); | ||||
|         this.#addElementPreview(elementImageData, originalPosition); | ||||
|  | ||||
|         // Create curved closing animation sequence | ||||
|         const closingData = this.#createClosingDataFromOriginalPosition(originalPosition); | ||||
| @@ -994,10 +959,17 @@ | ||||
|     /** | ||||
|      * Add element preview if available, used for the closing animation | ||||
|      * @param {string} elementImageData - The element image data | ||||
|      * @param {Object} rect - The rectangle data | ||||
|      */ | ||||
|     #addElementPreview(elementImageData) { | ||||
|     #addElementPreview(elementImageData, rect) { | ||||
|       if (elementImageData) { | ||||
|         const imageDataElement = this.#createGlancePreviewElement(elementImageData); | ||||
|         const imageDataElement = document.createXULElement('image'); | ||||
|         imageDataElement.setAttribute('src', elementImageData); | ||||
|         imageDataElement.classList.add('zen-glance-element-preview'); | ||||
|  | ||||
|         // set an aspect ratio to prevent stretching during animation | ||||
|         imageDataElement.style.aspectRatio = `${parseFloat(rect.width)} / ${parseFloat(rect.height)}`; | ||||
|  | ||||
|         this.browserWrapper.prepend(imageDataElement); | ||||
|       } | ||||
|     } | ||||
| @@ -1018,7 +990,7 @@ | ||||
|       if (!onTabClose) { | ||||
|         this.quickCloseGlance({ clearID: false }); | ||||
|       } | ||||
|       this.overlay.style.display = 'none'; | ||||
|       this.browserWrapper.style.display = 'none'; | ||||
|       this.overlay.removeAttribute('fade-out'); | ||||
|       this.browserWrapper.removeAttribute('animate'); | ||||
|  | ||||
| @@ -1385,9 +1357,18 @@ | ||||
|      * @param {Tab} tab - The tab to open glance for | ||||
|      */ | ||||
|     #openGlanceForTab(tab) { | ||||
|       const browserRect = window.windowUtils.getBoundsWithoutFlushing(gBrowser.tabbox); | ||||
|       const clickPosition = gZenUIManager._lastClickPosition || { | ||||
|         clientX: browserRect.width / 2, | ||||
|         clientY: browserRect.height / 2, | ||||
|       }; | ||||
|  | ||||
|       this.openGlance( | ||||
|         { | ||||
|           url: undefined, | ||||
|           ...clickPosition, | ||||
|           width: 0, | ||||
|           height: 0, | ||||
|         }, | ||||
|         tab, | ||||
|         tab.owner | ||||
|   | ||||
| @@ -35,30 +35,22 @@ export class ZenGlanceChild extends JSWindowActorChild { | ||||
|     return !(event.ctrlKey ^ event.altKey ^ event.shiftKey ^ event.metaKey); | ||||
|   } | ||||
|  | ||||
|   #openGlance(target) { | ||||
|   openGlance(target, originalTarget) { | ||||
|     let url = target.href; | ||||
|     // Add domain to relative URLs | ||||
|     if (!url.match(/^(?:[a-z]+:)?\/\//i)) { | ||||
|       url = this.contentWindow.location.origin + url; | ||||
|     } | ||||
|     this.sendAsyncMessage('ZenGlance:OpenGlance', { | ||||
|       url, | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   #sendClickDataToParent(target, element) { | ||||
|     if (!element || !target) { | ||||
|       return; | ||||
|     } | ||||
|     // Get the largest element we can get. If the `A` element | ||||
|     // is a parent of the original target, use the anchor element, | ||||
|     // otherwise use the original target. | ||||
|     let rect = element.getBoundingClientRect(); | ||||
|     let rect = originalTarget.getBoundingClientRect(); | ||||
|     const anchorRect = target.getBoundingClientRect(); | ||||
|     if (anchorRect.width * anchorRect.height > rect.width * rect.height) { | ||||
|       rect = anchorRect; | ||||
|     } | ||||
|     this.sendAsyncMessage('ZenGlance:RecordLinkClickData', { | ||||
|     this.sendAsyncMessage('ZenGlance:OpenGlance', { | ||||
|       url, | ||||
|       clientX: rect.left, | ||||
|       clientY: rect.top, | ||||
|       width: rect.width, | ||||
| @@ -67,19 +59,7 @@ export class ZenGlanceChild extends JSWindowActorChild { | ||||
|   } | ||||
|  | ||||
|   handleClick(event) { | ||||
|     if (event.button !== 0 || event.defaultPrevented) { | ||||
|       return; | ||||
|     } | ||||
|     // get closest A element | ||||
|     const target = event.target.closest('A'); | ||||
|     const elementToRecord = event.originalTarget || event.target; | ||||
|     // We record the link data anyway, even if the glance may be invoked | ||||
|     // or not. We have some cases where glance would open, for example, | ||||
|     // when clicking on a link with a different domain where glance would open. | ||||
|     // The problem is that at that stage we don't know the rect or even what | ||||
|     // element has been clicked, so we send the data here. | ||||
|     this.#sendClickDataToParent(target, elementToRecord); | ||||
|     if (this.ensureOnlyKeyModifiers(event)) { | ||||
|     if (this.ensureOnlyKeyModifiers(event) || event.button !== 0 || event.defaultPrevented) { | ||||
|       return; | ||||
|     } | ||||
|     const activationMethod = this.#activationMethod; | ||||
| @@ -92,11 +72,13 @@ export class ZenGlanceChild extends JSWindowActorChild { | ||||
|     } else if (activationMethod === 'meta' && !event.metaKey) { | ||||
|       return; | ||||
|     } | ||||
|     // get closest A element | ||||
|     const target = event.target.closest('A'); | ||||
|     if (target) { | ||||
|       event.preventDefault(); | ||||
|       event.stopPropagation(); | ||||
|  | ||||
|       this.#openGlance(target); | ||||
|       this.openGlance(target, event.originalTarget || event.target); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   | ||||
| @@ -23,10 +23,6 @@ export class ZenGlanceParent extends JSWindowActorParent { | ||||
|         this.browsingContext.topChromeWindow.gZenGlanceManager.closeGlance(params); | ||||
|         break; | ||||
|       } | ||||
|       case 'ZenGlance:RecordLinkClickData': { | ||||
|         this.browsingContext.topChromeWindow.gZenGlanceManager.lastLinkClickData = message.data; | ||||
|         break; | ||||
|       } | ||||
|       default: | ||||
|         console.warn(`[glance]: Unknown message: ${message.name}`); | ||||
|     } | ||||
|   | ||||
| @@ -174,14 +174,7 @@ | ||||
|   height: 100%; | ||||
|   z-index: 0; | ||||
|   border-radius: var(--zen-native-inner-radius); | ||||
|   top: 0%; | ||||
|   left: 50%; | ||||
|   translate: -50% 0%; | ||||
|   inset: 50%; | ||||
|   translate: -50% -50%; | ||||
|   will-change: transform, opacity; | ||||
|   background: rgba(255, 255, 255, 0.1); | ||||
|  | ||||
|   & image { | ||||
|     width: 100%; | ||||
|     max-width: 100%; | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -294,7 +294,7 @@ | ||||
| } | ||||
|  | ||||
| /* Hide #zen-media-focus-button if it doesn't fit in the toolbar */ | ||||
| @container media-controls (max-width: 165px) { | ||||
| @container media-controls (max-width: 150px) { | ||||
|   #zen-media-focus-button { | ||||
|     display: none; | ||||
|   } | ||||
|   | ||||
							
								
								
									
										27
									
								
								src/zen/sessionstore/ZenSessionFile.sys.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/zen/sessionstore/ZenSessionFile.sys.mjs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| // 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/. | ||||
|  | ||||
| const FILE_NAME = 'zen-sessions.jsonlz4'; | ||||
|  | ||||
| export class nsZenSessionFile { | ||||
|   #path; | ||||
|  | ||||
|   #windows; | ||||
|  | ||||
|   constructor() { | ||||
|     this.#path = PathUtils.join(profileDir, FILE_NAME); | ||||
|   } | ||||
|  | ||||
|   async read() { | ||||
|     try { | ||||
|       return await IOUtils.readJSON(this.#path, { compress: true }); | ||||
|     } catch (e) { | ||||
|       return {}; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   async write(data) { | ||||
|     await IOUtils.writeJSON(this.#path, data, { compress: true }); | ||||
|   } | ||||
| } | ||||
							
								
								
									
										50
									
								
								src/zen/sessionstore/ZenSessionManager.sys.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								src/zen/sessionstore/ZenSessionManager.sys.mjs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,50 @@ | ||||
| // 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/. | ||||
|  | ||||
| import { | ||||
|   cancelIdleCallback, | ||||
|   clearTimeout, | ||||
|   requestIdleCallback, | ||||
|   setTimeout, | ||||
| } from 'resource://gre/modules/Timer.sys.mjs'; | ||||
|  | ||||
| const lazy = {}; | ||||
|  | ||||
| ChromeUtils.defineESModuleGetters(lazy, { | ||||
|   ZenSessionFile: 'resource://gre/modules/ZenSessionFile.sys.mjs', | ||||
|   PrivateBrowsingUtils: 'resource://gre/modules/PrivateBrowsingUtils.sys.mjs', | ||||
|   RunState: 'resource:///modules/sessionstore/RunState.sys.mjs', | ||||
| }); | ||||
|  | ||||
| class nsZenSessionManager { | ||||
|   #file; | ||||
|  | ||||
|   constructor() { | ||||
|     this.#file = null; | ||||
|   } | ||||
|  | ||||
|   get file() { | ||||
|     if (!this.#file) { | ||||
|       this.#file = lazy.ZenSessionFile; | ||||
|     } | ||||
|     return this.#file; | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Saves the current session state. Collects data and writes to disk. | ||||
|    * | ||||
|    * @param forceUpdateAllWindows (optional) | ||||
|    *        Forces us to recollect data for all windows and will bypass and | ||||
|    *        update the corresponding caches. | ||||
|    */ | ||||
|   saveState(forceUpdateAllWindows = false) { | ||||
|     if (lazy.PrivateBrowsingUtils.permanentPrivateBrowsing) { | ||||
|       // Don't save (or even collect) anything in permanent private | ||||
|       // browsing mode | ||||
|       return Promise.resolve(); | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| export const ZenSessionStore = new nsZenSessionManager(); | ||||
							
								
								
									
										35
									
								
								src/zen/sessionstore/ZenSessionWindow.sys.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								src/zen/sessionstore/ZenSessionWindow.sys.mjs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| // 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/. | ||||
|  | ||||
| export class ZenSessionWindow { | ||||
|   #id; | ||||
|   #selectedWorkspace; | ||||
|   #selectedTab; | ||||
|  | ||||
|   constructor(id) { | ||||
|     this.#id = id; | ||||
|     this.#selectedWorkspace = null; | ||||
|     this.#selectedTab = null; | ||||
|   } | ||||
|  | ||||
|   get id() { | ||||
|     return this.#id; | ||||
|   } | ||||
|  | ||||
|   get selectedWorkspace() { | ||||
|     return this.#selectedWorkspace; | ||||
|   } | ||||
|  | ||||
|   set selectedWorkspace(workspace) { | ||||
|     this.#selectedWorkspace = workspace; | ||||
|   } | ||||
|  | ||||
|   get selectedTab() { | ||||
|     return this.#selectedTab; | ||||
|   } | ||||
|  | ||||
|   set selectedTab(tab) { | ||||
|     this.#selectedTab = tab; | ||||
|   } | ||||
| } | ||||
| @@ -133,11 +133,8 @@ tab-group[split-view-group] { | ||||
|     } | ||||
|  | ||||
|     @container browser-tab (min-width: 70px) { | ||||
|       :root[zen-sidebar-expanded='true'] &:hover > .tabbrowser-tab:not([pinned]:not([pending])) .tab-close-button { | ||||
|       :root[zen-sidebar-expanded='true'] &:hover > .tabbrowser-tab:not([pinned]) .tab-close-button { | ||||
|         display: block !important; | ||||
|  | ||||
|         /* This is from Firefox itself, but we need to always override it */ | ||||
|         margin-inline-end: 0 !important; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -101,6 +101,7 @@ | ||||
|     } | ||||
|  | ||||
|     onTabIconChanged(tab, url = null) { | ||||
|       tab.dispatchEvent(new CustomEvent('ZenTabIconChanged', { bubbles: true, detail: { tab } })); | ||||
|       const iconUrl = url ?? tab.iconImage.src; | ||||
|       if (!iconUrl && tab.hasAttribute('zen-pin-id')) { | ||||
|         try { | ||||
| @@ -883,7 +884,7 @@ | ||||
|               ); | ||||
|               for (const tab of pinnedTabs) { | ||||
|                 if (allAreUnloaded && closeIfPending) { | ||||
|                   return await this.onCloseTabShortcut(event, tab, { behavior: 'close' }); | ||||
|                   return await this._onCloseTabShortcut(event, tab, { behavior: 'close' }); | ||||
|                 } | ||||
|               } | ||||
|               await gBrowser.explicitUnloadTabs(pinnedTabs); | ||||
| @@ -1098,7 +1099,7 @@ | ||||
|       const element = window.MozXULElement.parseXULToFragment(` | ||||
|             <menuitem id="context_zen-add-essential" | ||||
|                       data-l10n-id="tab-context-zen-add-essential" | ||||
|                       data-l10n-args='{"num": "0", "max": "${this.maxEssentialTabs}"}' | ||||
|                       data-l10n-args='{"num": "0", "max": "12"}' | ||||
|                       hidden="true" | ||||
|                       disabled="true" | ||||
|                       command="cmd_contextZenAddToEssentials"/> | ||||
| @@ -1555,6 +1556,7 @@ | ||||
|     } | ||||
|  | ||||
|     async onTabLabelChanged(tab) { | ||||
|       tab.dispatchEvent(new CustomEvent('ZenTabLabelChanged', { detail: { tab } })); | ||||
|       if (!this._pinsCache) { | ||||
|         return; | ||||
|       } | ||||
|   | ||||
| @@ -112,17 +112,5 @@ | ||||
|     & #titlebar { | ||||
|       padding-top: var(--zen-toolbar-height); | ||||
|     } | ||||
|  | ||||
|     & #nav-bar { | ||||
|       width: calc(100% + var(--zen-toolbox-max-width) - var(--zen-element-separation)); | ||||
|  | ||||
|       /** | ||||
|        * We only want it when the window buttons are on the left side, in other | ||||
|        * words, the first of the two selectors above. | ||||
|        */ | ||||
|       :root:not([zen-window-buttons-reversed='true']) & { | ||||
|         margin-left: calc(-1 * var(--zen-toolbox-max-width) + var(--zen-element-separation) + 4px); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @@ -22,7 +22,9 @@ z-index: 1; | ||||
|  | ||||
| %include ../../compact-mode/windows-captions-fix-active.inc.css | ||||
|  | ||||
|   &:not([zen-has-hover='true']):not([has-popup-menu]):not([zen-compact-mode-active]) { | ||||
|   &:not([zen-has-hover='true']):not([has-popup-menu]):not(:focus-within):not( | ||||
|       :has(*:is([panelopen='true'], [open='true'])) | ||||
|     ) { | ||||
|     height: var(--zen-element-separation); | ||||
|     opacity: 0; | ||||
|     & #zen-appcontent-navbar-container { | ||||
| @@ -30,6 +32,11 @@ z-index: 1; | ||||
|     } | ||||
|  | ||||
| %include ../../compact-mode/windows-captions-fix-default.inc.css | ||||
|  | ||||
|     & .titlebar-button { | ||||
|       padding-top: 0 !important; | ||||
|       padding-bottom: 0 !important; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   @media -moz-pref('zen.view.experimental-no-window-controls') { | ||||
|   | ||||
| @@ -618,6 +618,12 @@ | ||||
|   --tab-min-width: 48px !important; | ||||
|   --zen-toolbox-padding: 6px !important; | ||||
|   --zen-toolbox-max-width: calc(var(--tab-min-width) + var(--zen-toolbox-padding) * 2); | ||||
|  | ||||
|   /* We can't show the rename input properly in collapsed state, | ||||
|      so hide the workspace edit input */ | ||||
|   #context_zenEditWorkspace { | ||||
|     display: none; | ||||
|   } | ||||
| } | ||||
|  | ||||
| #navigator-toolbox:not([zen-sidebar-expanded='true']) { | ||||
| @@ -700,6 +706,7 @@ | ||||
|  | ||||
|   & #titlebar { | ||||
|     display: grid; | ||||
|     overflow: clip; | ||||
|   } | ||||
|  | ||||
|   & #zen-sidebar-top-buttons-customization-target { | ||||
| @@ -956,7 +963,7 @@ | ||||
|   :root[zen-single-toolbar='true'] & { | ||||
|     --zen-toolbar-height: 36px; | ||||
|     @media (-moz-platform: macos) { | ||||
|       --zen-toolbar-height: 38px; | ||||
|       --zen-toolbar-height: 42px; | ||||
|     } | ||||
|  | ||||
|     & #PanelUI-button { | ||||
|   | ||||
| @@ -127,16 +127,6 @@ export class nsZenSiteDataPanel { | ||||
|     this.#setSitePermissions(); | ||||
|     this.#setSiteSecurityInfo(); | ||||
|     this.#setSiteHeader(); | ||||
|     this.#setAddonsOverflow(); | ||||
|   } | ||||
|  | ||||
|   #setAddonsOverflow() { | ||||
|     const addons = this.document.getElementById('zen-site-data-addons'); | ||||
|     if (addons.getBoundingClientRect().height > 420) { | ||||
|       addons.setAttribute('overflowing', 'true'); | ||||
|     } else { | ||||
|       addons.removeAttribute('overflowing'); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   #setSiteHeader() { | ||||
| @@ -363,15 +353,9 @@ export class nsZenSiteDataPanel { | ||||
|     switch (permission.state) { | ||||
|       // There should only be these types being displayed in the panel. | ||||
|       case SitePermissions.ALLOW: | ||||
|         if (permission.id === 'site-protection') { | ||||
|           return 'zen-site-data-protections-enabled'; | ||||
|         } | ||||
|         return 'zen-site-data-setting-allow'; | ||||
|       case SitePermissions.BLOCK: | ||||
|       case SitePermissions.AUTOPLAY_BLOCKED_ALL: | ||||
|         if (permission.id === 'site-protection') { | ||||
|           return 'zen-site-data-protections-disabled'; | ||||
|         } | ||||
|         return 'zen-site-data-setting-block'; | ||||
|       default: | ||||
|         return null; | ||||
| @@ -527,12 +511,12 @@ export class nsZenSiteDataPanel { | ||||
|  | ||||
|     const isCrossSiteCookie = permission.id.startsWith('3rdPartyStorage'); | ||||
|     label.parentNode.setAttribute('state', newState == SitePermissions.ALLOW ? 'allow' : 'block'); | ||||
|     label._permission.state = newState; | ||||
|     if (!isCrossSiteCookie) { | ||||
|       label | ||||
|         .querySelector('.zen-permission-popup-permission-state-label') | ||||
|         .setAttribute('data-l10n-id', this.#getPermissionStateLabelId(label._permission)); | ||||
|         .setAttribute('data-l10n-id', this.#getPermissionStateLabelId({ state: newState })); | ||||
|     } | ||||
|     label._permission.state = newState; | ||||
|   } | ||||
|  | ||||
|   #onClickEvent(event) { | ||||
| @@ -596,6 +580,7 @@ export class nsZenSiteDataPanel { | ||||
|       }; | ||||
|       checkEmptyTab(); | ||||
|     }); | ||||
|     this.anchor.setAttribute('open', 'true'); | ||||
|     const callout = new FeatureCallout({ | ||||
|       win: this.window, | ||||
|       location: 'chrome', | ||||
| @@ -624,6 +609,13 @@ export class nsZenSiteDataPanel { | ||||
|                     callout_attachment: 'topleft', | ||||
|                   }, | ||||
|                 }, | ||||
|                 { | ||||
|                   selector: '#identity-icon-box', | ||||
|                   panel_position: { | ||||
|                     anchor_attachment: 'bottomcenter', | ||||
|                     callout_attachment: 'topleft', | ||||
|                   }, | ||||
|                 }, | ||||
|               ], | ||||
|               content: { | ||||
|                 position: 'callout', | ||||
|   | ||||
| @@ -1305,13 +1305,12 @@ | ||||
|  | ||||
|         // Do not rebuild if the workspace is not the same as the current one | ||||
|         const windowWorkspace = await browser.gZenWorkspaces.getActiveWorkspace(); | ||||
|         if (windowWorkspace.uuid !== uuid) { | ||||
|         if (windowWorkspace.uuid !== uuid && theme !== null) { | ||||
|           return; | ||||
|         } | ||||
|  | ||||
|         // get the theme from the window | ||||
|         workspaceTheme = this.fixTheme(theme || windowWorkspace.theme); | ||||
|         const docElement = browser.document.documentElement; | ||||
|  | ||||
|         if (!skipUpdate) { | ||||
|           for (const dot of browser.gZenThemePicker.panel.querySelectorAll( | ||||
| @@ -1329,15 +1328,17 @@ | ||||
|         } | ||||
|  | ||||
|         if (!skipUpdate) { | ||||
|           docElement.style.setProperty( | ||||
|           browser.document.documentElement.style.setProperty( | ||||
|             '--zen-main-browser-background-old', | ||||
|             docElement.style.getPropertyValue('--zen-main-browser-background') | ||||
|             browser.document.documentElement.style.getPropertyValue('--zen-main-browser-background') | ||||
|           ); | ||||
|           docElement.style.setProperty( | ||||
|           browser.document.documentElement.style.setProperty( | ||||
|             '--zen-main-browser-background-toolbar-old', | ||||
|             docElement.style.getPropertyValue('--zen-main-browser-background-toolbar') | ||||
|             browser.document.documentElement.style.getPropertyValue( | ||||
|               '--zen-main-browser-background-toolbar' | ||||
|             ) | ||||
|           ); | ||||
|           docElement.style.setProperty( | ||||
|           browser.document.documentElement.style.setProperty( | ||||
|             '--zen-background-opacity', | ||||
|             browser.gZenThemePicker.previousBackgroundOpacity ?? 1 | ||||
|           ); | ||||
| @@ -1460,9 +1461,16 @@ | ||||
|           } | ||||
|         } | ||||
|  | ||||
|         docElement.style.setProperty('--zen-main-browser-background-toolbar', gradientToolbar); | ||||
|         docElement.style.setProperty('--zen-main-browser-background', gradient); | ||||
|         browser.document.documentElement.style.setProperty( | ||||
|           '--zen-main-browser-background-toolbar', | ||||
|           gradientToolbar | ||||
|         ); | ||||
|         browser.document.documentElement.style.setProperty( | ||||
|           '--zen-main-browser-background', | ||||
|           gradient | ||||
|         ); | ||||
|         const isDarkModeWindow = browser.gZenThemePicker.isDarkMode; | ||||
|         const docElement = browser.document.documentElement; | ||||
|         if (isDefaultTheme) { | ||||
|           docElement.setAttribute('zen-default-theme', 'true'); | ||||
|         } else { | ||||
| @@ -1491,7 +1499,7 @@ | ||||
|           } | ||||
|           // Set `--toolbox-textcolor` to have a contrast with the primary color | ||||
|           const textColor = this.getToolbarColor(isDarkMode); | ||||
|           docElement.style.setProperty( | ||||
|           document.documentElement.style.setProperty( | ||||
|             '--toolbox-textcolor', | ||||
|             `rgba(${textColor[0]}, ${textColor[1]}, ${textColor[2]}, ${textColor[3]})` | ||||
|           ); | ||||
|   | ||||
							
								
								
									
										308
									
								
								src/zen/workspaces/ZenWindowSyncing.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										308
									
								
								src/zen/workspaces/ZenWindowSyncing.mjs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,308 @@ | ||||
| // 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/. | ||||
| { | ||||
|   class nsZenWorkspaceWindowSync extends nsZenMultiWindowFeature { | ||||
|     #ignoreNextEvents = false; | ||||
|     #waitForPromise = null; | ||||
|  | ||||
|     constructor() { | ||||
|       super(); | ||||
|       if (!window.closed) { | ||||
|         this.init(); | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     async init() { | ||||
|       await gZenWorkspaces.promiseInitialized; | ||||
|       this.#makeSureAllTabsHaveIds(); | ||||
|       this.#setUpEventListeners(); | ||||
|     } | ||||
|  | ||||
|     #makeSureAllTabsHaveIds() { | ||||
|       const allTabs = gZenWorkspaces.allStoredTabs; | ||||
|       for (const tab of allTabs) { | ||||
|         if (!tab.hasAttribute('zen-sync-id') && !tab.hasAttribute('zen-empty-tab')) { | ||||
|           const tabId = gZenUIManager.generateUuidv4(); | ||||
|           tab.setAttribute('zen-sync-id', tabId); | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     #setUpEventListeners() { | ||||
|       const kEvents = [ | ||||
|         'TabClose', | ||||
|         'TabOpen', | ||||
|         'TabMove', | ||||
|  | ||||
|         'TabPinned', | ||||
|         'TabUnpinned', | ||||
|  | ||||
|         'TabAddedToEssentials', | ||||
|         'TabRemovedFromEssentials', | ||||
|  | ||||
|         'TabHide', | ||||
|         'TabShow', | ||||
|  | ||||
|         'ZenTabIconChanged', | ||||
|         'ZenTabLabelChanged', | ||||
|  | ||||
|         'TabGroupCreate', | ||||
|         'TabGroupRemoved', | ||||
|         'TabGrouped', | ||||
|         'TabUngrouped', | ||||
|         'TabGroupMoved', | ||||
|       ]; | ||||
|       const eventListener = this.#handleEvent.bind(this); | ||||
|       for (const event of kEvents) { | ||||
|         window.addEventListener(event, eventListener); | ||||
|       } | ||||
|  | ||||
|       window.addEventListener('unload', () => { | ||||
|         for (const event of kEvents) { | ||||
|           window.removeEventListener(event, eventListener); | ||||
|         } | ||||
|       }); | ||||
|     } | ||||
|  | ||||
|     #handleEvent(event) { | ||||
|       this.#propagateToOtherWindows(event); | ||||
|     } | ||||
|  | ||||
|     async #propagateToOtherWindows(event) { | ||||
|       if (this.#ignoreNextEvents) { | ||||
|         return; | ||||
|       } | ||||
|       if (this.#waitForPromise) { | ||||
|         await this.#waitForPromise; | ||||
|       } | ||||
|       this.#waitForPromise = new Promise((resolve) => { | ||||
|         this.foreachWindowAsActive(async (browser) => { | ||||
|           if (browser.gZenWorkspaceWindowSync && !this.windowIsActive(browser)) { | ||||
|             await browser.gZenWorkspaceWindowSync.onExternalTabEvent(event); | ||||
|           } | ||||
|         }).then(() => { | ||||
|           resolve(); | ||||
|         }); | ||||
|       }); | ||||
|     } | ||||
|  | ||||
|     async onExternalTabEvent(event) { | ||||
|       this.#ignoreNextEvents = true; | ||||
|       switch (event.type) { | ||||
|         case 'TabClose': | ||||
|           this.#onTabClose(event); | ||||
|           break; | ||||
|         case 'TabOpen': | ||||
|           await this.#onTabOpen(event); | ||||
|           break; | ||||
|         case 'TabPinned': | ||||
|           this.#onTabPinned(event); | ||||
|           break; | ||||
|         case 'TabUnpinned': | ||||
|           this.#onTabUnpinned(event); | ||||
|           break; | ||||
|         case 'TabAddedToEssentials': | ||||
|           this.#onTabAddedToEssentials(event); | ||||
|           break; | ||||
|         case 'TabRemovedFromEssentials': | ||||
|           this.#onTabRemovedFromEssentials(event); | ||||
|           break; | ||||
|         case 'TabHide': | ||||
|           this.#onTabHide(event); | ||||
|           break; | ||||
|         case 'TabShow': | ||||
|           this.#onTabShow(event); | ||||
|           break; | ||||
|         case 'TabMove': | ||||
|         case 'TabGroupMoved': | ||||
|           this.#onTabMove(event); | ||||
|           break; | ||||
|         case 'ZenTabIconChanged': | ||||
|           this.#onTabIconChanged(event); | ||||
|           break; | ||||
|         case 'ZenTabLabelChanged': | ||||
|           this.#onTabLabelChanged(event); | ||||
|           break; | ||||
|         case 'TabGroupCreate': | ||||
|           this.#onTabGroupCreate(event); | ||||
|           break; | ||||
|         case 'TabGroupRemoved': | ||||
|         case 'TabGrouped': | ||||
|         case 'TabUngrouped': | ||||
|           // Tab grouping changes are automatically synced by Firefox | ||||
|           break; | ||||
|         default: | ||||
|           console.warn(`Unhandled event type: ${event.type}`); | ||||
|           break; | ||||
|       } | ||||
|       this.#ignoreNextEvents = false; | ||||
|     } | ||||
|  | ||||
|     #getTabId(tab) { | ||||
|       return tab.getAttribute('zen-sync-id'); | ||||
|     } | ||||
|  | ||||
|     #getTabWithId(tabId) { | ||||
|       for (const tab of gZenWorkspaces.allStoredTabs) { | ||||
|         if (this.#getTabId(tab) === tabId) { | ||||
|           return tab; | ||||
|         } | ||||
|       } | ||||
|       return null; | ||||
|     } | ||||
|  | ||||
|     #onTabClose(event) { | ||||
|       const targetTab = event.target; | ||||
|       const tabId = this.#getTabId(targetTab); | ||||
|       const tabToClose = this.#getTabWithId(tabId); | ||||
|       if (tabToClose) { | ||||
|         gBrowser.removeTab(tabToClose); | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     #onTabPinned(event) { | ||||
|       const targetTab = event.target; | ||||
|       if (targetTab.hasAttribute('zen-essential')) { | ||||
|         return this.#onTabAddedToEssentials(event); | ||||
|       } | ||||
|       const tabId = this.#getTabId(targetTab); | ||||
|       const elementIndex = targetTab.elementIndex; | ||||
|       const tabToPin = this.#getTabWithId(tabId); | ||||
|       if (tabToPin) { | ||||
|         gBrowser.pinTab(tabToPin); | ||||
|         gBrowser.moveTabTo(tabToPin, { elementIndex, forceUngrouped: !!targetTab.group }); | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     #onTabUnpinned(event) { | ||||
|       const targetTab = event.target; | ||||
|       const tabId = this.#getTabId(targetTab); | ||||
|       const tabToUnpin = this.#getTabWithId(tabId); | ||||
|       if (tabToUnpin) { | ||||
|         gBrowser.unpinTab(tabToUnpin); | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     #onTabIconChanged(event) { | ||||
|       this.#updateTabIconAndLabel(event); | ||||
|     } | ||||
|  | ||||
|     #onTabLabelChanged(event) { | ||||
|       this.#updateTabIconAndLabel(event); | ||||
|     } | ||||
|  | ||||
|     #updateTabIconAndLabel(event) { | ||||
|       const targetTab = event.target; | ||||
|       const tabId = this.#getTabId(targetTab); | ||||
|       const tabToChange = this.#getTabWithId(tabId); | ||||
|       if (tabToChange && tabToChange.hasAttribute('pending')) { | ||||
|         gBrowser.setIcon(tabToChange, gBrowser.getIcon(targetTab)); | ||||
|         gBrowser._setTabLabel(tabToChange, targetTab.label); | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     #onTabAddedToEssentials(event) { | ||||
|       const targetTab = event.target; | ||||
|       const tabId = this.#getTabId(targetTab); | ||||
|       const tabToAdd = this.#getTabWithId(tabId); | ||||
|       if (tabToAdd) { | ||||
|         gZenPinnedTabManager.addToEssentials(tabToAdd); | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     #onTabRemovedFromEssentials(event) { | ||||
|       const targetTab = event.target; | ||||
|       const tabId = this.#getTabId(targetTab); | ||||
|       const tabToRemove = this.#getTabWithId(tabId); | ||||
|       if (tabToRemove) { | ||||
|         gZenPinnedTabManager.removeFromEssentials(tabToRemove); | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     #onTabHide(event) { | ||||
|       const targetTab = event.target; | ||||
|       const tabId = this.#getTabId(targetTab); | ||||
|       const tabToHide = this.#getTabWithId(tabId); | ||||
|       if (tabToHide) { | ||||
|         gBrowser.hideTab(tabToHide); | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     #onTabShow(event) { | ||||
|       const targetTab = event.target; | ||||
|       const tabId = this.#getTabId(targetTab); | ||||
|       const tabToShow = this.#getTabWithId(tabId); | ||||
|       if (tabToShow) { | ||||
|         gBrowser.showTab(tabToShow); | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     #onTabMove(event) { | ||||
|       const targetTab = event.target; | ||||
|       const tabId = this.#getTabId(targetTab); | ||||
|       const tabToMove = this.#getTabWithId(tabId); | ||||
|       const workspaceId = targetTab.getAttribute('zen-workspace-id'); | ||||
|       const isEssential = targetTab.hasAttribute('zen-essential'); | ||||
|       if (tabToMove) { | ||||
|         let tabSibling = targetTab.previousElementSibling; | ||||
|         let isFirst = false; | ||||
|         if (!tabSibling?.hasAttribute('zen-sync-id')) { | ||||
|           isFirst = true; | ||||
|         } | ||||
|         gBrowser.zenHandleTabMove(tabToMove, () => { | ||||
|           if (isFirst) { | ||||
|             let container; | ||||
|             if (isEssential) { | ||||
|               container = gZenWorkspaces.getEssentialsSection(tabToMove); | ||||
|             } else { | ||||
|               const workspaceElement = gZenWorkspaces.workspaceElement(workspaceId); | ||||
|               container = tabToMove.pinned | ||||
|                 ? workspaceElement.pinnedTabsContainer | ||||
|                 : workspaceElement.tabsContainer; | ||||
|             } | ||||
|             container.insertBefore(tabToMove, container.firstChild); | ||||
|           } else { | ||||
|             let relativeTab = gZenWorkspaces.allStoredTabs.find((tab) => { | ||||
|               return this.#getTabId(tab) === this.#getTabId(tabSibling); | ||||
|             }); | ||||
|             if (relativeTab) { | ||||
|               relativeTab.after(tabToMove); | ||||
|             } | ||||
|           } | ||||
|         }); | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     async #onTabOpen(event) { | ||||
|       const targetTab = event.target; | ||||
|       const isPinned = targetTab.pinned; | ||||
|       const isEssential = isPinned && targetTab.hasAttribute('zen-essential'); | ||||
|       if (!this.#getTabId(targetTab) && !targetTab.hasAttribute('zen-empty-tab')) { | ||||
|         const tabId = gZenUIManager.generateUuidv4(); | ||||
|         targetTab.setAttribute('zen-sync-id', tabId); | ||||
|       } | ||||
|       const duplicatedTab = gBrowser.addTrustedTab(targetTab.linkedBrowser.currentURI.spec, { | ||||
|         createLazyBrowser: true, | ||||
|         essential: isEssential, | ||||
|         pinned: isPinned, | ||||
|       }); | ||||
|       if (!isEssential) { | ||||
|         gZenWorkspaces.moveTabToWorkspace( | ||||
|           duplicatedTab, | ||||
|           targetTab.getAttribute('zen-workspace-id') | ||||
|         ); | ||||
|       } | ||||
|       duplicatedTab.setAttribute('zen-pin-id', targetTab.getAttribute('zen-pin-id')); | ||||
|       duplicatedTab.setAttribute('zen-sync-id', targetTab.getAttribute('zen-sync-id')); | ||||
|     } | ||||
|  | ||||
|     #onTabGroupCreate(event) { | ||||
|       const targetGroup = event.target; | ||||
|       const isSplitView = targetGroup.classList.contains('zen-split-view'); | ||||
|       const isFolder = targetGroup.isZenFolder; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   window.gZenWorkspaceWindowSync = new nsZenWorkspaceWindowSync(); | ||||
| } | ||||
| @@ -1225,13 +1225,9 @@ var gZenWorkspaces = new (class extends nsZenMultiWindowFeature { | ||||
|     }; | ||||
|     const workspaceName = document.getElementById('context_zenEditWorkspace'); | ||||
|     const themePicker = document.getElementById('context_zenChangeWorkspaceTheme'); | ||||
|     /* We can't show the rename input properly in collapsed state, | ||||
|     so hide the workspace edit input */ | ||||
|     const isCollapsed = !Services.prefs.getBoolPref('zen.view.sidebar-expanded'); | ||||
|     workspaceName.hidden = | ||||
|       isCollapsed || | ||||
|       (this.#contextMenuData.workspaceId && | ||||
|         this.#contextMenuData.workspaceId !== this.activeWorkspace); | ||||
|       this.#contextMenuData.workspaceId && | ||||
|       this.#contextMenuData.workspaceId !== this.activeWorkspace; | ||||
|     themePicker.hidden = | ||||
|       this.#contextMenuData.workspaceId && | ||||
|       this.#contextMenuData.workspaceId !== this.activeWorkspace; | ||||
|   | ||||
| @@ -19,7 +19,7 @@ | ||||
|       "brandShortName": "Zen", | ||||
|       "brandFullName": "Zen Browser", | ||||
|       "release": { | ||||
|         "displayVersion": "1.17.3b", | ||||
|         "displayVersion": "1.17b", | ||||
|         "github": { | ||||
|           "repo": "zen-browser/desktop" | ||||
|         }, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user