Browse Source

博客管理系统--node技术

Cathy 4 years ago
parent
commit
b9e2032ff7
100 changed files with 33955 additions and 0 deletions
  1. 3 0
      .gitignore
  2. 73 0
      blog/app.js
  3. 5 0
      blog/config/custom-environment-variables.json
  4. 5 0
      blog/config/default.json
  5. 8 0
      blog/config/development.json
  6. 9 0
      blog/config/production.json
  7. 12 0
      blog/middleware/loginGuard.js
  8. 32 0
      blog/model/article.js
  9. 25 0
      blog/model/comment.js
  10. 9 0
      blog/model/connect.js
  11. 72 0
      blog/model/user.js
  12. 1379 0
      blog/package-lock.json
  13. 27 0
      blog/package.json
  14. 354 0
      blog/public/admin/css/base.css
  15. 10 0
      blog/public/admin/js/common.js
  16. 587 0
      blog/public/admin/lib/bootstrap/css/bootstrap-theme.css
  17. 1 0
      blog/public/admin/lib/bootstrap/css/bootstrap-theme.css.map
  18. 6 0
      blog/public/admin/lib/bootstrap/css/bootstrap-theme.min.css
  19. 1 0
      blog/public/admin/lib/bootstrap/css/bootstrap-theme.min.css.map
  20. 6757 0
      blog/public/admin/lib/bootstrap/css/bootstrap.css
  21. 1 0
      blog/public/admin/lib/bootstrap/css/bootstrap.css.map
  22. 6 0
      blog/public/admin/lib/bootstrap/css/bootstrap.min.css
  23. 1 0
      blog/public/admin/lib/bootstrap/css/bootstrap.min.css.map
  24. BIN
      blog/public/admin/lib/bootstrap/fonts/glyphicons-halflings-regular.eot
  25. 288 0
      blog/public/admin/lib/bootstrap/fonts/glyphicons-halflings-regular.svg
  26. BIN
      blog/public/admin/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf
  27. BIN
      blog/public/admin/lib/bootstrap/fonts/glyphicons-halflings-regular.woff
  28. BIN
      blog/public/admin/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2
  29. 2377 0
      blog/public/admin/lib/bootstrap/js/bootstrap.js
  30. 7 0
      blog/public/admin/lib/bootstrap/js/bootstrap.min.js
  31. 13 0
      blog/public/admin/lib/bootstrap/js/npm.js
  32. 21 0
      blog/public/admin/lib/ckeditor5/LICENSE.md
  33. 9 0
      blog/public/admin/lib/ckeditor5/README.md
  34. 6 0
      blog/public/admin/lib/ckeditor5/ckeditor.js
  35. 1 0
      blog/public/admin/lib/ckeditor5/ckeditor.js.map
  36. 1 0
      blog/public/admin/lib/ckeditor5/translations/ar.js
  37. 1 0
      blog/public/admin/lib/ckeditor5/translations/ast.js
  38. 1 0
      blog/public/admin/lib/ckeditor5/translations/bg.js
  39. 1 0
      blog/public/admin/lib/ckeditor5/translations/ca.js
  40. 1 0
      blog/public/admin/lib/ckeditor5/translations/cs.js
  41. 1 0
      blog/public/admin/lib/ckeditor5/translations/da.js
  42. 1 0
      blog/public/admin/lib/ckeditor5/translations/de-ch.js
  43. 1 0
      blog/public/admin/lib/ckeditor5/translations/de.js
  44. 1 0
      blog/public/admin/lib/ckeditor5/translations/el.js
  45. 1 0
      blog/public/admin/lib/ckeditor5/translations/en-au.js
  46. 1 0
      blog/public/admin/lib/ckeditor5/translations/eo.js
  47. 1 0
      blog/public/admin/lib/ckeditor5/translations/es.js
  48. 1 0
      blog/public/admin/lib/ckeditor5/translations/et.js
  49. 1 0
      blog/public/admin/lib/ckeditor5/translations/eu.js
  50. 1 0
      blog/public/admin/lib/ckeditor5/translations/fa.js
  51. 1 0
      blog/public/admin/lib/ckeditor5/translations/fi.js
  52. 1 0
      blog/public/admin/lib/ckeditor5/translations/fr.js
  53. 1 0
      blog/public/admin/lib/ckeditor5/translations/gl.js
  54. 1 0
      blog/public/admin/lib/ckeditor5/translations/gu.js
  55. 1 0
      blog/public/admin/lib/ckeditor5/translations/he.js
  56. 1 0
      blog/public/admin/lib/ckeditor5/translations/hr.js
  57. 1 0
      blog/public/admin/lib/ckeditor5/translations/hu.js
  58. 1 0
      blog/public/admin/lib/ckeditor5/translations/it.js
  59. 1 0
      blog/public/admin/lib/ckeditor5/translations/ja.js
  60. 1 0
      blog/public/admin/lib/ckeditor5/translations/km.js
  61. 1 0
      blog/public/admin/lib/ckeditor5/translations/kn.js
  62. 1 0
      blog/public/admin/lib/ckeditor5/translations/ko.js
  63. 1 0
      blog/public/admin/lib/ckeditor5/translations/ku.js
  64. 1 0
      blog/public/admin/lib/ckeditor5/translations/nb.js
  65. 1 0
      blog/public/admin/lib/ckeditor5/translations/ne.js
  66. 1 0
      blog/public/admin/lib/ckeditor5/translations/nl.js
  67. 1 0
      blog/public/admin/lib/ckeditor5/translations/no.js
  68. 1 0
      blog/public/admin/lib/ckeditor5/translations/oc.js
  69. 1 0
      blog/public/admin/lib/ckeditor5/translations/pl.js
  70. 1 0
      blog/public/admin/lib/ckeditor5/translations/pt-br.js
  71. 1 0
      blog/public/admin/lib/ckeditor5/translations/pt.js
  72. 1 0
      blog/public/admin/lib/ckeditor5/translations/ro.js
  73. 1 0
      blog/public/admin/lib/ckeditor5/translations/ru.js
  74. 1 0
      blog/public/admin/lib/ckeditor5/translations/si.js
  75. 1 0
      blog/public/admin/lib/ckeditor5/translations/sk.js
  76. 1 0
      blog/public/admin/lib/ckeditor5/translations/sq.js
  77. 1 0
      blog/public/admin/lib/ckeditor5/translations/sv.js
  78. 1 0
      blog/public/admin/lib/ckeditor5/translations/tr.js
  79. 1 0
      blog/public/admin/lib/ckeditor5/translations/tt.js
  80. 1 0
      blog/public/admin/lib/ckeditor5/translations/ug.js
  81. 1 0
      blog/public/admin/lib/ckeditor5/translations/uk.js
  82. 1 0
      blog/public/admin/lib/ckeditor5/translations/zh-cn.js
  83. 1 0
      blog/public/admin/lib/ckeditor5/translations/zh.js
  84. 22 0
      blog/public/admin/lib/echarts/echarts.min.js
  85. 313 0
      blog/public/admin/lib/jquery/AUTHORS.txt
  86. 36 0
      blog/public/admin/lib/jquery/LICENSE.txt
  87. 67 0
      blog/public/admin/lib/jquery/README.md
  88. 14 0
      blog/public/admin/lib/jquery/bower.json
  89. 399 0
      blog/public/admin/lib/jquery/dist/core.js
  90. 10364 0
      blog/public/admin/lib/jquery/dist/jquery.js
  91. 2 0
      blog/public/admin/lib/jquery/dist/jquery.min.js
  92. 1 0
      blog/public/admin/lib/jquery/dist/jquery.min.map
  93. 8269 0
      blog/public/admin/lib/jquery/dist/jquery.slim.js
  94. 2 0
      blog/public/admin/lib/jquery/dist/jquery.slim.min.js
  95. 1 0
      blog/public/admin/lib/jquery/dist/jquery.slim.min.map
  96. 36 0
      blog/public/admin/lib/jquery/external/sizzle/LICENSE.txt
  97. 2272 0
      blog/public/admin/lib/jquery/external/sizzle/dist/sizzle.js
  98. 3 0
      blog/public/admin/lib/jquery/external/sizzle/dist/sizzle.min.js
  99. 1 0
      blog/public/admin/lib/jquery/external/sizzle/dist/sizzle.min.map
  100. 0 0
      blog/public/admin/lib/jquery/package.json

+ 3 - 0
.gitignore

@@ -0,0 +1,3 @@
+前端练习
+blog/node_modules
+.DS_Store

+ 73 - 0
blog/app.js

