code rewritten

This commit is contained in:
bigeagle 2015-09-02 16:51:29 +08:00
commit 273918afad
66 changed files with 844 additions and 1582 deletions

6
.gitignore vendored
View File

@ -1,4 +1,6 @@
*.swp
*~
/static/tunasync.json
/static/tunet.json
/lib/tunasync.json
/lib/tunet.json
/node_modules
/dist

77
gulpfile.js Normal file
View File

@ -0,0 +1,77 @@
var gulp = require('gulp'),
babel = require('gulp-babel'),
sass = require('gulp-sass'),
rename = require('gulp-rename'),
fileinclude = require('gulp-file-include');
var path = {
HTML_TPL: './src/**/*.tpl.html',
HTML: './src/**/*.html',
HELP_MD: './src/help/*.md',
JS_FILES: './src/js/*.js',
SCSS_FILES: './src/scss/*.scss',
IMG: './src/img/*',
LIB: './lib/**/*',
ROBOTS: './src/robots.txt',
DEST: 'dist',
DEST_LIB: 'dist/static',
DEST_JS: 'dist/static/js',
DEST_CSS: 'dist/static/css',
DEST_IMG: 'dist/static/img'
};
gulp.task('copy-lib', function(){
gulp.src(path.LIB)
.pipe(gulp.dest(path.DEST_LIB));
});
gulp.task('copy-img', function(){
gulp.src(path.IMG)
.pipe(gulp.dest(path.DEST_IMG));
});
gulp.task('copy-html', function(){
gulp.src(path.ROBOTS)
.pipe(gulp.dest(path.DEST));
gulp.src(path.HELP_MD)
.pipe(gulp.dest(path.DEST+"/help"));
gulp.src(path.HTML_TPL)
.pipe(fileinclude())
.pipe(rename({
'extname': ""
}))
.pipe(rename({
'extname': ".html"
}))
.pipe(gulp.dest(path.DEST));
});
gulp.task('watch', function() {
gulp.watch(path.HTML, ['copy-html']);
gulp.watch(path.IMG, ['copy-img']);
gulp.watch(path.SCSS_FILES, ['scss-build']);
gulp.watch(path.JS_FILES, ['js-build']);
});
gulp.task('js-build', function(){
gulp.src(path.JS_FILES)
.pipe(babel())
.pipe(gulp.dest(path.DEST_JS));
});
gulp.task('scss-build', function(){
gulp.src(path.SCSS_FILES)
.pipe(
sass({outputStyle: 'compact'})
.on('error', sass.logError)
)
.pipe(gulp.dest(path.DEST_CSS));
})
gulp.task('copy', ['copy-html', 'copy-lib', 'copy-img'])
gulp.task('build', ['copy', 'js-build', 'scss-build']);
gulp.task('default', ['copy', 'js-build', 'scss-build', 'watch']);
// vim: ts=2 sts=2 sw=2 expandtab

View File

@ -1,282 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<link rel="shortcut icon" href="/static/img/favicon.png">
<title>清华大学 TUNA 镜像源</title>
<link href="/static/css/bootstrap.css" rel="stylesheet">
<link href="/static/css/style.css" rel="stylesheet">
<link href="/static/css/font-awesome.min.css" rel="stylesheet">
<link href="/static/css/spinkit.css" rel="stylesheet">
<script src="/static/js/jquery-2.1.1.min.js"></script>
<script src="/static/js/bootstrap.min.js"></script>
<script src="/static/js/markup.min.js"></script>
<script src="/static/js/marked.min.js"></script>
<style>
.clickable {
cursor: pointer
}
</style>
</head>
<body>
<div class="navbar navbar-default" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/"><img src="/static/img/logo-small.png" /> 清华大学 TUNA 镜像源</a>
</div>
<div class="navbar-collapse collapse navbar-right">
<ul class="nav navbar-nav">
<li><a href="http://www.tuna.tsinghua.edu.cn/">HOME</a></li>
<li><a href="http://www.tuna.tsinghua.edu.cn/events/">EVENTS</a></li>
<li><a href="http://www.tuna.tsinghua.edu.cn/blog/">BLOG</a></li>
<li><a href="http://www.tuna.tsinghua.edu.cn/feed.xml">RSS</a></li>
<li class="active"><a href="http://mirrors.tuna.tsinghua.edu.cn/">MIRRORS</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</div>
<div id="mirrors">
<div class="container">
<div class="row">
<div class="col-md-12">
<div>
<p>欢迎来到清华大学开源镜像网站,它由清华大学开源镜像站管理团队维护管理。</p>
<p>本站可以在校内外通过 IPv4/IPv6 使用。 <br />
本站域名有:</p>
<ul>
<li><a href="http://mirrors.tuna.tsinghua.edu.cn/">http://mirrors.tuna.tsinghua.edu.cn/</a> 支持 IPv4/IPv6</li>
<li><a href="http://mirrors.6.tuna.tsinghua.edu.cn/">http://mirrors.6.tuna.tsinghua.edu.cn/</a> 只解析 IPv6</li>
<li><a href="http://mirrors.4.tuna.tsinghua.edu.cn/">http://mirrors.4.tuna.tsinghua.edu.cn/</a> 只解析 IPv4</li>
<li><a href="http://mirrors.i.tuna.tsinghua.edu.cn/">http://mirrors.i.tuna.tsinghua.edu.cn/</a> 只解析清华 IP</li>
</ul>
</div>
<div id="thu-alert" class="alert alert-danger hidden">
<i class="glyphicon glyphicon-exclamation-sign"></i>
<strong>清华用户您好,我们发现您正在通过校外线路访问 mirrors可能是因为您设置了校外的DNS服务器
为避免产生不必要的校外流量,
建议您通过 <a href="http://mirrors.i.tuna.tsinghua.edu.cn/">http://mirrors.i.tuna.tsinghua.edu.cn/</a>
访问和使用 TUNA mirrors 资源。
</strong>
</div>
<div class="alert alert-info">
<ul>
<li><strong>本站带宽资源有限,为了您和他人可以长久使用本站服务,请勿使用迅雷下载本站内容。</strong></li>
<li><strong>若您需要通过本站建立镜像,请提前联系管理员。</strong> </li>
<li><strong>AOSP 镜像服务单 IP 并发数限制为 4。因版权原因我们无法提供 Android SDK 镜像。</strong> </li>
</ul>
<br />
如果您有任何问题或建议,请发送邮件到 issues+mirrors<span style="hidden"></span>&#64;tuna<span style="hide"></span>&#46;tsinghua<span style="hide"></span>&#46;edu<span style="hide"></span>&#46;cn
或前往 <a href="https://issues.tuna.tsinghua.edu.cn/?queue=mirrors">https://issues.tuna.tsinghua.edu.cn/?queue=mirrors</a> 反馈。<br />
If you have any issues, please email issues+mirrors<span style="hidden"></span>&#64;tuna<span style="hide"></span>&#46;tsinghua<span style="hide"></span>&#46;edu<span style="hide"></span>&#46;cn,
or submit a ticket via <a href="https://issues.tuna.tsinghua.edu.cn/?queue=mirrors">https://issues.tuna.tsinghua.edu.cn/?queue=mirrors</a>.<br />
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 table-responsive">
<h3># 镜像源列表 </h3>
<table class="table">
<thead>
<tr>
<th>Name</th>
<th>Last Update</th>
<th>Status</th>
</tr>
</thead>
<tbody id="mirror-list">
</tbody>
</table>
</div>
</div>
</div><!--/container -->
</div><!--/service -->
<div id="footerwrap">
<div class="container">
<div class="row">
<div class="col-lg-4">
<p>清华大学 TUNA 协会最初叫清华大学学生网管会,其前身为清华大学电脑协会,是由清华大学网络技术和开源软件爱好者、技术宅组成的团体。</p>
<p>本站相关源码可在 <a href="https://github.com/tuna/tunasync"><em>这里(镜像管理器)</em></a><a href="https://github.com/tuna/mirror-web"><em>这里(镜像站网页)</em></a> 获取。</p>
</div>
<div class="col-lg-4">
<h4>Contact Us</h4>
<div>
<ul class="social">
<li>
<a href="https://groups.google.com/forum/#!forum/tuna-general"><i class="fa fa-envelope"></i> Mailing List</a>
</li>
<li>
IRC: <a href="https://webchat.freenode.net/?channels=%23tuna">#tuna at freenode</a>
</li>
<li>
<a href="https://github.com/tuna/"><i class="fa fa-github"></i> GitHub </a>
</li>
<li>
<a href="https://secure.flickr.com/groups/tuna/"><i class="fa fa-flickr"></i> Flickr</a>
</li>
<li>
<a href="http://weibo.com/u/5402274706"><i class="fa fa-weibo"></i> 新浪微博</a>
</li>
<li>
<a href="http://page.renren.com/601908241"><i class="fa fa-renren"></i> 人人公共主页</a>
</li>
</ul>
</div>
</div>
<div class="col-lg-4">
<img class="img-responsive" src="/static/img/logo-white.png" />
</div>
</div><!--/row -->
</div><!--/container -->
</div><!--/footerwrap -->
<div id="HelpModal" class="modal fade" tabindex="-1" role="dialog">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="exampleModalLabel">Help Message</h4>
</div><!--modal-header-->
<div class="modal-body">
</div>
</div><!--modal-content-->
</div><!--modal-dialog-->
</div><!--/HelpModal-->
</body>
<template id="spinner">
<div class="sk-spinner sk-spinner-wave">
<div class="sk-rect1"></div>
<div class="sk-rect2"></div>
<div class="sk-rect3"></div>
<div class="sk-rect4"></div>
<div class="sk-rect5"></div>
</div>
</template>
<script id="template" type="x-tmpl-markup">
{{mirrors}}
<tr>
<td>
<a href="/{{name}}">{{name}}</a>
{{ if is_new }}<span class="label label-new">new</span>{{/if}}
{{if help}}<i class="fa fa-question-circle clickable" data-toggle2="tooltip" data-toggle="modal" data-target="#HelpModal" data-help="{{help}}" data-placement="right" title="Help"></i>{{/if}}
</td>
<td>{{last_update}}</td>
<td><span class="label label-status {{label}}">{{status}}<span></td>
</tr>
{{/mirrors}}
</script>
<script type="text/javascript">
$(document).ready(function(){
var mir_tmpl = $("#template").text(),
label_map = {
'unknown': 'label-default',
'syncing': 'label-info',
'success': 'label-success',
'fail': 'label-warning'
};
var help_page = {
'AOSP': '/wiki/aosp.md',
'archlinuxcn': '/wiki/archlinuxcn.md',
'homebrew': '/wiki/homebrew.md',
'linux.git': '/wiki/linux.md',
'nodesource': '/wiki/nodesource.md',
'pypi': "wiki/pypi.md",
'docker': "wiki/docker.md",
'raspbian': 'wiki/raspbian.md',
'repo-ck': 'wiki/repo-ck.md',
'rpmfusion': 'wiki/rpmfusion.md',
'ubuntu': 'wiki/ubuntu.md',
'lxc-images': 'wiki/lxc-images.md',
'hackage': 'wiki/hackage.md',
'npm': 'wiki/npm.md'
};
var new_mirrors = {
'OpenBSD': true,
'hackage': true,
'voidlinux': true,
'npm': true
};
var unlisted = [
{
'status': 'success',
'last_update': "-",
'name': 'npm',
'upstream': 'https://registry.npmjs.org/'
}
];
$('#HelpModal').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget), // Button that triggered the modal
help_url = button.data('help'),
modal = $(this),
modal_body = modal.find('.modal-body'),
spinner = $('template#spinner');
modal_body.html(spinner.html())
$.get(help_url, function(data) {
if (help_url.match(/\.md$/)) {
data = marked(data)
}
modal_body.html(data)
})
});
window.refreshMirrorList = function() {
$.getJSON("/static/tunasync.json", function(status_data) {
var mirrors = [], mir_data = $.merge(status_data, unlisted);
mir_data.sort(function(a, b){return a.name < b.name ? -1: 1;});
for(var k in mir_data) {
var d = mir_data[k];
d['label'] = label_map[d['status']];
d['help'] = help_page[d['name']];
d['is_new'] = new_mirrors[d['name']];
// Strip the second component of last_update
d['last_update'] = d['last_update'].replace(/(\d\d:\d\d):\d\d/, '$1');
mirrors.push(d);
}
var result = Mark.up(mir_tmpl, {mirrors: mirrors});
$('#mirror-list').html(result);
$('#mirror-list i[data-toggle2="tooltip"]').tooltip();
});
setTimeout(refreshMirrorList, 10000);
}
refreshMirrorList();
$.getJSON("/static/tunet.json", function(alert) {
if (alert) {
$('#thu-alert').removeClass('hidden');
};
});
});
</script>
</html>
<!--
vim: ts=2 sts=2 sw=2 noexpandtab
-->

