class Glimmer::Video

Constants

OBSERVED_ATTRIBUTE_TO_PROPERTY_MAPPING

Public Instance Methods

can_handle_observation_request?(observation_request) click to toggle source
Calls superclass method
# File lib/views/glimmer/video.rb, line 196
def can_handle_observation_request?(observation_request)
  result = false
  observation_request = observation_request.to_s
  if observation_request.start_with?('on_')
    attribute = observation_request.sub(/^on_/, '')
    result = OBSERVED_ATTRIBUTE_TO_PROPERTY_MAPPING.keys.include?(attribute)
  end
  result || super
end
duration() click to toggle source
# File lib/views/glimmer/video.rb, line 158
def duration
  video_attribute('duration')
end
ended?() click to toggle source
# File lib/views/glimmer/video.rb, line 131
def ended?
  video_attribute('ended')
end
fast_forward(seconds=15) click to toggle source
# File lib/views/glimmer/video.rb, line 150
def fast_forward(seconds=15)
  self.position += seconds
end
file=(a_file) click to toggle source
# File lib/views/glimmer/video.rb, line 97
def file=(a_file)
  options[:file] = a_file
  set_video_source
end
handle_observation_request(observation_request, &block) click to toggle source
Calls superclass method
# File lib/views/glimmer/video.rb, line 206
def handle_observation_request(observation_request, &block)
  observation_request = observation_request.to_s
  if observation_request.start_with?('on_')
    attribute = observation_request.sub(/^on_/, '')
    if attribute == 'loaded' && !@completed
      super('on_completed', &block)
    elsif OBSERVED_ATTRIBUTE_TO_PROPERTY_MAPPING.keys.include?(attribute)
      add_video_observer(block, OBSERVED_ATTRIBUTE_TO_PROPERTY_MAPPING[attribute])
    else
      super
    end
  end
end
loaded?() click to toggle source

Video fully loaded and ready for playback

# File lib/views/glimmer/video.rb, line 136
def loaded?
  !!@completed
end
mute() click to toggle source
# File lib/views/glimmer/video.rb, line 180
def mute
  video_attribute_set('muted', true)
end
muted?() click to toggle source
# File lib/views/glimmer/video.rb, line 188
def muted?
  video_attribute('muted')
end
pause() click to toggle source
# File lib/views/glimmer/video.rb, line 111
def pause
  video_action('pause')
end
paused?() click to toggle source
# File lib/views/glimmer/video.rb, line 123
def paused?
  video_attribute('paused')
end
play() click to toggle source
# File lib/views/glimmer/video.rb, line 107
def play
  video_action('play')
end
playing?() click to toggle source
# File lib/views/glimmer/video.rb, line 127
def playing?
  !paused?
end
position() click to toggle source
# File lib/views/glimmer/video.rb, line 140
def position
  video_attribute('currentTime')
end
position=(new_position) click to toggle source
# File lib/views/glimmer/video.rb, line 144
def position=(new_position)
  new_position = [new_position, 0].max
  new_position = [new_position, duration].min
  video_attribute_set('currentTime', new_position)
end
reload() click to toggle source
# File lib/views/glimmer/video.rb, line 119
def reload
  video_action('load')
end
rewind(seconds=15) click to toggle source
# File lib/views/glimmer/video.rb, line 154
def rewind(seconds=15)
  self.position -= seconds
