Coder Social home page Coder Social logo

tabler / tabler Goto Github PK

View Code? Open in Web Editor NEW
37.0K 648.0 3.8K 286.79 MB

Tabler is free and open-source HTML Dashboard UI Kit built on Bootstrap

Home Page: https://tabler.io

License: MIT License

HTML 67.44% JavaScript 3.40% Ruby 2.13% SCSS 26.95% Dockerfile 0.09%
dashboard html bootstrap sass scss boilerplate-template admin-dashboard dashboard-templates modular dashboards

tabler's Introduction

A premium and open source dashboard template with a responsive and high-quality UI.

A premium and open source dashboard template with a responsive and high-quality UI.

NPM version NPM Downloads Tabler preview License Tabler preview Test build GitHub stars

πŸ”Ž Preview

Tabler is fully responsive and compatible with all modern browsers. Thanks to its modern and user-friendly design you can create a fully functional interface that users will love! Choose the layouts and components you need and customize them to make your design consistent and eye-catching. Every component has been created with attention to detail to make your interface beautiful! Show me a demo

Tabler preview

πŸš€ Features

We've created this admin panel for everyone who wants to create templates based on our pre-made components. Our mission is to deliver a user-friendly, clear and easy administration panel that can be used by both simple websites and sophisticated systems. The only requirement is basic HTML and CSS (and some Liquid) knowledge β€” as a reward, you'll be able to manage and visualize different types of data in the easiest possible way!

  • Responsive: With the support for mobile, tablet and desktop displays, it doesn’t matter what device you’re using. Tabler is responsive in all major browsers.
  • Cross Browser: Our theme works perfectly with the latest Chrome, Firefox+, Safari, Opera, Edge and mobile browsers. We work hard to provide continuous support for them.
  • HTML5 & CSS3: We use only modern web technologies, such as HTML5 and CSS3. Our theme includes some subtle CSS3 animations, which will help you attract attention.
  • Clean Code: We followed Bootstrap’s guidelines carefully to make your integration as easy as possible. All code is handwritten and W3C valid.
  • Demo pages: Tabler features over 20 individual pages using various components, which gives you the freedom to choose and combine. All components can vary in color and styling that you can easily modify using Sass. Sky is the limit!
  • Single Page Application versions: Tabler React has React components for Tabler.

πŸ“– Documentation

Documentation is available as a part of Tabler preview: https://tabler.io/docs/

To run the documentation site locally, follow instructions in the Documentation README.

πŸͺ΄ Project Activity

Alt

πŸ’• Sponsor Tabler

Sponsor Tabler

Sponsors

Support this project by becoming a sponsor. Your logo will show up in this README with a link to your website. Become a sponsor!

πŸ“¦ Setup environment

To use our build system and run our documentation locally, you'll need a copy of Tabler's source files. Follow the steps below:

  1. Install Node.js, which we use to manage our dependencies.
  2. Navigate to the root /tabler directory and run pnpm install to install our local dependencies listed in package.json.
  3. Install Ruby - the recommended version is 2.7.6.
  4. Install Bundler with gem install bundler and finally run bundle install. It will install all Ruby dependencies, such as Jekyll and plugins.

OSX users:

  1. NPM pnpm install
  2. install Ruby (2.5.* recommended) brew install ruby @2.5
  3. install bundler gem install bundler
  4. install bundle install
  • if bundler get any errors try
sudo rm -rf /Library/Developer/CommandLineTools
sudo xcode-select --install
  1. Run NPM npm run start

Windows users:

  1. Install Git in C:\Program Files\git\bin directory and run npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe" to change the default shell.
  2. Install Ruby+Devkit - the recommended version is 2.7.6.
  3. Read guide to get Jekyll up and running without problems.

Once you complete the setup, you'll be able to run the various commands provided from the command line.

Build locally

