Giter Site home page Giter Site logo

richtext's Introduction

RichText Download

注意:此项目已不再维护

Android平台下的富文本解析器

  • 流式操作
  • 低侵入性
  • 依赖少,只依赖了disklrucachesupport v4
  • 支持Html和Markdown格式文本
  • 支持图片点击和长按事件
  • 链接点击事件和长按事件
  • 支持设置加载中和加载错误时的图片
  • 支持自定义超链接的点击回调
  • 支持修正图片宽高
  • 支持GIF图片
  • 支持Base64编码、本地图片和Assets目录图片
  • 自持自定义图片加载器、图片加载器
  • 支持内存和磁盘双缓存
  • 已经加入对自定义Html解析器的支持

效果

演示

gradle中引用的方法

compile 'com.zzhoujay.richtext:richtext:latest-version'

使用新的Html解析器

只需加入此依赖即可,无须其他操作,新Html解析器对原生Html解析器的功能做了补充

compile 'com.zzhoujay:html:latest-version'

新Html解析器增加了对代码块的支持,代码块可以触发点击事件,通过urlClick设置, 代码块回调的参数由code://开头

使用新Html解析器遇到问题请在https://github.com/zzhoujay/Htm提issue

关于issue

最近一段时间会比较忙,issue不能及时处理,一般会定时抽空集中解决issue,但时间有限解决速度上不敢保证。

欢迎提交pull request帮助完善这个项目

注意

在第一次调用RichText之前先调用RichText.initCacheDir()方法设置缓存目录

ImageFixCallback的回调方法不一定是在主线程回调,注意不要进行UI操作

本地图片由根路径\开头,Assets目录图片由file:///android_asset/开头

Gif图片播放不支持硬件加速,若要使用Gif图片请先关闭TextView的硬件加速

textView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

使用方式

多看wiki多看wiki多看wiki,重要的事情说三遍

关于自定义的Html解析器

Html解析器子项目:Html

关于Markdown

Markdown源于子项目:Markdown

若在markdown解析过程中发现什么问题可以在该项目中反馈

关于富文本编辑器

编辑器开发已暂停,RichEditor

具体使用请查看demo

ListView DemoRecyclerView DemoGif Demo

License

The MIT License (MIT)

Copyright (c) 2016 zzhoujay

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR

IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

by zzhoujay

richtext's People

Contributors

wanyt avatar zzhoujay avatar

Stargazers

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

Watchers

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

richtext's Issues

文字大小

这个能设置同一个Textview中不同字的大小吗

ViewPage中的Fragment 中使用,如果图片过多会出现OOM

