diff --git a/options/store/searchPageGrid.css b/options/store/searchPageGrid.css
deleted file mode 100644
index 415dc56..0000000
--- a/options/store/searchPageGrid.css
+++ /dev/null
@@ -1,33 +0,0 @@
-.search_page #search_result_container #search_resultsRows {
- display: grid;
- grid-template-columns: repeat(3, 1fr);
-}
-
-
-
-/*
-& Card
-*/
-.search_page #search_result_container .search_result_row {
- flex-direction: column;
-}
-
-
-
-/*
-! Card
-*/
-/*** Content */
-.search_page #search_result_container .search_result_row .responsive_search_name_combined {
- gap: 6px 0;
- grid-template-areas:
- "title title title platforms"
- "reviews reviews price price"
- "release release price price" !important;
-}
-
-
-/*^ Release Date */
-.search_page #search_result_container .search_result_row .search_released {
- margin: 0 !important;
-}
\ No newline at end of file
diff --git a/skin.json b/skin.json
index 009c2c8..4e10007 100644
--- a/skin.json
+++ b/skin.json
@@ -403,7 +403,6 @@
-
"Library - Steam-Custom-Artworks Support": {
"description": "The best support for https://spacetheme.net/#steam-custom-artworks ",
"default": "no",
@@ -612,6 +611,10 @@
"TargetCss": "src/css/libraryroot.custom.css",
"TargetJs": "src/js/libraryroot.custom.js"
},
+ {
+ "MatchRegexString": "https://.*\\.steampowered\\.com(/.*)?",
+ "TargetJs": "src/js/webkit.js"
+ },
{
"MatchRegexString": "https://steamcommunity\\.com(/.*)?",
"TargetCss": "src/css/custom/custom.css",
diff --git a/src/css/webkit/store/search.css b/src/css/webkit/store/search.css
index ba612ce..c8cb3aa 100644
--- a/src/css/webkit/store/search.css
+++ b/src/css/webkit/store/search.css
@@ -66,6 +66,7 @@
! Top Controls
*/
.search_page .searchbar {
+ display: flex;
margin: 0;
padding: 12px;
border-radius: 8px 8px 0 0;
@@ -73,8 +74,11 @@
}
.search_page .searchbar .searchbar_left {
+ order: 1;
display: flex;
+ justify-content: flex-end;
height: 30px;
+ margin-left: auto;
padding: 0;
}
@@ -232,6 +236,51 @@
}
+/*** View */
+.search_page .st-search-view-toggle {
+ box-sizing: border-box;
+ display: flex;
+ gap: 4px;
+ width: fit-content;
+ height: 30px;
+ margin-left: 12px;
+}
+
+/*^ Button */
+.search_page .st-search-view-toggle .st-btn {
+ cursor: pointer;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding: 6px;
+ border-radius: 8px;
+}
+.search_page .st-search-view-toggle .st-btn.active {
+ background-color: rgb(var(--st-color-1));
+}
+
+/* SVG */
+.search_page .st-search-view-toggle .st-btn svg {
+ display: none;
+}
+
+/* Custom icon */
+.search_page .st-search-view-toggle .st-btn.active::before {
+ color: rgb(var(--st-accent-1)) !important;
+}
+
+.search_page .st-search-view-toggle .st-btn.list::before {
+ content: "\f07e2" !important;
+ font-size: 16px;
+ color: #dcdedf;
+}
+.search_page .st-search-view-toggle .st-btn.grid::before {
+ content: "\f467" !important;
+ font-size: 16px;
+ color: #dcdedf;
+}
+
+
/*
! Warning
*/
@@ -263,6 +312,11 @@
.search_page #search_result_container #search_resultsRows {
gap: 6px;
}
+.search_page.st-grid-view #search_result_container #search_resultsRows {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 12px;
+}
@@ -278,6 +332,9 @@
border-radius: 8px;
background-color: rgb(var(--st-color-2));
}
+.search_page.st-grid-view #search_result_container .search_result_row {
+ flex-direction: column;
+}
/** Image */
@@ -298,6 +355,13 @@
"reviews release price price";
justify-content: unset;
}
+.search_page.st-grid-view #search_result_container .search_result_row .responsive_search_name_combined {
+ gap: 6px;
+ grid-template-areas:
+ "title title title platforms"
+ "reviews reviews price price"
+ "release release price price" !important;
+}
/*^ Title */
.search_page #search_result_container .search_result_row .search_name {
@@ -330,6 +394,9 @@
line-height: 16px;
color: #a9a9a9;
}
+.search_page.st-grid-view #search_result_container .search_result_row .search_released {
+ margin: 0 !important;
+}
/*^ Price */
.search_page #search_result_container .search_result_row .search_price_discount_combined {
diff --git a/src/js/webkit.js b/src/js/webkit.js
index e69de29..9d2fcb1 100644
--- a/src/js/webkit.js
+++ b/src/js/webkit.js
@@ -0,0 +1,89 @@
+(async function() {
+ // should work only on search page
+ if (!window.location.pathname.startsWith('/search')) return;
+
+ const waitForElement = (selector, parent = document) => new Promise((resolve) => {
+ const el = parent.querySelector(selector);
+ if (el) resolve(el);
+
+ const observer = new MutationObserver(() => {
+ const el = parent.querySelector(selector);
+ if (!el) return;
+ resolve(el);
+ observer.disconnect();
+ });
+
+ observer.observe(document.body, {
+ subtree: true,
+ childList: true,
+ });
+ });
+
+ const containerParent = await waitForElement('.searchbar');
+ const searchResultsRows = await waitForElement('#search_resultsRows');
+ if (!containerParent) return;
+
+ const btnContainer = document.createElement('div');
+ btnContainer.className = 'st-search-view-toggle';
+
+ const listBtn = document.createElement('div');
+ listBtn.className = 'st-btn list';
+ listBtn.innerHTML = `
+
+ `;
+
+ const gridBtn = document.createElement('div');
+ gridBtn.className = 'st-btn grid';
+ gridBtn.innerHTML = `
+
+ `;
+
+ btnContainer.appendChild(listBtn);
+ btnContainer.appendChild(gridBtn);
+ if (searchResultsRows && searchResultsRows.parentElement === containerParent) {
+ containerParent.insertBefore(btnContainer, searchResultsRows);
+ } else {
+ containerParent.appendChild(btnContainer);
+ }
+
+
+ gridBtn.addEventListener('click', () => {
+ document.body.classList.add('st-grid-view');
+ localStorage.setItem('st-search-view', 'grid');
+ gridBtn.classList.add('active');
+ listBtn.classList.remove('active');
+ });
+
+ listBtn.addEventListener('click', () => {
+ document.body.classList.remove('st-grid-view');
+ localStorage.setItem('st-search-view', 'list');
+ listBtn.classList.add('active');
+ gridBtn.classList.remove('active');
+ });
+
+ if (localStorage.getItem('st-search-view') === 'list') {
+ document.body.classList.remove('st-grid-view');
+ listBtn.classList.add('active');
+ } else {
+ document.body.classList.add('st-grid-view');
+ gridBtn.classList.add('active');
+ }
+
+ const parentObserver = new MutationObserver(() => {
+ if (!document.body.contains(btnContainer)) {
+ const rows = searchResultsRows;
+ if (rows && rows.parentElement) {
+ rows.parentElement.insertBefore(btnContainer, rows);
+ return;
+ }
+ if (containerParent) {
+ containerParent.appendChild(btnContainer);
+ }
+ }
+ });
+
+ parentObserver.observe(containerParent, {
+ childList: true,
+ subtree: true
+ });
+})();