View File

Before

Width:  |  Height:  |  Size: 197 KiB

After

Width:  |  Height:  |  Size: 197 KiB

View File

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 62 KiB

5
lib/js/jquery.min.js vendored Normal file

File diff suppressed because one or more lines are too long

27
package.json Normal file
View File

@ -0,0 +1,27 @@
{
"name": "mirror-web",
"version": "1.0.0",
"description": "TUNA mirror site",
"main": "index.html",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/tuna/mirror-web.git"
},
"author": "Justin Wong",
"license": "AGPL-3.0",
"bugs": {
"url": "https://github.com/tuna/mirror-web/issues"
},
"homepage": "https://github.com/tuna/mirror-web#readme",
"dependencies": {
"gulp": "^3.9.0",
"gulp-babel": "^5.2.1",
"gulp-file-include": "^0.13.7",
"gulp-rename": "^1.2.2",
"node-sass": "^3.3.2",
"gulp-sass": "^2.0.4"
}
}

7
src/help/AUR.md Normal file
View File

@ -0,0 +1,7 @@
# AUR 镜像使用帮助
修改 `/etc/yaourtrc`,去掉 `# AURURL` 的注释,修改为
```
AURURL="https://aur.tuna.tsinghua.edu.cn"
```

40
src/help/index.tpl.html Normal file
View File

@ -0,0 +1,40 @@
<!DOCTYPE html>
<html>
@@include('../include/_head.html')
<body>
@@include('../include/_nav.html')
<div id="help-page">
<div class="container">
<div class="row">
<div class="col-md-2 hidden-xs">
<ul class="nav nav-pills nav-stacked" id="help-nav">
</ul>
</div><!-- sidenave -->
<div class="col-md-10">
<div id="spinner">
<i class="fa fa-spinner fa-spin"></i>
<div>载入中</div>
</div>
<div id="help-content"></div>
</div><!-- help content -->
</div>
</div><!--/container -->
</div><!--/mirrors -->
@@include('../include/_footer.html')
</body>
<script id="help-nav-template" type="x-tmpl-markup">
{{help_navs}}
<li id="help-nav-item-{{name}}" data-help-item="{{name}}"><a href="#{{name}}">{{name}}</a></li>
{{/help_navs}}
</script>
<script src="/static/js/help.js"></script>
</body>
</html>
<!--
vim: ts=2 sts=2 sw=2 noexpandtab
-->

View File

@ -48,10 +48,28 @@ pi@raspberrypi ~ $ sudo nano /etc/apt/sources.list
删除原文件所有内容,用以下内容取代:
```
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ wheezy main non-free contrib
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ wheezy main non-free contrib
```
<form class="form-inline">
<div class="form-group">
<label>选择你的Debian版本: </label>
<select class="form-control" id="release-select">
<option data-release="wheezy">Debian 7 (wheezy)</option>
<option data-release="jessie" selected>Debian 8 (jessie)</option>
</select>
</div>
</form>
<script id="apt-template" type="x-tmpl-markup">
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ {{release_name}} main non-free contrib
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ {{release_name}} main non-free contrib
</script>
<p></p>
<pre>
<code id="apt-content">
</code>
</pre>
注意:网址末尾的`raspbian`重复两次是必须的。因为Raspbian的仓库中除了APT软件源还包含其他代码。APT软件源不在仓库的根目录而在`raspbian/`子目录下。

41
src/help/ubuntu.md Normal file
View File

@ -0,0 +1,41 @@
Ubuntu 镜像使用帮助
===================
Ubuntu 的软件源配置文件是
`/etc/apt/sources.list`。将系统自带的该文件做个备份,将该文件替换为下面内容,即可使用
TUNA 的软件源镜像。
<form class="form-inline">
<div class="form-group">
<label>选择你的ubuntu版本: </label>
<select class="form-control" id="release-select">
<option data-release="lucid">10.04 LTS</option>
<option data-release="precise">12.04 LTS</option>
<option data-release="trusty" selected>14.04 LTS</option>
<option data-release="utopic">14.10</option>
<option data-release="vivid">15.04</option>
<option data-release="wily">15.10</option>
</select>
</div>
</form>
<script id="apt-template" type="x-tmpl-markup">
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ {{release_name}} main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ {{release_name}}-backports main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ {{release_name}}-proposed main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ {{release_name}}-security main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ {{release_name}}-updates main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ {{release_name}} main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ {{release_name}}-backports main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ {{release_name}}-proposed main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ {{release_name}}-security main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ {{release_name}}-updates main multiverse restricted universe
</script>
<p></p>
<pre>
<code id="apt-content">
</code>
</pre>

View File

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

View File

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

40
src/include/_footer.html Normal file
View File