RT,这个确实是会出现,不知道是为啥
PriorityExecutor: Request threw uncaught throwable java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: Failed to allocate a 1935192 byte allocation with 1761372 free bytes and 1720KB until OOM at java.util.concurrent.FutureTask.report(FutureTask.java:93) at java.util.concurrent.FutureTask.get(FutureTask.java:163) at com.bumptech.glide.load.engine.executor.FifoPriorityThreadPoolExecutor.afterExecute(FifoPriorityThreadPoolExecutor.java:96) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1120) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818) at com.bumptech.glide.load.engine.executor.FifoPriorityThreadPoolExecutor$DefaultThreadFactory$1.run(FifoPriorityThreadPoolExecutor.java:118) Caused by: java.lang.OutOfMemoryError: Failed to allocate a 1935192 byte allocation with 1761372 free bytes and 1720KB until OOM at dalvik.system.VMRuntime.newNonMovableArray(Native Method) at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) at android.graphics.BitmapFactory.decodeStreamInternal(BitmapFactory.java:635) at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:611) at com.bumptech.glide.load.resource.bitmap.Downsampler.decodeStream(Downsampler.java:329) at com.bumptech.glide.load.resource.bitmap.Downsampler.downsampleWithSize(Downsampler.java:220) at com.bumptech.glide.load.resource.bitmap.Downsampler.decode(Downsampler.java:153) at com.bumptech.glide.load.resource.bitmap.StreamBitmapDecoder.decode(StreamBitmapDecoder.java:50) at com.bumptech.glide.load.resource.bitmap.StreamBitmapDecoder.decode(StreamBitmapDecoder.java:19) at com.bumptech.glide.load.resource.bitmap.ImageVideoBitmapDecoder.decode(ImageVideoBitmapDecoder.java:39) at com.bumptech.glide.load.resource.bitmap.ImageVideoBitmapDecoder.decode(ImageVideoBitmapDecoder.java:20) at com.bumptech.glide.load.engine.DecodeJob.decodeFromSourceData(DecodeJob.java:190) at com.bumptech.glide.load.engine.DecodeJob.decodeSource(DecodeJob.java:177) at com.bumptech.glide.load.engine.DecodeJob.decodeFromSource(DecodeJob.java:128) at com.bumptech.glide.load.engine.EngineRunnable.decodeFromSource(EngineRunnable.java:122) at com.bumptech.glide.load.engine.EngineRunnable.decode(EngineRunnable.java:101) at com.bumptech.glide.load.engine.EngineRunnable.run(EngineRunnable.java:58) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)  at java.lang.Thread.run(Thread.java:818)  at com.bumptech.glide.load.engine.executor.FifoPriorityThreadPoolExecutor$DefaultThreadFactory$1.run(FifoPriorityThreadPoolExecutor.java:118) 

OpenGLRenderer: Bitmap too large to be uploaded into a texture (3120x4160, max=4096x4096)

图片过大后出现的问题
代码部分:
RichText.from(quanziArticle.getContent()).autoFix(false).fix(new ImageFixCallback() {
@OverRide
public void onFix(ImageHolder holder, boolean imageReady) {
if (holder.getHeight() < AndroidUtils.getHeight() && holder.getWidth() < AndroidUtils.getWidth()) {
holder.setAutoFix(true);
} else {
holder.setHeight(AndroidUtils.getHeight());
holder.setWidth(AndroidUtils.getWidth());
}
}
}).into(mArticleContent);

图片没有显示出来

我在布局里面:
<zhou.widget.RichText
android:id="@+id/tv_content_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/d10"
android:layout_toLeftOf="@id/iv_avatar_right"
android:gravity="right|center_vertical"
android:maxWidth="@dimen/d350"
app:zhou_default_height="@dimen/d50"
app:zhou_default_width="@dimen/d50"
android:layout_alignTop="@+id/iv_avatar_right"
android:textColor="@color/white"
app:zhou_errorImage="@drawable/icon_sentence_next"
app:zhou_placeHolder="@drawable/icon_sentence_next"
android:textSize="@dimen/text_size_27"/>

代码里面将本地资源转换为drawable的形式显示出来,但是没有看到相应的图片显示

图片加载

请问此富文本text加载网络图片是用的什么呢? 可以自己调用glide吗? 我试了一下加载不出这种[img src]格式的图片

多张大图情况下加载有问题

测试的内容是知乎手机网页上看到的一个回答
链接

实际使用过程中我用来显示的String如下

