Module: TextTube::EmbeddingAudio

Extended by:
Filterable
Defined in:
lib/texttube/filters/embedding_audio.rb

Overview

Embed some audio via [audio]

Constant Summary collapse

DEFAULTS =

default attributes

{
  src_base:  "/streams/",
  preload:   "metadata",
  fallback_text: "Your browser does not support HTML5, update your browser you fool!",
  controls: "controls",
}
/             # [audio[url|description]]
  \[audio\[        # opening square brackets
    ([^\|]+)     # link
      \|      # separator
    ([^\[]+)  # description
  \]\]        # closing square brackets
/x

Class Method Summary collapse

Methods included from Filterable

filter_with, filters

Class Method Details

.render_tag(link, desc, attributes) ⇒ Object

Does the grunt work of rendering the tag.

Parameters:



51
52
53
54
55
56
57
58
# File 'lib/texttube/filters/embedding_audio.rb', line 51

def self.render_tag(link,desc,attributes)
  fallback_text = attributes.delete(:fallback_text)
  src_base = attributes.delete(:src_base)
  make_inner = ->(lnk){%Q!<source src='#{src_base}#{lnk}' type='audio/#{File.extname(lnk)[1..-1]}' />!}
  inner = make_inner.( link )
  inner += make_inner.( link.sub(/m4a$/, "ogg") ) if File.extname(link) == ".m4a"
  %Q!<div class='audio'><h3>#{desc}</h3><audio #{attributes.map{|(k,v)| "#{k}='#{v}'" }.join(" ")}>#{inner}#{fallback_text}</audio></div>!.strip.gsub /\s+/, " "
end

.run(content, options = {}) ⇒ String

Parameters:

  • content (String)
  • options (Hash) (defaults to: {})

Returns:



35
36
37
38
39
40
41
42
43
# File 'lib/texttube/filters/embedding_audio.rb', line 35

def self.run(content, options={})
  options ||= {}
  attributes = DEFAULTS.merge options
       
  content.gsub( R_link ) { |m|
    url,desc = $1,$2
    EmbeddingAudio::render_tag(url,desc,attributes)
  }
end