1export const COOKIE_NAME = 'adv-search-filters'; 2export const SHOW_SPINNER_ACTION = 'show-spinner'; 3export const VALID_TYPES = new Set(['news', 'agp_style_article', 'press_release']); 4export const DEFAULTS = { 5 types: [], 6 scope: 'network', 7 searchIn: 'all', 8 dateMode: 'duration', 9 duration: '', 10 dateFrom: '', 11 dateTo: '', 12 sortBy: 'relevance', 13}; 14 15export function readFilterCookie() { 16 const cookie = document.cookie.split(';').find(entry => entry.trim().startsWith(`${COOKIE_NAME}=`)); 17 if (!cookie) return null; 18 try { 19 return JSON.parse(decodeURIComponent(cookie.trim().slice(COOKIE_NAME.length + 1))); 20 } catch { 21 return null; 22 } 23} 24 25export function buildFilterParams(filters) { 26 const params = new URLSearchParams(); 27 const types = (filters.types && filters.types.length > 0) ? filters.types : [...VALID_TYPES]; 28 params.set('type', types.join(',')); 29 if (filters.dateMode === 'duration' && filters.duration) params.set('duration', filters.duration); 30 if (filters.dateMode === 'custom' && filters.dateFrom) params.set('date_from', filters.dateFrom); 31 if (filters.dateMode === 'custom' && filters.dateTo) params.set('date_to', filters.dateTo); 32 if (filters.scope && filters.scope !== DEFAULTS.scope) params.set('scope', filters.scope); 33 if (filters.searchIn) params.set('search_in', filters.searchIn); 34 if (filters.sortBy) params.set('sort', filters.sortBy); 35 return params; 36}
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.