Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame^] | 1 | "use strict" |
| 2 | |
| 3 | // The disable removes the 'datepicker' attribute and |
| 4 | // settings, so you have to re-initialize it each time |
| 5 | // the date range is selected and enabled |
| 6 | // DOM is used instead of jQuery to find the elements |
| 7 | // in all contexts |
| 8 | function date_enable (key, action) { |
| 9 | |
| 10 | var elemFrom=document.getElementById("date_from_"+key); |
| 11 | var elemTo=document.getElementById("date_to_"+key); |
| 12 | |
| 13 | if ('enable' == action) { |
| 14 | elemFrom.removeAttribute("disabled"); |
| 15 | elemTo.removeAttribute("disabled"); |
| 16 | |
| 17 | $(elemFrom).datepicker(); |
| 18 | $(elemTo).datepicker(); |
| 19 | |
| 20 | $(elemFrom).datepicker( "option", "dateFormat", "dd/mm/yy" ); |
| 21 | $(elemTo).datepicker( "option", "dateFormat", "dd/mm/yy" ); |
| 22 | |
| 23 | $(elemFrom).datepicker( "setDate", elemFrom.getAttribute( "data-setDate") ); |
| 24 | $(elemTo).datepicker( "setDate", elemTo.getAttribute( "data-setDate") ); |
| 25 | $(elemFrom).datepicker( "option", "minDate", elemFrom.getAttribute( "data-minDate")); |
| 26 | $(elemTo).datepicker( "option", "minDate", elemTo.getAttribute( "data-minDate")); |
| 27 | $(elemFrom).datepicker( "option", "maxDate", elemFrom.getAttribute( "data-maxDate")); |
| 28 | $(elemTo).datepicker( "option", "maxDate", elemTo.getAttribute( "data-maxDate")); |
| 29 | } else { |
| 30 | elemFrom.setAttribute("disabled","disabled"); |
| 31 | elemTo.setAttribute("disabled","disabled"); |
| 32 | } |
| 33 | } |
| 34 | |
| 35 | // Initialize the date picker elements with their default state variables, and |
| 36 | // register the radio button and form actions |
| 37 | function date_init (key, from_date, to_date, min_date, max_date, initial_enable) { |
| 38 | |
| 39 | var elemFrom=document.getElementById("date_from_"+key); |
| 40 | var elemTo=document.getElementById("date_to_"+key); |
| 41 | |
| 42 | // Were there any daterange filters instantiated? (e.g. no builds found) |
| 43 | if (null == elemFrom) { |
| 44 | return; |
| 45 | } |
| 46 | |
| 47 | // init the datepicker context data |
| 48 | elemFrom.setAttribute( "data-setDate", from_date ); |
| 49 | elemTo.setAttribute( "data-setDate", to_date ); |
| 50 | elemFrom.setAttribute( "data-minDate", min_date); |
| 51 | elemTo.setAttribute( "data-minDate", min_date); |
| 52 | elemFrom.setAttribute( "data-maxDate", max_date); |
| 53 | elemTo.setAttribute( "data-maxDate", max_date); |
| 54 | |
| 55 | // does the date set start enabled? |
| 56 | if (key == initial_enable) { |
| 57 | date_enable (key, "enable"); |
| 58 | } else { |
| 59 | date_enable (key, "disable"); |
| 60 | } |
| 61 | |
| 62 | // catch the radio button selects for enable/disable |
| 63 | $('input:radio[name="filter"]').change(function(){ |
| 64 | if ($(this).val() == 'daterange') { |
| 65 | key=$(this).attr("data-key"); |
| 66 | date_enable (key, 'enable'); |
| 67 | } else { |
| 68 | key=$(this).attr("data-key"); |
| 69 | date_enable (key, 'disable'); |
| 70 | } |
| 71 | }); |
| 72 | |
| 73 | // catch any new 'from' date as minDate for 'to' date |
| 74 | $("#date_from_"+key).change(function(){ |
| 75 | from_date = $("#date_from_"+key).val(); |
| 76 | $("#date_to_"+key).datepicker( "option", "minDate", from_date ); |
| 77 | }); |
| 78 | |
| 79 | // catch the submit (just once) |
| 80 | $("form").unbind('submit'); |
| 81 | $("form").submit(function(e) { |
| 82 | // format a composite daterange filter value so that it can be parsed and post-processed in the view |
| 83 | if (key !== undefined) { |
| 84 | if ($("#date_from_"+key).length) { |
| 85 | var filter=key+"__gte!"+key+"__lt:"+$("#date_from_"+key).val()+"!"+$("#date_to_"+key).val()+"_daterange"; |
| 86 | $("#last_date_from_"+key).val($("#date_from_"+key).val()); |
| 87 | $("#last_date_to_"+key).val($("#date_to_"+key).val()); |
| 88 | $("#filter_value_"+key).val(filter); |
| 89 | } |
| 90 | } |
| 91 | return true; |
| 92 | }); |
| 93 | |
| 94 | }; |