Sokker++ es una extensión ultraligera para Google Chrome y navegadores basados en Chromium, diseñada para inyectar analíticas avanzadas
翻译准备中
插件TypeScript · JavaScriptGitHub @manunoly自行安装运营者未确认
试用过了吗? 点一下就好,无需登录。
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
安装型项目无需部署域名也可验证。个人仓库可通过 GitHub 登录验证,组织仓库可使用上方的仓库验证文件。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗English · Español
Sokker++ is a Chromium extension that adds skill history and junior talent estimates to Sokker.org. It is an unofficial fan project, not affiliated with Sokker.
It uses TypeScript, native browser APIs, and local IndexedDB storage. Charts use Canvas without a charting library.
/app/squad/) green (increase) or red (decrease).<canvas> API, no heavy external libraries.The Manifest V3 content script separates same-origin API access (src/core/api.ts), IndexedDB persistence (src/core/repository.ts and src/core/juniorRepository.ts), synchronization (src/core/sync.ts and src/core/juniorSync.ts), and page integration (src/content/). The build uses Vite; runtime charts use the browser's Canvas API.
The source code is split to maximize testability and separation of concerns:
sokker-plus-plus/
├── manifest.json # Manifest V3 configuration
├── popup/ # Extension UI (Import/Export/manual Sync)
└── src/
├── content/ # DOM interaction (side effects)
│ ├── main.ts # Content script entry point
│ ├── observer.ts # MutationObserver for the Sokker SPA
│ ├── ui.ts # Visual table mutations
│ ├── tooltip.ts # First-team hover and focus lifecycle
│ ├── playerCard.ts # First-team summary, skill card, and weekly table
│ ├── playerLocale.ts # Ten first-team card languages
│ ├── i18n.ts # Incoming skill-label normalization
│ ├── juniorPage.ts # Eligible routes and junior-name interaction
│ ├── juniorCard.ts # Local-data hover card
│ └── juniorLocale.ts # Ten UI languages with English fallback
├── core/ # Business logic and data
│ ├── api.ts # Pure fetchers for sokker.org/api (same origin)
│ ├── repository.ts # Functional IndexedDB wrapper (closures)
│ ├── sync.ts # Orchestrator: compares weeks and decides what to fetch
│ ├── gapDetector.ts # Detects missing weeks in the history
│ ├── talent.ts # Focused per-skill training counts
│ ├── playerTimeline.ts # Report weeks and observed skill levels
│ ├── levelTrend.ts # Shared regression math
│ ├── juniorSync.ts # Weekly junior queue and roster decisions
│ ├── juniorRepository.ts # Junior records in the shared IndexedDB
│ ├── juniorTalent.ts # Junior curve estimate
│ └── trainingReport.ts # Per-player training report
├── types/ # Shared TypeScript types
├── ui-components/ # Pure presentation
│ ├── playerSkillCanvas.ts # First-team skill chart (Canvas API)
│ ├── playerSkillExport.ts # First-team PNG adapter
│ ├── chartExport.ts # Shared PNG compositor
│ └── juniorCanvas.ts # Junior chart (Canvas API)
└── utils/ # Utilities
├── scheduleIdle.ts # Schedules work during idle time
└── escapeHtml.ts # Escapes values rendered as HTML
npm ci # install dependencies
npm run dev # build in watch mode
npm run build # generates dist/ (load it as "unpacked" in chrome://extensions)
npm run package # build + zip dist/ into documentation/sokker-plus-plus.zip
npx vitest run # tests
npx tsc --noEmit # typecheck
npm run package currently needs POSIX rm and zip; on Windows use a shell that provides them. Loading dist/ only needs npm run build.