这是提交给Pineata挑战的作品
我建的东西我开发了一个名为SnipShot的网络应用,让开发人员可以轻松创建、格式化并分享代码片段的精美图片。该应用程序使用React作为前端,并使用Material-UI来提供一个简洁明了的用户界面。核心功能使用Pinata的IPFS服务来存储原始代码片段,并生成美化后的格式化代码图片。
主要特点包括:
试试这个实时应用并免费生成酷炫的图像:https://snipshot-eta.vercel.app/
展示App功能的截图:
着陆:
代码片段上传与图片生成界面:
生成的图像:
我的程序该项目托管在GitHub上:https://github.com/mitchiemt11/codesnap
这里有一个项目的关键组件,SnippetRenderer
:
import React, { forwardRef } from 'react'; import { Box } from '@mui/material'; import hljs from 'highlight.js'; import 'highlight.js/styles/vs2015.css'; import { Language } from '../types'; interface SnippetRendererProps { codeContent: string; language: Language; spacesPerIndent?: number; } const formatCode = (代码内容: string, 每行缩进空格数: number): string => { // ... [格式化代码函数实现] }; export const SnippetRenderer = forwardRef<HTMLDivElement, SnippetRendererProps>( ({ codeContent, language, spacesPerIndent = 2 }, ref) => { const formattedCode = formatCode(codeContent, spacesPerIndent); return ( <Box ref={ref} sx={{ p: 3, backgroundColor: "#1e1e1e", color: "#dcdcdc", borderRadius: 2, display: "none", fontFamily: "monospace", }} > <pre> <code dangerouslySetInnerHTML={{ __html: hljs.highlight(formattedCode, { language }).value, }} /> </pre> </Box> ); } ); SnippetRenderer.displayName = '代码片段渲染器';
进入全屏模式,退出全屏
此组件负责显示格式化并语法高亮的代码片段,并将其转换为图像。
更多细节
Pinata服务在SnipShot中起着至关重要的作用。以下是我在项目中是如何使用Pinata的。
“const blob = new Blob([codeContent], { type: 'text/plain' }); const file = new File([blob], `snippet.${language}`, { type: 'text/plain' }); const upload = await pinata.upload.file(file);”
点击此处进入全屏模式(F) 点击此处退出全屏模式(Esc)
// 等待pinata网关创建签名URL await pinata.gateways.createSignedURL({ cid: upload.cid, expires: 30, });
全屏 退出全屏
使用Pinata,SnipShot确保代码片段不仅美观,而且还存储安全、易于获取。这种美观与安全存储的结合使SnipShot成为希望更吸引人地分享代码的开发者的强大工具。