From 58c04b3f77e2cf088a271a52b1824a559221c810 Mon Sep 17 00:00:00 2001
From: Nikhil Tanwar <2002nikhiltanwar@gmail.com>
Date: Mon, 11 Jul 2022 14:12:53 +0530
Subject: [PATCH] Basic widget handling
Adds handling for parameters:
disablefilter - disable search filters
disableclick - disable book click action
disabledownload - disable download button
disabledesc - disable description
---
static/skin/index.js | 57 ++++++++++++++++++----------
static/skin/widget.js | 88 ++++++++++++++++++++++++++++++++++++++++++-
test/server.cpp | 2 +-
3 files changed, 125 insertions(+), 22 deletions(-)
diff --git a/static/skin/index.js b/static/skin/index.js
index 10f49a134..8847b076f 100644
--- a/static/skin/index.js
+++ b/static/skin/index.js
@@ -17,6 +17,7 @@ const kiwixServe = (function() {
let params = new URLSearchParams(window.location.search || filters || '');
let timer;
let languages = {};
+ let allowBookClick = true;
function queryUrlBuilder() {
let url = `${root}/catalog/search?`;
@@ -85,7 +86,7 @@ const kiwixServe = (function() {
}
function generateBookHtml(book, sort = false) {
- const link = book.querySelector('link[type="text/html"]').getAttribute('href');
+ let link = book.querySelector('link[type="text/html"]').getAttribute('href');
let iconUrl;
book.querySelectorAll('link[rel="http://opds-spec.org/image/thumbnail"]').forEach(link => {
if (link.getAttribute('type').split(';')[1] == 'width=48' && !iconUrl) {
@@ -120,6 +121,9 @@ const kiwixServe = (function() {
}
const faviconAttr = iconUrl != undefined ? `style="background-image: url('${iconUrl}')"` : '';
const languageAttr = langCode != '' ? `title="${language}" aria-label="${language}"` : 'style="background-color: transparent"';
+ if (!allowBookClick) {
+ link = "javascript:void(0)";
+ }
divTag.innerHTML = `
@@ -247,14 +251,16 @@ const kiwixServe = (function() {
toggleFooter();
}
const kiwixResultText = document.querySelector('.kiwixHomeBody__results')
- if (results) {
- let resultText = `${results} books`;
- if (results === 1) {
- resultText = `${results} book`;
+ if (kiwixResultText) {
+ if (results) {
+ let resultText = `${results} books`;
+ if (results === 1) {
+ resultText = `${results} book`;
+ }
+ kiwixResultText.innerHTML = resultText;
+ } else {
+ kiwixResultText.innerHTML = ``;
}
- kiwixResultText.innerHTML = resultText;
- } else {
- kiwixResultText.innerHTML = ``;
}
loader.style.display = 'none';
return books;
@@ -265,16 +271,20 @@ const kiwixServe = (function() {
await fetch(query).then(async (resp) => {
const data = new window.DOMParser().parseFromString(await resp.text(), 'application/xml');
let optionStr = '';
- data.querySelectorAll('entry').forEach(entry => {
- const title = getInnerHtml(entry, 'title');
- const value = getInnerHtml(entry, valueEntryNode);
- const hfTitle = humanFriendlyTitle(title);
- if (valueEntryNode == 'language') {
- languages[value] = hfTitle;
- }
- optionStr += (hfTitle != '') ? `` : '';
- });
- document.querySelector(nodeQuery).innerHTML += optionStr;
+ const entryList = data.querySelectorAll('entry');
+ const nodeQueryElem = document.querySelector(nodeQuery);
+ if (entryList && nodeQueryElem) {
+ entryList.forEach(entry => {
+ const title = getInnerHtml(entry, 'title');
+ const value = getInnerHtml(entry, valueEntryNode);
+ const hfTitle = humanFriendlyTitle(title);
+ if (valueEntryNode == 'language') {
+ languages[value] = hfTitle;
+ }
+ optionStr += (hfTitle != '') ? `` : '';
+ });
+ nodeQueryElem.innerHTML += optionStr;
+ }
});
}
@@ -388,6 +398,10 @@ const kiwixServe = (function() {
}
});
}
+
+ function disableBookClick() {
+ allowBookClick = false;
+ }
function addTagElement(tagValue, resetFilter) {
const tagElement = document.getElementsByClassName('tagFilterLabel')[0];
@@ -481,6 +495,7 @@ const kiwixServe = (function() {
}
}
updateVisibleParams();
+ updateBookCount();
document.getElementById('kiwixSearchForm').onsubmit = (event) => {event.preventDefault()};
if (!window.location.search) {
const browserLang = navigator.language.split('-')[0];
@@ -493,8 +508,10 @@ const kiwixServe = (function() {
}
setCookie(filterCookieName, params.toString());
}
+
return {
- updateBookCount
- }
+ updateBookCount,
+ disableBookClick
+ };
})();
diff --git a/static/skin/widget.js b/static/skin/widget.js
index c92066c58..847b7911b 100644
--- a/static/skin/widget.js
+++ b/static/skin/widget.js
@@ -1 +1,87 @@
-// To be updated
\ No newline at end of file
+function disableSearchFilters(widgetStyles) {
+ const hideNavRule = `
+ .kiwixNav {
+ display: none;
+ }`;
+ const hideResultsLabelRule = `
+ .kiwixHomeBody__results {
+ display: none;
+ }`;
+ const hideTagFilterRule = `
+ .book__tags {
+ pointer-events: none;
+ }`;
+ insertNewCssRules(widgetStyles, [hideNavRule, hideResultsLabelRule, hideTagFilterRule]);
+}
+
+function disableBookClick() {
+ kiwixServe.disableBookClick();
+}
+
+function disableDownload(widgetStyles) {
+ const hideBookDownloadRule = `
+ .book__download {
+ display: none;
+ }`;
+ insertNewCssRules(widgetStyles, [hideBookDownloadRule]);
+}
+
+function disableDescription(widgetStyles) {
+ const decreaseHeightRule = `
+ .book__wrapper {
+ height:128px;
+ grid-template-rows: 70px 0 1fr 1fr;
+ }`;
+ const hideDescRule = `
+ .book__description {
+ display: none;
+ }`;
+ insertNewCssRules(widgetStyles, [decreaseHeightRule, hideDescRule]);
+}
+
+function hideFooter(widgetStyles) {
+ const hideFooterRule = `
+ .kiwixfooter {
+ display: none !important;
+ }`;
+ insertNewCssRules(widgetStyles, [hideFooterRule]);
+}
+
+function insertNewCssRules(stylesheet, ruleList) {
+ if (stylesheet) {
+ for (rule of ruleList) {
+ stylesheet.insertRule(rule, 0);
+ }
+ }
+}
+
+function handleWidget() {
+ const params = new URLSearchParams(window.location.search || filters || '');
+ const widgetStyleElem = document.createElement('style');
+ document.head.appendChild(widgetStyleElem);
+
+ const widgetStyles = widgetStyleElem.sheet;
+
+ const disableFilters = params.has('disablefilter');
+ const disableClick = params.has('disableclick');
+ const disableDwld = params.has('disabledownload');
+ const disableDesc = params.has('disabledesc');
+
+ const blankBase = document.createElement('base');
+ blankBase.target = '_blank';
+ document.head.appendChild(blankBase); // open all links in new tab
+
+ if (disableFilters)
+ disableSearchFilters(widgetStyles);
+ if (disableClick)
+ disableBookClick();
+ if (disableDwld)
+ disableDownload(widgetStyles);
+ if (disableDesc)
+ disableDescription(widgetStyles);
+
+ hideFooter(widgetStyles);
+ kiwixServe.updateBookCount();
+}
+
+handleWidget();
\ No newline at end of file
diff --git a/test/server.cpp b/test/server.cpp
index 886fcf542..3475c2051 100644
--- a/test/server.cpp
+++ b/test/server.cpp
@@ -184,7 +184,7 @@ R"EXPECTEDRESULT( href="/ROOT/skin/index.css?cacheid=56e818cd"
src: url("/ROOT/skin/fonts/Roboto.ttf?cacheid=84d10248") format("truetype");
-
+
)EXPECTEDRESULT"
},
{