mirror of https://github.com/freeCodeCamp/devdocs
commit
78f1c879dd
@ -0,0 +1,24 @@
|
|||||||
|
._react {
|
||||||
|
@extend %simple;
|
||||||
|
|
||||||
|
.note {
|
||||||
|
@extend %note;
|
||||||
|
h4 {
|
||||||
|
margin-top: .25rem;
|
||||||
|
margin-bottom: .5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.note-orange {
|
||||||
|
@extend %note-orange;
|
||||||
|
}
|
||||||
|
|
||||||
|
.note-blue {
|
||||||
|
@extend %note-blue;
|
||||||
|
}
|
||||||
|
|
||||||
|
.note-green {
|
||||||
|
@extend %note-green;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,77 @@
|
|||||||
|
module Docs
|
||||||
|
class React
|
||||||
|
class CleanHtmlReactDevFilter < Filter
|
||||||
|
def call
|
||||||
|
@doc = at_css('article')
|
||||||
|
|
||||||
|
# Remove breadcrumbs before h1
|
||||||
|
css('h1').each do |node|
|
||||||
|
if node.previous
|
||||||
|
node.previous.remove
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
remove_selectors = [
|
||||||
|
'div.grid > a', # prev-next links
|
||||||
|
'button', # "show more" etc. buttons
|
||||||
|
'div.order-last', # code iframe containers
|
||||||
|
'div.dark-image', # dark images
|
||||||
|
'a[title="Open in CodeSandbox"]', # codesandbox links
|
||||||
|
]
|
||||||
|
css(*remove_selectors).each do |node|
|
||||||
|
node.remove
|
||||||
|
end
|
||||||
|
|
||||||
|
# Fix images not loading
|
||||||
|
css('img').remove_attr('srcset')
|
||||||
|
|
||||||
|
# Remove recipe blocks - TODO transform to outgoing link to docs
|
||||||
|
css('h4[id^="examples-"]').each do |node|
|
||||||
|
node.parent.parent.parent.remove
|
||||||
|
end
|
||||||
|
|
||||||
|
# Transform callout blocks
|
||||||
|
class_transform = {
|
||||||
|
'.expandable-callout[class*=yellow]' => 'note note-orange', # pitfalls, experimental
|
||||||
|
'.expandable-callout[class*=green]' => 'note note-green', # note
|
||||||
|
'.expandable-callout[class*=gray]' => 'note', # canary
|
||||||
|
'.bg-card' => 'note', # you will learn
|
||||||
|
'details' => 'note note-blue' # deep dive
|
||||||
|
}
|
||||||
|
|
||||||
|
class_transform.each do |old_class, new_class|
|
||||||
|
css(old_class).each do |node|
|
||||||
|
node.set_attribute('class', new_class)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Transform h3 to h4 inside callouts
|
||||||
|
css('.note h3', '.note h2').each do |node|
|
||||||
|
new_node = Nokogiri::XML::Node.new('h4', @doc)
|
||||||
|
new_node.content = node.content
|
||||||
|
node.replace(new_node)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Remove styling divs while lifting children
|
||||||
|
styling_prefixes = %w[ps- mx- my- px- py- mb- sp- rounded-]
|
||||||
|
selectors = styling_prefixes.map { |prefix| "div[class*=\"#{prefix}\"]:not(.note)" }
|
||||||
|
css(*selectors, 'div[class=""]', 'div.cm-line').each do |node|
|
||||||
|
node.before(node.children).remove
|
||||||
|
end
|
||||||
|
|
||||||
|
# Syntax highlighting
|
||||||
|
css('pre br').each do |node|
|
||||||
|
node.replace("\n")
|
||||||
|
end
|
||||||
|
css('pre').each do |node|
|
||||||
|
node['data-language'] = 'jsx'
|
||||||
|
end
|
||||||
|
|
||||||
|
# Remove styling except for callouts and images
|
||||||
|
css('*:not([class*=image]):not(.note)').remove_attr('class').remove_attr('style')
|
||||||
|
|
||||||
|
doc
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,32 @@
|
|||||||
|
module Docs
|
||||||
|
class React
|
||||||
|
class EntriesReactDevFilter < Docs::EntriesFilter
|
||||||
|
def get_name
|
||||||
|
name = at_css('article h1')&.content
|
||||||
|
|
||||||
|
update_canary_copy(name)
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_type
|
||||||
|
# Category is the opened category in the sidebar
|
||||||
|
category = css('a:has(> span.text-link) > div').first&.content
|
||||||
|
# The grey category in the sidebar
|
||||||
|
top_category = css('h3:has(~ li a.text-link)')
|
||||||
|
.last&.content
|
||||||
|
&.sub(/@.*$/, '') # remove version tag
|
||||||
|
&.sub(/^./, &:upcase) # capitalize first letter
|
||||||
|
&.concat(": ")
|
||||||
|
is_learn_page = path.start_with?('learn/') || slug == 'learn'
|
||||||
|
prefix = is_learn_page ? 'Learn: ' : top_category || ''
|
||||||
|
|
||||||
|
update_canary_copy(prefix + (category || 'Miscellaneous'))
|
||||||
|
end
|
||||||
|
|
||||||
|
def update_canary_copy(string)
|
||||||
|
canary_copy = '- This feature is available in the latest Canary'
|
||||||
|
|
||||||
|
string.sub(canary_copy, ' (Canary)')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Before Width: | Height: | Size: 495 B After Width: | Height: | Size: 872 B |
Before Width: | Height: | Size: 830 B After Width: | Height: | Size: 1.6 KiB |
@ -1,2 +1,2 @@
|
|||||||
https://es.m.wikipedia.org/wiki/React#/media/Archivo%3AReact.svg
|
https://github.com/reactjs/react.dev/blob/master/public/favicon-16x16.png
|
||||||
https://github.com/facebook/react/blob/master/docs/img/logo.svg
|
https://github.com/reactjs/react.dev/blob/master/public/favicon-32x32.png
|
||||||
|
Loading…
Reference in new issue