@@ -0,0 +1,73 @@
+// 引入express框架
+const express = require('express');
+// 引入系统模块path
+const path = require('path');
+// 引入数据库模块
+require('./model/connect');
+// 引入body-parser模块
+const bodyParser = require('body-parser');
+// 引入express-session
+const session = require('express-session');
+// 引入art-template 
+const template = require('art-template');
+// 引入第三方日期格式化模块
+const dateformat = require('dateformat');
+// 在开发环境中,将日志信息打印到控制台
+const morgan = require('morgan');
+// 导入config模块
+const config = require('config');
+// 创建网站APP
+const app = express();
+// 处理post请求参数
+app.use(bodyParser.urlencoded({extended: false}));
+// 配置session
+app.use(session({
+  secret: 'secret key', 
+  resave: false, 
+  saveUninitialized: false,
+  cookie: {
+    maxAge: 24 * 60 * 60 * 1000,// 最大过期时间
+  }
+}));
+// 告诉express框架模板的所在位置
+app.set('views', path.join(__dirname, 'views'));
+// 告诉express框架模板的默认后缀
+app.set('view engine', 'art');
+// 当渲染后缀为art的模板时,所使用的的模板引擎是什么
+app.engine('art', require('express-art-template'));
+// 给art-template配置函数
+template.defaults.imports.dateformat = dateformat;
+// 开放静态资源文件
+app.use(express.static(path.join(__dirname, 'public')));
+
+// console.log(config.get('title'));
+app.locals.webCNTitle = config.get('webCNTitle');
+app.locals.webENTitle = config.get('webENTitle');
+// 获取系统环境变量 process.env.NODE_ENV
+if(process.env.NODE_ENV == 'development') {
+  console.log('当前处于开发环境');
+  // 在开发环境中,将客户端发送到服务器端的请求信息打印到控制台中
+  app.use(morgan('dev'));
+}else {
+  console.log('当前处于生产环境');
+}
+
+// 拦截请求,判断用户的登录状态
+app.use('/admin', require('./middleware/loginGuard'));
+// 引入路由模块
+const home = require('./route/home');
+const admin = require('./route/admin');
+app.use('/home', home);
+app.use('/admin', admin);
+app.use((err, req, res, next) => {
+  const result = JSON.parse(err);
+  let arr = [];
+  for(let attr in result){
+    if(attr == 'path')continue;
+    arr.push(attr + "=" + result[attr]);
+  }
+  let params = arr.join('&');
+  res.redirect(`${result.path}?${params}`);
+})
+app.listen(80);
+console.log('网站服务器启动成功,请访问localhost');

+ 5 - 0
blog/config/custom-environment-variables.json

@@ -0,0 +1,5 @@
+{
+  "db": {
+    "pwd": "APP_PASSWORD"
+  }
+}

+ 5 - 0
blog/config/default.json

@@ -0,0 +1,5 @@
+{
+  "title": "博客管理系统",
+  "webCNTitle": "酷盖耶啵",
+  "webENTitle": "wangyibo"
+}

+ 8 - 0
blog/config/development.json

@@ -0,0 +1,8 @@
+{
+  "db": {
+    "user": "jal",
+    "host": "localhost",
+    "port": "27017",
+    "name": "blog"
+  }
+}

+ 9 - 0
blog/config/production.json

@@ -0,0 +1,9 @@
+{
+  "db": {
+    "user": "jal",
+    "pwd": "666666",
+    "host": "localhost",
+    "port": "27017",
+    "name": "blog"
+  }
+}

+ 12 - 0
blog/middleware/loginGuard.js

@@ -0,0 +1,12 @@
+const guard = (req, res, next) => {
+  if(req.url != '/login' && !req.session.username){
+    res.redirect('/admin/login')
+  }else {
+    if(req.session.role == 'normal') {
+      return res.redirect('/home/');
+    }
+    next();
+  }
+};
+
+module.exports = guard

+ 32 - 0
blog/model/article.js

@@ -0,0 +1,32 @@
+const mongoose = require('mongoose');
+
+const articleSchema = new mongoose.Schema({
+  title: {
+    type: String,
+    maxlength: 20,
+    minlength: 4,
+    required: [true, '请填写文章标题']
+  },
+  author: {
+    type: mongoose.Schema.Types.ObjectId,
+    ref: 'User',
+    required: [true, '请填写作者']
+  },
+  publishDate: {
+    type: Date,
+    default: Date.now
+  },
+  cover: {
+    type: String,
+    default: null
+  },
+  content: {
+    type: String
+  }
+})
+
+const Article = mongoose.model("Article", articleSchema);
+
+module.exports = {
+  Article
+}

+ 25 - 0
blog/model/comment.js

@@ -0,0 +1,25 @@
+// 引入mongoose
+const mongoose = require('mongoose');
+
+const commentSchema = new mongoose.Schema({
+  aid: {
+    type: mongoose.Schema.Types.ObjectId,
+    ref: 'Article',
+  },
+  uid: {
+    type: mongoose.Schema.Types.ObjectId,
+    ref: 'User',
+  },
+  time: {
+    type: Date
+  },
+  content: {
+    type: String
+  }
+});
+
+const Comment = mongoose.model('Comment', commentSchema);
+
+module.exports = {
+  Comment
+}

+ 9 - 0
blog/model/connect.js

@@ -0,0 +1,9 @@
+// 引入mongoose第三方模块
+const mongoose = require('mongoose');
+const config = require('config');
+// 连接数据库
+// 解决报错:(node:14887) DeprecationWarning: collection.ensureIndex is deprecated. Use createIndexes instead,增加下一句
+mongoose.set('useCreateIndex', true);
+mongoose.connect(`mongodb://${config.get("db.user")}:${config.get("db.pwd")}@${config.get("db.host")}:${config.get("db.port")}/${config.get("db.name")}`, { useNewUrlParser: true, useUnifiedTopology: true })
+        .then(()=>{console.log('数据库连接成功')})
+        .catch(()=>{console.log('数据库连接失败')})

+ 72 - 0
blog/model/user.js

@@ -0,0 +1,72 @@
+// 引入mongoose第三方模块
+const mongoose = require('mongoose');
+// 验证对象字段模块
+const Joi = require('joi');
+// 引入加密模块
+const bcrypt = require('bcrypt');
+// 创建用户集合规则
+const userSchema = mongoose.Schema({
+  username: {
+    type: String,
+    required: true,
+    minlength: 2,
+    maxlength: 20
+  },
+  email: {
+    type: String,
+    unique: true,// 保证邮箱在插入数据库不重复
+  },
+  password: {
+    type: String,
+    required: true
+  },
+  // admin:超级管理员
+  // normal: 普通用户
+  role: {
+    type: String,
+    required: true,
+  },
+  // 0: 启用状态
+  // 1: 禁用状态
+  state: {
+    type: Number,
+    default: 0
+  }
+})
+
+// 创建集合
+const User = mongoose.model('User', userSchema);
+
+async function createUser(){
+  const salt = await bcrypt.genSalt(10);
+  const pass = await bcrypt.hash('123456', salt);
+  const user = await User.create({
+    username: 'yibo',
+    email: 'yibo@qq.com',
+    password: pass,
+    role: 'admin',
+    state: 0
+  });
+  console.log(user);
+  
+}
+
+// 验证用户信息
+const validateUser = (user) => {
+    // 定义对象的验证规则
+    const schema = {
+      username: Joi.string().min(2).max(12).required().error(new Error('用户名不符合规则')),
+      email: Joi.string().email().error(new Error('邮箱不符合要求')),
+      password: Joi.string().regex(/^\w{3,30}$/).error(new Error('密码不符合要求')),
+      role: Joi.string().valid('normal', 'admin').required().error(new Error('角色值非法')),
+      state: Joi.number().valid(0, 1).required().error(new Error('状态值规则'))
+    };
+    return Joi.validate(user, schema);
+}
+
+// createUser();
+// 将用户集合作为模块成员进行导出
+module.exports = {
+  User,
+  validateUser
+}

File diff suppressed because it is too large
+ 1379 - 0
blog/package-lock.json


+ 27 - 0
blog/package.json

@@ -0,0 +1,27 @@
+{
+  "name": "blog",
+  "version": "1.0.0",
+  "description": "",
+  "main": "index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "keywords": [],
+  "author": "",
+  "license": "ISC",
+  "dependencies": {
+    "art-template": "^4.13.2",
+    "bcrypt": "^4.0.1",
+    "body-parser": "^1.19.0",
+    "config": "^3.3.0",
+    "dateformat": "^3.0.3",
+    "express": "^4.17.1",
+    "express-art-template": "^1.0.1",
+    "express-session": "^1.17.0",
+    "formidable": "^1.2.2",
+    "joi": "^14.3.1",
+    "mongoose": "^5.9.3",
+    "mongoose-sex-page": "^1.2.4",
+    "morgan": "^1.9.1"
+  }
+}

+ 354 - 0
blog/public/admin/css/base.css

