1(function ($) { 2 "use strict"; 3 $(document).ready(function () { 4 setTimeout(function () { 5 $(".elementor").not(".elementor-location-popup").each(function (e) { 6 $(".elementor-field-restrict_date", $(this)).each(function (index) { 7 elementor_field_restrict_date($(this)); 8 }); 9 }) 10 }, 200); 11 $(document).on('elementor/popup/show', () => { 12 setTimeout(function () { 13 $(".elementor-field-restrict_date").each(function (index) { 14 elementor_field_restrict_date($(this)); 15 }); 16 }, 200); 17 }); 18 $("input").on("done_load_repeater", function (e) { 19 $(".elementor-field-restrict_date").each(function (index) { 20 elementor_field_restrict_date($(this)); 21 }); 22 }) 23 function cover_format(date_format = "") { 24 date_format = date_format.replaceAll('/', '-'); 25 return date_format.replaceAll('y', 'yy').toUpperCase(); 26 } 27 function getDatesBetween(startDate, endDate) { 28 const dates = []; 29 let current = new Date(startDate); 30 const last = new Date(endDate); 31 while (current <= last) { 32 dates.push(current.toISOString().split('T')[0]); // format YYYY-MM-DD 33 current.setDate(current.getDate() + 1); 34 } 35 return dates; 36 } 37 function elementor_field_restrict_date(field) { 38 var form = field.closest("form"); 39 var offset = field.offset(); 40 var min = field.data("min"); 41 var min_plus = field.data("max_plus_min"); 42 var type_inline = field.data("type_inline"); 43 var min_number = field.data("max_number_min"); 44 var min_type = field.data("max_type_min"); 45 var min_pick = field.data("min_pick"); 46 var max = field.data("max"); 47 var max_plus = field.data("max_plus"); 48 var max_number = field.data("max_number"); 49 var max_type = field.data("max_type"); 50 var max_pick = field.data("max_pick"); 51 var weekdays_data = field.data("weekdays"); 52 var special_data = field.data("special"); 53 var format_data = field.data("format"); 54 var sync_min = field.data("sync_min"); 55 var sync_max = field.data("sync_max"); 56 var sync_min_number = field.data("sync_min_number"); 57 var sync_max_number = field.data("sync_max_number"); 58 var current_date = new Date(); 59 var minDate = ""; 60 var maxDate = ""; 61 var format = "yy-mm-dd"; 62 var weekdays = [0, 1, 2, 3, 4, 5, 6]; 63 var special = []; 64 if (min !== undefined && min != "") { 65 if (min == "current_date") { 66 if (min_number > 0) { 67 switch (min_type) { 68 case 'd': 69 if (min_plus == "+") { 70 minDate = new Date(current_date.getFullYear(), current_date.getMonth(), current_date.getDate() + parseInt(min_number)); 71 } else { 72 minDate = new Date(current_date.getFullYear(), current_date.getMonth(), current_date.getDate() - parseInt(min_number)); 73 } 74 break; 75 case 'm': 76 if (min_plus == "+") { 77 minDate = new Date(current_date.getFullYear(), current_date.getMonth() + parseInt(min_number), current_date.getDate()); 78 } else { 79 minDate = new Date(current_date.getFullYear(), current_date.getMonth() - parseInt(min_number), current_date.getDate()); 80 } 81 break; 82 case 'y': 83 if (min_plus == "+") { 84 minDate = new Date(current_date.getFullYear() + parseInt(min_number), current_date.getMonth(), current_date.getDate()); 85 } else { 86 minDate = new Date(current_date.getFullYear() - parseInt(min_number), current_date.getMonth(), current_date.getDate()); 87 } 88 break; 89 } 90 } else { 91 minDate = 0; 92 } 93 } else if (min == "special" && min_pick !== undefined && min_pick != "") { 94 minDate = new Date(min_pick); 95 } 96 } 97 if (max !== undefined && max != "") { 98 if (max == "current_date") { 99 if (max_number > 0) { 100 switch (max_type) { 101 case 'd': 102 if (max_plus == "+") { 103 maxDate = new Date(current_date.getFullYear(), current_date.getMonth(), current_date.getDate() + parseInt(max_number)); 104 } else { 105 maxDate = new Date(current_date.getFullYear(), current_date.getMonth(), current_date.getDate() - parseInt(max_number)); 106 } 107 break; 108 case 'm': 109 if (max_plus == "+") { 110 maxDate = new Date(current_date.getFullYear(), current_date.getMonth() + parseInt(max_number), current_date.getDate()); 111 } else { 112 maxDate = new Date(current_date.getFullYear(), current_date.getMonth() - parseInt(max_number), current_date.getDate()); 113 } 114 break; 115 case 'y': 116 if (max_plus == "+") { 117 maxDate = new Date(current_date.getFullYear() + parseInt(max_number), current_date.getMonth(), current_date.getDate()); 118 } else { 119 maxDate = new Date(current_date.getFullYear() - parseInt(max_number), current_date.getMonth(), current_date.getDate()); 120 } 121 break; 122 } 123 } else { 124 maxDate = 0; 125 } 126 } else if (max == "special" && max_pick !== undefined && max_pick != "") { 127 maxDate = new Date(max_pick); 128 } 129 } 130 if (weekdays_data !== undefined && weekdays_data != "allday") { 131 weekdays = []; 132 weekdays_data = weekdays_data.toString(); 133 weekdays = weekdays_data.split('|'); 134 weekdays = weekdays.map(Number); 135 } 136 if (special_data !== undefined && special_data !== "") { 137 special_data = special_data.toString().trim(); 138 var parts = special_data 139 .split('|') 140 .map(function (s) { 141 return s.trim(); 142 }) 143 .filter(Boolean); 144 special = [];
145 parts.forEach(function (item) { 146 // â kiá»m tra từng phần tá» có "to" hay không 147 if (item.includes("to")) { 148 var range_dates = item.split("to"); 149 var start = range_dates[0].trim(); 150 var end = range_dates[1].trim(); 151 var dates = getDatesBetween(start, end); 152 if (Array.isArray(dates)) { 153 special = special.concat(dates); 154 } 155 } else { 156 // ngà y ÄÆ¡n 157 special.push(item); 158 } 159 }); 160 // loại trùng + rá»ng 161 special = [...new Set(special)].filter(Boolean); 162 } 163 if (format_data !== undefined && format_data != "") { 164 format = format_data; 165 } 166 if (type_inline === "inline") { 167 field = field.closest('div'); 168 } 169 field.removeClass('hasDatepicker'); 170 field.datepicker({ 171 container: '.dialog-widget', 172 minDate: minDate, 173 maxDate: maxDate, 174 dateFormat: format, 175 firstDay: restrict_dates_for_elementor_forms.start_of_week, 176 changeMonth: true, 177 changeYear: true, 178 yearRange: "-100:+100", 179 beforeShow: function (input, inst) { 180 var $this = $(this); 181 var cal = inst.dpDiv; 182 var top = $this.offset().top + $this.outerHeight(); 183 var left = $this.offset().left; 184 setTimeout(function () { 185 cal.css({ 186 'top': top, 187 'left': left 188 }); 189 }, 10); 190 }, 191 onSelect: function (dateStr) { 192 var data_fm = cover_format(format); 193 var dateStr_ok = dateStr; 194 dateStr = moment(dateStr, data_fm).format('YYYY-MM-DD'); 195 dateStr = new Date(dateStr); 196 var dateStr1 = new Date(dateStr); 197 var dateStr_max = new Date(dateStr); 198 var dateStr1_max = new Date(dateStr); 199 if (sync_min !== undefined && sync_min != "" && dateStr !== undefined) { 200 $("#form-field-" + sync_min, form).datepicker('option', 'maxDate', dateStr); 201 } 202 if (sync_max !== undefined && sync_max != "" && dateStr !== undefined) { 203 if (sync_min_number != "" && sync_min_number !== undefined) { 204 dateStr = dateStr.setDate(dateStr.getDate() + parseInt(sync_min_number)); 205 dateStr = new Date(dateStr); 206 } 207 if (sync_max_number != "" && sync_max_number !== undefined) { 208 dateStr1_max.setDate(dateStr1_max.getDate() + parseInt(sync_max_number)); 209 $("#form-field-" + sync_max, form).datepicker('option', 'maxDate', dateStr1_max); 210 } 211 $("#form-field-" + sync_max, form).datepicker('option', 'minDate', dateStr); 212 } 213 if (type_inline === "inline") { 214 $(this).find("input").val(dateStr_ok).change(); 215 }else{ 216 $(this).change(); 217 } 218 219 }, 220 beforeShowDay: function (date) { 221 var day = date.getDay(); 222 if (jQuery.inArray(day, weekdays) > -1) { 223 //check special 224 if (special.length > 0) { 225 var sdate = moment(date).format('YYYY-MM-DD'); 226 if ($.inArray(sdate, special) !== -1) { 227 return [false]; 228 } else { 229 return [true]; 230 } 231 } else { 232 return [true]; 233 } 234 } else { 235 //check special 236 if (special.length > 0) { 237 var sdate = moment(date).format('YYYY-MM-DD'); 238 if ($.inArray(sdate, special) !== -1) { 239 return [true]; 240 } else { 241 return [false]; 242 } 243 } else { 244 return [false]; 245 } 246 } 247 } 248 }); 249 } 250 }) 251})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.