feat: 初始化导航网站项目
添加 Flask 导航站应用,包含 Docker 部署配置、SQLite 数据库、静态资源及 CI/CD 流水线。
这个提交包含在:
@@ -0,0 +1,53 @@
|
||||
{% extends 'base/base.html' %}
|
||||
{% block content %}
|
||||
|
||||
<div class="ui vertical stripe stats segment">
|
||||
<div class="ui equal width stackable internally celled grid">
|
||||
<div class="center aligned row">
|
||||
<div class="column">
|
||||
<div class="ui green statistic">
|
||||
<div class="label">在线访客数</div>
|
||||
<div id="live-visitors-stat" class="value">{{ get_today_data()['online'] }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="column">
|
||||
<div class="ui statistic">
|
||||
<div class="label">今日浏览次数</div>
|
||||
<div id="today-actions-stat" class="value">{{ get_today_data()['views'] }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="column">
|
||||
<div class="ui statistic">
|
||||
<div class="label">昨日访客数</div>
|
||||
<div id="yesterday-visitors-stat" class="value">{{ get_yesterday_data()['online'] }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="column">
|
||||
<div class="ui statistic">
|
||||
<div class="label">昨日浏览次数</div>
|
||||
<div id="yesterday-actions-stat" class="value">{{ get_yesterday_data()['views'] }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="column">
|
||||
<div class="ui statistic">
|
||||
<div class="label">系统用户</div>
|
||||
<div id="yesterday-actions-stat" class="value">{{ get_user_total()['total'] }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="column">
|
||||
<div class="ui statistic">
|
||||
<div class="label">搜索引擎收录</div>
|
||||
<div id="yesterday-actions-stat" class="value">{{ get_library_data()['search'] }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="column">
|
||||
<div class="ui statistic">
|
||||
<div class="label">快捷导航收录</div>
|
||||
<div id="yesterday-actions-stat" class="value">{{ get_library_data()['quick'] }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,83 @@
|
||||
{% extends 'base/base.html' %}
|
||||
{% block content %}
|
||||
|
||||
<div class="ui vertical stripe segment">
|
||||
<div class="ui container">
|
||||
<div class="ui warning message">
|
||||
<div class="header">温馨提示</div>
|
||||
<ul>
|
||||
<li>用户服务仍处于测试与迭代研发阶段。</li>
|
||||
<li>本网站不保证在未来保留部分或全部该服务的内容,但网站代码对外开源,欢迎Fork。</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="ui placeholder segment">
|
||||
<div class="ui two column very relaxed stackable grid">
|
||||
<div class="middle aligned column">
|
||||
{% if type == 'login' %}
|
||||
<div class="ui form">
|
||||
<form method="post" action="login">
|
||||
<div class="field">
|
||||
<label>Username</label>
|
||||
<div class="ui left icon input">
|
||||
<input type="text" name="username" placeholder="Username">
|
||||
<i class="user icon"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>Password</label>
|
||||
<div class="ui left icon input">
|
||||
<input type="password" name="password">
|
||||
<i class="lock icon"></i>
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" class="ui blue submit button">Login</button>
|
||||
<p style="color:red;"> {{ attention }} </p>
|
||||
</form>
|
||||
</div>
|
||||
{% else %}
|
||||
<a href="/login">
|
||||
<div class="ui big button">
|
||||
<i class="signup icon"></i>
|
||||
Login
|
||||
</div></a>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="middle aligned column">
|
||||
{% if type == 'register' %}
|
||||
<div class="ui form">
|
||||
<form method="post" action="register">
|
||||
<div class="field">
|
||||
<label>Username</label>
|
||||
<div class="ui left icon input">
|
||||
<input type="text" name="username" placeholder="Username">
|
||||
<i class="user icon"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>Password</label>
|
||||
<div class="ui left icon input">
|
||||
<input type="password" name="password">
|
||||
<i class="lock icon"></i>
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" class="ui blue submit button">Sign Up</button>
|
||||
<p style="color:red;"> {{ attention }} </p>
|
||||
</form>
|
||||
</div>
|
||||
{% else %}
|
||||
<a href="/register">
|
||||
<div class="ui big button">
|
||||
<i class="signup icon"></i>
|
||||
Sign Up
|
||||
</div></a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="ui vertical divider">
|
||||
Or
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,65 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
{% block head %}
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0">
|
||||
<meta name="built_at" content="2023-01-21T03:52:36+08:00">
|
||||
<meta name="established_at" content="2016-10-01T00:00+08:00">
|
||||
|
||||
<title>瓦力导航 · wali-Navi | A Navigation Website for wali</title>
|
||||
<meta property="og:title" content="瓦力导航 · wali-Navi" />
|
||||
<meta name="author" content="iROCKBUNNY" />
|
||||
<meta property="og:locale" content="zh_CN" />
|
||||
<meta name="description" content="A Navigation Website for wali" />
|
||||
<meta property="og:description" content="A Navigation Website for wali" />
|
||||
<link rel="canonical" href="https://nav.iwali.top/" />
|
||||
<meta property="og:url" content="https://nav.iwali.top/" />
|
||||
<meta property="og:site_name" content="瓦力导航 · wali-Navi" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta name="twitter:card" content="summary" />
|
||||
<meta property="twitter:title" content="瓦力导航 · wali-Navi" />
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/static/fomantic-ui/semantic.min.css">
|
||||
<link rel="stylesheet" type="text/css" href="/static/css/common.css">
|
||||
<link rel="stylesheet" type="text/css" href="/static/css/masthead.css">
|
||||
<link rel="stylesheet" type="text/css" href="/static/css/home.css">
|
||||
<link rel="apple-touch-icon" type="image/png" href="/static/images/apple-touch-icon.png">
|
||||
<link rel="icon" type="image/x-icon" href="/static/images/favicon.ico">
|
||||
{% endblock %}
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% include 'base/menu-mobile.html' %}
|
||||
<div class="pusher">
|
||||
<div class="ui inverted vertical masthead center aligned segment zoomed">
|
||||
{% include 'base/menu.html' %}
|
||||
{% block header %}
|
||||
|
||||
{% endblock %}
|
||||
</div>
|
||||
{% block content %}
|
||||
|
||||
{% endblock %}
|
||||
{% include 'base/footer.html' %}
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="/static/js/jquery/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="/static/js/jquery/jquery.lazyload.js"></script>
|
||||
<script type="text/javascript" src="/static/fomantic-ui/semantic.min.js"></script>
|
||||
<script type="text/javascript" src="/static/fomantic-ui/tablesort.js"></script>
|
||||
<script src="https://unpkg.com/masonry-layout@4/dist/masonry.pkgd.min.js"></script>
|
||||
<script type="text/javascript" src="/static/js/common.js"></script>
|
||||
<script type="text/javascript" src="/static/js/dayjs/dayjs.min.js"></script>
|
||||
<script type="text/javascript" src="/static/js/dayjs/zh-cn.js"></script>
|
||||
<script type="text/javascript" src="/static/js/dayjs/relativeTime.js"></script>
|
||||
<script type="text/javascript" src="/static/js/js.cookie.min.js"></script>
|
||||
<script type="text/javascript" src="/static/js/suggest-query.min.js"></script>
|
||||
<script type="text/javascript" src="/static/js/hitokoto.js"></script>
|
||||
{% block footer_script %}
|
||||
|
||||
{% endblock %}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,37 @@
|
||||
<div class="ui inverted vertical footer segment">
|
||||
<div class="ui container">
|
||||
<div class="ui stackable inverted divided equal height stackable grid">
|
||||
<div class="six wide column">
|
||||
<h4 class="ui inverted header">站群</h4>
|
||||
<div class="ui inverted link list">
|
||||
<a class="ui mini label" href="https://iwali.top/" target="_blank">iwali</a>
|
||||
<a class="ui mini label" href="https://status.iwali.top/" target="_blank">监控</a>
|
||||
<a class="ui mini label" href="https://wakapi.iwali.top/" target="_blank">wakapi</a>
|
||||
<a class="ui mini label" href="https://disk.iwali.top/" target="_blank">云盘</a>
|
||||
<a class="ui mini label" href="https://kb.iwali.top/" target="_blank">看板</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="three wide column">
|
||||
<h4 class="ui inverted header">About</h4>
|
||||
<div class="ui inverted link list">
|
||||
<a class="item" href="https://iwali.top" target="_blank">iwali</a>
|
||||
<a class="item" href="/donate/">Donate</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="seven wide column">
|
||||
<h4 class="ui inverted header">瓦力导航 · wali-Navi</h4>
|
||||
<div class="ui inverted link list">
|
||||
<div class="item">© 2023 iwali</div>
|
||||
<div class="item">Designed and built by iwali.</div>
|
||||
<a class="item" href="/analytics/">
|
||||
Visits / Page Views:
|
||||
<span id="today-visits">{{ get_today_data()['views'] }}</span> / <span id="today-actions">{{ get_today_data()['online'] }}</span> (Today)
|
||||
·
|
||||
<span id="yesterday-visits">{{ get_yesterday_data()['views'] }}</span> / <span id="yesterday-actions">{{ get_yesterday_data()['online'] }}</span> (Yesterday)
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
<div class="ui large top fixed borderless hidden menu">
|
||||
<div class="ui container">
|
||||
<a class="header item" href="/">
|
||||
<div class="ui middle aligned image">
|
||||
<img class="logo-image" src="/static/images/logo-dark.svg" alt="Logo">
|
||||
</div>
|
||||
<div class="logo-text">Wali-Navi</div>
|
||||
</a>
|
||||
<a class="item" href="/"><i class="home icon"></i>首页</a>
|
||||
<a class="item" href="/customize.html"><i class="tools icon"></i>定制化</a>
|
||||
<a class="item" href="/analytics.html"><i class="chart bar icon"></i>访客分析</a>
|
||||
<div class="right menu">
|
||||
{% if get_user() == None %}
|
||||
<a class="item" href="/login" data-content="Login"><i class="sign in alternate icon"></i></a>
|
||||
<a class="item" href="/register" data-content="Sign-Up"><i class="user plus icon"></i></a>
|
||||
{% else %}
|
||||
<a id="username" class="item" href="/customize.html" target="_blank" data-user="{{ get_user() }}">
|
||||
<div id="user-avatar" style="width:30px;height:30px;"></div> {{ get_user() }}
|
||||
</a>
|
||||
<a class="item" href="/logout"><i class="icon sign out alternate"></i></a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ui vertical inverted sidebar menu">
|
||||
<a class="header item" href="/">
|
||||
<div class="ui middle aligned image">
|
||||
<img class="logo-image" src="/static/images/logo-white.svg" alt="Logo">
|
||||
</div>
|
||||
<div class="logo-text">Wali-Navi</div>
|
||||
</a>
|
||||
<a class="item" href="/"><i class="home icon"></i>首页</a>
|
||||
<a class="item" href="/customize.html"><i class="tools icon"></i>定制化</a>
|
||||
<a class="item" href="/analytics.html"><i class="chart bar icon"></i>访客分析</a>
|
||||
</div>
|
||||
@@ -0,0 +1,26 @@
|
||||
<!-- default -->
|
||||
<div class="ui container">
|
||||
<div class="ui large borderless inverted menu" style="border: none;">
|
||||
<div class="toc link icon item"><i class="sidebar icon"></i></div>
|
||||
<a class="header item" href="/">
|
||||
<div class="ui middle aligned image">
|
||||
<img class="logo-image" src="/static/images/logo-white.svg" alt="Logo">
|
||||
</div>
|
||||
<div class="logo-text">Wali-Navi</div>
|
||||
</a>
|
||||
<a class="item" href="/"><i class="home icon"></i>首页</a>
|
||||
<a class="item" href="/customize.html"><i class="tools icon"></i>定制化</a>
|
||||
<a class="item" href="/analytics.html"><i class="chart bar icon"></i>访客分析</a>
|
||||
<div class="right menu">
|
||||
{% if get_user() == None %}
|
||||
<a class="item" href="/login" data-content="Login"><i class="sign in alternate icon"></i></a>
|
||||
<a class="item" href="/register" data-content="Sign-Up"><i class="user plus icon"></i></a>
|
||||
{% else %}
|
||||
<a id="username" class="item" href="/customize.html" target="_blank" data-user="{{get_user()}}">
|
||||
<div id="user-avatar" style="width:30px;height:30px;"></div> {{ get_user() }}
|
||||
</a>
|
||||
<a class="item" href="/logout"><i class="icon sign out alternate"></i></a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,22 @@
|
||||
{% extends 'base/base.html' %}
|
||||
{% block content %}
|
||||
|
||||
<div class="ui vertical stripe segment">
|
||||
<div class="ui container">
|
||||
<div class="ui warning message">
|
||||
<div class="header">温馨提示</div>
|
||||
<ul>
|
||||
<li>该定制化服务仍处于测试与迭代研发阶段。</li>
|
||||
<li>该项服务依赖于浏览器的Cookie功能,若要使用此服务,请确保您的浏览器的Cookie功能被启用。</li>
|
||||
<li>您的定制化内容将仅保存在您的浏览器Cookie中,本网站对任何形式的个人定制化数据的遗失概不负责。</li>
|
||||
<li>本网站不保证在未来保留部分或全部该服务的内容,但网站代码对外开源,欢迎Fork。</li>
|
||||
</ul>
|
||||
</div>
|
||||
<h2 class="ui header">定制化菜单</h2>
|
||||
<a class="ui negative left labeled icon button" href="/customize/search.html"><i class="bars icon"></i>快捷搜索🔍</a>
|
||||
<a class="ui negative left labeled icon button" href="/customize/quick.html"><i class="bars icon"></i>快捷导航🧭</a>
|
||||
<a class="ui negative left labeled icon button" href="/customize/monitor.html"><i class="bars icon"></i>快捷监控🏠</a>
|
||||
<a class="ui negative left labeled icon button" href="/customize/library.html"><i class="bars icon"></i>仓库🚚</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,118 @@
|
||||
{% extends 'base/base.html' %}
|
||||
{% block content %}
|
||||
<div class="ui vertical stripe segment">
|
||||
<div class="ui container">
|
||||
{% block customize_header %}
|
||||
{% endblock%}
|
||||
<table id="model_table" class="ui stackable celled padded long table sortable small striped">
|
||||
<thead>
|
||||
<tr>
|
||||
{% block customize_table_th %}
|
||||
{% endblock%}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% block customize_table_tr %}
|
||||
{% endblock%}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ui modal model_form">
|
||||
<div class="header">Look at the Actions</div>
|
||||
<div class="content">
|
||||
<form class="ui equal width form">
|
||||
{% block customize_form %}
|
||||
{% endblock%}
|
||||
</form>
|
||||
</div>
|
||||
<div class="basic actions">
|
||||
<div class="ui negative button btn_cancel">Cancel</div>
|
||||
<div class="ui positive button btn_submit">Submit</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input id="page_type" value="{{ page_type }}" hidden/>
|
||||
{% endblock %}
|
||||
{% block footer_script %}
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
|
||||
console.log("start")
|
||||
var page_type = $("#page_type").val()
|
||||
$(".url").popup();
|
||||
$("#model_table").tablesort()
|
||||
$('#status_switch').checkbox({
|
||||
onChecked: function () {statusChange(true)},
|
||||
onUnchecked: function () { statusChange(false) }
|
||||
});
|
||||
function statusChange(flag){
|
||||
$('#status_switch').children('input').attr('checked',flag)
|
||||
if(flag){
|
||||
$("#status").val(1);
|
||||
$('#status_switch').children('label').html('启用')
|
||||
}else{
|
||||
$("#status").val(0);
|
||||
$('#status_switch').children('label').html('禁用')
|
||||
}
|
||||
}
|
||||
$('.btn_add').click(function () {
|
||||
console.log("add")
|
||||
$('.model_form').modal('show');
|
||||
})
|
||||
$('.btn_submit').click(function () {
|
||||
let json = $('.form').serialize();
|
||||
// console.log(json)
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "/customize/"+page_type,
|
||||
contentType: "application/x-www-form-urlencoded",
|
||||
data: json,
|
||||
success: function (res) {
|
||||
if (res.code === 1) {
|
||||
location.reload();
|
||||
}
|
||||
},
|
||||
error: function (err) {
|
||||
console.log(err)
|
||||
}
|
||||
})
|
||||
})
|
||||
$('.btn_edit').click(function () {
|
||||
$.ajax({
|
||||
type: "GET",
|
||||
url: "/customize/"+page_type+"?id=" + $(this).attr("data-id"),
|
||||
success: function (res) {
|
||||
var data = res.data
|
||||
if (res.code === 1) {
|
||||
$('.form').find('input').each(function (i, n) {
|
||||
var obj = $(n)
|
||||
obj.val(data[obj.attr("name")])
|
||||
});
|
||||
statusChange(data['status']==1?true:false)
|
||||
$('.model_form').modal('show');
|
||||
}
|
||||
},
|
||||
error: function (err) {
|
||||
console.log(err)
|
||||
}
|
||||
})
|
||||
})
|
||||
$('.btn_delete').click(function () {
|
||||
$.ajax({
|
||||
type: "DELETE",
|
||||
url: "/customize/"+page_type+"?id=" + $(this).attr("data-id"),
|
||||
success: function (res) {
|
||||
if (res.code === 1) {
|
||||
location.reload();
|
||||
}
|
||||
},
|
||||
error: function (err) {
|
||||
console.log(err)
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
</script>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,13 @@
|
||||
{% extends '/customize/base-customize.html' %}
|
||||
{% block customize_header %}
|
||||
|
||||
{% endblock%}
|
||||
{% block customize_table_th %}
|
||||
|
||||
{% endblock%}
|
||||
{% block customize_table_tr %}
|
||||
|
||||
{% endblock%}
|
||||
{% block customize_form %}
|
||||
|
||||
{% endblock%}
|
||||
@@ -0,0 +1,106 @@
|
||||
{% extends '/customize/base-customize.html' %}
|
||||
{% block customize_header %}
|
||||
<div class="ui warning message">
|
||||
<div class="header">温馨提示</div>
|
||||
<ul>
|
||||
<li>该定制化服务仍处于测试与迭代研发阶段。</li>
|
||||
</ul>
|
||||
</div>
|
||||
<h2 class="ui header">仓库收录</h2>
|
||||
<a class="ui mini negative left labeled icon button btn_add"><i class="undo icon"></i>新增</a>
|
||||
{% endblock%}
|
||||
{% block customize_table_th %}
|
||||
<th>图标</th>
|
||||
<th>名称</th>
|
||||
<th>地址</th>
|
||||
<th>分类</th>
|
||||
<th>标签</th>
|
||||
<th>类型</th>
|
||||
<th>排序</th>
|
||||
<th>状态</th>
|
||||
<th>操作</th>
|
||||
{% endblock%}
|
||||
{% block customize_table_tr %}
|
||||
{% for item in data_list %}
|
||||
<tr>
|
||||
<td class="left {{ item.color }} marked">
|
||||
<i class="{{ item.icon }}"></i>
|
||||
</td>
|
||||
<td>{{ item.name }}</td>
|
||||
<td>
|
||||
<a class="ui icon button url" data-content="{{ item.url }}" href="{{ item.url }}" target="_blank">
|
||||
<i class="linkify icon"></i>
|
||||
</a>
|
||||
</td>
|
||||
<td>{{ item.cate }}</td>
|
||||
<td>{{ item.tags }}</td>
|
||||
<td>{{ item.type }}</td>
|
||||
<td>{{ item.sort }}</td>
|
||||
<td>
|
||||
{% if item.status == 0 %}
|
||||
<i class="icon close red"></i>
|
||||
{% else %}
|
||||
<i class="icon checkmark green"></i>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
<!-- <button class="btn_add" data-id="{{ item.id }}">添加</button> -->
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% endblock%}
|
||||
{% block customize_form %}
|
||||
<input type="text" name="id" hidden>
|
||||
<input type="text" name="user_id" hidden>
|
||||
<div class="fields">
|
||||
<div class="field">
|
||||
<label>图标 <a class="ui mini blue text" href="/icon.html" target="_blank">图标选择</a></label>
|
||||
<input type="text" name="icon">
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>颜色</label>
|
||||
<input type="text" name="color">
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>名称</label>
|
||||
<input type="text" name="name">
|
||||
</div>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>图片</label>
|
||||
<input type="text" name="img">
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>地址</label>
|
||||
<input type="text" name="url">
|
||||
</div>
|
||||
<div class="fields">
|
||||
<input type="text" name="type" hidden>
|
||||
<div class="field">
|
||||
<label>分类</label>
|
||||
<input type="text" name="cate">
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>标签</label>
|
||||
<input type="text" name="tags">
|
||||
</div>
|
||||
</div>
|
||||
<div class="fields">
|
||||
<div class="field">
|
||||
<label>排序</label>
|
||||
<input type="text" name="sort">
|
||||
</div>
|
||||
<div class="field">
|
||||
<div class="ui toggle checkbox" id="status_switch">
|
||||
<input type="checkbox" name="status_switch" checked="1">
|
||||
<label>状态</label>
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" id="status" name="status" hidden>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>简介</label>
|
||||
<textarea rows="2" name="summary"></textarea>
|
||||
</div>
|
||||
|
||||
{% endblock%}
|
||||
@@ -0,0 +1,19 @@
|
||||
{% extends '/customize/base-customize.html' %}
|
||||
{% block customize_header %}
|
||||
<div class="ui warning message">
|
||||
<div class="header">温馨提示</div>
|
||||
<ul>
|
||||
<li>该定制化服务仍处于测试与迭代研发阶段。</li>
|
||||
</ul>
|
||||
</div>
|
||||
<h2 class="ui header">便捷监控</h2>
|
||||
{% endblock%}
|
||||
{% block customize_table_th %}
|
||||
|
||||
{% endblock%}
|
||||
{% block customize_table_tr %}
|
||||
|
||||
{% endblock%}
|
||||
{% block customize_form %}
|
||||
|
||||
{% endblock%}
|
||||
@@ -0,0 +1,107 @@
|
||||
{% extends '/customize/base-customize.html' %}
|
||||
{% block customize_header %}
|
||||
<div class="ui warning message">
|
||||
<div class="header">温馨提示</div>
|
||||
<ul>
|
||||
<li>该定制化服务仍处于测试与迭代研发阶段。</li>
|
||||
</ul>
|
||||
</div>
|
||||
<h2 class="ui header">便捷导航</h2>
|
||||
<a class="ui mini negative left labeled icon button btn_add"><i class="undo icon"></i>新增</a>
|
||||
{% endblock%}
|
||||
{% block customize_table_th %}
|
||||
<th>图标</th>
|
||||
<th>名称</th>
|
||||
<th>地址</th>
|
||||
<th>分类</th>
|
||||
<th>标签</th>
|
||||
<th>类型</th>
|
||||
<th>排序</th>
|
||||
<th>状态</th>
|
||||
<th>操作</th>
|
||||
{% endblock%}
|
||||
{% block customize_table_tr %}
|
||||
{% for item in data_list %}
|
||||
<tr>
|
||||
<td class="left {{ item.color }} marked">
|
||||
<i class="{{ item.icon }}"></i>
|
||||
</td>
|
||||
<td>{{ item.name }}</td>
|
||||
<td>
|
||||
<a class="ui icon button url" data-content="{{ item.url }}" href="{{ item.url }}" target="_blank">
|
||||
<i class="linkify icon"></i>
|
||||
</a>
|
||||
</td>
|
||||
<td>{{ item.cate }}</td>
|
||||
<td>{{ item.tags }}</td>
|
||||
<td>{{ item.type }}</td>
|
||||
<td>{{ item.sort }}</td>
|
||||
<td>
|
||||
{% if item.status == 0 %}
|
||||
<i class="icon close red"></i>
|
||||
{% else %}
|
||||
<i class="icon checkmark green"></i>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
<button class="btn_edit" data-id="{{ item.id }}">编辑</button>
|
||||
<button class="btn_delete" data-id="{{ item.id }}">删除</button>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% endblock%}
|
||||
{% block customize_form %}
|
||||
<input type="text" name="id" hidden>
|
||||
<input type="text" name="user_id" hidden>
|
||||
<div class="fields">
|
||||
<div class="field">
|
||||
<label>图标 <a class="ui mini blue text" href="/icon.html" target="_blank">图标选择</a></label>
|
||||
<input type="text" name="icon">
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>颜色</label>
|
||||
<input type="text" name="color">
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>名称</label>
|
||||
<input type="text" name="name">
|
||||
</div>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>图片</label>
|
||||
<input type="text" name="img">
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>地址</label>
|
||||
<input type="text" name="url">
|
||||
</div>
|
||||
<div class="fields">
|
||||
<input type="text" name="type" hidden>
|
||||
<div class="field">
|
||||
<label>分类</label>
|
||||
<input type="text" name="cate">
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>标签</label>
|
||||
<input type="text" name="tags">
|
||||
</div>
|
||||
</div>
|
||||
<div class="fields">
|
||||
<div class="field">
|
||||
<label>排序</label>
|
||||
<input type="text" name="sort">
|
||||
</div>
|
||||
<div class="field">
|
||||
<div class="ui toggle checkbox" id="status_switch">
|
||||
<input type="checkbox" name="status_switch" checked="1">
|
||||
<label>状态</label>
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" id="status" name="status" hidden>
|
||||
</div>
|
||||
<div class=" field">
|
||||
<label>简介</label>
|
||||
<textarea rows="2" name="summary"></textarea>
|
||||
</div>
|
||||
|
||||
{% endblock%}
|
||||
@@ -0,0 +1,77 @@
|
||||
{% extends '/customize/base-customize.html' %}
|
||||
{% block customize_header %}
|
||||
<div class="ui warning message">
|
||||
<div class="header">温馨提示</div>
|
||||
<ul>
|
||||
<li>该定制化服务仍处于测试与迭代研发阶段。</li>
|
||||
</ul>
|
||||
</div>
|
||||
<h2 class="ui header">快捷搜索</h2>
|
||||
<a class="ui mini negative left labeled icon button btn_add"><i class="undo icon"></i>新增</a>
|
||||
{% endblock%}
|
||||
{% block customize_table_th %}
|
||||
<th>图标</th>
|
||||
<th>名称</th>
|
||||
<th>地址</th>
|
||||
<th>排序</th>
|
||||
<th>状态</th>
|
||||
<th>操作</th>
|
||||
{% endblock%}
|
||||
{% block customize_table_tr %}
|
||||
{% for item in data_list %}
|
||||
<tr>
|
||||
<td>
|
||||
<i class="{{ item.icon }}"></i>
|
||||
</td>
|
||||
<td>{{ item.name }}</td>
|
||||
<td>
|
||||
<a class="ui icon button url" data-content="{{ item.url }}" href="{{ item.url }}" target="_blank">
|
||||
<i class="linkify icon"></i>
|
||||
</a>
|
||||
</td>
|
||||
<td>{{ item.sort }}</td>
|
||||
<td>
|
||||
{% if item.status == 0 %}
|
||||
<i class="icon close red"></i>
|
||||
{% else %}
|
||||
<i class="icon checkmark green"></i>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
<button class="btn_edit" data-id="{{ item.id }}">编辑</button>
|
||||
<button class="btn_delete" data-id="{{ item.id }}">删除</button>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% endblock%}
|
||||
{% block customize_form %}
|
||||
<input type="text" name="id" hidden>
|
||||
<input type="text" name="user_id" hidden>
|
||||
<div class="fields">
|
||||
<div class=" field">
|
||||
<label>图标 <a class="ui mini blue text" href="/icon.html" target="_blank">图标选择</a></label>
|
||||
<input type="text" name="icon">
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>名称</label>
|
||||
<input type="text" name="name">
|
||||
</div>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>地址</label>
|
||||
<input type="text" name="url">
|
||||
</div>
|
||||
<div class="fields">
|
||||
<div class=" field">
|
||||
<label>排序</label>
|
||||
<input type="text" name="sort">
|
||||
</div>
|
||||
<div class=" field">
|
||||
<div class="ui toggle checkbox" id="status_switch">
|
||||
<input type="checkbox" name="status_switch" checked="1">
|
||||
<label>状态</label>
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" id="status" name="status" hidden>
|
||||
</div>
|
||||
{% endblock%}
|
||||
@@ -0,0 +1,86 @@
|
||||
{% extends 'base/base.html' %}
|
||||
{% block content %}
|
||||
|
||||
<div class="ui vertical stripe qrcode segment">
|
||||
<div class="ui equal width stackable internally celled grid">
|
||||
<div class="center aligned row">
|
||||
<div class="column">
|
||||
<div class="ui blue centered card">
|
||||
<div class="content">
|
||||
<div class="header"><i class="blue alipay icon"></i><span class="text-blue">支付宝</span>扫一扫付款</div>
|
||||
<div class="meta"><i class="yen sign fitted icon"></i>1.00</div>
|
||||
</div>
|
||||
<div class="qrcode image">
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASIAAAEiCAYAAABdvt+2AAAF+0lEQVR4nO3cS44cORAFwaxB3f/KPQcYLQgo0B7DNFs36i8HF0/8PM/z8/AfPz+zH8vn8xl9vFPb38fp66ued1r1O9jun/oFAAgRkBMiICdEQE6IgJwQATkhAnJCBOSECMh9T/+wWqJOe9vC+fTvTl9ftYQ+VX3O08/7tn9vTkRAToiAnBABOSECckIE5IQIyAkRkBMiICdEQO54WX3qlkXttO2fS7Ugnn7et90Jvf13dcqJCMgJEZATIiAnREBOiICcEAE5IQJyQgTkhAjIjS+r3+aWZfAty/TtnzN/5kQE5IQIyAkRkBMiICdEQE6IgJwQATkhAnJCBOQsq/+nblkQT7+P6fe7fXF+CyciICdEQE6IgJwQATkhAnJCBOSECMgJEZATIiA3vqx+2xJ1+8J5+vuYfh/bP5fpu7Kn3fLvzYkIyAkRkBMiICdEQE6IgJwQATkhAnJCBOSECMgdL6u3331cmV7eVsvl6YVutVy+5Xd6y/s45UQE5IQIyAkRkBMiICdEQE6IgJwQATkhAnJCBOS+t9x5W7nl7uNblrzbf8/bX1/FiQjICRGQEyIgJ0RAToiAnBABOSECckIE5IQIyH2nF7VvWwZPv9/td0xXqrutb/lcTlXv14kIyAkRkBMiICdEQE6IgJwQATkhAnJCBOSECMhld1bfsgg9Nb34veV5q9e33dt+B05EQE6IgJwQATkhAnJCBOSECMgJEZATIiAnREDu83M4fazu+H3bonb7Ana77Xdb33K3+jQnIiAnREBOiICcEAE5IQJyQgTkhAjICRGQEyIgd7ys5ne87a5iy+W/c8vC3okIyAkRkBMiICdEQE6IgJwQATkhAnJCBOSECMh9qye+5Q7s7cvl6cd72+c3/bzbfwfTTt+vExGQEyIgJ0RAToiAnBABOSECckIE5IQIyAkRkPtWdwZXi+ntS9Rp1R3O07Yv7Cvb/72dciICckIE5IQIyAkRkBMiICdEQE6IgJwQATkhAnKf53lGJ5fbF9PV453avvy+5fuovt9T25fQ06/PiQjICRGQEyIgJ0RAToiAnBABOSECckIE5IQIyH1P//Btd1ZXj7d9Gbx9+X1q+53V07+D6vdy+nhOREBOiICcEAE5IQJyQgTkhAjICRGQEyIgJ0RA7lstZbcvsKcfb/siefvnPG379zFt+93bTkRAToiAnBABOSECckIE5IQIyAkRkBMiICdEQO7zPM/R9HH7AvvU2+7ennbL53LL8vuWz8WJCMgJEZATIiAnREBOiICcEAE5IQJyQgTkhAjIfU//cPvi95bF9LRqmV7Zvpg+VS2mq9+9ExGQEyIgJ0RAToiAnBABOSECckIE5IQIyAkRkBu/s/ptS95T25ey25fzp6pl9dvuEJ/mRATkhAjICRGQEyIgJ0RAToiAnBABOSECckIE5NYvq0/dsvz2+f3O877N9s/ZiQjICRGQEyIgJ0RAToiAnBABOSECckIE5IQIyH1+tl9mu9z2u6OrO423L7C3f36ntv9PgVNOREBOiICcEAE5IQJyQgTkhAjICRGQEyIgJ0RA7usu4D8zOP8708vlajE97Zal9vTrcyICckIE5IQIyAkRkBMiICdEQE6IgJwQATkhAnLf0z+8ZWm8fUm+fVF76vR9VO+3WmBvf7+nphfYTkRAToiAnBABOSECckIE5IQIyAkRkBMiICdEQO54WX2qWi5vX6zecueyhf3vPN607XdlOxEBOSECckIE5IQIyAkRkBMiICdEQE6IgJwQAbnxZTV/55Y7krcveU9tX85PP161EHciAnJCBOSECMgJEZATIiAnREBOiICcEAE5IQJyltW/pLqL+paF87Tt30f1eBUnIiAnREBOiICcEAE5IQJyQgTkhAjICRGQEyIg93me52hiesvydvvdwtO234FdfR+nqve73fT34UQE5IQIyAkRkBMiICdEQE6IgJwQATkhAnJCBOSO76y+ZRFaqT6/Wxbdp6oF9qm3LbVP368TEZATIiAnREBOiICcEAE5IQJyQgTkhAjICRGQ+xcFvQ92TN3kEAAAAABJRU5ErkJggg==" alt="Alipay QR Code">
|
||||
</div>
|
||||
<div class="extra content">
|
||||
<div class="description">给程序员和设计师买星冰乐</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="column">
|
||||
<div class="ui green centered card">
|
||||
<div class="content">
|
||||
<div class="header"><i class="green weixin icon"></i><span class="text-green">微信</span>扫一扫支付</div>
|
||||
<div class="meta"><i class="yen sign fitted icon"></i>1.00</div>
|
||||
</div>
|
||||
<div class="qrcode image">
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6CAYAAACI7Fo9AAAEsElEQVR4nO3dMY4bMRQFQY2h+19Zzpx4g28svSTYVbGhlcZqMHmgntfr9Xnxl89nz2N5nmf076bvb/p6U7uey9Tqz3uLX7vfAPD/CR0ChA4BQocAoUOA0CFA6BAgdAgQOgS8p//w9EXU1Orl1Ool22qrF3S7lmern1/t++xEhwChQ4DQIUDoECB0CBA6BAgdAoQOAUKHgPEybuqW5dSuv7v69XbdQVdbnq22+vk50SFA6BAgdAgQOgQIHQKEDgFChwChQ4DQIWD5Mq7mluXUarVfcT2dEx0ChA4BQocAoUOA0CFA6BAgdAgQOgQIHQIs477p9LvWTn+9XcvCGic6BAgdAoQOAUKHAKFDgNAhQOgQIHQIEDoELF/G1e722rXsOv1OtlsWb7d8n53oECB0CBA6BAgdAoQOAUKHAKFDgNAhQOgQMF7G3bJ02mXX3XKr/99Of39Tte+zEx0ChA4BQocAoUOA0CFA6BAgdAgQOgQIHQLet9yJtcstC7Vb1D7vlBMdAoQOAUKHAKFDgNAhQOgQIHQIEDoECB0C3rfcnXX6HWVTt3yOqdPv0rvl9ZzoECB0CBA6BAgdAoQOAUKHAKFDgNAhQOgQMP411dMXW6cvk6Zu+Rw1pz8/JzoECB0ChA4BQocAoUOA0CFA6BAgdAgQOgQ8n+Gk5/Sl2Gq33BW2y67nMlX7u050CBA6BAgdAoQOAUKHAKFDgNAhQOgQIHQIGC/jxi94+ILOQu1ruz5H7VdhV5s+Pyc6BAgdAoQOAUKHAKFDgNAhQOgQIHQIEDoEPK/Xa+mkp7YUu+VOu9VOvzvw9DsBV3OiQ4DQIUDoECB0CBA6BAgdAoQOAUKHAKFDwHgZd8uvT97yequdftff1C3Pb/XrOdEhQOgQIHQIEDoECB0ChA4BQocAoUOA0CHgvfoFdy2TTl+8rXb6ouz0heQt/Joq8IfQIUDoECB0CBA6BAgdAoQOAUKHAKFDwPJl3NSu5dTpyz1/92f+7ukLydV/14kOAUKHAKFDgNAhQOgQIHQIEDoECB0ChA4B235NtXYH2Ol3sk3V/t+mTv9VXSc6BAgdAoQOAUKHAKFDgNAhQOgQIHQIEDoEPJ9dl3tdYtfSaeqWpeLpz281yzjgnwkdAoQOAUKHAKFDgNAhQOgQIHQIEDoEvGt3e02dvsQ6/ddKp1Z//05/flOrn4sTHQKEDgFChwChQ4DQIUDoECB0CBA6BAgdAt7Tf3j6kmhq9eJo111ruxaNpy/PTv+e7vq+ONEhQOgQIHQIEDoECB0ChA4BQocAoUOA0CFgvIybuuXXJ6duWdqtdssScLVdy0InOgQIHQKEDgFChwChQ4DQIUDoECB0CBA6BCxfxvE9u5Z2fM/qRaM744B/JnQIEDoECB0ChA4BQocAoUOA0CFA6BBgGfdDTr/TbvX7W70UW/3+bvlV2OnncKJDgNAhQOgQIHQIEDoECB0ChA4BQocAoUPA8mWcO8p+xi2Lt6nTF3RTu/pwokOA0CFA6BAgdAgQOgQIHQKEDgFChwChQ8B4Gbd6IcTXTl+Unb4UO/17uuv9OdEhQOgQIHQIEDoECB0ChA4BQocAoUOA0CHgN0NLeg6Cq8JMAAAAAElFTkSuQmCC" alt="Wechat QR Code">
|
||||
</div>
|
||||
<div class="extra content">
|
||||
<div class="description">给程序员和设计师买星冰乐</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ui vertical stripe segment">
|
||||
<div class="ui center aligned container">
|
||||
<h2 class="ui header">您的每一次支持,都是开发者坚持的动力!</h2>
|
||||
<p>如果您想自定义捐款数目,请扫描以下二维码。</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ui vertical stripe qrcode segment">
|
||||
<div class="ui equal width stackable internally celled grid">
|
||||
<div class="center aligned row">
|
||||
<div class="column">
|
||||
<div class="ui blue centered card">
|
||||
<div class="content">
|
||||
<div class="header"><i class="blue alipay icon"></i><span class="text-blue">支付宝</span>扫一扫付款</div>
|
||||
</div>
|
||||
<div class="qrcode image">
|
||||
<img src="data:image/png;base64,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" alt="Alipay QR Code">
|
||||
</div>
|
||||
<div class="extra content">
|
||||
<div class="description">给程序员和设计师买星冰乐</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="column">
|
||||
<div class="ui green centered card">
|
||||
<div class="content">
|
||||
<div class="header"><i class="green weixin icon"></i><span class="text-green">微信</span>扫一扫支付</div>
|
||||
</div>
|
||||
<div class="qrcode image">
|
||||
<img src="data:image/png;base64,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" alt="Wechat QR Code">
|
||||
</div>
|
||||
<div class="extra content">
|
||||
<div class="description">给程序员和设计师买星冰乐</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ui vertical stripe segment">
|
||||
<div class="ui center aligned container">
|
||||
<h2 class="ui header">无需矜持您的赞美与建议</h2>
|
||||
<div class="ui large buttons">
|
||||
<a class="ui positive left labeled icon button" href="{{ '/donate/' | relative_url }}"><i class="donate icon"></i>Donate</a>
|
||||
<div class="or" data-text="或"></div>
|
||||
<a class="ui negative right labeled icon button" href="{{ site.repository_url }}/issues/new" target="_blank"><i class="bug icon"></i>Report Bug</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,10 @@
|
||||
{% extends 'base/base.html' %}
|
||||
{% block content %}
|
||||
<div class="ui vertical stripe segment">
|
||||
<div class="ui center aligned text container">
|
||||
<h1 class="ui error header">404</h1>
|
||||
<h2>啊咧?没有权限喏!(>_<)</h2>
|
||||
<a class="ui basic button" href="/login"><i class="arrow left icon"></i>去登录/注册</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,10 @@
|
||||
{% extends 'base/base.html' %}
|
||||
{% block content %}
|
||||
<div class="ui vertical stripe segment">
|
||||
<div class="ui center aligned text container">
|
||||
<h1 class="ui error header">404</h1>
|
||||
<h2>啊咧?没有权限喏!(>_<)</h2>
|
||||
<a class="ui basic button" href="/login"><i class="arrow left icon"></i>去登录/注册</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,10 @@
|
||||
{% extends 'base/base.html' %}
|
||||
{% block content %}
|
||||
<div class="ui vertical stripe segment">
|
||||
<div class="ui center aligned text container">
|
||||
<h1 class="ui error header">404</h1>
|
||||
<h2>啊咧?页面不存在喏!(>_<)</h2>
|
||||
<a class="ui basic button" href="/"><i class="arrow left icon"></i>回到首页</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,52 @@
|
||||
{% extends 'base/base.html' %}
|
||||
{% block content %}
|
||||
|
||||
<div class="ui vertical stripe segment">
|
||||
<div class="ui container">
|
||||
<div class="ui column centered grid">
|
||||
<div class="ui card left go-item autumn">
|
||||
<div class="content">
|
||||
<!-- <img class="right floated mini ui image" src="/static/images/logo-white.svg"> -->
|
||||
<div class="header">
|
||||
<i class="{{item.icon}}"></i>{{item.name}}
|
||||
</div>
|
||||
<div class="meta">
|
||||
{{item.cate}}
|
||||
</div>
|
||||
<div class="description">
|
||||
{{item.summary}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="extra content">
|
||||
<p><div class="ui right pointing red basic label time"></div>正在跳转:{{item.url}}</p>
|
||||
</div>
|
||||
</div>
|
||||
<input class="url" value="{{item.url}}" hidden>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block footer_script %}
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
let time = 5;
|
||||
$('.time').html(time);
|
||||
let url = $(".url").val()
|
||||
setInterval(()=>{
|
||||
$('.autumn.go-item').transition('pulsating');
|
||||
$('.time').html(time);
|
||||
time -= 1;
|
||||
if(time==0){
|
||||
window.open(url,"_self")
|
||||
}
|
||||
},1000)
|
||||
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
{% endblock %}
|
||||
+7957
文件差异内容过多而无法显示
加载差异
+177
@@ -0,0 +1,177 @@
|
||||
{% extends 'base/base.html' %}
|
||||
<style>
|
||||
.ui .grid-item-full {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.ui .grid-item {
|
||||
width: 33%;
|
||||
box-shadow: 0.5px 0.51px 0.5px 1px #dfdada;
|
||||
}
|
||||
</style>
|
||||
{% block header %}
|
||||
<div class="ui text container">
|
||||
<a id="hitokoto" class="ui mini black pointing below label"><i class="quote left icon"></i></a>
|
||||
<h1 class="ui inverted logo header">
|
||||
<img class="ui centered image" src="/static/images/logo-white.svg" alt="Logo">
|
||||
</h1>
|
||||
<h2 class="ui inverted header"></h2>
|
||||
<div id="search-shortcuts" class="ui mini labels">
|
||||
{% for item in search_list %}
|
||||
<a class="ui black label red" data-value="{{ item.name }}" data-tooltip="{{ item.name }}"
|
||||
data-variation="mini basic" data-position="top center" data-inverted="">
|
||||
<i class="{{ item.icon }}"></i></a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="ui inverted fluid right action input" id="search-div">
|
||||
<input id="search-query" type="text" placeholder="立即搜索" autofocus="autofocus">
|
||||
<select id="search-services" class="ui compact selection dropdown" style="height: auto;">
|
||||
{% for item in search_list %}
|
||||
<option value="{{ item.name }}" data-url="{{ item.url }}">
|
||||
<i class="{{ item.icon }}"></i> {{ item.name }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<div class="ui black icon button btn-search"><i class="search icon"></i></div>
|
||||
</div>
|
||||
<div id="badges">
|
||||
<a href="/analytics.html" target="_blank">
|
||||
<img src="https://img.shields.io/badge/搜索🔍-{{ get_library_data()['search'] }}-orange?logo=arlo"></a>
|
||||
<a href="/analytics.html" target="_blank">
|
||||
<img
|
||||
src="https://img.shields.io/badge/导航🧭-{{ get_library_data()['quick'] }}-orange?logo=apacheairflow"></a>
|
||||
<a href="/analytics.html" target="_blank">
|
||||
<img src="https://img.shields.io/badge/用户🙎-{{ get_user_total()['total'] }}-red?logo=aseprite"></a>
|
||||
<a id="today-visitors" href="/analytics.html">
|
||||
<img src="https://img.shields.io/badge/%E4%BB%8A%E6%97%A5%E8%AE%BF%E5%AE%A2-{{ get_today_data()['views'] }}-green?logo=angellist"
|
||||
alt="Today Visitors"></a>
|
||||
<a id="live-visitors" href="/analytics.html">
|
||||
<img src="https://img.shields.io/badge/%E5%BD%93%E5%89%8D%E5%9C%A8%E7%BA%BF-{{ get_today_data()['online'] }}-green?logo=angellist"
|
||||
alt="Live Visitors"></a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="ui vertical stripe links segment">
|
||||
<div class="ui equal width stackable internally celled grid">
|
||||
{% for list in quick_group %}
|
||||
{% if list|length > 10 %}
|
||||
<div class="links column grid-item" style="width: 100%;box-shadow: 0.5px 0.51px 0.5px 1px #dfdada;">
|
||||
{% else %}
|
||||
<div class="links column grid-item" style="width: 33%;box-shadow: 0.5px 0.51px 0.5px 1px #dfdada;">
|
||||
{% endif %}
|
||||
<div class="ui mini top attached label">{{ list[0]['cate'] }}</div>
|
||||
<div class="ui mini labels">
|
||||
{% for item in list %}
|
||||
<a class="ui small {{ item.color }} label link" href="/go/quick/{{item.id}}.html" target="_blank" data-content="{{ item.summary }}">
|
||||
{% if item.img %}
|
||||
<image class="lazy" data-original="{{ item.img }}" />
|
||||
{% endif %}
|
||||
<i class="{{ item.icon }}"></i>
|
||||
{{ item.name }}
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block footer_script %}
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
// start
|
||||
set_search();
|
||||
$('#search-query').focus();
|
||||
$('.link').popup();
|
||||
$('.grid').masonry({
|
||||
// options
|
||||
itemSelector: '.grid-item',
|
||||
columnWidth: 3
|
||||
});
|
||||
$("img").lazyload({effect: "fadeIn",threshold :180});
|
||||
$('.btn-search').click(function () {
|
||||
let query = $('#search-query').val();
|
||||
query = encodeURIComponent(query);
|
||||
let url = $('#search-services').find("option:selected").attr("data-url")
|
||||
if (query) {
|
||||
let next_url = url.replaceAll("{query}", query)
|
||||
// console.log(next_url)
|
||||
window.open(next_url, "_black")
|
||||
} else {
|
||||
$('#search-div').addClass('error');
|
||||
$('#search-query').attr('placeholder', '请输入搜索内容');
|
||||
}
|
||||
})
|
||||
|
||||
$('#search-services ').change(function () {
|
||||
var search = $(this).children('option:selected').val()
|
||||
save_search(search)
|
||||
set_search(search)
|
||||
})
|
||||
|
||||
$('#search-services').dropdown();
|
||||
function save_search(search) {
|
||||
Cookies.set("mine-search", search);
|
||||
}
|
||||
|
||||
function get_search() {
|
||||
var search = Cookies.get("mine-search")
|
||||
// console.log(search)
|
||||
if (search === undefined) {
|
||||
search = "baidu"
|
||||
}
|
||||
// console.log(search)
|
||||
return search;
|
||||
}
|
||||
|
||||
function set_search() {
|
||||
$('#search-services').find("option").each(function (i, n) {
|
||||
if ($(n).attr("value") === get_search()) {
|
||||
$(n).attr("selected", true);
|
||||
} else {
|
||||
$(n).attr("selected", false);
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// shortcuts
|
||||
$('#search-shortcuts .ui.label').each(function () {
|
||||
$(this).click(function () {
|
||||
var search = $(this).attr('data-value')
|
||||
save_search(search)
|
||||
set_search(search)
|
||||
});
|
||||
});
|
||||
|
||||
// query input: input anything to restore
|
||||
$('#search-query').keyup(function (event) {
|
||||
if (event.key) {
|
||||
if ($('#search-query').val()) {
|
||||
$('#search-div').removeClass('error');
|
||||
$('#search-query').attr('placeholder', '立即搜索');
|
||||
}
|
||||
;
|
||||
}
|
||||
;
|
||||
});
|
||||
// query suggestions
|
||||
var sugParams = {
|
||||
"XOffset": -3, //提示框位置横向偏移量,单位px
|
||||
"YOffset": -2, //提示框位置纵向偏移量,单位px
|
||||
// "width": $('#search-query').innerWidth(), //提示框宽度,单位px
|
||||
"fontColor": "rgba(0, 0, 0, 0.87)", //提示框文字颜色
|
||||
"fontColorHI": "rgba(0, 0, 0, 0.87)", //提示框高亮选择时文字颜色
|
||||
"fontSize": "14px", //文字大小
|
||||
"fontFamily": "Lato, 'Helvetica Neue', Arial, Helvetica, sans-serif", //文字字体
|
||||
"borderColor": "rgba(34, 36, 38, 0.14902)", //提示框的边框颜色
|
||||
"bgcolorHI": "rgba(0, 0, 0, 0.05)", //提示框高亮选择的颜色
|
||||
"sugSubmit": false //选中提示框中词条时是否提交表单
|
||||
};
|
||||
BaiduSuggestion.bind('search-query', sugParams);
|
||||
});
|
||||
|
||||
</script>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,11 @@
|
||||
{% extends 'base/base.html' %}
|
||||
{% block content %}
|
||||
<div class="ui vertical stripe segment">
|
||||
<div class="ui center aligned text container">
|
||||
<h1 class="ui search header">Search</h1>
|
||||
<h2 id="next-url" class="ui header">正在跳转到页面!(>_<)</h2>
|
||||
<a class="ui basic button" href="'/'"><i class="arrow left icon"></i>回到首页</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
在新工单中引用
屏蔽一个用户