mirror of
https://github.com/schollz/cowyo.git
synced 2023-08-10 21:13:00 +03:00
Updated
Former-commit-id: 504830f9db1605a93cad7309304af3e467306bf5 [formerly 455741a49bbb6f4381a5b44362ffdb69bf099e7b] [formerly 6f31782d403e8b4f7f99fca3e57e7ae900a0d9fb [formerly 29bc3f6350
]]
Former-commit-id: d3d0ea3363382a637ffbcf48f7798869e8c2a2b6 [formerly 80a5987fef9cb6169325fc9e412d1d2dfdd061b7]
Former-commit-id: 157ff3585d230384e1e5654a0ff7b4e61fd98826
This commit is contained in:
parent
affe633053
commit
70a8c21821
6
main.go
6
main.go
@ -3,6 +3,7 @@ package main
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"html/template"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
@ -150,7 +151,10 @@ func main() {
|
|||||||
|
|
||||||
unsafe := blackfriday.MarkdownCommon([]byte(p.Text))
|
unsafe := blackfriday.MarkdownCommon([]byte(p.Text))
|
||||||
html := bluemonday.UGCPolicy().SanitizeBytes(unsafe)
|
html := bluemonday.UGCPolicy().SanitizeBytes(unsafe)
|
||||||
c.Data(200, "text/html", html)
|
c.HTML(http.StatusOK, "view.tmpl", gin.H{
|
||||||
|
"Title": title,
|
||||||
|
"Body": template.HTML(html),
|
||||||
|
})
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
c.Redirect(302, "/"+title)
|
c.Redirect(302, "/"+title)
|
||||||
|
346
templates/view.tmpl
Executable file
346
templates/view.tmpl
Executable file
@ -0,0 +1,346 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>{{ .Title }}</title>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
|
||||||
|
<link rel="apple-touch-icon" sizes="57x57" href=/static/img/favicon/apple-icon-57x57.png>
|
||||||
|
<link rel="apple-touch-icon" sizes="60x60" href=/static/img/favicon/img/favicon/apple-icon-60x60.png>
|
||||||
|
<link rel="apple-touch-icon" sizes="72x72" href=/static/img/favicon/apple-icon-72x72.png>
|
||||||
|
<link rel="apple-touch-icon" sizes="76x76" href=/static/img/favicon/apple-icon-76x76.png>
|
||||||
|
<link rel="apple-touch-icon" sizes="114x114" href=/static/img/favicon/apple-icon-114x114.png>
|
||||||
|
<link rel="apple-touch-icon" sizes="120x120" href=/static/img/favicon/apple-icon-120x120.png>
|
||||||
|
<link rel="apple-touch-icon" sizes="144x144" href=/static/img/favicon/apple-icon-144x144.png>
|
||||||
|
<link rel="apple-touch-icon" sizes="152x152" href=/static/img/favicon/apple-icon-152x152.png>
|
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href=/static/img/favicon/apple-icon-180x180.png>
|
||||||
|
<link rel="icon" type="image/png" sizes="192x192" href=/static/img/favicon/android-icon-192x192.png>
|
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href=/static/img/favicon/favicon-32x32.png>
|
||||||
|
<link rel="icon" type="image/png" sizes="96x96" href=/static/img/favicon/favicon-96x96.png>
|
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href=/static/img/favicon/favicon-16x16.png>
|
||||||
|
<link rel="manifest" href=/static/img/favicon/manifest.json>
|
||||||
|
<meta name="msapplication-TileColor" content="#ffffff">
|
||||||
|
<meta name="msapplication-TileImage" content="/ms-icon-144x144.png">
|
||||||
|
<meta name="theme-color" content="#ffffff">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
/**
|
||||||
|
* yue.css
|
||||||
|
*
|
||||||
|
* yue.css is designed for readable content.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2013 - 2014 by Hsiaoming Yang.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.yue {
|
||||||
|
font: 400 18px/1.62 "Georgia", "Xin Gothic", "Hiragino Sans GB", "Droid Sans Fallback", "Microsoft YaHei", sans-serif;
|
||||||
|
color: #444443;
|
||||||
|
}
|
||||||
|
|
||||||
|
.windows .yue {
|
||||||
|
font-size: 16px;
|
||||||
|
font-family: "Georgia", "SimSun", sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue ::-moz-selection {
|
||||||
|
background-color: rgba(0,0,0,0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue ::selection {
|
||||||
|
background-color: rgba(0,0,0,0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue h1,
|
||||||
|
.yue h2,
|
||||||
|
.yue h3,
|
||||||
|
.yue h4,
|
||||||
|
.yue h5,
|
||||||
|
.yue h6 {
|
||||||
|
font-family: "Georgia", "Xin Gothic", "Hiragino Sans GB", "Droid Sans Fallback", "Microsoft YaHei", "SimSun", sans-serif;
|
||||||
|
color: #222223;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue h1 {
|
||||||
|
font-size: 1.8em;
|
||||||
|
margin: 0.67em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue > h1 {
|
||||||
|
margin-top: 0;
|
||||||
|
font-size: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue h2 {
|
||||||
|
font-size: 1.5em;
|
||||||
|
margin: 0.83em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue h3 {
|
||||||
|
font-size: 1.17em;
|
||||||
|
margin: 1em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue h4,
|
||||||
|
.yue h5,
|
||||||
|
.yue h6 {
|
||||||
|
font-size: 1em;
|
||||||
|
margin: 1.6em 0 1em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue h6 {
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue p {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 1.46em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue a {
|
||||||
|
color: #111;
|
||||||
|
word-wrap: break-word;
|
||||||
|
-moz-text-decoration-color: rgba(0, 0, 0, 0.4);
|
||||||
|
text-decoration-color: rgba(0, 0, 0, 0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue a:hover {
|
||||||
|
color: #555;
|
||||||
|
-moz-text-decoration-color: rgba(0, 0, 0, 0.6);
|
||||||
|
text-decoration-color: rgba(0, 0, 0, 0.6);
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue h1 a,
|
||||||
|
.yue h2 a,
|
||||||
|
.yue h3 a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue strong,
|
||||||
|
.yue b {
|
||||||
|
font-weight: 700;
|
||||||
|
color: #222223;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue em,
|
||||||
|
.yue i {
|
||||||
|
font-style: italic;
|
||||||
|
color: #222223;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue img {
|
||||||
|
max-width: 100%;
|
||||||
|
height: auto;
|
||||||
|
margin: 0.2em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue a img {
|
||||||
|
/* Remove border on IE */
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue figure {
|
||||||
|
position: relative;
|
||||||
|
clear: both;
|
||||||
|
outline: 0;
|
||||||
|
margin: 10px 0 30px;
|
||||||
|
padding: 0;
|
||||||
|
min-height: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue figure img {
|
||||||
|
display: block;
|
||||||
|
max-width: 100%;
|
||||||
|
margin: auto auto 4px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue figure figcaption {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
left: 0;
|
||||||
|
margin-top: 10px;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #666665;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue figure figcaption a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #666665;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue hr {
|
||||||
|
display: block;
|
||||||
|
width: 14%;
|
||||||
|
margin: 40px auto 34px;
|
||||||
|
border: 0 none;
|
||||||
|
border-top: 3px solid #dededc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue blockquote {
|
||||||
|
margin: 0 0 1.64em 0;
|
||||||
|
border-left: 3px solid #dadada;
|
||||||
|
padding-left: 12px;
|
||||||
|
color: #666664;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue blockquote a {
|
||||||
|
color: #666664;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue ul,
|
||||||
|
.yue ol {
|
||||||
|
margin: 0 0 24px 6px;
|
||||||
|
padding-left: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue ul {
|
||||||
|
list-style-type: square;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue ol {
|
||||||
|
list-style-type: decimal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue li {
|
||||||
|
margin-bottom: 0.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue li ul,
|
||||||
|
.yue li ol {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
margin-left: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue li ul {
|
||||||
|
list-style-type: disc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue li ul ul {
|
||||||
|
list-style-type: circle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue li p {
|
||||||
|
margin: 0.4em 0 0.6em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue .unstyled {
|
||||||
|
list-style-type: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue code,
|
||||||
|
.yue tt {
|
||||||
|
color: #808080;
|
||||||
|
font-size: 0.96em;
|
||||||
|
background-color: #f9f9f7;
|
||||||
|
padding: 1px 2px;
|
||||||
|
border: 1px solid #dadada;
|
||||||
|
border-radius: 3px;
|
||||||
|
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
|
||||||
|
word-wrap: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue pre {
|
||||||
|
margin: 1.64em 0;
|
||||||
|
padding: 7px;
|
||||||
|
border: none;
|
||||||
|
border-left: 3px solid #dadada;
|
||||||
|
padding-left: 10px;
|
||||||
|
overflow: auto;
|
||||||
|
line-height: 1.5;
|
||||||
|
font-size: 0.96em;
|
||||||
|
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
|
||||||
|
color: #4c4c4c;
|
||||||
|
background-color: #f9f9f7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue pre code,
|
||||||
|
.yue pre tt {
|
||||||
|
color: #4c4c4c;
|
||||||
|
border: none;
|
||||||
|
background: none;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue table {
|
||||||
|
width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
border-spacing: 0;
|
||||||
|
margin-bottom: 1.5em;
|
||||||
|
font-size: 0.96em;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue th,
|
||||||
|
.yue td {
|
||||||
|
text-align: left;
|
||||||
|
padding: 4px 8px 4px 10px;
|
||||||
|
border: 1px solid #dadada;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue td {
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue tr:nth-child(even) {
|
||||||
|
background-color: #efefee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue iframe {
|
||||||
|
display: block;
|
||||||
|
max-width: 100%;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue figure iframe {
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue table pre {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
border: none;
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 1100px) {
|
||||||
|
.yue blockquote {
|
||||||
|
margin-left: -24px;
|
||||||
|
padding-left: 20px;
|
||||||
|
border-width: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yue blockquote blockquote {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0.4em 1em 6em;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
.yue {
|
||||||
|
max-width: 650px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="yue">
|
||||||
|
{{ .Body }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
Loading…
Reference in New Issue
Block a user