end
source() click to toggle source
# File lib/views/glimmer/video.rb, line 74
def source   
  file_source = file
  if file_source
    if file_source.start_with?('uri:classloader')
      file_path = file_source.split(/\/\//).last
      file_name = File.basename(file_source)
      # supporting windows ENV['temp'] or mac/unix /tmp
      tmp_dir = ENV['temp'] ? File.expand_path(ENV['temp']) : '/tmp'
      tmp_dir += '/glimmer/lib/glimmer/ui/video'
      FileUtils.mkdir_p(tmp_dir)
      tmp_file = File.join(tmp_dir, file_name)
      file_content = File.binread(file_source) rescue File.binread(file_path)
      File.binwrite(tmp_file, file_content)
      "file://#{tmp_file}"
    else
      file_source = File.expand_path(file_source)          
      "file://#{file_source}"
    end
  else
    url
  end
end
toggle() click to toggle source
# File lib/views/glimmer/video.rb, line 115
def toggle
  paused? ? play : pause
end
toggle_muted() click to toggle source
# File lib/views/glimmer/video.rb, line 192
def toggle_muted
  muted? ? unmute : mute
end
unmute() click to toggle source
# File lib/views/glimmer/video.rb, line 184
def unmute
  video_attribute_set('muted', false)
end
url=(a_url) click to toggle source
# File lib/views/glimmer/video.rb, line 102
def url=(a_url)
  options[:url] = a_url
  set_video_source
end
volume() click to toggle source
# File lib/views/glimmer/video.rb, line 162
def volume
  video_attribute('volume')
end
volume=(value) click to toggle source
# File lib/views/glimmer/video.rb, line 166
def volume=(value)
  value = [value, 0].max
  value = [value, 1].min
  video_attribute_set('volume', value)
end
volume_down(value=0.05) click to toggle source
# File lib/views/glimmer/video.rb, line 176
def volume_down(value=0.05)
  self.volume -= value
end
volume_up(value=0.05) click to toggle source
# File lib/views/glimmer/video.rb, line 172
def volume_up(value=0.05)
  self.volume += value
end

Private Instance Methods

add_video_observer(observer_proc, attribute) click to toggle source
# File lib/views/glimmer/video.rb, line 289
def add_video_observer(observer_proc, attribute)
  run_on_completed do
    video_observer_browser_function = VideoObserverBrowserFunction.new(self, observer_proc, attribute)
    swt_widget.execute("document.getElementById('video').addEventListener('#{attribute}', function() {#{video_observer_browser_function.getName}()})")
  end
end
browser_body_background() click to toggle source
# File lib/views/glimmer/video.rb, line 324
def browser_body_background
  color = background
  if color.is_a?(Symbol) || color.is_a?(String)        
    color = color(color)
  end
  if color.respond_to?(:swt_color)
    color = color.swt_color
  end
  "rgba(#{color.getRed}, #{color.getGreen}, #{color.getBlue}, #{color.getAlpha})"
end
browser_body_offset_x() click to toggle source
# File lib/views/glimmer/video.rb, line 335
def browser_body_offset_x
  offset_x
end
browser_body_offset_y() click to toggle source
# File lib/views/glimmer/video.rb, line 339
def browser_body_offset_y
  offset_y
end
browser_video_autoplay() click to toggle source
# File lib/views/glimmer/video.rb, line 304
def browser_video_autoplay
  'autoplay' if autoplay?
end
browser_video_controls() click to toggle source
# File lib/views/glimmer/video.rb, line 308
def browser_video_controls
  'controls' if controls?
end
browser_video_height() click to toggle source
# File lib/views/glimmer/video.rb, line 320
def browser_video_height
  "100%" if fit_to_height
end
browser_video_loop() click to toggle source
# File lib/views/glimmer/video.rb, line 312
def browser_video_loop
  'loop' if looped?
end
browser_video_width() click to toggle source
# File lib/views/glimmer/video.rb, line 316
def browser_video_width
  "100%" if fit_to_width
end
run_on_completed(&block) click to toggle source
# File lib/views/glimmer/video.rb, line 296
def run_on_completed(&block)
  if @completed
    block.call
  else
    on_completed(&block)
  end
end
set_video_source() click to toggle source
# File lib/views/glimmer/video.rb, line 266
def set_video_source
  run_on_completed do
    video_attribute_set('src', source)
  end
end
video_action(action) click to toggle source
# File lib/views/glimmer/video.rb, line 272
def video_action(action)
  run_on_completed do
    swt_widget.execute("document.getElementById('video').#{action}()")
  end
end
video_attribute(attribute) click to toggle source
# File lib/views/glimmer/video.rb, line 278
def video_attribute(attribute)
  swt_widget.evaluate("return document.getElementById('video').#{attribute}") if @completed
end
video_attribute_set(attribute, value) click to toggle source
# File lib/views/glimmer/video.rb, line 282
def video_attribute_set(attribute, value)
  value = "'#{value}'" if value.is_a?(String) || value.is_a?(Symbol)
  run_on_completed do
    swt_widget.execute("document.getElementById('video').#{attribute} = #{value}")
  end
end