mirror of https://github.com/freeCodeCamp/devdocs
commit
2584ecce10
@ -0,0 +1,48 @@
|
||||
._tailwindcss {
|
||||
// Styling for customizing-colors page - color swatches (based on original tailwind display design)
|
||||
.colors {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1.2rem;
|
||||
|
||||
// Text offset
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
// Color swatch title
|
||||
.color > div:first-child {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.color-swatch-group {
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.color-swatch-container {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
// Tiny box with the color set as background
|
||||
.color-swatch {
|
||||
width: 120px;
|
||||
height: 40px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.color-tone-information {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
// Styling for large quick-reference lookup tables
|
||||
.long-quick-reference {
|
||||
max-height: 40vh;
|
||||
width: fit-content;
|
||||
overflow-y: auto;
|
||||
padding: .3rem;
|
||||
border-top: 1px solid var(--textColor);
|
||||
border-bottom: 1px solid var(--textColor);
|
||||
}
|
||||
}
|
@ -0,0 +1,114 @@
|
||||
module Docs
|
||||
class Tailwindcss
|
||||
class CleanHtmlFilter < Filter
|
||||
def call
|
||||
# Remove main page headers (top level sticky)
|
||||
css('#__next > .sticky').remove
|
||||
# And anything absolutely positioned (fancy floating navigation elements we don't care about)
|
||||
css('#__next .absolute').remove
|
||||
# Remove the left-navigation we scraped
|
||||
css('nav').remove
|
||||
|
||||
css('svg').remove if root_page?
|
||||
|
||||
# Remove the duplicate category name at the top of the page - redundant
|
||||
at_css('header#header > div:first-child > p:first-child').remove
|
||||
|
||||
# Remove the right navigation sidebar
|
||||
at_css('header#header').parent.css('> div:has(h5:contains("On this page"))').remove
|
||||
|
||||
# Remove footer + prev/next navigation
|
||||
at_css('footer').remove
|
||||
|
||||
# Handle long lists of class reference that otherwise span several scrolled pages
|
||||
if class_reference = at_css('#class-reference')
|
||||
reference_container = class_reference.parent
|
||||
classes_container = reference_container.children.reject{ |child| child == class_reference }.first
|
||||
|
||||
rows = classes_container.css("tr")
|
||||
|
||||
if rows.length > 10
|
||||
classes_container.set_attribute("class", "long-quick-reference")
|
||||
end
|
||||
end
|
||||
|
||||
# Remove border color preview column as it isn't displayed anyway
|
||||
if result[:path] == "border-color" and class_reference = at_css('#class-reference')
|
||||
class_reference.parent.css("thead th:nth-child(3)").remove
|
||||
class_reference.parent.css("tbody td:nth-child(3)").remove
|
||||
end
|
||||
|
||||
if result[:path] == "customizing-colors"
|
||||
# It's nice to be able to quickly find out what a color looks like
|
||||
css('div[style^="background-color:"]').each do |node|
|
||||
node.set_attribute("class", "color-swatch")
|
||||
|
||||
swatch_container = node.parent
|
||||
swatch_container.set_attribute("class", "color-swatch-container")
|
||||
swatch_container.children.reject{ |child| child == node }.first.set_attribute("class", "color-tone-information")
|
||||
|
||||
swatch_group = swatch_container.parent
|
||||
swatch_group.set_attribute("class", "color-swatch-group")
|
||||
|
||||
color = swatch_group.parent
|
||||
color.set_attribute("class", "color")
|
||||
|
||||
color_list = color.parent.parent
|
||||
color_list.set_attribute("class", "colors")
|
||||
end
|
||||
end
|
||||
|
||||
# Remove buttons to expand lists - those are already expanded and the button is useless
|
||||
css('div > button:contains("Show all classes")').each do |node|
|
||||
node.parent.remove
|
||||
end
|
||||
|
||||
# Remove class examples - not part of devdocs styleguide? (similar to bootstrap)
|
||||
# Refer to https://github.com/freeCodeCamp/devdocs/pull/1534#pullrequestreview-649818936
|
||||
css('.not-prose').each do |node|
|
||||
if node.parent.children.length == 1
|
||||
node.parent.remove
|
||||
else
|
||||
node.remove
|
||||
end
|
||||
end
|
||||
|
||||
# Properly format code examples
|
||||
css('pre > code:first-child').each do |node|
|
||||
node.parent['data-language'] = node['class'][/language-(\w+)/, 1] if node['class'] and node['class'][/language-(\w+)/]
|
||||
node.parent.content = node.parent.content
|
||||
end
|
||||
|
||||
@doc.traverse { |node| cleanup_tailwind_classes(node) }
|
||||
|
||||
#remove weird <hr> (https://github.com/damms005/devdocs/commit/8c9fbd859b71a2525b94a35ea994393ce2b6fedb#commitcomment-50091018)
|
||||
css('hr').remove
|
||||
|
||||
doc
|
||||
end
|
||||
|
||||
# Removes all classes not allowlisted in the below semantic_classes array - such as tailwinds utility classes
|
||||
def cleanup_tailwind_classes(node)
|
||||
class_name = node.attr("class")
|
||||
|
||||
if class_name == nil
|
||||
return node.children.each { |child| cleanup_tailwind_classes(child) }
|
||||
end
|
||||
|
||||
semantic_classes = ["code", "color-swatch", "color-swatch-container", "color-tone-information", "color-swatch-group", "color", "colors", "long-quick-reference"]
|
||||
|
||||
classes = class_name.split.select do |klas|
|
||||
semantic_classes.include? klas
|
||||
end
|
||||
|
||||
if classes.length === 0
|
||||
node.delete("class")
|
||||
else
|
||||
node.set_attribute("class", classes.join(" "))
|
||||
end
|
||||
|
||||
node.children.each { |child| cleanup_tailwind_classes(child) }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,24 @@
|
||||
module Docs
|
||||
class Tailwindcss
|
||||
class EntriesFilter < Docs::EntriesFilter
|
||||
def get_type
|
||||
# We are only interested in children list items
|
||||
selector = "nav li li a[href='#{result[:path]}']"
|
||||
|
||||
anchor = at_css(selector)
|
||||
category_list = anchor.ancestors('li')[1]
|
||||
title = category_list.css('h5')
|
||||
|
||||
return title.inner_text
|
||||
end
|
||||
|
||||
def get_name
|
||||
# We are only interested in children list items
|
||||
selector = "nav li li a[href='#{result[:path]}']"
|
||||
item = at_css(selector)
|
||||
|
||||
return item.inner_text
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,9 @@
|
||||
module Docs
|
||||
class Tailwindcss
|
||||
class NoopFilter < Filter
|
||||
def call
|
||||
return html
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,59 @@
|
||||
module Docs
|
||||
class Tailwindcss < UrlScraper
|
||||
self.name = 'Tailwind CSS'
|
||||
self.type = 'tailwindcss'
|
||||
self.slug = 'tailwindcss'
|
||||
self.base_url = 'https://tailwindcss.com/docs'
|
||||
self.root_path = '/'
|
||||
self.release = '3.0.23'
|
||||
self.links = {
|
||||
home: 'tps://tailwindcss.com/',
|
||||
code: 'https://github.com/tailwindlabs/tailwindcss'
|
||||
}
|
||||
|
||||
html_filters.push 'tailwindcss/entries', 'tailwindcss/clean_html'
|
||||
|
||||
# Disable the clean text filter which removes empty nodes - we'll do it ourselves more selectively
|
||||
text_filters.replace("clean_text", "tailwindcss/noop")
|
||||
|
||||
# Fix redirects from older tailwind 2 docs
|
||||
options[:fix_urls] = lambda do |url|
|
||||
if url.include? "installation/"
|
||||
break "/docs/installation"
|
||||
end
|
||||
|
||||
if url.end_with? "/breakpoints"
|
||||
break "/docs/screens#{/#.*$/.match(url)}"
|
||||
end
|
||||
if url.end_with? "/adding-base-styles"
|
||||
break "/docs/adding-custom-styles#adding-base-styles"
|
||||
end
|
||||
if url.end_with? "/ring-opacity"
|
||||
break "/docs/ring-color#changing-the-opacity"
|
||||
end
|
||||
|
||||
if url.match(/\/colors#?/)
|
||||
break "/docs/customizing-colors#{/#.*$/.match(url)}"
|
||||
end
|
||||
end
|
||||
|
||||
options[:skip_patterns] = [
|
||||
# Skip setup instructions
|
||||
/\/browser-support$/,
|
||||
/\/editor-setup$/,
|
||||
/\/installation$/,
|
||||
/\/optimizing-for-production$/,
|
||||
/\/upgrade-guide/,
|
||||
/\/using-with-preprocessors/
|
||||
]
|
||||
|
||||
#Obtainable from https://github.com/tailwindlabs/tailwindcss/blob/master/LICENSE
|
||||
options[:attribution] = <<-HTML
|
||||
© 2022 Tailwind Labs Inc.
|
||||
HTML
|
||||
|
||||
def get_latest_version(opts)
|
||||
get_latest_github_release('tailwindlabs', 'tailwindcss', opts)
|
||||
end
|
||||
end
|
||||
end
|
After Width: | Height: | Size: 601 B |
After Width: | Height: | Size: 1.1 KiB |
@ -0,0 +1 @@
|
||||
https://tailwindcss.com/favicons/favicon.ico
|
Loading…
Reference in new issue