汉仪喵魂体!<br>自己写了小半年的手写字体刚上线,自我感觉还是值得推荐的!<br>我先给大家图文并茂地讲讲这字儿怎么值得推荐!<br><img src="https://pic3.zhimg.com/b6a1334f561eb6f388d5321402ee6c0e_b.jpg" data-rawwidth="800" data-rawheight="3266" class="origin_image zh-lightbox-thumb" width="800" data-original="https://pic3.zhimg.com/b6a1334f561eb6f388d5321402ee6c0e_r.jpg&quot;&gt;&lt;img src="https://pic3.zhimg.com/13fc1f61deeea1e4d5b1fd4d36b30b82_b.jpg" data-rawwidth="801" data-rawheight="6071" class="origin_image zh-lightbox-thumb" width="801" data-original="https://pic3.zhimg.com/13fc1f61deeea1e4d5b1fd4d36b30b82_r.jpg&quot;&gt;&lt;img src="https://pic3.zhimg.com/07fcb9ad57c568d2d41466616fdc6022_b.jpg" data-rawwidth="801" data-rawheight="5475" class="origin_image zh-lightbox-thumb" width="801" data-original="https://pic3.zhimg.com/07fcb9ad57c568d2d41466616fdc6022_r.jpg&quot;&gt;&lt;img src="https://pic1.zhimg.com/a5d631cc0a6c9c5b38c6243ef89e1794_b.jpg" data-rawwidth="801" data-rawheight="7352" class="origin_image zh-lightbox-thumb" width="801" data-original="https://pic1.zhimg.com/a5d631cc0a6c9c5b38c6243ef89e1794_r.jpg&quot;&gt;&lt;img src="https://pic4.zhimg.com/47188b45390ec15b1fd290c2a472d043_b.jpg" data-rawwidth="801" data-rawheight="5358" class="origin_image zh-lightbox-thumb" width="801" data-original="https://pic4.zhimg.com/47188b45390ec15b1fd290c2a472d043_r.jpg&quot;&gt;&lt;br&gt;字库加标点接近一万字&lt;br&gt;&lt;br&gt;我的极速是除了吃饭睡觉&lt;br&gt;一刻不停的写&lt;br&gt;一天最多300字&lt;br&gt;极速一天之后第二天就要最少崩溃半天&lt;br&gt;哈哈哈哈哈&lt;br&gt;&lt;br&gt;上半年因为出书有点拖延&lt;br&gt;&lt;br&gt;到临交稿的两个月剩的有点多&lt;br&gt;我只好回老家闭关写&lt;br&gt;(有人做饭啊没有干扰还)&lt;br&gt;有一个半月的时间里&lt;br&gt;每天都&lt;br&gt;从天亮写到天黑&lt;br&gt;从睁眼写到闭眼&lt;br&gt;&lt;br&gt;微信朋友圈还合作什么的&lt;br&gt;啥也不管了不回了&lt;br&gt;&lt;br&gt;特别的酸爽&lt;br&gt;坚持下来之后感觉耐力提升了一百倍&lt;br&gt;&lt;br&gt;之后谁再说什么事儿忍不了抛不下&lt;br&gt;我就特别想说&lt;br&gt;你去抛下一切功名利禄社交合作&lt;br&gt;写俩月字库试试&lt;br&gt;之后什么矫情都没了&lt;br&gt;&lt;br&gt;云淡风轻的&lt;br&gt;&lt;img src="https://pic1.zhimg.com/00f14a0147fd336a6c34c7817f4f096c_b.jpg" data-rawwidth="801" data-rawheight="3178" class="origin_image zh-lightbox-thumb" width="801" data-original="https://pic1.zhimg.com/00f14a0147fd336a6c34c7817f4f096c_r.jpg&quot;&gt;&lt;img src="https://pic2.zhimg.com/0d1a5113e3ea1bb379b56faeba908f71_b.jpg" data-rawwidth="600" data-rawheight="600" class="origin_image zh-lightbox-thumb" width="600" data-original="https://pic2.zhimg.com/0d1a5113e3ea1bb379b56faeba908f71_r.jpg&quot;&gt;啊……&lt;br&gt;最近又有一个字体的想法……&lt;br&gt;还蛮好看……&lt;br&gt;但是写一套太累辣!

err: Height must be positive number or 0.

你好,我在使用例子时,下面的html时报错了: Height must be positive number or 0.
请问需要如何修改?

代码如下:

private static final String TEXT_HTML ="<img src=\"http://www.chn-zj.com/upload/image/Wc2cw3CZ.png\" alt=\"深圳朗锐智建有限公司\" width=\"288\" height=\"48\"/><Br/><div id=\"sta_content\"> \n"+
    " <p style=\"text-indent:2em;\"> <span style=\"font-size:14px;\"><span style=\"line-height:2;\">公司简介:</span><br> <span style=\"line-height:2;\"> &nbsp; &nbsp; &nbsp; &nbsp; 深圳朗锐智建科技有限公司,即</span><span style=\"line-height:2;\">智能建筑物联网综合方案运营商。</span></span> </p> \n"+
    " <p style=\"text-indent:2em;\"> <span style=\"font-size:14px;\"></span><span style=\"font-size:14px;line-height:2;\"> &nbsp; </span><span style=\"font-size:14px;line-height:2;\">专注智慧建筑,以物联网为骨干,以智能终端为神经元,以云平台为决策思维,实现幸福城市建</span><span style=\"font-size:14px;line-height:2;\">筑智慧化,提升建筑生态环境品质,培育具生命的活体建筑。</span> </p> \n"+
    " <p style=\"text-indent:2em;\"> <span style=\"font-size:14px;\"><span style=\"line-height:2;\">&nbsp;&nbsp;</span><span><span style=\"line-height:2;\">公司目前自主研发多项</span></span></span><span style=\"font-size:14px;line-height:28px;\">产品</span><span style=\"font-size:14px;text-indent:2em;line-height:2;\">,包括楼宇自动化系统、BMS楼宇管理系统、大型公建能耗监管平台、多功能能耗数据采集器、智能控制器等。公司以筑造智能科技平台,在建筑物联网行业中成为行业领军企业</span><span style=\"font-size:14px;text-indent:2em;line-height:2;\">。</span> </p> \n"+
    "</div>";


text.setRichText(TEXT_HTML);

报错:

错误位置:
RichText.java:265行

 if (holder.width != -1 && holder.height != -1) {
    load.resize(holder.width, holder.height);
}

java.lang.RuntimeException: Unable to start activity ComponentInfo{zhou.demo/zhou.demo.MainActivity}: java.lang.IllegalArgumentException: Height must be positive number or 0.
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2581)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2656)
   at android.app.ActivityThread.access$800(ActivityThread.java:178)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1512)
   at android.os.Handler.dispatchMessage(Handler.java:111)
   at android.os.Looper.loop(Looper.java:194)
   at android.app.ActivityThread.main(ActivityThread.java:5691)
   at java.lang.reflect.Method.invoke(Native Method)
   at java.lang.reflect.Method.invoke(Method.java:372)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
Caused by: java.lang.IllegalArgumentException: Height must be positive number or 0.
   at com.squareup.picasso.Request$Builder.resize(Request.java:302)
   at com.squareup.picasso.RequestCreator.resize(RequestCreator.java:219)
   at zhou.widget.RichText$2.getDrawable(RichText.java:265)
   at android.text.HtmlToSpannedConverter.startImg(Html.java:634)
   at android.text.HtmlToSpannedConverter.handleStartTag(Html.java:520)
   at android.text.HtmlToSpannedConverter.startElement(Html.java:761)
   at org.ccil.cowan.tagsoup.Parser.push(Parser.java:794)
   at org.ccil.cowan.tagsoup.Parser.rectify(Parser.java:1061)
   at org.ccil.cowan.tagsoup.Parser.stage(Parser.java:1026)
   at org.ccil.cowan.tagsoup.HTMLScanner.scan(HTMLScanner.java:632)
   at org.ccil.cowan.tagsoup.Parser.parse(Parser.java:449)
   at android.text.HtmlToSpannedConverter.convert(Html.java:442)
   at android.text.Html.fromHtml(Html.java:136)
   at zhou.widget.RichText.setRichText(RichText.java:102)
   at zhou.demo.MainActivity.onCreate(MainActivity.java:68)
   at android.app.Activity.performCreate(Activity.java:6142)
   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1115)
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2528)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2656) 
   at android.app.ActivityThread.access$800(ActivityThread.java:178) 
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1512) 
   at android.os.Handler.dispatchMessage(Handler.java:111) 
   at android.os.Looper.loop(Looper.java:194) 
   at android.app.ActivityThread.main(ActivityThread.java:5691) 
   at java.lang.reflect.Method.invoke(Native Method) 
   at java.lang.reflect.Method.invoke(Method.java:372) 
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959) 
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754) 

