module Infoboxer::Navigation::Shortcuts::Node
`Shortcuts::Node` module provides some convenience methods for most used lookups. It's not a rocket science (as you can see from methods code), yet should make your code cleaner and more readable.
NB: as usual, {Tree::Nodes} class have synonyms for all of those methods, so you can call them fearlessly on any results of node lookup.
Public Instance Methods
Returns true, if current node is inside bold.
# File lib/infoboxer/navigation/shortcuts.rb, line 86 def bold? parent?(Tree::Bold) end
Returns all wikilinks in “categories namespace”.
NB: depending on your MediaWiki
settings, name of categories namespace may vary. When you are using {MediaWiki#get}, Infoboxer
tries to handle this transparently (by examining used wiki for category names), yet bad things may happen here.
@return {Tree::Nodes}
# File lib/infoboxer/navigation/shortcuts.rb, line 121 def categories lookup(Tree::Wikilink, namespace: /^#{ensure_traits.category_namespace.join('|')}$/) end
Returns all external links inside current node.
@param selectors node selectors, as described at {Lookup::Node} @return {Tree::Nodes}
# File lib/infoboxer/navigation/shortcuts.rb, line 49 def external_links(*selectors, &block) lookup(Tree::ExternalLink, *selectors, &block) end
Returns true, if current node is inside heading.
@param level optional concrete level to check
# File lib/infoboxer/navigation/shortcuts.rb, line 98 def heading?(level = nil) parent?(Tree::Heading, level: level) end
Returns all headings inside current node.
@param level headings level to return. @return {Tree::Nodes}
# File lib/infoboxer/navigation/shortcuts.rb, line 32 def headings(level = nil) lookup(Tree::Heading, level: level) end
Returns all images (media) inside current node.
@param selectors node selectors, as described at {Lookup::Node} @return {Tree::Nodes}
# File lib/infoboxer/navigation/shortcuts.rb, line 57 def images(*selectors, &block) lookup(Tree::Image, *selectors, &block) end
As users accustomed to have only one infobox on a page
# File lib/infoboxer/navigation/shortcuts.rb, line 126 def infobox infoboxes.first end
Returns all infoboxes inside current node.
Definition of what considered to be infobox depends on templates set used when parsing the page.
@param selectors node selectors, as described at {Lookup::Node} @return {Tree::Nodes}
# File lib/infoboxer/navigation/shortcuts.rb, line 109 def infoboxes(*selectors, &block) lookup(Tree::Template, :infobox?, *selectors, &block) end
Returns true, if current node is inside italic.
# File lib/infoboxer/navigation/shortcuts.rb, line 91 def italic? parent?(Tree::Italic) end
Returns all lists (ordered/unordered/definition) inside current node.
@param selectors node selectors, as described at {Lookup::Node} @return {Tree::Nodes}
# File lib/infoboxer/navigation/shortcuts.rb, line 81 def lists(*selectors, &block) lookup(Tree::List, *selectors, &block) end
Returns all paragraph-level nodes (list items, plain paragraphs, headings and so on) inside current node.
@param selectors node selectors, as described at {Lookup::Node} @return {Tree::Nodes}
# File lib/infoboxer/navigation/shortcuts.rb, line 41 def paragraphs(*selectors, &block) lookup(Tree::BaseParagraph, *selectors, &block) end
Returns all tables inside current node.
@param selectors node selectors, as described at {Lookup::Node} @return {Tree::Nodes}
# File lib/infoboxer/navigation/shortcuts.rb, line 73 def tables(*selectors, &block) lookup(Tree::Table, *selectors, &block) end
Returns all templates inside current node.
@param selectors node selectors, as described at {Lookup::Node} @return {Tree::Nodes}
# File lib/infoboxer/navigation/shortcuts.rb, line 65 def templates(*selectors, &block) lookup(Tree::Template, *selectors, &block) end
Returns all wikilinks inside current node.
@param namespace from which namespace links do you want. It's
`''` (main namespace only) by default, if you really want all wikilinks on the page, including categories, interwikies and stuff, use `wikilinks(nil)`
@return {Tree::Nodes}
# File lib/infoboxer/navigation/shortcuts.rb, line 24 def wikilinks(namespace = '') lookup(Tree::Wikilink, namespace: namespace) end
Private Instance Methods
# File lib/infoboxer/navigation/shortcuts.rb, line 136 def ensure_page (is_a?(MediaWiki::Page) ? self : lookup_parents(MediaWiki::Page).first) or fail('Node is not inside Page, maybe parsed from text?') end
# File lib/infoboxer/navigation/shortcuts.rb, line 132 def ensure_traits ensure_page.traits or fail('No site traits found') end