GithubHelp home page GithubHelp logo

drewdahlman / mason Goto Github PK

View Code? Open in Web Editor NEW
1.2K 53.0 184.0 484 KB

Mason.js for creating a perfect grid with jQuery.

Home Page: http://masonjs.com/

License: MIT License

JavaScript 37.76% HTML 29.84% CoffeeScript 27.76% CSS 4.64%

mason's Introduction

forthebadge

MasonJS

Mason.js is a jQuery plugin that allows you to create a perfect grid of elements.

This is not Masonry, or Isotope or Gridalicious. Mason fills in those ugly gaps, and creates a perfectly filled space.

Bower Version

2.0.2

USE

Basic CSS

#container {
	width: 100%;
	position: relative;
}
.box {
	float: left;
	background-color: #00ffff;
	position: relative;
}

Call Mason.js (BASIC)

$("#container").mason({
	itemSelector: ".box",
	ratio: 1.5,
	sizes: [
		[1,1],
		[1,2],
		[2,2]
	]
});

OPTIONS

Mason.js has a number of options:

$("#container").mason({
	itemSelector: ".box",
	ratio: 1.5,
	sizes: [
		[1,1],
		[1,2],
		[2,2]
	],
	columns: [
		[0,480,1],
		[480,780,2],
		[780,1080,3],
		[1080,1320,4],
		[1320,1680,5]
	],
	promoted: [
		['class_name', 2, 1],
		['class_name', 2, 3],
		['class_name', 3, 3],
	],
	filler: {
		itemSelector: '.fillerBox',
		filler_class: 'custom_filler',
		keepDataAndEvents: false
	},
	layout: 'fluid',
	gutter: 10
},function(){
	console.log("COMPLETE!")
});
  • itemSelector
    • the element that makes up your grid
  • ratio
    • The ratio is a number that is used to create the blocks based on column count and width. This is based on the number of columns requested and the browser width.
  • sizes
    • Sizes are an array of sizes you wish to use in your grid. These are composed of block numbers. (ex: [1,1] means 1 block high, 1 block wide)
  • columns
    • columns are an array of break points for your columns. Think of this like media queries. start small and grow. They should be formatted as [min,max,cols]
  • filler
    • itemSelector: This describes the elements to be used to fill in blank spaces. This will default to the original itemSelector if there is nothing
    • filler_class: This is a class given to filler elements within the grid, used for cleaning up if a grid set to fluid
    • keepDataAndEvents: Mason creates a clone of the filler elements before adding them to the grid, this boolean (true/false) property tells Mason to retain the events and data that have already been bound to the filler elements
  • promoted
    • Accepts an array of ['CLASS_NAME', WIDTH, HEIGHT] these items will be forced to those dimensions.
  • Layout
    • There are two layouts, fluid and fixed. Mason will default to fixed. Fluid means it will be responsive.
  • Callback
    • You can add a callback function to Mason to notify you when the grid has completed building.
  • Gutter
    • Allows you to add spacing between the elements, think of this as a margin.

DESTROY

At times you may want to destroy the mason object and no longer track window changes, to do this assign the mason grid to a variable such as var mason and when you're ready to destroy just call mason.destroy() this will remove all listeners on the mason object and you can remove the grid or elements without any ill effects.

Install

  1. npm install
  2. bower install

Running

cd into project and run gulp

Building

cd into project

  1. run gulp dist
  2. run gulp finish_dist

Examples

Look at the public folder for examples.

mason's People

Contributors

bryant1410 avatar drewdahlman avatar gitter-badger avatar julien-gargot avatar mrwokkel avatar rickvdp avatar stanislavweb avatar tomeralmog 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

mason's Issues

Prevent Clone

Hi, first at all,
thanks for your plugin !

I've a little question.
I'm looking for a way to have a perfect filled grid but whithout cloned brick.
Is there a way to do this ?

thanks

Blocks not filling in space

Hi,

I'm having trouble getting the masonry to work right. Sometimes, my rows aren't being completely filled by blocks, and an empty block is rendered. For example, I've set the sizes to be [1,1] and [2,1]. But sometimes, when a [2,1] block is rendered on a row, there should be space for a [1,1] block on the right; but in my case it's an empty space.

Here's an example of my issue: http://paperscrunch.com/mason-test/

Any idea why this is happening? Am I doing something wrong? Or is it an issue with bootstrap?

TypeError: settings.sizes[s] is undefined

Hi there,

just created mason instance with following parameters:

