Projet

Général

Profil

0001-manager-add-a-day-picker-popdown-to-agenda-day-view-.patch

Frédéric Péters, 12 février 2018 14:58

Télécharger (4,8 ko)

Voir les différences:

Subject: [PATCH 1/3] manager: add a day picker popdown to agenda day view
 (#21334)

 chrono/manager/static/css/style.scss               | 47 +++++++++++++++++++++-
 chrono/manager/static/js/chrono.manager.js         |  7 ++++
 .../templates/chrono/manager_agenda_day_view.html  |  8 ++++
 chrono/manager/views.py                            | 11 +++++
 4 files changed, 71 insertions(+), 2 deletions(-)
chrono/manager/static/css/style.scss
78 78
	padding: 0 1ex;
79 79
}
80 80

  
81
.dayview h2 span {
81
.dayview h2 > span {
82 82
	display: inline-block;
83
	min-width: 22ex;
83
	min-width: 24ex;
84 84
}
85 85

  
86 86
.dayview table {
......
155 155
span.start-time {
156 156
	font-size: 80%;
157 157
}
158

  
159
.day-title {
160
	cursor: pointer;
161
	&::after {
162
		content: "\f073"; /* calendar */
163
		font-family: FontAwesome;
164
		padding-left: 1ex;
165
		padding-right: 0ex;
166
		opacity: 0.3;
167
		font-size: 80%;
168
		transition: opacity 200ms linear;
169
	}
170
	&:hover::after {
171
		opacity: 0.8;
172
	}
173
}
174

  
175
.day-picker {
176
	button, select {
177
		font-size: 1rem;
178
	}
179
	&::before {
180
		position: absolute;
181
		content: "";
182
		display: block;
183
		width: 1ex;
184
		height: 1ex;
185
		border: 1px solid #d0d0d0;
186
		border-width: 1px 0 0 1px;
187
		top: -0.6ex;
188
		left: 5rem;
189
		background: #FAFAFA;
190
		transform: rotate(45deg);
191
	}
192
	position: absolute;
193
	background: #FAFAFA;
194
	border: 1px solid #d0d0d0;
195
	box-shadow: 0px 1px 1px 2px rgba(0, 0, 0, 0.04);
196
	padding: 1ex 4ex;
197
	left: 0;
198
	top: 3ex;
199
	z-index: 100;
200
}
chrono/manager/static/js/chrono.manager.js
4 4
    var booked = $(this).data('booked');
5 5
    $(this).find('.occupation-bar').css('max-width', 100 * booked / total + '%');
6 6
  });
7
  $('.day-title').on('click', function() {
8
    $(this).parent().find('.day-picker').toggle();
9
  });
10
  $('.day-picker button').on('click', function() {
11
    window.location = '../../../' + $('[name=year]').val() + '/' + $('[name=month]').val() + '/' + $('[name=day]').val() + '/';
12
    return false;
13
  });
7 14
});
chrono/manager/templates/chrono/manager_agenda_day_view.html
12 12
<h2>
13 13
  <a href="{{ view.get_previous_day_url }}">←</a>
14 14
  <span class="day-title">{{ view.date|date:"l j F Y" }}</span>
15
  {% with selected_day=view.date|date:"j" selected_month=view.date|date:"n" selected_year=view.date|date:"Y" %}
16
    <div class="day-picker" style="display: none">
17
    <select name="day">{% for day in view.get_days %}<option value="{{ day }}" {% if selected_day == day %}selected{% endif %}>{{day}}</option>{% endfor %}</select>
18
    <select name="month">{% for month, month_label in view.get_months %}<option value="{{ month }}" {% if selected_month == month %}selected{% endif %}>{{ month_label }}</option>{% endfor %}</select>
19
    <select name="year">{% for year in view.get_years %}<option value="{{ year }}" {% if selected_year == year %}selected{% endif %}>{{year}}</option>{% endfor %}</select>
20
    <button>{% trans 'Set Date' %}</button>
21
    </div>
22
  {% endwith %}
15 23
  <a href="{{ view.get_next_day_url }}">→</a>
16 24
</h2>
17 25
{% if user_can_manage %}
chrono/manager/views.py
23 23
from django.db.models import Q
24 24
from django.http import HttpResponse, Http404, HttpResponseRedirect
25 25
from django.shortcuts import get_object_or_404
26
from django.utils.dates import MONTHS
26 27
from django.utils.timezone import localtime, now, make_aware
27 28
from django.utils.translation import ugettext_lazy as _
28 29
from django.utils.translation import ungettext
......
250 251
            current_date += interval
251 252
            first = False
252 253

  
254
    def get_days(self):
255
        return [str(x) for x in range(1, 32)]
256

  
257
    def get_months(self):
258
        return [(str(x), MONTHS[x]) for x in range(1, 13)]
259

  
260
    def get_years(self):
261
        year = now().year
262
        return [str(x) for x in range(year, year+5)]
263

  
253 264
agenda_day_view = AgendaDayView.as_view()
254 265

  
255 266

  
256
-