1// Copyright (c) 2021-2025 GrayBits LLC 2 3import DateSelect from 'gray_matter/modules/initializable/date_select' 4import Color from 'gray_matter/utility/color' 5import {params} from 'gray_matter/interfaces/items' 6 7const applicators = { 8 date: dateTime, 9 datetime: dateTime, 10 color: color, 11 palette_color: paletteColor, 12 location: location, 13 time_of_day: timeOfDay, 14 boolean: boolean, 15 duration: duration, 16 list: list 17} 18 19export default function applySelection(column){ 20 if (applicators[column.dataset.type]){ 21 applicators[column.dataset.type](column); 22 } else { 23 generic(column); 24 } 25} 26 27function filters(){ 28 return params.filters; 29} 30 31function dateTime(column){ 32 let from = DateSelect.dateTimeArrayFromFieldWrapper(column.querySelector('.field_wrapper[data-attribute="from"]')); 33 let to = DateSelect.dateTimeArrayFromFieldWrapper(column.querySelector('.field_wrapper[data-attribute="to"]')); 34 let valid_from = DateSelect.validDateArray(from); 35 let valid_to = DateSelect.validDateArray(to); 36 37 if (!(valid_from || valid_to)){ 38 delete filters()[column.dataset.attribute]; 39 } else { 40 filters()[column.dataset.attribute] = {}; 41 if (valid_from){ 42 filters()[column.dataset.attribute].from = from; 43 } 44 if (valid_to){ 45 filters()[column.dataset.attribute].to = to; 46 } 47 } 48} 49 50function timeOfDay(column){ 51 let ampm = column.querySelector('.column_filter select[name="time_of_day_ampm"]'); 52 filters()[column.dataset.attribute] = [ 53 column.querySelector('.column_filter select[name="time_of_day_hour"]').value, 54 column.querySelector('.column_filter select[name="time_of_day_minute"]').value 55 ] 56 if (ampm){ 57 filters()[column.dataset.attribute].push(ampm.value); 58 } 59} 60 61function color(column){ 62 let h = column.querySelector('.color_value_h').value; 63 let s = column.querySelector('.color_value_s').value; 64 let l = column.querySelector('.color_value_l').value; 65 if (h.length > 0 && s.length > 0 && l.length > 0){ 66 filters()[column.dataset.attribute] = [h, s, l]; 67 column.classList.add('with_filter'); 68 } 69} 70 71function paletteColor(column){ 72 filters()[column.dataset.attribute] = encodeURIComponent(column.querySelector('.selected_color').value); 73 column.classList.add('with_filter'); 74} 75 76function duration(column){ 77 let h = column.querySelector('select[name="duration_h"]').value * 1; 78 let m = column.querySelector('select[name="duration_m"]').value * 1; 79 let s = column.querySelector('select[name="duration_s"]').value * 1; 80 filters()[column.dataset.attribute] = s + m * 60 + h * 3600; 81 column.classList.add('with_filter'); 82} 83 84function list(column){ 85 let values = []; 86 column.querySelectorAll('.choice input[type="checkbox"]:checked').forEach((choice) => { 87 values.push(choice.value); 88 }); 89 filters()[column.dataset.attribute] = values; 90} 91 92function location(column){ 93 let lat = column.querySelector('.column_filter .lat').value; 94 let lng = column.querySelector('.column_filter .lng').value; 95 let r = column.querySelector('input[name="within_radius"]').value; 96 if (lat.length > 0 && lng.length > 0 && r.length > 0){ 97 filters()[column.dataset.attribute] = [lat, lng, r]; 98 column.classList.add('with_filter'); 99 } 100} 101 102function boolean(column){ 103 filters()[column.dataset.attribute] = column.querySelector('.column_filter input[type="checkbox"]').checked + ''; 104 column.classList.add('with_filter'); 105} 106 107function generic(column){ 108 let value = column.querySelector('.column_filter input[type="text"], .column_filter select').value.trim(); 109 if (value.length == 0){ 110 delete filters()[column.dataset.attribute]; 111 column.classList.remove('with_filter'); 112 } else { 113 filters()[column.dataset.attribute] = value; 114 column.classList.add('with_filter'); 115 } 116};
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.