@ -0,0 +1,40 @@
<div id="footerwrap">
<div class="container">
<div class="row">
<div class="col-lg-4">
<p>清华大学 TUNA 协会最初叫清华大学学生网管会,其前身为清华大学电脑协会,是由清华大学网络技术和开源软件爱好者、技术宅组成的团体。</p>
<p>本站相关源码可在 <a href="https://github.com/tuna/tunasync"><em>这里(镜像管理器)</em></a><a href="https://github.com/tuna/mirror-web"><em>这里(镜像站网页)</em></a> 获取。</p>
</div>
<div class="col-lg-4">
<h4>Contact Us</h4>
<div>
<ul class="social">
<li>
<a href="https://groups.google.com/forum/#!forum/tuna-general"><i class="fa fa-envelope"></i> Mailing List</a>
</li>
<li>
IRC: <a href="https://webchat.freenode.net/?channels=%23tuna">#tuna at freenode</a>
</li>
<li>
<a href="https://github.com/tuna/"><i class="fa fa-github"></i> GitHub </a>
</li>
<li>
<a href="https://secure.flickr.com/groups/tuna/"><i class="fa fa-flickr"></i> Flickr</a>
</li>
<li>
<a href="http://weibo.com/u/5402274706"><i class="fa fa-weibo"></i> 新浪微博</a>
</li>
<li>
<a href="http://page.renren.com/601908241"><i class="fa fa-renren"></i> 人人公共主页</a>
</li>
</ul>
</div>
</div>
<div class="col-lg-4">
<img class="img-responsive" src="/static/img/logo-white.png" />
</div>
</div><!--/row -->
</div><!--/container -->
</div><!--/footerwrap -->

16
src/include/_head.html Normal file
View File

@ -0,0 +1,16 @@
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<link rel="shortcut icon" href="/static/img/favicon.png">
<title>清华大学 TUNA 镜像源</title>
<link rel="stylesheet" href="/static/css/bootstrap.css">
<link rel="stylesheet" href="/static/css/font-awesome.min.css" >
<link rel="stylesheet" href="/static/css/style.css">
<script src="/static/js/jquery.min.js"></script>
<script src="/static/js/bootstrap.min.js"></script>
<script src="/static/js/markup.min.js"></script>
<script src="/static/js/marked.min.js"></script>
</head>

22
src/include/_nav.html Normal file
View File

@ -0,0 +1,22 @@
<div class="navbar navbar-default" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/"><img src="/static/img/logo-small.png" /> 清华大学 TUNA 镜像源</a>
</div>
<div class="navbar-collapse collapse navbar-right">
<ul class="nav navbar-nav">
<li><a href="http://www.tuna.tsinghua.edu.cn/">HOME</a></li>
<li><a href="http://www.tuna.tsinghua.edu.cn/events/">EVENTS</a></li>
<li><a href="http://www.tuna.tsinghua.edu.cn/blog/">BLOG</a></li>
<li><a href="http://www.tuna.tsinghua.edu.cn/feed.xml">RSS</a></li>
<li class="active"><a href="http://mirrors.tuna.tsinghua.edu.cn/">MIRRORS</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</div>

84
src/index.tpl.html Normal file
View File

@ -0,0 +1,84 @@
<!DOCTYPE html>
<html>
@@include('./include/_head.html')
<body>
@@include('./include/_nav.html')
<div id="mirrors">
<div class="container">
<div class="row">
<div class="col-md-12">
<div>
<p>欢迎来到清华大学开源镜像网站,它由清华大学开源镜像站管理团队维护管理。你可以通过不同域名选定网络线路。</p>
<ul>
<li><a href="http://mirrors.tuna.tsinghua.edu.cn/">http://mirrors.tuna.tsinghua.edu.cn/</a> 支持 IPv4/IPv6</li>
<li><a href="http://mirrors.6.tuna.tsinghua.edu.cn/">http://mirrors.6.tuna.tsinghua.edu.cn/</a> 只解析 IPv6</li>
<li><a href="http://mirrors.4.tuna.tsinghua.edu.cn/">http://mirrors.4.tuna.tsinghua.edu.cn/</a> 只解析 IPv4</li>
<li><a href="http://mirrors.i.tuna.tsinghua.edu.cn/">http://mirrors.i.tuna.tsinghua.edu.cn/</a> 只解析清华 IP</li>
</ul>
</div>
<div id="thu-alert" class="alert alert-danger hidden">
<i class="glyphicon glyphicon-exclamation-sign"></i>
<strong>清华用户您好,我们发现您正在通过校外线路访问 mirrors可能是因为您设置了校外的DNS服务器
为避免产生不必要的校外流量,
建议您通过 <a href="http://mirrors.i.tuna.tsinghua.edu.cn/">http://mirrors.i.tuna.tsinghua.edu.cn/</a>
访问和使用 TUNA mirrors 资源。
</strong>
</div>
<div class="alert alert-info">
<ul>
<li><strong>本站带宽资源有限,为了您和他人可以长久使用本站服务,请勿使用迅雷下载本站内容。</strong></li>
<li><strong>若您需要通过本站建立镜像,请提前联系管理员。</strong> </li>
<li><strong>AOSP 镜像服务单 IP 并发数限制为 4。因版权原因我们无法提供 Android SDK 镜像。</strong> </li>
</ul>
<br />
如果您有任何问题或建议,请发送邮件到
issues+mirrors<span style="hidden"></span>&#64;tuna<span style="hide"></span>&#46;tsinghua<span style="hide"></span>&#46;edu<span style="hide"></span>&#46;cn
或前往 <a href="https://issues.tuna.tsinghua.edu.cn/?queue=mirrors">https://issues.tuna.tsinghua.edu.cn/?queue=mirrors</a> 反馈。<br />
If you have any issues, please email
issues+mirrors<span style="hidden"></span>&#64;tuna<span style="hide"></span>&#46;tsinghua<span style="hide"></span>&#46;edu<span style="hide"></span>&#46;cn,
or submit a ticket via <a href="https://issues.tuna.tsinghua.edu.cn/?queue=mirrors">https://issues.tuna.tsinghua.edu.cn/?queue=mirrors</a>.<br />
</div>
</div>
</div><!--/mirror-list-row-->
<div class="row">
<div class="col-md-12 table-responsive">
<h3># 镜像源列表 </h3>
<table class="table">
<thead>
<tr>
<th>Name</th>
<th>Last Update</th>
<th>Status</th>
</tr>
</thead>
<tbody id="mirror-list">
</tbody>
</table>
</div>
</div><!--/mirror-list-row-->
</div><!--/container -->
</div><!--/mirrors -->
@@include('./include/_footer.html')
</body>
<script id="template" type="x-tmpl-markup">
{{mirrors}}
<tr>
<td>
<a href="{{if url}}{{url}}{{else}}/{{name}}{{/if}}">{{name}}</a>
{{if is_new}}<span class="label label-new">new</span>{{/if}}
{{if help}}<a href="/help/#{{name}}"><i class="fa fa-question-circle" title="Help"></i></a>{{/if}}
</td>
<td>{{last_update}}</td>
<td><span class="label label-status {{label}}">{{status}}<span></td>
</tr>
{{/mirrors}}
</script>
<script src="/static/js/index.js"></script>
</body>
</html>
<!--
vim: ts=2 sts=2 sw=2 noexpandtab
-->

100
src/js/help.js Normal file
View File

@ -0,0 +1,100 @@
$(document).ready(() => {
var M = (url) => {
return () => {
$('#spinner').removeClass('hidden');
$('#help-content').text("");
$.get(url, function(data) {
var rendered = "";
if (url.match(/\.md$/)) {
rendered = marked(data);
}
$("#help-content")
.html(rendered)
.find('table')
.addClass("table table-bordered table-striped");
$('#spinner').addClass('hidden');
});
};
};
var AptHelp = (url) => {
return () => {
$('#spinner').removeClass('hidden');
$('#help-content').text("");
var apt_template;
var update_apt_file = () => {
var release_name = $("#release-select option:selected").attr('data-release');
var apt_content = Mark.up(
apt_template, {release_name: release_name}
);
$("#apt-content").html(apt_content);
};
$.get(url, function(data) {
var rendered = "";
if (url.match(/\.md$/)) {
rendered = marked(data);
}
$("#help-content")
.html(rendered)
.find('table')
.addClass("table table-bordered table-striped");
$('#spinner').addClass('hidden');
apt_template = $.trim($("#apt-template").text());
update_apt_file();
$("#release-select").on('change', update_apt_file);
});
};
};
var nav_tmpl = $('#help-nav-template').text(),
help = {
'AOSP': M('/help/aosp.md'),
'archlinuxcn': M('/help/archlinuxcn.md'),
'homebrew': M('/help/homebrew.md'),
'linux.git': M('/help/linux.md'),
'nodesource': M('/help/nodesource.md'),
'pypi': M("/help/pypi.md"),
'docker': M("/help/docker.md"),
'raspbian': AptHelp('/help/raspbian.md'),
'repo-ck': M('/help/repo-ck.md'),
'rpmfusion': M('/help/rpmfusion.md'),
'ubuntu': AptHelp('/help/ubuntu.md'),
'lxc-images': M('/help/lxc-images.md'),
'hackage': M('/help/hackage.md'),
'npm': M('/help/npm.md'),
'AUR': M('/help/AUR.md')
},
help_item = window.location.hash.replace('#', '');
var showHelp = (name) => {
var help_func = help[name];
if (help_func != undefined)
help_func();
};
var help_nav = Mark.up(nav_tmpl, () => {
let nav = [];
for (let k in help) {
nav.push({name: k});
}
nav.sort((a, b) => { return a.name < b.name ? -1: 1 });
return {help_navs: nav};
}());
$('#help-nav').html(help_nav);
showHelp(help_item);
$(`#help-nav-item-${help_item}`).addClass('active');
$('#help-nav').on('click', 'li', function() {
// `this` cannot be used with arrow function
let help_item = $(this).attr('data-help-item');
showHelp(help_item);
$(this)
.parent().children('li')
.removeClass('active');
$(this).addClass('active');
});
});
// vim: ts=2 sts=2 sw=2 noexpandtab

