1const initCalendar = (elem) => new AirDatepicker(elem, { 2 range: true, // ÑазÑеÑиÑÑ Ð²ÑделÑÑÑ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ 3 multipleDatesSeparator: ' - ', // ÑазделиÑÐµÐ»Ñ Ð´Ð°Ñ Ð² диапазоне 4 keyboardNav: true, // навигаÑÐ¸Ñ Ñ ÐºÐ»Ð°Ð²Ð¸ÑаÑÑÑÑ: ÑазÑеÑиÑÑ 5 onSelect({ date, formattedDate, datepicker }) { // на onSelect нÑжно ÑÑÑиггеÑиÑÑ input ÑобÑÑие пÑи вÑделении даÑÑ 6 const triggerEvent = (el, eventType, detail) => 7 el.dispatchEvent(new Event(eventType)); // Ñоздаем и оÑпÑавлÑем ÑобÑÑие 8 triggerEvent(datepicker.$el, 'input'); // ÑÑиггеÑим ÑозданнÑй ÑÐ²ÐµÐ½Ñ Ð½Ð° календаÑе 9 }, 10 11 //inline: true, 12 13 14}); 15 16 17const airDatepickers = document.querySelectorAll('.news-collection__air-datepicker'); 18 19if( airDatepickers.length > 0 ){ 20 airDatepickers.forEach((airDatepicker, index) => { 21 airDatepicker.classList.add(`air-datepicker${index+1}`); 22 initCalendar(`.air-datepicker${index+1}`); 23 }); 24} 25 26 27// const calendar = initCalendar('.news-calendar'); 28// const calendar2 = initCalendar('.news-calendar2'); 29 30let dates = [] // Ñоздаем пеÑеменнÑÑ Ð´Ð»Ñ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¸Ð½ÑоÑмаÑии о даÑÐ°Ñ 31const date_min = document.querySelector('input[name="field_publ_date_value[min]"]') 32const date_max = document.querySelector('input[name="field_publ_date_value[max]"]') 33 34 35 36 37/** 38 * filterDates ÑÑÐ°Ð²Ð½Ð¸Ð²Ð°ÐµÑ Ð´Ð°ÑÑ Ð¿ÑбликаÑии Ñ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼, заданнÑм в ÑÑловии 39 * ÐозвÑаÑÐ°ÐµÑ Ð¾ÑÑилÑÑÑованнÑй маÑÑив 40 * @param {publ_date} - ÐаÑа пÑбликаÑии 41 * @param {dates} - Ðиапазон из ÑÑÐ»Ð¾Ð²Ð¸Ñ 42 */ 43function filterDates(publ_date, dates) { 44 const createDate = (string) => new Date(+string.split('.')[2], +string.split('.')[1] - 1, +string.split('.')[0]) 45 const date = createDate(publ_date) 46 if (dates.includes('-')) { // еÑли диапазолн Ð´Ð°Ñ 47 let date_min = createDate(dates.split(' ')[0]), date_max = createDate(dates.split(' ')[2]) 48 return date > date_min && date < date_max 49 } 50 else { // ÑÑли одна даÑа 51 return publ_date == dates 52 } 53} 54 55/** 56 * filterSelectCategory ÑÑÐ°Ð²Ð½Ð¸Ð²Ð°ÐµÑ ÑекÑÑовÑе Ð¿Ð¾Ð»Ñ Ñ ÑÑловием 57 * ÐозвÑаÑÐ°ÐµÑ Ð¾ÑÑилÑÑÑованнÑй маÑÑив 58 * @param {targetHeading} - ТекÑÑ Ð½Ð¾Ð²Ð¾ÑÑи 59 * @param {targetKeywords} - Ðаголовок 60 * @param {word} - ÑÑÑока Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка 61 */ 62function filterSelectCategory(targetHeading, targetKeywords, word) { 63 return targetHeading.search(word) != -1 || targetKeywords.search(word) != -1 64} 65 66 67/** 68 * filterTextFields ÑÑÐ°Ð²Ð½Ð¸Ð²Ð°ÐµÑ ÑекÑÑовÑе Ð¿Ð¾Ð»Ñ Ñ ÑÑловием 69 * ÐозвÑаÑÐ°ÐµÑ Ð¾ÑÑилÑÑÑованнÑй маÑÑив 70 * @param {targetText} - ТекÑÑ Ð½Ð¾Ð²Ð¾ÑÑи 71 * @param {targetTitle} - Ðаголовок 72 * @param {string} - ÑÑÑока Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка 73 */ 74function filterTextFields(targetText, targetTitle, string) { 75 return targetTitle.search(string) != -1 || targetText.search(string) != -1 76} 77 78 79/** 80 * filterBy пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð¿Ð¾Ð¸Ñка и маÑÑив, по коÑоÑÐ¾Ð¼Ñ Ð½Ñжно пÑоизвеÑÑи ÑилÑÑÑаÑÐ¸Ñ 81 * ÐозвÑаÑÐ°ÐµÑ Ð¾ÑÑилÑÑÑованнÑй маÑÑив 82 * @param {data} - ÐÑигиналÑнÑй маÑÑив 83 * @param {cond} - УÑÐ»Ð¾Ð²Ð¸Ñ Ð¿Ð¾Ð¸Ñка в виде обÑекÑа 84 */ 85function filterBy(data, cond) { 86 87 if (cond.dates == '' && cond.string == '' && cond.category == '') { 88 return data 89 } 90 return data.filter((row) => filterDates(row.field_publ_date.replace(/ |\r\n|\n|\r/gm, ''), cond.dates) 91 && filterTextFields(row.field_news_paragraphs.replace(/ |\r\n|\n|\t|\r/gm, '').toLowerCase(), 92 row.title.replace(/ |\r\n|\n|\r/gm, '').toLowerCase(), cond.string) && filterTextFields(row.field_heading, row.field_news_keywords, cond.category)); 93} 94 95 96/** 97 * pullArrayMedia ÑÐ¾Ð·Ð´Ð°ÐµÑ nodeobjecs Ð´Ð»Ñ Ð¼Ð°ÑÑива медиа 98 * ÐозвÑаÑÐ°ÐµÑ node object'Ñ Ð² маÑÑиве 99 * @param {sliderItems} - ÐаÑÑив ÑÑÑлок на медиа 100 */ 101function pullArrayMedia(mediaArray) { 102 let sliderItems = [] 103 for (let i = 0; i <= mediaArray.length - 1; i++) { 104 let img = document.createElement("img"), slide = document.createElement("div"); 105 img.setAttribute('class', 'news-header__image') 106 img.setAttribute('src', 'http://10.0.2.17:8882/sites/default/files/styles/large/public/node/news/header/' + mediaArray[i]) 107 slide.setAttribute('class', 'swiper-slide') 108 slide.appendChild(img) 109 sliderItems.append(slide) 110 } 111 return sliderItems 112} 113 114/** 115 * createMarkup ÑÐ¾Ð·Ð´Ð°ÐµÑ ÑазмеÑÐºÑ Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾ÑÑи 116 * ÐозвÑаÑÐ°ÐµÑ node object 117 * @param {item} - ÐÑÑилÑÑÑованнÑй маÑÑив новоÑÑей 118 */ 119function createMarkup(item) { 120 const gridItem = document.createElement("div"), images = document.createElement("div"), 121 slider = document.createElement("div"), announce = document.createElement("div"), 122 announce_top = document.createElement("div"), date = document.createElement("div"), 123 title = document.createElement("div"), text = document.createElement("div"), 124 sliderWrapper = document.createElement("div"), img = document.createElement("img"), 125 tags = document.createElement("div"); 126 gridItem.setAttribute("class", 'news-feed__grid-item') 127 images.setAttribute("class", 'news-feed__image') 128 announce.setAttribute("class", 'news-feed__announce') 129 announce_top.setAttribute("class", 'news-feed__announce-top') 130 slider.setAttribute('class', 'news-header__slider') 131 slider.classList.add('swiper') 132 img.setAttribute('class', 'news-header__image') 133 sliderWrapper.setAttribute('class', 'swiper-wrapper') 134 date.setAttribute("class", 'news-feed__date') 135 title.setAttribute("class", 'news-feed__title') 136 text.setAttribute("class", 'news-feed__announce-text') 137 tags.setAttribute('class', 'news-feed__tags') 138 date.textContent = item.field_publ_date ? item.field_publ_date + ' / ' + item.field_publ_date : '' 139 title.textContent = item.title ? item.title : '' 140 text.textContent = item.field_news_paragraphs.substring(0, 700) ? item.field_news_paragraphs.substring(0, 700) : '' 141 tags.textContent = item.field_heading 142 let sliderItems = [] 143 if (item.field_news_header_slider.split(',').length > 1) { 144 sliderItems = pullArrayMedia(item.field_news_header_slider.split(',')) 145 } 146 else { 147 img.setAttribute('src', 'http://10.0.2.17:8882/sites/default/files/styles/large/public/node/news/header/' + item.field_news_header_slider) 148 sliderItems = img 149 } 150 sliderWrapper.append(sliderItems) 151 announce_top.append(date, tags) 152 announce.append(announce_top, title, text) 153 gridItem.appendChild(images) 154 gridItem.appendChild(announce) 155 slider.appendChild(sliderWrapper) 156 images.appendChild(slider) 157 return gridItem 158} 159
160/** 161 * showItems пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð³Ð¾ÑовÑй маÑÑив и вÑÐ²Ð¾Ð´Ð¸Ñ ÐµÐ³Ð¾ на ÑÑÑаниÑе 162 * @param {array} - ÐÑÑилÑÑÑованнÑй маÑÑив новоÑÑей 163 */ 164function showItems(array) { 165 const newsGrid = document.querySelector('.news-feed__grid') 166 if (newsGrid) { 167 newsGrid.classList.add('collapsed') 168 while (newsGrid.firstChild) { // в Ñикле ÑдалÑем вÑе новоÑÑи из ÑеÑки 169 newsGrid.removeChild(newsGrid.firstChild); 170 } 171 172 for (let i = 0; i < array.length; i++) { 173 newsGrid.append(createMarkup(array[i])) 174 } 175 176 newsGrid.classList.remove('collapsed') 177 } 178} 179 180 181 182 183function getSelected(title, dates, category) { 184 const response = fetch("../json/feed.json") // fetch json 185 .then((response) => response.json()) 186 .then((array) => { 187 let cond = { // маÑÑив ÑÑловий поиÑка 188 string: title.toLowerCase(), 189 dates: dates, 190 category: category, 191 } 192 193 let filtered = filterBy([...new Set(array)], cond) 194 console.log(filtered) 195 console.log(cond) 196 showItems(filtered) 197 }) 198} 199 200 201window.onload = function () { // Ð²Ñ Ð¾Ð´Ð¸Ð¼ в ÑилÑÑÑ, когда окно пÑогÑÑзилоÑÑ 202 let submitFilters = document.getElementById('news-search-form') // Ñ Ð²Ð°Ñаем ÑоÑÐ¼Ñ Ñ ÑилÑÑÑами 203 if (submitFilters) { // еÑли ÑÐ»ÐµÐ¼ÐµÐ½Ñ ÑодеÑжиÑÑÑ Ð½Ð° ÑÑÑаниÑе 204 submitFilters.addEventListener('submit', (e) => { // добавиÑÑ Ð¿ÑоÑлÑÑиваÑÐµÐ»Ñ Ð½Ð° клик 205 e.preventDefault(); // пÑедоÑвÑаÑиÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ðµ ÑÑÑаниÑÑ Ð¿Ð¾Ñле клика на submit 206 const form = e.target; 207 const formFields = form.elements; 208 const dates = formFields.date_search.value; 209 const category = formFields.category_search.value == 'none' ? '' : formFields.category_search.value; 210 const title = formFields.string_search.value ? formFields.string_search.value : '' 211 getSelected(title, dates, category) 212 }) 213 } 214} 215 216 217 218// Drupal.behaviors.fetchNews = { 219// attach: function (context, settings) { 220// once('fetchNews', 'html').forEach(function (element) { 221// logNews(); 222// }) 223// } 224// }; 225 226 const sectionNewsCollections = document.querySelectorAll('.news-collection__pagination'); 227 228 if (sectionNewsCollections.length > 0) { 229 230 //Start Ðнопка оÑкÑÑÑÑ ÑилÑÑÑ Ð¸ закÑÑÑÑ ÑилÑÑÑ 231 sectionNewsCollections.forEach( (sectionNewsCollection) => { 232 233 234 const openBtn = sectionNewsCollection.querySelector('.news-collection__filter-btn'); 235 236 if(openBtn){ 237 const filterModal = sectionNewsCollection.querySelector('.news-collection__filter-modal'); 238 const closeBtn = filterModal.querySelector('.news-collection__filter-btn'); 239 240 closeBtn.addEventListener('click', function () { 241 filterModal.classList.remove('_active'); 242 }); 243 244 openBtn.addEventListener('click', function () { 245 filterModal.classList.add('_active'); 246 }) 247 } 248 249 250 251 }); 252 //End Ðнопка оÑкÑÑÑÑ ÑилÑÑÑ Ð¸ закÑÑÑÑ ÑилÑÑÑ 253 254 //Start input ÑекÑÑÐ°Ñ ÑÑÑаниÑа 255 sectionNewsCollections.forEach((sectionNewsCollection, index) => { 256 const paginationTwo = sectionNewsCollection.querySelector('.news-collection__pagination-two'); 257 const newPage = paginationTwo.querySelector('.news-collection__pagination-input'); 258 const pageMax = newPage.max; 259 const prevLink = sectionNewsCollection.querySelector('.news-collection__pagination-arrow-prev'); 260 const nextLink = sectionNewsCollection.querySelector('.news-collection__pagination-arrow-next'); 261 262 newPage.addEventListener('keydown', (e) => { 263 if (e.key === '-') { 264 e.preventDefault(); // ÐлокиÑÑем ввод Ñимвола '-' 265 } 266 }); 267 268 newPage.addEventListener('blur', () => { 269 if (parseInt(newPage.value, 10) >= pageMax) { 270 newPage.value = pageMax - 1; 271 } 272 273 if(parseInt( pageMax == 1)){ 274 newPage.value = pageMax; 275 } 276 277 }); 278 279 newPage.addEventListener('input', function (event) { 280 let goPage = event.target.value; 281 if (Number(goPage) >= Number(pageMax)) { 282 goPage = pageMax - 1; 283 } 284 285 if(parseInt( pageMax == 1)){ 286 goPage = pageMax; 287 } 288 289 let href = prevLink.href; 290 const positionPageStart = Number(href.indexOf('?page=')) + 6; 291 const positionEnd = Number(href.indexOf('&')); 292 let newLinkStart = href.substring(0, positionPageStart); 293 let newLinkEnd = positionEnd === -1 ? '' : href.substring(positionEnd); 294 295 prevLink.href = newLinkStart + String(Number(goPage) - 1) + newLinkEnd; 296 nextLink.href = newLinkStart + String(Number(goPage) + 1) + newLinkEnd; 297 298 const otherNumberPagination = index === 0 ? 1 : 0; 299 const newPageTwo = sectionNewsCollections[otherNumberPagination].querySelector('.news-collection__pagination-input'); 300 newPageTwo.value = goPage; 301 302 const prevLinkTwo = sectionNewsCollections[otherNumberPagination].querySelector('.news-collection__pagination-arrow-prev'); 303 const nextLinkTwo = sectionNewsCollections[otherNumberPagination].querySelector('.news-collection__pagination-arrow-next'); 304 305 prevLinkTwo.href = newLinkStart + String(Number(goPage) - 1) + newLinkEnd; 306 nextLinkTwo.href = newLinkStart + String(Number(goPage) + 1) + newLinkEnd; 307 308 }); 309 310 }); 311 //End input ÑекÑÑÐ°Ñ ÑÑÑаниÑа 312 } 313;
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.