update deps and prepare server for final mail
This commit is contained in:
parent
c55718f3b7
commit
0239dab5bd
@ -1,11 +1,13 @@
|
||||
asgiref==3.7.2
|
||||
Django==4.2.7
|
||||
Django==5.0.3
|
||||
django-prometheus==2.3.1
|
||||
django-ranged-response==0.2.0
|
||||
django-simple-captcha==0.5.20
|
||||
Markdown==3.5.1
|
||||
Pillow==10.1.0
|
||||
psycopg==3.1.12
|
||||
django-simple-captcha==0.6.0
|
||||
Markdown==3.5.2
|
||||
pillow==10.2.0
|
||||
prometheus_client==0.20.0
|
||||
psycopg==3.1.18
|
||||
pymemcache==4.0.0
|
||||
sqlparse==0.4.4
|
||||
typing_extensions==4.8.0
|
||||
typing_extensions==4.10.0
|
||||
whitenoise==6.6.0
|
||||
|
@ -22,11 +22,11 @@ html[data-theme="light"],
|
||||
|
||||
--breadcrumbs-fg: #c4dce8;
|
||||
--breadcrumbs-link-fg: var(--body-bg);
|
||||
--breadcrumbs-bg: var(--primary);
|
||||
--breadcrumbs-bg: #264b5d;
|
||||
|
||||
--link-fg: #417893;
|
||||
--link-hover-color: #036;
|
||||
--link-selected-fg: #5b80b2;
|
||||
--link-selected-fg: var(--secondary);
|
||||
|
||||
--hairline-color: #e8e8e8;
|
||||
--border-color: #ccc;
|
||||
@ -42,10 +42,10 @@ html[data-theme="light"],
|
||||
--selected-row: #ffc;
|
||||
|
||||
--button-fg: #fff;
|
||||
--button-bg: var(--primary);
|
||||
--button-hover-bg: #609ab6;
|
||||
--default-button-bg: var(--secondary);
|
||||
--default-button-hover-bg: #205067;
|
||||
--button-bg: var(--secondary);
|
||||
--button-hover-bg: #205067;
|
||||
--default-button-bg: #205067;
|
||||
--default-button-hover-bg: var(--secondary);
|
||||
--close-button-bg: #747474;
|
||||
--close-button-hover-bg: #333;
|
||||
--delete-button-bg: #ba2121;
|
||||
@ -56,8 +56,6 @@ html[data-theme="light"],
|
||||
--object-tools-hover-bg: var(--close-button-hover-bg);
|
||||
|
||||
--font-family-primary:
|
||||
-apple-system,
|
||||
BlinkMacSystemFont,
|
||||
"Segoe UI",
|
||||
system-ui,
|
||||
Roboto,
|
||||
@ -586,7 +584,7 @@ input[type=button][disabled].default {
|
||||
font-weight: 400;
|
||||
font-size: 0.8125rem;
|
||||
text-align: left;
|
||||
background: var(--primary);
|
||||
background: var(--header-bg);
|
||||
color: var(--header-link-color);
|
||||
}
|
||||
|
||||
@ -722,6 +720,11 @@ div.breadcrumbs a:focus, div.breadcrumbs a:hover {
|
||||
background: url(../img/icon-viewlink.svg) 0 1px no-repeat;
|
||||
}
|
||||
|
||||
.hidelink {
|
||||
padding-left: 16px;
|
||||
background: url(../img/icon-hidelink.svg) 0 1px no-repeat;
|
||||
}
|
||||
|
||||
.addlink {
|
||||
padding-left: 16px;
|
||||
background: url(../img/icon-addlink.svg) 0 1px no-repeat;
|
||||
@ -831,10 +834,6 @@ a.deletelink:focus, a.deletelink:hover {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#container > div {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
#container > .main {
|
||||
display: flex;
|
||||
flex: 1 0 auto;
|
||||
@ -919,7 +918,6 @@ a.deletelink:focus, a.deletelink:hover {
|
||||
padding: 10px 40px;
|
||||
background: var(--header-bg);
|
||||
color: var(--header-color);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#header a:link, #header a:visited, #logout-form button {
|
||||
@ -934,7 +932,7 @@ a.deletelink:focus, a.deletelink:hover {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#branding h1 {
|
||||
#site-name {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
margin-inline-end: 20px;
|
||||
@ -943,7 +941,7 @@ a.deletelink:focus, a.deletelink:hover {
|
||||
color: var(--header-branding-color);
|
||||
}
|
||||
|
||||
#branding h1 a:link, #branding h1 a:visited {
|
||||
#site-name a:link, #site-name a:visited {
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
@ -1090,6 +1088,9 @@ a.deletelink:focus, a.deletelink:hover {
|
||||
/* PAGINATOR */
|
||||
|
||||
.paginator {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
font-size: 0.8125rem;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
@ -1133,6 +1134,23 @@ a.deletelink:focus, a.deletelink:hover {
|
||||
background: var(--link-hover-color);
|
||||
}
|
||||
|
||||
.paginator input {
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.base-svgs {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.visually-hidden {
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
clip: rect(0,0,0,0);
|
||||
white-space: nowrap;
|
||||
border: 0;
|
||||
color: var(--body-fg);
|
||||
background-color: var(--body-bg);
|
||||
}
|
||||
|
@ -153,6 +153,7 @@
|
||||
font-weight: 400;
|
||||
padding: 0 15px;
|
||||
margin-bottom: 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#changelist-filter details summary > * {
|
||||
@ -215,9 +216,9 @@
|
||||
color: var(--link-hover-color);
|
||||
}
|
||||
|
||||
#changelist-filter #changelist-filter-clear a {
|
||||
#changelist-filter #changelist-filter-extra-actions {
|
||||
font-size: 0.8125rem;
|
||||
padding-bottom: 10px;
|
||||
margin-bottom: 10px;
|
||||
border-bottom: 1px solid var(--hairline-color);
|
||||
}
|
||||
|
||||
@ -265,6 +266,15 @@
|
||||
background-color: var(--selected-row);
|
||||
}
|
||||
|
||||
@media (forced-colors: active) {
|
||||
#changelist tbody tr.selected {
|
||||
background-color: SelectedItem;
|
||||
}
|
||||
#changelist tbody tr:has(.action-select:checked) {
|
||||
background-color: SelectedItem;
|
||||
}
|
||||
}
|
||||
|
||||
#changelist .actions {
|
||||
padding: 10px;
|
||||
background: var(--body-bg);
|
||||
|
@ -122,16 +122,3 @@ html[data-theme="dark"] .theme-toggle svg.theme-icon-when-dark {
|
||||
html[data-theme="light"] .theme-toggle svg.theme-icon-when-light {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.visually-hidden {
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
clip: rect(0,0,0,0);
|
||||
white-space: nowrap;
|
||||
border: 0;
|
||||
color: var(--body-fg);
|
||||
background-color: var(--body-bg);
|
||||
}
|
||||
|
@ -24,6 +24,9 @@ form .form-row p {
|
||||
|
||||
.flex-container {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.form-multiline {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
@ -78,6 +81,7 @@ form ul.inline li {
|
||||
.aligned label {
|
||||
display: block;
|
||||
padding: 4px 10px 0 0;
|
||||
min-width: 160px;
|
||||
width: 160px;
|
||||
word-wrap: break-word;
|
||||
line-height: 1;
|
||||
|
@ -102,6 +102,12 @@
|
||||
background: var(--selected-row);
|
||||
}
|
||||
|
||||
@media (forced-colors: active) {
|
||||
#nav-sidebar .current-model {
|
||||
background-color: SelectedItem;
|
||||
}
|
||||
}
|
||||
|
||||
.main > #nav-sidebar + .content {
|
||||
max-width: calc(100% - 23px);
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ input[type="submit"], button {
|
||||
justify-content: flex-start;
|
||||
}
|
||||
|
||||
#branding h1 {
|
||||
#site-name {
|
||||
margin: 0 0 8px;
|
||||
line-height: 1.2;
|
||||
}
|
||||
@ -237,22 +237,6 @@ input[type="submit"], button {
|
||||
padding: 7px;
|
||||
}
|
||||
|
||||
/* Related widget */
|
||||
|
||||
.related-widget-wrapper {
|
||||
float: none;
|
||||
}
|
||||
|
||||
.related-widget-wrapper-link + .selector {
|
||||
max-width: calc(100% - 30px);
|
||||
margin-right: 15px;
|
||||
}
|
||||
|
||||
select + .related-widget-wrapper-link,
|
||||
.related-widget-wrapper-link + .related-widget-wrapper-link {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
/* Selector */
|
||||
|
||||
.selector {
|
||||
@ -270,7 +254,7 @@ input[type="submit"], button {
|
||||
}
|
||||
|
||||
.selector .selector-filter input {
|
||||
width: auto;
|
||||
width: 100%;
|
||||
min-height: 0;
|
||||
flex: 1 1;
|
||||
}
|
||||
@ -292,7 +276,6 @@ input[type="submit"], button {
|
||||
width: 26px;
|
||||
height: 52px;
|
||||
padding: 2px 0;
|
||||
margin: auto 15px;
|
||||
border-radius: 20px;
|
||||
transform: translateY(-10px);
|
||||
}
|
||||
@ -336,7 +319,6 @@ input[type="submit"], button {
|
||||
width: 52px;
|
||||
height: 26px;
|
||||
padding: 0 2px;
|
||||
margin: 15px auto;
|
||||
transform: none;
|
||||
}
|
||||
|
||||
@ -432,7 +414,7 @@ input[type="submit"], button {
|
||||
padding: 15px 20px;
|
||||
}
|
||||
|
||||
.login #branding h1 {
|
||||
.login #site-name {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
@ -565,6 +547,10 @@ input[type="submit"], button {
|
||||
flex-flow: column;
|
||||
}
|
||||
|
||||
.flex-container.checkbox-row {
|
||||
flex-flow: row;
|
||||
}
|
||||
|
||||
textarea {
|
||||
max-width: none;
|
||||
}
|
||||
@ -584,6 +570,7 @@ input[type="submit"], button {
|
||||
|
||||
.aligned label {
|
||||
width: 100%;
|
||||
min-width: auto;
|
||||
padding: 0 0 10px;
|
||||
}
|
||||
|
||||
@ -598,10 +585,6 @@ input[type="submit"], button {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.aligned .checkbox-row {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.aligned .checkbox-row input {
|
||||
flex: 0 1 auto;
|
||||
margin: 0;
|
||||
@ -683,23 +666,14 @@ input[type="submit"], button {
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
select + .related-widget-wrapper-link,
|
||||
.related-widget-wrapper-link + .related-widget-wrapper-link {
|
||||
margin-left: 15px;
|
||||
}
|
||||
|
||||
/* Selector */
|
||||
|
||||
.selector {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.selector > * {
|
||||
float: none;
|
||||
gap: 10px 0;
|
||||
}
|
||||
|
||||
.selector-available, .selector-chosen {
|
||||
margin-bottom: 0;
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
|
||||
@ -709,11 +683,9 @@ input[type="submit"], button {
|
||||
|
||||
.selector ul.selector-chooser {
|
||||
display: block;
|
||||
float: none;
|
||||
width: 52px;
|
||||
height: 26px;
|
||||
padding: 0 2px;
|
||||
margin: 15px auto 20px;
|
||||
transform: none;
|
||||
}
|
||||
|
||||
|
@ -78,4 +78,7 @@
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
}
|
||||
[dir="rtl"] .aligned .vCheckboxLabel {
|
||||
padding: 1px 5px 0 0;
|
||||
}
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ th {
|
||||
margin-right: 1.5em;
|
||||
}
|
||||
|
||||
.viewlink, .addlink, .changelink {
|
||||
.viewlink, .addlink, .changelink, .hidelink {
|
||||
padding-left: 0;
|
||||
padding-right: 16px;
|
||||
background-position: 100% 1px;
|
||||
@ -107,6 +107,16 @@ thead th.sorted .text {
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
.paginator .end {
|
||||
margin-left: 6px;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.paginator input {
|
||||
margin-left: 0;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
/* FORMS */
|
||||
|
||||
.aligned label {
|
||||
@ -286,3 +296,7 @@ form .form-row p.datetime {
|
||||
margin-left: inherit;
|
||||
margin-right: 2px;
|
||||
}
|
||||
|
||||
.selector .selector-chooser {
|
||||
margin: 0;
|
||||
}
|
||||
|
@ -1,23 +1,23 @@
|
||||
/* SELECTOR (FILTER INTERFACE) */
|
||||
|
||||
.selector {
|
||||
width: 800px;
|
||||
float: left;
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
gap: 0 10px;
|
||||
}
|
||||
|
||||
.selector select {
|
||||
width: 380px;
|
||||
height: 17.2em;
|
||||
flex: 1 0 auto;
|
||||
overflow: scroll;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.selector-available, .selector-chosen {
|
||||
width: 380px;
|
||||
text-align: center;
|
||||
margin-bottom: 5px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex: 1 1;
|
||||
}
|
||||
|
||||
.selector-available h2, .selector-chosen h2 {
|
||||
@ -41,7 +41,7 @@
|
||||
}
|
||||
|
||||
.selector-chosen h2 {
|
||||
background: var(--primary);
|
||||
background: var(--secondary);
|
||||
color: var(--header-link-color);
|
||||
}
|
||||
|
||||
@ -58,6 +58,7 @@
|
||||
font-size: 0.625rem;
|
||||
margin: 0;
|
||||
text-align: left;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.selector .selector-filter label,
|
||||
@ -69,11 +70,15 @@
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
line-height: 1;
|
||||
min-width: auto;
|
||||
}
|
||||
|
||||
.selector-filter input {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.selector .selector-available input,
|
||||
.selector .selector-chosen input {
|
||||
width: 320px;
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
@ -82,7 +87,7 @@
|
||||
width: 22px;
|
||||
background-color: var(--selected-bg);
|
||||
border-radius: 10px;
|
||||
margin: 0 5px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
transform: translateY(-17px);
|
||||
}
|
||||
@ -146,7 +151,7 @@ a.selector-chooseall, a.selector-clearall {
|
||||
display: inline-block;
|
||||
height: 16px;
|
||||
text-align: left;
|
||||
margin: 1px auto 3px;
|
||||
margin: 0 auto;
|
||||
overflow: hidden;
|
||||
font-weight: bold;
|
||||
line-height: 16px;
|
||||
@ -446,7 +451,7 @@ span.clearable-file-input label {
|
||||
}
|
||||
|
||||
.calendar td.selected a {
|
||||
background: var(--primary);
|
||||
background: var(--secondary);
|
||||
color: var(--button-fg);
|
||||
}
|
||||
|
||||
@ -533,17 +538,17 @@ span.clearable-file-input label {
|
||||
margin: 0;
|
||||
padding: 4px 0;
|
||||
font-size: 0.75rem;
|
||||
background: #eee;
|
||||
background: var(--close-button-bg);
|
||||
border-top: 1px solid var(--border-color);
|
||||
color: var(--body-fg);
|
||||
color: var(--button-fg);
|
||||
}
|
||||
|
||||
.calendar-cancel:focus, .calendar-cancel:hover {
|
||||
background: #ddd;
|
||||
background: var(--close-button-hover-bg);
|
||||
}
|
||||
|
||||
.calendar-cancel a {
|
||||
color: black;
|
||||
color: var(--button-fg);
|
||||
display: block;
|
||||
}
|
||||
|
||||
@ -574,26 +579,21 @@ ul.timelist, .timelist li {
|
||||
|
||||
/* RELATED WIDGET WRAPPER */
|
||||
.related-widget-wrapper {
|
||||
float: left; /* display properly in form rows with multiple fields */
|
||||
overflow: hidden; /* clear floated contents */
|
||||
display: flex;
|
||||
gap: 0 10px;
|
||||
flex-grow: 1;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.related-widget-wrapper-link {
|
||||
opacity: 0.3;
|
||||
opacity: .6;
|
||||
filter: grayscale(1);
|
||||
}
|
||||
|
||||
.related-widget-wrapper-link:link {
|
||||
opacity: .8;
|
||||
}
|
||||
|
||||
.related-widget-wrapper-link:link:focus,
|
||||
.related-widget-wrapper-link:link:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
select + .related-widget-wrapper-link,
|
||||
.related-widget-wrapper-link + .related-widget-wrapper-link {
|
||||
margin-left: 7px;
|
||||
filter: grayscale(0);
|
||||
}
|
||||
|
||||
/* GIS MAPS */
|
||||
|
3
static/admin/img/icon-hidelink.svg
Normal file
3
static/admin/img/icon-hidelink.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill="#2b70bf" d="m555 1335 78-141q-87-63-136-159t-49-203q0-121 61-225-229 117-381 353 167 258 427 375zm389-759q0-20-14-34t-34-14q-125 0-214.5 89.5T592 832q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm363-191q0 7-1 9-105 188-315 566t-316 567l-49 89q-10 16-28 16-12 0-134-70-16-10-16-28 0-12 44-87-143-65-263.5-173T20 1029Q0 998 0 960t20-69q153-235 380-371t496-136q89 0 180 17l54-97q10-16 28-16 5 0 18 6t31 15.5 33 18.5 31.5 18.5T1291 358q16 10 16 27zm37 447q0 139-79 253.5T1056 1250l280-502q8 45 8 84zm448 128q0 35-20 69-39 64-109 145-150 172-347.5 267T896 1536l74-132q212-18 392.5-137T1664 960q-115-179-282-294l63-112q95 64 182.5 153T1772 891q20 34 20 69z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 784 B |
@ -30,6 +30,9 @@ Requires core.js and SelectBox.js.
|
||||
|
||||
// <div class="selector"> or <div class="selector stacked">
|
||||
const selector_div = quickElement('div', from_box.parentNode);
|
||||
// Make sure the selector div is at the beginning so that the
|
||||
// add link would be displayed to the right of the widget.
|
||||
from_box.parentNode.prepend(selector_div);
|
||||
selector_div.className = is_stacked ? 'selector stacked' : 'selector';
|
||||
|
||||
// <div class="selector-available">
|
||||
|
@ -179,6 +179,9 @@
|
||||
}
|
||||
});
|
||||
}
|
||||
// Sync counter when navigating to the page, such as through the back
|
||||
// button.
|
||||
window.addEventListener('pageshow', (event) => updateCounter(actionCheckboxes, options));
|
||||
};
|
||||
|
||||
// Call function fn when the DOM is loaded and ready. If it is already
|
||||
|
@ -79,9 +79,11 @@
|
||||
siblings.each(function() {
|
||||
const elm = $(this);
|
||||
elm.attr('href', elm.attr('data-href-template').replace('__fk__', value));
|
||||
elm.removeAttr('aria-disabled');
|
||||
});
|
||||
} else {
|
||||
siblings.removeAttr('href');
|
||||
siblings.attr('aria-disabled', true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -36,6 +36,24 @@ depends on core.js for utility functions like removeChildren or quickElement
|
||||
pgettext('abbrev. month December', 'Dec')
|
||||
],
|
||||
daysOfWeek: [
|
||||
gettext('Sunday'),
|
||||
gettext('Monday'),
|
||||
gettext('Tuesday'),
|
||||
gettext('Wednesday'),
|
||||
gettext('Thursday'),
|
||||
gettext('Friday'),
|
||||
gettext('Saturday')
|
||||
],
|
||||
daysOfWeekAbbrev: [
|
||||
pgettext('abbrev. day Sunday', 'Sun'),
|
||||
pgettext('abbrev. day Monday', 'Mon'),
|
||||
pgettext('abbrev. day Tuesday', 'Tue'),
|
||||
pgettext('abbrev. day Wednesday', 'Wed'),
|
||||
pgettext('abbrev. day Thursday', 'Thur'),
|
||||
pgettext('abbrev. day Friday', 'Fri'),
|
||||
pgettext('abbrev. day Saturday', 'Sat')
|
||||
],
|
||||
daysOfWeekInitial: [
|
||||
pgettext('one letter Sunday', 'S'),
|
||||
pgettext('one letter Monday', 'M'),
|
||||
pgettext('one letter Tuesday', 'T'),
|
||||
@ -98,7 +116,7 @@ depends on core.js for utility functions like removeChildren or quickElement
|
||||
// Draw days-of-week header
|
||||
let tableRow = quickElement('tr', tableBody);
|
||||
for (let i = 0; i < 7; i++) {
|
||||
quickElement('th', tableRow, CalendarNamespace.daysOfWeek[(i + CalendarNamespace.firstDayOfWeek) % 7]);
|
||||
quickElement('th', tableRow, CalendarNamespace.daysOfWeekInitial[(i + CalendarNamespace.firstDayOfWeek) % 7]);
|
||||
}
|
||||
|
||||
const startingPos = new Date(year, month - 1, 1 - CalendarNamespace.firstDayOfWeek).getDay();
|
||||
|
@ -85,6 +85,18 @@ function findPosY(obj) {
|
||||
return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds();
|
||||
};
|
||||
|
||||
Date.prototype.getAbbrevDayName = function() {
|
||||
return typeof window.CalendarNamespace === "undefined"
|
||||
? '0' + this.getDay()
|
||||
: window.CalendarNamespace.daysOfWeekAbbrev[this.getDay()];
|
||||
};
|
||||
|
||||
Date.prototype.getFullDayName = function() {
|
||||
return typeof window.CalendarNamespace === "undefined"
|
||||
? '0' + this.getDay()
|
||||
: window.CalendarNamespace.daysOfWeek[this.getDay()];
|
||||
};
|
||||
|
||||
Date.prototype.getAbbrevMonthName = function() {
|
||||
return typeof window.CalendarNamespace === "undefined"
|
||||
? this.getTwoDigitMonth()
|
||||
@ -99,6 +111,8 @@ function findPosY(obj) {
|
||||
|
||||
Date.prototype.strftime = function(format) {
|
||||
const fields = {
|
||||
a: this.getAbbrevDayName(),
|
||||
A: this.getFullDayName(),
|
||||
b: this.getAbbrevMonthName(),
|
||||
B: this.getFullMonthName(),
|
||||
c: this.toString(),
|
||||
|
1883
static/admin/js/vendor/jquery/jquery.js
vendored
1883
static/admin/js/vendor/jquery/jquery.js
vendored
File diff suppressed because it is too large
Load Diff
4
static/admin/js/vendor/jquery/jquery.min.js
vendored
4
static/admin/js/vendor/jquery/jquery.min.js
vendored
File diff suppressed because one or more lines are too long
2
static/admin/js/vendor/xregexp/LICENSE.txt
vendored
2
static/admin/js/vendor/xregexp/LICENSE.txt
vendored
@ -1,6 +1,6 @@
|
||||
The MIT License
|
||||
|
||||
Copyright (c) 2007-2017 Steven Levithan <http://xregexp.com/>
|
||||
Copyright (c) 2007-present Steven Levithan <http://xregexp.com/>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
9160
static/admin/js/vendor/xregexp/xregexp.js
vendored
9160
static/admin/js/vendor/xregexp/xregexp.js
vendored
File diff suppressed because one or more lines are too long
177
static/admin/js/vendor/xregexp/xregexp.min.js
vendored
177
static/admin/js/vendor/xregexp/xregexp.min.js
vendored
File diff suppressed because one or more lines are too long
@ -4,7 +4,7 @@
|
||||
<div class="dc-container dc-center dc-padding-24">
|
||||
<a href="https://im-puls.org"><img src="https://im-puls.org/static/pictures/logo.webp" style="width:264px;height:120px;display:grid;margin-left:auto;margin-right:auto" class="dc-padding-24"></a>
|
||||
<h2 class="dc-center">{% if form.gender == "Männlich" %}Lieber{% else %}Liebe{% endif %} {{form.name}},</h2>
|
||||
<p class="dc-center dc-large dc-padding-24">die Tagung hat nun ihr Ende gefunden. Erst einmal herzlichen Dank dafür, dass du Teil dieser Tagung mit uns warst. Nun folgt die Kontaktliste mit Teilnehmern der Tagung.<br>Falls bei einem Teilnehmer mal keine Adresse steht bedeutet dass, das der Teilnehmer eine Weitergabe seiner Daten nicht wünscht.</p>
|
||||
<p class="dc-center dc-large dc-padding-24">schon seit einer Weile hat nun die Tagung ihr Ende gefunden. Erst einmal möchten wir Dir ganz herzlich dafür danken, dass du Teil dieser Tagung mit uns gewesen bist.<br>Für nächstes Jahr suchen wir noch weitere Vorbereiter, wenn Du Lust hast schreib gerne an <a href="mailto:buero@im-puls.org">buero@im-puls.org</a>. Dann bekommst du eine Mail mit allen weiteren Infos. Es nimmt nicht viel Zeit in Anspruch und ermöglicht auch nächstes Jahr eine tolle Tagung für alle.<br>Nun folgt die Kontaktliste mit allen anwesenden Teilnehmern der Tagung.<br>Falls bei einem Teilnehmer keine Adresse eingetragen bedeutet dass, das der Teilnehmer eine Weitergabe seiner Daten nicht erlaubt hat.</p>
|
||||
<div class="tg-wrap">
|
||||
<table class="tg">
|
||||
<thead>
|
||||
@ -28,9 +28,9 @@
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table></div>
|
||||
<p class="dc-center dc-large dc-padding-24">Wir hoffen, dass Du viele Impulse aus der Tagung ziehen konntest.<br>Hier noch eine letzte Impuls-Vertiefung: Welche Impulse konntest du den aus der Tagung in dein Leben mitnehmen?<br>
|
||||
<p class="dc-center dc-large dc-padding-24">Wir hoffen, dass die Tagung für Dich fruchtbringend und kräftigend wirken konnte.<br>Zum Abschluss haben wir noch eine letzte Impuls-Vertiefung: Welche Impulse konntest Du den aus der Tagung schon in Dein Leben mitnehmen?<br>
|
||||
Mit herzlichen Grüßen,<br>
|
||||
Euer Vorbereitungsteam<br>
|
||||
Das Vorbereitungsteam<br>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,16 +1,12 @@
|
||||
{% if form.gender == "Männlich" %}Lieber{% else %}Liebe{% endif %} {{form.name}},
|
||||
Wir freuen uns auf auf Dich und die bevorstehende Im-Puls-Tagung. Hier noch
|
||||
eine kleine Erinnerung:
|
||||
- Schreibzeug, Hausschuhe, Eurythmieschuhe, Musikinstrumente, Schlafsack und Isomatte mitbringen.
|
||||
- Denkt an den Kuchen!
|
||||
- Das Tagungsbüro ist unter folgender Rufnummer erreichbar: 0151 70818415.
|
||||
- Die Tagung beginnt am 14. Februar um 17:00, Anreise ab 15:00.
|
||||
- Bei weiteren Fragen kannst Du gerne mit dem Tagungsbüro Kontakt aufnehmen.
|
||||
Auch gibt es schon einen kleinen Vorgeschmack auf die Arbeitsgruppen:
|
||||
- Daniel Hafner: Einführung in die Anthroposophie
|
||||
- Felicia Holland: Workshop „Kunst als Weg“
|
||||
- Ran Miller: Eurythmie
|
||||
- Martin Merckens: Spannungsfeld zwischen Licht und Finsternis
|
||||
|
||||
In Freude auf ein baldiges Treffen,
|
||||
Euer Vorbereitungsteam
|
||||
schon seit einer Weile hat nun die Tagung ihr Ende gefunden. Erst einmal möchten wir Dir ganz herzlich dafür danken, dass du Teil dieser Tagung mit uns gewesen bist.
|
||||
Für nächstes Jahr suchen wir noch weitere Vorbereiter, wenn Du Lust hast schreib gerne an buero@im-puls.org. Dann bekommst du eine Mail mit allen weiteren Infos. Es nimmt nicht viel Zeit in Anspruch und ermöglicht auch nächstes Jahr eine tolle Tagung für alle.
|
||||
Nun folgt die Kontaktliste mit allen anwesenden Teilnehmern der Tagung.
|
||||
Falls bei einem Teilnehmer keine Adresse eingetragen bedeutet dass, das der Teilnehmer eine Weitergabe seiner Daten nicht erlaubt hat.
|
||||
Name Anschrift Mail-Adresse Telefonnummer
|
||||
{% for reg in RegistrantList %}{{ reg.name }} {% if reg.publish_address%}{{reg.address_street}},{{reg.address_plz}} {{reg.address_town}}{% else%}---{% endif %} {{reg.mail}} {% if reg.publish_phone %}{{ reg.phone }}{% else %}---{% endif %}
|
||||
{% empty %}Leider konnten momentan keine Teilnehmer abgerufen werden.{% endfor %}
|
||||
Wir hoffen, dass die Tagung für Dich fruchtbringend und kräftigend wirken konnte.
|
||||
Zum Abschluss haben wir noch eine letzte Impuls-Vertiefung: Welche Impulse konntest Du den aus der Tagung schon in Dein Leben mitnehmen?
|
||||
Mit herzlichen Grüßen,
|
||||
Das Vorbereitungsteam
|
||||
|
@ -10,7 +10,7 @@
|
||||
<div class="dc-header dc-center">
|
||||
<h1 class="dc-jumbo">Im·Puls 2024</h1>
|
||||
<h2 class="dc-xxxlarge">Geistige IDEALE<br>&<br>irdische REALITÄT</h2>
|
||||
<span class="dc-xlarge">Die aktuelle Tagung findet vom 14. Februar, 17:00, bis zum 18. Februar, 12:30, in Stuttgart statt.
|
||||
<span class="dc-xlarge">Die aktuelle Tagung fand vom 14. Februar, 17:00, bis zum 18. Februar, 12:30, erfolgreich in Stuttgart statt.
|
||||
</div>
|
||||
<svg class="editorial" viewBox="0 24 150 28 " preserveAspectRatio="none">
|
||||
<defs> <path id="gentle-wave" d="M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z" /></defs>
|
||||
|
Binary file not shown.
Binary file not shown.
@ -8,7 +8,7 @@ class RegistrantAdmin(admin.ModelAdmin):
|
||||
list_display = ('name','birthdate','address_town','mail')
|
||||
readonly_fields = ['timestamp']
|
||||
list_filter = ['payed', 'rate_reduced', 'canceled', 'team', 'food', 'cake']
|
||||
actions = ['welcome_mail','preparation_mail']
|
||||
actions = ['welcome_mail','preparation_mail','preparation_mail_all','final_mail','final_mail_all']
|
||||
|
||||
@admin.action(description='Send welcome mail to ...')
|
||||
def welcome_mail(self, request, queryset):
|
||||
@ -18,6 +18,7 @@ class RegistrantAdmin(admin.ModelAdmin):
|
||||
send_mail(f'Herzlich Willkommen zur Im·Puls-Tagung, {reg.name}', msg_plain, 'buero@im-puls.org', [f"{reg.mail}"], fail_silently=False, html_message=msg_html)
|
||||
send_mail(f'Neue Anmeldung: {reg.name}', msg_plain, 'buero@im-puls.org', ["webmaster@denkena-consulting.com"], fail_silently=False, html_message=msg_html)
|
||||
|
||||
|
||||
@admin.action(description='Send preparation mail to ...')
|
||||
def preparation_mail(self, request, queryset):
|
||||
for reg in queryset:
|
||||
@ -26,12 +27,27 @@ class RegistrantAdmin(admin.ModelAdmin):
|
||||
send_mail(f'Letzte Informationen zur Im·Puls-Tagung, {reg.name}', msg_plain, 'buero@im-puls.org', [f"{reg.mail}"], fail_silently=False, html_message=msg_html)
|
||||
|
||||
@admin.action(description='Send preparation mail to all')
|
||||
def preparation_mail(self):
|
||||
def preparation_mail_all(self):
|
||||
for reg in Registrant25.objects.all:
|
||||
msg_plain = render_to_string('preparation_mail.txt', {"form": reg})
|
||||
msg_html = render_to_string('preparation_mail.html', {"form": reg})
|
||||
send_mail(f'Letzte Informationen zur Im·Puls-Tagung, {reg.name}', msg_plain, 'buero@im-puls.org', [f"{reg.mail}"], fail_silently=False, html_message=msg_html)
|
||||
|
||||
@admin.action(description='Send final mail to ...')
|
||||
def final_mail(self, request, queryset):
|
||||
for reg in queryset:
|
||||
msg_plain = render_to_string('final_mail.txt', {"form": reg, "RegistrantList": filter(lambda x: not x.canceled, sorted(Registrant2024.objects.all(), key=lambda x: x.name))})
|
||||
msg_html = render_to_string('final_mail.html', {"form": reg, "RegistrantList": filter(lambda x: not x.canceled, sorted(Registrant2024.objects.all(), key=lambda x: x.name))})
|
||||
send_mail(f'Kontaktliste und Gruß von der Im·Puls-Tagung, {reg.name}', msg_plain, 'buero@im-puls.org', [f"{reg.mail}"], fail_silently=False, html_message=msg_html)
|
||||
|
||||
@admin.action(description='Send final mail to all')
|
||||
def final_mail_all(self):
|
||||
for reg in Registrant2024.objects.all:
|
||||
msg_plain = render_to_string('final_mail.txt', {"form": reg, "RegistrantList": filter(lambda x: not x.canceled, sorted(Registrant2024.objects.all(), key=lambda x: x.name))})
|
||||
msg_html = render_to_string('final_mail.html', {"form": reg, "RegistrantList": filter(lambda x: not x.canceled, sorted(Registrant2024.objects.all(), key=lambda x: x.name))})
|
||||
send_mail(f'Kontaktliste und Gruß von der Im·Puls-Tagung, {reg.name}', msg_plain, 'buero@im-puls.org', [f"{reg.mail}"], fail_silently=False, html_message=msg_html)
|
||||
|
||||
|
||||
admin.site.register(Author)
|
||||
admin.site.register(Category)
|
||||
admin.site.register(Post)
|
||||
|
Loading…
Reference in New Issue
Block a user