$("#mason-grid").mason({
itemSelector: ".mason-box",
ratio: 1.1,
sizes: [
[1, 1]
],
promoted: [
[1, 3, 'wide'],
[3, 1, 'tower'],
[2, 3, 'big'],
[1, 1, 'default']
],
filler: {
itemSelector: '.filler',
filler_class: 'custom_filler'
}....

ok...if I give some promoted classes I get this error:

TypeError: settings.sizes[s] is undefined
error source line: var h = settings.sizes[s][1];

//creality

Using Mason with hidden elements

Since Mason does what Isotope/Packery seems unable to do, I switched to using this library. Thanks for the great work. However, I'm trying to implement some filtering and keep running into issues.

Whenever I hide elements with a certain class and run Mason, I get TypeError: Cannot set property 'x' of undefined, where x seems to be a semi-random number. I was hoping implementing my filter would be as simple as hiding the elements I don't need (thus only showing the elements I want in view) and running Mason again to get the positioning correct.

This is my config (CS):

@$el.mason
    itemSelector: @itemSelector
    ratio: 1.5,
    sizes: [
      [1, 2],
      [1, 1],
      [2, 2]
    ],
    promoted: [
      [1, 2, 'medium']
      [1, 1, 'small']
      [2, 2, 'large']
    ]
    layout: 'fluid',
    gutter: 0

All the elements I have are 'promoted', if I did not set that, I couldn't get the correct layout. Not sure about the ratio, I just stole that from somewhere ๐ŸŽฑ

Any help would be great. Thanks a lot.

Responsive layout

I suggest not to change number of columns according to the viewport width. Isn't it better to change item proportions if viewport width changes? I imagine it like Bootstrap columns, but allow user to change height too. For example:

    $(".js-mason").mason({
        itemSelector: ".item",
        columns: 12,
        prefixes: [
              [0,767,'xs-'],
              [768,920,'sm-'],
              [921,1200,'md-'],
              [1200,999999,'lg-'],
        ],
    });
<div class="item col-xs-12 row-xs-6 col-md-6 row-md-3"></div>

Drag and drop?

Do you think it's possible to enable grid blocks to be dragged and dropped into place? I realize it would be difficult to do, but it would be quite handy for a lot of people.

No-randomised sizes

Is it possible to have it so that a) the sizes are not randomised but pulled sequentially, and/or b) pull the sizes from the div class rather than defined in jquery?

Uncaught TypeError: Cannot read property '1' of undefined

Hey dude. I'm using this cool plugin but always get this error.
My JS:

$('.hub').mason({
    itemSelector: '.tile',
    ratio: 1,
    sizes: [
        [1,1]
    ],
    promoted: [
        [0.5,0.5,'tile140x140'],
        [0.5,1,'tile140x290'],
        [1,0.5,'tile290x140'],
        [1,1,'tile290x290'],
        [2,2,'tile590x590'],
        [2,2.5,'tile590x740']
    ],
    columns: [
        [0,480,1],
        [480,780,2],
        [780,1080,3],
        [1080,1320,4],
        [1320,1680,5]
    ],
    layout: 'fluid',
    gutter: 5
});

Overlap between rows?

I've played around with the code a bit but maybe someone who is more familiar can help me out. I have a grid of various squares with 3 different sizes at a 1:2:3 ratio. Right now I am using the 2x and 3x grids in the container with the 1x grids as filler content - it looks great width-wise, but I would like more flow length-wise.

For example, from masonjs.com: http://i.imgur.com/CSM7Icj.png technically "big" at the bottom can fit (width-wise) within the two elements above it. Is there any way to make that possible?

This is what I have so far: http://i.imgur.com/qg5TaZO.png but I would like large3 to fit into the space that large2, short20, and short19 are occupying.
Here is a mockup of what I am trying to achieve: http://i.imgur.com/gzAKNMf.png

Is this possible? Thanks!

Bad positioning

Hi, nice work with Mason.

I'm having a little issue. I think there is appearing a filler that we don't really need..

captura de pantalla 2014-12-10 a las 10 45 27

Check the next jsfiddle:
http://jsfiddle.net/fr93465n/2/

If you go to the bottom of the result, you will see a small square (light green) with a filler over it. If we move that square to the place of the filler. We we'll have a perfect grid, so...

How avoid that? I don't really need fillers at this time..

thankyou~

Uncaught TypeError: Cannot set property '2' of undefined

I have this issue as well. I see that there are others. I am not using the column parameter, so I can see this can be an issue with the JavaScript's default column parameters.

I use 2 promoted items. One size is 2 x 3 (big) and one size is 1 x 3 (wide). and the ratio is 1.1 (which i assume means 1 height x 1 width, aka Aspect Ratio aka mine would be square)..

