hiendv / octicons-modular Goto Github PK
View Code? Open in Web Editor NEWGitHub Octicons with tree-shaking support and icon-per-file style.
License: MIT License
GitHub Octicons with tree-shaking support and icon-per-file style.
License: MIT License
I'm planning on a dev script npm run dev
which should perform
./src
, ./build
, ./test
directorieslint
script when files are changedThe dependencies should be minimal. You may want to use nodemon
.
Just want to clarify a little bit so newcomers won't waste their time there.
The current code coverage
----------------------------|----------|----------|----------|----------|----------------|
File | % Stmts | % Branch | % Funcs | % Lines |Uncovered Lines |
----------------------------|----------|----------|----------|----------|----------------|
All files | 24.6 | 0.73 | 13.06 | 24.6 | |
lib | 100 | 80 | 100 | 100 | |
main.common.js | 100 | 80 | 100 | 100 | 5 |
lib/icons | 18.98 | 0.51 | 12.99 | 18.98 | |
alert.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
arrow-down.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
arrow-left.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
arrow-right.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
arrow-small-down.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
arrow-small-left.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
arrow-small-right.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
arrow-small-up.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
arrow-up.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
beaker.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
bell.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
bold.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
book.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
bookmark.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
briefcase.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
broadcast.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
browser.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
bug.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
calendar.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
check.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
checklist.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
chevron-down.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
chevron-left.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
chevron-right.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
chevron-up.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
circle-slash.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
circuit-board.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
clippy.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
clock.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
cloud-download.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
cloud-upload.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
code.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
comment-discussion.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
comment.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
credit-card.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
dash.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
dashboard.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
database.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
desktop-download.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
device-camera-video.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
device-camera.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
device-desktop.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
device-mobile.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
diff-added.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
diff-ignored.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
diff-modified.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
diff-removed.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
diff-renamed.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
diff.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
ellipsis.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
eye.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
file-binary.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
file-code.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
file-directory.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
file-media.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
file-pdf.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
file-submodule.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
file-symlink-directory.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
file-symlink-file.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
file-text.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
file-zip.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
file.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
flame.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
fold.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
gear.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
gift.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
gist-secret.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
gist.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
git-branch.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
git-commit.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
git-compare.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
git-merge.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
git-pull-request.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
globe.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
grabber.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
graph.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
heart.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
history.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
home.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
horizontal-rule.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
hubot.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
inbox.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
info.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
issue-closed.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
issue-opened.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
issue-reopened.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
italic.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
jersey.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
kebab-horizontal.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
kebab-vertical.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
key.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
keyboard.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
law.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
light-bulb.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
link-external.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
link.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
list-ordered.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
list-unordered.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
location.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
lock.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
logo-gist.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
logo-github.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
mail-read.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
mail-reply.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
mail.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
mark-github.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
markdown.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
megaphone.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
mention.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
milestone.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
mirror.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
mortar-board.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
mute.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
no-newline.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
note.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
octoface.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
organization.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
package.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
paintcan.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
pencil.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
person.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
pin.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
plug.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
plus-small.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
plus.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
primitive-dot.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
primitive-square.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
project.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
pulse.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
question.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
quote.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
radio-tower.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
reply.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
repo-clone.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
repo-force-push.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
repo-forked.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
repo-pull.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
repo-push.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
repo.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
rocket.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
rss.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
ruby.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
screen-full.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
screen-normal.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
search.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
server.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
settings.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
shield.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
sign-in.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
sign-out.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
smiley.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
squirrel.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
star.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
stop.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
sync.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
tag.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
tasklist.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
telescope.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
terminal.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
text-size.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
three-bars.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
thumbsdown.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
thumbsup.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
tools.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
trashcan.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
triangle-down.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
triangle-left.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
triangle-right.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
triangle-up.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
unfold.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
unmute.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
unverified.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
verified.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
versions.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
watch.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
x.js | 18.52 | 0 | 12.5 | 18.52 |... 51,52,53,56 |
zap.js | 100 | 90 | 100 | 100 | 34 |
----------------------------|----------|----------|----------|----------|----------------|
Here is a quick draft
<template>
<span v-html="icon.svg({ scale: scale })"></span>
</template>
<script>
export default {
name: 'Octicon',
props: {
icon: {
type: Object,
default () {
return {
svg () {
return
}
}
},
validator (value) {
return typeof value.svg === 'function'
}
},
scale: {
type: Number,
default () {
return 1
}
}
}
}
</script>
The component should be rolled using rollup-plugin-vue
with the help from the transform-require
module
const transformRequire = require('vue-loader/lib/template-compiler/modules/transform-require')
vue({
compileOptions: {
modules: [transformRequire({})]
}
...
})
The build process expects babel-cli
to be available:
npm run build
> [email protected] build /Users/piotrblazejewicz/git/octicons-modular
> npm run clean && babel-node --presets env build/modulize.js && npm run lint && babel-node --presets env build/build.js && npm test
> [email protected] clean /Users/piotrblazejewicz/git/octicons-modular
> rimraf lib/* && rimraf src/icons/* && rimraf src/octicons.js
sh: babel-node: command not found
npm ERR! file sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn
npm ERR! [email protected] build: `npm run clean && babel-node --presets env build/modulize.js && npm run lint && babel-node --presets env build/build.js && npm test
This can be fixed by adding babel-cli
as dev dependency, unless there is an expectation that users have babel-cli
installed globally.
node --version
v8.4.0
npm --version
5.4.1
macOS
> jest
FAIL test/icons.test.js
● octicons › zap › svg › returns a svg with an addional class
expect(received).toBe(expected)
Expected value to be (using ===):
"<svg version=\"1.1\" width=\"10\" height=\"16\" viewBox=\"0 0 10 16\" class=\"octicon octicon-zap an-additional-class\" aria-hidden=\"true\" ><path fill-rule=\"evenodd\" d=\"M10 7H6l3-7-9 9h4l-3 7z\"/></svg>"
Received:
"<svg version=\"1.1\" width=\"10\" height=\"16\" viewBox=\"0 0 10 16\" class=\"an-additional-class an-additional-class\" aria-hidden=\"true\" ><path fill-rule=\"evenodd\" d=\"M10 7H6l3-7-9 9h4l-3 7z\"/></svg>"
at Object.<anonymous> (test/icons.test.js:22:59)
We need more unit tests with
We need more tests with the ES module. For now, only alert
icon is tested.
octicons-modular/test/es.test.js
Lines 6 to 19 in a9ddbdd
It's better to have a website with demo using GitHub Pages.
Planning on the splitting of components in v3 milestones into smaller libraries.
Icon scales to the default value when I set scale between 0 and 1.
alert.svg({ scale: .5 })
I think, the issue is here:
// any icon source file generated from icon.hbs template
...
attrScale (attrs, scale) {
let actualScale = scale === 0 ? 0 : parseInt(scale) || 1 // ?
attrs['width'] = actualScale * parseInt(attrs['width'])
attrs['height'] = actualScale * parseInt(attrs['height'])
delete attrs['scale']
},
...
For example:
parseInt(.6) // returns 0
parseInt(1.99) // returns 1
I'm already fix it in my forked repository: link
If my solution is right, it may be able to pull request. All icon sources was rebuilt using the new template on fix-float-sclae
branch.
Effortless tests with icons
There are 6374 lines of code in icons.test.js
We could create another fixture containing paths exported from octicons/build/data
because the path is the only variable.
Icons should be pure objects instead of a result from the factory call.
module.exports = {
//
};
var icon = factory(name, data);
module.exports = icon;
Eliminate factory and improve icon template.
I'm trying to accomplish tree-shaking but it doesn't work.
{ 'octicons-modular': '0.3.1',
npm: '5.4.2',
ares: '1.10.1-DEV',
http_parser: '2.7.0',
icu: '57.1',
modules: '48',
node: '6.9.4',
openssl: '1.0.2j',
uv: '1.9.1',
v8: '5.1.281.89',
zlib: '1.2.8' }
Make it work in browsers! It's quite easy with the help from Rollup. Let's go.
npm run dev
command not found
git clone https://github.com/hiendv/octicons-modular.git && cd octicons-modular
npm install
npm run dev
# Build?
npm run build
# Patch and release?
npm run version-patch && npm run publish
"scripts": {
"test": "jest",
"lint": "eslint --ext .js *.js ./src ./build ./test",
"clean": "rimraf lib/* && rimraf src/icons/* && rimraf src/octicons.js",
"build": "npm run clean && babel-node build/modulize.js && npm run lint && babel-node build/build.js && npm test",
"publish-meta": "cp -rf package.json lib/package.json && cp -rf README.md lib/README.md && cp -rf LICENSE lib/LICENSE",
"publish": "npm test && npm run publish-meta && cd lib && npm publish",
"version-patch": "rimraf package-lock.json && npm version patch"
},
➜ octicons-modular (master) ✗ npm run dev
npm ERR! Darwin 16.4.0
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "run" "dev"
npm ERR! node v6.11.3
npm ERR! npm v3.10.10
npm ERR! missing script: dev
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR! <https://github.com/npm/npm/issues>
npm ERR! Please include the following file with any support request:
npm ERR! /Users/george/Desktop/Projects/octicons-modular/npm-debug.log
➜ octicons-modular (master) ✗
Current: main.esm.js
Expected: main.es.js
We need tests with
octicons-modular/test/icons.test.js
Lines 197 to 203 in 03e2d7e
For now, only alert
icon is tested.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.