88
src/js/index.js Normal file
View File

@ -0,0 +1,88 @@
$(document).ready(() => {
var mir_tmpl = $("#template").text(),
label_map = {
'unknown': 'label-default',
'syncing': 'label-info',
'success': 'label-success',
'fail': 'label-warning'
},
has_help = {
'AOSP': true,
'archlinuxcn': true,
'homebrew': true,
'linux.git': true,
'nodesource': true,
'pypi': true,
'docker': true,
'raspbian': true,
'repo-ck': true,
'rpmfusion': true,
'ubuntu': true,
'lxc-images': true,
'hackage': true,
'npm': true,
'AUR': true
},
new_mirrors = {
'OpenBSD': true,
'hackage': true,
'kodi': true,
'qt': true,
'npm': true
},
unlisted = [
{
'status': 'success',
'last_update': "-",
'name': 'npm',
'upstream': 'https://registry.npmjs.org/'
},
{
'status': 'success',
'last_update': '-',
'name': "AUR",
'url': 'https://aur.tuna.tsinghua.edu.cn/',
'upstream': 'https://aur.archlinux.org/'
}
],
options = {
'AOSP': {
'url': "/help/#AOSP",
}
};
window.refreshMirrorList = () => {
$.getJSON("/static/tunasync.json", (status_data) => {
var mirrors = [], mir_data = $.merge(status_data, unlisted);
mir_data.sort((a, b) => { return a.name < b.name ? -1: 1 });
for(var k in mir_data) {
var d = mir_data[k];
if (options[d['name']] != undefined ) {
d = $.extend(d, options[d['name']]);
}
d['label'] = label_map[d['status']];
d['help'] = has_help[d['name']];
d['is_new'] = new_mirrors[d['name']];
// Strip the second component of last_update
d['last_update'] = d['last_update'].replace(/(\d\d:\d\d):\d\d/, '$1');
mirrors.push(d);
}
var result = Mark.up(mir_tmpl, {mirrors: mirrors});
$('#mirror-list').html(result);
});
setTimeout(refreshMirrorList, 10000);
}
refreshMirrorList();
$.getJSON("/static/tunet.json", (to_alert) => {
if (to_alert) {
$('#thu-alert').removeClass('hidden');
};
});
});
// vim: ts=2 sts=2 sw=2 noexpandtab

View File

@ -0,0 +1,75 @@
/* ################################################################
BOOTSTRAP MODIFICATIONS & TWEAKS
################################################################# */
.navbar {
padding-top: 15px;
margin-bottom: 0px;
}
.navbar-default {
background-color: white;
border-color: transparent;
.navbar-nav > li.active > a {
color: $color_thu_purple;
border-bottom: 2px solid $color_thu_purple;
}
.navbar-nav > li > a {
color: $color_secondary;
background: transparent !important;
font-weight: 700;
font-size: 12px;
&:hover, &:focus {
color: $color_primary !important;
background: transparent !important;
}
}
}
.navbar-brand {
font-weight: 900;
padding: 0px;
line-height: 50px;
height: 50px;
img {
margin-right: 5px;
}
}
.navbar-header .navbar-brand {
color: $color_secondary;
}
.dropdown-menu {
background: $color_secondary ;
}
.dropdown-menu > li > a {
color: white;
font-weight: 700;
font-size: 12px;
}
.mtb {
margin-top: 40px;
margin-bottom: 80px;
}
.mb {
margin-bottom: 60px;
}
.mt {
margin-top: 60px;
}
.hline {
border-bottom: 1px solid $color_secondary ;
}
.hline-w {
border-bottom: 1px solid #ffffff;
margin-bottom: 25px;
}

72
src/scss/_structure.scss Normal file
View File

@ -0,0 +1,72 @@
/* ################################################################
1. GENERAL STRUCTURES
################################################################# */
* {
margin: 0;
// padding: 0px;
}
body {
background: #ffffff;
margin: 0;
height: 100%;
color: $color_secondary;
font-family: $font_default;
font-weight: 400;
}
h1, h2, h3, h4, h5, h6 {
font-weight: 700;
}
ul {
padding-left: 1em;
}
p {
padding: 0;
margin-bottom: 12px;
font-weight: 400;
font-size: 14px;
line-height: 24px;
color: $color_secondary ;
margin-top: 10px;
}
img {
height: auto;
max-width: 100%;
}
a {
color:$color_link;
padding: 0;
margin: 0;
text-decoration: none;
-webkit-transition: background-color .4s linear, color .4s linear;
-moz-transition: background-color .4s linear, color .4s linear;
-o-transition: background-color .4s linear, color .4s linear;
-ms-transition: background-color .4s linear, color .4s linear;
transition: background-color .4s linear, color .4s linear;
}
a:hover, a:focus {
text-decoration: none;
color:$color_link_hover;
}
::-moz-selection {
color: #fff;
text-shadow:none;
background:$color_secondary;
}
::selection {
color: #fff;
text-shadow:none;
background:$color_secondary;
}
.centered {
text-align: center
}

124
src/scss/style.scss Normal file
View File

@ -0,0 +1,124 @@
/* ################################################################
Author: Carlos Alvarez
URL: http://alvarez.is
Project Name: SOLID - Bootstrap 3 Theme
Version: 1.0
URL: http://alvarez.is
################################################################# */
$color_thu_purple: #82318E;
$color_light_grey: #888;
$color_grey: #555;
$color_primary: $color_thu_purple;
$color_primary_light: #d8aff6;
$color_primary_rgb: 92,48,125;
$color_secondary: #384452;
$color_link: #088acb;
$color_link_hover: #62bbe7;
$color_footer_heading: #ffffff;
$color_footer_content: #bfc9d3;
$color_navbar_bg: #d3d3d3;
$font_default: 'Lato', 'Heiti SC', 'Hiragino Sans GB', 'STHeiti', 'Source Han Sans CN', 'WenQuanYi Zen Hei', 'WenQuanYi Micro Hei', '微软雅黑', sans-serif ;
@import "Lato";
@import "structure";
@import "bootstrap-mod";
#thu-alert {
padding-left: 50px;
position: relative;
.glyphicon {
font-size: 30px;
left: 10px;
top: 20px;
position: absolute;
}
}
#headerwrap {
padding-top: 40px;
padding-bottom: 0px;
h1 {
color: $color_primary ;
margin-bottom: 15px;
}
h3, h5 {
color: $color_primary ;
font-weight: 400;
margin-top: 10px;
}
.img-responsive {
margin: 0 auto;
}
}
/* Services Wrap */
#mirrors {
tbody {
tr:hover {
background-color: #e0f3fc;
}
td {
padding: 4px 8px;
border-top: none;
}
font-size: 12pt;
.label.label-new {
padding: .1em .2em;
vertical-align: 40%;
text-shadow: 1px 1px #888;
background-color: #3aa0e6;
}
.label.label-status {
font-size: 10pt;
}
.fa-question-circle {
color: #234961;
}
}
}
#help-page {
margin-top: 40px;
margin-bottom: 40px;
#spinner {
padding-top: 60px;
text-align: center;
font-size: 36px;
i {
font-size: 72px;
}
}
}
/* Footer */
#footerwrap {
color: $color_footer_content;
margin-top: 100px;
padding-top: 60px;
padding-bottom: 60px;
background: $color_secondary;
p {
color: $color_footer_content;
}
h4 {
color: $color_footer_heading;
}
i, i:hover, a, a:hover {
color: $color_footer_content;
}
}
.spacing {
margin-top: 40px;
margin-bottom: 40px;
}
.clickable {
cursor: pointer;
}

View File

