Skip to content

Commit 0808dad

Browse files
authored
Merge pull request newrelic#8 from newrelic/jerel/migrate-existing
Migrate hidden docs
2 parents 4f68c78 + 9072120 commit 0808dad

File tree

96 files changed

+9703
-186
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

96 files changed

+9703
-186
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
node_modules/
22
.cache/
33
public
4+
5+
# dotenv environment variable files
6+
.env*
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
const visit = require('unist-util-visit');
2+
const { hasClassName, isMdxElement } = require('./utils/mdxast');
3+
const u = require('unist-builder');
4+
5+
const isIcon = (name, node) =>
6+
isMdxElement('i', node) && hasClassName(`fa-${name}`, node);
7+
8+
const browserLandingPageBlockquote = () => (tree) => {
9+
visit(
10+
tree,
11+
(node) => isIcon('quote-left', node),
12+
(node, idx, parent) => {
13+
const phrasing = parent.children[idx + 1];
14+
15+
// We are assuming the only instance of the quote-left/quote-right icons
16+
// occur on the browser landing page, where there is a single paragraph
17+
// of text between the opening quote and the closing quote.
18+
parent.children[idx + 1] = u('blockquote', [phrasing]);
19+
parent.children.splice(idx, 1);
20+
21+
return visit.EXIT;
22+
}
23+
);
24+
25+
visit(
26+
tree,
27+
(node) => isIcon('quote-right', node),
28+
(_node, idx, parent) => {
29+
parent.children.splice(idx, 1);
30+
31+
return visit.EXIT;
32+
}
33+
);
34+
};
35+
36+
module.exports = browserLandingPageBlockquote;

codemods/buttons.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
const visit = require('unist-util-visit');
2+
const {
3+
removeAttribute,
4+
addAttribute,
5+
hasClassName,
6+
findAttribute,
7+
} = require('./utils/mdxast');
8+
9+
const VARIANT = /\bbtn-((?!lg)[a-z]+\b)/;
10+
const VARIANTS = { primary: 'primary', secondary: 'link' };
11+
12+
const buttons = () => (tree, file) => {
13+
visit(
14+
tree,
15+
(node) => {
16+
return hasClassName('btn', node);
17+
},
18+
(a) => {
19+
const className = findAttribute('className', a);
20+
const href = findAttribute('href', a);
21+
22+
const [, variant] = className.match(VARIANT) || [];
23+
const themeVariant = VARIANTS[variant];
24+
a.name = 'Button';
25+
26+
if (href) {
27+
a.name = 'ButtonLink';
28+
addAttribute('to', href, a);
29+
}
30+
31+
removeAttribute('className', a);
32+
removeAttribute('href', a);
33+
34+
if (themeVariant) {
35+
addAttribute('variant', themeVariant, a);
36+
} else {
37+
file.message(
38+
`Unknown variant '${variant}'`,
39+
a.position.start,
40+
'buttons'
41+
);
42+
}
43+
}
44+
);
45+
};
46+
47+
module.exports = buttons;

codemods/callouts.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
const visit = require('unist-util-visit');
2+
const {
3+
addAttribute,
4+
isMdxBlockElement,
5+
removeAttribute,
6+
} = require('./utils/mdxast');
7+
8+
const SPECIAL_VARIANTS = {
9+
permissions: 'tip',
10+
note: 'tip',
11+
pricing: 'tip',
12+
};
13+
14+
const callouts = () => (tree) => {
15+
visit(
16+
tree,
17+
(node) => {
18+
return (
19+
isMdxBlockElement('div', node) &&
20+
node.attributes.some(
21+
(attr) => attr.name === 'className' && attr.value.includes('callout-')
22+
)
23+
);
24+
},
25+
(div) => {
26+
const { value: className } = div.attributes.find(
27+
(attr) => attr.name === 'className'
28+
);
29+
const callout = className
30+
.split(/\s+/)
31+
.find((className) => className.startsWith('callout-'));
32+
33+
const variant = callout.replace('callout-', '');
34+
35+
div.name = 'Callout';
36+
37+
addAttribute('variant', SPECIAL_VARIANTS[variant] || variant, div);
38+
removeAttribute('className', div);
39+
}
40+
);
41+
};
42+
43+
module.exports = callouts;