@@ -0,0 +1,354 @@
+body, ul {
+	margin: 0;
+}
+
+body {
+	font-size: 12px;
+	font-family: 'Microsoft YaHei', 'Arial';
+}
+
+ul {
+	list-style: none;
+	padding: 0;
+}
+
+a, a:hover {
+	text-decoration: none;
+}
+
+a:hover {
+
+}
+
+h4 {
+	margin: 0;
+}
+
+.fl {
+	float: left;
+}
+
+.fr {
+	float: right;
+}
+
+.header {
+	height: 72px;
+	width: 100%;
+	position: fixed;
+	left: 0;
+	top: 0;
+	box-shadow: 0 1px 2px 0 rgba(40,42,49,.16);
+	z-index: 100;
+}
+
+.header .logo {
+	height: 72px;
+	width: 288px;
+	line-height: 72px;
+	text-align: center;
+	color: #FFF;
+	font-size: 18px;
+	font-weight: bold;
+	background-image: linear-gradient(100deg,#1c5de7,#1c91e7);
+}
+
+.header .logo i {
+	font-size: 14px;
+	font-weight: normal;
+	font-style: normal;
+}
+
+.header .info {
+	margin-left: 288px;
+	height: 72px;
+}
+
+.header .info .profile {
+	width: 160px;
+	height: 72px;
+	cursor: pointer;
+	transition: all .2s;
+	margin-right: 50px;
+}
+
+.header .info .profile .btn {
+	width: 100%;
+	height: 72px;
+	line-height: 72px;
+	text-align: right;
+	padding-right: 26px;
+}
+
+.header .info .profile:hover {
+	background: #f9f9f9;
+}
+
+.header .search {
+	height: 72px;
+	margin-right: 210px;
+}
+
+.content {
+	position: fixed;
+	left: 0;
+	right: 0;
+	top: 72px;
+	bottom: 0;
+}
+
+.aside {
+	width: 288px;
+	height: 100%;
+	background: #18202e;
+	overflow-y: auto;
+	position: relative;
+}
+
+.aside .cprt {
+	position: absolute;
+	left: 0;
+	bottom: 0;
+	width: 100%;
+	height: 36px;
+	background: #1d2432;
+	color: #FFF;
+	line-height: 36px;
+	text-align: center;
+}
+
+.main {
+	margin-left: 288px;
+	height: 100%;
+	background: #fafafb;
+	overflow-y: auto;
+	box-sizing: border-box;
+	padding: 25px;
+}
+
+.menu {
+	margin-top: 50px;
+}
+
+.menu li {
+
+}
+
+.menu .item {
+	display: block;
+	padding: 15px 20px 15px 30px;
+	position: relative;
+	color: #919bae;
+}
+
+.menu .item .glyphicon {
+	margin-right: 8px;
+}
+
+.menu .active {
+	color: #FFF;
+}
+
+.menu .active:before,
+.menu .item:hover:before {
+	content: '';
+	position: absolute;
+	left: 0;
+	top: 0;
+	width: 0;
+	height: 100%;
+	border-left: 4px solid #0097f7;
+}
+
+.menu .item:hover {
+	background: rgba(80, 80, 80, .1);
+}
+
+.main .title {
+	margin-bottom: 20px;
+	position: relative;
+}
+
+.main .title h4 {
+	font-weight: bold;
+	color: #000;
+	font-size: 22px;
+	position: relative;
+}
+
+.main .title .new {
+	position: absolute;
+	right: 0;
+	top: 10px;
+}
+
+.main .buttons {
+	margin-top: 20px;
+}
+
+.main .title span {
+	display: block;
+	font-size: 14px;
+	margin-top: 4px;
+	color: #787e8f;
+}
+
+.main .custom-table {
+	background: #FFF;
+}
+
+.main .custom-table .glyphicon {
+	margin-right: 4px;
+	cursor: pointer;
+}
+
+.main .pagination {
+	margin: 0;
+}
+
+
+.form-container {
+	padding: 20px;
+	background: #FFF;
+	box-shadow: 1px 1px 3px #ccc;
+}
+
+.login-body {
+	background: #fafafb;
+	position: absolute;
+	left: 0;
+	top: 0;
+	bottom: 0;
+	right: 0;
+}
+
+.login-container {
+	position: absolute;
+	left: 50%;
+	top: 50%;
+	transform: translate(-50%, -66%);
+}
+
+.login-container .title {
+	color: #000;
+	font-weight: bold;
+	font-size: 22px;
+	text-align: center;
+	margin-bottom: 20px;
+}
+
+.login-container .login {
+	background: #FFF;
+	width: 500px;
+	height: 220px;
+	box-shadow: 0px 0px 3px 1px #e1e1e1;
+	border-top: 2px solid #1c5de7;
+	box-sizing: border-box;
+	padding: 20px;
+}
+
+.statistics {
+	overflow: hidden;
+	padding-bottom: 60px;
+}
+
+.statistics li {
+	float: left;
+	position: relative;
+	width: 280px;
+	height: 100px;
+	background: #FFF;
+	box-shadow: 1px 1px 3px #e1e1e1;
+	margin-right: 35px;
+}
+
+.statistics li * {
+	position: absolute;
+}
+
+.statistics .glyphicon {
+	font-size: 45px;
+	left: 10px;
+	top: 50%;
+	transform: translateY(-50%);
+	padding: 15px;
+	transition: all .6s;
+	border-radius: 6px;
+}
+
+.statistics li:nth-child(1) .glyphicon {
+	color: #1c5de7;
+}
+
+.statistics li:nth-child(2) .glyphicon {
+	color: #40c9c6;
+}
+
+.statistics li:hover .glyphicon {
+	color: #FFF;
+}
+
+.statistics li:nth-child(1):hover .glyphicon {
+	background: #1c5de7;
+}
+
+.statistics li:nth-child(2):hover .glyphicon {
+	background: #40c9c6;
+}
+
+.statistics span {
+	right: 20px;
+	font-weight: bold;
+}
+
+.statistics .title {
+	position: absolute;
+	top: 25px;
+	font-size: 16px;
+	color: rgba(0,0,0,.4);
+}
+
+.statistics .count {
+	top: 48px;
+	color: #666;
+	font-size: 20px;
+}
+
+.welcome {
+	font-size: 14px;
+	overflow: hidden;
+	margin-bottom: 20px;
+}
+
+.welcome .underline {
+	float: left;
+	border-bottom: 2px solid #f0b41e;
+	padding: 0 4px;
+}
+
+.welcome span {
+	color: #337ab7;
+}
+
+.thumbnail-waper {
+	margin-top: 15px;
+}
+
+.form-group:last-child {
+	margin-bottom: 0;
+}
+
+.tips {
+	margin-top: 20px;
+	background: #f2dede;
+	padding: 10px 15px;
+	font-size: 14px;
+}
+
+.tips:empty {
+	display: none;
+}
+
+.modal-content {
+	display: block;
+}

+ 10 - 0
blog/public/admin/js/common.js

@@ -0,0 +1,10 @@
+function serializeToJson(ele){
+  // 获取到表单中用户输入的内容
+  // [{name: 'email', value: 'yibo@qq.com'}, {name: 'password', value: '123456'}]
+  var form = ele.serializeArray();
+  var result = {};
+  form.forEach(item => {
+      result[item.name] = item.value;
+  })
+  return result;
+}

+ 587 - 0
blog/public/admin/lib/bootstrap/css/bootstrap-theme.css

@@ -0,0 +1,587 @@
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+.btn-default,
+.btn-primary,
+.btn-success,
+.btn-info,
+.btn-warning,
+.btn-danger {
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
+}
+.btn-default:active,
+.btn-primary:active,
+.btn-success:active,
+.btn-info:active,
+.btn-warning:active,
+.btn-danger:active,
+.btn-default.active,
+.btn-primary.active,
+.btn-success.active,
+.btn-info.active,
+.btn-warning.active,
+.btn-danger.active {
+  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+.btn-default.disabled,
+.btn-primary.disabled,
+.btn-success.disabled,
+.btn-info.disabled,
+.btn-warning.disabled,
+.btn-danger.disabled,
+.btn-default[disabled],
+.btn-primary[disabled],
+.btn-success[disabled],
+.btn-info[disabled],
+.btn-warning[disabled],
+.btn-danger[disabled],
+fieldset[disabled] .btn-default,
+fieldset[disabled] .btn-primary,
+fieldset[disabled] .btn-success,
+fieldset[disabled] .btn-info,
+fieldset[disabled] .btn-warning,
+fieldset[disabled] .btn-danger {
+  -webkit-box-shadow: none;
+          box-shadow: none;
+}
+.btn-default .badge,
+.btn-primary .badge,
+.btn-success .badge,
+.btn-info .badge,
+.btn-warning .badge,
+.btn-danger .badge {
+  text-shadow: none;
+}
+.btn:active,
+.btn.active {
+  background-image: none;
+}
+.btn-default {
+  text-shadow: 0 1px 0 #fff;
+  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
+  background-image:      -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
+  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #dbdbdb;
+  border-color: #ccc;
+}
+.btn-default:hover,
+.btn-default:focus {
+  background-color: #e0e0e0;
+  background-position: 0 -15px;
+}
+.btn-default:active,
+.btn-default.active {
+  background-color: #e0e0e0;
+  border-color: #dbdbdb;
+}
+.btn-default.disabled,
+.btn-default[disabled],
+fieldset[disabled] .btn-default,
+.btn-default.disabled:hover,
+.btn-default[disabled]:hover,
+fieldset[disabled] .btn-default:hover,
+.btn-default.disabled:focus,
+.btn-default[disabled]:focus,
+fieldset[disabled] .btn-default:focus,
+.btn-default.disabled.focus,
+.btn-default[disabled].focus,
+fieldset[disabled] .btn-default.focus,
+.btn-default.disabled:active,
+.btn-default[disabled]:active,
+fieldset[disabled] .btn-default:active,
+.btn-default.disabled.active,
+.btn-default[disabled].active,
+fieldset[disabled] .btn-default.active {
+  background-color: #e0e0e0;
+  background-image: none;
+}
+.btn-primary {
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #245580;
+}
+.btn-primary:hover,
+.btn-primary:focus {
+  background-color: #265a88;
+  background-position: 0 -15px;
+}
+.btn-primary:active,
+.btn-primary.active {
+  background-color: #265a88;
+  border-color: #245580;
+}
+.btn-primary.disabled,
+.btn-primary[disabled],
+fieldset[disabled] .btn-primary,
+.btn-primary.disabled:hover,
+.btn-primary[disabled]:hover,
+fieldset[disabled] .btn-primary:hover,
+.btn-primary.disabled:focus,
+.btn-primary[disabled]:focus,
+fieldset[disabled] .btn-primary:focus,
+.btn-primary.disabled.focus,
+.btn-primary[disabled].focus,
+fieldset[disabled] .btn-primary.focus,
+.btn-primary.disabled:active,
+.btn-primary[disabled]:active,
+fieldset[disabled] .btn-primary:active,
+.btn-primary.disabled.active,
+.btn-primary[disabled].active,
+fieldset[disabled] .btn-primary.active {
+  background-color: #265a88;
+  background-image: none;
+}
+.btn-success {
+  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
+  background-image:      -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
+  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #3e8f3e;
+}
+.btn-success:hover,
+.btn-success:focus {
+  background-color: #419641;
+  background-position: 0 -15px;
+}
+.btn-success:active,
+.btn-success.active {
+  background-color: #419641;
+  border-color: #3e8f3e;
+}
+.btn-success.disabled,
+.btn-success[disabled],
+fieldset[disabled] .btn-success,
+.btn-success.disabled:hover,
+.btn-success[disabled]:hover,
+fieldset[disabled] .btn-success:hover,
+.btn-success.disabled:focus,
+.btn-success[disabled]:focus,
+fieldset[disabled] .btn-success:focus,
+.btn-success.disabled.focus,
+.btn-success[disabled].focus,
+fieldset[disabled] .btn-success.focus,
+.btn-success.disabled:active,
+.btn-success[disabled]:active,
+fieldset[disabled] .btn-success:active,
+.btn-success.disabled.active,
+.btn-success[disabled].active,
+fieldset[disabled] .btn-success.active {
+  background-color: #419641;
+  background-image: none;
+}
+.btn-info {
+  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
+  background-image:      -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
+  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #28a4c9;
+}
+.btn-info:hover,
+.btn-info:focus {
+  background-color: #2aabd2;
+  background-position: 0 -15px;
+}
+.btn-info:active,
+.btn-info.active {
+  background-color: #2aabd2;
+  border-color: #28a4c9;
+}
+.btn-info.disabled,
+.btn-info[disabled],
+fieldset[disabled] .btn-info,
+.btn-info.disabled:hover,
+.btn-info[disabled]:hover,
+fieldset[disabled] .btn-info:hover,
+.btn-info.disabled:focus,
+.btn-info[disabled]:focus,
+fieldset[disabled] .btn-info:focus,
+.btn-info.disabled.focus,
+.btn-info[disabled].focus,
+fieldset[disabled] .btn-info.focus,
+.btn-info.disabled:active,
+.btn-info[disabled]:active,
+fieldset[disabled] .btn-info:active,
+.btn-info.disabled.active,
+.btn-info[disabled].active,
+fieldset[disabled] .btn-info.active {
+  background-color: #2aabd2;
+  background-image: none;
+}
+.btn-warning {
+  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
+  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
+  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #e38d13;
+}
+.btn-warning:hover,
+.btn-warning:focus {
+  background-color: #eb9316;
+  background-position: 0 -15px;
+}
+.btn-warning:active,
+.btn-warning.active {
+  background-color: #eb9316;
+  border-color: #e38d13;
+}
+.btn-warning.disabled,
+.btn-warning[disabled],
+fieldset[disabled] .btn-warning,
+.btn-warning.disabled:hover,
+.btn-warning[disabled]:hover,
+fieldset[disabled] .btn-warning:hover,
+.btn-warning.disabled:focus,
+.btn-warning[disabled]:focus,
+fieldset[disabled] .btn-warning:focus,
+.btn-warning.disabled.focus,
+.btn-warning[disabled].focus,
+fieldset[disabled] .btn-warning.focus,
+.btn-warning.disabled:active,
+.btn-warning[disabled]:active,
+fieldset[disabled] .btn-warning:active,
+.btn-warning.disabled.active,
+.btn-warning[disabled].active,
+fieldset[disabled] .btn-warning.active {
+  background-color: #eb9316;
+  background-image: none;
+}
+.btn-danger {
+  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
+  background-image:      -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
+  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #b92c28;
+}
+.btn-danger:hover,
+.btn-danger:focus {
+  background-color: #c12e2a;
+  background-position: 0 -15px;
+}
+.btn-danger:active,
+.btn-danger.active {
+  background-color: #c12e2a;
+  border-color: #b92c28;
+}
+.btn-danger.disabled,
+.btn-danger[disabled],
+fieldset[disabled] .btn-danger,
+.btn-danger.disabled:hover,
+.btn-danger[disabled]:hover,
+fieldset[disabled] .btn-danger:hover,
+.btn-danger.disabled:focus,
+.btn-danger[disabled]:focus,
+fieldset[disabled] .btn-danger:focus,
+.btn-danger.disabled.focus,
+.btn-danger[disabled].focus,
+fieldset[disabled] .btn-danger.focus,
+.btn-danger.disabled:active,
+.btn-danger[disabled]:active,
+fieldset[disabled] .btn-danger:active,
+.btn-danger.disabled.active,
+.btn-danger[disabled].active,
+fieldset[disabled] .btn-danger.active {
+  background-color: #c12e2a;
+  background-image: none;
+}
+.thumbnail,
+.img-thumbnail {
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+}
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+  background-color: #e8e8e8;
+  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
+  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
+  background-repeat: repeat-x;
+}
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+  background-color: #2e6da4;
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
+  background-repeat: repeat-x;
+}
+.navbar-default {
+  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
+  background-image:      -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
+  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-radius: 4px;
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
+}
+.navbar-default .navbar-nav > .open > a,
+.navbar-default .navbar-nav > .active > a {
+  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
+  background-image:      -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
+  background-image:         linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
+  background-repeat: repeat-x;
+  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
+          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
+}
+.navbar-brand,
+.navbar-nav > li > a {
+  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
+}
+.navbar-inverse {
+  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
+  background-image:      -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
+  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-radius: 4px;
+}
+.navbar-inverse .navbar-nav > .open > a,
+.navbar-inverse .navbar-nav > .active > a {
+  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
+  background-image:      -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
+  background-image:         linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
+  background-repeat: repeat-x;
+  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
+          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
+}
+.navbar-inverse .navbar-brand,
+.navbar-inverse .navbar-nav > li > a {
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
+}
+.navbar-static-top,
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+  border-radius: 0;
+}
+@media (max-width: 767px) {
+  .navbar .navbar-nav .open .dropdown-menu > .active > a,
+  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
+  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
+    color: #fff;
+    background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+    background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+    background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
+    background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
+    background-repeat: repeat-x;
+  }
+}
+.alert {
+  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
+}
+.alert-success {
+  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
+  background-image:      -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
+  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #b2dba1;
+}
+.alert-info {
+  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
+  background-image:      -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
+  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #9acfea;
+}
+.alert-warning {
+  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
+  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
+  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #f5e79e;
+}
+.alert-danger {
+  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
+  background-image:      -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
+  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #dca7a7;
+}
+.progress {
+  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
+  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
+  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar {
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #286090 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #286090 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar-success {
+  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
+  background-image:      -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
+  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar-info {
+  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
+  background-image:      -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
+  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar-warning {
+  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
+  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
+  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar-danger {
+  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
+  background-image:      -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
+  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar-striped {
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.list-group {
+  border-radius: 4px;
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+}
+.list-group-item.active,
+.list-group-item.active:hover,
+.list-group-item.active:focus {
+  text-shadow: 0 -1px 0 #286090;
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #2b669a;
+}
+.list-group-item.active .badge,
+.list-group-item.active:hover .badge,
+.list-group-item.active:focus .badge {
+  text-shadow: none;
+}
+.panel {
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
+          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
+}
+.panel-default > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
+  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
+  background-repeat: repeat-x;
+}
+.panel-primary > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
+  background-repeat: repeat-x;
+}
+.panel-success > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
+  background-image:      -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
+  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
+  background-repeat: repeat-x;
+}
+.panel-info > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
+  background-image:      -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
+  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
+  background-repeat: repeat-x;
+}
+.panel-warning > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
+  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
+  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
+  background-repeat: repeat-x;
+}
+.panel-danger > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
+  background-image:      -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
+  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
+  background-repeat: repeat-x;
+}
+.well {
+  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
+  background-image:      -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
+  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #dcdcdc;
+  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
+          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
+}
+/*# sourceMappingURL=bootstrap-theme.css.map */

