# Xdan Datetimepicker Rails

This gem adds @xdan's [datetimepicker](https://github.com/xdan/datetimepicker) to the Rails asset pipeline.

## Installation

Add this line to your application's Gemfile:

    gem 'xdan-datetimepicker-rails'

And then execute:

    $ bundle

Or install it yourself as:

    $ gem install xdan-datetimepicker-rails

## Usage

Require the jquery file into your `application.js.coffee` file:

```coffee
#= require jquery.xdan.datetimepicker
```

Import the stylesheet in your `application.css.scss` file:

```sass
@import "jquery.xdan.datetimepicker";
```

Start using it!

```coffee
# /app/assets/javascripts/datetimepicker.js.coffee

#= require jquery.xdan.datetimepicker

@setupDateTimePicker = (container) ->
  defaults = {
    formatDate: 'y-m-d',
    format: 'Y-m-d H:i',
    allowBlank: true,
    defaultSelect: false,
    validateOnBlur: false
  }

  entries = $(container).find('input.datetimepicker')
  entries.each (index, entry) ->
    options = $(entry).data 'datepicker-options'
    $(entry).datetimepicker $.extend(defaults, options)

$ ->
  setupDateTimePicker $('body')

```


See the [detailed documentation](http://xdsoft.net/jqplugins/datetimepicker/) for more options. When the site is back up I'll try to port some of them into this README or move them to the official repo of [datetimepicker](https://github.com/xdan/datetimepicker).

### SimpleForm Integration

```ruby
# /app/inputs/datetimepicker_input.rb

class DatetimepickerInput < SimpleForm::Inputs::StringInput
  def input_html_classes
    super.push("datetimepicker")
  end

  def input_type
    :string
  end

  def input_html_options
    super.tap do |opts|
      opts[:data] ||= {}
      opts[:data].merge! datepicker_options
      opts[:value] ||= value
    end
  end

  def value
    val = object.send(attribute_name)
    return DateTime.new(val.year, val.month, val.day, val.hour, val.min).strftime("%Y-%m-%d %H:%M") if val.is_a?(Time)
    return val if val.nil?
    val.to_s
  end

  private
    def datepicker_options
      options = self.options.fetch(:datepicker_options, {})
      options = Hash[options.map{ |k, v| [k.to_s.camelcase(:lower), v] }]
      { datepicker_options: options }
    end
end

```

### Formtastic Integration

```ruby
# /app/inputs/datetimepicker_input.rb

class DatetimepickerInput < ::Formtastic::Inputs::StringInput
  def input_html_options
    super.tap do |options|
      options[:class] = [options[:class], "datetimepicker"].compact.join(' ')
      options[:data] ||= {}
      options[:data].merge! datepicker_options
      options[:value] ||= value
    end
  end

  def value
    val = object.send(method)
    return DateTime.new(val.year, val.month, val.day, val.hour, val.min).strftime("%Y-%m-%d %H:%M") if val.is_a?(Time)
    return val if val.nil?
    val.to_s
  end

  private
    def datepicker_options
      options = self.options.fetch(:datepicker_options, {})
      options = Hash[options.map{ |k, v| [k.to_s.camelcase(:lower), v] }]
      { datepicker_options: options }
    end
end

```

## Versioning

This gem will attempt to maintain the same version as the `datetimepicker` library.

## Contributing

1. Fork it ( http://github.com/<my-github-username>/xdan-datetimepicker-rails/fork )
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create new Pull Request