diff --git a/assets/admin/css/autocomplete.css b/assets/admin/css/autocomplete.css
index 3ef95d15..69c94e73 100644
--- a/assets/admin/css/autocomplete.css
+++ b/assets/admin/css/autocomplete.css
@@ -14,7 +14,7 @@ select.admin-autocomplete {
.select2-container--admin-autocomplete.select2-container--focus .select2-selection,
.select2-container--admin-autocomplete.select2-container--open .select2-selection {
- border-color: #999;
+ border-color: var(--body-quiet-color);
min-height: 30px;
}
@@ -29,13 +29,13 @@ select.admin-autocomplete {
}
.select2-container--admin-autocomplete .select2-selection--single {
- background-color: #fff;
- border: 1px solid #ccc;
+ background-color: var(--body-bg);
+ border: 1px solid var(--border-color);
border-radius: 4px;
}
.select2-container--admin-autocomplete .select2-selection--single .select2-selection__rendered {
- color: #444;
+ color: var(--body-fg);
line-height: 30px;
}
@@ -46,7 +46,7 @@ select.admin-autocomplete {
}
.select2-container--admin-autocomplete .select2-selection--single .select2-selection__placeholder {
- color: #999;
+ color: var(--body-quiet-color);
}
.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow {
@@ -80,7 +80,7 @@ select.admin-autocomplete {
}
.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single {
- background-color: #eee;
+ background-color: var(--darkened-bg);
cursor: default;
}
@@ -94,8 +94,8 @@ select.admin-autocomplete {
}
.select2-container--admin-autocomplete .select2-selection--multiple {
- background-color: white;
- border: 1px solid #ccc;
+ background-color: var(--body-bg);
+ border: 1px solid var(--border-color);
border-radius: 4px;
cursor: text;
}
@@ -104,8 +104,10 @@ select.admin-autocomplete {
box-sizing: border-box;
list-style: none;
margin: 0;
- padding: 0 5px;
+ padding: 0 10px 5px 5px;
width: 100%;
+ display: flex;
+ flex-wrap: wrap;
}
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered li {
@@ -113,7 +115,7 @@ select.admin-autocomplete {
}
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__placeholder {
- color: #999;
+ color: var(--body-quiet-color);
margin-top: 5px;
float: left;
}
@@ -123,11 +125,13 @@ select.admin-autocomplete {
float: right;
font-weight: bold;
margin: 5px;
+ position: absolute;
+ right: 0;
}
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice {
- background-color: #e4e4e4;
- border: 1px solid #ccc;
+ background-color: var(--darkened-bg);
+ border: 1px solid var(--border-color);
border-radius: 4px;
cursor: default;
float: left;
@@ -137,7 +141,7 @@ select.admin-autocomplete {
}
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove {
- color: #999;
+ color: var(--body-quiet-color);
cursor: pointer;
display: inline-block;
font-weight: bold;
@@ -145,7 +149,7 @@ select.admin-autocomplete {
}
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove:hover {
- color: #333;
+ color: var(--body-fg);
}
.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-search--inline {
@@ -163,12 +167,12 @@ select.admin-autocomplete {
}
.select2-container--admin-autocomplete.select2-container--focus .select2-selection--multiple {
- border: solid #999 1px;
+ border: solid var(--body-quiet-color) 1px;
outline: 0;
}
.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--multiple {
- background-color: #eee;
+ background-color: var(--darkened-bg);
cursor: default;
}
@@ -186,12 +190,20 @@ select.admin-autocomplete {
border-bottom-right-radius: 0;
}
+.select2-container--admin-autocomplete .select2-search--dropdown {
+ background: var(--darkened-bg);
+}
+
.select2-container--admin-autocomplete .select2-search--dropdown .select2-search__field {
- border: 1px solid #ccc;
+ background: var(--body-bg);
+ color: var(--body-fg);
+ border: 1px solid var(--border-color);
+ border-radius: 4px;
}
.select2-container--admin-autocomplete .select2-search--inline .select2-search__field {
background: transparent;
+ color: var(--body-fg);
border: none;
outline: 0;
box-shadow: none;
@@ -201,6 +213,8 @@ select.admin-autocomplete {
.select2-container--admin-autocomplete .select2-results > .select2-results__options {
max-height: 200px;
overflow-y: auto;
+ color: var(--body-fg);
+ background: var(--body-bg);
}
.select2-container--admin-autocomplete .select2-results__option[role=group] {
@@ -208,11 +222,12 @@ select.admin-autocomplete {
}
.select2-container--admin-autocomplete .select2-results__option[aria-disabled=true] {
- color: #999;
+ color: var(--body-quiet-color);
}
.select2-container--admin-autocomplete .select2-results__option[aria-selected=true] {
- background-color: #ddd;
+ background-color: var(--selected-bg);
+ color: var(--body-fg);
}
.select2-container--admin-autocomplete .select2-results__option .select2-results__option {
@@ -249,8 +264,8 @@ select.admin-autocomplete {
}
.select2-container--admin-autocomplete .select2-results__option--highlighted[aria-selected] {
- background-color: #79aec8;
- color: white;
+ background-color: var(--primary);
+ color: var(--primary-fg);
}
.select2-container--admin-autocomplete .select2-results__group {
diff --git a/assets/admin/css/base.css b/assets/admin/css/base.css
index c4285195..1cb3acdb 100644
--- a/assets/admin/css/base.css
+++ b/assets/admin/css/base.css
@@ -4,6 +4,93 @@
@import url(fonts.css);
+/* VARIABLE DEFINITIONS */
+:root {
+ --primary: #79aec8;
+ --secondary: #417690;
+ --accent: #f5dd5d;
+ --primary-fg: #fff;
+
+ --body-fg: #333;
+ --body-bg: #fff;
+ --body-quiet-color: #666;
+ --body-loud-color: #000;
+
+ --header-color: #ffc;
+ --header-branding-color: var(--accent);
+ --header-bg: var(--secondary);
+ --header-link-color: var(--primary-fg);
+
+ --breadcrumbs-fg: #c4dce8;
+ --breadcrumbs-link-fg: var(--body-bg);
+ --breadcrumbs-bg: var(--primary);
+
+ --link-fg: #447e9b;
+ --link-hover-color: #036;
+ --link-selected-fg: #5b80b2;
+
+ --hairline-color: #e8e8e8;
+ --border-color: #ccc;
+
+ --error-fg: #ba2121;
+
+ --message-success-bg: #dfd;
+ --message-warning-bg: #ffc;
+ --message-error-bg: #ffefef;
+
+ --darkened-bg: #f8f8f8; /* A bit darker than --body-bg */
+ --selected-bg: #e4e4e4; /* E.g. selected table cells */
+ --selected-row: #ffc;
+
+ --button-fg: #fff;
+ --button-bg: var(--primary);
+ --button-hover-bg: #609ab6;
+ --default-button-bg: var(--secondary);
+ --default-button-hover-bg: #205067;
+ --close-button-bg: #888; /* Previously #bbb, contrast 1.92 */
+ --close-button-hover-bg: #747474;
+ --delete-button-bg: #ba2121;
+ --delete-button-hover-bg: #a41515;
+
+ --object-tools-fg: var(--button-fg);
+ --object-tools-bg: var(--close-button-bg);
+ --object-tools-hover-bg: var(--close-button-hover-bg);
+}
+
+@media (prefers-color-scheme: dark) {
+ :root {
+ --primary: #264b5d;
+ --primary-fg: #eee;
+
+ --body-fg: #eeeeee;
+ --body-bg: #121212;
+ --body-quiet-color: #e0e0e0;
+ --body-loud-color: #ffffff;
+
+ --breadcrumbs-link-fg: #e0e0e0;
+ --breadcrumbs-bg: var(--primary);
+
+ --link-fg: #81d4fa;
+ --link-hover-color: #4ac1f7;
+ --link-selected-fg: #6f94c6;
+
+ --hairline-color: #272727;
+ --border-color: #353535;
+
+ --error-fg: #e35f5f;
+ --message-success-bg: #006b1b;
+ --message-warning-bg: #583305;
+ --message-error-bg: #570808;
+
+ --darkened-bg: #212121;
+ --selected-bg: #1b1b1b;
+ --selected-row: #00363a;
+
+ --close-button-bg: #333333;
+ --close-button-hover-bg: #666666;
+ }
+}
+
html, body {
height: 100%;
}
@@ -13,19 +100,20 @@ body {
padding: 0;
font-size: 14px;
font-family: "Roboto","Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif;
- color: #333;
- background: #fff;
+ color: var(--body-fg);
+ background: var(--body-bg);
}
/* LINKS */
a:link, a:visited {
- color: #447e9b;
+ color: var(--link-fg);
text-decoration: none;
+ transition: color 0.15s, background 0.15s;
}
a:focus, a:hover {
- color: #036;
+ color: var(--link-hover-color);
}
a:focus {
@@ -37,7 +125,7 @@ a img {
}
a.section:link, a.section:visited {
- color: #fff;
+ color: var(--header-link-color);
text-decoration: none;
}
@@ -64,7 +152,7 @@ h1 {
margin: 0 0 20px;
font-weight: 300;
font-size: 20px;
- color: #666;
+ color: var(--body-quiet-color);
}
h2 {
@@ -80,7 +168,7 @@ h2.subhead {
h3 {
font-size: 14px;
margin: .8em 0 .3em 0;
- color: #666;
+ color: var(--body-quiet-color);
font-weight: bold;
}
@@ -93,7 +181,7 @@ h4 {
h5 {
font-size: 10px;
margin: 1.5em 0 .5em 0;
- color: #666;
+ color: var(--body-quiet-color);
text-transform: uppercase;
letter-spacing: 1px;
}
@@ -131,7 +219,7 @@ fieldset {
min-width: 0;
padding: 0;
border: none;
- border-top: 1px solid #eee;
+ border-top: 1px solid var(--hairline-color);
}
blockquote {
@@ -144,14 +232,14 @@ blockquote {
code, pre {
font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace;
- color: #666;
+ color: var(--body-quiet-color);
font-size: 12px;
overflow-x: auto;
}
pre.literal-block {
margin: 10px;
- background: #eee;
+ background: var(--darkened-bg);
padding: 6px 8px;
}
@@ -161,8 +249,8 @@ code strong {
hr {
clear: both;
- color: #eee;
- background-color: #eee;
+ color: var(--hairline-color);
+ background-color: var(--hairline-color);
height: 1px;
border: none;
margin: 0;
@@ -183,7 +271,7 @@ hr {
.help, p.help, form p.help, div.help, form div.help, div.help li {
font-size: 11px;
- color: #999;
+ color: var(--body-quiet-color);
}
div.help ul {
@@ -199,7 +287,7 @@ p img, h1 img, h2 img, h3 img, h4 img, td img {
}
.quiet, a.quiet:link, a.quiet:visited {
- color: #999;
+ color: var(--body-quiet-color);
font-weight: normal;
}
@@ -211,20 +299,23 @@ p img, h1 img, h2 img, h3 img, h4 img, td img {
white-space: nowrap;
}
+.hidden {
+ display: none;
+}
+
/* TABLES */
table {
border-collapse: collapse;
- border-color: #ccc;
+ border-color: var(--border-color);
}
td, th {
font-size: 13px;
line-height: 16px;
- border-bottom: 1px solid #eee;
+ border-bottom: 1px solid var(--hairline-color);
vertical-align: top;
padding: 8px;
- font-family: "Roboto", "Lucida Grande", Verdana, Arial, sans-serif;
}
th {
@@ -234,37 +325,37 @@ th {
thead th,
tfoot td {
- color: #666;
+ color: var(--body-quiet-color);
padding: 5px 10px;
font-size: 11px;
- background: #fff;
+ background: var(--body-bg);
border: none;
- border-top: 1px solid #eee;
- border-bottom: 1px solid #eee;
+ border-top: 1px solid var(--hairline-color);
+ border-bottom: 1px solid var(--hairline-color);
}
tfoot td {
border-bottom: none;
- border-top: 1px solid #eee;
+ border-top: 1px solid var(--hairline-color);
}
thead th.required {
- color: #000;
+ color: var(--body-loud-color);
}
tr.alt {
- background: #f6f6f6;
+ background: var(--darkened-bg);
}
tr:nth-child(odd), .row-form-errors {
- background: #fff;
+ background: var(--body-bg);
}
tr:nth-child(even),
tr:nth-child(even) .errorlist,
tr:nth-child(odd) + .row-form-errors,
tr:nth-child(odd) + .row-form-errors .errorlist {
- background: #f9f9f9;
+ background: var(--darkened-bg);
}
/* SORTABLE TABLES */
@@ -273,15 +364,15 @@ thead th {
padding: 5px 10px;
line-height: normal;
text-transform: uppercase;
- background: #f6f6f6;
+ background: var(--darkened-bg);
}
thead th a:link, thead th a:visited {
- color: #666;
+ color: var(--body-quiet-color);
}
thead th.sorted {
- background: #eee;
+ background: var(--selected-bg);
}
thead th.sorted .text {
@@ -300,7 +391,7 @@ table thead th .text a {
}
table thead th .text a:focus, table thead th .text a:hover {
- background: #eee;
+ background: var(--selected-bg);
}
thead th.sorted a.sortremove {
@@ -347,12 +438,12 @@ table thead th.sorted .sortoptions a.sortremove:after {
left: 3px;
font-weight: 200;
font-size: 18px;
- color: #999;
+ color: var(--body-quiet-color);
}
table thead th.sorted .sortoptions a.sortremove:focus:after,
table thead th.sorted .sortoptions a.sortremove:hover:after {
- color: #447e9b;
+ color: var(--link-fg);
}
table thead th.sorted .sortoptions a.sortremove:focus,
@@ -399,16 +490,18 @@ textarea {
input[type=text], input[type=password], input[type=email], input[type=url],
input[type=number], input[type=tel], textarea, select, .vTextField {
- border: 1px solid #ccc;
+ border: 1px solid var(--border-color);
border-radius: 4px;
padding: 5px 6px;
margin-top: 0;
+ color: var(--body-fg);
+ background-color: var(--body-bg);
}
input[type=text]:focus, input[type=password]:focus, input[type=email]:focus,
input[type=url]:focus, input[type=number]:focus, input[type=tel]:focus,
textarea:focus, select:focus, .vTextField:focus {
- border-color: #999;
+ border-color: var(--body-quiet-color);
}
select {
@@ -424,12 +517,13 @@ select[multiple] {
/* FORM BUTTONS */
.button, input[type=submit], input[type=button], .submit-row input, a.button {
- background: #79aec8;
+ background: var(--button-bg);
padding: 10px 15px;
border: none;
border-radius: 4px;
- color: #fff;
+ color: var(--button-fg);
cursor: pointer;
+ transition: background 0.15s;
}
a.button {
@@ -439,7 +533,7 @@ a.button {
.button:active, input[type=submit]:active, input[type=button]:active,
.button:focus, input[type=submit]:focus, input[type=button]:focus,
.button:hover, input[type=submit]:hover, input[type=button]:hover {
- background: #609ab6;
+ background: var(--button-hover-bg);
}
.button[disabled], input[type=submit][disabled], input[type=button][disabled] {
@@ -450,13 +544,13 @@ a.button {
float: right;
border: none;
font-weight: 400;
- background: #417690;
+ background: var(--default-button-bg);
}
.button.default:active, input[type=submit].default:active,
.button.default:focus, input[type=submit].default:focus,
.button.default:hover, input[type=submit].default:hover {
- background: #205067;
+ background: var(--default-button-hover-bg);
}
.button[disabled].default,
@@ -471,7 +565,7 @@ input[type=button][disabled].default {
.module {
border: none;
margin-bottom: 30px;
- background: #fff;
+ background: var(--body-bg);
}
.module p, .module ul, .module h3, .module h4, .module dl, .module pre {
@@ -497,8 +591,8 @@ input[type=button][disabled].default {
font-weight: 400;
font-size: 13px;
text-align: left;
- background: #79aec8;
- color: #fff;
+ background: var(--primary);
+ color: var(--header-link-color);
}
.module caption,
@@ -525,18 +619,18 @@ ul.messagelist li {
font-size: 13px;
padding: 10px 10px 10px 65px;
margin: 0 0 10px 0;
- background: #dfd url(../img/icon-yes.svg) 40px 12px no-repeat;
+ background: var(--message-success-bg) url(../img/icon-yes.svg) 40px 12px no-repeat;
background-size: 16px auto;
- color: #333;
+ color: var(--body-fg);
}
ul.messagelist li.warning {
- background: #ffc url(../img/icon-alert.svg) 40px 14px no-repeat;
+ background: var(--message-warning-bg) url(../img/icon-alert.svg) 40px 14px no-repeat;
background-size: 14px auto;
}
ul.messagelist li.error {
- background: #ffefef url(../img/icon-no.svg) 40px 12px no-repeat;
+ background: var(--message-error-bg) url(../img/icon-no.svg) 40px 12px no-repeat;
background-size: 16px auto;
}
@@ -546,24 +640,26 @@ ul.messagelist li.error {
display: block;
padding: 10px 12px;
margin: 0 0 10px 0;
- color: #ba2121;
- border: 1px solid #ba2121;
+ color: var(--error-fg);
+ border: 1px solid var(--error-fg);
border-radius: 4px;
- background-color: #fff;
+ background-color: var(--body-bg);
background-position: 5px 12px;
+ overflow-wrap: break-word;
}
ul.errorlist {
margin: 0 0 4px;
padding: 0;
- color: #ba2121;
- background: #fff;
+ color: var(--error-fg);
+ background: var(--body-bg);
}
ul.errorlist li {
font-size: 13px;
display: block;
margin-bottom: 4px;
+ overflow-wrap: break-word;
}
ul.errorlist li:first-child {
@@ -587,7 +683,7 @@ td ul.errorlist li {
.form-row.errors {
margin: 0;
border: none;
- border-bottom: 1px solid #eee;
+ border-bottom: 1px solid var(--hairline-color);
background: none;
}
@@ -597,7 +693,7 @@ td ul.errorlist li {
.errors input, .errors select, .errors textarea,
td ul.errorlist + input, td ul.errorlist + select, td ul.errorlist + textarea {
- border: 1px solid #ba2121;
+ border: 1px solid var(--error-fg);
}
.description {
@@ -608,20 +704,19 @@ td ul.errorlist + input, td ul.errorlist + select, td ul.errorlist + textarea {
/* BREADCRUMBS */
div.breadcrumbs {
- background: #79aec8;
+ background: var(--breadcrumbs-bg);
padding: 10px 40px;
border: none;
- font-size: 14px;
- color: #c4dce8;
+ color: var(--breadcrumbs-fg);
text-align: left;
}
div.breadcrumbs a {
- color: #fff;
+ color: var(--breadcrumbs-link-fg);
}
div.breadcrumbs a:focus, div.breadcrumbs a:hover {
- color: #c4dce8;
+ color: var(--breadcrumbs-fg);
}
/* ACTION ICONS */
@@ -647,11 +742,11 @@ div.breadcrumbs a:focus, div.breadcrumbs a:hover {
}
a.deletelink:link, a.deletelink:visited {
- color: #CC3434;
+ color: #CC3434; /* XXX Probably unused? */
}
a.deletelink:focus, a.deletelink:hover {
- color: #993333;
+ color: #993333; /* XXX Probably unused? */
text-decoration: none;
}
@@ -666,14 +761,6 @@ a.deletelink:focus, a.deletelink:hover {
margin-top: -48px;
}
-.form-row .object-tools {
- margin-top: 5px;
- margin-bottom: 5px;
- float: none;
- height: 2em;
- padding-left: 3.5em;
-}
-
.object-tools li {
display: block;
float: left;
@@ -689,29 +776,29 @@ a.deletelink:focus, a.deletelink:hover {
display: block;
float: left;
padding: 3px 12px;
- background: #999;
+ background: var(--object-tools-bg);
+ color: var(--object-tools-fg);
font-weight: 400;
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0.5px;
- color: #fff;
}
.object-tools a:focus, .object-tools a:hover {
- background-color: #417690;
+ background-color: var(--object-tools-hover-bg);
}
.object-tools a:focus{
text-decoration: none;
}
-.object-tools a.viewsitelink, .object-tools a.golink,.object-tools a.addlink {
+.object-tools a.viewsitelink, .object-tools a.addlink {
background-repeat: no-repeat;
background-position: right 7px center;
padding-right: 26px;
}
-.object-tools a.viewsitelink, .object-tools a.golink {
+.object-tools a.viewsitelink {
background-image: url(../img/tooltag-arrowright.svg);
}
@@ -813,13 +900,13 @@ table#change-history tbody th {
justify-content: space-between;
align-items: center;
padding: 10px 40px;
- background: #417690;
- color: #ffc;
+ background: var(--header-bg);
+ color: var(--header-color);
overflow: hidden;
}
#header a:link, #header a:visited {
- color: #fff;
+ color: var(--header-link-color);
}
#header a:focus , #header a:hover {
@@ -835,11 +922,11 @@ table#change-history tbody th {
margin: 0 20px 0 0;
font-weight: 300;
font-size: 24px;
- color: #f5dd5d;
+ color: var(--accent);
}
#branding h1, #branding h1 a:link, #branding h1 a:visited {
- color: #f5dd5d;
+ color: var(--accent);
}
#branding h2 {
@@ -847,7 +934,7 @@ table#change-history tbody th {
font-size: 14px;
margin: -8px 0 8px 0;
font-weight: normal;
- color: #ffc;
+ color: var(--header-color);
}
#branding a:hover {
@@ -871,14 +958,14 @@ table#change-history tbody th {
#user-tools a:focus, #user-tools a:hover {
text-decoration: none;
- border-bottom-color: #79aec8;
- color: #79aec8;
+ border-bottom-color: var(--primary);
+ color: var(--primary);
}
/* SIDEBAR */
#content-related {
- background: #f8f8f8;
+ background: var(--darkened-bg);
}
#content-related .module {
@@ -886,8 +973,7 @@ table#change-history tbody th {
}
#content-related h3 {
- font-size: 14px;
- color: #666;
+ color: var(--body-quiet-color);
padding: 0 16px;
margin: 0 0 16px;
}
@@ -916,22 +1002,22 @@ table#change-history tbody th {
background: none;
padding: 16px;
margin-bottom: 16px;
- border-bottom: 1px solid #eaeaea;
+ border-bottom: 1px solid var(--hairline-color);
font-size: 18px;
- color: #333;
+ color: var(--body-fg);
}
.delete-confirmation form input[type="submit"] {
- background: #ba2121;
+ background: var(--delete-button-bg);
border-radius: 4px;
padding: 10px 15px;
- color: #fff;
+ color: var(--button-fg);
}
.delete-confirmation form input[type="submit"]:active,
.delete-confirmation form input[type="submit"]:focus,
.delete-confirmation form input[type="submit"]:hover {
- background: #a41515;
+ background: var(--delete-button-hover-bg);
}
.delete-confirmation form .cancel-link {
@@ -939,17 +1025,17 @@ table#change-history tbody th {
vertical-align: middle;
height: 15px;
line-height: 15px;
- background: #ddd;
border-radius: 4px;
padding: 10px 15px;
- color: #333;
+ color: var(--button-fg);
+ background: var(--close-button-bg);
margin: 0 0 0 10px;
}
.delete-confirmation form .cancel-link:active,
.delete-confirmation form .cancel-link:focus,
.delete-confirmation form .cancel-link:hover {
- background: #ccc;
+ background: var(--close-button-hover-bg);
}
/* POPUP */
diff --git a/assets/admin/css/changelists.css b/assets/admin/css/changelists.css
index 7b8b9c77..a4baf329 100644
--- a/assets/admin/css/changelists.css
+++ b/assets/admin/css/changelists.css
@@ -40,13 +40,13 @@
}
#changelist .toplinks {
- border-bottom: 1px solid #ddd;
+ border-bottom: 1px solid var(--hairline-color);
}
#changelist .paginator {
- color: #666;
- border-bottom: 1px solid #eee;
- background: #fff;
+ color: var(--body-quiet-color);
+ border-bottom: 1px solid var(--hairline-color);
+ background: var(--body-bg);
overflow: hidden;
}
@@ -68,7 +68,7 @@
}
#changelist table tfoot {
- color: #666;
+ color: var(--body-quiet-color);
}
/* TOOLBAR */
@@ -76,22 +76,22 @@
#toolbar {
padding: 8px 10px;
margin-bottom: 15px;
- border-top: 1px solid #eee;
- border-bottom: 1px solid #eee;
- background: #f8f8f8;
- color: #666;
+ border-top: 1px solid var(--hairline-color);
+ border-bottom: 1px solid var(--hairline-color);
+ background: var(--darkened-bg);
+ color: var(--body-quiet-color);
}
#toolbar form input {
border-radius: 4px;
font-size: 14px;
padding: 5px;
- color: #333;
+ color: var(--body-fg);
}
#toolbar #searchbar {
height: 19px;
- border: 1px solid #ccc;
+ border: 1px solid var(--border-color);
padding: 2px 5px;
margin: 0;
vertical-align: top;
@@ -100,24 +100,24 @@
}
#toolbar #searchbar:focus {
- border-color: #999;
+ border-color: var(--body-quiet-color);
}
#toolbar form input[type="submit"] {
- border: 1px solid #ccc;
+ border: 1px solid var(--border-color);
font-size: 13px;
padding: 4px 8px;
margin: 0;
vertical-align: middle;
- background: #fff;
+ background: var(--body-bg);
box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset;
cursor: pointer;
- color: #333;
+ color: var(--body-fg);
}
#toolbar form input[type="submit"]:focus,
#toolbar form input[type="submit"]:hover {
- border-color: #999;
+ border-color: var(--body-quiet-color);
}
#changelist-search img {
@@ -125,12 +125,16 @@
margin-right: 4px;
}
+#changelist-search .help {
+ word-break: break-word;
+}
+
/* FILTER COLUMN */
#changelist-filter {
+ flex: 0 0 240px;
order: 1;
- width: 240px;
- background: #f8f8f8;
+ background: var(--darkened-bg);
border-left: none;
margin: 0 0 0 30px;
}
@@ -146,7 +150,6 @@
#changelist-filter h3 {
font-weight: 400;
- font-size: 14px;
padding: 0 15px;
margin-bottom: 10px;
}
@@ -154,7 +157,7 @@
#changelist-filter ul {
margin: 5px 0;
padding: 0 15px 15px;
- border-bottom: 1px solid #eaeaea;
+ border-bottom: 1px solid var(--hairline-color);
}
#changelist-filter ul:last-child {
@@ -169,31 +172,31 @@
#changelist-filter a {
display: block;
- color: #999;
+ color: var(--body-quiet-color);
text-overflow: ellipsis;
overflow-x: hidden;
}
#changelist-filter li.selected {
- border-left: 5px solid #eaeaea;
+ border-left: 5px solid var(--hairline-color);
padding-left: 10px;
margin-left: -15px;
}
#changelist-filter li.selected a {
- color: #5b80b2;
+ color: var(--link-selected-fg);
}
#changelist-filter a:focus, #changelist-filter a:hover,
#changelist-filter li.selected a:focus,
#changelist-filter li.selected a:hover {
- color: #036;
+ color: var(--link-hover-color);
}
#changelist-filter #changelist-filter-clear a {
font-size: 13px;
padding-bottom: 10px;
- border-bottom: 1px solid #eaeaea;
+ border-bottom: 1px solid var(--hairline-color);
}
/* DATE DRILLDOWN */
@@ -214,12 +217,12 @@
}
.change-list ul.toplinks .date-back a {
- color: #999;
+ color: var(--body-quiet-color);
}
.change-list ul.toplinks .date-back a:focus,
.change-list ul.toplinks .date-back a:hover {
- color: #036;
+ color: var(--link-hover-color);
}
/* PAGINATOR */
@@ -230,26 +233,26 @@
padding-bottom: 10px;
line-height: 22px;
margin: 0;
- border-top: 1px solid #ddd;
+ border-top: 1px solid var(--hairline-color);
width: 100%;
}
.paginator a:link, .paginator a:visited {
padding: 2px 6px;
- background: #79aec8;
+ background: var(--button-bg);
text-decoration: none;
- color: #fff;
+ color: var(--button-fg);
}
.paginator a.showall {
border: none;
background: none;
- color: #5b80b2;
+ color: var(--link-fg);
}
.paginator a.showall:focus, .paginator a.showall:hover {
background: none;
- color: #036;
+ color: var(--link-hover-color);
}
.paginator .end {
@@ -265,7 +268,7 @@
.paginator a:focus, .paginator a:hover {
color: white;
- background: #036;
+ background: var(--link-hover-color);
}
/* ACTIONS */
@@ -280,22 +283,22 @@
}
#changelist table tbody tr.selected {
- background-color: #FFFFCC;
+ background-color: var(--selected-row);
}
#changelist .actions {
padding: 10px;
- background: #fff;
+ background: var(--body-bg);
border-top: none;
border-bottom: none;
line-height: 24px;
- color: #999;
+ color: var(--body-quiet-color);
width: 100%;
}
-#changelist .actions.selected {
- background: #fffccf;
- border-top: 1px solid #fffee8;
+#changelist .actions.selected { /* XXX Probably unused? */
+ background: var(--body-bg);
+ border-top: 1px solid var(--body-bg);
border-bottom: 1px solid #edecd6;
}
@@ -305,7 +308,6 @@
#changelist .actions span.question {
font-size: 13px;
margin: 0 0.5em;
- display: none;
}
#changelist .actions:last-child {
@@ -315,9 +317,8 @@
#changelist .actions select {
vertical-align: top;
height: 24px;
- background: none;
- color: #000;
- border: 1px solid #ccc;
+ color: var(--body-fg);
+ border: 1px solid var(--border-color);
border-radius: 4px;
font-size: 14px;
padding: 0 0 0 4px;
@@ -326,7 +327,7 @@
}
#changelist .actions select:focus {
- border-color: #999;
+ border-color: var(--body-quiet-color);
}
#changelist .actions label {
@@ -337,18 +338,18 @@
#changelist .actions .button {
font-size: 13px;
- border: 1px solid #ccc;
+ border: 1px solid var(--border-color);
border-radius: 4px;
- background: #fff;
+ background: var(--body-bg);
box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset;
cursor: pointer;
height: 24px;
line-height: 1;
padding: 4px 8px;
margin: 0;
- color: #333;
+ color: var(--body-fg);
}
#changelist .actions .button:focus, #changelist .actions .button:hover {
- border-color: #999;
+ border-color: var(--body-quiet-color);
}
diff --git a/assets/admin/css/forms.css b/assets/admin/css/forms.css
index 89d57482..5007d45b 100644
--- a/assets/admin/css/forms.css
+++ b/assets/admin/css/forms.css
@@ -6,7 +6,7 @@
overflow: hidden;
padding: 10px;
font-size: 13px;
- border-bottom: 1px solid #eee;
+ border-bottom: 1px solid var(--hairline-color);
}
.form-row img, .form-row input {
@@ -22,21 +22,17 @@ form .form-row p {
padding-left: 0;
}
-.hidden {
- display: none;
-}
-
/* FORM LABELS */
label {
font-weight: normal;
- color: #666;
+ color: var(--body-quiet-color);
font-size: 13px;
}
.required label, label.required {
font-weight: bold;
- color: #333;
+ color: var(--body-fg);
}
/* RADIO BUTTONS */
@@ -88,6 +84,7 @@ form ul.inline li {
margin-top: 0;
margin-bottom: 0;
margin-left: 170px;
+ overflow-wrap: break-word;
}
.aligned ul label {
@@ -219,24 +216,24 @@ fieldset.collapsed h2, fieldset.collapsed {
}
fieldset.collapsed {
- border: 1px solid #eee;
+ border: 1px solid var(--hairline-color);
border-radius: 4px;
overflow: hidden;
}
fieldset.collapsed h2 {
- background: #f8f8f8;
- color: #666;
+ background: var(--darkened-bg);
+ color: var(--body-quiet-color);
}
fieldset .collapse-toggle {
- color: #fff;
+ color: var(--header-link-color);
}
fieldset.collapsed .collapse-toggle {
background: transparent;
display: inline;
- color: #447e9b;
+ color: var(--link-fg);
}
/* MONOSPACE TEXTAREAS */
@@ -250,8 +247,8 @@ fieldset.monospace textarea {
.submit-row {
padding: 12px 14px;
margin: 0 0 20px;
- background: #f8f8f8;
- border: 1px solid #eee;
+ background: var(--darkened-bg);
+ border: 1px solid var(--hairline-color);
border-radius: 4px;
text-align: right;
overflow: hidden;
@@ -283,35 +280,35 @@ body.popup .submit-row {
.submit-row a.deletelink {
display: block;
- background: #ba2121;
+ background: var(--delete-button-bg);
border-radius: 4px;
padding: 10px 15px;
height: 15px;
line-height: 15px;
- color: #fff;
+ color: var(--button-fg);
}
.submit-row a.closelink {
display: inline-block;
- background: #bbbbbb;
+ background: var(--close-button-bg);
border-radius: 4px;
padding: 10px 15px;
height: 15px;
line-height: 15px;
margin: 0 0 0 5px;
- color: #fff;
+ color: var(--button-fg);
}
.submit-row a.deletelink:focus,
.submit-row a.deletelink:hover,
.submit-row a.deletelink:active {
- background: #a41515;
+ background: var(--delete-button-hover-bg);
}
.submit-row a.closelink:focus,
.submit-row a.closelink:hover,
.submit-row a.closelink:active {
- background: #aaaaaa;
+ background: var(--close-button-hover-bg);
}
/* CUSTOM FORM FIELDS */
@@ -390,12 +387,12 @@ body.popup .submit-row {
.inline-related h3 {
margin: 0;
- color: #666;
+ color: var(--body-quiet-color);
padding: 5px;
font-size: 13px;
- background: #f8f8f8;
- border-top: 1px solid #eee;
- border-bottom: 1px solid #eee;
+ background: var(--darkened-bg);
+ border-top: 1px solid var(--hairline-color);
+ border-bottom: 1px solid var(--hairline-color);
}
.inline-related h3 span.delete {
@@ -409,7 +406,7 @@ body.popup .submit-row {
.inline-related fieldset {
margin: 0;
- background: #fff;
+ background: var(--body-bg);
border: none;
width: 100%;
}
@@ -421,7 +418,7 @@ body.popup .submit-row {
text-align: left;
font-weight: bold;
background: #bcd;
- color: #fff;
+ color: var(--body-bg);
}
.inline-group .tabular fieldset.module {
@@ -460,7 +457,7 @@ body.popup .submit-row {
overflow: hidden;
font-size: 9px;
font-weight: bold;
- color: #666;
+ color: var(--body-quiet-color);
_width: 700px;
}
@@ -477,15 +474,15 @@ body.popup .submit-row {
.inline-group div.add-row,
.inline-group .tabular tr.add-row td {
- color: #666;
- background: #f8f8f8;
+ color: var(--body-quiet-color);
+ background: var(--darkened-bg);
padding: 8px 10px;
- border-bottom: 1px solid #eee;
+ border-bottom: 1px solid var(--hairline-color);
}
.inline-group .tabular tr.add-row td {
padding: 8px 10px;
- border-bottom: 1px solid #eee;
+ border-bottom: 1px solid var(--hairline-color);
}
.inline-group ul.tools a.add,
diff --git a/assets/admin/css/login.css b/assets/admin/css/login.css
index 062b36e0..bf4ba8d3 100644
--- a/assets/admin/css/login.css
+++ b/assets/admin/css/login.css
@@ -1,7 +1,7 @@
/* LOGIN FORM */
.login {
- background: #f8f8f8;
+ background: var(--darkened-bg);
height: auto;
}
@@ -13,10 +13,11 @@
.login #header h1 {
font-size: 18px;
+ margin: 0;
}
.login #header h1 a {
- color: #fff;
+ color: var(--header-link-color);
}
.login #content {
@@ -24,8 +25,8 @@
}
.login #container {
- background: #fff;
- border: 1px solid #eaeaea;
+ background: var(--body-bg);
+ border: 1px solid var(--hairline-color);
border-radius: 4px;
overflow: hidden;
width: 28em;
@@ -34,44 +35,25 @@
height: auto;
}
-.login #content-main {
- width: 100%;
-}
-
.login .form-row {
padding: 4px 0;
- float: left;
- width: 100%;
- border-bottom: none;
}
.login .form-row label {
- padding-right: 0.5em;
+ display: block;
line-height: 2em;
- font-size: 1em;
- clear: both;
- color: #333;
}
.login .form-row #id_username, .login .form-row #id_password {
- clear: both;
padding: 8px;
width: 100%;
box-sizing: border-box;
}
-.login span.help {
- font-size: 10px;
- display: block;
-}
-
.login .submit-row {
- clear: both;
- padding: 1em 0 0 9.4em;
+ padding: 1em 0 0 0;
margin: 0;
- border: none;
- background: none;
- text-align: left;
+ text-align: center;
}
.login .password-reset-link {
diff --git a/assets/admin/css/nav_sidebar.css b/assets/admin/css/nav_sidebar.css
index 784d0874..0c590ff2 100644
--- a/assets/admin/css/nav_sidebar.css
+++ b/assets/admin/css/nav_sidebar.css
@@ -12,22 +12,23 @@
justify-content: center;
flex: 0 0 23px;
width: 23px;
- border-right: 1px solid #eaeaea;
- background-color: #ffffff;
+ border: 0;
+ border-right: 1px solid var(--hairline-color);
+ background-color: var(--body-bg);
cursor: pointer;
font-size: 20px;
- color: #447e9b;
+ color: var(--link-fg);
padding: 0;
}
[dir="rtl"] .toggle-nav-sidebar {
- border-left: 1px solid #eaeaea;
+ border-left: 1px solid var(--hairline-color);
border-right: 0;
}
.toggle-nav-sidebar:hover,
.toggle-nav-sidebar:focus {
- background-color: #f6f6f6;
+ background-color: var(--darkened-bg);
}
#nav-sidebar {
@@ -36,13 +37,13 @@
left: -276px;
margin-left: -276px;
border-top: 1px solid transparent;
- border-right: 1px solid #eaeaea;
- background-color: #ffffff;
+ border-right: 1px solid var(--hairline-color);
+ background-color: var(--body-bg);
overflow: auto;
}
[dir="rtl"] #nav-sidebar {
- border-left: 1px solid #eaeaea;
+ border-left: 1px solid var(--hairline-color);
border-right: 0;
left: 0;
margin-left: 0;
@@ -59,13 +60,10 @@
}
.main.shifted > #nav-sidebar {
- left: 24px;
margin-left: 0;
}
[dir="rtl"] .main.shifted > #nav-sidebar {
- left: 0;
- right: 24px;
margin-right: 0;
}
@@ -91,12 +89,12 @@
#nav-sidebar .current-app .section:link,
#nav-sidebar .current-app .section:visited {
- color: #ffc;
+ color: var(--header-color);
font-weight: bold;
}
#nav-sidebar .current-model {
- background: #ffc;
+ background: var(--selected-row);
}
.main > #nav-sidebar + .content {
@@ -117,3 +115,25 @@
max-width: 100%;
}
}
+
+#nav-filter {
+ width: 100%;
+ box-sizing: border-box;
+ padding: 2px 5px;
+ margin: 5px 0;
+ border: 1px solid var(--border-color);
+ background-color: var(--darkened-bg);
+ color: var(--body-fg);
+}
+
+#nav-filter:focus {
+ border-color: var(--body-quiet-color);
+}
+
+#nav-filter.no-results {
+ background: var(--message-error-bg);
+}
+
+#nav-sidebar table {
+ width: 100%;
+}
diff --git a/assets/admin/css/responsive.css b/assets/admin/css/responsive.css
index ef968c23..8c6dd810 100644
--- a/assets/admin/css/responsive.css
+++ b/assets/admin/css/responsive.css
@@ -140,7 +140,7 @@ input[type="submit"], button {
}
#changelist .actions select {
- background: #fff;
+ background: var(--body-bg);
}
#changelist .actions .button {
@@ -157,7 +157,7 @@ input[type="submit"], button {
}
#changelist-filter {
- width: 200px;
+ flex-basis: 200px;
}
.change-list .filtered .results,
@@ -166,7 +166,7 @@ input[type="submit"], button {
.filtered .actions,
#changelist .paginator {
- border-top-color: #eee;
+ border-top-color: var(--hairline-color); /* XXX Is this used at all? */
}
#changelist .results + .paginator {
@@ -213,7 +213,7 @@ input[type="submit"], button {
fieldset .fieldBox + .fieldBox {
margin-top: 10px;
padding-top: 10px;
- border-top: 1px solid #eee;
+ border-top: 1px solid var(--hairline-color);
}
textarea {
@@ -399,11 +399,11 @@ input[type="submit"], button {
.datetime .timezonewarning {
display: block;
font-size: 11px;
- color: #999;
+ color: var(--body-quiet-color);
}
.datetimeshortcuts {
- color: #ccc;
+ color: var(--border-color); /* XXX Redundant, .datetime span also sets #ccc */
}
.form-row .datetime input.vDateField, .form-row .datetime input.vTimeField {
@@ -655,7 +655,7 @@ input[type="submit"], button {
margin-bottom: -3px;
}
- form .aligned ul.radiolist li + li {
+ form .aligned ul.radiolist:not(.inline) li + li {
margin-top: 5px;
}
@@ -740,7 +740,7 @@ input[type="submit"], button {
/* Inlines */
.inline-group[data-inline-type="stacked"] .inline-related {
- border: 2px solid #eee;
+ border: 1px solid var(--hairline-color);
border-radius: 4px;
margin-top: 15px;
overflow: auto;
@@ -750,18 +750,19 @@ input[type="submit"], button {
box-sizing: border-box;
}
- .inline-group[data-inline-type="stacked"] .inline-related + .inline-related {
- margin-top: 30px;
- }
-
.inline-group[data-inline-type="stacked"] .inline-related .module {
padding: 0 10px;
}
- .inline-group[data-inline-type="stacked"] .inline-related .module .form-row:last-child {
+ .inline-group[data-inline-type="stacked"] .inline-related .module .form-row {
+ border-top: 1px solid var(--hairline-color);
border-bottom: none;
}
+ .inline-group[data-inline-type="stacked"] .inline-related .module .form-row:first-child {
+ border-top: none;
+ }
+
.inline-group[data-inline-type="stacked"] .inline-related h3 {
padding: 10px;
border-top-width: 0;
@@ -791,7 +792,7 @@ input[type="submit"], button {
.inline-group[data-inline-type="stacked"] div.add-row {
margin-top: 15px;
- border: 1px solid #eee;
+ border: 1px solid var(--hairline-color);
border-radius: 4px;
}
@@ -885,9 +886,7 @@ input[type="submit"], button {
}
.login .form-row label {
- display: block;
margin: 0 0 5px;
- padding: 0;
line-height: 1.2;
}
@@ -895,7 +894,7 @@ input[type="submit"], button {
padding: 15px 0 0;
}
- .login br, .login .submit-row label {
+ .login br {
display: none;
}
@@ -963,7 +962,7 @@ input[type="submit"], button {
}
.timelist a {
- background: #fff;
+ background: var(--body-bg);
padding: 4px;
}
diff --git a/assets/admin/css/rtl.css b/assets/admin/css/rtl.css
index a40aad0c..0447f893 100644
--- a/assets/admin/css/rtl.css
+++ b/assets/admin/css/rtl.css
@@ -1,25 +1,3 @@
-body {
- direction: rtl;
-}
-
-/* LOGIN */
-
-.login .form-row {
- float: right;
-}
-
-.login .form-row label {
- float: right;
- padding-left: 0.5em;
- padding-right: 0;
- text-align: left;
-}
-
-.login .submit-row {
- clear: both;
- padding: 1em 9.4em 0 0;
-}
-
/* GLOBAL */
th {
@@ -119,7 +97,7 @@ thead th.sorted .text {
border-left: none;
padding-left: 10px;
margin-left: 0;
- border-right: 5px solid #eaeaea;
+ border-right: 5px solid var(--hairline-color);
padding-right: 10px;
margin-right: -15px;
}
diff --git a/assets/admin/css/widgets.css b/assets/admin/css/widgets.css
index 14ef12db..c7d64566 100644
--- a/assets/admin/css/widgets.css
+++ b/assets/admin/css/widgets.css
@@ -22,26 +22,25 @@
}
.selector-available h2, .selector-chosen h2 {
- border: 1px solid #ccc;
+ border: 1px solid var(--border-color);
border-radius: 4px 4px 0 0;
}
.selector-chosen h2 {
- background: #79aec8;
- color: #fff;
+ background: var(--primary);
+ color: var(--header-link-color);
}
.selector .selector-available h2 {
- background: #f8f8f8;
- color: #666;
+ background: var(--darkened-bg);
+ color: var(--body-quiet-color);
}
.selector .selector-filter {
- background: white;
- border: 1px solid #ccc;
+ border: 1px solid var(--border-color);
border-width: 0 1px;
padding: 8px;
- color: #999;
+ color: var(--body-quiet-color);
font-size: 10px;
margin: 0;
text-align: left;
@@ -66,7 +65,7 @@
.selector ul.selector-chooser {
float: left;
width: 22px;
- background-color: #eee;
+ background-color: var(--selected-bg);
border-radius: 10px;
margin: 10em 5px 0 5px;
padding: 0;
@@ -91,7 +90,7 @@
text-indent: -3000px;
overflow: hidden;
cursor: default;
- opacity: 0.3;
+ opacity: 0.55;
}
.active.selector-add, .active.selector-remove {
@@ -126,14 +125,14 @@ a.selector-chooseall, a.selector-clearall {
overflow: hidden;
font-weight: bold;
line-height: 16px;
- color: #666;
+ color: var(--body-quiet-color);
text-decoration: none;
- opacity: 0.3;
+ opacity: 0.55;
}
a.active.selector-chooseall:focus, a.active.selector-clearall:focus,
a.active.selector-chooseall:hover, a.active.selector-clearall:hover {
- color: #447e9b;
+ color: var(--link-fg);
}
a.active.selector-chooseall, a.active.selector-clearall {
@@ -261,7 +260,7 @@ p.datetime {
line-height: 20px;
margin: 0;
padding: 0;
- color: #666;
+ color: var(--body-quiet-color);
font-weight: bold;
}
@@ -269,7 +268,7 @@ p.datetime {
white-space: nowrap;
font-weight: normal;
font-size: 11px;
- color: #ccc;
+ color: var(--body-quiet-color);
}
.datetime input, .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField {
@@ -313,7 +312,7 @@ table p.datetime {
.timezonewarning {
font-size: 11px;
- color: #999;
+ color: var(--body-quiet-color);
}
/* URL */
@@ -322,7 +321,7 @@ p.url {
line-height: 20px;
margin: 0;
padding: 0;
- color: #666;
+ color: var(--body-quiet-color);
font-size: 11px;
font-weight: bold;
}
@@ -337,7 +336,7 @@ p.file-upload {
line-height: 20px;
margin: 0;
padding: 0;
- color: #666;
+ color: var(--body-quiet-color);
font-size: 11px;
font-weight: bold;
}
@@ -355,7 +354,7 @@ p.file-upload {
}
span.clearable-file-input label {
- color: #333;
+ color: var(--body-fg);
font-size: 11px;
display: inline;
float: none;
@@ -368,8 +367,9 @@ span.clearable-file-input label {
font-size: 12px;
width: 19em;
text-align: center;
- background: white;
- border: 1px solid #ddd;
+ background: var(--body-bg);
+ color: var(--body-fg);
+ border: 1px solid var(--hairline-color);
border-radius: 4px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
overflow: hidden;
@@ -397,20 +397,20 @@ span.clearable-file-input label {
margin: 0;
text-align: center;
border-top: none;
- background: #f5dd5d;
font-weight: 700;
font-size: 12px;
color: #333;
+ background: var(--accent);
}
.calendar th {
padding: 8px 5px;
- background: #f8f8f8;
- border-bottom: 1px solid #ddd;
+ background: var(--darkened-bg);
+ border-bottom: 1px solid var(--border-color);
font-weight: 400;
font-size: 12px;
text-align: center;
- color: #666;
+ color: var(--body-quiet-color);
}
.calendar td {
@@ -418,17 +418,17 @@ span.clearable-file-input label {
font-size: 12px;
text-align: center;
padding: 0;
- border-top: 1px solid #eee;
+ border-top: 1px solid var(--hairline-color);
border-bottom: none;
}
.calendar td.selected a {
- background: #79aec8;
- color: #fff;
+ background: var(--primary);
+ color: var(--button-fg);
}
.calendar td.nonday {
- background: #f8f8f8;
+ background: var(--darkened-bg);
}
.calendar td.today a {
@@ -440,17 +440,17 @@ span.clearable-file-input label {
font-weight: 400;
padding: 6px;
text-decoration: none;
- color: #444;
+ color: var(--body-quiet-color);
}
.calendar td a:focus, .timelist a:focus,
.calendar td a:hover, .timelist a:hover {
- background: #79aec8;
+ background: var(--primary);
color: white;
}
.calendar td a:active, .timelist a:active {
- background: #417690;
+ background: var(--header-bg);
color: white;
}
@@ -464,16 +464,16 @@ span.clearable-file-input label {
.calendarnav a:link, #calendarnav a:visited,
#calendarnav a:focus, #calendarnav a:hover {
- color: #999;
+ color: var(--body-quiet-color);
}
.calendar-shortcuts {
- background: white;
+ background: var(--body-bg);
+ color: var(--body-quiet-color);
font-size: 11px;
line-height: 11px;
- border-top: 1px solid #eee;
+ border-top: 1px solid var(--hairline-color);
padding: 8px 0;
- color: #ccc;
}
.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next {
@@ -511,8 +511,8 @@ span.clearable-file-input label {
padding: 4px 0;
font-size: 12px;
background: #eee;
- border-top: 1px solid #ddd;
- color: #333;
+ border-top: 1px solid var(--border-color);
+ color: var(--body-fg);
}
.calendar-cancel:focus, .calendar-cancel:hover {
diff --git a/assets/admin/js/SelectBox.js b/assets/admin/js/SelectBox.js
index 1927b4ce..ace6d9df 100644
--- a/assets/admin/js/SelectBox.js
+++ b/assets/admin/js/SelectBox.js
@@ -13,6 +13,7 @@
redisplay: function(id) {
// Repopulate HTML select box from cache
const box = document.getElementById(id);
+ const scroll_value_from_top = box.scrollTop;
box.innerHTML = '';
for (const node of SelectBox.cache[id]) {
if (node.displayed) {
@@ -22,6 +23,7 @@
box.appendChild(new_option);
}
}
+ box.scrollTop = scroll_value_from_top;
},
filter: function(id, text) {
// Redisplay the HTML select box, displaying only the choices containing ALL
@@ -31,7 +33,7 @@
node.displayed = 1;
const node_text = node.text.toLowerCase();
for (const token of tokens) {
- if (node_text.indexOf(token) === -1) {
+ if (!node_text.includes(token)) {
node.displayed = 0;
break; // Once the first token isn't found we're done
}
diff --git a/assets/admin/js/actions.js b/assets/admin/js/actions.js
index dae69920..20a5c143 100644
--- a/assets/admin/js/actions.js
+++ b/assets/admin/js/actions.js
@@ -1,154 +1,201 @@
/*global gettext, interpolate, ngettext*/
'use strict';
{
- const $ = django.jQuery;
- let lastChecked;
+ function show(selector) {
+ document.querySelectorAll(selector).forEach(function(el) {
+ el.classList.remove('hidden');
+ });
+ }
- $.fn.actions = function(opts) {
- const options = $.extend({}, $.fn.actions.defaults, opts);
- const actionCheckboxes = $(this);
- let list_editable_changed = false;
- const showQuestion = function() {
- $(options.acrossClears).hide();
- $(options.acrossQuestions).show();
- $(options.allContainer).hide();
- },
- showClear = function() {
- $(options.acrossClears).show();
- $(options.acrossQuestions).hide();
- $(options.actionContainer).toggleClass(options.selectedClass);
- $(options.allContainer).show();
- $(options.counterContainer).hide();
- },
- reset = function() {
- $(options.acrossClears).hide();
- $(options.acrossQuestions).hide();
- $(options.allContainer).hide();
- $(options.counterContainer).show();
- },
- clearAcross = function() {
- reset();
- $(options.acrossInput).val(0);
- $(options.actionContainer).removeClass(options.selectedClass);
- },
- checker = function(checked) {
- if (checked) {
- showQuestion();
- } else {
- reset();
- }
- $(actionCheckboxes).prop("checked", checked)
- .parent().parent().toggleClass(options.selectedClass, checked);
- },
- updateCounter = function() {
- const sel = $(actionCheckboxes).filter(":checked").length;
- // data-actions-icnt is defined in the generated HTML
- // and contains the total amount of objects in the queryset
- const actions_icnt = $('.action-counter').data('actionsIcnt');
- $(options.counterContainer).html(interpolate(
- ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), {
- sel: sel,
- cnt: actions_icnt
- }, true));
- $(options.allToggle).prop("checked", function() {
- let value;
- if (sel === actionCheckboxes.length) {
- value = true;
- showQuestion();
- } else {
- value = false;
- clearAcross();
- }
- return value;
- });
- };
- // Show counter by default
- $(options.counterContainer).show();
- // Check state of checkboxes and reinit state if needed
- $(this).filter(":checked").each(function(i) {
- $(this).parent().parent().toggleClass(options.selectedClass);
- updateCounter();
- if ($(options.acrossInput).val() === 1) {
- showClear();
- }
+ function hide(selector) {
+ document.querySelectorAll(selector).forEach(function(el) {
+ el.classList.add('hidden');
});
- $(options.allToggle).show().on('click', function() {
- checker($(this).prop("checked"));
- updateCounter();
+ }
+
+ function showQuestion(options) {
+ hide(options.acrossClears);
+ show(options.acrossQuestions);
+ hide(options.allContainer);
+ }
+
+ function showClear(options) {
+ show(options.acrossClears);
+ hide(options.acrossQuestions);
+ document.querySelector(options.actionContainer).classList.remove(options.selectedClass);
+ show(options.allContainer);
+ hide(options.counterContainer);
+ }
+
+ function reset(options) {
+ hide(options.acrossClears);
+ hide(options.acrossQuestions);
+ hide(options.allContainer);
+ show(options.counterContainer);
+ }
+
+ function clearAcross(options) {
+ reset(options);
+ const acrossInputs = document.querySelectorAll(options.acrossInput);
+ acrossInputs.forEach(function(acrossInput) {
+ acrossInput.value = 0;
});
- $("a", options.acrossQuestions).on('click', function(event) {
- event.preventDefault();
- $(options.acrossInput).val(1);
- showClear();
+ document.querySelector(options.actionContainer).classList.remove(options.selectedClass);
+ }
+
+ function checker(actionCheckboxes, options, checked) {
+ if (checked) {
+ showQuestion(options);
+ } else {
+ reset(options);
+ }
+ actionCheckboxes.forEach(function(el) {
+ el.checked = checked;
+ el.closest('tr').classList.toggle(options.selectedClass, checked);
});
- $("a", options.acrossClears).on('click', function(event) {
- event.preventDefault();
- $(options.allToggle).prop("checked", false);
- clearAcross();
- checker(0);
- updateCounter();
- });
- lastChecked = null;
- $(actionCheckboxes).on('click', function(event) {
- if (!event) { event = window.event; }
- const target = event.target ? event.target : event.srcElement;
- if (lastChecked && $.data(lastChecked) !== $.data(target) && event.shiftKey === true) {
- let inrange = false;
- $(lastChecked).prop("checked", target.checked)
- .parent().parent().toggleClass(options.selectedClass, target.checked);
- $(actionCheckboxes).each(function() {
- if ($.data(this) === $.data(lastChecked) || $.data(this) === $.data(target)) {
- inrange = (inrange) ? false : true;
- }
- if (inrange) {
- $(this).prop("checked", target.checked)
- .parent().parent().toggleClass(options.selectedClass, target.checked);
- }
- });
- }
- $(target).parent().parent().toggleClass(options.selectedClass, target.checked);
- lastChecked = target;
- updateCounter();
- });
- $('form#changelist-form table#result_list tr').on('change', 'td:gt(0) :input', function() {
- list_editable_changed = true;
- });
- $('form#changelist-form button[name="index"]').on('click', function(event) {
- if (list_editable_changed) {
- return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."));
- }
- });
- $('form#changelist-form input[name="_save"]').on('click', function(event) {
- let action_changed = false;
- $('select option:selected', options.actionContainer).each(function() {
- if ($(this).val()) {
- action_changed = true;
- }
- });
- if (action_changed) {
- if (list_editable_changed) {
- return confirm(gettext("You have selected an action, but you haven’t saved your changes to individual fields yet. Please click OK to save. You’ll need to re-run the action."));
- } else {
- return confirm(gettext("You have selected an action, and you haven’t made any changes on individual fields. You’re probably looking for the Go button rather than the Save button."));
- }
- }
- });
- };
- /* Setup plugin defaults */
- $.fn.actions.defaults = {
+ }
+
+ function updateCounter(actionCheckboxes, options) {
+ const sel = Array.from(actionCheckboxes).filter(function(el) {
+ return el.checked;
+ }).length;
+ const counter = document.querySelector(options.counterContainer);
+ // data-actions-icnt is defined in the generated HTML
+ // and contains the total amount of objects in the queryset
+ const actions_icnt = Number(counter.dataset.actionsIcnt);
+ counter.textContent = interpolate(
+ ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), {
+ sel: sel,
+ cnt: actions_icnt
+ }, true);
+ const allToggle = document.getElementById(options.allToggleId);
+ allToggle.checked = sel === actionCheckboxes.length;
+ if (allToggle.checked) {
+ showQuestion(options);
+ } else {
+ clearAcross(options);
+ }
+ }
+
+ const defaults = {
actionContainer: "div.actions",
counterContainer: "span.action-counter",
allContainer: "div.actions span.all",
acrossInput: "div.actions input.select-across",
acrossQuestions: "div.actions span.question",
acrossClears: "div.actions span.clear",
- allToggle: "#action-toggle",
+ allToggleId: "action-toggle",
selectedClass: "selected"
};
- $(document).ready(function() {
- const $actionsEls = $('tr input.action-select');
- if ($actionsEls.length > 0) {
- $actionsEls.actions();
+
+ window.Actions = function(actionCheckboxes, options) {
+ options = Object.assign({}, defaults, options);
+ let list_editable_changed = false;
+ let lastChecked = null;
+ let shiftPressed = false;
+
+ document.addEventListener('keydown', (event) => {
+ shiftPressed = event.shiftKey;
+ });
+
+ document.addEventListener('keyup', (event) => {
+ shiftPressed = event.shiftKey;
+ });
+
+ document.getElementById(options.allToggleId).addEventListener('click', function(event) {
+ checker(actionCheckboxes, options, this.checked);
+ updateCounter(actionCheckboxes, options);
+ });
+
+ document.querySelectorAll(options.acrossQuestions + " a").forEach(function(el) {
+ el.addEventListener('click', function(event) {
+ event.preventDefault();
+ const acrossInputs = document.querySelectorAll(options.acrossInput);
+ acrossInputs.forEach(function(acrossInput) {
+ acrossInput.value = 1;
+ });
+ showClear(options);
+ });
+ });
+
+ document.querySelectorAll(options.acrossClears + " a").forEach(function(el) {
+ el.addEventListener('click', function(event) {
+ event.preventDefault();
+ document.getElementById(options.allToggleId).checked = false;
+ clearAcross(options);
+ checker(actionCheckboxes, options, false);
+ updateCounter(actionCheckboxes, options);
+ });
+ });
+
+ function affectedCheckboxes(target, withModifier) {
+ const multiSelect = (lastChecked && withModifier && lastChecked !== target);
+ if (!multiSelect) {
+ return [target];
+ }
+ const checkboxes = Array.from(actionCheckboxes);
+ const targetIndex = checkboxes.findIndex(el => el === target);
+ const lastCheckedIndex = checkboxes.findIndex(el => el === lastChecked);
+ const startIndex = Math.min(targetIndex, lastCheckedIndex);
+ const endIndex = Math.max(targetIndex, lastCheckedIndex);
+ const filtered = checkboxes.filter((el, index) => (startIndex <= index) && (index <= endIndex));
+ return filtered;
+ };
+
+ Array.from(document.getElementById('result_list').tBodies).forEach(function(el) {
+ el.addEventListener('change', function(event) {
+ const target = event.target;
+ if (target.classList.contains('action-select')) {
+ const checkboxes = affectedCheckboxes(target, shiftPressed);
+ checker(checkboxes, options, target.checked);
+ updateCounter(actionCheckboxes, options);
+ lastChecked = target;
+ } else {
+ list_editable_changed = true;
+ }
+ });
+ });
+
+ document.querySelector('#changelist-form button[name=index]').addEventListener('click', function(event) {
+ if (list_editable_changed) {
+ const confirmed = confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."));
+ if (!confirmed) {
+ event.preventDefault();
+ }
+ }
+ });
+
+ const el = document.querySelector('#changelist-form input[name=_save]');
+ // The button does not exist if no fields are editable.
+ if (el) {
+ el.addEventListener('click', function(event) {
+ if (document.querySelector('[name=action]').value) {
+ const text = list_editable_changed
+ ? gettext("You have selected an action, but you haven’t saved your changes to individual fields yet. Please click OK to save. You’ll need to re-run the action.")
+ : gettext("You have selected an action, and you haven’t made any changes on individual fields. You’re probably looking for the Go button rather than the Save button.");
+ if (!confirm(text)) {
+ event.preventDefault();
+ }
+ }
+ });
+ }
+ };
+
+ // Call function fn when the DOM is loaded and ready. If it is already
+ // loaded, call the function now.
+ // http://youmightnotneedjquery.com/#ready
+ function ready(fn) {
+ if (document.readyState !== 'loading') {
+ fn();
+ } else {
+ document.addEventListener('DOMContentLoaded', fn);
+ }
+ }
+
+ ready(function() {
+ const actionsEls = document.querySelectorAll('tr input.action-select');
+ if (actionsEls.length > 0) {
+ Actions(actionsEls);
}
});
}
diff --git a/assets/admin/js/admin/DateTimeShortcuts.js b/assets/admin/js/admin/DateTimeShortcuts.js
index 28de4797..9bad0f54 100644
--- a/assets/admin/js/admin/DateTimeShortcuts.js
+++ b/assets/admin/js/admin/DateTimeShortcuts.js
@@ -28,8 +28,7 @@
timezoneWarningClass: 'timezonewarning', // class of the warning for timezone mismatch
timezoneOffset: 0,
init: function() {
- const body = document.getElementsByTagName('body')[0];
- const serverOffset = body.dataset.adminUtcOffset;
+ const serverOffset = document.body.dataset.adminUtcOffset;
if (serverOffset) {
const localOffset = new Date().getTimezoneOffset() * -60;
DateTimeShortcuts.timezoneOffset = localOffset - serverOffset;
@@ -48,8 +47,7 @@
},
// Return the current time while accounting for the server timezone.
now: function() {
- const body = document.getElementsByTagName('body')[0];
- const serverOffset = body.dataset.adminUtcOffset;
+ const serverOffset = document.body.dataset.adminUtcOffset;
if (serverOffset) {
const localNow = new Date();
const localOffset = localNow.getTimezoneOffset() * -60;
diff --git a/assets/admin/js/admin/RelatedObjectLookups.js b/assets/admin/js/admin/RelatedObjectLookups.js
index 8c95df7c..289e1cee 100644
--- a/assets/admin/js/admin/RelatedObjectLookups.js
+++ b/assets/admin/js/admin/RelatedObjectLookups.js
@@ -7,13 +7,9 @@
function showAdminPopup(triggeringLink, name_regexp, add_popup) {
const name = triggeringLink.id.replace(name_regexp, '');
- let href = triggeringLink.href;
+ const href = new URL(triggeringLink.href);
if (add_popup) {
- if (href.indexOf('?') === -1) {
- href += '?_popup=1';
- } else {
- href += '&_popup=1';
- }
+ href.searchParams.set('_popup', 1);
}
const win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes');
win.focus();
diff --git a/assets/admin/js/autocomplete.js b/assets/admin/js/autocomplete.js
index c922b303..6095abe2 100644
--- a/assets/admin/js/autocomplete.js
+++ b/assets/admin/js/autocomplete.js
@@ -1,25 +1,22 @@
'use strict';
{
const $ = django.jQuery;
- const init = function($element, options) {
- const settings = $.extend({
- ajax: {
- data: function(params) {
- return {
- term: params.term,
- page: params.page
- };
- }
- }
- }, options);
- $element.select2(settings);
- };
- $.fn.djangoAdminSelect2 = function(options) {
- const settings = $.extend({}, options);
+ $.fn.djangoAdminSelect2 = function() {
$.each(this, function(i, element) {
- const $element = $(element);
- init($element, settings);
+ $(element).select2({
+ ajax: {
+ data: (params) => {
+ return {
+ term: params.term,
+ page: params.page,
+ app_label: element.dataset.appLabel,
+ model_name: element.dataset.modelName,
+ field_name: element.dataset.fieldName
+ };
+ }
+ }
+ });
});
return this;
};
diff --git a/assets/admin/js/calendar.js b/assets/admin/js/calendar.js
index 64598bbb..a62d10a7 100644
--- a/assets/admin/js/calendar.js
+++ b/assets/admin/js/calendar.js
@@ -21,6 +21,20 @@ depends on core.js for utility functions like removeChildren or quickElement
gettext('November'),
gettext('December')
],
+ monthsOfYearAbbrev: [
+ pgettext('abbrev. month January', 'Jan'),
+ pgettext('abbrev. month February', 'Feb'),
+ pgettext('abbrev. month March', 'Mar'),
+ pgettext('abbrev. month April', 'Apr'),
+ pgettext('abbrev. month May', 'May'),
+ pgettext('abbrev. month June', 'Jun'),
+ pgettext('abbrev. month July', 'Jul'),
+ pgettext('abbrev. month August', 'Aug'),
+ pgettext('abbrev. month September', 'Sep'),
+ pgettext('abbrev. month October', 'Oct'),
+ pgettext('abbrev. month November', 'Nov'),
+ pgettext('abbrev. month December', 'Dec')
+ ],
daysOfWeek: [
pgettext('one letter Sunday', 'S'),
pgettext('one letter Monday', 'M'),
diff --git a/assets/admin/js/cancel.js b/assets/admin/js/cancel.js
index cfe06c27..3069c6f2 100644
--- a/assets/admin/js/cancel.js
+++ b/assets/admin/js/cancel.js
@@ -14,10 +14,11 @@
ready(function() {
function handleClick(event) {
event.preventDefault();
- if (window.location.search.indexOf('&_popup=1') === -1) {
- window.history.back(); // Go back if not a popup.
+ const params = new URLSearchParams(window.location.search);
+ if (params.has('_popup')) {
+ window.close(); // Close the popup.
} else {
- window.close(); // Otherwise, close the popup.
+ window.history.back(); // Otherwise, go back.
}
}
diff --git a/assets/admin/js/core.js b/assets/admin/js/core.js
index 8ef27b34..afdae281 100644
--- a/assets/admin/js/core.js
+++ b/assets/admin/js/core.js
@@ -1,4 +1,4 @@
-// Core javascript helper functions
+// Core JavaScript helper functions
'use strict';
// quickElement(tagType, parentReference [, textInChildNode, attribute, attributeValue ...]);
@@ -85,6 +85,12 @@ function findPosY(obj) {
return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds();
};
+ Date.prototype.getAbbrevMonthName = function() {
+ return typeof window.CalendarNamespace === "undefined"
+ ? this.getTwoDigitMonth()
+ : window.CalendarNamespace.monthsOfYearAbbrev[this.getMonth()];
+ };
+
Date.prototype.getFullMonthName = function() {
return typeof window.CalendarNamespace === "undefined"
? this.getTwoDigitMonth()
@@ -93,6 +99,7 @@ function findPosY(obj) {
Date.prototype.strftime = function(format) {
const fields = {
+ b: this.getAbbrevMonthName(),
B: this.getFullMonthName(),
c: this.toString(),
d: this.getTwoDigitDate(),
diff --git a/assets/admin/js/inlines.js b/assets/admin/js/inlines.js
index 82ec0272..d9a9032c 100644
--- a/assets/admin/js/inlines.js
+++ b/assets/admin/js/inlines.js
@@ -218,12 +218,10 @@
// instantiate a new SelectFilter instance for it.
if (typeof SelectFilter !== 'undefined') {
$('.selectfilter').each(function(index, value) {
- const namearr = value.name.split('-');
- SelectFilter.init(value.id, namearr[namearr.length - 1], false);
+ SelectFilter.init(value.id, this.dataset.fieldName, false);
});
$('.selectfilterstacked').each(function(index, value) {
- const namearr = value.name.split('-');
- SelectFilter.init(value.id, namearr[namearr.length - 1], true);
+ SelectFilter.init(value.id, this.dataset.fieldName, true);
});
}
};
@@ -283,12 +281,10 @@
// If any SelectFilter widgets were added, instantiate a new instance.
if (typeof SelectFilter !== "undefined") {
$(".selectfilter").each(function(index, value) {
- const namearr = value.name.split('-');
- SelectFilter.init(value.id, namearr[namearr.length - 1], false);
+ SelectFilter.init(value.id, this.dataset.fieldName, false);
});
$(".selectfilterstacked").each(function(index, value) {
- const namearr = value.name.split('-');
- SelectFilter.init(value.id, namearr[namearr.length - 1], true);
+ SelectFilter.init(value.id, this.dataset.fieldName, true);
});
}
};
diff --git a/assets/admin/js/nav_sidebar.js b/assets/admin/js/nav_sidebar.js
index efaa7214..86cb1cf8 100644
--- a/assets/admin/js/nav_sidebar.js
+++ b/assets/admin/js/nav_sidebar.js
@@ -36,4 +36,58 @@
main.classList.toggle('shifted');
});
}
+
+ function initSidebarQuickFilter() {
+ const options = [];
+ const navSidebar = document.getElementById('nav-sidebar');
+ if (!navSidebar) {
+ return;
+ }
+ navSidebar.querySelectorAll('th[scope=row] a').forEach((container) => {
+ options.push({title: container.innerHTML, node: container});
+ });
+
+ function checkValue(event) {
+ let filterValue = event.target.value;
+ if (filterValue) {
+ filterValue = filterValue.toLowerCase();
+ }
+ if (event.key === 'Escape') {
+ filterValue = '';
+ event.target.value = ''; // clear input
+ }
+ let matches = false;
+ for (const o of options) {
+ let displayValue = '';
+ if (filterValue) {
+ if (o.title.toLowerCase().indexOf(filterValue) === -1) {
+ displayValue = 'none';
+ } else {
+ matches = true;
+ }
+ }
+ // show/hide parent
+ o.node.parentNode.parentNode.style.display = displayValue;
+ }
+ if (!filterValue || matches) {
+ event.target.classList.remove('no-results');
+ } else {
+ event.target.classList.add('no-results');
+ }
+ sessionStorage.setItem('django.admin.navSidebarFilterValue', filterValue);
+ }
+
+ const nav = document.getElementById('nav-filter');
+ nav.addEventListener('change', checkValue, false);
+ nav.addEventListener('input', checkValue, false);
+ nav.addEventListener('keyup', checkValue, false);
+
+ const storedValue = sessionStorage.getItem('django.admin.navSidebarFilterValue');
+ if (storedValue) {
+ nav.value = storedValue;
+ checkValue({target: nav, key: ''});
+ }
+ }
+ window.initSidebarQuickFilter = initSidebarQuickFilter;
+ initSidebarQuickFilter();
}
diff --git a/assets/admin/js/urlify.js b/assets/admin/js/urlify.js
index 7faa6591..61dedb23 100644
--- a/assets/admin/js/urlify.js
+++ b/assets/admin/js/urlify.js
@@ -134,8 +134,7 @@
for (const lookup of ALL_DOWNCODE_MAPS) {
Object.assign(Downcoder.map, lookup);
}
- Downcoder.chars = Object.keys(Downcoder.map);
- Downcoder.regex = new RegExp(Downcoder.chars.join('|'), 'g');
+ Downcoder.regex = new RegExp(Object.keys(Downcoder.map).join('|'), 'g');
}
};
@@ -149,23 +148,9 @@
function URLify(s, num_chars, allowUnicode) {
// changes, e.g., "Petty theft" to "petty-theft"
- // remove all these words from the string before urlifying
if (!allowUnicode) {
s = downcode(s);
}
- const hasUnicodeChars = /[^\u0000-\u007f]/.test(s);
- // Remove English words only if the string contains ASCII (English)
- // characters.
- if (!hasUnicodeChars) {
- const removeList = [
- "a", "an", "as", "at", "before", "but", "by", "for", "from",
- "is", "in", "into", "like", "of", "off", "on", "onto", "per",
- "since", "than", "the", "this", "that", "to", "up", "via",
- "with"
- ];
- const r = new RegExp('\\b(' + removeList.join('|') + ')\\b', 'gi');
- s = s.replace(r, '');
- }
s = s.toLowerCase(); // convert to lowercase
// if downcode doesn't hit, the char will be stripped here
if (allowUnicode) {
diff --git a/assets/admin/js/vendor/jquery/LICENSE.txt b/assets/admin/js/vendor/jquery/LICENSE.txt
index e3dbacb9..f642c3f7 100644
--- a/assets/admin/js/vendor/jquery/LICENSE.txt
+++ b/assets/admin/js/vendor/jquery/LICENSE.txt
@@ -1,4 +1,4 @@
-Copyright JS Foundation and other contributors, https://js.foundation/
+Copyright OpenJS Foundation and other contributors, https://openjsf.org/
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
diff --git a/assets/admin/js/vendor/jquery/jquery.js b/assets/admin/js/vendor/jquery/jquery.js
index 50937333..fc6c299b 100644
--- a/assets/admin/js/vendor/jquery/jquery.js
+++ b/assets/admin/js/vendor/jquery/jquery.js
@@ -1,15 +1,15 @@
/*!
- * jQuery JavaScript Library v3.5.1
+ * jQuery JavaScript Library v3.6.0
* https://jquery.com/
*
* Includes Sizzle.js
* https://sizzlejs.com/
*
- * Copyright JS Foundation and other contributors
+ * Copyright OpenJS Foundation and other contributors
* Released under the MIT license
* https://jquery.org/license
*
- * Date: 2020-05-04T22:49Z
+ * Date: 2021-03-02T17:08Z
*/
( function( global, factory ) {
@@ -76,12 +76,16 @@ var support = {};
var isFunction = function isFunction( obj ) {
- // Support: Chrome <=57, Firefox <=52
- // In some browsers, typeof returns "function" for HTML