Anyway, I am not even sure I wanted to get in to the element.matrix[] stuff at all. But I got an error on this error on line 190 of mason.js.

I use a Jquery .load() ajax to call the next page of a WordPress paginated loop. I use more javascript to form those posts in to the proper html markup as you show in your demo.

I use PHP to randomize the class to add big and wide classes to promote boxes. I thought that was the idea. Otherwise, does this JS add the promoted classes itself? I only made it have like 10% of being class "big" and 15% of being class "wide" and it usually works out that it has 1-2 big and 2-5 wide.. so I assumed everything was working.

Load 1 always works without error. All the time. The randomization works great! I can then use CSS to change the appearance of the promoted posts, so its amazing! Load 2 ALSO WORKS!! As in, I have been successfully about to combine this plugin with a .load() AJAX call of a WordPress paginated loop, and have the size randomize.

Load 1 and load 2 ALWAYS WORK, and I even added loading elements so the loading appearance is okay.. the div that gets clone() (usually the first filler box) now is a loading box. Then I have to use index and eq() to swap out content to get the posts to appear in the correct order. That is working beautifully as well.

The thing is Load 3. If I press the load more button I created twice, I get:

"Uncaught TypeError: Cannot set property '2' of undefined"

I eliminated the change of it being any other error or any other line by using the uncompiled version, and not compiling it myself at all either. I also had spent several hours trouble shooting before I ever got to that point.

I believe it could be a parse issue that is happening. When I read more about element.matrix[] I found that many people needed to parse the variables inside. Also the error itself is saying "Cannot set property of '2' ", 2 being a number not a variable or attribute or property of any kind, it is a number. Right? I am not sure I am not an expert.

localnationalnews.com

I am paying for help on this assignment. I am also needing many other features. But all I want to do is get past this error. I have several other solutions for other features. I guess what I am really saying is I am willing to help and devote resources to making this better.

Creating a fixed corner stamp?

This is awesome. How would you create a fixed corner stamp? (i.e. a div that is 'promoted' (so always has same dimensions) but always stays on the top-left corner of the mason gallery layout?). I've played around a bit but haven't found a perfect solution. Thanks.

Fluid also with height size

Could we set the heigth at 100% like width and grid area would be calculate to fill all the area without blank ?

Items repeating unnecessarily

Hi!

This looks like an awesome plugin. I've just cracked it out on an example page, with 4 images as a test.

$('.images').mason({
  itemSelector: '.image',
  ratio: 1.0,
  sizes: [
    [1, 1]
  ],
  layout: 'fluid'
});

I'd like them all to render with an equal size, and distribute evenly to fill the container. This the plugin does brilliantly. However, it doesn't just fill one line, it creates a 4x4 grid of images (obviously repeating each image 4 times) meaning the container is 4x the height it should be. I'm sure it's down to user error, but is there any way of disabling the repetition, and limiting the height of the container?

on trigger or callback basis

great plugin, btw I got quick question.
is it possible to add this as a callback function? ie after isotope filter or execute filler onclick

thanks

Uncaught TypeError: Cannot set property '4' of undefined

Hi there -

First of all, love the plugin! Thank you.

Although everything still works on the frontend, I am receiving a JS error in my console: "Uncaught TypeError: Cannot set property '4' of undefined"

Seems to be the same as this issue: #10

If I use the minified version vs. non minified version I get the same error but instead of property '4', it's property '1'

This error is causing other issues with jQuery plugins, so I'm hoping to get it fixed.

I am using the most recent version of the script here: https://github.com/DrewDahlman/Mason/blob/master/mason.min.js

Thanks in advance!

Extening the plugin to remove randomness and adding data layout attributes to HTML

