Giter Club home page Giter Club logo

vue-persian-datetime-picker's Introduction

vue-persian-datetime-picker

npm version

A vue plugin to select jalali date and time

See documentation and demo at vue-persian-datetime-picker

If you are using vuejs 3, please refer to this repository.

Installation

browser

<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script src="https://cdn.jsdelivr.net/npm/moment"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/build/moment-jalaali.js"></script>
<script src="/dist/vue-persian-datetime-picker.umd.min.js"></script>
<div id="app">
  <date-picker v-model="date"></date-picker>
</div>
<script>
var app = new Vue({
  el: '#app',
  data: {
    date: '1397/02/02'
  },
  components: {
    DatePicker: VuePersianDatetimePicker
  }
});
</script>

npm

npm install vue-persian-datetime-picker --save

Configuration for moment to ignore loading locales

// webpack.config.js:
module.exports.plugins = [
  //...
  new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/)
  //...
]

// vue.config.js:
module.exports = {
  //..
  configureWebpack: {
    plugins: [new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/)]
  },
  //...
}

Usage

// main.js
//...
import VuePersianDatetimePicker from 'vue-persian-datetime-picker';
Vue.component('date-picker', VuePersianDatetimePicker);
//...

Or in component

<template>
  <div>
    <date-picker v-model="date"></date-picker>
  </div>
</template>
 
<script>
import VuePersianDatetimePicker from 'vue-persian-datetime-picker'
export default {
  data(){
    return {
      date: ''
    }
  },
  components: {
    datePicker: VuePersianDatetimePicker
  }
}
</script>

You can also set default values:

// main.js
import VuePersianDatetimePicker from 'vue-persian-datetime-picker';
Vue.use(VuePersianDatetimePicker, {
  name: 'custom-date-picker',
  props: {
    inputFormat: 'YYYY-MM-DD HH:mm',
    format: 'jYYYY-jMM-jDD HH:mm',
    editable: false,
    inputClass: 'form-control my-custom-class-name',
    placeholder: 'Please select a date',
    altFormat: 'YYYY-MM-DD HH:mm',
    color: '#00acc1',
    autoSubmit: false,
    //...  
    //... And whatever you want to set as default 
    //... 
  }
});

Then use in component

<custom-date-picker v-model="date" />

Built With

  • Vue.js - The Progressive JavaScript Framework.
  • Moment.js - Parse, validate, manipulate, and display dates and times in JavaScript.
  • moment-jalaali - A Jalaali (Jalali, Persian, Khorshidi, Shamsi) calendar system plugin for moment.js.

License

This project is licensed under the MIT License

Change log

2.10.4 (2022-03-04)

2.10.3 (2022-01-06)

2.10.2 (2021-12-24)

2.10.1 (2021-11-12)

  • Fixed build problem #191 #190 #188

2.10.0 (2021-11-03)

  • Feat: Added support for display format when using custom-input

2.9.1 (2021-10-31)

2.9.0 (2021-09-27)

2.8.0 (2021-08-01)

2.7.0 (2021-07-23)

2.6.1 (2021-05-17)

2.6.0 (2021-02-05)

2.5.0 (2021-01-30)

2.4.1 (2020-11-13)

2.4.0 (2020-10-17)

  • Added compat-time to display time on the front page (in datetime mode)
  • Fixed clear value #125
  • Fixed disabling in datetime mode #123
  • Fixed timezone in the first and second half of the year #108

2.3.0 (2020-08-30)

  • Added convert-numbers prop that converts numbers to persian in fa locale: <date-picker convert-numbers />

2.2.0 (2020-08-02)

2.1.6 (2020-07-13)

  • Fixed locale-config prop #116
  • Added show-now-btn prop #109

2.1.5 (2020-04-19)

  • Fixed wrong date in Safari browsers
  • Fixed scroll to element (year section)

2.1.4 (2020-01-30)

  • Fixed initial locale value

2.1.2 (2019-09-08)

  • Fixed jumpMinute and roundMinute in datetime mode
  • Fixed time animation effect

2.1.1 (2019-09-07)

  • Fixed JumpMinute and hour change

2.1.0 (2019-08-19)

  • Added "year-month" type <date-picker type="year-month" />. fixed #70
  • Timezone support <date-picker type="datetime" :timezone="true" />. fixed #33

2.0.2 (2019-07-17)

  • Flipped month change buttons in rtl direction
  • Added label to locales. fixed #67
  • Added display format to each locale. fixed #68
  • Fixed wrong date on date-time picker mode