codemods/clamshells.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
const visit = require('unist-util-visit');
2+
const toString = require('mdast-util-to-string');
3+
const {
4+
removeAttribute,
5+
isMdxBlockElement,
6+
isPlainText,
7+
hasClassName,
8+
removeChild,
9+
setAttribute,
10+
} = require('./utils/mdxast');
11+
const toJSXExpression = require('./utils/to-jsx-expression');
12+
13+
const clamshells = () => (tree, file) => {
14+
visit(
15+
tree,
16+
(node) =>
17+
isMdxBlockElement('dl', node) && hasClassName('clamshell-list', node),
18+
(dl) => {
19+
dl.name = 'CollapserGroup';
20+
removeAttribute('className', dl);
21+
22+
visit(
23+
dl,
24+
(node, _idx, parent) => isMdxBlockElement('dt', node) && parent === dl,
25+
(dt, idx) => {
26+
const dd = dl.children[idx + 1];
27+
28+
setAttribute(
29+
'title',
30+
isPlainText(dt) ? toString(dt) : toJSXExpression(dt, file),
31+
dt
32+
);
33+
34+
dt.name = 'Collapser';
35+
dt.children = dd.children;
36+
}
37+
);
38+
39+
visit(
40+
dl,
41+
(node, _idx, parent) => isMdxBlockElement('dd', node) && parent === dl,
42+
(dd) => {
43+
removeChild(dd, dl);
44+
}
45+
);
46+
}
47+
);
48+
};
49+
50+
module.exports = clamshells;

codemods/codeBlocks.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
const visit = require('unist-util-visit');
2+
const { isMdxElement, findAttribute } = require('./utils/mdxast');
3+
const toString = require('mdast-util-to-string');
4+
5+
const codeBlocks = () => (tree) => {
6+
visit(
7+
tree,
8+
(node) => isMdxElement('pre', node),
9+
(pre) => {
10+
const code = Buffer.from(toString(pre), 'base64').toString('utf-8');
11+
const language = findAttribute('language', pre);
12+
13+
pre.type = 'code';
14+
pre.lang = language;
15+
pre.value = code;
16+
delete pre.children;
17+
}
18+
);
19+
};
20+
21+
module.exports = codeBlocks;
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
const visit = require('unist-util-visit');
2+
const { isMdxBlockElement, removeChild } = require('./utils/mdxast');
3+
4+
const collapseLandingPageTileGrids = () => (tree, file) => {
5+
if (file.data.doc.type !== 'landing_page') {
6+
return;
7+
}
8+
9+
visit(
10+
tree,
11+
(_node, _idx, parent) => parent === tree,
12+
(node, idx, parent) => {
13+
const previous = idx && parent.children[idx - 1];
14+
15+
if (previous && isTileGrid(node) && isTileGrid(previous)) {
16+
previous.children = previous.children.concat(node.children);
17+
removeChild(node, parent);
18+
19+
return idx;
20+
}
21+
}
22+
);
23+
};
24+
25+
const isTileGrid = (node) => isMdxBlockElement('LandingPageTileGrid', node);
26+
27+
module.exports = collapseLandingPageTileGrids;

codemods/exampleBoxes.js

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
const visit = require('unist-util-visit');
2+
const { select } = require('unist-util-select');
3+
const {
4+
isMdxBlockElement,
5+
isPlainText,
6+
hasClassName,
7+
removeAttribute,
8+
removeChild,
9+
setAttribute,
10+
} = require('./utils/mdxast');
11+
const toString = require('mdast-util-to-string');
12+
const toJSXExpression = require('./utils/to-jsx-expression');
13+
14+
const isExampleBox = (node) =>
15+
isMdxBlockElement('dl', node) && hasClassName('example-box', node);
16+
17+
const exampleBoxes = () => (tree, file) => {
18+
visit(
19+
tree,
20+
(node) => isExampleBox(node) && node.children.length === 1,
21+
(dl) => {
22+
const child = dl.children[0];
23+
const [title, children] = child.children;
24+
25+
if (child.children.length > 2) {
26+
file.message(
27+
'Simple collapser example has more than 2 child nodes. Please revisit this implementation to handle the additional nodes',
28+
child.position.start,
29+
'example-boxes'
30+
);
31+
}
32+
33+
setAttribute(
34+
'title',
35+
isPlainText(title) ? toString(title) : toJSXExpression(title, file),
36+
child
37+
);
38+
39+
dl.name = 'CollapserGroup';
40+
child.name = 'Collapser';
41+
child.children = [children];
42+
removeAttribute('className', dl);
43+
}
44+
);
45+
46+
visit(tree, isExampleBox, (dl) => {
47+
dl.name = 'CollapserGroup';
48+
removeAttribute('className', dl);
49+
50+
visit(
51+
dl,
52+
(node, _idx, parent) => parent === dl && isMdxBlockElement('dt', node),
53+
(dt, idx) => {
54+
const dd = dl.children[idx + 1];
55+
56+
setAttribute(
57+
'title',
58+
isPlainText(dt) ? toString(dt) : toJSXExpression(dt, file),
59+
dt
60+
);
61+
62+
dt.name = 'Collapser';
63+
dt.children = dd.children;
64+
}
65+
);
66+
67+
visit(
68+
dl,
69+
(node, _idx, parent) => parent === dl && isMdxBlockElement('dd', node),
70+
(dd) => {
71+
removeChild(dd, dl);
72+
}
73+
);
74+
});
75+
};
76+
77+
module.exports = exampleBoxes;

0 commit comments

Comments
 (0)