1
0
mirror of synced 2025-12-21 10:57:10 -05:00
Files
docs/lib/frontmatter.js
Jason Etcovitch dd91c5a707 "Guides" section of the Actions landing page (#16216)
* Add custom hover shadows

* Support avatars

* Add guide-card include

* Use it in product-landing

* Add gradient styles

* Add guides frontmatter

* Use guideArticles instead of full objects

* Add support for authors

* Add support for category header

* Just pass the whole page

* Use it

* guide.url => guide.href

* Use `*.githubusercontent.com`

* Fix mobile card width

* Remove showDescription check

* Use featureLinks.guideCards

* Forgot an if

* Remove support banner

* Just use login instead of name/avatarUrl

* Change card spacing

* Use circular avatars

* Add margin beneath "Guides"

* Use smaller font

* Even moar spacing

* Remove category

* Remove lead text, move button to bottom right

* update guide cards

* Change author of setting up ci to GitHub

* Attribute node js guide to GitHub

* Add author tag to powershell guide

* update top guides section with correct actions links

* Enforce size for single avatars

* Adjust spacing

Co-authored-by: Cynthia Rich <crichID@users.noreply.github.com>
2020-11-11 12:53:46 -05:00

119 lines
2.7 KiB
JavaScript

const parse = require('@github-docs/frontmatter')
const layoutNames = Object.keys(require('./layouts')).concat([false])
const semverRange = {
type: 'string',
conform: require('semver').validRange,
message: 'Must be a valid SemVer range'
}
const versionIds = Object.keys(require('./all-versions'))
const schema = {
properties: {
title: {
type: 'string',
required: true
},
shortTitle: {
type: 'string'
},
intro: {
type: 'string'
},
product: {
type: 'string'
},
permissions: {
type: 'string'
},
// true by default on articles, false on all other content
showMiniToc: {
type: 'boolean'
},
miniTocMaxHeadingLevel: {
type: 'number',
default: 3,
minimum: 2,
maximum: 4
},
mapTopic: {
type: 'boolean'
},
// The `hidden` frontmatter property is no longer used, but leaving it here
// with an enum of `[false]` will help us catch any possible regressions.
hidden: {
type: 'boolean',
enum: [false]
},
layout: {
type: ['string', 'boolean'],
enum: layoutNames,
message: 'must be the filename of an existing layout file, or `false` for no layout'
},
redirect_from: {
type: ['array', 'string']
},
allowTitleToDifferFromFilename: {
type: 'boolean'
},
introLinks: {
type: 'object',
properties: {
quickstart: { type: 'string' },
reference: { type: 'string' }
}
},
authors: {
type: 'array',
items: {
type: 'string'
}
},
featuredLinks: {
type: 'object',
additionalProperties: false,
patternProperties: {
'^[a-zA-Z-_]+$': {
type: 'array',
items: { type: 'string' }
}
}
},
// Shown in `product-landing.html` "What's new" section
changelog: {
type: 'array',
items: {
type: 'object',
properties: {
title: { type: 'string' },
date: { type: 'string', format: 'date' },
href: { type: 'string' }
}
}
}
}
}
schema.properties.versions = {
type: ['object', 'string'], // allow a '*' string to indicate all versions
required: true,
properties: versionIds.reduce((acc, versionId) => {
acc[versionId] = semverRange
return acc
}, {})
}
function frontmatter (markdown, opts = {}) {
const defaults = {
schema,
validateKeyNames: true,
validateKeyOrder: false // TODO: enable this once we've sorted all the keys. See https://github.com/github/docs-internal/issues/9658
}
return parse(markdown, Object.assign({}, defaults, opts))
}
// attach the schema object so it can be `require`d elsewhere.
frontmatter.schema = schema
module.exports = frontmatter