2.0.1 (2019-05-11)

  • Fixed #53
  • Show the next step on submit button click, instead of submitting immediately #41

2.0.0 (2019-01-16)

  • Added gregorian support <date-picker locale="en" />
  • Added locale configuration support
  • Improved css transitions
  • Fixed min-max in time picker

1.1.7 (2018-12-31)

1.1.6 (2018-12-29)

  • Added jumpMinute and roundMinute to time-picker <date-picker type="time" :jumpMinute="5" :roundMinute="true" />
  • Added clear button <date-picker :clearable="true" />
  • Added inline mode <date-picker :inline="true" />
  • Fixed tab key press problem
  • Fixed responsive mode
  • Fixed watching to min-max changes

1.1.5 (2018-09-01)

  • Added emit on open
  • Added feature to highlight items and dates

1.1.4 (2018-08-12)

  • Added label for display
  • Added feature to disable some dates
  • Added feature to disable or enable the datepicker
  • Icons and css styles optimization
  • Load component via script tag

1.1.3 (2018-05-22)

  • Fixed "min-date" bug

1.1.2 (2018-05-12)

  • Updated "moment-jalaali" version to 0.7.3
  • Fixed "display-format" when is editable
  • Reset "view" value

1.1.1 (2018-05-03)

  • Added "append-to"
  • Added "display format"

1.1.0 (2018-05-01)

  • Added default settings feature

1.0.9 (2017-12-25)

  • Clear input value
  • Fixed editable input bug
  • Added "Initial value"
  • Package keywords
  • Fixed css class name
  • Fixed some other bugs

1.0.7 (2017-12-14)

  • Avoid submitting form
  • Auto submit on wrapper click

1.0.5 (2017-12-04)

  • Fixed default value for "value"

vue-persian-datetime-picker's People

Contributors

a-shafaat avatar alimo avatar btechn01 avatar hosseinmirhosseini76 avatar mostafatech avatar talkhabi 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

vue-persian-datetime-picker's Issues

انتخاب ماه از سالهای قبل یا بعد در حالت انتخاب ماه ممکن نیست!

