Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 58 additions & 3 deletions build/taskforce-markdown.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ const getMarkdownData = require('../utils/get-markdown-data')
const createFile = require('../utils/create-file')
const getRuleContent = require('./taskforce-rule-page/get-rule-content')
const getDefinitionContent = require('./taskforce-rule-page/get-definition-content')
const { getWcagCriterion } = require('../src/rule/get-wcag-criterion')
const program = require('commander')

const rulesDirDefault = path.resolve(__dirname, '../node_modules/act-rules-community/_rules')
Expand All @@ -13,6 +14,7 @@ program
.option('-o, --outDir <dirname>', 'Path to output dir')
.option('-r, --rulesDir <dirname>', 'Path to _rules directory')
.option('-g, --glossaryDir <dirname>', 'Path to glossary directory')
.option('-p, --proposed', 'List the rule with the Proposed rule template')
.parse(process.argv)

taskforceMarkdown(program)
Expand All @@ -30,17 +32,24 @@ async function taskforceMarkdown({
glossaryDir = glossaryDirDefault,
ruleIds = [],
outDir = './content/',
proposed = false,
}) {
const rulesData = getMarkdownData(rulesDir)
const glossary = getMarkdownData(glossaryDir)
const glossaryFiles = new Set()
let wcagMapping = require(path.resolve(outDir, 'wcag-mapping.json'))

for (const ruleData of rulesData) {
for (let ruleData of rulesData) {
ruleData = { ...ruleData, proposed }
if (ruleIds.length && !ruleIds.includes(ruleData.frontmatter.id)) {
continue
}

wcagMapping['act-rules'] = updateWcagMapping(wcagMapping['act-rules'], ruleData)
console.log(`Updated ${ruleLink(ruleData)}`)

const { filepath, content } = buildTfRuleFile(ruleData, glossary)
await createFile(path.resolve(outDir, filepath), content)
await createFile(path.resolve(outDir, 'content', filepath), content)

const definitions = parseDefinitions(content)
definitions.forEach(dfn => glossaryFiles.add(dfn))
Expand All @@ -50,6 +59,9 @@ async function taskforceMarkdown({
const { filepath, content } = buildTfDefinitionFile(definition, glossary)
await createFile(path.resolve(outDir, filepath), content)
}

await createFile(path.resolve(outDir, 'wcag-mapping.json'), JSON.stringify(wcagMapping, null, 2))
console.log('\nUpdated wcag-mapping.json')
}

function buildTfRuleFile(ruleData, glossary) {
Expand All @@ -61,7 +73,7 @@ function buildTfRuleFile(ruleData, glossary) {

function buildTfDefinitionFile(definitionKey, glossary) {
return {
filepath: `glossary/${definitionKey}.md`,
filepath: `content/glossary/${definitionKey}.md`,
content: getDefinitionContent(definitionKey, glossary),
}
}
Expand All @@ -77,3 +89,46 @@ function parseDefinitions(content) {
})
return definitionKeys
}

function ruleLink({ frontmatter, filename }) {
return `[${frontmatter.name}](${ruleUrl(filename)})`
}

function updateWcagMapping(wcagMapping, { frontmatter, filename, proposed }) {
const { id } = frontmatter
wcagMapping = wcagMapping.filter(({ permalink }) => !permalink.includes('-' + id))
const { successCriteria, wcagTechniques } = getRequirements(frontmatter)

wcagMapping.push({
title: frontmatter.name.replace(/`/gi, ''),
permalink: ruleUrl(filename),
successCriteria,
wcagTechniques,
proposed,
})
return wcagMapping
}

function ruleUrl(filename) {
return `/standards-guidelines/act/rules/${filename.replace('.md', '')}/`
}

function getRequirements({ accessibility_requirements: requirements }) {
const successCriteria = []
const wcagTechniques = []
Object.keys(requirements || {}).forEach(id => {
const [standard, key] = id.split(':')
if (standard === 'wcag-technique') {
wcagTechniques.push(key)
}

if (standard.indexOf('wcag2') === 0) {
const scId = getWcagCriterion(key).url.split('#')[1]
if (scId) {
successCriteria.push(scId)
}
return
}
})
return { successCriteria, wcagTechniques }
}
5 changes: 4 additions & 1 deletion build/taskforce-rule-page/get-rule-metadata.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ const { getAccessibilityRequirement } = require('../../src/rule/get-accessibilit

module.exports = getRuleMetadata

function getRuleMetadata({ frontmatter }) {
function getRuleMetadata({ frontmatter, proposed }) {
const metadata = [
'Rule Type:\n' + toDfnTerm(frontmatter.rule_type),
'Rule ID:\n' + toDfnTerm(frontmatter.id),
Expand All @@ -12,6 +12,9 @@ function getRuleMetadata({ frontmatter }) {
inputAspects(frontmatter),
inputRules(frontmatter),
]
if (proposed) {
metadata.unshift('{% include_relative _proposed-banner.html %}')
}

return metadata.filter(str => str !== '').join('\n\n')
}
Expand Down