mirror of https://github.com/kiwix/libkiwix.git
added minor features
This commit is contained in:
parent
bb92f26b60
commit
179f0faeb1
|
@ -19,8 +19,9 @@ skin/jquery-ui/jquery-ui.theme.min.css
|
||||||
skin/jquery-ui/jquery-ui.min.css
|
skin/jquery-ui/jquery-ui.min.css
|
||||||
skin/caret.png
|
skin/caret.png
|
||||||
skin/taskbar.js
|
skin/taskbar.js
|
||||||
skin/langList.json
|
skin/langList.js
|
||||||
skin/categoryList.json
|
skin/categoryList.js
|
||||||
|
skin/iso6391To3.js
|
||||||
skin/isotope.pkgd.min.js
|
skin/isotope.pkgd.min.js
|
||||||
skin/index.js
|
skin/index.js
|
||||||
skin/taskbar.css
|
skin/taskbar.css
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
{
|
/* exported categoryList */
|
||||||
|
const categoryList = {
|
||||||
"other": "Other",
|
"other": "Other",
|
||||||
"gutenberg": "Gutenberg",
|
"gutenberg": "Gutenberg",
|
||||||
"mooc": "Mooc",
|
"mooc": "Mooc",
|
|
@ -1,14 +1,15 @@
|
||||||
(function() {
|
(function() {
|
||||||
const root = $(`link[type='root']`).attr('href');
|
const root = $(`link[type='root']`).attr('href');
|
||||||
let isFetching = false;
|
|
||||||
let iso;
|
|
||||||
let bookMap = {};
|
|
||||||
const incrementalLoadingParams = {
|
const incrementalLoadingParams = {
|
||||||
start: 0,
|
start: 0,
|
||||||
count: viewPortToCount()
|
count: viewPortToCount()
|
||||||
};
|
};
|
||||||
let params = new URLSearchParams(window.location.search);
|
|
||||||
const filterTypes = ['lang', 'category', 'q'];
|
const filterTypes = ['lang', 'category', 'q'];
|
||||||
|
let iso;
|
||||||
|
let isFetching = false;
|
||||||
|
let noResultInjected = false;
|
||||||
|
let params = new URLSearchParams(window.location.search);
|
||||||
|
let bookMap = {};
|
||||||
|
|
||||||
function queryUrlBuilder() {
|
function queryUrlBuilder() {
|
||||||
let url = `${root}/catalog/search?`;
|
let url = `${root}/catalog/search?`;
|
||||||
|
@ -58,26 +59,50 @@
|
||||||
incrementalLoadingParams.start += books.length;
|
incrementalLoadingParams.start += books.length;
|
||||||
if (books.length < incrementalLoadingParams.count) {
|
if (books.length < incrementalLoadingParams.count) {
|
||||||
incrementalLoadingParams.count = 0;
|
incrementalLoadingParams.count = 0;
|
||||||
}
|
}
|
||||||
return books;
|
return books;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async function loadAndDisplayOptions(nodeQuery, query) {
|
async function loadAndDisplayOptions(nodeQuery, query) {
|
||||||
// currently taking an array in place of query, will replace it with query while fetching data from backend later on.
|
// currently taking an object in place of query, will replace it with query while fetching data from backend later on.
|
||||||
await fetch(query)
|
document.querySelector(nodeQuery).innerHTML += Object.keys(query)
|
||||||
.then(async (resp) => {
|
.map((option) => {return `<option value='${option}'>${query[option]}</option>`})
|
||||||
const data = await resp.json();
|
.join('');
|
||||||
Object.keys(data).forEach((option) => {
|
}
|
||||||
document.querySelector(nodeQuery).innerHTML += `<option value='${option}'>${data[option]}</option>`;
|
|
||||||
});
|
function checkAndInjectEmptyMessage() {
|
||||||
});
|
const kiwixBodyDiv = document.getElementsByClassName('kiwixHomeBody')[0];
|
||||||
|
if (!Object.keys(bookMap).length) {
|
||||||
|
noResultInjected = true;
|
||||||
|
iso.remove(document.getElementsByClassName('book__list')[0].getElementsByTagName('a'));
|
||||||
|
iso.layout();
|
||||||
|
const spanTag = document.createElement('span');
|
||||||
|
spanTag.setAttribute('class', 'noResults');
|
||||||
|
spanTag.innerHTML = `No result. Would you like to <a href="">reset filter?</a>`;
|
||||||
|
kiwixBodyDiv.append(spanTag);
|
||||||
|
spanTag.getElementsByTagName('a')[0].onclick = (event) => {
|
||||||
|
event.preventDefault();
|
||||||
|
window.history.pushState({}, null, `${window.location.href.split('?')[0]}`);
|
||||||
|
resetAndFilter();
|
||||||
|
filterTypes.forEach(key => {document.getElementsByName(key)[0].value = params.get(key) || ''});
|
||||||
|
};
|
||||||
|
return true;
|
||||||
|
} else if (noResultInjected) {
|
||||||
|
noResultInjected = false;
|
||||||
|
kiwixBodyDiv.getElementsByClassName('noResults')[0].remove();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function loadAndDisplayBooks(sort = false) {
|
async function loadAndDisplayBooks(sort = false) {
|
||||||
if (isFetching) return;
|
if (isFetching) return;
|
||||||
isFetching = true;
|
isFetching = true;
|
||||||
let books = await loadBooks();
|
let books = await loadBooks();
|
||||||
|
if (checkAndInjectEmptyMessage()) {
|
||||||
|
isFetching = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
const booksToFilter = new Set();
|
const booksToFilter = new Set();
|
||||||
const booksToDelete = new Set();
|
const booksToDelete = new Set();
|
||||||
iso.arrange({
|
iso.arrange({
|
||||||
|
@ -102,29 +127,26 @@
|
||||||
isFetching = false;
|
isFetching = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function filterBooks(filterType, filterValue) {
|
async function resetAndFilter(filterType = '', filterValue = '') {
|
||||||
isFetching = false;
|
isFetching = false;
|
||||||
incrementalLoadingParams.start = 0;
|
incrementalLoadingParams.start = 0;
|
||||||
incrementalLoadingParams.count = viewPortToCount();
|
incrementalLoadingParams.count = viewPortToCount();
|
||||||
bookMap = {};
|
bookMap = {};
|
||||||
params = new URLSearchParams(window.location.search);
|
params = new URLSearchParams(window.location.search);
|
||||||
if (!filterValue) {
|
if (filterType) {
|
||||||
params.delete(filterType);
|
if (!filterValue) {
|
||||||
} else {
|
params.delete(filterType);
|
||||||
params.set(filterType, filterValue);
|
} else {
|
||||||
|
params.set(filterType, filterValue);
|
||||||
|
}
|
||||||
|
window.history.pushState({}, null, `${window.location.href.split('?')[0]}?${params.toString()}`);
|
||||||
}
|
}
|
||||||
window.history.pushState({}, null, `${window.location.href.split('?')[0]}?${params.toString()}`);
|
|
||||||
await loadAndDisplayBooks(true);
|
await loadAndDisplayBooks(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
window.addEventListener('popstate', async () => {
|
window.addEventListener('popstate', async () => {
|
||||||
bookMap = {};
|
await resetAndFilter();
|
||||||
isFetching = false;
|
|
||||||
incrementalLoadingParams.start = 0;
|
|
||||||
incrementalLoadingParams.count = viewPortToCount();
|
|
||||||
params = new URLSearchParams(window.location.search);
|
|
||||||
filterTypes.forEach(key => {document.getElementsByName(key)[0].value = params.get(key) || ''});
|
filterTypes.forEach(key => {document.getElementsByName(key)[0].value = params.get(key) || ''});
|
||||||
loadAndDisplayBooks(true);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
async function loadSubset() {
|
async function loadSubset() {
|
||||||
|
@ -154,16 +176,24 @@
|
||||||
},
|
},
|
||||||
sortBy: 'weight'
|
sortBy: 'weight'
|
||||||
});
|
});
|
||||||
loadAndDisplayBooks();
|
await loadAndDisplayBooks();
|
||||||
loadAndDisplayOptions('#languageFilter', `${root}/skin/langList.json`);
|
await loadAndDisplayOptions('#languageFilter', langList);
|
||||||
loadAndDisplayOptions('#categoryFilter', `${root}/skin/categoryList.json`);
|
await loadAndDisplayOptions('#categoryFilter', categoryList);
|
||||||
for (const key of params.keys()) {
|
|
||||||
document.getElementsByName(key)[0].value = params.get(key);
|
|
||||||
}
|
|
||||||
filterTypes.forEach((filter) => {
|
filterTypes.forEach((filter) => {
|
||||||
const filterTag = document.getElementsByName(filter)[0];
|
const filterTag = document.getElementsByName(filter)[0];
|
||||||
filterTag.addEventListener('change', () => {filterBooks(filterTag.name, filterTag.value)});
|
filterTag.addEventListener('change', () => {resetAndFilter(filterTag.name, filterTag.value)});
|
||||||
});
|
});
|
||||||
document.getElementById('kiwixSearchForm').onsubmit = (event) => {event.preventDefault()}
|
params.forEach((value, key) => {document.getElementsByName(key)[0].value = value});
|
||||||
|
document.getElementById('kiwixSearchForm').onsubmit = (event) => {event.preventDefault()};
|
||||||
|
if (!window.location.search) {
|
||||||
|
const browserLang = navigator.language.split('-')[0];
|
||||||
|
if (browserLang.length === 3) {
|
||||||
|
document.getElementById('languageFilter').value = browserLang;
|
||||||
|
} else {
|
||||||
|
const langFilter = document.getElementById('languageFilter');
|
||||||
|
langFilter.value = iso6391To3[browserLang];
|
||||||
|
langFilter.dispatchEvent(new Event('change'));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
|
|
@ -0,0 +1,124 @@
|
||||||
|
/* exported iso6391To3 */
|
||||||
|
const iso6391To3 = {
|
||||||
|
"aa": "aar",
|
||||||
|
"af": "afr",
|
||||||
|
"ak": "aka",
|
||||||
|
"am": "amh",
|
||||||
|
"ar": "ara",
|
||||||
|
"as": "asm",
|
||||||
|
"az": "aze",
|
||||||
|
"ba": "bak",
|
||||||
|
"be": "bel",
|
||||||
|
"bg": "bul",
|
||||||
|
"bm": "bam",
|
||||||
|
"bn": "ben",
|
||||||
|
"bo": "bod",
|
||||||
|
"br": "bre",
|
||||||
|
"bs": "bos",
|
||||||
|
"ca": "cat",
|
||||||
|
"ce": "che",
|
||||||
|
"co": "cos",
|
||||||
|
"cs": "ces",
|
||||||
|
"cv": "chv",
|
||||||
|
"cy": "cym",
|
||||||
|
"da": "dan",
|
||||||
|
"de": "deu",
|
||||||
|
"dz": "dzo",
|
||||||
|
"ee": "ewe",
|
||||||
|
"en": "eng",
|
||||||
|
"es": "spa",
|
||||||
|
"et": "est",
|
||||||
|
"eu": "eus",
|
||||||
|
"fa": "fas",
|
||||||
|
"ff": "ful",
|
||||||
|
"fi": "fin",
|
||||||
|
"fo": "fao",
|
||||||
|
"fr": "fra",
|
||||||
|
"ga": "gle",
|
||||||
|
"gl": "glg",
|
||||||
|
"gn": "grn",
|
||||||
|
"gu": "guj",
|
||||||
|
"gv": "glv",
|
||||||
|
"ha": "hau",
|
||||||
|
"he": "heb",
|
||||||
|
"hi": "hin",
|
||||||
|
"hr": "hrv",
|
||||||
|
"hu": "hun",
|
||||||
|
"hy": "hye",
|
||||||
|
"id": "ind",
|
||||||
|
"ig": "ibo",
|
||||||
|
"is": "isl",
|
||||||
|
"it": "ita",
|
||||||
|
"iu": "iku",
|
||||||
|
"ja": "jpn",
|
||||||
|
"jv": "jav",
|
||||||
|
"ka": "kat",
|
||||||
|
"ki": "kik",
|
||||||
|
"kk": "kaz",
|
||||||
|
"km": "khm",
|
||||||
|
"kn": "kan",
|
||||||
|
"ko": "kor",
|
||||||
|
"ks": "kas",
|
||||||
|
"ku": "kur",
|
||||||
|
"kw": "cor",
|
||||||
|
"ky": "kir",
|
||||||
|
"lb": "ltz",
|
||||||
|
"lg": "lug",
|
||||||
|
"ln": "lin",
|
||||||
|
"lo": "lao",
|
||||||
|
"lt": "lit",
|
||||||
|
"lv": "lav",
|
||||||
|
"mg": "mlg",
|
||||||
|
"mi": "mri",
|
||||||
|
"mk": "mkd",
|
||||||
|
"ml": "mal",
|
||||||
|
"mn": "mon",
|
||||||
|
"mr": "mar",
|
||||||
|
"mt": "mlt",
|
||||||
|
"my": "mya",
|
||||||
|
"nl": "nld",
|
||||||
|
"ny": "nya",
|
||||||
|
"om": "orm",
|
||||||
|
"pl": "pol",
|
||||||
|
"pt": "por",
|
||||||
|
"qu": "que",
|
||||||
|
"rm": "roh",
|
||||||
|
"rn": "run",
|
||||||
|
"ro": "ron",
|
||||||
|
"ru": "rus",
|
||||||
|
"rw": "kin",
|
||||||
|
"sa": "san",
|
||||||
|
"sd": "snd",
|
||||||
|
"sg": "sag",
|
||||||
|
"si": "sin",
|
||||||
|
"sk": "slk",
|
||||||
|
"sl": "slv",
|
||||||
|
"sn": "sna",
|
||||||
|
"so": "som",
|
||||||
|
"sq": "sqi",
|
||||||
|
"sr": "srp",
|
||||||
|
"ss": "ssw",
|
||||||
|
"sv": "swe",
|
||||||
|
"ta": "tam",
|
||||||
|
"te": "tel",
|
||||||
|
"tg": "tgk",
|
||||||
|
"th": "tha",
|
||||||
|
"ti": "tir",
|
||||||
|
"tk": "tuk",
|
||||||
|
"tn": "tsn",
|
||||||
|
"tr": "tur",
|
||||||
|
"ts": "tso",
|
||||||
|
"tt": "tat",
|
||||||
|
"ug": "uig",
|
||||||
|
"uk": "ukr",
|
||||||
|
"ur": "urd",
|
||||||
|
"uz": "uzb",
|
||||||
|
"ve": "ven",
|
||||||
|
"vi": "vie",
|
||||||
|
"wa": "wln",
|
||||||
|
"wo": "wol",
|
||||||
|
"xh": "xho",
|
||||||
|
"yo": "yor",
|
||||||
|
"zh": "zho",
|
||||||
|
"zu": "zul"
|
||||||
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
{
|
/* exported langList */
|
||||||
|
const langList = {
|
||||||
"aar": "Afar",
|
"aar": "Afar",
|
||||||
"afr": "Afrikaans",
|
"afr": "Afrikaans",
|
||||||
"aka": "Akan",
|
"aka": "Akan",
|
|
@ -36,6 +36,10 @@
|
||||||
.book__list {
|
.book__list {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
.kiwixHomeBody {
|
||||||
|
padding: 30px 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
.book {
|
.book {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
vertical-align: bottom;
|
vertical-align: bottom;
|
||||||
|
@ -111,6 +115,9 @@
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script src="{{root}}/skin/isotope.pkgd.min.js" defer></script>
|
<script src="{{root}}/skin/isotope.pkgd.min.js" defer></script>
|
||||||
|
<script src="{{root}}/skin/categoryList.js"></script>
|
||||||
|
<script src="{{root}}/skin/langList.js"></script>
|
||||||
|
<script src="{{root}}/skin/iso6391To3.js"></script>
|
||||||
<script type="text/javascript" src="{{root}}/skin/index.js" defer></script>
|
<script type="text/javascript" src="{{root}}/skin/index.js" defer></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="kiwix">
|
<body class="kiwix">
|
||||||
|
@ -119,7 +126,7 @@
|
||||||
<option value="" selected>All languages</option>
|
<option value="" selected>All languages</option>
|
||||||
</select>
|
</select>
|
||||||
<select name="category" id="categoryFilter" class='kiwixFilter'>
|
<select name="category" id="categoryFilter" class='kiwixFilter'>
|
||||||
<option value="" selected>ALl categories</option>
|
<option value="" selected>All categories</option>
|
||||||
</select>
|
</select>
|
||||||
<form id='kiwixSearchForm' class='kiwixSearchForm'>
|
<form id='kiwixSearchForm' class='kiwixSearchForm'>
|
||||||
<input type="text" name="q" id="searchFilter" class='kiwixSearch'>
|
<input type="text" name="q" id="searchFilter" class='kiwixSearch'>
|
||||||
|
|
Loading…
Reference in New Issue