├── _config.yml ├── favicon.ico ├── previews ├── home.png ├── login.png ├── member.png ├── post.png ├── tags.png ├── topic.png ├── article.png ├── articles.png ├── comment.png ├── home_en.png ├── login_en.png ├── post_en.png ├── tags_en.png ├── topic_en.png ├── article_en.png ├── articles_en.png ├── comment_en.png └── member_en.png ├── .babelrc ├── dist ├── fonts │ ├── iconfont.eot │ └── iconfont.ttf ├── index.html └── images │ └── iconfont.svg ├── postcss.config.js ├── src ├── assets │ ├── images │ │ └── logo.png │ ├── fonts │ │ ├── iconfont.eot │ │ ├── iconfont.ttf │ │ ├── iconfont.woff │ │ └── iconfont.css │ ├── css │ │ ├── highlight.css │ │ ├── reset.css │ │ └── style.scss │ └── js │ │ └── clipboard.min.js ├── store │ └── index.js ├── app.vue ├── compoments │ ├── homeCopyright.vue │ ├── homeCategories.vue │ ├── homeBanner.vue │ ├── fixedFooter.vue │ └── fixedHeader.vue ├── utils │ ├── api.js │ ├── routers.js │ ├── utils.js │ └── language.js ├── views │ ├── page.vue │ ├── media.vue │ ├── tags.vue │ ├── pages.vue │ ├── member.vue │ ├── tag.vue │ ├── oauth │ │ ├── login.vue │ │ └── register.vue │ ├── comments.vue │ ├── articles.vue │ ├── home.vue │ ├── article.vue │ └── post.vue └── index.js ├── .gitignore ├── index.html ├── .eslintrc.js ├── LICENSE ├── package.json ├── README_CN.md ├── webpack.config.js └── README.md /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-cayman -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crlang/VueWordPress/HEAD/favicon.ico -------------------------------------------------------------------------------- /previews/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crlang/VueWordPress/HEAD/previews/home.png -------------------------------------------------------------------------------- /previews/login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crlang/VueWordPress/HEAD/previews/login.png -------------------------------------------------------------------------------- /previews/member.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crlang/VueWordPress/HEAD/previews/member.png -------------------------------------------------------------------------------- /previews/post.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crlang/VueWordPress/HEAD/previews/post.png -------------------------------------------------------------------------------- /previews/tags.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crlang/VueWordPress/HEAD/previews/tags.png -------------------------------------------------------------------------------- /previews/topic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crlang/VueWordPress/HEAD/previews/topic.png -------------------------------------------------------------------------------- /previews/article.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crlang/VueWordPress/HEAD/previews/article.png -------------------------------------------------------------------------------- /previews/articles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crlang/VueWordPress/HEAD/previews/articles.png -------------------------------------------------------------------------------- /previews/comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crlang/VueWordPress/HEAD/previews/comment.png -------------------------------------------------------------------------------- /previews/home_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crlang/VueWordPress/HEAD/previews/home_en.png -------------------------------------------------------------------------------- /previews/login_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crlang/VueWordPress/HEAD/previews/login_en.png -------------------------------------------------------------------------------- /previews/post_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crlang/VueWordPress/HEAD/previews/post_en.png -------------------------------------------------------------------------------- /previews/tags_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crlang/VueWordPress/HEAD/previews/tags_en.png -------------------------------------------------------------------------------- /previews/topic_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crlang/VueWordPress/HEAD/previews/topic_en.png -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | "env", 4 | "stage-3" 5 | ], 6 | "plugins": [] 7 | } -------------------------------------------------------------------------------- /dist/fonts/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crlang/VueWordPress/HEAD/dist/fonts/iconfont.eot -------------------------------------------------------------------------------- /dist/fonts/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crlang/VueWordPress/HEAD/dist/fonts/iconfont.ttf -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: [ 3 | require('autoprefixer') 4 | ] 5 | }; -------------------------------------------------------------------------------- /previews/article_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crlang/VueWordPress/HEAD/previews/article_en.png -------------------------------------------------------------------------------- /previews/articles_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crlang/VueWordPress/HEAD/previews/articles_en.png -------------------------------------------------------------------------------- /previews/comment_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crlang/VueWordPress/HEAD/previews/comment_en.png -------------------------------------------------------------------------------- /previews/member_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crlang/VueWordPress/HEAD/previews/member_en.png -------------------------------------------------------------------------------- /src/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crlang/VueWordPress/HEAD/src/assets/images/logo.png -------------------------------------------------------------------------------- /src/assets/fonts/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crlang/VueWordPress/HEAD/src/assets/fonts/iconfont.eot -------------------------------------------------------------------------------- /src/assets/fonts/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crlang/VueWordPress/HEAD/src/assets/fonts/iconfont.ttf -------------------------------------------------------------------------------- /src/assets/fonts/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crlang/VueWordPress/HEAD/src/assets/fonts/iconfont.woff -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | #ENV 2 | .env 3 | 4 | # JS 5 | node_modules/ 6 | tmp/ 7 | npm-debug.log 8 | yarn-error.log 9 | package-lock.json 10 | modify.log 11 | 12 | # System/Editor directories and files 13 | .DS_Store 14 | .idea 15 | *.suo 16 | *.ntvs* 17 | *.njsproj 18 | *.sln 19 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | VueWPress 9 | 10 | 11 | 12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /dist/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | VueWPress 9 | 10 | 11 | 12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import Vuex from "vuex"; 3 | 4 | Vue.use(Vuex); 5 | 6 | const store = new Vuex.Store({ 7 | state: { 8 | title: '', 9 | footer: false, 10 | userToken: '' 11 | }, 12 | mutations: { 13 | newTitle(state,msg) { 14 | state.title = msg; 15 | }, 16 | showFooter(state,msg) { 17 | state.footer = msg; 18 | }, 19 | setUserToken(state,token) { 20 | state.userToken = token; 21 | } 22 | } 23 | }); 24 | 25 | export default store; -------------------------------------------------------------------------------- /src/app.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 29 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | "env": { 3 | "browser": true, 4 | "es6": true, 5 | "jquery": true, 6 | "node": true 7 | }, 8 | "globals": { 9 | "require": true, 10 | "__dirname": true, 11 | "module": true, 12 | "weui": true 13 | }, 14 | "extends": "eslint:recommended", 15 | "parserOptions": { 16 | "ecmaVersion": 6, 17 | "sourceType": "module", 18 | "ecmaFeatures": { 19 | "jsx": true 20 | } 21 | }, 22 | "rules": { 23 | "indent": ["error", 2], 24 | "strict": "off", 25 | "no-unused-vars": "warn", 26 | "no-console": "warn", 27 | "comma-dangle": ["off", "always"], 28 | "eqeqeq": "warn", 29 | "linebreak-style": ["error", "unix"], 30 | "quotes": ["off", "double"], 31 | "semi": ["error", "always"] 32 | } 33 | }; -------------------------------------------------------------------------------- /src/compoments/homeCopyright.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | -------------------------------------------------------------------------------- /src/utils/api.js: -------------------------------------------------------------------------------- 1 | import axios from "axios"; 2 | 3 | /* Your WordPress site URL, do not add http:// */ 4 | export let WPBlogSiteUrl = "wordpress.crlang.com"; 5 | /* default chinese, options: chinese english */ 6 | export let siteLanguage = 'chinese'; 7 | /* if true, the site mush be HTTPS protocol*/ 8 | const siteIsSafe = true; 9 | 10 | /*!!!!!!!!!!!!!!!!!!!!!!!!!!!! danger !!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ 11 | /*!!!!!!!!!!!!!!!!!!!!! ojbk , do not modify !!!!!!!!!!!!!!!!!!!!!*/ 12 | if (siteIsSafe) { 13 | WPBlogSiteUrl = "https://" + WPBlogSiteUrl; 14 | }else{ 15 | WPBlogSiteUrl = "http://" + WPBlogSiteUrl; 16 | } 17 | 18 | let userToken = sessionStorage.getItem("userToken") || null; 19 | if (userToken !== null) { 20 | userToken = 'Bearer' + userToken; 21 | }else{ 22 | userToken = ''; 23 | } 24 | export const apiUrl = axios.create({ 25 | baseURL: WPBlogSiteUrl + '/wp-json/wp/v2/', 26 | headers: { 27 | 'content-type': 'application/json', 28 | 'Authorization': userToken 29 | } 30 | }); -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Darlang 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/compoments/homeCategories.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 42 | -------------------------------------------------------------------------------- /src/views/page.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 68 | 69 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vwpress", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "./src/index.js", 6 | "author": "", 7 | "license": "ISC", 8 | "dependencies": {}, 9 | "devDependencies": { 10 | "autoprefixer": "^8.2.0", 11 | "axios": "^0.18.0", 12 | "babel-core": "^6.26.0", 13 | "babel-loader": "^7.1.4", 14 | "babel-preset-env": "^1.6.1", 15 | "babel-preset-stage-3": "^6.24.1", 16 | "css-loader": "^0.28.11", 17 | "eslint-plugin-html": "^4.0.2", 18 | "extract-text-webpack-plugin": "^4.0.0-beta.0", 19 | "file-loader": "^1.1.11", 20 | "html-webpack-plugin": "^3.2.0", 21 | "iview": "^2.12.0", 22 | "node-sass": "^4.8.3", 23 | "optimize-css-assets-webpack-plugin": "^4.0.0", 24 | "postcss-loader": "^2.1.3", 25 | "sass-loader": "^6.0.7", 26 | "style-loader": "^0.20.3", 27 | "url-loader": "^1.0.1", 28 | "vue": "^2.5.16", 29 | "vue-awesome-swiper": "^3.1.3", 30 | "vue-loader": "^14.2.2", 31 | "vue-router": "^3.0.1", 32 | "vue-style-loader": "^4.1.0", 33 | "vue-template-compiler": "^2.5.16", 34 | "vuex": "^3.0.1", 35 | "vux": "^2.8.1", 36 | "webpack": "^4.4.1", 37 | "webpack-cli": "^3.1.2", 38 | "webpack-dev-server": "^3.1.1", 39 | "weui": "^1.1.2", 40 | "weui.js": "^1.1.3" 41 | }, 42 | "scripts": { 43 | "test": "echo \"Error: no test specified\" && exit 1", 44 | "dev": "webpack --mode development --config webpack.config.js --progress --watch --color", 45 | "start": "webpack-dev-server --mode development --config webpack.config.js", 46 | "build": "webpack --mode production --config webpack.config.js --progress" 47 | }, 48 | "browserslist": [ 49 | "defaults", 50 | "not ie < 9", 51 | "last 15 versions", 52 | "> 10%", 53 | "iOS 7", 54 | "last 10 iOS versions" 55 | ] 56 | } 57 | -------------------------------------------------------------------------------- /src/compoments/homeBanner.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /src/utils/routers.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import Router from 'vue-router'; 3 | import home from '../views/home.vue'; 4 | import ArticleList from '../views/articles.vue'; 5 | import Article from '../views/article.vue'; 6 | import pageList from '../views/pages.vue'; 7 | import page from '../views/page.vue'; 8 | import post from '../views/post.vue'; 9 | import tags from '../views/tags.vue'; 10 | import tag from '../views/tag.vue'; 11 | import media from '../views/media.vue'; 12 | import comments from '../views/comments.vue'; 13 | import login from '../views/oauth/login.vue'; 14 | import register from '../views/oauth/register.vue'; 15 | import member from '../views/member.vue'; 16 | 17 | Vue.use(Router); 18 | 19 | export default new Router({ 20 | linkActiveClass: "weui-bar__item_on", 21 | routes: [ 22 | { 23 | path: '/', 24 | redirect: '/home' 25 | }, 26 | { 27 | path: '/home', 28 | name: 'home', 29 | component: home 30 | }, 31 | { 32 | path: '/articles', 33 | component: ArticleList 34 | }, 35 | { 36 | path: '/article/:id', 37 | component: Article 38 | }, 39 | { 40 | path: '/topic', 41 | name: 'topic', 42 | component: pageList 43 | }, 44 | { 45 | path: '/topic/:slug', 46 | component: page 47 | }, 48 | { 49 | path: '/post', 50 | name: 'post', 51 | component: post 52 | }, 53 | { 54 | path: '/tags', 55 | name: 'tags', 56 | component: tags 57 | }, 58 | { 59 | path: '/tag/:id', 60 | component: tag 61 | }, 62 | { 63 | path: '/login', 64 | component: login 65 | }, 66 | { 67 | path: '/register', 68 | component: register 69 | }, 70 | { 71 | path: '/member', 72 | name: 'member', 73 | component: member 74 | }, 75 | { 76 | path: '/media', 77 | component: media 78 | }, 79 | { 80 | path: '/comments', 81 | component: comments 82 | } 83 | ] 84 | }); -------------------------------------------------------------------------------- /src/compoments/fixedFooter.vue: -------------------------------------------------------------------------------- 1 | 29 | 30 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import axios from 'axios'; 3 | import App from "./app.vue"; 4 | import store from "./store/index.js"; 5 | 6 | 7 | 8 | /*---------------------------------------- 9 | ---------------- router ---------------- 10 | ----------------------------------------*/ 11 | import router from './utils/routers.js'; 12 | Vue.use(router); 13 | /* router end */ 14 | 15 | 16 | 17 | /*---------------------------------------- 18 | ------- register global function ------- 19 | ----------------------------------------*/ 20 | import Functions from './utils/utils.js'; 21 | Vue.use(Functions);// Register global functions as plugins 22 | /* register global function end */ 23 | 24 | 25 | 26 | /*---------------------------------------- 27 | ------------- style assets ------------- 28 | ----------------------------------------*/ 29 | import "./assets/css/reset.css"; 30 | import "./assets/fonts/iconfont.css"; 31 | import "./assets/css/weui.css"; 32 | import "./assets/css/style.scss"; 33 | /* style assets end */ 34 | 35 | 36 | 37 | /*---------------------------------------- 38 | ---------- Vue Awesome Swiper ---------- 39 | ----------------------------------------*/ 40 | import VueAwesomeSwiper from 'vue-awesome-swiper' 41 | import 'swiper/dist/css/swiper.css' 42 | Vue.use(VueAwesomeSwiper, /* { default global options } */) 43 | /* Vue Awesome Swiper end */ 44 | 45 | 46 | 47 | /*---------------------------------------- 48 | -------------- debug mode -------------- 49 | ----------------------------------------*/ 50 | Vue.config.productionTip = true; 51 | /* debug mode end */ 52 | 53 | 54 | 55 | /*---------------------------------------- 56 | ------------- axios config ------------- 57 | ----------------------------------------*/ 58 | /* eslint-disable no-new */ 59 | axios.interceptors.request.use( 60 | config => { 61 | return config; 62 | }, 63 | err => { 64 | return Promise.reject(err); 65 | } 66 | ); 67 | /* axios config end */ 68 | 69 | 70 | 71 | /*---------------------------------------- 72 | --------------- new vue --------------- 73 | ----------------------------------------*/ 74 | new Vue({ 75 | el: '#app', 76 | router: router, 77 | store: store, 78 | components: { App }, 79 | template: '' 80 | }); -------------------------------------------------------------------------------- /src/compoments/fixedHeader.vue: -------------------------------------------------------------------------------- 1 | 35 | 36 | -------------------------------------------------------------------------------- /src/views/media.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | -------------------------------------------------------------------------------- /src/views/tags.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | -------------------------------------------------------------------------------- /src/views/pages.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | -------------------------------------------------------------------------------- /README_CN.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ![logo](./src/assets/images/logo.png) 4 | 5 | 6 |
7 | 8 | # **VueWPress** 9 | 10 |
11 | 12 | [Englist Document ~ VueWPress](./README.md) 13 | 14 | 15 | ## 前提条件 16 | > 1. 为了保证正常运行项目,你需要先 **Star** ,否则项目运行可能会出错。 (* ̄︶ ̄) 17 | 18 | > 2. 需要在版本 4.4 之上安装并运行 WordPress ,并 REST API 处于开启状态。 19 | 20 | > 3. 修改 `src/utils/api.js` 文件, 修改成你的博客配置 *「例如: 你的站点地址, 你的站点语言, 你的站点协议等等」* 21 | 22 | > 4. vueWPress 0.23 版本以后,需要安装一个插件 JWT Authentication for WP-API ,可通过后台插件搜索或者[查看这里](https://wordpress.org/plugins/jwt-authentication-for-wp-rest-api/)下载 23 | 24 | > 4.1 修改 Wordpress 根目录下的 wp-config.php 文件 25 | 26 | > 4.1.2 查找:`define('NONCE_SALT'` 27 | 28 | > 4.1.3 在 `define('NONCE_SALT'` 下方新增如下内容 29 | 30 | ``` bash 31 | define('JWT_AUTH_SECRET_KEY', 'you-64-secret-key'); 32 | #这里查看随机密钥 https://api.wordpress.org/secret-key/1.1/salt/ 33 | define('JWT_AUTH_CORS_ENABLE', true); 34 | ``` 35 | 36 | > 4.1.4 `you-64-secret-key` 是64位的随机密钥,更多配置 [点击这里](https://wordpress.org/plugins/jwt-authentication-for-wp-rest-api/) 37 | 38 | ## 使用步骤 39 | 40 | ``` bash 41 | # 安装依赖关系 42 | npm install 43 | 44 | # 启动运行后,在 localhost:8088 打开,默认具有热加载 45 | npm run start 46 | 47 | # 开发环境命令,文件较大用于开发环境 48 | # 本地会生成 dist 文件夹,可用于线上部署 49 | npm run dev 50 | 51 | # 生产环境命令,文件较小适合线上部署 52 | # 本地会生成 dist 文件夹,可用于线上部署 53 | npm run build 54 | ``` 55 | 56 | ## 有什么功能? 57 | > 1. 首页展示文章列表。 [Jump](#首页) 「ver: 0.1」 58 | 59 | > 2. 内容页显示文章详情。 [Jump](#文章) 「ver: 0.1」 60 | 61 | > 3. 专题页显示页面专题。 [Jump](#专题中心) 「ver: 0.12」 62 | 63 | > 4. 专题详情页显示专题内容。「ver: 0.12」 64 | 65 | > 5. 标签云页显示标签集合。 [Jump](#标签云) 「ver: 0.16」 66 | 67 | > 6. 标签页显示标签相关文章。「ver: 0.16」 68 | 69 | > 7. 图库页显示所有媒体文件。「ver: 0.16」 70 | 71 | > 8. 言论页显示所有评论。「ver: 0.19」 72 | 73 | > 9. 文章列表页显示所有文章。 [jump](#文章列表) 「ver: 0.23」 74 | 75 | > 10. 文章页面新增评论。 [jump](#文章评论) 「ver: 0.31」 76 | 77 | > 11. 增加发布文章功能。 [jump](#发布文章) 「ver: 0.31」 78 | 79 | > 12. 新增用户中心,可显示昵称、头像,退出登录。 [jump](#用户中心) 「ver: 0.19」 80 | 81 | > 13. 新增登录、注册功能。 [jump](#登录) 「ver: 0.19」 82 | 83 | > 14. 更多功能正在开发中 ... 84 | 85 | ## 预览界面 86 | ### 首页 87 | ![首页](./previews/home.png) 88 | 89 | [返回](#vuewpress) 90 | 91 | --- 92 | 93 | ### 文章列表 94 | ![home](./previews/articles.png) 95 | 96 | [Back Up](#vuewpress) 97 | 98 | --- 99 | 100 | ### 文章 101 | ![文章](./previews/article.png) 102 | 103 | [返回](#vuewpress) 104 | 105 | --- 106 | 107 | ### 专题中心 108 | ![专题中心](./previews/topic.png) 109 | 110 | [返回](#vuewpress) 111 | 112 | --- 113 | 114 | ### 标签云 115 | ![page](./previews/tags.png) 116 | 117 | [Back Up](#vuewpress) 118 | 119 | --- 120 | 121 | ### 用户中心 122 | ![page](./previews/member.png) 123 | 124 | [Back Up](#vuewpress) 125 | 126 | --- 127 | 128 | ### 登录 129 | ![page](./previews/login.png) 130 | 131 | [Back Up](#vuewpress) 132 | 133 | --- 134 | 135 | ### 发布文章 136 | ![page](./previews/post.png) 137 | 138 | [Back Up](#vuewpress) 139 | 140 | --- 141 | 142 | ### 文章评论 143 | ![page](./previews/comment.png) 144 | 145 | [Back Up](#vuewpress) 146 | 147 | --- -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | const webpack = require('webpack'); 2 | const path = require('path'); 3 | const HTMLPlugin = require('html-webpack-plugin'); 4 | const ExtractTextPlugin = require('extract-text-webpack-plugin'); 5 | const config = { 6 | target: "web", 7 | devtool: "#source-map", 8 | // entry: { 9 | // app: "./src/app.js", 10 | // vendor: "./src/vendor.js" 11 | // }, 12 | entry: path.join(__dirname, 'src/index.js'), 13 | 14 | output: { 15 | filename: 'js/[name].[hash].js', 16 | chunkFilename: '[name].[hash].js', 17 | path: path.resolve(__dirname, 'dist') 18 | }, 19 | 20 | module: { 21 | rules: [{ 22 | test: /\.js$/, 23 | exclude: /node_modules/, 24 | loader: 'babel-loader', 25 | options: { 26 | presets: ['env'] 27 | } 28 | }, { 29 | test: /\.(scss|css)$/, 30 | use: ExtractTextPlugin.extract({ 31 | use: [{ 32 | loader: "css-loader", 33 | options: { 34 | sourceMap: true, 35 | minimize: true 36 | } 37 | }, { 38 | loader: "postcss-loader", 39 | options: { 40 | sourceMap: true 41 | } 42 | }, { 43 | loader: "sass-loader", 44 | options: { 45 | sourceMap: true 46 | } 47 | }], 48 | fallback: "style-loader" 49 | }) 50 | }, { 51 | test: /\.(jpg|jpeg|png|gif|svg)$/, 52 | use: [{ 53 | loader: "file-loader", 54 | options: { 55 | name: "[name].[ext]", 56 | outputPath: 'images/' 57 | } 58 | }] 59 | }, { 60 | test: /\.(ttf|otf|eot|woff|woff2)$/, 61 | use: [{ 62 | loader: "file-loader", 63 | options: { 64 | name: "[name].[ext]", 65 | outputPath: 'fonts/' 66 | } 67 | }] 68 | }, { 69 | test: /.vue$/, 70 | loader: "vue-loader", 71 | options: { 72 | loaders: { 73 | css: ExtractTextPlugin.extract({ 74 | use: [{ 75 | loader: "css-loader", 76 | options: { 77 | sourceMap: true, 78 | minimize: true 79 | } 80 | }, { 81 | loader: "postcss-loader", 82 | options: { 83 | sourceMap: true 84 | } 85 | }, { 86 | loader: "sass-loader", 87 | options: { 88 | sourceMap: true 89 | } 90 | }], 91 | fallback: 'vue-style-loader' 92 | }) 93 | } 94 | } 95 | }] 96 | }, 97 | 98 | devServer: { 99 | port: 8088, 100 | overlay: { 101 | error: true 102 | }, 103 | hot: true, 104 | clientLogLevel: "none",// Cancel console packaging display 105 | open: true 106 | }, 107 | 108 | plugins: [ 109 | new webpack.HotModuleReplacementPlugin(), 110 | new webpack.NoEmitOnErrorsPlugin(), 111 | new ExtractTextPlugin({ 112 | filename: './css/style.css', 113 | allChunks: true 114 | }), 115 | new HTMLPlugin({ 116 | template: "index.html" 117 | }) 118 | ], 119 | 120 | resolve: { 121 | alias: { 122 | "vue": "vue/dist/vue.js" 123 | } 124 | } 125 | }; 126 | 127 | module.exports = config; -------------------------------------------------------------------------------- /src/views/member.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | -------------------------------------------------------------------------------- /src/views/tag.vue: -------------------------------------------------------------------------------- 1 | 27 | 28 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ![logo](./src/assets/images/logo.png) 4 | 5 | 6 |
7 | 8 | # **VueWPress** 9 | 10 |
11 | 12 | [中文简述 ~ VueWPress](./README_CN.md) 13 | 14 | 15 | ## Prerequisites 16 | 17 | > 1. First, You must **Star** this repository. (* ̄︶ ̄) 18 | 19 | > 2. Need to install and running WordPress above version 4.4 ,and open REST API. 20 | 21 | > 3. modify `src/utils/api.js` file, change youre config. *「E.g: site url, site language, site protocol etc.」* 22 | 23 | > 4. After vueWPress 0.23 release, you need to install a plugin JWT Authentication for WP-API, Can be downloaded via background plugin search or [check here](https://wordpress.org/plugins/jwt-authentication-for-wp-rest-api/) 24 | 25 | > 4.1 Modify the wp-config.php file in Wordpress root 26 | 27 | > 4.1.2 Find: `define('NONCE_SALT'` 28 | 29 | > 4.1.3 Add the following to the line under `define('NONCE_SALT'` 30 | 31 | ``` bash 32 | define('JWT_AUTH_SECRET_KEY', 'you-64-secret-key'); 33 | #the random key here https://api.wordpress.org/secret-key/1.1/salt/ 34 | define('JWT_AUTH_CORS_ENABLE', true); 35 | ``` 36 | 37 | > 4.1.4 `you-64-secret-key` Is a 64-bit random key, more: [check here](https://wordpress.org/plugins/jwt-authentication-for-wp-rest-api/) 38 | 39 | ## Build Setup 40 | 41 | ``` bash 42 | # install dependencies 43 | npm install 44 | 45 | # serve with hot reload at localhost:8088 46 | npm run start 47 | 48 | # build for development 49 | npm run dev 50 | 51 | # build for production 52 | npm run build 53 | ``` 54 | 55 | ## What Can I Do ? 56 | > 1. Show home on the home page. [jump](#home) 「ver: 0.1」 57 | 58 | > 2. Show post on the article page. [jump](#article) 「ver: 0.1」 59 | 60 | > 3. Show topic on the topic page. [jump](#topic) 「ver: 0.12」 61 | 62 | > 4. Show topic detail on the detail page. 「ver: 0.12」 63 | 64 | > 5. Show tags on the tags page. [jump](#tags) 「ver: 0.16」 65 | 66 | > 6. Show tag detail on the detail page. 「ver: 0.16」 67 | 68 | > 7. Show All media on the gallery page. 「ver: 0.16」 69 | 70 | > 8. Show All comment on the comments page. 「ver: 0.19」 71 | 72 | > 9. Show article on the articles page. [jump](#articles) 「ver: 0.23」 73 | 74 | > 10. Added comments on article page. [jump](#comment) 「ver: 0.31」 75 | 76 | > 11. Increase article publishing capabilities. [jump](#post) 「ver: 0.31」 77 | 78 | > 12. Added user center to display nicknames, avatars, and logouts. [jump](#member) 「ver: 0.31」 79 | 80 | > 13. Added login and registration functions. [jump](#login) 「ver: 0.31」 81 | 82 | > 14. More features are in development ... 83 | 84 | ## Preview Me 85 | ### Home 86 | ![home](./previews/home_en.png) 87 | 88 | [Back Up](#vuewpress) 89 | 90 | --- 91 | 92 | ### Articles 93 | ![home](./previews/articles_en.png) 94 | 95 | [Back Up](#vuewpress) 96 | 97 | --- 98 | 99 | ### Article 100 | ![home](./previews/article_en.png) 101 | 102 | [Back Up](#vuewpress) 103 | 104 | --- 105 | 106 | ### Topic 107 | ![topic](./previews/topic_en.png) 108 | 109 | [Back Up](#vuewpress) 110 | 111 | --- 112 | 113 | ### Tags 114 | ![page](./previews/tags_en.png) 115 | 116 | [Back Up](#vuewpress) 117 | 118 | --- 119 | 120 | ### Member 121 | ![page](./previews/member_en.png) 122 | 123 | [Back Up](#vuewpress) 124 | 125 | --- 126 | 127 | ### Login 128 | ![page](./previews/login_en.png) 129 | 130 | [Back Up](#vuewpress) 131 | 132 | --- 133 | 134 | 135 | ### Post 136 | ![page](./previews/post_en.png) 137 | 138 | [Back Up](#vuewpress) 139 | 140 | --- 141 | 142 | 143 | ### Comment 144 | ![page](./previews/comment_en.png) 145 | 146 | [Back Up](#vuewpress) 147 | 148 | --- -------------------------------------------------------------------------------- /src/views/oauth/login.vue: -------------------------------------------------------------------------------- 1 | 33 | 34 | 56 | 57 | 127 | -------------------------------------------------------------------------------- /src/views/comments.vue: -------------------------------------------------------------------------------- 1 | 30 | 31 | 131 | -------------------------------------------------------------------------------- /src/views/articles.vue: -------------------------------------------------------------------------------- 1 | 36 | 37 | -------------------------------------------------------------------------------- /src/views/home.vue: -------------------------------------------------------------------------------- 1 | 33 | 34 | -------------------------------------------------------------------------------- /src/views/oauth/register.vue: -------------------------------------------------------------------------------- 1 | 33 | 34 | 56 | 57 | 177 | -------------------------------------------------------------------------------- /src/utils/utils.js: -------------------------------------------------------------------------------- 1 | import {WPBlogSiteUrl, apiUrl} from "./api.js"; 2 | import AllPageLanguage from "./language.js"; 3 | import as from "axios"; 4 | import weuijs from "weui.js"; 5 | 6 | exports.install = function (Vue, options) { 7 | Vue.prototype.formatTime = formatTime; 8 | Vue.prototype.formatTTime = formatTTime; 9 | Vue.prototype.APLang = AllPageLanguage; 10 | Vue.prototype.siteConfig = siteConfig; 11 | Vue.prototype.replaceImgUrl = replaceImgUrl; 12 | Vue.prototype.weui = weuijs; 13 | Vue.prototype.replaceFeaturesImg = replaceFeaturesImg; 14 | Vue.prototype.responseError = responseError; 15 | Vue.prototype.checkLogin = checkLogin; 16 | Vue.prototype.checkToken = checkToken; 17 | }; 18 | 19 | /*---------------------------------------- 20 | ------------- format time ------------- 21 | ----------------------------------------*/ 22 | function formatTime(val){ 23 | var date = new Date(val); 24 | let result = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate() + ' ' + date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds(); 25 | return result; 26 | } 27 | 28 | /*---------------------------------------- 29 | --------- format time in china --------- 30 | ----------------------------------------*/ 31 | function formatTTime(val) { 32 | // ... 33 | let resule = new Date(val).toLocaleString().replace(/[年月]/g,'-').replace(/[日上下午]/g,''); 34 | return resule; 35 | } 36 | 37 | /*---------------------------------------- 38 | ---- Add website URL prefix for url ---- 39 | ----------------------------------------*/ 40 | function replaceImgUrl(strs){ 41 | let hzreg = /((href|src)="\/)/g; // wordpress media path !!! 42 | var st = strs.replace(hzreg,function(a){ 43 | if (a === 'href="/') { 44 | return 'href="' + WPBlogSiteUrl + '/'; 45 | }else if(a === 'src="/') { 46 | return 'src="' + WPBlogSiteUrl + '/'; 47 | } 48 | }); 49 | return st; 50 | } 51 | 52 | /*---------------------------------------- 53 | --------- replace Features Img --------- 54 | ----------------------------------------*/ 55 | function replaceFeaturesImg(data) { 56 | let newImgData = [], 57 | defaultIMG = '/src/assets/images/logo.png'; 58 | for (const i in data) { 59 | if (data.hasOwnProperty(i)) { 60 | if (data[i]._embedded["wp:featuredmedia"] !== undefined) { 61 | if (data[i]._embedded["wp:featuredmedia"][0].code === "rest_post_invalid_id") { 62 | data[i].featured_media = defaultIMG; 63 | }else{ 64 | data[i].featured_media = data[i]._embedded["wp:featuredmedia"][0].source_url; 65 | } 66 | }else{ 67 | data[i].featured_media = defaultIMG; 68 | } 69 | newImgData.push(data[i]); 70 | } 71 | } 72 | 73 | return newImgData; 74 | } 75 | 76 | /*---------------------------------------- 77 | ---------- Response detection ---------- 78 | ----------------------------------------*/ 79 | function responseError(err) { 80 | console.log("err.",err.response); 81 | let self = this; 82 | if (err.response.statusText === "Unauthorized" || err.response.data.code === "rest_not_logged_in" || err.response.data.code === "rest_comment_login_required") { 83 | self.weui.confirm(err.response.data.message,{ 84 | title: self.APLang.noneLogin, 85 | buttons: [{ 86 | label: self.APLang.popAction.cancel, 87 | type: 'default', 88 | onClick: function(){ 89 | self.$router.push("/"); 90 | } 91 | }, { 92 | label: self.APLang.popAction.ok, 93 | type: 'primary', 94 | onClick: function(){ 95 | self.$router.push("/login"); 96 | // sessionStorage.removeItem("userToken"); 97 | // self.weui.toast(self.APLang.popAction.success, 3000); 98 | } 99 | }] 100 | }); 101 | return false; 102 | } 103 | if(err.response) { 104 | if (err.response.status !== 200) { 105 | self.weui.topTips(err.response.data.message,3000); 106 | } 107 | }else{ 108 | self.weui.topTips(self.APLang.unknownMistake,3000); 109 | } 110 | } 111 | 112 | /*---------------------------------------- 113 | -------------- check Token ------------- 114 | ----------------------------------------*/ 115 | function checkToken(self) { 116 | let userToken = sessionStorage.getItem("userToken") || null; 117 | if (userToken !== null) { 118 | userToken = 'Bearer' + userToken; 119 | }else{ 120 | self.checkLogin(); 121 | } 122 | let apiUrl = as.create({ 123 | baseURL: WPBlogSiteUrl + '/wp-json/wp/v2/', 124 | headers: { 125 | // 'content-type': 'application/x-www-form-urlencoded', 126 | 'content-type': 'application/json', 127 | 'Authorization': userToken 128 | } 129 | }); 130 | } 131 | 132 | /*---------------------------------------- 133 | -------------- check login ------------- 134 | ----------------------------------------*/ 135 | function checkLogin() { 136 | let self = this; 137 | if (sessionStorage.getItem("userToken")) { 138 | self.weui.confirm(self.APLang.msg.logged,{ 139 | buttons: [{ 140 | label: self.APLang.popAction.cancel, 141 | type: 'default', 142 | onClick: function(){ 143 | self.$router.push("/"); 144 | } 145 | }, { 146 | label: self.APLang.popAction.ok, 147 | type: 'primary', 148 | onClick: function(){ 149 | sessionStorage.removeItem("userToken"); 150 | self.weui.toast(self.APLang.popAction.success, 3000); 151 | } 152 | }] 153 | }); 154 | return false; 155 | } 156 | } 157 | 158 | /*---------------------------------------- 159 | ------------- site configs ------------- 160 | ----------------------------------------*/ 161 | function siteConfig(callback) { 162 | as.get(WPBlogSiteUrl + "/wp-json").then(res => { 163 | let result = { 164 | name: res.data.name, 165 | description: res.data.description, 166 | home: res.data.home, 167 | url: res.data.url 168 | }; 169 | typeof callback === 'function' && callback.call(window,result); 170 | return result; 171 | }); 172 | } -------------------------------------------------------------------------------- /src/assets/css/highlight.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | .dp-highlighter { font: 14px "Microsoft YaHei", "微软雅黑", "宋体", Helvetica, Arial, Lucida Grande, Tahoma, sans-serif; background: #fafafa; width: 96%; word-break: break-all; white-space: normal; overflow: auto; margin: 10px auto; padding: 5px; border-left: 3px solid #3abc9d; } 3 | .dp-highlighter ::-moz-selection { background: #328FFE; color: #fff; } 4 | .dp-highlighter ::selection { background: #328FFE; color: #fff; } 5 | .dp-highlighter ::-moz-selection { background: #328FFE; color: #fff; } 6 | .dp-highlighter ::selection { background: #328FFE; color: #fff; } 7 | .dp-highlighter ::-moz-selection { background: #328FFE; color: #fff; } 8 | .dp-highlighter ::-webkit-selection { background: #328FFE; color: #fff; } 9 | .dp-highlighter:hover { } 10 | .dp-highlighter .bar { padding: 2px; } 11 | .dp-highlighter .collapsed .bar, 12 | .dp-highlighter .nogutter .bar { padding-left: 0px } 13 | .dp-highlighter ol { margin: 0px 0px 1px 30px; padding: 2px; color: #666; list-style: decimal; } 14 | .dp-highlighter ol > li { list-style: decimal; } 15 | .dp-highlighter.nogutter ol { list-style-type: none; margin-left: 0px; } 16 | .dp-highlighter ol li, 17 | .dp-highlighter .columns div { border-left: 1px dashed #ddd; padding-left: 10px; line-height: 1.5; } 18 | .dp-highlighter .nogutter ol li, 19 | .dp-highlighter .nogutter .columns div { border: 0; } 20 | .dp-highlighter .columns { color: gray; width: 100%; } 21 | .dp-highlighter .columns div { padding-bottom: 5px; } 22 | /* .dp-highlighter ol li.alt { background: #fcfcfc; } */ 23 | .dp-highlighter ol li:hover { background: #f1f1f1; } 24 | .dp-highlighter ol li span { color: Black; } 25 | .dp-highlighter .collapsed ol { margin: 0px; } 26 | .dp-highlighter .collapsed ol li { display: none; } 27 | .dp-highlighter .printing { border: none; } 28 | .dp-highlighter .printing .tools { display: none !important; } 29 | .dp-highlighter .printing li { display: list-item !important; } 30 | .dp-highlighter .tools { padding: 3px 8px 3px 15px; border-bottom: 1px solid #2B91AF; color: silver; } 31 | .dp-highlighter .collapsed .tools { border-bottom: 0; } 32 | .dp-highlighter .tools a { font-size: 9pt; color: gray; text-decoration: none; margin-right: 10px; } 33 | .dp-highlighter .tools a:hover { color: red; text-decoration: underline; } 34 | .dp-about { background-color: #fff; margin: 0px; padding: 0px; } 35 | .dp-about table { width: 100%; height: 100%; } 36 | .dp-about td { padding: 10px; vertical-align: top; } 37 | .dp-about .copy { border-bottom: 1px solid #ACA899; height: 95%; } 38 | .dp-about .title { color: red; font-weight: bold; } 39 | .dp-about .para { margin: 0 0 4px 0; } 40 | .dp-about .footer { background-color: #ECEADB; border-top: 1px solid #fff; text-align: right; } 41 | .dp-about .close { background-color: #ECEADB; width: 60px; height: 22px; } 42 | .dp-c { } 43 | .dp-c .comment { color: green; } 44 | .dp-c .string { color: blue; } 45 | .dp-c .preprocessor { color: gray; } 46 | .dp-c .keyword { color: blue; } 47 | .dp-c .vars { color: #d00; } 48 | .dp-vb { } 49 | .dp-vb .comment { color: green; } 50 | .dp-vb .string { color: blue; } 51 | .dp-vb .preprocessor { color: gray; } 52 | .dp-vb .keyword { color: blue; } 53 | .dp-sql { } 54 | .dp-sql .comment { color: green; } 55 | .dp-sql .string { color: red; } 56 | .dp-sql .keyword { color: rgb(127, 0, 85); } 57 | .dp-sql .func { color: #ff1493; } 58 | .dp-sql .op { color: blue; } 59 | .dp-xml { } 60 | .dp-xml .cdata { color: #ff1493; } 61 | .dp-xml .comments { color: green; } 62 | .dp-xml .tag { font-weight: bold; color: blue; } 63 | .dp-xml .tag-name { color: rgb(127, 0, 85); font-weight: bold; } 64 | .dp-xml .attribute { color: red } 65 | .dp-xml .attribute-value { color: blue } 66 | .dp-delphi { } 67 | .dp-delphi .comment { color: #008200; font-style: italic; } 68 | .dp-delphi .string { color: blue; } 69 | .dp-delphi .number { color: blue; } 70 | .dp-delphi .directive { color: #008284; } 71 | .dp-delphi .keyword { font-weight: bold; color: navy; } 72 | .dp-delphi .vars { color: #000; } 73 | .dp-py { } 74 | .dp-py .comment { color: green; } 75 | .dp-py .string { color: red; } 76 | .dp-py .docstring { color: green; } 77 | .dp-py .keyword { color: blue; font-weight: bold; } 78 | .dp-py .builtins { color: #ff1493; } 79 | .dp-py .magicmethods { color: #808080; } 80 | .dp-py .exceptions { color: brown; } 81 | .dp-py .types { color: brown; font-style: italic } 82 | .dp-py .commonlibs { color: #8A2BE2; font-style: italic; } 83 | .dp-rb { } 84 | .dp-rb .comment { color: #c00; } 85 | .dp-rb .string { color: #f0c; } 86 | .dp-rb .symbol { color: #02b902; } 87 | .dp-rb .keyword { color: #069; } 88 | .dp-rb .variable { color: #6cf; } 89 | .dp-css { } 90 | .dp-css .comment { color: green; } 91 | .dp-css .string { color: red; } 92 | .dp-css .keyword { color: blue; } 93 | .dp-css .colors { color: darkred; } 94 | .dp-css .vars { color: #d00; } 95 | .dp-j { } 96 | .dp-j .comment { color: rgb(63, 127, 95); } 97 | .dp-j .string { color: rgb(42, 0, 255); } 98 | .dp-j .keyword { color: rgb(127, 0, 85); font-weight: bold; } 99 | .dp-j .annotation { color: #646464; } 100 | .dp-j .number { color: #C00000; } 101 | .dp-cpp { } 102 | .dp-cpp .comment { color: #e00; } 103 | .dp-cpp .string { color: red } 104 | .dp-cpp .preprocessor { color: #CD00CD; font-weight: bold; } 105 | .dp-cpp .keyword { color: #5697D9; font-weight: bold; } 106 | .dp-cpp .datatypes { color: #2E8B57; font-weight: bold; } 107 | .dp-perl { } 108 | .dp-perl .comment { color: green; } 109 | .dp-perl .string { color: red; } 110 | .dp-perl .keyword { color: rgb(127, 0, 85); } 111 | .dp-perl .func { color: #ff1493; } 112 | .dp-perl .declarations { color: blue; } 113 | .dp-css .vars { color: #d00; } 114 | .dp-g { } 115 | .dp-g .comment { color: rgb(63, 127, 95); } 116 | .dp-g .string { color: rgb(42, 0, 255); } 117 | .dp-g .keyword { color: rgb(127, 0, 85); font-weight: bold; } 118 | .dp-g .type { color: rgb(0, 127, 0); font-weight: bold; } 119 | .dp-g .modifier { color: rgb(100, 0, 100); font-weight: bold; } 120 | .dp-g .constant { color: rgb(255, 0, 0); font-weight: bold; } 121 | .dp-g .method { color: rgb(255, 96, 0); font-weight: bold; } 122 | .dp-g .number { color: #C00000; } -------------------------------------------------------------------------------- /src/views/article.vue: -------------------------------------------------------------------------------- 1 | 40 | 41 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /src/utils/language.js: -------------------------------------------------------------------------------- 1 | import {siteLanguage} from "./api.js"; 2 | 3 | /*---------------------------------------- 4 | ------- All static Page title ------- 5 | ----------------------------------------*/ 6 | let AllPageLanguage = ''; 7 | if (siteLanguage === 'english') { 8 | AllPageLanguage = { 9 | home: "Home", 10 | back: "Back", 11 | topic: "Topic", 12 | post: "Post", 13 | article: "Article", 14 | articles: "Article List", 15 | tag: "Tag", 16 | tags: "Tags", 17 | member: "Member", 18 | about: "About", 19 | search: "Search", 20 | author: "Author", 21 | time: "Time", 22 | date: "Date", 23 | submitting: "Submitting", 24 | loading: "Loading...", 25 | noneMore: "No data", 26 | loadMore: "Load More", 27 | unknownMistake: "Unknown Mistake", 28 | media: "Media", 29 | comments: "Comments", 30 | comment: "comment", 31 | newComments: "default", 32 | oldComments: "older", 33 | commentLink: "Post Link", 34 | login: "Login In", 35 | noneLogin: "Not Login", 36 | nonePermission: "Permission Denied", 37 | register: "Login Up", 38 | prev: "Prev", 39 | next: "Next", 40 | homeCategories: { 41 | media: "Gallerys", 42 | article: "Articles", 43 | comments: "Comments", 44 | login: "Login In" 45 | }, 46 | fixedfooter: { 47 | home: "home", 48 | topic: "topic", 49 | post: "post", 50 | tags: "tags", 51 | member: "member" 52 | }, 53 | popAction: { 54 | success: "Success", 55 | fail: "Fail", 56 | cancel: "Cancel", 57 | ok: "Ok", 58 | confirm: "Confirm", 59 | return: "Back" 60 | }, 61 | members: { 62 | myComment: "My Comment", 63 | myArticle: "My Article", 64 | myMedia: "My Gallery", 65 | setting: "Setup Center", 66 | logout: "Sign Out", 67 | language: "Language Selection", 68 | history: "Browsing History", 69 | historyTips: "Automatically empty from time at random" 70 | }, 71 | forms: { 72 | password: "Please enter your password", 73 | title: "Please enter title", 74 | content: "Please enter content", 75 | excerpt: "Please enter summary", 76 | username: "Please enter username", 77 | email: "Please input your email", 78 | form: { 79 | username: "Username", 80 | useremail: "Email", 81 | userpassword: "Password" 82 | } 83 | }, 84 | posts: { 85 | publish: "Publish", 86 | future: "Future", 87 | draft: "Draft", 88 | pending: "Pending", 89 | private: "Private", 90 | postNow: "Post Now?", 91 | postTop: "Sticky Article?", 92 | postMoreOption: "More Options", 93 | postExcerpt: "Enter The Summary?", 94 | postComment: "Allow Comments?", 95 | postFuture: "Timely Release?", 96 | postTime: "Set Time", 97 | postSetTime: "Click Set Time", 98 | postPrivate: "Set As Private?", 99 | postProtected: "Password Protection?", 100 | postPending: "Post is pending", 101 | postArticle: "Post Article", 102 | postDraft: "Save Draft", 103 | postView: "View Article", 104 | postSuccess: "Published successfully", 105 | postModifyArticle: "Modify Articles", 106 | postModifyDraft: "Edit draft", 107 | postDraftSuccess: "Draft saved" 108 | }, 109 | msg: { 110 | logged: "You are already logged in. \nAre you logged out?", 111 | logoutSuccess: "Logout successful!", 112 | autoLogin: "Auto Login?", 113 | noneAccount: "Register an account?", 114 | emptyInput: "Username or password cannot be empty!", 115 | loginThisAccount: "Registration done. Use this user logged in?", 116 | loginSuccess: "login successful!", 117 | loginFail: "Login failed!", 118 | haveAccount: "Already have an account?", 119 | registerTip: "Unable to register users due to system restrictions, users can only be added! \nPlease log in first!", 120 | registerSuccess: "registration success!", 121 | registerFail: "registration failed!", 122 | emptyResponse: "Comments cannot be empty!", 123 | articleProtected: "Article is password protected!", 124 | nonePassword: "password can not be blank!", 125 | nonePermissions: "If the permissions are insufficient, the article will automatically enter the pending status", 126 | noneWordCount: "Less than {Num}, not allowed to post!", 127 | nonePostTitle: "The title is empty and not allowed to publish!", 128 | nonePostTime: "Regular release must set the time!", 129 | confirmDraft: "Save as draft?" 130 | } 131 | }; 132 | }else if(siteLanguage === 'chinese') { 133 | AllPageLanguage = { 134 | home: "首页", 135 | back: "返回", 136 | topic: "专题中心", 137 | post: "发布文章", 138 | article: "文章", 139 | articles: "文章列表", 140 | tag: "标签", 141 | tags: "标签云", 142 | member: "用户中心", 143 | about: "关于", 144 | search: "搜索", 145 | author: "作者", 146 | time: "时间", 147 | date: "日期", 148 | submitting: "提交中...", 149 | loading: "正在加载...", 150 | noneMore: "暂无数据", 151 | loadMore: "加载更多", 152 | unknownMistake: "未知错误", 153 | media: "图库中心", 154 | comments: "言论中心", 155 | comment: "评论", 156 | newComments: "最新评论", 157 | oldComments: "最旧评论", 158 | commentLink: "文章链接", 159 | login: "登录", 160 | noneLogin: "未登录", 161 | nonePermission: "没有权限", 162 | register: "注册", 163 | prev: "上一页", 164 | next: "下一页", 165 | homeCategories: { 166 | media: "图库", 167 | article: "文章", 168 | comments: "言论", 169 | login: "登录" 170 | }, 171 | fixedfooter: { 172 | home: "首页", 173 | topic: "专题", 174 | post: "发布", 175 | tags: "标签", 176 | member: "我的" 177 | }, 178 | popAction: { 179 | success: "成功", 180 | fail: "失败", 181 | cancel: "取消", 182 | ok: "确认", 183 | confirm: "继续", 184 | return: "返回" 185 | }, 186 | members: { 187 | myComment: "我的评论", 188 | myArticle: "我的文章", 189 | myMedia: "我的图库", 190 | setting: "设置中心", 191 | logout: "退出登录", 192 | language: "语言选择", 193 | history: "浏览历史", 194 | historyTips: "不定期自动清空" 195 | }, 196 | forms: { 197 | password: "请输入密码", 198 | title: "请输入标题", 199 | content: "请输入内容", 200 | excerpt: "请输入摘要", 201 | username: "请输入用户名", 202 | email: "请输入邮箱", 203 | form: { 204 | username: "用户名称", 205 | useremail: "用户邮箱", 206 | userpassword: "用户密码" 207 | } 208 | }, 209 | posts: { 210 | publish: "发布", 211 | future: "定时", 212 | draft: "草稿", 213 | pending: "审核", 214 | private: "私密", 215 | postNow: "现在发布?", 216 | postTop: "置顶文章?", 217 | postMoreOption: "更多选项", 218 | postExcerpt: "输入摘要?", 219 | postComment: "允许评论?", 220 | postFuture: "定时发布?", 221 | postTime: "设定时间", 222 | postSetTime: "点击设定时间", 223 | postPrivate: "设为私密?", 224 | postProtected: "密码保护?", 225 | postPending: "等待审核", 226 | postArticle: "发布文章", 227 | postDraft: "保存草稿", 228 | postView: "查看文章", 229 | postSuccess: "发布成功", 230 | postModifyArticle: "修改文章", 231 | postModifyDraft: "修改草稿", 232 | postDraftSuccess: "已保存草稿" 233 | }, 234 | msg: { 235 | logged: "你已经登录! \n是否退出登录?", 236 | logoutSuccess: "退出登录成功", 237 | autoLogin: "自动登录?", 238 | noneAccount: "注册账号?", 239 | emptyInput: "用户名或密码不能为空!", 240 | loginThisAccount: "注册成功,是否使用该用户登录?", 241 | loginSuccess: "登录成功", 242 | loginFail: "登录失败", 243 | haveAccount: "已有账号?登录", 244 | registerTip: "由于系统限制,无法注册用户,只能添加用户!\n请先登录!", 245 | registerSuccess: "注册成功", 246 | registerFail: "注册失败", 247 | emptyResponse: "评论不能为空!", 248 | articleProtected: "文章具有密码保护!", 249 | nonePassword: "密码不能为空!", 250 | nonePermissions: "如果权限不足,文章自动进入待审核状态", 251 | noneWordCount: "少于{Num},不允许发布!", 252 | nonePostTitle: "标题为空,不允许发布!", 253 | nonePostTime: "定时发布必须设定时间!", 254 | confirmDraft: "是否保存为草稿?" 255 | } 256 | }; 257 | } 258 | export default AllPageLanguage; -------------------------------------------------------------------------------- /src/assets/js/clipboard.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * clipboard.js v2.0.0 3 | * https://zenorocha.github.io/clipboard.js 4 | * 5 | * Licensed MIT © Zeno Rocha 6 | */ 7 | !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return function(t){function e(o){if(n[o])return n[o].exports;var r=n[o]={i:o,l:!1,exports:{}};return t[o].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var n={};return e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,o){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:o})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=3)}([function(t,e,n){var o,r,i;!function(a,c){r=[t,n(7)],o=c,void 0!==(i="function"==typeof o?o.apply(e,r):o)&&(t.exports=i)}(0,function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var o=function(t){return t&&t.__esModule?t:{default:t}}(e),r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function t(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,o.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,o.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":r(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=a})},function(t,e,n){function o(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!c.string(e))throw new TypeError("Second argument must be a String");if(!c.fn(n))throw new TypeError("Third argument must be a Function");if(c.node(t))return r(t,e,n);if(c.nodeList(t))return i(t,e,n);if(c.string(t))return a(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function r(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}function i(t,e,n){return Array.prototype.forEach.call(t,function(t){t.addEventListener(e,n)}),{destroy:function(){Array.prototype.forEach.call(t,function(t){t.removeEventListener(e,n)})}}}function a(t,e,n){return u(document.body,t,e,n)}var c=n(6),u=n(5);t.exports=o},function(t,e){function n(){}n.prototype={on:function(t,e,n){var o=this.e||(this.e={});return(o[t]||(o[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){function o(){r.off(t,o),e.apply(n,arguments)}var r=this;return o._=e,this.on(t,o,n)},emit:function(t){var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),o=0,r=n.length;for(o;o0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===d(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,f.default)(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new l.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return u("action",t)}},{key:"defaultTarget",value:function(t){var e=u("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return u("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach(function(t){n=n&&!!document.queryCommandSupported(t)}),n}}]),e}(s.default);t.exports=p})},function(t,e){function n(t,e){for(;t&&t.nodeType!==o;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}var o=9;if("undefined"!=typeof Element&&!Element.prototype.matches){var r=Element.prototype;r.matches=r.matchesSelector||r.mozMatchesSelector||r.msMatchesSelector||r.oMatchesSelector||r.webkitMatchesSelector}t.exports=n},function(t,e,n){function o(t,e,n,o,r){var a=i.apply(this,arguments);return t.addEventListener(n,a,r),{destroy:function(){t.removeEventListener(n,a,r)}}}function r(t,e,n,r,i){return"function"==typeof t.addEventListener?o.apply(null,arguments):"function"==typeof n?o.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,function(t){return o(t,e,n,r,i)}))}function i(t,e,n,o){return function(n){n.delegateTarget=a(n.target,e),n.delegateTarget&&o.call(t,n)}}var a=n(4);t.exports=r},function(t,e){e.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},e.nodeList=function(t){var n=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===n||"[object HTMLCollection]"===n)&&"length"in t&&(0===t.length||e.node(t[0]))},e.string=function(t){return"string"==typeof t||t instanceof String},e.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},function(t,e){function n(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var o=window.getSelection(),r=document.createRange();r.selectNodeContents(t),o.removeAllRanges(),o.addRange(r),e=o.toString()}return e}t.exports=n}])}); -------------------------------------------------------------------------------- /src/assets/fonts/iconfont.css: -------------------------------------------------------------------------------- 1 | 2 | @font-face {font-family: "iconfont"; 3 | src: url('iconfont.eot?t=1524642310121'); /* IE9*/ 4 | src: url('iconfont.eot?t=1524642310121#iefix') format('embedded-opentype'), /* IE6-IE8 */ 5 | url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'), 6 | url('iconfont.ttf?t=1524642310121') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ 7 | url('iconfont.svg?t=1524642310121#iconfont') format('svg'); /* iOS 4.1- */ 8 | } 9 | 10 | .iconfont { 11 | font-family:"iconfont" !important; 12 | font-size:16px; 13 | font-style:normal; 14 | -webkit-font-smoothing: antialiased; 15 | -moz-osx-font-smoothing: grayscale; 16 | } 17 | 18 | .icon-article:before { content: "\e618"; } 19 | 20 | .icon-github:before { content: "\e7ab"; } 21 | 22 | .icon-search:before { content: "\e600"; } 23 | 24 | .icon-tags:before { content: "\e61b"; } 25 | 26 | .icon-password:before { content: "\e623"; } 27 | 28 | .icon-facebook:before { content: "\e6a5"; } 29 | 30 | .icon-mail:before { content: "\e6eb"; } 31 | 32 | .icon-zan:before { content: "\e60c"; } 33 | 34 | .icon-email:before { content: "\e670"; } 35 | 36 | .icon-topic:before { content: "\e6db"; } 37 | 38 | .icon-list:before { content: "\e6b7"; } 39 | 40 | .icon-safety:before { content: "\e62c"; } 41 | 42 | .icon-pic:before { content: "\e6dd"; } 43 | 44 | .icon-weibo:before { content: "\e892"; } 45 | 46 | .icon-wechat:before { content: "\e63e"; } 47 | 48 | .icon-home:before { content: "\e677"; } 49 | 50 | .icon-verification:before { content: "\e615"; } 51 | 52 | .icon-qq:before { content: "\e63d"; } 53 | 54 | .icon-register:before { content: "\e60f"; } 55 | 56 | .icon-history:before { content: "\e62f"; } 57 | 58 | .icon-camera:before { content: "\e634"; } 59 | 60 | .icon-linkedin:before { content: "\e6bf"; } 61 | 62 | .icon-comment:before { content: "\e60d"; } 63 | 64 | .icon-post:before { content: "\e614"; } 65 | 66 | .icon-member:before { content: "\e651"; } 67 | 68 | .icon-login:before { content: "\e606"; } 69 | 70 | .icon-back:before { content: "\e601"; } 71 | 72 | .icon-favorite:before { content: "\e86d"; } 73 | 74 | .icon-share:before { content: "\e63f"; } 75 | 76 | .icon-gallery:before { content: "\e640"; } 77 | 78 | .icon-logout:before { content: "\e792"; } 79 | 80 | .icon-front-copy:before { content: "\e893"; } 81 | 82 | -------------------------------------------------------------------------------- /src/views/post.vue: -------------------------------------------------------------------------------- 1 | 94 | 95 | 115 | 116 | 117 | 317 | -------------------------------------------------------------------------------- /src/assets/css/reset.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | /** 3 | * @name reset 4 | * @authors darlang (http://darlang.com) 5 | * @date 2017-08-09 10:54:03 6 | * @version 0.45 7 | */ 8 | 9 | /*-------------------------------------------------------------------------- 10 | * 11 | *reset begin 12 | * 13 | *-------------------------------------------------------------------------- 14 | */ 15 | 16 | /* select text */ 17 | 18 | ::-moz-selection { 19 | background: #eee; 20 | color: #1abc9c; 21 | } 22 | 23 | ::selection { 24 | background: #eee; 25 | color: #1abc9c; 26 | } 27 | 28 | ::-moz-selection { 29 | background: #eee; 30 | color: #1abc9c; 31 | } 32 | 33 | ::selection { 34 | background: #eee; 35 | color: #1abc9c; 36 | } 37 | 38 | ::-moz-selection { 39 | background: #eee; 40 | color: #1abc9c; 41 | } 42 | 43 | ::-webkit-selection { 44 | background: #eee; 45 | color: #1abc9c; 46 | } 47 | 48 | /* chrome scrollbar */ 49 | 50 | ::-webkit-scrollbar-track-piece { 51 | width: 12px; 52 | border-right: 1px solid #EEE; 53 | border-left: 1px solid #e4e4e4; 54 | background-color: #f0f0f0; 55 | background-image: -webkit-linear-gradient(left, #f0f0f0, #FFF); 56 | } 57 | 58 | ::-webkit-scrollbar { 59 | width: 12px; 60 | height: 12px; 61 | } 62 | 63 | ::-webkit-scrollbar-thumb { 64 | position: relative; 65 | min-height: 25px; 66 | border-radius: 9999px; 67 | background-color: #ccc; 68 | background-clip: padding-box; 69 | } 70 | 71 | ::-webkit-scrollbar-thumb:vertical { 72 | border-top: 0 solid transparent; 73 | border-right: 2px solid transparent; 74 | border-bottom: 0 solid transparent; 75 | border-left: 3px solid transparent; 76 | } 77 | 78 | ::-webkit-scrollbar-thumb:horizontal { 79 | border-top: 3px solid transparent; 80 | border-right: 0 solid transparent; 81 | border-bottom: 2px solid transparent; 82 | border-left: 0 solid transparent; 83 | } 84 | 85 | ::-webkit-scrollbar-thumb:active { 86 | background-color: #777; 87 | } 88 | 89 | /* reset normal */ 90 | 91 | * { 92 | box-sizing: border-box; 93 | } 94 | 95 | a, 96 | abbr, 97 | acronym, 98 | address, 99 | applet, 100 | article, 101 | aside, 102 | audio, 103 | b, 104 | big, 105 | blockquote, 106 | body, 107 | canvas, 108 | caption, 109 | center, 110 | cite, 111 | code, 112 | dd, 113 | del, 114 | details, 115 | dfn, 116 | div, 117 | dl, 118 | dt, 119 | em, 120 | embed, 121 | fieldset, 122 | figcaption, 123 | figure, 124 | footer, 125 | form, 126 | h1, 127 | h2, 128 | h3, 129 | h4, 130 | h5, 131 | h6, 132 | header, 133 | hgroup, 134 | html, 135 | i, 136 | iframe, 137 | img, 138 | ins, 139 | kbd, 140 | label, 141 | legend, 142 | li, 143 | mark, 144 | menu, 145 | nav, 146 | object, 147 | ol, 148 | output, 149 | p, 150 | pre, 151 | q, 152 | ruby, 153 | s, 154 | samp, 155 | section, 156 | small, 157 | span, 158 | strike, 159 | strong, 160 | sub, 161 | summary, 162 | sup, 163 | table, 164 | tbody, 165 | td, 166 | tfoot, 167 | th, 168 | thead, 169 | time, 170 | tr, 171 | tt, 172 | u, 173 | ul, 174 | var, 175 | video { 176 | margin: 0; 177 | padding: 0; 178 | border: 0; 179 | font: inherit; 180 | font-size: 100%; 181 | word-break: break-all; 182 | word-wrap: break-word; 183 | } 184 | 185 | body { 186 | overflow-x: hidden; 187 | color: initial; 188 | font-size: 16px; 189 | font-family: "Microsoft YaHei", "Arial", "Microsoft YaHei UI", "Noto Sans S Chinese", "Source Han Sans", "Noto Sans CJK", "Microsoft Sans Serif", sans-serif; 190 | line-height: 1.5; 191 | font-weight: normal; 192 | } 193 | 194 | a, 195 | a:visited { 196 | /* color: inherit; */ 197 | text-decoration: none; 198 | opacity: 1; 199 | outline: none; 200 | transition: all 0.15s linear; 201 | } 202 | 203 | a:hover, 204 | a:active, 205 | a:focus { 206 | /* color: inherit; */ 207 | } 208 | 209 | blockquote, 210 | q { 211 | quotes: none; 212 | display: block; 213 | } 214 | 215 | blockquote:after, 216 | blockquote:before, 217 | q:after, 218 | q:before { 219 | content: ''; 220 | content: none; 221 | } 222 | 223 | h1, 224 | h2, 225 | h3, 226 | h4, 227 | h5, 228 | h6 { 229 | font-weight: normal; 230 | } 231 | 232 | h1 { 233 | font-size: 2.0rem; 234 | } 235 | 236 | h2 { 237 | font-size: 1.75rem; 238 | } 239 | 240 | h3 { 241 | font-size: 1.5rem; 242 | } 243 | 244 | h4 { 245 | font-size: 1.25rem; 246 | } 247 | 248 | h5 { 249 | font-size: 1.0rem; 250 | } 251 | 252 | h6 { 253 | font-size: 0.75rem; 254 | } 255 | 256 | img { 257 | border: none; 258 | max-width: 100%; 259 | height: auto; 260 | } 261 | 262 | /* input[type="text"], 263 | input[type="password"], 264 | input[type="email"], 265 | input[type="number"], 266 | input[type="search"], 267 | input[type="tel"], 268 | input[type="url"] { */ 269 | input{ 270 | display: block; 271 | width: 100%; 272 | padding: 0.375rem 0.75rem; 273 | font-size: 0.875rem; 274 | line-height: 1.5; 275 | color: #555; 276 | background-color: #fff; 277 | background-image: none; 278 | border: 1px solid #ccc; 279 | border-radius:0; 280 | box-shadow: none; 281 | } 282 | /* 283 | input[type="text"]:focus, 284 | input[type="password"]:focus, 285 | input[type="email"]:focus, 286 | input[type="number"]:focus, 287 | input[type="search"]:focus, 288 | input[type="tel"]:focus, 289 | input[type="url"]:focus { */ 290 | /* input:focus{ 291 | border-color: #66afe9; 292 | box-shadow: none; 293 | } */ 294 | 295 | input::-webkit-input-placeholder, 296 | input::-moz-placeholder, 297 | input:-ms-input-placeholder { 298 | color: #999; 299 | opacity: 1; 300 | } 301 | 302 | input[disabled], 303 | input[type="radio"][disabled], 304 | input[type="checkbox"][disabled], 305 | fieldset[disabled] input[type="radio"], 306 | fieldset[disabled] input[type="checkbox"], 307 | fieldset[disabled] input[type="radio"] label, 308 | fieldset[disabled] input[type="checkbox"] label { 309 | cursor: not-allowed; 310 | } 311 | 312 | button, 313 | input[type="button"], 314 | input[type="submit"], 315 | input[type="reset"] { 316 | padding: 0.375rem 0.75rem; 317 | font-size: 0.875rem; 318 | line-height: 1.5; 319 | border-radius: 0.25rem; 320 | border: none; 321 | cursor: pointer; 322 | } 323 | 324 | button:active, 325 | input[type="button"]:active, 326 | input[type="submit"]:active, 327 | input[type="reset"]:active { 328 | background-color: rgba(255, 255, 255, 0.1) !important; 329 | } 330 | 331 | button:before:active, 332 | input[type="button"]:before:active, 333 | input[type="submit"]:before:active, 334 | input[type="reset"]:before:active { 335 | background-color: rgba(255, 255, 255, 0.1) !important; 336 | } 337 | 338 | button:after:active, 339 | input[type="button"]:after:active, 340 | input[type="submit"]:after:active, 341 | input[type="reset"]:after:active { 342 | background-color: rgba(255, 255, 255, 0.1) !important; 343 | } 344 | 345 | button, 346 | input, 347 | optgroup, 348 | select, 349 | textarea { 350 | margin: 0; 351 | font: inherit; 352 | color: inherit; 353 | outline: 0; 354 | } 355 | 356 | ol, 357 | ul { 358 | list-style: none; 359 | } 360 | 361 | small { 362 | font-size: 80%; 363 | font-weight: 300; 364 | } 365 | 366 | strong { 367 | font-size: 101%; 368 | font-weight: 700; 369 | } 370 | 371 | table { 372 | width: 100%; 373 | max-width: 100%; 374 | margin-bottom: 1.25rem; 375 | border-collapse: collapse !important; 376 | border-spacing: 0; 377 | } 378 | 379 | table>thead>tr>th, 380 | table>tbody>tr>th, 381 | table>tfoot>tr>th, 382 | table>thead>tr>td, 383 | table>tbody>tr>td, 384 | table>tfoot>tr>td { 385 | padding: 0.4375rem 0.6875rem; 386 | line-height: 1.5; 387 | vertical-align: top; 388 | border: 1px solid #eee; 389 | } 390 | 391 | textarea { 392 | height: auto; 393 | outline: 0; 394 | } 395 | 396 | /*--- custom ---*/ 397 | 398 | .bgfff { 399 | background-color: #FFF; 400 | } 401 | 402 | .bgw { 403 | background-color: white; 404 | } 405 | 406 | .bgg { 407 | background-color: gray; 408 | } 409 | 410 | .dp-n { 411 | display: none; 412 | } 413 | 414 | .dp-b { 415 | display: block; 416 | } 417 | 418 | .dp-i { 419 | display: inline; 420 | } 421 | 422 | .dp-t { 423 | display: table; 424 | } 425 | 426 | .dp-f { 427 | display: -moz-flex; 428 | display: -ms-flex; 429 | display: -o-flex; 430 | display: -webkit-box; 431 | display: -ms-flexbox; 432 | display: -webkit-flex; 433 | display: flex; 434 | } 435 | 436 | .dp-g { 437 | display: -ms-grid; 438 | display: grid; 439 | } 440 | 441 | .dp-li { 442 | display: list-item; 443 | } 444 | 445 | .dp-ib { 446 | display: inline-block; 447 | } 448 | 449 | .dp-it { 450 | display: inline-table; 451 | } 452 | 453 | .dp-ig { 454 | display: -ms-inline-grid; 455 | display: inline-grid; 456 | } 457 | 458 | .dp-if { 459 | display: -moz-inline-flex; 460 | display: -ms-inline-flex; 461 | display: -o-inline-flex; 462 | display: -webkit-inline-box; 463 | display: -ms-inline-flexbox; 464 | display: -webkit-inline-flex; 465 | display: inline-flex; 466 | } 467 | 468 | .dp-tc { 469 | display: table-cell; 470 | } 471 | 472 | .dp-tfg { 473 | display: table-footer-group; 474 | } 475 | 476 | .dp-thg { 477 | display: table-header-group; 478 | } 479 | 480 | .dp-tr { 481 | display: table-row; 482 | } 483 | 484 | .dp-trg { 485 | display: table-row-group; 486 | } 487 | 488 | .pd-a { 489 | padding: auto; 490 | } 491 | 492 | .pdt-5 { 493 | padding-top: 5px; 494 | } 495 | 496 | .pdt-10 { 497 | padding-top: 10px; 498 | } 499 | 500 | .pdt-15 { 501 | padding-top: 15px; 502 | } 503 | 504 | .pdt-20 { 505 | padding-top: 20px; 506 | } 507 | 508 | .pdt-25 { 509 | padding-top: 25px; 510 | } 511 | 512 | .pdt-30 { 513 | padding-top: 30px; 514 | } 515 | 516 | .pdt-35 { 517 | padding-top: 35px; 518 | } 519 | 520 | .pdt-40 { 521 | padding-top: 40px; 522 | } 523 | 524 | .pdt-45 { 525 | padding-top: 45px; 526 | } 527 | 528 | .pdt-50 { 529 | padding-top: 50px; 530 | } 531 | 532 | .pdb-5 { 533 | padding-bottom: 5px; 534 | } 535 | 536 | .pdb-10 { 537 | padding-bottom: 10px; 538 | } 539 | 540 | .pdb-15 { 541 | padding-bottom: 15px; 542 | } 543 | 544 | .pdb-20 { 545 | padding-bottom: 20px; 546 | } 547 | 548 | .pdb-25 { 549 | padding-bottom: 25px; 550 | } 551 | 552 | .pdb-30 { 553 | padding-bottom: 30px; 554 | } 555 | 556 | .pdb-35 { 557 | padding-bottom: 35px; 558 | } 559 | 560 | .pdb-40 { 561 | padding-bottom: 40px; 562 | } 563 | 564 | .pdb-45 { 565 | padding-bottom: 45px; 566 | } 567 | 568 | .pdb-50 { 569 | padding-bottom: 50px; 570 | } 571 | 572 | .mg-t { 573 | margin: auto; 574 | } 575 | 576 | .mgt-5 { 577 | margin-top: 5px; 578 | } 579 | 580 | .mgt-10 { 581 | margin-top: 10px; 582 | } 583 | 584 | .mgt-15 { 585 | margin-top: 15px; 586 | } 587 | 588 | .mgt-20 { 589 | margin-top: 20px; 590 | } 591 | 592 | .mgt-25 { 593 | margin-top: 25px; 594 | } 595 | 596 | .mgt-30 { 597 | margin-top: 30px; 598 | } 599 | 600 | .mgt-35 { 601 | margin-top: 35px; 602 | } 603 | 604 | .mgt-40 { 605 | margin-top: 40px; 606 | } 607 | 608 | .mgt-45 { 609 | margin-top: 45px; 610 | } 611 | 612 | .mgt-50 { 613 | margin-top: 50px; 614 | } 615 | 616 | .mgb-5 { 617 | margin-bottom: 5px; 618 | } 619 | 620 | .mgb-10 { 621 | margin-bottom: 10px; 622 | } 623 | 624 | .mgb-15 { 625 | margin-bottom: 15px; 626 | } 627 | 628 | .mgb-20 { 629 | margin-bottom: 20px; 630 | } 631 | 632 | .mgb-25 { 633 | margin-bottom: 25px; 634 | } 635 | 636 | .mgb-30 { 637 | margin-bottom: 30px; 638 | } 639 | 640 | .mgb-35 { 641 | margin-bottom: 35px; 642 | } 643 | 644 | .mgb-40 { 645 | margin-bottom: 40px; 646 | } 647 | 648 | .mgb-45 { 649 | margin-bottom: 45px; 650 | } 651 | 652 | .mgb-50 { 653 | margin-bottom: 50px; 654 | } 655 | 656 | .ta-l { 657 | text-align: left; 658 | } 659 | 660 | .ta-c { 661 | text-align: center; 662 | } 663 | 664 | .ta-r { 665 | text-align: right; 666 | } 667 | 668 | .ta-j { 669 | text-align: justify; 670 | } 671 | 672 | .fl-l { 673 | float: left; 674 | } 675 | 676 | .fl-r { 677 | float: right; 678 | } 679 | 680 | .fl-n { 681 | float: none; 682 | } 683 | 684 | .cl-l { 685 | clear: left; 686 | } 687 | 688 | .cl-r { 689 | clear: right; 690 | } 691 | 692 | .cl-b { 693 | clear: both; 694 | } 695 | 696 | .cl-n { 697 | clear: none; 698 | } 699 | 700 | .clear { 701 | clear: both; 702 | height: 0; 703 | font-size: 0; 704 | overflow: hidden; 705 | } 706 | 707 | .cl { 708 | zoom: 1; 709 | } 710 | 711 | .cl:after { 712 | content: "."; 713 | display: block; 714 | height: 0; 715 | font-size: 0; 716 | clear: both; 717 | visibility: hidden; 718 | } -------------------------------------------------------------------------------- /src/assets/css/style.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Name: VueWPress 3 | * Author: Darlang 4 | * Version: 0.2 5 | * Licese: MIT; 6 | * Link: https://www.darlang.com 7 | * Github: https://github.com/crlang/vuewpress 8 | */ 9 | 10 | /*----------------------------------------------------------------------- 11 | ---------------------------- init definition ---------------------------- 12 | -----------------------------------------------------------------------*/ 13 | 14 | /*! 15 | * 16 | * 层级定义: 17 | * pop:交互层,最大层级,用户交互 18 | * msk: 蒙版层,用于导航及内容层上级遮罩,低于交互层 19 | * nav: 定位层,固定某个部件,位于内容层上方,用于导航,返回顶部等 20 | * con: 内容层,普通内容层级,默认层级 21 | * 22 | */ 23 | $z-pop: 1003; 24 | $z-msk: 1001; 25 | $z-fix: 999; 26 | $z-lod: 997; 27 | 28 | /*! 29 | * 30 | * 颜色定义 31 | *--网站色 32 | * 主色:#1e90ff 33 | * 辅色:#a4b0be 34 | * 反色:#ff6348 35 | *--情景色 36 | * 危险: #c0392b => #e74c3c 37 | * 警告: #d35400 => #e67e22 38 | * 一般: #7f8c8d => #95a5a6 39 | * 安全: #27ae6d => #2ecc71 40 | * 41 | */ 42 | $MC: #0984e3; 43 | $MCN: #00cec9; 44 | $AC: #a4b0be; 45 | $UMC: #ff6348; 46 | $dangM: #c0392b; 47 | $dangN: #e74c3c; 48 | $wranM: #d35400; 49 | $wranN: #e67e22; 50 | $infoM: #7f8c8d; 51 | $infoN: #95a5a6; 52 | $succM: #27ae6d; 53 | $succN: #2ecc71; 54 | 55 | /*----------------------------------------------------------------------- 56 | ----------------------------- Global Style ----------------------------- 57 | -----------------------------------------------------------------------*/ 58 | 59 | #app { 60 | padding: 2.5rem 0 3.4375rem 0; 61 | } 62 | 63 | .wrap { 64 | max-width: 48rem; 65 | padding: 0 0.9375rem; 66 | margin: auto; 67 | } 68 | 69 | .fixed-header, 70 | .fixed-footer { 71 | width: 100%; 72 | position: fixed; 73 | left: 0; 74 | right: 0; 75 | z-index: $z-fix; 76 | } 77 | 78 | /* header */ 79 | .fixed-header { 80 | top: 0; 81 | .top-bar { 82 | background: linear-gradient(120deg,$MC 0,$MCN 100%); 83 | color: #fff; 84 | display: flex; 85 | justify-content: space-between; 86 | .pg-back { 87 | padding: 0.5rem 0.75rem; 88 | } 89 | .pg-title { 90 | width: calc(100% - 5rem); 91 | padding: 0.5rem 0; 92 | font-weight: 300; 93 | white-space: nowrap; 94 | text-overflow: ellipsis; 95 | overflow: hidden; 96 | } 97 | .pg-nav { 98 | padding: 0.5rem 0.75rem; 99 | } 100 | } 101 | .pg-nav-content { 102 | position: absolute; 103 | right: 0; 104 | min-width: 7.5rem; 105 | opacity: 0; 106 | transform: translateY(50%); 107 | transition: all 0.25s linear; 108 | &.show { 109 | opacity: 1; 110 | transform: translateY(0); 111 | } 112 | .weui-cells { 113 | margin-top: 0; 114 | border: 1px solid #eee; 115 | .weui-cell:before { 116 | left: 0.3125rem; 117 | right: 0.3125rem; 118 | } 119 | } 120 | } 121 | } 122 | 123 | /* footer */ 124 | .fixed-footer { 125 | bottom: 0; 126 | } 127 | /* footer nav */ 128 | .fixed-footer-nav { 129 | position: fixed; 130 | bottom: 0; 131 | left: 0; 132 | right: 0; 133 | z-index: $z-fix; 134 | background: #fff; 135 | padding: 10px; 136 | border-top: 1px solid #eee; 137 | > ul { 138 | display: flex; 139 | text-align: center; 140 | > li { 141 | width: 100%; 142 | } 143 | } 144 | } 145 | 146 | /*----------------------------------------------------------------------- 147 | ------------------------------ Home Style ------------------------------ 148 | -----------------------------------------------------------------------*/ 149 | .articles { 150 | .articles-nav { 151 | margin: 0 0 0.625rem; 152 | padding: 0; 153 | box-shadow: 0 0 0.3125rem rgba(0, 0, 0, 0.15); 154 | overflow: hidden; 155 | &::-webkit-scrollbar { 156 | display: none; 157 | } 158 | ul { 159 | &::-webkit-scrollbar { 160 | display: none; 161 | } 162 | margin: auto -0.9375rem; 163 | display: block; 164 | overflow-x: auto; 165 | white-space: nowrap; 166 | li { 167 | display: inline-block; 168 | padding: 0.875rem 0.625rem; 169 | color: #888; 170 | cursor: pointer; 171 | &.active { 172 | color: $MC; 173 | border-bottom: 1px solid $MC; 174 | } 175 | } 176 | } 177 | } 178 | .articles-list { 179 | padding: 1.25rem 0; 180 | ul { 181 | li { 182 | display: flex; 183 | padding-bottom: 0.9375rem; 184 | margin-bottom: 0.9375rem; 185 | border-bottom: 1px solid #eee; 186 | .img-prev { 187 | width: 10rem; 188 | height: 7.5rem; 189 | background-size: cover; 190 | background-position: center center; 191 | border-radius: 0.3125rem; 192 | border: 1px solid #eee; 193 | } 194 | .cont-prev { 195 | width: calc(100% - 10.9375rem); 196 | margin-right: 0.9375rem; 197 | .title { 198 | font-size: 1rem; 199 | font-weight: bold; 200 | color: #222; 201 | margin-bottom: 0.9375rem; 202 | } 203 | .desc{ 204 | font-size: 0.75rem; 205 | font-weight: lighter; 206 | color: #888; 207 | margin-bottom: 0.9375rem; 208 | a.more-link { 209 | display: none; 210 | } 211 | } 212 | .time{ 213 | font-size: 0.75rem; 214 | color: #999; 215 | } 216 | } 217 | } 218 | } 219 | } 220 | } 221 | 222 | /* home categories */ 223 | .home-categories { 224 | margin: 0.625rem 0; 225 | ul { 226 | display: flex; 227 | margin: auto -0.9375rem; 228 | li { 229 | width: 25%; 230 | text-align: center; 231 | } 232 | } 233 | } 234 | 235 | /*----------------------------------------------------------------------- 236 | ----------------------------- article Style ----------------------------- 237 | -----------------------------------------------------------------------*/ 238 | .article { 239 | padding: 0.9375rem 0; 240 | div > .title { 241 | font-size: 1.5rem; 242 | color: #333; 243 | } 244 | div > .meta { 245 | font-size: 0.875rem; 246 | color: #888; 247 | } 248 | .article-desc { 249 | padding: 0.9375rem 0; 250 | color: #999; 251 | font-size: 0.9375rem; 252 | margin-bottom: 0; 253 | a.more-link { 254 | display: none; 255 | } 256 | &:after { 257 | display: block; 258 | width: 10rem; 259 | height: 0.25rem; 260 | border-radius: 0.1875rem; 261 | background: #efefef; 262 | content: ""; 263 | margin-top: 1rem; 264 | } 265 | } 266 | .article-content { 267 | width: 100%; 268 | font-size: 0.875rem; 269 | > p { 270 | margin-bottom: 0.625rem; 271 | } 272 | a { 273 | color: $MC; 274 | text-decoration: underline; 275 | } 276 | .dp-highlighter { 277 | width: 100%; 278 | overflow-x: auto; 279 | margin: 0.9375rem 0; 280 | ol { 281 | margin: 0 0 0.125rem 0.9375rem; 282 | li { 283 | white-space: nowrap; 284 | } 285 | } 286 | } 287 | } 288 | .article-protected { 289 | margin: 2.1875rem 0.625rem; 290 | padding: 1.5625rem 0.9375rem; 291 | border: 0.125rem dashed #0887e2; 292 | > p { 293 | color: #999; 294 | line-height: 1; 295 | margin: 0.3125rem 0; 296 | font-size: 0.875rem; 297 | text-align: right; 298 | } 299 | > input { 300 | position: relative; 301 | &::placeholder { 302 | color: #999; 303 | } 304 | &::before { 305 | content: "\e600"; 306 | } 307 | } 308 | } 309 | .article-comments { 310 | > h3 { 311 | font-size: 1.125rem; 312 | margin-top: 2.1875rem; 313 | } 314 | ul { 315 | li { 316 | margin: 0.625rem auto; 317 | padding: 0.625rem 0; 318 | border-bottom: 1px solid #ccc; 319 | } 320 | } 321 | .comment-content { 322 | display: flex; 323 | .comment-avatar { 324 | text-align: center; 325 | width: 3.75rem; 326 | padding: 0 0.3125rem; 327 | img { 328 | display: inline-block; 329 | width: 3rem; 330 | height: 3rem; 331 | border-radius: 50%; 332 | border: 1px solid #eee; 333 | white-space: nowrap; 334 | text-overflow: clip; 335 | overflow: hidden; 336 | } 337 | p { 338 | font-size: 0.875rem; 339 | white-space: nowrap; 340 | text-overflow: ellipsis; 341 | overflow-x: hidden; 342 | } 343 | } 344 | .comment-desc { 345 | width: calc(100% - 3.75rem); 346 | .comment-info { 347 | font-size: 0.75rem; 348 | color: #999; 349 | margin-top: 0.3125rem; 350 | span:first-child { 351 | font-size: 1rem; 352 | font-weight: bold; 353 | color: #222; 354 | } 355 | } 356 | .comment-response { 357 | // min-height: 3rem; 358 | font-size: 0.875rem; 359 | color: #555; 360 | } 361 | } 362 | } 363 | } 364 | } 365 | .fixed-response { 366 | display: flex; 367 | .response-input { 368 | width: calc(100% - 2.875rem); 369 | input { 370 | border: none; 371 | box-shadow: none; 372 | border-radius: 0; 373 | border-bottom: 1px solid #aaa; 374 | &:focus { 375 | border-color: $MC; 376 | } 377 | } 378 | } 379 | .response-submit { 380 | button { 381 | background: none; 382 | line-height: 1; 383 | outline: none; 384 | &:active { 385 | color: $MC; 386 | } 387 | i { 388 | font-size: 22px; 389 | } 390 | } 391 | } 392 | } 393 | 394 | /*----------------------------------------------------------------------- 395 | ------------------------------ topic Style ------------------------------ 396 | -----------------------------------------------------------------------*/ 397 | .topic { 398 | padding: 1.25rem 0; 399 | ul { 400 | li { 401 | padding-bottom: 1.25rem; 402 | margin-bottom: 1.25rem; 403 | position: relative; 404 | border-bottom: 1px solid #eee; 405 | &::after { 406 | display: block; 407 | content: "\2022"; 408 | position: absolute; 409 | left: calc(50% - 1.3125rem); 410 | bottom: -0.5625rem; 411 | width: 2.625rem; 412 | height: 1.125rem; 413 | margin: auto; 414 | text-align: center; 415 | font-size: 1.125rem; 416 | line-height: 1; 417 | color: #999; 418 | background: #fff; 419 | } 420 | .thumb { 421 | max-height: 18.75rem; 422 | overflow: hidden; 423 | text-align: center; 424 | } 425 | .title { 426 | font-size: 1rem; 427 | font-weight: bolder; 428 | white-space: nowrap; 429 | text-overflow: ellipsis; 430 | overflow: hidden; 431 | } 432 | } 433 | } 434 | } 435 | 436 | .page { 437 | padding: 1.25rem 0; 438 | div > .title { 439 | font-size: 1.5rem; 440 | color: #333; 441 | text-align: center; 442 | } 443 | div > .meta { 444 | font-size: .875rem; 445 | color: #888; 446 | text-align: center; 447 | padding-bottom: 1.875rem; 448 | margin-bottom: 1.875rem; 449 | border-bottom: 1px dashed #ccc; 450 | } 451 | .page-content { 452 | margin-top: 0.9375rem; 453 | } 454 | } 455 | 456 | /*----------------------------------------------------------------------- 457 | --------------------------------- Tags ---------------------------------- 458 | -----------------------------------------------------------------------*/ 459 | .tags { 460 | .tags-content { 461 | margin: 0.9375rem 0; 462 | ul { 463 | display: flex; 464 | flex-wrap: wrap; 465 | justify-content: space-between; 466 | li { 467 | padding: 0.625rem; 468 | margin: 0 0.3125rem 0.9375rem; 469 | background: $infoN; 470 | color: #fff; 471 | border: 1px solid $infoM; 472 | border-radius: 50%; 473 | transition: all 0.25s ease-in; 474 | } 475 | } 476 | } 477 | } 478 | .articles { 479 | .tag-content { 480 | ul { 481 | li { 482 | .cont-prev { 483 | width: 100%; 484 | } 485 | } 486 | } 487 | } 488 | } 489 | 490 | /*----------------------------------------------------------------------- 491 | ------------------------------ Media list ------------------------------- 492 | -----------------------------------------------------------------------*/ 493 | .media { 494 | .media-content { 495 | margin: 0.9375rem 0; 496 | ul { 497 | width: 100%; 498 | display: flex; 499 | flex-wrap: wrap; 500 | li { 501 | text-align: center; 502 | } 503 | } 504 | } 505 | } 506 | 507 | /*----------------------------------------------------------------------- 508 | ------------------------------ Media list ------------------------------- 509 | -----------------------------------------------------------------------*/ 510 | .comments { 511 | padding: 15px 0; 512 | .comments-order { 513 | border-bottom: 1px solid #eee; 514 | } 515 | .comments-content { 516 | ul { 517 | li { 518 | margin: 0.3125rem auto; 519 | padding: 0.3125rem 0; 520 | border-bottom: 1px solid #ccc; 521 | } 522 | } 523 | .comment-content { 524 | display: flex; 525 | .comment-avatar { 526 | text-align: center; 527 | width: 3.75rem; 528 | padding: 0 0.3125rem; 529 | img { 530 | width: 3rem; 531 | height: 3rem; 532 | } 533 | p { 534 | font-size: 0.875rem; 535 | white-space: nowrap; 536 | text-overflow: ellipsis; 537 | overflow-x: hidden; 538 | } 539 | } 540 | .comment-desc { 541 | width: calc(100% - 3.75rem); 542 | .comment-response { 543 | min-height: 3rem; 544 | font-size: 0.875rem; 545 | color: #555; 546 | } 547 | .comment-info { 548 | font-size: 0.75rem; 549 | color: #999; 550 | margin-top: 0.3125rem; 551 | a { 552 | color: inherit; 553 | } 554 | } 555 | } 556 | } 557 | } 558 | } 559 | /*----------------------------------------------------------------------- 560 | -------------------------------- member --------------------------------- 561 | -----------------------------------------------------------------------*/ 562 | .member { 563 | overflow: hidden; 564 | .wrap { 565 | margin: auto -0.9375rem; 566 | } 567 | .user-bg, 568 | .user-list ul, 569 | .user-myself { 570 | box-shadow: 0 0 1.25rem #eee; 571 | } 572 | .user-bg { 573 | padding: 2.5rem 0; 574 | background: $MC; 575 | background-image: linear-gradient(80deg,$MC 0,$MCN 100%); 576 | .user-avatar { 577 | width: 4rem; 578 | height: 4rem; 579 | margin: auto; 580 | border-radius: 50%; 581 | overflow: hidden; 582 | box-shadow: 0 0 1.5625rem rgba(0, 0, 0, 0.25); 583 | } 584 | .user-name { 585 | text-align: center; 586 | margin-top: 0.9375rem; 587 | color: #333; 588 | } 589 | } 590 | .user-myself { 591 | margin: 0.9375rem 0; 592 | padding: 0.625rem 0; 593 | ul { 594 | display: flex; 595 | li { 596 | width: 33.333333%; 597 | text-align: center; 598 | color: #999; 599 | i { 600 | font-size: 1.5rem; 601 | } 602 | } 603 | } 604 | } 605 | .user-list { 606 | ul { 607 | margin: 0.9375rem auto; 608 | li { 609 | padding: .625rem 0.9375rem; 610 | display: flex; 611 | justify-content: space-between; 612 | border-bottom: 1px solid #eee; 613 | transition: all 0.25s linear; 614 | &:hover, 615 | &:active, 616 | &:focus { 617 | background: #fafafa; 618 | color: #555; 619 | outline: none; 620 | } 621 | span { 622 | font-size: 0.875rem; 623 | color: #999; 624 | i { 625 | display: inline-block; 626 | color: #666; 627 | transform: rotate(180deg); 628 | } 629 | } 630 | } 631 | } 632 | } 633 | } 634 | 635 | /*----------------------------------------------------------------------- 636 | --------------------------------- post ---------------------------------- 637 | -----------------------------------------------------------------------*/ 638 | .post { 639 | overflow-x: hidden; 640 | .wrap { 641 | padding: 0; 642 | } 643 | } 644 | 645 | /*----------------------------------------------------------------------- 646 | ------------------------------- pages nav ------------------------------- 647 | -----------------------------------------------------------------------*/ 648 | .pages-nav { 649 | .prev-next { 650 | display: flex; 651 | border: 1px solid #eee; 652 | margin: 1.5625rem auto; 653 | .prev-page, 654 | .next-page { 655 | width: 50%; 656 | padding: 0.4375rem; 657 | text-align: center; 658 | background: #eee; 659 | &.empty { 660 | background: #fafafa; 661 | } 662 | } 663 | } 664 | } 665 | 666 | /*----------------------------------------------------------------------- 667 | -------------------------- fixed compoment css -------------------------- 668 | -----------------------------------------------------------------------*/ 669 | .weui-toptips{ 670 | &.weui-toptips_warn { 671 | padding: 10px; 672 | background: linear-gradient(120deg, $dangM, $dangN); 673 | &.weui-toptips_succ { 674 | background: linear-gradient(120deg, $succM, $succN); 675 | } 676 | &.weui-toptips_info { 677 | background: linear-gradient(120deg, $infoM, $infoN); 678 | } 679 | } 680 | } -------------------------------------------------------------------------------- /dist/images/iconfont.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | Created by iconfont 9 | 10 | 11 | 12 | 13 | 21 | 22 | 23 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | --------------------------------------------------------------------------------