حتی وقتی از دوتا کامپوننت کوپل استفاده میکنیم به نتیجه مطلوب نمیرسه

    <input class="form-control input ltr" title="برای مشاهده تقویم راست کلیک کنید" type="text" :id="'component-date-picker-' + unique" v-model="date" :placeholder="placeholder" @contextmenu="open" @blur="blur" :disabled="disabled" :readonly="readonly"/>
    <input type="hidden" :id="'component-hidden-date-picker-' + unique" v-model="date"/>
    <span class="icon is-small is-right clear-date-picker" v-if="date && editable" @click="date = null">
      <i class="fa fa-remove"></i>
    </span>
    <d-picker
      v-if="loaded"
      v-model="date"
      :format="format"
      append-to="body"
      :auto-submit="true"
      :wrapper-submit="false"
      :display-format="format"
      :input-format="format"
      view="year"
      type="year"
      :editable="editable"
      color="#ff7b81"
      :clearable="editable"
      :jump-minute="15"
      :round-minute="false"
      :disabled="disabled"
      :min="normalMin"
      :max="normalMax"
      locale="fa,en"
      :show="show === 1"
      @close="show=2"
      :element="'component-date-picker-' + unique">
    </d-picker>
    <d-picker
      v-if="loaded"
      v-model="date"
      :format="format"
      append-to="body"
      :auto-submit="true"
      :wrapper-submit="false"
      :display-format="format"
      :input-format="format"
      view="month"
      type="month"
      :editable="editable"
      color="#ff7b81"
      :clearable="editable"
      :jump-minute="15"
      :round-minute="false"
      :disabled="disabled"
      :min="normalMin"
      :max="normalMax"
      locale="fa,en"
      :show="show === 2"
      @close="show=0"
      :element="'component-hidden-date-picker-' + unique">
    </d-picker>
  </span>```

Invalid default value

آقا timepicker این خطا رو تو کنسول میندازه
[: Invalid default value for prop "value": Props with type Object/Array must use a factory function to return the default value.](url)
ورودی اولیه رو چی بزارم که خطا نده؟

صفحه سفید و خطای ReferenceError: "date is not defined"

سلام
وقت بخیر
با تشکر از پکیج بسیار عالی که درست کردید
من وقتی می خواهم از این بسته استفاده کنم
مثل زیر عمل می کنم
import VuePersianDatetimePicker from 'vue-persian-datetime-picker';
Vue.component('date-picker', VuePersianDatetimePicker);

ولی یک صفحه سفید دریافت می کنم
و خطای
ReferenceError: "date is not defined"
را دریافت می گکنم.

میشه بدونم مشکل کجاست.

roundMinute is not working

when roundMinute is true and jumpMinute is 15 the time picker jumps from 55 to 10
that should jump to 00 for rounding the minutes

باگ نمایش تاریخ

با انتخاب تنظیمات پیشفرض با کلیک روی تاریخ مورد نظر این تاریخ انتخاب میشه:
۰۰۰۰/۰۱/۰۱
اگر تاریخ رو دوباره انتخاب کنی باز هم همین مقدار نمایش داده میشه.
در هنگام انخاب برای بار سوم این دفعه مقادیر درست نمایش داده میشن .
screen shot 1397-01-11 at 10 03 42 pm
با اینکه نمایش تاریخ به این نحو هست اما در لاگ ها میشه دید که تاریخ درست انتخاب میشه.
مشکل زمانی پیش می آد که درکامپوننت هایی همزمان از مومنت و قابلیت نمایش فارسی اعداد استفاده کنیم
این اوکی هست :
let moment = require("moment-jalaali");
return moment(date, 'jYYYY/jM/jD HH:mm').format('YYYY-M-D HH:mm:ss');
اما اگر این خط رو اضافه کنیم مشکلی که در بالا گفتم به وجود می آد
moment.loadPersian({usePersianDigits: true})

gregorian datepicker

Hi
I see that its possible to get value of date picker in gregorian format, but the ui of the date picker is still jalali format
is there a way to show date picker in gregorian format?

باز شدن چندین بار

سلام
مشکلی که باهاش مواجه شدم این هست که مودال چندین بار به تگ بادی اپند میشه.
فکر میکنم وقتی مودال تقویم باز هست با زدن دکمه تب، ایونت فوکوس باز فراخوانی میشه

مشکل پاک کردن تاریخ در تقویم قابل ویرایش

سلام و خسته نباشید
دوست عزیز من از تقویم شما در حالت قابل ویرایش
editable="true"
استفاده میکنم. مشکلی که وجود داره این هستش که زمانی که
input
رو خالی میکنم
model
متصل به اون خالی نمیشه. می تونید این موضوع رو دموی خودتون هم مشاهده بفرمایید.
آیا این امکان وجود داره که اگر کاربر یک تاریخ غیر معتبر تایپ کرد یا اینپوت رو خالی کرد
model
را هم خالی کنید؟
یا اگه در حال حاضر روشی برای انجام این موضوع وجود دارد ممنون میشم که بنده رو راهنمایی بفرمایید.

ایجاد تقویم inline

سلام. من میخام این تقویم رو به صورت inline نشون بدم
چطور این کار امکان پذیره؟ توی نمونه ها موردی براش وجود نداره

چند دقیقه ای

آقا اگه بخوایم بگیم فقط 5 مین 5 مین دقیقه ها رو انتخاب کنه چه آپشنی باید بهش بدیم
؟؟

displayFormat is not applied to custom input

I'm altering my format from jYYYY/jMM/jDD to YYYY-MM-DD HH:mm:ss and adding displayFormat to dddd jDD jMMMM jYYYY.
It works like a charm on default components. On custom input, However, data is shown as YYYY-MM-DD HH:mm:ss (displayFormat is not applied to it).

تغییر استایل تقویم و افزودن روزهای خاص

با سلام و خسته نباشید و تشکر بابت پکیج خوبی که نوشتید.
یه سوال داشتم در مورد اینکه ما میخوایم توی این پکیج روزهای تعطیل رسمی توی تقویم رو هم علامت دار کنه یعنی مثلا رنگش رو قرمز کنه.و اینکه خودمون یه سری روز ها رو دستی بهش بدیم و این روز ها رو هم به تعطیلاتش اضافه کنه.

یه مورد دیگه هم اینکه چطور میشه یه سری روز های خاص رو بهش بدیم و کاربر نتونه این روز ها رو انتخاب کنه؟

ممنون میشم اگه بتونید منو راهنمایی کنید

خروجی تایم استمپ

سلام خسته نباشید جناب تلخابی
میخواستم ببینم آیا امکانی وجود داره که بتونیم با انتخاب تاریخ اون تاریخ به صورت تایم استمپ در دیتا ذخیره بشه؟
ممنون

گرفتن ولیو در اینپوت هیدن

با سلام و خسته نباشید
ممنون از پلاگین خوبتون
فقط یه سوال من میخوام ولیو رو از اینپوت بگیرم ولی نمیتونم ممنون میشم راهنمایی کنین

custom input dose not work .

I did the same as the document. after click on custom input, picker-dialog not show . In fact, nothing happens.

 <v-text-field
                                                                label="تا تاریخ"
                                                                v-model="to_date"
                                                                id="to_date"
                                                                class="from_date"
                                                        ></v-text-field>
                                                        <datetime-picker
                                                                v-model="to_date"
                                                                format="jYYYY/jMM/jDD"
                                                                element="to_date"
                                                        >
                                                        </datetime-picker>

add option

When select some data but user click wrapper model add value data select in input
Please add an optional option...
Thank you for your group...

عدم نمایش alt field بعد از انتخاب تاریخ

با سلام و احترام خدمت شما جناب آقای تلخابی بزرگوار ،‌بابت پکیج فوق العاده کاربردیتون ممنونم

یک موردی رو من واقعا متوجه نشدم و نتونستم پیاده کنم
من میخوام یه فیلد داشته باشم که فرمت ورودی که کاربر انتخاب میکنه به شکل شمسی یا میلادی ( با یه متغییر این کارو انجام دادم ) باشه ولی تو متغییری که دارم درون دیتا میخوام میلادی ثبت بشه

نمیدونم این حالت شدنی هست یا نه
چیزی که به فکرم رسید اینه که :
خواستم از alt برای این کار استفاده کنم که متاسفانه اونم کار نمیکنه ( یعنی نتونستم بفهمم چرا alt رو نمایش نمیده )
در واقع با کد زیر ، آلت نمایش داده نمیشه :
<date-picker v-model="date" alt-name="date_alt" alt-format="YYYY-MM-DD HH:mm:ss"> </date-picker>

ممنون میشم راهنماییم کنید

custom input not working

I've used exactly the same markup as the documentation:

<input
    type="text"
    class="form-control form-control-lg"
    v-model="date"
    id="my-custom-input"
    placeholder="select date">

<date-picker
    v-model="date"
    format="jYYYY/jMM/jDD"
    element="my-custom-input">
</date-picker>

when I click on input the picker shows up but when I choose a date the text inside the input doesn't change.
I've noticed that I've this error in the browser console:

[Vue warn]: Property or method "date" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.

whenever I choose a date the error shows up again.
I'm using laravel and this is how I load the component inside app.js:

import VuePersianDatetimePicker from 'vue-persian-datetime-picker';

Vue.component('date-picker', VuePersianDatetimePicker);

hope I've given enough information.
thanks in advance

اعداد فارسی در تقویم

سلام
چطوری میتونیم اعداد رو در تقویم فارسی کنیم؟
در نمونه ای که ارائه شده اعداد فارسی هستند به طور کامل

مشکل در انتخاب تاریخ های قدیمی

سلام روزتون بخیر و خسته نباشید.
امکان انتخاب تاریخ های قبل از بهمن 1349 در این پکیج وجود ندارد.
آیا این موضوع علت خاصی داره؟ و آیا قابل برطرف شدن هست؟
پیشاپیش از پاسخگوییتون سپاسگزارم.

Doesn't watch on :min and :max properties!!

Hi. great package. I put :min or :max on date picker and it works well but when I reset the max or min value on my component, max and min wont change and date picker doesn't watch for these properties so I still have boundaries for choosing the date
Great work by the way :)

Timezone Option

سلام
لطفا در صورت امکان این آپشن رو قرار بدید

نمایش تاریخ جاری

سلام
راهی هست که تاریخ امروز که در تقویم هست در تکست باکس هم بصورت پیش فرض نمایش داده شود
یا باید از پکیج دیگری استفاد کرد
این پکیج دارای
moment
هست ، آیا راهی دارد که از دستورات آن استفاده کنیم؟
مرسی

add SSR compatibility

i'm using NUXT.JS and using SSR (Server Side Rendering), i really need this component, but i cant use it in SSR mode. it would be great to add SSR compatibility to your component.

استفاده در پروژه‌ی ام.وی.سی

سلام و تشکر بابت ارائه‌ی این کمپوننت.
من در یک پروژه‌ی ام.وی.سی از این کمپوننت استفاده می‌کنم. دو پرسش دارم:
اعداد به صورت لاتین نمایش داده می‌شوند. مثلا بجای ۱۳۹۷ نوشته می‌شود 1397.
آیا این امکان هست که نمایش انتخاب تقویم یا ساعت را در یک رویداد کلیک، مثلا یک دکمه قرار داد؟
ممنون از راهنمایی

Error in callback for immediate watcher "value": "TypeError: Cannot read property 'isValid' of null"

Thanks for the 1.1.6 version and it's cool clearable feature. I'm getting the following error in this new version, updated with npm. Can you help me to resolve it.

[Vue warn]: Error in callback for immediate watcher "value": "TypeError: Cannot read property 'isValid' of null"

found in

---> <DatePicker>
       <BFormGroup>
         <UserForm> at resources/assets/js/components/users/Form.vue
           <Root>

and this

admin.js:75661 TypeError: Cannot read property 'isValid' of null
    at VueComponent.updateDates (admin.js:104887)
    at VueComponent.Vue.$watch (admin.js:77568)
    at createWatcher (admin.js:77525)
    at initWatch (admin.js:77507)
    at initState (admin.js:77267)
    at VueComponent.Vue._init (admin.js:78562)
    at new VueComponent (admin.js:78730)
    at createComponentInstanceForVnode (admin.js:78233)
    at init (admin.js:78064)
    at createComponent (admin.js:79539)

اشتباه در انتخاب تاریخ - selected class

زمانی که تاریخ پیشفرض تقویم روی "1371/01/03" هست، تقویم در حالت نمایش روز فعال رو "2" انتخاب میکنه.

از ویژگی element="custom-input" استفاده کردم.

انگار دکمه 3 انتخاب شده، چون کلیک هم نمیشه. انگار کلاس "selected" بهش داده نشده.

Screenshot (7)

عدم نمایش درست در صفحه کوچک

باسلام . توی موبایل در صفحه نمایش هایی که ارتفاعش از ارتفاع تقویم کوچکتره یا به صورت افقی نگه میداری تمام تقویم نشون داده نمیشه و به پایین هم اسکرول نمیشه . برای رفع این مشکل چکار باید بکنم . ممنون

نحوه حذف تاریخ یا ساعت انتخاب شده

با وجود اینکه متغیری که کامپوننت متصل شده رو نال میکنم یا برابر یک استرینگ خالی قرار میدم باز هم مقدار تاریخ انتخاب شده در اینپوت حذف نمیشه.

نمایش تایم پیکر در مودال

با توجه به اینکه تایم پیکر خودش رو به پرنت متصل میکنه اگر در مودال استفاده بشه درست نمایش داده نمیشه .
راه حل اینه که پراپرتی زیر رو هم تعریف کنید .
append_to
که بتونیم در مودال هم ازش استفاده کنیم

مشکل در vue-persian-datetime-picker.js

سلام و خسته نباشید
ممنونم از اعمال تغییرات جدید.
دوست عزیز من ورژن 1.0.9 رو دانلود کردم اما در
build
شدن مشکل داره و فایل
moment-jalaali
رو نمیشناسه. ممنون میشم اگه این مورد برطرف بشه.
این پیغام خطای من هست.

ERROR in .//vue-persian-datetime-picker//moment-jalaali/index.js
Module build failed: Error: ENOENT: no such file or directory, open 'C:\Source**\node_modules\vue-persian-datetime-picker\node_modules\moment-jalaali\index.js'
@ ./~/vue-persian-datetime-picker/dist/vue-persian-datetime-picker.js 1:82-107

استفاده از تایم استمپ برای ورودی

با سلام و احترام خدمت شما جناب تلخابی ، وقت بخیر .

ممنون بابت پکیج خیلی خوب و زیبایی که زحمت طراحیش رو کشیدید .

سوال :
آیا امکانش هست که مقدار ورودی رو بصورت تایمستمپ یا یونیکس دیت وارد کرد که سیستم تبدیل کنه ؟

سوال دوم :
آیا پکیج شما قابلیت پشتیبانی از تاریخ میلادی رو داره ؟
سیستمی نوشتم که بصورت دو زبانه هست ( فارسی و انگلیسی ) و میخوام پکیج شمارو طوری استفاده کنم که اگر زبان سیستم فارسی بود ،‌ دیت پیکر شمسی و اگر انگلیسی بود ، دیت پیکر میلادی رو بارگذاری کنم

چنین امکانی وجود داره ؟

ممنون میشم راهنماییم کنید .
متشکرم .

Next and previous month buttons in RTL languages

Currently, the right arrow is for the next month and the left one is for the previous month. Which I think is not suited for RTL languages.
My suggestion is to swap their functionality in RTL languages.

حالت ارور

سلام.
برای حالتی که بخوایم بک گراند کل فیلد تقویم رو قرمز کنیم یا مثلا کادر رو قرمز کنیم چکار میشه کرد؟مثلا در حالتی که فردی تقویم رو انتخاب نکنه و برای ولیدیت بخوایم اروری نمایش بدیم در اون فیلد

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.