File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/bootstrap/css/bootstrap-theme.css.map


File diff suppressed because it is too large
+ 6 - 0
blog/public/admin/lib/bootstrap/css/bootstrap-theme.min.css


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/bootstrap/css/bootstrap-theme.min.css.map


File diff suppressed because it is too large
+ 6757 - 0
blog/public/admin/lib/bootstrap/css/bootstrap.css


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/bootstrap/css/bootstrap.css.map


File diff suppressed because it is too large
+ 6 - 0
blog/public/admin/lib/bootstrap/css/bootstrap.min.css


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/bootstrap/css/bootstrap.min.css.map


BIN
blog/public/admin/lib/bootstrap/fonts/glyphicons-halflings-regular.eot


File diff suppressed because it is too large
+ 288 - 0
blog/public/admin/lib/bootstrap/fonts/glyphicons-halflings-regular.svg


BIN
blog/public/admin/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf


BIN
blog/public/admin/lib/bootstrap/fonts/glyphicons-halflings-regular.woff


BIN
blog/public/admin/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2


File diff suppressed because it is too large
+ 2377 - 0
blog/public/admin/lib/bootstrap/js/bootstrap.js


File diff suppressed because it is too large
+ 7 - 0
blog/public/admin/lib/bootstrap/js/bootstrap.min.js


