stylus/popup/popup.css
narcolepticinsomniac bc56a7abd6
menus as dialogs (#727)
* menus as dialogs

I think it's better in general, and also eliminates the glitchiness of expandable menus in FF, not to mention possible scroll issues on long style lists with overflow, plus the fact that we could add many menu items in the future without the menu looking ridiculous.

IDEK how the formatting got screwed up and borked the diffs in the other PR. I updated my editor config plugin, so let's see if that helps. I restarted with a fresh master and copy/pasted the changes, so if it's still screwy, I guess my editor needs more help. If not, I'm not playing around with it anymore right now, and the other PR does at least work.

* menus as dialogs
2019-06-20 15:37:40 -04:00

867 lines
15 KiB
CSS

:root {
--header-width: 280px;
--checkbox-width: 24px;
--name-padding-left: 40px;
--name-padding-right: 40px;
--actions-width: 75px;
--onoffswitch-width: 60px;
--outer-padding: 9px;
}
html {
/* Chrome 66-?? adds a gap equal to the scrollbar width,
which looks like a bug, see https://crbug.com/821143 */
overflow: overlay;
}
html, body {
height: min-content;
max-height: 600px;
}
body {
width: 252px;
font-size: 12px;
font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
margin: 0;
}
.firefox body {
color: #000;
background-color: #fff;
}
body > div:not(#installed):not(#message-box):not(.colorpicker-popup) {
margin-left: var(--outer-padding);
margin-right: var(--outer-padding);
}
.firefox .chromium-only {
display: none;
}
/************ checkbox ************/
.style-name:hover input[type="checkbox"]:checked {
border-color: hsl(0, 0%, 32%);
background-color: hsl(0, 0%, 82%);
}
.style-name:hover input[type="checkbox"] {
border-color: hsl(0, 0%, 32%);
background-color: hsl(0, 0%, 82%);
}
#disable-all-wrapper input[type="checkbox"]:not(.slider):checked + .svg-icon.checked {
position: absolute;
top: 0;
left: 0;
pointer-events: none;
}
#installed.disabled + .actions #disableAll:checked + .svg-icon.checked {
fill: hsl(0, 68%, 42%);
}
#installed.disabled + .actions #disableAll:checked {
border-color: hsl(0, 68%, 50%);
}
#installed.disabled + .actions #disableAll:checked:hover + .svg-icon.checked {
fill: #fff;
}
#disableAll:hover {
border-color: hsl(0, 68%, 50%);
background-color: hsl(20, 70%, 75%);
}
#disableAll-label:hover {
color: hsl(0, 68%, 42%);
}
#installed.disabled + .actions #disableAll:checked:hover {
border-color: hsl(0, 50%, 56%);
background-color: hsl(0, 50%, 56%);
}
#installed .style-name .checker,
#installed .style-name .svg-icon.checked {
position: absolute;
top: 7px;
left: var(--outer-padding);
pointer-events: none;
}
#disable-all-wrapper {
padding: 0.3em 0 0.6em;
}
#disable-all-wrapper .main-controls {
display: flex;
position: relative;
}
#disable-all-wrapper .main-controls label {
padding-left: 16px;
position: relative;
transition: color .25s;
font-size: 12px;
}
#no-styles {
padding: 4px var(--outer-padding) 6px;
font-weight: bold;
}
#find-styles-link {
cursor: pointer;
margin-right: .5em;
}
.checker {
display: inline;
}
a {
color: #000;
transition: color .5s;
}
a:hover {
color: #666;
}
.actions > .main-controls {
padding-left: 16px;
}
.main-controls {
display: table-cell;
}
body > DIV:last-of-type,
body.blocked > DIV {
border-bottom: none;
}
#installed {
border-bottom: 1px solid black;
padding-bottom: 2px;
padding-top: 2px;
max-height: 445px;
overflow-y: auto;
counter-reset: style-number;
position: relative;
}
#installed.disabled .style-name {
text-decoration: line-through;
}
#installed.disabled + .actions #disableAll-label {
font-weight: bold;
color: firebrick;
}
#installed .actions {
cursor: default;
}
#installed .actions a {
cursor: pointer;
text-decoration: none;
}
/* entry */
.entry {
position: relative;
}
.entry-content {
display: flex;
align-items: center;
height: 26px;
padding: 0 14px 0 0;
}
html[style] .entry-content {
padding: 0 16px 0 0;
}
#no-styles.entry {
padding: 0 14px;
}
.entry .actions {
display: inline-flex;
align-items: center;
}
.style-name {
height: 100%;
width: 100%;
line-height: 28px;
cursor: default;
font-weight: bold;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
padding-left: 26px;
position: relative;
}
.entry .style-name::before {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(to right, hsla(180, 50%, 30%, 0.2), hsla(180, 20%, 10%, 0.05) 50%, transparent);
pointer-events: none;
opacity: 0;
transition: opacity .1s;
will-change: opacity;
}
.entry .style-name:hover::before {
opacity: 1;
}
.entry .main-controls {
height: 100%;
display: inline-flex;
flex-grow: 1;
overflow: hidden;
align-items: center;
padding-right: 5px;
}
.entry:nth-child(even) {
background-color: rgba(0, 0, 0, 0.05);
}
.entry:nth-child(-n+10):before,
.entry:nth-child(11):before {
counter-increment: style-number;
content: counter(style-number);
position: absolute;
top: .9ex;
right: 5px;
color: #aaa;
}
.entry:nth-child(11):before {
content: "0";
}
html[style*="border"] .entry:nth-child(-n+10):before,
html[style*="border"] .entry:nth-child(11):before {
/* the "show side borders" option adds 2px */
right: 7px;
}
.entry .actions {
margin-left: -1px;
margin-right: -1px;
}
.entry .actions > * {
height: 26px;
width: 18px;
display: inline-flex;
align-items: center;
justify-content: center;
}
.entry .actions > .menu-button {
width: 14px;
}
.entry .actions > a.configure {
padding-right: 2px;
}
.entry .actions > a.configure[target="_blank"] {
width: 20px;
}
.svg-icon.config {
height: 14px;
width: 14px;
}
a.configure[target="_blank"] .svg-icon.config {
height: 20px;
width: 20px;
margin-top: 1px;
}
.not-applied .checker,
.not-applied .style-name,
.not-applied .actions > * {
opacity: .2;
transition: opacity .5s ease-in-out .25s, color .5s ease-in-out .25s;
}
.not-applied:hover .checker,
.not-applied:hover .style-name,
.not-applied:hover .actions > * {
opacity: 1;
}
.not-applied:hover .style-name {
color: darkred;
}
/* entry menu */
.entry .menu {
display: none;
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
align-items: center;
justify-content: center;
z-index: 2147483647;
box-sizing: border-box;
overflow: hidden;
background-color: rgba(0, 0, 0, 0.4);
outline: none;
animation: lights-off .5s cubic-bezier(.03, .67, .08, .94);
animation-fill-mode: both;
}
.menu-title,
#confirm > div > b {
padding-bottom: .5em;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.menu-items-wrapper {
width: 80%;
max-height: 80%;
min-height: 6em;
padding: 1em;
display: flex;
position: relative;
flex-direction: column;
background-color: #fff;
border: solid 2px rgba(0, 0, 0, 0.5);
}
.menu-buttons-wrapper {
display: flex;
align-items: center;
justify-content: center;
padding: 1em 0 0;
}
.menu-buttons-wrapper button {
margin: 0 .25em;
}
.menu-item {
display: flex;
border: none;
align-items: center;
padding: 3px 0;
background: none;
text-decoration: none;
flex: none;
}
.entry .menu-item > span {
margin: 1px 0 -1px;
}
.entry .menu-item:hover,
.entry .menu-item:active {
background-color: rgba(0, 0, 0, 0.1);
transition: background-color .25s;
}
.entry .menu-icon {
width: 26px;
flex-shrink: 0;
}
.entry .menu-icon > * {
display: block;
margin: 0 auto;
}
.entry .menu-item.disabled {
opacity: 0.5;
background-color: transparent;
cursor: help;
}
/* checkbox */
.checkbox-container {
position: relative;
display: inline-block;
width: 12px;
height: 12px;
}
.regexp-problem-indicator {
background-color: #d00;
width: 14px;
height: 14px;
line-height: 15px;
border-radius: 8px;
margin-right: 6px;
margin-left: 6px;
text-align: center;
color: white;
font-weight: bold;
box-sizing: border-box;
cursor: pointer;
font-size: 90%;
display: none;
}
.regexp-partial .regexp-problem-indicator {
display: block;
}
.regexp-partial .actions,
.regexp-invalid .actions {
order: 2;
}
#regexp-explanation {
position: fixed;
background-color: white;
top: 50%;
transform: translateY(-50%);
left: 0;
right: 0;
padding: .5rem;
font-size: 90%;
border-top: 2px solid black;
border-bottom: 2px solid black;
box-shadow: 0 0 100px black;
display: flex;
flex-direction: column;
z-index: 999999;
}
#regexp-explanation > div {
display: none;
list-style-type: none;
padding: 0;
margin: 0;
}
.regexp-partial #regexp-partial,
.regexp-invalid #regexp-invalid {
display: block;
}
#regexp-explanation > div:not(:last-child) {
margin-bottom: .5rem;
}
.svg-icon {
pointer-events: none;
transition: fill .5s;
width: 14px;
height: 16px;
fill: #666;
}
a:hover .svg-icon {
fill: #000;
}
body > .actions {
margin-top: 0.5em;
/* raise the actions above the hotkey-info */
position: relative;
z-index: 4;
}
.actions > div:not(:last-child):not(#disable-all-wrapper),
.actions > .main-controls > div:not(:last-child) {
margin-bottom: 0.75em;
}
.actions input,
.actions label {
vertical-align: middle;
}
body.blocked #installed > *,
body.blocked .actions > .main-controls {
display: none;
}
/* Never shown, but can be enabled with a style */
.entry .actions > .enable,
.entry .actions > .disable {
display: none;
}
/* 'New style' links */
#write-style {
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
#write-style-for {
margin-right: .6ex
}
.write-style-link {
margin-left: .6ex
}
.write-style-link::before {
content: "\00ad"; /* "soft" hyphen */
}
#match {
overflow-wrap: break-word;
display: block;
flex-grow: 9;
min-width: 200px;
}
/* "breadcrumbs" 'new style' links */
.breadcrumbs > .write-style-link {
margin-left: 0
}
.breadcrumbs:hover a {
color: #bbb;
text-decoration: none
}
/* "dot" after each subdomain name */
.breadcrumbs > .write-style-link[subdomain]::after {
content: "."
}
/* no "dot" after top-level domain */
.breadcrumbs > .write-style-link:nth-last-child(2)::after {
content: none
}
/* "forward slash" before path ("this URL") */
.breadcrumbs > .write-style-link:last-child::before {
content: "\200b/"
}
.breadcrumbs > .write-style-link:last-child:first-child::before,
.breadcrumbs > .write-style-link[subdomain=""] + .write-style-link::before {
content: none
}
/* suppress TLD-only link */
.breadcrumbs > .write-style-link[subdomain=""] {
display: none
}
/* :hover style */
.breadcrumbs.url\(\) > .write-style-link,
/* :hover or :focus on "this URL" sets class="url()" */
.breadcrumbs > .write-style-link:hover,
.breadcrumbs > .write-style-link:focus,
.breadcrumbs > .write-style-link:hover ~ .write-style-link[subdomain],
.breadcrumbs > .write-style-link:focus ~ .write-style-link[subdomain] {
color: inherit;
text-decoration: underline;
}
/* action buttons */
#popup-options {
display: flex;
flex-direction: row;
padding: var(--outer-padding) 1px;
}
#popup-options button {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
padding: 2px 4px;
margin-right: 4px;
/* several languages have labels of wildly different lengths so we try to maintain the proportion */
flex: 1 1 auto;
min-width: 2em;
}
#popup-options button:last-child {
margin-right: 0;
}
/* confirm */
#confirm {
align-items: center;
justify-content: center;
z-index: 2147483647;
display: none;
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
margin: 0 !important;
box-sizing: border-box;
background-color: rgba(0, 0, 0, 0.4);
}
#confirm.lights-on,
.menu.lights-on {
animation: lights-on .25s ease-in-out;
animation-fill-mode: both;
}
#confirm.lights-on,
#confirm.lights-on > div,
.menu.lights-on > div {
display: none;
}
#confirm[data-display=true],
.menu[data-display=true] {
display: flex;
}
#confirm[data-display=true] + #installed .menu[data-display=true] {
opacity: 0;
pointer-events: none;
}
#confirm > div {
width: 80%;
max-height: 80%;
min-height: 6em;
padding: 1em;
background-color: #fff;
display: flex;
flex-direction: column;
border: solid 2px rgba(0, 0, 0, 0.5);
}
#confirm > div > *:not(:last-child) {
padding-bottom: .5em;
}
#confirm > div > div {
text-align: center;
}
.non-windows #confirm > div > div {
direction: rtl;
text-align: right;
}
#confirm > div {
width: 80%;
max-height: 80%;
min-height: 6em;
padding: 1em;
background-color: #fff;
display: flex;
flex-direction: column;
border: solid 2px rgba(0, 0, 0, 0.5);
}
#confirm > div > *:not(:last-child) {
padding-bottom: .5em;
}
#confirm > div > div {
text-align: center;
}
.non-windows #confirm > div > div {
direction: rtl;
text-align: right;
}
#confirm > button {
/* add a gap between buttons both for horizontal
or vertical (when the label is wide) layout */
margin: 0 .25em .25em 0;
}
.unreachable .entry {
opacity: .25;
}
.unreachable .blocked-info {
border-bottom: 1px solid black;
}
.blocked-info {
hyphens: none;
word-wrap: break-word;
}
.blocked-info label {
padding: 5px 0;
display: block;
font-weight: bold;
}
.blocked-info p {
padding: 1px 0 var(--outer-padding);
display: block;
font-size: 90%;
margin: 0;
}
/******************************************/
#hotkey-info {
position: absolute;
top: 0;
right: 0;
bottom: 0;
width: 16px;
cursor: help;
margin: 0;
padding: 0;
z-index: 1;
hyphens: auto;
}
#hotkey-info:not([data-active]) > * {
display: none;
}
#hotkey-info[data-active] {
position: fixed;
left: 6ex;
bottom: unset;
width: auto;
cursor: auto;
display: flex;
flex-direction: column;
border-left: 2px solid white;
box-shadow: 0 0 90px rgba(0, 0, 0, .5);
z-index: 5;
}
#hotkey-info div:first-child {
flex-grow: 1;
padding: 0 1em;
font-size: 11px;
overflow-y: auto;
}
#hotkey-info div {
padding: 1em;
border-top: 1px solid #ddd;
background-color: white;
}
#hotkey-info div:last-child {
box-shadow: 0 0 90px rgba(0, 0, 0, .25);
position: relative;
}
#hotkey-info p {
text-indent: -3px;
}
#hotkey-info p:last-child {
margin-bottom: 0;
}
#hotkey-info mark {
display: inline-block;
background: linear-gradient(#ccc, #fff);
padding: 1px 6px 0;
margin: 2px;
border: 1px solid white;
border-radius: 4px;
box-shadow: 1px 1px 4px rgba(0, 0, 0, .3);
font-weight: bold;
white-space: nowrap;
}
/******************************************/
@keyframes lights-off {
from {
background-color: transparent;
}
to {
background-color: rgba(0, 0, 0, 0.4);
}
}
@keyframes lights-on {
from {
background-color: rgba(0, 0, 0, 0.4);
}
to {
background-color: transparent;
}
}
/* Popup adjustments for common zoom levels */
@media (-webkit-min-device-pixel-ratio: 1.05) {
#installed {
max-height: 420px;
}
}
@media (-webkit-min-device-pixel-ratio: 1.1) {
#installed {
max-height: 393px;
}
}
@media (-webkit-min-device-pixel-ratio: 1.15) {
#installed {
max-height: 371px;
}
}
@media (-webkit-min-device-pixel-ratio: 1.2) {
#installed {
max-height: 348px;
}
}
@media (-webkit-min-device-pixel-ratio: 1.25) {
#installed {
max-height: 326px;
}
}
@media (-webkit-min-device-pixel-ratio: 1.30) {
#installed {
max-height: 306px;
}
}
@media (-webkit-min-device-pixel-ratio: 1.35) {
#installed {
max-height: 288px;
}
}
@media (-webkit-min-device-pixel-ratio: 1.4) {
#installed {
max-height: 271px;
}
}
@media (-webkit-min-device-pixel-ratio: 1.45) {
#installed {
max-height: 256px;
}
}
@media (-webkit-min-device-pixel-ratio: 1.5) {
#installed {
max-height: 244px;
}
}
@media (-webkit-min-device-pixel-ratio: 1.55) {
#installed {
max-height: 199px;
}
}
@media (-webkit-min-device-pixel-ratio: 1.75) {
#installed {
max-height: 144px;
}
}