Coder Social home page Coder Social logo

meethigher / hexo-theme-starry Goto Github PK

View Code? Open in Web Editor NEW
22.0 1.0 2.0 48.98 MB

已被官方收录的hexo主题-Starry,采用ejs跟less开发。技术限制,目前还有很多优化未实现,学习ing。基于很多大佬开源的插件,感谢!

Home Page: https://meethigher.top/blog/2020/starry2-0/

HTML 1.41% JavaScript 26.13% Less 21.74% EJS 10.40% CSS 40.33%
hexo hexo-theme

hexo-theme-starry's Introduction

hexo-theme-starry

采用 EjsLess 开发,没什么复杂的技术和逻辑,代码写得也很简单,但是不规范。

只是因为不想用别人的主题,由此诞生了我这一个。目前还不知道如何更好地优化,努力学习中...

使用

Instructions

  1. English
  2. 中文

更新

  • 2023-04-17:表格支持左右滑动

  • 2023-04-08:激活的标题,在大纲目录中始终展示在视口内

  • 2023-03-16:新增转载提示、样式调整(代码框间距、字段间距、h间距、列表间距等)

  • 2022-11-21:博客内容展示页调整

    1. 调整水平间距、行间距
    2. 调整代码块字体,代码块复制文字替换成图标
    3. 标题栏添加动态效果(以往的标题与常规字体不易区分)
  • 2022-10-30:图片点击全屏展示,支持pc端与移动端图片的自由缩放(基于fengyuanchen/viewerjs: JavaScript image viewer.

  • 2022-10-27:代码块右侧顺序栏禁用选中

  • 2022-10-14:锚点跳转不改变url

  • 2022-10-11:添加sitemap

  • 2022-10-10:复制时移除多加的换行符

  • 2022-08-28:使用mathjax支持数学公式的渲染,参考在Hexo中使用MathJax插入数学公式 | Mob's Blog

  • 2022-08-28:无新增功能,仅去除冗余内容

  • 2022-05-21:图片点击全屏展示

  • 2022-03-07:升级gitalk版本到1.7.2

  • 2022-02-09:将jsdelivr托管的css与js替换为本地的css与js。如今服务器带宽提上来了,没必要使用cdn了。

  • 2021-09-20:添加referer来源,配合统计器

  • 2021-09-18:1. 修改代码块字体格式 2. 添加快捷键全局搜索

  • 2021-07-23:修改请求统计的js为加载到js就进行统计。之前是所有页面资源加载完才统计,影响观感。

  • 2021-07-19:弃用不蒜子,改用自己实现的统计器

  • 2021-02-10:之前的标签云按时间排序,修改内部代码为按名称排序,便于检索

  • 2021-02-08:增加图片点击跳转(PS:想一巴掌拍死自己,代码写的是一坨屎)

  • 2021-01-24:使代码块可以自由复制,添加不兼容Safari弹窗提示

  • 2021-01-13:优化:修改评论提示文案、去掉大纲目录下划线、优化打赏按钮

  • 2020-07-21:添加404页面

  • 2020-07-06:优化keyword和description,优化懒加载效果

  • 2020-05-25:优化本地内容加载过程动画

  • 2020-04-21:发布Starry2.0

    1. 放弃rem布局,采用响应式布局
    2. 增加打赏跟分享功能
    3. 修复ios滑动瞬间白屏bug
    4. 优化使更容易被收录
    5. 增加评论与文章置顶功能
    6. 删除一些冗余功能,使更简洁
    7. 增加侧边栏组件,返回顶部和底部、下载app、目录大纲
  • 2019-12-03:增加站内全局搜索

  • 2019-11-13:修改主题为24小时制

  • 2019-11-08:增加访问量

  • 2019-11-07:修改移动端中英文代码块高度不一致问题

  • 2019-11-04:修改代码块样式

  • 2019-11-02:发布Starry1.0

    1. rem布局
    2. 首页、标签、归档、关于功能

注意事项

因为当时开发的时候,使用的是hexo3.9旧版的插件,所以一直没有进行插件的更新,我自己目前仍然使用的旧版。也并没有计划更新最新版的计划,现在一直打算想迁移hugo,因为hexo目前的编译速度太慢了。

如果想要使用的话,可以修改hexo的配置:将pluginConfig里面的内容,加压提取后,复制到hexo根目录下,覆盖就行。

简而言之

  1. node<=12。这是node本身新旧版本语法不兼容问题,只要大版本是12及以下的都会支持。
  2. 使用pluginConfig里面提供的package.json进行npm install

hexo-theme-starry's People

Contributors

meethigher avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

jmb222 jluquxcah

hexo-theme-starry's Issues

使用 hexo g 生成时报错 TypeError 和 cannot read property 'enable' of undefined

$ hexo g
INFO Validating config
INFO Start processing
INFO Files loaded in 69 ms
ERROR TypeError: E:\HexoBlog\themes\starry\layout\post.ejs:18
16| 分享
17|

18| <%- partial("_partial/comment.ejs") %>
19| <% if (theme.Footer.counter){ %>
20|


21| 阅读量

E:\HexoBlog\themes\starry\layout_partial\comment.ejs:1

1| <% if (page.comments && theme.gitalk.enable){ %>
2|

若无法评论请科学上网

3| <link rel="stylesheet" href="<%- url_for("css/gitalk.css") %>">
4| <script src="<%- url_for("js/gitalk.js") %>"></script>

Cannot read property 'enable' of undefined
at eval (E:\HexoBlog\themes\starry\layout_partial\comment.ejs:8:42)
at comment (E:\HexoBlog\node_modules\ejs\lib\ejs.js:682:17)
at _View._compiledSync (E:\HexoBlog\node_modules\hexo\lib\theme\view.js:132:24)
at _View.renderSync (E:\HexoBlog\node_modules\hexo\lib\theme\view.js:59:25)
at Object.partial (E:\HexoBlog\node_modules\hexo\lib\plugins\helper\partial.js:34:15)
at eval (E:\HexoBlog\themes\starry\layout\post.ejs:39:17)
at post (E:\HexoBlog\node_modules\ejs\lib\ejs.js:682:17)
at _View._compiled (E:\HexoBlog\node_modules\hexo\lib\theme\view.js:136:50)
at _View.render (E:\HexoBlog\node_modules\hexo\lib\theme\view.js:39:17)
at E:\HexoBlog\node_modules\hexo\lib\hexo\index.js:64:21
at tryCatcher (E:\HexoBlog\node_modules\bluebird\js\release\util.js:16:23)
at E:\HexoBlog\node_modules\bluebird\js\release\method.js:15:34
at RouteStream._read (E:\HexoBlog\node_modules\hexo\lib\hexo\router.js:47:5)
at RouteStream.Readable.read (stream_readable.js:469:10)
at resume
(_stream_readable.js:983:12)
at processTicksAndRejections (internal/process/task_queues.js:84:21) {
path: 'E:\HexoBlog\themes\starry\layout\post.ejs'
}
ERROR {
err: TypeError: E:\HexoBlog\themes\starry\layout\layout.ejs:18
16| <%- js("https://cdn.jsdelivr.net/gh/meethigher/cdn@13/js/instantpage.js") %>
17| <%- js("js/meethigher.js") %>

18| <% if (theme.lazyload.enable){ %><script>let imgs = $(".post-content.blog-markdown img");imgs.css("width", "100%");</script><% } %>
19|
20|

Cannot read property 'enable' of undefined
at eval (E:\HexoBlog\themes\starry\layout\layout.ejs:51:27)
at layout (E:\HexoBlog\node_modules\ejs\lib\ejs.js:682:17)
at _View._compiled (E:\HexoBlog\node_modules\hexo\lib\theme\view.js:136:50)
at _View.render (E:\HexoBlog\node_modules\hexo\lib\theme\view.js:39:17)
at E:\HexoBlog\node_modules\hexo\lib\theme\view.js:51:25
at tryCatcher (E:\HexoBlog\node_modules\bluebird\js\release\util.js:16:23)
at Promise._settlePromiseFromHandler (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:547:31)
at Promise._settlePromise (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:604:18)
at Promise._settlePromise0 (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:649:10)
at Promise._settlePromises (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:729:18)
at _drainQueueStep (E:\HexoBlog\node_modules\bluebird\js\release\async.js:93:12)
at _drainQueue (E:\HexoBlog\node_modules\bluebird\js\release\async.js:86:9)
at Async._drainQueues (E:\HexoBlog\node_modules\bluebird\js\release\async.js:102:5)
at Immediate.Async.drainQueues [as _onImmediate] (E:\HexoBlog\node_modules\bluebird\js\release\async.js:15:14)
at processImmediate (internal/timers.js:461:21) {
path: 'E:\HexoBlog\themes\starry\layout\layout.ejs'
}
} Render HTML failed: archives/index.html
ERROR {
err: TypeError: E:\HexoBlog\themes\starry\layout\layout.ejs:18
16| <%- js("https://cdn.jsdelivr.net/gh/meethigher/cdn@13/js/instantpage.js") %>
17| <%- js("js/meethigher.js") %>

18| <% if (theme.lazyload.enable){ %><script>let imgs = $(".post-content.blog-markdown img");imgs.css("width", "100%");</script><% } %>
19|
20|

Cannot read property 'enable' of undefined
at eval (E:\HexoBlog\themes\starry\layout\layout.ejs:51:27)
at layout (E:\HexoBlog\node_modules\ejs\lib\ejs.js:682:17)
at _View._compiled (E:\HexoBlog\node_modules\hexo\lib\theme\view.js:136:50)
at _View.render (E:\HexoBlog\node_modules\hexo\lib\theme\view.js:39:17)
at E:\HexoBlog\node_modules\hexo\lib\theme\view.js:51:25
at tryCatcher (E:\HexoBlog\node_modules\bluebird\js\release\util.js:16:23)
at Promise._settlePromiseFromHandler (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:547:31)
at Promise._settlePromise (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:604:18)
at Promise._settlePromise0 (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:649:10)
at Promise._settlePromises (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:729:18)
at _drainQueueStep (E:\HexoBlog\node_modules\bluebird\js\release\async.js:93:12)
at _drainQueue (E:\HexoBlog\node_modules\bluebird\js\release\async.js:86:9)
at Async._drainQueues (E:\HexoBlog\node_modules\bluebird\js\release\async.js:102:5)
at Immediate.Async.drainQueues [as _onImmediate] (E:\HexoBlog\node_modules\bluebird\js\release\async.js:15:14)
at processImmediate (internal/timers.js:461:21) {
path: 'E:\HexoBlog\themes\starry\layout\layout.ejs'
}
} Render HTML failed: archives/2021/index.html
ERROR {
err: TypeError: E:\HexoBlog\themes\starry\layout\layout.ejs:18
16| <%- js("https://cdn.jsdelivr.net/gh/meethigher/cdn@13/js/instantpage.js") %>
17| <%- js("js/meethigher.js") %>

18| <% if (theme.lazyload.enable){ %><script>let imgs = $(".post-content.blog-markdown img");imgs.css("width", "100%");</script><% } %>
19|
20|

Cannot read property 'enable' of undefined
at eval (E:\HexoBlog\themes\starry\layout\layout.ejs:51:27)
at layout (E:\HexoBlog\node_modules\ejs\lib\ejs.js:682:17)
at _View._compiled (E:\HexoBlog\node_modules\hexo\lib\theme\view.js:136:50)
at _View.render (E:\HexoBlog\node_modules\hexo\lib\theme\view.js:39:17)
at E:\HexoBlog\node_modules\hexo\lib\theme\view.js:51:25
at tryCatcher (E:\HexoBlog\node_modules\bluebird\js\release\util.js:16:23)
at Promise._settlePromiseFromHandler (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:547:31)
at Promise._settlePromise (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:604:18)
at Promise._settlePromise0 (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:649:10)
at Promise._settlePromises (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:729:18)
at _drainQueueStep (E:\HexoBlog\node_modules\bluebird\js\release\async.js:93:12)
at _drainQueue (E:\HexoBlog\node_modules\bluebird\js\release\async.js:86:9)
at Async._drainQueues (E:\HexoBlog\node_modules\bluebird\js\release\async.js:102:5)
at Immediate.Async.drainQueues [as _onImmediate] (E:\HexoBlog\node_modules\bluebird\js\release\async.js:15:14)
at processImmediate (internal/timers.js:461:21) {
path: 'E:\HexoBlog\themes\starry\layout\layout.ejs'
}
} Render HTML failed: archives/2021/04/index.html
ERROR TypeError: E:\HexoBlog\themes\starry\layout\layout.ejs:18
16| <%- js("https://cdn.jsdelivr.net/gh/meethigher/cdn@13/js/instantpage.js") %>
17| <%- js("js/meethigher.js") %>

18| <% if (theme.lazyload.enable){ %><script>let imgs = $(".post-content.blog-markdown img");imgs.css("width", "100%");</script><% } %>
19|
20|

Cannot read property 'enable' of undefined
at eval (E:\HexoBlog\themes\starry\layout\layout.ejs:51:27)
at layout (E:\HexoBlog\node_modules\ejs\lib\ejs.js:682:17)
at _View._compiled (E:\HexoBlog\node_modules\hexo\lib\theme\view.js:136:50)
at _View.render (E:\HexoBlog\node_modules\hexo\lib\theme\view.js:39:17)
at E:\HexoBlog\node_modules\hexo\lib\theme\view.js:51:25
at tryCatcher (E:\HexoBlog\node_modules\bluebird\js\release\util.js:16:23)
at Promise._settlePromiseFromHandler (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:547:31)
at Promise._settlePromise (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:604:18)
at Promise._settlePromise0 (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:649:10)
at Promise._settlePromises (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:729:18)
at _drainQueueStep (E:\HexoBlog\node_modules\bluebird\js\release\async.js:93:12)
at _drainQueue (E:\HexoBlog\node_modules\bluebird\js\release\async.js:86:9)
at Async._drainQueues (E:\HexoBlog\node_modules\bluebird\js\release\async.js:102:5)
at Immediate.Async.drainQueues [as _onImmediate] (E:\HexoBlog\node_modules\bluebird\js\release\async.js:15:14)
at processImmediate (internal/timers.js:461:21) {
path: 'E:\HexoBlog\themes\starry\layout\layout.ejs'
}
ERROR TypeError: E:\HexoBlog\themes\starry\layout\layout.ejs:18
16| <%- js("https://cdn.jsdelivr.net/gh/meethigher/cdn@13/js/instantpage.js") %>
17| <%- js("js/meethigher.js") %>

18| <% if (theme.lazyload.enable){ %><script>let imgs = $(".post-content.blog-markdown img");imgs.css("width", "100%");</script><% } %>
19|
20|

Cannot read property 'enable' of undefined
at eval (E:\HexoBlog\themes\starry\layout\layout.ejs:51:27)
at layout (E:\HexoBlog\node_modules\ejs\lib\ejs.js:682:17)
at _View._compiled (E:\HexoBlog\node_modules\hexo\lib\theme\view.js:136:50)
at _View.render (E:\HexoBlog\node_modules\hexo\lib\theme\view.js:39:17)
at E:\HexoBlog\node_modules\hexo\lib\theme\view.js:51:25
at tryCatcher (E:\HexoBlog\node_modules\bluebird\js\release\util.js:16:23)
at Promise._settlePromiseFromHandler (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:547:31)
at Promise._settlePromise (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:604:18)
at Promise._settlePromise0 (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:649:10)
at Promise._settlePromises (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:729:18)
at _drainQueueStep (E:\HexoBlog\node_modules\bluebird\js\release\async.js:93:12)
at _drainQueue (E:\HexoBlog\node_modules\bluebird\js\release\async.js:86:9)
at Async._drainQueues (E:\HexoBlog\node_modules\bluebird\js\release\async.js:102:5)
at Immediate.Async.drainQueues [as _onImmediate] (E:\HexoBlog\node_modules\bluebird\js\release\async.js:15:14)
at processImmediate (internal/timers.js:461:21) {
path: 'E:\HexoBlog\themes\starry\layout\layout.ejs'
}
ERROR TypeError: E:\HexoBlog\themes\starry\layout\layout.ejs:18
16| <%- js("https://cdn.jsdelivr.net/gh/meethigher/cdn@13/js/instantpage.js") %>
17| <%- js("js/meethigher.js") %>

18| <% if (theme.lazyload.enable){ %><script>let imgs = $(".post-content.blog-markdown img");imgs.css("width", "100%");</script><% } %>
19|
20|

Cannot read property 'enable' of undefined
at eval (E:\HexoBlog\themes\starry\layout\layout.ejs:51:27)
at layout (E:\HexoBlog\node_modules\ejs\lib\ejs.js:682:17)
at _View._compiled (E:\HexoBlog\node_modules\hexo\lib\theme\view.js:136:50)
at _View.render (E:\HexoBlog\node_modules\hexo\lib\theme\view.js:39:17)
at E:\HexoBlog\node_modules\hexo\lib\theme\view.js:51:25
at tryCatcher (E:\HexoBlog\node_modules\bluebird\js\release\util.js:16:23)
at Promise._settlePromiseFromHandler (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:547:31)
at Promise._settlePromise (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:604:18)
at Promise._settlePromise0 (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:649:10)
at Promise._settlePromises (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:729:18)
at _drainQueueStep (E:\HexoBlog\node_modules\bluebird\js\release\async.js:93:12)
at _drainQueue (E:\HexoBlog\node_modules\bluebird\js\release\async.js:86:9)
at Async._drainQueues (E:\HexoBlog\node_modules\bluebird\js\release\async.js:102:5)
at Immediate.Async.drainQueues [as _onImmediate] (E:\HexoBlog\node_modules\bluebird\js\release\async.js:15:14)
at processImmediate (internal/timers.js:461:21) {
path: 'E:\HexoBlog\themes\starry\layout\layout.ejs'
}
ERROR {
err: TypeError: E:\HexoBlog\themes\starry\layout\layout.ejs:18
16| <%- js("https://cdn.jsdelivr.net/gh/meethigher/cdn@13/js/instantpage.js") %>
17| <%- js("js/meethigher.js") %>

18| <% if (theme.lazyload.enable){ %><script>let imgs = $(".post-content.blog-markdown img");imgs.css("width", "100%");</script><% } %>
19|
20|

Cannot read property 'enable' of undefined
at eval (E:\HexoBlog\themes\starry\layout\layout.ejs:51:27)
at layout (E:\HexoBlog\node_modules\ejs\lib\ejs.js:682:17)
at _View._compiled (E:\HexoBlog\node_modules\hexo\lib\theme\view.js:136:50)
at _View.render (E:\HexoBlog\node_modules\hexo\lib\theme\view.js:39:17)
at E:\HexoBlog\node_modules\hexo\lib\theme\view.js:51:25
at tryCatcher (E:\HexoBlog\node_modules\bluebird\js\release\util.js:16:23)
at Promise._settlePromiseFromHandler (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:547:31)
at Promise._settlePromise (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:604:18)
at Promise._settlePromise0 (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:649:10)
at Promise._settlePromises (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:729:18)
at _drainQueueStep (E:\HexoBlog\node_modules\bluebird\js\release\async.js:93:12)
at _drainQueue (E:\HexoBlog\node_modules\bluebird\js\release\async.js:86:9)
at Async._drainQueues (E:\HexoBlog\node_modules\bluebird\js\release\async.js:102:5)
at Immediate.Async.drainQueues [as _onImmediate] (E:\HexoBlog\node_modules\bluebird\js\release\async.js:15:14)
at processImmediate (internal/timers.js:461:21) {
path: 'E:\HexoBlog\themes\starry\layout\layout.ejs'
}
} Render HTML failed: index.html
ERROR TypeError: E:\HexoBlog\themes\starry\layout\layout.ejs:18
16| <%- js("https://cdn.jsdelivr.net/gh/meethigher/cdn@13/js/instantpage.js") %>
17| <%- js("js/meethigher.js") %>

18| <% if (theme.lazyload.enable){ %><script>let imgs = $(".post-content.blog-markdown img");imgs.css("width", "100%");</script><% } %>
19|
20|

Cannot read property 'enable' of undefined
at eval (E:\HexoBlog\themes\starry\layout\layout.ejs:51:27)
at layout (E:\HexoBlog\node_modules\ejs\lib\ejs.js:682:17)
at _View._compiled (E:\HexoBlog\node_modules\hexo\lib\theme\view.js:136:50)
at _View.render (E:\HexoBlog\node_modules\hexo\lib\theme\view.js:39:17)
at E:\HexoBlog\node_modules\hexo\lib\theme\view.js:51:25
at tryCatcher (E:\HexoBlog\node_modules\bluebird\js\release\util.js:16:23)
at Promise._settlePromiseFromHandler (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:547:31)
at Promise._settlePromise (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:604:18)
at Promise._settlePromise0 (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:649:10)
at Promise._settlePromises (E:\HexoBlog\node_modules\bluebird\js\release\promise.js:729:18)
at _drainQueueStep (E:\HexoBlog\node_modules\bluebird\js\release\async.js:93:12)
at _drainQueue (E:\HexoBlog\node_modules\bluebird\js\release\async.js:86:9)
at Async._drainQueues (E:\HexoBlog\node_modules\bluebird\js\release\async.js:102:5)
at Immediate.Async.drainQueues [as _onImmediate] (E:\HexoBlog\node_modules\bluebird\js\release\async.js:15:14)
at processImmediate (internal/timers.js:461:21) {
path: 'E:\HexoBlog\themes\starry\layout\layout.ejs'
}
INFO 0 files generated in 25 ms

translation

The theme looks awesome but can you translate the README in english and move the actual one to README.zn.md

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.