feat: 初始化导航网站项目
添加 Flask 导航站应用,包含 Docker 部署配置、SQLite 数据库、静态资源及 CI/CD 流水线。
这个提交包含在:
@@ -0,0 +1,48 @@
|
||||
/* analytics.css */
|
||||
|
||||
.ui.masthead.segment {
|
||||
min-height: 300px;
|
||||
}
|
||||
|
||||
.ui.masthead h1.ui.header {
|
||||
margin-top: 1.5em;
|
||||
}
|
||||
|
||||
.ui.masthead h2.ui.header {
|
||||
margin-bottom: 1.5em;
|
||||
}
|
||||
|
||||
.ui.vertical.stripe .ui.statistic .label {
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
.echart-container {
|
||||
height: 400px;
|
||||
}
|
||||
#visit-hourly.echart-container {
|
||||
height: 600px;
|
||||
}
|
||||
#visit-map.echart-container {
|
||||
height: 600px;
|
||||
}
|
||||
#visit-calendar.echart-container {
|
||||
height: 940px;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 767px) {
|
||||
.ui.masthead.segment {
|
||||
min-height: 160px;
|
||||
}
|
||||
.echart-container {
|
||||
height: 300px;
|
||||
}
|
||||
#visit-hourly.echart-container {
|
||||
height: 400px;
|
||||
}
|
||||
#visit-map.echart-container {
|
||||
height: 400px;
|
||||
}
|
||||
#visit-calendar.echart-container {
|
||||
height: 5710px;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,235 @@
|
||||
/* common.css */
|
||||
|
||||
.ui.hidden.menu {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.logo-image {
|
||||
width: 30px;
|
||||
}
|
||||
.logo-text {
|
||||
margin-left: 10px;
|
||||
font-size: 1.6em;
|
||||
font-weight: normal;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.ui.masthead.segment {
|
||||
padding: 1em 0em;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.ui.masthead h1.ui.header {
|
||||
font-size: 3em;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.ui.masthead h2.ui.header {
|
||||
font-size: 1.7em;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.ui.vertical.stripe {
|
||||
padding: 8em 0em;
|
||||
}
|
||||
|
||||
.ui.vertical.stripe .horizontal.divider {
|
||||
margin: 3em 0em;
|
||||
}
|
||||
|
||||
.ui.links.stripe.segment,
|
||||
.ui.stats.stripe.segment,
|
||||
.ui.qrcode.stripe.segment {
|
||||
padding: 0em;
|
||||
}
|
||||
|
||||
.ui.stats.stripe.segment .grid .column {
|
||||
padding-top: 3em;
|
||||
padding-bottom: 3em;
|
||||
}
|
||||
.ui.qrcode.stripe.segment .grid .column {
|
||||
padding-top: 5em;
|
||||
padding-bottom: 5em;
|
||||
}
|
||||
|
||||
.ui.stackable.celled.grid .row .links.column .ui.top.attached.label {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.ui.footer.segment {
|
||||
padding: 5em 0em;
|
||||
}
|
||||
|
||||
.ui.borderless.inverted.menu {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.ui.borderless.inverted.menu .toc.item {
|
||||
display: none;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 767px) {
|
||||
.ui.fixed.menu {
|
||||
display: none !important;
|
||||
}
|
||||
.ui.borderless.inverted.menu .item,
|
||||
.ui.borderless.inverted.menu .menu {
|
||||
display: none;
|
||||
}
|
||||
.ui.borderless.inverted.menu .toc.item {
|
||||
display: block;
|
||||
}
|
||||
.ui.masthead h1.ui.header {
|
||||
margin-top: 1em;
|
||||
font-size: 1.8em;
|
||||
}
|
||||
.ui.masthead h2.ui.header {
|
||||
margin-bottom: 1em;
|
||||
font-size: 1.5em;
|
||||
}
|
||||
.ui.stripe.segment {
|
||||
padding: 2em 0em;
|
||||
}
|
||||
.ui.stats.stripe.segment {
|
||||
padding: 0em;
|
||||
}
|
||||
}
|
||||
|
||||
/* text colors */
|
||||
.text-red {
|
||||
color: #DB2828;
|
||||
}
|
||||
.text-orange {
|
||||
color: #F2711C;
|
||||
}
|
||||
.text-yellow {
|
||||
color: #FBBD08;
|
||||
}
|
||||
.text-olive {
|
||||
color: #B5CC18;
|
||||
}
|
||||
.text-green {
|
||||
color: #21BA45;
|
||||
}
|
||||
.text-teal {
|
||||
color: #00B5AD;
|
||||
}
|
||||
.text-blue {
|
||||
color: #2185D0;
|
||||
}
|
||||
.text-violet {
|
||||
color: #6435C9;
|
||||
}
|
||||
.text-purple {
|
||||
color: #A333C8;
|
||||
}
|
||||
.text-pink {
|
||||
color: #E03997;
|
||||
}
|
||||
.text-brown {
|
||||
color: #A5673F;
|
||||
}
|
||||
.text-grey {
|
||||
color: #767676;
|
||||
}
|
||||
.text-black {
|
||||
color: #1B1C1D;
|
||||
}
|
||||
.text-white {
|
||||
color: #FFF;
|
||||
}
|
||||
|
||||
/* text colors inverted */
|
||||
.text-red-inverted {
|
||||
color: #FF695E;
|
||||
}
|
||||
.text-orange-inverted {
|
||||
color: #FF851B;
|
||||
}
|
||||
.text-yellow-inverted {
|
||||
color: #FFE21F;
|
||||
}
|
||||
.text-olive-inverted {
|
||||
color: #D9E778;
|
||||
}
|
||||
.text-green-inverted {
|
||||
color: #2ECC40;
|
||||
}
|
||||
.text-teal-inverted {
|
||||
color: #6DFFFF;
|
||||
}
|
||||
.text-blue-inverted {
|
||||
color: #54C8FF;
|
||||
}
|
||||
.text-violet-inverted {
|
||||
color: #A291FB;
|
||||
}
|
||||
.text-purple-inverted {
|
||||
color: #DC73FF;
|
||||
}
|
||||
.text-pink-inverted {
|
||||
color: #FF8EDF;
|
||||
}
|
||||
.text-brown-inverted {
|
||||
color: #D67C1C;
|
||||
}
|
||||
.text-grey-inverted {
|
||||
color: #DCDDDE;
|
||||
}
|
||||
.text-black-inverted {
|
||||
color: #545454;
|
||||
}
|
||||
|
||||
/* background colors */
|
||||
.background-red {
|
||||
background-color: #DB2828;
|
||||
}
|
||||
.background-orange {
|
||||
background-color: #F2711C;
|
||||
}
|
||||
.background-yellow {
|
||||
background-color: #FBBD08;
|
||||
}
|
||||
.background-olive {
|
||||
background-color: #B5CC18;
|
||||
}
|
||||
.background-green {
|
||||
background-color: #21BA45;
|
||||
}
|
||||
.background-teal {
|
||||
background-color: #00B5AD;
|
||||
}
|
||||
.background-blue {
|
||||
background-color: #2185D0;
|
||||
}
|
||||
.background-violet {
|
||||
background-color: #6435C9;
|
||||
}
|
||||
.background-purple {
|
||||
background-color: #A333C8;
|
||||
}
|
||||
.background-pink {
|
||||
background-color: #E03997;
|
||||
}
|
||||
.background-brown {
|
||||
background-color: #A5673F;
|
||||
}
|
||||
.background-grey {
|
||||
background-color: #767676;
|
||||
}
|
||||
.background-black {
|
||||
background-color: #1B1C1D;
|
||||
}
|
||||
.background-white {
|
||||
background-color: #FFF;
|
||||
}
|
||||
|
||||
code {
|
||||
padding: 0 5px;
|
||||
white-space: nowrap;
|
||||
border: 1px solid #EAEAEA;
|
||||
background-color: #F8F8F8;
|
||||
border-radius: 3px;
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
/* customize.css */
|
||||
|
||||
.ui.masthead.segment {
|
||||
min-height: 300px;
|
||||
}
|
||||
|
||||
.ui.masthead h1.ui.header {
|
||||
margin-top: 1.5em;
|
||||
}
|
||||
|
||||
.ui.masthead h2.ui.header {
|
||||
margin-bottom: 1.5em;
|
||||
}
|
||||
|
||||
.ui.vertical.stripe .ui.statistic .label {
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 767px) {
|
||||
.ui.masthead.segment {
|
||||
min-height: 160px;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
/* donate.css */
|
||||
|
||||
.ui.masthead.segment {
|
||||
min-height: 300px;
|
||||
}
|
||||
|
||||
.ui.masthead h1.ui.header {
|
||||
margin-top: 1.5em;
|
||||
}
|
||||
|
||||
.ui.masthead h2.ui.header {
|
||||
margin-bottom: 1.5em;
|
||||
}
|
||||
|
||||
.ui.vertical.stripe p {
|
||||
font-size: 1.33em;
|
||||
}
|
||||
|
||||
.ui.centered.card .qrcode.image {
|
||||
padding: 1em;
|
||||
background: none;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 767px) {
|
||||
.ui.masthead.segment {
|
||||
min-height: 160px;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
/* error.css */
|
||||
|
||||
.ui.masthead.segment {
|
||||
min-height: 300px;
|
||||
}
|
||||
|
||||
.ui.masthead h1.ui.header {
|
||||
margin-top: 1.5em;
|
||||
}
|
||||
|
||||
.ui.masthead h2.ui.header {
|
||||
margin-bottom: 1.5em;
|
||||
}
|
||||
|
||||
.ui.vertical.stripe h1.ui.error.header {
|
||||
font-size: 8em;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 767px) {
|
||||
.ui.masthead.segment {
|
||||
min-height: 160px;
|
||||
}
|
||||
.ui.vertical.stripe h1.ui.error.header {
|
||||
font-size: 4em;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
/* grayscale.css */
|
||||
|
||||
html {
|
||||
filter: grayscale(85%) saturate(80%);
|
||||
-webkit-filter: grayscale(85%) saturate(80%);
|
||||
-moz-filter: grayscale(85%) saturate(80%);
|
||||
-ms-filter: grayscale(85%) saturate(80%);
|
||||
-o-filter: grayscale(85%) saturate(80%);
|
||||
filter: url(data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><filter id="grayscale"><feColorMatrix type="matrix" values="0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0"/></filter></svg>#grayscale);
|
||||
filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=.85);
|
||||
-webkit-filter: grayscale(.85) saturate(.8);
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
/* home.css */
|
||||
|
||||
.ui.masthead.segment {
|
||||
padding: 1em 0em;
|
||||
}
|
||||
|
||||
.ui.masthead .logo.item img {
|
||||
margin-right: 1em;
|
||||
}
|
||||
|
||||
.ui.masthead .ui.text.container {
|
||||
margin-top: 15rem;
|
||||
margin-bottom: 10rem;
|
||||
}
|
||||
|
||||
.ui.masthead div.ui.pointing.label {
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
|
||||
.ui.masthead h1.ui.header {
|
||||
margin-top: 0em;
|
||||
margin-bottom: 0em;
|
||||
}
|
||||
|
||||
.ui.masthead h1.ui.logo.header .ui.centered.image {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.ui.masthead #search-shortcuts .ui.hidden.label {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.ui.masthead #badges {
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
|
||||
.ui.masthead .ui.selection.link.list {
|
||||
margin-top: 0em;
|
||||
margin-bottom: 0.25em;
|
||||
}
|
||||
|
||||
.ui.labels .ui.label {
|
||||
margin-left: 0.25em;
|
||||
margin-right: 0.25em;
|
||||
}
|
||||
|
||||
.ui.masthead #banner-advertisement {
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 767px) {
|
||||
.ui.masthead .ui.text.container {
|
||||
margin-top: 2rem;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.ui.masthead h1.ui.header {
|
||||
margin-top: 0em;
|
||||
font-size: 2em;
|
||||
}
|
||||
.ui.masthead h2.ui.header {
|
||||
margin-top: 0.5em;
|
||||
font-size: 1.5em;
|
||||
}
|
||||
}
|
||||
|
||||
/* index */
|
||||
.ui .grid-item-full{
|
||||
width: 100%;
|
||||
}
|
||||
.ui .grid-item{
|
||||
width: 33%;
|
||||
box-shadow: 0.5px 0.51px 0.5px 1px #dfdada;
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
/* masthead.css */
|
||||
|
||||
.ui.inverted.masthead.segment.zoomed h1.ui.header,
|
||||
.ui.inverted.masthead.segment.zoomed h2.ui.header {
|
||||
text-shadow: 0px 0px 4px rgba(0, 0, 0, 0);
|
||||
color: rgba(255, 255, 255, 1);
|
||||
}
|
||||
.ui.inverted.masthead.segment.zoomed:after {
|
||||
opacity: 0;
|
||||
}
|
||||
.ui.inverted.masthead.segment.zoomed {
|
||||
background-color: #1B1C1D;
|
||||
}
|
||||
.ui.inverted.masthead.segment {
|
||||
position: relative;
|
||||
text-align: center;
|
||||
color: rgba(255, 255, 255, 0.9);
|
||||
margin-bottom: 0px;
|
||||
border-bottom: none;
|
||||
background-color: #1B1C1D;
|
||||
background-position: 50% 50%;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
.ui.inverted.masthead.segment:after {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
z-index: -1;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
content: '';
|
||||
background-size: cover;
|
||||
opacity: 0.45;
|
||||
}
|
||||
.ui.inverted.masthead.segment.bg1:after {
|
||||
background-image: url('/static/images/backgrounds/1.jpg');
|
||||
}
|
||||
.ui.inverted.masthead.segment.bg2:after {
|
||||
background-image: url('/static/images/backgrounds/2.jpg');
|
||||
}
|
||||
.ui.inverted.masthead.segment.bg3:after {
|
||||
background-image: url('/static/images/backgrounds/3.jpg');
|
||||
}
|
||||
.ui.inverted.masthead.segment.bg4:after {
|
||||
background-image: url('/static/images/backgrounds/4.jpg');
|
||||
}
|
||||
.ui.inverted.masthead.segment.bg5:after {
|
||||
background-image: url('/static/images/backgrounds/5.jpg');
|
||||
}
|
||||
.ui.inverted.masthead.segment.bg6:after {
|
||||
background-image: url('/static/images/backgrounds/6.jpg');
|
||||
}
|
||||
.ui.inverted.masthead.segment.bg7:after {
|
||||
background-image: url('/static/images/backgrounds/7.jpg');
|
||||
}
|
||||
.ui.inverted.masthead.segment.bg8:after {
|
||||
background-image: url('/static/images/backgrounds/8.jpg');
|
||||
}
|
||||
.ui.inverted.masthead.segment.bg9:after {
|
||||
background-image: url('/static/images/backgrounds/9.jpg');
|
||||
}
|
||||
.ui.inverted.masthead.segment.bg10:after {
|
||||
background-image: url('/static/images/backgrounds/10.jpg');
|
||||
}
|
||||
.ui.inverted.masthead.segment.bg11:after {
|
||||
background-image: url('/static/images/backgrounds/11.jpg');
|
||||
}
|
||||
.ui.inverted.masthead.segment.bg12:after {
|
||||
background-image: url('/static/images/backgrounds/12.jpg');
|
||||
}
|
||||
.ui.inverted.masthead.segment.bg13:after {
|
||||
background-image: url('/static/images/backgrounds/13.jpg');
|
||||
}
|
||||
.ui.inverted.masthead.segment.bg14:after {
|
||||
background-image: url('/static/images/backgrounds/14.jpg');
|
||||
}
|
||||
.ui.inverted.masthead.segment.bg15:after {
|
||||
background-image: url('/static/images/backgrounds/15.jpg');
|
||||
}
|
||||
.ui.inverted.masthead.segment.bg16:after {
|
||||
background-image: url('/static/images/backgrounds/16.jpg');
|
||||
}
|
||||
.ui.inverted.masthead.segment.bg17:after {
|
||||
background-image: url('/static/images/backgrounds/17.jpg');
|
||||
}
|
||||
.ui.inverted.masthead.segment,
|
||||
.ui.inverted.masthead.segment:after {
|
||||
-ms-transition:
|
||||
background 6s cubic-bezier(0.680, -0.550, 0.265, 1.4) 0s,
|
||||
opacity 6s cubic-bezier(0.680, -0.550, 0.265, 1.4) 0s;
|
||||
-moz-transition:
|
||||
background 6s cubic-bezier(0.680, -0.550, 0.265, 1.4) 0s,
|
||||
opacity 6s cubic-bezier(0.680, -0.550, 0.265, 1.4) 0s;
|
||||
-webkit-transition:
|
||||
background 6s cubic-bezier(0.680, -0.550, 0.265, 1.4) 0s,
|
||||
opacity 6s cubic-bezier(0.680, -0.550, 0.265, 1.4) 0s;
|
||||
transition:
|
||||
background 6s cubic-bezier(0.680, -0.550, 0.265, 1.4) 0s,
|
||||
opacity 6s cubic-bezier(0.680, -0.550, 0.265, 1.4) 0s;
|
||||
transition:
|
||||
background 6s cubic-bezier(0.680, -0.550, 0.265, 1.4) 0s,
|
||||
opacity 6s cubic-bezier(0.680, -0.550, 0.265, 1.4) 0s;
|
||||
-ms-transition:
|
||||
background 6s cubic-bezier(0.680, -0.550, 0.265, 1.4) 0s,
|
||||
opacity 6s cubic-bezier(0.680, -0.550, 0.265, 1.4) 0s;
|
||||
-moz-transition:
|
||||
background 6s cubic-bezier(0.680, -0.550, 0.265, 1.4) 0s,
|
||||
opacity 6s cubic-bezier(0.680, -0.550, 0.265, 1.4) 0s;
|
||||
-webkit-transition:
|
||||
background 6s cubic-bezier(0.680, -0.550, 0.265, 1.4) 0s,
|
||||
opacity 6s cubic-bezier(0.680, -0.550, 0.265, 1.4) 0s;
|
||||
transition:
|
||||
background 6s cubic-bezier(0.680, -0.550, 0.265, 1.4) 0s,
|
||||
opacity 6s cubic-bezier(0.680, -0.550, 0.265, 1.4) 0s;
|
||||
}
|
||||
.pusher .ui.inverted.menu {
|
||||
background: none;
|
||||
}
|
||||
.ui.masthead h1.ui.header:not(.logo) {
|
||||
text-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
|
||||
-moz-transform-style: preserve-3d;
|
||||
-webkit-transform-style: preserve-3d;
|
||||
transform-style: preserve-3d;
|
||||
}
|
||||
.ui.masthead h2.ui.header {
|
||||
text-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
|
||||
-moz-transform-style: preserve-3d;
|
||||
-webkit-transform-style: preserve-3d;
|
||||
transform-style: preserve-3d;
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
/* search.css */
|
||||
|
||||
.ui.masthead.segment {
|
||||
min-height: 300px;
|
||||
}
|
||||
|
||||
.ui.masthead h1.ui.header {
|
||||
margin-top: 1.5em;
|
||||
}
|
||||
|
||||
.ui.masthead h2.ui.header {
|
||||
margin-bottom: 1.5em;
|
||||
}
|
||||
|
||||
.ui.vertical.stripe h1.ui.search.header {
|
||||
font-size: 8em;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 767px) {
|
||||
.ui.masthead.segment {
|
||||
min-height: 160px;
|
||||
}
|
||||
.ui.vertical.stripe h1.ui.search.header {
|
||||
font-size: 4em;
|
||||
}
|
||||
}
|
||||
在新工单中引用
屏蔽一个用户