我的个人建议

RichText有.error(Drawable d)和.placeHolder(Drawable d)这两个方法,可以再提供两个参数都是resId的方法吗?

版本编译有问题

你好,gradle中集成你的最新2.0.13,同步显示v23里面com.android.support/appcompat-v7/23.0.1/res/values-v23/values-v23.xml找不到,我项目中的编译版本和版本工具都是22的,target也是22,升级成23会带来很多问题,想请问一下,可不可以把你的架包版本降低呢?

图片不显示

首次打开前面几张图片不显示,不知道为什么,下面3张会显示,好像我用AsyncTask 重写了请求的就都显示,这是为什么?

宽高问题

这个问题似乎还没解决.我

     htmlTv.setImageFixListener(new RichText.ImageFixListener() {
            @Override
            public void onFix(RichText.ImageHolder holder) {
                if (holder.getWidth() > 10 || holder.getHeight() > 10) {
                    int width = getScreenWidth(getApplicationContext());
                    int height = width;
                    holder.setWidth(width);
                    holder.setHeight(height);
                    holder.setScaleType(RichText.ImageHolder.CENTER_INSIDE);
                }
            }
        });

        htmlTv.setRichText(article.getContent());

效果还是没有占满一个频幕宽度。是我代码写的有问题?

图片格式问题

没有处理图片的格式,比如大小、居中等样式一律无效啊

图片显示位置的问题

为什么每张图片显示都是另起一行呢?
图片和文字能否在同一行显示,当图片高度大于文字高度,文字居中显示,当文字高度大于图片高度,图片居中显示。
这个能实现么?要怎么处理呢?

Is the min sdk 15?

Hey! This is a quite nice library. Must the library min sdk be 15? I want to use it in my project whose min sdk is 14.

请问超链接能够自定义回调吗

我看你调用了Html.fromHtml方法去解析html格式的文本,这样会导致超链接都是UrlSpan,点击后都执行跳转到浏览器的方法,能够在不影响整体显示按html显示而去实现点击链接去自定义行为吗

当加载图片缓慢的时候关闭activity出现异常

t E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NullPointerException
at com.zzhoujay.richtext.RichText$ImageTargetGif.recycle(RichText.java:367)
at com.zzhoujay.richtext.RichText.recycleTarget(RichText.java:172)
at com.zzhoujay.richtext.RichText.access$1100(RichText.java:57)
at com.zzhoujay.richtext.RichText$ImageTargetGif.onViewDetachedFromWindow(RichText.java:407)
at android.view.View.dispatchDetachedFromWindow(View.java:11983)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2530)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2530)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2530)

图片的点击问题

发现图片的点击事件有几个问题:
1.GifActivity中点击第一张图,图片上方会出现大约5像素的背景条
2.如果autoFix(false),textview的宽也设置wrap_content,要显示的内容中有两张图片垂直排列,第二张图片的宽度比第一张图片小,这时候第二张图的点击宽度是第一张图的宽度,也就是点击第二张图右边小于第一张图片宽度的空白的地方也会响应点击事件
3.点击图片手指移动到其他地方再松开,也会响应点击事件,跟一般OnClick事件不一样
望解决!!!

编译问题

就是gradle 下载的时候 编译不通过 [应该是你的版本太高 但是改成高版本以后 我的项目中估计是android 低版本支持的方法 都不支持了 所以你富文本组件 能不能降低版本呀

)

图片被base64加密过后能展示么。

"dsad <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVwAAAB+CAYAAABoBamlAAAMGGlDQ1BJQ0MgUHJvZmlsZQAASImVlwdUU0kXx+eVFEISSiACUkJvgvQqvXekg42QBAglhEBQsSOLCq4FFR

数据格式大概是长这样的.....

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.