@ -1,758 +0,0 @@
/*
* Usage:
*
* <div class="sk-spinner sk-spinner-rotating-plane"></div>
*
*/
.sk-spinner-rotating-plane.sk-spinner {
width: 30px;
height: 30px;
background-color: #333;
margin: 0 auto;
-webkit-animation: sk-rotatePlane 1.2s infinite ease-in-out;
animation: sk-rotatePlane 1.2s infinite ease-in-out; }
@-webkit-keyframes sk-rotatePlane {
0% {
-webkit-transform: perspective(120px) rotateX(0deg) rotateY(0deg);
transform: perspective(120px) rotateX(0deg) rotateY(0deg); }
50% {
-webkit-transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg);
transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg); }
100% {
-webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg); } }
@keyframes sk-rotatePlane {
0% {
-webkit-transform: perspective(120px) rotateX(0deg) rotateY(0deg);
transform: perspective(120px) rotateX(0deg) rotateY(0deg); }
50% {
-webkit-transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg);
transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg); }
100% {
-webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg); } }
/*
* Usage:
*
* <div class="sk-spinner sk-spinner-double-bounce">
* <div class="sk-double-bounce1"></div>
* <div class="sk-double-bounce2"></div>
* </div>
*
*/
.sk-spinner-double-bounce.sk-spinner {
width: 40px;
height: 40px;
position: relative;
margin: 0 auto; }
.sk-spinner-double-bounce .sk-double-bounce1, .sk-spinner-double-bounce .sk-double-bounce2 {
width: 100%;
height: 100%;
border-radius: 50%;
background-color: #333;
opacity: 0.6;
position: absolute;
top: 0;
left: 0;
-webkit-animation: sk-doubleBounce 2s infinite ease-in-out;
animation: sk-doubleBounce 2s infinite ease-in-out; }
.sk-spinner-double-bounce .sk-double-bounce2 {
-webkit-animation-delay: -1s;
animation-delay: -1s; }
@-webkit-keyframes sk-doubleBounce {
0%, 100% {
-webkit-transform: scale(0);
transform: scale(0); }
50% {
-webkit-transform: scale(1);
transform: scale(1); } }
@keyframes sk-doubleBounce {
0%, 100% {
-webkit-transform: scale(0);
transform: scale(0); }
50% {
-webkit-transform: scale(1);
transform: scale(1); } }
/*
* Usage:
*
* <div class="sk-spinner sk-spinner-wave">
* <div class="sk-rect1"></div>
* <div class="sk-rect2"></div>
* <div class="sk-rect3"></div>
* <div class="sk-rect4"></div>
* <div class="sk-rect5"></div>
* </div>
*
*/
.sk-spinner-wave.sk-spinner {
margin: 0 auto;
width: 50px;
height: 30px;
text-align: center;
font-size: 10px; }
.sk-spinner-wave div {
background-color: #333;
height: 100%;
width: 6px;
display: inline-block;
-webkit-animation: sk-waveStretchDelay 1.2s infinite ease-in-out;
animation: sk-waveStretchDelay 1.2s infinite ease-in-out; }
.sk-spinner-wave .sk-rect2 {
-webkit-animation-delay: -1.1s;
animation-delay: -1.1s; }
.sk-spinner-wave .sk-rect3 {
-webkit-animation-delay: -1s;
animation-delay: -1s; }
.sk-spinner-wave .sk-rect4 {
-webkit-animation-delay: -0.9s;
animation-delay: -0.9s; }
.sk-spinner-wave .sk-rect5 {
-webkit-animation-delay: -0.8s;
animation-delay: -0.8s; }
@-webkit-keyframes sk-waveStretchDelay {
0%, 40%, 100% {
-webkit-transform: scaleY(0.4);
transform: scaleY(0.4); }
20% {
-webkit-transform: scaleY(1);
transform: scaleY(1); } }
@keyframes sk-waveStretchDelay {
0%, 40%, 100% {
-webkit-transform: scaleY(0.4);
transform: scaleY(0.4); }
20% {
-webkit-transform: scaleY(1);
transform: scaleY(1); } }
/*
* Usage:
*
* <div class="sk-spinner sk-spinner-wandering-cubes">
* <div class="sk-cube1"></div>
* <div class="sk-cube2"></div>
* </div>
*
*/
.sk-spinner-wandering-cubes.sk-spinner {
margin: 0 auto;
width: 32px;
height: 32px;
position: relative; }
.sk-spinner-wandering-cubes .sk-cube1, .sk-spinner-wandering-cubes .sk-cube2 {
background-color: #333;
width: 10px;
height: 10px;
position: absolute;
top: 0;
left: 0;
-webkit-animation: sk-wanderingCubeMove 1.8s infinite ease-in-out;
animation: sk-wanderingCubeMove 1.8s infinite ease-in-out; }
.sk-spinner-wandering-cubes .sk-cube2 {
-webkit-animation-delay: -0.9s;
animation-delay: -0.9s; }
@-webkit-keyframes sk-wanderingCubeMove {
25% {
-webkit-transform: translateX(42px) rotate(-90deg) scale(0.5);
transform: translateX(42px) rotate(-90deg) scale(0.5); }
50% {
/* Hack to make FF rotate in the right direction */
-webkit-transform: translateX(42px) translateY(42px) rotate(-179deg);
transform: translateX(42px) translateY(42px) rotate(-179deg); }
50.1% {
-webkit-transform: translateX(42px) translateY(42px) rotate(-180deg);
transform: translateX(42px) translateY(42px) rotate(-180deg); }
75% {
-webkit-transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5);
transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5); }
100% {
-webkit-transform: rotate(-360deg);
transform: rotate(-360deg); } }
@keyframes sk-wanderingCubeMove {
25% {
-webkit-transform: translateX(42px) rotate(-90deg) scale(0.5);
transform: translateX(42px) rotate(-90deg) scale(0.5); }
50% {
/* Hack to make FF rotate in the right direction */
-webkit-transform: translateX(42px) translateY(42px) rotate(-179deg);
transform: translateX(42px) translateY(42px) rotate(-179deg); }
50.1% {
-webkit-transform: translateX(42px) translateY(42px) rotate(-180deg);
transform: translateX(42px) translateY(42px) rotate(-180deg); }
75% {
-webkit-transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5);
transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5); }
100% {
-webkit-transform: rotate(-360deg);
transform: rotate(-360deg); } }
/*
* Usage:
*
* <div class="sk-spinner sk-spinner-pulse"></div>
*
*/
.sk-spinner-pulse.sk-spinner {
width: 40px;
height: 40px;
margin: 0 auto;
background-color: #333;
border-radius: 100%;
-webkit-animation: sk-pulseScaleOut 1s infinite ease-in-out;
animation: sk-pulseScaleOut 1s infinite ease-in-out; }
@-webkit-keyframes sk-pulseScaleOut {
0% {
-webkit-transform: scale(0);
transform: scale(0); }
100% {
-webkit-transform: scale(1);
transform: scale(1);
opacity: 0; } }
@keyframes sk-pulseScaleOut {
0% {
-webkit-transform: scale(0);
transform: scale(0); }
100% {
-webkit-transform: scale(1);
transform: scale(1);
opacity: 0; } }
/*
* Usage:
*
* <div class="sk-spinner sk-spinner-chasing-dots">
* <div class="sk-dot1"></div>
* <div class="sk-dot2"></div>
* </div>
*
*/
.sk-spinner-chasing-dots.sk-spinner {
margin: 0 auto;
width: 40px;
height: 40px;
position: relative;
text-align: center;
-webkit-animation: sk-chasingDotsRotate 2s infinite linear;
animation: sk-chasingDotsRotate 2s infinite linear; }
.sk-spinner-chasing-dots .sk-dot1, .sk-spinner-chasing-dots .sk-dot2 {
width: 60%;
height: 60%;
display: inline-block;
position: absolute;
top: 0;
background-color: #333;
border-radius: 100%;
-webkit-animation: sk-chasingDotsBounce 2s infinite ease-in-out;
animation: sk-chasingDotsBounce 2s infinite ease-in-out; }
.sk-spinner-chasing-dots .sk-dot2 {
top: auto;
bottom: 0px;
-webkit-animation-delay: -1s;
animation-delay: -1s; }
@-webkit-keyframes sk-chasingDotsRotate {
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg); } }
@keyframes sk-chasingDotsRotate {
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg); } }
@-webkit-keyframes sk-chasingDotsBounce {
0%, 100% {
-webkit-transform: scale(0);
transform: scale(0); }
50% {
-webkit-transform: scale(1);
transform: scale(1); } }
@keyframes sk-chasingDotsBounce {
0%, 100% {
-webkit-transform: scale(0);
transform: scale(0); }
50% {
-webkit-transform: scale(1);
transform: scale(1); } }
/*
* Usage:
*
* <div class="sk-spinner sk-spinner-three-bounce">
* <div class="sk-bounce1"></div>
* <div class="sk-bounce2"></div>
* <div class="sk-bounce3"></div>
* </div>
*
*/
.sk-spinner-three-bounce.sk-spinner {
margin: 0 auto;
width: 70px;
text-align: center; }
.sk-spinner-three-bounce div {
width: 18px;
height: 18px;
background-color: #333;
border-radius: 100%;
display: inline-block;
-webkit-animation: sk-threeBounceDelay 1.4s infinite ease-in-out;
animation: sk-threeBounceDelay 1.4s infinite ease-in-out;
/* Prevent first frame from flickering when animation starts */
-webkit-animation-fill-mode: both;
animation-fill-mode: both; }
.sk-spinner-three-bounce .sk-bounce1 {
-webkit-animation-delay: -0.32s;
animation-delay: -0.32s; }
.sk-spinner-three-bounce .sk-bounce2 {
-webkit-animation-delay: -0.16s;
animation-delay: -0.16s; }
@-webkit-keyframes sk-threeBounceDelay {
0%, 80%, 100% {
-webkit-transform: scale(0);
transform: scale(0); }
40% {
-webkit-transform: scale(1);
transform: scale(1); } }
@keyframes sk-threeBounceDelay {
0%, 80%, 100% {
-webkit-transform: scale(0);
transform: scale(0); }
40% {
-webkit-transform: scale(1);
transform: scale(1); } }
/*
* Usage:
*
* <div class="sk-spinner sk-spinner-circle">
* <div class="sk-circle1 sk-circle"></div>
* <div class="sk-circle2 sk-circle"></div>
* <div class="sk-circle3 sk-circle"></div>
* <div class="sk-circle4 sk-circle"></div>
* <div class="sk-circle5 sk-circle"></div>
* <div class="sk-circle6 sk-circle"></div>
* <div class="sk-circle7 sk-circle"></div>
* <div class="sk-circle8 sk-circle"></div>
* <div class="sk-circle9 sk-circle"></div>
* <div class="sk-circle10 sk-circle"></div>
* <div class="sk-circle11 sk-circle"></div>
* <div class="sk-circle12 sk-circle"></div>
* </div>
*
*/
.sk-spinner-circle.sk-spinner {
margin: 0 auto;
width: 22px;
height: 22px;
position: relative; }
.sk-spinner-circle .sk-circle {
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0; }
.sk-spinner-circle .sk-circle:before {
content: '';
display: block;
margin: 0 auto;
width: 20%;
height: 20%;
background-color: #333;
border-radius: 100%;
-webkit-animation: sk-circleBounceDelay 1.2s infinite ease-in-out;
animation: sk-circleBounceDelay 1.2s infinite ease-in-out;
/* Prevent first frame from flickering when animation starts */
-webkit-animation-fill-mode: both;
animation-fill-mode: both; }
.sk-spinner-circle .sk-circle2 {
-webkit-transform: rotate(30deg);
-ms-transform: rotate(30deg);
transform: rotate(30deg); }
.sk-spinner-circle .sk-circle3 {
-webkit-transform: rotate(60deg);
-ms-transform: rotate(60deg);
transform: rotate(60deg); }
.sk-spinner-circle .sk-circle4 {
-webkit-transform: rotate(90deg);
-ms-transform: rotate(90deg);
transform: rotate(90deg); }
.sk-spinner-circle .sk-circle5 {
-webkit-transform: rotate(120deg);
-ms-transform: rotate(120deg);
transform: rotate(120deg); }
.sk-spinner-circle .sk-circle6 {
-webkit-transform: rotate(150deg);
-ms-transform: rotate(150deg);
transform: rotate(150deg); }
.sk-spinner-circle .sk-circle7 {
-webkit-transform: rotate(180deg);
-ms-transform: rotate(180deg);
transform: rotate(180deg); }
.sk-spinner-circle .sk-circle8 {
-webkit-transform: rotate(210deg);
-ms-transform: rotate(210deg);
transform: rotate(210deg); }
.sk-spinner-circle .sk-circle9 {
-webkit-transform: rotate(240deg);
-ms-transform: rotate(240deg);
transform: rotate(240deg); }
.sk-spinner-circle .sk-circle10 {
-webkit-transform: rotate(270deg);
-ms-transform: rotate(270deg);
transform: rotate(270deg); }
.sk-spinner-circle .sk-circle11 {
-webkit-transform: rotate(300deg);
-ms-transform: rotate(300deg);
transform: rotate(300deg); }
.sk-spinner-circle .sk-circle12 {
-webkit-transform: rotate(330deg);
-ms-transform: rotate(330deg);
transform: rotate(330deg); }
.sk-spinner-circle .sk-circle2:before {
-webkit-animation-delay: -1.1s;
animation-delay: -1.1s; }
.sk-spinner-circle .sk-circle3:before {
-webkit-animation-delay: -1s;
animation-delay: -1s; }
.sk-spinner-circle .sk-circle4:before {
-webkit-animation-delay: -0.9s;
animation-delay: -0.9s; }
.sk-spinner-circle .sk-circle5:before {
-webkit-animation-delay: -0.8s;
animation-delay: -0.8s; }
.sk-spinner-circle .sk-circle6:before {
-webkit-animation-delay: -0.7s;
animation-delay: -0.7s; }
.sk-spinner-circle .sk-circle7:before {
-webkit-animation-delay: -0.6s;
animation-delay: -0.6s; }
.sk-spinner-circle .sk-circle8:before {
-webkit-animation-delay: -0.5s;
animation-delay: -0.5s; }
.sk-spinner-circle .sk-circle9:before {
-webkit-animation-delay: -0.4s;
animation-delay: -0.4s; }
.sk-spinner-circle .sk-circle10:before {
-webkit-animation-delay: -0.3s;
animation-delay: -0.3s; }
.sk-spinner-circle .sk-circle11:before {
-webkit-animation-delay: -0.2s;
animation-delay: -0.2s; }
.sk-spinner-circle .sk-circle12:before {
-webkit-animation-delay: -0.1s;
animation-delay: -0.1s; }
@-webkit-keyframes sk-circleBounceDelay {
0%, 80%, 100% {
-webkit-transform: scale(0);
transform: scale(0); }
40% {
-webkit-transform: scale(1);
transform: scale(1); } }
@keyframes sk-circleBounceDelay {
0%, 80%, 100% {
-webkit-transform: scale(0);
transform: scale(0); }
40% {
-webkit-transform: scale(1);
transform: scale(1); } }
/*
* Usage:
*
* <div class="sk-spinner sk-spinner-cube-grid">
* <div class="sk-cube"></div>
* <div class="sk-cube"></div>
* <div class="sk-cube"></div>
* <div class="sk-cube"></div>
* <div class="sk-cube"></div>
* <div class="sk-cube"></div>
* <div class="sk-cube"></div>
* <div class="sk-cube"></div>
* <div class="sk-cube"></div>
* </div>
*
*/
.sk-spinner-cube-grid {
/*
* Spinner positions
* 1 2 3
* 4 5 6
* 7 8 9
*/ }
.sk-spinner-cube-grid.sk-spinner {
width: 30px;
height: 30px;
margin: 0 auto; }
.sk-spinner-cube-grid .sk-cube {
width: 33%;
height: 33%;
background-color: #333;
float: left;
-webkit-animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out;
animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out; }
.sk-spinner-cube-grid .sk-cube:nth-child(1) {
-webkit-animation-delay: 0.2s;
animation-delay: 0.2s; }
.sk-spinner-cube-grid .sk-cube:nth-child(2) {
-webkit-animation-delay: 0.3s;
animation-delay: 0.3s; }
.sk-spinner-cube-grid .sk-cube:nth-child(3) {
-webkit-animation-delay: 0.4s;
animation-delay: 0.4s; }
.sk-spinner-cube-grid .sk-cube:nth-child(4) {
-webkit-animation-delay: 0.1s;
animation-delay: 0.1s; }
.sk-spinner-cube-grid .sk-cube:nth-child(5) {
-webkit-animation-delay: 0.2s;
animation-delay: 0.2s; }
.sk-spinner-cube-grid .sk-cube:nth-child(6) {
-webkit-animation-delay: 0.3s;
animation-delay: 0.3s; }
.sk-spinner-cube-grid .sk-cube:nth-child(7) {
-webkit-animation-delay: 0s;
animation-delay: 0s; }
.sk-spinner-cube-grid .sk-cube:nth-child(8) {
-webkit-animation-delay: 0.1s;
animation-delay: 0.1s; }
.sk-spinner-cube-grid .sk-cube:nth-child(9) {
-webkit-animation-delay: 0.2s;
animation-delay: 0.2s; }
@-webkit-keyframes sk-cubeGridScaleDelay {
0%, 70%, 100% {
-webkit-transform: scale3D(1, 1, 1);
transform: scale3D(1, 1, 1); }
35% {
-webkit-transform: scale3D(0, 0, 1);
transform: scale3D(0, 0, 1); } }
@keyframes sk-cubeGridScaleDelay {
0%, 70%, 100% {
-webkit-transform: scale3D(1, 1, 1);
transform: scale3D(1, 1, 1); }
35% {
-webkit-transform: scale3D(0, 0, 1);
transform: scale3D(0, 0, 1); } }
/*
* Usage:
*
* <div class="sk-spinner sk-spinner-wordpress">
* <span class="sk-inner-circle"></span>
* </div>
*
*/
.sk-spinner-wordpress.sk-spinner {
background-color: #333;
width: 30px;
height: 30px;
border-radius: 30px;
position: relative;
margin: 0 auto;
-webkit-animation: sk-innerCircle 1s linear infinite;
animation: sk-innerCircle 1s linear infinite; }
.sk-spinner-wordpress .sk-inner-circle {
display: block;
background-color: #fff;
width: 8px;
height: 8px;
position: absolute;
border-radius: 8px;
top: 5px;
left: 5px; }
@-webkit-keyframes sk-innerCircle {
0% {
-webkit-transform: rotate(0);
transform: rotate(0); }
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg); } }
@keyframes sk-innerCircle {
0% {
-webkit-transform: rotate(0);
transform: rotate(0); }
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg); } }
/*
* Usage:
*
* <div class="sk-spinner sk-spinner-fading-circle">
* <div class="sk-circle1 sk-circle"></div>
* <div class="sk-circle2 sk-circle"></div>
* <div class="sk-circle3 sk-circle"></div>
* <div class="sk-circle4 sk-circle"></div>
* <div class="sk-circle5 sk-circle"></div>
* <div class="sk-circle6 sk-circle"></div>
* <div class="sk-circle7 sk-circle"></div>
* <div class="sk-circle8 sk-circle"></div>
* <div class="sk-circle9 sk-circle"></div>
* <div class="sk-circle10 sk-circle"></div>
* <div class="sk-circle11 sk-circle"></div>
* <div class="sk-circle12 sk-circle"></div>
* </div>
*
*/
.sk-spinner-fading-circle.sk-spinner {
margin: 0 auto;
width: 22px;
height: 22px;
position: relative; }
.sk-spinner-fading-circle .sk-circle {
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0; }
.sk-spinner-fading-circle .sk-circle:before {
content: '';
display: block;
margin: 0 auto;
width: 18%;
height: 18%;
background-color: #333;
border-radius: 100%;
-webkit-animation: sk-circleFadeDelay 1.2s infinite ease-in-out;
animation: sk-circleFadeDelay 1.2s infinite ease-in-out;
/* Prevent first frame from flickering when animation starts */
-webkit-animation-fill-mode: both;
animation-fill-mode: both; }
.sk-spinner-fading-circle .sk-circle2 {
-webkit-transform: rotate(30deg);
-ms-transform: rotate(30deg);
transform: rotate(30deg); }
.sk-spinner-fading-circle .sk-circle3 {
-webkit-transform: rotate(60deg);
-ms-transform: rotate(60deg);
transform: rotate(60deg); }
.sk-spinner-fading-circle .sk-circle4 {
-webkit-transform: rotate(90deg);
-ms-transform: rotate(90deg);
transform: rotate(90deg); }
.sk-spinner-fading-circle .sk-circle5 {
-webkit-transform: rotate(120deg);
-ms-transform: rotate(120deg);
transform: rotate(120deg); }
.sk-spinner-fading-circle .sk-circle6 {
-webkit-transform: rotate(150deg);
-ms-transform: rotate(150deg);
transform: rotate(150deg); }
.sk-spinner-fading-circle .sk-circle7 {
-webkit-transform: rotate(180deg);
-ms-transform: rotate(180deg);
transform: rotate(180deg); }
.sk-spinner-fading-circle .sk-circle8 {
-webkit-transform: rotate(210deg);
-ms-transform: rotate(210deg);
transform: rotate(210deg); }
.sk-spinner-fading-circle .sk-circle9 {
-webkit-transform: rotate(240deg);
-ms-transform: rotate(240deg);
transform: rotate(240deg); }
.sk-spinner-fading-circle .sk-circle10 {
-webkit-transform: rotate(270deg);
-ms-transform: rotate(270deg);
transform: rotate(270deg); }
.sk-spinner-fading-circle .sk-circle11 {
-webkit-transform: rotate(300deg);
-ms-transform: rotate(300deg);
transform: rotate(300deg); }
.sk-spinner-fading-circle .sk-circle12 {
-webkit-transform: rotate(330deg);
-ms-transform: rotate(330deg);
transform: rotate(330deg); }
.sk-spinner-fading-circle .sk-circle2:before {
-webkit-animation-delay: -1.1s;
animation-delay: -1.1s; }
.sk-spinner-fading-circle .sk-circle3:before {
-webkit-animation-delay: -1s;
animation-delay: -1s; }
.sk-spinner-fading-circle .sk-circle4:before {
-webkit-animation-delay: -0.9s;
animation-delay: -0.9s; }
.sk-spinner-fading-circle .sk-circle5:before {
-webkit-animation-delay: -0.8s;
animation-delay: -0.8s; }
.sk-spinner-fading-circle .sk-circle6:before {
-webkit-animation-delay: -0.7s;
animation-delay: -0.7s; }
.sk-spinner-fading-circle .sk-circle7:before {
-webkit-animation-delay: -0.6s;
animation-delay: -0.6s; }
.sk-spinner-fading-circle .sk-circle8:before {
-webkit-animation-delay: -0.5s;
animation-delay: -0.5s; }
.sk-spinner-fading-circle .sk-circle9:before {
-webkit-animation-delay: -0.4s;
animation-delay: -0.4s; }
.sk-spinner-fading-circle .sk-circle10:before {
-webkit-animation-delay: -0.3s;
animation-delay: -0.3s; }
.sk-spinner-fading-circle .sk-circle11:before {
-webkit-animation-delay: -0.2s;
animation-delay: -0.2s; }
.sk-spinner-fading-circle .sk-circle12:before {
-webkit-animation-delay: -0.1s;
animation-delay: -0.1s; }
@-webkit-keyframes sk-circleFadeDelay {
0%, 39%, 100% {
opacity: 0; }
40% {
opacity: 1; } }
@keyframes sk-circleFadeDelay {
0%, 39%, 100% {
opacity: 0; }
40% {
opacity: 1; } }

