Giter VIP home page Giter VIP logo

vehicle-keyboard-android's Introduction

停车王车牌键盘 VehicleKeyboard - Android

VehicleKeyboard是停车王品牌的各端产品线的基础组件,专为提高**车牌号码输入速度而定制开发的专用键盘组件。 为停车行业的用户输入车牌号码,提供非常便捷有效的输入方式。

包括以下三个项目:

  • Android Android项目,为Android客户端定制包括输入组件、键盘组件及相关控制逻辑实现;
  • iOS iOS客户端项目,为iOS客户端定制包括输入组件、键盘组件及相关控制逻辑实现;
  • JavaScript(Vue.js) JavaScript(Vue.js)项目,为H5页面定制,包括Web、微信、支付宝等,同样包括输入组件、键盘组件及相关控制逻辑实现

零、项目主页

Android 版本

iOS 版本

JavaScript Vue.js 版本

兼容性声明

注意: 当前版本v0.5,已修改为Java原生实现键盘逻辑,不再使用Javascript。项目包结构已发生重大修改,不再向0.4及以下版本兼容。

Gif

支持输入车牌类型

支持中华人民共和国现行绝大部分车牌号码类型:

  1. 民用蓝牌、黄牌;
  2. 新能源车牌;
  3. 港澳车牌;
  4. 武警车牌;
  5. 军队车牌;
  6. 新旧大使馆车牌;
  7. 新旧领事馆车牌;
  8. 民航车牌;

一、添加到项目

增加仓库地址:

repositories {
    jcenter()
}

添加库依赖:

implementation 'com.parkingwang:keyboard:0.7.3'
// OR
compile 'com.parkingwang:keyboard:0.7.3'

二、使用组件

**注意:**有问题请先查看 FAQ 及搜索 issue

2.1 车牌号码输入组件 InputView

InputView是用于手动输入车牌的组件,提供7-8个用户可选择修改的输入框,如上图所示。

在XML中放置输入组件:

    <com.parkingwang.keyboard.view.InputView
        android:id="@+id/input_view"
        app:pwkInputTextSize="22sp"
        android:layout_width="match_parent"
        android:layout_height="60dp"/>

2.2 车牌号码键盘组件 - KeyboardView

KeyboardView是车牌输入键盘组件,提供按车牌类型显示一定规则的键盘布局供用户点击,如上图所示。

在XML中放置键盘组件:

    <com.parkingwang.keyboard.view.InputView
            android:id="@+id/input_view"
            android:layout_margin="6dp"
            app:pwkInputTextSize="22sp"
            android:layout_width="match_parent"
            android:layout_height="60dp"/>

2.3 输入框和键盘控制器 - KeyboardInputController

在代码中绑定输入组件与键盘的关联:

使用弹出键盘

详见 MainActivity 的演示代码。见地址:

// Init Views

// 创建弹出键盘
mPopupKeyboard = new PopupKeyboard(this);
// 弹出键盘内部包含一个KeyboardView,在此绑定输入两者关联。
mPopupKeyboard.attach(mInputView, this);

// KeyboardInputController提供一个默认实现的新能源车牌锁定按钮
mPopupKeyboard.getController()
        .setDebugEnabled(true)
        .bindLockTypeProxy(new KeyboardInputController.ButtonProxyImpl(lockTypeButton) {
            @Override
            public void onNumberTypeChanged(boolean isNewEnergyType) {
                super.onNumberTypeChanged(isNewEnergyType);
                if (isNewEnergyType) {
                    lockTypeButton.setTextColor(getResources().getColor(android.R.color.holo_green_light));
                } else {
                    lockTypeButton.setTextColor(getResources().getColor(android.R.color.black));
                }
            }
        });

不弹出键盘,直接显示

// 使用 KeyboardInputController 来关联
mController = KeyboardInputController
                    .with(mKeyboardView, inputView);

mController.useDefaultMessageHandler();

切换新能源和普通车牌是否校验

mController.setSwitchVerify(false) //不校验(默认校验)

三、键盘功能特性设置

3.1 设置是否显示“确定”键

根据需要,你可以通过调用KeyboardEngine的setHideOKKey(boolean)来设置是否隐藏“确定”键。

mPopupKeyboard.getKeyboardEngine().setHideOKKey(mHideOKKey);

3.2 优先显示周边省份

根据需要,在不同地区的用户,输入车牌号码时,可以根据当地地理位置,显示周边省份的简称。 获取地理位置需要的定位功能,需要你外部调用定位API,获取到对应的省份名称后,设置到KeyboardEngine中。 使用如下代码:

mPopupKeyboard.getKeyboardEngine().setLocalProvinceName("广东省");

3.3 设置键盘按下时的气泡:

  1. 正确地显示气泡

由于顶层按键的气泡会显示到键盘之外,因此需要键盘所在的父布局增加以下属性(如果气泡范围超出父布局,则需往上递归设置):

    android:clipChildren="false"
  1. 不显示气泡
    mKeyboardView.setShowBubble(false);

四、键盘样式设置

4.1 设置键盘按钮文字大小

在Java代码中添加以下设置:

    mKeyboardView.setCNTextSize(float); //设置中文字体大小
    mKeyboardView.setENTextSize(float); //设置英文字母或数字字体大小

4.2 设置键盘主题颜色

在colors.xml中覆盖以下颜色值以修改键盘主题色

    <color name="pwk_primary_color">#418AF9</color>
    <!--确定按键按下时的颜色-->
    <color name="pwk_primary_dark_color">#3A7CE0</color>

4.3 设置输入组件字体大小:

    <com.parkingwang.keyboard.view.InputView
            app:pwkInputTextSize="22sp"
            ..../>

4.4 设置输入组件的样式

默认提供两种输入组件样式:

4.4.1. 混合紧排样式(默认样式) - MIXED

    <!--输入框按键样式,最左最右键样式设置-->
    <style name="PWKInputItemStyleKey" parent="PWKInputItemStyle_BORDER_KEY"/>
    <!--输入框外部样式-->
    <style name="PWKInputViewStyle" parent="PWKInputViewStyle_MIXED"/>

4.4.2. 分隔块状样式 - DIVIDED

    <!--输入框按键样式,最左最右键样式设置-->
    <style name="PWKInputItemStyleKey" parent="PWKInputItemStyle_FILLED_KEY"/>
    <!--输入框外部样式-->
    <style name="PWKInputViewStyle" parent="PWKInputViewStyle_DIVIDED"/>

在项目的styles.xml中覆盖设置以上两种样式配置,可以切换显示不同的样式。可参考 App 的配置代码。

4.5 如何修改自己的样式

覆盖PWKInputItemStyleKey / PWKInputItemStyleLeft / PWKInputItemStyleRightPWKInputViewStyle来实现。

  • PWKInputItemStyleKey 控制输入组件内每个输入框的按键Button样式,样式作用于每个Button;
  • PWKInputViewStyle 控制输入组件的整体样式,作用于LinearLayout;

4.5.1 InputView的样式选项

注意 最新版本需要配置 InputViewstyle。配置方法有以下两种:

在布局文件中为 InputView 添加以下属性:

    style="@style/PWKInputViewStyle"

或者是在 ApplicationActivity 所配置的 themestyle 中添加配置(参考 demo 项目):

    <item name="pwkInputStyle">@style/PWKInputViewStyle</item>

常规配置

通过覆盖以下样式配置,可以修改默认样式

    <!--输入框外边框宽度-->
    <dimen name="pwk_input_view_border_width">0.7pt</dimen>
    <!--背景缩进,必须与pwk_input_view_border_width保持一致,并且为负值-->
    <dimen name="pwk_input_view_border_width_inset">-0.7pt</dimen>
    <!--输入框分割线的宽度,在混合组件中使用-->
    <dimen name="pwk_input_view_divider_split_line">@dimen/pwk_input_view_border_width</dimen>
    <!--输入框分割空间的距离,在分离组件样式中使用-->
    <dimen name="pwk_input_view_divider_split_space">5dp</dimen>
    <!--输入框选中状态的边框宽度,在混合组件中使用-->
    <dimen name="pwk_input_item_highlight_border_width">1.2pt</dimen>
    <!--输入框圆角-->
    <dimen name="pwk_input_item_radius">4dp</dimen>
    <!--输入框字体大小-->
    <dimen name="pwk_input_item_text_size">24sp</dimen>

4.5.2 如何自定义输入框的选中样式

  1. 继承 SelectedDrawable 并重写 public void draw(@NonNull Canvas canvas) 方法自己绘制选中效果。
  2. 然后将该类配置到 InputViewapp:pwkSelectedDrawable 属性或其 style 中,如下所示:
    <item name="pwkSelectedDrawable">com.parkingwang.keyboard.view.SelectedDrawable</item>

五、停车王车牌键盘布局切换逻辑

5.1 DOC文档

DOC文档

5.2 停车王车牌键盘布局切换逻辑

