`); laat searchUrl = `/zoeken/`; history.forEach((elem) => prevsearch.find('#prevsearch-options').append(`
${elem}`); }); } $('#search-pretype-options').empty(); $('#search-pretype-options').append(prevsearch); laat prevbooks = $(false); [ {title:"Onlangs geopende leerboeken", boeken:vorige_boeken}, {title:"Aanbevolen leerboeken", boeken:aanbevolen_boeken} ].forEach((book_segment) => { if (Array.isArray(book_segment.books) && book_segment. boeken.lengte>0 && nsegmenten<2) { nsegmenten+=1; prevboeken = $(`
`); laat searchUrl = "/boeken/xxx/"; book_segment.books.forEach((elem) => prevbooks.find('#prevbooks-options'+nsegments.toString()).append(`
${elem.title} ${ordinal(elem.editie)} ${elem.author}`); }); } $('#search-pretype-options').append(prevbooks); }); } functie anon_pretype() { laat prebooks = null; probeer prebooks = JSON.parse(localStorage.getItem('PRETYPE_BOOKS_ANON')); }catch(e) {} if ('vorige_boeken' in voorboeken && 'aanbevolen_boeken' in voorboeken) { previous_books = prebooks.previous_books; aanbevolen_boeken = prebooks.aanbevolen_boeken; if (typevan PREVBOOKS !== 'niet gedefinieerd' && Array.isArray(PREVBOOKS)) { new_prevbooks = PREVBOOKS; previous_books.forEach(elem => { for (let i = 0; i < new_prevbooks.length; i++) { if (elem.id == new_prevbooks[i].id) { return; } } new_prevbooks.push(elem); }); new_prevbooks = nieuwe_prevbooks.slice(0,3); vorige_boeken = nieuwe_prevboeken; } if (type RECBOOKS !== 'niet gedefinieerd' && Array.isArray(RECBOOKS)) { new_recbooks = RECBOOKS; for (laat j = 0; j < new_recbooks.length; j++) { new_recbooks[j].viewed_at = nieuwe datum(); } laat invoegen = waar; for (laat i=0; i < aanbevolen_books.lengte; i++){ for (laat j = 0; j < new_recbooks.length; j++) { if (recommended_books[i].id == new_recbooks[j].id) { invoegen = onwaar; } } if (insert){ new_recbooks.push(recommended_books[i]); } } new_recbooks.sort((a,b)=>{ adate = nieuwe datum(2000, 0, 1); bdate = nieuwe datum(2000, 0, 1); if ('viewed_at' in a) {adate = nieuw Date(a.viewed_at);} if ('viewed_at' in b) {bdate = new Date(b.viewed_at);} // 100000000: in plaats van alleen de suggesties van vorige week te wissen, // verplaatsen we ze gewoon naar de achter in de wachtrij acurweek = ((nieuwe datum()).getDate()-adate.getDate()>7)?0:100000000; bcurweek = ((nieuwe datum()).getDate()-bdate.getDate() >7)?0:100000000; aviews = 0; bviews = 0; if ('views' in a) {aviews = acurweek+a.views;} if ('views' in b) {bviews = bcurweek+b.views ;} return bviews - overzichten; }); nieuwe_recbooks = nieuwe_recbooks.slice(0,3); aanbevolen_boeken = nieuwe_recbooks; } localStorage.setItem('PRETYPE_BOOKS_ANON', JSON.stringify({ vorige_boeken: vorige_boeken, aanbevolen_boeken: aanbevolen_boeken })); build_popup(); } } var whiletyping_search_object = null; var whiletyping_search = { boeken: [], curriculum: [], onderwerpen: [] } var single_whiletyping_ajax_promise = null; var whiletyping_database_initial_burst = 0; //aantal opeenvolgende oproepen, na 3 starten we de functie 1 per 5 minuten oproepen get_whiletyping_database() {//haalt de database op van de server. // 1. door te valideren op basis van een lokale databasewaarde bevestigen we dat het raamwerk werkt en // reduceren we het aantal continue oproepen dat door fouten wordt veroorzaakt tot 1 per 5 minuten. return localforage.getItem('whiletyping_last_attempt').then(function(value) { if ( waarde==null || (nieuwe datum()) - (nieuwe datum(waarde)) > 1000*60*5 || (whiletyping_database_initial_burst < 3) ) { localforage.setItem('whiletyping_last_attempt', (new Date()).getTime()); // 2. Voer een Ajax-aanroep uit naar de server en haal de zoekdatabase op. let databaseUrl = `/search/whiletype_database/ `; let resp = single_whiletyping_ajax_promise; if (resp === null) { whiletyping_database_initial_burst = whiletyping_database_initial_burst + 1; single_whiletyping_ajax_promise = resp = nieuwe belofte((oplossen, afwijzen) => { $.ajax({ url: databaseUrl, type: 'POST ', data:{csrfmiddlewaretoken: "1apw2YBi6lT5iuY9lhQyK5wbyoTGjZf7hMb0PymYitHW6ueNun7CaT7bquTzJmuw"}, success: function (data) {// 3. controleer of de elementen van de database bestaan en arrays zijn if (('boeken' in data) && ('curriculum' in data ) && ('onderwerpen' in gegevens) && Array.isArray(data.books) && Array.isArray(data.curriculum) && Array.isArray(data.topics)) { localforage.setItem('whiletyping_last_success', (new Date( )).krijg tijd()); localforage.setItem('whiletyping_database', gegevens); oplossen(gegevens); } }, fout: functie (fout) { console.log(fout); oplossen(nul); }, compleet: functie (gegevens) { single_whiletyping_ajax_promise = null; } }) }); } retour resp; } return Promise.resolve(null); }).catch(function(err) { console.log(err); return Promise.resolve(null); }); } function get_whiletyping_search_object() {// haalt de fuse-objecten op die verantwoordelijk zijn voor de zoekopdracht if (whiletyping_search_object){ return Promise.resolve(whiletyping_search_object); } database_promise = localforage.getItem('whiletyping_database').then(function(database) { return localforage.getItem('whiletyping_last_success').then(function(last_success) { if (database==null || (nieuwe datum()) - (nieuwe datum(laatste_succes)) > 1000*60*60*24*30 || (nieuwe datum('2023-04-25T00:00:00')) - (nieuwe datum(laatste_succes)) > 0) { / / Nieuwe database-update return get_whiletyping_database().then(function(new_database) { if (new_database) { database = new_database; } return database; }); } else { return Promise.resolve(database); } }); }); return database_promise.then(function(database) { if (database) { const options = { isCaseSensitive: false, includeScore: true, ShouldSort: true, // includeMatches: false, // findAllMatches: false, // minMatchCharLength: 1, / / locatie: 0, drempel: 0,2, // afstand: 100, // useExtendedSearch: false, negeerLocation: true, // negeerFieldNorm: false, // fieldNormWeight: 1, sleutels: [ "title" ] }; let curriculum_index={ }; let topics_index={}; database.curriculum.forEach(c => curriculum_index[c.id]=c); database.topics.forEach(t => topics_index[t.id]=t); for (j= 0; j