Some are useful, others are utterly useless.
But all are good fun.
A handy dictionary extension with eye-pleasing UI. Praised(Chrome review / Firefox review) and supported by hundreds of thousands of users.
Highlights in terms of functional design:
Highlights in terms of technical implementation:
React hooks for RxJS Observables with super flexible APIs.
Why:
Features:
PostCSS plugin that adds !important
to style declarations safely. Used and recommended by many large projects like Uppy, stylelint, vmd and HoverCards.
!important
to every declarations might break styles. This plugin will skip unnecessary declarations.A tiny library to encapsulate side effects in a compact, reusable and testable style.
Get browser extension(webextension) item meta from Chrome Web Store and Firefox add-ons. Used by Shields.io and Badgen.
Neutrino 9 preset for WebExtension development with hot reload and framework devtools.
Zero upfront configuration necessary to start developing and building a WebExtension.
Run development mode in a fake WebExtension environment which supports hot reload and framework devtools.
Webpack chunks are translated into manifest configs nicely.
Outputs are bundled for each browser respectively, with different manifest.
Works well with other official Neutrino presets.
WebExtension Target for Webpack 4. Supports code-splitting with native dynamic import.
Dynamically loading chunks is not possible in WebExtension content scripts with the default Webpack JSONP.
This library is also included in the neutrino-webextension preset.
A Hexo plugin that adds emoji support, using Github Emojis API.
With accessibility in mind, this plugin generates unicodes for emojis then makes the font transparent and displays emoji images with background-image
.
Lightweight React Component that reports width and height changes when its parent resizes.
Why:
Highlights:
Get text and context (sentence, paragraph...) from window.getSelection()
.
A technical blog following JAMstack architecture, based on GatsbyJS, a React Framework using GraphQL to manage resources. Post contents are managed on Netlify CMS. The whole site is delivered via Netlify network.
This is also an attempt to replace Class components with React Hooks, which brings great convenience and pleasant development experience.
Managing data and resources with GraphQL is also powerful and dead easy.
With Netlify CMS and Utterances, post files and comments are stored back to Github which reduces the dependency of third-party services.
Site logo are designed with illustrator. Social media icons are taken from NViconsLib 2, edited with Boxy SVG, merged with IcoMoon and compressed with SVGOMG.
Minimalist declarative type-safe(strongly-typed) scalable TypeScript Redux architecture.
React hooks that can make any data suspensible.
Why:
If you follow the Relay Suspense pattern you need to add wrappers to async logic then use read() to get data in Components.
This means:
read()
a piece of data, it means the data is "fetched" but not necessary "usable"(unless you write business logic in a conventional way to make sure they are the same). You still need to add logic to check e.g. variation/validation of the data.use-suspensible does not care how you implement the business logic. It only cares about if the data is usable or not. This makes it a universal solution for Suspense.
With use-suspensible you simply fetch and use data as usual/you like. It just works (with almost no cost).
Chrome / Firefox extension. Share Fanfou, Twitter and Weibo in one click.
chrome.identity
and content script magic.30-day vanilla JS coding challenge. Inspired by Wes Bos's JavaScript 30.
Some of my interesting ideas:
NUXT based static website.
With SSR generated static pages, DOM can be rendered before JavaScript loading, after which Vue will take over DOM manipulation and routing is controled by Vue-router.
为项目介绍抽象出共用部分,实现组件复用,每个项目介绍只需简单配置即可添加。
Common parts of each project description are abstracted and resued. Adding a new project description can be achieved with minimum configuration.
Nuxt-i18n overrides Nuxt default routes and adds locale prefixes to every URL. Description of each project is written in Markdown and transformed to HTML via markdown-loader.
A webpack loader that replaces module with empty function which can be eliminated with Webpack Tree Shaking.