commit b2756a80c70b1de5f8412e307c4e847fbd86f19c
parent 2a18b44ed7862e77193d1feb41a6e2bf24de8c99
Author: Amit Dutta <amitdutta4255@gmail.com>
Date: Wed, 1 Jul 2026 20:53:22 +0530
updated algolia
Diffstat:
7 files changed, 35 insertions(+), 372 deletions(-)
diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts
@@ -1,6 +1,5 @@
import { defineConfig } from 'vitepress'
import { withSidebar } from 'vitepress-sidebar'
-import { withPwa } from '@vite-pwa/vitepress'
const vitePressConfig = {
title: 'BSc Code Index',
@@ -26,7 +25,6 @@ const vitePressConfig = {
['meta', { name: 'twitter:card', content: 'summary' }],
['meta', { name: 'twitter:title', content: 'BSc Code Index' }],
['meta', { name: 'twitter:description', content: 'C programming assignments, indexed and documented.' }],
- ['script', {}, `if (typeof window !== 'undefined') localStorage.setItem('vitepress:local-search-detailed-list', 'true');`]
] as [string, any][],
sitemap: {
@@ -83,9 +81,35 @@ const vitePressConfig = {
search: {
provider: 'algolia',
options: {
- appId: '5PYB0FB4RG', // paste your Application ID here
- apiKey: '51d9424f9480f1a3efd0d07f023c4a12', // paste your Search API Key here
- indexName: 'bsc code index', // find this in your Crawler config / DocSearch dashboard
+ appId: '5PYB0FB4RG',
+ apiKey: '51d9424f9480f1a3efd0d07f023c4a12',
+ indexName: 'bsc code index',
+ placeholder: 'Search programs...',
+ insights: true,
+ searchParameters: {
+ restrictSearchableAttributes: [
+ 'hierarchy.lvl0',
+ 'hierarchy.lvl1',
+ 'hierarchy.lvl2',
+ 'content'
+ ],
+ },
+ translations: {
+ button: {
+ buttonText: 'Search programs...',
+ buttonAriaLabel: 'Search programs',
+ },
+ modal: {
+ searchBox: {
+ clearButtonTitle: 'Clear search query',
+ closeButtonText: 'Cancel',
+ },
+ noResultsScreen: {
+ noResultsText: 'No programs found for',
+ suggestedQueryText: 'Try searching for a different problem statement',
+ }
+ }
+ }
}
},
@@ -143,33 +167,6 @@ const vitePressConfig = {
dark: 'github-dark'
} as any
},
-
- pwa: {
- outDir: '.vitepress/dist',
- registerType: 'autoUpdate' as 'autoUpdate',
- includeAssets: ['logo.svg', 'logo_192.png', 'logo_512.png'],
- manifest: {
- name: 'BSc Code Index',
- short_name: 'BSc Code',
- description: 'C programming assignments, indexed and documented.',
- theme_color: '#ffffff',
- icons: [
- {
- src: '/logo_192.png',
- sizes: '192x192',
- type: 'image/png'
- },
- {
- src: '/logo_512.png',
- sizes: '512x512',
- type: 'image/png'
- }
- ]
- },
- workbox: {
- globPatterns: ['**/*.{css,js,html,svg,png,ico,txt,woff2}'],
- }
- }
}
const sidebarConfig = {
@@ -188,4 +185,4 @@ const sidebarConfig = {
capitalizeFirst: true,
}
-export default withPwa(defineConfig(withSidebar(vitePressConfig, sidebarConfig)))-
\ No newline at end of file
+export default defineConfig(withSidebar(vitePressConfig, sidebarConfig))+
\ No newline at end of file
diff --git a/docs/.vitepress/theme/components/RefreshCacheButton.vue b/docs/.vitepress/theme/components/RefreshCacheButton.vue
@@ -1,126 +0,0 @@
-<template>
- <div class="refresh-wrapper">
- <button class="nav-refresh-btn" @click="clearAndReload" :disabled="busy" aria-label="Clear cache and refresh" title="Force refresh (clears cache)">
- <svg
- class="icon refresh-icon"
- :class="{ spinning: busy, hidden: done }"
- xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24"
- fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
- >
- <path d="M21 12a9 9 0 1 1-2.64-6.36"/>
- <polyline points="21 3 21 9 15 9"/>
- </svg>
- <svg
- class="icon check-icon"
- :class="{ visible: done }"
- xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24"
- fill="none" stroke="#22c55e" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"
- >
- <path d="M4 12l5 5L20 6" stroke-dasharray="24" :stroke-dashoffset="done ? 0 : 24"/>
- </svg>
- </button>
- </div>
-</template>
-
-<script setup>
-import { ref } from 'vue'
-
-const busy = ref(false)
-const done = ref(false)
-
-async function clearAndReload() {
- if (busy.value) return
- busy.value = true
-
- try {
- if ('serviceWorker' in navigator) {
- const registrations = await navigator.serviceWorker.getRegistrations()
- await Promise.all(registrations.map(r => r.unregister()))
- }
-
- if ('caches' in window) {
- const keys = await caches.keys()
- await Promise.all(keys.map(key => caches.delete(key)))
- }
-
- busy.value = false
- done.value = true
-
- setTimeout(() => {
- window.location.reload()
- }, 500)
- } catch (e) {
- busy.value = false
- console.error('Cache clear failed:', e)
- }
-}
-</script>
-
-<style scoped>
-.refresh-wrapper {
- display: inline-flex;
- align-items: center;
- margin-left: 8px;
-}
-
-.nav-refresh-btn {
- position: relative;
- width: 30px;
- height: 30px;
- display: flex;
- align-items: center;
- justify-content: center;
- border: none;
- background: transparent;
- cursor: pointer;
- border-radius: 50%;
- transition: background-color 0.2s;
-}
-
-.nav-refresh-btn:hover {
- background-color: #6e7fff2a;
-}
-
-.nav-refresh-btn:hover .refresh-icon {
- color: #dde0ff;
-}
-
-.icon {
- position: absolute;
- transition: opacity 0.2s ease, transform 0.2s ease;
-}
-
-.refresh-icon {
- color: var(--vp-c-text-2);
- opacity: 1;
- transform: scale(1) rotate(0deg);
-}
-
-.refresh-icon.hidden {
- opacity: 0;
- transform: scale(0.5);
-}
-
-.refresh-icon.spinning {
- animation: spin 0.8s linear infinite;
-}
-
-@keyframes spin {
- from { transform: rotate(0deg); }
- to { transform: rotate(360deg); }
-}
-
-.check-icon {
- opacity: 0;
- transform: scale(0.5);
-}
-
-.check-icon.visible {
- opacity: 1;
- transform: scale(1);
-}
-
-.check-icon path {
- transition: stroke-dashoffset 0.35s ease;
-}
-</style>-
\ No newline at end of file
diff --git a/docs/.vitepress/theme/components/ReloadPrompt.vue b/docs/.vitepress/theme/components/ReloadPrompt.vue
@@ -1,161 +0,0 @@
-<script setup lang="ts">
-import { ref, onMounted, watch } from 'vue'
-
-const needRefresh = ref(false)
-let _updateServiceWorker: ((reloadPage?: boolean) => Promise<void>) | null = null
-
-const close = () => { needRefresh.value = false }
-const reload = () => {
- if (_updateServiceWorker) _updateServiceWorker(true)
- else window.location.reload()
-}
-
-onMounted(async () => {
- const { useRegisterSW } = await import('virtual:pwa-register/vue')
- const { needRefresh: nr, updateServiceWorker } = useRegisterSW()
- _updateServiceWorker = updateServiceWorker
- needRefresh.value = nr.value
- watch(nr, (val) => { needRefresh.value = val })
-})
-</script>
-
-<template>
- <Transition name="toast">
- <div v-if="needRefresh" class="toast" role="status" aria-live="polite">
- <div class="toast-inner">
- <div class="toast-main">
- <span class="toast-heading">Update available</span>
- <p class="toast-sub">A new version of BSc Code Index is ready.</p>
- </div>
- <div class="toast-actions">
- <button class="btn-reload" @click="reload">Reload</button>
- <button class="btn-cancel" @click="close" aria-label="Dismiss">
- <svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none"
- stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
- <line x1="18" y1="6" x2="6" y2="18"/>
- <line x1="6" y1="6" x2="18" y2="18"/>
- </svg>
- </button>
- </div>
- </div>
- </div>
- </Transition>
-</template>
-
-<style scoped>
-.toast {
- position: fixed;
- bottom: 24px;
- left: 24px;
- z-index: 100000;
- width: 300px;
- background: var(--vp-c-bg);
- border: 1px solid var(--vp-c-divider);
- border-radius: 10px;
- box-shadow: 0 4px 24px rgba(0, 0, 0, 0.15), 0 1px 4px rgba(0, 0, 0, 0.08);
- overflow: hidden;
-}
-
-.toast-inner {
- display: flex;
- align-items: center;
- gap: 12px;
- padding: 14px 12px 14px 16px;
-}
-
-.toast-main {
- flex: 1;
- min-width: 0;
-}
-
-.toast-heading {
- display: block;
- font-size: 0.8125rem;
- font-weight: 600;
- color: var(--vp-c-text-1);
- margin-bottom: 2px;
-}
-
-.toast-sub {
- font-size: 0.75rem;
- color: var(--vp-c-text-2);
- margin: 0;
- line-height: 1.4;
-}
-
-.toast-actions {
- display: flex;
- align-items: center;
- gap: 6px;
- flex-shrink: 0;
-}
-
-.btn-reload {
- padding: 5px 12px;
- border-radius: 6px;
- font-size: 0.8rem;
- font-weight: 600;
- cursor: pointer;
- background: var(--vp-c-brand-1);
- color: #fff;
- border: none;
- transition: opacity 0.15s;
-}
-
-.btn-reload:hover {
- opacity: 0.85;
-}
-
-.btn-cancel {
- display: inline-flex;
- align-items: center;
- justify-content: center;
- width: 22px;
- height: 22px;
- background: none;
- border: none;
- cursor: pointer;
- color: var(--vp-c-text-3);
- border-radius: 4px;
- transition: background 0.15s, color 0.15s;
- padding: 0;
-}
-
-.btn-cancel:hover {
- background: var(--vp-c-bg-alt);
- color: var(--vp-c-text-1);
-}
-
-.toast-enter-active {
- transition: opacity 0.2s ease, transform 0.25s cubic-bezier(0.22, 1, 0.36, 1);
-}
-.toast-leave-active {
- transition: opacity 0.15s ease, transform 0.2s ease;
-}
-.toast-enter-from {
- opacity: 0;
- transform: translateY(12px) scale(0.97);
-}
-.toast-leave-to {
- opacity: 0;
- transform: translateY(6px) scale(0.97);
-}
-
-@media (max-width: 480px) {
- .toast {
- bottom: 0;
- left: 0;
- right: 0;
- width: 100%;
- border-radius: 12px 12px 0 0;
- border-bottom: none;
- padding-bottom: env(safe-area-inset-bottom, 0px);
- }
-
- .toast-enter-from,
- .toast-leave-to {
- transform: translateY(100%);
- opacity: 1;
- }
-}
-</style>-
\ No newline at end of file
diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts
@@ -1,14 +1,11 @@
import { h, Fragment } from 'vue'
import DefaultTheme from 'vitepress/theme'
import type { Theme } from 'vitepress'
-import CodePage from './CodePage.vue'
import Banner from './components/Banner.vue'
import Footer from './components/Footer.vue'
import SponsorButton from './components/SponsorButton.vue'
import ExternalLinkWarning from './components/ExternalLinkWarning.vue'
-import ReloadPrompt from './components/ReloadPrompt.vue'
import CopyLinkButton from './components/CopyLinkButton.vue'
-import RefreshCacheButton from './components/RefreshCacheButton.vue'
import './style.css'
export default {
@@ -18,15 +15,11 @@ export default {
return h(DefaultTheme.Layout, null, {
'layout-bottom': () => h(Fragment, [
h(Banner),
- h(ExternalLinkWarning),
- h(ReloadPrompt)
+ h(ExternalLinkWarning)
]),
'doc-before': () => h(CopyLinkButton),
'doc-after': () => h(Footer),
- 'nav-bar-content-after': () => h(Fragment, [
- h(RefreshCacheButton),
- h(SponsorButton)
- ])
+ 'nav-bar-content-after': () => h(SponsorButton)
})
}
} satisfies Theme
\ No newline at end of file
diff --git a/docs/.vitepress/theme/style.css b/docs/.vitepress/theme/style.css
@@ -229,23 +229,6 @@
transition: border-color 0.2s;
}
-@media (max-width: 767px) {
- .sponsor-button span {
- display: none;
- }
-
- .sponsor-button {
- padding: 6px;
- width: 30px;
- height: 30px;
- border-radius: 50%;
- background-color: rgba(255, 71, 114, 0.12);
- display: flex;
- align-items: center;
- justify-content: center;
- }
-
- .sponsor-button .heart-icon {
- margin: 0;
- }
+.DocSearch-NoResults-Prefill-List {
+ display: none !important;
}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
@@ -5,7 +5,6 @@
"packages": {
"": {
"devDependencies": {
- "@vite-pwa/vitepress": "^1.1.0",
"markdown-it-mathjax3": "^4.3.2",
"vite-plugin-pwa": "^1.3.0",
"vitepress": "^1.6.4",
@@ -3029,25 +3028,6 @@
"dev": true,
"license": "ISC"
},
- "node_modules/@vite-pwa/vitepress": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@vite-pwa/vitepress/-/vitepress-1.1.0.tgz",
- "integrity": "sha512-enif5C2JmepS69Ak7PSr6K3Eimsg7VyryZo1Z6NiIPNDnjXFlOqxwBYaq8R/d0M7akArJsjos7KmQnEfNFf5nA==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- },
- "peerDependencies": {
- "@vite-pwa/assets-generator": "^1.0.0",
- "vite-plugin-pwa": "^1.2.0"
- },
- "peerDependenciesMeta": {
- "@vite-pwa/assets-generator": {
- "optional": true
- }
- }
- },
"node_modules/@vitejs/plugin-vue": {
"version": "5.2.4",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz",
diff --git a/package.json b/package.json
@@ -1,6 +1,5 @@
{
"devDependencies": {
- "@vite-pwa/vitepress": "^1.1.0",
"markdown-it-mathjax3": "^4.3.2",
"vite-plugin-pwa": "^1.3.0",
"vitepress": "^1.6.4",