You need to have pnpm and bundler installed.

  1. From the root /tabler directory, run installation in the command line:
  • pnpm install
  • bundler install
  1. Then execute pnpm run start-plugins to start up the application stack.
  2. Open http://localhost:3000 in your browser, and voilΓ .
  3. Any change in the /src directory will build the application and refresh the page.

Note: Run pnpm run build for reforms a one off build application without refresh. Open http://localhost:3001 to configure the Web server.

Installation

Tabler is distributed via npm.

npm install --save @tabler/core

Running with Docker

If you don't want to install node/npm/ruby and the dependencies on your local environment, you can use the provided Dockerfile to build a docker image. This Dockerfile is provided as an example to spin-up a container running Tabler.

Example of how to use this image:

  1. Build the tabler image : docker build -t tabler .
  2. Run the tabler image while mounting the src directory as well as the _config.yml file into the container.

Don't forget to expose the port 3000 so you can browse the website locally. You can also expose the port 3001 to have access to BrowserSync

docker run -p 3000:3000 -p 3001:3001 -v $(pwd)/src:/app/src -v $(pwd)/_config.yml:/app/_config.yml tabler

Now open your browser to http://localhost:3000. Edit anything in the src/ folder and watch your browser refresh the page after it has been rebuilt.

CDN support

All files included in @tabler/core npm package are available over a CDN.

Javascript

<script src="https://cdn.jsdelivr.net/npm/@tabler/core@latest/dist/js/tabler.min.js"></script>

Styles

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@tabler/core@latest/dist/css/tabler.min.css">

Feature requests

https://tabler.canny.io/feature-requests

Bugs and feature requests

Found a bug or have a feature request? Please open a new issue.

πŸ€“ Creators

PaweΕ‚ Kuna

πŸ‘¨β€πŸš€ Contributors

This project exists thanks to all the people who contribute.

🌸 Backers

Thank you to all our backers! πŸ™ Become a backer

License

See the LICENSE file.

Contributors ✨

Thanks goes to these wonderful people (emoji key):

This project follows the all-contributors specification. Contributions of any kind welcome!

tabler's People

Contributors

beeman avatar bg-software-bg avatar brylocode avatar codecalm avatar copulatrix avatar czuli avatar dependabot-preview[bot] avatar dependabot[bot] avatar deralaxo avatar dheineman avatar enricodias avatar freexd avatar git-good avatar ihmels avatar kevinpapst avatar kicaj avatar kilab avatar martynaaj avatar mrszympek avatar onagurna avatar oyejorge avatar promatik avatar rjd22 avatar saran-pariyar avatar shubhamgoyal7125 avatar superfaz avatar syntaxjoker avatar thiscodeworks avatar wangkanai avatar wintersilence 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  avatar  avatar  avatar  avatar

tabler's Issues

eventmachine issue while "npm run serve"

