gwtbootstrap3 / gwtbootstrap3 Goto Github PK
View Code? Open in Web Editor NEWGWT wrapper for the Bootstrap front-end framework
License: Apache License 2.0
GWT wrapper for the Bootstrap front-end framework
License: Apache License 2.0
Badge has been constructed as a AbstractTextWidget, but in fact it is really a SPAN and should therefore behave like this and allow child elements.
For example, this isn't achievable with the current approach.
<span class="badge pull-right badge-color"><i class="fa fa-spin fa-cog"></i> Saving</span>
Happy to make the changes, but will likely break things unless we pollute the library with BadgePanel (of which I think is the wrong approach). Badge and other Span based elements should have always allowed child elements and adding Text should be the way given GWT doesn't allow another way of having UIBinder have Text and Child widgets in XML.
Currently this will cause an exception.
<b:InputGroup>
<b:InputGroupAddon>
<b:Icon type="USER"></b:Icon>
</b:InputGroupAddon>
<b:TextBox placeHolder="User Name" autoComplete="false"/>
</b:InputGroup>
Current Behavior:
DateTimeBox does not hide when URI anchor changes.
Expected Behavior:
DateTimeBox will hide if showing when the URI Anchor changes.
Example:
Go to page: http://gwtbootstrap3.github.io/gwtbootstrap3-demo/#dateTimePicker
Go to "Methods"
Click "Show"
From the NavHeader dropdown, select "Cpomponents" > "Alerts"
DateTimePicker still shows.
I'm using 0.6 snaphost version in my project, on IE8 there is problem with column layout.
Both on my page and project demo, layout looks like mobile design streched to 100% width, no reaction for column definition.
System: Windows 8, IE 10.0.12 run in IE8 mode with document IE8 type. Same problems on Windows XP default Internet Explorer 8
This library emulates widgets very good on look&feel, but is too static. I mean when I start to do something dynamically, it works VERY bad ! Almost all widgets are based on Panel rather than some existing widgets provided by GWT by default (like DialogBox, PasswordTextBox, etc.). Well, maybe you don't have choice to build a graphically perfect widget library. But when a widget is attached to the DOM (usually by JSNI calls), only physical attachment is done, NO logical attachment is done at all !
Here is a simple example :
final Modal modal = new Modal();
modal.setTitle("Error");
ModalBody body = new ModalBody();
body.add(new Alert("This is an error", AlertType.DANGER));
modal.add(body);
modal.setFade(true);
modal.addHandler(new ModalHiddenHandler() {
@Override
public void onHidden(ModalHiddenEvent evt) {
// When the modal is hidden (after animation), it shold be detached
// from the DOM ; But since modal is NOT attached logically, GWT
// does not know it is attached, who is its parent, etc. So this code
// simply does NOTHING ! To fix it, I have to add :
// RootPanel.get().add(modal); on the onShown(evt) handler to
// perform manually the logical attach. But it's clearly not the proper way!
modal.removeFromParent();
}
}, ModalHiddenEvent.getType());
modal.show();
I guess there are too many this kind of critical issues in the current version and hope you can provide a fix in the next release.
ListItem
extends from AbstractAnchorListItem
and thus always contains an <a>
tag. This is fine and intended when ListItem
for example is used within a dropdown menu but when ListItem
is used in an OrderedList
or UnorderedList
all items are hyperlinks which might not be intended.
Need to think of a way to make ListItem
independent of an anchor without breaking existing code.
In "List Group" page,
sample code has errors.
Root tag not start and end correct.
<b:LinkedGroup/>
<b:LinkedGroupItem active="true" text=""/>
<b:LinkedGroupItem text=""/>
<b:LinkedGroupItem text=""/>
</b:LinkedGroup/>
I think this is due to how setSubtext doesn't change the child element as it does in the constructor, and approach to fix should be consistent with how other approaches have been (and I'm not sure what that was) - probably checking if the element is attached etc.
Hello,
I would like to use the latest version, but PasswordTextBox did not make the cut after version 0.5. Why?
Hi GWT Boostrap 3 authors!
First of all, congratulations and thank you on making such a great library:
Very useful and almost all Boostrap3 features-complete ( the only flaw i see is the javadoc, that really needs to be improved! :) )
I want to report a issue in current 0.6-SNAPSHOT with ListDropDownMenu inside navbar.
The 'drop down' indicator, and any icon added to the inner toggle button, is wrongly placed at the LEFT of the button's text. See screenshot below:
Here is the related UiBinder code:
<g:HTMLPanel>
<b:NavbarNav pull="RIGHT" ui:field="loggedInNav">
<b:ListDropDown>
<b:AnchorButton toggle="DROPDOWN" ui:field="loggedUserButton"
icon="USER" iconPosition="RIGHT" />
<b:DropDownMenu>
<b:ListItem href="settings" icon="GEAR">Settings</b:ListItem>
<b:Divider />
<b:ListItem ui:field="logoutLink" icon="KEY">Logout
</b:ListItem>
</b:DropDownMenu>
</b:ListDropDown>
</b:NavbarNav>
<b:NavbarNav pull="RIGHT" ui:field="notLoggedInNav">
<b:NavbarLink addStyleNames="btn btn-success navbar-btn" ui:field="loginLink">Log In</b:NavbarLink>
</b:NavbarNav>
</g:HTMLPanel>
The same code works fine with 0.5 version...
Tine
Add "Fork me on GitHub" ribbon to demo page
Bootstrap CSS contains styles for col-XS-offset-# and col-*-offset-0 but the Java constants ColumnOffset is missing these.
Since we're now using ScriptInjector
we need to make sure to call all native JS (like binding of events) in onLoad()
of Widgets and not in constructors.
As per Bootstrap 3.0.3 CSS, the Heading elements should accept emphasis style (but currently don't).
DateTimePicker.gwt.xml
inherits GwtBootstrap3,
this module includes theme files.
If I use DateTimePicker and GwtBootstrap3NoTheme in my project.
It will cause a conflict.
A solution is create a DateTimePickerNoTheme.gwt.xml
.
Is this ok?
Thanks.
Span should accept child elements like the following valid and commonly used HTML
<span><i class="icon-chevron-right"></i>Some longer sample text</span>
I've create RadioButton and add to ButtonGroup.
After 1-click on the button, the handler will invoke for two times.
RadioButton button = new RadioButton(label);
button.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
GWT.log("click");
}
});
Specifying JS resources in GWT module's XML file is deprecated and doesn't work with SuperDevMode. ScriptInjector should be used.
Similiar to this approach, create ClientBundles
for (almost) every GWT module but inject the resources in EntryPoints
for every module
Add support for different input types to TextBox
, e.g. text
, password
, email
, etc.
Hyperlink or ListItem has the targetHistoryToken.
<g:Hyperlink targetHistoryToken="/doThe#thing">
or
<b:ListItem targetHistoryToken="/doThe#thing">
There is common usages let Bootstrap make a hyperlink <a class="btn...>
looks like a button.
How about make a Button (or HyperLinkButton) that could do this?
HTML5 offers caching to support using a web application in offline mode - the entire app/site (css files, javascript files, resources etc) can be cached on the browser so that next subsequent visits can be fulfilled from the cache (even when offline).
GWT compiler automatically generates lots of css and javascript files that are different every time GWT complies - so the manifest needs to reflect this new set each time (plus we could probably include some method to ensure the added Extra resources are cached as well).
As such, I'd like to add Manifest Linker support to the library - is that ok? If so, please assign to me.
Similar to Span, the Heading doesn't allow the correct child elements.
I think there is a need for a new Inline class that extends ComplexWidget but limits the children to be only inline elements which are (TT | I | B | BIG | SMALL | EM | STRONG | DFN | CODE | SAMP | KBD | VAR | CITE | ABBR | ACRONYM | A | IMG | OBJECT | BR | SCRIPT | MAP | Q | SUB | SUP | SPAN | BDO | INPUT | SELECT | TEXTAREA | LABEL | BUTTON)
This is probably overly complex, and probably a simpler and realistically simple solution would be to just make Heading and Span (and any other incorrect elements) extend ComplexWidget (as Div does).
Unless there is object to this simpler approach, I'll submit a pull request with this done.
Input
element should provide handlers for key events. See HasAllKeyHandlers
interface of GWT.
Change GwtBootstrap3NoTheme to be more minimal or have another GwtBootstrap3Bare that is suitable for CDN where you load "EVERYTHING" from the CDN site and only the GWT compile JS from GwtBootstrap3 lib that expects the CSS/JS and fonts to be loaded in the HTML manually by the user.
In my experiment I am combining gwt-bootstrap3 with another framework that does touch events. (mgwt)
[ERROR] com.google.web.bindery.event.shared.UmbrellaException: Exception caught: Exception caught: 5 exceptions caught: Exception caught: Exception caught: (TypeError) @org.gwtbootstrap3.client.ui.Pre::prettyPrint()([]): Object [object global] has no method 'prettyPrint'; Exception caught: Exception caught: (TypeError) @org.gwtbootstrap3.client.ui.Pre::prettyPrint()([]): Object [object global] has no method 'prettyPrint'; Exception caught: Exception caught: (TypeError) @org.gwtbootstrap3.client.ui.Pre::prettyPrint()([]): Object [object global] has no method 'prettyPrint'; Exception caught: Exception caught: (TypeError) @org.gwtbootstrap3.client.ui.Pre::prettyPrint()([]): Object [object global] has no method 'prettyPrint'; Exception caught: Exception caught: (TypeError) @org.gwtbootstrap3.client.ui.Pre::prettyPrint()([]): Object [object global] has no method 'prettyPrint'
[ERROR] at com.google.web.bindery.event.shared.SimpleEventBus.doFire(SimpleEventBus.java:203)
[ERROR] at com.google.web.bindery.event.shared.SimpleEventBus.fireEvent(SimpleEventBus.java:88)
[ERROR] at com.google.gwt.place.shared.PlaceController.goTo(PlaceController.java:156)
[ERROR] at com.googlecode.mgwt.mvp.client.history.MGWTPlaceHistoryHandler.handleCurrentHistory(MGWTPlaceHistoryHandler.java:182)
[ERROR] at vendor.client.dash.mgwt.startup.MgwtEntryPoint.start(MgwtEntryPoint.java:90)
[ERROR] at vendor.client.dash.mgwt.startup.MgwtEntryPoint.access$0(MgwtEntryPoint.java:36)
[ERROR] at vendor.client.dash.mgwt.startup.MgwtEntryPoint$2.run(MgwtEntryPoint.java:147)
[ERROR] at com.google.gwt.user.client.Timer.fire(Timer.java:149)
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
[ERROR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[ERROR] at java.lang.reflect.Method.invoke(Method.java:601)
[ERROR] at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
[ERROR] at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
[ERROR] at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
[ERROR] at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:338)
[ERROR] at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:219)
[ERROR] at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
[ERROR] at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:571)
[ERROR] at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:279)
[ERROR] at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
[ERROR] at com.google.gwt.core.client.impl.Impl.apply(Impl.java)
[ERROR] at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:242)
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
[ERROR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[ERROR] at java.lang.reflect.Method.invoke(Method.java:601)
[ERROR] at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
[ERROR] at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
[ERROR] at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
[ERROR] at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:293)
[ERROR] at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:547)
[ERROR] at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364)
[ERROR] at java.lang.Thread.run(Thread.java:722)
[ERROR] Caused by: com.google.gwt.event.shared.UmbrellaException: Exception caught: 5 exceptions caught: Exception caught: Exception caught: (TypeError) @org.gwtbootstrap3.client.ui.Pre::prettyPrint()([]): Object [object global] has no method 'prettyPrint'; Exception caught: Exception caught: (TypeError) @org.gwtbootstrap3.client.ui.Pre::prettyPrint()([]): Object [object global] has no method 'prettyPrint'; Exception caught: Exception caught: (TypeError) @org.gwtbootstrap3.client.ui.Pre::prettyPrint()([]): Object [object global] has no method 'prettyPrint'; Exception caught: Exception caught: (TypeError) @org.gwtbootstrap3.client.ui.Pre::prettyPrint()([]): Object [object global] has no method 'prettyPrint'; Exception caught: Exception caught: (TypeError) @org.gwtbootstrap3.client.ui.Pre::prettyPrint()([]): Object [object global] has no method 'prettyPrint'
[ERROR] at com.googlecode.mgwt.mvp.client.AnimatingActivityManager.onPlaceChange(AnimatingActivityManager.java:214)
[ERROR] at com.google.gwt.place.shared.PlaceChangeEvent.dispatch(PlaceChangeEvent.java:70)
[ERROR] at com.google.gwt.place.shared.PlaceChangeEvent.dispatch(PlaceChangeEvent.java:1)
[ERROR] at com.google.gwt.event.shared.GwtEvent.dispatch(GwtEvent.java:1)
[ERROR] at com.google.web.bindery.event.shared.EventBus.dispatchEvent(EventBus.java:40)
[ERROR] at com.google.web.bindery.event.shared.SimpleEventBus.doFire(SimpleEventBus.java:193)
[ERROR] ... 33 more
[ERROR] Caused by: com.google.gwt.user.client.ui.AttachDetachException: 5 exceptions caught: Exception caught: Exception caught: (TypeError) @org.gwtbootstrap3.client.ui.Pre::prettyPrint()([]): Object [object global] has no method 'prettyPrint'; Exception caught: Exception caught: (TypeError) @org.gwtbootstrap3.client.ui.Pre::prettyPrint()([]): Object [object global] has no method 'prettyPrint'; Exception caught: Exception caught: (TypeError) @org.gwtbootstrap3.client.ui.Pre::prettyPrint()([]): Object [object global] has no method 'prettyPrint'; Exception caught: Exception caught: (TypeError) @org.gwtbootstrap3.client.ui.Pre::prettyPrint()([]): Object [object global] has no method 'prettyPrint'; Exception caught: Exception caught: (TypeError) @org.gwtbootstrap3.client.ui.Pre::prettyPrint()([]): Object [object global] has no method 'prettyPrint'
[ERROR] at com.google.gwt.user.client.ui.AttachDetachException.tryCommand(AttachDetachException.java:87)
[ERROR] at com.google.gwt.user.client.ui.Panel.doAttachChildren(Panel.java:170)
[ERROR] at com.google.gwt.user.client.ui.Widget.onAttach(Widget.java:345)
[ERROR] at com.google.gwt.user.client.ui.Composite.onAttach(Composite.java:162)
[ERROR] at com.google.gwt.user.client.ui.Widget.setParent(Widget.java:475)
[ERROR] at com.google.gwt.user.client.ui.Panel.adopt(Panel.java:127)
[ERROR] at com.google.gwt.user.client.ui.SimplePanel.setWidget(SimplePanel.java:160)
[ERROR] at com.google.gwt.user.client.ui.SimplePanel.setWidget(SimplePanel.java:129)
[ERROR] at com.googlecode.mgwt.mvp.client.display.AnimatableDisplayBaseImpl.setFirstWidget(AnimatableDisplayBaseImpl.java:100)
[ERROR] at com.googlecode.mgwt.mvp.client.AnimatingActivityManager.showWidget(AnimatingActivityManager.java:357)
[ERROR] at com.googlecode.mgwt.mvp.client.AnimatingActivityManager.access$3(AnimatingActivityManager.java:354)
[ERROR] at com.googlecode.mgwt.mvp.client.AnimatingActivityManager$ProtectedDisplay.setWidget(AnimatingActivityManager.java:64)
[ERROR] at vendor.client.dash.presenter.AdminLoginActivity.start(AdminLoginActivity.java:20)
[ERROR] at com.googlecode.mgwt.mvp.client.AnimatingActivityManager.onPlaceChange(AnimatingActivityManager.java:200)
[ERROR] ... 38 more
[ERROR] Caused by: com.google.gwt.user.client.ui.AttachDetachException: Exception caught: Exception caught: (TypeError) @org.gwtbootstrap3.client.ui.Pre::prettyPrint()([]): Object [object global] has no method 'prettyPrint'
[ERROR] at com.google.gwt.user.client.ui.AttachDetachException.tryCommand(AttachDetachException.java:87)
[ERROR] at com.google.gwt.user.client.ui.Panel.doAttachChildren(Panel.java:170)
[ERROR] at com.google.gwt.user.client.ui.Widget.onAttach(Widget.java:345)
[ERROR] at com.google.gwt.user.client.ui.AttachDetachException$1.execute(AttachDetachException.java:34)
[ERROR] at com.google.gwt.user.client.ui.AttachDetachException.tryCommand(AttachDetachException.java:74)
[ERROR] ... 51 more
[ERROR] Caused by: com.google.gwt.user.client.ui.AttachDetachException: Exception caught: (TypeError) @org.gwtbootstrap3.client.ui.Pre::prettyPrint()([]): Object [object global] has no method 'prettyPrint'
[ERROR] at com.google.gwt.user.client.ui.AttachDetachException.tryCommand(AttachDetachException.java:87)
[ERROR] at com.google.gwt.user.client.ui.Panel.doAttachChildren(Panel.java:170)
[ERROR] at com.google.gwt.user.client.ui.Widget.onAttach(Widget.java:345)
[ERROR] at com.google.gwt.user.client.ui.AttachDetachException$1.execute(AttachDetachException.java:34)
[ERROR] at com.google.gwt.user.client.ui.AttachDetachException.tryCommand(AttachDetachException.java:74)
[ERROR] ... 55 more
[ERROR] Caused by: com.google.gwt.core.client.JavaScriptException: (TypeError) @org.gwtbootstrap3.client.ui.Pre::prettyPrint()([]): Object [object global] has no method 'prettyPrint'
[ERROR] at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:249)
[ERROR] at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
[ERROR] at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:571)
[ERROR] at com.google.gwt.dev.shell.ModuleSpace.invokeNativeVoid(ModuleSpace.java:299)
[ERROR] at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeVoid(JavaScriptHost.java:107)
[ERROR] at org.gwtbootstrap3.client.ui.Pre.prettyPrint(Pre.java)
[ERROR] at org.gwtbootstrap3.client.ui.Pre.onLoad(Pre.java:86)
[ERROR] at com.google.gwt.user.client.ui.Widget.onAttach(Widget.java:350)
[ERROR] at com.google.gwt.user.client.ui.AttachDetachException$1.execute(AttachDetachException.java:34)
[ERROR] at com.google.gwt.user.client.ui.AttachDetachException.tryCommand(AttachDetachException.java:74)
[ERROR] ... 59 more
I think we should update the bundled Bootstrap version to 3.0.3
The way it is right now, Button's element is "button." That doesn't allow users to use targetHistoryToken/href in order to navigate. We should move the Button's element tag to "a" to allow for this.
Twitter released a new version. Update to use it.
** Updated locally now, testing to make sure we cover all new features/nothing breaks.
Would be nice if we could deeplink into Activities of demo with Places, e.g. to open the Icons demo page: http://svenjacobs.github.io/gwtbootstrap3/#components-icons
@jgodi: What do you think?
Hi,
I've noticed that with the recent update to tabs you now have some css included that isn't used and is extra beyond the normal bootstrap css
Wondering if being consistent that should this be part of an "extra" plugin?
I'm not all that keen on having extra resource files being required (meaning my client download time is impacted) for content that I'm not using or wanting.
After last update of snapshot release Span don't implement HasResponsivness anymore. But on demo Span has hiddenOn and visibleOn attributes set. Please update Wiki or make Span implements HasResponsivness.
Seem to be missing ListBox.
http://stackoverflow.com/a/18151311/994243
I guess it would render a simple select with class form-control.
The recently added CheckBox class does not expose the CheckBoxButton so you cannot programmatically determine the value of the checkbox within a form.
I'm guessing, like Issue #27 is should implement HasFormValue yeah??
G
Typeahead component was dropped from gwtbootstrap3. It would be great to have GWT wrapper for typeahead.js (http://twitter.github.io/typeahead.js/)
Not sure if it is in scope of gwtbootstrap3 project.
Hi guys,
First I want to congratulate your efforts - framework looks very promising and I'm already seriously considering it.
Allow me to raise some issues in the process:
I wanted to create a side navigation bar, and extend a menu item with a sub-menu (the way components are listed in the bootstrap main site). I couldn't do it without creating my own widget from scratch because:
ListItems are constructed as HasText widgets and can only accept Texts in the body. I personally don't see the value of this. We could easily use a text property instead - which is what I'm doing in my own widget.
The ultimate goals of the widgets is to create the following HTML structure (for submenu support):
Input should have a convenience get/set for value
The Inline form does not have padding between controls (padding-left is 0). I believe this is a left-over issue from GWTBootstrap 2.
To see the issue, please visit the Sample form or view the attached screenshot: http://gwtbootstrap3.github.io/gwtbootstrap3-demo/#forms
The bootstrap example of the inline form using padding is available here (and attached): http://getbootstrap.com/css/#forms-inline
Bootstrap modals not convenient for simple alert, confirm and prompt dialogs.
Bootbox.js do this well.
Bootbox sample in native JS code.
bootbox.alert("Hello world!", function() {
Example.show("Hello world callback");
});
I would like create a bootbox wrapper like GWT Window.alert()
static method.
Pseudo code:
// GWT Bootbox.js, JSNI implementation
Bootbox.alert("Message");
How about put this feature to this project?
Thank you.
Add uploading of Javadocs to the GitHub Pages of this project to Maven process.
Maybe we should update the license header to just reflect GwtBootstrap3?
[ERROR] Not allowed in an HTML context: <\b:AnchorButton block='true' targetHistoryToken='{nameTokens.getEventCreate}' type='PRIMARY'> (:26)
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.