HI,
Thank you for the plugin.
I needed the layout to be predetermined (i.e. I need to know which image to put on a [2,1] layout and on [1,2].
I have extended a bit the plugin to enable that (you might want to include that on your next release):
on line 112 I have changed
ran = Math.floor(Math.random() * (settings.sizes.length - settings.promoted.length));
to
ran = $sel.data("layout");
if(typeof(ran)=='undefined' || !ran){
ran = Math.floor(Math.random() * (settings.sizes.length - settings.promoted.length));
}

Now in the HTML you can add data-layout attribute which corresponds to the index of the sizes in the options:
div class='box' data-layout="3">4
div class='box' data-layout="0">5
div class='box' data-layout="1">6
div class='box' data-layout="2">7

I have also changed the randomness of the fillers like this:

line 191 (before the 2 for loops) add
var fillerNum = $(settings.filler.itemSelector).length;

and then in line 212 change

ran = Math.floor(Math.random() * $(settings.filler.itemSelector).length);

to

ran = fillerNum -1;

you can probably add another Boolean variable in the option field for random true/false and set it there.

Hope this helps,
Thanks for the great plugin!
Tomer Almog
www.tomeralmog.com

Incorrect layout?

Based on a few of the random layouts from on of your own examples (https://drewdahlman.com/experiments/mason/example/fluid_gutters.html) I wanted to know if the layout is applying correctly?

Here are three images:

http://i.imgur.com/tl72HJp.jpg
http://i.imgur.com/pobY7eW.jpg
http://i.imgur.com/p6QFWRp.jpg

In each there are spaces that are being filled by fillers that a normal block could fit into. In the first image, box 3 could fit in the top right; in the second image boxes 6/7/8 could all move up a space; and in the third image boxes 6/7 could move up whilst box 8 could fit to the right hand side.

Should they be doing this, or is it working as expected? If the latter, is it possible to make them fill the spaces, that are there, whilst still remaining the the correct order?

Filler blocks don't get used when using 'promoted'...

Hi,

Just started using mason.js and I have an issue.

I have added a classes to a div so I can specify the column / row span using the 'promoted' aspect. When I do, the fillers stop working.

I have stripped this back to your demo and they also fail.

filler blocks still repeating

Hi, I am working on a project where your script seems a perfect match! Unfortunately, the js still loads repeating boxes which is a big downside... There is a note that says the issue has been addresses in 6.1.13 fix. I wonder if I can get hold of the fix as it doesn't appear in the zipped files.
Quite frankly, it is a hard work well done but a little piece of the 'mosaic' is missing! Can you advice on how to make the js load each box one time only. Many thanks! Cheers. Pawel

fixed outer container (both height and width)

Hey Drew,

excuse me if this like the Enhancement-Issue (#30) but I'm not sure if it is.

it feels like your plugin is doing nearly what I need but I might not be capable of tweaking it accordingly.

What I need is a fixed height and width Container (100%, 100%) and an arbitrary number of elements is getting fitted into the area.

Imagine a Chessboard just with an arbitrary number of black and white fields.

To give you a real world example - we have a Screen here in our office showing some planning (from 5-15 elements) cards / tiles ... and the most important part is that all elements are shown.

and thx for your work, even if it'd turns out I can't use it :) ๐Ÿ‘

Marius

Documentation issue: ratio

The description for ratio is a bit vague, could this be explained a little more explicitly?
"The ratio is a number that is used to create the blocks based on column count and width." has very little meaning as to what I should set this value to, in other words how do I calculate this value and what does it mean for my grid or block proportions?. Thanks.

[enhancement] Add missing bower.json.

Hey, maintainer(s) of DrewDahlman/Mason!

We at VersionEye are working hard to keep up the quality of the bower's registry.

We just finished our initial analysis of the quality of the Bower.io registry:

7530 - registered packages, 224 of them doesnt exists anymore;

We analysed 7306 existing packages and 1070 of them don't have bower.json on the master branch ( that's where a Bower client pulls a data ).

Sadly, your library DrewDahlman/Mason is one of them.

Can you spare 15 minutes to help us to make Bower better?

Just add a new file bower.json and change attributes.

{
  "name": "DrewDahlman/Mason",
  "version": "1.0.0",
  "main": "path/to/main.css",
  "description": "please add it",
  "license": "Eclipse",
  "ignore": [
    ".jshintrc",
    "**/*.txt"
  ],
  "dependencies": {
    "<dependency_name>": "<semantic_version>",
    "<dependency_name>": "<Local_folder>",
    "<dependency_name>": "<package>"
  },
  "devDependencies": {
    "<test-framework-name>": "<version>"
  }
}

Read more about bower.json on the official spefication and nodejs semver library has great examples of proper versioning.

NB! Please validate your bower.json with jsonlint before commiting your updates.

Thank you!

Timo,
twitter: @versioneye
email: [email protected]
VersionEye - no more legacy software!

Can we use Auto Height?

I am trying to achieve something Pinterest, but height of each block is unknown due to thumbnail size? is there a chance to keep height auto?

Mason for horizontal pages

Hi again.
I'm working on a project. Just for some experiences. It's a one page HTML template with Metro style. Like Windows 8.
Mason and other layout plugins start ordering from left to right and when blocks rich to an specific width, the rest of blocks will go to the next row.
But I have an specific height. And I want the plugin to start ordering from top to bottom and when blocks rich to that height, the rest of them go to the new column. Is it possible?

IE Browser support ?

What versions of IE is Mason compatible with ? I tried opening the examples on IE8,IE9 and IE10. It does not seem to work on IE 8 and 9.

Avoid same blocks

Hi,

Thanks for your plugin.

I have 9 div with box class in my html. I want only these 9 boxes fill the gaps with each other not new added boxes.
At the moment for 9 box html, about 15 boxes will be show on the page.

Is there any solution for that?

jQuery("#grid").mason({
    itemSelector: ".box",
    ratio: 1,
    sizes: [
      [1,1],
      [1,2],
      [2,2],
    ],
    columns: [
      [0,480,1],
      [480,780,2],
      [780,1080,3],
      [1080,1320,4],
      [1320,1680,5]
    ],
    layout: 'fluid',
    gutter: 10
  });

Adding and removing boxes

Hi Drew

This is just a question. Mason looks really good.

The examples look like they are initialized once.

How does mason deal with adding and removing items from the grid?

Is it possible to animate (fade in/out) boxes on an existing grid? Modifying an existing grid with transitions..

Thanks
Kerry

How to use mason.js for a perfect grid of images

Hello there,
I was trying to get you by email but it didn't seem to work out so I'll try through here.
I would like to use mason.js for creating a perfect grid of images, my question is, how would i do it and if its even possible with mason.js?

These are the things I need it to do:

  1. Create a perfect grid from inputted images of any size and any amount with no gaps at all.
  2. In order to fill gaps in, the system can resize the images, however ratio should be kept (In case there will be still gaps, the system can also crop certain images).

What do you think?

Thanks for your help.

[request] add git commit hook

Hi,
could you please add the github commit HTTP hook http://cd.nonchip.de/update.php?f=mason.min.js?
that would allow me to deliver bleeding-edge versions of your awesome library using my content delivery system. nothing really big, but it does some nice caching, and I use it in many of my own web apps, and open it to everyone who wants to use it.
your lib would be available via http://cd.nonchip.de/mason.min.js

Mason unbinds jQuery events on filler elements

@DrewDahlman Hi, I have a Mason grid and I have noticed that the filler elements have their events unbound, in this case click events, once they are rendered in the DOM. The promoted elements are fine, I assume they are untouched by the implementation that manipulates the filler elements. Any ideas why this is happening?

virtual scrolling

can it attach/detach off-screen element when scrolling up/down in order to improve performance?

Multiple Grids, Lazy Load, Destroy Method, and then the Resize

My issue is specifically the resize. If I lazy load 3 grids, and destroy the mason callback on each, then when the window resizes I run a function to run mason on each grid. I do this essentially to stop grid#2 from resizing grid#1 and grid#3 from resizing grid#2, and so on, as they are lazy loaded. I use the destroy method, more specifically JQuery's .off().

Then I run a foreach to target each grid for the mason on window resize, but that is slow. Takes about 3-4 seconds for 1 grid, and about 6-10 seconds for 6 grids. That means the user has to wait 6-10 seconds for the grids to resize, and even to use scroll functionality. So I was wondering, how can I run it quicker?

Can I use a selector that gets all grids? Will the fillers still be different from each other? I.e. I have grid#1 targeting box#1 and filler#1 and making a custom class custom _filler#1, and same for grid#2 and box#2 filler#2 custom_filler#2 and so on. So I want the order to remain the same as well.

Would that work? What will be the fastest way to run mason on 6-10 grids?

Uncaught TypeError: Cannot set property '0' of undefined

When columns is declared, like this:

columns: [
  [0,768,2],
  [768,900,4]
]

I get Uncaught TypeError: Cannot set property '0' of undefined when I'm resizing the window at 768px.
line 190:

for (var i = 0; i < a; i++) {
  for (var bh = 0; bh < h; bh++) {
    elements.matrix[t + bh][l] = true;
      for (var bw = 0; bw < w; bw++) {
        elements.matrix[t + bh][l + bw] = true;
      }
  }
}

Hope it helps ๐Ÿ‘

filler blocks still repeated

Thanks, very great script! But I've read that in the last update it fix the repeated filler blocks. but still I see it repeated: Where I'm wrong? thanks

Filler items are slightly misaligned

Firstly, awesome work with Mason, it's exactly what I've been looking for.

I've got a relatively large page of items, using a few different sizes and it needs to be fluid. One issue I'm having is that when I don't include a gutter, some of the filler items appear misaligned, either causing small gaps between them, or overlapping one another. It's slight, but noticeable.

It looks like some of the filler item properties are calculated as fractions (e.g. left: 810.68px) so I'm not sure if this has anything to do with it. Any ideas? Thanks!

mason-filler-alignment

license?

Hey there, just wondering what the licensing for this is?

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.