`F:\tabler>jekyll -v
jekyll 3.7.3

F:\tabler>npm run serve

[email protected] serve F:\tabler
gulp build && npm-run-all --parallel gulp-watch jekyll-serve

[14:46:30] Using gulpfile F:\tabler\gulpfile.js
[14:46:30] Starting 'styles'...
[14:46:30] Starting 'styles-plugins'...
[14:46:31] Finished 'styles-plugins' after 378 ms
[14:46:31] Finished 'styles' after 902 ms
[14:46:31] Starting 'build'...
[14:46:31] Finished 'build' after 80 ΞΌs

[email protected] gulp-watch F:\tabler
gulp watch

[email protected] jekyll-serve F:\tabler
jekyll serve --livereload

[14:46:33] Using gulpfile F:\tabler\gulpfile.js
[14:46:33] Starting 'styles'...
[14:46:33] Starting 'styles-plugins'...
[14:46:34] Finished 'styles-plugins' after 518 ms
[14:46:34] Finished 'styles' after 1.11 s
[14:46:34] Starting 'watch'...
[14:46:35] Finished 'watch' after 359 ms
Configuration file: F:/tabler/_config.yml
Source: src
Destination: F:/tabler/_site
Incremental build: disabled. Enable with --incremental
Generating...
done in 3.565 seconds.
Please add the following to your Gemfile to avoid polling for changes:
gem 'wdm', '>= 0.1.0' if Gem.win_platform?
Auto-regeneration: enabled for 'src'
Unable to load the EventMachine C extension; To use the pure-ruby reactor, require 'em/pure_ruby'
Traceback (most recent call last):
22: from d:/Ruby25-x64/bin/jekyll:23:in <main>' 21: from d:/Ruby25-x64/bin/jekyll:23:in load'
20: from D:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/jekyll-3.7.3/exe/jekyll:15:in <top (required)>' 19: from D:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mercenary-0.3.6/lib/mercenary.rb:19:in program'
18: from D:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mercenary-0.3.6/lib/mercenary/program.rb:42:in go' 17: from D:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in execute'
16: from D:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in each' 15: from D:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in block in execute'
14: from D:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/jekyll-3.7.3/lib/jekyll/commands/serve.rb:75:in block (2 levels) in init_with_program' 13: from D:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/jekyll-3.7.3/lib/jekyll/commands/serve.rb:93:in start'
12: from D:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/jekyll-3.7.3/lib/jekyll/commands/serve.rb:93:in each' 11: from D:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/jekyll-3.7.3/lib/jekyll/commands/serve.rb:93:in block in start'
10: from D:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/jekyll-3.7.3/lib/jekyll/commands/serve.rb:101:in process' 9: from D:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/jekyll-3.7.3/lib/jekyll/commands/serve.rb:147:in register_reload_hooks'
8: from D:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/jekyll-3.7.3/lib/jekyll/commands/serve.rb:147:in require_relative' 7: from D:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/jekyll-3.7.3/lib/jekyll/commands/serve/live_reload_reactor.rb:4:in <top (required)>'
6: from D:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/jekyll-3.7.3/lib/jekyll/commands/serve/live_reload_reactor.rb:4:in require' 5: from D:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/em-websocket-0.5.1/lib/em-websocket.rb:3:in <top (required)>'
4: from D:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/em-websocket-0.5.1/lib/em-websocket.rb:3:in require' 3: from D:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/eventmachine-1.2.5-x64-mingw32/lib/eventmachine.rb:8:in <top (required)>'
2: from D:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/eventmachine-1.2.5-x64-mingw32/lib/eventmachine.rb:8:in require' 1: from D:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/eventmachine-1.2.5-x64-mingw32/lib/rubyeventmachine.rb:2:in <top (required)>'
D:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/eventmachine-1.2.5-x64-mingw32/lib/rubyeventmachine.rb:2:in require': cannot load such file -- 2.5/rubyeventmachine (LoadError) npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! [email protected] jekyll-serve: jekyll serve --livereload`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] jekyll-serve script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR! D:\nodejs\node_cache_logs\2018-04-10T06_46_39_226Z-debug.log
ERROR: "jekyll-serve" exited with 1.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] serve: gulp build && npm-run-all --parallel gulp-watch jekyll-serve
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] serve script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR! D:\nodejs\node_cache_logs\2018-04-10T06_46_39_474Z-debug.log`

How we should distribute new versions of tabler?

Hi community!
For few days we repaired many fixes and added a lot of new code.

Many questions were born after this week:

  1. People want .scss, .css and .js files inside npm and composer packages.
  2. People want one package, instead using require.js.
  3. How often we should distribute new versions?
  4. How we can add tabler to services like https://cdnjs.com, https://www.bootstrapcdn.com etc?

My dream is publish packages with structure like:

css
|- tabler.css
|- tabler.min.css
|- tabler.rtl.css
|- tabler.rtl.min.css
|- etc.
scss
|- scss files
assets
|- important assets
js
|- tabler.js
|- tabler.min.js
|- tabler.slim.js (only most important modules, without plugins, etc)

I don't have much knowledge about that, but I would like to have it done well. Every help is appreciated! @beeman

[Feature request] Left and right sidebar

First, I must thank you all team members and contributors for the great work!

Here I have a feature request, there are many management systems, using left sidebar as navigation and right sidebar for some information show or navigation for the page, and they can be collapse, I think this is good for maximize space utilization of the page, especially for complex system.

Here are some samples.

image
https://gitlab.com/gitlab-org/gitlab-ce/issues/45337

image
https://bootstrap-themes.github.io/dashboard/icon-nav/index.html

image
Microsoft Developer Dashboard

I don't know whether it fits Tabler's design.

Remove scroll from login and similar pages

Hi @codecalm just reviewed the css.
found two body tag in dashboard.css.
But anyways for now, can you please change
overflow-y:scroll
to
overflow:auto
in dashboard.css body tag line number 9518.

Thanks and regards
Sushant Kumar

Jekyll dependency

Hey,

the Jekyll dependency makes this project very hard to actually use in a real project.

Are there any plans to make this CSS and HTML available as a standalone version?

How to integrate into Ruby on Rails Asset Pipeline

Can you give any direction on how to integrate Tabler with the Rails Asset Pipeline? Tabler is using requirejs which i ran into some issues with the asset pipeline in rails.

What js file are absolutely required? I think anyone integrating tabler with any web framework will have the same question actually.

SVG Donut, Pie Charts and Line Charts without javascript dependency

Hi @codecalm πŸ‘‹

For rendering the satisfaction donut chart and all other charts a 3rd party js library is needed.
SVG Donut and also Pie Charts or Line charts could be easily rendered without javascript.

🍩 https://medium.com/@heyoka/scratch-made-svg-donut-pie-charts-in-html5-2c587e935d72
πŸ“ˆ https://codepen.io/team/css-tricks/pen/Zbervy
πŸ“Š https://css-tricks.com/how-to-make-charts-with-svg/

What do you think? 🌻

Consider declaring the variables inside _variables.scss with !default

This allows the developer to create a custom variables file to tweak some of the basic properties.

Example: $font-family-base: 'Source Sans Pro', -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Arial, sans-serif !default;

The custom file would be included before the bundle.scss file.

If there is a better / different way of doing it, let me know
Cheers

Undocumented components which deviate from Bootstrap

In the demo there are fundamental classes like .page, .page-main and .header-nav which seems crucial for tabler but are not mentioned anywhere in the documentation. Is there a reason or has it just not been done yet?

Since tabler is based on bootstrap, i was under the impression that anything not specifically documented just works with default bootstrap classes.

angular version

Hi,
since this is a very nice UI dashboard, I want to know do you have any plan for greate frameworks like angular (version > 2), react and etc?

There are more than two genders

Only two binary genders are presented as options:

screen shot 2018-04-03 at 1 20 15 pm

Here is the relevant code:

<div class="selectgroup selectgroup-pills">
<label class="selectgroup-item">
<input type="radio" name="icon-input" value="1" class="selectgroup-input" checked="">
<span class="selectgroup-button selectgroup-button-icon"><i class="fa fa-male"></i></span>
</label>
<label class="selectgroup-item">
<input type="radio" name="icon-input" value="2" class="selectgroup-input">
<span class="selectgroup-button selectgroup-button-icon"><i class="fa fa-female"></i></span>
</label>
</div>

Allowing a third option along with a input would be more inclusive:

screen shot 2018-04-03 at 1 34 05 pm

Note: I used the fe fe-more-horizontal icon

This tends to be represented in data as:

{
  gender: 'male' | 'female' | 'unspecified',
  genderTitle: string | null,
}

Which can be presented as:

let genderStr = user.genderTitle || user.gender

If you are using pronouns in your content, a good way to handle it is:

const PRONOUNS = {
  male: 'he',
  female: 'she',
  unspecified: 'they',
};

let pronoun = PRONOUNS[user.gender];

By making this change, you set a good example for the community

Laravel Version

Hi,

does anybody has a working Laravel Version with Laravel Mix?

Thanks!

Hover tooltips hide in edges of charts

The tooltip which appears when you hover over a chart hides when it hits the edges of the chart.
untitled

I went through the code and figured out it was due the parent div having overflow: hidden which came from the .c3 class.

I checked with the C3 Library and it doesn't have this line of code.

.c3 {
overflow: hidden;
}

Would submit a PR but I'm sure that line was added for a specific purpose.

Publish SCSS file to npm

Hi @codecalm - Great work on Tabler! I really love the look and feel!

I was wondering if you could publish the SCSS on NPM. That will make it easy to integrate with projects that are using SCSS, while allowing those projects to override certain things.

Thanks for considering!

Unable to view site remote?

Followed all steps, all the way to npm run serve and when entering the server IP address and port i get my connection refused by the server.

Profile page avatar-md issue

Hello, when I was browsing through your demo website today. On the profile-page I found this crunched-looking avatar.

tabler-github-io

I tried to look for the problem. But need to invest more time to get the right solution. What I have found right now is, .media-class is applying/affecting some class properties to the .avatar and .avatar-md.

npm repository

could you please create one npm repository for this project itself? this way we can reach last version easier

List of deprecated tools

Just forked and installed it and saw the following issues.
Any road map for an update?
npm WARN deprecated [email protected]: gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
npm WARN deprecated [email protected]: please upgrade to graceful-fs 4 for compatibility with current and future versions of Node.js
npm WARN deprecated [email protected]: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated [email protected]: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated [email protected]: please upgrade to graceful-fs 4 for compatibility with current and future versions of Node.js
npm WARN deprecated [email protected]: This module relies on Node.js's internals and will break at some point. Do not use it, and update to [email protected].

Top menu when on responsive

Hi - this looks great. Evaluating right now.

The top menu, when in small width mode, disappears and there is no alternative way of accessing the same functionality / menu links.

Any thoughts on making the top menu have a thin width alternative?

Thanks. Alex

Readme is confusing

The readme file could definitely use some rewording in order to make it easier to understand and be more correct. I could do it if you would like.

Can I integrate tabler into bootstrap-vue?

Tabler is a nice bootstrap style. I would like to use a tabler in my recent projects, but I find that the tabler cannot be well compatible with bootstrap-vue. I would like to know when I can use the bootstrap-vue-tabler. Thank you

Header navbar dropdown not right-aligned to parent

Even though you're using dropdown-menu-right it's not right-aligning:

image

It's more apparent when you remove the user's name and make some inner text longer:

image

The reason is BS4 has .dropdown-menu-right nested and only works within the .navbar-nav class:

.navbar-expand {
  @each $breakpoint in map-keys($grid-breakpoints) {
    &#{$infix} {
      @include media-breakpoint-up($next) {
          .dropdown-menu-right {
            right: 0;
            left: auto; // Reset the default from `.dropdown-menu`
          }

However, adding it in breaks the flow:

image

Solution could be something like adding:

.nav {
  .dropdown-menu-right {
    right: 0;
    left: auto;
  }
}

image

But that does not fix the inner text going beyond dropdown width:

image

Solution to that would be removing this line:

https://github.com/tabler/tabler/blob/master/src/assets/scss/dashboard/_dropdown.scss#L8

image

or adding:

.nav {
    .dropdown-menu-right {
        right: 0;
        left: auto;
    }

    .dropdown-item {
        white-space: normal;
    }
}

image

Mobile notifications

Thank you for this great theme!
I would be really happy of you could also provide mobile notifications (currently hidden in mobile and visible next to the profile avatar in the top menu). I imagine something like facebook layout: full width container. The same like the hamburger menu dropdown container, just for notifications πŸ’š

See in action: https://touch.facebook.com/?soft=notifications

Documentation

Hi,

it would be awesome if you could write a documentation how to install this template.

Thanks

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.