停车王车牌键盘布局切换逻辑的思维导图,说明了当前版本的键盘布局的切换,以及“更多”、“返回”按钮的切换逻辑。

停车王车牌键盘布局切换逻辑

百度脑图地址

六、版本更新

v0.7.6 2020.12.11

  • 武警车牌号第三位放开字母输入限制

v0.7.5 2020.06.03

  • 普通车牌放开第二位数字输入限制

v0.7.4 2019.11.27

  • 修改新能源车牌号输入及校验规则

v0.7.3 2019.3.25

  • 添加了新能源和普通车牌是否需要规则校验控制选项

v0.7.1 2018.11.05

  • 兼容 Android P 导航栏

v0.7 2018.09.19

  • 增加动态设置气泡、按键主题色的方法

v0.6.1 2018.08.02

  • 修复在4.4.2上选择框位置不正确的问题

v0.6.0 2018.07.24

  • 重写选中样式的实现,使用更灵活的 Drawable 类来实现绘制选中样式,并解决原来设置背景来实现选中样式的局限。
  • 修改 InputView 的布局,去掉原来为实现选中样式而另外添加的一个 Button。
  • pwk_input_view 根标签改为 ,减少层级。注意:此修改将影响使用配置,相关说明见 README.md 的第 4.5.1 条“InputView 的样式选项”一节。
  • 原来对输入位是否显示的判断由 isShown() 改为 getVisibility() == View.VISIBLE,以解决在界面未显示时判断不正确的问题。
  • Fixes #19

v0.5.5 2018.07.02

  • 移除HK_MACAO车牌类型;
  • 仅当车牌"粤"字头时,才可以选择"港澳"汉字;

v0.5.3 2018.06.15

说明:在此版本中,发生架构和项目结构的重大修改,不向下兼容,请按照当前版本的使用说明来修改;

  • 使用Java原生键盘引擎,替代原JavaScript。
  • 删除KeyboardType类型,不再需要配置键盘类型,本版本支持所有类型车牌;
  • 增加全类型车牌支持,增加“更多”和“返回”来切换键盘布局;
  • 优化InputView内部逻辑,简化其实现代码;
  • 优化整体操作性能,键盘输入更多流畅了;
  • 增加周边省份功能设定;

v0.4.0 2018.0424

说明:在此版本中,如果使用com.parkingwang.keyboard.support.KeyboardInputController包的相关类, 会报告Deprecated,使用com.parkingwang.keyboard.KeyboardInputController包的类即可。

  • 更新KeyboardInputController及相关类的包结构;
  • 增加Controller各个Set和Add接口的NullPointer检查;

v0.3-ALPHA 2017.1120

  • 修复Texts关于字符判断的问题;
  • 更新Gradle版本为3.3.0;
  • 更新JS文件(JS压缩);
  • 全键盘模式下,增加“民航”车牌类型;
  • 修改KeyboardView每行键位数的基准为第一行;

v0.2-ALPHA 2017.1113

  • 修改键盘组件主题颜色的控制逻辑,原有的pwk_keyboard_primary_color修改为pwk_primary_color,并作为整个键盘的主题色。
  • 为输入框不同键位的增加控制主题。PWKInputItemStyleKey / PWKInputItemStyleLeft / PWKInputItemStyleRight

v0.1-BETA 2017.1108

  • 完成基础功能,更新文档并公开发布;

Contributors

VehicleKeyboard-Android 由西安艾润物联网技术服务有限公司第一事业部深圳研发中心开发和维护,旨在与停车行业同行进行技术交流和分享。

疑问与交流

vehicle-keyboard-android's People

Contributors

contextdong avatar lxqxsyu avatar msdx 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

vehicle-keyboard-android's Issues

可不可以把v4包升级一下啊

我已确认所提问题在 FAQ.md 及 Issues 上没有。

问题描述:

车牌组件版本:
Android 版本:
设备型号:
界面问题如下:

异常日志如下:

键盘关闭问题建议

我已确认所提问题在 FAQ.md 及 Issues 上没有。

问题描述:
其他输入框的软键盘和车牌照键盘会同时存在。

车牌组件版本:0.7.3

建议:
建议加个监听,如果系统键盘出来,隐藏PopupKeyboard,PopupKeyboard出来的时候隐藏系统键盘。
点击input_view,如果PopupKeyboard显示,则PopupKeyboard隐藏,再次点击input_view如果PopupKeyboard隐藏,则PopupKeyboard显示。这样就差不多没啥问题了。

分离出键盘和控件

