aigis-styleguide / aigis Goto Github PK
View Code? Open in Web Editor NEWCSS Styleguide Generator
Home Page: http://aigis-styleguide.github.io/aigis/
CSS Styleguide Generator
Home Page: http://aigis-styleguide.github.io/aigis/
大量にCSSがあった場合にlogで
[Info] Start: Generate Styleguide
は出力されるのですが
[Info] Finish: Generate Styleguide
が出力されずに終了してしまい出力先になにもできていない状態になってしまいます。
Startのログのあとに16ファイル分のログは出力されています。
through2-filterにhighWaterMark: 16というのがあったので何か関わりがあるのかと思ったのですが深くは追っていないです。
ご確認頂けると幸いです。
Sassdocのパーサー https://github.com/SassDoc/scss-comment-parser 使えばなんとかできそう。
@param
とかの対応しないとだめDoes aigis support SASS Syntax?
This is ignored.
/*!
---
name: Buttons
category:
- mod/btn
- base
tag:
- latest
- base
---
Button styles.
This is OK. But it is SASS syntax error.
/*!
---
name: Buttons
category:
- mod/btn
- base
tag:
- latest
- base
---
Button styles.
*/
Node: v6.1.0
npm: 3.8.6
aigis: 1.1.5
Thank you.
it will be semantic
Styling😆
I really like the template system in aigis. It allows quickly to adjust almost everything.
For my usecase I like to comment colors, mixins, variables that i use in my css setup.
And because these types of comments are a little different than I introduced a template option in the config:
/*
---
name: Colors
template: colors
category: Meta/Main Colors
colors:
- variable: "@test"
value: "#123456"
---
A color list
*/
With the help of the template config I could render the corresponding template based this config. So my components.ejs looks like this:
<% if(components.length) { %>
<nav>
<h2 class="aigis-module__heading">Components</h2>
<ul class="aigis-moduleList"><% components.forEach(function(component) { %>
<li class="aigis-moduleList__item">
<a href="#<%- component.config.name %>"><%- component.config.name %></a>
</li><% }) %>
</ul>
</nav>
<div><% components.forEach(function(component) { %>
<div class="aigis-module">
<% var template = ( component.config.template ) ? 'components/' + component.config.template : 'components/default' %>
<%- include( template, { component:component } ) %>
</div><% }) %>
</div>
<% } else { %>
<%- html %>
<% } %>
And an example colors.ejs template renders all the color variables:
<%- include( 'default-header', { component:component } ) %>
<% component.config.colors.forEach(function(color) { %>
<div class="aigis-colors">
<div class="blop" style="background-color: <%- color.value %>;"></div>
<div class="font" style="color: <%- color.value %>;">Aa</div>
<div class="variable"><%- color.variable %></div>
<div class="value"><%- color.value %></div>
</div>
<% })%>
<%- component.html %>
I think this approach allows to quickly add new types of components and or allows to setup more default components that have special render capabilities.
Just as an idea what could be done some outputs quickly stolen from https://holidaypirates.github.io/nucleus/index.html:
Color listing:
Mixin
What do you think of this Idea? should I provide a MR?
Indent in code sample had been disappeared in html/jade syntax.
/* --- name: Flexbox category: - Component/Flex tag: - util --- 表組みレイアウト ```html <div data-flexbox-grid> <div> 指定なし </div> <div> 指定なし </div> </div> ``` */## Note - The output for the code sample section is different from the example codes in repo. # env
Node: v4.4.5
npm: 3.10.1
aigis: 1.1.4 / 1.1.2 / 1.1.0 (works in 1.0.4)
node v0.12.6
npm 2.13.2
node-aigis 0.1.0
コードフェンス内に書いたHTMLで、インデントが4つある時に、改行するとプレビューエリアにコードが入ってしまう?のかも?
/*
---
name: test
category:
- test
---
```html
<div>bbb</div>
<div>aaa</div>
```
```html
<div>
<div>bbb</div>
<div>aaa</div>
</div>
```
```html
<div>
<div>bbb</div>
<div>aaa</div>
</div>
```
```html
<div>
<div>bbb</div>
<div>aaa</div>
</div>
```
*/
KSSみたいなやつ
config.yaml
name: test_project
source: ./static/css/sass.scss
format: yaml
dest: ./docs
dependencies:
- ./static
- ./doc_assets
template: ./custom_template
timestamp_format: YYYY/MM/DD/ HH:mm
highlight_theme: dracula
md_class:
heading:
- hoge
listitem:
- hogehoge
inject:
- html
- jade
- js
- coffee
highlight: true
index: ./styleguide.md
sass.scssの中身
sass.scss
と同じ階層にmoduleディレクトリを設置して、_mod.scss
を追加
@import 'module/mod';
実行時のエラー
[geckotang]$ node index.js
-------- target file --------
Error: file to import not found or unreadable: module/mod
Current dir:
at Object.module.exports.renderSync (/Users/geckotang/Desktop/Aigis/node_modules/node-sass/lib/index.js:409:22)
at sass (/Users/geckotang/Desktop/Aigis/lib/parser/sass.js:5:18)
at /Users/geckotang/Desktop/Aigis/lib/parser/css.js:22:40
at LazyWrapper.lazyValue [as value] (/Users/geckotang/Desktop/Aigis/node_modules/lodash/index.js:1147:28)
at baseWrapperValue (/Users/geckotang/Desktop/Aigis/node_modules/lodash/index.js:2750:25)
at LodashWrapper.wrapperValue (/Users/geckotang/Desktop/Aigis/node_modules/lodash/index.js:5730:14)
at LazyWrapper.lazyValue [as value] (/Users/geckotang/Desktop/Aigis/node_modules/lodash/index.js:1105:36)
at baseWrapperValue (/Users/geckotang/Desktop/Aigis/node_modules/lodash/index.js:2750:25)
at LodashWrapper.wrapperValue (/Users/geckotang/Desktop/Aigis/node_modules/lodash/index.js:5730:14)
at Aigis.parseCSS (/Users/geckotang/Desktop/Aigis/lib/parser/css.js:88:6)
at Aigis.setup (/Users/geckotang/Desktop/Aigis/lib/Aigis.js:45:27)
at Aigis._onEndLoadCSSFiles (/Users/geckotang/Desktop/Aigis/lib/Aigis.js:34:12)
at EventEmitter.listener (/Users/geckotang/Desktop/Aigis/node_modules/eventemitter2/lib/eventemitter2.js:251:10)
at EventEmitter.emit (/Users/geckotang/Desktop/Aigis/node_modules/eventemitter2/lib/eventemitter2.js:317:21)
at endLoadFiles (/Users/geckotang/Desktop/Aigis/lib/reader/css.js:47:14)
at DestroyableTransform.<anonymous> (/Users/geckotang/Desktop/Aigis/lib/reader/css.js:34:7)
at DestroyableTransform.EventEmitter.emit (events.js:117:20)
at /Users/geckotang/Desktop/Aigis/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js:965:16
at process._tickCallback (node.js:415:13)
source: ./style.css
dest: ./styleguide
dependencies:
- ./style.css
- ../highlight.css
- ../theme.css
[Info] Config File: /demo/demo1.yml
[Info] Start: Generate Styleguide
Unhandled rejection Error
at /demo/node_modules/node-aigis/lib/Aigis.js:85:17
at tryCatcher (/demo/node_modules/bluebird/js/main/util.js:26:23)
at Promise._settlePromiseFromHandler (/demo/node_modules/bluebird/js/main/promise.js:507:31)
at Promise._settlePromiseAt (/demo/node_modules/bluebird/js/main/promise.js:581:18)
at Promise._settlePromises (/demo/node_modules/bluebird/js/main/promise.js:697:14)
at Async._drainQueue (/demo/node_modules/bluebird/js/main/async.js:123:16)
at Async._drainQueues (/demo/node_modules/bluebird/js/main/async.js:133:10)
at Immediate.Async.drainQueues [as _onImmediate] (/demo/node_modules/bluebird/js/main/async.js:15:14)
at processImmediate [as _immediateCallback] (timers.js:383:17)
Output variable.html
variable_list
option.
コメントブロック内でマークダウンの[表示名][参照先]
を使用したい。
/*
---
name: moduleA
category:
- modules
---
please refer [moduleD][modules/moduleD] :)
*/
参考:https://github.com/trulia/hologram#referencing-other-components
Output module.html
.
module_list
option.
ファイルが増えるとヤバい
クライアントの軽めなハイライトに変更するかどうか
test
When I try to run ./node_modules/node-aigis/bin/aigis run -c ./aigis_config.yml
, I get the error: Cannot find module 'lodash/assign'
. This started happening in version 1.1.3. I tested version 1.1.1 and 1.1.2 and in both cases the style guide is generated without errors.
Hello !
First of all, awesome work on Aigis. It's a great styleguide generator, and we really enjoy using it.
Since Aigis is usable programmatically using
var aigis = new Aigis('path/to/config.yml');
aigis.run();
It would be nice to be able to pass the config as a JavaScript object instead of a string (the config path).
Something like :
var config = {
name: 'Examples Styleguide',
source: [ './css', './demo.md' ],
source_type: [ '.css', '.sass', '.scss', '.styl' ],
dest: './styleguide2',
dependencies: [ './aigis_assets', './css' ],
index: './index.md',
template_engine: 'ejs',
template_dir: './template_ejs',
log: false,
color_palette: true,
transform: [ 'html' ],
timestamp_format: 'YYYY/MM/DD HH:mm',
preview_class: 'aigis-preview',
component_dir: './html',
output_collection: [ 'category', 'tag' ],
highlight: true,
highlight_theme: 'monokai',
lang_prefix: 'language-',
helper_options: { disable_link_index: true }
};
var aigis = new Aigis(config);
aigis.run();
I personally needed it to be able to switch the build folder based on the current environnement.
I forked the repo and made a quick implementation of it : https://github.com/clementoriol/aigis
Two things to note
I'm opening this issue to start discussing this.
Is it something you would consider adding to Aigis ?
Should I open a Pull Request ?
Thanks
Windowsでは node-aigis 1.0.3 をインストールする際に、エラーが発生し、インストール出来ない
OS: Windows10 Pro 64bit
Node: 4.2.6
npm: 3.8.5
aigis: 1.0.3
https://pxgrid.github.io/aigis/
"View on GitHub" ボタンを押してもGitHubのページが開きませんでした。
WebKit以外では button>a
はリンクとして機能しないようです。(HTML5的にもinvalidです。)
aigis/docs seems missing link. You can see it is used on the following pages:
はじめまして。
いろいろスタイルガイドを試していて、こちらも触ってみたのですが、
なかなか Sass でうまくいかないので、原因箇所を探っていたら、
node-bourbon の mixin で @include している箇所があると動かないみたいです。
Hologram や kss では動いていたので、対応可能かどうかだけおしえていただけるとうれしいです。
↓ Translate to my poor English :)
Hi,
I had try aigis. It looks good to me.
But, Target file couldn't get.
I was searching for the point of problem. And I found it.
I using 'node-bourbon' and included mixin in scss files.
But, Hologram or kss, I could output.
So, If you have solution, please let me know.
Thanks.
OS Mac OS 10.11
gulp v3.8.11
gulp-sass v2.1.0
node-bourbon v4.2.3
node v4.2.2
Sass v3.4.10
First of all, nice project you have there!
Although, I noticed that e.g.
$red: #F21;
leads to two colors at the "All colors" overview: red
and #F21
.
Not a major issue, but it somehow makes the colors list impractical.
> @ aigis /usr/local/work/test-aigis
> aigis run
(node:25900) fs: re-evaluating native module sources is not supported. If you are using the graceful-fs module, please update it to a more recent version.
[Info] Config File: /usr/local/work/test-aigis/aigis_config.yml
[Info] Start: Generate Styleguide
(node) v8::ObjectTemplate::Set() with non-primitive values is deprecated
(node) and will stop working in the next major release.
==== JS stack trace =========================================
Security context: 0x11d054ac0dc1 <JS Object>#0#
1: .node [module.js:568] [pc=0xa7e370f45e4] (this=0x5530f41cce1 <an Object with map 0xe32784eae99>#1#,module=0x36e0d15ca829 <a Module with map 0xe32784186e1>#2#,filename=0x36e0d15ca801 <String[81]: /usr/local/work/test-aigis/node_modules/oniguruma/build/Release/onig_scanner.node>)
2: load [module.js:~447] [pc=0xa7e3706f0f6] (this=0x36e0d15ca829 <a Module with map 0xe32784186e1>#2#,filename=0x36e0d15ca801 <String[81]: /usr/local/work/test-aigis/node_modules/oniguruma/build/Release/onig_scanner.node>)
3: tryModuleLoad(aka tryModuleLoad) [module.js:415] [pc=0xa7e36d38c9d] (this=0x11d054a04189 <undefined>,module=0x36e0d15ca829 <a Module with map 0xe32784186e1>#2#,filename=0x36e0d15ca801 <String[81]: /usr/local/work/test-aigis/node_modules/oniguruma/build/Release/onig_scanner.node>)
4: _load [module.js:~381] [pc=0xa7e3704582a] (this=0x5530f41cc99 <JS Function Module (SharedFunctionInfo 0x3b78a3e25be9)>#3#,request=0x104cc94e3939 <String[34]: ../build/Release/onig_scanner.node>,parent=0x36e0d15c72e9 <a Module with map 0xe32784186e1>#4#,isMain=0x11d054a04299 <false>)
module=0x36e0d15c72e9 <a Module with map 0xe32784186e1>#4#,__filename=0x36e0d15c72c1 <String[66]: /usr/local/work/test-aigis/node_modules/oniguruma/lib/oniguruma.js>,__dirname=0x36e0d15c91d9 <String[53]: /usr/local/work/test-aigis/node_modules/oniguruma/lib>)
/local/work/test-aigis/node_modules/first-mate/lib/grammar.js:365] [pc=0xa7e370f3dfc] (this=0x36e0d15b9131 <an Object with map 0xa59b3807a69>#9#,exports=0x36e0d15b9131 <an Object with map 0xa59b3807a69>#9#,require=0x36e0d15c1259 <JS Function require (SharedFunctionInfo 0x3b78a3e56131)>#10#,module=0x36e0d15b90e1 <a Module with map 0xe32784186e1>#8#,__filename=0x36e0d15b90b9 <String[65]: /usr/local/work/test-aigis/node_modules/first-mate/lib/grammar.js>,__dirname=0x36e0d15c11f1 <String[54]: /usr/local/work/test-aigis/node_modules/first-mate/lib>)
a7e36d42986] (this=0x11d054a04189 <undefined>,path=0x104cc94be899 <String[9]: ./grammar>)
e25be9)>#3#,request=0x104cc94be849 <String[18]: ./grammar-registry>,parent=0x36e0d1536fa9 <a Module with map 0xe32784186e1>#16#,isMain=0x11d054a04299 <false>)
le with map 0xe32784186e1>#16#,filename=0x36e0d1536f81 <String[68]: /usr/local/work/test-aigis/node_modules/first-mate/lib/first-mate.js>)
548] [pc=0xa7e370b099f] (this=0x5530f41cce1 <an Object with map 0xe32784eae99>#1#,module=0x36e0d1443059 <a Module with map 0xe32784186e1>#19#,filename=0x36e0d1443031 <String[68]: /usr/local/work/test-aigis/node_modules/highlights/lib/highlights.js>)
string[2712]>#26#,filename=0x36e0d143ab31 <String[69]: /usr/local/work/test-aigis/node_modules/aigis-marked/lib/highlight.js>)
r/src/engine/base.js:24] [pc=0xa7e370b12de] (this=0x36e0d1405739 <an EJS_Renderer with map 0x1b9efd46cf31>#30#)
3301>#37#,queue=0x21556519bc99 <a Queue with map 0xe32784c30f1>#38#)
1: v8::Template::Set(v8::Local<v8::Name>, v8::Local<v8::Data>, v8::PropertyAttribute)
2: OnigScanner::Init(v8::Local<v8::Object>)
3: node::DLOpen(v8::FunctionCallbackInfo<v8::Value> const&)
4: v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&))
5: v8::internal::MaybeHandle<v8::internal::Object> v8::internal::(anonymous namespace)::HandleApiCallHelper<false>(v8::internal::Isolate*, v8::internal::(anonymous namespace)::BuiltinArguments<(v8::internal::BuiltinExtraArguments)1>)
6: v8::internal::Builtin_HandleApiCall(int, v8::internal::Object**, v8::internal::Isolate*)
7: 0xa7e36c0959b
8: 0xa7e370f45e4
(node) v8::ObjectTemplate::Set() with non-primitive values is deprecated
(node) and will stop working in the next major release.
==== JS stack trace =========================================
Security context: 0x11d054ac0dc1 <JS Object>#0#
1: .node [module.js:568] [pc=0xa7e370f45e4] (this=0x5530f41cce1 <an Object with map 0xe32784eae99>#1#,module=0x36e0d15ca829 <a Module with map 0xe32784186e1>#2#,filename=0x36e0d15ca801 <String[81]: /usr/local/work/test-aigis/node_modules/oniguruma/build/Release/onig_scanner.node>)
2: load [module.js:~447] [pc=0xa7e3706f0f6] (this=0x36e0d15ca829 <a Module with map 0xe32784186e1>#2#,filename=0x36e0d15ca801 <String[81]: /usr/local/work/test-aigis/node_modules/oniguruma/build/Release/onig_scanner.node>)
3: tryModuleLoad(aka tryModuleLoad) [module.js:415] [pc=0xa7e36d38c9d] (this=0x11d054a04189 <undefined>,module=0x36e0d15ca829 <a Module with map 0xe32784186e1>#2#,filename=0x36e0d15ca801 <String[81]: /usr/local/work/test-aigis/node_modules/oniguruma/build/Release/onig_scanner.node>)
4: _load [module.js:~381] [pc=0xa7e3704582a] (this=0x5530f41cc99 <JS Function Module (SharedFunctionInfo 0x3b78a3e25be9)>#3#,request=0x104cc94e3939 <String[34]: ../build/Release/onig_scanner.node>,parent=0x36e0d15c72e9 <a Module with map 0xe32784186e1>#4#,isMain=0x11d054a04299 <false>)
module=0x36e0d15c72e9 <a Module with map 0xe32784186e1>#4#,__filename=0x36e0d15c72c1 <String[66]: /usr/local/work/test-aigis/node_modules/oniguruma/lib/oniguruma.js>,__dirname=0x36e0d15c91d9 <String[53]: /usr/local/work/test-aigis/node_modules/oniguruma/lib>)
/local/work/test-aigis/node_modules/first-mate/lib/grammar.js:365] [pc=0xa7e370f3dfc] (this=0x36e0d15b9131 <an Object with map 0xa59b3807a69>#9#,exports=0x36e0d15b9131 <an Object with map 0xa59b3807a69>#9#,require=0x36e0d15c1259 <JS Function require (SharedFunctionInfo 0x3b78a3e56131)>#10#,module=0x36e0d15b90e1 <a Module with map 0xe32784186e1>#8#,__filename=0x36e0d15b90b9 <String[65]: /usr/local/work/test-aigis/node_modules/first-mate/lib/grammar.js>,__dirname=0x36e0d15c11f1 <String[54]: /usr/local/work/test-aigis/node_modules/first-mate/lib>)
a7e36d42986] (this=0x11d054a04189 <undefined>,path=0x104cc94be899 <String[9]: ./grammar>)
e25be9)>#3#,request=0x104cc94be849 <String[18]: ./grammar-registry>,parent=0x36e0d1536fa9 <a Module with map 0xe32784186e1>#16#,isMain=0x11d054a04299 <false>)
le with map 0xe32784186e1>#16#,filename=0x36e0d1536f81 <String[68]: /usr/local/work/test-aigis/node_modules/first-mate/lib/first-mate.js>)
548] [pc=0xa7e370b099f] (this=0x5530f41cce1 <an Object with map 0xe32784eae99>#1#,module=0x36e0d1443059 <a Module with map 0xe32784186e1>#19#,filename=0x36e0d1443031 <String[68]: /usr/local/work/test-aigis/node_modules/highlights/lib/highlights.js>)
string[2712]>#26#,filename=0x36e0d143ab31 <String[69]: /usr/local/work/test-aigis/node_modules/aigis-marked/lib/highlight.js>)
r/src/engine/base.js:24] [pc=0xa7e370b12de] (this=0x36e0d1405739 <an EJS_Renderer with map 0x1b9efd46cf31>#30#)
3301>#37#,queue=0x21556519bc99 <a Queue with map 0xe32784c30f1>#38#)
1: v8::Template::Set(v8::Local<v8::Name>, v8::Local<v8::Data>, v8::PropertyAttribute)
2: OnigScanner::Init(v8::Local<v8::Object>)
3: node::DLOpen(v8::FunctionCallbackInfo<v8::Value> const&)
4: v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&))
5: v8::internal::MaybeHandle<v8::internal::Object> v8::internal::(anonymous namespace)::HandleApiCallHelper<false>(v8::internal::Isolate*, v8::internal::(anonymous namespace)::BuiltinArguments<(v8::internal::BuiltinExtraArguments)1>)
6: v8::internal::Builtin_HandleApiCall(int, v8::internal::Object**, v8::internal::Isolate*)
7: 0xa7e36c0959b
8: 0xa7e370f45e4
I would like to create README file in markdown and show them both in Github and Aigis.
Do you have any function I can do it with single markdown file and still indexed in Aigis index list?
For example,
<pre>
<code class="lang-html">
<div class="aigis-codeblock aigis-codeblock--html">
<pre class="editor editor-colors">
<div class="line">...
になっていますが、
*1: http://www.w3.org/TR/html5/text-level-semantics.html#the-code-element
if css file use carriage return code, 'CRLF'(in windows).
I get generated code inserted '<p>*</p>'
every css modules.
<div class="aigis-module">
<h2 class="aigis-module__heading" id="Paragraph">
Paragraph
</h2>
<div class="aigis-module__filepath">
/test.scss
</div>
<ul class="aigis-tags">
</ul>
<div class="aigis-preview">
<p>test paragraph</p></div>
<pre><code class="lang-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>p</span><span class="token punctuation">></span></span>
test paragraph
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>p</span><span class="token punctuation">></span></span>
</code></pre>
<p>*</p>
</div>
I use LF, I get correct output.
Please corresponding CRLF code.
I can't build styleguide with aigis for Node.js 4.x.
It work on Node.js 0.12.x.
Is Node.js 4.x going to be supported in the near future?
Hi,
I've have tried to generate style guide with builtin "init" or even from the node-aigis examples folder, but everytime I got the wrong relative path in any sub-folder of components.
\node_modules.bin\styleguide\category\module\button\index.html
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<link href="../aigis_assets/css/highlight/monokai.css" rel="stylesheet">
<link href="../aigis_assets/css/theme.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
</head>
but should be <link href="../../../css/style.css" rel="stylesheet">
for example
Precondition: Everything out of the box, according to the docs - Windows 10
必要そう
also add comments...
書きたい
It will be easy to install.
If aigis_config.yml
lists an incorrect url under source:
, an unhandled rejection error is returned with no direct reference to the problem file (in this case, aigis_config.yml).
It could be good to communicate to the developer that aigis can't resolve the file path.
コメントブロックに記述するHTMLの量が長くなってくると、CSSを見るのが辛くなってくるので、HTML部分を外部化できるといいかもしれない。
KSSの場合は
// Buttons
//
// A majority of buttons in the site are built from the same base class.
//
// Markup: buttons.html
とすると、 buttons.html
を読み込んでくれる。
また、KSSの場合はhbs
も指定できる。
https://github.com/kss-node/kss-node/blob/master/demo/forms/forms.hbs
{{> "demo.forms.text.label-pairs" }}
という感じで、カテゴリとモジュール名を指定すると、そのモジュールのHTMLが読み込まれる。
この機能はあっても良いけど、なくてもいいかなと思う。(あったら使う)
Themes from http://prismjs.com require a root tag with:
code[class*="language-"],pre[class*="language-"]
But aigis generates the codeblocks with:
code[class*="lang-"],pre[class*="lang-"]
Sure a search and replace on the prism theme works but would be nice to include it without modification.
https://www.npmjs.com/package/handlebars-helper-prettify
同じのつかってるけど試してみる
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.