1var _search = { 2 _data: {}, 3 _containerList: "#list-home-search-articles", 4 _containerListPrograms: "#list-home-search-programs", 5 _containerListSpeakers: "#list-home-search-speakers", 6 _counter: null, 7 _inputText: "#list-home-search-text", 8 _totalResult: "#total-result-number", 9 _programSelector: "#list-home-search-filter-program-selector", 10 _showMoreButton: "#search-show-more-button-container", 11 _searchButton: "#search-button", 12 _dateFrom: "#list-home-search-filter-date-from", 13 _dateTo: "#list-home-search-filter-date-to", 14 _orderBy: "#list-home-search-filter-orderby", 15 _programSelectorContainer: "#search-program-selector-container", 16 _programSelector: "#list-home-search-filter-program-selector", 17 _categoryContainer: "#search-category-container", 18 _checkboxContainer: "#checkbox-container", 19 _contentTypeEpisodes: "#list-search-filter-type-episodes", 20 _contentTypePills: "#list-search-filter-type-pills", 21 _contentTypeVideos: "#list-search-filter-type-videos", 22 _contentTypeArticles: "#list-search-filter-type-articles", 23 _pageSize: "10", 24 _baseEndpoint: { 25 "staging" : "", 26 "production": "" 27 }, 28 29 30 init: async function () { 31 //inizializzo il selettore di programmi con la lista di tutti i programmi. 32 //in una onchange sugli input si aggiorna il selettore. 33 var _this = this; 34 // test 35 if(_system.isNull(_programs.categories._data)){ 36 await _data.get(["categories", "programs", "groups", _config.app.radio.group, "radios", _config.app.radio.id], "zrange", 0, -1).then(function (value) { 37 _programs.categories._data = {}; 38 _programs.categories._dataSorted = []; 39 var item = {}; 40 for (i = 0; i < value['data'].length; i++) { 41 item = JSON.parse(value['data'][i]); 42 _programs.categories._data[item['_id']] = item; 43 } 44 _programs.categories._dataSorted = _system.dataSorting(_programs.categories._data, "id_order")["sorted"]; 45 }) 46 } 47 _this.renderCategoriesCheckbox(_programs.categories._data); 48 49 this.setProgramOptions(); 50 }, 51 52 setProgramOptions: function (categoryIds) { 53 var programs = Object.values(_home.items._dataPrograms).filter(x => x != null && x !== undefined); 54 if (categoryIds) 55 programs = programs.filter(x => categoryIds.includes(x.category_id) && x.status == "live") 56 for (var key in programs) { 57 $(this._programSelector).append('<option value="' + programs[key]['_id'] + '">' + programs[key]['title'] + '</option>'); 58 } 59 }, 60 61 renderCategoriesCheckbox: function (categories) { 62 $(this._checkboxContainer).html(""); 63 for (var key in categories) { 64 if (categories[key].status != "live") 65 continue; 66 67 var titleCategory = categories[key].label; 68 var checkboxCategory = '<div class="c-50 form-line-checkbox"><input onchange="_search.changeProgramSelector()" name=' + key + ' class="category" type="checkbox" id="list-home-search-filter-type-' + key + '" checked>' + titleCategory + '</div>'; 69 $(this._checkboxContainer).prepend(checkboxCategory); 70 } 71 }, 72 73 changeProgramSelector: function () { 74 //controllo le categorie selezionate e ripopolo il filtro 75 var categories = []; 76 var categoryArray = $('input[class=category]:checked'); 77 var length = $('input[class=category]:checked').length; 78 for (var i = 0; i < length; i++) { 79 categories.push(categoryArray[i].name); 80 } 81 $(this._programSelector).html("<option value='null'>Seleziona il programma...</option>") 82 this.setProgramOptions(categories); 83 }, 84 85 start: function (pageNumber) { 86 //Controlla stringa di ricerca e filtri applicati, li salva in _data ed esegue la query 87 //Il risultato viene passato alla render 88 var _this = this; 89 90 _this.programs(); 91 _this.speakers(); 92 93 //disabilito temporaneamente il bottone di ricerca 94 //$(this._searchButton).addClass('disabled'); 95 $(this._searchButton).addClass('loader'); 96 97 _this._counter = 0; 98 //prendo la stringa testuale di ricerca 99 var textSearch = $(_this._inputText).val(); 100 101 //imposto il numnero di pagina come stringa 102 if (!pageNumber) { 103 pageNumber = "1"; 104 //_system.loaderList(_search._containerList); 105 } 106 else 107 pageNumber = pageNumber.toString(); 108 109 //resetto il bottone mostra di più se presente al reset della ricerca 110 if (pageNumber == "1") 111 $(this._showMoreButton).html(""); 112 else { 113 _system.loaderList(this._showMoreButton); 114 } 115 116 //leggo quali sono i filtri impostati 117 var filterSelected = ""; 118 119 //se almeno uno dei tre è flaggato, metto il contentType episodi 120 if ($(_this._contentTypeEpisodes).is(":checked") || $(_this._contentTypePills).is(":checked") || $(_this._contentTypeVideos).is(":checked")) { 121 var contentTypeEpisode = "tipo:episode"; 122 contentTypeEpisode += _this.checkSourceAndEpisodeType(); 123 //source e tipo sono in OR 124 //contentTypeEpisode += " AND episodeType:" + _this.checkEpisodeType() + ")"; 125 var filterCategoriesSelected = _this.checkCategoryFilterSelected(); 126 var filterSelected = "(" + contentTypeEpisode; 127 if(filterCategoriesSelected != ""){ 128 filterSelected += " AND " + filterCategoriesSelected 129 } 130 filterSelected += ")"; 131 if ($(_this._programSelector).val() != "null") 132 filterSelected += "AND (idProgramma:" + $(_this._programSelector).val() + ")"; 133 console.log(filterSelected); 134 } 135 136 if ($(_this._contentTypeArticles).is(":checked")) { 137 if (filterSelected != "") 138 filterSelected += " OR " 139 filterSelected += "tipo:article";
140 } 141 142 if (filterSelected == ""){ 143 filterSelected = "tipo:none"; 144 } 145 console.log(filterSelected); 146 147 //date range 148 var dateFrom = $(this._dateFrom).val(); 149 var dateTo = $(this._dateTo).val(); 150 if (new Date(dateFrom) > new Date(dateTo)) { 151 _toastmessage.show("543", "warning"); 152 $(this._searchButton).removeClass('loader'); 153 return; 154 } 155 156 if(dateFrom === ""){ 157 $(this._dateFrom).val("") 158 } 159 160 if(dateTo === ""){ 161 $(this._dateTo).val("") 162 } 163 164 if (dateFrom) 165 dateFrom = _system.dateToShow(dateFrom) 166 if (dateTo) 167 dateTo = _system.dateToShow(dateTo) 168 169 170 var query = { 171 "value": _system.escape(textSearch), 172 "filters": filterSelected, 173 "order_by": $(this._orderBy).val(), 174 "page_number": pageNumber, 175 "page_size": this._pageSize, 176 "from_date": dateFrom, 177 "to_date": dateTo 178 } 179 this._data = query; 180 181 $.ajax({ 182 contentType: "application/json", 183 dataType: "json", 184 timeout: 10000, 185 type: 'POST', // http method 186 connection: "keep-alive", 187 Accept: "*", 188 url: _this._baseEndpoint[_config.app.connection], 189 data: JSON.stringify(query),
190 success: function (data) { //da cambiare server staging Radio Company 191 if("status" in data && data.status == 401){ 192 $(_search._searchButton).removeClass('loader'); 193 _search.renderTotalElement(0); 194 $(_search._containerList).html("<div class='p-20'>" + _system.label("search-no-results").replace("{hint}", _search._data.value) + "</div>"); 195 return 196 } 197 //_this.render(data.search.result.documents, pageNumber, data.search.searchInfo.realnumdocs); 198 _this.render(data.search.result.documents, pageNumber, data.search.searchInfo.realnumdocs).then(function () { 199 //faccio scroll per visualizzare il contenuto in caso di pagina 1 200 if (pageNumber == "1") { 201 if (_system.isBrowser()) { 202 $('html, body').animate({ 203 scrollTop: $('#total-result-programs-number').offset().top - 60 204 }, 500); 205 } 206 else { 207 //per mobile uso un altro scroll. 208 $('#search-level-0').scrollTop($(_this._totalResult).offset().top); 209 $('#search-level-0').scrollTop($('#total-result-programs-number').offset().top - 60); 210 } 211 212 } 213 //riabilito il bottone 214 $(_this._searchButton).removeClass('loader'); 215 $(_search._containerList + ' .lazy').lazy({ 216 appendScroll: (_system.isDesktop() ? window : $('section[content="search"]')), 217 }); 218 }); 219 220 }, 221 error: function (xhr, status, error) { 222 $(_search._searchButton).removeClass('loader'); 223 _search.renderTotalElement(0); 224 $(_search._containerList).html("<div class='t-a-c'>" + _system.label("no-connection") + "</div>") 225 console.error(error); 226 }, 227 }) 228 }, 229 230 programs: function() { 231 if ($('#list-home-search-text').val().trim() == "" 232 || $('#list-home-search-filter-program-selector').val() == "") return; 233 234 $(_search._containerListPrograms).html(""); 235 236 var string = $('#list-home-search-text').val().trim().replaceAll(" ","").toLowerCase(); 237 var data = _home.items._dataPrograms; 238 var founded = 0; 239 for (var key in data) { 240 var item = {} 241 Object.assign(item, data[key]); 242 //Speakers 243 var speakersConcat = ""; 244 for (var keyS in item['speakers']) { 245 var speaker = item['speakers'][keyS]; 246 speakersConcat += (_speakers.items._data[speaker['speaker_id']] !== undefined ? _speakers.items._data[speaker['speaker_id']]['title'].trim().replaceAll(" ","").toLowerCase() + "," : ""); 247 } 248 249 if (item['title'].trim().replaceAll(" ","").toLowerCase().indexOf(string) >= 0 250 || speakersConcat.indexOf(string) >= 0) { 251 founded++; 252 if (founded <= 20) { 253 item['program'] = ""; 254 item['link'] = _system.createLink("programmi/" + item['vanityurl']); 255 item['description'] = (item['abstract'] !== "" ? item['abstract'] : _system.removeTags(item['description'])); 256 item["image"] = _system.addParamResizing(item["image"], 576, 360) 257 _views['home'].article("card-search-image", item).then(function (data) { 258 $(_search._containerListPrograms).append(data); 259 }); 260 } 261 } 262 } 263 if (founded == 0) { 264 for (var key in data) { 265 var item = data[key]; 266 if (item['abstract'] === undefined) item['abstract'] = ""; 267 if (item['description'] === undefined) item['description'] = ""; 268 if (item['abstract'].trim().replaceAll(" ","").toLowerCase().indexOf(string) >= 0 269 || item['description'].trim().replaceAll(" ","").toLowerCase().indexOf(string) >= 0) { 270 founded++; 271 if (founded <= 20) { 272 item['program'] = "";
273 item['link'] = _system.createLink("programmi/" + item['vanityurl']); 274 item['description'] = (item['abstract'] !== "" ? item['abstract'] : _system.removeTags(item['description'])); 275 _views['home'].article("card-search-image", item).then(function (data) { 276 $(_search._containerListPrograms).append(data); 277 }); 278 } 279 } 280 } 281 } 282 $("#total-result-programs-number").html(""); 283 var totalElements = '<h3 class="m-l-20 m-t-20 m-b-20"><span class="t-gray">Programmi:</span> ' + founded + '</h3><!--<hr class="m-l-20 m-r-20">-->'; 284 $("#total-result-programs-number").prepend(totalElements); 285 if (founded == 0) { 286 $("#total-result-programs-number").hide(); 287 $(_search._containerListPrograms).hide(); 288 } else { 289 $("#total-result-programs-number").show(); 290 $(_search._containerListPrograms).show(); 291 setTimeout(function() { 292 $(_search._containerListPrograms + ' .lazy').lazy({ 293 appendScroll: (_system.isDesktop() ? window : $('section[content="search"]')), 294 }); 295 }, 10); 296 } 297 }, 298 299 speakers: function() { 300 if ($('#list-home-search-text').val().trim() == "" 301 || $('#list-home-search-filter-program-selector').val() == "") return; 302 303 $(_search._containerListSpeakers).html(""); 304 305 var string = $('#list-home-search-text').val().trim().replaceAll(" ","").toLowerCase(); 306 var data = _speakers.items._data; 307 var founded = 0; 308 for (var key in data) { 309 var item = {} 310 Object.assign(item, data[key]); 311 //Speakers 312 var speakersConcat = ""; 313 for (var keyS in item['speakers']) { 314 var speaker = item['speakers'][keyS]; 315 speakersConcat += (_speakers.items._data[speaker['speaker_id']] !== undefined ? _speakers.items._data[speaker['speaker_id']]['title'].trim().replaceAll(" ","").toLowerCase() + "," : ""); 316 } 317 318 if (item['title'].trim().replaceAll(" ","").toLowerCase().indexOf(string) >= 0 319 || speakersConcat.indexOf(string) >= 0) { 320 founded++; 321 if (founded <= 20) { 322 item['program'] = ""; 323 item['link'] = _system.createLink("conduttori/" + item['vanityurl']); 324 item["image"] = _system.addParamResizing(item["image"], 576, 360) 325 _views['home'].article("card-search-image", item).then(function (data) { 326 $(_search._containerListSpeakers).append(data); 327 }); 328 } 329 } 330 } 331 $("#total-result-speakers-number").html(""); 332 var totalElements = '<h3 class="m-l-20 m-t-20 m-b-20"><span class="t-gray">Conduttori:</span> ' + founded + '</h3><!--<hr class="m-l-20 m-r-20">-->'; 333 $("#total-result-speakers-number").prepend(totalElements); 334 if (founded == 0) { 335 $("#total-result-speakers-number").hide(); 336 $(_search._containerListSpeakers).hide(); 337 } else { 338 $("#total-result-speakers-number").show(); 339 $(_search._containerListSpeakers).show(); 340 setTimeout(function() { 341 $(_search._containerListSpeakers + ' .lazy').lazy({ 342 appendScroll: (_system.isDesktop() ? window : $('section[content="search"]')), 343 }); 344 }, 10); 345 } 346 }, 347 348 checkCategoryFilterSelected: function () { 349 //ritorno una query che indichi le categorie di programmi da includere nella ricerca 350 var length = $('input[class=category]:checked').length; 351 if (length == 0) 352 return ""; 353 var result = "("; 354 var categoryArray = $('input[class=category]:checked'); 355 for (var i = 0; i < length; i++) { 356 result += "idCategoria:" + categoryArray[i].name; 357 if (i != length - 1) 358 result += " OR " 359 else 360 result += ")" 361 } 362 return result; 363 }, 364 365 366 checkSourceAndEpisodeType: function () { 367 if ($(this._contentTypeVideos).is(":checked") && $(this._contentTypeEpisodes).is(":checked") && $(this._contentTypePills).is(":checked")) { 368 //se tutti selezionati non filtro, quindi passo stringa vuota 369 return ""; 370 } 371 else if ($(this._contentTypeEpisodes).is(":checked") && $(this._contentTypePills).is(":checked")) { 372 //caso in cui sono selezionati episodi e pillole 373 return " AND (mediatype:audio || mediatype:audio)"; 374 } 375 else if ($(this._contentTypeVideos).is(":checked") && $(this._contentTypePills).is(":checked")) { 376 //caso in cui sono selezionati video e pillole, in questo modo vengono anche selezionate gli episodi video 377 return " AND (tipoEpisodio:pills OR (mediatype:video || mediatype:all))"; 378 } 379 else if ($(this._contentTypeVideos).is(":checked") && $(this._contentTypeEpisodes).is(":checked")) { 380 //caso in cui sono selezionati video e podcast, in questo modo vengono anche selezionate le pillole video 381 return " AND (tipoEpisodio:episodes OR (mediatype:video || mediatype:all))"; 382 } 383 else if ($(this._contentTypeEpisodes).is(":checked")) { 384 //caso in cui sono selezionati solo episodi audio, uso AND per escludere i video 385 return " AND (tipoEpisodio:episodes AND (mediatype:audio || mediatype:all))"; 386 } 387 else if ($(this._contentTypePills).is(":checked")) { 388 //caso in cui sono selezionati solo pillole audio, uso AND per escludere i video 389 return " AND (tipoEpisodio:pills AND (mediatype:audio || mediatype:all))"; 390 } 391 else if ($(this._contentTypeVideos).is(":checked")) { 392 //caso in cui sono selezionati solo video 393 return " AND (mediatype:video || mediatype:all)"; 394 } 395 }, 396 397 /* 398 checkSourceType: function(){ 399 if (!$(this._contentTypeVideos).is(":checked")) { 400 return "audio"; 401 } 402 else if ($(this._contentTypeEpisodes).is(":checked")) { 403 return "all"; 404 } 405 else { 406 return "video"; 407 } 408 }, 409 410 checkEpisodeType: function(){ 411 if (!$(this._contentTypePills).is(":checked")) { 412 return "episodes"; 413 } 414 else if ($(this._contentTypeEpisodes).is(":checked")) { 415 return "all"; 416 } 417 else { 418 return "pills"; 419 } 420 },*/ 421 422 renderTotalElement: function (total) { 423 //renderizzo il numero totale di risultati della ricerca. 424 $(this._totalResult).html(""); 425 var totalElements = '<h3 class="m-l-20 m-t-20 m-b-20"><span class="t-gray">Articoli o Episodi:</span> ' + total + '</h3><!--<hr class="m-l-20 m-r-20">-->'; 426 $(this._totalResult).prepend(totalElements); 427 }, 428 429 render: async function (results, pageNumber, totalElements) { 430 //renderizzo il totale dei contenuti 431 this.renderTotalElement(totalElements); 432 433 434 //Renderizza i contenuti della ricerca 435 if (pageNumber == "1") 436 $(this._containerList).html(""); 437 else { 438 $(this._showMoreButton).html(""); 439 } 440 if (totalElements == 0) { 441 $(this._containerList).html("<div class='p-20'>" + _system.label("search-no-results").replace("{hint}", this._data.value) + "</div>"); 442 } 443 for (var key in results) { 444 var searchResult = {}; 445 let cardModel = "card-search"; 446 Object.assign(searchResult, results[key].fields); 447 //da fare link 448 if(searchResult["URL"].indexOf("/") == 0){ 449 searchResult["URL"] = searchResult["URL"].substring(1); 450 } 451 if(searchResult["URL"].indexOf("http") == 0){
452 searchResult['link'] = searchResult["URL"]; 453 }else{ 454 searchResult['link'] = _system.createLink(searchResult["URL"]); 455 } 456 searchResult['program'] = ""; 457 if (searchResult["nomeprogramma"]!==undefined) 458 searchResult['program'] = searchResult["nomeprogramma"]; 459 searchResult['title'] = searchResult['Titolo']; 460 searchResult['date'] = searchResult['Data']; 461 searchResult['description'] = "" 462 if (searchResult['VDKSummary'] !== undefined) 463 searchResult['description'] = searchResult['VDKSummary']; 464 searchResult['image'] = searchResult['url_image']; 465 if (searchResult['image']){ 466 cardModel = cardModel + "-image"; 467 searchResult["image"] = _system.addParamResizing(searchResult["image"], 576, 360); 468 } 469 _views['home'].article(cardModel, searchResult).then(function (data) { 470 $(_search._containerList).append(data); 471 _search._counter++; 472 // if (_search._counter == Math.ceil(window.innerHeight / (_system.isDesktop() ? 180 : 110)) || _speakers._counter == Object.keys(results).length) { 473 // $(_search._containerList + ' .lazy').lazy({ 474 // appendScroll: (_system.isDesktop() ? window : $('section[content="search"]')), 475 // }); 476 // } 477 }); 478 } 479 480 //renderizo il pulsante mostra altro in caso in cui il totale sia maggiore del numero di elementi renderizzati 481 if (parseInt(totalElements) > (parseInt(this._pageSize) * parseInt(pageNumber))) { 482 var nextPageNumber = parseInt(pageNumber); 483 nextPageNumber++; 484 console.log(nextPageNumber); 485 var showMoreButton = '<div class="t-a-c"><button class="show-more m-t-20 m-b-20 mini auto outline" id="search-show-more-button" action="_search.start(' + nextPageNumber + ')">' + _system.label("show-more") +'</button></div>' 486 $(this._showMoreButton).append(showMoreButton); 487 } 488 489 }, 490 491 checkContentType: function () { 492 if (!$(this._contentTypeEpisodes).is(":checked") && !$(this._contentTypePills).is(":checked") && !$(this._contentTypeVideos).is(":checked")) { 493 $(this._categoryContainer).hide(); 494 $(this._programSelectorContainer).hide(); 495 } 496 else { 497 $(this._categoryContainer).show(); 498 $(this._programSelectorContainer).show(); 499 } 500 }, 501 502 checkInputText: function () { 503 if ($(this._inputText).val()) { 504 $(this._searchButton).removeClass('disabled'); 505 } else if (!$(this._searchButton).hasClass('disabled')) 506 $(this._searchButton).addClass('disabled'); 507 }, 508}
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.