我已确认所提问题在 FAQ.md 及 Issues 上没有。

问题描述:键盘和控件能不能分离开来,这样用你的键盘就可以直接用,没必要将两个内容耦合在一起呀。KeyboardView和inputView关联在一起,如果想用原生的EditText或者其他的自定义view发现就没法实用了。

InputView点击问题

我已确认所提问题在 FAQ.md 及 Issues 上没有。

问题描述:可否把InputView的mOnFieldViewClickListener点击逻辑调整下,让整个View都能点击;比如空车牌时,点击自动选中第一个,即listener.onSelectedAt(0);以及点击位置大于车牌长度时,listener.onSelectedAt(numberLength)。我觉得这样交互会更友好,谢谢

车牌组件版本:
Android 版本:
设备型号:
界面问题如下:

异常日志如下:

请问一下,确定按钮为什么会把输入完成变成fasle

还有软件盘的确认按钮会把这里变成false,请问确认按钮隐藏软件盘怎么设置
for (OnInputChangedListener listener : mOnInputChangedListeners) {
listener.onCompleted(number, false);
}

我现在只能
if (inputView.isCompleted()) {
mPopupKeyboard.dismiss(AddCarActivity.this);
} else {
mPopupKeyboard.show(AddCarActivity.this);
}

fragment里怎么使用?

我已确认所提问题在 FAQ.md 及 Issues 上没有。

问题描述:

车牌组件版本:
Android 版本:
设备型号:
界面问题如下:

异常日志如下:

设置组件宽度,车牌输入框并未按比例缩放,导致显示变形

我已确认所提问题在 FAQ.md 及 Issues 上没有。

问题描述:
设置组件宽度,车牌输入框并未按比例缩放,导致显示变形

车牌组件版本:
implementation 'com.parkingwang:keyboard:0.7.3'

Android 版本:
*

设备型号:
*

界面问题如下:
设置一个相对较小的组件宽度,导致每一个输入框宽度不一致,同时最后一项选中框也会显示不全

异常日志如下:

增加输入完成监听

正好在做停车APP,看到这个源码,试了一下,发现输入完成后很尴尬,没有提供隐藏车牌键盘的地方,正常逻辑是输入完成后要么自动隐藏,要么点键盘上的确定键隐藏,希望有空可以考虑一下

键盘没有默认显示

我已确认所提问题在 FAQ.md 及 Issues 上没有。
这样设置键盘没有默认显示,一定要点击输入才显示键盘
final InputView mInputView = view.findViewById(R.id.input_view);
final KeyboardView keyboardview = view.findViewById(R.id.keyboardview);
final Button btChange = view.findViewById(R.id.bt_change);
KeyboardInputController.with(keyboardview, mInputView)
.useDefaultMessageHandler().setDebugEnabled(false)
.addOnInputChangedListener(new OnInputChangedListener() {
@OverRide
public void onChanged(String number, boolean isCompleted) {
}
@OverRide
public void onCompleted(String number, boolean isAutoCompleted) {
if(!isAutoCompleted){//点击确定按钮
dismissAllowingStateLoss();
}
}
})
.bindLockTypeProxy(new KeyboardInputController.ButtonProxyImpl(btChange) {
@OverRide
public void onNumberTypeChanged(boolean isNewEnergyType) {
super.onNumberTypeChanged(isNewEnergyType);
if (isNewEnergyType) {
btChange.setTextColor(getResources().getColor(android.R.color.holo_green_light));
} else {
btChange.setTextColor(getResources().getColor(android.R.color.black));
}
}
})
.setMessageHandler(new MessageHandler() {
@OverRide
public void onMessageError(int message) {
}
@OverRide
public void onMessageTip(int message) {
}
});


<com.parkingwang.keyboard.view.InputView
android:id="@+id/input_view"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_margin="6dp"
app:pwkInputTextSize="22sp"/>
<com.parkingwang.keyboard.view.KeyboardView
android:id="@+id/keyboardview"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

setLocalProvinceName 内蒙古自治区 会崩溃

我已确认所提问题在 FAQ.md 及 Issues 上没有。

问题描述:mPopupKeyboard.getKeyboardEngine().setLocalProvinceName("内蒙古自治区"); app直接崩溃了。
其他省份没这个问题

背景框不显示

我已确认所提问题在 FAQ.md 及 Issues 上没有。

问题描述:直接引用,车牌背景框不显示;引用源码修改了对应的颜色也还是无效,求指导

车牌组件版本:0.7.3
Android 版本:8.1.0
设备型号:
界面问题如下:

异常日志如下:

导包出现错误

Unable to resolve dependency for ':app@debug/compileClasspath': Could not resolve com.parkingwang:keyboard:0.5.3.

系统键盘同时出现

如果页面还有其他输入框让系统软键盘弹出来,那么这个键盘和系统键盘会同时上下显示出来,如何控制比较好呢?

可以多个按钮去控制是否8个输入框吗?

我已确认所提问题在 FAQ.md 及 Issues 上没有。

问题描述:
业务场景是有个车牌颜色的单选框,蓝色黄色渐变绿其他,当我选渐变绿就开启8个,其他3个就改回7个,这样可以吗?可以的话,大概思路是怎样,我现在把4个按钮都加到bindLockTypeProxy监听中,控制isNewEnergyType的值不能实现
车牌组件版本:
Android 版本:
设备型号:
界面问题如下:

异常日志如下:

建议加下license

我已确认所提问题在 FAQ.md 及 Issues 上没有。

问题描述:

车牌组件版本:
Android 版本:
设备型号:
界面问题如下:

异常日志如下:

snapshot 版本

我已经确定我的账号对这个库无法发布 snapshot 版本。
发布脚本应该是没有问题的,我在另外一个组织项目中 sms-captcha 可以发布 snapshot 版本。所以应该只是对于这个项目,我的账号没有这个权限。

点击查询记录回填到输入框

我已确认所提问题在 FAQ.md 及 Issues 上没有。

问题描述:点击查询记录回填到输入框

车牌组件版本:0.7.1
Android 版本:8.0
设备型号:华为nove2s
界面问题如下:点击记录回填到输入框时,新能源车牌与普通车牌的识别存在问题。在新能源车牌查询完成后点击记录中的普通车牌输入框不能正常切换模式

异常日志如下:

关于重写选中样式

我已确认所提问题在 FAQ.md 及 Issues 上没有。

问题描述:SelectedDrawable中的Position,子类获取不到。
车牌组件版本:0.7.1
Android 版本:8.0.0
设备型号:小米5
界面问题如下:第一个输入框左边、最后一个输入框右边和其他宽度不一致。
异常日志如下:
希望可以使用xml来配置。

点击新能源按钮之后,之前普通输入的最后一位会消失

Android版本,在点击"变更为:新能源"之后,之前普通输入的最后一位会消失,例如:输入"粤BD1234"之后,点击"变更为:新能源"按钮,这时输入框会变成"粤BD123",然后输入框焦点会跳转到最后一个Button,请问这是什么原因?

建议增加键盘收回的按钮

目前已经可以做到车牌输入完整后调dismiss隐藏键盘,但是如果误触InputView,键盘弹起必须输入一下才能隐藏,希望在键盘上增加隐藏的按钮。

没有输入完成的回调吗?

我已确认所提问题在 FAQ.md 及 Issues 上没有。

问题描述:

车牌组件版本:
Android 版本:
设备型号:
界面问题如下:

异常日志如下:

Detected problems with API 弹窗

我已确认所提问题在 FAQ.md 及 Issues 上没有。

问题描述:android P 禁止反射报的错

车牌组件版本:
Android 版本:9.0+
设备型号:
界面问题如下:

异常日志如下:

普通车牌最后一位可能是文字的

正则:
"([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))" + "|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳领]{1})";

华为p20 pro 手机报错

1 java.util.ArrayList.get(ArrayList.java:437)

2 com.parkingwang.keyboard.engine.NeighborLayoutTransformer.transformLayout(NeighborLayoutTransformer.java:33)
3 com.parkingwang.keyboard.engine.LayoutMixer.transform(LayoutMixer.java:38)
4 com.parkingwang.keyboard.engine.KeyboardEngine.update(KeyboardEngine.java:80)
5 com.parkingwang.keyboard.view.KeyboardView.update(KeyboardView.java:122)
6 com.parkingwang.keyboard.KeyboardInputController$1.onSelectedAt(KeyboardInputController.java:56)
7 com.parkingwang.keyboard.view.InputView$1.onClick(InputView.java:61)
8 android.view.View.performClick(View.java:6329)
9 android.view.View$PerformClick.run(View.java:24996)
10 android.os.Handler.handleCallback(Handler.java:809)
11 android.os.Handler.dispatchMessage(Handler.java:102)
12 android.os.Looper.loop(Looper.java:166)
13 android.app.ActivityThread.main(ActivityThread.java:7377)
14 java.lang.reflect.Method.invoke(Native Method)
15 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:469)
16 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:963)

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.