diff --git a/lib/docs/filters/mdn/compat_tables.rb b/lib/docs/filters/mdn/compat_tables.rb
new file mode 100644
index 00000000..8f81b488
--- /dev/null
+++ b/lib/docs/filters/mdn/compat_tables.rb
@@ -0,0 +1,212 @@
+module Docs
+ class Mdn
+ class CompatTablesFilter < Filter
+
+ def call
+ if at_css('#browser_compatibility') \
+ and not at_css('#browser_compatibility').next_sibling.classes.include?('warning') \
+ and not at_css('#browser_compatibility').next_sibling.content.match?('Supported')
+
+ at_css('#browser_compatibility').next_sibling.remove
+
+ compatibility_tables = generate_compatibility_table()
+ compatibility_tables.each do |table|
+ at_css('#browser_compatibility').add_next_sibling(table)
+ end
+ end
+
+ doc
+ end
+
+ BROWSERS = {
+ 'chrome' => 'Chrome',
+ 'edge' => 'Edge',
+ 'firefox' => 'Firefox',
+ 'ie' => 'Internet Explorer',
+ 'opera' => 'Opera',
+ 'safari' => 'Safari',
+ 'webview_android' => 'WebView Android',
+ 'chrome_android' => 'Chrome Android',
+ 'firefox_android' => 'Firefox for Android',
+ 'opera_android' => 'Opera Android',
+ 'safari_ios' => 'Safari on IOS',
+ 'samsunginternet_android' => 'Samsung Internet'
+ }
+
+ def generate_compatibility_table()
+ json_files_uri = request_bcd_uris()
+
+ compat_tables = []
+
+ json_files_uri.each do |uri|
+ compat_tables.push(generate_compatibility_table_wrapper(uri))
+ end
+
+ return compat_tables
+ end
+
+ def request_bcd_uris
+ index_json = JSON.load(Net::HTTP.get(URI(current_url.to_s + '/index.json')))
+
+ uris = []
+
+ index_json['doc']['body'].each do |element|
+ uris.push(element['value']['dataURL']) if element['type'] == 'browser_compatibility' and element['value']['dataURL']
+ end
+
+ uris.map! do |uri|
+ tmp_uri = URI.parse(base_url.to_s)
+ tmp_uri.path = uri
+ uri = tmp_uri.to_s
+ end
+
+ return uris
+ end
+
+ def generate_compatibility_table_wrapper(uri)
+
+ @json_data = JSON.load(Net::HTTP.get(URI(uri)))['data']
+
+ html_table = generate_basic_html_table()
+
+ @json_data.keys.each do |key|
+ if key == '__compat' or @json_data[key]['__compat']
+ add_entry_to_table(html_table, key)
+ else
+ end
+ end
+
+ return html_table
+ end
+
+ def generate_basic_html_table
+ table = Nokogiri::XML::Node.new('table', doc)
+
+ table.add_child('
#{tmp.last}")
+ else
+ last_table_entry.add_child("#{key}")
+ end
+
+
+ BROWSERS.keys.each do |browser_key|
+ if key == '__compat'
+ add_data_to_entry(json['support'][browser_key], last_table_entry)
+ else
+ add_data_to_entry(json['__compat']['support'][browser_key], last_table_entry)
+ end
+
+ end
+ end
+
+ def add_data_to_entry(json, entry)
+ version_added = []
+ version_removed = []
+ notes = []
+
+ if json
+ if json.is_a?(Array)
+ json.each do |element|
+
+ if element['version_added']
+ version_added.push(element['version_added'])
+ else
+ version_added.push(false)
+ end
+
+ if element['version_removed']
+ version_removed.push(element['version_removed'])
+ else
+ version_removed.push(false)
+ end
+
+ if element['notes']
+ notes.push(element['notes'])
+ else
+ notes.push(false)
+ end
+
+ end
+ else
+ version_added.push(json['version_added'])
+ version_removed.push(json['version_removed'])
+ notes.push(json['notes'])
+ end
+
+ version_added.map! do |version|
+ if version == true
+ version = 'Yes'
+ elsif version == false
+ version = 'No'
+ elsif version.is_a?(String)
+ else
+ version = '?'
+ end
+
+ version
+ end
+
+ if version_removed[0]
+ format_string = ""
+ else
+ if version_added[0] == 'No'
+ format_string = " "
+ else
+ format_string = " "
+ end
+ end
+
+ for value in (0..version_added.length-1) do
+ if version_removed[value]
+ format_string += "#{version_added[value]}-#{version_removed[value]}"
+ else
+ if version_added[value] == 'No'
+ format_string += "#{version_added[value]}"
+ else
+ format_string += "#{version_added[value]}"
+ end
+ end
+
+ if notes[value]
+ format_string += "#{notes[value]}"
+ end
+ end
+
+ else
+ format_string = " ? "
+ end
+
+ entry.add_child(format_string)
+ end
+
+ end
+ end
+end
diff --git a/lib/docs/filters/svg/clean_html.rb b/lib/docs/filters/svg/clean_html.rb
index 3468cfb7..fa9003f3 100644
--- a/lib/docs/filters/svg/clean_html.rb
+++ b/lib/docs/filters/svg/clean_html.rb
@@ -7,7 +7,6 @@ module Docs
end
def root
- doc.inner_html = doc.at_css('#Documentation + dl').to_html
end
def other
diff --git a/lib/docs/filters/xslt_xpath/entries.rb b/lib/docs/filters/xslt_xpath/entries.rb
index 5151246f..3480547f 100644
--- a/lib/docs/filters/xslt_xpath/entries.rb
+++ b/lib/docs/filters/xslt_xpath/entries.rb
@@ -6,13 +6,14 @@ module Docs
name.remove! 'XPath.'
name.remove! 'XSLT.'
name.remove! 'Axes.'
- name.prepend 'xsl:' if slug =~ /\AXSLT\/[a-z]/
+ name.remove! 'Element.'
+ name.prepend 'xsl:' if slug =~ /XSLT\/Element/
name << '()' if name.gsub!('Functions.', '')
name
end
def get_type
- if slug =~ /\AXSLT\/[a-z]/
+ if slug =~ /XSLT\/Element/
'XSLT Elements'
elsif slug.start_with?('XPath/Axes')
'XPath Axes'
diff --git a/lib/docs/scrapers/mdn/css.rb b/lib/docs/scrapers/mdn/css.rb
index 4c44f1f1..98a126ac 100644
--- a/lib/docs/scrapers/mdn/css.rb
+++ b/lib/docs/scrapers/mdn/css.rb
@@ -4,7 +4,7 @@ module Docs
self.base_url = 'https://developer.mozilla.org/en-US/docs/Web/CSS'
self.root_path = '/Reference'
- html_filters.push 'css/clean_html', 'css/entries', 'title'
+ html_filters.push 'css/clean_html', 'css/entries'
options[:root_title] = 'CSS'
diff --git a/lib/docs/scrapers/mdn/dom.rb b/lib/docs/scrapers/mdn/dom.rb
index 943aeb5b..b75af630 100644
--- a/lib/docs/scrapers/mdn/dom.rb
+++ b/lib/docs/scrapers/mdn/dom.rb
@@ -4,11 +4,9 @@ module Docs
self.name = 'DOM'
self.base_url = 'https://developer.mozilla.org/en-US/docs/Web/API'
- html_filters.push 'dom/clean_html', 'dom/entries', 'title'
+ html_filters.push 'dom/clean_html', 'dom/entries'
options[:root_title] = 'DOM'
- # self.release = '2021-04-29 21:55'
-
end
end
diff --git a/lib/docs/scrapers/mdn/html.rb b/lib/docs/scrapers/mdn/html.rb
index d062bc88..1f108711 100644
--- a/lib/docs/scrapers/mdn/html.rb
+++ b/lib/docs/scrapers/mdn/html.rb
@@ -29,7 +29,5 @@ module Docs
url
end
- # self.release = '2021-04-29 23:00'
-
end
end
diff --git a/lib/docs/scrapers/mdn/javascript.rb b/lib/docs/scrapers/mdn/javascript.rb
index 935df61c..8238d3b4 100644
--- a/lib/docs/scrapers/mdn/javascript.rb
+++ b/lib/docs/scrapers/mdn/javascript.rb
@@ -6,7 +6,7 @@ module Docs
self.name = 'JavaScript'
self.base_url = 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference'
- html_filters.push 'javascript/clean_html', 'javascript/entries', 'title'
+ html_filters.push 'javascript/clean_html', 'javascript/entries'
options[:root_title] = 'JavaScript'
diff --git a/lib/docs/scrapers/mdn/mdn.rb b/lib/docs/scrapers/mdn/mdn.rb
index 03a1d44b..2b31668a 100644
--- a/lib/docs/scrapers/mdn/mdn.rb
+++ b/lib/docs/scrapers/mdn/mdn.rb
@@ -3,7 +3,7 @@ module Docs
self.abstract = true
self.type = 'mdn'
- html_filters.push 'mdn/clean_html'
+ html_filters.push 'mdn/clean_html', 'mdn/compat_tables'
options[:container] = '#content > .main-page-content'
options[:trailing_slash] = false
diff --git a/lib/docs/scrapers/mdn/svg.rb b/lib/docs/scrapers/mdn/svg.rb
index db9de7a1..4a9de544 100644
--- a/lib/docs/scrapers/mdn/svg.rb
+++ b/lib/docs/scrapers/mdn/svg.rb
@@ -6,7 +6,7 @@ module Docs
self.name = 'SVG'
self.base_url = 'https://developer.mozilla.org/en-US/docs/Web/SVG'
- html_filters.push 'svg/clean_html', 'svg/entries', 'title'
+ html_filters.push 'svg/clean_html', 'svg/entries'
options[:root_title] = 'SVG'
diff --git a/lib/docs/scrapers/mdn/xslt_xpath.rb b/lib/docs/scrapers/mdn/xslt_xpath.rb
index 2407f0c0..286c48f4 100644
--- a/lib/docs/scrapers/mdn/xslt_xpath.rb
+++ b/lib/docs/scrapers/mdn/xslt_xpath.rb
@@ -6,15 +6,11 @@ module Docs
self.root_path = '/XSLT'
self.initial_paths = %w(/XPath)
- html_filters.push 'xslt_xpath/clean_html', 'xslt_xpath/entries', 'title'
+ html_filters.push 'xslt_xpath/clean_html', 'xslt_xpath/entries'
options[:root_title] = 'XSLT'
options[:only_patterns] = [/\A\/XSLT/, /\A\/XPath/]
- options[:fix_urls] = ->(url) do
- url.sub! 'https://developer.mozilla.org/en-US/docs/Web/XSLT/Element', "#{XsltXpath.base_url}/XSLT"
- url
- end
end
end