initial commit
This commit is contained in:
		
						commit
						d2db386693
					
				
							
								
								
									
										23
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,23 @@
 | 
			
		||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
 | 
			
		||||
 | 
			
		||||
# dependencies
 | 
			
		||||
/node_modules
 | 
			
		||||
/.pnp
 | 
			
		||||
.pnp.js
 | 
			
		||||
 | 
			
		||||
# testing
 | 
			
		||||
/coverage
 | 
			
		||||
 | 
			
		||||
# production
 | 
			
		||||
/build
 | 
			
		||||
 | 
			
		||||
# misc
 | 
			
		||||
.DS_Store
 | 
			
		||||
.env.local
 | 
			
		||||
.env.development.local
 | 
			
		||||
.env.test.local
 | 
			
		||||
.env.production.local
 | 
			
		||||
 | 
			
		||||
npm-debug.log*
 | 
			
		||||
yarn-debug.log*
 | 
			
		||||
yarn-error.log*
 | 
			
		||||
							
								
								
									
										3
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
{
 | 
			
		||||
    "typescript.tsdk": "node_modules/typescript/lib"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										27
									
								
								Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								Dockerfile
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,27 @@
 | 
			
		||||
FROM node:15 as build
 | 
			
		||||
 | 
			
		||||
WORKDIR /build
 | 
			
		||||
 | 
			
		||||
COPY public ./public
 | 
			
		||||
COPY src ./src
 | 
			
		||||
COPY package.json .
 | 
			
		||||
COPY yarn.lock .
 | 
			
		||||
COPY tsconfig.json .
 | 
			
		||||
 | 
			
		||||
RUN yarn install 
 | 
			
		||||
RUN yarn build
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
FROM nginx
 | 
			
		||||
 | 
			
		||||
WORKDIR /app
 | 
			
		||||
 | 
			
		||||
COPY --from=build /build/build ./
 | 
			
		||||
 | 
			
		||||
COPY nginx.conf /etc/nginx/nginx.conf.template
 | 
			
		||||
 | 
			
		||||
COPY docker-entrypoint.sh /
 | 
			
		||||
 | 
			
		||||
EXPOSE 80
 | 
			
		||||
 | 
			
		||||
ENTRYPOINT /docker-entrypoint.sh
 | 
			
		||||
							
								
								
									
										3
									
								
								build-docker.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								build-docker.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
#!/usr/bin/env sh
 | 
			
		||||
 | 
			
		||||
sudo docker build -t docker.kapelle.org/ncpb .
 | 
			
		||||
							
								
								
									
										8
									
								
								docker-compose.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								docker-compose.yml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,8 @@
 | 
			
		||||
version: "3"
 | 
			
		||||
services:
 | 
			
		||||
  pb:
 | 
			
		||||
    build: .
 | 
			
		||||
    ports:
 | 
			
		||||
      - "8080:80"
 | 
			
		||||
    environment:
 | 
			
		||||
      - ENDPOINT=https://your.nextcloud.org/
 | 
			
		||||
							
								
								
									
										5
									
								
								docker-entrypoint.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								docker-entrypoint.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,5 @@
 | 
			
		||||
#!/usr/bin/env sh
 | 
			
		||||
set -e
 | 
			
		||||
export DOLLAR='$'
 | 
			
		||||
envsubst < /etc/nginx/nginx.conf.template > /etc/nginx/nginx.conf
 | 
			
		||||
nginx -g 'daemon off;'
 | 
			
		||||
							
								
								
									
										20
									
								
								nginx.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								nginx.conf
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,20 @@
 | 
			
		||||
events {}
 | 
			
		||||
 | 
			
		||||
http {
 | 
			
		||||
    include mime.types;
 | 
			
		||||
    server {
 | 
			
		||||
        root /app;
 | 
			
		||||
        listen 80;
 | 
			
		||||
        index index.html;
 | 
			
		||||
 | 
			
		||||
        location / {
 | 
			
		||||
            try_files ${DOLLAR}uri /index.html;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        location = /api/endpoint {
 | 
			
		||||
 | 
			
		||||
            return 200 '${ENDPOINT}';
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										42
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,42 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "ncpb",
 | 
			
		||||
  "version": "0.1.0",
 | 
			
		||||
  "private": true,
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@types/node": "^12.0.0",
 | 
			
		||||
    "@types/react": "^17.0.0",
 | 
			
		||||
    "@types/react-copy-to-clipboard": "^5.0.0",
 | 
			
		||||
    "@types/react-dom": "^17.0.0",
 | 
			
		||||
    "@types/react-syntax-highlighter": "^13.5.0",
 | 
			
		||||
    "react": "^17.0.1",
 | 
			
		||||
    "react-copy-to-clipboard": "^5.0.3",
 | 
			
		||||
    "react-dom": "^17.0.1",
 | 
			
		||||
    "react-scripts": "4.0.2",
 | 
			
		||||
    "react-syntax-highlighter": "^15.4.3",
 | 
			
		||||
    "typescript": "^4.1.2"
 | 
			
		||||
  },
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "start": "react-scripts start",
 | 
			
		||||
    "build": "react-scripts build",
 | 
			
		||||
    "test": "react-scripts test",
 | 
			
		||||
    "eject": "react-scripts eject"
 | 
			
		||||
  },
 | 
			
		||||
  "eslintConfig": {
 | 
			
		||||
    "extends": [
 | 
			
		||||
      "react-app",
 | 
			
		||||
      "react-app/jest"
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "browserslist": {
 | 
			
		||||
    "production": [
 | 
			
		||||
      ">0.2%",
 | 
			
		||||
      "not dead",
 | 
			
		||||
      "not op_mini all"
 | 
			
		||||
    ],
 | 
			
		||||
    "development": [
 | 
			
		||||
      "last 1 chrome version",
 | 
			
		||||
      "last 1 firefox version",
 | 
			
		||||
      "last 1 safari version"
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										12
									
								
								public/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								public/index.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
  <head>
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1" />
 | 
			
		||||
    <title>Pastebin</title>
 | 
			
		||||
  </head>
 | 
			
		||||
  <body>
 | 
			
		||||
    <noscript>You need to enable JavaScript to run this app.</noscript>
 | 
			
		||||
    <div id="root"></div>
 | 
			
		||||
  </body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										101
									
								
								src/App.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								src/App.tsx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,101 @@
 | 
			
		||||
import React, { useEffect, useState } from "react";
 | 
			
		||||
import CopyToClipboard from "react-copy-to-clipboard";
 | 
			
		||||
import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';
 | 
			
		||||
import style from "react-syntax-highlighter/dist/cjs/styles/prism/vsc-dark-plus"
 | 
			
		||||
import cutomStyle from "./customStyle";
 | 
			
		||||
import getLangFromFilename from "./getLangFromFilename";
 | 
			
		||||
 | 
			
		||||
interface Props {
 | 
			
		||||
  shareID: string;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const filenameRegex = /filename\*?=['"]?(?:UTF-\d['"]*)?([^;\r\n"']*)['"]?;?/gi;
 | 
			
		||||
 | 
			
		||||
function parseFilename(headers: Headers): string{
 | 
			
		||||
  const raw = headers.get("content-disposition");
 | 
			
		||||
  if (raw == null) {
 | 
			
		||||
    return ""
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  let m;
 | 
			
		||||
  while ((m = filenameRegex.exec(raw)) !== null) {
 | 
			
		||||
    // Return the first match that we got
 | 
			
		||||
    return m[1];
 | 
			
		||||
  }
 | 
			
		||||
  return "";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function App(props: Props) {
 | 
			
		||||
  const [content,setContent] = useState<string>("");
 | 
			
		||||
  const [title,setTitle] = useState<string>("");
 | 
			
		||||
  const [lang,setLang] = useState<string>("text");
 | 
			
		||||
  const [endpoint,setEndpoint] = useState<string>("");
 | 
			
		||||
 | 
			
		||||
  useEffect(()=>{
 | 
			
		||||
    (async () =>{
 | 
			
		||||
      setEndpoint(await (await fetch("/api/endpoint")).text());
 | 
			
		||||
    })()
 | 
			
		||||
  },[])
 | 
			
		||||
 | 
			
		||||
  useEffect(()=>{
 | 
			
		||||
    (async ()=>{
 | 
			
		||||
      if (!endpoint){
 | 
			
		||||
        // Still loading endpoint
 | 
			
		||||
        return
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      const response = await fetch(`${endpoint}/index.php/s/${props.shareID}/download`);
 | 
			
		||||
 | 
			
		||||
      if (response.status === 404){
 | 
			
		||||
        // File not found
 | 
			
		||||
        // TODO display error
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      const contentLength = parseInt(response.headers.get("content-length")!,10);
 | 
			
		||||
      const filename = parseFilename(response.headers);
 | 
			
		||||
      setTitle(filename);
 | 
			
		||||
      document.title = filename;
 | 
			
		||||
 | 
			
		||||
      setLang(getLangFromFilename(filename) || "text")
 | 
			
		||||
 | 
			
		||||
      if (contentLength <= 20000) {
 | 
			
		||||
        const text = await response.text()
 | 
			
		||||
        setContent(text);
 | 
			
		||||
 | 
			
		||||
      }else{
 | 
			
		||||
        // TODO display error
 | 
			
		||||
      }
 | 
			
		||||
    })()
 | 
			
		||||
  },[props.shareID,endpoint])
 | 
			
		||||
 | 
			
		||||
  function downloadClick() {
 | 
			
		||||
    window.open(`${endpoint}/index.php/s/${props.shareID}/download`, "_self");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
      <div className="fileContainer">
 | 
			
		||||
        <div className="headerContainer">
 | 
			
		||||
          <span className="fileTitle">{title}</span>
 | 
			
		||||
          <div className="buttonContainer">
 | 
			
		||||
            <CopyToClipboard text={content}>
 | 
			
		||||
              <button className="titleButton">Copy</button>
 | 
			
		||||
            </CopyToClipboard>
 | 
			
		||||
            <button className="titleButton" onClick={downloadClick}>Download</button>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        
 | 
			
		||||
        <SyntaxHighlighter
 | 
			
		||||
          customStyle={cutomStyle} 
 | 
			
		||||
          showLineNumbers={true}
 | 
			
		||||
          style={style}
 | 
			
		||||
          wrapLongLines={true}
 | 
			
		||||
          language={lang}
 | 
			
		||||
        >
 | 
			
		||||
          {content}
 | 
			
		||||
      </SyntaxHighlighter>
 | 
			
		||||
      </div>
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default App;
 | 
			
		||||
							
								
								
									
										5
									
								
								src/customStyle.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								src/customStyle.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,5 @@
 | 
			
		||||
const cutomStyle = {
 | 
			
		||||
  "backgroundColor": "#0d1117"  
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default cutomStyle;
 | 
			
		||||
							
								
								
									
										486
									
								
								src/getLangFromFilename.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										486
									
								
								src/getLangFromFilename.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,486 @@
 | 
			
		||||
export default function getLangFromFilename(filename: string): string {
 | 
			
		||||
    let extension: string;
 | 
			
		||||
    try {
 | 
			
		||||
        const filenameParts = filename.split(".");
 | 
			
		||||
        extension = filenameParts[filenameParts.length - 1].toLocaleLowerCase();
 | 
			
		||||
    } catch (err) {
 | 
			
		||||
        return "text";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // bases on https://github.com/react-syntax-highlighter/react-syntax-highlighter/blob/master/AVAILABLE_LANGUAGES_PRISM.MD
 | 
			
		||||
    switch (extension) {
 | 
			
		||||
        case "abap":
 | 
			
		||||
            return "abap";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "abnf";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "actionscript";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "ada";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "agda";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "al";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "antlr4";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "apacheconf";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "apl";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "applescript";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "aql";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "arduino";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "arff";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "asciidoc";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "asm6502";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "aspnet";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "autohotkey";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "autoit";
 | 
			
		||||
        case "sh":
 | 
			
		||||
            return "bash";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "basic";
 | 
			
		||||
        case "bat":
 | 
			
		||||
            return "batch";
 | 
			
		||||
        case "":
 | 
			
		||||
            return "bbcode";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "birb";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "bison";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "bnf";
 | 
			
		||||
        case "bf":
 | 
			
		||||
            return "brainfuck";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "brightscript";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "bro";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "bsl";
 | 
			
		||||
        case "c":
 | 
			
		||||
            return "c";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "cil";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "clike";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "clojure";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "cmake";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "coffeescript";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "concurnas";
 | 
			
		||||
        case "cpp":
 | 
			
		||||
            return "cpp";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "crystal";
 | 
			
		||||
        case "cs":
 | 
			
		||||
            return "csharp";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "csp";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "cssExtras (css-extras)";
 | 
			
		||||
        case "css":
 | 
			
		||||
            return "css";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "cypher";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "d";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "dart";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "dax";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "dhall";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "diff";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "django";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "dnsZoneFile (dns-zone-file)";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "docker";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "ebnf";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "editorconfig";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "eiffel";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "ejs";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "elixir";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "elm";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "erb";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "erlang";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "etlua";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "excelFormula (excel-formula)";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "factor";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "firestoreSecurityRules (firestore-security-rules)";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "flow";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "fortran";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "fsharp";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "ftl";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "gcode";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "gdscript";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "gedcom";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "gherkin";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "git";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "glsl";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "gml";
 | 
			
		||||
        case "go":
 | 
			
		||||
            return "go";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "graphql";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "groovy";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "haml";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "handlebars";
 | 
			
		||||
        case "hs":
 | 
			
		||||
            return "haskell";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "haxe";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "hcl";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "hlsl";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "hpkp";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "hsts";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "http";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "ichigojam";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "icon";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "iecst";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "ignore";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "inform7";
 | 
			
		||||
        case "ini":
 | 
			
		||||
            return "ini";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "io";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "j";
 | 
			
		||||
        case "java":
 | 
			
		||||
            return "java";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "javadoc";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "javadoclike";
 | 
			
		||||
        case "js":
 | 
			
		||||
            return "javascript";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "javastacktrace";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "jolie";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "jq";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "jsExtras (js-extras)";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "jsTemplates (js-templates)";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "jsdoc";
 | 
			
		||||
        case "json":
 | 
			
		||||
            return "json";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "json5";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "jsonp";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "jsstacktrace";
 | 
			
		||||
        case "jsx":
 | 
			
		||||
            return "jsx";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "julia";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "keyman";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "kotlin";
 | 
			
		||||
        case "tex":
 | 
			
		||||
            return "latex";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "latte";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "less";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "lilypond";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "liquid";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "lisp";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "livescript";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "llvm";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "lolcode";
 | 
			
		||||
        case "lua":
 | 
			
		||||
            return "lua";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "makefile";
 | 
			
		||||
        case "md":
 | 
			
		||||
            return "markdown";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "markupTemplating (markup-templating)";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "markup";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "matlab";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "mel";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "mizar";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "mongodb";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "monkey";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "moonscript";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "n1ql";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "n4js";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "nand2tetrisHdl (nand2tetris-hdl)";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "naniscript";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "nasm";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "neon";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "nginx";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "nim";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "nix";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "nsis";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "objectivec";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "ocaml";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "opencl";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "oz";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "parigp";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "parser";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "pascal";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "pascaligo";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "pcaxis";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "peoplecode";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "perl";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "phpExtras (php-extras)";
 | 
			
		||||
        case "php":
 | 
			
		||||
            return "php";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "phpdoc";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "plsql";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "powerquery";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "powershell";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "processing";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "prolog";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "properties";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "protobuf";
 | 
			
		||||
        case "pug":
 | 
			
		||||
            return "pug";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "puppet";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "pure";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "purebasic";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "purescript";
 | 
			
		||||
        case "py":
 | 
			
		||||
            return "python";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "q";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "qml";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "qore";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "r";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "racket";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "reason";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "regex";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "renpy";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "rest";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "rip";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "roboconf";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "robotframework";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "ruby";
 | 
			
		||||
        case "rs":
 | 
			
		||||
            return "rust";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "sas";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "sass";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "scala";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "scheme";
 | 
			
		||||
        case "scss":
 | 
			
		||||
            return "scss";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "shellSession (shell-session)";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "smali";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "smalltalk";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "smarty";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "sml";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "solidity";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "solutionFile (solution-file)";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "soy";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "sparql";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "splunkSpl (splunk-spl)";
 | 
			
		||||
        case "sqf":
 | 
			
		||||
            return "sqf";
 | 
			
		||||
        case "sql":
 | 
			
		||||
            return "sql";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "stan";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "stylus";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "swift";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "t4Cs (t4-cs)";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "t4Templating (t4-templating)";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "t4Vb (t4-vb)";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "tap";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "tcl";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "textile";
 | 
			
		||||
        case "toml":
 | 
			
		||||
            return "toml";
 | 
			
		||||
        case "tsx":
 | 
			
		||||
            return "tsx";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "tt2";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "turtle";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "twig";
 | 
			
		||||
        case "ts":
 | 
			
		||||
            return "typescript";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "typoscript";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "unrealscript";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "vala";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "vbnet";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "velocity";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "verilog";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "vhdl";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "vim";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "visualBasic (visual-basic)";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "warpscript";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "wasm";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "wiki";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "xeora";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "xmlDoc (xml-doc)";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "xojo";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "xquery";
 | 
			
		||||
        case "yaml":
 | 
			
		||||
        case "yml":
 | 
			
		||||
            return "yaml";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "yang";
 | 
			
		||||
        // case "":
 | 
			
		||||
        //     return "zig";
 | 
			
		||||
        default:
 | 
			
		||||
            return "text"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										15
									
								
								src/index.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/index.tsx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
			
		||||
import React from 'react';
 | 
			
		||||
import ReactDOM from 'react-dom';
 | 
			
		||||
import App from './App';
 | 
			
		||||
import "./style.css"
 | 
			
		||||
 | 
			
		||||
const shareID = new URL(window.location.href).pathname.substr(1);
 | 
			
		||||
 | 
			
		||||
ReactDOM.render(
 | 
			
		||||
  <React.StrictMode>
 | 
			
		||||
    <App 
 | 
			
		||||
      shareID={shareID}
 | 
			
		||||
    />
 | 
			
		||||
  </React.StrictMode>,
 | 
			
		||||
  document.getElementById('root')
 | 
			
		||||
);
 | 
			
		||||
							
								
								
									
										1
									
								
								src/react-app-env.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								src/react-app-env.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
/// <reference types="react-scripts" />
 | 
			
		||||
							
								
								
									
										57
									
								
								src/style.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								src/style.css
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,57 @@
 | 
			
		||||
.fileContainer{
 | 
			
		||||
    margin-top: 4rem;
 | 
			
		||||
    margin-right: auto;
 | 
			
		||||
    margin-left: auto;
 | 
			
		||||
 | 
			
		||||
    border-width: 2px;
 | 
			
		||||
    border-color: #1f6feb;
 | 
			
		||||
    border-style: solid;
 | 
			
		||||
    border-radius: 5px;
 | 
			
		||||
 | 
			
		||||
    max-width: 60rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.headerContainer{
 | 
			
		||||
    font-size: larger;
 | 
			
		||||
    font-family: sans-serif;
 | 
			
		||||
    color: #58a6ff;
 | 
			
		||||
 | 
			
		||||
    padding-left: 2rem;
 | 
			
		||||
    padding-right: 2rem;
 | 
			
		||||
    padding-bottom: 2rem;
 | 
			
		||||
    padding-top: 1rem;
 | 
			
		||||
 | 
			
		||||
    border-bottom: solid 1px #1f6feb;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.fileTitle{
 | 
			
		||||
    float: left;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.buttonContainer{
 | 
			
		||||
    float: right;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.titleButton{
 | 
			
		||||
    border: none;
 | 
			
		||||
    border-radius: 2px;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    text-decoration: none;
 | 
			
		||||
    display: inline-block;
 | 
			
		||||
    font-size: small;
 | 
			
		||||
    margin-left: 1em;
 | 
			
		||||
    background-color: #1f6feb;
 | 
			
		||||
    color: white;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Not the best soution but it works */
 | 
			
		||||
/* https://github.com/react-syntax-highlighter/react-syntax-highlighter/issues/347 */
 | 
			
		||||
.linenumber {
 | 
			
		||||
    color: #50545b !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
body {
 | 
			
		||||
    background-color: #0d1117;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										26
									
								
								tsconfig.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								tsconfig.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,26 @@
 | 
			
		||||
{
 | 
			
		||||
  "compilerOptions": {
 | 
			
		||||
    "target": "es5",
 | 
			
		||||
    "lib": [
 | 
			
		||||
      "dom",
 | 
			
		||||
      "dom.iterable",
 | 
			
		||||
      "esnext"
 | 
			
		||||
    ],
 | 
			
		||||
    "allowJs": true,
 | 
			
		||||
    "skipLibCheck": true,
 | 
			
		||||
    "esModuleInterop": true,
 | 
			
		||||
    "allowSyntheticDefaultImports": true,
 | 
			
		||||
    "strict": true,
 | 
			
		||||
    "forceConsistentCasingInFileNames": true,
 | 
			
		||||
    "noFallthroughCasesInSwitch": true,
 | 
			
		||||
    "module": "esnext",
 | 
			
		||||
    "moduleResolution": "node",
 | 
			
		||||
    "resolveJsonModule": true,
 | 
			
		||||
    "isolatedModules": true,
 | 
			
		||||
    "noEmit": true,
 | 
			
		||||
    "jsx": "react-jsx"
 | 
			
		||||
  },
 | 
			
		||||
  "include": [
 | 
			
		||||
    "src"
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user