Feature #31300 » replace_jquery_mobile_with_flatpickr_demo.patch
| app/helpers/application_helper.rb | ||
|---|---|---|
| 1385 | 1385 | |
| 1386 | 1386 |
def calendar_for(field_id) |
| 1387 | 1387 |
include_calendar_headers_tags |
| 1388 |
javascript_tag("$(function() { $('##{field_id}').addClass('date').datepickerFallback(datepickerOptions); });")
|
|
| 1388 |
javascript_tag("$(function() { $('##{field_id}').addClass('date').datepicker(datepickerOptions); });")
|
|
| 1389 | 1389 |
end |
| 1390 | 1390 | |
| 1391 | 1391 |
def include_calendar_headers_tags |
| ... | ... | |
| 1395 | 1395 |
content_for :header_tags do |
| 1396 | 1396 |
start_of_week = Setting.start_of_week |
| 1397 | 1397 |
start_of_week = l(:general_first_day_of_week, :default => '1') if start_of_week.blank? |
| 1398 |
# Redmine uses 1..7 (monday..sunday) in settings and locales |
|
| 1399 |
# JQuery uses 0..6 (sunday..saturday), 7 needs to be changed to 0 |
|
| 1400 |
start_of_week = start_of_week.to_i % 7 |
|
| 1401 | 1398 |
tags << javascript_tag( |
| 1402 |
"var datepickerOptions={dateFormat: 'yy-mm-dd', firstDay: #{start_of_week}, " +
|
|
| 1403 |
"showOn: 'button', buttonImageOnly: true, buttonImage: '" + |
|
| 1404 |
path_to_image('/images/calendar.png') +
|
|
| 1405 |
"', showButtonPanel: true, showWeek: true, showOtherMonths: true, " + |
|
| 1406 |
"selectOtherMonths: true, changeMonth: true, changeYear: true, " + |
|
| 1407 |
"beforeShow: beforeShowDatePicker};") |
|
| 1399 |
"var datepickerOptions={dateFormat: 'Y-m-d', " +
|
|
| 1400 |
"'locale' : {'firstDayOfWeek' : #{start_of_week}}, " +
|
|
| 1401 |
"beforeShow: beforeShowDatePicker};") |
|
| 1408 | 1402 |
jquery_locale = l('jquery.locale', :default => current_language.to_s)
|
| 1409 | 1403 |
unless jquery_locale == 'en' |
| 1410 | 1404 |
tags << javascript_include_tag("i18n/datepicker-#{jquery_locale}.js")
|
| app/views/layouts/base.html.erb | ||
|---|---|---|
| 9 | 9 |
<meta name="keywords" content="issue,bug,tracker" /> |
| 10 | 10 |
<%= csrf_meta_tag %> |
| 11 | 11 |
<%= favicon %> |
| 12 |
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css"> |
|
| 12 | 13 |
<%= stylesheet_link_tag 'jquery/jquery-ui-1.11.0', 'application', 'responsive', :media => 'all' %> |
| 13 | 14 |
<%= stylesheet_link_tag 'rtl', :media => 'all' if l(:direction) == 'rtl' %> |
| 14 | 15 |
<%= javascript_heads %> |
| 16 |
<script src="https://cdn.jsdelivr.net/npm/flatpickr"></script> |
|
| 15 | 17 |
<%= heads_for_theme %> |
| 16 | 18 |
<%= call_hook :view_layouts_base_html_head %> |
| 17 | 19 |
<!-- page specific tags --> |
| public/javascripts/application.js | ||
|---|---|---|
| 213 | 213 |
' <span style="display:none;"><input type="date" name="v['+field+'][]" id="values_'+fieldId+'_2" size="10" class="value date_value" /></span>' + |
| 214 | 214 |
' <span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'" size="3" class="value" /> '+labelDayPlural+'</span>' |
| 215 | 215 |
); |
| 216 |
$('#values_'+fieldId+'_1').val(values[0]).datepickerFallback(datepickerOptions);
|
|
| 217 |
$('#values_'+fieldId+'_2').val(values[1]).datepickerFallback(datepickerOptions);
|
|
| 216 |
$('#values_'+fieldId+'_1').val(values[0]).datepicker(datepickerOptions);
|
|
| 217 |
$('#values_'+fieldId+'_2').val(values[1]).datepicker(datepickerOptions);
|
|
| 218 | 218 |
$('#values_'+fieldId).val(values[0]);
|
| 219 | 219 |
break; |
| 220 | 220 |
case "string": |
| ... | ... | |
| 678 | 678 |
} |
| 679 | 679 |
break; |
| 680 | 680 |
} |
| 681 |
$(input).datepickerFallback("option", "defaultDate", default_date);
|
|
| 681 |
$(input).datepicker("option", "defaultDate", default_date);
|
|
| 682 | 682 |
} |
| 683 | 683 | |
| 684 | 684 |
(function($){
|
| ... | ... | |
| 838 | 838 |
} |
| 839 | 839 | |
| 840 | 840 |
(function ( $ ) {
|
| 841 | ||
| 842 |
// detect if native date input is supported |
|
| 843 |
var nativeDateInputSupported = true; |
|
| 844 | ||
| 845 |
var input = document.createElement('input');
|
|
| 846 |
input.setAttribute('type','date');
|
|
| 847 |
if (input.type === 'text') {
|
|
| 848 |
nativeDateInputSupported = false; |
|
| 849 |
} |
|
| 850 | ||
| 851 |
var notADateValue = 'not-a-date'; |
|
| 852 |
input.setAttribute('value', notADateValue);
|
|
| 853 |
if (input.value === notADateValue) {
|
|
| 854 |
nativeDateInputSupported = false; |
|
| 855 |
} |
|
| 856 | ||
| 857 |
$.fn.datepickerFallback = function( options ) {
|
|
| 858 |
if (nativeDateInputSupported) {
|
|
| 859 |
return this; |
|
| 860 |
} else {
|
|
| 861 |
return this.datepicker( options ); |
|
| 862 |
} |
|
| 841 |
$.fn.datepicker = function( options ) {
|
|
| 842 |
return this.flatpickr( options ); |
|
| 863 | 843 |
}; |
| 864 | 844 |
}( jQuery )); |
| 865 | 845 | |
| public/stylesheets/application.css | ||
|---|---|---|
| 1504 | 1504 |
.ui-menu .ui-menu-item:hover {font-weight:normal; color:#555; background:#759FCF; color:#fff !important; border:1px solid #759FCF;}
|
| 1505 | 1505 |
.ui-menu .ui-menu-item.ui-state-focus {font-weight:normal; color:#555; border-color:#759FCF;}
|
| 1506 | 1506 | |
| 1507 |
/* Custom flatpickr styles */ |
|
| 1508 | ||
| 1509 |
/* Colors */ |
|
| 1510 |
.flatpickr-months .flatpickr-month, |
|
| 1511 |
.flatpickr-weekdays, span.flatpickr-weekday, |
|
| 1512 |
.flatpickr-day.selected, |
|
| 1513 |
.flatpickr-day.startRange, |
|
| 1514 |
.flatpickr-day.endRange, |
|
| 1515 |
.flatpickr-day.selected.inRange, |
|
| 1516 |
.flatpickr-day.startRange.inRange, |
|
| 1517 |
.flatpickr-day.endRange.inRange, |
|
| 1518 |
.flatpickr-day.selected:focus, |
|
| 1519 |
.flatpickr-day.startRange:focus, |
|
| 1520 |
.flatpickr-day.endRange:focus, |
|
| 1521 |
.flatpickr-day.selected:hover, |
|
| 1522 |
.flatpickr-day.startRange:hover, |
|
| 1523 |
.flatpickr-day.endRange:hover, |
|
| 1524 |
.flatpickr-day.selected.prevMonthDay, |
|
| 1525 |
.flatpickr-day.startRange.prevMonthDay, |
|
| 1526 |
.flatpickr-day.endRange.prevMonthDay, |
|
| 1527 |
.flatpickr-day.selected.nextMonthDay, |
|
| 1528 |
.flatpickr-day.startRange.nextMonthDay, |
|
| 1529 |
.flatpickr-day.endRange.nextMonthDay {
|
|
| 1530 |
background: #628DB6; |
|
| 1531 |
color: #fff; |
|
| 1532 |
} |
|
| 1533 |
.flatpickr-months .flatpickr-prev-month svg, |
|
| 1534 |
.flatpickr-months .flatpickr-next-month svg {
|
|
| 1535 |
fill: #fff; |
|
| 1536 |
} |
|
| 1537 | ||
| 1538 |
/* Font sizes */ |
|
| 1539 |
.flatpickr-day, span.flatpickr-weekday {
|
|
| 1540 |
font-size: 0.8em; |
|
| 1541 |
} |
|
| 1542 |
.flatpickr-current-month {
|
|
| 1543 |
font-size: 1em; |
|
| 1544 |
} |
|
| 1545 | ||
| 1546 |
/* Calendar size */ |
|
| 1547 |
/*pixel square for each day - default is 39 */ |
|
| 1548 |
.flatpickr-calendar {
|
|
| 1549 |
width: 224px; |
|
| 1550 |
} |
|
| 1551 |
.dayContainer {
|
|
| 1552 |
width: 224px; |
|
| 1553 |
min-width: 224px; |
|
| 1554 |
max-width: 224px; |
|
| 1555 |
} |
|
| 1556 |
.flatpickr-days {
|
|
| 1557 |
width: 224px; |
|
| 1558 |
} |
|
| 1559 |
.flatpickr-day {
|
|
| 1560 |
max-width: 32px; |
|
| 1561 |
height: 32px; |
|
| 1562 |
line-height: 32px; |
|
| 1563 |
} |
|
| 1564 | ||
| 1507 | 1565 |
/************* Rouge styles *************/ |
| 1508 | 1566 |
/* generated by: pygmentize -f html -a .syntaxhl -S colorful */ |
| 1509 | 1567 |
.syntaxhl .hll { background-color: #ffffcc }
|