class Glimmer::SWT::TimeProxy

Public Class Methods

create(keyword, parent, args, block) click to toggle source
# File lib/glimmer/swt/date_time_proxy.rb, line 7
def create(keyword, parent, args, block)
  case keyword
  when 'date'
    args += [:date]
  when 'date_drop_down'
    args += [:date, :drop_down]
  when 'time'
    args += [:time]
  when 'calendar'
    args += [:calendar]
  end
  new(parent, args, block)
end
new(parent, args, block) click to toggle source
Calls superclass method
# File lib/glimmer/swt/date_time_proxy.rb, line 22
def initialize(parent, args, block)
  super(parent, args, block)
  post_add_content if block.nil?
end

Public Instance Methods

calendar?() click to toggle source
# File lib/glimmer/swt/date_time_proxy.rb, line 71
def calendar?
  args.to_a.include?(:calendar)
end
date?() click to toggle source
# File lib/glimmer/swt/date_time_proxy.rb, line 59
def date?
  args.to_a.include?(:date)
end
date_time() click to toggle source
# File lib/glimmer/swt/date_time_proxy.rb, line 75
def date_time
  if @added_content
    default_date = DateTime.new if @date_time.nil?
    default_year = @date_time&.year || default_date.year
    default_month = @date_time&.month || default_date.month
    default_day = @date_time&.day || default_date.day
    default_hour = @date_time&.hour || default_date.hour
    default_min = @date_time&.min || default_date.min
    default_sec = @date_time&.sec || default_date.sec
    if time?
      @date_time = DateTime.new(default_year, default_month, default_day, dom_element.timepicker('getHour').to_i, dom_element.timepicker('getMinute').to_i, default_sec)
    else
      @date_time = DateTime.new(dom_element.datepicker('getDate')&.year.to_i, dom_element.datepicker('getDate')&.month.to_i, dom_element.datepicker('getDate')&.day.to_i, default_hour, default_min, default_sec)
    end
    @date_time = @date_time&.to_datetime
  else
    @initial_date_time
  end
end
date_time=(value) click to toggle source
# File lib/glimmer/swt/date_time_proxy.rb, line 95
def date_time=(value)
  if @added_content
    @date_time = value&.to_datetime || DateTime.new
    if time?
      dom_element.timepicker('setTime', "#{@date_time.hour}:#{@date_time.min}")
    else
      dom_element.datepicker('setDate', @date_time.to_time)
    end
  else
    @initial_date_time = value
  end
end
dom() click to toggle source
# File lib/glimmer/swt/date_time_proxy.rb, line 154
def dom
  @dom ||= html {
    span {
      send(element, type: 'text', id: id, class: name)
      button(id: time_button_id, class: time_button_class, style: "border: none; background: url(assets/glimmer/images/ui-icons_222222_256x240.png) -80px, -96px; width: 16px; height: 16px;") if time?
    }
  }.to_s
end
drop_down?() click to toggle source
element() click to toggle source
# File lib/glimmer/swt/date_time_proxy.rb, line 150
def element
  calendar? ? 'div' : 'input'
end
observation_request_to_event_mapping() click to toggle source

TODO add date, time, year, month, day, hours, minutes, seconds attribute methods

# File lib/glimmer/swt/date_time_proxy.rb, line 110
def observation_request_to_event_mapping
  {
    'on_widget_selected' => [
      {
        event: 'change',
        event_handler: -> (event_listener) {
          -> (event) {
            if calendar? || date? || (time? && @timepicker_done)
              @timepicker_done = false if time?
              event_listener.call(event)
            end
          }
        }
      },
    ],
    'on_focus_lost' => [
      {
        event: 'blur',
        event_handler: -> (event_listener) {
          -> (event) {
            # TODO support blur event for date?
            if time? && @timepicker_done
              @timepicker_done = false if time?
              event_listener.call(event)
            end
          }
        }
      },
    ],
  }
end
post_add_content() click to toggle source
# File lib/glimmer/swt/date_time_proxy.rb, line 27
def post_add_content
  # TODO handle date_drop_down version
  if time?
    dom_element.timepicker({
      showPeriod: true,
      showLeadingZero: true,
      showOn: 'both',
      showNowButton: true,
      showCloseButton: true,
      button: "##{time_button_id}",
      onClose: ->(v) {
        @timepicker_done = true
        dom_element.trigger('change')
      },
    })
  else
    options = {}
    if drop_down?
      options = {
        showOn: 'both',
        buttonImage: 'assets/glimmer/images/calendar.gif',
        buttonImageOnly: true,
        buttonText: 'Select date'
      }
    end
    dom_element.datepicker(options)
  end
  date_time_value = self.date_time
  @added_content = true
  self.date_time = date_time_value
end
time?() click to toggle source
# File lib/glimmer/swt/date_time_proxy.rb, line 63
def time?
  args.to_a.include?(:time)
end
time_button_class() click to toggle source
# File lib/glimmer/swt/date_time_proxy.rb, line 146
def time_button_class
  "#{name}-time-button"
end
time_button_id() click to toggle source
# File lib/glimmer/swt/date_time_proxy.rb, line 142
def time_button_id
  "#{id}-time-button"
end