Skip to content

Commit 0f9e593

Browse files
committed
chore: 代码预览支持跳转codepen
1 parent eed629b commit 0f9e593

File tree

1 file changed

+98
-0
lines changed

1 file changed

+98
-0
lines changed

patches/vitepress+1.6.4.patch

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,104 @@ index 6746cc1..26954c0 100644
241241
}
242242
export function resolveHeaders(headers, range) {
243243
if (range === false) {
244+
diff --git a/node_modules/vitepress/dist/client/theme-default/styles/components/vp-doc.css b/node_modules/vitepress/dist/client/theme-default/styles/components/vp-doc.css
245+
index 8999118..893b9c0 100644
246+
--- a/node_modules/vitepress/dist/client/theme-default/styles/components/vp-doc.css
247+
+++ b/node_modules/vitepress/dist/client/theme-default/styles/components/vp-doc.css
248+
@@ -462,7 +462,31 @@
249+
opacity 0.25s;
250+
}
251+
252+
+.vp-doc [class*='language-'] > form.code-box-codepen {
253+
+ position: absolute;
254+
+ top: 12px;
255+
+ right: 64px;
256+
+ z-index: 3;
257+
+
258+
+ display: flex;
259+
+ align-items: center;
260+
+ justify-content: center;
261+
+
262+
+ width: 40px;
263+
+ height: 40px;
264+
+ border: 1px solid var(--vp-code-copy-code-border-color);
265+
+
266+
+ opacity: 0;
267+
+ border-radius: 4px;
268+
+ background-color: var(--vp-code-copy-code-bg);
269+
+
270+
+ cursor: pointer;
271+
+
272+
+ transition: all 0.24s;
273+
+}
274+
+
275+
.vp-doc [class*='language-']:hover > button.copy,
276+
+.vp-doc [class*='language-']:hover > form.code-box-codepen,
277+
.vp-doc [class*='language-'] > button.copy:focus {
278+
opacity: 1;
279+
}
280+
diff --git a/node_modules/vitepress/dist/node/chunk-D3CUZ4fa.js b/node_modules/vitepress/dist/node/chunk-D3CUZ4fa.js
281+
index fcc35e8..a196fde 100644
282+
--- a/node_modules/vitepress/dist/node/chunk-D3CUZ4fa.js
283+
+++ b/node_modules/vitepress/dist/node/chunk-D3CUZ4fa.js
284+
@@ -35089,6 +35089,48 @@ function nanoid$1(size = 21) {
285+
}
286+
287+
function preWrapperPlugin(md, options) {
288+
+ // FIXME: 部分内联执行脚本打开无法带出
289+
+ const codepen = (code, lang) => {
290+
+ const isHTML = lang === 'html'
291+
+ const isCSS = ['css', 'scss', 'less'].includes(lang)
292+
+ const isJS = ['js', 'ts', 'javascript', 'typescript'].includes(lang)
293+
+ let value = JSON.stringify({
294+
+ 'title': 'muzhidong blog demo',
295+
+ 'editors': `${+(isHTML)}${+(isCSS)}${+(isJS)}`,
296+
+ 'html': isHTML ? code : '',
297+
+ 'css': isCSS ? code : '',
298+
+ 'css_pre_processor': ['scss', 'less'].includes(lang) ? lang : '',
299+
+ 'js': isJS ? code : '',
300+
+ 'js_pre_processor': ['ts', 'typescript'].includes(lang) ? 'typescript' : '',
301+
+ 'js_external': '',
302+
+ })
303+
+ // value = value.replaceAll(/\/\*\*.*(?=\*\/)/g, '').replaceAll(/\*\//g, '')
304+
+ // .replaceAll(/\/\/.*(?=\n)/g, '')
305+
+ // .replaceAll('"', '"').replaceAll("'", '"')
306+
+ // .replaceAll('<', '&lt;').replaceAll('>', '&gt;')
307+
+ // .replaceAll(/(\/|`)/g, '\\$1')
308+
+ value = value.replaceAll('"', '&quot;').replaceAll("'", '&quot;').replaceAll('<', '&lt;')
309+
+ return `<form class="code-box-codepen"
310+
+ action="https://codepen.io/pen/define"
311+
+ method="POST"
312+
+ target="_blank"
313+
+ rel="noreferrer">
314+
+ <input type="hidden"
315+
+ name="data"
316+
+ value="${value}">
317+
+ <button type="submit">
318+
+ <svg viewBox="0 0 15 15"
319+
+ width="16"
320+
+ height="16"
321+
+ fill="currentColor">
322+
+ <title>codepen icon</title>
323+
+ <path
324+
+ d="M14.777304,4.75062256 L7.77734505,0.0839936563 C7.60939924,-0.0279665065 7.39060662,-0.0279665065 7.22266081,0.0839936563 L0.222701813,4.75062256 C0.0836082937,4.84334851 5.66973453e-05,4.99945222 4.6875e-05,5.16662013 L4.6875e-05,9.83324903 C4.6875e-05,10.0004355 0.0836088906,10.1565596 0.222701812,10.2492466 L7.22266081,14.9158755 C7.30662908,14.9718752 7.403316,14.999875 7.50000292,14.999875 C7.59668984,14.999875 7.69337678,14.9718752 7.77734505,14.9158755 L14.777304,10.2492466 C14.9163976,10.1565206 14.9999492,10.0004169 14.999959,9.83324903 L14.999959,5.16662013 C14.9999492,4.99945222 14.9163976,4.84334851 14.777304,4.75062256 Z M7.50000292,9.23237755 L4.90139316,7.4999502 L7.50000292,5.76755409 L10.0986127,7.4999502 L7.50000292,9.23237755 Z M8,4.89905919 L8,1.43423573 L13.598561,5.16665138 L10.9999824,6.89904747 L8,4.89905919 Z M7.00000586,4.89905919 L4.00002344,6.89904747 L1.40141366,5.16665138 L7.00000586,1.43423573 L7.00000586,4.89905919 Z M3.09865372,7.4999502 L1.00004102,8.89903575 L1.00004102,6.10089589 L3.09865372,7.4999502 Z M4.00002344,8.10085292 L7.00000586,10.1008412 L7.00000586,13.5656334 L1.40141366,9.83328028 L4.00002344,8.10085292 Z M8,10.1008412 L10.9999824,8.10085292 L13.5985922,9.83328028 L8,13.5656647 L8,10.1008412 L8,10.1008412 Z M11.9013521,7.4999502 L13.9999648,6.10089589 L13.9999648,8.899067 L11.9013521,7.4999502 Z">
325+
+ </path>
326+
+ </svg>
327+
+ </button>
328+
+ </form>`
329+
+ }
330+
const fence = md.renderer.rules.fence;
331+
md.renderer.rules.fence = (...args) => {
332+
const [tokens, idx] = args;
333+
@@ -35097,7 +35139,7 @@ function preWrapperPlugin(md, options) {
334+
const active = / active( |$)/.test(token.info) ? " active" : "";
335+
token.info = token.info.replace(/ active$/, "").replace(/ active /, " ");
336+
const lang = extractLang(token.info);
337+
- return `<div class="language-${lang}${getAdaptiveThemeMarker(options)}${active}"><button title="${options.codeCopyButtonTitle}" class="copy"></button><span class="lang">${lang}</span>` + fence(...args) + "</div>";
338+
+ return `<div class="language-${lang}${getAdaptiveThemeMarker(options)}${active}">${codepen(token.content, lang.toLowerCase())}<button title="${options.codeCopyButtonTitle}" class="copy"></button><span class="lang">${lang}</span>` + fence(...args) + "</div>";
339+
};
340+
}
341+
function getAdaptiveThemeMarker(options) {
244342
diff --git a/node_modules/vitepress/types/default-theme.d.ts b/node_modules/vitepress/types/default-theme.d.ts
245343
index 10681a8..4c82c76 100644
246344
--- a/node_modules/vitepress/types/default-theme.d.ts

0 commit comments

Comments
 (0)