diff --git a/lib/docs/filters/bootstrap/clean_html_v4.rb b/lib/docs/filters/bootstrap/clean_html_v4.rb index 6a94e20e..cc43e565 100644 --- a/lib/docs/filters/bootstrap/clean_html_v4.rb +++ b/lib/docs/filters/bootstrap/clean_html_v4.rb @@ -4,7 +4,10 @@ module Docs def call @doc = at_css('.bd-content') - at_css('h1').content = 'Bootstrap 4' if root_page? + # 'View on Github' button + css('.btn').remove + + at_css('h1').content = 'Bootstrap' if root_page? css('hr', '.bd-clipboard', '.modal', '.bd-example .bd-example').remove @@ -21,15 +24,6 @@ module Docs if node.previous_element['class'].try(:include?, 'bd-example') node.remove - else - node.content = '' - node.name = 'p' - node['class'] = 'bd-example' - node.remove_attribute('data-example-id') - prev = node.previous_element - prev = prev.previous_element until !prev || prev['id'] - anchor = prev ? %(##{prev['id']}) : '' - node.inner_html = %(Open example on getbootstrap.com) end end diff --git a/lib/docs/filters/bootstrap/clean_html_v5.rb b/lib/docs/filters/bootstrap/clean_html_v5.rb new file mode 100644 index 00000000..daf3a81d --- /dev/null +++ b/lib/docs/filters/bootstrap/clean_html_v5.rb @@ -0,0 +1,32 @@ +module Docs + class Bootstrap + class CleanHtmlV5Filter < Filter + def call + + @doc = at_css('main') + + # Toc + css('.bd-toc').remove + + # 'View on Github' button + css('.btn').remove + + at_css('h1').content = 'Bootstrap' if root_page? + + css('.highlight').each do |node| + code = node.at_css('code') + node['data-language'] = code['data-lang'] + node.content = code.content + node.name = 'pre' + end + + css('.bd-example').each do |node| + node.remove + end + + doc + + end + end + end +end diff --git a/lib/docs/filters/bootstrap/entries_v5.rb b/lib/docs/filters/bootstrap/entries_v5.rb new file mode 100644 index 00000000..27ba2f7e --- /dev/null +++ b/lib/docs/filters/bootstrap/entries_v5.rb @@ -0,0 +1,62 @@ +module Docs + class Bootstrap + class EntriesV5Filter < Docs::EntriesFilter + + def get_name + at_css('.bd-title').content.strip + end + + def get_type + type = subpath.match(/\A.*?\//).to_s[0..-2] + type.gsub!('-', ' ') + type.capitalize! + type << ": #{name}" if type == 'Components' + type + end + + def additional_entries + return [] if root_page? || subpath.start_with?('getting-started') + + entries = [] + + # titles + css('h2', 'h3').each do |node| + entries << [ name + ': ' + node.content, node['id']] + end + + # methods and events + # traverse through all '.tables' and search for a 'Method' or 'Event type' in the first + css('.table').each do |node| + firstTh = node.at_css('th').content + + if firstTh == 'Method' + # traverse all and search only the first of each tr + node.css('tr').each do |subnode| + if subnode + method = subnode.at_css('code') + if method + method['id'] = method.content + entries << [method.content + ' (Method)', method['id']] + end + end + end + end + + if firstTh == 'Event type' + node.css('tr').each do |subnode| + event = subnode.at_css('code') + if event + event['id'] = event.content + entries << [event.content + ' (Event)', event['id']] + end + end + end + + end + + entries + end + + end + end +end diff --git a/lib/docs/scrapers/bootstrap.rb b/lib/docs/scrapers/bootstrap.rb index d932db9e..ab91445e 100644 --- a/lib/docs/scrapers/bootstrap.rb +++ b/lib/docs/scrapers/bootstrap.rb @@ -16,14 +16,36 @@ module Docs Documentation licensed under the Creative Commons Attribution License v3.0. HTML + version '5' do + self.release = '5.0' + self.base_url = "https://getbootstrap.com/docs/#{self.release}/" + self.root_path = 'getting-started/introduction/' + + html_filters.push 'bootstrap/entries_v5', 'bootstrap/clean_html_v5' + + options[:only_patterns] = [ + /\Agetting-started\//, /\Alayout\//, /\Acontent\//, + /\Acomponents\//, /\Autilities\/.+/, /\Ahelpers\// + ] + + options[:replace_paths] = { + 'components/breadcrumb//' => '/components/breadcrumb/' + } + + end + version '4' do self.release = '4.5' - self.base_url = 'https://getbootstrap.com/docs/4.5/' + self.base_url = "https://getbootstrap.com/docs/#{self.release}/" self.root_path = 'getting-started/introduction/' html_filters.push 'bootstrap/entries_v4', 'bootstrap/clean_html_v4' - options[:only_patterns] = [/\Agetting-started\//, /\Alayout\//, /\Acontent\//, /\Acomponents\//, /\Autilities\/.+/, /\Amigration\//] + options[:only_patterns] = [ + /\Agetting-started\//, /\Alayout\//, /\Acontent\//, + /\Acomponents\//, /\Autilities\/.+/, /\Amigration\// + ] + end version '3' do @@ -40,5 +62,6 @@ module Docs doc = fetch_doc('https://getbootstrap.com/docs/versions/', opts) doc.at_css('span:contains("Latest")').parent.content.split(' ').first end + end end