View File

@ -1,223 +0,0 @@
@charset "UTF-8";
/* ################################################################
Author: Carlos Alvarez
URL: http://alvarez.is
Project Name: SOLID - Bootstrap 3 Theme
Version: 1.0
URL: http://alvarez.is
################################################################# */
/* Webfont: Lato-Bold */
@font-face {
font-family: 'Lato';
src: url("../fonts/Lato-Bold.eot");
/* IE9 Compat Modes */
src: url("../fonts/Lato-Bold.eot?#iefix") format("embedded-opentype"), url("../fonts/Lato-Bold.woff") format("woff"), url("../fonts/Lato-Bold.ttf") format("truetype");
font-style: normal;
font-weight: bold;
text-rendering: optimizeLegibility; }
/* Webfont: Lato-Italic */
@font-face {
font-family: 'Lato';
src: url("../fonts/Lato-Italic.eot");
/* IE9 Compat Modes */
src: url("../fonts/Lato-Italic.eot?#iefix") format("embedded-opentype"), url("../fonts/Lato-Italic.woff") format("woff"), url("../fonts/Lato-Italic.ttf") format("truetype");
font-style: italic;
font-weight: normal;
text-rendering: optimizeLegibility; }
/* Webfont: Lato-Regular */
@font-face {
font-family: 'Lato';
src: url("../fonts/Lato-Regular.eot");
/* IE9 Compat Modes */
src: url("../fonts/Lato-Regular.eot?#iefix") format("embedded-opentype"), url("../fonts/Lato-Regular.woff") format("woff"), url("../fonts/Lato-Regular.ttf") format("truetype");
font-style: normal;
font-weight: normal;
text-rendering: optimizeLegibility; }
/* ################################################################
1. GENERAL STRUCTURES
################################################################# */
* {
margin: 0; }
body {
background: #ffffff;
margin: 0;
height: 100%;
color: #384452;
font-family: "Lato", "Heiti SC", "Hiragino Sans GB", "STHeiti", "Source Han Sans CN", "WenQuanYi Zen Hei", "WenQuanYi Micro Hei", "微软雅黑", sans-serif;
font-weight: 400; }
h1, h2, h3, h4, h5, h6 {
font-weight: 700; }
ul {
padding-left: 1em; }
p {
padding: 0;
margin-bottom: 12px;
font-weight: 400;
font-size: 14px;
line-height: 24px;
color: #384452;
margin-top: 10px; }
img {
height: auto;
max-width: 100%; }
a {
color: #088acb;
padding: 0;
margin: 0;
text-decoration: none;
-webkit-transition: background-color .4s linear, color .4s linear;
-moz-transition: background-color .4s linear, color .4s linear;
-o-transition: background-color .4s linear, color .4s linear;
-ms-transition: background-color .4s linear, color .4s linear;
transition: background-color .4s linear, color .4s linear; }
a:hover,
a:focus {
text-decoration: none;
color: #62bbe7; }
::-moz-selection {
color: #fff;
text-shadow: none;
background: #384452; }
::selection {
color: #fff;
text-shadow: none;
background: #384452; }
.centered {
text-align: center; }
/* ################################################################
BOOTSTRAP MODIFICATIONS & TWEAKS
################################################################# */
.navbar {
padding-top: 15px;
margin-bottom: 0px; }
.navbar-default {
background-color: white;
border-color: transparent; }
.navbar-default .navbar-nav > li.active > a {
color: #82318E;
border-bottom: 2px solid #82318E; }
.navbar-default .navbar-nav > li > a {
color: #384452;
background: transparent !important;
font-weight: 700;
font-size: 12px; }
.navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus {
color: #82318E !important;
background: transparent !important; }
.navbar-brand {
font-weight: 900;
padding: 0px;
line-height: 50px;
height: 50px; }
.navbar-brand img {
margin-right: 5px; }
.navbar-header .navbar-brand {
color: #384452; }
.dropdown-menu {
background: #384452; }
.dropdown-menu > li > a {
color: white;
font-weight: 700;
font-size: 12px; }
.mtb {
margin-top: 40px;
margin-bottom: 80px; }
.mb {
margin-bottom: 60px; }
.mt {
margin-top: 60px; }
.hline {
border-bottom: 1px solid #384452; }
.hline-w {
border-bottom: 1px solid #ffffff;
margin-bottom: 25px; }
/* ################################################################
SITE WRAPS
################################################################# */
#thu-alert {
padding-left: 50px;
position: relative; }
#thu-alert .glyphicon {
font-size: 30px;
left: 10px;
top: 20px;
position: absolute; }
#headerwrap {
padding-top: 40px;
padding-bottom: 0px; }
#headerwrap h1 {
color: #82318E;
margin-bottom: 15px; }
#headerwrap h3, #headerwrap h5 {
color: #82318E;
font-weight: 400;
margin-top: 10px; }
#headerwrap .img-responsive {
margin: 0 auto; }
/* Services Wrap */
#mirrors {
margin-top: 40px;
margin-bottom: 40px; }
#mirrors tbody {
font-size: 12pt; }
#mirrors tbody tr:hover {
background-color: #e0f3fc; }
#mirrors tbody td {
padding: 4px 8px;
border-top: none; }
#mirrors tbody .label.label-new {
padding: .1em .2em;
vertical-align: 40%;
text-shadow: 1px 1px #888;
background-color: #3aa0e6; }
#mirrors tbody .label.label-status {
font-size: 10pt; }
#mirrors tbody .fa-question-circle {
color: #234961; }
/* Footer */
#footerwrap {
color: #bfc9d3;
margin-top: 100px;
padding-top: 60px;
padding-bottom: 60px;
background: #384452; }
#footerwrap p {
color: #bfc9d3; }
#footerwrap h4 {
color: #ffffff; }
#footerwrap i, #footerwrap i:hover, #footerwrap a, #footerwrap a:hover {
color: #bfc9d3; }
.spacing {
margin-top: 40px;
margin-bottom: 40px; }
/*# sourceMappingURL=style.css.map */