+ 13 - 0
blog/public/admin/lib/bootstrap/js/npm.js

@@ -0,0 +1,13 @@
+// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
+require('../../js/transition.js')
+require('../../js/alert.js')
+require('../../js/button.js')
+require('../../js/carousel.js')
+require('../../js/collapse.js')
+require('../../js/dropdown.js')
+require('../../js/modal.js')
+require('../../js/tooltip.js')
+require('../../js/popover.js')
+require('../../js/scrollspy.js')
+require('../../js/tab.js')
+require('../../js/affix.js')

+ 21 - 0
blog/public/admin/lib/ckeditor5/LICENSE.md

@@ -0,0 +1,21 @@
+Software License Agreement
+==========================
+
+**CKEditor 5 classic editor build** – https://github.com/ckeditor/ckeditor5-build-classic <br>
+Copyright (c) 2003-2018, [CKSource](http://cksource.com) Frederico Knabben. All rights reserved.
+
+Licensed under the terms of [GNU General Public License Version 2 or later](http://www.gnu.org/licenses/gpl.html).
+
+Sources of Intellectual Property Included in CKEditor
+-----------------------------------------------------
+
+Where not otherwise indicated, all CKEditor content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, CKEditor will incorporate work done by developers outside of CKSource with their express permission.
+
+The following libraries are included in CKEditor under the [MIT license](https://opensource.org/licenses/MIT):
+
+* Lo-Dash - Copyright (c) JS Foundation and other contributors https://js.foundation/. Based on Underscore.js, copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors http://underscorejs.org/.
+
+Trademarks
+----------
+
+**CKEditor** is a trademark of [CKSource](http://cksource.com) Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders.

+ 9 - 0
blog/public/admin/lib/ckeditor5/README.md

@@ -0,0 +1,9 @@
+CKEditor 5 classic editor build v11.1.1
+=======================================
+
+In order to start using CKEditor 5 Builds, configure or customize them, please visit http://docs.ckeditor.com/ckeditor5/latest/builds/index.html
+
+## License
+
+Licensed under the terms of [GNU General Public License Version 2 or later](http://www.gnu.org/licenses/gpl.html).
+For full details about the license, please check the LICENSE.md file.

File diff suppressed because it is too large
+ 6 - 0
blog/public/admin/lib/ckeditor5/ckeditor.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/ckeditor.js.map


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/ar.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/ast.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/bg.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/ca.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/cs.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/da.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/de-ch.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/de.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/el.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/en-au.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/eo.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/es.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/et.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/eu.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/fa.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/fi.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/fr.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/gl.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/gu.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/he.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/hr.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/hu.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/it.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/ja.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/km.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/kn.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/ko.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/ku.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/nb.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/ne.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/nl.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/no.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/oc.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/pl.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/pt-br.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/pt.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/ro.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/ru.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/si.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/sk.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/sq.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/sv.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/tr.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/tt.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/ug.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/uk.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/zh-cn.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/ckeditor5/translations/zh.js


File diff suppressed because it is too large
+ 22 - 0
blog/public/admin/lib/echarts/echarts.min.js


+ 313 - 0
blog/public/admin/lib/jquery/AUTHORS.txt

@@ -0,0 +1,313 @@
+Authors ordered by first contribution.
+
+John Resig <jeresig@gmail.com>
+Gilles van den Hoven <gilles0181@gmail.com>
+Michael Geary <mike@geary.com>
+Stefan Petre <stefan.petre@gmail.com>
+Yehuda Katz <wycats@gmail.com>
+Corey Jewett <cj@syntheticplayground.com>
+Klaus Hartl <klaus.hartl@gmail.com>
+Franck Marcia <franck.marcia@gmail.com>
+Jörn Zaefferer <joern.zaefferer@gmail.com>
+Paul Bakaus <paul.bakaus@gmail.com>
+Brandon Aaron <brandon.aaron@gmail.com>
+Mike Alsup <malsup@gmail.com>
+Dave Methvin <dave.methvin@gmail.com>
+Ed Engelhardt <edengelhardt@gmail.com>
+Sean Catchpole <littlecooldude@gmail.com>
+Paul Mclanahan <pmclanahan@gmail.com>
+David Serduke <davidserduke@gmail.com>
+Richard D. Worth <rdworth@gmail.com>
+Scott González <scott.gonzalez@gmail.com>
+Ariel Flesler <aflesler@gmail.com>
+Jon Evans <jon@springyweb.com>
+TJ Holowaychuk <tj@vision-media.ca>
+Michael Bensoussan <mickey@seesmic.com>
+Robert Katić <robert.katic@gmail.com>
+Louis-Rémi Babé <lrbabe@gmail.com>
+Earle Castledine <mrspeaker@gmail.com>
+Damian Janowski <damian.janowski@gmail.com>
+Rich Dougherty <rich@rd.gen.nz>
+Kim Dalsgaard <kim@kimdalsgaard.com>
+Andrea Giammarchi <andrea.giammarchi@gmail.com>
+Mark Gibson <jollytoad@gmail.com>
+Karl Swedberg <kswedberg@gmail.com>
+Justin Meyer <justinbmeyer@gmail.com>
+Ben Alman <cowboy@rj3.net>
+James Padolsey <cla@padolsey.net>
+David Petersen <public@petersendidit.com>
+Batiste Bieler <batiste.bieler@gmail.com>
+Alexander Farkas <info@corrupt-system.de>
+Rick Waldron <waldron.rick@gmail.com>
+Filipe Fortes <filipe@fortes.com>
+Neeraj Singh <neerajdotname@gmail.com>
+Paul Irish <paul.irish@gmail.com>
+Iraê Carvalho <irae@irae.pro.br>
+Matt Curry <matt@pseudocoder.com>
+Michael Monteleone <michael@michaelmonteleone.net>
+Noah Sloan <noah.sloan@gmail.com>
+Tom Viner <github@viner.tv>
+Douglas Neiner <doug@dougneiner.com>
+Adam J. Sontag <ajpiano@ajpiano.com>
+Dave Reed <dareed@microsoft.com>
+Ralph Whitbeck <ralph.whitbeck@gmail.com>
+Carl Fürstenberg <azatoth@gmail.com>
+Jacob Wright <jacwright@gmail.com>
+J. Ryan Stinnett <jryans@gmail.com>
+unknown <Igen005@.upcorp.ad.uprr.com>
+temp01 <temp01irc@gmail.com>
+Heungsub Lee <h@subl.ee>
+Colin Snover <github.com@zetafleet.com>
+Ryan W Tenney <ryan@10e.us>
+Pinhook <contact@pinhooklabs.com>
+Ron Otten <r.j.g.otten@gmail.com>
+Jephte Clain <Jephte.Clain@univ-reunion.fr>
+Anton Matzneller <obhvsbypqghgc@gmail.com>
+Alex Sexton <AlexSexton@gmail.com>
+Dan Heberden <danheberden@gmail.com>
+Henri Wiechers <hwiechers@gmail.com>
+Russell Holbrook <russell.holbrook@patch.com>
+Julian Aubourg <aubourg.julian@gmail.com>
+Gianni Alessandro Chiappetta <gianni@runlevel6.org>
+Scott Jehl <scottjehl@gmail.com>
+James Burke <jrburke@gmail.com>
+Jonas Pfenniger <jonas@pfenniger.name>
+Xavi Ramirez <xavi.rmz@gmail.com>
+Jared Grippe <jared@deadlyicon.com>
+Sylvester Keil <sylvester@keil.or.at>
+Brandon Sterne <bsterne@mozilla.com>
+Mathias Bynens <mathias@qiwi.be>
+Timmy Willison <4timmywil@gmail.com>
+Corey Frang <gnarf37@gmail.com>
+Digitalxero <digitalxero>
+Anton Kovalyov <anton@kovalyov.net>
+David Murdoch <david@davidmurdoch.com>
+Josh Varner <josh.varner@gmail.com>
+Charles McNulty <cmcnulty@kznf.com>
+Jordan Boesch <jboesch26@gmail.com>
+Jess Thrysoee <jess@thrysoee.dk>
+Michael Murray <m@murz.net>
+Lee Carpenter <elcarpie@gmail.com>
+Alexis Abril <me@alexisabril.com>
+Rob Morgan <robbym@gmail.com>
+John Firebaugh <john_firebaugh@bigfix.com>
+Sam Bisbee <sam@sbisbee.com>
+Gilmore Davidson <gilmoreorless@gmail.com>
+Brian Brennan <me@brianlovesthings.com>
+Xavier Montillet <xavierm02.net@gmail.com>
+Daniel Pihlstrom <sciolist.se@gmail.com>
+Sahab Yazdani <sahab.yazdani+github@gmail.com>
+avaly <github-com@agachi.name>
+Scott Hughes <hi@scott-hughes.me>
+Mike Sherov <mike.sherov@gmail.com>
+Greg Hazel <ghazel@gmail.com>
+Schalk Neethling <schalk@ossreleasefeed.com>
+Denis Knauf <Denis.Knauf@gmail.com>
+Timo Tijhof <krinklemail@gmail.com>
+Steen Nielsen <swinedk@gmail.com>
+Anton Ryzhov <anton@ryzhov.me>
+Shi Chuan <shichuanr@gmail.com>
+Berker Peksag <berker.peksag@gmail.com>
+Toby Brain <tobyb@freshview.com>
+Matt Mueller <mattmuelle@gmail.com>
+Justin <drakefjustin@gmail.com>
+Daniel Herman <daniel.c.herman@gmail.com>
+Oleg Gaidarenko <markelog@gmail.com>
+Richard Gibson <richard.gibson@gmail.com>
+Rafaël Blais Masson <rafbmasson@gmail.com>
+cmc3cn <59194618@qq.com>
+Joe Presbrey <presbrey@gmail.com>
+Sindre Sorhus <sindresorhus@gmail.com>
+Arne de Bree <arne@bukkie.nl>
+Vladislav Zarakovsky <vlad.zar@gmail.com>
+Andrew E Monat <amonat@gmail.com>
+Oskari <admin@o-programs.com>
+Joao Henrique de Andrade Bruni <joaohbruni@yahoo.com.br>
+tsinha <tsinha@Anthonys-MacBook-Pro.local>
+Matt Farmer <matt@frmr.me>
+Trey Hunner <treyhunner@gmail.com>
+Jason Moon <jmoon@socialcast.com>
+Jeffery To <jeffery.to@gmail.com>
+Kris Borchers <kris.borchers@gmail.com>
+Vladimir Zhuravlev <private.face@gmail.com>
+Jacob Thornton <jacobthornton@gmail.com>
+Chad Killingsworth <chadkillingsworth@missouristate.edu>
+Nowres Rafid <nowres.rafed@gmail.com>
+David Benjamin <davidben@mit.edu>
+Uri Gilad <antishok@gmail.com>
+Chris Faulkner <thefaulkner@gmail.com>
+Elijah Manor <elijah.manor@gmail.com>
+Daniel Chatfield <chatfielddaniel@gmail.com>
+Nikita Govorov <nikita.govorov@gmail.com>
+Wesley Walser <waw325@gmail.com>
+Mike Pennisi <mike@mikepennisi.com>
+Markus Staab <markus.staab@redaxo.de>
+Dave Riddle <david@joyvuu.com>
+Callum Macrae <callum@lynxphp.com>
+Benjamin Truyman <bentruyman@gmail.com>
+James Huston <james@jameshuston.net>
+Erick Ruiz de Chávez <erickrdch@gmail.com>
+David Bonner <dbonner@cogolabs.com>
+Akintayo Akinwunmi <aakinwunmi@judge.com>
+MORGAN <morgan@morgangraphics.com>
+Ismail Khair <ismail.khair@gmail.com>
+Carl Danley <carldanley@gmail.com>
+Mike Petrovich <michael.c.petrovich@gmail.com>
+Greg Lavallee <greglavallee@wapolabs.com>
+Daniel Gálvez <dgalvez@editablething.com>
+Sai Lung Wong <sai.wong@huffingtonpost.com>
+Tom H Fuertes <TomFuertes@gmail.com>
+Roland Eckl <eckl.roland@googlemail.com>
+Jay Merrifield <fracmak@gmail.com>
+Allen J Schmidt Jr <cobrasoft@gmail.com>
+Jonathan Sampson <jjdsampson@gmail.com>
+Marcel Greter <marcel.greter@ocbnet.ch>
+Matthias Jäggli <matthias.jaeggli@gmail.com>
+David Fox <dfoxinator@gmail.com>
+Yiming He <yiminghe@gmail.com>
+Devin Cooper <cooper.semantics@gmail.com>
+Paul Ramos <paul.b.ramos@gmail.com>
+Rod Vagg <rod@vagg.org>
+Bennett Sorbo <bsorbo@gmail.com>
+Sebastian Burkhard <sebi.burkhard@gmail.com>
+Zachary Adam Kaplan <razic@viralkitty.com>
+nanto_vi <nanto@moon.email.ne.jp>
+nanto <nanto@moon.email.ne.jp>
+Danil Somsikov <danilasomsikov@gmail.com>
+Ryunosuke SATO <tricknotes.rs@gmail.com>
+Jean Boussier <jean.boussier@gmail.com>
+Adam Coulombe <me@adam.co>
+Andrew Plummer <plummer.andrew@gmail.com>
+Mark Raddatz <mraddatz@gmail.com>
+Isaac Z. Schlueter <i@izs.me>
+Karl Sieburg <ksieburg@yahoo.com>
+Pascal Borreli <pascal@borreli.com>
+Nguyen Phuc Lam <ruado1987@gmail.com>
+Dmitry Gusev <dmitry.gusev@gmail.com>
+Michał Gołębiowski-Owczarek <m.goleb@gmail.com>
+Li Xudong <istonelee@gmail.com>
+Steven Benner <admin@stevenbenner.com>
+Tom H Fuertes <tomfuertes@gmail.com>
+Renato Oliveira dos Santos <ros3@cin.ufpe.br>
+ros3cin <ros3@cin.ufpe.br>
+Jason Bedard <jason+jquery@jbedard.ca>
+Kyle Robinson Young <kyle@dontkry.com>
+Chris Talkington <chris@talkingtontech.com>
+Eddie Monge <eddie@eddiemonge.com>
+Terry Jones <terry@jon.es>
+Jason Merino <jasonmerino@gmail.com>
+Jeremy Dunck <jdunck@gmail.com>
+Chris Price <price.c@gmail.com>
+Guy Bedford <guybedford@gmail.com>
+Amey Sakhadeo <me@ameyms.com>
+Mike Sidorov <mikes.ekb@gmail.com>
+Anthony Ryan <anthonyryan1@gmail.com>
+Dominik D. Geyer <dominik.geyer@gmail.com>
+George Kats <katsgeorgeek@gmail.com>
+Lihan Li <frankieteardrop@gmail.com>
+Ronny Springer <springer.ronny@gmail.com>
+Chris Antaki <ChrisAntaki@gmail.com>
+Marian Sollmann <marian.sollmann@cargomedia.ch>
+njhamann <njhamann@gmail.com>
+Ilya Kantor <iliakan@gmail.com>
+David Hong <d.hong@me.com>
+John Paul <john@johnkpaul.com>
+Jakob Stoeck <jakob@pokermania.de>
+Christopher Jones <chris@cjqed.com>
+Forbes Lindesay <forbes@lindesay.co.uk>
+S. Andrew Sheppard <andrew@wq.io>
+Leonardo Balter <leonardo.balter@gmail.com>
+Roman Reiß <me@silverwind.io>
+Benjy Cui <benjytrys@gmail.com>
+Rodrigo Rosenfeld Rosas <rr.rosas@gmail.com>
+John Hoven <hovenj@gmail.com>
+Philip Jägenstedt <philip@foolip.org>
+Christian Kosmowski <ksmwsk@gmail.com>
+Liang Peng <poppinlp@gmail.com>
+TJ VanToll <tj.vantoll@gmail.com>
+Senya Pugach <upisfree@outlook.com>
+Aurelio De Rosa <aurelioderosa@gmail.com>
+Nazar Mokrynskyi <nazar@mokrynskyi.com>
+Amit Merchant <bullredeyes@gmail.com>
+Jason Bedard <jason+github@jbedard.ca>
+Arthur Verschaeve <contact@arthurverschaeve.be>
+Dan Hart <danhart@notonthehighstreet.com>
+Bin Xin <rhyzix@gmail.com>
+David Corbacho <davidcorbacho@gmail.com>
+Veaceslav Grimalschi <grimalschi@yandex.ru>
+Daniel Husar <dano.husar@gmail.com>
+Frederic Hemberger <mail@frederic-hemberger.de>
+Ben Toews <mastahyeti@gmail.com>
+Aditya Raghavan <araghavan3@gmail.com>
+Victor Homyakov <vkhomyackov@gmail.com>
+Shivaji Varma <contact@shivajivarma.com>
+Nicolas HENRY <icewil@gmail.com>
+Anne-Gaelle Colom <coloma@westminster.ac.uk>
+George Mauer <gmauer@gmail.com>
+Leonardo Braga <leonardo.braga@gmail.com>
+Stephen Edgar <stephen@netweb.com.au>
+Thomas Tortorini <thomastortorini@gmail.com>
+Winston Howes <winstonhowes@gmail.com>
+Jon Hester <jon.d.hester@gmail.com>
+Alexander O'Mara <me@alexomara.com>
+Bastian Buchholz <buchholz.bastian@googlemail.com>
+Arthur Stolyar <nekr.fabula@gmail.com>
+Calvin Metcalf <calvin.metcalf@gmail.com>
+Mu Haibao <mhbseal@163.com>
+Richard McDaniel <rm0026@uah.edu>
+Chris Rebert <github@rebertia.com>
+Gabriel Schulhof <gabriel.schulhof@intel.com>
+Gilad Peleg <giladp007@gmail.com>
+Martin Naumann <martin@geekonaut.de>
+Marek Lewandowski <m.lewandowski@cksource.com>
+Bruno Pérel <brunoperel@gmail.com>
+Reed Loden <reed@reedloden.com>
+Daniel Nill <daniellnill@gmail.com>
+Yongwoo Jeon <yongwoo.jeon@navercorp.com>
+Sean Henderson <seanh.za@gmail.com>
+Richard Kraaijenhagen <stdin+git@riichard.com>
+Connor Atherton <c.liam.atherton@gmail.com>
+Gary Ye <garysye@gmail.com>
+Christian Grete <webmaster@christiangrete.com>
+Liza Ramo <liza.h.ramo@gmail.com>
+Julian Alexander Murillo <julian.alexander.murillo@gmail.com>
+Joelle Fleurantin <joasqueeniebee@gmail.com>
+Jae Sung Park <alberto.park@gmail.com>
+Jun Sun <klsforever@gmail.com>
+Josh Soref <apache@soref.com>
+Henry Wong <henryw4k@gmail.com>
+Jon Dufresne <jon.dufresne@gmail.com>
+Martijn W. van der Lee <martijn@vanderlee.com>
+Devin Wilson <dwilson6.github@gmail.com>
+Steve Mao <maochenyan@gmail.com>
+Zack Hall <zackhall@outlook.com>
+Bernhard M. Wiedemann <jquerybmw@lsmod.de>
+Todor Prikumov <tono_pr@abv.bg>
+Jha Naman <createnaman@gmail.com>
+William Robinet <william.robinet@conostix.com>
+Alexander Lisianoi <all3fox@gmail.com>
+Vitaliy Terziev <vitaliyterziev@gmail.com>
+Joe Trumbull <trumbull.j@gmail.com>
+Alexander K <xpyro@ya.ru>
+Damian Senn <jquery@topaxi.codes>
+Ralin Chimev <ralin.chimev@gmail.com>
+Felipe Sateler <fsateler@gmail.com>
+Christophe Tafani-Dereeper <christophetd@hotmail.fr>
+Manoj Kumar <nithmanoj@gmail.com>
+David Broder-Rodgers <broder93@gmail.com>
+Alex Louden <alex@louden.com>
+Alex Padilla <alexonezero@outlook.com>
+南漂一卒 <shiy007@qq.com>
+karan-96 <karanbatra96@gmail.com>
+Boom Lee <teabyii@gmail.com>
+Andreas Solleder <asol@num42.de>
+CDAGaming <cstack2011@yahoo.com>
+Pierre Spring <pierre@nelm.io>
+Shashanka Nataraj <shashankan.10@gmail.com>
+Erik Lax <erik@datahack.se>
+Matan Kotler-Berkowitz <205matan@gmail.com>
+Jordan Beland <jordan.beland@gmail.com>
+Henry Zhu <hi@henryzoo.com>
+Saptak Sengupta <saptak013@gmail.com>
+Nilton Cesar <niltoncms@gmail.com>
+basil.belokon <basil.belokon@gmail.com>

+ 36 - 0
blog/public/admin/lib/jquery/LICENSE.txt

@@ -0,0 +1,36 @@
+Copyright JS Foundation and other contributors, https://js.foundation/
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/jquery/jquery
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+====
+
+All files located in the node_modules and external directories are
+externally maintained libraries used by this software which have their
+own licenses; we recommend you read them, as their terms may differ from
+the terms above.

+ 67 - 0
blog/public/admin/lib/jquery/README.md

@@ -0,0 +1,67 @@
+# jQuery
+
+> jQuery is a fast, small, and feature-rich JavaScript library.
+
+For information on how to get started and how to use jQuery, please see [jQuery's documentation](http://api.jquery.com/).
+For source files and issues, please visit the [jQuery repo](https://github.com/jquery/jquery).
+
+If upgrading, please see the [blog post for 3.3.1](https://blog.jquery.com/2017/03/20/jquery-3.3.1-now-available/). This includes notable differences from the previous version and a more readable changelog.
+
+## Including jQuery
+
+Below are some of the most common ways to include jQuery.
+
+### Browser
+
+#### Script tag
+
+```html
+<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
+```
+
+#### Babel
+
+[Babel](http://babeljs.io/) is a next generation JavaScript compiler. One of the features is the ability to use ES6/ES2015 modules now, even though browsers do not yet support this feature natively.
+
+```js
+import $ from "jquery";
+```
+
+#### Browserify/Webpack
+
+There are several ways to use [Browserify](http://browserify.org/) and [Webpack](https://webpack.github.io/). For more information on using these tools, please refer to the corresponding project's documention. In the script, including jQuery will usually look like this...
+
+```js
+var $ = require("jquery");
+```
+
+#### AMD (Asynchronous Module Definition)
+
+AMD is a module format built for the browser. For more information, we recommend [require.js' documentation](http://requirejs.org/docs/whyamd.html).
+
+```js
+define(["jquery"], function($) {
+
+});
+```
+
+### Node
+
+To include jQuery in [Node](nodejs.org), first install with npm.
+
+```sh
+npm install jquery
+```
+
+For jQuery to work in Node, a window with a document is required. Since no such window exists natively in Node, one can be mocked by tools such as [jsdom](https://github.com/tmpvar/jsdom). This can be useful for testing purposes.
+
+```js
+require("jsdom").env("", function(err, window) {
+	if (err) {
+		console.error(err);
+		return;
+	}
+
+	var $ = require("jquery")(window);
+});
+```

+ 14 - 0
blog/public/admin/lib/jquery/bower.json

@@ -0,0 +1,14 @@
+{
+  "name": "jquery",
+  "main": "dist/jquery.js",
+  "license": "MIT",
+  "ignore": [
+    "package.json"
+  ],
+  "keywords": [
+    "jquery",
+    "javascript",
+    "browser",
+    "library"
+  ]
+}

+ 399 - 0
blog/public/admin/lib/jquery/dist/core.js

@@ -0,0 +1,399 @@
+/* global Symbol */
+// Defining this global in .eslintrc.json would create a danger of using the global
+// unguarded in another place, it seems safer to define global only for this module
+
+define( [
+	"./var/arr",
+	"./var/document",
+	"./var/getProto",
+	"./var/slice",
+	"./var/concat",
+	"./var/push",
+	"./var/indexOf",
+	"./var/class2type",
+	"./var/toString",
+	"./var/hasOwn",
+	"./var/fnToString",
+	"./var/ObjectFunctionString",
+	"./var/support",
+	"./var/isFunction",
+	"./var/isWindow",
+	"./core/DOMEval",
+	"./core/toType"
+], function( arr, document, getProto, slice, concat, push, indexOf,
+	class2type, toString, hasOwn, fnToString, ObjectFunctionString,
+	support, isFunction, isWindow, DOMEval, toType ) {
+
+"use strict";
+
+var
+	version = "3.3.1",
+
+	// Define a local copy of jQuery
+	jQuery = function( selector, context ) {
+
+		// The jQuery object is actually just the init constructor 'enhanced'
+		// Need init if jQuery is called (just allow error to be thrown if not included)
+		return new jQuery.fn.init( selector, context );
+	},
+
+	// Support: Android <=4.0 only
+	// Make sure we trim BOM and NBSP
+	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
+
+jQuery.fn = jQuery.prototype = {
+
+	// The current version of jQuery being used
+	jquery: version,
+
+	constructor: jQuery,
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	toArray: function() {
+		return slice.call( this );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+
+		// Return all the elements in a clean array
+		if ( num == null ) {
+			return slice.call( this );
+		}
+
+		// Return just the one element from the set
+		return num < 0 ? this[ num + this.length ] : this[ num ];
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems ) {
+
+		// Build a new jQuery matched element set
+		var ret = jQuery.merge( this.constructor(), elems );
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	each: function( callback ) {
+		return jQuery.each( this, callback );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map( this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		} ) );
+	},
+
+	slice: function() {
+		return this.pushStack( slice.apply( this, arguments ) );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	eq: function( i ) {
+		var len = this.length,
+			j = +i + ( i < 0 ? len : 0 );
+		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor();
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: push,
+	sort: arr.sort,
+	splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var options, name, src, copy, copyIsArray, clone,
+		target = arguments[ 0 ] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+
+		// Skip the boolean and the target
+		target = arguments[ i ] || {};
+		i++;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !isFunction( target ) ) {
+		target = {};
+	}
+
+	// Extend jQuery itself if only one argument is passed
+	if ( i === length ) {
+		target = this;
+		i--;
+	}
+
+	for ( ; i < length; i++ ) {
+
+		// Only deal with non-null/undefined values
+		if ( ( options = arguments[ i ] ) != null ) {
+
+			// Extend the base object
+			for ( name in options ) {
+				src = target[ name ];
+				copy = options[ name ];
+
+				// Prevent never-ending loop
+				if ( target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
+					( copyIsArray = Array.isArray( copy ) ) ) ) {
+
+					if ( copyIsArray ) {
+						copyIsArray = false;
+						clone = src && Array.isArray( src ) ? src : [];
+
+					} else {
+						clone = src && jQuery.isPlainObject( src ) ? src : {};
+					}
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend( {
+
+	// Unique for each copy of jQuery on the page
+	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+	// Assume jQuery is ready without the ready module
+	isReady: true,
+
+	error: function( msg ) {
+		throw new Error( msg );
+	},
+
+	noop: function() {},
+
+	isPlainObject: function( obj ) {
+		var proto, Ctor;
+
+		// Detect obvious negatives
+		// Use toString instead of jQuery.type to catch host objects
+		if ( !obj || toString.call( obj ) !== "[object Object]" ) {
+			return false;
+		}
+
+		proto = getProto( obj );
+
+		// Objects with no prototype (e.g., `Object.create( null )`) are plain
+		if ( !proto ) {
+			return true;
+		}
+
+		// Objects with prototype are plain iff they were constructed by a global Object function
+		Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
+		return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
+	},
+
+	isEmptyObject: function( obj ) {
+
+		/* eslint-disable no-unused-vars */
+		// See https://github.com/eslint/eslint/issues/6125
+		var name;
+
+		for ( name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	// Evaluates a script in a global context
+	globalEval: function( code ) {
+		DOMEval( code );
+	},
+
+	each: function( obj, callback ) {
+		var length, i = 0;
+
+		if ( isArrayLike( obj ) ) {
+			length = obj.length;
+			for ( ; i < length; i++ ) {
+				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+					break;
+				}
+			}
+		} else {
+			for ( i in obj ) {
+				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+					break;
+				}
+			}
+		}
+
+		return obj;
+	},
+
+	// Support: Android <=4.0 only
+	trim: function( text ) {
+		return text == null ?
+			"" :
+			( text + "" ).replace( rtrim, "" );
+	},
+
+	// results is for internal usage only
+	makeArray: function( arr, results ) {
+		var ret = results || [];
+
+		if ( arr != null ) {
+			if ( isArrayLike( Object( arr ) ) ) {
+				jQuery.merge( ret,
+					typeof arr === "string" ?
+					[ arr ] : arr
+				);
+			} else {
+				push.call( ret, arr );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, arr, i ) {
+		return arr == null ? -1 : indexOf.call( arr, elem, i );
+	},
+
+	// Support: Android <=4.0 only, PhantomJS 1 only
+	// push.apply(_, arraylike) throws on ancient WebKit
+	merge: function( first, second ) {
+		var len = +second.length,
+			j = 0,
+			i = first.length;
+
+		for ( ; j < len; j++ ) {
+			first[ i++ ] = second[ j ];
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, invert ) {
+		var callbackInverse,
+			matches = [],
+			i = 0,
+			length = elems.length,
+			callbackExpect = !invert;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( ; i < length; i++ ) {
+			callbackInverse = !callback( elems[ i ], i );
+			if ( callbackInverse !== callbackExpect ) {
+				matches.push( elems[ i ] );
+			}
+		}
+
+		return matches;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var length, value,
+			i = 0,
+			ret = [];
+
+		// Go through the array, translating each of the items to their new values
+		if ( isArrayLike( elems ) ) {
+			length = elems.length;
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( i in elems ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return concat.apply( [], ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// jQuery.support is not used in Core but other projects attach their
+	// properties to it so it needs to exist.
+	support: support
+} );
+
+if ( typeof Symbol === "function" ) {
+	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
+}
+
+// Populate the class2type map
+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
+function( i, name ) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+} );
+
+function isArrayLike( obj ) {
+
+	// Support: real iOS 8.2 only (not reproducible in simulator)
+	// `in` check used to prevent JIT error (gh-2145)
+	// hasOwn isn't used here due to false negatives
+	// regarding Nodelist length in IE
+	var length = !!obj && "length" in obj && obj.length,
+		type = toType( obj );
+
+	if ( isFunction( obj ) || isWindow( obj ) ) {
+		return false;
+	}
+
+	return type === "array" || length === 0 ||
+		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+
+return jQuery;
+} );

File diff suppressed because it is too large
+ 10364 - 0
blog/public/admin/lib/jquery/dist/jquery.js


File diff suppressed because it is too large
+ 2 - 0
blog/public/admin/lib/jquery/dist/jquery.min.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/jquery/dist/jquery.min.map


File diff suppressed because it is too large
+ 8269 - 0
blog/public/admin/lib/jquery/dist/jquery.slim.js


File diff suppressed because it is too large
+ 2 - 0
blog/public/admin/lib/jquery/dist/jquery.slim.min.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/jquery/dist/jquery.slim.min.map


+ 36 - 0
blog/public/admin/lib/jquery/external/sizzle/LICENSE.txt

@@ -0,0 +1,36 @@
+Copyright jQuery Foundation and other contributors, https://jquery.org/
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/jquery/sizzle
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+====
+
+All files located in the node_modules and external directories are
+externally maintained libraries used by this software which have their
+own licenses; we recommend you read them, as their terms may differ from
+the terms above.

File diff suppressed because it is too large
+ 2272 - 0
blog/public/admin/lib/jquery/external/sizzle/dist/sizzle.js


File diff suppressed because it is too large
+ 3 - 0
blog/public/admin/lib/jquery/external/sizzle/dist/sizzle.min.js


File diff suppressed because it is too large
+ 1 - 0
blog/public/admin/lib/jquery/external/sizzle/dist/sizzle.min.map


+ 0 - 0
blog/public/admin/lib/jquery/package.json


Some files were not shown because too many files changed in this diff