Class: GEPUB::Item
- Inherits:
-
Object
- Object
- GEPUB::Item
- Defined in:
- lib/gepub/item.rb
Overview
an Object to hold metadata and content of item in manifest.
following methods are created dynamically. #id, #id=, #set_id, #href, #href=, #set_href, #media_type, #media_type=, #set_media_type, #fallback, #fallback=, #set_fallback, #media_overlay, #media_overlay=, #set_media_overlay
Instance Attribute Summary collapse
-
#content ⇒ Object
Returns the value of attribute content.
Class Method Summary collapse
Instance Method Summary collapse
- #[](x) ⇒ Object
- #[]=(x, y) ⇒ Object
-
#add_content(io_or_filename) ⇒ Object
add content form io or file to the item.
-
#add_property(property) ⇒ Object
add value to properties attribute.
-
#add_raw_content(data) ⇒ Object
add content data to the item.
-
#cover_image ⇒ Object
set ‘cover-image’ property to the Item.
-
#guess_content_property ⇒ Object
guess and set content property from contents.
-
#initialize(itemid, itemhref, itemmediatype = nil, parent = nil, attributes = {}) ⇒ Item
constructor
create Item.
-
#itemid ⇒ Object
get item’s id.
-
#mediatype ⇒ Object
get mediatype of the item.
-
#nav ⇒ Object
set ‘nav’ property to the Item.
-
#to_xml(builder, opf_version = '3.0') ⇒ Object
generate xml to supplied Nokogiri builder.
Constructor Details
#initialize(itemid, itemhref, itemmediatype = nil, parent = nil, attributes = {}) ⇒ Item
create Item.
if mediatype is not specified, it will be guessed from extension name. Item can’t guess media type for videos and audios, so you should specify one.
21 22 23 24 25 26 27 28 29 30 |
# File 'lib/gepub/item.rb', line 21 def initialize(itemid, itemhref, itemmediatype = nil, parent = nil, attributes = {}) if attributes['properties'].class == String attributes['properties'] = attributes['properties'].split(' ') end @attributes = {'id' => itemid, 'href' => itemhref, 'media-type' => itemmediatype}.merge(attributes) @attributes['media-type'] = GEPUB::Mime.guess_mediatype(itemhref) if media_type.nil? @parent = parent @parent.register_item(self) unless @parent.nil? self end |
Instance Attribute Details
#content ⇒ Object
Returns the value of attribute content.
9 10 11 |
# File 'lib/gepub/item.rb', line 9 def content @content end |
Class Method Details
Instance Method Details
#[](x) ⇒ Object
49 50 51 |
# File 'lib/gepub/item.rb', line 49 def [](x) @attributes[x] end |
#[]=(x, y) ⇒ Object
53 54 55 |
# File 'lib/gepub/item.rb', line 53 def []=(x,y) @attributes[x] = y end |
#add_content(io_or_filename) ⇒ Object
add content form io or file to the item
116 117 118 119 120 121 122 123 124 125 |
# File 'lib/gepub/item.rb', line 116 def add_content(io_or_filename) io = io_or_filename if io_or_filename.class == String io = File.new(io_or_filename) end io.binmode @content = io.read guess_content_property self end |
#add_property(property) ⇒ Object
add value to properties attribute.
58 59 60 61 |
# File 'lib/gepub/item.rb', line 58 def add_property(property) (@attributes['properties'] ||=[]) << property self end |
#add_raw_content(data) ⇒ Object
add content data to the item.
110 111 112 113 |
# File 'lib/gepub/item.rb', line 110 def add_raw_content(data) @content = data guess_content_property end |
#cover_image ⇒ Object
set ‘cover-image’ property to the Item. On generating EPUB, EPUB2-style cover image meta item will be added.
65 66 67 |
# File 'lib/gepub/item.rb', line 65 def cover_image add_property('cover-image') end |
#guess_content_property ⇒ Object
guess and set content property from contents.
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/gepub/item.rb', line 75 def guess_content_property if File.extname(self.href) =~ /.x?html/ && @attributes['media-type'] === 'application/xhtml+xml' @attributes['properties'] = (@attributes['properties'] || []).reject { |x| x == 'svg' || x == 'mathml' || x == 'switch' || x == 'remote-resources' } parsed = Nokogiri::XML::Document.parse(@content) return unless parsed.root.node_name === "html" ns_prefix = parsed.namespaces.invert['http://www.w3.org/1999/xhtml'] if ns_prefix.nil? prefix = '' else prefix = "#{ns_prefix}:" end videos = parsed.xpath("//#{prefix}video[starts-with(@src,'http')]") + parsed.xpath("//#{prefix}video/#{prefix}source[starts-with(@src,'http')]") audios = parsed.xpath("//#{prefix}audio[starts-with(@src,'http')]") + parsed.xpath("//#{prefix}audio/#{prefix}source[starts-with(@src,'http')]") if videos.size > 0 || audios.size > 0 self.add_property('remote-resources') end if parsed.xpath("//p:math", { 'p' => 'http://www.w3.org/1998/Math/MathML' }).size > 0 self.add_property('mathml') end if parsed.xpath("//s:svg", { 's' => 'http://www.w3.org/2000/svg' }).size > 0 self.add_property('svg') end if parsed.xpath("//epub:switch", { 'epub' => 'http://www.idpf.org/2007/ops' }).size > 0 self.add_property('switch') end scripts = parsed.xpath("//#{prefix}script") + parsed.xpath("//#{prefix}form") if scripts.size > 0 self.add_property('scripted') end end end |
#itemid ⇒ Object
get item’s id
40 41 42 |
# File 'lib/gepub/item.rb', line 40 def itemid id end |
#mediatype ⇒ Object
get mediatype of the item.
45 46 47 |
# File 'lib/gepub/item.rb', line 45 def mediatype media_type end |
#nav ⇒ Object
set ‘nav’ property to the Item.
70 71 72 |
# File 'lib/gepub/item.rb', line 70 def nav add_property('nav') end |
#to_xml(builder, opf_version = '3.0') ⇒ Object
generate xml to supplied Nokogiri builder.
128 129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/gepub/item.rb', line 128 def to_xml(builder, opf_version = '3.0') attr = @attributes.dup if opf_version.to_f < 3.0 attr.reject!{ |k,v| k == 'properties' } end if !attr['properties'].nil? attr['properties'] = attr['properties'].uniq.join(' ') if attr['properties'].size == 0 attr.delete 'properties' end end builder.item(attr) end |