View File

@ -1,7 +0,0 @@
{
"version": 3,
"mappings": "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",
"sources": ["_Lato.scss","style.scss"],
"names": [],
"file": "style.css"
}

View File

@ -1,256 +0,0 @@
/* ################################################################
Author: Carlos Alvarez
URL: http://alvarez.is
Project Name: SOLID - Bootstrap 3 Theme
Version: 1.0
URL: http://alvarez.is
################################################################# */
$color_thu_purple: #82318E;
$color_light_grey: #888;
$color_grey: #555;
$color_primary: $color_thu_purple;
$color_primary_light: #d8aff6;
$color_primary_rgb: 92,48,125;
$color_secondary: #384452;
$color_link: #088acb;
$color_link_hover: #62bbe7;
$color_footer_heading: #ffffff;
$color_footer_content: #bfc9d3;
$color_navbar_bg: #d3d3d3;
$font_default: 'Lato', 'Heiti SC', 'Hiragino Sans GB', 'STHeiti', 'Source Han Sans CN', 'WenQuanYi Zen Hei', 'WenQuanYi Micro Hei', '微软雅黑', sans-serif ;
@import "Lato";
/* ################################################################
1. GENERAL STRUCTURES
################################################################# */
* {
margin: 0;
// padding: 0px;
}
body {
background: #ffffff;
margin: 0;
height: 100%;
color: $color_secondary;
font-family: $font_default;
font-weight: 400;
}
h1, h2, h3, h4, h5, h6 {
font-weight: 700;
}
ul {
padding-left: 1em;
}
p {
padding: 0;
margin-bottom: 12px;
font-weight: 400;
font-size: 14px;
line-height: 24px;
color: $color_secondary ;
margin-top: 10px;
}
img {
height: auto;
max-width: 100%;
}
a {
color:$color_link;
padding: 0;
margin: 0;
text-decoration: none;
-webkit-transition: background-color .4s linear, color .4s linear;
-moz-transition: background-color .4s linear, color .4s linear;
-o-transition: background-color .4s linear, color .4s linear;
-ms-transition: background-color .4s linear, color .4s linear;
transition: background-color .4s linear, color .4s linear;
}
a:hover,
a:focus {
text-decoration: none;
color:$color_link_hover;
}
::-moz-selection {
color: #fff;
text-shadow:none;
background:$color_secondary;
}
::selection {
color: #fff;
text-shadow:none;
background:$color_secondary;
}
.centered {
text-align: center
}
/* ################################################################
BOOTSTRAP MODIFICATIONS & TWEAKS
################################################################# */
.navbar {
padding-top: 15px;
margin-bottom: 0px;
}
.navbar-default {
background-color: white;
border-color: transparent;
.navbar-nav > li.active > a {
color: $color_thu_purple;
border-bottom: 2px solid $color_thu_purple;
}
.navbar-nav > li > a {
color: $color_secondary;
background: transparent !important;
font-weight: 700;
font-size: 12px;
&:hover, &:focus {
color: $color_primary !important;
background: transparent !important;
}
}
}
.navbar-brand {
font-weight: 900;
padding: 0px;
line-height: 50px;
height: 50px;
img {
margin-right: 5px;
}
}
.navbar-header .navbar-brand {
color: $color_secondary;
}
.dropdown-menu {
background: $color_secondary ;
}
.dropdown-menu > li > a {
color: white;
font-weight: 700;
font-size: 12px;
}
.mtb {
margin-top: 40px;
margin-bottom: 80px;
}
.mb {
margin-bottom: 60px;
}
.mt {
margin-top: 60px;
}
.hline {
border-bottom: 1px solid $color_secondary ;
}
.hline-w {
border-bottom: 1px solid #ffffff;
margin-bottom: 25px;
}
/* ################################################################
SITE WRAPS
################################################################# */
#thu-alert {
padding-left: 50px;
position: relative;
.glyphicon {
font-size: 30px;
left: 10px;
top: 20px;
position: absolute;
}
}
#headerwrap {
padding-top: 40px;
padding-bottom: 0px;
h1 {
color: $color_primary ;
margin-bottom: 15px;
}
h3, h5 {
color: $color_primary ;
font-weight: 400;
margin-top: 10px;
}
.img-responsive {
margin: 0 auto;
}
}
/* Services Wrap */
#mirrors {
margin-top: 40px;
margin-bottom: 40px;
tbody {
tr:hover {
background-color: #e0f3fc;
}
td {
padding: 4px 8px;
border-top: none;
}
font-size: 12pt;
.label.label-new {
padding: .1em .2em;
vertical-align: 40%;
text-shadow: 1px 1px #888;
background-color: #3aa0e6;
}
.label.label-status {
font-size: 10pt;
}
.fa-question-circle {
color: #234961;
}
}
}
/* Footer */
#footerwrap {
color: $color_footer_content;
margin-top: 100px;
padding-top: 60px;
padding-bottom: 60px;
background: $color_secondary;
p {
color: $color_footer_content;
}
h4 {
color: $color_footer_heading;
}
i, i:hover, a, a:hover {
color: $color_footer_content;
}
}
.spacing {
margin-top: 40px;
margin-bottom: 40px;
}

