Projet

Général

Profil

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

Frédéric Péters, 04 février 2018 20:56

Télécharger (4,6 ko)

Voir les différences:

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

 chrono/manager/static/css/style.scss               | 29 +++++++++++++++++++++-
 chrono/manager/static/js/chrono.manager.js         |  7 ++++++
 .../templates/chrono/manager_agenda_day_view.html  | 11 +++++++-
 chrono/manager/views.py                            | 11 ++++++++
 4 files changed, 56 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 83
	min-width: 22ex;
84 84
}
......
155 155
span.start-time {
156 156
	font-size: 80%;
157 157
}
158

  
159
.day-title {
160
	cursor: pointer;
161
}
162

  
163
.day-title .day-picker {
164
	&::before {
165
		position: absolute;
166
		content: "";
167
		display: block;
168
		width: 1ex;
169
		height: 1ex;
170
		border: 1px solid #d0d0d0;
171
		border-width: 1px 0 0 1px;
172
		top: -0.6ex;
173
		background: #FAFAFA;
174
		transform: rotate(45deg);
175
	}
176
	position: absolute;
177
	background: #FAFAFA;
178
	border: 1px solid #d0d0d0;
179
	box-shadow: 0px 1px 1px 2px rgba(0, 0, 0, 0.04);
180
	padding: 1ex 4ex;
181
	left: 0;
182
	top: 3ex;
183
	z-index: 100;
184
}
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 > span').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
11 11
{% block appbar %}
12 12
<h2>
13 13
  <a href="{{ view.get_previous_day_url }}">←</a>
14
  <span class="day-title">{{ view.date|date:"l j F Y" }}</span>
14
  <span class="day-title"><span>{{ 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 %}
23
  </span>
15 24
  <a href="{{ view.get_next_day_url }}">→</a>
16 25
</h2>
17 26
{% 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
-