bsc

Comprehensive codebase and cou...
Log | Files | Refs | README | LICENSE

commit b2756a80c70b1de5f8412e307c4e847fbd86f19c
parent 2a18b44ed7862e77193d1feb41a6e2bf24de8c99
Author: Amit Dutta <amitdutta4255@gmail.com>
Date:   Wed,  1 Jul 2026 20:53:22 +0530

updated algolia

Diffstat:
Mdocs/.vitepress/config.mts | 65+++++++++++++++++++++++++++++++----------------------------------
Ddocs/.vitepress/theme/components/RefreshCacheButton.vue | 127-------------------------------------------------------------------------------
Ddocs/.vitepress/theme/components/ReloadPrompt.vue | 162-------------------------------------------------------------------------------
Mdocs/.vitepress/theme/index.ts | 11++---------
Mdocs/.vitepress/theme/style.css | 21++-------------------
Mpackage-lock.json | 20--------------------
Mpackage.json | 1-
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",
© notamitgamer • Site Built: 2026-07-21 13:58:23 UTC • git-mirror commit: 1037f62 [view raw info]
Originally created with stagit • modified by notamitgamer
Forked from github.com/notamitgamer/git-mirror