File diff suppressed because one or more lines are too long

View File

@ -1,46 +0,0 @@
## Ubuntu 镜像使用帮助
Ubuntu 的软件源配置文件是
`/etc/apt/sources.list`。将系统自带的该文件做个备份,将该文件替换为下面内容,即可使用
TUNA 的软件源镜像。
注意Ubuntu
的版本代号(codename)是直接写在软件源配置文件中的,所以不同的版本所需的配置文件内容不通用。
下面仅贴出了最常用的版本的可用配置文件,其余版本请自行做相应修改(参考[这里](#more))。
### 14.04 LTS
```
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-backports main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-proposed main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-security main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-updates main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-backports main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-proposed main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-security main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-updates main multiverse restricted universe
```
### more
更多版本的设置,请参看下表中列出的 Ubuntu
版本号和代号的对应关系,将上面的配置中的代号全部替换为相应代号即可。
| 版本号 | 代号 | 完整代号 |
| ------ | ---- | -------- |
| 8.04 LTS | hardy | Hardy Heron |
| 10.04 LTS | lucid | Lucid Lynx |
| 10.10 | maverick | Maverick Meerkat |
| 11.04 | natty | Natty Narwhal |
| 11.10 | oneiric | Oneiric Ocelot |
| 12.04 LTS | precise | Precise Pangolin |
| 12.10 | quantal | Quantal Quetzal |
| 13.04 | raring | Raring Ringtail |
| 13.10 | saucy | Saucy Salamander |
| 14.04 LTS | trusty | Trusty Tahr |
| 14.10 | utopic | Utopic Unicorn |
### 参考
Ubuntu 相关内容参考自 <http://mirror.bjtu.edu.cn/cn/howto.html>