mirror of https://github.com/freeCodeCamp/devdocs
parent
5f45ead400
commit
f606c0abc8
@ -0,0 +1,22 @@
|
|||||||
|
._openjdk {
|
||||||
|
> ul.inheritance {
|
||||||
|
@extend %note, %note-blue;
|
||||||
|
li {
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.blockList, ul.blockListLast {
|
||||||
|
padding-left: 0;
|
||||||
|
li.blockList {
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
@extend %block-heading;
|
||||||
|
}
|
||||||
|
h4 {
|
||||||
|
@extend %block-label, %label-blue;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,88 @@
|
|||||||
|
module Docs
|
||||||
|
class Openjdk
|
||||||
|
class CleanHtmlFilter < Filter
|
||||||
|
def call
|
||||||
|
# Preserve internal fragment links
|
||||||
|
# Transform <a name="foo"><!-- --></a><bar>text</bar>
|
||||||
|
# into <bar id="foo">text</bar>
|
||||||
|
css('a[name]').each do |node|
|
||||||
|
if node.children.all?(&:blank?)
|
||||||
|
node.next_element['id'] = node['name'] if node.next_element
|
||||||
|
node.remove
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Find the main container
|
||||||
|
# Root page have three containers, we use the second one
|
||||||
|
container = at_css('.contentContainer' + (root_page? ? ':nth-of-type(2)' : ''))
|
||||||
|
|
||||||
|
# Move description to the container top
|
||||||
|
if description_link = at_css('a[href$=".description"]')
|
||||||
|
target = description_link['href'][1..-1]
|
||||||
|
description_nodes = xpath("//*[@id='#{target}'] | //*[@id='#{target}']/following-sibling::*")
|
||||||
|
container.prepend_child(description_nodes)
|
||||||
|
description_nodes.at_css('h2:contains("Description")')&.remove
|
||||||
|
description_link.parent.remove
|
||||||
|
end
|
||||||
|
|
||||||
|
# Remove superfluous and duplicated content
|
||||||
|
css('.subTitle', '.docSummary', '.summary caption', 'caption span.tabEnd').remove
|
||||||
|
css('table[class$="Summary"] > tr > th').each do |th|
|
||||||
|
th.parent.remove
|
||||||
|
end
|
||||||
|
css('h3[id$=".summary"]').each do |header|
|
||||||
|
# Keep only a minimal list of annotation required/optional elements
|
||||||
|
# as with "Methods inherited from class"
|
||||||
|
if header['id'].match? %r{\.element\.summary$}
|
||||||
|
table_summary = header.next_element
|
||||||
|
code_summary = header.document.create_element 'code'
|
||||||
|
table_summary.css('.memberNameLink a').each_with_index do |element, index|
|
||||||
|
code_summary << header.document.create_text_node(', ') if index > 0
|
||||||
|
code_summary << element
|
||||||
|
end
|
||||||
|
table_summary.replace(code_summary)
|
||||||
|
# Remove summary element if detail exists
|
||||||
|
elsif detail_header = at_css("h3[id='#{header['id'].sub('summary','detail')}']")
|
||||||
|
header.next_element.remove
|
||||||
|
header.replace(detail_header.parent.children)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
at_css('.details')&.remove unless at_css('.details h3')
|
||||||
|
css('h3[id$=".summary"]', 'h3[id$=".detail"]', 'caption span').each do |header|
|
||||||
|
header.name = 'h3' if header.name == 'span'
|
||||||
|
content = header.content
|
||||||
|
content.remove! ' Summary'
|
||||||
|
content.remove! ' Detail'
|
||||||
|
header.content = content.pluralize
|
||||||
|
end
|
||||||
|
css('h4').each do |entry_header|
|
||||||
|
entry_pre = entry_header.next_element
|
||||||
|
entry_header.children = entry_pre.children
|
||||||
|
entry_pre.remove
|
||||||
|
end
|
||||||
|
|
||||||
|
# Keep only header and container
|
||||||
|
container.prepend_child(at_css('.header'))
|
||||||
|
@doc = container
|
||||||
|
|
||||||
|
# Remove packages not belonging to this version
|
||||||
|
if root_page?
|
||||||
|
at_css('.overviewSummary caption h3').content =
|
||||||
|
version + ' ' +
|
||||||
|
at_css('.overviewSummary caption h3').content
|
||||||
|
css('.overviewSummary td.colFirst a').each do |node|
|
||||||
|
unless context[:only_patterns].any? { |pattern| node['href'].match? pattern }
|
||||||
|
node.parent.parent.remove
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Syntax highlighter
|
||||||
|
css('pre').each do |node|
|
||||||
|
node['data-language'] = 'java'
|
||||||
|
end
|
||||||
|
doc
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,24 @@
|
|||||||
|
module Docs
|
||||||
|
class Openjdk
|
||||||
|
class CleanUrlsFilter < Filter
|
||||||
|
def call
|
||||||
|
# Interlink between versions
|
||||||
|
css('a[href^="http://localhost/"]').each do |node|
|
||||||
|
path = URI(node['href']).path[1..-1]
|
||||||
|
|
||||||
|
# The following code ignores most options that InternalUrlsFilter accepts,
|
||||||
|
# only the currently used options are considered here.
|
||||||
|
self.class.parent.versions.each do |v|
|
||||||
|
if v.options[:only_patterns].any? { |pattern| path.match? pattern } &&
|
||||||
|
v.options[:skip_patterns].none? { |pattern| path.match? pattern }
|
||||||
|
node['href'] = "/#{v.slug}/#{path}"
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
doc
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,39 @@
|
|||||||
|
module Docs
|
||||||
|
class Openjdk
|
||||||
|
class EntriesFilter < Docs::EntriesFilter
|
||||||
|
def get_name
|
||||||
|
name = at_css('.header > .title').content.strip
|
||||||
|
name.remove! 'Package '
|
||||||
|
name.remove! 'Class '
|
||||||
|
name.remove! 'Interface '
|
||||||
|
name.remove! 'Annotation Type '
|
||||||
|
name.remove! 'Enum '
|
||||||
|
name.remove! %r{<.*}
|
||||||
|
name
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_type
|
||||||
|
if subtitle = at_css('.header > .subTitle:last-of-type')
|
||||||
|
subtitle.content.strip
|
||||||
|
else
|
||||||
|
at_css('.header > .title').content.strip.remove 'Package '
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def additional_entries
|
||||||
|
# Only keep the first found entry with a unique name,
|
||||||
|
# i.e. overloaded methods are skipped in index
|
||||||
|
css('a[name$=".summary"]').each_with_object({}) do |summary, entries|
|
||||||
|
next if summary['name'] == 'nested.class.summary'
|
||||||
|
summary.parent.css('.memberNameLink a').each do |node|
|
||||||
|
entry_name = node.parent.parent.content.strip
|
||||||
|
entry_name.sub! %r{\(.+?\)}m, '()'
|
||||||
|
id = node['href']
|
||||||
|
id.remove! %r{.*#}
|
||||||
|
entries[entry_name] ||= [name + '.' + entry_name, id]
|
||||||
|
end
|
||||||
|
end.values
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,88 @@
|
|||||||
|
module Docs
|
||||||
|
class Openjdk < FileScraper
|
||||||
|
self.name = 'OpenJDK'
|
||||||
|
self.type = 'openjdk'
|
||||||
|
self.root_path = 'overview-summary.html'
|
||||||
|
self.links = {
|
||||||
|
home: 'http://openjdk.java.net/',
|
||||||
|
code: 'http://hg.openjdk.java.net/jdk8u'
|
||||||
|
}
|
||||||
|
self.release = '8'
|
||||||
|
# Downloaded from packages.debian.org/sid/openjdk-8-doc
|
||||||
|
# extracting subdirectoy /usr/share/doc/openjdk-8-jre-headless/api
|
||||||
|
self.dir = '/Users/Thibaut/DevDocs/Docs/Java'
|
||||||
|
|
||||||
|
html_filters.push 'openjdk/entries', 'openjdk/clean_html'
|
||||||
|
html_filters.insert_after 'internal_urls', 'openjdk/clean_urls'
|
||||||
|
|
||||||
|
options[:skip_patterns] = [
|
||||||
|
/compact[123]-/,
|
||||||
|
/package-frame\.html/,
|
||||||
|
/package-tree\.html/,
|
||||||
|
/package-use\.html/,
|
||||||
|
/class-use\//,
|
||||||
|
/doc-files\//]
|
||||||
|
|
||||||
|
options[:attribution] = <<-HTML
|
||||||
|
© 1993–2017, Oracle and/or its affiliates. All rights reserved.<br>
|
||||||
|
Use is subject to <a href="http://download.oracle.com/otndocs/jcp/java_se-8-mrel-spec/license.html">license terms</a>.<br>
|
||||||
|
We are not endorsed by or affiliated with Oracle.
|
||||||
|
HTML
|
||||||
|
|
||||||
|
version 'Core' do
|
||||||
|
options[:only_patterns] = [
|
||||||
|
/\Ajava\/beans\//,
|
||||||
|
/\Ajava\/io\//,
|
||||||
|
/\Ajava\/lang\//,
|
||||||
|
/\Ajava\/math\//,
|
||||||
|
/\Ajava\/net\//,
|
||||||
|
/\Ajava\/nio\//,
|
||||||
|
/\Ajava\/security\//,
|
||||||
|
/\Ajava\/text\//,
|
||||||
|
/\Ajava\/time\//,
|
||||||
|
/\Ajava\/util\//,
|
||||||
|
/\Ajavax\/annotation\//,
|
||||||
|
/\Ajavax\/crypto\//,
|
||||||
|
/\Ajavax\/imageio\//,
|
||||||
|
/\Ajavax\/lang\//,
|
||||||
|
/\Ajavax\/management\//,
|
||||||
|
/\Ajavax\/naming\//,
|
||||||
|
/\Ajavax\/net\//,
|
||||||
|
/\Ajavax\/print\//,
|
||||||
|
/\Ajavax\/script\//,
|
||||||
|
/\Ajavax\/security\//,
|
||||||
|
/\Ajavax\/sound\//,
|
||||||
|
/\Ajavax\/tools\//]
|
||||||
|
end
|
||||||
|
|
||||||
|
version 'GUI' do
|
||||||
|
options[:only_patterns] = [
|
||||||
|
/\Ajava\/awt\//,
|
||||||
|
/\Ajavax\/swing\//]
|
||||||
|
end
|
||||||
|
|
||||||
|
version 'Web' do
|
||||||
|
options[:only_patterns] = [
|
||||||
|
/\Ajava\/applet\//,
|
||||||
|
/\Ajava\/rmi\//,
|
||||||
|
/\Ajava\/sql\//,
|
||||||
|
/\Ajavax\/accessibility\//,
|
||||||
|
/\Ajavax\/activation\//,
|
||||||
|
/\Ajavax\/activity\//,
|
||||||
|
/\Ajavax\/jws\//,
|
||||||
|
/\Ajavax\/rmi\//,
|
||||||
|
/\Ajavax\/sql\//,
|
||||||
|
/\Ajavax\/transaction\//,
|
||||||
|
/\Ajavax\/xml\//,
|
||||||
|
/\Aorg\/ietf\//,
|
||||||
|
/\Aorg\/omg\//,
|
||||||
|
/\Aorg\/w3c\//,
|
||||||
|
/\Aorg\/xml\//]
|
||||||
|
end
|
||||||
|
|
||||||
|
# Monkey patch to properly read HTML files encoded in ISO-8859-1
|
||||||
|
def read_file(path)
|
||||||
|
File.read(path).force_encoding('iso-8859-1').encode('utf-8') rescue nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in new issue