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
|
asgiref==3.7.2
|
||||||
Django==4.2.7
|
Django==5.0.3
|
||||||
|
django-prometheus==2.3.1
|
||||||
django-ranged-response==0.2.0
|
django-ranged-response==0.2.0
|
||||||
django-simple-captcha==0.5.20
|
django-simple-captcha==0.6.0
|
||||||
Markdown==3.5.1
|
Markdown==3.5.2
|
||||||
Pillow==10.1.0
|
pillow==10.2.0
|
||||||
psycopg==3.1.12
|
prometheus_client==0.20.0
|
||||||
|
psycopg==3.1.18
|
||||||
pymemcache==4.0.0
|
pymemcache==4.0.0
|
||||||
sqlparse==0.4.4
|
sqlparse==0.4.4
|
||||||
typing_extensions==4.8.0
|
typing_extensions==4.10.0
|
||||||
whitenoise==6.6.0
|
whitenoise==6.6.0
|
||||||
|
@ -22,11 +22,11 @@ html[data-theme="light"],
|
|||||||
|
|
||||||
--breadcrumbs-fg: #c4dce8;
|
--breadcrumbs-fg: #c4dce8;
|
||||||
--breadcrumbs-link-fg: var(--body-bg);
|
--breadcrumbs-link-fg: var(--body-bg);
|
||||||
--breadcrumbs-bg: var(--primary);
|
--breadcrumbs-bg: #264b5d;
|
||||||
|
|
||||||
--link-fg: #417893;
|
--link-fg: #417893;
|
||||||
--link-hover-color: #036;
|
--link-hover-color: #036;
|
||||||
--link-selected-fg: #5b80b2;
|
--link-selected-fg: var(--secondary);
|
||||||
|
|
||||||
--hairline-color: #e8e8e8;
|
--hairline-color: #e8e8e8;
|
||||||
--border-color: #ccc;
|
--border-color: #ccc;
|
||||||
@ -42,10 +42,10 @@ html[data-theme="light"],
|
|||||||
--selected-row: #ffc;
|
--selected-row: #ffc;
|
||||||
|
|
||||||
--button-fg: #fff;
|
--button-fg: #fff;
|
||||||
--button-bg: var(--primary);
|
--button-bg: var(--secondary);
|
||||||
--button-hover-bg: #609ab6;
|
--button-hover-bg: #205067;
|
||||||
--default-button-bg: var(--secondary);
|
--default-button-bg: #205067;
|
||||||
--default-button-hover-bg: #205067;
|
--default-button-hover-bg: var(--secondary);
|
||||||
--close-button-bg: #747474;
|
--close-button-bg: #747474;
|
||||||
--close-button-hover-bg: #333;
|
--close-button-hover-bg: #333;
|
||||||
--delete-button-bg: #ba2121;
|
--delete-button-bg: #ba2121;
|
||||||
@ -56,8 +56,6 @@ html[data-theme="light"],
|
|||||||
--object-tools-hover-bg: var(--close-button-hover-bg);
|
--object-tools-hover-bg: var(--close-button-hover-bg);
|
||||||
|
|
||||||
--font-family-primary:
|
--font-family-primary:
|
||||||
-apple-system,
|
|
||||||
BlinkMacSystemFont,
|
|
||||||
"Segoe UI",
|
"Segoe UI",
|
||||||
system-ui,
|
system-ui,
|
||||||
Roboto,
|
Roboto,
|
||||||
@ -586,7 +584,7 @@ input[type=button][disabled].default {
|
|||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 0.8125rem;
|
font-size: 0.8125rem;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
background: var(--primary);
|
background: var(--header-bg);
|
||||||
color: var(--header-link-color);
|
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;
|
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 {
|
.addlink {
|
||||||
padding-left: 16px;
|
padding-left: 16px;
|
||||||
background: url(../img/icon-addlink.svg) 0 1px no-repeat;
|
background: url(../img/icon-addlink.svg) 0 1px no-repeat;
|
||||||
@ -831,10 +834,6 @@ a.deletelink:focus, a.deletelink:hover {
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#container > div {
|
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#container > .main {
|
#container > .main {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex: 1 0 auto;
|
flex: 1 0 auto;
|
||||||
@ -919,7 +918,6 @@ a.deletelink:focus, a.deletelink:hover {
|
|||||||
padding: 10px 40px;
|
padding: 10px 40px;
|
||||||
background: var(--header-bg);
|
background: var(--header-bg);
|
||||||
color: var(--header-color);
|
color: var(--header-color);
|
||||||
overflow: hidden;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#header a:link, #header a:visited, #logout-form button {
|
#header a:link, #header a:visited, #logout-form button {
|
||||||
@ -934,7 +932,7 @@ a.deletelink:focus, a.deletelink:hover {
|
|||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
#branding h1 {
|
#site-name {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
margin-inline-end: 20px;
|
margin-inline-end: 20px;
|
||||||
@ -943,7 +941,7 @@ a.deletelink:focus, a.deletelink:hover {
|
|||||||
color: var(--header-branding-color);
|
color: var(--header-branding-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
#branding h1 a:link, #branding h1 a:visited {
|
#site-name a:link, #site-name a:visited {
|
||||||
color: var(--accent);
|
color: var(--accent);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1090,6 +1088,9 @@ a.deletelink:focus, a.deletelink:hover {
|
|||||||
/* PAGINATOR */
|
/* PAGINATOR */
|
||||||
|
|
||||||
.paginator {
|
.paginator {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 4px;
|
||||||
font-size: 0.8125rem;
|
font-size: 0.8125rem;
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
padding-bottom: 10px;
|
padding-bottom: 10px;
|
||||||
@ -1133,6 +1134,23 @@ a.deletelink:focus, a.deletelink:hover {
|
|||||||
background: var(--link-hover-color);
|
background: var(--link-hover-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.paginator input {
|
||||||
|
margin-left: auto;
|
||||||
|
}
|
||||||
|
|
||||||
.base-svgs {
|
.base-svgs {
|
||||||
display: none;
|
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;
|
font-weight: 400;
|
||||||
padding: 0 15px;
|
padding: 0 15px;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist-filter details summary > * {
|
#changelist-filter details summary > * {
|
||||||
@ -215,9 +216,9 @@
|
|||||||
color: var(--link-hover-color);
|
color: var(--link-hover-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist-filter #changelist-filter-clear a {
|
#changelist-filter #changelist-filter-extra-actions {
|
||||||
font-size: 0.8125rem;
|
font-size: 0.8125rem;
|
||||||
padding-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
border-bottom: 1px solid var(--hairline-color);
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -265,6 +266,15 @@
|
|||||||
background-color: var(--selected-row);
|
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 {
|
#changelist .actions {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
background: var(--body-bg);
|
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 {
|
html[data-theme="light"] .theme-toggle svg.theme-icon-when-light {
|
||||||
display: block;
|
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 {
|
.flex-container {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-multiline {
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,6 +81,7 @@ form ul.inline li {
|
|||||||
.aligned label {
|
.aligned label {
|
||||||
display: block;
|
display: block;
|
||||||
padding: 4px 10px 0 0;
|
padding: 4px 10px 0 0;
|
||||||
|
min-width: 160px;
|
||||||
width: 160px;
|
width: 160px;
|
||||||
word-wrap: break-word;
|
word-wrap: break-word;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
|
@ -102,6 +102,12 @@
|
|||||||
background: var(--selected-row);
|
background: var(--selected-row);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media (forced-colors: active) {
|
||||||
|
#nav-sidebar .current-model {
|
||||||
|
background-color: SelectedItem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.main > #nav-sidebar + .content {
|
.main > #nav-sidebar + .content {
|
||||||
max-width: calc(100% - 23px);
|
max-width: calc(100% - 23px);
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,7 @@ input[type="submit"], button {
|
|||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
}
|
}
|
||||||
|
|
||||||
#branding h1 {
|
#site-name {
|
||||||
margin: 0 0 8px;
|
margin: 0 0 8px;
|
||||||
line-height: 1.2;
|
line-height: 1.2;
|
||||||
}
|
}
|
||||||
@ -237,22 +237,6 @@ input[type="submit"], button {
|
|||||||
padding: 7px;
|
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 */
|
||||||
|
|
||||||
.selector {
|
.selector {
|
||||||
@ -270,7 +254,7 @@ input[type="submit"], button {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.selector .selector-filter input {
|
.selector .selector-filter input {
|
||||||
width: auto;
|
width: 100%;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
flex: 1 1;
|
flex: 1 1;
|
||||||
}
|
}
|
||||||
@ -292,7 +276,6 @@ input[type="submit"], button {
|
|||||||
width: 26px;
|
width: 26px;
|
||||||
height: 52px;
|
height: 52px;
|
||||||
padding: 2px 0;
|
padding: 2px 0;
|
||||||
margin: auto 15px;
|
|
||||||
border-radius: 20px;
|
border-radius: 20px;
|
||||||
transform: translateY(-10px);
|
transform: translateY(-10px);
|
||||||
}
|
}
|
||||||
@ -336,7 +319,6 @@ input[type="submit"], button {
|
|||||||
width: 52px;
|
width: 52px;
|
||||||
height: 26px;
|
height: 26px;
|
||||||
padding: 0 2px;
|
padding: 0 2px;
|
||||||
margin: 15px auto;
|
|
||||||
transform: none;
|
transform: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -432,7 +414,7 @@ input[type="submit"], button {
|
|||||||
padding: 15px 20px;
|
padding: 15px 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.login #branding h1 {
|
.login #site-name {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -565,6 +547,10 @@ input[type="submit"], button {
|
|||||||
flex-flow: column;
|
flex-flow: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.flex-container.checkbox-row {
|
||||||
|
flex-flow: row;
|
||||||
|
}
|
||||||
|
|
||||||
textarea {
|
textarea {
|
||||||
max-width: none;
|
max-width: none;
|
||||||
}
|
}
|
||||||
@ -584,6 +570,7 @@ input[type="submit"], button {
|
|||||||
|
|
||||||
.aligned label {
|
.aligned label {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
min-width: auto;
|
||||||
padding: 0 0 10px;
|
padding: 0 0 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -598,10 +585,6 @@ input[type="submit"], button {
|
|||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.aligned .checkbox-row {
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.aligned .checkbox-row input {
|
.aligned .checkbox-row input {
|
||||||
flex: 0 1 auto;
|
flex: 0 1 auto;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
@ -683,23 +666,14 @@ input[type="submit"], button {
|
|||||||
align-self: center;
|
align-self: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
select + .related-widget-wrapper-link,
|
|
||||||
.related-widget-wrapper-link + .related-widget-wrapper-link {
|
|
||||||
margin-left: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Selector */
|
/* Selector */
|
||||||
|
|
||||||
.selector {
|
.selector {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
gap: 10px 0;
|
||||||
|
|
||||||
.selector > * {
|
|
||||||
float: none;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector-available, .selector-chosen {
|
.selector-available, .selector-chosen {
|
||||||
margin-bottom: 0;
|
|
||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -709,11 +683,9 @@ input[type="submit"], button {
|
|||||||
|
|
||||||
.selector ul.selector-chooser {
|
.selector ul.selector-chooser {
|
||||||
display: block;
|
display: block;
|
||||||
float: none;
|
|
||||||
width: 52px;
|
width: 52px;
|
||||||
height: 26px;
|
height: 26px;
|
||||||
padding: 0 2px;
|
padding: 0 2px;
|
||||||
margin: 15px auto 20px;
|
|
||||||
transform: none;
|
transform: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,4 +78,7 @@
|
|||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
}
|
}
|
||||||
|
[dir="rtl"] .aligned .vCheckboxLabel {
|
||||||
|
padding: 1px 5px 0 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ th {
|
|||||||
margin-right: 1.5em;
|
margin-right: 1.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.viewlink, .addlink, .changelink {
|
.viewlink, .addlink, .changelink, .hidelink {
|
||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
padding-right: 16px;
|
padding-right: 16px;
|
||||||
background-position: 100% 1px;
|
background-position: 100% 1px;
|
||||||
@ -107,6 +107,16 @@ thead th.sorted .text {
|
|||||||
border-left: none;
|
border-left: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.paginator .end {
|
||||||
|
margin-left: 6px;
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginator input {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
/* FORMS */
|
/* FORMS */
|
||||||
|
|
||||||
.aligned label {
|
.aligned label {
|
||||||
@ -286,3 +296,7 @@ form .form-row p.datetime {
|
|||||||
margin-left: inherit;
|
margin-left: inherit;
|
||||||
margin-right: 2px;
|
margin-right: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.selector .selector-chooser {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
@ -1,23 +1,23 @@
|
|||||||
/* SELECTOR (FILTER INTERFACE) */
|
/* SELECTOR (FILTER INTERFACE) */
|
||||||
|
|
||||||
.selector {
|
.selector {
|
||||||
width: 800px;
|
|
||||||
float: left;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
|
flex-grow: 1;
|
||||||
|
gap: 0 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector select {
|
.selector select {
|
||||||
width: 380px;
|
|
||||||
height: 17.2em;
|
height: 17.2em;
|
||||||
flex: 1 0 auto;
|
flex: 1 0 auto;
|
||||||
|
overflow: scroll;
|
||||||
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector-available, .selector-chosen {
|
.selector-available, .selector-chosen {
|
||||||
width: 380px;
|
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-bottom: 5px;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
flex: 1 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector-available h2, .selector-chosen h2 {
|
.selector-available h2, .selector-chosen h2 {
|
||||||
@ -41,7 +41,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.selector-chosen h2 {
|
.selector-chosen h2 {
|
||||||
background: var(--primary);
|
background: var(--secondary);
|
||||||
color: var(--header-link-color);
|
color: var(--header-link-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,6 +58,7 @@
|
|||||||
font-size: 0.625rem;
|
font-size: 0.625rem;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector .selector-filter label,
|
.selector .selector-filter label,
|
||||||
@ -69,11 +70,15 @@
|
|||||||
padding: 0;
|
padding: 0;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
|
min-width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-filter input {
|
||||||
|
flex-grow: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector .selector-available input,
|
.selector .selector-available input,
|
||||||
.selector .selector-chosen input {
|
.selector .selector-chosen input {
|
||||||
width: 320px;
|
|
||||||
margin-left: 8px;
|
margin-left: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,7 +87,7 @@
|
|||||||
width: 22px;
|
width: 22px;
|
||||||
background-color: var(--selected-bg);
|
background-color: var(--selected-bg);
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
margin: 0 5px;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
transform: translateY(-17px);
|
transform: translateY(-17px);
|
||||||
}
|
}
|
||||||
@ -146,7 +151,7 @@ a.selector-chooseall, a.selector-clearall {
|
|||||||
display: inline-block;
|
display: inline-block;
|
||||||
height: 16px;
|
height: 16px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
margin: 1px auto 3px;
|
margin: 0 auto;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
line-height: 16px;
|
line-height: 16px;
|
||||||
@ -446,7 +451,7 @@ span.clearable-file-input label {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.calendar td.selected a {
|
.calendar td.selected a {
|
||||||
background: var(--primary);
|
background: var(--secondary);
|
||||||
color: var(--button-fg);
|
color: var(--button-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -533,17 +538,17 @@ span.clearable-file-input label {
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 4px 0;
|
padding: 4px 0;
|
||||||
font-size: 0.75rem;
|
font-size: 0.75rem;
|
||||||
background: #eee;
|
background: var(--close-button-bg);
|
||||||
border-top: 1px solid var(--border-color);
|
border-top: 1px solid var(--border-color);
|
||||||
color: var(--body-fg);
|
color: var(--button-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendar-cancel:focus, .calendar-cancel:hover {
|
.calendar-cancel:focus, .calendar-cancel:hover {
|
||||||
background: #ddd;
|
background: var(--close-button-hover-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendar-cancel a {
|
.calendar-cancel a {
|
||||||
color: black;
|
color: var(--button-fg);
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -574,26 +579,21 @@ ul.timelist, .timelist li {
|
|||||||
|
|
||||||
/* RELATED WIDGET WRAPPER */
|
/* RELATED WIDGET WRAPPER */
|
||||||
.related-widget-wrapper {
|
.related-widget-wrapper {
|
||||||
float: left; /* display properly in form rows with multiple fields */
|
display: flex;
|
||||||
overflow: hidden; /* clear floated contents */
|
gap: 0 10px;
|
||||||
|
flex-grow: 1;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin-bottom: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.related-widget-wrapper-link {
|
.related-widget-wrapper-link {
|
||||||
opacity: 0.3;
|
opacity: .6;
|
||||||
|
filter: grayscale(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
.related-widget-wrapper-link:link {
|
.related-widget-wrapper-link:link {
|
||||||
opacity: .8;
|
|
||||||
}
|
|
||||||
|
|
||||||
.related-widget-wrapper-link:link:focus,
|
|
||||||
.related-widget-wrapper-link:link:hover {
|
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
filter: grayscale(0);
|
||||||
|
|
||||||
select + .related-widget-wrapper-link,
|
|
||||||
.related-widget-wrapper-link + .related-widget-wrapper-link {
|
|
||||||
margin-left: 7px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* GIS MAPS */
|
/* 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">
|
// <div class="selector"> or <div class="selector stacked">
|
||||||
const selector_div = quickElement('div', from_box.parentNode);
|
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';
|
selector_div.className = is_stacked ? 'selector stacked' : 'selector';
|
||||||
|
|
||||||
// <div class="selector-available">
|
// <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
|
// Call function fn when the DOM is loaded and ready. If it is already
|
||||||
|
@ -79,9 +79,11 @@
|
|||||||
siblings.each(function() {
|
siblings.each(function() {
|
||||||
const elm = $(this);
|
const elm = $(this);
|
||||||
elm.attr('href', elm.attr('data-href-template').replace('__fk__', value));
|
elm.attr('href', elm.attr('data-href-template').replace('__fk__', value));
|
||||||
|
elm.removeAttr('aria-disabled');
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
siblings.removeAttr('href');
|
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')
|
pgettext('abbrev. month December', 'Dec')
|
||||||
],
|
],
|
||||||
daysOfWeek: [
|
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 Sunday', 'S'),
|
||||||
pgettext('one letter Monday', 'M'),
|
pgettext('one letter Monday', 'M'),
|
||||||
pgettext('one letter Tuesday', 'T'),
|
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
|
// Draw days-of-week header
|
||||||
let tableRow = quickElement('tr', tableBody);
|
let tableRow = quickElement('tr', tableBody);
|
||||||
for (let i = 0; i < 7; i++) {
|
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();
|
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();
|
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() {
|
Date.prototype.getAbbrevMonthName = function() {
|
||||||
return typeof window.CalendarNamespace === "undefined"
|
return typeof window.CalendarNamespace === "undefined"
|
||||||
? this.getTwoDigitMonth()
|
? this.getTwoDigitMonth()
|
||||||
@ -99,6 +111,8 @@ function findPosY(obj) {
|
|||||||
|
|
||||||
Date.prototype.strftime = function(format) {
|
Date.prototype.strftime = function(format) {
|
||||||
const fields = {
|
const fields = {
|
||||||
|
a: this.getAbbrevDayName(),
|
||||||
|
A: this.getFullDayName(),
|
||||||
b: this.getAbbrevMonthName(),
|
b: this.getAbbrevMonthName(),
|
||||||
B: this.getFullMonthName(),
|
B: this.getFullMonthName(),
|
||||||
c: this.toString(),
|
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
|
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
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
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">
|
<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>
|
<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>
|
<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">
|
<div class="tg-wrap">
|
||||||
<table class="tg">
|
<table class="tg">
|
||||||
<thead>
|
<thead>
|
||||||
@ -28,9 +28,9 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table></div>
|
</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>
|
Mit herzlichen Grüßen,<br>
|
||||||
Euer Vorbereitungsteam<br>
|
Das Vorbereitungsteam<br>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,16 +1,12 @@
|
|||||||
{% if form.gender == "Männlich" %}Lieber{% else %}Liebe{% endif %} {{form.name}},
|
{% 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
|
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.
|
||||||
eine kleine Erinnerung:
|
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.
|
||||||
- Schreibzeug, Hausschuhe, Eurythmieschuhe, Musikinstrumente, Schlafsack und Isomatte mitbringen.
|
Nun folgt die Kontaktliste mit allen anwesenden Teilnehmern der Tagung.
|
||||||
- Denkt an den Kuchen!
|
Falls bei einem Teilnehmer keine Adresse eingetragen bedeutet dass, das der Teilnehmer eine Weitergabe seiner Daten nicht erlaubt hat.
|
||||||
- Das Tagungsbüro ist unter folgender Rufnummer erreichbar: 0151 70818415.
|
Name Anschrift Mail-Adresse Telefonnummer
|
||||||
- Die Tagung beginnt am 14. Februar um 17:00, Anreise ab 15:00.
|
{% 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 %}
|
||||||
- Bei weiteren Fragen kannst Du gerne mit dem Tagungsbüro Kontakt aufnehmen.
|
{% empty %}Leider konnten momentan keine Teilnehmer abgerufen werden.{% endfor %}
|
||||||
Auch gibt es schon einen kleinen Vorgeschmack auf die Arbeitsgruppen:
|
Wir hoffen, dass die Tagung für Dich fruchtbringend und kräftigend wirken konnte.
|
||||||
- Daniel Hafner: Einführung in die Anthroposophie
|
Zum Abschluss haben wir noch eine letzte Impuls-Vertiefung: Welche Impulse konntest Du den aus der Tagung schon in Dein Leben mitnehmen?
|
||||||
- Felicia Holland: Workshop „Kunst als Weg“
|
Mit herzlichen Grüßen,
|
||||||
- Ran Miller: Eurythmie
|
Das Vorbereitungsteam
|
||||||
- Martin Merckens: Spannungsfeld zwischen Licht und Finsternis
|
|
||||||
|
|
||||||
In Freude auf ein baldiges Treffen,
|
|
||||||
Euer Vorbereitungsteam
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<div class="dc-header dc-center">
|
<div class="dc-header dc-center">
|
||||||
<h1 class="dc-jumbo">Im·Puls 2024</h1>
|
<h1 class="dc-jumbo">Im·Puls 2024</h1>
|
||||||
<h2 class="dc-xxxlarge">Geistige IDEALE<br>&<br>irdische REALITÄT</h2>
|
<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>
|
</div>
|
||||||
<svg class="editorial" viewBox="0 24 150 28 " preserveAspectRatio="none">
|
<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>
|
<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')
|
list_display = ('name','birthdate','address_town','mail')
|
||||||
readonly_fields = ['timestamp']
|
readonly_fields = ['timestamp']
|
||||||
list_filter = ['payed', 'rate_reduced', 'canceled', 'team', 'food', 'cake']
|
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 ...')
|
@admin.action(description='Send welcome mail to ...')
|
||||||
def welcome_mail(self, request, queryset):
|
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'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)
|
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 ...')
|
@admin.action(description='Send preparation mail to ...')
|
||||||
def preparation_mail(self, request, queryset):
|
def preparation_mail(self, request, queryset):
|
||||||
for reg in 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)
|
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')
|
@admin.action(description='Send preparation mail to all')
|
||||||
def preparation_mail(self):
|
def preparation_mail_all(self):
|
||||||
for reg in Registrant25.objects.all:
|
for reg in Registrant25.objects.all:
|
||||||
msg_plain = render_to_string('preparation_mail.txt', {"form": reg})
|
msg_plain = render_to_string('preparation_mail.txt', {"form": reg})
|
||||||
msg_html = render_to_string('preparation_mail.html', {"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)
|
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(Author)
|
||||||
admin.site.register(Category)
|
admin.site.register(Category)
|
||||||
admin.site.register(Post)
|
admin.site.register(Post)
|
||||||
|
Loading…
Reference in New Issue
Block a user