tiffank1802 commited on
Commit ·
fcdb357
1
Parent(s): 0785de0
adding
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- staticfiles/admin/css/autocomplete.css +279 -0
- staticfiles/admin/css/base.css +1221 -0
- staticfiles/admin/css/changelists.css +371 -0
- staticfiles/admin/css/dark_mode.css +146 -0
- staticfiles/admin/css/dashboard.css +29 -0
- staticfiles/admin/css/forms.css +518 -0
- staticfiles/admin/css/login.css +61 -0
- staticfiles/admin/css/nav_sidebar.css +150 -0
- staticfiles/admin/css/responsive.css +885 -0
- staticfiles/admin/css/responsive_rtl.css +95 -0
- staticfiles/admin/css/rtl.css +295 -0
- staticfiles/admin/css/unusable_password_field.css +19 -0
- staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.md +21 -0
- staticfiles/admin/css/vendor/select2/select2.css +481 -0
- staticfiles/admin/css/vendor/select2/select2.min.css +1 -0
- staticfiles/admin/css/widgets.css +606 -0
- staticfiles/admin/img/README.md +80 -0
- staticfiles/admin/img/calendar-icons.svg +44 -0
- staticfiles/admin/img/icon-addlink.svg +9 -0
- staticfiles/admin/img/icon-alert-dark.svg +9 -0
- staticfiles/admin/img/icon-alert.svg +9 -0
- staticfiles/admin/img/icon-calendar.svg +15 -0
- staticfiles/admin/img/icon-changelink.svg +9 -0
- staticfiles/admin/img/icon-clock.svg +15 -0
- staticfiles/admin/img/icon-debug-dark.svg +9 -0
- staticfiles/admin/img/icon-debug.svg +9 -0
- staticfiles/admin/img/icon-deletelink.svg +11 -0
- staticfiles/admin/img/icon-hidelink.svg +9 -0
- staticfiles/admin/img/icon-info-dark.svg +9 -0
- staticfiles/admin/img/icon-info.svg +9 -0
- staticfiles/admin/img/icon-no-dark.svg +9 -0
- staticfiles/admin/img/icon-no.svg +9 -0
- staticfiles/admin/img/icon-unknown-alt.svg +9 -0
- staticfiles/admin/img/icon-unknown.svg +9 -0
- staticfiles/admin/img/icon-viewlink.svg +9 -0
- staticfiles/admin/img/icon-yes-dark.svg +9 -0
- staticfiles/admin/img/icon-yes.svg +9 -0
- staticfiles/admin/img/inline-delete.svg +9 -0
- staticfiles/admin/img/search.svg +9 -0
- staticfiles/admin/img/selector-icons.svg +45 -0
- staticfiles/admin/img/sorting-icons.svg +35 -0
- staticfiles/admin/img/tooltag-add.svg +9 -0
- staticfiles/admin/img/tooltag-arrowright.svg +9 -0
- staticfiles/admin/js/SelectBox.js +116 -0
- staticfiles/admin/js/SelectFilter2.js +329 -0
- staticfiles/admin/js/actions.js +204 -0
- staticfiles/admin/js/admin/DateTimeShortcuts.js +413 -0
- staticfiles/admin/js/admin/RelatedObjectLookups.js +252 -0
- staticfiles/admin/js/autocomplete.js +33 -0
- staticfiles/admin/js/calendar.js +239 -0
staticfiles/admin/css/autocomplete.css
ADDED
|
@@ -0,0 +1,279 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
select.admin-autocomplete {
|
| 2 |
+
width: 20em;
|
| 3 |
+
}
|
| 4 |
+
|
| 5 |
+
.select2-container--admin-autocomplete.select2-container {
|
| 6 |
+
min-height: 30px;
|
| 7 |
+
}
|
| 8 |
+
|
| 9 |
+
.select2-container--admin-autocomplete .select2-selection--single,
|
| 10 |
+
.select2-container--admin-autocomplete .select2-selection--multiple {
|
| 11 |
+
min-height: 30px;
|
| 12 |
+
padding: 0;
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
.select2-container--admin-autocomplete.select2-container--focus .select2-selection,
|
| 16 |
+
.select2-container--admin-autocomplete.select2-container--open .select2-selection {
|
| 17 |
+
border-color: var(--body-quiet-color);
|
| 18 |
+
min-height: 30px;
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--single,
|
| 22 |
+
.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--single {
|
| 23 |
+
padding: 0;
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--multiple,
|
| 27 |
+
.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--multiple {
|
| 28 |
+
padding: 0;
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
.select2-container--admin-autocomplete .select2-selection--single {
|
| 32 |
+
background-color: var(--body-bg);
|
| 33 |
+
border: 1px solid var(--border-color);
|
| 34 |
+
border-radius: 4px;
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
.select2-container--admin-autocomplete .select2-selection--single .select2-selection__rendered {
|
| 38 |
+
color: var(--body-fg);
|
| 39 |
+
line-height: 30px;
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
.select2-container--admin-autocomplete .select2-selection--single .select2-selection__clear {
|
| 43 |
+
cursor: pointer;
|
| 44 |
+
float: right;
|
| 45 |
+
font-weight: bold;
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
.select2-container--admin-autocomplete .select2-selection--single .select2-selection__placeholder {
|
| 49 |
+
color: var(--body-quiet-color);
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow {
|
| 53 |
+
height: 26px;
|
| 54 |
+
position: absolute;
|
| 55 |
+
top: 1px;
|
| 56 |
+
right: 1px;
|
| 57 |
+
width: 20px;
|
| 58 |
+
}
|
| 59 |
+
|
| 60 |
+
.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow b {
|
| 61 |
+
border-color: #888 transparent transparent transparent;
|
| 62 |
+
border-style: solid;
|
| 63 |
+
border-width: 5px 4px 0 4px;
|
| 64 |
+
height: 0;
|
| 65 |
+
left: 50%;
|
| 66 |
+
margin-left: -4px;
|
| 67 |
+
margin-top: -2px;
|
| 68 |
+
position: absolute;
|
| 69 |
+
top: 50%;
|
| 70 |
+
width: 0;
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__clear {
|
| 74 |
+
float: left;
|
| 75 |
+
}
|
| 76 |
+
|
| 77 |
+
.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__arrow {
|
| 78 |
+
left: 1px;
|
| 79 |
+
right: auto;
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
+
.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single {
|
| 83 |
+
background-color: var(--darkened-bg);
|
| 84 |
+
cursor: default;
|
| 85 |
+
}
|
| 86 |
+
|
| 87 |
+
.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single .select2-selection__clear {
|
| 88 |
+
display: none;
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
+
.select2-container--admin-autocomplete.select2-container--open .select2-selection--single .select2-selection__arrow b {
|
| 92 |
+
border-color: transparent transparent #888 transparent;
|
| 93 |
+
border-width: 0 4px 5px 4px;
|
| 94 |
+
}
|
| 95 |
+
|
| 96 |
+
.select2-container--admin-autocomplete .select2-selection--multiple {
|
| 97 |
+
background-color: var(--body-bg);
|
| 98 |
+
border: 1px solid var(--border-color);
|
| 99 |
+
border-radius: 4px;
|
| 100 |
+
cursor: text;
|
| 101 |
+
}
|
| 102 |
+
|
| 103 |
+
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered {
|
| 104 |
+
box-sizing: border-box;
|
| 105 |
+
list-style: none;
|
| 106 |
+
margin: 0;
|
| 107 |
+
padding: 0 10px 5px 5px;
|
| 108 |
+
width: 100%;
|
| 109 |
+
display: flex;
|
| 110 |
+
flex-wrap: wrap;
|
| 111 |
+
}
|
| 112 |
+
|
| 113 |
+
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered li {
|
| 114 |
+
list-style: none;
|
| 115 |
+
}
|
| 116 |
+
|
| 117 |
+
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__placeholder {
|
| 118 |
+
color: var(--body-quiet-color);
|
| 119 |
+
margin-top: 5px;
|
| 120 |
+
float: left;
|
| 121 |
+
}
|
| 122 |
+
|
| 123 |
+
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__clear {
|
| 124 |
+
cursor: pointer;
|
| 125 |
+
float: right;
|
| 126 |
+
font-weight: bold;
|
| 127 |
+
margin: 5px;
|
| 128 |
+
position: absolute;
|
| 129 |
+
right: 0;
|
| 130 |
+
}
|
| 131 |
+
|
| 132 |
+
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice {
|
| 133 |
+
background-color: var(--darkened-bg);
|
| 134 |
+
border: 1px solid var(--border-color);
|
| 135 |
+
border-radius: 4px;
|
| 136 |
+
cursor: default;
|
| 137 |
+
float: left;
|
| 138 |
+
margin-right: 5px;
|
| 139 |
+
margin-top: 5px;
|
| 140 |
+
padding: 0 5px;
|
| 141 |
+
}
|
| 142 |
+
|
| 143 |
+
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove {
|
| 144 |
+
color: var(--body-quiet-color);
|
| 145 |
+
cursor: pointer;
|
| 146 |
+
display: inline-block;
|
| 147 |
+
font-weight: bold;
|
| 148 |
+
margin-right: 2px;
|
| 149 |
+
}
|
| 150 |
+
|
| 151 |
+
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove:hover {
|
| 152 |
+
color: var(--body-fg);
|
| 153 |
+
}
|
| 154 |
+
|
| 155 |
+
.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 {
|
| 156 |
+
float: right;
|
| 157 |
+
}
|
| 158 |
+
|
| 159 |
+
.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
|
| 160 |
+
margin-left: 5px;
|
| 161 |
+
margin-right: auto;
|
| 162 |
+
}
|
| 163 |
+
|
| 164 |
+
.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
|
| 165 |
+
margin-left: 2px;
|
| 166 |
+
margin-right: auto;
|
| 167 |
+
}
|
| 168 |
+
|
| 169 |
+
.select2-container--admin-autocomplete.select2-container--focus .select2-selection--multiple {
|
| 170 |
+
border: solid var(--body-quiet-color) 1px;
|
| 171 |
+
outline: 0;
|
| 172 |
+
}
|
| 173 |
+
|
| 174 |
+
.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--multiple {
|
| 175 |
+
background-color: var(--darkened-bg);
|
| 176 |
+
cursor: default;
|
| 177 |
+
}
|
| 178 |
+
|
| 179 |
+
.select2-container--admin-autocomplete.select2-container--disabled .select2-selection__choice__remove {
|
| 180 |
+
display: none;
|
| 181 |
+
}
|
| 182 |
+
|
| 183 |
+
.select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--multiple {
|
| 184 |
+
border-top-left-radius: 0;
|
| 185 |
+
border-top-right-radius: 0;
|
| 186 |
+
}
|
| 187 |
+
|
| 188 |
+
.select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--multiple {
|
| 189 |
+
border-bottom-left-radius: 0;
|
| 190 |
+
border-bottom-right-radius: 0;
|
| 191 |
+
}
|
| 192 |
+
|
| 193 |
+
.select2-container--admin-autocomplete .select2-search--dropdown {
|
| 194 |
+
background: var(--darkened-bg);
|
| 195 |
+
}
|
| 196 |
+
|
| 197 |
+
.select2-container--admin-autocomplete .select2-search--dropdown .select2-search__field {
|
| 198 |
+
background: var(--body-bg);
|
| 199 |
+
color: var(--body-fg);
|
| 200 |
+
border: 1px solid var(--border-color);
|
| 201 |
+
border-radius: 4px;
|
| 202 |
+
}
|
| 203 |
+
|
| 204 |
+
.select2-container--admin-autocomplete .select2-search--inline .select2-search__field {
|
| 205 |
+
background: transparent;
|
| 206 |
+
color: var(--body-fg);
|
| 207 |
+
border: none;
|
| 208 |
+
outline: 0;
|
| 209 |
+
box-shadow: none;
|
| 210 |
+
-webkit-appearance: textfield;
|
| 211 |
+
}
|
| 212 |
+
|
| 213 |
+
.select2-container--admin-autocomplete .select2-results > .select2-results__options {
|
| 214 |
+
max-height: 200px;
|
| 215 |
+
overflow-y: auto;
|
| 216 |
+
color: var(--body-fg);
|
| 217 |
+
background: var(--body-bg);
|
| 218 |
+
}
|
| 219 |
+
|
| 220 |
+
.select2-container--admin-autocomplete .select2-results__option[role=group] {
|
| 221 |
+
padding: 0;
|
| 222 |
+
}
|
| 223 |
+
|
| 224 |
+
.select2-container--admin-autocomplete .select2-results__option[aria-disabled=true] {
|
| 225 |
+
color: var(--body-quiet-color);
|
| 226 |
+
}
|
| 227 |
+
|
| 228 |
+
.select2-container--admin-autocomplete .select2-results__option[aria-selected=true] {
|
| 229 |
+
background-color: var(--selected-bg);
|
| 230 |
+
color: var(--body-fg);
|
| 231 |
+
}
|
| 232 |
+
|
| 233 |
+
.select2-container--admin-autocomplete .select2-results__option .select2-results__option {
|
| 234 |
+
padding-left: 1em;
|
| 235 |
+
}
|
| 236 |
+
|
| 237 |
+
.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__group {
|
| 238 |
+
padding-left: 0;
|
| 239 |
+
}
|
| 240 |
+
|
| 241 |
+
.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option {
|
| 242 |
+
margin-left: -1em;
|
| 243 |
+
padding-left: 2em;
|
| 244 |
+
}
|
| 245 |
+
|
| 246 |
+
.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
| 247 |
+
margin-left: -2em;
|
| 248 |
+
padding-left: 3em;
|
| 249 |
+
}
|
| 250 |
+
|
| 251 |
+
.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
| 252 |
+
margin-left: -3em;
|
| 253 |
+
padding-left: 4em;
|
| 254 |
+
}
|
| 255 |
+
|
| 256 |
+
.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
| 257 |
+
margin-left: -4em;
|
| 258 |
+
padding-left: 5em;
|
| 259 |
+
}
|
| 260 |
+
|
| 261 |
+
.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
| 262 |
+
margin-left: -5em;
|
| 263 |
+
padding-left: 6em;
|
| 264 |
+
}
|
| 265 |
+
|
| 266 |
+
.select2-container--admin-autocomplete .select2-results__option--highlighted[aria-selected] {
|
| 267 |
+
background-color: var(--primary);
|
| 268 |
+
color: var(--primary-fg);
|
| 269 |
+
}
|
| 270 |
+
|
| 271 |
+
.select2-container--admin-autocomplete .select2-results__group {
|
| 272 |
+
cursor: default;
|
| 273 |
+
display: block;
|
| 274 |
+
padding: 6px;
|
| 275 |
+
}
|
| 276 |
+
|
| 277 |
+
.errors .select2-selection {
|
| 278 |
+
border: 1px solid var(--error-fg);
|
| 279 |
+
}
|
staticfiles/admin/css/base.css
ADDED
|
@@ -0,0 +1,1221 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
DJANGO Admin styles
|
| 3 |
+
*/
|
| 4 |
+
|
| 5 |
+
/* VARIABLE DEFINITIONS */
|
| 6 |
+
html[data-theme="light"],
|
| 7 |
+
:root {
|
| 8 |
+
--primary: #79aec8;
|
| 9 |
+
--secondary: #417690;
|
| 10 |
+
--accent: #f5dd5d;
|
| 11 |
+
--primary-fg: #fff;
|
| 12 |
+
|
| 13 |
+
--body-fg: #333;
|
| 14 |
+
--body-bg: #fff;
|
| 15 |
+
--body-quiet-color: #666;
|
| 16 |
+
--body-medium-color: #444;
|
| 17 |
+
--body-loud-color: #000;
|
| 18 |
+
|
| 19 |
+
--header-color: #ffc;
|
| 20 |
+
--header-branding-color: var(--accent);
|
| 21 |
+
--header-bg: var(--secondary);
|
| 22 |
+
--header-link-color: var(--primary-fg);
|
| 23 |
+
|
| 24 |
+
--breadcrumbs-fg: #c4dce8;
|
| 25 |
+
--breadcrumbs-link-fg: var(--body-bg);
|
| 26 |
+
--breadcrumbs-bg: #264b5d;
|
| 27 |
+
|
| 28 |
+
--link-fg: #417893;
|
| 29 |
+
--link-hover-color: #036;
|
| 30 |
+
--link-selected-fg: var(--secondary);
|
| 31 |
+
|
| 32 |
+
--hairline-color: #e8e8e8;
|
| 33 |
+
--border-color: #ccc;
|
| 34 |
+
|
| 35 |
+
--error-fg: #ba2121;
|
| 36 |
+
|
| 37 |
+
--message-debug-bg: #efefef;
|
| 38 |
+
--message-debug-icon: url(../img/icon-debug.svg);
|
| 39 |
+
--message-info-bg: #ccefff;
|
| 40 |
+
--message-info-icon: url(../img/icon-info.svg);
|
| 41 |
+
--message-success-bg: #dfd;
|
| 42 |
+
--message-success-icon: url(../img/icon-yes.svg);
|
| 43 |
+
--message-warning-bg: #ffc;
|
| 44 |
+
--message-warning-icon: url(../img/icon-alert.svg);
|
| 45 |
+
--message-error-bg: #ffefef;
|
| 46 |
+
--message-error-icon: url(../img/icon-no.svg);
|
| 47 |
+
|
| 48 |
+
--darkened-bg: #f8f8f8; /* A bit darker than --body-bg */
|
| 49 |
+
--selected-bg: #e4e4e4; /* E.g. selected table cells */
|
| 50 |
+
--selected-row: #ffc;
|
| 51 |
+
|
| 52 |
+
--button-fg: #fff;
|
| 53 |
+
--button-bg: var(--secondary);
|
| 54 |
+
--button-hover-bg: #205067;
|
| 55 |
+
--default-button-bg: #205067;
|
| 56 |
+
--default-button-hover-bg: var(--secondary);
|
| 57 |
+
--close-button-bg: #747474;
|
| 58 |
+
--close-button-hover-bg: #333;
|
| 59 |
+
--delete-button-bg: #ba2121;
|
| 60 |
+
--delete-button-hover-bg: #a41515;
|
| 61 |
+
|
| 62 |
+
--object-tools-fg: var(--button-fg);
|
| 63 |
+
--object-tools-bg: var(--close-button-bg);
|
| 64 |
+
--object-tools-hover-bg: var(--close-button-hover-bg);
|
| 65 |
+
|
| 66 |
+
--font-family-primary:
|
| 67 |
+
"Segoe UI",
|
| 68 |
+
system-ui,
|
| 69 |
+
Roboto,
|
| 70 |
+
"Helvetica Neue",
|
| 71 |
+
Arial,
|
| 72 |
+
sans-serif,
|
| 73 |
+
"Apple Color Emoji",
|
| 74 |
+
"Segoe UI Emoji",
|
| 75 |
+
"Segoe UI Symbol",
|
| 76 |
+
"Noto Color Emoji";
|
| 77 |
+
--font-family-monospace:
|
| 78 |
+
ui-monospace,
|
| 79 |
+
Menlo,
|
| 80 |
+
Monaco,
|
| 81 |
+
"Cascadia Mono",
|
| 82 |
+
"Segoe UI Mono",
|
| 83 |
+
"Roboto Mono",
|
| 84 |
+
"Oxygen Mono",
|
| 85 |
+
"Ubuntu Monospace",
|
| 86 |
+
"Source Code Pro",
|
| 87 |
+
"Fira Mono",
|
| 88 |
+
"Droid Sans Mono",
|
| 89 |
+
"Courier New",
|
| 90 |
+
monospace,
|
| 91 |
+
"Apple Color Emoji",
|
| 92 |
+
"Segoe UI Emoji",
|
| 93 |
+
"Segoe UI Symbol",
|
| 94 |
+
"Noto Color Emoji";
|
| 95 |
+
|
| 96 |
+
color-scheme: light;
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
html, body {
|
| 100 |
+
height: 100%;
|
| 101 |
+
}
|
| 102 |
+
|
| 103 |
+
body {
|
| 104 |
+
margin: 0;
|
| 105 |
+
padding: 0;
|
| 106 |
+
font-size: 0.875rem;
|
| 107 |
+
font-family: var(--font-family-primary);
|
| 108 |
+
color: var(--body-fg);
|
| 109 |
+
background: var(--body-bg);
|
| 110 |
+
}
|
| 111 |
+
|
| 112 |
+
/* LINKS */
|
| 113 |
+
|
| 114 |
+
a:link, a:visited {
|
| 115 |
+
color: var(--link-fg);
|
| 116 |
+
text-decoration: none;
|
| 117 |
+
transition: color 0.15s, background 0.15s;
|
| 118 |
+
}
|
| 119 |
+
|
| 120 |
+
a:focus, a:hover {
|
| 121 |
+
color: var(--link-hover-color);
|
| 122 |
+
}
|
| 123 |
+
|
| 124 |
+
a:focus {
|
| 125 |
+
text-decoration: underline;
|
| 126 |
+
}
|
| 127 |
+
|
| 128 |
+
a:not(
|
| 129 |
+
[role="button"],
|
| 130 |
+
#header a,
|
| 131 |
+
#nav-sidebar a,
|
| 132 |
+
#content-main.app-list a,
|
| 133 |
+
.object-tools a
|
| 134 |
+
) {
|
| 135 |
+
text-decoration: underline;
|
| 136 |
+
}
|
| 137 |
+
|
| 138 |
+
a img {
|
| 139 |
+
border: none;
|
| 140 |
+
}
|
| 141 |
+
|
| 142 |
+
a.section:link, a.section:visited {
|
| 143 |
+
color: var(--header-link-color);
|
| 144 |
+
text-decoration: none;
|
| 145 |
+
}
|
| 146 |
+
|
| 147 |
+
a.section:focus, a.section:hover {
|
| 148 |
+
text-decoration: underline;
|
| 149 |
+
}
|
| 150 |
+
|
| 151 |
+
/* GLOBAL DEFAULTS */
|
| 152 |
+
|
| 153 |
+
p, ol, ul, dl {
|
| 154 |
+
margin: .2em 0 .8em 0;
|
| 155 |
+
}
|
| 156 |
+
|
| 157 |
+
p {
|
| 158 |
+
padding: 0;
|
| 159 |
+
line-height: 140%;
|
| 160 |
+
}
|
| 161 |
+
|
| 162 |
+
h1,h2,h3,h4,h5 {
|
| 163 |
+
font-weight: bold;
|
| 164 |
+
}
|
| 165 |
+
|
| 166 |
+
h1 {
|
| 167 |
+
margin: 0 0 20px;
|
| 168 |
+
font-weight: 300;
|
| 169 |
+
font-size: 1.25rem;
|
| 170 |
+
}
|
| 171 |
+
|
| 172 |
+
h2 {
|
| 173 |
+
font-size: 1rem;
|
| 174 |
+
margin: 1em 0 .5em 0;
|
| 175 |
+
}
|
| 176 |
+
|
| 177 |
+
h2.subhead {
|
| 178 |
+
font-weight: normal;
|
| 179 |
+
margin-top: 0;
|
| 180 |
+
}
|
| 181 |
+
|
| 182 |
+
h3 {
|
| 183 |
+
font-size: 0.875rem;
|
| 184 |
+
margin: .8em 0 .3em 0;
|
| 185 |
+
color: var(--body-medium-color);
|
| 186 |
+
font-weight: bold;
|
| 187 |
+
}
|
| 188 |
+
|
| 189 |
+
h4 {
|
| 190 |
+
font-size: 0.75rem;
|
| 191 |
+
margin: 1em 0 .8em 0;
|
| 192 |
+
padding-bottom: 3px;
|
| 193 |
+
color: var(--body-medium-color);
|
| 194 |
+
}
|
| 195 |
+
|
| 196 |
+
h5 {
|
| 197 |
+
font-size: 0.625rem;
|
| 198 |
+
margin: 1.5em 0 .5em 0;
|
| 199 |
+
color: var(--body-quiet-color);
|
| 200 |
+
text-transform: uppercase;
|
| 201 |
+
letter-spacing: 1px;
|
| 202 |
+
}
|
| 203 |
+
|
| 204 |
+
ul > li {
|
| 205 |
+
list-style-type: square;
|
| 206 |
+
padding: 1px 0;
|
| 207 |
+
}
|
| 208 |
+
|
| 209 |
+
li ul {
|
| 210 |
+
margin-bottom: 0;
|
| 211 |
+
}
|
| 212 |
+
|
| 213 |
+
li, dt, dd {
|
| 214 |
+
font-size: 0.8125rem;
|
| 215 |
+
line-height: 1.25rem;
|
| 216 |
+
}
|
| 217 |
+
|
| 218 |
+
dt {
|
| 219 |
+
font-weight: bold;
|
| 220 |
+
margin-top: 4px;
|
| 221 |
+
}
|
| 222 |
+
|
| 223 |
+
dd {
|
| 224 |
+
margin-left: 0;
|
| 225 |
+
}
|
| 226 |
+
|
| 227 |
+
form {
|
| 228 |
+
margin: 0;
|
| 229 |
+
padding: 0;
|
| 230 |
+
}
|
| 231 |
+
|
| 232 |
+
fieldset {
|
| 233 |
+
margin: 0;
|
| 234 |
+
min-width: 0;
|
| 235 |
+
padding: 0;
|
| 236 |
+
border: none;
|
| 237 |
+
border-top: 1px solid var(--hairline-color);
|
| 238 |
+
}
|
| 239 |
+
|
| 240 |
+
details summary {
|
| 241 |
+
cursor: pointer;
|
| 242 |
+
}
|
| 243 |
+
|
| 244 |
+
blockquote {
|
| 245 |
+
font-size: 0.6875rem;
|
| 246 |
+
color: var(--body-quiet-color);
|
| 247 |
+
margin-left: 2px;
|
| 248 |
+
padding-left: 10px;
|
| 249 |
+
border-left: 5px solid currentColor;
|
| 250 |
+
}
|
| 251 |
+
|
| 252 |
+
code, pre {
|
| 253 |
+
font-family: var(--font-family-monospace);
|
| 254 |
+
color: var(--body-quiet-color);
|
| 255 |
+
font-size: 0.75rem;
|
| 256 |
+
overflow-x: auto;
|
| 257 |
+
}
|
| 258 |
+
|
| 259 |
+
pre.literal-block {
|
| 260 |
+
margin: 10px;
|
| 261 |
+
background: var(--darkened-bg);
|
| 262 |
+
padding: 6px 8px;
|
| 263 |
+
}
|
| 264 |
+
|
| 265 |
+
code strong {
|
| 266 |
+
color: #930;
|
| 267 |
+
}
|
| 268 |
+
|
| 269 |
+
hr {
|
| 270 |
+
clear: both;
|
| 271 |
+
color: var(--hairline-color);
|
| 272 |
+
background-color: var(--hairline-color);
|
| 273 |
+
height: 1px;
|
| 274 |
+
border: none;
|
| 275 |
+
margin: 0;
|
| 276 |
+
padding: 0;
|
| 277 |
+
line-height: 1px;
|
| 278 |
+
}
|
| 279 |
+
|
| 280 |
+
/* TEXT STYLES & MODIFIERS */
|
| 281 |
+
|
| 282 |
+
.small {
|
| 283 |
+
font-size: 0.6875rem;
|
| 284 |
+
}
|
| 285 |
+
|
| 286 |
+
.mini {
|
| 287 |
+
font-size: 0.625rem;
|
| 288 |
+
}
|
| 289 |
+
|
| 290 |
+
.help, p.help, form p.help, div.help, form div.help, div.help li {
|
| 291 |
+
font-size: 0.6875rem;
|
| 292 |
+
color: var(--body-quiet-color);
|
| 293 |
+
}
|
| 294 |
+
|
| 295 |
+
div.help ul {
|
| 296 |
+
margin-bottom: 0;
|
| 297 |
+
}
|
| 298 |
+
|
| 299 |
+
.help-tooltip {
|
| 300 |
+
cursor: help;
|
| 301 |
+
}
|
| 302 |
+
|
| 303 |
+
p img, h1 img, h2 img, h3 img, h4 img, td img {
|
| 304 |
+
vertical-align: middle;
|
| 305 |
+
}
|
| 306 |
+
|
| 307 |
+
.quiet, a.quiet:link, a.quiet:visited {
|
| 308 |
+
color: var(--body-quiet-color);
|
| 309 |
+
font-weight: normal;
|
| 310 |
+
}
|
| 311 |
+
|
| 312 |
+
.clear {
|
| 313 |
+
clear: both;
|
| 314 |
+
}
|
| 315 |
+
|
| 316 |
+
.nowrap {
|
| 317 |
+
white-space: nowrap;
|
| 318 |
+
}
|
| 319 |
+
|
| 320 |
+
.hidden {
|
| 321 |
+
display: none !important;
|
| 322 |
+
}
|
| 323 |
+
|
| 324 |
+
/* TABLES */
|
| 325 |
+
|
| 326 |
+
table {
|
| 327 |
+
border-collapse: collapse;
|
| 328 |
+
border-color: var(--border-color);
|
| 329 |
+
}
|
| 330 |
+
|
| 331 |
+
td, th {
|
| 332 |
+
font-size: 0.8125rem;
|
| 333 |
+
line-height: 1rem;
|
| 334 |
+
border-bottom: 1px solid var(--hairline-color);
|
| 335 |
+
vertical-align: top;
|
| 336 |
+
padding: 8px;
|
| 337 |
+
}
|
| 338 |
+
|
| 339 |
+
th {
|
| 340 |
+
font-weight: 500;
|
| 341 |
+
text-align: left;
|
| 342 |
+
}
|
| 343 |
+
|
| 344 |
+
thead th,
|
| 345 |
+
tfoot td {
|
| 346 |
+
color: var(--body-quiet-color);
|
| 347 |
+
padding: 5px 10px;
|
| 348 |
+
font-size: 0.6875rem;
|
| 349 |
+
background: var(--body-bg);
|
| 350 |
+
border: none;
|
| 351 |
+
border-top: 1px solid var(--hairline-color);
|
| 352 |
+
border-bottom: 1px solid var(--hairline-color);
|
| 353 |
+
}
|
| 354 |
+
|
| 355 |
+
tfoot td {
|
| 356 |
+
border-bottom: none;
|
| 357 |
+
border-top: 1px solid var(--hairline-color);
|
| 358 |
+
}
|
| 359 |
+
|
| 360 |
+
thead th.required {
|
| 361 |
+
font-weight: bold;
|
| 362 |
+
}
|
| 363 |
+
|
| 364 |
+
tr.alt {
|
| 365 |
+
background: var(--darkened-bg);
|
| 366 |
+
}
|
| 367 |
+
|
| 368 |
+
tr:nth-child(odd), .row-form-errors {
|
| 369 |
+
background: var(--body-bg);
|
| 370 |
+
}
|
| 371 |
+
|
| 372 |
+
tr:nth-child(even),
|
| 373 |
+
tr:nth-child(even) .errorlist,
|
| 374 |
+
tr:nth-child(odd) + .row-form-errors,
|
| 375 |
+
tr:nth-child(odd) + .row-form-errors .errorlist {
|
| 376 |
+
background: var(--darkened-bg);
|
| 377 |
+
}
|
| 378 |
+
|
| 379 |
+
/* SORTABLE TABLES */
|
| 380 |
+
|
| 381 |
+
thead th {
|
| 382 |
+
padding: 5px 10px;
|
| 383 |
+
line-height: normal;
|
| 384 |
+
text-transform: uppercase;
|
| 385 |
+
background: var(--darkened-bg);
|
| 386 |
+
}
|
| 387 |
+
|
| 388 |
+
thead th a:link, thead th a:visited {
|
| 389 |
+
color: var(--body-quiet-color);
|
| 390 |
+
}
|
| 391 |
+
|
| 392 |
+
thead th.sorted {
|
| 393 |
+
background: var(--selected-bg);
|
| 394 |
+
}
|
| 395 |
+
|
| 396 |
+
thead th.sorted .text {
|
| 397 |
+
padding-right: 42px;
|
| 398 |
+
}
|
| 399 |
+
|
| 400 |
+
table thead th .text span {
|
| 401 |
+
padding: 8px 10px;
|
| 402 |
+
display: block;
|
| 403 |
+
}
|
| 404 |
+
|
| 405 |
+
table thead th .text a {
|
| 406 |
+
display: block;
|
| 407 |
+
cursor: pointer;
|
| 408 |
+
padding: 8px 10px;
|
| 409 |
+
}
|
| 410 |
+
|
| 411 |
+
table thead th .text a:focus, table thead th .text a:hover {
|
| 412 |
+
background: var(--selected-bg);
|
| 413 |
+
}
|
| 414 |
+
|
| 415 |
+
thead th.sorted a.sortremove {
|
| 416 |
+
visibility: hidden;
|
| 417 |
+
}
|
| 418 |
+
|
| 419 |
+
table thead th.sorted:hover a.sortremove {
|
| 420 |
+
visibility: visible;
|
| 421 |
+
}
|
| 422 |
+
|
| 423 |
+
table thead th.sorted .sortoptions {
|
| 424 |
+
display: block;
|
| 425 |
+
padding: 9px 5px 0 5px;
|
| 426 |
+
float: right;
|
| 427 |
+
text-align: right;
|
| 428 |
+
}
|
| 429 |
+
|
| 430 |
+
table thead th.sorted .sortpriority {
|
| 431 |
+
font-size: .8em;
|
| 432 |
+
min-width: 12px;
|
| 433 |
+
text-align: center;
|
| 434 |
+
vertical-align: 3px;
|
| 435 |
+
margin-left: 2px;
|
| 436 |
+
margin-right: 2px;
|
| 437 |
+
}
|
| 438 |
+
|
| 439 |
+
table thead th.sorted .sortoptions a {
|
| 440 |
+
position: relative;
|
| 441 |
+
width: 14px;
|
| 442 |
+
height: 14px;
|
| 443 |
+
display: inline-block;
|
| 444 |
+
background: url(../img/sorting-icons.svg) 0 0 no-repeat;
|
| 445 |
+
background-size: 14px auto;
|
| 446 |
+
}
|
| 447 |
+
|
| 448 |
+
table thead th.sorted .sortoptions a.sortremove {
|
| 449 |
+
background-position: 0 0;
|
| 450 |
+
}
|
| 451 |
+
|
| 452 |
+
table thead th.sorted .sortoptions a.sortremove:after {
|
| 453 |
+
content: '\\';
|
| 454 |
+
position: absolute;
|
| 455 |
+
top: -6px;
|
| 456 |
+
left: 3px;
|
| 457 |
+
font-weight: 200;
|
| 458 |
+
font-size: 1.125rem;
|
| 459 |
+
color: var(--body-quiet-color);
|
| 460 |
+
}
|
| 461 |
+
|
| 462 |
+
table thead th.sorted .sortoptions a.sortremove:focus:after,
|
| 463 |
+
table thead th.sorted .sortoptions a.sortremove:hover:after {
|
| 464 |
+
color: var(--link-fg);
|
| 465 |
+
}
|
| 466 |
+
|
| 467 |
+
table thead th.sorted .sortoptions a.sortremove:focus,
|
| 468 |
+
table thead th.sorted .sortoptions a.sortremove:hover {
|
| 469 |
+
background-position: 0 -14px;
|
| 470 |
+
}
|
| 471 |
+
|
| 472 |
+
table thead th.sorted .sortoptions a.ascending {
|
| 473 |
+
background-position: 0 -28px;
|
| 474 |
+
}
|
| 475 |
+
|
| 476 |
+
table thead th.sorted .sortoptions a.ascending:focus,
|
| 477 |
+
table thead th.sorted .sortoptions a.ascending:hover {
|
| 478 |
+
background-position: 0 -42px;
|
| 479 |
+
}
|
| 480 |
+
|
| 481 |
+
table thead th.sorted .sortoptions a.descending {
|
| 482 |
+
top: 1px;
|
| 483 |
+
background-position: 0 -56px;
|
| 484 |
+
}
|
| 485 |
+
|
| 486 |
+
table thead th.sorted .sortoptions a.descending:focus,
|
| 487 |
+
table thead th.sorted .sortoptions a.descending:hover {
|
| 488 |
+
background-position: 0 -70px;
|
| 489 |
+
}
|
| 490 |
+
|
| 491 |
+
/* FORM DEFAULTS */
|
| 492 |
+
|
| 493 |
+
input, textarea, select, .form-row p, form .button {
|
| 494 |
+
margin: 2px 0;
|
| 495 |
+
padding: 2px 3px;
|
| 496 |
+
vertical-align: middle;
|
| 497 |
+
font-family: var(--font-family-primary);
|
| 498 |
+
font-weight: normal;
|
| 499 |
+
font-size: 0.8125rem;
|
| 500 |
+
}
|
| 501 |
+
.form-row div.help {
|
| 502 |
+
padding: 2px 3px;
|
| 503 |
+
}
|
| 504 |
+
|
| 505 |
+
textarea {
|
| 506 |
+
vertical-align: top;
|
| 507 |
+
}
|
| 508 |
+
|
| 509 |
+
/*
|
| 510 |
+
Minifiers remove the default (text) "type" attribute from "input" HTML tags.
|
| 511 |
+
Add input:not([type]) to make the CSS stylesheet work the same.
|
| 512 |
+
*/
|
| 513 |
+
input:not([type]), input[type=text], input[type=password], input[type=email],
|
| 514 |
+
input[type=url], input[type=number], input[type=tel], textarea, select,
|
| 515 |
+
.vTextField {
|
| 516 |
+
border: 1px solid var(--border-color);
|
| 517 |
+
border-radius: 4px;
|
| 518 |
+
padding: 5px 6px;
|
| 519 |
+
margin-top: 0;
|
| 520 |
+
color: var(--body-fg);
|
| 521 |
+
background-color: var(--body-bg);
|
| 522 |
+
}
|
| 523 |
+
|
| 524 |
+
/*
|
| 525 |
+
Minifiers remove the default (text) "type" attribute from "input" HTML tags.
|
| 526 |
+
Add input:not([type]) to make the CSS stylesheet work the same.
|
| 527 |
+
*/
|
| 528 |
+
input:not([type]):focus, input[type=text]:focus, input[type=password]:focus,
|
| 529 |
+
input[type=email]:focus, input[type=url]:focus, input[type=number]:focus,
|
| 530 |
+
input[type=tel]:focus, textarea:focus, select:focus, .vTextField:focus {
|
| 531 |
+
border-color: var(--body-quiet-color);
|
| 532 |
+
}
|
| 533 |
+
|
| 534 |
+
select {
|
| 535 |
+
height: 1.875rem;
|
| 536 |
+
}
|
| 537 |
+
|
| 538 |
+
select[multiple] {
|
| 539 |
+
/* Allow HTML size attribute to override the height in the rule above. */
|
| 540 |
+
height: auto;
|
| 541 |
+
min-height: 150px;
|
| 542 |
+
}
|
| 543 |
+
|
| 544 |
+
/* FORM BUTTONS */
|
| 545 |
+
|
| 546 |
+
.button, input[type=submit], input[type=button], .submit-row input, a.button {
|
| 547 |
+
background: var(--button-bg);
|
| 548 |
+
padding: 10px 15px;
|
| 549 |
+
border: none;
|
| 550 |
+
border-radius: 4px;
|
| 551 |
+
color: var(--button-fg);
|
| 552 |
+
cursor: pointer;
|
| 553 |
+
transition: background 0.15s;
|
| 554 |
+
}
|
| 555 |
+
|
| 556 |
+
a.button {
|
| 557 |
+
padding: 4px 5px;
|
| 558 |
+
}
|
| 559 |
+
|
| 560 |
+
.button:active, input[type=submit]:active, input[type=button]:active,
|
| 561 |
+
.button:focus, input[type=submit]:focus, input[type=button]:focus,
|
| 562 |
+
.button:hover, input[type=submit]:hover, input[type=button]:hover {
|
| 563 |
+
background: var(--button-hover-bg);
|
| 564 |
+
}
|
| 565 |
+
|
| 566 |
+
.button[disabled], input[type=submit][disabled], input[type=button][disabled] {
|
| 567 |
+
opacity: 0.4;
|
| 568 |
+
}
|
| 569 |
+
|
| 570 |
+
.button.default, input[type=submit].default, .submit-row input.default {
|
| 571 |
+
border: none;
|
| 572 |
+
font-weight: 400;
|
| 573 |
+
background: var(--default-button-bg);
|
| 574 |
+
}
|
| 575 |
+
|
| 576 |
+
.button.default:active, input[type=submit].default:active,
|
| 577 |
+
.button.default:focus, input[type=submit].default:focus,
|
| 578 |
+
.button.default:hover, input[type=submit].default:hover {
|
| 579 |
+
background: var(--default-button-hover-bg);
|
| 580 |
+
}
|
| 581 |
+
|
| 582 |
+
.button[disabled].default,
|
| 583 |
+
input[type=submit][disabled].default,
|
| 584 |
+
input[type=button][disabled].default {
|
| 585 |
+
opacity: 0.4;
|
| 586 |
+
}
|
| 587 |
+
|
| 588 |
+
|
| 589 |
+
/* MODULES */
|
| 590 |
+
|
| 591 |
+
.module {
|
| 592 |
+
border: none;
|
| 593 |
+
margin-bottom: 30px;
|
| 594 |
+
background: var(--body-bg);
|
| 595 |
+
}
|
| 596 |
+
|
| 597 |
+
.module p, .module ul, .module h3, .module h4, .module dl, .module pre {
|
| 598 |
+
padding-left: 10px;
|
| 599 |
+
padding-right: 10px;
|
| 600 |
+
}
|
| 601 |
+
|
| 602 |
+
.module blockquote {
|
| 603 |
+
margin-left: 12px;
|
| 604 |
+
}
|
| 605 |
+
|
| 606 |
+
.module ul, .module ol {
|
| 607 |
+
margin-left: 1.5em;
|
| 608 |
+
}
|
| 609 |
+
|
| 610 |
+
.module h3 {
|
| 611 |
+
margin-top: .6em;
|
| 612 |
+
}
|
| 613 |
+
|
| 614 |
+
.module h2, .module caption, .inline-group h2 {
|
| 615 |
+
margin: 0;
|
| 616 |
+
padding: 8px;
|
| 617 |
+
font-weight: 400;
|
| 618 |
+
font-size: 0.8125rem;
|
| 619 |
+
text-align: left;
|
| 620 |
+
background: var(--header-bg);
|
| 621 |
+
color: var(--header-link-color);
|
| 622 |
+
}
|
| 623 |
+
|
| 624 |
+
.module caption,
|
| 625 |
+
.inline-group h2 {
|
| 626 |
+
font-size: 0.75rem;
|
| 627 |
+
letter-spacing: 0.5px;
|
| 628 |
+
text-transform: uppercase;
|
| 629 |
+
}
|
| 630 |
+
|
| 631 |
+
.module table {
|
| 632 |
+
border-collapse: collapse;
|
| 633 |
+
}
|
| 634 |
+
|
| 635 |
+
/* MESSAGES & ERRORS */
|
| 636 |
+
|
| 637 |
+
ul.messagelist {
|
| 638 |
+
padding: 0;
|
| 639 |
+
margin: 0;
|
| 640 |
+
}
|
| 641 |
+
|
| 642 |
+
ul.messagelist li {
|
| 643 |
+
display: block;
|
| 644 |
+
font-weight: 400;
|
| 645 |
+
font-size: 0.8125rem;
|
| 646 |
+
padding: 10px 10px 10px 65px;
|
| 647 |
+
margin: 0 0 10px 0;
|
| 648 |
+
color: var(--body-fg);
|
| 649 |
+
word-break: break-word;
|
| 650 |
+
background-color: var(--message-info-bg);
|
| 651 |
+
background-image: var(--message-info-icon);
|
| 652 |
+
background-position: 40px 12px;
|
| 653 |
+
background-repeat: no-repeat;
|
| 654 |
+
background-size: 16px auto;
|
| 655 |
+
}
|
| 656 |
+
|
| 657 |
+
ul.messagelist li.debug {
|
| 658 |
+
background-color: var(--message-debug-bg);
|
| 659 |
+
background-image: var(--message-debug-icon);
|
| 660 |
+
}
|
| 661 |
+
|
| 662 |
+
ul.messagelist li.info {
|
| 663 |
+
background-color: var(--message-info-bg);
|
| 664 |
+
background-image: var(--message-info-icon);
|
| 665 |
+
}
|
| 666 |
+
|
| 667 |
+
ul.messagelist li.success {
|
| 668 |
+
background-color: var(--message-success-bg);
|
| 669 |
+
background-image: var(--message-success-icon);
|
| 670 |
+
}
|
| 671 |
+
|
| 672 |
+
ul.messagelist li.warning {
|
| 673 |
+
background-color: var(--message-warning-bg);
|
| 674 |
+
background-image: var(--message-warning-icon);
|
| 675 |
+
}
|
| 676 |
+
|
| 677 |
+
ul.messagelist li.error {
|
| 678 |
+
background-color: var(--message-error-bg);
|
| 679 |
+
background-image: var(--message-error-icon);
|
| 680 |
+
}
|
| 681 |
+
|
| 682 |
+
@media (forced-colors: active) {
|
| 683 |
+
ul.messagelist li {
|
| 684 |
+
border: 1px solid;
|
| 685 |
+
}
|
| 686 |
+
}
|
| 687 |
+
|
| 688 |
+
.errornote {
|
| 689 |
+
font-size: 0.875rem;
|
| 690 |
+
font-weight: 700;
|
| 691 |
+
display: block;
|
| 692 |
+
padding: 10px 12px;
|
| 693 |
+
margin: 0 0 10px 0;
|
| 694 |
+
color: var(--error-fg);
|
| 695 |
+
border: 1px solid var(--error-fg);
|
| 696 |
+
border-radius: 4px;
|
| 697 |
+
background-color: var(--body-bg);
|
| 698 |
+
background-position: 5px 12px;
|
| 699 |
+
overflow-wrap: break-word;
|
| 700 |
+
}
|
| 701 |
+
|
| 702 |
+
ul.errorlist {
|
| 703 |
+
margin: 0 0 4px;
|
| 704 |
+
padding: 0;
|
| 705 |
+
color: var(--error-fg);
|
| 706 |
+
background: var(--body-bg);
|
| 707 |
+
}
|
| 708 |
+
|
| 709 |
+
ul.errorlist li {
|
| 710 |
+
font-size: 0.8125rem;
|
| 711 |
+
display: block;
|
| 712 |
+
margin-bottom: 4px;
|
| 713 |
+
overflow-wrap: break-word;
|
| 714 |
+
}
|
| 715 |
+
|
| 716 |
+
ul.errorlist li:first-child {
|
| 717 |
+
margin-top: 0;
|
| 718 |
+
}
|
| 719 |
+
|
| 720 |
+
ul.errorlist li a {
|
| 721 |
+
color: inherit;
|
| 722 |
+
text-decoration: underline;
|
| 723 |
+
}
|
| 724 |
+
|
| 725 |
+
td ul.errorlist {
|
| 726 |
+
margin: 0;
|
| 727 |
+
padding: 0;
|
| 728 |
+
}
|
| 729 |
+
|
| 730 |
+
td ul.errorlist li {
|
| 731 |
+
margin: 0;
|
| 732 |
+
}
|
| 733 |
+
|
| 734 |
+
.form-row.errors {
|
| 735 |
+
margin: 0;
|
| 736 |
+
border: none;
|
| 737 |
+
border-bottom: 1px solid var(--hairline-color);
|
| 738 |
+
background: none;
|
| 739 |
+
}
|
| 740 |
+
|
| 741 |
+
.form-row.errors ul.errorlist li {
|
| 742 |
+
padding-left: 0;
|
| 743 |
+
}
|
| 744 |
+
|
| 745 |
+
.errors input, .errors select, .errors textarea,
|
| 746 |
+
td ul.errorlist + input, td ul.errorlist + select, td ul.errorlist + textarea {
|
| 747 |
+
border: 1px solid var(--error-fg);
|
| 748 |
+
}
|
| 749 |
+
|
| 750 |
+
.description {
|
| 751 |
+
font-size: 0.75rem;
|
| 752 |
+
padding: 5px 0 0 12px;
|
| 753 |
+
}
|
| 754 |
+
|
| 755 |
+
/* BREADCRUMBS */
|
| 756 |
+
|
| 757 |
+
div.breadcrumbs {
|
| 758 |
+
background: var(--breadcrumbs-bg);
|
| 759 |
+
padding: 10px 40px;
|
| 760 |
+
border: none;
|
| 761 |
+
color: var(--breadcrumbs-fg);
|
| 762 |
+
text-align: left;
|
| 763 |
+
}
|
| 764 |
+
|
| 765 |
+
div.breadcrumbs a {
|
| 766 |
+
color: var(--breadcrumbs-link-fg);
|
| 767 |
+
}
|
| 768 |
+
|
| 769 |
+
div.breadcrumbs a:focus, div.breadcrumbs a:hover {
|
| 770 |
+
color: var(--breadcrumbs-fg);
|
| 771 |
+
}
|
| 772 |
+
|
| 773 |
+
/* ACTION ICONS */
|
| 774 |
+
|
| 775 |
+
.viewlink, .inlineviewlink {
|
| 776 |
+
padding-left: 16px;
|
| 777 |
+
background: url(../img/icon-viewlink.svg) 0 1px no-repeat;
|
| 778 |
+
}
|
| 779 |
+
|
| 780 |
+
.hidelink {
|
| 781 |
+
padding-left: 16px;
|
| 782 |
+
background: url(../img/icon-hidelink.svg) 0 1px no-repeat;
|
| 783 |
+
}
|
| 784 |
+
|
| 785 |
+
.addlink {
|
| 786 |
+
padding-left: 16px;
|
| 787 |
+
background: url(../img/icon-addlink.svg) 0 1px no-repeat;
|
| 788 |
+
}
|
| 789 |
+
|
| 790 |
+
.changelink, .inlinechangelink {
|
| 791 |
+
padding-left: 16px;
|
| 792 |
+
background: url(../img/icon-changelink.svg) 0 1px no-repeat;
|
| 793 |
+
}
|
| 794 |
+
|
| 795 |
+
.deletelink {
|
| 796 |
+
padding-left: 16px;
|
| 797 |
+
background: url(../img/icon-deletelink.svg) 0 1px no-repeat;
|
| 798 |
+
}
|
| 799 |
+
|
| 800 |
+
a.deletelink:link, a.deletelink:visited {
|
| 801 |
+
color: #CC3434; /* XXX Probably unused? */
|
| 802 |
+
}
|
| 803 |
+
|
| 804 |
+
a.deletelink:focus, a.deletelink:hover {
|
| 805 |
+
color: #993333; /* XXX Probably unused? */
|
| 806 |
+
text-decoration: none;
|
| 807 |
+
}
|
| 808 |
+
|
| 809 |
+
/* OBJECT TOOLS */
|
| 810 |
+
|
| 811 |
+
.object-tools {
|
| 812 |
+
padding: 0;
|
| 813 |
+
overflow: hidden;
|
| 814 |
+
text-align: right;
|
| 815 |
+
margin: 0 0 15px;
|
| 816 |
+
}
|
| 817 |
+
|
| 818 |
+
.object-tools li {
|
| 819 |
+
display: inline-block;
|
| 820 |
+
height: auto;
|
| 821 |
+
}
|
| 822 |
+
|
| 823 |
+
.object-tools li + li {
|
| 824 |
+
margin-left: 15px;
|
| 825 |
+
}
|
| 826 |
+
|
| 827 |
+
.object-tools a {
|
| 828 |
+
border-radius: 15px;
|
| 829 |
+
}
|
| 830 |
+
|
| 831 |
+
.object-tools a:link, .object-tools a:visited {
|
| 832 |
+
display: block;
|
| 833 |
+
float: left;
|
| 834 |
+
padding: 3px 12px;
|
| 835 |
+
background: var(--object-tools-bg);
|
| 836 |
+
color: var(--object-tools-fg);
|
| 837 |
+
font-weight: 400;
|
| 838 |
+
font-size: 0.6875rem;
|
| 839 |
+
text-transform: uppercase;
|
| 840 |
+
letter-spacing: 0.5px;
|
| 841 |
+
}
|
| 842 |
+
|
| 843 |
+
.object-tools a:focus, .object-tools a:hover {
|
| 844 |
+
background-color: var(--object-tools-hover-bg);
|
| 845 |
+
}
|
| 846 |
+
|
| 847 |
+
.object-tools a:focus{
|
| 848 |
+
text-decoration: none;
|
| 849 |
+
}
|
| 850 |
+
|
| 851 |
+
.object-tools a.viewsitelink, .object-tools a.addlink {
|
| 852 |
+
background-repeat: no-repeat;
|
| 853 |
+
background-position: right 7px center;
|
| 854 |
+
padding-right: 26px;
|
| 855 |
+
}
|
| 856 |
+
|
| 857 |
+
.object-tools a.viewsitelink {
|
| 858 |
+
background-image: url(../img/tooltag-arrowright.svg);
|
| 859 |
+
}
|
| 860 |
+
|
| 861 |
+
.object-tools a.addlink {
|
| 862 |
+
background-image: url(../img/tooltag-add.svg);
|
| 863 |
+
}
|
| 864 |
+
|
| 865 |
+
/* OBJECT HISTORY */
|
| 866 |
+
|
| 867 |
+
#change-history table {
|
| 868 |
+
width: 100%;
|
| 869 |
+
}
|
| 870 |
+
|
| 871 |
+
#change-history table tbody th {
|
| 872 |
+
width: 16em;
|
| 873 |
+
}
|
| 874 |
+
|
| 875 |
+
#change-history .paginator {
|
| 876 |
+
color: var(--body-quiet-color);
|
| 877 |
+
border-bottom: 1px solid var(--hairline-color);
|
| 878 |
+
background: var(--body-bg);
|
| 879 |
+
overflow: hidden;
|
| 880 |
+
}
|
| 881 |
+
|
| 882 |
+
/* PAGE STRUCTURE */
|
| 883 |
+
|
| 884 |
+
#container {
|
| 885 |
+
position: relative;
|
| 886 |
+
width: 100%;
|
| 887 |
+
min-width: 980px;
|
| 888 |
+
padding: 0;
|
| 889 |
+
display: flex;
|
| 890 |
+
flex-direction: column;
|
| 891 |
+
height: 100%;
|
| 892 |
+
}
|
| 893 |
+
|
| 894 |
+
#container > .main {
|
| 895 |
+
display: flex;
|
| 896 |
+
flex: 1 0 auto;
|
| 897 |
+
}
|
| 898 |
+
|
| 899 |
+
.main > .content {
|
| 900 |
+
flex: 1 0;
|
| 901 |
+
max-width: 100%;
|
| 902 |
+
}
|
| 903 |
+
|
| 904 |
+
.skip-to-content-link {
|
| 905 |
+
position: absolute;
|
| 906 |
+
top: -999px;
|
| 907 |
+
margin: 5px;
|
| 908 |
+
padding: 5px;
|
| 909 |
+
background: var(--body-bg);
|
| 910 |
+
z-index: 1;
|
| 911 |
+
}
|
| 912 |
+
|
| 913 |
+
.skip-to-content-link:focus {
|
| 914 |
+
left: 0px;
|
| 915 |
+
top: 0px;
|
| 916 |
+
}
|
| 917 |
+
|
| 918 |
+
#content {
|
| 919 |
+
padding: 20px 40px;
|
| 920 |
+
}
|
| 921 |
+
|
| 922 |
+
.dashboard #content {
|
| 923 |
+
width: 600px;
|
| 924 |
+
}
|
| 925 |
+
|
| 926 |
+
#content-main {
|
| 927 |
+
float: left;
|
| 928 |
+
width: 100%;
|
| 929 |
+
}
|
| 930 |
+
|
| 931 |
+
#content-related {
|
| 932 |
+
float: right;
|
| 933 |
+
width: 260px;
|
| 934 |
+
position: relative;
|
| 935 |
+
margin-right: -300px;
|
| 936 |
+
}
|
| 937 |
+
|
| 938 |
+
@media (forced-colors: active) {
|
| 939 |
+
#content-related {
|
| 940 |
+
border: 1px solid;
|
| 941 |
+
}
|
| 942 |
+
}
|
| 943 |
+
|
| 944 |
+
/* COLUMN TYPES */
|
| 945 |
+
|
| 946 |
+
.colMS {
|
| 947 |
+
margin-right: 300px;
|
| 948 |
+
}
|
| 949 |
+
|
| 950 |
+
.colSM {
|
| 951 |
+
margin-left: 300px;
|
| 952 |
+
}
|
| 953 |
+
|
| 954 |
+
.colSM #content-related {
|
| 955 |
+
float: left;
|
| 956 |
+
margin-right: 0;
|
| 957 |
+
margin-left: -300px;
|
| 958 |
+
}
|
| 959 |
+
|
| 960 |
+
.colSM #content-main {
|
| 961 |
+
float: right;
|
| 962 |
+
}
|
| 963 |
+
|
| 964 |
+
.popup .colM {
|
| 965 |
+
width: auto;
|
| 966 |
+
}
|
| 967 |
+
|
| 968 |
+
/* HEADER */
|
| 969 |
+
|
| 970 |
+
#header {
|
| 971 |
+
width: auto;
|
| 972 |
+
height: auto;
|
| 973 |
+
display: flex;
|
| 974 |
+
justify-content: space-between;
|
| 975 |
+
align-items: center;
|
| 976 |
+
padding: 10px 40px;
|
| 977 |
+
background: var(--header-bg);
|
| 978 |
+
color: var(--header-color);
|
| 979 |
+
}
|
| 980 |
+
|
| 981 |
+
#header a:link, #header a:visited, #logout-form button {
|
| 982 |
+
color: var(--header-link-color);
|
| 983 |
+
}
|
| 984 |
+
|
| 985 |
+
#header a:focus , #header a:hover {
|
| 986 |
+
text-decoration: underline;
|
| 987 |
+
}
|
| 988 |
+
|
| 989 |
+
@media (forced-colors: active) {
|
| 990 |
+
#header {
|
| 991 |
+
border-bottom: 1px solid;
|
| 992 |
+
}
|
| 993 |
+
}
|
| 994 |
+
|
| 995 |
+
#branding {
|
| 996 |
+
display: flex;
|
| 997 |
+
}
|
| 998 |
+
|
| 999 |
+
#site-name {
|
| 1000 |
+
padding: 0;
|
| 1001 |
+
margin: 0;
|
| 1002 |
+
margin-inline-end: 20px;
|
| 1003 |
+
font-weight: 300;
|
| 1004 |
+
font-size: 1.5rem;
|
| 1005 |
+
color: var(--header-branding-color);
|
| 1006 |
+
}
|
| 1007 |
+
|
| 1008 |
+
#site-name a:link, #site-name a:visited {
|
| 1009 |
+
color: var(--accent);
|
| 1010 |
+
}
|
| 1011 |
+
|
| 1012 |
+
#branding h2 {
|
| 1013 |
+
padding: 0 10px;
|
| 1014 |
+
font-size: 0.875rem;
|
| 1015 |
+
margin: -8px 0 8px 0;
|
| 1016 |
+
font-weight: normal;
|
| 1017 |
+
color: var(--header-color);
|
| 1018 |
+
}
|
| 1019 |
+
|
| 1020 |
+
#branding a:hover {
|
| 1021 |
+
text-decoration: none;
|
| 1022 |
+
}
|
| 1023 |
+
|
| 1024 |
+
#logout-form {
|
| 1025 |
+
display: inline;
|
| 1026 |
+
}
|
| 1027 |
+
|
| 1028 |
+
#logout-form button {
|
| 1029 |
+
background: none;
|
| 1030 |
+
border: 0;
|
| 1031 |
+
cursor: pointer;
|
| 1032 |
+
font-family: var(--font-family-primary);
|
| 1033 |
+
}
|
| 1034 |
+
|
| 1035 |
+
#user-tools {
|
| 1036 |
+
float: right;
|
| 1037 |
+
margin: 0 0 0 20px;
|
| 1038 |
+
text-align: right;
|
| 1039 |
+
}
|
| 1040 |
+
|
| 1041 |
+
#user-tools, #logout-form button{
|
| 1042 |
+
padding: 0;
|
| 1043 |
+
font-weight: 300;
|
| 1044 |
+
font-size: 0.6875rem;
|
| 1045 |
+
letter-spacing: 0.5px;
|
| 1046 |
+
text-transform: uppercase;
|
| 1047 |
+
}
|
| 1048 |
+
|
| 1049 |
+
#user-tools a, #logout-form button {
|
| 1050 |
+
border-bottom: 1px solid rgba(255, 255, 255, 0.25);
|
| 1051 |
+
}
|
| 1052 |
+
|
| 1053 |
+
#user-tools a:focus, #user-tools a:hover,
|
| 1054 |
+
#logout-form button:active, #logout-form button:hover {
|
| 1055 |
+
text-decoration: none;
|
| 1056 |
+
border-bottom: 0;
|
| 1057 |
+
}
|
| 1058 |
+
|
| 1059 |
+
#logout-form button:active, #logout-form button:hover {
|
| 1060 |
+
margin-bottom: 1px;
|
| 1061 |
+
}
|
| 1062 |
+
|
| 1063 |
+
/* SIDEBAR */
|
| 1064 |
+
|
| 1065 |
+
#content-related {
|
| 1066 |
+
background: var(--darkened-bg);
|
| 1067 |
+
}
|
| 1068 |
+
|
| 1069 |
+
#content-related .module {
|
| 1070 |
+
background: none;
|
| 1071 |
+
}
|
| 1072 |
+
|
| 1073 |
+
#content-related h3 {
|
| 1074 |
+
color: var(--body-quiet-color);
|
| 1075 |
+
padding: 0 16px;
|
| 1076 |
+
margin: 0 0 16px;
|
| 1077 |
+
}
|
| 1078 |
+
|
| 1079 |
+
#content-related h4 {
|
| 1080 |
+
font-size: 0.8125rem;
|
| 1081 |
+
}
|
| 1082 |
+
|
| 1083 |
+
#content-related p {
|
| 1084 |
+
padding-left: 16px;
|
| 1085 |
+
padding-right: 16px;
|
| 1086 |
+
}
|
| 1087 |
+
|
| 1088 |
+
#content-related .actionlist {
|
| 1089 |
+
padding: 0;
|
| 1090 |
+
margin: 16px;
|
| 1091 |
+
}
|
| 1092 |
+
|
| 1093 |
+
#content-related .actionlist li {
|
| 1094 |
+
line-height: 1.2;
|
| 1095 |
+
margin-bottom: 10px;
|
| 1096 |
+
padding-left: 18px;
|
| 1097 |
+
}
|
| 1098 |
+
|
| 1099 |
+
#content-related .module h2 {
|
| 1100 |
+
background: none;
|
| 1101 |
+
padding: 16px;
|
| 1102 |
+
margin-bottom: 16px;
|
| 1103 |
+
border-bottom: 1px solid var(--hairline-color);
|
| 1104 |
+
font-size: 1.125rem;
|
| 1105 |
+
color: var(--body-fg);
|
| 1106 |
+
}
|
| 1107 |
+
|
| 1108 |
+
.delete-confirmation form input[type="submit"] {
|
| 1109 |
+
background: var(--delete-button-bg);
|
| 1110 |
+
border-radius: 4px;
|
| 1111 |
+
padding: 10px 15px;
|
| 1112 |
+
color: var(--button-fg);
|
| 1113 |
+
}
|
| 1114 |
+
|
| 1115 |
+
.delete-confirmation form input[type="submit"]:active,
|
| 1116 |
+
.delete-confirmation form input[type="submit"]:focus,
|
| 1117 |
+
.delete-confirmation form input[type="submit"]:hover {
|
| 1118 |
+
background: var(--delete-button-hover-bg);
|
| 1119 |
+
}
|
| 1120 |
+
|
| 1121 |
+
.delete-confirmation form .cancel-link {
|
| 1122 |
+
display: inline-block;
|
| 1123 |
+
vertical-align: middle;
|
| 1124 |
+
height: 0.9375rem;
|
| 1125 |
+
line-height: 0.9375rem;
|
| 1126 |
+
border-radius: 4px;
|
| 1127 |
+
padding: 10px 15px;
|
| 1128 |
+
color: var(--button-fg);
|
| 1129 |
+
background: var(--close-button-bg);
|
| 1130 |
+
margin: 0 0 0 10px;
|
| 1131 |
+
}
|
| 1132 |
+
|
| 1133 |
+
.delete-confirmation form .cancel-link:active,
|
| 1134 |
+
.delete-confirmation form .cancel-link:focus,
|
| 1135 |
+
.delete-confirmation form .cancel-link:hover {
|
| 1136 |
+
background: var(--close-button-hover-bg);
|
| 1137 |
+
}
|
| 1138 |
+
|
| 1139 |
+
/* POPUP */
|
| 1140 |
+
.popup #content {
|
| 1141 |
+
padding: 20px;
|
| 1142 |
+
}
|
| 1143 |
+
|
| 1144 |
+
.popup #container {
|
| 1145 |
+
min-width: 0;
|
| 1146 |
+
}
|
| 1147 |
+
|
| 1148 |
+
.popup #header {
|
| 1149 |
+
padding: 10px 20px;
|
| 1150 |
+
}
|
| 1151 |
+
|
| 1152 |
+
/* PAGINATOR */
|
| 1153 |
+
|
| 1154 |
+
.paginator {
|
| 1155 |
+
display: flex;
|
| 1156 |
+
align-items: center;
|
| 1157 |
+
gap: 4px;
|
| 1158 |
+
font-size: 0.8125rem;
|
| 1159 |
+
padding-top: 10px;
|
| 1160 |
+
padding-bottom: 10px;
|
| 1161 |
+
line-height: 22px;
|
| 1162 |
+
margin: 0;
|
| 1163 |
+
border-top: 1px solid var(--hairline-color);
|
| 1164 |
+
box-sizing: border-box;
|
| 1165 |
+
}
|
| 1166 |
+
|
| 1167 |
+
.paginator ul {
|
| 1168 |
+
margin: 0;
|
| 1169 |
+
margin-right: 6px;
|
| 1170 |
+
}
|
| 1171 |
+
|
| 1172 |
+
.paginator ul li {
|
| 1173 |
+
display: inline-block;
|
| 1174 |
+
line-height: 22px;
|
| 1175 |
+
padding: 0;
|
| 1176 |
+
}
|
| 1177 |
+
|
| 1178 |
+
.paginator a {
|
| 1179 |
+
display: inline-block;
|
| 1180 |
+
padding: 2px 6px;
|
| 1181 |
+
}
|
| 1182 |
+
|
| 1183 |
+
.paginator a:not(.showall) {
|
| 1184 |
+
background: var(--button-bg);
|
| 1185 |
+
text-decoration: none;
|
| 1186 |
+
color: var(--button-fg);
|
| 1187 |
+
}
|
| 1188 |
+
|
| 1189 |
+
.paginator a[aria-current="page"] {
|
| 1190 |
+
color: var(--body-quiet-color);
|
| 1191 |
+
background: transparent;
|
| 1192 |
+
font-weight: bold;
|
| 1193 |
+
cursor: default;
|
| 1194 |
+
}
|
| 1195 |
+
|
| 1196 |
+
.paginator a:not([aria-current="page"], .showall):focus,
|
| 1197 |
+
.paginator a:not([aria-current="page"], .showall):hover {
|
| 1198 |
+
color: white;
|
| 1199 |
+
background: var(--link-hover-color);
|
| 1200 |
+
}
|
| 1201 |
+
|
| 1202 |
+
.paginator input {
|
| 1203 |
+
margin-left: auto;
|
| 1204 |
+
}
|
| 1205 |
+
|
| 1206 |
+
.base-svgs {
|
| 1207 |
+
display: none;
|
| 1208 |
+
}
|
| 1209 |
+
|
| 1210 |
+
.visually-hidden {
|
| 1211 |
+
position: absolute;
|
| 1212 |
+
width: 1px;
|
| 1213 |
+
height: 1px;
|
| 1214 |
+
padding: 0;
|
| 1215 |
+
overflow: hidden;
|
| 1216 |
+
clip: rect(0,0,0,0);
|
| 1217 |
+
white-space: nowrap;
|
| 1218 |
+
border: 0;
|
| 1219 |
+
color: var(--body-fg);
|
| 1220 |
+
background-color: var(--body-bg);
|
| 1221 |
+
}
|
staticfiles/admin/css/changelists.css
ADDED
|
@@ -0,0 +1,371 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* CHANGELISTS */
|
| 2 |
+
|
| 3 |
+
#changelist .changelist-form-container {
|
| 4 |
+
display: flex;
|
| 5 |
+
flex-wrap: wrap;
|
| 6 |
+
align-items: flex-start;
|
| 7 |
+
width: 100%;
|
| 8 |
+
}
|
| 9 |
+
|
| 10 |
+
#changelist .changelist-form-container > div {
|
| 11 |
+
flex: 1 1 auto;
|
| 12 |
+
}
|
| 13 |
+
|
| 14 |
+
#changelist .changelist-form-container:not(:has(#changelist-filter)) > div {
|
| 15 |
+
width: 100%;
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
#changelist .changelist-form-container:has(#changelist-filter) > div {
|
| 19 |
+
max-width: calc(100% - 270px);
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
#changelist table {
|
| 23 |
+
width: 100%;
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
.change-list .hiddenfields { display:none; }
|
| 27 |
+
|
| 28 |
+
.change-list .filtered table {
|
| 29 |
+
border-right: none;
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
.change-list .filtered {
|
| 33 |
+
min-height: 400px;
|
| 34 |
+
}
|
| 35 |
+
|
| 36 |
+
.change-list .filtered .results, .filtered #toolbar,
|
| 37 |
+
.filtered div.xfull {
|
| 38 |
+
width: auto;
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
.change-list .filtered table tbody th {
|
| 42 |
+
padding-right: 1em;
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
#changelist-form .results {
|
| 46 |
+
overflow-x: auto;
|
| 47 |
+
width: 100%;
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
#changelist .toplinks {
|
| 51 |
+
border-bottom: 1px solid var(--hairline-color);
|
| 52 |
+
}
|
| 53 |
+
|
| 54 |
+
#changelist .changelist-footer {
|
| 55 |
+
display: flex;
|
| 56 |
+
align-items: center;
|
| 57 |
+
justify-content: space-between;
|
| 58 |
+
padding: 10px;
|
| 59 |
+
border-top: 1px solid var(--hairline-color);
|
| 60 |
+
border-bottom: 1px solid var(--hairline-color);
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
#changelist .changelist-footer .paginator {
|
| 64 |
+
color: var(--body-quiet-color);
|
| 65 |
+
background: var(--body-bg);
|
| 66 |
+
border: none;
|
| 67 |
+
padding: 0;
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
#changelist .paginator {
|
| 71 |
+
color: var(--body-quiet-color);
|
| 72 |
+
border-bottom: 1px solid var(--hairline-color);
|
| 73 |
+
background: var(--body-bg);
|
| 74 |
+
}
|
| 75 |
+
|
| 76 |
+
#changelist .paginator ul {
|
| 77 |
+
padding: 0;
|
| 78 |
+
white-space: nowrap;
|
| 79 |
+
}
|
| 80 |
+
|
| 81 |
+
/* CHANGELIST TABLES */
|
| 82 |
+
|
| 83 |
+
#changelist table thead th {
|
| 84 |
+
padding: 0;
|
| 85 |
+
white-space: nowrap;
|
| 86 |
+
vertical-align: middle;
|
| 87 |
+
}
|
| 88 |
+
|
| 89 |
+
#changelist table thead th.action-checkbox-column {
|
| 90 |
+
width: 1.5em;
|
| 91 |
+
text-align: center;
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
#changelist table tbody td.action-checkbox {
|
| 95 |
+
text-align: center;
|
| 96 |
+
}
|
| 97 |
+
|
| 98 |
+
#changelist table tfoot {
|
| 99 |
+
color: var(--body-quiet-color);
|
| 100 |
+
}
|
| 101 |
+
|
| 102 |
+
/* TOOLBAR */
|
| 103 |
+
|
| 104 |
+
#toolbar {
|
| 105 |
+
padding: 8px 10px;
|
| 106 |
+
margin-bottom: 15px;
|
| 107 |
+
border-top: 1px solid var(--hairline-color);
|
| 108 |
+
border-bottom: 1px solid var(--hairline-color);
|
| 109 |
+
background: var(--darkened-bg);
|
| 110 |
+
color: var(--body-quiet-color);
|
| 111 |
+
}
|
| 112 |
+
|
| 113 |
+
#toolbar form input {
|
| 114 |
+
border-radius: 4px;
|
| 115 |
+
font-size: 0.875rem;
|
| 116 |
+
padding: 5px;
|
| 117 |
+
color: var(--body-fg);
|
| 118 |
+
}
|
| 119 |
+
|
| 120 |
+
#toolbar #searchbar {
|
| 121 |
+
height: 1.1875rem;
|
| 122 |
+
border: 1px solid var(--border-color);
|
| 123 |
+
padding: 2px 5px;
|
| 124 |
+
margin: 0;
|
| 125 |
+
vertical-align: top;
|
| 126 |
+
font-size: 0.8125rem;
|
| 127 |
+
max-width: 100%;
|
| 128 |
+
}
|
| 129 |
+
|
| 130 |
+
#toolbar #searchbar:focus {
|
| 131 |
+
border-color: var(--body-quiet-color);
|
| 132 |
+
}
|
| 133 |
+
|
| 134 |
+
#toolbar form input[type="submit"] {
|
| 135 |
+
border: 1px solid var(--border-color);
|
| 136 |
+
font-size: 0.8125rem;
|
| 137 |
+
padding: 4px 8px;
|
| 138 |
+
margin: 0;
|
| 139 |
+
vertical-align: middle;
|
| 140 |
+
background: var(--body-bg);
|
| 141 |
+
box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset;
|
| 142 |
+
cursor: pointer;
|
| 143 |
+
color: var(--body-fg);
|
| 144 |
+
}
|
| 145 |
+
|
| 146 |
+
#toolbar form input[type="submit"]:focus,
|
| 147 |
+
#toolbar form input[type="submit"]:hover {
|
| 148 |
+
border-color: var(--body-quiet-color);
|
| 149 |
+
}
|
| 150 |
+
|
| 151 |
+
#changelist-search img {
|
| 152 |
+
vertical-align: middle;
|
| 153 |
+
margin-right: 4px;
|
| 154 |
+
}
|
| 155 |
+
|
| 156 |
+
#changelist-search .help {
|
| 157 |
+
word-break: break-word;
|
| 158 |
+
}
|
| 159 |
+
|
| 160 |
+
/* FILTER COLUMN */
|
| 161 |
+
|
| 162 |
+
#changelist-filter {
|
| 163 |
+
flex: 0 0 240px;
|
| 164 |
+
order: 1;
|
| 165 |
+
background: var(--darkened-bg);
|
| 166 |
+
border-left: none;
|
| 167 |
+
margin: 0 0 0 30px;
|
| 168 |
+
}
|
| 169 |
+
|
| 170 |
+
@media (forced-colors: active) {
|
| 171 |
+
#changelist-filter {
|
| 172 |
+
border: 1px solid;
|
| 173 |
+
}
|
| 174 |
+
}
|
| 175 |
+
|
| 176 |
+
#changelist-filter h2 {
|
| 177 |
+
font-size: 0.875rem;
|
| 178 |
+
text-transform: uppercase;
|
| 179 |
+
letter-spacing: 0.5px;
|
| 180 |
+
padding: 5px 15px;
|
| 181 |
+
margin-bottom: 12px;
|
| 182 |
+
border-bottom: none;
|
| 183 |
+
}
|
| 184 |
+
|
| 185 |
+
#changelist-filter h3,
|
| 186 |
+
#changelist-filter details summary {
|
| 187 |
+
font-weight: 400;
|
| 188 |
+
padding: 0 15px;
|
| 189 |
+
margin-bottom: 10px;
|
| 190 |
+
}
|
| 191 |
+
|
| 192 |
+
#changelist-filter details summary > * {
|
| 193 |
+
display: inline;
|
| 194 |
+
}
|
| 195 |
+
|
| 196 |
+
#changelist-filter details > summary {
|
| 197 |
+
list-style-type: none;
|
| 198 |
+
}
|
| 199 |
+
|
| 200 |
+
#changelist-filter details > summary::-webkit-details-marker {
|
| 201 |
+
display: none;
|
| 202 |
+
}
|
| 203 |
+
|
| 204 |
+
#changelist-filter details > summary::before {
|
| 205 |
+
content: '→';
|
| 206 |
+
font-weight: bold;
|
| 207 |
+
color: var(--link-hover-color);
|
| 208 |
+
}
|
| 209 |
+
|
| 210 |
+
#changelist-filter details[open] > summary::before {
|
| 211 |
+
content: '↓';
|
| 212 |
+
}
|
| 213 |
+
|
| 214 |
+
#changelist-filter ul {
|
| 215 |
+
margin: 5px 0;
|
| 216 |
+
padding: 0 15px 15px;
|
| 217 |
+
border-bottom: 1px solid var(--hairline-color);
|
| 218 |
+
}
|
| 219 |
+
|
| 220 |
+
#changelist-filter ul:last-child {
|
| 221 |
+
border-bottom: none;
|
| 222 |
+
}
|
| 223 |
+
|
| 224 |
+
#changelist-filter li {
|
| 225 |
+
list-style-type: none;
|
| 226 |
+
margin-left: 0;
|
| 227 |
+
padding-left: 0;
|
| 228 |
+
}
|
| 229 |
+
|
| 230 |
+
#changelist-filter a {
|
| 231 |
+
display: block;
|
| 232 |
+
color: var(--body-quiet-color);
|
| 233 |
+
word-break: break-word;
|
| 234 |
+
}
|
| 235 |
+
|
| 236 |
+
#changelist-filter li.selected {
|
| 237 |
+
border-left: 5px solid var(--hairline-color);
|
| 238 |
+
padding-left: 10px;
|
| 239 |
+
margin-left: -15px;
|
| 240 |
+
}
|
| 241 |
+
|
| 242 |
+
#changelist-filter li.selected a {
|
| 243 |
+
color: var(--link-selected-fg);
|
| 244 |
+
}
|
| 245 |
+
|
| 246 |
+
#changelist-filter a:focus, #changelist-filter a:hover,
|
| 247 |
+
#changelist-filter li.selected a:focus,
|
| 248 |
+
#changelist-filter li.selected a:hover {
|
| 249 |
+
color: var(--link-hover-color);
|
| 250 |
+
}
|
| 251 |
+
|
| 252 |
+
#changelist-filter #changelist-filter-extra-actions {
|
| 253 |
+
font-size: 0.8125rem;
|
| 254 |
+
margin-bottom: 10px;
|
| 255 |
+
border-bottom: 1px solid var(--hairline-color);
|
| 256 |
+
}
|
| 257 |
+
|
| 258 |
+
/* DATE DRILLDOWN */
|
| 259 |
+
|
| 260 |
+
.change-list .toplinks {
|
| 261 |
+
display: flex;
|
| 262 |
+
padding-bottom: 5px;
|
| 263 |
+
flex-wrap: wrap;
|
| 264 |
+
gap: 3px 17px;
|
| 265 |
+
font-weight: bold;
|
| 266 |
+
}
|
| 267 |
+
|
| 268 |
+
.change-list .toplinks a {
|
| 269 |
+
font-size: 0.8125rem;
|
| 270 |
+
}
|
| 271 |
+
|
| 272 |
+
.change-list .toplinks .date-back {
|
| 273 |
+
color: var(--body-quiet-color);
|
| 274 |
+
}
|
| 275 |
+
|
| 276 |
+
.change-list .toplinks .date-back:focus,
|
| 277 |
+
.change-list .toplinks .date-back:hover {
|
| 278 |
+
color: var(--link-hover-color);
|
| 279 |
+
}
|
| 280 |
+
|
| 281 |
+
/* ACTIONS */
|
| 282 |
+
|
| 283 |
+
.filtered .actions {
|
| 284 |
+
border-right: none;
|
| 285 |
+
}
|
| 286 |
+
|
| 287 |
+
#changelist table input {
|
| 288 |
+
margin: 0;
|
| 289 |
+
vertical-align: baseline;
|
| 290 |
+
}
|
| 291 |
+
|
| 292 |
+
/* Once the :has() pseudo-class is supported by all browsers, the tr.selected
|
| 293 |
+
selector and the JS adding the class can be removed. */
|
| 294 |
+
#changelist tbody tr.selected {
|
| 295 |
+
background-color: var(--selected-row);
|
| 296 |
+
}
|
| 297 |
+
|
| 298 |
+
#changelist tbody tr:has(.action-select:checked) {
|
| 299 |
+
background-color: var(--selected-row);
|
| 300 |
+
}
|
| 301 |
+
|
| 302 |
+
@media (forced-colors: active) {
|
| 303 |
+
#changelist tbody tr.selected {
|
| 304 |
+
background-color: SelectedItem;
|
| 305 |
+
}
|
| 306 |
+
#changelist tbody tr:has(.action-select:checked) {
|
| 307 |
+
background-color: SelectedItem;
|
| 308 |
+
}
|
| 309 |
+
}
|
| 310 |
+
|
| 311 |
+
#changelist .actions {
|
| 312 |
+
padding: 10px;
|
| 313 |
+
background: var(--body-bg);
|
| 314 |
+
border-top: none;
|
| 315 |
+
border-bottom: none;
|
| 316 |
+
line-height: 1.5rem;
|
| 317 |
+
color: var(--body-quiet-color);
|
| 318 |
+
width: 100%;
|
| 319 |
+
}
|
| 320 |
+
|
| 321 |
+
#changelist .actions span.all,
|
| 322 |
+
#changelist .actions span.action-counter,
|
| 323 |
+
#changelist .actions span.clear,
|
| 324 |
+
#changelist .actions span.question {
|
| 325 |
+
font-size: 0.8125rem;
|
| 326 |
+
margin: 0 0.5em;
|
| 327 |
+
}
|
| 328 |
+
|
| 329 |
+
#changelist .actions:last-child {
|
| 330 |
+
border-bottom: none;
|
| 331 |
+
}
|
| 332 |
+
|
| 333 |
+
#changelist .actions select {
|
| 334 |
+
vertical-align: top;
|
| 335 |
+
height: 1.5rem;
|
| 336 |
+
color: var(--body-fg);
|
| 337 |
+
border: 1px solid var(--border-color);
|
| 338 |
+
border-radius: 4px;
|
| 339 |
+
font-size: 0.875rem;
|
| 340 |
+
padding: 0 0 0 4px;
|
| 341 |
+
margin: 0;
|
| 342 |
+
margin-left: 10px;
|
| 343 |
+
}
|
| 344 |
+
|
| 345 |
+
#changelist .actions select:focus {
|
| 346 |
+
border-color: var(--body-quiet-color);
|
| 347 |
+
}
|
| 348 |
+
|
| 349 |
+
#changelist .actions label {
|
| 350 |
+
display: inline-block;
|
| 351 |
+
vertical-align: middle;
|
| 352 |
+
font-size: 0.8125rem;
|
| 353 |
+
}
|
| 354 |
+
|
| 355 |
+
#changelist .actions .button {
|
| 356 |
+
font-size: 0.8125rem;
|
| 357 |
+
border: 1px solid var(--border-color);
|
| 358 |
+
border-radius: 4px;
|
| 359 |
+
background: var(--body-bg);
|
| 360 |
+
box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset;
|
| 361 |
+
cursor: pointer;
|
| 362 |
+
height: 1.5rem;
|
| 363 |
+
line-height: 1;
|
| 364 |
+
padding: 4px 8px;
|
| 365 |
+
margin: 0;
|
| 366 |
+
color: var(--body-fg);
|
| 367 |
+
}
|
| 368 |
+
|
| 369 |
+
#changelist .actions .button:focus, #changelist .actions .button:hover {
|
| 370 |
+
border-color: var(--body-quiet-color);
|
| 371 |
+
}
|
staticfiles/admin/css/dark_mode.css
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
@media (prefers-color-scheme: dark) {
|
| 2 |
+
:root {
|
| 3 |
+
--primary: #264b5d;
|
| 4 |
+
--primary-fg: #f7f7f7;
|
| 5 |
+
|
| 6 |
+
--body-fg: #eeeeee;
|
| 7 |
+
--body-bg: #121212;
|
| 8 |
+
--body-quiet-color: #d0d0d0;
|
| 9 |
+
--body-medium-color: #e0e0e0;
|
| 10 |
+
--body-loud-color: #ffffff;
|
| 11 |
+
|
| 12 |
+
--breadcrumbs-link-fg: #e0e0e0;
|
| 13 |
+
--breadcrumbs-bg: var(--primary);
|
| 14 |
+
|
| 15 |
+
--link-fg: #81d4fa;
|
| 16 |
+
--link-hover-color: #4ac1f7;
|
| 17 |
+
--link-selected-fg: #6f94c6;
|
| 18 |
+
|
| 19 |
+
--hairline-color: #272727;
|
| 20 |
+
--border-color: #353535;
|
| 21 |
+
|
| 22 |
+
--error-fg: #e35f5f;
|
| 23 |
+
|
| 24 |
+
--message-debug-bg: #4e4e4e;
|
| 25 |
+
--message-debug-icon: url(../img/icon-debug-dark.svg);
|
| 26 |
+
--message-info-bg: #265895;
|
| 27 |
+
--message-info-icon: url(../img/icon-info-dark.svg);
|
| 28 |
+
--message-success-bg: #006b1b;
|
| 29 |
+
--message-success-icon: url(../img/icon-yes-dark.svg);
|
| 30 |
+
--message-warning-bg: #583305;
|
| 31 |
+
--message-warning-icon: url(../img/icon-alert-dark.svg);
|
| 32 |
+
--message-error-bg: #570808;
|
| 33 |
+
--message-error-icon: url(../img/icon-no-dark.svg);
|
| 34 |
+
|
| 35 |
+
--darkened-bg: #212121;
|
| 36 |
+
--selected-bg: #1b1b1b;
|
| 37 |
+
--selected-row: #00363a;
|
| 38 |
+
|
| 39 |
+
--close-button-bg: #333333;
|
| 40 |
+
--close-button-hover-bg: #666666;
|
| 41 |
+
|
| 42 |
+
color-scheme: dark;
|
| 43 |
+
}
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
|
| 47 |
+
html[data-theme="dark"] {
|
| 48 |
+
--primary: #264b5d;
|
| 49 |
+
--primary-fg: #f7f7f7;
|
| 50 |
+
|
| 51 |
+
--body-fg: #eeeeee;
|
| 52 |
+
--body-bg: #121212;
|
| 53 |
+
--body-quiet-color: #d0d0d0;
|
| 54 |
+
--body-medium-color: #e0e0e0;
|
| 55 |
+
--body-loud-color: #ffffff;
|
| 56 |
+
|
| 57 |
+
--breadcrumbs-link-fg: #e0e0e0;
|
| 58 |
+
--breadcrumbs-bg: var(--primary);
|
| 59 |
+
|
| 60 |
+
--link-fg: #81d4fa;
|
| 61 |
+
--link-hover-color: #4ac1f7;
|
| 62 |
+
--link-selected-fg: #6f94c6;
|
| 63 |
+
|
| 64 |
+
--hairline-color: #272727;
|
| 65 |
+
--border-color: #353535;
|
| 66 |
+
|
| 67 |
+
--error-fg: #e35f5f;
|
| 68 |
+
|
| 69 |
+
--message-debug-bg: #4e4e4e;
|
| 70 |
+
--message-debug-icon: url(../img/icon-debug-dark.svg);
|
| 71 |
+
--message-info-bg: #265895;
|
| 72 |
+
--message-info-icon: url(../img/icon-info-dark.svg);
|
| 73 |
+
--message-success-bg: #006b1b;
|
| 74 |
+
--message-success-icon: url(../img/icon-yes-dark.svg);
|
| 75 |
+
--message-warning-bg: #583305;
|
| 76 |
+
--message-warning-icon: url(../img/icon-alert-dark.svg);
|
| 77 |
+
--message-error-bg: #570808;
|
| 78 |
+
--message-error-icon: url(../img/icon-no-dark.svg);
|
| 79 |
+
|
| 80 |
+
--darkened-bg: #212121;
|
| 81 |
+
--selected-bg: #1b1b1b;
|
| 82 |
+
--selected-row: #00363a;
|
| 83 |
+
|
| 84 |
+
--close-button-bg: #333333;
|
| 85 |
+
--close-button-hover-bg: #666666;
|
| 86 |
+
|
| 87 |
+
color-scheme: dark;
|
| 88 |
+
}
|
| 89 |
+
|
| 90 |
+
/* THEME SWITCH */
|
| 91 |
+
.theme-toggle {
|
| 92 |
+
cursor: pointer;
|
| 93 |
+
border: none;
|
| 94 |
+
padding: 0;
|
| 95 |
+
background: transparent;
|
| 96 |
+
vertical-align: middle;
|
| 97 |
+
margin-inline-start: 5px;
|
| 98 |
+
margin-top: -1px;
|
| 99 |
+
}
|
| 100 |
+
|
| 101 |
+
.theme-toggle svg {
|
| 102 |
+
vertical-align: middle;
|
| 103 |
+
height: 1.5rem;
|
| 104 |
+
width: 1.5rem;
|
| 105 |
+
display: none;
|
| 106 |
+
}
|
| 107 |
+
|
| 108 |
+
/*
|
| 109 |
+
Fully hide screen reader text so we only show the one matching the current
|
| 110 |
+
theme.
|
| 111 |
+
*/
|
| 112 |
+
.theme-toggle .visually-hidden {
|
| 113 |
+
display: none;
|
| 114 |
+
}
|
| 115 |
+
|
| 116 |
+
html[data-theme="auto"] .theme-toggle .theme-label-when-auto {
|
| 117 |
+
display: block;
|
| 118 |
+
}
|
| 119 |
+
|
| 120 |
+
html[data-theme="dark"] .theme-toggle .theme-label-when-dark {
|
| 121 |
+
display: block;
|
| 122 |
+
}
|
| 123 |
+
|
| 124 |
+
html[data-theme="light"] .theme-toggle .theme-label-when-light {
|
| 125 |
+
display: block;
|
| 126 |
+
}
|
| 127 |
+
|
| 128 |
+
/* ICONS */
|
| 129 |
+
.theme-toggle svg.theme-icon-when-auto,
|
| 130 |
+
.theme-toggle svg.theme-icon-when-dark,
|
| 131 |
+
.theme-toggle svg.theme-icon-when-light {
|
| 132 |
+
fill: var(--header-link-color);
|
| 133 |
+
color: var(--header-bg);
|
| 134 |
+
}
|
| 135 |
+
|
| 136 |
+
html[data-theme="auto"] .theme-toggle svg.theme-icon-when-auto {
|
| 137 |
+
display: block;
|
| 138 |
+
}
|
| 139 |
+
|
| 140 |
+
html[data-theme="dark"] .theme-toggle svg.theme-icon-when-dark {
|
| 141 |
+
display: block;
|
| 142 |
+
}
|
| 143 |
+
|
| 144 |
+
html[data-theme="light"] .theme-toggle svg.theme-icon-when-light {
|
| 145 |
+
display: block;
|
| 146 |
+
}
|
staticfiles/admin/css/dashboard.css
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* DASHBOARD */
|
| 2 |
+
.dashboard td, .dashboard th {
|
| 3 |
+
word-break: break-word;
|
| 4 |
+
}
|
| 5 |
+
|
| 6 |
+
.dashboard .module table th {
|
| 7 |
+
width: 100%;
|
| 8 |
+
}
|
| 9 |
+
|
| 10 |
+
.dashboard .module table td {
|
| 11 |
+
white-space: nowrap;
|
| 12 |
+
}
|
| 13 |
+
|
| 14 |
+
.dashboard .module table td a {
|
| 15 |
+
display: block;
|
| 16 |
+
padding-right: .6em;
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
/* RECENT ACTIONS MODULE */
|
| 20 |
+
|
| 21 |
+
.module ul.actionlist {
|
| 22 |
+
margin-left: 0;
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
ul.actionlist li {
|
| 26 |
+
list-style-type: none;
|
| 27 |
+
overflow: hidden;
|
| 28 |
+
text-overflow: ellipsis;
|
| 29 |
+
}
|
staticfiles/admin/css/forms.css
ADDED
|
@@ -0,0 +1,518 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
@import url('widgets.css');
|
| 2 |
+
|
| 3 |
+
/* FORM ROWS */
|
| 4 |
+
|
| 5 |
+
.form-row {
|
| 6 |
+
overflow: hidden;
|
| 7 |
+
padding: 10px;
|
| 8 |
+
font-size: 0.8125rem;
|
| 9 |
+
border-bottom: 1px solid var(--hairline-color);
|
| 10 |
+
}
|
| 11 |
+
|
| 12 |
+
.form-row img, .form-row input {
|
| 13 |
+
vertical-align: middle;
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
.form-row label input[type="checkbox"] {
|
| 17 |
+
margin-top: 0;
|
| 18 |
+
vertical-align: 0;
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
form .form-row p {
|
| 22 |
+
padding-left: 0;
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
.flex-container {
|
| 26 |
+
display: flex;
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
.form-multiline {
|
| 30 |
+
flex-wrap: wrap;
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
+
.form-multiline > div {
|
| 34 |
+
padding-bottom: 10px;
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
/* FORM LABELS */
|
| 38 |
+
|
| 39 |
+
legend, label {
|
| 40 |
+
font-weight: normal;
|
| 41 |
+
color: var(--body-quiet-color);
|
| 42 |
+
font-size: 0.8125rem;
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
.required legend, legend.required,
|
| 46 |
+
.required label, label.required {
|
| 47 |
+
font-weight: bold;
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
/* RADIO BUTTONS */
|
| 51 |
+
|
| 52 |
+
form div.radiolist div {
|
| 53 |
+
padding-right: 7px;
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
form div.radiolist.inline div {
|
| 57 |
+
display: inline-block;
|
| 58 |
+
}
|
| 59 |
+
|
| 60 |
+
form div.radiolist label {
|
| 61 |
+
width: auto;
|
| 62 |
+
}
|
| 63 |
+
|
| 64 |
+
form div.radiolist input[type="radio"] {
|
| 65 |
+
margin: -2px 4px 0 0;
|
| 66 |
+
padding: 0;
|
| 67 |
+
}
|
| 68 |
+
|
| 69 |
+
form ul.inline {
|
| 70 |
+
margin-left: 0;
|
| 71 |
+
padding: 0;
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
form ul.inline li {
|
| 75 |
+
float: left;
|
| 76 |
+
padding-right: 7px;
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
/* FIELDSETS */
|
| 80 |
+
|
| 81 |
+
fieldset .fieldset-heading,
|
| 82 |
+
fieldset .inline-heading,
|
| 83 |
+
:not(.inline-related) .collapse summary {
|
| 84 |
+
border: 1px solid var(--header-bg);
|
| 85 |
+
margin: 0;
|
| 86 |
+
padding: 8px;
|
| 87 |
+
font-weight: 400;
|
| 88 |
+
font-size: 0.8125rem;
|
| 89 |
+
background: var(--header-bg);
|
| 90 |
+
color: var(--header-link-color);
|
| 91 |
+
}
|
| 92 |
+
|
| 93 |
+
/* ALIGNED FIELDSETS */
|
| 94 |
+
|
| 95 |
+
.aligned fieldset {
|
| 96 |
+
width: 100%;
|
| 97 |
+
border-top: none;
|
| 98 |
+
}
|
| 99 |
+
|
| 100 |
+
.aligned fieldset > div {
|
| 101 |
+
width: 100%;
|
| 102 |
+
}
|
| 103 |
+
|
| 104 |
+
.aligned legend {
|
| 105 |
+
float: inline-start;
|
| 106 |
+
}
|
| 107 |
+
|
| 108 |
+
.aligned legend,
|
| 109 |
+
.aligned label {
|
| 110 |
+
display: block;
|
| 111 |
+
padding: 4px 10px 0 0;
|
| 112 |
+
min-width: 160px;
|
| 113 |
+
width: 160px;
|
| 114 |
+
word-wrap: break-word;
|
| 115 |
+
}
|
| 116 |
+
|
| 117 |
+
.aligned label:not(.vCheckboxLabel):after {
|
| 118 |
+
content: '';
|
| 119 |
+
display: inline-block;
|
| 120 |
+
vertical-align: middle;
|
| 121 |
+
}
|
| 122 |
+
|
| 123 |
+
.aligned label + p, .aligned .checkbox-row + div.help, .aligned label + div.readonly {
|
| 124 |
+
padding: 6px 0;
|
| 125 |
+
margin-top: 0;
|
| 126 |
+
margin-bottom: 0;
|
| 127 |
+
margin-left: 0;
|
| 128 |
+
overflow-wrap: break-word;
|
| 129 |
+
}
|
| 130 |
+
|
| 131 |
+
.aligned ul label {
|
| 132 |
+
display: inline;
|
| 133 |
+
float: none;
|
| 134 |
+
width: auto;
|
| 135 |
+
}
|
| 136 |
+
|
| 137 |
+
.aligned .form-row input {
|
| 138 |
+
margin-bottom: 0;
|
| 139 |
+
}
|
| 140 |
+
|
| 141 |
+
.colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField {
|
| 142 |
+
width: 350px;
|
| 143 |
+
}
|
| 144 |
+
|
| 145 |
+
form .aligned ul {
|
| 146 |
+
margin-left: 160px;
|
| 147 |
+
padding-left: 10px;
|
| 148 |
+
}
|
| 149 |
+
|
| 150 |
+
form .aligned div.radiolist {
|
| 151 |
+
display: block;
|
| 152 |
+
margin: 0;
|
| 153 |
+
padding: 0;
|
| 154 |
+
}
|
| 155 |
+
|
| 156 |
+
form .aligned p.help,
|
| 157 |
+
form .aligned div.help {
|
| 158 |
+
margin-top: 0;
|
| 159 |
+
margin-left: 160px;
|
| 160 |
+
padding-left: 10px;
|
| 161 |
+
}
|
| 162 |
+
|
| 163 |
+
form .aligned p.date div.help.timezonewarning,
|
| 164 |
+
form .aligned p.datetime div.help.timezonewarning,
|
| 165 |
+
form .aligned p.time div.help.timezonewarning {
|
| 166 |
+
margin-left: 0;
|
| 167 |
+
padding-left: 0;
|
| 168 |
+
font-weight: normal;
|
| 169 |
+
}
|
| 170 |
+
|
| 171 |
+
form .aligned p.help:last-child,
|
| 172 |
+
form .aligned div.help:last-child {
|
| 173 |
+
margin-bottom: 0;
|
| 174 |
+
padding-bottom: 0;
|
| 175 |
+
}
|
| 176 |
+
|
| 177 |
+
form .aligned input + p.help,
|
| 178 |
+
form .aligned textarea + p.help,
|
| 179 |
+
form .aligned select + p.help,
|
| 180 |
+
form .aligned input + div.help,
|
| 181 |
+
form .aligned textarea + div.help,
|
| 182 |
+
form .aligned select + div.help {
|
| 183 |
+
margin-left: 160px;
|
| 184 |
+
padding-left: 10px;
|
| 185 |
+
}
|
| 186 |
+
|
| 187 |
+
form .aligned select option:checked {
|
| 188 |
+
background-color: var(--selected-row);
|
| 189 |
+
}
|
| 190 |
+
|
| 191 |
+
form .aligned ul li {
|
| 192 |
+
list-style: none;
|
| 193 |
+
}
|
| 194 |
+
|
| 195 |
+
form .aligned table p {
|
| 196 |
+
margin-left: 0;
|
| 197 |
+
padding-left: 0;
|
| 198 |
+
}
|
| 199 |
+
|
| 200 |
+
.aligned .vCheckboxLabel {
|
| 201 |
+
padding: 1px 0 0 5px;
|
| 202 |
+
}
|
| 203 |
+
|
| 204 |
+
.aligned .vCheckboxLabel + p.help,
|
| 205 |
+
.aligned .vCheckboxLabel + div.help {
|
| 206 |
+
margin-top: -4px;
|
| 207 |
+
}
|
| 208 |
+
|
| 209 |
+
.colM .aligned .vLargeTextField, .colM .aligned .vXMLLargeTextField {
|
| 210 |
+
width: 610px;
|
| 211 |
+
}
|
| 212 |
+
|
| 213 |
+
fieldset .fieldBox {
|
| 214 |
+
margin-right: 20px;
|
| 215 |
+
}
|
| 216 |
+
|
| 217 |
+
/* WIDE FIELDSETS */
|
| 218 |
+
|
| 219 |
+
.wide label {
|
| 220 |
+
width: 200px;
|
| 221 |
+
}
|
| 222 |
+
|
| 223 |
+
form .wide p.help,
|
| 224 |
+
form .wide ul.errorlist,
|
| 225 |
+
form .wide div.help {
|
| 226 |
+
padding-left: 50px;
|
| 227 |
+
}
|
| 228 |
+
|
| 229 |
+
form div.help ul {
|
| 230 |
+
padding-left: 0;
|
| 231 |
+
margin-left: 0;
|
| 232 |
+
}
|
| 233 |
+
|
| 234 |
+
.colM fieldset.wide .vLargeTextField, .colM fieldset.wide .vXMLLargeTextField {
|
| 235 |
+
width: 450px;
|
| 236 |
+
}
|
| 237 |
+
|
| 238 |
+
/* COLLAPSIBLE FIELDSETS */
|
| 239 |
+
|
| 240 |
+
.collapse summary .fieldset-heading,
|
| 241 |
+
.collapse summary .inline-heading {
|
| 242 |
+
background: transparent;
|
| 243 |
+
border: none;
|
| 244 |
+
color: currentColor;
|
| 245 |
+
display: inline;
|
| 246 |
+
margin: 0;
|
| 247 |
+
padding: 0;
|
| 248 |
+
}
|
| 249 |
+
|
| 250 |
+
/* MONOSPACE TEXTAREAS */
|
| 251 |
+
|
| 252 |
+
fieldset.monospace textarea {
|
| 253 |
+
font-family: var(--font-family-monospace);
|
| 254 |
+
}
|
| 255 |
+
|
| 256 |
+
/* SUBMIT ROW */
|
| 257 |
+
|
| 258 |
+
.submit-row {
|
| 259 |
+
padding: 12px 14px 12px;
|
| 260 |
+
margin: 0 0 20px;
|
| 261 |
+
background: var(--darkened-bg);
|
| 262 |
+
border: 1px solid var(--hairline-color);
|
| 263 |
+
border-radius: 4px;
|
| 264 |
+
overflow: hidden;
|
| 265 |
+
display: flex;
|
| 266 |
+
gap: 10px;
|
| 267 |
+
flex-wrap: wrap;
|
| 268 |
+
}
|
| 269 |
+
|
| 270 |
+
body.popup .submit-row {
|
| 271 |
+
overflow: auto;
|
| 272 |
+
}
|
| 273 |
+
|
| 274 |
+
.submit-row input {
|
| 275 |
+
height: 2.1875rem;
|
| 276 |
+
line-height: 0.9375rem;
|
| 277 |
+
}
|
| 278 |
+
|
| 279 |
+
.submit-row input, .submit-row a {
|
| 280 |
+
margin: 0;
|
| 281 |
+
}
|
| 282 |
+
|
| 283 |
+
.submit-row input.default {
|
| 284 |
+
text-transform: uppercase;
|
| 285 |
+
}
|
| 286 |
+
|
| 287 |
+
.submit-row a.deletelink {
|
| 288 |
+
margin-left: auto;
|
| 289 |
+
}
|
| 290 |
+
|
| 291 |
+
.submit-row a.deletelink {
|
| 292 |
+
display: block;
|
| 293 |
+
background: var(--delete-button-bg);
|
| 294 |
+
border-radius: 4px;
|
| 295 |
+
padding: 0.625rem 0.9375rem;
|
| 296 |
+
height: 0.9375rem;
|
| 297 |
+
line-height: 0.9375rem;
|
| 298 |
+
color: var(--button-fg);
|
| 299 |
+
}
|
| 300 |
+
|
| 301 |
+
.submit-row a.closelink {
|
| 302 |
+
display: inline-block;
|
| 303 |
+
background: var(--close-button-bg);
|
| 304 |
+
border-radius: 4px;
|
| 305 |
+
padding: 10px 15px;
|
| 306 |
+
height: 0.9375rem;
|
| 307 |
+
line-height: 0.9375rem;
|
| 308 |
+
color: var(--button-fg);
|
| 309 |
+
}
|
| 310 |
+
|
| 311 |
+
.submit-row a.deletelink:focus,
|
| 312 |
+
.submit-row a.deletelink:hover,
|
| 313 |
+
.submit-row a.deletelink:active {
|
| 314 |
+
background: var(--delete-button-hover-bg);
|
| 315 |
+
text-decoration: none;
|
| 316 |
+
}
|
| 317 |
+
|
| 318 |
+
.submit-row a.closelink:focus,
|
| 319 |
+
.submit-row a.closelink:hover,
|
| 320 |
+
.submit-row a.closelink:active {
|
| 321 |
+
background: var(--close-button-hover-bg);
|
| 322 |
+
text-decoration: none;
|
| 323 |
+
}
|
| 324 |
+
|
| 325 |
+
/* CUSTOM FORM FIELDS */
|
| 326 |
+
|
| 327 |
+
.vSelectMultipleField {
|
| 328 |
+
vertical-align: top;
|
| 329 |
+
}
|
| 330 |
+
|
| 331 |
+
.vCheckboxField {
|
| 332 |
+
border: none;
|
| 333 |
+
}
|
| 334 |
+
|
| 335 |
+
.vDateField, .vTimeField {
|
| 336 |
+
margin-right: 2px;
|
| 337 |
+
margin-bottom: 4px;
|
| 338 |
+
}
|
| 339 |
+
|
| 340 |
+
.vDateField {
|
| 341 |
+
min-width: 6.85em;
|
| 342 |
+
}
|
| 343 |
+
|
| 344 |
+
.vTimeField {
|
| 345 |
+
min-width: 4.7em;
|
| 346 |
+
}
|
| 347 |
+
|
| 348 |
+
.vURLField {
|
| 349 |
+
width: 30em;
|
| 350 |
+
}
|
| 351 |
+
|
| 352 |
+
.vLargeTextField, .vXMLLargeTextField {
|
| 353 |
+
width: 48em;
|
| 354 |
+
}
|
| 355 |
+
|
| 356 |
+
.app-flatpages.model-flatpage #id_content {
|
| 357 |
+
height: 40.2em;
|
| 358 |
+
}
|
| 359 |
+
|
| 360 |
+
.module table .vPositiveSmallIntegerField {
|
| 361 |
+
width: 2.2em;
|
| 362 |
+
}
|
| 363 |
+
|
| 364 |
+
.vIntegerField {
|
| 365 |
+
width: 5em;
|
| 366 |
+
}
|
| 367 |
+
|
| 368 |
+
.vBigIntegerField {
|
| 369 |
+
width: 10em;
|
| 370 |
+
}
|
| 371 |
+
|
| 372 |
+
.vForeignKeyRawIdAdminField {
|
| 373 |
+
width: 5em;
|
| 374 |
+
}
|
| 375 |
+
|
| 376 |
+
.vTextField, .vUUIDField {
|
| 377 |
+
width: 20em;
|
| 378 |
+
}
|
| 379 |
+
|
| 380 |
+
/* INLINES */
|
| 381 |
+
|
| 382 |
+
.inline-group {
|
| 383 |
+
padding: 0;
|
| 384 |
+
margin: 0 0 30px;
|
| 385 |
+
}
|
| 386 |
+
|
| 387 |
+
.inline-group thead th {
|
| 388 |
+
padding: 8px 10px;
|
| 389 |
+
}
|
| 390 |
+
|
| 391 |
+
.inline-group .aligned label {
|
| 392 |
+
width: 160px;
|
| 393 |
+
}
|
| 394 |
+
|
| 395 |
+
.inline-related {
|
| 396 |
+
position: relative;
|
| 397 |
+
}
|
| 398 |
+
|
| 399 |
+
.inline-related h4,
|
| 400 |
+
.inline-related:not(.tabular) .collapse summary {
|
| 401 |
+
margin: 0;
|
| 402 |
+
color: var(--body-medium-color);
|
| 403 |
+
padding: 5px;
|
| 404 |
+
font-size: 0.8125rem;
|
| 405 |
+
background: var(--darkened-bg);
|
| 406 |
+
border: 1px solid var(--hairline-color);
|
| 407 |
+
border-left-color: var(--darkened-bg);
|
| 408 |
+
border-right-color: var(--darkened-bg);
|
| 409 |
+
}
|
| 410 |
+
|
| 411 |
+
.inline-related h3 span.delete {
|
| 412 |
+
float: right;
|
| 413 |
+
}
|
| 414 |
+
|
| 415 |
+
.inline-related h3 span.delete label {
|
| 416 |
+
margin-left: 2px;
|
| 417 |
+
font-size: 0.6875rem;
|
| 418 |
+
}
|
| 419 |
+
|
| 420 |
+
.inline-related fieldset {
|
| 421 |
+
margin: 0;
|
| 422 |
+
background: var(--body-bg);
|
| 423 |
+
border: none;
|
| 424 |
+
width: 100%;
|
| 425 |
+
}
|
| 426 |
+
|
| 427 |
+
.inline-group .tabular fieldset.module {
|
| 428 |
+
border: none;
|
| 429 |
+
}
|
| 430 |
+
|
| 431 |
+
.inline-related.tabular div.wrapper {
|
| 432 |
+
overflow-x: auto;
|
| 433 |
+
}
|
| 434 |
+
|
| 435 |
+
.inline-related.tabular fieldset.module table {
|
| 436 |
+
width: 100%;
|
| 437 |
+
}
|
| 438 |
+
|
| 439 |
+
.last-related fieldset {
|
| 440 |
+
border: none;
|
| 441 |
+
}
|
| 442 |
+
|
| 443 |
+
.inline-group .tabular tr.has_original td {
|
| 444 |
+
padding-top: 2em;
|
| 445 |
+
}
|
| 446 |
+
|
| 447 |
+
.inline-group .tabular tr td.original {
|
| 448 |
+
padding: 2px 0 0 0;
|
| 449 |
+
width: 0;
|
| 450 |
+
}
|
| 451 |
+
|
| 452 |
+
.inline-group .tabular th.original {
|
| 453 |
+
width: 0px;
|
| 454 |
+
padding: 0;
|
| 455 |
+
}
|
| 456 |
+
|
| 457 |
+
.inline-group .tabular td {
|
| 458 |
+
font-size: 1rem;
|
| 459 |
+
}
|
| 460 |
+
|
| 461 |
+
.inline-group .tabular td.original p {
|
| 462 |
+
position: absolute;
|
| 463 |
+
left: 0;
|
| 464 |
+
height: 1.2em;
|
| 465 |
+
padding: 2px 9px;
|
| 466 |
+
overflow: hidden;
|
| 467 |
+
font-size: 0.875rem;
|
| 468 |
+
font-weight: bold;
|
| 469 |
+
color: var(--body-quiet-color);
|
| 470 |
+
}
|
| 471 |
+
|
| 472 |
+
.inline-group div.add-row,
|
| 473 |
+
.inline-group .tabular tr.add-row td {
|
| 474 |
+
color: var(--body-quiet-color);
|
| 475 |
+
background: var(--darkened-bg);
|
| 476 |
+
padding: 8px 10px;
|
| 477 |
+
border-bottom: 1px solid var(--hairline-color);
|
| 478 |
+
}
|
| 479 |
+
|
| 480 |
+
.inline-group .tabular tr.add-row td {
|
| 481 |
+
padding: 8px 10px;
|
| 482 |
+
border-bottom: 1px solid var(--hairline-color);
|
| 483 |
+
}
|
| 484 |
+
|
| 485 |
+
.inline-group div.add-row a,
|
| 486 |
+
.inline-group .tabular tr.add-row td a {
|
| 487 |
+
font-size: 0.75rem;
|
| 488 |
+
}
|
| 489 |
+
|
| 490 |
+
.empty-form {
|
| 491 |
+
display: none;
|
| 492 |
+
}
|
| 493 |
+
|
| 494 |
+
/* RELATED FIELD ADD ONE / LOOKUP */
|
| 495 |
+
|
| 496 |
+
.related-lookup {
|
| 497 |
+
margin-left: 5px;
|
| 498 |
+
display: inline-block;
|
| 499 |
+
vertical-align: middle;
|
| 500 |
+
background-repeat: no-repeat;
|
| 501 |
+
background-size: 14px;
|
| 502 |
+
}
|
| 503 |
+
|
| 504 |
+
.related-lookup {
|
| 505 |
+
width: 1rem;
|
| 506 |
+
height: 1rem;
|
| 507 |
+
background-image: url(../img/search.svg);
|
| 508 |
+
}
|
| 509 |
+
|
| 510 |
+
form .related-widget-wrapper ul {
|
| 511 |
+
display: inline-block;
|
| 512 |
+
margin-left: 0;
|
| 513 |
+
padding-left: 0;
|
| 514 |
+
}
|
| 515 |
+
|
| 516 |
+
.clearable-file-input input {
|
| 517 |
+
margin-top: 0;
|
| 518 |
+
}
|
staticfiles/admin/css/login.css
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* LOGIN FORM */
|
| 2 |
+
|
| 3 |
+
.login {
|
| 4 |
+
background: var(--darkened-bg);
|
| 5 |
+
height: auto;
|
| 6 |
+
}
|
| 7 |
+
|
| 8 |
+
.login #header {
|
| 9 |
+
height: auto;
|
| 10 |
+
padding: 15px 16px;
|
| 11 |
+
justify-content: center;
|
| 12 |
+
}
|
| 13 |
+
|
| 14 |
+
.login #header h1 {
|
| 15 |
+
font-size: 1.125rem;
|
| 16 |
+
margin: 0;
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
.login #header h1 a {
|
| 20 |
+
color: var(--header-link-color);
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
.login #content {
|
| 24 |
+
padding: 20px;
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
.login #container {
|
| 28 |
+
background: var(--body-bg);
|
| 29 |
+
border: 1px solid var(--hairline-color);
|
| 30 |
+
border-radius: 4px;
|
| 31 |
+
overflow: hidden;
|
| 32 |
+
width: 28em;
|
| 33 |
+
min-width: 300px;
|
| 34 |
+
margin: 100px auto;
|
| 35 |
+
height: auto;
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
.login .form-row {
|
| 39 |
+
padding: 4px 0;
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
.login .form-row label {
|
| 43 |
+
display: block;
|
| 44 |
+
line-height: 2em;
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
.login .form-row #id_username, .login .form-row #id_password {
|
| 48 |
+
padding: 8px;
|
| 49 |
+
width: 100%;
|
| 50 |
+
box-sizing: border-box;
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
.login .submit-row {
|
| 54 |
+
padding: 1em 0 0 0;
|
| 55 |
+
margin: 0;
|
| 56 |
+
text-align: center;
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
.login .password-reset-link {
|
| 60 |
+
text-align: center;
|
| 61 |
+
}
|
staticfiles/admin/css/nav_sidebar.css
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
.sticky {
|
| 2 |
+
position: sticky;
|
| 3 |
+
top: 0;
|
| 4 |
+
max-height: 100vh;
|
| 5 |
+
}
|
| 6 |
+
|
| 7 |
+
.toggle-nav-sidebar {
|
| 8 |
+
z-index: 20;
|
| 9 |
+
left: 0;
|
| 10 |
+
display: flex;
|
| 11 |
+
align-items: center;
|
| 12 |
+
justify-content: center;
|
| 13 |
+
flex: 0 0 23px;
|
| 14 |
+
width: 23px;
|
| 15 |
+
border: 0;
|
| 16 |
+
border-right: 1px solid var(--hairline-color);
|
| 17 |
+
background-color: var(--body-bg);
|
| 18 |
+
cursor: pointer;
|
| 19 |
+
font-size: 1.25rem;
|
| 20 |
+
color: var(--link-fg);
|
| 21 |
+
padding: 0;
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
[dir="rtl"] .toggle-nav-sidebar {
|
| 25 |
+
border-left: 1px solid var(--hairline-color);
|
| 26 |
+
border-right: 0;
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
.toggle-nav-sidebar:hover,
|
| 30 |
+
.toggle-nav-sidebar:focus {
|
| 31 |
+
background-color: var(--darkened-bg);
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
#nav-sidebar {
|
| 35 |
+
z-index: 15;
|
| 36 |
+
flex: 0 0 275px;
|
| 37 |
+
left: -276px;
|
| 38 |
+
margin-left: -276px;
|
| 39 |
+
border-top: 1px solid transparent;
|
| 40 |
+
border-right: 1px solid var(--hairline-color);
|
| 41 |
+
background-color: var(--body-bg);
|
| 42 |
+
overflow: auto;
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
[dir="rtl"] #nav-sidebar {
|
| 46 |
+
border-left: 1px solid var(--hairline-color);
|
| 47 |
+
border-right: 0;
|
| 48 |
+
left: 0;
|
| 49 |
+
margin-left: 0;
|
| 50 |
+
right: -276px;
|
| 51 |
+
margin-right: -276px;
|
| 52 |
+
}
|
| 53 |
+
|
| 54 |
+
.toggle-nav-sidebar::before {
|
| 55 |
+
content: '\00BB';
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
.main.shifted .toggle-nav-sidebar::before {
|
| 59 |
+
content: '\00AB';
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
.main > #nav-sidebar {
|
| 63 |
+
visibility: hidden;
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
.main.shifted > #nav-sidebar {
|
| 67 |
+
margin-left: 0;
|
| 68 |
+
visibility: visible;
|
| 69 |
+
}
|
| 70 |
+
|
| 71 |
+
[dir="rtl"] .main.shifted > #nav-sidebar {
|
| 72 |
+
margin-right: 0;
|
| 73 |
+
}
|
| 74 |
+
|
| 75 |
+
#nav-sidebar .module th {
|
| 76 |
+
width: 100%;
|
| 77 |
+
overflow-wrap: anywhere;
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
#nav-sidebar .module th,
|
| 81 |
+
#nav-sidebar .module caption {
|
| 82 |
+
padding-left: 16px;
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
+
#nav-sidebar .module td {
|
| 86 |
+
white-space: nowrap;
|
| 87 |
+
}
|
| 88 |
+
|
| 89 |
+
[dir="rtl"] #nav-sidebar .module th,
|
| 90 |
+
[dir="rtl"] #nav-sidebar .module caption {
|
| 91 |
+
padding-left: 8px;
|
| 92 |
+
padding-right: 16px;
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
#nav-sidebar .current-app .section:link,
|
| 96 |
+
#nav-sidebar .current-app .section:visited {
|
| 97 |
+
color: var(--header-color);
|
| 98 |
+
font-weight: bold;
|
| 99 |
+
}
|
| 100 |
+
|
| 101 |
+
#nav-sidebar .current-model {
|
| 102 |
+
background: var(--selected-row);
|
| 103 |
+
}
|
| 104 |
+
|
| 105 |
+
@media (forced-colors: active) {
|
| 106 |
+
#nav-sidebar .current-model {
|
| 107 |
+
background-color: SelectedItem;
|
| 108 |
+
}
|
| 109 |
+
}
|
| 110 |
+
|
| 111 |
+
.main > #nav-sidebar + .content {
|
| 112 |
+
max-width: calc(100% - 23px);
|
| 113 |
+
}
|
| 114 |
+
|
| 115 |
+
.main.shifted > #nav-sidebar + .content {
|
| 116 |
+
max-width: calc(100% - 299px);
|
| 117 |
+
}
|
| 118 |
+
|
| 119 |
+
@media (max-width: 767px) {
|
| 120 |
+
#nav-sidebar, #toggle-nav-sidebar {
|
| 121 |
+
display: none;
|
| 122 |
+
}
|
| 123 |
+
|
| 124 |
+
.main > #nav-sidebar + .content,
|
| 125 |
+
.main.shifted > #nav-sidebar + .content {
|
| 126 |
+
max-width: 100%;
|
| 127 |
+
}
|
| 128 |
+
}
|
| 129 |
+
|
| 130 |
+
#nav-filter {
|
| 131 |
+
width: 100%;
|
| 132 |
+
box-sizing: border-box;
|
| 133 |
+
padding: 2px 5px;
|
| 134 |
+
margin: 5px 0;
|
| 135 |
+
border: 1px solid var(--border-color);
|
| 136 |
+
background-color: var(--darkened-bg);
|
| 137 |
+
color: var(--body-fg);
|
| 138 |
+
}
|
| 139 |
+
|
| 140 |
+
#nav-filter:focus {
|
| 141 |
+
border-color: var(--body-quiet-color);
|
| 142 |
+
}
|
| 143 |
+
|
| 144 |
+
#nav-filter.no-results {
|
| 145 |
+
background: var(--message-error-bg);
|
| 146 |
+
}
|
| 147 |
+
|
| 148 |
+
#nav-sidebar table {
|
| 149 |
+
width: 100%;
|
| 150 |
+
}
|
staticfiles/admin/css/responsive.css
ADDED
|
@@ -0,0 +1,885 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* Tablets */
|
| 2 |
+
|
| 3 |
+
input[type="submit"], button {
|
| 4 |
+
-webkit-appearance: none;
|
| 5 |
+
appearance: none;
|
| 6 |
+
}
|
| 7 |
+
|
| 8 |
+
@media (max-width: 1024px) {
|
| 9 |
+
/* Basic */
|
| 10 |
+
|
| 11 |
+
html {
|
| 12 |
+
-webkit-text-size-adjust: 100%;
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
td, th {
|
| 16 |
+
padding: 10px;
|
| 17 |
+
font-size: 0.875rem;
|
| 18 |
+
}
|
| 19 |
+
|
| 20 |
+
.small {
|
| 21 |
+
font-size: 0.75rem;
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
/* Layout */
|
| 25 |
+
|
| 26 |
+
#container {
|
| 27 |
+
min-width: 0;
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
#content {
|
| 31 |
+
padding: 15px 20px 20px;
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
div.breadcrumbs {
|
| 35 |
+
padding: 10px 30px;
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
/* Header */
|
| 39 |
+
|
| 40 |
+
#header {
|
| 41 |
+
flex-direction: column;
|
| 42 |
+
padding: 15px 30px;
|
| 43 |
+
justify-content: flex-start;
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
#site-name {
|
| 47 |
+
margin: 0 0 8px;
|
| 48 |
+
line-height: 1.2;
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
#user-tools {
|
| 52 |
+
margin: 0;
|
| 53 |
+
font-weight: 400;
|
| 54 |
+
line-height: 1.85;
|
| 55 |
+
text-align: left;
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
#user-tools a {
|
| 59 |
+
display: inline-block;
|
| 60 |
+
line-height: 1.4;
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
/* Dashboard */
|
| 64 |
+
|
| 65 |
+
.dashboard #content {
|
| 66 |
+
width: auto;
|
| 67 |
+
}
|
| 68 |
+
|
| 69 |
+
#content-related {
|
| 70 |
+
margin-right: -290px;
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
.colSM #content-related {
|
| 74 |
+
margin-left: -290px;
|
| 75 |
+
}
|
| 76 |
+
|
| 77 |
+
.colMS {
|
| 78 |
+
margin-right: 290px;
|
| 79 |
+
}
|
| 80 |
+
|
| 81 |
+
.colSM {
|
| 82 |
+
margin-left: 290px;
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
+
.dashboard .module table td a {
|
| 86 |
+
padding-right: 0;
|
| 87 |
+
}
|
| 88 |
+
|
| 89 |
+
td .changelink, td .addlink {
|
| 90 |
+
font-size: 0.8125rem;
|
| 91 |
+
}
|
| 92 |
+
|
| 93 |
+
/* Changelist */
|
| 94 |
+
|
| 95 |
+
#toolbar {
|
| 96 |
+
border: none;
|
| 97 |
+
padding: 15px;
|
| 98 |
+
}
|
| 99 |
+
|
| 100 |
+
#changelist-search > div {
|
| 101 |
+
display: flex;
|
| 102 |
+
flex-wrap: nowrap;
|
| 103 |
+
max-width: 480px;
|
| 104 |
+
}
|
| 105 |
+
|
| 106 |
+
#changelist-search label {
|
| 107 |
+
line-height: 1.375rem;
|
| 108 |
+
}
|
| 109 |
+
|
| 110 |
+
#toolbar form #searchbar {
|
| 111 |
+
flex: 1 0 auto;
|
| 112 |
+
width: 0;
|
| 113 |
+
height: 1.375rem;
|
| 114 |
+
margin: 0 10px 0 6px;
|
| 115 |
+
}
|
| 116 |
+
|
| 117 |
+
#toolbar form input[type=submit] {
|
| 118 |
+
flex: 0 1 auto;
|
| 119 |
+
}
|
| 120 |
+
|
| 121 |
+
#changelist-search .quiet {
|
| 122 |
+
width: 0;
|
| 123 |
+
flex: 1 0 auto;
|
| 124 |
+
margin: 5px 0 0 25px;
|
| 125 |
+
}
|
| 126 |
+
|
| 127 |
+
#changelist .actions {
|
| 128 |
+
display: flex;
|
| 129 |
+
flex-wrap: wrap;
|
| 130 |
+
padding: 15px 0;
|
| 131 |
+
}
|
| 132 |
+
|
| 133 |
+
#changelist .actions label {
|
| 134 |
+
display: flex;
|
| 135 |
+
}
|
| 136 |
+
|
| 137 |
+
#changelist .actions select {
|
| 138 |
+
background: var(--body-bg);
|
| 139 |
+
}
|
| 140 |
+
|
| 141 |
+
#changelist .actions .button {
|
| 142 |
+
min-width: 48px;
|
| 143 |
+
margin: 0 10px;
|
| 144 |
+
}
|
| 145 |
+
|
| 146 |
+
#changelist .actions span.all,
|
| 147 |
+
#changelist .actions span.clear,
|
| 148 |
+
#changelist .actions span.question,
|
| 149 |
+
#changelist .actions span.action-counter {
|
| 150 |
+
font-size: 0.6875rem;
|
| 151 |
+
margin: 0 10px 0 0;
|
| 152 |
+
}
|
| 153 |
+
|
| 154 |
+
#changelist-filter {
|
| 155 |
+
flex-basis: 200px;
|
| 156 |
+
}
|
| 157 |
+
|
| 158 |
+
.change-list .filtered .results,
|
| 159 |
+
.change-list .filtered .paginator,
|
| 160 |
+
.filtered #toolbar,
|
| 161 |
+
.filtered .actions,
|
| 162 |
+
|
| 163 |
+
#changelist .paginator {
|
| 164 |
+
border-top-color: var(--hairline-color); /* XXX Is this used at all? */
|
| 165 |
+
}
|
| 166 |
+
|
| 167 |
+
#changelist .results + .paginator {
|
| 168 |
+
border-top: none;
|
| 169 |
+
}
|
| 170 |
+
|
| 171 |
+
/* Forms */
|
| 172 |
+
|
| 173 |
+
legend,
|
| 174 |
+
label {
|
| 175 |
+
font-size: 1rem;
|
| 176 |
+
}
|
| 177 |
+
|
| 178 |
+
/*
|
| 179 |
+
Minifiers remove the default (text) "type" attribute from "input" HTML
|
| 180 |
+
tags. Add input:not([type]) to make the CSS stylesheet work the same.
|
| 181 |
+
*/
|
| 182 |
+
.form-row input:not([type]),
|
| 183 |
+
.form-row input[type=text],
|
| 184 |
+
.form-row input[type=password],
|
| 185 |
+
.form-row input[type=email],
|
| 186 |
+
.form-row input[type=url],
|
| 187 |
+
.form-row input[type=tel],
|
| 188 |
+
.form-row input[type=number],
|
| 189 |
+
.form-row textarea,
|
| 190 |
+
.form-row select,
|
| 191 |
+
.form-row .vTextField {
|
| 192 |
+
box-sizing: border-box;
|
| 193 |
+
margin: 0;
|
| 194 |
+
padding: 6px 8px;
|
| 195 |
+
min-height: 2.25rem;
|
| 196 |
+
font-size: 1rem;
|
| 197 |
+
}
|
| 198 |
+
|
| 199 |
+
.form-row select {
|
| 200 |
+
height: 2.25rem;
|
| 201 |
+
}
|
| 202 |
+
|
| 203 |
+
.form-row select[multiple] {
|
| 204 |
+
height: auto;
|
| 205 |
+
min-height: 0;
|
| 206 |
+
}
|
| 207 |
+
|
| 208 |
+
fieldset .fieldBox + .fieldBox {
|
| 209 |
+
margin-top: 10px;
|
| 210 |
+
padding-top: 10px;
|
| 211 |
+
border-top: 1px solid var(--hairline-color);
|
| 212 |
+
}
|
| 213 |
+
|
| 214 |
+
textarea {
|
| 215 |
+
max-width: 100%;
|
| 216 |
+
max-height: 120px;
|
| 217 |
+
}
|
| 218 |
+
|
| 219 |
+
.aligned label {
|
| 220 |
+
padding-top: 6px;
|
| 221 |
+
}
|
| 222 |
+
|
| 223 |
+
.aligned .related-lookup,
|
| 224 |
+
.aligned .datetimeshortcuts,
|
| 225 |
+
.aligned .related-lookup + strong {
|
| 226 |
+
align-self: center;
|
| 227 |
+
margin-left: 15px;
|
| 228 |
+
}
|
| 229 |
+
|
| 230 |
+
form .aligned div.radiolist {
|
| 231 |
+
margin-left: 2px;
|
| 232 |
+
}
|
| 233 |
+
|
| 234 |
+
.submit-row {
|
| 235 |
+
padding: 8px;
|
| 236 |
+
}
|
| 237 |
+
|
| 238 |
+
.submit-row a.deletelink {
|
| 239 |
+
padding: 10px 7px;
|
| 240 |
+
}
|
| 241 |
+
|
| 242 |
+
.button, input[type=submit], input[type=button], .submit-row input, a.button {
|
| 243 |
+
padding: 7px;
|
| 244 |
+
}
|
| 245 |
+
|
| 246 |
+
/* Selector */
|
| 247 |
+
|
| 248 |
+
.selector {
|
| 249 |
+
display: flex;
|
| 250 |
+
width: 100%;
|
| 251 |
+
}
|
| 252 |
+
|
| 253 |
+
.selector .selector-filter {
|
| 254 |
+
display: flex;
|
| 255 |
+
align-items: center;
|
| 256 |
+
}
|
| 257 |
+
|
| 258 |
+
.selector .selector-filter input {
|
| 259 |
+
width: 100%;
|
| 260 |
+
min-height: 0;
|
| 261 |
+
flex: 1 1;
|
| 262 |
+
}
|
| 263 |
+
|
| 264 |
+
.selector-available, .selector-chosen {
|
| 265 |
+
width: auto;
|
| 266 |
+
flex: 1 1;
|
| 267 |
+
display: flex;
|
| 268 |
+
flex-direction: column;
|
| 269 |
+
}
|
| 270 |
+
|
| 271 |
+
.selector select {
|
| 272 |
+
width: 100%;
|
| 273 |
+
flex: 1 0 auto;
|
| 274 |
+
margin-bottom: 5px;
|
| 275 |
+
}
|
| 276 |
+
|
| 277 |
+
.selector-chooseall, .selector-clearall {
|
| 278 |
+
align-self: center;
|
| 279 |
+
}
|
| 280 |
+
|
| 281 |
+
.stacked {
|
| 282 |
+
flex-direction: column;
|
| 283 |
+
max-width: 480px;
|
| 284 |
+
}
|
| 285 |
+
|
| 286 |
+
.stacked > * {
|
| 287 |
+
flex: 0 1 auto;
|
| 288 |
+
}
|
| 289 |
+
|
| 290 |
+
.stacked select {
|
| 291 |
+
margin-bottom: 0;
|
| 292 |
+
}
|
| 293 |
+
|
| 294 |
+
.stacked .selector-available, .stacked .selector-chosen {
|
| 295 |
+
width: auto;
|
| 296 |
+
}
|
| 297 |
+
|
| 298 |
+
.stacked ul.selector-chooser {
|
| 299 |
+
padding: 0 2px;
|
| 300 |
+
transform: none;
|
| 301 |
+
}
|
| 302 |
+
|
| 303 |
+
.stacked .selector-chooser li {
|
| 304 |
+
padding: 3px;
|
| 305 |
+
}
|
| 306 |
+
|
| 307 |
+
.help-tooltip, .selector .help-icon {
|
| 308 |
+
display: none;
|
| 309 |
+
}
|
| 310 |
+
|
| 311 |
+
.datetime input {
|
| 312 |
+
width: 50%;
|
| 313 |
+
max-width: 120px;
|
| 314 |
+
}
|
| 315 |
+
|
| 316 |
+
.datetime span {
|
| 317 |
+
font-size: 0.8125rem;
|
| 318 |
+
}
|
| 319 |
+
|
| 320 |
+
.datetime .timezonewarning {
|
| 321 |
+
display: block;
|
| 322 |
+
font-size: 0.6875rem;
|
| 323 |
+
color: var(--body-quiet-color);
|
| 324 |
+
}
|
| 325 |
+
|
| 326 |
+
.datetimeshortcuts {
|
| 327 |
+
color: var(--border-color); /* XXX Redundant, .datetime span also sets #ccc */
|
| 328 |
+
}
|
| 329 |
+
|
| 330 |
+
.form-row .datetime input.vDateField, .form-row .datetime input.vTimeField {
|
| 331 |
+
width: 75%;
|
| 332 |
+
}
|
| 333 |
+
|
| 334 |
+
.inline-group {
|
| 335 |
+
overflow: auto;
|
| 336 |
+
}
|
| 337 |
+
|
| 338 |
+
/* Messages */
|
| 339 |
+
|
| 340 |
+
ul.messagelist li {
|
| 341 |
+
padding: 10px 10px 10px 55px;
|
| 342 |
+
background-position-x: 30px;
|
| 343 |
+
}
|
| 344 |
+
|
| 345 |
+
/* Login */
|
| 346 |
+
|
| 347 |
+
.login #header {
|
| 348 |
+
padding: 15px 20px;
|
| 349 |
+
}
|
| 350 |
+
|
| 351 |
+
.login #site-name {
|
| 352 |
+
margin: 0;
|
| 353 |
+
}
|
| 354 |
+
|
| 355 |
+
/* GIS */
|
| 356 |
+
|
| 357 |
+
div.olMap {
|
| 358 |
+
max-width: calc(100vw - 30px);
|
| 359 |
+
max-height: 300px;
|
| 360 |
+
}
|
| 361 |
+
|
| 362 |
+
.olMap + .clear_features {
|
| 363 |
+
display: block;
|
| 364 |
+
margin-top: 10px;
|
| 365 |
+
}
|
| 366 |
+
|
| 367 |
+
/* Docs */
|
| 368 |
+
|
| 369 |
+
.module table.xfull {
|
| 370 |
+
width: 100%;
|
| 371 |
+
}
|
| 372 |
+
|
| 373 |
+
pre.literal-block {
|
| 374 |
+
overflow: auto;
|
| 375 |
+
}
|
| 376 |
+
}
|
| 377 |
+
|
| 378 |
+
/* Mobile */
|
| 379 |
+
|
| 380 |
+
@media (max-width: 767px) {
|
| 381 |
+
/* Layout */
|
| 382 |
+
|
| 383 |
+
#header, #content {
|
| 384 |
+
padding: 15px;
|
| 385 |
+
}
|
| 386 |
+
|
| 387 |
+
div.breadcrumbs {
|
| 388 |
+
padding: 10px 15px;
|
| 389 |
+
}
|
| 390 |
+
|
| 391 |
+
/* Dashboard */
|
| 392 |
+
|
| 393 |
+
.colMS, .colSM {
|
| 394 |
+
margin: 0;
|
| 395 |
+
}
|
| 396 |
+
|
| 397 |
+
#content-related, .colSM #content-related {
|
| 398 |
+
width: 100%;
|
| 399 |
+
margin: 0;
|
| 400 |
+
}
|
| 401 |
+
|
| 402 |
+
#content-related .module {
|
| 403 |
+
margin-bottom: 0;
|
| 404 |
+
}
|
| 405 |
+
|
| 406 |
+
#content-related .module h2 {
|
| 407 |
+
padding: 10px 15px;
|
| 408 |
+
font-size: 1rem;
|
| 409 |
+
}
|
| 410 |
+
|
| 411 |
+
/* Changelist */
|
| 412 |
+
|
| 413 |
+
#changelist .changelist-form-container {
|
| 414 |
+
flex-direction: column;
|
| 415 |
+
}
|
| 416 |
+
|
| 417 |
+
#changelist .changelist-form-container:has(#changelist-filter) > div {
|
| 418 |
+
max-width: 100%;
|
| 419 |
+
width: 100%;
|
| 420 |
+
}
|
| 421 |
+
|
| 422 |
+
#toolbar {
|
| 423 |
+
padding: 10px;
|
| 424 |
+
}
|
| 425 |
+
|
| 426 |
+
#changelist-filter {
|
| 427 |
+
margin-left: 0;
|
| 428 |
+
}
|
| 429 |
+
|
| 430 |
+
#changelist .actions label {
|
| 431 |
+
flex: 1 1;
|
| 432 |
+
}
|
| 433 |
+
|
| 434 |
+
#changelist .actions select {
|
| 435 |
+
flex: 1 0;
|
| 436 |
+
width: 100%;
|
| 437 |
+
}
|
| 438 |
+
|
| 439 |
+
#changelist .actions span {
|
| 440 |
+
flex: 1 0 100%;
|
| 441 |
+
}
|
| 442 |
+
|
| 443 |
+
#changelist-filter {
|
| 444 |
+
width: 100%;
|
| 445 |
+
margin-top: 30px;
|
| 446 |
+
}
|
| 447 |
+
|
| 448 |
+
.object-tools {
|
| 449 |
+
text-align: left;
|
| 450 |
+
}
|
| 451 |
+
|
| 452 |
+
/* Forms */
|
| 453 |
+
|
| 454 |
+
.form-row {
|
| 455 |
+
padding: 15px 0;
|
| 456 |
+
}
|
| 457 |
+
|
| 458 |
+
.aligned .form-row,
|
| 459 |
+
.aligned .form-row > div {
|
| 460 |
+
max-width: 100vw;
|
| 461 |
+
}
|
| 462 |
+
|
| 463 |
+
.aligned .form-row > div {
|
| 464 |
+
width: calc(100vw - 30px);
|
| 465 |
+
}
|
| 466 |
+
|
| 467 |
+
.flex-container {
|
| 468 |
+
flex-flow: column;
|
| 469 |
+
}
|
| 470 |
+
|
| 471 |
+
.flex-container.checkbox-row {
|
| 472 |
+
flex-flow: row;
|
| 473 |
+
}
|
| 474 |
+
|
| 475 |
+
textarea {
|
| 476 |
+
max-width: none;
|
| 477 |
+
}
|
| 478 |
+
|
| 479 |
+
.vURLField {
|
| 480 |
+
width: auto;
|
| 481 |
+
}
|
| 482 |
+
|
| 483 |
+
fieldset .fieldBox + .fieldBox {
|
| 484 |
+
margin-top: 15px;
|
| 485 |
+
padding-top: 15px;
|
| 486 |
+
}
|
| 487 |
+
|
| 488 |
+
.aligned legend,
|
| 489 |
+
.aligned label {
|
| 490 |
+
width: 100%;
|
| 491 |
+
min-width: auto;
|
| 492 |
+
padding: 0 0 10px;
|
| 493 |
+
}
|
| 494 |
+
|
| 495 |
+
.aligned label:after {
|
| 496 |
+
max-height: 0;
|
| 497 |
+
}
|
| 498 |
+
|
| 499 |
+
.aligned .form-row input,
|
| 500 |
+
.aligned .form-row select,
|
| 501 |
+
.aligned .form-row textarea {
|
| 502 |
+
flex: 1 1 auto;
|
| 503 |
+
max-width: 100%;
|
| 504 |
+
}
|
| 505 |
+
|
| 506 |
+
.aligned .checkbox-row input {
|
| 507 |
+
flex: 0 1 auto;
|
| 508 |
+
margin: 0;
|
| 509 |
+
}
|
| 510 |
+
|
| 511 |
+
.aligned .vCheckboxLabel {
|
| 512 |
+
flex: 1 0;
|
| 513 |
+
padding: 1px 0 0 5px;
|
| 514 |
+
}
|
| 515 |
+
|
| 516 |
+
.aligned label + p,
|
| 517 |
+
.aligned label + div.help,
|
| 518 |
+
.aligned label + div.readonly {
|
| 519 |
+
padding: 0;
|
| 520 |
+
margin-left: 0;
|
| 521 |
+
}
|
| 522 |
+
|
| 523 |
+
.aligned p.file-upload {
|
| 524 |
+
font-size: 0.8125rem;
|
| 525 |
+
}
|
| 526 |
+
|
| 527 |
+
span.clearable-file-input {
|
| 528 |
+
margin-left: 15px;
|
| 529 |
+
}
|
| 530 |
+
|
| 531 |
+
span.clearable-file-input label {
|
| 532 |
+
font-size: 0.8125rem;
|
| 533 |
+
padding-bottom: 0;
|
| 534 |
+
}
|
| 535 |
+
|
| 536 |
+
.aligned .timezonewarning {
|
| 537 |
+
flex: 1 0 100%;
|
| 538 |
+
margin-top: 5px;
|
| 539 |
+
}
|
| 540 |
+
|
| 541 |
+
form .aligned .form-row div.help {
|
| 542 |
+
width: 100%;
|
| 543 |
+
margin: 5px 0 0;
|
| 544 |
+
padding: 0;
|
| 545 |
+
}
|
| 546 |
+
|
| 547 |
+
form .aligned ul,
|
| 548 |
+
form .aligned ul.errorlist {
|
| 549 |
+
margin-left: 0;
|
| 550 |
+
padding-left: 0;
|
| 551 |
+
}
|
| 552 |
+
|
| 553 |
+
form .aligned div.radiolist {
|
| 554 |
+
margin-top: 5px;
|
| 555 |
+
margin-right: 15px;
|
| 556 |
+
margin-bottom: -3px;
|
| 557 |
+
}
|
| 558 |
+
|
| 559 |
+
form .aligned div.radiolist:not(.inline) div + div {
|
| 560 |
+
margin-top: 5px;
|
| 561 |
+
}
|
| 562 |
+
|
| 563 |
+
form .aligned fieldset div.flex-container {
|
| 564 |
+
display: unset;
|
| 565 |
+
}
|
| 566 |
+
|
| 567 |
+
/* Related widget */
|
| 568 |
+
|
| 569 |
+
.related-widget-wrapper {
|
| 570 |
+
width: 100%;
|
| 571 |
+
display: flex;
|
| 572 |
+
align-items: flex-start;
|
| 573 |
+
}
|
| 574 |
+
|
| 575 |
+
.related-widget-wrapper .selector {
|
| 576 |
+
order: 1;
|
| 577 |
+
flex: 1 0 auto;
|
| 578 |
+
}
|
| 579 |
+
|
| 580 |
+
.related-widget-wrapper > a {
|
| 581 |
+
order: 2;
|
| 582 |
+
}
|
| 583 |
+
|
| 584 |
+
.related-widget-wrapper .radiolist ~ a {
|
| 585 |
+
align-self: flex-end;
|
| 586 |
+
}
|
| 587 |
+
|
| 588 |
+
.related-widget-wrapper > select ~ a {
|
| 589 |
+
align-self: center;
|
| 590 |
+
}
|
| 591 |
+
|
| 592 |
+
/* Selector */
|
| 593 |
+
|
| 594 |
+
.selector {
|
| 595 |
+
flex-direction: column;
|
| 596 |
+
gap: 10px 0;
|
| 597 |
+
}
|
| 598 |
+
|
| 599 |
+
.selector-available, .selector-chosen {
|
| 600 |
+
flex: 1 1 auto;
|
| 601 |
+
}
|
| 602 |
+
|
| 603 |
+
.selector select {
|
| 604 |
+
max-height: 96px;
|
| 605 |
+
}
|
| 606 |
+
|
| 607 |
+
.selector ul.selector-chooser {
|
| 608 |
+
display: flex;
|
| 609 |
+
width: 60px;
|
| 610 |
+
height: 30px;
|
| 611 |
+
padding: 0 2px;
|
| 612 |
+
transform: none;
|
| 613 |
+
}
|
| 614 |
+
|
| 615 |
+
.selector ul.selector-chooser li {
|
| 616 |
+
float: left;
|
| 617 |
+
}
|
| 618 |
+
|
| 619 |
+
.selector-remove {
|
| 620 |
+
background-position: 0 0;
|
| 621 |
+
}
|
| 622 |
+
|
| 623 |
+
:enabled.selector-remove:focus, :enabled.selector-remove:hover {
|
| 624 |
+
background-position: 0 -24px;
|
| 625 |
+
}
|
| 626 |
+
|
| 627 |
+
.selector-add {
|
| 628 |
+
background-position: 0 -48px;
|
| 629 |
+
}
|
| 630 |
+
|
| 631 |
+
:enabled.selector-add:focus, :enabled.selector-add:hover {
|
| 632 |
+
background-position: 0 -72px;
|
| 633 |
+
}
|
| 634 |
+
|
| 635 |
+
/* Inlines */
|
| 636 |
+
|
| 637 |
+
.inline-group[data-inline-type="stacked"] .inline-related {
|
| 638 |
+
border: 1px solid var(--hairline-color);
|
| 639 |
+
border-radius: 4px;
|
| 640 |
+
margin-top: 15px;
|
| 641 |
+
overflow: auto;
|
| 642 |
+
}
|
| 643 |
+
|
| 644 |
+
.inline-group[data-inline-type="stacked"] .inline-related > * {
|
| 645 |
+
box-sizing: border-box;
|
| 646 |
+
}
|
| 647 |
+
|
| 648 |
+
.inline-group[data-inline-type="stacked"] .inline-related .module {
|
| 649 |
+
padding: 0 10px;
|
| 650 |
+
}
|
| 651 |
+
|
| 652 |
+
.inline-group[data-inline-type="stacked"] .inline-related .module .form-row {
|
| 653 |
+
border-top: 1px solid var(--hairline-color);
|
| 654 |
+
border-bottom: none;
|
| 655 |
+
}
|
| 656 |
+
|
| 657 |
+
.inline-group[data-inline-type="stacked"] .inline-related .module .form-row:first-child {
|
| 658 |
+
border-top: none;
|
| 659 |
+
}
|
| 660 |
+
|
| 661 |
+
.inline-group[data-inline-type="stacked"] .inline-related h3 {
|
| 662 |
+
padding: 10px;
|
| 663 |
+
border-top-width: 0;
|
| 664 |
+
border-bottom-width: 2px;
|
| 665 |
+
display: flex;
|
| 666 |
+
flex-wrap: wrap;
|
| 667 |
+
align-items: center;
|
| 668 |
+
}
|
| 669 |
+
|
| 670 |
+
.inline-group[data-inline-type="stacked"] .inline-related h3 .inline_label {
|
| 671 |
+
margin-right: auto;
|
| 672 |
+
}
|
| 673 |
+
|
| 674 |
+
.inline-group[data-inline-type="stacked"] .inline-related h3 span.delete {
|
| 675 |
+
float: none;
|
| 676 |
+
flex: 1 1 100%;
|
| 677 |
+
margin-top: 5px;
|
| 678 |
+
}
|
| 679 |
+
|
| 680 |
+
.inline-group[data-inline-type="stacked"] .aligned .form-row > div:not([class]) {
|
| 681 |
+
width: 100%;
|
| 682 |
+
}
|
| 683 |
+
|
| 684 |
+
.inline-group[data-inline-type="stacked"] .aligned label {
|
| 685 |
+
width: 100%;
|
| 686 |
+
}
|
| 687 |
+
|
| 688 |
+
.inline-group[data-inline-type="stacked"] div.add-row {
|
| 689 |
+
margin-top: 15px;
|
| 690 |
+
border: 1px solid var(--hairline-color);
|
| 691 |
+
border-radius: 4px;
|
| 692 |
+
}
|
| 693 |
+
|
| 694 |
+
.inline-group div.add-row,
|
| 695 |
+
.inline-group .tabular tr.add-row td {
|
| 696 |
+
padding: 0;
|
| 697 |
+
}
|
| 698 |
+
|
| 699 |
+
.inline-group div.add-row a,
|
| 700 |
+
.inline-group .tabular tr.add-row td a {
|
| 701 |
+
display: block;
|
| 702 |
+
padding: 8px 10px 8px 26px;
|
| 703 |
+
background-position: 8px 9px;
|
| 704 |
+
}
|
| 705 |
+
|
| 706 |
+
/* Submit row */
|
| 707 |
+
|
| 708 |
+
.submit-row {
|
| 709 |
+
padding: 10px;
|
| 710 |
+
margin: 0 0 15px;
|
| 711 |
+
flex-direction: column;
|
| 712 |
+
gap: 8px;
|
| 713 |
+
}
|
| 714 |
+
|
| 715 |
+
.submit-row input, .submit-row input.default, .submit-row a {
|
| 716 |
+
text-align: center;
|
| 717 |
+
}
|
| 718 |
+
|
| 719 |
+
.submit-row a.closelink {
|
| 720 |
+
padding: 10px 0;
|
| 721 |
+
text-align: center;
|
| 722 |
+
}
|
| 723 |
+
|
| 724 |
+
.submit-row a.deletelink {
|
| 725 |
+
margin: 0;
|
| 726 |
+
}
|
| 727 |
+
|
| 728 |
+
/* Messages */
|
| 729 |
+
|
| 730 |
+
ul.messagelist li {
|
| 731 |
+
padding: 10px 10px 10px 40px;
|
| 732 |
+
background-position-x: 15px;
|
| 733 |
+
}
|
| 734 |
+
|
| 735 |
+
/* Paginator */
|
| 736 |
+
|
| 737 |
+
.paginator .this-page, .paginator a:link, .paginator a:visited {
|
| 738 |
+
padding: 4px 10px;
|
| 739 |
+
}
|
| 740 |
+
|
| 741 |
+
/* Login */
|
| 742 |
+
|
| 743 |
+
body.login {
|
| 744 |
+
padding: 0 15px;
|
| 745 |
+
}
|
| 746 |
+
|
| 747 |
+
.login #container {
|
| 748 |
+
width: auto;
|
| 749 |
+
max-width: 480px;
|
| 750 |
+
margin: 50px auto;
|
| 751 |
+
}
|
| 752 |
+
|
| 753 |
+
.login #header,
|
| 754 |
+
.login #content {
|
| 755 |
+
padding: 15px;
|
| 756 |
+
}
|
| 757 |
+
|
| 758 |
+
.login #content-main {
|
| 759 |
+
float: none;
|
| 760 |
+
}
|
| 761 |
+
|
| 762 |
+
.login .form-row {
|
| 763 |
+
padding: 0;
|
| 764 |
+
}
|
| 765 |
+
|
| 766 |
+
.login .form-row + .form-row {
|
| 767 |
+
margin-top: 15px;
|
| 768 |
+
}
|
| 769 |
+
|
| 770 |
+
.login .form-row label {
|
| 771 |
+
margin: 0 0 5px;
|
| 772 |
+
line-height: 1.2;
|
| 773 |
+
}
|
| 774 |
+
|
| 775 |
+
.login .submit-row {
|
| 776 |
+
padding: 15px 0 0;
|
| 777 |
+
}
|
| 778 |
+
|
| 779 |
+
.login br {
|
| 780 |
+
display: none;
|
| 781 |
+
}
|
| 782 |
+
|
| 783 |
+
.login .submit-row input {
|
| 784 |
+
margin: 0;
|
| 785 |
+
text-transform: uppercase;
|
| 786 |
+
}
|
| 787 |
+
|
| 788 |
+
.errornote {
|
| 789 |
+
margin: 0 0 20px;
|
| 790 |
+
padding: 8px 12px;
|
| 791 |
+
font-size: 0.8125rem;
|
| 792 |
+
}
|
| 793 |
+
|
| 794 |
+
/* Calendar and clock */
|
| 795 |
+
|
| 796 |
+
.calendarbox, .clockbox {
|
| 797 |
+
position: fixed !important;
|
| 798 |
+
top: 50% !important;
|
| 799 |
+
left: 50% !important;
|
| 800 |
+
transform: translate(-50%, -50%);
|
| 801 |
+
margin: 0;
|
| 802 |
+
border: none;
|
| 803 |
+
overflow: visible;
|
| 804 |
+
}
|
| 805 |
+
|
| 806 |
+
.calendarbox:before, .clockbox:before {
|
| 807 |
+
content: '';
|
| 808 |
+
position: fixed;
|
| 809 |
+
top: 50%;
|
| 810 |
+
left: 50%;
|
| 811 |
+
width: 100vw;
|
| 812 |
+
height: 100vh;
|
| 813 |
+
background: rgba(0, 0, 0, 0.75);
|
| 814 |
+
transform: translate(-50%, -50%);
|
| 815 |
+
}
|
| 816 |
+
|
| 817 |
+
.calendarbox > *, .clockbox > * {
|
| 818 |
+
position: relative;
|
| 819 |
+
z-index: 1;
|
| 820 |
+
}
|
| 821 |
+
|
| 822 |
+
.calendarbox > div:first-child {
|
| 823 |
+
z-index: 2;
|
| 824 |
+
}
|
| 825 |
+
|
| 826 |
+
.calendarbox .calendar, .clockbox h2 {
|
| 827 |
+
border-radius: 4px 4px 0 0;
|
| 828 |
+
overflow: hidden;
|
| 829 |
+
}
|
| 830 |
+
|
| 831 |
+
.calendarbox .calendar-cancel, .clockbox .calendar-cancel {
|
| 832 |
+
border-radius: 0 0 4px 4px;
|
| 833 |
+
overflow: hidden;
|
| 834 |
+
}
|
| 835 |
+
|
| 836 |
+
.calendar-shortcuts {
|
| 837 |
+
padding: 10px 0;
|
| 838 |
+
font-size: 0.75rem;
|
| 839 |
+
line-height: 0.75rem;
|
| 840 |
+
}
|
| 841 |
+
|
| 842 |
+
.calendar-shortcuts a {
|
| 843 |
+
margin: 0 4px;
|
| 844 |
+
}
|
| 845 |
+
|
| 846 |
+
.timelist a {
|
| 847 |
+
background: var(--body-bg);
|
| 848 |
+
padding: 4px;
|
| 849 |
+
}
|
| 850 |
+
|
| 851 |
+
.calendar-cancel {
|
| 852 |
+
padding: 8px 10px;
|
| 853 |
+
}
|
| 854 |
+
|
| 855 |
+
.clockbox h2 {
|
| 856 |
+
padding: 8px 15px;
|
| 857 |
+
}
|
| 858 |
+
|
| 859 |
+
.calendar caption {
|
| 860 |
+
padding: 10px;
|
| 861 |
+
}
|
| 862 |
+
|
| 863 |
+
.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next {
|
| 864 |
+
z-index: 1;
|
| 865 |
+
top: 10px;
|
| 866 |
+
}
|
| 867 |
+
|
| 868 |
+
/* History */
|
| 869 |
+
|
| 870 |
+
table#change-history tbody th, table#change-history tbody td {
|
| 871 |
+
font-size: 0.8125rem;
|
| 872 |
+
word-break: break-word;
|
| 873 |
+
}
|
| 874 |
+
|
| 875 |
+
table#change-history tbody th {
|
| 876 |
+
width: auto;
|
| 877 |
+
}
|
| 878 |
+
|
| 879 |
+
/* Docs */
|
| 880 |
+
|
| 881 |
+
table.model tbody th, table.model tbody td {
|
| 882 |
+
font-size: 0.8125rem;
|
| 883 |
+
word-break: break-word;
|
| 884 |
+
}
|
| 885 |
+
}
|
staticfiles/admin/css/responsive_rtl.css
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* TABLETS */
|
| 2 |
+
|
| 3 |
+
@media (max-width: 1024px) {
|
| 4 |
+
[dir="rtl"] .colMS {
|
| 5 |
+
margin-right: 0;
|
| 6 |
+
}
|
| 7 |
+
|
| 8 |
+
[dir="rtl"] #user-tools {
|
| 9 |
+
text-align: right;
|
| 10 |
+
}
|
| 11 |
+
|
| 12 |
+
[dir="rtl"] #changelist .actions label {
|
| 13 |
+
padding-left: 10px;
|
| 14 |
+
padding-right: 0;
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
[dir="rtl"] #changelist .actions select {
|
| 18 |
+
margin-left: 0;
|
| 19 |
+
margin-right: 15px;
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
[dir="rtl"] .change-list .filtered .results,
|
| 23 |
+
[dir="rtl"] .change-list .filtered .paginator,
|
| 24 |
+
[dir="rtl"] .filtered #toolbar,
|
| 25 |
+
[dir="rtl"] .filtered div.xfull,
|
| 26 |
+
[dir="rtl"] .filtered .actions,
|
| 27 |
+
[dir="rtl"] #changelist-filter {
|
| 28 |
+
margin-left: 0;
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
[dir="rtl"] .inline-group div.add-row a,
|
| 32 |
+
[dir="rtl"] .inline-group .tabular tr.add-row td a {
|
| 33 |
+
padding: 8px 26px 8px 10px;
|
| 34 |
+
background-position: calc(100% - 8px) 9px;
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
[dir="rtl"] .dashboard .module table td a {
|
| 38 |
+
padding-left: 0;
|
| 39 |
+
padding-right: 16px;
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
[dir="rtl"] ul.messagelist li {
|
| 43 |
+
padding: 10px 55px 10px 10px;
|
| 44 |
+
background-position-x: calc(100% - 30px);
|
| 45 |
+
}
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
/* MOBILE */
|
| 49 |
+
|
| 50 |
+
@media (max-width: 767px) {
|
| 51 |
+
[dir="rtl"] .aligned .related-lookup,
|
| 52 |
+
[dir="rtl"] .aligned .datetimeshortcuts {
|
| 53 |
+
margin-left: 0;
|
| 54 |
+
margin-right: 15px;
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
[dir="rtl"] .aligned ul,
|
| 58 |
+
[dir="rtl"] form .aligned ul.errorlist {
|
| 59 |
+
margin-right: 0;
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
[dir="rtl"] #changelist-filter {
|
| 63 |
+
margin-left: 0;
|
| 64 |
+
margin-right: 0;
|
| 65 |
+
}
|
| 66 |
+
|
| 67 |
+
[dir="rtl"] .object-tools {
|
| 68 |
+
text-align: right;
|
| 69 |
+
}
|
| 70 |
+
|
| 71 |
+
[dir="rtl"] .aligned .vCheckboxLabel {
|
| 72 |
+
padding: 1px 5px 0 0;
|
| 73 |
+
}
|
| 74 |
+
|
| 75 |
+
[dir="rtl"] .selector-remove {
|
| 76 |
+
background-position: 0 0;
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
[dir="rtl"] :enabled.selector-remove:focus, :enabled.selector-remove:hover {
|
| 80 |
+
background-position: 0 -24px;
|
| 81 |
+
}
|
| 82 |
+
|
| 83 |
+
[dir="rtl"] .selector-add {
|
| 84 |
+
background-position: 0 -48px;
|
| 85 |
+
}
|
| 86 |
+
|
| 87 |
+
[dir="rtl"] :enabled.selector-add:focus, :enabled.selector-add:hover {
|
| 88 |
+
background-position: 0 -72px;
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
+
[dir="rtl"] ul.messagelist li {
|
| 92 |
+
padding: 10px 40px 10px 10px;
|
| 93 |
+
background-position-x: calc(100% - 15px);
|
| 94 |
+
}
|
| 95 |
+
}
|
staticfiles/admin/css/rtl.css
ADDED
|
@@ -0,0 +1,295 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* GLOBAL */
|
| 2 |
+
|
| 3 |
+
th {
|
| 4 |
+
text-align: right;
|
| 5 |
+
}
|
| 6 |
+
|
| 7 |
+
.module h2, .module caption {
|
| 8 |
+
text-align: right;
|
| 9 |
+
}
|
| 10 |
+
|
| 11 |
+
.module ul, .module ol {
|
| 12 |
+
margin-left: 0;
|
| 13 |
+
margin-right: 1.5em;
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
.viewlink, .addlink, .changelink, .hidelink {
|
| 17 |
+
padding-left: 0;
|
| 18 |
+
padding-right: 16px;
|
| 19 |
+
background-position: 100% 1px;
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
.deletelink {
|
| 23 |
+
padding-left: 0;
|
| 24 |
+
padding-right: 16px;
|
| 25 |
+
background-position: 100% 1px;
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
.object-tools {
|
| 29 |
+
text-align: left;
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
.object-tools li + li {
|
| 33 |
+
margin-right: 15px;
|
| 34 |
+
margin-left: 0;
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
thead th:first-child,
|
| 38 |
+
tfoot td:first-child {
|
| 39 |
+
border-left: none;
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
/* LAYOUT */
|
| 43 |
+
|
| 44 |
+
#user-tools {
|
| 45 |
+
right: auto;
|
| 46 |
+
left: 0;
|
| 47 |
+
text-align: left;
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
div.breadcrumbs {
|
| 51 |
+
text-align: right;
|
| 52 |
+
}
|
| 53 |
+
|
| 54 |
+
#content-main {
|
| 55 |
+
float: right;
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
#content-related {
|
| 59 |
+
float: left;
|
| 60 |
+
margin-left: -300px;
|
| 61 |
+
margin-right: auto;
|
| 62 |
+
}
|
| 63 |
+
|
| 64 |
+
.colMS {
|
| 65 |
+
margin-left: 300px;
|
| 66 |
+
margin-right: 0;
|
| 67 |
+
}
|
| 68 |
+
|
| 69 |
+
/* SORTABLE TABLES */
|
| 70 |
+
|
| 71 |
+
table thead th.sorted .sortoptions {
|
| 72 |
+
float: left;
|
| 73 |
+
}
|
| 74 |
+
|
| 75 |
+
thead th.sorted .text {
|
| 76 |
+
padding-right: 0;
|
| 77 |
+
padding-left: 42px;
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
/* dashboard styles */
|
| 81 |
+
|
| 82 |
+
.dashboard .module table td a {
|
| 83 |
+
padding-left: .6em;
|
| 84 |
+
padding-right: 16px;
|
| 85 |
+
}
|
| 86 |
+
|
| 87 |
+
/* changelists styles */
|
| 88 |
+
|
| 89 |
+
.change-list .filtered table {
|
| 90 |
+
border-left: none;
|
| 91 |
+
border-right: 0px none;
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
#changelist-filter {
|
| 95 |
+
border-left: none;
|
| 96 |
+
border-right: none;
|
| 97 |
+
margin-left: 0;
|
| 98 |
+
margin-right: 30px;
|
| 99 |
+
}
|
| 100 |
+
|
| 101 |
+
#changelist-filter li.selected {
|
| 102 |
+
border-left: none;
|
| 103 |
+
padding-left: 10px;
|
| 104 |
+
margin-left: 0;
|
| 105 |
+
border-right: 5px solid var(--hairline-color);
|
| 106 |
+
padding-right: 10px;
|
| 107 |
+
margin-right: -15px;
|
| 108 |
+
}
|
| 109 |
+
|
| 110 |
+
#changelist table tbody td:first-child, #changelist table tbody th:first-child {
|
| 111 |
+
border-right: none;
|
| 112 |
+
border-left: none;
|
| 113 |
+
}
|
| 114 |
+
|
| 115 |
+
.paginator ul {
|
| 116 |
+
margin-left: 6px;
|
| 117 |
+
margin-right: 0;
|
| 118 |
+
}
|
| 119 |
+
|
| 120 |
+
.paginator input {
|
| 121 |
+
margin-left: 0;
|
| 122 |
+
margin-right: auto;
|
| 123 |
+
}
|
| 124 |
+
|
| 125 |
+
/* FORMS */
|
| 126 |
+
|
| 127 |
+
.aligned label {
|
| 128 |
+
padding: 0 0 3px 1em;
|
| 129 |
+
}
|
| 130 |
+
|
| 131 |
+
.submit-row a.deletelink {
|
| 132 |
+
margin-left: 0;
|
| 133 |
+
margin-right: auto;
|
| 134 |
+
}
|
| 135 |
+
|
| 136 |
+
.vDateField, .vTimeField {
|
| 137 |
+
margin-left: 2px;
|
| 138 |
+
}
|
| 139 |
+
|
| 140 |
+
.aligned .form-row input {
|
| 141 |
+
margin-left: 5px;
|
| 142 |
+
}
|
| 143 |
+
|
| 144 |
+
form .aligned ul {
|
| 145 |
+
margin-right: 163px;
|
| 146 |
+
padding-right: 10px;
|
| 147 |
+
margin-left: 0;
|
| 148 |
+
padding-left: 0;
|
| 149 |
+
}
|
| 150 |
+
|
| 151 |
+
form ul.inline li {
|
| 152 |
+
float: right;
|
| 153 |
+
padding-right: 0;
|
| 154 |
+
padding-left: 7px;
|
| 155 |
+
}
|
| 156 |
+
|
| 157 |
+
form .aligned p.help,
|
| 158 |
+
form .aligned div.help {
|
| 159 |
+
margin-left: 0;
|
| 160 |
+
margin-right: 160px;
|
| 161 |
+
padding-right: 10px;
|
| 162 |
+
}
|
| 163 |
+
|
| 164 |
+
form div.help ul,
|
| 165 |
+
form .aligned .checkbox-row + .help,
|
| 166 |
+
form .aligned p.date div.help.timezonewarning,
|
| 167 |
+
form .aligned p.datetime div.help.timezonewarning,
|
| 168 |
+
form .aligned p.time div.help.timezonewarning {
|
| 169 |
+
margin-right: 0;
|
| 170 |
+
padding-right: 0;
|
| 171 |
+
}
|
| 172 |
+
|
| 173 |
+
form .wide p.help,
|
| 174 |
+
form .wide ul.errorlist,
|
| 175 |
+
form .wide div.help {
|
| 176 |
+
padding-left: 0;
|
| 177 |
+
padding-right: 50px;
|
| 178 |
+
}
|
| 179 |
+
|
| 180 |
+
.submit-row {
|
| 181 |
+
text-align: right;
|
| 182 |
+
}
|
| 183 |
+
|
| 184 |
+
fieldset .fieldBox {
|
| 185 |
+
margin-left: 20px;
|
| 186 |
+
margin-right: 0;
|
| 187 |
+
}
|
| 188 |
+
|
| 189 |
+
.errorlist li {
|
| 190 |
+
background-position: 100% 12px;
|
| 191 |
+
padding: 0;
|
| 192 |
+
}
|
| 193 |
+
|
| 194 |
+
.errornote {
|
| 195 |
+
background-position: 100% 12px;
|
| 196 |
+
padding: 10px 12px;
|
| 197 |
+
}
|
| 198 |
+
|
| 199 |
+
/* WIDGETS */
|
| 200 |
+
|
| 201 |
+
.calendarnav-previous {
|
| 202 |
+
top: 0;
|
| 203 |
+
left: auto;
|
| 204 |
+
right: 10px;
|
| 205 |
+
background: url(../img/calendar-icons.svg) 0 -15px no-repeat;
|
| 206 |
+
}
|
| 207 |
+
|
| 208 |
+
.calendarnav-next {
|
| 209 |
+
top: 0;
|
| 210 |
+
right: auto;
|
| 211 |
+
left: 10px;
|
| 212 |
+
background: url(../img/calendar-icons.svg) 0 0 no-repeat;
|
| 213 |
+
}
|
| 214 |
+
|
| 215 |
+
.calendar caption, .calendarbox h2 {
|
| 216 |
+
text-align: center;
|
| 217 |
+
}
|
| 218 |
+
|
| 219 |
+
.selector {
|
| 220 |
+
float: right;
|
| 221 |
+
}
|
| 222 |
+
|
| 223 |
+
.selector .selector-filter {
|
| 224 |
+
text-align: right;
|
| 225 |
+
}
|
| 226 |
+
|
| 227 |
+
.selector-add {
|
| 228 |
+
background: url(../img/selector-icons.svg) 0 -96px no-repeat;
|
| 229 |
+
background-size: 24px auto;
|
| 230 |
+
}
|
| 231 |
+
|
| 232 |
+
:enabled.selector-add:focus, :enabled.selector-add:hover {
|
| 233 |
+
background-position: 0 -120px;
|
| 234 |
+
}
|
| 235 |
+
|
| 236 |
+
.selector-remove {
|
| 237 |
+
background: url(../img/selector-icons.svg) 0 -144px no-repeat;
|
| 238 |
+
background-size: 24px auto;
|
| 239 |
+
}
|
| 240 |
+
|
| 241 |
+
:enabled.selector-remove:focus, :enabled.selector-remove:hover {
|
| 242 |
+
background-position: 0 -168px;
|
| 243 |
+
}
|
| 244 |
+
|
| 245 |
+
:enabled.selector-chooseall:focus, :enabled.selector-chooseall:hover {
|
| 246 |
+
background-position: 100% -144px;
|
| 247 |
+
}
|
| 248 |
+
|
| 249 |
+
:enabled.selector-clearall:focus, :enabled.selector-clearall:hover {
|
| 250 |
+
background-position: 0 -176px;
|
| 251 |
+
}
|
| 252 |
+
|
| 253 |
+
.inline-deletelink {
|
| 254 |
+
float: left;
|
| 255 |
+
}
|
| 256 |
+
|
| 257 |
+
form .form-row p.datetime {
|
| 258 |
+
overflow: hidden;
|
| 259 |
+
}
|
| 260 |
+
|
| 261 |
+
.related-widget-wrapper {
|
| 262 |
+
float: right;
|
| 263 |
+
}
|
| 264 |
+
|
| 265 |
+
/* MISC */
|
| 266 |
+
|
| 267 |
+
.inline-related h2, .inline-group h2 {
|
| 268 |
+
text-align: right
|
| 269 |
+
}
|
| 270 |
+
|
| 271 |
+
.inline-related h3 span.delete {
|
| 272 |
+
padding-right: 20px;
|
| 273 |
+
padding-left: inherit;
|
| 274 |
+
left: 10px;
|
| 275 |
+
right: inherit;
|
| 276 |
+
float:left;
|
| 277 |
+
}
|
| 278 |
+
|
| 279 |
+
.inline-related h3 span.delete label {
|
| 280 |
+
margin-left: inherit;
|
| 281 |
+
margin-right: 2px;
|
| 282 |
+
}
|
| 283 |
+
|
| 284 |
+
.inline-group .tabular td.original p {
|
| 285 |
+
right: 0;
|
| 286 |
+
}
|
| 287 |
+
|
| 288 |
+
.selector .selector-chooser {
|
| 289 |
+
margin: 0;
|
| 290 |
+
}
|
| 291 |
+
|
| 292 |
+
ul.messagelist li {
|
| 293 |
+
padding: 10px 65px 10px 10px;
|
| 294 |
+
background-position-x: calc(100% - 40px);
|
| 295 |
+
}
|
staticfiles/admin/css/unusable_password_field.css
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* Hide warnings fields if usable password is selected */
|
| 2 |
+
form:has(#id_usable_password input[value="true"]:checked) .messagelist {
|
| 3 |
+
display: none;
|
| 4 |
+
}
|
| 5 |
+
|
| 6 |
+
/* Hide password fields if unusable password is selected */
|
| 7 |
+
form:has(#id_usable_password input[value="false"]:checked) .field-password1,
|
| 8 |
+
form:has(#id_usable_password input[value="false"]:checked) .field-password2 {
|
| 9 |
+
display: none;
|
| 10 |
+
}
|
| 11 |
+
|
| 12 |
+
/* Select appropriate submit button */
|
| 13 |
+
form:has(#id_usable_password input[value="true"]:checked) input[type="submit"].unset-password {
|
| 14 |
+
display: none;
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
form:has(#id_usable_password input[value="false"]:checked) input[type="submit"].set-password {
|
| 18 |
+
display: none;
|
| 19 |
+
}
|
staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
The MIT License (MIT)
|
| 2 |
+
|
| 3 |
+
Copyright (c) 2012-2017 Kevin Brown, Igor Vaynberg, and Select2 contributors
|
| 4 |
+
|
| 5 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
| 6 |
+
of this software and associated documentation files (the "Software"), to deal
|
| 7 |
+
in the Software without restriction, including without limitation the rights
|
| 8 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
| 9 |
+
copies of the Software, and to permit persons to whom the Software is
|
| 10 |
+
furnished to do so, subject to the following conditions:
|
| 11 |
+
|
| 12 |
+
The above copyright notice and this permission notice shall be included in
|
| 13 |
+
all copies or substantial portions of the Software.
|
| 14 |
+
|
| 15 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 16 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 17 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
| 18 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| 19 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
| 20 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
| 21 |
+
THE SOFTWARE.
|
staticfiles/admin/css/vendor/select2/select2.css
ADDED
|
@@ -0,0 +1,481 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
.select2-container {
|
| 2 |
+
box-sizing: border-box;
|
| 3 |
+
display: inline-block;
|
| 4 |
+
margin: 0;
|
| 5 |
+
position: relative;
|
| 6 |
+
vertical-align: middle; }
|
| 7 |
+
.select2-container .select2-selection--single {
|
| 8 |
+
box-sizing: border-box;
|
| 9 |
+
cursor: pointer;
|
| 10 |
+
display: block;
|
| 11 |
+
height: 28px;
|
| 12 |
+
user-select: none;
|
| 13 |
+
-webkit-user-select: none; }
|
| 14 |
+
.select2-container .select2-selection--single .select2-selection__rendered {
|
| 15 |
+
display: block;
|
| 16 |
+
padding-left: 8px;
|
| 17 |
+
padding-right: 20px;
|
| 18 |
+
overflow: hidden;
|
| 19 |
+
text-overflow: ellipsis;
|
| 20 |
+
white-space: nowrap; }
|
| 21 |
+
.select2-container .select2-selection--single .select2-selection__clear {
|
| 22 |
+
position: relative; }
|
| 23 |
+
.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered {
|
| 24 |
+
padding-right: 8px;
|
| 25 |
+
padding-left: 20px; }
|
| 26 |
+
.select2-container .select2-selection--multiple {
|
| 27 |
+
box-sizing: border-box;
|
| 28 |
+
cursor: pointer;
|
| 29 |
+
display: block;
|
| 30 |
+
min-height: 32px;
|
| 31 |
+
user-select: none;
|
| 32 |
+
-webkit-user-select: none; }
|
| 33 |
+
.select2-container .select2-selection--multiple .select2-selection__rendered {
|
| 34 |
+
display: inline-block;
|
| 35 |
+
overflow: hidden;
|
| 36 |
+
padding-left: 8px;
|
| 37 |
+
text-overflow: ellipsis;
|
| 38 |
+
white-space: nowrap; }
|
| 39 |
+
.select2-container .select2-search--inline {
|
| 40 |
+
float: left; }
|
| 41 |
+
.select2-container .select2-search--inline .select2-search__field {
|
| 42 |
+
box-sizing: border-box;
|
| 43 |
+
border: none;
|
| 44 |
+
font-size: 100%;
|
| 45 |
+
margin-top: 5px;
|
| 46 |
+
padding: 0; }
|
| 47 |
+
.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button {
|
| 48 |
+
-webkit-appearance: none; }
|
| 49 |
+
|
| 50 |
+
.select2-dropdown {
|
| 51 |
+
background-color: white;
|
| 52 |
+
border: 1px solid #aaa;
|
| 53 |
+
border-radius: 4px;
|
| 54 |
+
box-sizing: border-box;
|
| 55 |
+
display: block;
|
| 56 |
+
position: absolute;
|
| 57 |
+
left: -100000px;
|
| 58 |
+
width: 100%;
|
| 59 |
+
z-index: 1051; }
|
| 60 |
+
|
| 61 |
+
.select2-results {
|
| 62 |
+
display: block; }
|
| 63 |
+
|
| 64 |
+
.select2-results__options {
|
| 65 |
+
list-style: none;
|
| 66 |
+
margin: 0;
|
| 67 |
+
padding: 0; }
|
| 68 |
+
|
| 69 |
+
.select2-results__option {
|
| 70 |
+
padding: 6px;
|
| 71 |
+
user-select: none;
|
| 72 |
+
-webkit-user-select: none; }
|
| 73 |
+
.select2-results__option[aria-selected] {
|
| 74 |
+
cursor: pointer; }
|
| 75 |
+
|
| 76 |
+
.select2-container--open .select2-dropdown {
|
| 77 |
+
left: 0; }
|
| 78 |
+
|
| 79 |
+
.select2-container--open .select2-dropdown--above {
|
| 80 |
+
border-bottom: none;
|
| 81 |
+
border-bottom-left-radius: 0;
|
| 82 |
+
border-bottom-right-radius: 0; }
|
| 83 |
+
|
| 84 |
+
.select2-container--open .select2-dropdown--below {
|
| 85 |
+
border-top: none;
|
| 86 |
+
border-top-left-radius: 0;
|
| 87 |
+
border-top-right-radius: 0; }
|
| 88 |
+
|
| 89 |
+
.select2-search--dropdown {
|
| 90 |
+
display: block;
|
| 91 |
+
padding: 4px; }
|
| 92 |
+
.select2-search--dropdown .select2-search__field {
|
| 93 |
+
padding: 4px;
|
| 94 |
+
width: 100%;
|
| 95 |
+
box-sizing: border-box; }
|
| 96 |
+
.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button {
|
| 97 |
+
-webkit-appearance: none; }
|
| 98 |
+
.select2-search--dropdown.select2-search--hide {
|
| 99 |
+
display: none; }
|
| 100 |
+
|
| 101 |
+
.select2-close-mask {
|
| 102 |
+
border: 0;
|
| 103 |
+
margin: 0;
|
| 104 |
+
padding: 0;
|
| 105 |
+
display: block;
|
| 106 |
+
position: fixed;
|
| 107 |
+
left: 0;
|
| 108 |
+
top: 0;
|
| 109 |
+
min-height: 100%;
|
| 110 |
+
min-width: 100%;
|
| 111 |
+
height: auto;
|
| 112 |
+
width: auto;
|
| 113 |
+
opacity: 0;
|
| 114 |
+
z-index: 99;
|
| 115 |
+
background-color: #fff;
|
| 116 |
+
filter: alpha(opacity=0); }
|
| 117 |
+
|
| 118 |
+
.select2-hidden-accessible {
|
| 119 |
+
border: 0 !important;
|
| 120 |
+
clip: rect(0 0 0 0) !important;
|
| 121 |
+
-webkit-clip-path: inset(50%) !important;
|
| 122 |
+
clip-path: inset(50%) !important;
|
| 123 |
+
height: 1px !important;
|
| 124 |
+
overflow: hidden !important;
|
| 125 |
+
padding: 0 !important;
|
| 126 |
+
position: absolute !important;
|
| 127 |
+
width: 1px !important;
|
| 128 |
+
white-space: nowrap !important; }
|
| 129 |
+
|
| 130 |
+
.select2-container--default .select2-selection--single {
|
| 131 |
+
background-color: #fff;
|
| 132 |
+
border: 1px solid #aaa;
|
| 133 |
+
border-radius: 4px; }
|
| 134 |
+
.select2-container--default .select2-selection--single .select2-selection__rendered {
|
| 135 |
+
color: #444;
|
| 136 |
+
line-height: 28px; }
|
| 137 |
+
.select2-container--default .select2-selection--single .select2-selection__clear {
|
| 138 |
+
cursor: pointer;
|
| 139 |
+
float: right;
|
| 140 |
+
font-weight: bold; }
|
| 141 |
+
.select2-container--default .select2-selection--single .select2-selection__placeholder {
|
| 142 |
+
color: #999; }
|
| 143 |
+
.select2-container--default .select2-selection--single .select2-selection__arrow {
|
| 144 |
+
height: 26px;
|
| 145 |
+
position: absolute;
|
| 146 |
+
top: 1px;
|
| 147 |
+
right: 1px;
|
| 148 |
+
width: 20px; }
|
| 149 |
+
.select2-container--default .select2-selection--single .select2-selection__arrow b {
|
| 150 |
+
border-color: #888 transparent transparent transparent;
|
| 151 |
+
border-style: solid;
|
| 152 |
+
border-width: 5px 4px 0 4px;
|
| 153 |
+
height: 0;
|
| 154 |
+
left: 50%;
|
| 155 |
+
margin-left: -4px;
|
| 156 |
+
margin-top: -2px;
|
| 157 |
+
position: absolute;
|
| 158 |
+
top: 50%;
|
| 159 |
+
width: 0; }
|
| 160 |
+
|
| 161 |
+
.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear {
|
| 162 |
+
float: left; }
|
| 163 |
+
|
| 164 |
+
.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow {
|
| 165 |
+
left: 1px;
|
| 166 |
+
right: auto; }
|
| 167 |
+
|
| 168 |
+
.select2-container--default.select2-container--disabled .select2-selection--single {
|
| 169 |
+
background-color: #eee;
|
| 170 |
+
cursor: default; }
|
| 171 |
+
.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear {
|
| 172 |
+
display: none; }
|
| 173 |
+
|
| 174 |
+
.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {
|
| 175 |
+
border-color: transparent transparent #888 transparent;
|
| 176 |
+
border-width: 0 4px 5px 4px; }
|
| 177 |
+
|
| 178 |
+
.select2-container--default .select2-selection--multiple {
|
| 179 |
+
background-color: white;
|
| 180 |
+
border: 1px solid #aaa;
|
| 181 |
+
border-radius: 4px;
|
| 182 |
+
cursor: text; }
|
| 183 |
+
.select2-container--default .select2-selection--multiple .select2-selection__rendered {
|
| 184 |
+
box-sizing: border-box;
|
| 185 |
+
list-style: none;
|
| 186 |
+
margin: 0;
|
| 187 |
+
padding: 0 5px;
|
| 188 |
+
width: 100%; }
|
| 189 |
+
.select2-container--default .select2-selection--multiple .select2-selection__rendered li {
|
| 190 |
+
list-style: none; }
|
| 191 |
+
.select2-container--default .select2-selection--multiple .select2-selection__clear {
|
| 192 |
+
cursor: pointer;
|
| 193 |
+
float: right;
|
| 194 |
+
font-weight: bold;
|
| 195 |
+
margin-top: 5px;
|
| 196 |
+
margin-right: 10px;
|
| 197 |
+
padding: 1px; }
|
| 198 |
+
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
| 199 |
+
background-color: #e4e4e4;
|
| 200 |
+
border: 1px solid #aaa;
|
| 201 |
+
border-radius: 4px;
|
| 202 |
+
cursor: default;
|
| 203 |
+
float: left;
|
| 204 |
+
margin-right: 5px;
|
| 205 |
+
margin-top: 5px;
|
| 206 |
+
padding: 0 5px; }
|
| 207 |
+
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
|
| 208 |
+
color: #999;
|
| 209 |
+
cursor: pointer;
|
| 210 |
+
display: inline-block;
|
| 211 |
+
font-weight: bold;
|
| 212 |
+
margin-right: 2px; }
|
| 213 |
+
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {
|
| 214 |
+
color: #333; }
|
| 215 |
+
|
| 216 |
+
.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline {
|
| 217 |
+
float: right; }
|
| 218 |
+
|
| 219 |
+
.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
|
| 220 |
+
margin-left: 5px;
|
| 221 |
+
margin-right: auto; }
|
| 222 |
+
|
| 223 |
+
.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
|
| 224 |
+
margin-left: 2px;
|
| 225 |
+
margin-right: auto; }
|
| 226 |
+
|
| 227 |
+
.select2-container--default.select2-container--focus .select2-selection--multiple {
|
| 228 |
+
border: solid black 1px;
|
| 229 |
+
outline: 0; }
|
| 230 |
+
|
| 231 |
+
.select2-container--default.select2-container--disabled .select2-selection--multiple {
|
| 232 |
+
background-color: #eee;
|
| 233 |
+
cursor: default; }
|
| 234 |
+
|
| 235 |
+
.select2-container--default.select2-container--disabled .select2-selection__choice__remove {
|
| 236 |
+
display: none; }
|
| 237 |
+
|
| 238 |
+
.select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple {
|
| 239 |
+
border-top-left-radius: 0;
|
| 240 |
+
border-top-right-radius: 0; }
|
| 241 |
+
|
| 242 |
+
.select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple {
|
| 243 |
+
border-bottom-left-radius: 0;
|
| 244 |
+
border-bottom-right-radius: 0; }
|
| 245 |
+
|
| 246 |
+
.select2-container--default .select2-search--dropdown .select2-search__field {
|
| 247 |
+
border: 1px solid #aaa; }
|
| 248 |
+
|
| 249 |
+
.select2-container--default .select2-search--inline .select2-search__field {
|
| 250 |
+
background: transparent;
|
| 251 |
+
border: none;
|
| 252 |
+
outline: 0;
|
| 253 |
+
box-shadow: none;
|
| 254 |
+
-webkit-appearance: textfield; }
|
| 255 |
+
|
| 256 |
+
.select2-container--default .select2-results > .select2-results__options {
|
| 257 |
+
max-height: 200px;
|
| 258 |
+
overflow-y: auto; }
|
| 259 |
+
|
| 260 |
+
.select2-container--default .select2-results__option[role=group] {
|
| 261 |
+
padding: 0; }
|
| 262 |
+
|
| 263 |
+
.select2-container--default .select2-results__option[aria-disabled=true] {
|
| 264 |
+
color: #999; }
|
| 265 |
+
|
| 266 |
+
.select2-container--default .select2-results__option[aria-selected=true] {
|
| 267 |
+
background-color: #ddd; }
|
| 268 |
+
|
| 269 |
+
.select2-container--default .select2-results__option .select2-results__option {
|
| 270 |
+
padding-left: 1em; }
|
| 271 |
+
.select2-container--default .select2-results__option .select2-results__option .select2-results__group {
|
| 272 |
+
padding-left: 0; }
|
| 273 |
+
.select2-container--default .select2-results__option .select2-results__option .select2-results__option {
|
| 274 |
+
margin-left: -1em;
|
| 275 |
+
padding-left: 2em; }
|
| 276 |
+
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
| 277 |
+
margin-left: -2em;
|
| 278 |
+
padding-left: 3em; }
|
| 279 |
+
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
| 280 |
+
margin-left: -3em;
|
| 281 |
+
padding-left: 4em; }
|
| 282 |
+
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
| 283 |
+
margin-left: -4em;
|
| 284 |
+
padding-left: 5em; }
|
| 285 |
+
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
| 286 |
+
margin-left: -5em;
|
| 287 |
+
padding-left: 6em; }
|
| 288 |
+
|
| 289 |
+
.select2-container--default .select2-results__option--highlighted[aria-selected] {
|
| 290 |
+
background-color: #5897fb;
|
| 291 |
+
color: white; }
|
| 292 |
+
|
| 293 |
+
.select2-container--default .select2-results__group {
|
| 294 |
+
cursor: default;
|
| 295 |
+
display: block;
|
| 296 |
+
padding: 6px; }
|
| 297 |
+
|
| 298 |
+
.select2-container--classic .select2-selection--single {
|
| 299 |
+
background-color: #f7f7f7;
|
| 300 |
+
border: 1px solid #aaa;
|
| 301 |
+
border-radius: 4px;
|
| 302 |
+
outline: 0;
|
| 303 |
+
background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%);
|
| 304 |
+
background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%);
|
| 305 |
+
background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%);
|
| 306 |
+
background-repeat: repeat-x;
|
| 307 |
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }
|
| 308 |
+
.select2-container--classic .select2-selection--single:focus {
|
| 309 |
+
border: 1px solid #5897fb; }
|
| 310 |
+
.select2-container--classic .select2-selection--single .select2-selection__rendered {
|
| 311 |
+
color: #444;
|
| 312 |
+
line-height: 28px; }
|
| 313 |
+
.select2-container--classic .select2-selection--single .select2-selection__clear {
|
| 314 |
+
cursor: pointer;
|
| 315 |
+
float: right;
|
| 316 |
+
font-weight: bold;
|
| 317 |
+
margin-right: 10px; }
|
| 318 |
+
.select2-container--classic .select2-selection--single .select2-selection__placeholder {
|
| 319 |
+
color: #999; }
|
| 320 |
+
.select2-container--classic .select2-selection--single .select2-selection__arrow {
|
| 321 |
+
background-color: #ddd;
|
| 322 |
+
border: none;
|
| 323 |
+
border-left: 1px solid #aaa;
|
| 324 |
+
border-top-right-radius: 4px;
|
| 325 |
+
border-bottom-right-radius: 4px;
|
| 326 |
+
height: 26px;
|
| 327 |
+
position: absolute;
|
| 328 |
+
top: 1px;
|
| 329 |
+
right: 1px;
|
| 330 |
+
width: 20px;
|
| 331 |
+
background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%);
|
| 332 |
+
background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%);
|
| 333 |
+
background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%);
|
| 334 |
+
background-repeat: repeat-x;
|
| 335 |
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); }
|
| 336 |
+
.select2-container--classic .select2-selection--single .select2-selection__arrow b {
|
| 337 |
+
border-color: #888 transparent transparent transparent;
|
| 338 |
+
border-style: solid;
|
| 339 |
+
border-width: 5px 4px 0 4px;
|
| 340 |
+
height: 0;
|
| 341 |
+
left: 50%;
|
| 342 |
+
margin-left: -4px;
|
| 343 |
+
margin-top: -2px;
|
| 344 |
+
position: absolute;
|
| 345 |
+
top: 50%;
|
| 346 |
+
width: 0; }
|
| 347 |
+
|
| 348 |
+
.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear {
|
| 349 |
+
float: left; }
|
| 350 |
+
|
| 351 |
+
.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow {
|
| 352 |
+
border: none;
|
| 353 |
+
border-right: 1px solid #aaa;
|
| 354 |
+
border-radius: 0;
|
| 355 |
+
border-top-left-radius: 4px;
|
| 356 |
+
border-bottom-left-radius: 4px;
|
| 357 |
+
left: 1px;
|
| 358 |
+
right: auto; }
|
| 359 |
+
|
| 360 |
+
.select2-container--classic.select2-container--open .select2-selection--single {
|
| 361 |
+
border: 1px solid #5897fb; }
|
| 362 |
+
.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow {
|
| 363 |
+
background: transparent;
|
| 364 |
+
border: none; }
|
| 365 |
+
.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b {
|
| 366 |
+
border-color: transparent transparent #888 transparent;
|
| 367 |
+
border-width: 0 4px 5px 4px; }
|
| 368 |
+
|
| 369 |
+
.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single {
|
| 370 |
+
border-top: none;
|
| 371 |
+
border-top-left-radius: 0;
|
| 372 |
+
border-top-right-radius: 0;
|
| 373 |
+
background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%);
|
| 374 |
+
background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%);
|
| 375 |
+
background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%);
|
| 376 |
+
background-repeat: repeat-x;
|
| 377 |
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }
|
| 378 |
+
|
| 379 |
+
.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single {
|
| 380 |
+
border-bottom: none;
|
| 381 |
+
border-bottom-left-radius: 0;
|
| 382 |
+
border-bottom-right-radius: 0;
|
| 383 |
+
background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%);
|
| 384 |
+
background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%);
|
| 385 |
+
background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%);
|
| 386 |
+
background-repeat: repeat-x;
|
| 387 |
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); }
|
| 388 |
+
|
| 389 |
+
.select2-container--classic .select2-selection--multiple {
|
| 390 |
+
background-color: white;
|
| 391 |
+
border: 1px solid #aaa;
|
| 392 |
+
border-radius: 4px;
|
| 393 |
+
cursor: text;
|
| 394 |
+
outline: 0; }
|
| 395 |
+
.select2-container--classic .select2-selection--multiple:focus {
|
| 396 |
+
border: 1px solid #5897fb; }
|
| 397 |
+
.select2-container--classic .select2-selection--multiple .select2-selection__rendered {
|
| 398 |
+
list-style: none;
|
| 399 |
+
margin: 0;
|
| 400 |
+
padding: 0 5px; }
|
| 401 |
+
.select2-container--classic .select2-selection--multiple .select2-selection__clear {
|
| 402 |
+
display: none; }
|
| 403 |
+
.select2-container--classic .select2-selection--multiple .select2-selection__choice {
|
| 404 |
+
background-color: #e4e4e4;
|
| 405 |
+
border: 1px solid #aaa;
|
| 406 |
+
border-radius: 4px;
|
| 407 |
+
cursor: default;
|
| 408 |
+
float: left;
|
| 409 |
+
margin-right: 5px;
|
| 410 |
+
margin-top: 5px;
|
| 411 |
+
padding: 0 5px; }
|
| 412 |
+
.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove {
|
| 413 |
+
color: #888;
|
| 414 |
+
cursor: pointer;
|
| 415 |
+
display: inline-block;
|
| 416 |
+
font-weight: bold;
|
| 417 |
+
margin-right: 2px; }
|
| 418 |
+
.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover {
|
| 419 |
+
color: #555; }
|
| 420 |
+
|
| 421 |
+
.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
|
| 422 |
+
float: right;
|
| 423 |
+
margin-left: 5px;
|
| 424 |
+
margin-right: auto; }
|
| 425 |
+
|
| 426 |
+
.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
|
| 427 |
+
margin-left: 2px;
|
| 428 |
+
margin-right: auto; }
|
| 429 |
+
|
| 430 |
+
.select2-container--classic.select2-container--open .select2-selection--multiple {
|
| 431 |
+
border: 1px solid #5897fb; }
|
| 432 |
+
|
| 433 |
+
.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple {
|
| 434 |
+
border-top: none;
|
| 435 |
+
border-top-left-radius: 0;
|
| 436 |
+
border-top-right-radius: 0; }
|
| 437 |
+
|
| 438 |
+
.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple {
|
| 439 |
+
border-bottom: none;
|
| 440 |
+
border-bottom-left-radius: 0;
|
| 441 |
+
border-bottom-right-radius: 0; }
|
| 442 |
+
|
| 443 |
+
.select2-container--classic .select2-search--dropdown .select2-search__field {
|
| 444 |
+
border: 1px solid #aaa;
|
| 445 |
+
outline: 0; }
|
| 446 |
+
|
| 447 |
+
.select2-container--classic .select2-search--inline .select2-search__field {
|
| 448 |
+
outline: 0;
|
| 449 |
+
box-shadow: none; }
|
| 450 |
+
|
| 451 |
+
.select2-container--classic .select2-dropdown {
|
| 452 |
+
background-color: white;
|
| 453 |
+
border: 1px solid transparent; }
|
| 454 |
+
|
| 455 |
+
.select2-container--classic .select2-dropdown--above {
|
| 456 |
+
border-bottom: none; }
|
| 457 |
+
|
| 458 |
+
.select2-container--classic .select2-dropdown--below {
|
| 459 |
+
border-top: none; }
|
| 460 |
+
|
| 461 |
+
.select2-container--classic .select2-results > .select2-results__options {
|
| 462 |
+
max-height: 200px;
|
| 463 |
+
overflow-y: auto; }
|
| 464 |
+
|
| 465 |
+
.select2-container--classic .select2-results__option[role=group] {
|
| 466 |
+
padding: 0; }
|
| 467 |
+
|
| 468 |
+
.select2-container--classic .select2-results__option[aria-disabled=true] {
|
| 469 |
+
color: grey; }
|
| 470 |
+
|
| 471 |
+
.select2-container--classic .select2-results__option--highlighted[aria-selected] {
|
| 472 |
+
background-color: #3875d7;
|
| 473 |
+
color: white; }
|
| 474 |
+
|
| 475 |
+
.select2-container--classic .select2-results__group {
|
| 476 |
+
cursor: default;
|
| 477 |
+
display: block;
|
| 478 |
+
padding: 6px; }
|
| 479 |
+
|
| 480 |
+
.select2-container--classic.select2-container--open .select2-dropdown {
|
| 481 |
+
border-color: #5897fb; }
|
staticfiles/admin/css/vendor/select2/select2.min.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px;padding:1px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}
|
staticfiles/admin/css/widgets.css
ADDED
|
@@ -0,0 +1,606 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* SELECTOR (FILTER INTERFACE) */
|
| 2 |
+
|
| 3 |
+
.selector {
|
| 4 |
+
display: flex;
|
| 5 |
+
flex: 1;
|
| 6 |
+
gap: 0 10px;
|
| 7 |
+
}
|
| 8 |
+
|
| 9 |
+
.selector select {
|
| 10 |
+
height: 17.2em;
|
| 11 |
+
flex: 1 0 auto;
|
| 12 |
+
overflow: scroll;
|
| 13 |
+
width: 100%;
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
.selector-available, .selector-chosen {
|
| 17 |
+
display: flex;
|
| 18 |
+
flex-direction: column;
|
| 19 |
+
flex: 1 1;
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
.selector-available-title, .selector-chosen-title {
|
| 23 |
+
border: 1px solid var(--border-color);
|
| 24 |
+
border-radius: 4px 4px 0 0;
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
.selector .helptext {
|
| 28 |
+
font-size: 0.6875rem;
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
.selector-chosen .list-footer-display {
|
| 32 |
+
border: 1px solid var(--border-color);
|
| 33 |
+
border-top: none;
|
| 34 |
+
border-radius: 0 0 4px 4px;
|
| 35 |
+
margin: 0 0 10px;
|
| 36 |
+
padding: 8px;
|
| 37 |
+
text-align: center;
|
| 38 |
+
background: var(--primary);
|
| 39 |
+
color: var(--header-link-color);
|
| 40 |
+
cursor: pointer;
|
| 41 |
+
}
|
| 42 |
+
.selector-chosen .list-footer-display__clear {
|
| 43 |
+
color: var(--breadcrumbs-fg);
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
.selector-chosen-title {
|
| 47 |
+
background: var(--secondary);
|
| 48 |
+
color: var(--header-link-color);
|
| 49 |
+
padding: 8px;
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
.selector-chosen-title label {
|
| 53 |
+
color: var(--header-link-color);
|
| 54 |
+
width: 100%;
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
.selector-available-title {
|
| 58 |
+
background: var(--darkened-bg);
|
| 59 |
+
color: var(--body-quiet-color);
|
| 60 |
+
padding: 8px;
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
.selector-available-title label {
|
| 64 |
+
width: 100%;
|
| 65 |
+
}
|
| 66 |
+
|
| 67 |
+
.selector .selector-filter {
|
| 68 |
+
border: 1px solid var(--border-color);
|
| 69 |
+
border-width: 0 1px;
|
| 70 |
+
padding: 8px;
|
| 71 |
+
color: var(--body-quiet-color);
|
| 72 |
+
font-size: 0.625rem;
|
| 73 |
+
margin: 0;
|
| 74 |
+
text-align: left;
|
| 75 |
+
display: flex;
|
| 76 |
+
gap: 8px;
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
.selector .selector-filter label,
|
| 80 |
+
.inline-group .aligned .selector .selector-filter label {
|
| 81 |
+
float: left;
|
| 82 |
+
margin: 7px 0 0;
|
| 83 |
+
width: 18px;
|
| 84 |
+
height: 18px;
|
| 85 |
+
padding: 0;
|
| 86 |
+
overflow: hidden;
|
| 87 |
+
line-height: 1;
|
| 88 |
+
min-width: auto;
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
+
.selector-filter input {
|
| 92 |
+
flex-grow: 1;
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
.selector ul.selector-chooser {
|
| 96 |
+
align-self: center;
|
| 97 |
+
width: 30px;
|
| 98 |
+
background-color: var(--selected-bg);
|
| 99 |
+
border-radius: 10px;
|
| 100 |
+
margin: 0;
|
| 101 |
+
padding: 0;
|
| 102 |
+
transform: translateY(-17px);
|
| 103 |
+
}
|
| 104 |
+
|
| 105 |
+
.selector-chooser li {
|
| 106 |
+
margin: 0;
|
| 107 |
+
padding: 3px;
|
| 108 |
+
list-style-type: none;
|
| 109 |
+
}
|
| 110 |
+
|
| 111 |
+
.selector select {
|
| 112 |
+
padding: 0 10px;
|
| 113 |
+
margin: 0 0 10px;
|
| 114 |
+
border-radius: 0 0 4px 4px;
|
| 115 |
+
}
|
| 116 |
+
.selector .selector-chosen--with-filtered select {
|
| 117 |
+
margin: 0;
|
| 118 |
+
border-radius: 0;
|
| 119 |
+
height: 14em;
|
| 120 |
+
}
|
| 121 |
+
|
| 122 |
+
.selector .selector-chosen:not(.selector-chosen--with-filtered) .list-footer-display {
|
| 123 |
+
display: none;
|
| 124 |
+
}
|
| 125 |
+
|
| 126 |
+
.selector-add, .selector-remove {
|
| 127 |
+
width: 24px;
|
| 128 |
+
height: 24px;
|
| 129 |
+
display: block;
|
| 130 |
+
text-indent: -3000px;
|
| 131 |
+
overflow: hidden;
|
| 132 |
+
cursor: default;
|
| 133 |
+
opacity: 0.55;
|
| 134 |
+
border: none;
|
| 135 |
+
}
|
| 136 |
+
|
| 137 |
+
:enabled.selector-add, :enabled.selector-remove {
|
| 138 |
+
opacity: 1;
|
| 139 |
+
}
|
| 140 |
+
|
| 141 |
+
:enabled.selector-add:hover, :enabled.selector-remove:hover {
|
| 142 |
+
cursor: pointer;
|
| 143 |
+
}
|
| 144 |
+
|
| 145 |
+
.selector-add {
|
| 146 |
+
background: url(../img/selector-icons.svg) 0 -144px no-repeat;
|
| 147 |
+
background-size: 24px auto;
|
| 148 |
+
}
|
| 149 |
+
|
| 150 |
+
:enabled.selector-add:focus, :enabled.selector-add:hover {
|
| 151 |
+
background-position: 0 -168px;
|
| 152 |
+
}
|
| 153 |
+
|
| 154 |
+
.selector-remove {
|
| 155 |
+
background: url(../img/selector-icons.svg) 0 -96px no-repeat;
|
| 156 |
+
background-size: 24px auto;
|
| 157 |
+
}
|
| 158 |
+
|
| 159 |
+
:enabled.selector-remove:focus, :enabled.selector-remove:hover {
|
| 160 |
+
background-position: 0 -120px;
|
| 161 |
+
}
|
| 162 |
+
|
| 163 |
+
.selector-chooseall, .selector-clearall {
|
| 164 |
+
display: inline-block;
|
| 165 |
+
text-align: left;
|
| 166 |
+
padding: 4px 5px;
|
| 167 |
+
margin: 0 auto;
|
| 168 |
+
overflow: hidden;
|
| 169 |
+
color: var(--button-fg);
|
| 170 |
+
background-color: var(--button-bg);
|
| 171 |
+
text-decoration: none;
|
| 172 |
+
opacity: 0.55;
|
| 173 |
+
border: none;
|
| 174 |
+
border-radius: 4px;
|
| 175 |
+
}
|
| 176 |
+
|
| 177 |
+
:enabled.selector-chooseall:focus, :enabled.selector-clearall:focus,
|
| 178 |
+
:enabled.selector-chooseall:hover, :enabled.selector-clearall:hover {
|
| 179 |
+
background-color: var(--button-hover-bg);
|
| 180 |
+
}
|
| 181 |
+
|
| 182 |
+
:enabled.selector-chooseall, :enabled.selector-clearall {
|
| 183 |
+
opacity: 1;
|
| 184 |
+
}
|
| 185 |
+
|
| 186 |
+
:enabled.selector-chooseall:hover, :enabled.selector-clearall:hover {
|
| 187 |
+
cursor: pointer;
|
| 188 |
+
}
|
| 189 |
+
|
| 190 |
+
:enabled.selector-chooseall:focus, :enabled.selector-chooseall:hover {
|
| 191 |
+
background-position: 100% -176px;
|
| 192 |
+
}
|
| 193 |
+
|
| 194 |
+
:enabled.selector-clearall:focus, :enabled.selector-clearall:hover {
|
| 195 |
+
background-position: 0 -144px;
|
| 196 |
+
}
|
| 197 |
+
|
| 198 |
+
/* STACKED SELECTORS */
|
| 199 |
+
|
| 200 |
+
.stacked {
|
| 201 |
+
float: left;
|
| 202 |
+
width: 490px;
|
| 203 |
+
display: block;
|
| 204 |
+
}
|
| 205 |
+
|
| 206 |
+
.stacked select {
|
| 207 |
+
width: 480px;
|
| 208 |
+
height: 10.1em;
|
| 209 |
+
}
|
| 210 |
+
|
| 211 |
+
.stacked .selector-available, .stacked .selector-chosen {
|
| 212 |
+
width: 480px;
|
| 213 |
+
}
|
| 214 |
+
|
| 215 |
+
.stacked .selector-available {
|
| 216 |
+
margin-bottom: 0;
|
| 217 |
+
}
|
| 218 |
+
|
| 219 |
+
.stacked .selector-available input {
|
| 220 |
+
width: 422px;
|
| 221 |
+
}
|
| 222 |
+
|
| 223 |
+
.stacked ul.selector-chooser {
|
| 224 |
+
display: flex;
|
| 225 |
+
height: 30px;
|
| 226 |
+
width: 64px;
|
| 227 |
+
margin: 0 0 10px 40%;
|
| 228 |
+
background-color: #eee;
|
| 229 |
+
border-radius: 10px;
|
| 230 |
+
transform: none;
|
| 231 |
+
}
|
| 232 |
+
|
| 233 |
+
.stacked .selector-chooser li {
|
| 234 |
+
float: left;
|
| 235 |
+
padding: 3px 3px 3px 5px;
|
| 236 |
+
}
|
| 237 |
+
|
| 238 |
+
.stacked .selector-chooseall, .stacked .selector-clearall {
|
| 239 |
+
display: none;
|
| 240 |
+
}
|
| 241 |
+
|
| 242 |
+
.stacked .selector-add {
|
| 243 |
+
background: url(../img/selector-icons.svg) 0 -48px no-repeat;
|
| 244 |
+
background-size: 24px auto;
|
| 245 |
+
cursor: default;
|
| 246 |
+
}
|
| 247 |
+
|
| 248 |
+
.stacked :enabled.selector-add {
|
| 249 |
+
background-position: 0 -48px;
|
| 250 |
+
cursor: pointer;
|
| 251 |
+
}
|
| 252 |
+
|
| 253 |
+
.stacked :enabled.selector-add:focus, .stacked :enabled.selector-add:hover {
|
| 254 |
+
background-position: 0 -72px;
|
| 255 |
+
cursor: pointer;
|
| 256 |
+
}
|
| 257 |
+
|
| 258 |
+
.stacked .selector-remove {
|
| 259 |
+
background: url(../img/selector-icons.svg) 0 0 no-repeat;
|
| 260 |
+
background-size: 24px auto;
|
| 261 |
+
cursor: default;
|
| 262 |
+
}
|
| 263 |
+
|
| 264 |
+
.stacked :enabled.selector-remove {
|
| 265 |
+
background-position: 0 0px;
|
| 266 |
+
cursor: pointer;
|
| 267 |
+
}
|
| 268 |
+
|
| 269 |
+
.stacked :enabled.selector-remove:focus, .stacked :enabled.selector-remove:hover {
|
| 270 |
+
background-position: 0 -24px;
|
| 271 |
+
cursor: pointer;
|
| 272 |
+
}
|
| 273 |
+
|
| 274 |
+
.selector .help-icon {
|
| 275 |
+
background: url(../img/icon-unknown.svg) 0 0 no-repeat;
|
| 276 |
+
display: inline-block;
|
| 277 |
+
vertical-align: middle;
|
| 278 |
+
margin: -2px 0 0 2px;
|
| 279 |
+
width: 13px;
|
| 280 |
+
height: 13px;
|
| 281 |
+
}
|
| 282 |
+
|
| 283 |
+
.selector .selector-chosen .help-icon {
|
| 284 |
+
background: url(../img/icon-unknown-alt.svg) 0 0 no-repeat;
|
| 285 |
+
}
|
| 286 |
+
|
| 287 |
+
.selector .search-label-icon {
|
| 288 |
+
background: url(../img/search.svg) 0 0 no-repeat;
|
| 289 |
+
display: inline-block;
|
| 290 |
+
height: 1.125rem;
|
| 291 |
+
width: 1.125rem;
|
| 292 |
+
}
|
| 293 |
+
|
| 294 |
+
/* DATE AND TIME */
|
| 295 |
+
|
| 296 |
+
p.datetime {
|
| 297 |
+
line-height: 20px;
|
| 298 |
+
margin: 0;
|
| 299 |
+
padding: 0;
|
| 300 |
+
color: var(--body-quiet-color);
|
| 301 |
+
font-weight: bold;
|
| 302 |
+
}
|
| 303 |
+
|
| 304 |
+
p.datetime label {
|
| 305 |
+
display: inline;
|
| 306 |
+
}
|
| 307 |
+
|
| 308 |
+
.datetime span {
|
| 309 |
+
white-space: nowrap;
|
| 310 |
+
font-weight: normal;
|
| 311 |
+
font-size: 0.6875rem;
|
| 312 |
+
color: var(--body-quiet-color);
|
| 313 |
+
}
|
| 314 |
+
|
| 315 |
+
.datetime input, .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField {
|
| 316 |
+
margin-left: 5px;
|
| 317 |
+
margin-bottom: 4px;
|
| 318 |
+
}
|
| 319 |
+
|
| 320 |
+
table p.datetime {
|
| 321 |
+
font-size: 0.6875rem;
|
| 322 |
+
margin-left: 0;
|
| 323 |
+
padding-left: 0;
|
| 324 |
+
}
|
| 325 |
+
|
| 326 |
+
.datetimeshortcuts .clock-icon, .datetimeshortcuts .date-icon {
|
| 327 |
+
position: relative;
|
| 328 |
+
display: inline-block;
|
| 329 |
+
vertical-align: middle;
|
| 330 |
+
height: 24px;
|
| 331 |
+
width: 24px;
|
| 332 |
+
overflow: hidden;
|
| 333 |
+
}
|
| 334 |
+
|
| 335 |
+
.datetimeshortcuts .clock-icon {
|
| 336 |
+
background: url(../img/icon-clock.svg) 0 0 no-repeat;
|
| 337 |
+
background-size: 24px auto;
|
| 338 |
+
}
|
| 339 |
+
|
| 340 |
+
.datetimeshortcuts a:focus .clock-icon,
|
| 341 |
+
.datetimeshortcuts a:hover .clock-icon {
|
| 342 |
+
background-position: 0 -24px;
|
| 343 |
+
}
|
| 344 |
+
|
| 345 |
+
.datetimeshortcuts .date-icon {
|
| 346 |
+
background: url(../img/icon-calendar.svg) 0 0 no-repeat;
|
| 347 |
+
background-size: 24px auto;
|
| 348 |
+
top: -1px;
|
| 349 |
+
}
|
| 350 |
+
|
| 351 |
+
.datetimeshortcuts a:focus .date-icon,
|
| 352 |
+
.datetimeshortcuts a:hover .date-icon {
|
| 353 |
+
background-position: 0 -24px;
|
| 354 |
+
}
|
| 355 |
+
|
| 356 |
+
.timezonewarning {
|
| 357 |
+
font-size: 0.6875rem;
|
| 358 |
+
color: var(--body-quiet-color);
|
| 359 |
+
}
|
| 360 |
+
|
| 361 |
+
/* URL */
|
| 362 |
+
|
| 363 |
+
p.url {
|
| 364 |
+
line-height: 20px;
|
| 365 |
+
margin: 0;
|
| 366 |
+
padding: 0;
|
| 367 |
+
color: var(--body-quiet-color);
|
| 368 |
+
font-size: 0.6875rem;
|
| 369 |
+
font-weight: bold;
|
| 370 |
+
}
|
| 371 |
+
|
| 372 |
+
.url a {
|
| 373 |
+
font-weight: normal;
|
| 374 |
+
}
|
| 375 |
+
|
| 376 |
+
/* FILE UPLOADS */
|
| 377 |
+
|
| 378 |
+
p.file-upload {
|
| 379 |
+
line-height: 20px;
|
| 380 |
+
margin: 0;
|
| 381 |
+
padding: 0;
|
| 382 |
+
color: var(--body-quiet-color);
|
| 383 |
+
font-size: 0.6875rem;
|
| 384 |
+
font-weight: bold;
|
| 385 |
+
}
|
| 386 |
+
|
| 387 |
+
.file-upload a {
|
| 388 |
+
font-weight: normal;
|
| 389 |
+
}
|
| 390 |
+
|
| 391 |
+
.file-upload .deletelink {
|
| 392 |
+
margin-left: 5px;
|
| 393 |
+
}
|
| 394 |
+
|
| 395 |
+
span.clearable-file-input label {
|
| 396 |
+
color: var(--body-fg);
|
| 397 |
+
font-size: 0.6875rem;
|
| 398 |
+
display: inline;
|
| 399 |
+
float: none;
|
| 400 |
+
}
|
| 401 |
+
|
| 402 |
+
/* CALENDARS & CLOCKS */
|
| 403 |
+
|
| 404 |
+
.calendarbox, .clockbox {
|
| 405 |
+
margin: 5px auto;
|
| 406 |
+
font-size: 0.75rem;
|
| 407 |
+
width: 19em;
|
| 408 |
+
text-align: center;
|
| 409 |
+
background: var(--body-bg);
|
| 410 |
+
color: var(--body-fg);
|
| 411 |
+
border: 1px solid var(--hairline-color);
|
| 412 |
+
border-radius: 4px;
|
| 413 |
+
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
|
| 414 |
+
overflow: hidden;
|
| 415 |
+
position: relative;
|
| 416 |
+
}
|
| 417 |
+
|
| 418 |
+
.clockbox {
|
| 419 |
+
width: auto;
|
| 420 |
+
}
|
| 421 |
+
|
| 422 |
+
.calendar {
|
| 423 |
+
margin: 0;
|
| 424 |
+
padding: 0;
|
| 425 |
+
}
|
| 426 |
+
|
| 427 |
+
.calendar table {
|
| 428 |
+
margin: 0;
|
| 429 |
+
padding: 0;
|
| 430 |
+
border-collapse: collapse;
|
| 431 |
+
background: white;
|
| 432 |
+
width: 100%;
|
| 433 |
+
}
|
| 434 |
+
|
| 435 |
+
.calendar caption, .calendarbox h2 {
|
| 436 |
+
margin: 0;
|
| 437 |
+
text-align: center;
|
| 438 |
+
border-top: none;
|
| 439 |
+
font-weight: 700;
|
| 440 |
+
font-size: 0.75rem;
|
| 441 |
+
color: #333;
|
| 442 |
+
background: var(--accent);
|
| 443 |
+
}
|
| 444 |
+
|
| 445 |
+
.calendar th {
|
| 446 |
+
padding: 8px 5px;
|
| 447 |
+
background: var(--darkened-bg);
|
| 448 |
+
border-bottom: 1px solid var(--border-color);
|
| 449 |
+
font-weight: 400;
|
| 450 |
+
font-size: 0.75rem;
|
| 451 |
+
text-align: center;
|
| 452 |
+
color: var(--body-quiet-color);
|
| 453 |
+
}
|
| 454 |
+
|
| 455 |
+
.calendar td {
|
| 456 |
+
font-weight: 400;
|
| 457 |
+
font-size: 0.75rem;
|
| 458 |
+
text-align: center;
|
| 459 |
+
padding: 0;
|
| 460 |
+
border-top: 1px solid var(--hairline-color);
|
| 461 |
+
border-bottom: none;
|
| 462 |
+
}
|
| 463 |
+
|
| 464 |
+
.calendar td.selected a {
|
| 465 |
+
background: var(--secondary);
|
| 466 |
+
color: var(--button-fg);
|
| 467 |
+
}
|
| 468 |
+
|
| 469 |
+
.calendar td.nonday {
|
| 470 |
+
background: var(--darkened-bg);
|
| 471 |
+
}
|
| 472 |
+
|
| 473 |
+
.calendar td.today a {
|
| 474 |
+
font-weight: 700;
|
| 475 |
+
}
|
| 476 |
+
|
| 477 |
+
.calendar td a, .timelist a {
|
| 478 |
+
display: block;
|
| 479 |
+
font-weight: 400;
|
| 480 |
+
padding: 6px;
|
| 481 |
+
text-decoration: none;
|
| 482 |
+
color: var(--body-quiet-color);
|
| 483 |
+
}
|
| 484 |
+
|
| 485 |
+
.calendar td a:focus, .timelist a:focus,
|
| 486 |
+
.calendar td a:hover, .timelist a:hover {
|
| 487 |
+
background: var(--primary);
|
| 488 |
+
color: white;
|
| 489 |
+
}
|
| 490 |
+
|
| 491 |
+
.calendar td a:active, .timelist a:active {
|
| 492 |
+
background: var(--header-bg);
|
| 493 |
+
color: white;
|
| 494 |
+
}
|
| 495 |
+
|
| 496 |
+
.calendarnav {
|
| 497 |
+
font-size: 0.625rem;
|
| 498 |
+
text-align: center;
|
| 499 |
+
color: #ccc;
|
| 500 |
+
margin: 0;
|
| 501 |
+
padding: 1px 3px;
|
| 502 |
+
}
|
| 503 |
+
|
| 504 |
+
.calendarnav a:link, #calendarnav a:visited,
|
| 505 |
+
#calendarnav a:focus, #calendarnav a:hover {
|
| 506 |
+
color: var(--body-quiet-color);
|
| 507 |
+
}
|
| 508 |
+
|
| 509 |
+
.calendar-shortcuts {
|
| 510 |
+
background: var(--body-bg);
|
| 511 |
+
color: var(--body-quiet-color);
|
| 512 |
+
font-size: 0.6875rem;
|
| 513 |
+
line-height: 0.6875rem;
|
| 514 |
+
border-top: 1px solid var(--hairline-color);
|
| 515 |
+
padding: 8px 0;
|
| 516 |
+
}
|
| 517 |
+
|
| 518 |
+
.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next {
|
| 519 |
+
display: block;
|
| 520 |
+
position: absolute;
|
| 521 |
+
top: 8px;
|
| 522 |
+
width: 15px;
|
| 523 |
+
height: 15px;
|
| 524 |
+
text-indent: -9999px;
|
| 525 |
+
padding: 0;
|
| 526 |
+
}
|
| 527 |
+
|
| 528 |
+
.calendarnav-previous {
|
| 529 |
+
left: 10px;
|
| 530 |
+
background: url(../img/calendar-icons.svg) 0 0 no-repeat;
|
| 531 |
+
}
|
| 532 |
+
|
| 533 |
+
.calendarnav-next {
|
| 534 |
+
right: 10px;
|
| 535 |
+
background: url(../img/calendar-icons.svg) 0 -15px no-repeat;
|
| 536 |
+
}
|
| 537 |
+
|
| 538 |
+
.calendar-cancel {
|
| 539 |
+
margin: 0;
|
| 540 |
+
padding: 4px 0;
|
| 541 |
+
font-size: 0.75rem;
|
| 542 |
+
background: var(--close-button-bg);
|
| 543 |
+
border-top: 1px solid var(--border-color);
|
| 544 |
+
color: var(--button-fg);
|
| 545 |
+
}
|
| 546 |
+
|
| 547 |
+
.calendar-cancel:focus, .calendar-cancel:hover {
|
| 548 |
+
background: var(--close-button-hover-bg);
|
| 549 |
+
}
|
| 550 |
+
|
| 551 |
+
.calendar-cancel a {
|
| 552 |
+
color: var(--button-fg);
|
| 553 |
+
display: block;
|
| 554 |
+
}
|
| 555 |
+
|
| 556 |
+
ul.timelist, .timelist li {
|
| 557 |
+
list-style-type: none;
|
| 558 |
+
margin: 0;
|
| 559 |
+
padding: 0;
|
| 560 |
+
}
|
| 561 |
+
|
| 562 |
+
.timelist a {
|
| 563 |
+
padding: 2px;
|
| 564 |
+
}
|
| 565 |
+
|
| 566 |
+
/* EDIT INLINE */
|
| 567 |
+
|
| 568 |
+
.inline-deletelink {
|
| 569 |
+
float: right;
|
| 570 |
+
text-indent: -9999px;
|
| 571 |
+
background: url(../img/inline-delete.svg) center center no-repeat;
|
| 572 |
+
background-size: contain;
|
| 573 |
+
width: 1.5rem;
|
| 574 |
+
height: 1.5rem;
|
| 575 |
+
border: 0px none;
|
| 576 |
+
margin-bottom: .25rem;
|
| 577 |
+
}
|
| 578 |
+
|
| 579 |
+
.inline-deletelink:focus, .inline-deletelink:hover {
|
| 580 |
+
cursor: pointer;
|
| 581 |
+
}
|
| 582 |
+
|
| 583 |
+
/* RELATED WIDGET WRAPPER */
|
| 584 |
+
.related-widget-wrapper {
|
| 585 |
+
display: flex;
|
| 586 |
+
gap: 0 10px;
|
| 587 |
+
flex-grow: 1;
|
| 588 |
+
flex-wrap: wrap;
|
| 589 |
+
margin-bottom: 5px;
|
| 590 |
+
}
|
| 591 |
+
|
| 592 |
+
.related-widget-wrapper-link {
|
| 593 |
+
opacity: .6;
|
| 594 |
+
filter: grayscale(1);
|
| 595 |
+
}
|
| 596 |
+
|
| 597 |
+
.related-widget-wrapper-link:link {
|
| 598 |
+
opacity: 1;
|
| 599 |
+
filter: grayscale(0);
|
| 600 |
+
}
|
| 601 |
+
|
| 602 |
+
/* GIS MAPS */
|
| 603 |
+
.dj_map {
|
| 604 |
+
width: 600px;
|
| 605 |
+
height: 400px;
|
| 606 |
+
}
|
staticfiles/admin/img/README.md
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Information about icons in this directory
|
| 2 |
+
|
| 3 |
+
## License
|
| 4 |
+
|
| 5 |
+
All icons in this directory are provided by
|
| 6 |
+
[Font Awesome Free](https://fontawesome.com), version 6.7.2.
|
| 7 |
+
|
| 8 |
+
- The icons are licensed under the [Creative Commons Attribution 4.0
|
| 9 |
+
International (CC-BY-4.0)](https://creativecommons.org/licenses/by/4.0/)
|
| 10 |
+
license.
|
| 11 |
+
- This license allows you to use, modify, and distribute the icons, provided
|
| 12 |
+
proper attribution is given.
|
| 13 |
+
|
| 14 |
+
## Usage
|
| 15 |
+
|
| 16 |
+
- You may use, modify, and distribute the icons in this repository in
|
| 17 |
+
compliance with the [Creative Commons Attribution 4.0 International
|
| 18 |
+
(CC-BY-4.0)](https://creativecommons.org/licenses/by/4.0/) license.
|
| 19 |
+
|
| 20 |
+
## Modifications
|
| 21 |
+
|
| 22 |
+
- These icons have been resized, recolored, or otherwise modified to fit the
|
| 23 |
+
requirements of this project.
|
| 24 |
+
|
| 25 |
+
- These modifications alter the appearance of the original icons but remain
|
| 26 |
+
covered under the terms of the
|
| 27 |
+
[CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/) license.
|
| 28 |
+
|
| 29 |
+
## Contributing SVG Icons
|
| 30 |
+
|
| 31 |
+
To ensure visual consistency, traceability, and proper license attribution,
|
| 32 |
+
follow these guidelines. This applies when adding or modifying icons.
|
| 33 |
+
|
| 34 |
+
## ⚠️ Important: Changing Font Awesome Version
|
| 35 |
+
|
| 36 |
+
If you update to a different Font Awesome version, you must **update all SVG
|
| 37 |
+
files** and **comments inside the files** to reflect the new version number and
|
| 38 |
+
licensing URL accordingly. For example:
|
| 39 |
+
|
| 40 |
+
* Original:
|
| 41 |
+
```xml
|
| 42 |
+
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
|
| 43 |
+
```
|
| 44 |
+
* Updated:
|
| 45 |
+
```xml
|
| 46 |
+
<!--!Font Awesome Free X.Y.Z by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright YYYY Fonticons, Inc.-->
|
| 47 |
+
```
|
| 48 |
+
|
| 49 |
+
## Adding a new icon
|
| 50 |
+
|
| 51 |
+
1. Use only [Font Awesome Free Icons](https://fontawesome.com/icons).
|
| 52 |
+
2. Save the icon as an .svg file in this directory.
|
| 53 |
+
3. Include the following attribution comment at the top of the file (do not
|
| 54 |
+
change it):
|
| 55 |
+
```xml
|
| 56 |
+
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
|
| 57 |
+
```
|
| 58 |
+
4. Right before the `<path>` element, add the following metadata comment with
|
| 59 |
+
the appropriate values:
|
| 60 |
+
```xml
|
| 61 |
+
<!--
|
| 62 |
+
Icon Name: [icon-name]
|
| 63 |
+
Icon Family: [classic | sharp | brands | etc.]
|
| 64 |
+
Icon Style: [solid | regular | light | thin | duotone | etc.]
|
| 65 |
+
-->
|
| 66 |
+
```
|
| 67 |
+
|
| 68 |
+
### Example SVG Structure
|
| 69 |
+
|
| 70 |
+
```xml
|
| 71 |
+
<svg width="13" height="13" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
|
| 72 |
+
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
|
| 73 |
+
<!--
|
| 74 |
+
Icon Name: plus
|
| 75 |
+
Icon Family: classic
|
| 76 |
+
Icon Style: solid
|
| 77 |
+
-->
|
| 78 |
+
<path fill="#5fa225" stroke="#5fa225" stroke-width="30" d="M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 144L48 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l144 0 0 144c0 17.7 14.3 32 32 32s32-14.3 32-32l0-144 144 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-144 0 0-144z"/>
|
| 79 |
+
</svg>
|
| 80 |
+
```
|
staticfiles/admin/img/calendar-icons.svg
ADDED
|
|
staticfiles/admin/img/icon-addlink.svg
ADDED
|
|
staticfiles/admin/img/icon-alert-dark.svg
ADDED
|
|
staticfiles/admin/img/icon-alert.svg
ADDED
|
|
staticfiles/admin/img/icon-calendar.svg
ADDED
|
|
staticfiles/admin/img/icon-changelink.svg
ADDED
|
|
staticfiles/admin/img/icon-clock.svg
ADDED
|
|
staticfiles/admin/img/icon-debug-dark.svg
ADDED
|
|
staticfiles/admin/img/icon-debug.svg
ADDED
|
|
staticfiles/admin/img/icon-deletelink.svg
ADDED
|
|
staticfiles/admin/img/icon-hidelink.svg
ADDED
|
|
staticfiles/admin/img/icon-info-dark.svg
ADDED
|
|
staticfiles/admin/img/icon-info.svg
ADDED
|
|
staticfiles/admin/img/icon-no-dark.svg
ADDED
|
|
staticfiles/admin/img/icon-no.svg
ADDED
|
|
staticfiles/admin/img/icon-unknown-alt.svg
ADDED
|
|
staticfiles/admin/img/icon-unknown.svg
ADDED
|
|
staticfiles/admin/img/icon-viewlink.svg
ADDED
|
|
staticfiles/admin/img/icon-yes-dark.svg
ADDED
|
|
staticfiles/admin/img/icon-yes.svg
ADDED
|
|
staticfiles/admin/img/inline-delete.svg
ADDED
|
|
staticfiles/admin/img/search.svg
ADDED
|
|
staticfiles/admin/img/selector-icons.svg
ADDED
|
|
staticfiles/admin/img/sorting-icons.svg
ADDED
|
|
staticfiles/admin/img/tooltag-add.svg
ADDED
|
|
staticfiles/admin/img/tooltag-arrowright.svg
ADDED
|
|
staticfiles/admin/js/SelectBox.js
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
'use strict';
|
| 2 |
+
{
|
| 3 |
+
const SelectBox = {
|
| 4 |
+
cache: {},
|
| 5 |
+
init: function(id) {
|
| 6 |
+
const box = document.getElementById(id);
|
| 7 |
+
SelectBox.cache[id] = [];
|
| 8 |
+
const cache = SelectBox.cache[id];
|
| 9 |
+
for (const node of box.options) {
|
| 10 |
+
cache.push({value: node.value, text: node.text, displayed: 1});
|
| 11 |
+
}
|
| 12 |
+
},
|
| 13 |
+
redisplay: function(id) {
|
| 14 |
+
// Repopulate HTML select box from cache
|
| 15 |
+
const box = document.getElementById(id);
|
| 16 |
+
const scroll_value_from_top = box.scrollTop;
|
| 17 |
+
box.innerHTML = '';
|
| 18 |
+
for (const node of SelectBox.cache[id]) {
|
| 19 |
+
if (node.displayed) {
|
| 20 |
+
const new_option = new Option(node.text, node.value, false, false);
|
| 21 |
+
// Shows a tooltip when hovering over the option
|
| 22 |
+
new_option.title = node.text;
|
| 23 |
+
box.appendChild(new_option);
|
| 24 |
+
}
|
| 25 |
+
}
|
| 26 |
+
box.scrollTop = scroll_value_from_top;
|
| 27 |
+
},
|
| 28 |
+
filter: function(id, text) {
|
| 29 |
+
// Redisplay the HTML select box, displaying only the choices containing ALL
|
| 30 |
+
// the words in text. (It's an AND search.)
|
| 31 |
+
const tokens = text.toLowerCase().split(/\s+/);
|
| 32 |
+
for (const node of SelectBox.cache[id]) {
|
| 33 |
+
node.displayed = 1;
|
| 34 |
+
const node_text = node.text.toLowerCase();
|
| 35 |
+
for (const token of tokens) {
|
| 36 |
+
if (!node_text.includes(token)) {
|
| 37 |
+
node.displayed = 0;
|
| 38 |
+
break; // Once the first token isn't found we're done
|
| 39 |
+
}
|
| 40 |
+
}
|
| 41 |
+
}
|
| 42 |
+
SelectBox.redisplay(id);
|
| 43 |
+
},
|
| 44 |
+
get_hidden_node_count(id) {
|
| 45 |
+
const cache = SelectBox.cache[id] || [];
|
| 46 |
+
return cache.filter(node => node.displayed === 0).length;
|
| 47 |
+
},
|
| 48 |
+
delete_from_cache: function(id, value) {
|
| 49 |
+
let delete_index = null;
|
| 50 |
+
const cache = SelectBox.cache[id];
|
| 51 |
+
for (const [i, node] of cache.entries()) {
|
| 52 |
+
if (node.value === value) {
|
| 53 |
+
delete_index = i;
|
| 54 |
+
break;
|
| 55 |
+
}
|
| 56 |
+
}
|
| 57 |
+
cache.splice(delete_index, 1);
|
| 58 |
+
},
|
| 59 |
+
add_to_cache: function(id, option) {
|
| 60 |
+
SelectBox.cache[id].push({value: option.value, text: option.text, displayed: 1});
|
| 61 |
+
},
|
| 62 |
+
cache_contains: function(id, value) {
|
| 63 |
+
// Check if an item is contained in the cache
|
| 64 |
+
for (const node of SelectBox.cache[id]) {
|
| 65 |
+
if (node.value === value) {
|
| 66 |
+
return true;
|
| 67 |
+
}
|
| 68 |
+
}
|
| 69 |
+
return false;
|
| 70 |
+
},
|
| 71 |
+
move: function(from, to) {
|
| 72 |
+
const from_box = document.getElementById(from);
|
| 73 |
+
for (const option of from_box.options) {
|
| 74 |
+
const option_value = option.value;
|
| 75 |
+
if (option.selected && SelectBox.cache_contains(from, option_value)) {
|
| 76 |
+
SelectBox.add_to_cache(to, {value: option_value, text: option.text, displayed: 1});
|
| 77 |
+
SelectBox.delete_from_cache(from, option_value);
|
| 78 |
+
}
|
| 79 |
+
}
|
| 80 |
+
SelectBox.redisplay(from);
|
| 81 |
+
SelectBox.redisplay(to);
|
| 82 |
+
},
|
| 83 |
+
move_all: function(from, to) {
|
| 84 |
+
const from_box = document.getElementById(from);
|
| 85 |
+
for (const option of from_box.options) {
|
| 86 |
+
const option_value = option.value;
|
| 87 |
+
if (SelectBox.cache_contains(from, option_value)) {
|
| 88 |
+
SelectBox.add_to_cache(to, {value: option_value, text: option.text, displayed: 1});
|
| 89 |
+
SelectBox.delete_from_cache(from, option_value);
|
| 90 |
+
}
|
| 91 |
+
}
|
| 92 |
+
SelectBox.redisplay(from);
|
| 93 |
+
SelectBox.redisplay(to);
|
| 94 |
+
},
|
| 95 |
+
sort: function(id) {
|
| 96 |
+
SelectBox.cache[id].sort(function(a, b) {
|
| 97 |
+
a = a.text.toLowerCase();
|
| 98 |
+
b = b.text.toLowerCase();
|
| 99 |
+
if (a > b) {
|
| 100 |
+
return 1;
|
| 101 |
+
}
|
| 102 |
+
if (a < b) {
|
| 103 |
+
return -1;
|
| 104 |
+
}
|
| 105 |
+
return 0;
|
| 106 |
+
} );
|
| 107 |
+
},
|
| 108 |
+
select_all: function(id) {
|
| 109 |
+
const box = document.getElementById(id);
|
| 110 |
+
for (const option of box.options) {
|
| 111 |
+
option.selected = true;
|
| 112 |
+
}
|
| 113 |
+
}
|
| 114 |
+
};
|
| 115 |
+
window.SelectBox = SelectBox;
|
| 116 |
+
}
|
staticfiles/admin/js/SelectFilter2.js
ADDED
|
@@ -0,0 +1,329 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*global SelectBox, gettext, ngettext, interpolate, quickElement, SelectFilter*/
|
| 2 |
+
/*
|
| 3 |
+
SelectFilter2 - Turns a multiple-select box into a filter interface.
|
| 4 |
+
|
| 5 |
+
Requires core.js and SelectBox.js.
|
| 6 |
+
*/
|
| 7 |
+
'use strict';
|
| 8 |
+
{
|
| 9 |
+
window.SelectFilter = {
|
| 10 |
+
init: function(field_id, field_name, is_stacked) {
|
| 11 |
+
if (field_id.match(/__prefix__/)) {
|
| 12 |
+
// Don't initialize on empty forms.
|
| 13 |
+
return;
|
| 14 |
+
}
|
| 15 |
+
const from_box = document.getElementById(field_id);
|
| 16 |
+
from_box.id += '_from'; // change its ID
|
| 17 |
+
from_box.className = 'filtered';
|
| 18 |
+
from_box.setAttribute('aria-labelledby', field_id + '_from_label');
|
| 19 |
+
from_box.setAttribute('aria-describedby', `${field_id}_helptext ${field_id}_choose_helptext`);
|
| 20 |
+
|
| 21 |
+
for (const p of from_box.parentNode.getElementsByTagName('p')) {
|
| 22 |
+
if (p.classList.contains("info")) {
|
| 23 |
+
// Remove <p class="info">, because it just gets in the way.
|
| 24 |
+
from_box.parentNode.removeChild(p);
|
| 25 |
+
} else if (p.classList.contains("help")) {
|
| 26 |
+
// Move help text up to the top so it isn't below the select
|
| 27 |
+
// boxes or wrapped off on the side to the right of the add
|
| 28 |
+
// button:
|
| 29 |
+
from_box.parentNode.insertBefore(p, from_box.parentNode.firstChild);
|
| 30 |
+
}
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
+
// <div class="selector"> or <div class="selector stacked">
|
| 34 |
+
const selector_div = quickElement('div', from_box.parentNode);
|
| 35 |
+
// Make sure the selector div is at the beginning so that the
|
| 36 |
+
// add link would be displayed to the right of the widget.
|
| 37 |
+
from_box.parentNode.prepend(selector_div);
|
| 38 |
+
selector_div.className = is_stacked ? 'selector stacked' : 'selector';
|
| 39 |
+
|
| 40 |
+
// <div class="selector-available">
|
| 41 |
+
const selector_available = quickElement('div', selector_div);
|
| 42 |
+
selector_available.className = 'selector-available';
|
| 43 |
+
const selector_available_title = quickElement('div', selector_available);
|
| 44 |
+
selector_available_title.id = field_id + '_from_title';
|
| 45 |
+
selector_available_title.className = 'selector-available-title';
|
| 46 |
+
quickElement(
|
| 47 |
+
'label',
|
| 48 |
+
selector_available_title,
|
| 49 |
+
interpolate(gettext('Available %s') + ' ', [field_name]),
|
| 50 |
+
'id',
|
| 51 |
+
field_id + '_from_label',
|
| 52 |
+
'for',
|
| 53 |
+
field_id + '_from'
|
| 54 |
+
);
|
| 55 |
+
quickElement(
|
| 56 |
+
'p',
|
| 57 |
+
selector_available_title,
|
| 58 |
+
interpolate(gettext('Choose %s by selecting them and then select the "Choose" arrow button.'), [field_name]),
|
| 59 |
+
'id', `${field_id}_choose_helptext`, 'class', 'helptext'
|
| 60 |
+
);
|
| 61 |
+
|
| 62 |
+
const filter_p = quickElement('p', selector_available, '', 'id', field_id + '_filter');
|
| 63 |
+
filter_p.className = 'selector-filter';
|
| 64 |
+
|
| 65 |
+
const search_filter_label = quickElement('label', filter_p, '', 'for', field_id + '_input');
|
| 66 |
+
|
| 67 |
+
quickElement(
|
| 68 |
+
'span', search_filter_label, '',
|
| 69 |
+
'class', 'help-tooltip search-label-icon',
|
| 70 |
+
'aria-label', interpolate(gettext("Type into this box to filter down the list of available %s."), [field_name])
|
| 71 |
+
);
|
| 72 |
+
|
| 73 |
+
filter_p.appendChild(document.createTextNode(' '));
|
| 74 |
+
|
| 75 |
+
const filter_input = quickElement('input', filter_p, '', 'type', 'text', 'placeholder', gettext("Filter"));
|
| 76 |
+
filter_input.id = field_id + '_input';
|
| 77 |
+
|
| 78 |
+
selector_available.appendChild(from_box);
|
| 79 |
+
const choose_all = quickElement(
|
| 80 |
+
'button',
|
| 81 |
+
selector_available,
|
| 82 |
+
interpolate(gettext('Choose all %s'), [field_name]),
|
| 83 |
+
'id', field_id + '_add_all',
|
| 84 |
+
'class', 'selector-chooseall',
|
| 85 |
+
'type', 'button'
|
| 86 |
+
);
|
| 87 |
+
|
| 88 |
+
// <ul class="selector-chooser">
|
| 89 |
+
const selector_chooser = quickElement('ul', selector_div);
|
| 90 |
+
selector_chooser.className = 'selector-chooser';
|
| 91 |
+
const add_button = quickElement(
|
| 92 |
+
'button',
|
| 93 |
+
quickElement('li', selector_chooser),
|
| 94 |
+
interpolate(gettext('Choose selected %s'), [field_name]),
|
| 95 |
+
'id', field_id + '_add',
|
| 96 |
+
'class', 'selector-add',
|
| 97 |
+
'type', 'button'
|
| 98 |
+
);
|
| 99 |
+
const remove_button = quickElement(
|
| 100 |
+
'button',
|
| 101 |
+
quickElement('li', selector_chooser),
|
| 102 |
+
interpolate(gettext('Remove selected %s'), [field_name]),
|
| 103 |
+
'id', field_id + '_remove',
|
| 104 |
+
'class', 'selector-remove',
|
| 105 |
+
'type', 'button'
|
| 106 |
+
);
|
| 107 |
+
|
| 108 |
+
// <div class="selector-chosen">
|
| 109 |
+
const selector_chosen = quickElement('div', selector_div, '', 'id', field_id + '_selector_chosen');
|
| 110 |
+
selector_chosen.className = 'selector-chosen';
|
| 111 |
+
const selector_chosen_title = quickElement('div', selector_chosen);
|
| 112 |
+
selector_chosen_title.className = 'selector-chosen-title';
|
| 113 |
+
selector_chosen_title.id = field_id + '_to_title';
|
| 114 |
+
quickElement(
|
| 115 |
+
'label',
|
| 116 |
+
selector_chosen_title,
|
| 117 |
+
interpolate(gettext('Chosen %s') + ' ', [field_name]),
|
| 118 |
+
'id',
|
| 119 |
+
field_id + '_to_label',
|
| 120 |
+
'for',
|
| 121 |
+
field_id + '_to'
|
| 122 |
+
);
|
| 123 |
+
quickElement(
|
| 124 |
+
'p',
|
| 125 |
+
selector_chosen_title,
|
| 126 |
+
interpolate(gettext('Remove %s by selecting them and then select the "Remove" arrow button.'), [field_name]),
|
| 127 |
+
'id', `${field_id}_remove_helptext`, 'class', 'helptext'
|
| 128 |
+
);
|
| 129 |
+
|
| 130 |
+
const filter_selected_p = quickElement('p', selector_chosen, '', 'id', field_id + '_filter_selected');
|
| 131 |
+
filter_selected_p.className = 'selector-filter';
|
| 132 |
+
|
| 133 |
+
const search_filter_selected_label = quickElement('label', filter_selected_p, '', 'for', field_id + '_selected_input');
|
| 134 |
+
|
| 135 |
+
quickElement(
|
| 136 |
+
'span', search_filter_selected_label, '',
|
| 137 |
+
'class', 'help-tooltip search-label-icon',
|
| 138 |
+
'aria-label', interpolate(gettext("Type into this box to filter down the list of selected %s."), [field_name])
|
| 139 |
+
);
|
| 140 |
+
|
| 141 |
+
filter_selected_p.appendChild(document.createTextNode(' '));
|
| 142 |
+
|
| 143 |
+
const filter_selected_input = quickElement('input', filter_selected_p, '', 'type', 'text', 'placeholder', gettext("Filter"));
|
| 144 |
+
filter_selected_input.id = field_id + '_selected_input';
|
| 145 |
+
|
| 146 |
+
quickElement(
|
| 147 |
+
'select',
|
| 148 |
+
selector_chosen,
|
| 149 |
+
'',
|
| 150 |
+
'id', field_id + '_to',
|
| 151 |
+
'multiple', '',
|
| 152 |
+
'size', from_box.size,
|
| 153 |
+
'name', from_box.name,
|
| 154 |
+
'aria-labelledby', field_id + '_to_label',
|
| 155 |
+
'aria-describedby', `${field_id}_helptext ${field_id}_remove_helptext`,
|
| 156 |
+
'class', 'filtered'
|
| 157 |
+
);
|
| 158 |
+
const warning_footer = quickElement('div', selector_chosen, '', 'class', 'list-footer-display');
|
| 159 |
+
quickElement('span', warning_footer, '', 'id', field_id + '_list-footer-display-text');
|
| 160 |
+
quickElement('span', warning_footer, ' ' + gettext('(click to clear)'), 'class', 'list-footer-display__clear');
|
| 161 |
+
const clear_all = quickElement(
|
| 162 |
+
'button',
|
| 163 |
+
selector_chosen,
|
| 164 |
+
interpolate(gettext('Remove all %s'), [field_name]),
|
| 165 |
+
'id', field_id + '_remove_all',
|
| 166 |
+
'class', 'selector-clearall',
|
| 167 |
+
'type', 'button'
|
| 168 |
+
);
|
| 169 |
+
|
| 170 |
+
from_box.name = from_box.name + '_old';
|
| 171 |
+
|
| 172 |
+
// Set up the JavaScript event handlers for the select box filter interface
|
| 173 |
+
const move_selection = function(e, elem, move_func, from, to) {
|
| 174 |
+
if (!elem.hasAttribute('disabled')) {
|
| 175 |
+
move_func(from, to);
|
| 176 |
+
SelectFilter.refresh_icons(field_id);
|
| 177 |
+
SelectFilter.refresh_filtered_selects(field_id);
|
| 178 |
+
SelectFilter.refresh_filtered_warning(field_id);
|
| 179 |
+
}
|
| 180 |
+
e.preventDefault();
|
| 181 |
+
};
|
| 182 |
+
choose_all.addEventListener('click', function(e) {
|
| 183 |
+
move_selection(e, this, SelectBox.move_all, field_id + '_from', field_id + '_to');
|
| 184 |
+
});
|
| 185 |
+
add_button.addEventListener('click', function(e) {
|
| 186 |
+
move_selection(e, this, SelectBox.move, field_id + '_from', field_id + '_to');
|
| 187 |
+
});
|
| 188 |
+
remove_button.addEventListener('click', function(e) {
|
| 189 |
+
move_selection(e, this, SelectBox.move, field_id + '_to', field_id + '_from');
|
| 190 |
+
});
|
| 191 |
+
clear_all.addEventListener('click', function(e) {
|
| 192 |
+
move_selection(e, this, SelectBox.move_all, field_id + '_to', field_id + '_from');
|
| 193 |
+
});
|
| 194 |
+
warning_footer.addEventListener('click', function(e) {
|
| 195 |
+
filter_selected_input.value = '';
|
| 196 |
+
SelectBox.filter(field_id + '_to', '');
|
| 197 |
+
SelectFilter.refresh_filtered_warning(field_id);
|
| 198 |
+
SelectFilter.refresh_icons(field_id);
|
| 199 |
+
});
|
| 200 |
+
filter_input.addEventListener('keypress', function(e) {
|
| 201 |
+
SelectFilter.filter_key_press(e, field_id, '_from', '_to');
|
| 202 |
+
});
|
| 203 |
+
filter_input.addEventListener('keyup', function(e) {
|
| 204 |
+
SelectFilter.filter_key_up(e, field_id, '_from');
|
| 205 |
+
});
|
| 206 |
+
filter_input.addEventListener('keydown', function(e) {
|
| 207 |
+
SelectFilter.filter_key_down(e, field_id, '_from', '_to');
|
| 208 |
+
});
|
| 209 |
+
filter_selected_input.addEventListener('keypress', function(e) {
|
| 210 |
+
SelectFilter.filter_key_press(e, field_id, '_to', '_from');
|
| 211 |
+
});
|
| 212 |
+
filter_selected_input.addEventListener('keyup', function(e) {
|
| 213 |
+
SelectFilter.filter_key_up(e, field_id, '_to', '_selected_input');
|
| 214 |
+
});
|
| 215 |
+
filter_selected_input.addEventListener('keydown', function(e) {
|
| 216 |
+
SelectFilter.filter_key_down(e, field_id, '_to', '_from');
|
| 217 |
+
});
|
| 218 |
+
selector_div.addEventListener('change', function(e) {
|
| 219 |
+
if (e.target.tagName === 'SELECT') {
|
| 220 |
+
SelectFilter.refresh_icons(field_id);
|
| 221 |
+
}
|
| 222 |
+
});
|
| 223 |
+
selector_div.addEventListener('dblclick', function(e) {
|
| 224 |
+
if (e.target.tagName === 'OPTION') {
|
| 225 |
+
if (e.target.closest('select').id === field_id + '_to') {
|
| 226 |
+
SelectBox.move(field_id + '_to', field_id + '_from');
|
| 227 |
+
} else {
|
| 228 |
+
SelectBox.move(field_id + '_from', field_id + '_to');
|
| 229 |
+
}
|
| 230 |
+
SelectFilter.refresh_icons(field_id);
|
| 231 |
+
}
|
| 232 |
+
});
|
| 233 |
+
from_box.closest('form').addEventListener('submit', function() {
|
| 234 |
+
SelectBox.filter(field_id + '_to', '');
|
| 235 |
+
SelectBox.select_all(field_id + '_to');
|
| 236 |
+
});
|
| 237 |
+
SelectBox.init(field_id + '_from');
|
| 238 |
+
SelectBox.init(field_id + '_to');
|
| 239 |
+
// Move selected from_box options to to_box
|
| 240 |
+
SelectBox.move(field_id + '_from', field_id + '_to');
|
| 241 |
+
|
| 242 |
+
// Initial icon refresh
|
| 243 |
+
SelectFilter.refresh_icons(field_id);
|
| 244 |
+
},
|
| 245 |
+
any_selected: function(field) {
|
| 246 |
+
// Temporarily add the required attribute and check validity.
|
| 247 |
+
field.required = true;
|
| 248 |
+
const any_selected = field.checkValidity();
|
| 249 |
+
field.required = false;
|
| 250 |
+
return any_selected;
|
| 251 |
+
},
|
| 252 |
+
refresh_filtered_warning: function(field_id) {
|
| 253 |
+
const count = SelectBox.get_hidden_node_count(field_id + '_to');
|
| 254 |
+
const selector = document.getElementById(field_id + '_selector_chosen');
|
| 255 |
+
const warning = document.getElementById(field_id + '_list-footer-display-text');
|
| 256 |
+
selector.className = selector.className.replace('selector-chosen--with-filtered', '');
|
| 257 |
+
warning.textContent = interpolate(ngettext(
|
| 258 |
+
'%s selected option not visible',
|
| 259 |
+
'%s selected options not visible',
|
| 260 |
+
count
|
| 261 |
+
), [count]);
|
| 262 |
+
if(count > 0) {
|
| 263 |
+
selector.className += ' selector-chosen--with-filtered';
|
| 264 |
+
}
|
| 265 |
+
},
|
| 266 |
+
refresh_filtered_selects: function(field_id) {
|
| 267 |
+
SelectBox.filter(field_id + '_from', document.getElementById(field_id + "_input").value);
|
| 268 |
+
SelectBox.filter(field_id + '_to', document.getElementById(field_id + "_selected_input").value);
|
| 269 |
+
},
|
| 270 |
+
refresh_icons: function(field_id) {
|
| 271 |
+
const from = document.getElementById(field_id + '_from');
|
| 272 |
+
const to = document.getElementById(field_id + '_to');
|
| 273 |
+
// Disabled if no items are selected.
|
| 274 |
+
document.getElementById(field_id + '_add').disabled = !SelectFilter.any_selected(from);
|
| 275 |
+
document.getElementById(field_id + '_remove').disabled = !SelectFilter.any_selected(to);
|
| 276 |
+
// Disabled if the corresponding box is empty.
|
| 277 |
+
document.getElementById(field_id + '_add_all').disabled = !from.querySelector('option');
|
| 278 |
+
document.getElementById(field_id + '_remove_all').disabled = !to.querySelector('option');
|
| 279 |
+
},
|
| 280 |
+
filter_key_press: function(event, field_id, source, target) {
|
| 281 |
+
const source_box = document.getElementById(field_id + source);
|
| 282 |
+
// don't submit form if user pressed Enter
|
| 283 |
+
if ((event.which && event.which === 13) || (event.keyCode && event.keyCode === 13)) {
|
| 284 |
+
source_box.selectedIndex = 0;
|
| 285 |
+
SelectBox.move(field_id + source, field_id + target);
|
| 286 |
+
source_box.selectedIndex = 0;
|
| 287 |
+
event.preventDefault();
|
| 288 |
+
}
|
| 289 |
+
},
|
| 290 |
+
filter_key_up: function(event, field_id, source, filter_input) {
|
| 291 |
+
const input = filter_input || '_input';
|
| 292 |
+
const source_box = document.getElementById(field_id + source);
|
| 293 |
+
const temp = source_box.selectedIndex;
|
| 294 |
+
SelectBox.filter(field_id + source, document.getElementById(field_id + input).value);
|
| 295 |
+
source_box.selectedIndex = temp;
|
| 296 |
+
SelectFilter.refresh_filtered_warning(field_id);
|
| 297 |
+
SelectFilter.refresh_icons(field_id);
|
| 298 |
+
},
|
| 299 |
+
filter_key_down: function(event, field_id, source, target) {
|
| 300 |
+
const source_box = document.getElementById(field_id + source);
|
| 301 |
+
// right key (39) or left key (37)
|
| 302 |
+
const direction = source === '_from' ? 39 : 37;
|
| 303 |
+
// right arrow -- move across
|
| 304 |
+
if ((event.which && event.which === direction) || (event.keyCode && event.keyCode === direction)) {
|
| 305 |
+
const old_index = source_box.selectedIndex;
|
| 306 |
+
SelectBox.move(field_id + source, field_id + target);
|
| 307 |
+
SelectFilter.refresh_filtered_selects(field_id);
|
| 308 |
+
SelectFilter.refresh_filtered_warning(field_id);
|
| 309 |
+
source_box.selectedIndex = (old_index === source_box.length) ? source_box.length - 1 : old_index;
|
| 310 |
+
return;
|
| 311 |
+
}
|
| 312 |
+
// down arrow -- wrap around
|
| 313 |
+
if ((event.which && event.which === 40) || (event.keyCode && event.keyCode === 40)) {
|
| 314 |
+
source_box.selectedIndex = (source_box.length === source_box.selectedIndex + 1) ? 0 : source_box.selectedIndex + 1;
|
| 315 |
+
}
|
| 316 |
+
// up arrow -- wrap around
|
| 317 |
+
if ((event.which && event.which === 38) || (event.keyCode && event.keyCode === 38)) {
|
| 318 |
+
source_box.selectedIndex = (source_box.selectedIndex === 0) ? source_box.length - 1 : source_box.selectedIndex - 1;
|
| 319 |
+
}
|
| 320 |
+
}
|
| 321 |
+
};
|
| 322 |
+
|
| 323 |
+
window.addEventListener('load', function(e) {
|
| 324 |
+
document.querySelectorAll('select.selectfilter, select.selectfilterstacked').forEach(function(el) {
|
| 325 |
+
const data = el.dataset;
|
| 326 |
+
SelectFilter.init(el.id, data.fieldName, parseInt(data.isStacked, 10));
|
| 327 |
+
});
|
| 328 |
+
});
|
| 329 |
+
}
|
staticfiles/admin/js/actions.js
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*global gettext, interpolate, ngettext, Actions*/
|
| 2 |
+
'use strict';
|
| 3 |
+
{
|
| 4 |
+
function show(selector) {
|
| 5 |
+
document.querySelectorAll(selector).forEach(function(el) {
|
| 6 |
+
el.classList.remove('hidden');
|
| 7 |
+
});
|
| 8 |
+
}
|
| 9 |
+
|
| 10 |
+
function hide(selector) {
|
| 11 |
+
document.querySelectorAll(selector).forEach(function(el) {
|
| 12 |
+
el.classList.add('hidden');
|
| 13 |
+
});
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
function showQuestion(options) {
|
| 17 |
+
hide(options.acrossClears);
|
| 18 |
+
show(options.acrossQuestions);
|
| 19 |
+
hide(options.allContainer);
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
function showClear(options) {
|
| 23 |
+
show(options.acrossClears);
|
| 24 |
+
hide(options.acrossQuestions);
|
| 25 |
+
document.querySelector(options.actionContainer).classList.remove(options.selectedClass);
|
| 26 |
+
show(options.allContainer);
|
| 27 |
+
hide(options.counterContainer);
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
function reset(options) {
|
| 31 |
+
hide(options.acrossClears);
|
| 32 |
+
hide(options.acrossQuestions);
|
| 33 |
+
hide(options.allContainer);
|
| 34 |
+
show(options.counterContainer);
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
function clearAcross(options) {
|
| 38 |
+
reset(options);
|
| 39 |
+
const acrossInputs = document.querySelectorAll(options.acrossInput);
|
| 40 |
+
acrossInputs.forEach(function(acrossInput) {
|
| 41 |
+
acrossInput.value = 0;
|
| 42 |
+
});
|
| 43 |
+
document.querySelector(options.actionContainer).classList.remove(options.selectedClass);
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
function checker(actionCheckboxes, options, checked) {
|
| 47 |
+
if (checked) {
|
| 48 |
+
showQuestion(options);
|
| 49 |
+
} else {
|
| 50 |
+
reset(options);
|
| 51 |
+
}
|
| 52 |
+
actionCheckboxes.forEach(function(el) {
|
| 53 |
+
el.checked = checked;
|
| 54 |
+
el.closest('tr').classList.toggle(options.selectedClass, checked);
|
| 55 |
+
});
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
function updateCounter(actionCheckboxes, options) {
|
| 59 |
+
const sel = Array.from(actionCheckboxes).filter(function(el) {
|
| 60 |
+
return el.checked;
|
| 61 |
+
}).length;
|
| 62 |
+
const counter = document.querySelector(options.counterContainer);
|
| 63 |
+
// data-actions-icnt is defined in the generated HTML
|
| 64 |
+
// and contains the total amount of objects in the queryset
|
| 65 |
+
const actions_icnt = Number(counter.dataset.actionsIcnt);
|
| 66 |
+
counter.textContent = interpolate(
|
| 67 |
+
ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), {
|
| 68 |
+
sel: sel,
|
| 69 |
+
cnt: actions_icnt
|
| 70 |
+
}, true);
|
| 71 |
+
const allToggle = document.getElementById(options.allToggleId);
|
| 72 |
+
allToggle.checked = sel === actionCheckboxes.length;
|
| 73 |
+
if (allToggle.checked) {
|
| 74 |
+
showQuestion(options);
|
| 75 |
+
} else {
|
| 76 |
+
clearAcross(options);
|
| 77 |
+
}
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
const defaults = {
|
| 81 |
+
actionContainer: "div.actions",
|
| 82 |
+
counterContainer: "span.action-counter",
|
| 83 |
+
allContainer: "div.actions span.all",
|
| 84 |
+
acrossInput: "div.actions input.select-across",
|
| 85 |
+
acrossQuestions: "div.actions span.question",
|
| 86 |
+
acrossClears: "div.actions span.clear",
|
| 87 |
+
allToggleId: "action-toggle",
|
| 88 |
+
selectedClass: "selected"
|
| 89 |
+
};
|
| 90 |
+
|
| 91 |
+
window.Actions = function(actionCheckboxes, options) {
|
| 92 |
+
options = Object.assign({}, defaults, options);
|
| 93 |
+
let list_editable_changed = false;
|
| 94 |
+
let lastChecked = null;
|
| 95 |
+
let shiftPressed = false;
|
| 96 |
+
|
| 97 |
+
document.addEventListener('keydown', (event) => {
|
| 98 |
+
shiftPressed = event.shiftKey;
|
| 99 |
+
});
|
| 100 |
+
|
| 101 |
+
document.addEventListener('keyup', (event) => {
|
| 102 |
+
shiftPressed = event.shiftKey;
|
| 103 |
+
});
|
| 104 |
+
|
| 105 |
+
document.getElementById(options.allToggleId).addEventListener('click', function(event) {
|
| 106 |
+
checker(actionCheckboxes, options, this.checked);
|
| 107 |
+
updateCounter(actionCheckboxes, options);
|
| 108 |
+
});
|
| 109 |
+
|
| 110 |
+
document.querySelectorAll(options.acrossQuestions + " a").forEach(function(el) {
|
| 111 |
+
el.addEventListener('click', function(event) {
|
| 112 |
+
event.preventDefault();
|
| 113 |
+
const acrossInputs = document.querySelectorAll(options.acrossInput);
|
| 114 |
+
acrossInputs.forEach(function(acrossInput) {
|
| 115 |
+
acrossInput.value = 1;
|
| 116 |
+
});
|
| 117 |
+
showClear(options);
|
| 118 |
+
});
|
| 119 |
+
});
|
| 120 |
+
|
| 121 |
+
document.querySelectorAll(options.acrossClears + " a").forEach(function(el) {
|
| 122 |
+
el.addEventListener('click', function(event) {
|
| 123 |
+
event.preventDefault();
|
| 124 |
+
document.getElementById(options.allToggleId).checked = false;
|
| 125 |
+
clearAcross(options);
|
| 126 |
+
checker(actionCheckboxes, options, false);
|
| 127 |
+
updateCounter(actionCheckboxes, options);
|
| 128 |
+
});
|
| 129 |
+
});
|
| 130 |
+
|
| 131 |
+
function affectedCheckboxes(target, withModifier) {
|
| 132 |
+
const multiSelect = (lastChecked && withModifier && lastChecked !== target);
|
| 133 |
+
if (!multiSelect) {
|
| 134 |
+
return [target];
|
| 135 |
+
}
|
| 136 |
+
const checkboxes = Array.from(actionCheckboxes);
|
| 137 |
+
const targetIndex = checkboxes.findIndex(el => el === target);
|
| 138 |
+
const lastCheckedIndex = checkboxes.findIndex(el => el === lastChecked);
|
| 139 |
+
const startIndex = Math.min(targetIndex, lastCheckedIndex);
|
| 140 |
+
const endIndex = Math.max(targetIndex, lastCheckedIndex);
|
| 141 |
+
const filtered = checkboxes.filter((el, index) => (startIndex <= index) && (index <= endIndex));
|
| 142 |
+
return filtered;
|
| 143 |
+
};
|
| 144 |
+
|
| 145 |
+
Array.from(document.getElementById('result_list').tBodies).forEach(function(el) {
|
| 146 |
+
el.addEventListener('change', function(event) {
|
| 147 |
+
const target = event.target;
|
| 148 |
+
if (target.classList.contains('action-select')) {
|
| 149 |
+
const checkboxes = affectedCheckboxes(target, shiftPressed);
|
| 150 |
+
checker(checkboxes, options, target.checked);
|
| 151 |
+
updateCounter(actionCheckboxes, options);
|
| 152 |
+
lastChecked = target;
|
| 153 |
+
} else {
|
| 154 |
+
list_editable_changed = true;
|
| 155 |
+
}
|
| 156 |
+
});
|
| 157 |
+
});
|
| 158 |
+
|
| 159 |
+
document.querySelector('#changelist-form button[name=index]').addEventListener('click', function(event) {
|
| 160 |
+
if (list_editable_changed) {
|
| 161 |
+
const confirmed = confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."));
|
| 162 |
+
if (!confirmed) {
|
| 163 |
+
event.preventDefault();
|
| 164 |
+
}
|
| 165 |
+
}
|
| 166 |
+
});
|
| 167 |
+
|
| 168 |
+
const el = document.querySelector('#changelist-form input[name=_save]');
|
| 169 |
+
// The button does not exist if no fields are editable.
|
| 170 |
+
if (el) {
|
| 171 |
+
el.addEventListener('click', function(event) {
|
| 172 |
+
if (document.querySelector('[name=action]').value) {
|
| 173 |
+
const text = list_editable_changed
|
| 174 |
+
? 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.")
|
| 175 |
+
: 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.");
|
| 176 |
+
if (!confirm(text)) {
|
| 177 |
+
event.preventDefault();
|
| 178 |
+
}
|
| 179 |
+
}
|
| 180 |
+
});
|
| 181 |
+
}
|
| 182 |
+
// Sync counter when navigating to the page, such as through the back
|
| 183 |
+
// button.
|
| 184 |
+
window.addEventListener('pageshow', (event) => updateCounter(actionCheckboxes, options));
|
| 185 |
+
};
|
| 186 |
+
|
| 187 |
+
// Call function fn when the DOM is loaded and ready. If it is already
|
| 188 |
+
// loaded, call the function now.
|
| 189 |
+
// http://youmightnotneedjquery.com/#ready
|
| 190 |
+
function ready(fn) {
|
| 191 |
+
if (document.readyState !== 'loading') {
|
| 192 |
+
fn();
|
| 193 |
+
} else {
|
| 194 |
+
document.addEventListener('DOMContentLoaded', fn);
|
| 195 |
+
}
|
| 196 |
+
}
|
| 197 |
+
|
| 198 |
+
ready(function() {
|
| 199 |
+
const actionsEls = document.querySelectorAll('tr input.action-select');
|
| 200 |
+
if (actionsEls.length > 0) {
|
| 201 |
+
Actions(actionsEls);
|
| 202 |
+
}
|
| 203 |
+
});
|
| 204 |
+
}
|
staticfiles/admin/js/admin/DateTimeShortcuts.js
ADDED
|
@@ -0,0 +1,413 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*global Calendar, findPosX, findPosY, get_format, gettext, gettext_noop, interpolate, ngettext, quickElement*/
|
| 2 |
+
// Inserts shortcut buttons after all of the following:
|
| 3 |
+
// <input type="text" class="vDateField">
|
| 4 |
+
// <input type="text" class="vTimeField">
|
| 5 |
+
'use strict';
|
| 6 |
+
{
|
| 7 |
+
const DateTimeShortcuts = {
|
| 8 |
+
calendars: [],
|
| 9 |
+
calendarInputs: [],
|
| 10 |
+
clockInputs: [],
|
| 11 |
+
clockHours: {
|
| 12 |
+
default_: [
|
| 13 |
+
[gettext_noop('Now'), -1],
|
| 14 |
+
[gettext_noop('Midnight'), 0],
|
| 15 |
+
[gettext_noop('6 a.m.'), 6],
|
| 16 |
+
[gettext_noop('Noon'), 12],
|
| 17 |
+
[gettext_noop('6 p.m.'), 18]
|
| 18 |
+
]
|
| 19 |
+
},
|
| 20 |
+
dismissClockFunc: [],
|
| 21 |
+
dismissCalendarFunc: [],
|
| 22 |
+
calendarDivName1: 'calendarbox', // name of calendar <div> that gets toggled
|
| 23 |
+
calendarDivName2: 'calendarin', // name of <div> that contains calendar
|
| 24 |
+
calendarLinkName: 'calendarlink', // name of the link that is used to toggle
|
| 25 |
+
clockDivName: 'clockbox', // name of clock <div> that gets toggled
|
| 26 |
+
clockLinkName: 'clocklink', // name of the link that is used to toggle
|
| 27 |
+
shortCutsClass: 'datetimeshortcuts', // class of the clock and cal shortcuts
|
| 28 |
+
timezoneWarningClass: 'timezonewarning', // class of the warning for timezone mismatch
|
| 29 |
+
timezoneOffset: 0,
|
| 30 |
+
init: function() {
|
| 31 |
+
const serverOffset = document.body.dataset.adminUtcOffset;
|
| 32 |
+
if (serverOffset) {
|
| 33 |
+
const localOffset = new Date().getTimezoneOffset() * -60;
|
| 34 |
+
DateTimeShortcuts.timezoneOffset = localOffset - serverOffset;
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
for (const inp of document.getElementsByTagName('input')) {
|
| 38 |
+
if (inp.type === 'text' && inp.classList.contains('vTimeField')) {
|
| 39 |
+
DateTimeShortcuts.addClock(inp);
|
| 40 |
+
DateTimeShortcuts.addTimezoneWarning(inp);
|
| 41 |
+
}
|
| 42 |
+
else if (inp.type === 'text' && inp.classList.contains('vDateField')) {
|
| 43 |
+
DateTimeShortcuts.addCalendar(inp);
|
| 44 |
+
DateTimeShortcuts.addTimezoneWarning(inp);
|
| 45 |
+
}
|
| 46 |
+
}
|
| 47 |
+
},
|
| 48 |
+
// Return the current time while accounting for the server timezone.
|
| 49 |
+
now: function() {
|
| 50 |
+
const serverOffset = document.body.dataset.adminUtcOffset;
|
| 51 |
+
if (serverOffset) {
|
| 52 |
+
const localNow = new Date();
|
| 53 |
+
const localOffset = localNow.getTimezoneOffset() * -60;
|
| 54 |
+
localNow.setTime(localNow.getTime() + 1000 * (serverOffset - localOffset));
|
| 55 |
+
return localNow;
|
| 56 |
+
} else {
|
| 57 |
+
return new Date();
|
| 58 |
+
}
|
| 59 |
+
},
|
| 60 |
+
// Add a warning when the time zone in the browser and backend do not match.
|
| 61 |
+
addTimezoneWarning: function(inp) {
|
| 62 |
+
const warningClass = DateTimeShortcuts.timezoneWarningClass;
|
| 63 |
+
let timezoneOffset = DateTimeShortcuts.timezoneOffset / 3600;
|
| 64 |
+
|
| 65 |
+
// Only warn if there is a time zone mismatch.
|
| 66 |
+
if (!timezoneOffset) {
|
| 67 |
+
return;
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
// Check if warning is already there.
|
| 71 |
+
if (inp.parentNode.querySelectorAll('.' + warningClass).length) {
|
| 72 |
+
return;
|
| 73 |
+
}
|
| 74 |
+
|
| 75 |
+
let message;
|
| 76 |
+
if (timezoneOffset > 0) {
|
| 77 |
+
message = ngettext(
|
| 78 |
+
'Note: You are %s hour ahead of server time.',
|
| 79 |
+
'Note: You are %s hours ahead of server time.',
|
| 80 |
+
timezoneOffset
|
| 81 |
+
);
|
| 82 |
+
}
|
| 83 |
+
else {
|
| 84 |
+
timezoneOffset *= -1;
|
| 85 |
+
message = ngettext(
|
| 86 |
+
'Note: You are %s hour behind server time.',
|
| 87 |
+
'Note: You are %s hours behind server time.',
|
| 88 |
+
timezoneOffset
|
| 89 |
+
);
|
| 90 |
+
}
|
| 91 |
+
message = interpolate(message, [timezoneOffset]);
|
| 92 |
+
|
| 93 |
+
const warning = document.createElement('div');
|
| 94 |
+
const id = inp.id;
|
| 95 |
+
const field_id = inp.closest('p.datetime') ? id.slice(0, id.lastIndexOf("_")) : id;
|
| 96 |
+
warning.classList.add('help', warningClass);
|
| 97 |
+
warning.id = `${field_id}_timezone_warning_helptext`;
|
| 98 |
+
warning.textContent = message;
|
| 99 |
+
inp.parentNode.appendChild(warning);
|
| 100 |
+
},
|
| 101 |
+
// Add clock widget to a given field
|
| 102 |
+
addClock: function(inp) {
|
| 103 |
+
const num = DateTimeShortcuts.clockInputs.length;
|
| 104 |
+
DateTimeShortcuts.clockInputs[num] = inp;
|
| 105 |
+
DateTimeShortcuts.dismissClockFunc[num] = function() { DateTimeShortcuts.dismissClock(num); return true; };
|
| 106 |
+
|
| 107 |
+
// Shortcut links (clock icon and "Now" link)
|
| 108 |
+
const shortcuts_span = document.createElement('span');
|
| 109 |
+
shortcuts_span.className = DateTimeShortcuts.shortCutsClass;
|
| 110 |
+
inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling);
|
| 111 |
+
const now_link = document.createElement('a');
|
| 112 |
+
now_link.href = "#";
|
| 113 |
+
now_link.textContent = gettext('Now');
|
| 114 |
+
now_link.role = 'button';
|
| 115 |
+
now_link.addEventListener('click', function(e) {
|
| 116 |
+
e.preventDefault();
|
| 117 |
+
DateTimeShortcuts.handleClockQuicklink(num, -1);
|
| 118 |
+
});
|
| 119 |
+
const clock_link = document.createElement('a');
|
| 120 |
+
clock_link.href = '#';
|
| 121 |
+
clock_link.id = DateTimeShortcuts.clockLinkName + num;
|
| 122 |
+
clock_link.addEventListener('click', function(e) {
|
| 123 |
+
e.preventDefault();
|
| 124 |
+
// avoid triggering the document click handler to dismiss the clock
|
| 125 |
+
e.stopPropagation();
|
| 126 |
+
DateTimeShortcuts.openClock(num);
|
| 127 |
+
});
|
| 128 |
+
|
| 129 |
+
quickElement(
|
| 130 |
+
'span', clock_link, '',
|
| 131 |
+
'class', 'clock-icon',
|
| 132 |
+
'title', gettext('Choose a Time')
|
| 133 |
+
);
|
| 134 |
+
shortcuts_span.appendChild(document.createTextNode('\u00A0'));
|
| 135 |
+
shortcuts_span.appendChild(now_link);
|
| 136 |
+
shortcuts_span.appendChild(document.createTextNode('\u00A0|\u00A0'));
|
| 137 |
+
shortcuts_span.appendChild(clock_link);
|
| 138 |
+
|
| 139 |
+
// Create clock link div
|
| 140 |
+
//
|
| 141 |
+
// Markup looks like:
|
| 142 |
+
// <div id="clockbox1" class="clockbox module">
|
| 143 |
+
// <h2>Choose a time</h2>
|
| 144 |
+
// <ul class="timelist">
|
| 145 |
+
// <li><a href="#">Now</a></li>
|
| 146 |
+
// <li><a href="#">Midnight</a></li>
|
| 147 |
+
// <li><a href="#">6 a.m.</a></li>
|
| 148 |
+
// <li><a href="#">Noon</a></li>
|
| 149 |
+
// <li><a href="#">6 p.m.</a></li>
|
| 150 |
+
// </ul>
|
| 151 |
+
// <p class="calendar-cancel"><a href="#">Cancel</a></p>
|
| 152 |
+
// </div>
|
| 153 |
+
|
| 154 |
+
const clock_box = document.createElement('div');
|
| 155 |
+
clock_box.style.display = 'none';
|
| 156 |
+
clock_box.style.position = 'absolute';
|
| 157 |
+
clock_box.className = 'clockbox module';
|
| 158 |
+
clock_box.id = DateTimeShortcuts.clockDivName + num;
|
| 159 |
+
document.body.appendChild(clock_box);
|
| 160 |
+
clock_box.addEventListener('click', function(e) { e.stopPropagation(); });
|
| 161 |
+
|
| 162 |
+
quickElement('h2', clock_box, gettext('Choose a time'));
|
| 163 |
+
const time_list = quickElement('ul', clock_box);
|
| 164 |
+
time_list.className = 'timelist';
|
| 165 |
+
// The list of choices can be overridden in JavaScript like this:
|
| 166 |
+
// DateTimeShortcuts.clockHours.name = [['3 a.m.', 3]];
|
| 167 |
+
// where name is the name attribute of the <input>.
|
| 168 |
+
const name = typeof DateTimeShortcuts.clockHours[inp.name] === 'undefined' ? 'default_' : inp.name;
|
| 169 |
+
DateTimeShortcuts.clockHours[name].forEach(function(element) {
|
| 170 |
+
const time_link = quickElement('a', quickElement('li', time_list), gettext(element[0]), 'role', 'button', 'href', '#');
|
| 171 |
+
time_link.addEventListener('click', function(e) {
|
| 172 |
+
e.preventDefault();
|
| 173 |
+
DateTimeShortcuts.handleClockQuicklink(num, element[1]);
|
| 174 |
+
});
|
| 175 |
+
});
|
| 176 |
+
|
| 177 |
+
const cancel_p = quickElement('p', clock_box);
|
| 178 |
+
cancel_p.className = 'calendar-cancel';
|
| 179 |
+
const cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'role', 'button', 'href', '#');
|
| 180 |
+
cancel_link.addEventListener('click', function(e) {
|
| 181 |
+
e.preventDefault();
|
| 182 |
+
DateTimeShortcuts.dismissClock(num);
|
| 183 |
+
});
|
| 184 |
+
|
| 185 |
+
document.addEventListener('keyup', function(event) {
|
| 186 |
+
if (event.which === 27) {
|
| 187 |
+
// ESC key closes popup
|
| 188 |
+
DateTimeShortcuts.dismissClock(num);
|
| 189 |
+
event.preventDefault();
|
| 190 |
+
}
|
| 191 |
+
});
|
| 192 |
+
},
|
| 193 |
+
openClock: function(num) {
|
| 194 |
+
const clock_box = document.getElementById(DateTimeShortcuts.clockDivName + num);
|
| 195 |
+
const clock_link = document.getElementById(DateTimeShortcuts.clockLinkName + num);
|
| 196 |
+
|
| 197 |
+
// Recalculate the clockbox position
|
| 198 |
+
// is it left-to-right or right-to-left layout ?
|
| 199 |
+
if (window.getComputedStyle(document.body).direction !== 'rtl') {
|
| 200 |
+
clock_box.style.left = findPosX(clock_link) + 17 + 'px';
|
| 201 |
+
}
|
| 202 |
+
else {
|
| 203 |
+
// since style's width is in em, it'd be tough to calculate
|
| 204 |
+
// px value of it. let's use an estimated px for now
|
| 205 |
+
clock_box.style.left = findPosX(clock_link) - 110 + 'px';
|
| 206 |
+
}
|
| 207 |
+
clock_box.style.top = Math.max(0, findPosY(clock_link) - 30) + 'px';
|
| 208 |
+
|
| 209 |
+
// Show the clock box
|
| 210 |
+
clock_box.style.display = 'block';
|
| 211 |
+
document.addEventListener('click', DateTimeShortcuts.dismissClockFunc[num]);
|
| 212 |
+
},
|
| 213 |
+
dismissClock: function(num) {
|
| 214 |
+
document.getElementById(DateTimeShortcuts.clockDivName + num).style.display = 'none';
|
| 215 |
+
document.removeEventListener('click', DateTimeShortcuts.dismissClockFunc[num]);
|
| 216 |
+
},
|
| 217 |
+
handleClockQuicklink: function(num, val) {
|
| 218 |
+
let d;
|
| 219 |
+
if (val === -1) {
|
| 220 |
+
d = DateTimeShortcuts.now();
|
| 221 |
+
}
|
| 222 |
+
else {
|
| 223 |
+
d = new Date(1970, 1, 1, val, 0, 0, 0);
|
| 224 |
+
}
|
| 225 |
+
DateTimeShortcuts.clockInputs[num].value = d.strftime(get_format('TIME_INPUT_FORMATS')[0]);
|
| 226 |
+
DateTimeShortcuts.clockInputs[num].focus();
|
| 227 |
+
DateTimeShortcuts.dismissClock(num);
|
| 228 |
+
},
|
| 229 |
+
// Add calendar widget to a given field.
|
| 230 |
+
addCalendar: function(inp) {
|
| 231 |
+
const num = DateTimeShortcuts.calendars.length;
|
| 232 |
+
|
| 233 |
+
DateTimeShortcuts.calendarInputs[num] = inp;
|
| 234 |
+
DateTimeShortcuts.dismissCalendarFunc[num] = function() { DateTimeShortcuts.dismissCalendar(num); return true; };
|
| 235 |
+
|
| 236 |
+
// Shortcut links (calendar icon and "Today" link)
|
| 237 |
+
const shortcuts_span = document.createElement('span');
|
| 238 |
+
shortcuts_span.className = DateTimeShortcuts.shortCutsClass;
|
| 239 |
+
inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling);
|
| 240 |
+
const today_link = document.createElement('a');
|
| 241 |
+
today_link.href = '#';
|
| 242 |
+
today_link.role = 'button';
|
| 243 |
+
today_link.appendChild(document.createTextNode(gettext('Today')));
|
| 244 |
+
today_link.addEventListener('click', function(e) {
|
| 245 |
+
e.preventDefault();
|
| 246 |
+
DateTimeShortcuts.handleCalendarQuickLink(num, 0);
|
| 247 |
+
});
|
| 248 |
+
const cal_link = document.createElement('a');
|
| 249 |
+
cal_link.href = '#';
|
| 250 |
+
cal_link.id = DateTimeShortcuts.calendarLinkName + num;
|
| 251 |
+
cal_link.addEventListener('click', function(e) {
|
| 252 |
+
e.preventDefault();
|
| 253 |
+
// avoid triggering the document click handler to dismiss the calendar
|
| 254 |
+
e.stopPropagation();
|
| 255 |
+
DateTimeShortcuts.openCalendar(num);
|
| 256 |
+
});
|
| 257 |
+
quickElement(
|
| 258 |
+
'span', cal_link, '',
|
| 259 |
+
'class', 'date-icon',
|
| 260 |
+
'title', gettext('Choose a Date')
|
| 261 |
+
);
|
| 262 |
+
shortcuts_span.appendChild(document.createTextNode('\u00A0'));
|
| 263 |
+
shortcuts_span.appendChild(today_link);
|
| 264 |
+
shortcuts_span.appendChild(document.createTextNode('\u00A0|\u00A0'));
|
| 265 |
+
shortcuts_span.appendChild(cal_link);
|
| 266 |
+
|
| 267 |
+
// Create calendarbox div.
|
| 268 |
+
//
|
| 269 |
+
// Markup looks like:
|
| 270 |
+
//
|
| 271 |
+
// <div id="calendarbox3" class="calendarbox module">
|
| 272 |
+
// <h2>
|
| 273 |
+
// <a href="#" class="link-previous">‹</a>
|
| 274 |
+
// <a href="#" class="link-next">›</a> February 2003
|
| 275 |
+
// </h2>
|
| 276 |
+
// <div class="calendar" id="calendarin3">
|
| 277 |
+
// <!-- (cal) -->
|
| 278 |
+
// </div>
|
| 279 |
+
// <div class="calendar-shortcuts">
|
| 280 |
+
// <a href="#">Yesterday</a> | <a href="#">Today</a> | <a href="#">Tomorrow</a>
|
| 281 |
+
// </div>
|
| 282 |
+
// <p class="calendar-cancel"><a href="#">Cancel</a></p>
|
| 283 |
+
// </div>
|
| 284 |
+
const cal_box = document.createElement('div');
|
| 285 |
+
cal_box.style.display = 'none';
|
| 286 |
+
cal_box.style.position = 'absolute';
|
| 287 |
+
cal_box.className = 'calendarbox module';
|
| 288 |
+
cal_box.id = DateTimeShortcuts.calendarDivName1 + num;
|
| 289 |
+
document.body.appendChild(cal_box);
|
| 290 |
+
cal_box.addEventListener('click', function(e) { e.stopPropagation(); });
|
| 291 |
+
|
| 292 |
+
// next-prev links
|
| 293 |
+
const cal_nav = quickElement('div', cal_box);
|
| 294 |
+
const cal_nav_prev = quickElement('a', cal_nav, '<', 'href', '#');
|
| 295 |
+
cal_nav_prev.className = 'calendarnav-previous';
|
| 296 |
+
cal_nav_prev.addEventListener('click', function(e) {
|
| 297 |
+
e.preventDefault();
|
| 298 |
+
DateTimeShortcuts.drawPrev(num);
|
| 299 |
+
});
|
| 300 |
+
|
| 301 |
+
const cal_nav_next = quickElement('a', cal_nav, '>', 'href', '#');
|
| 302 |
+
cal_nav_next.className = 'calendarnav-next';
|
| 303 |
+
cal_nav_next.addEventListener('click', function(e) {
|
| 304 |
+
e.preventDefault();
|
| 305 |
+
DateTimeShortcuts.drawNext(num);
|
| 306 |
+
});
|
| 307 |
+
|
| 308 |
+
// main box
|
| 309 |
+
const cal_main = quickElement('div', cal_box, '', 'id', DateTimeShortcuts.calendarDivName2 + num);
|
| 310 |
+
cal_main.className = 'calendar';
|
| 311 |
+
DateTimeShortcuts.calendars[num] = new Calendar(DateTimeShortcuts.calendarDivName2 + num, DateTimeShortcuts.handleCalendarCallback(num));
|
| 312 |
+
DateTimeShortcuts.calendars[num].drawCurrent();
|
| 313 |
+
|
| 314 |
+
// calendar shortcuts
|
| 315 |
+
const shortcuts = quickElement('div', cal_box);
|
| 316 |
+
shortcuts.className = 'calendar-shortcuts';
|
| 317 |
+
let day_link = quickElement('a', shortcuts, gettext('Yesterday'), 'role', 'button', 'href', '#');
|
| 318 |
+
day_link.addEventListener('click', function(e) {
|
| 319 |
+
e.preventDefault();
|
| 320 |
+
DateTimeShortcuts.handleCalendarQuickLink(num, -1);
|
| 321 |
+
});
|
| 322 |
+
shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0'));
|
| 323 |
+
day_link = quickElement('a', shortcuts, gettext('Today'), 'role', 'button', 'href', '#');
|
| 324 |
+
day_link.addEventListener('click', function(e) {
|
| 325 |
+
e.preventDefault();
|
| 326 |
+
DateTimeShortcuts.handleCalendarQuickLink(num, 0);
|
| 327 |
+
});
|
| 328 |
+
shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0'));
|
| 329 |
+
day_link = quickElement('a', shortcuts, gettext('Tomorrow'), 'role', 'button', 'href', '#');
|
| 330 |
+
day_link.addEventListener('click', function(e) {
|
| 331 |
+
e.preventDefault();
|
| 332 |
+
DateTimeShortcuts.handleCalendarQuickLink(num, +1);
|
| 333 |
+
});
|
| 334 |
+
|
| 335 |
+
// cancel bar
|
| 336 |
+
const cancel_p = quickElement('p', cal_box);
|
| 337 |
+
cancel_p.className = 'calendar-cancel';
|
| 338 |
+
const cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'role', 'button', 'href', '#');
|
| 339 |
+
cancel_link.addEventListener('click', function(e) {
|
| 340 |
+
e.preventDefault();
|
| 341 |
+
DateTimeShortcuts.dismissCalendar(num);
|
| 342 |
+
});
|
| 343 |
+
document.addEventListener('keyup', function(event) {
|
| 344 |
+
if (event.which === 27) {
|
| 345 |
+
// ESC key closes popup
|
| 346 |
+
DateTimeShortcuts.dismissCalendar(num);
|
| 347 |
+
event.preventDefault();
|
| 348 |
+
}
|
| 349 |
+
});
|
| 350 |
+
},
|
| 351 |
+
openCalendar: function(num) {
|
| 352 |
+
const cal_box = document.getElementById(DateTimeShortcuts.calendarDivName1 + num);
|
| 353 |
+
const cal_link = document.getElementById(DateTimeShortcuts.calendarLinkName + num);
|
| 354 |
+
const inp = DateTimeShortcuts.calendarInputs[num];
|
| 355 |
+
|
| 356 |
+
// Determine if the current value in the input has a valid date.
|
| 357 |
+
// If so, draw the calendar with that date's year and month.
|
| 358 |
+
if (inp.value) {
|
| 359 |
+
const format = get_format('DATE_INPUT_FORMATS')[0];
|
| 360 |
+
const selected = inp.value.strptime(format);
|
| 361 |
+
const year = selected.getUTCFullYear();
|
| 362 |
+
const month = selected.getUTCMonth() + 1;
|
| 363 |
+
const re = /\d{4}/;
|
| 364 |
+
if (re.test(year.toString()) && month >= 1 && month <= 12) {
|
| 365 |
+
DateTimeShortcuts.calendars[num].drawDate(month, year, selected);
|
| 366 |
+
}
|
| 367 |
+
}
|
| 368 |
+
|
| 369 |
+
// Recalculate the clockbox position
|
| 370 |
+
// is it left-to-right or right-to-left layout ?
|
| 371 |
+
if (window.getComputedStyle(document.body).direction !== 'rtl') {
|
| 372 |
+
cal_box.style.left = findPosX(cal_link) + 17 + 'px';
|
| 373 |
+
}
|
| 374 |
+
else {
|
| 375 |
+
// since style's width is in em, it'd be tough to calculate
|
| 376 |
+
// px value of it. let's use an estimated px for now
|
| 377 |
+
cal_box.style.left = findPosX(cal_link) - 180 + 'px';
|
| 378 |
+
}
|
| 379 |
+
cal_box.style.top = Math.max(0, findPosY(cal_link) - 75) + 'px';
|
| 380 |
+
|
| 381 |
+
cal_box.style.display = 'block';
|
| 382 |
+
document.addEventListener('click', DateTimeShortcuts.dismissCalendarFunc[num]);
|
| 383 |
+
},
|
| 384 |
+
dismissCalendar: function(num) {
|
| 385 |
+
document.getElementById(DateTimeShortcuts.calendarDivName1 + num).style.display = 'none';
|
| 386 |
+
document.removeEventListener('click', DateTimeShortcuts.dismissCalendarFunc[num]);
|
| 387 |
+
},
|
| 388 |
+
drawPrev: function(num) {
|
| 389 |
+
DateTimeShortcuts.calendars[num].drawPreviousMonth();
|
| 390 |
+
},
|
| 391 |
+
drawNext: function(num) {
|
| 392 |
+
DateTimeShortcuts.calendars[num].drawNextMonth();
|
| 393 |
+
},
|
| 394 |
+
handleCalendarCallback: function(num) {
|
| 395 |
+
const format = get_format('DATE_INPUT_FORMATS')[0];
|
| 396 |
+
return function(y, m, d) {
|
| 397 |
+
DateTimeShortcuts.calendarInputs[num].value = new Date(y, m - 1, d).strftime(format);
|
| 398 |
+
DateTimeShortcuts.calendarInputs[num].focus();
|
| 399 |
+
document.getElementById(DateTimeShortcuts.calendarDivName1 + num).style.display = 'none';
|
| 400 |
+
};
|
| 401 |
+
},
|
| 402 |
+
handleCalendarQuickLink: function(num, offset) {
|
| 403 |
+
const d = DateTimeShortcuts.now();
|
| 404 |
+
d.setDate(d.getDate() + offset);
|
| 405 |
+
DateTimeShortcuts.calendarInputs[num].value = d.strftime(get_format('DATE_INPUT_FORMATS')[0]);
|
| 406 |
+
DateTimeShortcuts.calendarInputs[num].focus();
|
| 407 |
+
DateTimeShortcuts.dismissCalendar(num);
|
| 408 |
+
}
|
| 409 |
+
};
|
| 410 |
+
|
| 411 |
+
window.addEventListener('load', DateTimeShortcuts.init);
|
| 412 |
+
window.DateTimeShortcuts = DateTimeShortcuts;
|
| 413 |
+
}
|
staticfiles/admin/js/admin/RelatedObjectLookups.js
ADDED
|
@@ -0,0 +1,252 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*global SelectBox, interpolate*/
|
| 2 |
+
// Handles related-objects functionality: lookup link for raw_id_fields
|
| 3 |
+
// and Add Another links.
|
| 4 |
+
'use strict';
|
| 5 |
+
{
|
| 6 |
+
const $ = django.jQuery;
|
| 7 |
+
let popupIndex = 0;
|
| 8 |
+
const relatedWindows = [];
|
| 9 |
+
|
| 10 |
+
function dismissChildPopups() {
|
| 11 |
+
relatedWindows.forEach(function(win) {
|
| 12 |
+
if(!win.closed) {
|
| 13 |
+
win.dismissChildPopups();
|
| 14 |
+
win.close();
|
| 15 |
+
}
|
| 16 |
+
});
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
function setPopupIndex() {
|
| 20 |
+
if(document.getElementsByName("_popup").length > 0) {
|
| 21 |
+
const index = window.name.lastIndexOf("__") + 2;
|
| 22 |
+
popupIndex = parseInt(window.name.substring(index));
|
| 23 |
+
} else {
|
| 24 |
+
popupIndex = 0;
|
| 25 |
+
}
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
function addPopupIndex(name) {
|
| 29 |
+
return name + "__" + (popupIndex + 1);
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
function removePopupIndex(name) {
|
| 33 |
+
return name.replace(new RegExp("__" + (popupIndex + 1) + "$"), '');
|
| 34 |
+
}
|
| 35 |
+
|
| 36 |
+
function showAdminPopup(triggeringLink, name_regexp, add_popup) {
|
| 37 |
+
const name = addPopupIndex(triggeringLink.id.replace(name_regexp, ''));
|
| 38 |
+
const href = new URL(triggeringLink.href);
|
| 39 |
+
if (add_popup) {
|
| 40 |
+
href.searchParams.set('_popup', 1);
|
| 41 |
+
}
|
| 42 |
+
const win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes');
|
| 43 |
+
relatedWindows.push(win);
|
| 44 |
+
win.focus();
|
| 45 |
+
return false;
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
function showRelatedObjectLookupPopup(triggeringLink) {
|
| 49 |
+
return showAdminPopup(triggeringLink, /^lookup_/, true);
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
function dismissRelatedLookupPopup(win, chosenId) {
|
| 53 |
+
const name = removePopupIndex(win.name);
|
| 54 |
+
const elem = document.getElementById(name);
|
| 55 |
+
if (elem.classList.contains('vManyToManyRawIdAdminField') && elem.value) {
|
| 56 |
+
elem.value += ',' + chosenId;
|
| 57 |
+
} else {
|
| 58 |
+
elem.value = chosenId;
|
| 59 |
+
}
|
| 60 |
+
$(elem).trigger('change');
|
| 61 |
+
const index = relatedWindows.indexOf(win);
|
| 62 |
+
if (index > -1) {
|
| 63 |
+
relatedWindows.splice(index, 1);
|
| 64 |
+
}
|
| 65 |
+
win.close();
|
| 66 |
+
}
|
| 67 |
+
|
| 68 |
+
function showRelatedObjectPopup(triggeringLink) {
|
| 69 |
+
return showAdminPopup(triggeringLink, /^(change|add|delete)_/, false);
|
| 70 |
+
}
|
| 71 |
+
|
| 72 |
+
function updateRelatedObjectLinks(triggeringLink) {
|
| 73 |
+
const $this = $(triggeringLink);
|
| 74 |
+
const siblings = $this.nextAll('.view-related, .change-related, .delete-related');
|
| 75 |
+
if (!siblings.length) {
|
| 76 |
+
return;
|
| 77 |
+
}
|
| 78 |
+
const value = $this.val();
|
| 79 |
+
if (value) {
|
| 80 |
+
siblings.each(function() {
|
| 81 |
+
const elm = $(this);
|
| 82 |
+
elm.attr('href', elm.attr('data-href-template').replace('__fk__', value));
|
| 83 |
+
elm.removeAttr('aria-disabled');
|
| 84 |
+
});
|
| 85 |
+
} else {
|
| 86 |
+
siblings.removeAttr('href');
|
| 87 |
+
siblings.attr('aria-disabled', true);
|
| 88 |
+
}
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
+
function updateRelatedSelectsOptions(currentSelect, win, objId, newRepr, newId, skipIds = []) {
|
| 92 |
+
// After create/edit a model from the options next to the current
|
| 93 |
+
// select (+ or :pencil:) update ForeignKey PK of the rest of selects
|
| 94 |
+
// in the page.
|
| 95 |
+
|
| 96 |
+
const path = win.location.pathname;
|
| 97 |
+
// Extract the model from the popup url '.../<model>/add/' or
|
| 98 |
+
// '.../<model>/<id>/change/' depending the action (add or change).
|
| 99 |
+
const modelName = path.split('/')[path.split('/').length - (objId ? 4 : 3)];
|
| 100 |
+
// Select elements with a specific model reference and context of "available-source".
|
| 101 |
+
const selectsRelated = document.querySelectorAll(`[data-model-ref="${modelName}"] [data-context="available-source"]`);
|
| 102 |
+
|
| 103 |
+
selectsRelated.forEach(function(select) {
|
| 104 |
+
if (currentSelect === select || skipIds && skipIds.includes(select.id)) {
|
| 105 |
+
return;
|
| 106 |
+
}
|
| 107 |
+
|
| 108 |
+
let option = select.querySelector(`option[value="${objId}"]`);
|
| 109 |
+
|
| 110 |
+
if (!option) {
|
| 111 |
+
option = new Option(newRepr, newId);
|
| 112 |
+
select.options.add(option);
|
| 113 |
+
// Update SelectBox cache for related fields.
|
| 114 |
+
if (window.SelectBox !== undefined && !SelectBox.cache[currentSelect.id]) {
|
| 115 |
+
SelectBox.add_to_cache(select.id, option);
|
| 116 |
+
SelectBox.redisplay(select.id);
|
| 117 |
+
}
|
| 118 |
+
return;
|
| 119 |
+
}
|
| 120 |
+
|
| 121 |
+
option.textContent = newRepr;
|
| 122 |
+
option.value = newId;
|
| 123 |
+
});
|
| 124 |
+
}
|
| 125 |
+
|
| 126 |
+
function dismissAddRelatedObjectPopup(win, newId, newRepr) {
|
| 127 |
+
const name = removePopupIndex(win.name);
|
| 128 |
+
const elem = document.getElementById(name);
|
| 129 |
+
if (elem) {
|
| 130 |
+
const elemName = elem.nodeName.toUpperCase();
|
| 131 |
+
if (elemName === 'SELECT') {
|
| 132 |
+
elem.options[elem.options.length] = new Option(newRepr, newId, true, true);
|
| 133 |
+
updateRelatedSelectsOptions(elem, win, null, newRepr, newId);
|
| 134 |
+
} else if (elemName === 'INPUT') {
|
| 135 |
+
if (elem.classList.contains('vManyToManyRawIdAdminField') && elem.value) {
|
| 136 |
+
elem.value += ',' + newId;
|
| 137 |
+
} else {
|
| 138 |
+
elem.value = newId;
|
| 139 |
+
}
|
| 140 |
+
}
|
| 141 |
+
// Trigger a change event to update related links if required.
|
| 142 |
+
$(elem).trigger('change');
|
| 143 |
+
} else {
|
| 144 |
+
const toId = name + "_to";
|
| 145 |
+
const toElem = document.getElementById(toId);
|
| 146 |
+
const o = new Option(newRepr, newId);
|
| 147 |
+
SelectBox.add_to_cache(toId, o);
|
| 148 |
+
SelectBox.redisplay(toId);
|
| 149 |
+
if (toElem && toElem.nodeName.toUpperCase() === 'SELECT') {
|
| 150 |
+
const skipIds = [name + "_from"];
|
| 151 |
+
updateRelatedSelectsOptions(toElem, win, null, newRepr, newId, skipIds);
|
| 152 |
+
}
|
| 153 |
+
}
|
| 154 |
+
const index = relatedWindows.indexOf(win);
|
| 155 |
+
if (index > -1) {
|
| 156 |
+
relatedWindows.splice(index, 1);
|
| 157 |
+
}
|
| 158 |
+
win.close();
|
| 159 |
+
}
|
| 160 |
+
|
| 161 |
+
function dismissChangeRelatedObjectPopup(win, objId, newRepr, newId) {
|
| 162 |
+
const id = removePopupIndex(win.name.replace(/^edit_/, ''));
|
| 163 |
+
const selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]);
|
| 164 |
+
const selects = $(selectsSelector);
|
| 165 |
+
selects.find('option').each(function() {
|
| 166 |
+
if (this.value === objId) {
|
| 167 |
+
this.textContent = newRepr;
|
| 168 |
+
this.value = newId;
|
| 169 |
+
}
|
| 170 |
+
}).trigger('change');
|
| 171 |
+
updateRelatedSelectsOptions(selects[0], win, objId, newRepr, newId);
|
| 172 |
+
selects.next().find('.select2-selection__rendered').each(function() {
|
| 173 |
+
// The element can have a clear button as a child.
|
| 174 |
+
// Use the lastChild to modify only the displayed value.
|
| 175 |
+
this.lastChild.textContent = newRepr;
|
| 176 |
+
this.title = newRepr;
|
| 177 |
+
});
|
| 178 |
+
const index = relatedWindows.indexOf(win);
|
| 179 |
+
if (index > -1) {
|
| 180 |
+
relatedWindows.splice(index, 1);
|
| 181 |
+
}
|
| 182 |
+
win.close();
|
| 183 |
+
}
|
| 184 |
+
|
| 185 |
+
function dismissDeleteRelatedObjectPopup(win, objId) {
|
| 186 |
+
const id = removePopupIndex(win.name.replace(/^delete_/, ''));
|
| 187 |
+
const selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]);
|
| 188 |
+
const selects = $(selectsSelector);
|
| 189 |
+
selects.find('option').each(function() {
|
| 190 |
+
if (this.value === objId) {
|
| 191 |
+
$(this).remove();
|
| 192 |
+
}
|
| 193 |
+
}).trigger('change');
|
| 194 |
+
const index = relatedWindows.indexOf(win);
|
| 195 |
+
if (index > -1) {
|
| 196 |
+
relatedWindows.splice(index, 1);
|
| 197 |
+
}
|
| 198 |
+
win.close();
|
| 199 |
+
}
|
| 200 |
+
|
| 201 |
+
window.showRelatedObjectLookupPopup = showRelatedObjectLookupPopup;
|
| 202 |
+
window.dismissRelatedLookupPopup = dismissRelatedLookupPopup;
|
| 203 |
+
window.showRelatedObjectPopup = showRelatedObjectPopup;
|
| 204 |
+
window.updateRelatedObjectLinks = updateRelatedObjectLinks;
|
| 205 |
+
window.dismissAddRelatedObjectPopup = dismissAddRelatedObjectPopup;
|
| 206 |
+
window.dismissChangeRelatedObjectPopup = dismissChangeRelatedObjectPopup;
|
| 207 |
+
window.dismissDeleteRelatedObjectPopup = dismissDeleteRelatedObjectPopup;
|
| 208 |
+
window.dismissChildPopups = dismissChildPopups;
|
| 209 |
+
window.relatedWindows = relatedWindows;
|
| 210 |
+
|
| 211 |
+
// Kept for backward compatibility
|
| 212 |
+
window.showAddAnotherPopup = showRelatedObjectPopup;
|
| 213 |
+
window.dismissAddAnotherPopup = dismissAddRelatedObjectPopup;
|
| 214 |
+
|
| 215 |
+
window.addEventListener('unload', function(evt) {
|
| 216 |
+
window.dismissChildPopups();
|
| 217 |
+
});
|
| 218 |
+
|
| 219 |
+
$(document).ready(function() {
|
| 220 |
+
setPopupIndex();
|
| 221 |
+
$("a[data-popup-opener]").on('click', function(event) {
|
| 222 |
+
event.preventDefault();
|
| 223 |
+
opener.dismissRelatedLookupPopup(window, $(this).data("popup-opener"));
|
| 224 |
+
});
|
| 225 |
+
$('body').on('click', '.related-widget-wrapper-link[data-popup="yes"]', function(e) {
|
| 226 |
+
e.preventDefault();
|
| 227 |
+
if (this.href) {
|
| 228 |
+
const event = $.Event('django:show-related', {href: this.href});
|
| 229 |
+
$(this).trigger(event);
|
| 230 |
+
if (!event.isDefaultPrevented()) {
|
| 231 |
+
showRelatedObjectPopup(this);
|
| 232 |
+
}
|
| 233 |
+
}
|
| 234 |
+
});
|
| 235 |
+
$('body').on('change', '.related-widget-wrapper select', function(e) {
|
| 236 |
+
const event = $.Event('django:update-related');
|
| 237 |
+
$(this).trigger(event);
|
| 238 |
+
if (!event.isDefaultPrevented()) {
|
| 239 |
+
updateRelatedObjectLinks(this);
|
| 240 |
+
}
|
| 241 |
+
});
|
| 242 |
+
$('.related-widget-wrapper select').trigger('change');
|
| 243 |
+
$('body').on('click', '.related-lookup', function(e) {
|
| 244 |
+
e.preventDefault();
|
| 245 |
+
const event = $.Event('django:lookup-related');
|
| 246 |
+
$(this).trigger(event);
|
| 247 |
+
if (!event.isDefaultPrevented()) {
|
| 248 |
+
showRelatedObjectLookupPopup(this);
|
| 249 |
+
}
|
| 250 |
+
});
|
| 251 |
+
});
|
| 252 |
+
}
|
staticfiles/admin/js/autocomplete.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
'use strict';
|
| 2 |
+
{
|
| 3 |
+
const $ = django.jQuery;
|
| 4 |
+
|
| 5 |
+
$.fn.djangoAdminSelect2 = function() {
|
| 6 |
+
$.each(this, function(i, element) {
|
| 7 |
+
$(element).select2({
|
| 8 |
+
ajax: {
|
| 9 |
+
data: (params) => {
|
| 10 |
+
return {
|
| 11 |
+
term: params.term,
|
| 12 |
+
page: params.page,
|
| 13 |
+
app_label: element.dataset.appLabel,
|
| 14 |
+
model_name: element.dataset.modelName,
|
| 15 |
+
field_name: element.dataset.fieldName
|
| 16 |
+
};
|
| 17 |
+
}
|
| 18 |
+
}
|
| 19 |
+
});
|
| 20 |
+
});
|
| 21 |
+
return this;
|
| 22 |
+
};
|
| 23 |
+
|
| 24 |
+
$(function() {
|
| 25 |
+
// Initialize all autocomplete widgets except the one in the template
|
| 26 |
+
// form used when a new formset is added.
|
| 27 |
+
$('.admin-autocomplete').not('[name*=__prefix__]').djangoAdminSelect2();
|
| 28 |
+
});
|
| 29 |
+
|
| 30 |
+
document.addEventListener('formset:added', (event) => {
|
| 31 |
+
$(event.target).find('.admin-autocomplete').djangoAdminSelect2();
|
| 32 |
+
});
|
| 33 |
+
}
|
staticfiles/admin/js/calendar.js
ADDED
|
@@ -0,0 +1,239 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*global gettext, pgettext, get_format, quickElement, removeChildren*/
|
| 2 |
+
/*
|
| 3 |
+
calendar.js - Calendar functions by Adrian Holovaty
|
| 4 |
+
depends on core.js for utility functions like removeChildren or quickElement
|
| 5 |
+
*/
|
| 6 |
+
'use strict';
|
| 7 |
+
{
|
| 8 |
+
// CalendarNamespace -- Provides a collection of HTML calendar-related helper functions
|
| 9 |
+
const CalendarNamespace = {
|
| 10 |
+
monthsOfYear: [
|
| 11 |
+
gettext('January'),
|
| 12 |
+
gettext('February'),
|
| 13 |
+
gettext('March'),
|
| 14 |
+
gettext('April'),
|
| 15 |
+
gettext('May'),
|
| 16 |
+
gettext('June'),
|
| 17 |
+
gettext('July'),
|
| 18 |
+
gettext('August'),
|
| 19 |
+
gettext('September'),
|
| 20 |
+
gettext('October'),
|
| 21 |
+
gettext('November'),
|
| 22 |
+
gettext('December')
|
| 23 |
+
],
|
| 24 |
+
monthsOfYearAbbrev: [
|
| 25 |
+
pgettext('abbrev. month January', 'Jan'),
|
| 26 |
+
pgettext('abbrev. month February', 'Feb'),
|
| 27 |
+
pgettext('abbrev. month March', 'Mar'),
|
| 28 |
+
pgettext('abbrev. month April', 'Apr'),
|
| 29 |
+
pgettext('abbrev. month May', 'May'),
|
| 30 |
+
pgettext('abbrev. month June', 'Jun'),
|
| 31 |
+
pgettext('abbrev. month July', 'Jul'),
|
| 32 |
+
pgettext('abbrev. month August', 'Aug'),
|
| 33 |
+
pgettext('abbrev. month September', 'Sep'),
|
| 34 |
+
pgettext('abbrev. month October', 'Oct'),
|
| 35 |
+
pgettext('abbrev. month November', 'Nov'),
|
| 36 |
+
pgettext('abbrev. month December', 'Dec')
|
| 37 |
+
],
|
| 38 |
+
daysOfWeek: [
|
| 39 |
+
gettext('Sunday'),
|
| 40 |
+
gettext('Monday'),
|
| 41 |
+
gettext('Tuesday'),
|
| 42 |
+
gettext('Wednesday'),
|
| 43 |
+
gettext('Thursday'),
|
| 44 |
+
gettext('Friday'),
|
| 45 |
+
gettext('Saturday')
|
| 46 |
+
],
|
| 47 |
+
daysOfWeekAbbrev: [
|
| 48 |
+
pgettext('abbrev. day Sunday', 'Sun'),
|
| 49 |
+
pgettext('abbrev. day Monday', 'Mon'),
|
| 50 |
+
pgettext('abbrev. day Tuesday', 'Tue'),
|
| 51 |
+
pgettext('abbrev. day Wednesday', 'Wed'),
|
| 52 |
+
pgettext('abbrev. day Thursday', 'Thur'),
|
| 53 |
+
pgettext('abbrev. day Friday', 'Fri'),
|
| 54 |
+
pgettext('abbrev. day Saturday', 'Sat')
|
| 55 |
+
],
|
| 56 |
+
daysOfWeekInitial: [
|
| 57 |
+
pgettext('one letter Sunday', 'S'),
|
| 58 |
+
pgettext('one letter Monday', 'M'),
|
| 59 |
+
pgettext('one letter Tuesday', 'T'),
|
| 60 |
+
pgettext('one letter Wednesday', 'W'),
|
| 61 |
+
pgettext('one letter Thursday', 'T'),
|
| 62 |
+
pgettext('one letter Friday', 'F'),
|
| 63 |
+
pgettext('one letter Saturday', 'S')
|
| 64 |
+
],
|
| 65 |
+
firstDayOfWeek: parseInt(get_format('FIRST_DAY_OF_WEEK')),
|
| 66 |
+
isLeapYear: function(year) {
|
| 67 |
+
return (((year % 4) === 0) && ((year % 100) !== 0 ) || ((year % 400) === 0));
|
| 68 |
+
},
|
| 69 |
+
getDaysInMonth: function(month, year) {
|
| 70 |
+
let days;
|
| 71 |
+
if (month === 1 || month === 3 || month === 5 || month === 7 || month === 8 || month === 10 || month === 12) {
|
| 72 |
+
days = 31;
|
| 73 |
+
}
|
| 74 |
+
else if (month === 4 || month === 6 || month === 9 || month === 11) {
|
| 75 |
+
days = 30;
|
| 76 |
+
}
|
| 77 |
+
else if (month === 2 && CalendarNamespace.isLeapYear(year)) {
|
| 78 |
+
days = 29;
|
| 79 |
+
}
|
| 80 |
+
else {
|
| 81 |
+
days = 28;
|
| 82 |
+
}
|
| 83 |
+
return days;
|
| 84 |
+
},
|
| 85 |
+
draw: function(month, year, div_id, callback, selected) { // month = 1-12, year = 1-9999
|
| 86 |
+
const today = new Date();
|
| 87 |
+
const todayDay = today.getDate();
|
| 88 |
+
const todayMonth = today.getMonth() + 1;
|
| 89 |
+
const todayYear = today.getFullYear();
|
| 90 |
+
let todayClass = '';
|
| 91 |
+
|
| 92 |
+
// Use UTC functions here because the date field does not contain time
|
| 93 |
+
// and using the UTC function variants prevent the local time offset
|
| 94 |
+
// from altering the date, specifically the day field. For example:
|
| 95 |
+
//
|
| 96 |
+
// ```
|
| 97 |
+
// var x = new Date('2013-10-02');
|
| 98 |
+
// var day = x.getDate();
|
| 99 |
+
// ```
|
| 100 |
+
//
|
| 101 |
+
// The day variable above will be 1 instead of 2 in, say, US Pacific time
|
| 102 |
+
// zone.
|
| 103 |
+
let isSelectedMonth = false;
|
| 104 |
+
if (typeof selected !== 'undefined') {
|
| 105 |
+
isSelectedMonth = (selected.getUTCFullYear() === year && (selected.getUTCMonth() + 1) === month);
|
| 106 |
+
}
|
| 107 |
+
|
| 108 |
+
month = parseInt(month);
|
| 109 |
+
year = parseInt(year);
|
| 110 |
+
const calDiv = document.getElementById(div_id);
|
| 111 |
+
removeChildren(calDiv);
|
| 112 |
+
const calTable = document.createElement('table');
|
| 113 |
+
quickElement('caption', calTable, CalendarNamespace.monthsOfYear[month - 1] + ' ' + year);
|
| 114 |
+
const tableBody = quickElement('tbody', calTable);
|
| 115 |
+
|
| 116 |
+
// Draw days-of-week header
|
| 117 |
+
let tableRow = quickElement('tr', tableBody);
|
| 118 |
+
for (let i = 0; i < 7; i++) {
|
| 119 |
+
quickElement('th', tableRow, CalendarNamespace.daysOfWeekInitial[(i + CalendarNamespace.firstDayOfWeek) % 7]);
|
| 120 |
+
}
|
| 121 |
+
|
| 122 |
+
const startingPos = new Date(year, month - 1, 1 - CalendarNamespace.firstDayOfWeek).getDay();
|
| 123 |
+
const days = CalendarNamespace.getDaysInMonth(month, year);
|
| 124 |
+
|
| 125 |
+
let nonDayCell;
|
| 126 |
+
|
| 127 |
+
// Draw blanks before first of month
|
| 128 |
+
tableRow = quickElement('tr', tableBody);
|
| 129 |
+
for (let i = 0; i < startingPos; i++) {
|
| 130 |
+
nonDayCell = quickElement('td', tableRow, ' ');
|
| 131 |
+
nonDayCell.className = "nonday";
|
| 132 |
+
}
|
| 133 |
+
|
| 134 |
+
function calendarMonth(y, m) {
|
| 135 |
+
function onClick(e) {
|
| 136 |
+
e.preventDefault();
|
| 137 |
+
callback(y, m, this.textContent);
|
| 138 |
+
}
|
| 139 |
+
return onClick;
|
| 140 |
+
}
|
| 141 |
+
|
| 142 |
+
// Draw days of month
|
| 143 |
+
let currentDay = 1;
|
| 144 |
+
for (let i = startingPos; currentDay <= days; i++) {
|
| 145 |
+
if (i % 7 === 0 && currentDay !== 1) {
|
| 146 |
+
tableRow = quickElement('tr', tableBody);
|
| 147 |
+
}
|
| 148 |
+
if ((currentDay === todayDay) && (month === todayMonth) && (year === todayYear)) {
|
| 149 |
+
todayClass = 'today';
|
| 150 |
+
} else {
|
| 151 |
+
todayClass = '';
|
| 152 |
+
}
|
| 153 |
+
|
| 154 |
+
// use UTC function; see above for explanation.
|
| 155 |
+
if (isSelectedMonth && currentDay === selected.getUTCDate()) {
|
| 156 |
+
if (todayClass !== '') {
|
| 157 |
+
todayClass += " ";
|
| 158 |
+
}
|
| 159 |
+
todayClass += "selected";
|
| 160 |
+
}
|
| 161 |
+
|
| 162 |
+
const cell = quickElement('td', tableRow, '', 'class', todayClass);
|
| 163 |
+
const link = quickElement('a', cell, currentDay, 'role', 'button', 'href', '#');
|
| 164 |
+
link.addEventListener('click', calendarMonth(year, month));
|
| 165 |
+
currentDay++;
|
| 166 |
+
}
|
| 167 |
+
|
| 168 |
+
// Draw blanks after end of month (optional, but makes for valid code)
|
| 169 |
+
while (tableRow.childNodes.length < 7) {
|
| 170 |
+
nonDayCell = quickElement('td', tableRow, ' ');
|
| 171 |
+
nonDayCell.className = "nonday";
|
| 172 |
+
}
|
| 173 |
+
|
| 174 |
+
calDiv.appendChild(calTable);
|
| 175 |
+
}
|
| 176 |
+
};
|
| 177 |
+
|
| 178 |
+
// Calendar -- A calendar instance
|
| 179 |
+
function Calendar(div_id, callback, selected) {
|
| 180 |
+
// div_id (string) is the ID of the element in which the calendar will
|
| 181 |
+
// be displayed
|
| 182 |
+
// callback (string) is the name of a JavaScript function that will be
|
| 183 |
+
// called with the parameters (year, month, day) when a day in the
|
| 184 |
+
// calendar is clicked
|
| 185 |
+
this.div_id = div_id;
|
| 186 |
+
this.callback = callback;
|
| 187 |
+
this.today = new Date();
|
| 188 |
+
this.currentMonth = this.today.getMonth() + 1;
|
| 189 |
+
this.currentYear = this.today.getFullYear();
|
| 190 |
+
if (typeof selected !== 'undefined') {
|
| 191 |
+
this.selected = selected;
|
| 192 |
+
}
|
| 193 |
+
}
|
| 194 |
+
Calendar.prototype = {
|
| 195 |
+
drawCurrent: function() {
|
| 196 |
+
CalendarNamespace.draw(this.currentMonth, this.currentYear, this.div_id, this.callback, this.selected);
|
| 197 |
+
},
|
| 198 |
+
drawDate: function(month, year, selected) {
|
| 199 |
+
this.currentMonth = month;
|
| 200 |
+
this.currentYear = year;
|
| 201 |
+
|
| 202 |
+
if(selected) {
|
| 203 |
+
this.selected = selected;
|
| 204 |
+
}
|
| 205 |
+
|
| 206 |
+
this.drawCurrent();
|
| 207 |
+
},
|
| 208 |
+
drawPreviousMonth: function() {
|
| 209 |
+
if (this.currentMonth === 1) {
|
| 210 |
+
this.currentMonth = 12;
|
| 211 |
+
this.currentYear--;
|
| 212 |
+
}
|
| 213 |
+
else {
|
| 214 |
+
this.currentMonth--;
|
| 215 |
+
}
|
| 216 |
+
this.drawCurrent();
|
| 217 |
+
},
|
| 218 |
+
drawNextMonth: function() {
|
| 219 |
+
if (this.currentMonth === 12) {
|
| 220 |
+
this.currentMonth = 1;
|
| 221 |
+
this.currentYear++;
|
| 222 |
+
}
|
| 223 |
+
else {
|
| 224 |
+
this.currentMonth++;
|
| 225 |
+
}
|
| 226 |
+
this.drawCurrent();
|
| 227 |
+
},
|
| 228 |
+
drawPreviousYear: function() {
|
| 229 |
+
this.currentYear--;
|
| 230 |
+
this.drawCurrent();
|
| 231 |
+
},
|
| 232 |
+
drawNextYear: function() {
|
| 233 |
+
this.currentYear++;
|
| 234 |
+
this.drawCurrent();
|
| 235 |
+
}
|
| 236 |
+
};
|
| 237 |
+
window.Calendar = Calendar;
|
| 238 |
+
window.CalendarNamespace = CalendarNamespace;
|
| 239 |
+
}
|