Sha256: 55abf171518b245915124c29d5955eb2c80a5b373669d120a20e79bb8eee6c89

Contents?: true

Size: 1.65 KB

Versions: 11

Compression:

Stored size: 1.65 KB

Contents

require 'bowser/element'

module Bowser
  class Element
    element :video, :audio do
      def buffered
        TimeRanges.new(`#@native.buffered`)
      end

      def played
        TimeRanges.new(`#@native.played`)
      end

      def seekable
        TimeRanges.new(`#@native.seekable`)
      end

      def network_state
        case `#@native.networkState`
        when `HTMLMediaElement.NETWORK_EMPTY` then :no_data
        when `HTMLMediaElement.NETWORK_IDLE` then :idle
        when `HTMLMediaElement.NETWORK_LOADING` then :loading
        when `HTMLMediaElement.NETWORK_NO_SOURCE` then :no_source
        end
      end
    end

    element :video do
      def fullscreen
        fullscreen = %w(
          requestFullScreen
          requestFullscreen
          webkitRequestFullScreen
          webkitRequestFullscreen
          mozRequestFullScreen
          msRequestFullscreen
        ).find { |prop| `!!#@native[prop]` }

        if fullscreen
          `#@native[fullscreen]()`
        else
          warn "[#{self.class}] Cannot determine the method to full-screen a video"
          super
        end
      end
      alias request_fullscreen fullscreen
    end

    class TimeRanges
      include Enumerable

      def initialize native
        @native = native
      end

      def to_n
        @native
      end

      def each
        `#@native.length`.times do |i|
          yield TimeRange.new(`#@native.start(i)`, `#@native.end(i)`)
        end

        self
      end
    end

    class TimeRange
      attr_reader :start, :end

      def initialize start, _end
        @start = start
        @end = _end
      end

      alias begin start
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
bowser-1.1.3 opal/bowser/element/media.rb
bowser-1.1.0 opal/bowser/element/media.rb
bowser-1.0.5 opal/bowser/element/media.rb
bowser-1.0.4 opal/bowser/element/media.rb
bowser-1.0.3 opal/bowser/element/media.rb
bowser-1.0.2 opal/bowser/element/media.rb
bowser-1.0.1 opal/bowser/element/media.rb
bowser-1.0.0 opal/bowser/element/media.rb
bowser-0.5.4 opal/bowser/element/media.rb
bowser-0.5.3 opal/bowser/element/media.rb
bowser-0.5.2 opal/bowser/element/media.rb