diff --git a/src/pretix/static/pretixpresale/js/widget/widget.js b/src/pretix/static/pretixpresale/js/widget/widget.js
index 54d766c84..4890fee29 100644
--- a/src/pretix/static/pretixpresale/js/widget/widget.js
+++ b/src/pretix/static/pretixpresale/js/widget/widget.js
@@ -944,9 +944,67 @@ Vue.component('pretix-widget-event-calendar-event', {
}
});
+Vue.component('pretix-widget-event-week-cell', {
+ template: ('
'
+ + '
'
+ + '{{ dayhead }}'
+ + '
'
+ + '
'
+ + '
'),
+ props: {
+ day: Object,
+ },
+ methods: {
+ selectDay: function () {
+ if (!this.day || !this.day.events.length || !this.$parent.$parent.$parent.mobile) {
+ return;
+ }
+ if (this.day.events.length === 1) {
+ var ev = this.day.events[0];
+ this.$root.parent_stack.push(this.$root.target_url);
+ this.$root.target_url = ev.event_url;
+ this.$root.error = null;
+ this.$root.subevent = ev.subevent;
+ this.$root.loading++;
+ this.$root.reload();
+ } else {
+ this.$root.events = this.day.events;
+ this.$root.view = "events";
+ }
+ }
+ },
+ computed: {
+ dayhead: function () {
+ if (!this.day) {
+ return;
+ }
+ return this.day.day_formatted;
+ },
+ classObject: function () {
+ var o = {};
+ if (this.day && this.day.events.length > 0) {
+ o['pretix-widget-has-events'] = true;
+ var best = 'red';
+ for (var i = 0; i < this.day.events.length; i++) {
+ var ev = this.day.events[i];
+ if (ev.availability.color === 'green') {
+ best = 'green';
+ } else if (ev.availability.color === 'orange' && best !== 'green') {
+ best = 'orange'
+ }
+ }
+ o['pretix-widget-day-availability-' + best] = true;
+ }
+ return o
+ }
+ }
+});
+
Vue.component('pretix-widget-event-calendar-cell', {
template: (''
- + ' | '),
props: {
day: Object,
- show_day: Boolean
},
methods: {
selectDay: function () {
@@ -1005,7 +1062,7 @@ Vue.component('pretix-widget-event-calendar-cell', {
Vue.component('pretix-widget-event-calendar-row', {
template: (''
- + ''
+ + ''
+ '
'),
props: {
week: Array
@@ -1098,19 +1155,13 @@ Vue.component('pretix-widget-event-week-calendar', {
+ strings['next_week']
+ ' »'
+ ''
- + ''
+ + ''
+ + ''
+ ''),
computed: {
weekname: function () {
diff --git a/src/pretix/static/pretixpresale/scss/widget.scss b/src/pretix/static/pretixpresale/scss/widget.scss
index 6436bcd36..6e54b6733 100644
--- a/src/pretix/static/pretixpresale/scss/widget.scss
+++ b/src/pretix/static/pretixpresale/scss/widget.scss
@@ -452,6 +452,24 @@
.pretix-widget-event-calendar {
padding-top: 10px;
+ word-break: break-word;
+
+ .pretix-widget-event-week-table {
+ display: flex;
+ flex-direction: row;
+
+ .pretix-widget-event-week-col {
+ flex: 1;
+ margin: 0 5px;
+
+ &:first-child {
+ margin-left: 0;
+ }
+ &:last-child {
+ margin-right: 0;
+ }
+ }
+ }
.pretix-widget-event-calendar-head {
display: flex;
@@ -487,6 +505,7 @@
.pretix-widget-event-calendar-table {
width: 100%;
+
th, td {
width: 14.285714285714286%;
vertical-align: top;
@@ -666,6 +685,15 @@
}
.pretix-widget.pretix-widget-mobile {
+ .pretix-widget-event-week-table {
+ display: block;
+
+ .pretix-widget-event-week-col {
+ flex: 1;
+ margin: 10px 0;
+ }
+ }
+
.pretix-widget-item-info-col {
width: 100%;
float: none;
@@ -707,6 +735,11 @@
.pretix-widget-event-calendar-events {
display: none;
}
+ .pretix-widget-event-week-table {
+ .pretix-widget-event-calendar-events {
+ display: block;
+ }
+ }
td.pretix-widget-has-events {
background: $brand-primary;
color: white;