Let's refine tank by react+antd.
@@ -1,8 +0,0 @@
|
||||
/build/
|
||||
/config/
|
||||
/dist/
|
||||
/static/
|
||||
/*.js
|
||||
|
||||
src/common/fork/*
|
||||
|
||||
@@ -1,67 +0,0 @@
|
||||
// https://eslint.org/docs/user-guide/configuring
|
||||
|
||||
module.exports = {
|
||||
root: true,
|
||||
parser: 'babel-eslint',
|
||||
parserOptions: {
|
||||
sourceType: 'module'
|
||||
},
|
||||
env: {
|
||||
browser: true,
|
||||
},
|
||||
// https://github.com/standard/standard/blob/master/docs/RULES-en.md
|
||||
extends: 'standard',
|
||||
// required to lint *.vue files
|
||||
plugins: [
|
||||
'html'
|
||||
],
|
||||
// add your custom rules here
|
||||
'rules': {
|
||||
// allow paren-less arrow functions
|
||||
'arrow-parens': 0,
|
||||
// allow async-await
|
||||
'generator-star-spacing': 0,
|
||||
// allow debugger during development
|
||||
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
|
||||
|
||||
//ignore the paren check before function.
|
||||
'space-before-function-paren': [0, 'always'],
|
||||
//ignore the space before block.
|
||||
'space-before-blocks': [0, 'always'],
|
||||
//ignore the empty line check.
|
||||
'no-multiple-empty-lines': [0, {'max': 2}],
|
||||
//semicolon or no semicolon is ok.
|
||||
'semi': [0, 'always'],
|
||||
//ignore the space before or after =>
|
||||
'arrow-spacing': 0,
|
||||
//the type of quotes
|
||||
'quotes': [0, 'single'],
|
||||
//block can be padded by blank lines
|
||||
'padded-blocks': 0,
|
||||
//comma spacing before or after.
|
||||
'comma-spacing': 0,
|
||||
//key spacing.
|
||||
'key-spacing': [0, {'beforeColon': false, 'afterColon': true}],
|
||||
//trailing spaces
|
||||
'no-trailing-spaces': 0,
|
||||
//spaced comment
|
||||
'spaced-comment': 0,
|
||||
//keyword-spacing
|
||||
'keyword-spacing': 0,
|
||||
'space-in-parens': 0,
|
||||
'no-extend-native': 0,
|
||||
'no-useless-escape': 0,
|
||||
'no-unused-vars': 0,
|
||||
'no-undef': 0,
|
||||
'no-tabs': 0,
|
||||
'indent': 0,
|
||||
'no-multi-spaces': 0,
|
||||
'eol-last': 0,
|
||||
'no-template-curly-in-string': 0,
|
||||
'no-mixed-spaces-and-tabs': 0,
|
||||
'handle-callback-err': 0,
|
||||
"import/no-webpack-loader-syntax": "off",
|
||||
'object-curly-spacing': 0,
|
||||
'comma-dangle': 0
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,27 @@
|
||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
/.pnp
|
||||
.pnp.js
|
||||
|
||||
# testing
|
||||
/coverage
|
||||
|
||||
# production
|
||||
/build
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
node_modules/
|
||||
/dist/
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
|
||||
npm-debug.log*
|
||||
yarn.lock
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
yarn.lock
|
||||
|
||||
# Editor directories and files
|
||||
.idea
|
||||
@@ -13,3 +30,6 @@ yarn-error.log*
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
draft.html
|
||||
|
||||
report.*.json
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
# 蓝眼云盘
|
||||
|
||||
2018-04-12
|
||||
tank-1.0.3
|
||||
1. 添加了多文件同时上传的功能.
|
||||
2. 开发情况下有可能上传的文件路径没有权限,添加了更多提示.
|
||||
|
||||
2018-01-19
|
||||
tank-1.0.2
|
||||
1. 修复了下载时无法估算文件大小的bug,header头重添加了Content-Type. [#2](https://github.com/eyebluecn/tank/issues/2)
|
||||
2. 修复了移动端样式混乱的问题.[#3](https://github.com/eyebluecn/tank/issues/3)
|
||||
3. 修复了文夹层数无上限的bug. [#4](https://github.com/eyebluecn/tank/issues/4)
|
||||
4. 修复了文件夹自己移动到自己后就全部消失的bug. [#8](https://github.com/eyebluecn/tank/issues/8)
|
||||
5. 统一不能删除用户,但是可以禁用或者启用用户. [#9](https://github.com/eyebluecn/tank/issues/9)
|
||||
|
||||
|
||||
2018-01-12
|
||||
tank-1.0.1
|
||||
1. 修复面包屑回退的bug [#1](https://github.com/eyebluecn/tank/issues/1)
|
||||
2. 修复移动文件时,可能移到其他人的文件夹下的bug
|
||||
3. 新增404页面
|
||||
4. 移除掉一些没用的代码
|
||||
|
||||
|
||||
2018-01-01
|
||||
tank-1.0.0
|
||||
完成基本核心功能
|
||||
@@ -1,21 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2017 蓝眼
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -1,73 +1,44 @@
|
||||

|
||||
This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
|
||||
|
||||
# 蓝眼云盘前端
|
||||
## Available Scripts
|
||||
|
||||
##### [在线Demo](http://tank.eyeblue.cn) (体验账号: demo 密码:123456)
|
||||
In the project directory, you can run:
|
||||
|
||||
##### [配套后端tank](https://github.com/eyebluecn/tank)
|
||||
### `yarn start`
|
||||
|
||||
### 简介
|
||||
蓝眼云盘是前后端彻底分离的项目,本项目主要为后端提供静态资源文件。更多关于蓝眼云盘的介绍,请参考[蓝眼云盘后端](https://github.com/eyebluecn/tank)
|
||||
Runs the app in the development mode.<br />
|
||||
Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
|
||||
|
||||
如果您觉得蓝眼云盘对您有帮助,请不要吝惜您的star :smile:
|
||||
The page will reload if you make edits.<br />
|
||||
You will also see any lint errors in the console.
|
||||
|
||||
### 技术栈
|
||||
### `yarn test`
|
||||
|
||||
vue2.0 + vue-router + vuex + vue-resource + webpack + es6 + less
|
||||
Launches the test runner in the interactive watch mode.<br />
|
||||
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
|
||||
|
||||
### `yarn build`
|
||||
|
||||
### 运行
|
||||
Builds the app for production to the `build` folder.<br />
|
||||
It correctly bundles React in production mode and optimizes the build for the best performance.
|
||||
|
||||
```
|
||||
npm install
|
||||
The build is minified and the filenames include the hashes.<br />
|
||||
Your app is ready to be deployed!
|
||||
|
||||
npm run serve
|
||||
```
|
||||
See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
|
||||
|
||||
### 打包
|
||||
### `yarn eject`
|
||||
|
||||
```
|
||||
npm run build
|
||||
```
|
||||
打包的结果在`dist`文件夹下,将该文件夹下的内容放置在[后端tank](https://github.com/eyebluecn/tank)的`build/html`文件夹下即可。
|
||||
**Note: this is a one-way operation. Once you `eject`, you can’t go back!**
|
||||
|
||||
If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
|
||||
|
||||
### 配套后端
|
||||
此项目有配套后端项目,对golang感兴趣的同学可以猛戳 [配套后端tank](https://github.com/eyebluecn/tank)
|
||||
Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.
|
||||
|
||||
### 总结
|
||||
1、 蓝眼的宗旨是专注于开源精致而优雅的软件,所以在代码的构建过程中我们不停地思考与迭代,追求最优质的代码。
|
||||
You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.
|
||||
|
||||
2、 蓝眼云盘前端代码的构建完全面向对象,可扩展能力强,涉及多用户,多权限功能。
|
||||
|
||||
3、 蓝眼云盘后端采用了更贴近底层golang语言,更加适用于文件传输类的软件,速度更快,用户体验更好。
|
||||
## Learn More
|
||||
|
||||
### Contribution
|
||||
You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
|
||||
|
||||
感谢所有蓝眼云盘的贡献者 [@zicla](https://github.com/zicla),[@seaheart](https://github.com/seaheart),@heying,[@hxsherry](https://github.com/hxsherry)
|
||||
|
||||
如果您也想参与进来,请尽情的fork, star, post issue, pull requests
|
||||
|
||||
### 软件截图
|
||||
|
||||
#### PC端截图
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
#### 手机端截图
|
||||
|
||||

|
||||
|
||||
### License
|
||||
|
||||
[MIT](http://opensource.org/licenses/MIT)
|
||||
|
||||
Copyright (c) 2017-present, eyeblue.cn
|
||||
To learn React, check out the [React documentation](https://reactjs.org/).
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
module.exports = {
|
||||
presets: [
|
||||
'@vue/app',
|
||||
],
|
||||
plugins: [
|
||||
[
|
||||
"component",
|
||||
{
|
||||
"libraryName": "element-ui",
|
||||
"styleLibraryName": "theme-chalk"
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
## change default port to 6015
|
||||
create file `vue.config.js` next to `package.json`
|
||||
```js
|
||||
module.exports = {
|
||||
devServer: {
|
||||
port: 6015
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Add less support
|
||||
|
||||
npm install -D less-loader less
|
||||
|
||||
## Add http proxy
|
||||
|
||||
```
|
||||
module.exports = {
|
||||
devServer: {
|
||||
proxy: {
|
||||
'/api': {
|
||||
//target: 'https://tank.eyeblue.cn',
|
||||
target: 'http://127.0.0.1:6010',
|
||||
changeOrigin: true,
|
||||
pathRewrite: {
|
||||
'^/api': '/api'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
@@ -1,80 +1,39 @@
|
||||
{
|
||||
"name": "EyeblueTank",
|
||||
"version": "3.0.5",
|
||||
"name": "tank-front",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"serve": "vue-cli-service serve",
|
||||
"build": "vue-cli-service build",
|
||||
"lint": "vue-cli-service lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"animate.css": "^3.7.0",
|
||||
"babel-polyfill": "^6.26.0",
|
||||
"bootstrap": "^3.4.1",
|
||||
"clipboard": "^2.0.4",
|
||||
"core-js": "^2.6.5",
|
||||
"echarts": "^4.2.1",
|
||||
"element-ui": "^2.8.2",
|
||||
"enquire.js": "^2.1.6",
|
||||
"font-awesome": "^4.7.0",
|
||||
"icheck": "^1.0.2",
|
||||
"jquery": "^3.4.1",
|
||||
"js-cookie": "^2.2.0",
|
||||
"perfect-scrollbar": "^1.4.0",
|
||||
"swiper": "^4.5.0",
|
||||
"velocity-animate": "^1.5.2",
|
||||
"vue": "^2.6.10",
|
||||
"vue-echarts": "^4.0.2",
|
||||
"vue-i18n": "^8.11.2",
|
||||
"vue-multiselect": "^2.1.6",
|
||||
"vue-nprogress": "^0.1.5",
|
||||
"vue-resource": "^1.5.1",
|
||||
"vue-router": "^3.0.6",
|
||||
"vuex": "^3.1.1",
|
||||
"vuex-router-sync": "^5.0.0",
|
||||
"x-photoswipe": "^4.1.3-rc.1"
|
||||
"@testing-library/jest-dom": "^4.2.4",
|
||||
"@testing-library/react": "^9.3.2",
|
||||
"@testing-library/user-event": "^7.1.2",
|
||||
"@types/jest": "^24.0.0",
|
||||
"@types/node": "^12.0.0",
|
||||
"@types/react": "^16.9.0",
|
||||
"@types/react-dom": "^16.9.0",
|
||||
"react": "^16.13.1",
|
||||
"react-dom": "^16.13.1",
|
||||
"react-scripts": "3.4.1",
|
||||
"typescript": "~3.7.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vue/cli-plugin-babel": "^3.7.0",
|
||||
"@vue/cli-plugin-eslint": "^3.7.0",
|
||||
"@vue/cli-service": "^3.7.0",
|
||||
"@vue/eslint-config-standard": "^4.0.0",
|
||||
"babel-eslint": "^10.0.1",
|
||||
"babel-plugin-component": "^1.1.1",
|
||||
"eslint": "^5.16.0",
|
||||
"eslint-config-standard": "^12.0.0",
|
||||
"eslint-plugin-html": "^5.0.5",
|
||||
"eslint-plugin-import": "^2.17.2",
|
||||
"eslint-plugin-node": "^9.0.1",
|
||||
"eslint-plugin-promise": "^4.1.1",
|
||||
"eslint-plugin-standard": "^4.0.0",
|
||||
"eslint-plugin-vue": "^5.0.0",
|
||||
"less": "^3.9.0",
|
||||
"less-loader": "^5.0.0",
|
||||
"vue-template-compiler": "^2.5.21"
|
||||
"scripts": {
|
||||
"start": "react-scripts start",
|
||||
"build": "react-scripts build",
|
||||
"test": "react-scripts test",
|
||||
"eject": "react-scripts eject"
|
||||
},
|
||||
"eslintConfig": {
|
||||
"root": true,
|
||||
"env": {
|
||||
"node": true
|
||||
},
|
||||
"extends": [
|
||||
"plugin:vue/essential",
|
||||
"eslint:recommended",
|
||||
"@vue/standard"
|
||||
"extends": "react-app"
|
||||
},
|
||||
"browserslist": {
|
||||
"production": [
|
||||
">0.2%",
|
||||
"not dead",
|
||||
"not op_mini all"
|
||||
],
|
||||
"rules": {},
|
||||
"parserOptions": {
|
||||
"parser": "babel-eslint"
|
||||
}
|
||||
},
|
||||
"postcss": {
|
||||
"plugins": {
|
||||
"autoprefixer": {}
|
||||
}
|
||||
},
|
||||
"browserslist": [
|
||||
"> 1%",
|
||||
"last 2 versions"
|
||||
]
|
||||
"development": [
|
||||
"last 1 chrome version",
|
||||
"last 1 firefox version",
|
||||
"last 1 safari version"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 3.1 KiB |
@@ -1,17 +1,43 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
|
||||
<title>EyeblueTank</title>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="theme-color" content="#000000" />
|
||||
<meta
|
||||
name="description"
|
||||
content="Web site created using create-react-app"
|
||||
/>
|
||||
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
|
||||
<!--
|
||||
manifest.json provides metadata used when your web app is installed on a
|
||||
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
|
||||
-->
|
||||
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
|
||||
<!--
|
||||
Notice the use of %PUBLIC_URL% in the tags above.
|
||||
It will be replaced with the URL of the `public` folder during the build.
|
||||
Only files inside the `public` folder can be referenced from the HTML.
|
||||
|
||||
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
|
||||
work correctly both with client-side routing and a non-root public URL.
|
||||
Learn how to configure a non-root public URL by running `npm run build`.
|
||||
-->
|
||||
<title>React App</title>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>
|
||||
<strong>We're sorry but tank-front-tmp doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
|
||||
</noscript>
|
||||
<div id="app"></div>
|
||||
<!-- built files will be auto injected -->
|
||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||
<div id="root"></div>
|
||||
<!--
|
||||
This HTML file is a template.
|
||||
If you open it directly in the browser, you will see an empty page.
|
||||
|
||||
You can add webfonts, meta tags, or analytics to this file.
|
||||
The build step will place the bundled scripts into the <body> tag.
|
||||
|
||||
To begin the development, run `npm start` or `yarn start`.
|
||||
To create a production bundle, use `npm run build` or `yarn build`.
|
||||
-->
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
After Width: | Height: | Size: 5.2 KiB |
|
After Width: | Height: | Size: 9.4 KiB |
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"short_name": "React App",
|
||||
"name": "Create React App Sample",
|
||||
"icons": [
|
||||
{
|
||||
"src": "favicon.ico",
|
||||
"sizes": "64x64 32x32 24x24 16x16",
|
||||
"type": "image/x-icon"
|
||||
},
|
||||
{
|
||||
"src": "logo192.png",
|
||||
"type": "image/png",
|
||||
"sizes": "192x192"
|
||||
},
|
||||
{
|
||||
"src": "logo512.png",
|
||||
"type": "image/png",
|
||||
"sizes": "512x512"
|
||||
}
|
||||
],
|
||||
"start_url": ".",
|
||||
"display": "standalone",
|
||||
"theme_color": "#000000",
|
||||
"background_color": "#ffffff"
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
# https://www.robotstxt.org/robotstxt.html
|
||||
User-agent: *
|
||||
Disallow:
|
||||
@@ -0,0 +1,38 @@
|
||||
.App {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.App-logo {
|
||||
height: 40vmin;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: no-preference) {
|
||||
.App-logo {
|
||||
animation: App-logo-spin infinite 20s linear;
|
||||
}
|
||||
}
|
||||
|
||||
.App-header {
|
||||
background-color: #282c34;
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: calc(10px + 2vmin);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.App-link {
|
||||
color: #61dafb;
|
||||
}
|
||||
|
||||
@keyframes App-logo-spin {
|
||||
from {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
to {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
import React from 'react';
|
||||
import { render } from '@testing-library/react';
|
||||
import App from './App';
|
||||
|
||||
test('renders learn react link', () => {
|
||||
const { getByText } = render(<App />);
|
||||
const linkElement = getByText(/learn react/i);
|
||||
expect(linkElement).toBeInTheDocument();
|
||||
});
|
||||
@@ -0,0 +1,26 @@
|
||||
import React from 'react';
|
||||
import logo from './logo.svg';
|
||||
import './App.css';
|
||||
|
||||
function App() {
|
||||
return (
|
||||
<div className="App">
|
||||
<header className="App-header">
|
||||
<img src={logo} className="App-logo" alt="logo" />
|
||||
<p>
|
||||
Edit <code>src/App.tsx</code> and save to reload.
|
||||
</p>
|
||||
<a
|
||||
className="App-link"
|
||||
href="https://reactjs.org"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Learn React
|
||||
</a>
|
||||
</header>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default App;
|
||||
@@ -1,97 +0,0 @@
|
||||
<template>
|
||||
<div class="nb-app">
|
||||
|
||||
<NprogressContainer/>
|
||||
<router-view/>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import NprogressContainer from 'vue-nprogress/src/NprogressContainer'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
preference: this.$store.state.preference
|
||||
}
|
||||
},
|
||||
computed: {},
|
||||
components: {
|
||||
NprogressContainer
|
||||
},
|
||||
mounted() {
|
||||
|
||||
let that = this
|
||||
this.preference.httpFetch()
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
<style lang="less" rel="stylesheet/less">
|
||||
|
||||
@import "~font-awesome/css/font-awesome.css";
|
||||
@import "./assets/css/app.less";
|
||||
|
||||
.nb-app {
|
||||
|
||||
height: 100%;
|
||||
|
||||
.nprogress-container {
|
||||
position: fixed !important;
|
||||
width: 100%;
|
||||
height: 150px;
|
||||
z-index: 2048;
|
||||
pointer-events: none;
|
||||
|
||||
#nprogress {
|
||||
//@color: #48e79a;
|
||||
@color: #1ab394;
|
||||
|
||||
.bar {
|
||||
background: @color;
|
||||
}
|
||||
|
||||
.peg {
|
||||
box-shadow: 0 0 10px @color, 0 0 5px @color;
|
||||
}
|
||||
|
||||
.spinner-icon {
|
||||
border-top-color: @color;
|
||||
border-left-color: @color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//所有的滚动条样式
|
||||
::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-track-piece {
|
||||
background-color: #eee;
|
||||
margin: -2px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
background: #aaa;
|
||||
min-height: 150px;
|
||||
min-width: 150px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb:vertical:hover {
|
||||
background: #555555
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb:horizontal:hover {
|
||||
background: #555555
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
@@ -1,169 +0,0 @@
|
||||
//global css.
|
||||
//Include font-awesome
|
||||
//Include what we need in bootstrap.
|
||||
@import "bootstrap/bootstrap.less";
|
||||
@import "inspinia/style.less";
|
||||
//Animated
|
||||
@import "~animate.css/animate.min.css";
|
||||
//element-ui
|
||||
@import "~element-ui/lib/theme-chalk/index.css";
|
||||
//使用自定义的主题
|
||||
@import "global/border.less";
|
||||
@import "global/button.less";
|
||||
@import "global/color.less";
|
||||
@import "global/font.less";
|
||||
@import "global/layout.less";
|
||||
@import "global/miscellaneous.less";
|
||||
@import "global/responsive.less";
|
||||
|
||||
//h2被污染了
|
||||
.el-notification__title {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.el-dialog__wrapper {
|
||||
.el-dialog__body {
|
||||
padding: 0 20px 20px 20px;
|
||||
}
|
||||
}
|
||||
|
||||
//手机端的弹出框太大了
|
||||
@media (max-width: 768px) {
|
||||
.el-message-box__wrapper {
|
||||
.el-message-box {
|
||||
width: 90%;
|
||||
}
|
||||
}
|
||||
|
||||
.el-dialog__wrapper {
|
||||
.el-dialog {
|
||||
width: 90%;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
html, body {
|
||||
font-family: "微软雅黑", Microsoft YaHei, "Helvetica Neue", Helvetica, Arial, sans-serif, "open sans";
|
||||
font-size: 13px;
|
||||
color: @text-color;
|
||||
background-color: white;
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//列表单元格的样式。
|
||||
.nb-app {
|
||||
|
||||
//media-body下的p字体大小
|
||||
.media-body {
|
||||
p {
|
||||
font-size: 13px;
|
||||
}
|
||||
}
|
||||
|
||||
.cell-title {
|
||||
font-size: 17px;
|
||||
color: @app-color-title;
|
||||
.one-line;
|
||||
|
||||
a {
|
||||
font-size: 17px;
|
||||
color: @app-color-title;
|
||||
|
||||
&:hover {
|
||||
color: @brand-primary;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.cell-content {
|
||||
font-size: 12px;
|
||||
color: @app-color-title;
|
||||
letter-spacing: 0;
|
||||
line-height: 18px;
|
||||
}
|
||||
|
||||
.cell-description {
|
||||
font-size: 12px;
|
||||
color: @app-color-content;
|
||||
letter-spacing: 0;
|
||||
line-height: 24px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//超链接颜色.
|
||||
a {
|
||||
color: @brand-primary;
|
||||
|
||||
&:hover, &:focus {
|
||||
color: @brand-info;
|
||||
}
|
||||
}
|
||||
|
||||
//段落统一样式
|
||||
p {
|
||||
color: #333;
|
||||
font-size: 15px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
//每个页面导航处样式
|
||||
.pedia-navigation {
|
||||
margin-bottom: 10px;
|
||||
border-bottom: 1px solid #E6E6E6;
|
||||
position: relative;
|
||||
|
||||
.item {
|
||||
font-size: 16px;
|
||||
color: #778195;
|
||||
margin-top: 15px;
|
||||
margin-right: 20px;
|
||||
display: inline-block;
|
||||
box-sizing: content-box;
|
||||
line-height: 30px;
|
||||
|
||||
&:hover, &.is-link-active, &.active {
|
||||
color: @brand-primary;
|
||||
|
||||
border-bottom: 2px solid @brand-primary;
|
||||
}
|
||||
}
|
||||
|
||||
.tool {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
bottom: 5px;
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
//markdown中默认图片剧中
|
||||
p {
|
||||
> img {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
//列表页中展开的标准样式
|
||||
.form-info {
|
||||
margin-bottom: 10px;
|
||||
|
||||
> span:first-child:not(.label) {
|
||||
width: 150px;
|
||||
color: #99a9bf;
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
> span:last-child:not(.label) {
|
||||
font-size: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,54 +0,0 @@
|
||||
/*!
|
||||
* Bootstrap v3.3.7 (http://getbootstrap.com)
|
||||
* Copyright 2011-2016 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
*/
|
||||
// Core variables and mixins
|
||||
@import "../global/variables.less";
|
||||
|
||||
|
||||
|
||||
@import "~bootstrap/less/mixins.less";
|
||||
// Reset and dependencies
|
||||
@import "~bootstrap/less/normalize.less";
|
||||
@import "~bootstrap/less/print.less";
|
||||
//We DO NOT use bootstrap's icon. We use font-awesome
|
||||
//@import "~bootstrap/less/glyphicons.less";
|
||||
// Core CSS
|
||||
@import "~bootstrap/less/scaffolding.less";
|
||||
@import "~bootstrap/less/type.less";
|
||||
@import "~bootstrap/less/code.less";
|
||||
@import "~bootstrap/less/grid.less";
|
||||
@import "~bootstrap/less/tables.less";
|
||||
@import "~bootstrap/less/forms.less";
|
||||
@import "~bootstrap/less/buttons.less";
|
||||
// Components
|
||||
@import "~bootstrap/less/component-animations.less";
|
||||
@import "~bootstrap/less/dropdowns.less";
|
||||
@import "~bootstrap/less/button-groups.less";
|
||||
@import "~bootstrap/less/input-groups.less";
|
||||
@import "~bootstrap/less/navs.less";
|
||||
@import "~bootstrap/less/navbar.less";
|
||||
@import "~bootstrap/less/breadcrumbs.less";
|
||||
@import "~bootstrap/less/pagination.less";
|
||||
@import "~bootstrap/less/pager.less";
|
||||
@import "~bootstrap/less/labels.less";
|
||||
@import "~bootstrap/less/badges.less";
|
||||
@import "~bootstrap/less/jumbotron.less";
|
||||
@import "~bootstrap/less/thumbnails.less";
|
||||
@import "~bootstrap/less/alerts.less";
|
||||
@import "~bootstrap/less/progress-bars.less";
|
||||
@import "~bootstrap/less/media.less";
|
||||
@import "~bootstrap/less/list-group.less";
|
||||
@import "~bootstrap/less/panels.less";
|
||||
@import "~bootstrap/less/responsive-embed.less";
|
||||
@import "~bootstrap/less/wells.less";
|
||||
@import "~bootstrap/less/close.less";
|
||||
// Components w/ JavaScript
|
||||
@import "~bootstrap/less/modals.less";
|
||||
@import "~bootstrap/less/tooltip.less";
|
||||
@import "~bootstrap/less/popovers.less";
|
||||
@import "~bootstrap/less/carousel.less";
|
||||
// Utility classes
|
||||
@import "~bootstrap/less/utilities.less";
|
||||
@import "~bootstrap/less/responsive-utilities.less";
|
||||
@@ -1,872 +0,0 @@
|
||||
//
|
||||
// Variables
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
//== Colors
|
||||
//
|
||||
//## Gray and brand colors for use across Bootstrap.
|
||||
|
||||
@gray-base: #000;
|
||||
@gray-darker: lighten(@gray-base, 13.5%); // #222
|
||||
@gray-dark: lighten(@gray-base, 20%); // #333
|
||||
@gray: lighten(@gray-base, 33.5%); // #555
|
||||
@gray-light: lighten(@gray-base, 46.7%); // #777
|
||||
@gray-lighter: lighten(@gray-base, 93.5%); // #eee
|
||||
|
||||
//zhengxianqian Theme.
|
||||
@brand-primary: #23B7E5;
|
||||
@brand-success: #1ab394;
|
||||
@brand-info: #5EC1C5;
|
||||
@brand-warning: #FEC62E;
|
||||
@brand-danger: #FE8768;
|
||||
@brand-gray: #c2c2c2;
|
||||
@brand-laxative: #B3EE3A;
|
||||
|
||||
|
||||
//== Scaffolding
|
||||
//
|
||||
//## Settings for some of the most global styles.
|
||||
|
||||
//** Background color for `<body>`.
|
||||
@body-bg: #fff;
|
||||
//** Global text color on `<body>`.
|
||||
@text-color: @gray-dark;
|
||||
|
||||
//** Global textual link color.
|
||||
@link-color: @brand-primary;
|
||||
//** Link hover color set via `darken()` function.
|
||||
@link-hover-color: darken(@link-color, 15%);
|
||||
//** Link hover decoration.
|
||||
@link-hover-decoration: underline;
|
||||
|
||||
|
||||
//== Typography
|
||||
//
|
||||
//## Font, line-height, and color for body text, headings, and more.
|
||||
|
||||
@font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
@font-family-serif: Georgia, "Times New Roman", Times, serif;
|
||||
//** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`.
|
||||
@font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace;
|
||||
@font-family-base: @font-family-sans-serif;
|
||||
|
||||
@font-size-base: 14px;
|
||||
@font-size-large: ceil((@font-size-base * 1.25)); // ~18px
|
||||
@font-size-small: ceil((@font-size-base * 0.85)); // ~12px
|
||||
|
||||
@font-size-h1: floor((@font-size-base * 2.6)); // ~36px
|
||||
@font-size-h2: floor((@font-size-base * 2.15)); // ~30px
|
||||
@font-size-h3: ceil((@font-size-base * 1.7)); // ~24px
|
||||
@font-size-h4: ceil((@font-size-base * 1.25)); // ~18px
|
||||
@font-size-h5: @font-size-base;
|
||||
@font-size-h6: ceil((@font-size-base * 0.85)); // ~12px
|
||||
|
||||
//** Unit-less `line-height` for use in components like buttons.
|
||||
@line-height-base: 1.428571429; // 20/14
|
||||
//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
|
||||
@line-height-computed: floor((@font-size-base * @line-height-base)); // ~20px
|
||||
|
||||
//** By default, this inherits from the `<body>`.
|
||||
@headings-font-family: inherit;
|
||||
@headings-font-weight: 500;
|
||||
@headings-line-height: 1.1;
|
||||
@headings-color: inherit;
|
||||
|
||||
|
||||
//== Iconography
|
||||
//
|
||||
//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
|
||||
|
||||
//** Load fonts from this directory.
|
||||
@icon-font-path: "../fonts/";
|
||||
//** File name for all font files.
|
||||
@icon-font-name: "glyphicons-halflings-regular";
|
||||
//** Element ID within SVG icon file.
|
||||
@icon-font-svg-id: "glyphicons_halflingsregular";
|
||||
|
||||
|
||||
//== Components
|
||||
//
|
||||
//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
|
||||
|
||||
@padding-base-vertical: 6px;
|
||||
@padding-base-horizontal: 12px;
|
||||
|
||||
@padding-large-vertical: 10px;
|
||||
@padding-large-horizontal: 16px;
|
||||
|
||||
@padding-small-vertical: 5px;
|
||||
@padding-small-horizontal: 10px;
|
||||
|
||||
@padding-xs-vertical: 1px;
|
||||
@padding-xs-horizontal: 5px;
|
||||
|
||||
@line-height-large: 1.3333333; // extra decimals for Win 8.1 Chrome
|
||||
@line-height-small: 1.5;
|
||||
|
||||
@border-radius-base: 4px;
|
||||
@border-radius-large: 6px;
|
||||
@border-radius-small: 3px;
|
||||
|
||||
//** Global color for active items (e.g., navs or dropdowns).
|
||||
@component-active-color: #fff;
|
||||
//** Global background color for active items (e.g., navs or dropdowns).
|
||||
@component-active-bg: @brand-primary;
|
||||
|
||||
//** Width of the `border` for generating carets that indicate dropdowns.
|
||||
@caret-width-base: 4px;
|
||||
//** Carets increase slightly in size for larger components.
|
||||
@caret-width-large: 5px;
|
||||
|
||||
|
||||
//== Tables
|
||||
//
|
||||
//## Customizes the `.table` component with basic values, each used across all table variations.
|
||||
|
||||
//** Padding for `<th>`s and `<td>`s.
|
||||
@table-cell-padding: 8px;
|
||||
//** Padding for cells in `.table-condensed`.
|
||||
@table-condensed-cell-padding: 5px;
|
||||
|
||||
//** Default background color used for all tables.
|
||||
@table-bg: transparent;
|
||||
//** Background color used for `.table-striped`.
|
||||
@table-bg-accent: #f9f9f9;
|
||||
//** Background color used for `.table-hover`.
|
||||
@table-bg-hover: #f5f5f5;
|
||||
@table-bg-active: @table-bg-hover;
|
||||
|
||||
//** Border color for table and cell borders.
|
||||
@table-border-color: #ddd;
|
||||
|
||||
|
||||
//== Buttons
|
||||
//
|
||||
//## For each of Bootstrap's buttons, define text, background and border color.
|
||||
|
||||
@btn-font-weight: normal;
|
||||
|
||||
@btn-default-color: #333;
|
||||
@btn-default-bg: #fff;
|
||||
@btn-default-border: #ccc;
|
||||
|
||||
@btn-primary-color: #fff;
|
||||
@btn-primary-bg: @brand-primary;
|
||||
@btn-primary-border: darken(@btn-primary-bg, 5%);
|
||||
|
||||
@btn-success-color: #fff;
|
||||
@btn-success-bg: @brand-success;
|
||||
@btn-success-border: darken(@btn-success-bg, 5%);
|
||||
|
||||
@btn-info-color: #fff;
|
||||
@btn-info-bg: @brand-info;
|
||||
@btn-info-border: darken(@btn-info-bg, 5%);
|
||||
|
||||
@btn-warning-color: #fff;
|
||||
@btn-warning-bg: @brand-warning;
|
||||
@btn-warning-border: darken(@btn-warning-bg, 5%);
|
||||
|
||||
@btn-danger-color: #fff;
|
||||
@btn-danger-bg: @brand-danger;
|
||||
@btn-danger-border: darken(@btn-danger-bg, 5%);
|
||||
|
||||
@btn-link-disabled-color: @gray-light;
|
||||
|
||||
// Allows for customizing button radius independently from global border radius
|
||||
@btn-border-radius-base: @border-radius-base;
|
||||
@btn-border-radius-large: @border-radius-large;
|
||||
@btn-border-radius-small: @border-radius-small;
|
||||
|
||||
|
||||
//== Forms
|
||||
//
|
||||
//##
|
||||
|
||||
//** `<input>` background color
|
||||
@input-bg: #fff;
|
||||
//** `<input disabled>` background color
|
||||
@input-bg-disabled: @gray-lighter;
|
||||
|
||||
//** Text color for `<input>`s
|
||||
@input-color: @gray;
|
||||
//** `<input>` border color
|
||||
@input-border: #ccc;
|
||||
|
||||
// TODO: Rename `@input-border-radius` to `@input-border-radius-base` in v4
|
||||
//** Default `.form-control` border radius
|
||||
// This has no effect on `<select>`s in some browsers, due to the limited stylability of `<select>`s in CSS.
|
||||
@input-border-radius: @border-radius-base;
|
||||
//** Large `.form-control` border radius
|
||||
@input-border-radius-large: @border-radius-large;
|
||||
//** Small `.form-control` border radius
|
||||
@input-border-radius-small: @border-radius-small;
|
||||
|
||||
//** Border color for inputs on focus
|
||||
@input-border-focus: #66afe9;
|
||||
|
||||
//** Placeholder text color
|
||||
@input-color-placeholder: #999;
|
||||
|
||||
//** Default `.form-control` height
|
||||
@input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2);
|
||||
//** Large `.form-control` height
|
||||
@input-height-large: (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);
|
||||
//** Small `.form-control` height
|
||||
@input-height-small: (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
|
||||
|
||||
//** `.form-group` margin
|
||||
@form-group-margin-bottom: 15px;
|
||||
|
||||
@legend-color: @gray-dark;
|
||||
@legend-border-color: #e5e5e5;
|
||||
|
||||
//** Background color for textual input addons
|
||||
@input-group-addon-bg: @gray-lighter;
|
||||
//** Border color for textual input addons
|
||||
@input-group-addon-border-color: @input-border;
|
||||
|
||||
//** Disabled cursor for form controls and buttons.
|
||||
@cursor-disabled: not-allowed;
|
||||
|
||||
|
||||
//== Dropdowns
|
||||
//
|
||||
//## Dropdown menu container and contents.
|
||||
|
||||
//** Background for the dropdown menu.
|
||||
@dropdown-bg: #fff;
|
||||
//** Dropdown menu `border-color`.
|
||||
@dropdown-border: rgba(0,0,0,.15);
|
||||
//** Dropdown menu `border-color` **for IE8**.
|
||||
@dropdown-fallback-border: #ccc;
|
||||
//** Divider color for between dropdown items.
|
||||
@dropdown-divider-bg: #e5e5e5;
|
||||
|
||||
//** Dropdown link text color.
|
||||
@dropdown-link-color: @gray-dark;
|
||||
//** Hover color for dropdown links.
|
||||
@dropdown-link-hover-color: darken(@gray-dark, 5%);
|
||||
//** Hover background for dropdown links.
|
||||
@dropdown-link-hover-bg: #f5f5f5;
|
||||
|
||||
//** Active dropdown menu item text color.
|
||||
@dropdown-link-active-color: @component-active-color;
|
||||
//** Active dropdown menu item background color.
|
||||
@dropdown-link-active-bg: @component-active-bg;
|
||||
|
||||
//** Disabled dropdown menu item background color.
|
||||
@dropdown-link-disabled-color: @gray-light;
|
||||
|
||||
//** Text color for headers within dropdown menus.
|
||||
@dropdown-header-color: @gray-light;
|
||||
|
||||
//** Deprecated `@dropdown-caret-color` as of v3.1.0
|
||||
@dropdown-caret-color: #000;
|
||||
|
||||
|
||||
//-- Z-index master list
|
||||
//
|
||||
// Warning: Avoid customizing these values. They're used for a bird's eye view
|
||||
// of components dependent on the z-axis and are designed to all work together.
|
||||
//
|
||||
// Note: These variables are not generated into the Customizer.
|
||||
|
||||
@zindex-navbar: 1000;
|
||||
@zindex-dropdown: 1000;
|
||||
@zindex-popover: 1060;
|
||||
@zindex-tooltip: 1070;
|
||||
@zindex-navbar-fixed: 1030;
|
||||
@zindex-modal-background: 1040;
|
||||
@zindex-modal: 1050;
|
||||
|
||||
|
||||
//== Media queries breakpoints
|
||||
//
|
||||
//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
|
||||
|
||||
// Extra small screen / phone
|
||||
//** Deprecated `@screen-xs` as of v3.0.1
|
||||
@screen-xs: 480px;
|
||||
//** Deprecated `@screen-xs-min` as of v3.2.0
|
||||
@screen-xs-min: @screen-xs;
|
||||
//** Deprecated `@screen-phone` as of v3.0.1
|
||||
@screen-phone: @screen-xs-min;
|
||||
|
||||
// Small screen / tablet
|
||||
//** Deprecated `@screen-sm` as of v3.0.1
|
||||
@screen-sm: 768px;
|
||||
@screen-sm-min: @screen-sm;
|
||||
//** Deprecated `@screen-tablet` as of v3.0.1
|
||||
@screen-tablet: @screen-sm-min;
|
||||
|
||||
// Medium screen / desktop
|
||||
//** Deprecated `@screen-md` as of v3.0.1
|
||||
@screen-md: 992px;
|
||||
@screen-md-min: @screen-md;
|
||||
//** Deprecated `@screen-desktop` as of v3.0.1
|
||||
@screen-desktop: @screen-md-min;
|
||||
|
||||
// Large screen / wide desktop
|
||||
//** Deprecated `@screen-lg` as of v3.0.1
|
||||
@screen-lg: 1200px;
|
||||
@screen-lg-min: @screen-lg;
|
||||
//** Deprecated `@screen-lg-desktop` as of v3.0.1
|
||||
@screen-lg-desktop: @screen-lg-min;
|
||||
|
||||
// So media queries don't overlap when required, provide a maximum
|
||||
@screen-xs-max: (@screen-sm-min - 1);
|
||||
@screen-sm-max: (@screen-md-min - 1);
|
||||
@screen-md-max: (@screen-lg-min - 1);
|
||||
|
||||
|
||||
//== Grid system
|
||||
//
|
||||
//## Define your custom responsive grid.
|
||||
|
||||
//** Number of columns in the grid.
|
||||
@grid-columns: 12;
|
||||
//** Padding between columns. Gets divided in half for the left and right.
|
||||
@grid-gutter-width: 30px;
|
||||
// Navbar collapse
|
||||
//** Point at which the navbar becomes uncollapsed.
|
||||
@grid-float-breakpoint: @screen-sm-min;
|
||||
//** Point at which the navbar begins collapsing.
|
||||
@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);
|
||||
|
||||
|
||||
//== Container sizes
|
||||
//
|
||||
//## Define the maximum width of `.container` for different screen sizes.
|
||||
|
||||
// Small screen / tablet
|
||||
@container-tablet: (720px + @grid-gutter-width);
|
||||
//** For `@screen-sm-min` and up.
|
||||
@container-sm: @container-tablet;
|
||||
|
||||
// Medium screen / desktop
|
||||
@container-desktop: (940px + @grid-gutter-width);
|
||||
//** For `@screen-md-min` and up.
|
||||
@container-md: @container-desktop;
|
||||
|
||||
// Large screen / wide desktop
|
||||
@container-large-desktop: (1140px + @grid-gutter-width);
|
||||
//** For `@screen-lg-min` and up.
|
||||
@container-lg: @container-large-desktop;
|
||||
|
||||
|
||||
//== Navbar
|
||||
//
|
||||
//##
|
||||
|
||||
// Basics of a navbar
|
||||
@navbar-height: 50px;
|
||||
@navbar-margin-bottom: @line-height-computed;
|
||||
@navbar-border-radius: @border-radius-base;
|
||||
@navbar-padding-horizontal: floor((@grid-gutter-width / 2));
|
||||
@navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2);
|
||||
@navbar-collapse-max-height: 340px;
|
||||
|
||||
@navbar-default-color: #777;
|
||||
@navbar-default-bg: #f8f8f8;
|
||||
@navbar-default-border: darken(@navbar-default-bg, 6.5%);
|
||||
|
||||
// Navbar links
|
||||
@navbar-default-link-color: #777;
|
||||
@navbar-default-link-hover-color: #333;
|
||||
@navbar-default-link-hover-bg: transparent;
|
||||
@navbar-default-link-active-color: #555;
|
||||
@navbar-default-link-active-bg: darken(@navbar-default-bg, 6.5%);
|
||||
@navbar-default-link-disabled-color: #ccc;
|
||||
@navbar-default-link-disabled-bg: transparent;
|
||||
|
||||
// Navbar brand label
|
||||
@navbar-default-brand-color: @navbar-default-link-color;
|
||||
@navbar-default-brand-hover-color: darken(@navbar-default-brand-color, 10%);
|
||||
@navbar-default-brand-hover-bg: transparent;
|
||||
|
||||
// Navbar toggle
|
||||
@navbar-default-toggle-hover-bg: #ddd;
|
||||
@navbar-default-toggle-icon-bar-bg: #888;
|
||||
@navbar-default-toggle-border-color: #ddd;
|
||||
|
||||
|
||||
//=== Inverted navbar
|
||||
// Reset inverted navbar basics
|
||||
@navbar-inverse-color: lighten(@gray-light, 15%);
|
||||
@navbar-inverse-bg: #222;
|
||||
@navbar-inverse-border: darken(@navbar-inverse-bg, 10%);
|
||||
|
||||
// Inverted navbar links
|
||||
@navbar-inverse-link-color: lighten(@gray-light, 15%);
|
||||
@navbar-inverse-link-hover-color: #fff;
|
||||
@navbar-inverse-link-hover-bg: transparent;
|
||||
@navbar-inverse-link-active-color: @navbar-inverse-link-hover-color;
|
||||
@navbar-inverse-link-active-bg: darken(@navbar-inverse-bg, 10%);
|
||||
@navbar-inverse-link-disabled-color: #444;
|
||||
@navbar-inverse-link-disabled-bg: transparent;
|
||||
|
||||
// Inverted navbar brand label
|
||||
@navbar-inverse-brand-color: @navbar-inverse-link-color;
|
||||
@navbar-inverse-brand-hover-color: #fff;
|
||||
@navbar-inverse-brand-hover-bg: transparent;
|
||||
|
||||
// Inverted navbar toggle
|
||||
@navbar-inverse-toggle-hover-bg: #333;
|
||||
@navbar-inverse-toggle-icon-bar-bg: #fff;
|
||||
@navbar-inverse-toggle-border-color: #333;
|
||||
|
||||
|
||||
//== Navs
|
||||
//
|
||||
//##
|
||||
|
||||
//=== Shared nav styles
|
||||
@nav-link-padding: 10px 15px;
|
||||
@nav-link-hover-bg: @gray-lighter;
|
||||
|
||||
@nav-disabled-link-color: @gray-light;
|
||||
@nav-disabled-link-hover-color: @gray-light;
|
||||
|
||||
//== Tabs
|
||||
@nav-tabs-border-color: #ddd;
|
||||
|
||||
@nav-tabs-link-hover-border-color: @gray-lighter;
|
||||
|
||||
@nav-tabs-active-link-hover-bg: @body-bg;
|
||||
@nav-tabs-active-link-hover-color: @gray;
|
||||
@nav-tabs-active-link-hover-border-color: #ddd;
|
||||
|
||||
@nav-tabs-justified-link-border-color: #ddd;
|
||||
@nav-tabs-justified-active-link-border-color: @body-bg;
|
||||
|
||||
//== Pills
|
||||
@nav-pills-border-radius: @border-radius-base;
|
||||
@nav-pills-active-link-hover-bg: @component-active-bg;
|
||||
@nav-pills-active-link-hover-color: @component-active-color;
|
||||
|
||||
|
||||
//== Pagination
|
||||
//
|
||||
//##
|
||||
|
||||
@pagination-color: @link-color;
|
||||
@pagination-bg: #fff;
|
||||
@pagination-border: #ddd;
|
||||
|
||||
@pagination-hover-color: @link-hover-color;
|
||||
@pagination-hover-bg: @gray-lighter;
|
||||
@pagination-hover-border: #ddd;
|
||||
|
||||
@pagination-active-color: #fff;
|
||||
@pagination-active-bg: @brand-primary;
|
||||
@pagination-active-border: @brand-primary;
|
||||
|
||||
@pagination-disabled-color: @gray-light;
|
||||
@pagination-disabled-bg: #fff;
|
||||
@pagination-disabled-border: #ddd;
|
||||
|
||||
|
||||
//== Pager
|
||||
//
|
||||
//##
|
||||
|
||||
@pager-bg: @pagination-bg;
|
||||
@pager-border: @pagination-border;
|
||||
@pager-border-radius: 15px;
|
||||
|
||||
@pager-hover-bg: @pagination-hover-bg;
|
||||
|
||||
@pager-active-bg: @pagination-active-bg;
|
||||
@pager-active-color: @pagination-active-color;
|
||||
|
||||
@pager-disabled-color: @pagination-disabled-color;
|
||||
|
||||
|
||||
//== Jumbotron
|
||||
//
|
||||
//##
|
||||
|
||||
@jumbotron-padding: 30px;
|
||||
@jumbotron-color: inherit;
|
||||
@jumbotron-bg: @gray-lighter;
|
||||
@jumbotron-heading-color: inherit;
|
||||
@jumbotron-font-size: ceil((@font-size-base * 1.5));
|
||||
@jumbotron-heading-font-size: ceil((@font-size-base * 4.5));
|
||||
|
||||
|
||||
//== Form states and alerts
|
||||
//
|
||||
//## Define colors for form feedback states and, by default, alerts.
|
||||
|
||||
@state-success-text: #3c763d;
|
||||
@state-success-bg: #dff0d8;
|
||||
@state-success-border: darken(spin(@state-success-bg, -10), 5%);
|
||||
|
||||
@state-info-text: #31708f;
|
||||
@state-info-bg: #d9edf7;
|
||||
@state-info-border: darken(spin(@state-info-bg, -10), 7%);
|
||||
|
||||
@state-warning-text: #8a6d3b;
|
||||
@state-warning-bg: #fcf8e3;
|
||||
@state-warning-border: darken(spin(@state-warning-bg, -10), 5%);
|
||||
|
||||
@state-danger-text: #a94442;
|
||||
@state-danger-bg: #f2dede;
|
||||
@state-danger-border: darken(spin(@state-danger-bg, -10), 5%);
|
||||
|
||||
|
||||
//== Tooltips
|
||||
//
|
||||
//##
|
||||
|
||||
//** Tooltip max width
|
||||
@tooltip-max-width: 200px;
|
||||
//** Tooltip text color
|
||||
@tooltip-color: #fff;
|
||||
//** Tooltip background color
|
||||
@tooltip-bg: #000;
|
||||
@tooltip-opacity: .9;
|
||||
|
||||
//** Tooltip arrow width
|
||||
@tooltip-arrow-width: 5px;
|
||||
//** Tooltip arrow color
|
||||
@tooltip-arrow-color: @tooltip-bg;
|
||||
|
||||
|
||||
//== Popovers
|
||||
//
|
||||
//##
|
||||
|
||||
//** Popover body background color
|
||||
@popover-bg: #fff;
|
||||
//** Popover maximum width
|
||||
@popover-max-width: 276px;
|
||||
//** Popover border color
|
||||
@popover-border-color: rgba(0,0,0,.2);
|
||||
//** Popover fallback border color
|
||||
@popover-fallback-border-color: #ccc;
|
||||
|
||||
//** Popover title background color
|
||||
@popover-title-bg: darken(@popover-bg, 3%);
|
||||
|
||||
//** Popover arrow width
|
||||
@popover-arrow-width: 10px;
|
||||
//** Popover arrow color
|
||||
@popover-arrow-color: @popover-bg;
|
||||
|
||||
//** Popover outer arrow width
|
||||
@popover-arrow-outer-width: (@popover-arrow-width + 1);
|
||||
//** Popover outer arrow color
|
||||
@popover-arrow-outer-color: fadein(@popover-border-color, 5%);
|
||||
//** Popover outer arrow fallback color
|
||||
@popover-arrow-outer-fallback-color: darken(@popover-fallback-border-color, 20%);
|
||||
|
||||
|
||||
//== Labels
|
||||
//
|
||||
//##
|
||||
|
||||
//** Default label background color
|
||||
@label-default-bg: @gray-light;
|
||||
//** Primary label background color
|
||||
@label-primary-bg: @brand-primary;
|
||||
//** Success label background color
|
||||
@label-success-bg: @brand-success;
|
||||
//** Info label background color
|
||||
@label-info-bg: @brand-info;
|
||||
//** Warning label background color
|
||||
@label-warning-bg: @brand-warning;
|
||||
//** Danger label background color
|
||||
@label-danger-bg: @brand-danger;
|
||||
|
||||
//** Default label text color
|
||||
@label-color: #fff;
|
||||
//** Default text color of a linked label
|
||||
@label-link-hover-color: #fff;
|
||||
|
||||
|
||||
//== Modals
|
||||
//
|
||||
//##
|
||||
|
||||
//** Padding applied to the modal body
|
||||
@modal-inner-padding: 15px;
|
||||
|
||||
//** Padding applied to the modal title
|
||||
@modal-title-padding: 15px;
|
||||
//** Modal title line-height
|
||||
@modal-title-line-height: @line-height-base;
|
||||
|
||||
//** Background color of modal content area
|
||||
@modal-content-bg: #fff;
|
||||
//** Modal content border color
|
||||
@modal-content-border-color: rgba(0,0,0,.2);
|
||||
//** Modal content border color **for IE8**
|
||||
@modal-content-fallback-border-color: #999;
|
||||
|
||||
//** Modal backdrop background color
|
||||
@modal-backdrop-bg: #000;
|
||||
//** Modal backdrop opacity
|
||||
@modal-backdrop-opacity: .5;
|
||||
//** Modal header border color
|
||||
@modal-header-border-color: #e5e5e5;
|
||||
//** Modal footer border color
|
||||
@modal-footer-border-color: @modal-header-border-color;
|
||||
|
||||
@modal-lg: 900px;
|
||||
@modal-md: 600px;
|
||||
@modal-sm: 300px;
|
||||
|
||||
|
||||
//== Alerts
|
||||
//
|
||||
//## Define alert colors, border radius, and padding.
|
||||
|
||||
@alert-padding: 15px;
|
||||
@alert-border-radius: @border-radius-base;
|
||||
@alert-link-font-weight: bold;
|
||||
|
||||
@alert-success-bg: @state-success-bg;
|
||||
@alert-success-text: @state-success-text;
|
||||
@alert-success-border: @state-success-border;
|
||||
|
||||
@alert-info-bg: @state-info-bg;
|
||||
@alert-info-text: @state-info-text;
|
||||
@alert-info-border: @state-info-border;
|
||||
|
||||
@alert-warning-bg: @state-warning-bg;
|
||||
@alert-warning-text: @state-warning-text;
|
||||
@alert-warning-border: @state-warning-border;
|
||||
|
||||
@alert-danger-bg: @state-danger-bg;
|
||||
@alert-danger-text: @state-danger-text;
|
||||
@alert-danger-border: @state-danger-border;
|
||||
|
||||
|
||||
//== Progress bars
|
||||
//
|
||||
//##
|
||||
|
||||
//** Background color of the whole progress component
|
||||
@progress-bg: #f5f5f5;
|
||||
//** Progress bar text color
|
||||
@progress-bar-color: #fff;
|
||||
//** Variable for setting rounded corners on progress bar.
|
||||
@progress-border-radius: @border-radius-base;
|
||||
|
||||
//** Default progress bar color
|
||||
@progress-bar-bg: @brand-primary;
|
||||
//** Success progress bar color
|
||||
@progress-bar-success-bg: @brand-success;
|
||||
//** Warning progress bar color
|
||||
@progress-bar-warning-bg: @brand-warning;
|
||||
//** Danger progress bar color
|
||||
@progress-bar-danger-bg: @brand-danger;
|
||||
//** Info progress bar color
|
||||
@progress-bar-info-bg: @brand-info;
|
||||
|
||||
|
||||
//== List group
|
||||
//
|
||||
//##
|
||||
|
||||
//** Background color on `.list-group-item`
|
||||
@list-group-bg: #fff;
|
||||
//** `.list-group-item` border color
|
||||
@list-group-border: #ddd;
|
||||
//** List group border radius
|
||||
@list-group-border-radius: @border-radius-base;
|
||||
|
||||
//** Background color of single list items on hover
|
||||
@list-group-hover-bg: #f5f5f5;
|
||||
//** Text color of active list items
|
||||
@list-group-active-color: @component-active-color;
|
||||
//** Background color of active list items
|
||||
@list-group-active-bg: @component-active-bg;
|
||||
//** Border color of active list elements
|
||||
@list-group-active-border: @list-group-active-bg;
|
||||
//** Text color for content within active list items
|
||||
@list-group-active-text-color: lighten(@list-group-active-bg, 40%);
|
||||
|
||||
//** Text color of disabled list items
|
||||
@list-group-disabled-color: @gray-light;
|
||||
//** Background color of disabled list items
|
||||
@list-group-disabled-bg: @gray-lighter;
|
||||
//** Text color for content within disabled list items
|
||||
@list-group-disabled-text-color: @list-group-disabled-color;
|
||||
|
||||
@list-group-link-color: #555;
|
||||
@list-group-link-hover-color: @list-group-link-color;
|
||||
@list-group-link-heading-color: #333;
|
||||
|
||||
|
||||
//== Panels
|
||||
//
|
||||
//##
|
||||
|
||||
@panel-bg: #fff;
|
||||
@panel-body-padding: 15px;
|
||||
@panel-heading-padding: 10px 15px;
|
||||
@panel-footer-padding: @panel-heading-padding;
|
||||
@panel-border-radius: @border-radius-base;
|
||||
|
||||
//** Border color for elements within panels
|
||||
@panel-inner-border: #ddd;
|
||||
@panel-footer-bg: #f5f5f5;
|
||||
|
||||
@panel-default-text: @gray-dark;
|
||||
@panel-default-border: #ddd;
|
||||
@panel-default-heading-bg: #f5f5f5;
|
||||
|
||||
@panel-primary-text: #fff;
|
||||
@panel-primary-border: @brand-primary;
|
||||
@panel-primary-heading-bg: @brand-primary;
|
||||
|
||||
@panel-success-text: @state-success-text;
|
||||
@panel-success-border: @state-success-border;
|
||||
@panel-success-heading-bg: @state-success-bg;
|
||||
|
||||
@panel-info-text: @state-info-text;
|
||||
@panel-info-border: @state-info-border;
|
||||
@panel-info-heading-bg: @state-info-bg;
|
||||
|
||||
@panel-warning-text: @state-warning-text;
|
||||
@panel-warning-border: @state-warning-border;
|
||||
@panel-warning-heading-bg: @state-warning-bg;
|
||||
|
||||
@panel-danger-text: @state-danger-text;
|
||||
@panel-danger-border: @state-danger-border;
|
||||
@panel-danger-heading-bg: @state-danger-bg;
|
||||
|
||||
|
||||
//== Thumbnails
|
||||
//
|
||||
//##
|
||||
|
||||
//** Padding around the thumbnail image
|
||||
@thumbnail-padding: 4px;
|
||||
//** Thumbnail background color
|
||||
@thumbnail-bg: @body-bg;
|
||||
//** Thumbnail border color
|
||||
@thumbnail-border: #ddd;
|
||||
//** Thumbnail border radius
|
||||
@thumbnail-border-radius: @border-radius-base;
|
||||
|
||||
//** Custom text color for thumbnail captions
|
||||
@thumbnail-caption-color: @text-color;
|
||||
//** Padding around the thumbnail caption
|
||||
@thumbnail-caption-padding: 9px;
|
||||
|
||||
|
||||
//== Wells
|
||||
//
|
||||
//##
|
||||
|
||||
@well-bg: #f5f5f5;
|
||||
@well-border: darken(@well-bg, 7%);
|
||||
|
||||
|
||||
//== Badges
|
||||
//
|
||||
//##
|
||||
|
||||
@badge-color: #fff;
|
||||
//** Linked badge text color on hover
|
||||
@badge-link-hover-color: #fff;
|
||||
@badge-bg: @gray-light;
|
||||
|
||||
//** Badge text color in active nav link
|
||||
@badge-active-color: @link-color;
|
||||
//** Badge background color in active nav link
|
||||
@badge-active-bg: #fff;
|
||||
|
||||
@badge-font-weight: bold;
|
||||
@badge-line-height: 1;
|
||||
@badge-border-radius: 10px;
|
||||
|
||||
|
||||
//== Breadcrumbs
|
||||
//
|
||||
//##
|
||||
|
||||
@breadcrumb-padding-vertical: 8px;
|
||||
@breadcrumb-padding-horizontal: 15px;
|
||||
//** Breadcrumb background color
|
||||
@breadcrumb-bg: #f5f5f5;
|
||||
//** Breadcrumb text color
|
||||
@breadcrumb-color: #ccc;
|
||||
//** Text color of current page in the breadcrumb
|
||||
@breadcrumb-active-color: @gray-light;
|
||||
//** Textual separator for between breadcrumb elements
|
||||
@breadcrumb-separator: "/";
|
||||
|
||||
|
||||
//== Carousel
|
||||
//
|
||||
//##
|
||||
|
||||
@carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6);
|
||||
|
||||
@carousel-control-color: #fff;
|
||||
@carousel-control-width: 15%;
|
||||
@carousel-control-opacity: .5;
|
||||
@carousel-control-font-size: 20px;
|
||||
|
||||
@carousel-indicator-active-bg: #fff;
|
||||
@carousel-indicator-border-color: #fff;
|
||||
|
||||
@carousel-caption-color: #fff;
|
||||
|
||||
|
||||
//== Close
|
||||
//
|
||||
//##
|
||||
|
||||
@close-font-weight: bold;
|
||||
@close-color: #000;
|
||||
@close-text-shadow: 0 1px 0 #fff;
|
||||
|
||||
|
||||
//== Code
|
||||
//
|
||||
//##
|
||||
|
||||
@code-color: #c7254e;
|
||||
@code-bg: #f9f2f4;
|
||||
|
||||
@kbd-color: #fff;
|
||||
@kbd-bg: #333;
|
||||
|
||||
@pre-bg: #f5f5f5;
|
||||
@pre-color: @gray-dark;
|
||||
@pre-border-color: #ccc;
|
||||
@pre-scrollable-max-height: 340px;
|
||||
|
||||
|
||||
//== Type
|
||||
//
|
||||
//##
|
||||
|
||||
//** Horizontal offset for forms and lists.
|
||||
@component-offset-horizontal: 180px;
|
||||
//** Text muted color
|
||||
@text-muted: @gray-light;
|
||||
//** Abbreviations and acronyms border color
|
||||
@abbr-border-color: @gray-light;
|
||||
//** Headings small color
|
||||
@headings-small-color: @gray-light;
|
||||
//** Blockquote small color
|
||||
@blockquote-small-color: @gray-light;
|
||||
//** Blockquote font size
|
||||
@blockquote-font-size: (@font-size-base * 1.25);
|
||||
//** Blockquote border color
|
||||
@blockquote-border-color: @gray-lighter;
|
||||
//** Page header border color
|
||||
@page-header-border-color: @gray-lighter;
|
||||
//** Width of horizontal description list titles
|
||||
@dl-horizontal-offset: @component-offset-horizontal;
|
||||
//** Point at which .dl-horizontal becomes horizontal
|
||||
@dl-horizontal-breakpoint: @grid-float-breakpoint;
|
||||
//** Horizontal line color.
|
||||
@hr-border: @gray-lighter;
|
||||
@@ -1,41 +0,0 @@
|
||||
@import "variables";
|
||||
|
||||
#radius {
|
||||
.border-radius(@from,@end,@step) {
|
||||
.mX(@f,@e,@s) when (@e >= @f) {
|
||||
.border-radius-@{e} {
|
||||
-webkit-border-radius: @e*1px;
|
||||
-moz-border-radius: @e*1px;
|
||||
border-radius: @e*1px;
|
||||
}
|
||||
.br@{e} {
|
||||
-webkit-border-radius: @e*1px;
|
||||
-moz-border-radius: @e*1px;
|
||||
border-radius: @e*1px;
|
||||
}
|
||||
|
||||
.mX(@f, @e - @s, @s);
|
||||
}
|
||||
.mX(@from, @end, @step);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#radius > .border-radius(1, 10, 1);
|
||||
|
||||
.border-dash {
|
||||
border: 1px dashed #ccc;
|
||||
}
|
||||
|
||||
.border {
|
||||
border: 1px solid #eee;
|
||||
}
|
||||
|
||||
.border-danger {
|
||||
border: 1px solid @brand-danger;
|
||||
}
|
||||
|
||||
.border-bottom {
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
|
||||
.btn-action {
|
||||
margin: 0 3px;
|
||||
display: inline-block;
|
||||
opacity: 0.85;
|
||||
-webkit-transition: all 0.1s;
|
||||
-o-transition: all 0.1s;
|
||||
transition: all 0.1s;
|
||||
cursor: pointer;
|
||||
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
opacity: 1;
|
||||
-moz-transform: scale(1.2);
|
||||
-webkit-transform: scale(1.2);
|
||||
-o-transform: scale(1.2);
|
||||
-ms-transform: scale(1.2);
|
||||
transform: scale(1.2);
|
||||
}
|
||||
}
|
||||
|
||||
//编辑区域按钮,鼠标一上去按钮变大
|
||||
.action-buttons {
|
||||
a {
|
||||
.btn-action;
|
||||
}
|
||||
}
|
||||
|
||||
.cursor {
|
||||
cursor: pointer;
|
||||
}
|
||||
@@ -1,358 +0,0 @@
|
||||
@import "./variables.less";
|
||||
|
||||
.bg-primary {
|
||||
background-color: @brand-primary;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.bg-success {
|
||||
background-color: @brand-success;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.bg-info {
|
||||
background-color: @brand-info;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.bg-warning {
|
||||
background-color: @brand-warning;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.bg-danger {
|
||||
background-color: @brand-danger;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.bg-gray {
|
||||
background-color: @brand-gray;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.bg-laxative {
|
||||
background-color: @brand-laxative;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.text-primary {
|
||||
color: @brand-primary;
|
||||
}
|
||||
|
||||
.bg-navy {
|
||||
background-color: #001F3F;
|
||||
}
|
||||
|
||||
.bg-blue {
|
||||
background-color: #0074D9;
|
||||
}
|
||||
|
||||
.bg-aqua {
|
||||
background-color: #7FDBFF;
|
||||
}
|
||||
|
||||
.bg-aliceblue {
|
||||
background-color: aliceblue;
|
||||
}
|
||||
|
||||
.bg-pink {
|
||||
background-color: pink;
|
||||
}
|
||||
|
||||
.bg-azure {
|
||||
background-color: azure;
|
||||
}
|
||||
|
||||
.bg-teal {
|
||||
background-color: #39CCCC;
|
||||
}
|
||||
|
||||
.bg-olive {
|
||||
background-color: #3D9970;
|
||||
}
|
||||
|
||||
.bg-green {
|
||||
background-color: #2ECC40;
|
||||
}
|
||||
|
||||
.bg-lime {
|
||||
background-color: #01FF70;
|
||||
}
|
||||
|
||||
.bg-yellow {
|
||||
background-color: #FFDC00;
|
||||
}
|
||||
|
||||
.bg-pink {
|
||||
color: pink;
|
||||
}
|
||||
|
||||
.bg-orange {
|
||||
background-color: #FF851B;
|
||||
}
|
||||
|
||||
.bg-red {
|
||||
background-color: #FF4136;
|
||||
}
|
||||
|
||||
.bg-fuchsia {
|
||||
background-color: #F012BE;
|
||||
}
|
||||
|
||||
.bg-purple {
|
||||
background-color: #B10DC9;
|
||||
}
|
||||
|
||||
.bg-maroon {
|
||||
background-color: #85144B;
|
||||
}
|
||||
|
||||
.bg-white {
|
||||
background-color: #FFFFFF;
|
||||
}
|
||||
|
||||
.bg-gray {
|
||||
background-color: #AAAAAA;
|
||||
}
|
||||
|
||||
.bg-silver {
|
||||
background-color: #DDDDDD;
|
||||
}
|
||||
|
||||
.bg-silver-white {
|
||||
background-color: #EEEEEE;
|
||||
}
|
||||
|
||||
.bg-black {
|
||||
background-color: #111111;
|
||||
}
|
||||
|
||||
.bg-111 {
|
||||
background-color: #111
|
||||
}
|
||||
|
||||
.bg-222 {
|
||||
background-color: #222
|
||||
}
|
||||
|
||||
.bg-333 {
|
||||
background-color: #333
|
||||
}
|
||||
|
||||
.bg-444 {
|
||||
background-color: #444
|
||||
}
|
||||
|
||||
.bg-555 {
|
||||
background-color: #555
|
||||
}
|
||||
|
||||
.bg-666 {
|
||||
background-color: #666
|
||||
}
|
||||
|
||||
.bg-777 {
|
||||
background-color: #777
|
||||
}
|
||||
|
||||
.bg-888 {
|
||||
background-color: #888
|
||||
}
|
||||
|
||||
.bg-999 {
|
||||
background-color: #999
|
||||
}
|
||||
|
||||
.bg-aaa {
|
||||
background-color: #aaa
|
||||
}
|
||||
|
||||
.bg-bbb {
|
||||
background-color: #bbb
|
||||
}
|
||||
|
||||
.bg-ccc {
|
||||
background-color: #ccc
|
||||
}
|
||||
|
||||
.bg-ddd {
|
||||
background-color: #ddd
|
||||
}
|
||||
|
||||
.bg-eee {
|
||||
background-color: #eee
|
||||
}
|
||||
|
||||
/* Colors */
|
||||
.navy {
|
||||
color: #001F3F;
|
||||
}
|
||||
|
||||
.blue {
|
||||
color: #0074D9;
|
||||
}
|
||||
|
||||
.aqua {
|
||||
color: #7FDBFF;
|
||||
}
|
||||
|
||||
.teal {
|
||||
color: #39CCCC;
|
||||
}
|
||||
|
||||
.olive {
|
||||
color: #3D9970;
|
||||
}
|
||||
|
||||
.green {
|
||||
color: #2ECC40;
|
||||
}
|
||||
|
||||
.lime {
|
||||
color: #01FF70;
|
||||
}
|
||||
|
||||
.yellow {
|
||||
color: #FFDC00;
|
||||
}
|
||||
|
||||
.pink {
|
||||
color: pink;
|
||||
}
|
||||
|
||||
.orange {
|
||||
color: #FF851B;
|
||||
}
|
||||
|
||||
.red {
|
||||
color: #FF4136;
|
||||
}
|
||||
|
||||
.fuchsia {
|
||||
color: #F012BE;
|
||||
}
|
||||
|
||||
.purple {
|
||||
color: #B10DC9;
|
||||
}
|
||||
|
||||
.maroon {
|
||||
color: #85144B;
|
||||
}
|
||||
|
||||
.white {
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.silver {
|
||||
color: #DDDDDD;
|
||||
}
|
||||
|
||||
.gray {
|
||||
color: #AAAAAA;
|
||||
}
|
||||
|
||||
.black {
|
||||
color: #111111;
|
||||
}
|
||||
|
||||
.color-111 {
|
||||
color: #111
|
||||
}
|
||||
|
||||
.color-222 {
|
||||
color: #222
|
||||
}
|
||||
|
||||
.color-333 {
|
||||
color: #333
|
||||
}
|
||||
|
||||
.color-444 {
|
||||
color: #444
|
||||
}
|
||||
|
||||
.color-555 {
|
||||
color: #555
|
||||
}
|
||||
|
||||
.color-666 {
|
||||
color: #666
|
||||
}
|
||||
|
||||
.color-777 {
|
||||
color: #777
|
||||
}
|
||||
|
||||
.color-888 {
|
||||
color: #888
|
||||
}
|
||||
|
||||
.color-999 {
|
||||
color: #999
|
||||
}
|
||||
|
||||
.color-aaa {
|
||||
color: #aaa
|
||||
}
|
||||
|
||||
.color-bbb {
|
||||
color: #bbb
|
||||
}
|
||||
|
||||
.color-ccc {
|
||||
color: #ccc
|
||||
}
|
||||
|
||||
.color-ddd {
|
||||
color: #ddd
|
||||
}
|
||||
|
||||
.color-eee {
|
||||
color: #eee
|
||||
}
|
||||
|
||||
.color-text {
|
||||
color: #660E7A;
|
||||
}
|
||||
|
||||
.color-doc {
|
||||
color: #295496;
|
||||
}
|
||||
|
||||
.color-xls {
|
||||
color: #1E6C41;
|
||||
}
|
||||
|
||||
.color-ppt {
|
||||
color: #D04324;
|
||||
}
|
||||
|
||||
.color-pdf {
|
||||
color: #E40B0B;
|
||||
}
|
||||
|
||||
.color-audio {
|
||||
color: #5bc0de;
|
||||
}
|
||||
|
||||
.color-video {
|
||||
color: #5cb85c;
|
||||
}
|
||||
|
||||
.color-image {
|
||||
color: #0074D9;
|
||||
}
|
||||
|
||||
.color-archive {
|
||||
color: #4437f2;
|
||||
}
|
||||
|
||||
.color-light-active {
|
||||
color: #ffc60c;
|
||||
}
|
||||
|
||||
.color-light-inactive {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
#font{
|
||||
.f(@from,@end,@step){
|
||||
.mX(@f,@e,@s) when (@e >= @f){
|
||||
.f@{e}{
|
||||
font-size:@e*1px!important;
|
||||
}
|
||||
.mX(@f,@e - @s,@s);
|
||||
}
|
||||
.mX(@from,@end,@step);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#font > .f(10,80,1);
|
||||
|
||||
#font{
|
||||
.ln(@from,@end,@step){
|
||||
.mX(@f,@e,@s) when (@e >= @f){
|
||||
.ln@{e}{
|
||||
line-height:@e*1px!important;
|
||||
}
|
||||
.mX(@f,@e - @s,@s);
|
||||
}
|
||||
.mX(@from,@end,@step);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#font > .ln(10,100,1);
|
||||
|
||||
|
||||
|
||||
.bold{
|
||||
font-weight:bold;
|
||||
}
|
||||
.italic{
|
||||
font-style:italic;
|
||||
}
|
||||
@@ -1,132 +0,0 @@
|
||||
#layout{
|
||||
.margin(@from,@end,@step){
|
||||
.mX(@f,@e,@s) when (@e >= @f){
|
||||
.m@{e}{
|
||||
margin:@e*1px;
|
||||
}
|
||||
.mt@{e}{
|
||||
margin-top:@e*1px;
|
||||
}
|
||||
.mr@{e}{
|
||||
margin-right:@e*1px;
|
||||
}
|
||||
.mb@{e}{
|
||||
margin-bottom: @e*1px;
|
||||
}
|
||||
.ml@{e}{
|
||||
margin-left: @e*1px;
|
||||
}
|
||||
.mv@{e}{
|
||||
margin-top: @e*1px;
|
||||
margin-bottom: @e*1px;
|
||||
}
|
||||
.mh@{e}{
|
||||
margin-left: @e*1px;
|
||||
margin-right: @e*1px*1px;
|
||||
}
|
||||
.mX(@f,@e - @s,@s);
|
||||
}
|
||||
.mX(@from,@end,@step);
|
||||
}
|
||||
.padding(@from,@end,@step){
|
||||
.pX(@f,@e,@s) when (@e >= @f){
|
||||
.p@{e}{
|
||||
padding:@e*1px;
|
||||
}
|
||||
.pt@{e}{
|
||||
padding-top:@e*1px;
|
||||
}
|
||||
.pr@{e}{
|
||||
padding-right:@e*1px;
|
||||
}
|
||||
.pb@{e}{
|
||||
padding-bottom: @e*1px;
|
||||
}
|
||||
.pl@{e}{
|
||||
padding-left: @e*1px;
|
||||
}
|
||||
.pv@{e}{
|
||||
padding-top: @e*1px;
|
||||
padding-bottom: @e*1px;
|
||||
}
|
||||
.ph@{e}{
|
||||
padding-left: @e*1px;
|
||||
padding-right: @e*1px;
|
||||
}
|
||||
.pX(@f,@e - @s,@s);
|
||||
}
|
||||
.pX(@from,@end,@step);
|
||||
}
|
||||
.width(@from,@end,@step){
|
||||
.wX(@f,@e,@s) when (@e >= @f){
|
||||
.w@{e}{
|
||||
width:@e*1px;
|
||||
}
|
||||
.w@{e}m{
|
||||
max-width:@e*1px;
|
||||
}
|
||||
.w@{e}n{
|
||||
min-width:@e*1px;
|
||||
}
|
||||
.w@{e}i{
|
||||
width:@e*1px!important;
|
||||
}
|
||||
.wX(@f,@e - @s,@s);
|
||||
}
|
||||
.wX(@from,@end,@step);
|
||||
}
|
||||
.height(@from,@end,@step){
|
||||
.hX(@f,@e,@s) when (@e >= @f){
|
||||
.h@{e}{
|
||||
height:@e*1px;
|
||||
}
|
||||
.lh@{e}{
|
||||
line-height:@e*1px;
|
||||
}
|
||||
.h@{e}m{
|
||||
max-height:@e*1px;
|
||||
}
|
||||
.h@{e}n{
|
||||
min-height:@e*1px;
|
||||
}
|
||||
.h@{e}i{
|
||||
height:@e*1px!important;
|
||||
}
|
||||
.hX(@f,@e - @s,@s);
|
||||
}
|
||||
.hX(@from,@end,@step);
|
||||
}
|
||||
}
|
||||
|
||||
.wp20{
|
||||
width:20%;
|
||||
}
|
||||
.wp25{
|
||||
width:25%;
|
||||
}
|
||||
.wp33{
|
||||
width:33%;
|
||||
}
|
||||
.wp100{
|
||||
width:100%;
|
||||
}
|
||||
.wp50{
|
||||
width:50%;
|
||||
}
|
||||
.hp100{
|
||||
height:100%;
|
||||
}
|
||||
.hp50{
|
||||
height: 50%;
|
||||
}
|
||||
|
||||
#layout > .margin(20,200,5);
|
||||
#layout > .margin(0,19,1);
|
||||
#layout > .padding(20,200,5);
|
||||
#layout > .padding(0,19,1);
|
||||
#layout > .width(20,400,10);
|
||||
#layout > .width(0,19,1);
|
||||
#layout > .height(20,400,10);
|
||||
#layout > .height(0,19,1);
|
||||
|
||||
|
||||
@@ -1,75 +0,0 @@
|
||||
.compulsory {
|
||||
&:before {
|
||||
content: "*";
|
||||
color: red;
|
||||
}
|
||||
}
|
||||
|
||||
.limit-hints {
|
||||
font-size: 10px;
|
||||
color: #aaaaaa;
|
||||
float: right;
|
||||
}
|
||||
|
||||
.hover-underline {
|
||||
|
||||
cursor: pointer;
|
||||
|
||||
&:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.btn-file {
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
vertical-align: middle;
|
||||
cursor: pointer;
|
||||
|
||||
> input {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
margin: 0;
|
||||
opacity: 0;
|
||||
filter: alpha(opacity=0);
|
||||
font-size: 23px;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
direction: ltr;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
.list-text-restriction {
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
line-height: 17px;
|
||||
max-height: 51px;
|
||||
-webkit-line-clamp: 3;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.one-line {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.inline-block {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.overflow-hidden {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.tank-box {
|
||||
background-color: white;
|
||||
box-shadow: 0 0 5px rgba(0, 0, 0, .2);
|
||||
border-radius: 5px;
|
||||
padding: 20px 15px 10px 15px;
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
@media (min-width: 992px) {
|
||||
.visible-mobile {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.visible-pc {
|
||||
display: block !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 992px) {
|
||||
.visible-mobile {
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
.visible-pc {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
//浏览器滚动条样式
|
||||
.thin-scrollbar {
|
||||
::-webkit-scrollbar {
|
||||
width: 3px;
|
||||
height: 3px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
background: rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,99 +0,0 @@
|
||||
@import "../bootstrap/variables.less";
|
||||
//Bootstrap Theme.
|
||||
//@brand-primary: darken(#428bca, 6.5%); // #337ab7
|
||||
//@brand-success: #5cb85c;
|
||||
//@brand-info: #5bc0de;
|
||||
//@brand-warning: #f0ad4e;
|
||||
//@brand-danger: #d9534f;
|
||||
//@brand-gray: #c2c2c2;
|
||||
|
||||
//Angulr Theme.
|
||||
//@brand-primary: #7266ba;
|
||||
//@brand-info: #23b7e5;
|
||||
//@brand-success: #27c24c;
|
||||
//@brand-warning: #fad733;
|
||||
//@brand-danger: #f05050;
|
||||
//@brand-light: #edf1f2;
|
||||
//@brand-dark: #3a3f51;
|
||||
//@brand-black: #1c2b36;
|
||||
//@brand-gray: #c2c2c2;
|
||||
//@brand-laxative: #B3EE3A;
|
||||
|
||||
//Inspina Theme.
|
||||
//@brand-primary: #1ab394;
|
||||
//@brand-success: #1c84c6;
|
||||
//@brand-info: #23c6c8;
|
||||
//@brand-warning: #f8ac59;
|
||||
//@brand-danger: #ED5565;
|
||||
//@brand-gray: #c2c2c2;
|
||||
//@brand-laxative: #B3EE3A;
|
||||
|
||||
|
||||
//zhengxianqian Theme.
|
||||
//@brand-primary: #23B7E5;
|
||||
@brand-primary: #006699;
|
||||
@brand-success: #1ab394;
|
||||
@brand-info: #5EC1C5;
|
||||
@brand-warning: #FEC62E;
|
||||
@brand-danger: #FE8768;
|
||||
@brand-gray: #c2c2c2;
|
||||
@brand-laxative: #B3EE3A;
|
||||
|
||||
|
||||
@navy: @brand-primary; // Primary color
|
||||
@dark-gray: @brand-gray; // Default color
|
||||
@blue: @brand-success; // Success color
|
||||
@lazur: @brand-info; // Info color
|
||||
@yellow: @brand-warning; // Warrning color
|
||||
@red: @brand-danger; // Danger color
|
||||
@green: @brand-laxative; // Danger color
|
||||
|
||||
@gray-base: #000;
|
||||
@gray-darker: lighten(@gray-base, 13.5%); // #222
|
||||
@gray-dark: lighten(@gray-base, 20%); // #333
|
||||
@gray: lighten(@gray-base, 33.5%); // #555
|
||||
@gray-light: lighten(@gray-base, 46.7%); // #777
|
||||
@gray-lighter: lighten(@gray-base, 93.5%); // #eee
|
||||
|
||||
// Various colors
|
||||
@text-color: #676a6c; // Body text
|
||||
@gray: #f3f3f4; // Background wrapper color
|
||||
@light-gray: #D1DADE; // Default label, badget
|
||||
@label-badget-color: #5E5E5E;
|
||||
@light-blue: #f3f6fb;
|
||||
|
||||
// Spiner color and margin
|
||||
@spin-color: @navy;
|
||||
@spin-margin: 0 auto;
|
||||
|
||||
// IBOX colors ( default panel colors)
|
||||
@border-color: #e7eaec; // IBox border
|
||||
@ibox-title-bg: #ffffff; // IBox Background header
|
||||
@ibox-content-bg: #ffffff; // IBox Background content
|
||||
|
||||
//Sidebar width
|
||||
@sidebar-width: 170px;
|
||||
|
||||
// Boxed layout width
|
||||
@boxed-width: 1200px;
|
||||
|
||||
//Border radius for buttons
|
||||
@btn-border-radius: 3px;
|
||||
|
||||
//Navigation
|
||||
@nav-bg: #2F4050;
|
||||
@nav-text-color: #a7b1c2;
|
||||
|
||||
|
||||
@top-navigation-height: 45px;
|
||||
|
||||
@app-color-title: #474747;
|
||||
@app-color-content: #8A8A8A;
|
||||
|
||||
//上方导航栏高度
|
||||
@frame-header-height: 80px;
|
||||
|
||||
//下方蓝眼云盘高度
|
||||
@power-footer-height: 40px;
|
||||
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
|
||||
.label {
|
||||
background-color: @light-gray;
|
||||
color: @label-badget-color;
|
||||
font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||
font-size: 10px;
|
||||
font-weight: 600;
|
||||
padding: 3px 8px;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
.badge {
|
||||
background-color: @light-gray;
|
||||
color: @label-badget-color;
|
||||
font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
padding-bottom: 4px;
|
||||
padding-left: 6px;
|
||||
padding-right: 6px;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
.label-primary, .badge-primary {
|
||||
background-color: @navy;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.label-success, .badge-success {
|
||||
background-color: @blue;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.label-warning, .badge-warning {
|
||||
background-color: @yellow;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.label-warning-light, .badge-warning-light {
|
||||
background-color: @yellow;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.label-danger, .badge-danger {
|
||||
background-color: @red;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.label-info, .badge-info {
|
||||
background-color: @lazur;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.label-inverse, .badge-inverse {
|
||||
background-color: #262626;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.label-laxative, .badge-laxative {
|
||||
background-color: @green;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.label-white, .badge-white {
|
||||
background-color: #FFFFFF;
|
||||
color: #5E5E5E;
|
||||
}
|
||||
|
||||
.label-white, .badge-disable {
|
||||
background-color: #2A2E36;
|
||||
color: #8B91A0;
|
||||
}
|
||||
@@ -1,309 +0,0 @@
|
||||
|
||||
.btn {
|
||||
border-radius: @btn-border-radius;
|
||||
}
|
||||
|
||||
.float-e-margins .btn {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.btn-w-m {
|
||||
min-width: 120px;
|
||||
}
|
||||
|
||||
.btn-primary.btn-outline {
|
||||
color: @navy;
|
||||
}
|
||||
|
||||
.btn-success.btn-outline {
|
||||
color: @blue;
|
||||
}
|
||||
|
||||
.btn-info.btn-outline {
|
||||
color: @lazur;
|
||||
}
|
||||
|
||||
.btn-warning.btn-outline {
|
||||
color: @yellow;
|
||||
}
|
||||
|
||||
.btn-danger.btn-outline {
|
||||
color: @red;
|
||||
}
|
||||
|
||||
.btn-primary.btn-outline:hover,
|
||||
.btn-success.btn-outline:hover,
|
||||
.btn-info.btn-outline:hover,
|
||||
.btn-warning.btn-outline:hover,
|
||||
.btn-danger.btn-outline:hover {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
background-color: @navy;
|
||||
border-color: @navy;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary, .btn-primary:active:focus, .btn-primary:active:hover, .btn-primary.active:hover, .btn-primary.active:focus {
|
||||
background-color: darken(@navy, 3%);
|
||||
border-color: darken(@navy, 3%);
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary {
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
.btn-primary.disabled, .btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled:active, .btn-primary.disabled.active, .btn-primary[disabled], .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled]:active, .btn-primary.active[disabled], fieldset[disabled] .btn-primary, fieldset[disabled] .btn-primary:hover, fieldset[disabled] .btn-primary:focus, fieldset[disabled] .btn-primary:active, fieldset[disabled] .btn-primary.active {
|
||||
background-color: lighten(@navy, 4%);
|
||||
border-color: lighten(@navy, 4%);
|
||||
}
|
||||
|
||||
.btn-success {
|
||||
background-color: @blue;
|
||||
border-color: @blue;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success, .btn-success:active:focus, .btn-success:active:hover, .btn-success.active:hover, .btn-success.active:focus {
|
||||
background-color: darken(@blue, 3%);
|
||||
border-color: darken(@blue, 3%);
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success {
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
.btn-success.disabled, .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled:active, .btn-success.disabled.active, .btn-success[disabled], .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled]:active, .btn-success.active[disabled], fieldset[disabled] .btn-success, fieldset[disabled] .btn-success:hover, fieldset[disabled] .btn-success:focus, fieldset[disabled] .btn-success:active, fieldset[disabled] .btn-success.active {
|
||||
background-color: lighten(@blue, 4%);
|
||||
border-color: lighten(@blue, 4%);
|
||||
}
|
||||
|
||||
.btn-info {
|
||||
background-color: @lazur;
|
||||
border-color: @lazur;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info, .btn-info:active:focus, .btn-info:active:hover, .btn-info.active:hover, .btn-info.active:focus {
|
||||
background-color: darken(@lazur, 3%);
|
||||
border-color: darken(@lazur, 3%);
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info {
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
.btn-info.disabled, .btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled:active, .btn-info.disabled.active, .btn-info[disabled], .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled]:active, .btn-info.active[disabled], fieldset[disabled] .btn-info, fieldset[disabled] .btn-info:hover, fieldset[disabled] .btn-info:focus, fieldset[disabled] .btn-info:active, fieldset[disabled] .btn-info.active {
|
||||
background-color: lighten(@lazur, 4%);
|
||||
border-color: lighten(@lazur, 4%);
|
||||
}
|
||||
|
||||
.btn-default {
|
||||
color: inherit;
|
||||
background: white;
|
||||
border: 1px solid @border-color;
|
||||
}
|
||||
|
||||
.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default, .btn-default:active:focus, .btn-default:active:hover, .btn-default.active:hover, .btn-default.active:focus {
|
||||
color: inherit;
|
||||
border: 1px solid #d2d2d2;
|
||||
}
|
||||
|
||||
.btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default {
|
||||
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.15) inset;
|
||||
}
|
||||
|
||||
.btn-default.disabled, .btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled:active, .btn-default.disabled.active, .btn-default[disabled], .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled]:active, .btn-default.active[disabled], fieldset[disabled] .btn-default, fieldset[disabled] .btn-default:hover, fieldset[disabled] .btn-default:focus, fieldset[disabled] .btn-default:active, fieldset[disabled] .btn-default.active {
|
||||
color: #cacaca;
|
||||
}
|
||||
|
||||
.btn-warning {
|
||||
background-color: @yellow;
|
||||
border-color: @yellow;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning, .btn-warning:active:focus, .btn-warning:active:hover, .btn-warning.active:hover, .btn-warning.active:focus {
|
||||
background-color: darken(@yellow, 3%);
|
||||
border-color: darken(@yellow, 3%);
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning {
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
.btn-warning.disabled, .btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled:active, .btn-warning.disabled.active, .btn-warning[disabled], .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled]:active, .btn-warning.active[disabled], fieldset[disabled] .btn-warning, fieldset[disabled] .btn-warning:hover, fieldset[disabled] .btn-warning:focus, fieldset[disabled] .btn-warning:active, fieldset[disabled] .btn-warning.active {
|
||||
background-color: lighten(@yellow, 4%);
|
||||
border-color: lighten(@yellow, 4%);
|
||||
}
|
||||
|
||||
.btn-danger {
|
||||
background-color: @red;
|
||||
border-color: @red;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger, .btn-danger:active:focus, .btn-danger:active:hover, .btn-danger.active:hover, .btn-danger.active:focus {
|
||||
background-color: darken(@red, 3%);
|
||||
border-color: darken(@red, 3%);
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger {
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
.btn-danger.disabled, .btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled:active, .btn-danger.disabled.active, .btn-danger[disabled], .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled]:active, .btn-danger.active[disabled], fieldset[disabled] .btn-danger, fieldset[disabled] .btn-danger:hover, fieldset[disabled] .btn-danger:focus, fieldset[disabled] .btn-danger:active, fieldset[disabled] .btn-danger.active {
|
||||
background-color: lighten(@red, 4%);
|
||||
border-color: lighten(@red, 4%);
|
||||
}
|
||||
|
||||
.btn-link {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.btn-link:hover, .btn-link:focus, .btn-link:active, .btn-link.active, .open .dropdown-toggle.btn-link {
|
||||
color: @navy;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.btn-link:active, .btn-link.active, .open .dropdown-toggle.btn-link {
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
.btn-link.disabled, .btn-link.disabled:hover, .btn-link.disabled:focus, .btn-link.disabled:active, .btn-link.disabled.active, .btn-link[disabled], .btn-link[disabled]:hover, .btn-link[disabled]:focus, .btn-link[disabled]:active, .btn-link.active[disabled], fieldset[disabled] .btn-link, fieldset[disabled] .btn-link:hover, fieldset[disabled] .btn-link:focus, fieldset[disabled] .btn-link:active, fieldset[disabled] .btn-link.active {
|
||||
color: #cacaca;
|
||||
}
|
||||
|
||||
.btn-white {
|
||||
color: inherit;
|
||||
background: white;
|
||||
border: 1px solid @border-color;
|
||||
}
|
||||
|
||||
.btn-white:hover, .btn-white:focus, .btn-white:active, .btn-white.active, .open .dropdown-toggle.btn-white, .btn-white:active:focus, .btn-white:active:hover, .btn-white.active:hover, .btn-white.active:focus {
|
||||
color: inherit;
|
||||
border: 1px solid #d2d2d2;
|
||||
}
|
||||
|
||||
.btn-white:active, .btn-white.active {
|
||||
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.15) inset;
|
||||
}
|
||||
|
||||
.btn-white:active, .btn-white.active, .open .dropdown-toggle.btn-white {
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
.btn-white.disabled, .btn-white.disabled:hover, .btn-white.disabled:focus, .btn-white.disabled:active, .btn-white.disabled.active, .btn-white[disabled], .btn-white[disabled]:hover, .btn-white[disabled]:focus, .btn-white[disabled]:active, .btn-white.active[disabled], fieldset[disabled] .btn-white, fieldset[disabled] .btn-white:hover, fieldset[disabled] .btn-white:focus, fieldset[disabled] .btn-white:active, fieldset[disabled] .btn-white.active {
|
||||
color: #cacaca;
|
||||
}
|
||||
|
||||
.form-control, .form-control:focus, .has-error .form-control:focus, .has-success .form-control:focus, .has-warning .form-control:focus, .navbar-collapse, .navbar-form, .navbar-form-custom .form-control:focus, .navbar-form-custom .form-control:hover, .open .btn.dropdown-toggle, .panel, .popover, .progress, .progress-bar {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.btn-outline {
|
||||
color: inherit;
|
||||
background-color: transparent;
|
||||
transition: all .5s;
|
||||
}
|
||||
|
||||
.btn-rounded {
|
||||
border-radius: 50px;
|
||||
}
|
||||
|
||||
.btn-large-dim {
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
font-size: 42px;
|
||||
}
|
||||
|
||||
button.dim {
|
||||
display: inline-block;
|
||||
text-decoration: none;
|
||||
text-transform: uppercase;
|
||||
text-align: center;
|
||||
padding-top: 6px;
|
||||
margin-right: 10px;
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
border-radius: 5px;
|
||||
font-weight: 600;
|
||||
margin-bottom: 20px !important;
|
||||
}
|
||||
|
||||
button.dim:active {
|
||||
top: 3px;
|
||||
}
|
||||
|
||||
button.btn-primary.dim {
|
||||
box-shadow: inset 0 0 0 darken(@navy, 6%), 0 5px 0 0 darken(@navy, 6%), 0 10px 5px #999;
|
||||
}
|
||||
|
||||
button.btn-primary.dim:active {
|
||||
box-shadow: inset 0 0 0 darken(@navy, 6%), 0 2px 0 0 darken(@navy, 6%), 0 5px 3px #999;
|
||||
}
|
||||
|
||||
button.btn-default.dim {
|
||||
box-shadow: inset 0 0 0 darken(@dark-gray, 6%), 0 5px 0 0 darken(@dark-gray, 6%), 0 10px 5px #999;
|
||||
}
|
||||
|
||||
button.btn-default.dim:active {
|
||||
box-shadow: inset 0 0 0 darken(@dark-gray, 6%), 0 2px 0 0 darken(@dark-gray, 6%), 0 5px 3px #999;
|
||||
}
|
||||
|
||||
button.btn-warning.dim {
|
||||
box-shadow: inset 0 0 0 darken(@yellow, 6%), 0 5px 0 0 darken(@yellow, 6%), 0 10px 5px #999;
|
||||
}
|
||||
|
||||
button.btn-warning.dim:active {
|
||||
box-shadow: inset 0 0 0 darken(@yellow, 6%), 0 2px 0 0 darken(@yellow, 6%), 0 5px 3px #999;
|
||||
}
|
||||
|
||||
button.btn-info.dim {
|
||||
box-shadow: inset 0 0 0 darken(@lazur, 6%), 0 5px 0 0 darken(@lazur, 6%), 0 10px 5px #999;
|
||||
}
|
||||
|
||||
button.btn-info.dim:active {
|
||||
box-shadow: inset 0 0 0 darken(@lazur, 6%), 0 2px 0 0 darken(@lazur, 6%), 0 5px 3px #999;
|
||||
}
|
||||
|
||||
button.btn-success.dim {
|
||||
box-shadow: inset 0 0 0 darken(@blue, 6%), 0 5px 0 0 darken(@blue, 6%), 0 10px 5px #999;
|
||||
}
|
||||
|
||||
button.btn-success.dim:active {
|
||||
box-shadow: inset 0 0 0 darken(@blue, 6%), 0 2px 0 0 darken(@blue, 6%), 0 5px 3px #999;
|
||||
}
|
||||
|
||||
button.btn-danger.dim {
|
||||
box-shadow: inset 0 0 0 darken(@red, 6%), 0 5px 0 0 darken(@red, 6%), 0 10px 5px #999;
|
||||
}
|
||||
|
||||
button.btn-danger.dim:active {
|
||||
box-shadow: inset 0 0 0 darken(@red, 6%), 0 2px 0 0 darken(@red, 6%), 0 5px 3px #999;
|
||||
}
|
||||
|
||||
button.dim:before {
|
||||
font-size: 50px;
|
||||
line-height: 1em;
|
||||
font-weight: normal;
|
||||
color: #fff;
|
||||
display: block;
|
||||
padding-top: 10px;
|
||||
|
||||
}
|
||||
|
||||
button.dim:active:before {
|
||||
top: 7px;
|
||||
font-size: 50px;
|
||||
}
|
||||
|
||||
.btn:focus {
|
||||
outline: none !important;
|
||||
}
|
||||
@@ -1,119 +0,0 @@
|
||||
#small-chat {
|
||||
position: fixed;
|
||||
bottom: 20px;
|
||||
right: 20px;
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
#small-chat .badge {
|
||||
position: absolute;
|
||||
top: -3px;
|
||||
right: -4px;
|
||||
}
|
||||
|
||||
.open-small-chat {
|
||||
height: 38px;
|
||||
width: 38px;
|
||||
display: block;
|
||||
background: #1ab394;
|
||||
padding: 9px 8px;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.open-small-chat:hover {
|
||||
color: white;
|
||||
background: #1ab394;
|
||||
}
|
||||
|
||||
.small-chat-box {
|
||||
display: none;
|
||||
position: fixed;
|
||||
bottom: 20px;
|
||||
right: 75px;
|
||||
background: #fff;
|
||||
border: 1px solid @border-color;
|
||||
width: 230px;
|
||||
height: 320px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.small-chat-box.ng-small-chat {
|
||||
display: block;
|
||||
}
|
||||
|
||||
|
||||
.small-chat-box.active {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.small-chat-box {
|
||||
|
||||
.heading {
|
||||
background: @nav-bg;
|
||||
padding: 8px 15px;
|
||||
font-weight: bold;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.chat-date {
|
||||
opacity: 0.6;
|
||||
font-size: 10px;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.content {
|
||||
padding: 15px 15px;
|
||||
|
||||
.author-name {
|
||||
font-weight: bold;
|
||||
margin-bottom: 3px;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
> div {
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
|
||||
.chat-message {
|
||||
padding: 5px 10px;
|
||||
border-radius: 6px;
|
||||
font-size: 11px;
|
||||
line-height: 14px;
|
||||
max-width: 80%;
|
||||
background: #f3f3f4;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.chat-message.active {
|
||||
background: #1ab394;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.left {
|
||||
text-align: left;
|
||||
clear: both;
|
||||
|
||||
.chat-message {
|
||||
float: left;
|
||||
}
|
||||
}
|
||||
|
||||
.right {
|
||||
text-align: right;
|
||||
clear: both;
|
||||
|
||||
.chat-message {
|
||||
float: right;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.form-chat {
|
||||
padding: 10px 10px;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
.border-radius (@radius: 3px) {
|
||||
-webkit-border-radius: @radius;
|
||||
-moz-border-radius: @radius;
|
||||
border-radius: @radius;
|
||||
|
||||
-moz-background-clip: padding;
|
||||
-webkit-background-clip: padding-box;
|
||||
background-clip: padding-box;
|
||||
}
|
||||
|
||||
.opacity (@opacity: 0.5) {
|
||||
-webkit-opacity: @opacity;
|
||||
-moz-opacity: @opacity;
|
||||
opacity: @opacity;
|
||||
}
|
||||
@@ -1,191 +0,0 @@
|
||||
.sidebard-panel {
|
||||
width: 220px;
|
||||
background: darken(@gray, 3%);
|
||||
padding: 10px 20px;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.sidebard-panel .feed-element img.img-circle {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
}
|
||||
|
||||
.sidebard-panel .feed-element, .media-body, .sidebard-panel p {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.sidebard-panel .feed-element {
|
||||
margin-top: 20px;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.sidebard-panel .list-group {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.sidebard-panel .list-group .list-group-item {
|
||||
padding: 5px 0;
|
||||
font-size: 12px;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.sidebar-content .wrapper, .wrapper.sidebar-content {
|
||||
padding-right: 230px !important;
|
||||
}
|
||||
|
||||
// Right sidebar
|
||||
|
||||
#right-sidebar {
|
||||
background-color: #fff;
|
||||
border-left: 1px solid #e7eaec;
|
||||
border-top: 1px solid #e7eaec;
|
||||
overflow: hidden;
|
||||
position: fixed;
|
||||
top: 60px;
|
||||
width: 260px !important;
|
||||
z-index: 1009;
|
||||
bottom: 0;
|
||||
right: -260px;
|
||||
}
|
||||
|
||||
#right-sidebar.sidebar-open {
|
||||
right: 0;
|
||||
}
|
||||
|
||||
#right-sidebar.sidebar-open.sidebar-top {
|
||||
top: 0;
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
.sidebar-container {
|
||||
|
||||
ul.nav-tabs {
|
||||
border: none;
|
||||
}
|
||||
|
||||
ul.nav-tabs.navs-4 li {
|
||||
width: 25%;
|
||||
}
|
||||
ul.nav-tabs.navs-3 li {
|
||||
width: 33.3333%;
|
||||
}
|
||||
ul.nav-tabs.navs-2 li {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
ul.nav-tabs li {
|
||||
border: none;
|
||||
}
|
||||
|
||||
ul.nav-tabs li a {
|
||||
border: none;
|
||||
padding: 12px 10px;
|
||||
margin: 0;
|
||||
border-radius: 0;
|
||||
background: @nav-bg;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
|
||||
border-right: 1px solid lighten(@nav-bg, 2%);
|
||||
}
|
||||
|
||||
ul.nav-tabs li.active a {
|
||||
border: none;
|
||||
background: #f9f9f9;
|
||||
color: @text-color;
|
||||
font-weight: bold;
|
||||
|
||||
}
|
||||
|
||||
.nav-tabs > li.active > a:hover,
|
||||
.nav-tabs > li.active > a:focus {
|
||||
|
||||
border: none;
|
||||
|
||||
}
|
||||
|
||||
ul.sidebar-list {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ul.sidebar-list li {
|
||||
border-bottom: 1px solid @border-color;
|
||||
padding: 15px 20px;
|
||||
list-style: none;
|
||||
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
ul.sidebar-list li:nth-child(2n+2) {
|
||||
// background: #f9f9f9;
|
||||
}
|
||||
|
||||
.sidebar-message:nth-child(2n+2) {
|
||||
background: #f9f9f9;
|
||||
}
|
||||
|
||||
ul.sidebar-list li a {
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.sidebar-content {
|
||||
padding: 15px 20px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.date-item {
|
||||
|
||||
}
|
||||
|
||||
.sidebar-title {
|
||||
background: #f9f9f9;
|
||||
padding: 20px;
|
||||
border-bottom: 1px solid @border-color;
|
||||
|
||||
h3 {
|
||||
margin-bottom: 3px;
|
||||
padding-left: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
.tab-content {
|
||||
|
||||
h4 {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.sidebar-message > a > .pull-left {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.sidebar-message > a {
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.sidebar-message {
|
||||
padding: 15px 20px;
|
||||
}
|
||||
|
||||
.sidebar-message:hover {
|
||||
// background: #f9f9f9;
|
||||
}
|
||||
|
||||
.sidebar-message .message-avatar {
|
||||
height: 38px;
|
||||
width: 38px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.setings-item {
|
||||
padding: 15px 20px;
|
||||
border-bottom: 1px solid @border-color;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,997 +0,0 @@
|
||||
/*
|
||||
* Usage:
|
||||
*
|
||||
* <div class="sk-spinner sk-spinner-rotating-plane"></div>
|
||||
*
|
||||
*/
|
||||
|
||||
.sk-spinner-rotating-plane.sk-spinner {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
background-color: @spin-color;
|
||||
margin: @spin-margin;
|
||||
-webkit-animation: sk-rotatePlane 1.2s infinite ease-in-out;
|
||||
animation: sk-rotatePlane 1.2s infinite ease-in-out;
|
||||
}
|
||||
|
||||
@-webkit-keyframes sk-rotatePlane {
|
||||
0% {
|
||||
-webkit-transform: perspective(120px) rotateX(0deg) rotateY(0deg);
|
||||
transform: perspective(120px) rotateX(0deg) rotateY(0deg);
|
||||
}
|
||||
|
||||
50% {
|
||||
-webkit-transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg);
|
||||
transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
-webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
|
||||
transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes sk-rotatePlane {
|
||||
0% {
|
||||
-webkit-transform: perspective(120px) rotateX(0deg) rotateY(0deg);
|
||||
transform: perspective(120px) rotateX(0deg) rotateY(0deg);
|
||||
}
|
||||
|
||||
50% {
|
||||
-webkit-transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg);
|
||||
transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
-webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
|
||||
transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Usage:
|
||||
*
|
||||
* <div class="sk-spinner sk-spinner-double-bounce">
|
||||
* <div class="sk-double-bounce1"></div>
|
||||
* <div class="sk-double-bounce2"></div>
|
||||
* </div>
|
||||
*
|
||||
*/
|
||||
.sk-spinner-double-bounce.sk-spinner {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
position: relative;
|
||||
margin: @spin-margin;
|
||||
}
|
||||
|
||||
.sk-spinner-double-bounce .sk-double-bounce1, .sk-spinner-double-bounce .sk-double-bounce2 {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border-radius: 50%;
|
||||
background-color: @spin-color;
|
||||
opacity: 0.6;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
-webkit-animation: sk-doubleBounce 2s infinite ease-in-out;
|
||||
animation: sk-doubleBounce 2s infinite ease-in-out;
|
||||
}
|
||||
|
||||
.sk-spinner-double-bounce .sk-double-bounce2 {
|
||||
-webkit-animation-delay: -1s;
|
||||
animation-delay: -1s;
|
||||
}
|
||||
|
||||
@-webkit-keyframes sk-doubleBounce {
|
||||
0%, 100% {
|
||||
-webkit-transform: scale(0);
|
||||
transform: scale(0);
|
||||
}
|
||||
|
||||
50% {
|
||||
-webkit-transform: scale(1);
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes sk-doubleBounce {
|
||||
0%, 100% {
|
||||
-webkit-transform: scale(0);
|
||||
transform: scale(0);
|
||||
}
|
||||
|
||||
50% {
|
||||
-webkit-transform: scale(1);
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Usage:
|
||||
*
|
||||
* <div class="sk-spinner sk-spinner-wave">
|
||||
* <div class="sk-rect1"></div>
|
||||
* <div class="sk-rect2"></div>
|
||||
* <div class="sk-rect3"></div>
|
||||
* <div class="sk-rect4"></div>
|
||||
* <div class="sk-rect5"></div>
|
||||
* </div>
|
||||
*
|
||||
*/
|
||||
.sk-spinner-wave.sk-spinner {
|
||||
margin: @spin-margin;
|
||||
width: 50px;
|
||||
height: 30px;
|
||||
text-align: center;
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
.sk-spinner-wave div {
|
||||
background-color: @spin-color;
|
||||
height: 100%;
|
||||
width: 6px;
|
||||
display: inline-block;
|
||||
-webkit-animation: sk-waveStretchDelay 1.2s infinite ease-in-out;
|
||||
animation: sk-waveStretchDelay 1.2s infinite ease-in-out;
|
||||
}
|
||||
|
||||
.sk-spinner-wave .sk-rect2 {
|
||||
-webkit-animation-delay: -1.1s;
|
||||
animation-delay: -1.1s;
|
||||
}
|
||||
|
||||
.sk-spinner-wave .sk-rect3 {
|
||||
-webkit-animation-delay: -1s;
|
||||
animation-delay: -1s;
|
||||
}
|
||||
|
||||
.sk-spinner-wave .sk-rect4 {
|
||||
-webkit-animation-delay: -0.9s;
|
||||
animation-delay: -0.9s;
|
||||
}
|
||||
|
||||
.sk-spinner-wave .sk-rect5 {
|
||||
-webkit-animation-delay: -0.8s;
|
||||
animation-delay: -0.8s;
|
||||
}
|
||||
|
||||
@-webkit-keyframes sk-waveStretchDelay {
|
||||
0%, 40%, 100% {
|
||||
-webkit-transform: scaleY(0.4);
|
||||
transform: scaleY(0.4);
|
||||
}
|
||||
|
||||
20% {
|
||||
-webkit-transform: scaleY(1);
|
||||
transform: scaleY(1);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes sk-waveStretchDelay {
|
||||
0%, 40%, 100% {
|
||||
-webkit-transform: scaleY(0.4);
|
||||
transform: scaleY(0.4);
|
||||
}
|
||||
|
||||
20% {
|
||||
-webkit-transform: scaleY(1);
|
||||
transform: scaleY(1);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Usage:
|
||||
*
|
||||
* <div class="sk-spinner sk-spinner-wandering-cubes">
|
||||
* <div class="sk-cube1"></div>
|
||||
* <div class="sk-cube2"></div>
|
||||
* </div>
|
||||
*
|
||||
*/
|
||||
.sk-spinner-wandering-cubes.sk-spinner {
|
||||
margin: @spin-margin;
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.sk-spinner-wandering-cubes .sk-cube1, .sk-spinner-wandering-cubes .sk-cube2 {
|
||||
background-color: @spin-color;
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
-webkit-animation: sk-wanderingCubeMove 1.8s infinite ease-in-out;
|
||||
animation: sk-wanderingCubeMove 1.8s infinite ease-in-out;
|
||||
}
|
||||
|
||||
.sk-spinner-wandering-cubes .sk-cube2 {
|
||||
-webkit-animation-delay: -0.9s;
|
||||
animation-delay: -0.9s;
|
||||
}
|
||||
|
||||
@-webkit-keyframes sk-wanderingCubeMove {
|
||||
25% {
|
||||
-webkit-transform: translateX(42px) rotate(-90deg) scale(0.5);
|
||||
transform: translateX(42px) rotate(-90deg) scale(0.5);
|
||||
}
|
||||
|
||||
50% {
|
||||
/* Hack to make FF rotate in the right direction */
|
||||
-webkit-transform: translateX(42px) translateY(42px) rotate(-179deg);
|
||||
transform: translateX(42px) translateY(42px) rotate(-179deg);
|
||||
}
|
||||
|
||||
50.1% {
|
||||
-webkit-transform: translateX(42px) translateY(42px) rotate(-180deg);
|
||||
transform: translateX(42px) translateY(42px) rotate(-180deg);
|
||||
}
|
||||
|
||||
75% {
|
||||
-webkit-transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5);
|
||||
transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5);
|
||||
}
|
||||
|
||||
100% {
|
||||
-webkit-transform: rotate(-360deg);
|
||||
transform: rotate(-360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes sk-wanderingCubeMove {
|
||||
25% {
|
||||
-webkit-transform: translateX(42px) rotate(-90deg) scale(0.5);
|
||||
transform: translateX(42px) rotate(-90deg) scale(0.5);
|
||||
}
|
||||
|
||||
50% {
|
||||
/* Hack to make FF rotate in the right direction */
|
||||
-webkit-transform: translateX(42px) translateY(42px) rotate(-179deg);
|
||||
transform: translateX(42px) translateY(42px) rotate(-179deg);
|
||||
}
|
||||
|
||||
50.1% {
|
||||
-webkit-transform: translateX(42px) translateY(42px) rotate(-180deg);
|
||||
transform: translateX(42px) translateY(42px) rotate(-180deg);
|
||||
}
|
||||
|
||||
75% {
|
||||
-webkit-transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5);
|
||||
transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5);
|
||||
}
|
||||
|
||||
100% {
|
||||
-webkit-transform: rotate(-360deg);
|
||||
transform: rotate(-360deg);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Usage:
|
||||
*
|
||||
* <div class="sk-spinner sk-spinner-pulse"></div>
|
||||
*
|
||||
*/
|
||||
.sk-spinner-pulse.sk-spinner {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
margin: @spin-margin;
|
||||
background-color: @spin-color;
|
||||
border-radius: 100%;
|
||||
-webkit-animation: sk-pulseScaleOut 1s infinite ease-in-out;
|
||||
animation: sk-pulseScaleOut 1s infinite ease-in-out;
|
||||
}
|
||||
|
||||
@-webkit-keyframes sk-pulseScaleOut {
|
||||
0% {
|
||||
-webkit-transform: scale(0);
|
||||
transform: scale(0);
|
||||
}
|
||||
|
||||
100% {
|
||||
-webkit-transform: scale(1);
|
||||
transform: scale(1);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes sk-pulseScaleOut {
|
||||
0% {
|
||||
-webkit-transform: scale(0);
|
||||
transform: scale(0);
|
||||
}
|
||||
|
||||
100% {
|
||||
-webkit-transform: scale(1);
|
||||
transform: scale(1);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Usage:
|
||||
*
|
||||
* <div class="sk-spinner sk-spinner-chasing-dots">
|
||||
* <div class="sk-dot1"></div>
|
||||
* <div class="sk-dot2"></div>
|
||||
* </div>
|
||||
*
|
||||
*/
|
||||
.sk-spinner-chasing-dots.sk-spinner {
|
||||
margin: @spin-margin;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
position: relative;
|
||||
text-align: center;
|
||||
-webkit-animation: sk-chasingDotsRotate 2s infinite linear;
|
||||
animation: sk-chasingDotsRotate 2s infinite linear;
|
||||
}
|
||||
|
||||
.sk-spinner-chasing-dots .sk-dot1, .sk-spinner-chasing-dots .sk-dot2 {
|
||||
width: 60%;
|
||||
height: 60%;
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
background-color: @spin-color;
|
||||
border-radius: 100%;
|
||||
-webkit-animation: sk-chasingDotsBounce 2s infinite ease-in-out;
|
||||
animation: sk-chasingDotsBounce 2s infinite ease-in-out;
|
||||
}
|
||||
|
||||
.sk-spinner-chasing-dots .sk-dot2 {
|
||||
top: auto;
|
||||
bottom: 0;
|
||||
-webkit-animation-delay: -1s;
|
||||
animation-delay: -1s;
|
||||
}
|
||||
|
||||
@-webkit-keyframes sk-chasingDotsRotate {
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes sk-chasingDotsRotate {
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes sk-chasingDotsBounce {
|
||||
0%, 100% {
|
||||
-webkit-transform: scale(0);
|
||||
transform: scale(0);
|
||||
}
|
||||
|
||||
50% {
|
||||
-webkit-transform: scale(1);
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes sk-chasingDotsBounce {
|
||||
0%, 100% {
|
||||
-webkit-transform: scale(0);
|
||||
transform: scale(0);
|
||||
}
|
||||
|
||||
50% {
|
||||
-webkit-transform: scale(1);
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Usage:
|
||||
*
|
||||
* <div class="sk-spinner sk-spinner-three-bounce">
|
||||
* <div class="sk-bounce1"></div>
|
||||
* <div class="sk-bounce2"></div>
|
||||
* <div class="sk-bounce3"></div>
|
||||
* </div>
|
||||
*
|
||||
*/
|
||||
.sk-spinner-three-bounce.sk-spinner {
|
||||
margin: @spin-margin;
|
||||
width: 70px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.sk-spinner-three-bounce div {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
background-color: @spin-color;
|
||||
border-radius: 100%;
|
||||
display: inline-block;
|
||||
-webkit-animation: sk-threeBounceDelay 1.4s infinite ease-in-out;
|
||||
animation: sk-threeBounceDelay 1.4s infinite ease-in-out;
|
||||
/* Prevent first frame from flickering when animation starts */
|
||||
-webkit-animation-fill-mode: both;
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
|
||||
.sk-spinner-three-bounce .sk-bounce1 {
|
||||
-webkit-animation-delay: -0.32s;
|
||||
animation-delay: -0.32s;
|
||||
}
|
||||
|
||||
.sk-spinner-three-bounce .sk-bounce2 {
|
||||
-webkit-animation-delay: -0.16s;
|
||||
animation-delay: -0.16s;
|
||||
}
|
||||
|
||||
@-webkit-keyframes sk-threeBounceDelay {
|
||||
0%, 80%, 100% {
|
||||
-webkit-transform: scale(0);
|
||||
transform: scale(0);
|
||||
}
|
||||
|
||||
40% {
|
||||
-webkit-transform: scale(1);
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes sk-threeBounceDelay {
|
||||
0%, 80%, 100% {
|
||||
-webkit-transform: scale(0);
|
||||
transform: scale(0);
|
||||
}
|
||||
|
||||
40% {
|
||||
-webkit-transform: scale(1);
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Usage:
|
||||
*
|
||||
* <div class="sk-spinner sk-spinner-circle">
|
||||
* <div class="sk-circle1 sk-circle"></div>
|
||||
* <div class="sk-circle2 sk-circle"></div>
|
||||
* <div class="sk-circle3 sk-circle"></div>
|
||||
* <div class="sk-circle4 sk-circle"></div>
|
||||
* <div class="sk-circle5 sk-circle"></div>
|
||||
* <div class="sk-circle6 sk-circle"></div>
|
||||
* <div class="sk-circle7 sk-circle"></div>
|
||||
* <div class="sk-circle8 sk-circle"></div>
|
||||
* <div class="sk-circle9 sk-circle"></div>
|
||||
* <div class="sk-circle10 sk-circle"></div>
|
||||
* <div class="sk-circle11 sk-circle"></div>
|
||||
* <div class="sk-circle12 sk-circle"></div>
|
||||
* </div>
|
||||
*
|
||||
*/
|
||||
.sk-spinner-circle.sk-spinner {
|
||||
margin: @spin-margin;
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.sk-spinner-circle .sk-circle {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.sk-spinner-circle .sk-circle:before {
|
||||
content: '';
|
||||
display: block;
|
||||
margin: @spin-margin;
|
||||
width: 20%;
|
||||
height: 20%;
|
||||
background-color: @spin-color;
|
||||
border-radius: 100%;
|
||||
-webkit-animation: sk-circleBounceDelay 1.2s infinite ease-in-out;
|
||||
animation: sk-circleBounceDelay 1.2s infinite ease-in-out;
|
||||
/* Prevent first frame from flickering when animation starts */
|
||||
-webkit-animation-fill-mode: both;
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
|
||||
.sk-spinner-circle .sk-circle2 {
|
||||
-webkit-transform: rotate(30deg);
|
||||
-ms-transform: rotate(30deg);
|
||||
transform: rotate(30deg);
|
||||
}
|
||||
|
||||
.sk-spinner-circle .sk-circle3 {
|
||||
-webkit-transform: rotate(60deg);
|
||||
-ms-transform: rotate(60deg);
|
||||
transform: rotate(60deg);
|
||||
}
|
||||
|
||||
.sk-spinner-circle .sk-circle4 {
|
||||
-webkit-transform: rotate(90deg);
|
||||
-ms-transform: rotate(90deg);
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
|
||||
.sk-spinner-circle .sk-circle5 {
|
||||
-webkit-transform: rotate(120deg);
|
||||
-ms-transform: rotate(120deg);
|
||||
transform: rotate(120deg);
|
||||
}
|
||||
|
||||
.sk-spinner-circle .sk-circle6 {
|
||||
-webkit-transform: rotate(150deg);
|
||||
-ms-transform: rotate(150deg);
|
||||
transform: rotate(150deg);
|
||||
}
|
||||
|
||||
.sk-spinner-circle .sk-circle7 {
|
||||
-webkit-transform: rotate(180deg);
|
||||
-ms-transform: rotate(180deg);
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
||||
.sk-spinner-circle .sk-circle8 {
|
||||
-webkit-transform: rotate(210deg);
|
||||
-ms-transform: rotate(210deg);
|
||||
transform: rotate(210deg);
|
||||
}
|
||||
|
||||
.sk-spinner-circle .sk-circle9 {
|
||||
-webkit-transform: rotate(240deg);
|
||||
-ms-transform: rotate(240deg);
|
||||
transform: rotate(240deg);
|
||||
}
|
||||
|
||||
.sk-spinner-circle .sk-circle10 {
|
||||
-webkit-transform: rotate(270deg);
|
||||
-ms-transform: rotate(270deg);
|
||||
transform: rotate(270deg);
|
||||
}
|
||||
|
||||
.sk-spinner-circle .sk-circle11 {
|
||||
-webkit-transform: rotate(300deg);
|
||||
-ms-transform: rotate(300deg);
|
||||
transform: rotate(300deg);
|
||||
}
|
||||
|
||||
.sk-spinner-circle .sk-circle12 {
|
||||
-webkit-transform: rotate(330deg);
|
||||
-ms-transform: rotate(330deg);
|
||||
transform: rotate(330deg);
|
||||
}
|
||||
|
||||
.sk-spinner-circle .sk-circle2:before {
|
||||
-webkit-animation-delay: -1.1s;
|
||||
animation-delay: -1.1s;
|
||||
}
|
||||
|
||||
.sk-spinner-circle .sk-circle3:before {
|
||||
-webkit-animation-delay: -1s;
|
||||
animation-delay: -1s;
|
||||
}
|
||||
|
||||
.sk-spinner-circle .sk-circle4:before {
|
||||
-webkit-animation-delay: -0.9s;
|
||||
animation-delay: -0.9s;
|
||||
}
|
||||
|
||||
.sk-spinner-circle .sk-circle5:before {
|
||||
-webkit-animation-delay: -0.8s;
|
||||
animation-delay: -0.8s;
|
||||
}
|
||||
|
||||
.sk-spinner-circle .sk-circle6:before {
|
||||
-webkit-animation-delay: -0.7s;
|
||||
animation-delay: -0.7s;
|
||||
}
|
||||
|
||||
.sk-spinner-circle .sk-circle7:before {
|
||||
-webkit-animation-delay: -0.6s;
|
||||
animation-delay: -0.6s;
|
||||
}
|
||||
|
||||
.sk-spinner-circle .sk-circle8:before {
|
||||
-webkit-animation-delay: -0.5s;
|
||||
animation-delay: -0.5s;
|
||||
}
|
||||
|
||||
.sk-spinner-circle .sk-circle9:before {
|
||||
-webkit-animation-delay: -0.4s;
|
||||
animation-delay: -0.4s;
|
||||
}
|
||||
|
||||
.sk-spinner-circle .sk-circle10:before {
|
||||
-webkit-animation-delay: -0.3s;
|
||||
animation-delay: -0.3s;
|
||||
}
|
||||
|
||||
.sk-spinner-circle .sk-circle11:before {
|
||||
-webkit-animation-delay: -0.2s;
|
||||
animation-delay: -0.2s;
|
||||
}
|
||||
|
||||
.sk-spinner-circle .sk-circle12:before {
|
||||
-webkit-animation-delay: -0.1s;
|
||||
animation-delay: -0.1s;
|
||||
}
|
||||
|
||||
@-webkit-keyframes sk-circleBounceDelay {
|
||||
0%, 80%, 100% {
|
||||
-webkit-transform: scale(0);
|
||||
transform: scale(0);
|
||||
}
|
||||
|
||||
40% {
|
||||
-webkit-transform: scale(1);
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes sk-circleBounceDelay {
|
||||
0%, 80%, 100% {
|
||||
-webkit-transform: scale(0);
|
||||
transform: scale(0);
|
||||
}
|
||||
|
||||
40% {
|
||||
-webkit-transform: scale(1);
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Usage:
|
||||
*
|
||||
* <div class="sk-spinner sk-spinner-cube-grid">
|
||||
* <div class="sk-cube"></div>
|
||||
* <div class="sk-cube"></div>
|
||||
* <div class="sk-cube"></div>
|
||||
* <div class="sk-cube"></div>
|
||||
* <div class="sk-cube"></div>
|
||||
* <div class="sk-cube"></div>
|
||||
* <div class="sk-cube"></div>
|
||||
* <div class="sk-cube"></div>
|
||||
* <div class="sk-cube"></div>
|
||||
* </div>
|
||||
*
|
||||
*/
|
||||
.sk-spinner-cube-grid {
|
||||
/*
|
||||
* Spinner positions
|
||||
* 1 2 3
|
||||
* 4 5 6
|
||||
* 7 8 9
|
||||
*/
|
||||
}
|
||||
|
||||
.sk-spinner-cube-grid.sk-spinner {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
margin: @spin-margin;
|
||||
}
|
||||
|
||||
.sk-spinner-cube-grid .sk-cube {
|
||||
width: 33%;
|
||||
height: 33%;
|
||||
background-color: @spin-color;
|
||||
float: left;
|
||||
-webkit-animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out;
|
||||
animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out;
|
||||
}
|
||||
|
||||
.sk-spinner-cube-grid .sk-cube:nth-child(1) {
|
||||
-webkit-animation-delay: 0.2s;
|
||||
animation-delay: 0.2s;
|
||||
}
|
||||
|
||||
.sk-spinner-cube-grid .sk-cube:nth-child(2) {
|
||||
-webkit-animation-delay: 0.3s;
|
||||
animation-delay: 0.3s;
|
||||
}
|
||||
|
||||
.sk-spinner-cube-grid .sk-cube:nth-child(3) {
|
||||
-webkit-animation-delay: 0.4s;
|
||||
animation-delay: 0.4s;
|
||||
}
|
||||
|
||||
.sk-spinner-cube-grid .sk-cube:nth-child(4) {
|
||||
-webkit-animation-delay: 0.1s;
|
||||
animation-delay: 0.1s;
|
||||
}
|
||||
|
||||
.sk-spinner-cube-grid .sk-cube:nth-child(5) {
|
||||
-webkit-animation-delay: 0.2s;
|
||||
animation-delay: 0.2s;
|
||||
}
|
||||
|
||||
.sk-spinner-cube-grid .sk-cube:nth-child(6) {
|
||||
-webkit-animation-delay: 0.3s;
|
||||
animation-delay: 0.3s;
|
||||
}
|
||||
|
||||
.sk-spinner-cube-grid .sk-cube:nth-child(7) {
|
||||
-webkit-animation-delay: 0s;
|
||||
animation-delay: 0s;
|
||||
}
|
||||
|
||||
.sk-spinner-cube-grid .sk-cube:nth-child(8) {
|
||||
-webkit-animation-delay: 0.1s;
|
||||
animation-delay: 0.1s;
|
||||
}
|
||||
|
||||
.sk-spinner-cube-grid .sk-cube:nth-child(9) {
|
||||
-webkit-animation-delay: 0.2s;
|
||||
animation-delay: 0.2s;
|
||||
}
|
||||
|
||||
@-webkit-keyframes sk-cubeGridScaleDelay {
|
||||
0%, 70%, 100% {
|
||||
-webkit-transform: scale3D(1, 1, 1);
|
||||
transform: scale3D(1, 1, 1);
|
||||
}
|
||||
|
||||
35% {
|
||||
-webkit-transform: scale3D(0, 0, 1);
|
||||
transform: scale3D(0, 0, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes sk-cubeGridScaleDelay {
|
||||
0%, 70%, 100% {
|
||||
-webkit-transform: scale3D(1, 1, 1);
|
||||
transform: scale3D(1, 1, 1);
|
||||
}
|
||||
|
||||
35% {
|
||||
-webkit-transform: scale3D(0, 0, 1);
|
||||
transform: scale3D(0, 0, 1);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Usage:
|
||||
*
|
||||
* <div class="sk-spinner sk-spinner-wordpress">
|
||||
* <span class="sk-inner-circle"></span>
|
||||
* </div>
|
||||
*
|
||||
*/
|
||||
.sk-spinner-wordpress.sk-spinner {
|
||||
background-color: @spin-color;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
border-radius: 30px;
|
||||
position: relative;
|
||||
margin: @spin-margin;
|
||||
-webkit-animation: sk-innerCircle 1s linear infinite;
|
||||
animation: sk-innerCircle 1s linear infinite;
|
||||
}
|
||||
|
||||
.sk-spinner-wordpress .sk-inner-circle {
|
||||
display: block;
|
||||
background-color: #fff;
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
position: absolute;
|
||||
border-radius: 8px;
|
||||
top: 5px;
|
||||
left: 5px;
|
||||
}
|
||||
|
||||
@-webkit-keyframes sk-innerCircle {
|
||||
0% {
|
||||
-webkit-transform: rotate(0);
|
||||
transform: rotate(0);
|
||||
}
|
||||
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes sk-innerCircle {
|
||||
0% {
|
||||
-webkit-transform: rotate(0);
|
||||
transform: rotate(0);
|
||||
}
|
||||
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Usage:
|
||||
*
|
||||
* <div class="sk-spinner sk-spinner-fading-circle">
|
||||
* <div class="sk-circle1 sk-circle"></div>
|
||||
* <div class="sk-circle2 sk-circle"></div>
|
||||
* <div class="sk-circle3 sk-circle"></div>
|
||||
* <div class="sk-circle4 sk-circle"></div>
|
||||
* <div class="sk-circle5 sk-circle"></div>
|
||||
* <div class="sk-circle6 sk-circle"></div>
|
||||
* <div class="sk-circle7 sk-circle"></div>
|
||||
* <div class="sk-circle8 sk-circle"></div>
|
||||
* <div class="sk-circle9 sk-circle"></div>
|
||||
* <div class="sk-circle10 sk-circle"></div>
|
||||
* <div class="sk-circle11 sk-circle"></div>
|
||||
* <div class="sk-circle12 sk-circle"></div>
|
||||
* </div>
|
||||
*
|
||||
*/
|
||||
.sk-spinner-fading-circle.sk-spinner {
|
||||
margin: @spin-margin;
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.sk-spinner-fading-circle .sk-circle {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.sk-spinner-fading-circle .sk-circle:before {
|
||||
content: '';
|
||||
display: block;
|
||||
margin: @spin-margin;
|
||||
width: 18%;
|
||||
height: 18%;
|
||||
background-color: @spin-color;
|
||||
border-radius: 100%;
|
||||
-webkit-animation: sk-circleFadeDelay 1.2s infinite ease-in-out;
|
||||
animation: sk-circleFadeDelay 1.2s infinite ease-in-out;
|
||||
/* Prevent first frame from flickering when animation starts */
|
||||
-webkit-animation-fill-mode: both;
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
|
||||
.sk-spinner-fading-circle .sk-circle2 {
|
||||
-webkit-transform: rotate(30deg);
|
||||
-ms-transform: rotate(30deg);
|
||||
transform: rotate(30deg);
|
||||
}
|
||||
|
||||
.sk-spinner-fading-circle .sk-circle3 {
|
||||
-webkit-transform: rotate(60deg);
|
||||
-ms-transform: rotate(60deg);
|
||||
transform: rotate(60deg);
|
||||
}
|
||||
|
||||
.sk-spinner-fading-circle .sk-circle4 {
|
||||
-webkit-transform: rotate(90deg);
|
||||
-ms-transform: rotate(90deg);
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
|
||||
.sk-spinner-fading-circle .sk-circle5 {
|
||||
-webkit-transform: rotate(120deg);
|
||||
-ms-transform: rotate(120deg);
|
||||
transform: rotate(120deg);
|
||||
}
|
||||
|
||||
.sk-spinner-fading-circle .sk-circle6 {
|
||||
-webkit-transform: rotate(150deg);
|
||||
-ms-transform: rotate(150deg);
|
||||
transform: rotate(150deg);
|
||||
}
|
||||
|
||||
.sk-spinner-fading-circle .sk-circle7 {
|
||||
-webkit-transform: rotate(180deg);
|
||||
-ms-transform: rotate(180deg);
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
||||
.sk-spinner-fading-circle .sk-circle8 {
|
||||
-webkit-transform: rotate(210deg);
|
||||
-ms-transform: rotate(210deg);
|
||||
transform: rotate(210deg);
|
||||
}
|
||||
|
||||
.sk-spinner-fading-circle .sk-circle9 {
|
||||
-webkit-transform: rotate(240deg);
|
||||
-ms-transform: rotate(240deg);
|
||||
transform: rotate(240deg);
|
||||
}
|
||||
|
||||
.sk-spinner-fading-circle .sk-circle10 {
|
||||
-webkit-transform: rotate(270deg);
|
||||
-ms-transform: rotate(270deg);
|
||||
transform: rotate(270deg);
|
||||
}
|
||||
|
||||
.sk-spinner-fading-circle .sk-circle11 {
|
||||
-webkit-transform: rotate(300deg);
|
||||
-ms-transform: rotate(300deg);
|
||||
transform: rotate(300deg);
|
||||
}
|
||||
|
||||
.sk-spinner-fading-circle .sk-circle12 {
|
||||
-webkit-transform: rotate(330deg);
|
||||
-ms-transform: rotate(330deg);
|
||||
transform: rotate(330deg);
|
||||
}
|
||||
|
||||
.sk-spinner-fading-circle .sk-circle2:before {
|
||||
-webkit-animation-delay: -1.1s;
|
||||
animation-delay: -1.1s;
|
||||
}
|
||||
|
||||
.sk-spinner-fading-circle .sk-circle3:before {
|
||||
-webkit-animation-delay: -1s;
|
||||
animation-delay: -1s;
|
||||
}
|
||||
|
||||
.sk-spinner-fading-circle .sk-circle4:before {
|
||||
-webkit-animation-delay: -0.9s;
|
||||
animation-delay: -0.9s;
|
||||
}
|
||||
|
||||
.sk-spinner-fading-circle .sk-circle5:before {
|
||||
-webkit-animation-delay: -0.8s;
|
||||
animation-delay: -0.8s;
|
||||
}
|
||||
|
||||
.sk-spinner-fading-circle .sk-circle6:before {
|
||||
-webkit-animation-delay: -0.7s;
|
||||
animation-delay: -0.7s;
|
||||
}
|
||||
|
||||
.sk-spinner-fading-circle .sk-circle7:before {
|
||||
-webkit-animation-delay: -0.6s;
|
||||
animation-delay: -0.6s;
|
||||
}
|
||||
|
||||
.sk-spinner-fading-circle .sk-circle8:before {
|
||||
-webkit-animation-delay: -0.5s;
|
||||
animation-delay: -0.5s;
|
||||
}
|
||||
|
||||
.sk-spinner-fading-circle .sk-circle9:before {
|
||||
-webkit-animation-delay: -0.4s;
|
||||
animation-delay: -0.4s;
|
||||
}
|
||||
|
||||
.sk-spinner-fading-circle .sk-circle10:before {
|
||||
-webkit-animation-delay: -0.3s;
|
||||
animation-delay: -0.3s;
|
||||
}
|
||||
|
||||
.sk-spinner-fading-circle .sk-circle11:before {
|
||||
-webkit-animation-delay: -0.2s;
|
||||
animation-delay: -0.2s;
|
||||
}
|
||||
|
||||
.sk-spinner-fading-circle .sk-circle12:before {
|
||||
-webkit-animation-delay: -0.1s;
|
||||
animation-delay: -0.1s;
|
||||
}
|
||||
|
||||
@-webkit-keyframes sk-circleFadeDelay {
|
||||
0%, 39%, 100% {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
40% {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes sk-circleFadeDelay {
|
||||
0%, 39%, 100% {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
40% {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
/*
|
||||
*
|
||||
* INSPINIA - Responsive Admin Theme
|
||||
* version 2.6.2
|
||||
*
|
||||
*/
|
||||
// Variables, Mixins
|
||||
@import "../global/variables.less";
|
||||
@import "mixins.less";
|
||||
// INSPINIA Theme Elements
|
||||
@import "typography.less";
|
||||
@import "buttons.less";
|
||||
@import "badgets_labels.less";
|
||||
@import "elements.less";
|
||||
@import "sidebar.less";
|
||||
@import "base.less";
|
||||
@import "pages.less";
|
||||
@import "chat.less";
|
||||
@import "spinners.less";
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-weight: 100;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 30px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
h3, h4, h5 {
|
||||
margin-top: 5px;
|
||||
font-weight: 600;
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
@import "~bootstrap/less/variables.less";
|
||||
|
Before Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 4.2 KiB |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1514189634329" class="icon" style="" viewBox="0 0 1219 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10648" xmlns:xlink="http://www.w3.org/1999/xlink" width="238.0859375" height="200"><defs><style type="text/css"></style></defs><path d="M1197.787429 327.192381a19.504762 19.504762 0 0 1 19.553523 19.407238v614.156191c0 34.913524-28.574476 63.24419-63.878095 63.24419H63.878095C28.623238 1024 0 995.718095 0 960.75581V346.599619a19.504762 19.504762 0 0 1 19.602286-19.358476h1178.185143z m-66.80381-213.089524C1179.550476 114.102857 1219.047619 153.209905 1219.047619 201.386667v80.213333H1.657905V88.259048C1.657905 39.497143 41.593905 0 90.794667 0h290.864762c17.408 0 33.987048 7.655619 45.104761 20.967619l78.214096 93.135238h626.005333z" fill="#1ab394" p-id="10649"></path></svg>
|
||||
|
Before Width: | Height: | Size: 943 B |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1514189353878" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1197" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M9.367 0h992.97v341.333H9.366z" fill="#55C7F7" p-id="1198"></path><path d="M9.367 341.333h992.97v341.334H9.366z" fill="#F95F5D" p-id="1199"></path><path d="M9.367 682.667h992.97V1024H9.366z" fill="#7ECF3B" p-id="1200"></path><path d="M350.7 0h310.303v1024H350.7z" fill="#FDAF42" p-id="1201"></path><path d="M304.154 386.638V646.05h403.394V386.638H304.154z m356.849 215.97H350.7V429.46h310.303v173.15z" fill="#FFFFFF" p-id="1202"></path></svg>
|
||||
|
Before Width: | Height: | Size: 828 B |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1543321997742" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3887" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M160 32c-12 0-24.8 4.8-33.6 14.4S112 68 112 80v864c0 12 4.8 24.8 14.4 33.6C136 987.2 148 992 160 992h704c12 0 24.8-4.8 33.6-14.4C907.2 968 912 956 912 944V304L640 32H160z" fill="#FF5562" p-id="3888"></path><path d="M912 304H688c-12 0-24.8-4.8-33.6-14.4-9.6-8.8-14.4-21.6-14.4-33.6V32l272 272z" fill="#FFBBC0" p-id="3889"></path><path d="M669.6 491.2c0-1.6 0.8-4 0-6.4V369.6c0-4.8-2.4-8.8-5.6-12-4-3.2-8-4-12.8-3.2l-250.4 70.4c-7.2 1.6-12 7.2-12 14.4v275.2c-9.6-4-20.8-6.4-32.8-6.4-8.8 0-17.6 0.8-26.4 3.2-40.8 11.2-66.4 43.2-58.4 72.8 6.4 23.2 30.4 37.6 60.8 37.6 8.8 0 17.6-1.6 26.4-3.2 36.8-10.4 60.8-36.8 60-63.2 0.8-1.6 0.8-3.2 0.8-5.6V570.4l220-61.6v136c-9.6-4-20.8-6.4-32.8-6.4-8.8 0-17.6 0.8-26.4 3.2-40.8 11.2-66.4 43.2-58.4 72.8C528 737.6 552 752 582.4 752c8.8 0 17.6-0.8 26.4-3.2 36-9.6 60-36 60-62.4 0.8-1.6 0.8-3.2 0.8-5.6V491.2z m-250.4 48v-53.6l220-61.6v53.6l-220 61.6z" fill="#FFFFFF" p-id="3890"></path></svg>
|
||||
|
Before Width: | Height: | Size: 1.3 KiB |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1543300132402" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2107" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M533.947184 38.36489h65.880106v88.119185c117.859409 0.660894 235.60867-1.211639 353.35793 0.660894 25.102953-2.533427 44.81962 16.962943 42.506492 42.07691 1.872533 216.993492-0.440596 434.097133 1.112505 651.090626-1.112505 22.250094 2.191965 46.923466-10.695466 66.640133-16.081751 11.455494-36.899909 10.023557-55.625236 10.904749-110.25913-0.550745-220.408111-0.330447-330.656225-0.330447v88.119185h-68.843113c-167.657764-30.621417-335.745108-58.709407-503.722304-88.119185-0.110149-256.977572 0-513.955144 0-770.822567 168.858388-29.519927 337.826924-58.268811 506.685311-88.339483z" fill="#2A5699" p-id="2108"></path><path d="M599.816275 159.528769h363.491637v704.953477h-363.491637v-88.119185h286.38735v-44.059592h-286.38735v-55.07449h286.38735v-44.059593h-286.38735v-55.07449h286.38735v-44.059592h-286.38735v-55.074491h286.38735v-44.059592h-286.38735v-55.074491h286.38735v-44.059592h-286.38735v-55.07449h286.38735v-44.059593h-286.38735v-77.104286zM254.829667 354.162018c20.928306-1.211639 41.856613-2.092831 62.784919-3.19432 14.649814 74.350562 29.619061 148.590975 45.491529 222.61109 12.446835-76.443393 26.215457-152.666487 39.543484-228.999731 22.029796-0.771043 44.059592-1.982682 65.97924-3.30447-24.89367 106.734362-46.703168 214.349917-73.909966 320.423385-18.39488 9.582961-45.932125-0.440596-67.741623 1.10149-14.649814-72.90761-31.722906-145.38564-44.819621-218.645727-12.898446 71.156242-29.641091 141.651589-44.390039 212.367235a4187.754101 4187.754101 0 0 1-63.666111-3.866229c-18.284731-96.931103-39.763782-193.190297-56.836874-290.341698 18.835476-0.881192 37.792115-1.652235 56.627591-2.313129 11.33433 70.164901 24.221761 139.999355 34.146184 210.274404 15.508976-72.037433 31.37043-144.074867 46.791287-216.1123z" fill="#FFFFFF" p-id="2109"></path></svg>
|
||||
|
Before Width: | Height: | Size: 2.1 KiB |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1514189511483" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6709" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M676.297143 0H145.609143C130.834286 0 118.857143 11.977143 118.857143 35.218286V1005.714286c0 6.308571 11.977143 18.285714 26.752 18.285714h732.781714c14.774857 0 26.752-11.977143 26.752-18.285714V237.312c0-12.726857-1.700571-16.822857-4.699428-19.84L687.670857 4.699429A16.164571 16.164571 0 0 0 676.297143 0z" fill="#E9E9E0" p-id="6710"></path><path d="M685.714286 2.761143V219.428571h216.667428z" fill="#D9D7CA" p-id="6711"></path><path d="M878.390857 1024H145.609143A26.752 26.752 0 0 1 118.857143 997.248V713.142857h786.285714v284.105143c0 14.774857-11.977143 26.752-26.752 26.752z" fill="#C8BDB8" p-id="6712"></path><path d="M338.285714 859.428571m-54.857143 0a54.857143 54.857143 0 1 0 109.714286 0 54.857143 54.857143 0 1 0-109.714286 0Z" fill="#FFFFFF" p-id="6713"></path><path d="M521.142857 859.428571m-54.857143 0a54.857143 54.857143 0 1 0 109.714286 0 54.857143 54.857143 0 1 0-109.714286 0Z" fill="#FFFFFF" p-id="6714"></path><path d="M704 859.428571m-54.857143 0a54.857143 54.857143 0 1 0 109.714286 0 54.857143 54.857143 0 1 0-109.714286 0Z" fill="#FFFFFF" p-id="6715"></path></svg>
|
||||
|
Before Width: | Height: | Size: 1.4 KiB |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1514189634329" class="icon" style="" viewBox="0 0 1219 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10648" xmlns:xlink="http://www.w3.org/1999/xlink" width="238.0859375" height="200"><defs><style type="text/css"></style></defs><path d="M1197.787429 327.192381a19.504762 19.504762 0 0 1 19.553523 19.407238v614.156191c0 34.913524-28.574476 63.24419-63.878095 63.24419H63.878095C28.623238 1024 0 995.718095 0 960.75581V346.599619a19.504762 19.504762 0 0 1 19.602286-19.358476h1178.185143z m-66.80381-213.089524C1179.550476 114.102857 1219.047619 153.209905 1219.047619 201.386667v80.213333H1.657905V88.259048C1.657905 39.497143 41.593905 0 90.794667 0h290.864762c17.408 0 33.987048 7.655619 45.104761 20.967619l78.214096 93.135238h626.005333z" fill="#23B7E5" p-id="10649"></path></svg>
|
||||
|
Before Width: | Height: | Size: 943 B |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1514190539077" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="14917" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M128 0h597.3l227.6 227.9v739.2c0 31.4-25.5 56.9-56.9 56.9H128c-31.4 0-56.9-25.5-56.9-56.9V56.9C71.1 25.5 96.6 0 128 0z" fill="#13BE93" p-id="14918"></path><path d="M630.5 1024H128c-25.7 0-47.4-17-54.4-40.4l218.1-218.1c22.2-22.2 58.2-22.2 80.5 0L630.5 1024z" fill="#6BD8BD" p-id="14919"></path><path d="M952.9 858v109.1c0 31.4-25.5 56.9-56.9 56.9H322.4l-4.7-4.7 358-358c22.2-22.2 58.2-22.2 80.5 0L952.9 858z" fill="#9CF9E2" p-id="14920"></path><path d="M725.3 0l227.6 227.6H782.2c-31.4 0-56.9-25.5-56.9-56.9V0z" fill="#69DCC0" p-id="14921"></path><path d="M327.1 483.6m-85.3 0a85.3 85.3 0 1 0 170.6 0 85.3 85.3 0 1 0-170.6 0Z" fill="#E9FFFA" p-id="14922"></path></svg>
|
||||
|
Before Width: | Height: | Size: 1.0 KiB |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1514284130163" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1551" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M915.114667 1024H108.885333V0h587.776v218.112H914.773333V1024z m-785.066667-20.821333h763.904V238.933333H675.84V20.821333H129.706667v982.357334z" fill="#F90E09" p-id="1552"></path><path d="M708.266667 10.581333L904.533333 206.848h-196.266666z" fill="#F90E09" p-id="1553"></path><path d="M282.965333 792.576c33.450667-23.210667 55.637333-57.344 76.8-91.136-30.378667 25.941333-59.050667 54.954667-76.8 91.136z m396.629334-169.642667c31.402667 15.018667 65.877333 31.061333 101.376 21.504-24.576-29.696-67.584-21.504-101.376-21.504z m-246.101334 23.210667c45.397333-16.725333 91.818667-29.696 138.922667-39.594667-30.378667-26.965333-55.978667-58.368-76.458667-93.525333-16.725333 46.08-38.912 90.112-62.464 133.12z m67.925334-243.370667c14.677333-37.546667 19.114667-83.285333-5.802667-117.418666-7.168 38.912-4.096 79.189333 5.802667 117.418666z m-45.397334-105.130666c4.096-24.917333 35.84-29.696 55.637334-22.186667 12.288 7.850667 18.432 22.869333 18.773333 37.205333 1.365333 44.032-6.485333 87.381333-12.629333 130.730667-3.413333 20.138667 8.874667 38.229333 17.749333 55.296 21.845333 40.277333 52.224 76.458667 92.16 99.669333 48.128-5.802667 98.645333-12.970667 145.749333 2.389334 35.157333 11.946667 26.965333 77.141333-11.264 77.824-53.589333 2.730667-102.058667-23.893333-150.186666-43.349334-66.218667 4.778667-130.730667 24.917333-194.218667 44.032-28.672 46.762667-54.613333 98.986667-101.034667 130.730667-23.210667 18.090667-76.458667 3.072-64.512-32.085333 20.138667-49.152 70.314667-76.117333 114.346667-100.693334 12.629333-6.485333 19.797333-18.773333 26.282667-31.061333 30.037333-57.685333 60.074667-115.370667 84.309333-175.786667-12.629333-56.661333-31.061333-114.688-21.162667-172.714666z" fill="#F90E09" p-id="1554"></path></svg>
|
||||
|
Before Width: | Height: | Size: 2.1 KiB |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1543300178225" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5733" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M537.372818 38.36489h62.454472v99.134083c117.738246 0.660894 235.60867-1.211639 353.236766 0.550745 25.334266-2.423278 45.172097 17.29339 42.627656 42.627655 1.872533 205.758296-0.440596 411.626741 1.10149 617.506201-1.10149 22.250094 2.20298 46.923466-10.574302 66.640134-16.081751 11.664777-36.999043 10.133706-55.834519 11.014898-110.148981-0.550745-220.297962-0.330447-330.557091-0.330447v110.148981h-68.523681c-167.856032-30.621417-336.06454-58.599258-504.041736-88.119185-0.110149-256.977572 0-513.955144 0-770.822567 169.970892-29.420793 339.93077-59.381316 510.110945-88.350498z" fill="#D24625" p-id="5734"></path><path d="M599.82729 170.543667h363.491636v671.908783h-363.491636v-88.119185h264.357554v-44.059592h-264.357554v-55.074491h264.357554v-44.059592h-264.247405c-0.110149-21.5892-0.110149-43.1784-0.231313-64.767601 43.630011 13.53731 93.307202 13.217878 132.299941-13.008594 42.18706-25.003819 64.216856-72.698327 67.851772-120.271672-48.366417-0.330447-96.710805-0.220298-144.956059-0.220298-0.121164-47.914807 0.550745-95.829613-0.991341-143.634271-18.075448 3.524767-36.128866 7.269833-54.083149 11.125047v-109.818534z" fill="#FFFFFF" p-id="5735"></path><path d="M677.041725 246.216017c76.553542 3.524767 140.880546 67.961921 144.956059 144.295165-48.366417 0.550745-96.710805 0.330447-145.066208 0.330447 0-48.245254-0.121164-96.490507 0.110149-144.625612z" fill="#D24625" p-id="5736"></path><path d="M203.940838 329.378497c59.810897 2.863874 132.288926-23.682031 181.855967 21.148605 47.485226 57.607917 34.917227 163.571236-35.467972 198.047867-25.003819 12.777282-53.642554 11.014898-80.849351 10.133706-0.110149 43.068251-0.220298 86.136503-0.110149 129.19374-21.820513-1.872533-43.74016-3.745065-65.538644-5.507449-0.980326-117.628097-1.211639-235.377357 0.110149-353.016469z" fill="#FFFFFF" p-id="5737"></path><path d="M269.380347 388.969096c21.699349-0.991341 48.575701-4.956704 63.214501 15.420857 12.567999 21.5892 11.89609 50.007637 1.442951 72.257732-12.567999 22.69069-40.986436 20.48771-62.895068 23.131286-2.313129-36.899909-2.092831-73.799817-1.762384-110.809875z" fill="#D24625" p-id="5738"></path></svg>
|
||||
|
Before Width: | Height: | Size: 2.5 KiB |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1545064197737" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="14227" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M759.725253 0H134.464646v1024h817.131314V191.870707z" fill="#02007A" p-id="14228"></path><path d="M72.40404 708.525253h687.838384v258.585858H72.40404z" fill="#230091" p-id="14229"></path><path d="M82.747475 718.868687h667.151515v237.89899H82.747475zM755.070707 5.171717l191.353535 191.353536h-191.353535z" fill="#FFFFFF" p-id="14230"></path><path d="M506.828283 791.272727v93.090909h25.858586c28.444444 0 41.373737-12.929293 41.373737-45.511111s-12.929293-47.579798-41.373737-47.579798h-25.858586z m-25.858586-25.858586h51.717172c42.408081 0 67.232323 29.99596 67.232323 74.989899S575.612121 910.222222 532.686869 910.222222H480.969697v-144.808081z m-132.39596 104.468687c1.034343 26.375758 22.755556 42.408081 55.337374 42.408081 34.650505 0 55.854545-17.066667 55.854546-43.959596 0-21.20404-12.412121-33.09899-40.856566-39.822222l-16.549495-3.620202c-17.583838-4.137374-24.824242-9.826263-24.824242-19.135354 0-11.894949 10.860606-19.652525 26.892929-19.652525s27.410101 7.757576 28.444444 21.204041h24.307071c-0.517172-24.824242-21.20404-41.890909-52.751515-41.89091S351.676768 782.480808 351.676768 807.822222c0 20.169697 12.412121 33.09899 38.787878 38.787879l18.618182 4.137374c18.10101 4.137374 25.341414 10.343434 25.341414 20.169697 0 11.894949-11.894949 20.169697-28.961616 20.169697s-30.513131-8.791919-32.064646-21.721212l-24.824243 0.517171zM258.585859 788.686869v53.785858h20.686868c18.10101 0 31.030303-9.826263 31.030303-26.892929s-12.412121-26.892929-31.030303-26.892929h-20.686868z m-25.858586-23.272728h56.888889c28.444444 0 46.545455 20.686869 46.545454 49.131314s-17.583838 49.131313-46.545454 49.131313h-31.030303v46.545454h-25.858586v-144.808081z" fill="#230091" p-id="14231"></path><path d="M415.806061 443.216162h-31.030303v137.567676H321.163636V196.525253h93.090909c91.022222 0 140.670707 35.684848 140.670708 122.052525 0.517172 103.434343-92.573737 124.638384-139.119192 124.638384z m-5.688889-192.905051c-6.206061 0-14.99798 0.517172-26.89293 1.551515V387.878788h36.202021C461.834343 387.878788 491.313131 366.157576 491.313131 312.888889c0-40.856566-32.064646-62.577778-81.195959-62.577778z m258.068687 337.19596c70.852525 0 96.711111-50.165657 96.711111-84.816162 0-54.820202-35.684848-67.749495-66.19798-87.40202-25.858586-17.066667-49.648485-23.272727-49.648485-40.856566 0-22.755556 15.515152-27.410101 36.20202-27.410101 25.858586 0 54.820202 2.068687 67.232323 16.032323V306.682828c-12.929293-10.343434-37.236364-13.446465-68.783838-13.446464-67.749495 0-93.608081 44.993939-93.608081 84.29899 0 50.682828 33.616162 65.680808 66.19798 83.781818 21.20404 11.894949 46.545455 20.686869 46.545455 44.476767 0 13.963636-8.791919 27.927273-37.753536 27.927273-26.892929 0-59.991919-10.343434-74.989899-23.789899v59.991919c13.446465 10.343434 40.339394 17.583838 78.09293 17.583839z" fill="#7AB7FF" p-id="14232"></path></svg>
|
||||
|
Before Width: | Height: | Size: 3.2 KiB |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1514189544355" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8186" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M176 1024l672 0c26.464 0 48-21.536 48-48l0-672c0-0.544-0.256-0.992-0.288-1.504-0.064-0.736-0.256-1.376-0.416-2.08-0.544-2.272-1.472-4.32-2.88-6.112-0.224-0.288-0.192-0.64-0.416-0.928l-256-288c-0.096-0.096-0.224-0.096-0.32-0.192-1.92-2.048-4.352-3.456-7.136-4.288-0.608-0.192-1.152-0.256-1.792-0.352-0.928-0.16-1.792-0.544-2.752-0.544l-448 0c-26.464 0-48 21.536-48 48l0 928c0 26.464 21.536 48 48 48zM640 58.08l204.384 229.92-188.384 0c-7.04 0-16-13.44-16-24l0-205.92zM160 48c0-8.832 7.2-16 16-16l432 0 0 232c0 25.888 20.96 56 48 56l208 0 0 656c0 8.832-7.2 16-16 16l-672 0c-8.96 0-16-7.04-16-16l0-928zM304 448l416 0c8.832 0 16-7.168 16-16s-7.168-16-16-16l-416 0c-8.832 0-16 7.168-16 16s7.168 16 16 16zM304 576l416 0c8.832 0 16-7.168 16-16s-7.168-16-16-16l-416 0c-8.832 0-16 7.168-16 16s7.168 16 16 16zM304 320l192 0c8.832 0 16-7.168 16-16s-7.168-16-16-16l-192 0c-8.832 0-16 7.168-16 16s7.168 16 16 16zM304 704l416 0c8.832 0 16-7.168 16-16s-7.168-16-16-16l-416 0c-8.832 0-16 7.168-16 16s7.168 16 16 16zM304 832l416 0c8.832 0 16-7.168 16-16s-7.168-16-16-16l-416 0c-8.832 0-16 7.168-16 16s7.168 16 16 16z" p-id="8187"></path></svg>
|
||||
|
Before Width: | Height: | Size: 1.5 KiB |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1514189554639" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8871" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M80 34.4h864v960H80z" fill="#8095FF" p-id="8872"></path><path d="M176 112m-40 0a40 40 0 1 0 80 0 40 40 0 1 0-80 0Z" fill="#FFFFFF" p-id="8873"></path><path d="M176 272m-40 0a40 40 0 1 0 80 0 40 40 0 1 0-80 0Z" fill="#FFFFFF" p-id="8874"></path><path d="M176 432m-40 0a40 40 0 1 0 80 0 40 40 0 1 0-80 0Z" fill="#FFFFFF" p-id="8875"></path><path d="M176 592m-40 0a40 40 0 1 0 80 0 40 40 0 1 0-80 0Z" fill="#FFFFFF" p-id="8876"></path><path d="M176 752m-40 0a40 40 0 1 0 80 0 40 40 0 1 0-80 0Z" fill="#FFFFFF" p-id="8877"></path><path d="M176 912m-40 0a40 40 0 1 0 80 0 40 40 0 1 0-80 0Z" fill="#FFFFFF" p-id="8878"></path><path d="M864 112m-40 0a40 40 0 1 0 80 0 40 40 0 1 0-80 0Z" fill="#FFFFFF" p-id="8879"></path><path d="M864 272m-40 0a40 40 0 1 0 80 0 40 40 0 1 0-80 0Z" fill="#FFFFFF" p-id="8880"></path><path d="M864 432m-40 0a40 40 0 1 0 80 0 40 40 0 1 0-80 0Z" fill="#FFFFFF" p-id="8881"></path><path d="M864 592m-40 0a40 40 0 1 0 80 0 40 40 0 1 0-80 0Z" fill="#FFFFFF" p-id="8882"></path><path d="M864 752m-40 0a40 40 0 1 0 80 0 40 40 0 1 0-80 0Z" fill="#FFFFFF" p-id="8883"></path><path d="M864 912m-40 0a40 40 0 1 0 80 0 40 40 0 1 0-80 0Z" fill="#FFFFFF" p-id="8884"></path><path d="M648 508L436 362.4c-4.8-3.2-11.2-4-16.8-0.8-5.6 3.2-8.8 8.8-8.8 14.4v290.4c0 5.6 3.2 11.2 8.8 14.4 5.6 3.2 12 2.4 16.8-0.8L648 533.6c4.8-2.4 7.2-8 7.2-12.8 0-4.8-3.2-9.6-7.2-12.8z" fill="#FFFFFF" p-id="8885"></path></svg>
|
||||
|
Before Width: | Height: | Size: 1.8 KiB |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1543300142282" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2233" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M534.310676 38.36489h65.428495v88.119185c110.25913 0 220.507245 0.220298 330.766374-0.330447 18.615178 0.771043 39.113903-0.550745 55.305803 10.574302 11.345345 16.302049 10.023557 37.010058 10.783586 55.746399-0.550745 191.218631-0.319432 382.327112-0.220298 573.435594-0.550745 32.053353 2.974022 64.767601-3.745066 96.380358-4.405959 22.910988-31.943204 23.461733-50.338084 24.232776-114.114344 0.330447-228.338837-0.220298-342.56333 0v99.134083h-68.402517c-167.867047-30.511268-336.075555-58.709407-504.151885-88.119185v-770.932716c169.0897-29.420793 338.168386-58.389975 507.136922-88.240349z" fill="#207245" p-id="2234"></path><path d="M599.739171 159.528769h363.491636v693.938579h-363.491636v-66.089389h88.119184v-77.104286h-88.119184v-44.059592h88.119184v-77.104287h-88.119184v-44.059592h88.119184v-77.104287h-88.119184v-44.059592h88.119184v-77.104287h-88.119184v-44.059592h88.119184v-77.104287h-88.119184v-66.089388z" fill="#FFFFFF" p-id="2235"></path><path d="M731.917948 225.618157h154.208573v77.104287h-154.208573v-77.104287z" fill="#207245" p-id="2236"></path><path d="M353.44605 328.827752c24.89367-1.762384 49.897488-3.304469 74.901307-4.516108-29.409778 60.251492-58.929705 120.502985-88.879213 180.53418 30.29097 61.683429 61.242833 122.926263 91.632937 184.609692-26.545904-1.553101-52.98166-3.19432-79.527564-5.066854-18.725327-45.932125-41.526166-90.322164-54.964342-138.358134-14.969246 44.731501-36.349164 86.918561-53.521389 130.74684-24.122627-0.330447-48.256268-1.321788-72.367881-2.313129 28.308288-55.404937 55.625235-111.250471 84.814716-166.324961-24.783521-56.726725-52.001334-112.35196-77.544883-168.748238 24.232776-1.431937 48.454537-2.863874 72.698327-4.185662 16.412198 43.068251 34.366482 85.585758 47.925822 129.7555 14.506621-46.802302 36.216985-90.861894 54.832163-136.133126z" fill="#FFFFFF" p-id="2237"></path><path d="M731.917948 346.782036h154.208573v77.104287h-154.208573v-77.104287zM731.917948 467.945915h154.208573v77.104287h-154.208573v-77.104287zM731.917948 589.109794h154.208573v77.104287h-154.208573v-77.104287zM731.917948 710.273673h154.208573v77.104286h-154.208573v-77.104286z" fill="#207245" p-id="2238"></path></svg>
|
||||
|
Before Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 34 KiB |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1544085034574" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1828" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M0 512A512 512 0 1 0 512 0 512 512 0 0 0 0 512" fill="#36D49F" p-id="1829"></path><path d="M450.37037 552.580741l-115.105185-87.798519-50.820741 39.822222L483.365926 701.62963C517.499259 616.296296 625.777778 449.232593 758.518519 330.714074L746.382222 303.407407a1264.071111 1264.071111 0 0 0-296.011852 249.173334" fill="#FFFFFF" p-id="1830"></path></svg>
|
||||
|
Before Width: | Height: | Size: 743 B |
|
Before Width: | Height: | Size: 4.5 KiB |
@@ -1,15 +0,0 @@
|
||||
import Vue from 'vue'
|
||||
import $ from 'jquery'
|
||||
|
||||
//用于表单验证的指令
|
||||
Vue.directive('validator', {
|
||||
update: function (el, binding, vnode) {
|
||||
if (binding.value && binding.value !== binding.oldValue) {
|
||||
//先删除之前的,再寻求添加新的
|
||||
$(el).find('.validate').children().removeClass('border-danger').next('div').remove()
|
||||
$(el).find('.validate').children().addClass('border-danger').parent().append('<div class="text-danger mt5"><i class="fa fa-warning"></i>' + binding.value + '</div>')
|
||||
} else if (!binding.value) {
|
||||
$(el).find('.validate').children().removeClass('border-danger').next('div').remove()
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -1,8 +0,0 @@
|
||||
import * as numberFilters from './number'
|
||||
import * as timeFilters from './time'
|
||||
import * as strFilters from './str'
|
||||
|
||||
|
||||
export default {...numberFilters, ...timeFilters, ...strFilters}
|
||||
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
export function twoDigital(num) {
|
||||
|
||||
if (num) {
|
||||
if (parseInt(num) === num) {
|
||||
return num;
|
||||
} else {
|
||||
return num.toFixed(2);
|
||||
}
|
||||
} else {
|
||||
return num;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,132 +0,0 @@
|
||||
export function startWith(str, prefix) {
|
||||
if (typeof prefix === 'undefined' || prefix === null || prefix === '' || typeof str === 'undefined' || str === null || str.length === 0 || prefix.length > str.length) {
|
||||
return false
|
||||
}
|
||||
|
||||
return str.substr(0, prefix.length) === prefix
|
||||
}
|
||||
|
||||
export function endWith(str, suffix) {
|
||||
if (suffix === null || suffix === '' || str === null || str.length === 0 || suffix.length > str.length) {
|
||||
return false
|
||||
}
|
||||
|
||||
return str.substring(str.length - suffix.length) === suffix
|
||||
}
|
||||
|
||||
//获取文件后缀名
|
||||
export function getExtension(filename) {
|
||||
|
||||
if (!filename) {
|
||||
return ''
|
||||
}
|
||||
|
||||
let index1 = filename.lastIndexOf('.')
|
||||
if (index1 === -1) {
|
||||
return ''
|
||||
}
|
||||
let index2 = filename.length
|
||||
return filename.substring(index1, index2)
|
||||
}
|
||||
|
||||
//一个字符串包含子字符串
|
||||
export function containStr(father, child) {
|
||||
|
||||
if (father === null || father === '') {
|
||||
return false
|
||||
}
|
||||
return father.indexOf(child) !== -1
|
||||
}
|
||||
|
||||
//把一个大小转变成方便读的格式
|
||||
//human readable file size
|
||||
export function humanFileSize(bytes, si = false) {
|
||||
let thresh = si ? 1000 : 1024
|
||||
if (Math.abs(bytes) < thresh) {
|
||||
return bytes + ' B'
|
||||
}
|
||||
let units = si
|
||||
? ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']
|
||||
: ['kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
|
||||
let u = -1
|
||||
do {
|
||||
bytes /= thresh
|
||||
++u
|
||||
} while (Math.abs(bytes) >= thresh && u < units.length - 1)
|
||||
return bytes.toFixed(1) + ' ' + units[u]
|
||||
}
|
||||
|
||||
//把数字转换成中文大写金额
|
||||
export function numberCapital(num) {
|
||||
let strOutput = ''
|
||||
let strUnit = '仟佰拾亿仟佰拾万仟佰拾元角分'
|
||||
num += '00'
|
||||
let intPos = num.indexOf('.')
|
||||
if (intPos >= 0) {
|
||||
|
||||
num = num.substring(0, intPos) + num.substr(intPos + 1, 2)
|
||||
}
|
||||
strUnit = strUnit.substr(strUnit.length - num.length)
|
||||
for (let i = 0; i < num.length; i++) {
|
||||
|
||||
strOutput += '零壹贰叁肆伍陆柒捌玖'.substr(num.substr(i, 1), 1) + strUnit.substr(i, 1)
|
||||
}
|
||||
return strOutput.replace(/零角零分$/, '整').replace(/零[仟佰拾]/g, '零').replace(/零{2,}/g, '零').replace(/零([亿|万])/g, '$1').replace(/零+元/, '元').replace(/亿零{0,3}万/, '亿').replace(/^元/, '零元')
|
||||
}
|
||||
|
||||
//转换成首字母小写的驼峰法
|
||||
export function lowerCamel(str) {
|
||||
|
||||
if (!str) {
|
||||
console.error('不能转换空的驼峰字符串。')
|
||||
return str
|
||||
}
|
||||
|
||||
return str.replace(/(?:^\w|[A-Z]|\b\w)/g, function (letter, index) {
|
||||
return index === 0 ? letter.toLowerCase() : letter.toUpperCase()
|
||||
}).replace(/\s+/g, '')
|
||||
}
|
||||
|
||||
//转换成全部小写的使用 /分隔的字符串. 比如uploadToken会得到 /upload/token
|
||||
export function lowerSlash(str) {
|
||||
return str.replace(/(?:^\w|[A-Z]|\b\w)/g, function (letter, index) {
|
||||
return '/' + letter.toLowerCase()
|
||||
}).replace(/\s+/g, '')
|
||||
}
|
||||
|
||||
/*
|
||||
名词变复数归纳总结
|
||||
1.一般情况下,在名词后加“s”或“es”.
|
||||
2.以s,sh,ch,x结尾的名字,在名词后直接加“es”.
|
||||
3.以o结尾的名字,有两种情况:
|
||||
1)有生命的名词,在名词后加“es”.
|
||||
如:tomato-tomatoes potato-potatoes
|
||||
2)无生命的名字,在名字后加“s”.
|
||||
如:photo-photos radio-radios
|
||||
注意:使用java一律采用加“s”的策略
|
||||
4.以辅音字母+y结尾的名词,将y改变为i,再加-es.
|
||||
元音字母+y结尾的名词则直接加s
|
||||
*/
|
||||
export function toPlural(singular) {
|
||||
|
||||
if (!singular) {
|
||||
console.error('不能转换空字符为复数形式。')
|
||||
return singular
|
||||
}
|
||||
let length = singular.length
|
||||
//一个字母的直接加个s.
|
||||
if (length === 1) {
|
||||
return singular + 's'
|
||||
}
|
||||
|
||||
let lastChar = singular[length - 1]
|
||||
let lastSecondChar = singular[length - 2]
|
||||
if (lastChar === 's' || lastChar === 'x' || (lastChar === 'h' && (lastSecondChar === 's' || lastSecondChar === 'c'))) {
|
||||
return singular + 'es'
|
||||
} else if (lastChar === 'y' && (lastSecondChar !== 'a' && lastSecondChar !== 'e' && lastSecondChar !== 'i' && lastSecondChar !== 'o' && lastSecondChar !== 'u')) {
|
||||
return singular.substring(0, length - 1) + 'ies'
|
||||
} else {
|
||||
return singular + 's'
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,379 +0,0 @@
|
||||
//定义一个转换器
|
||||
/** * 对Date的扩展,将 Date 转化为指定格式的String * 月(M)、日(d)、12小时(h)、24小时(H)、分(m)、秒(s)、周(E)、季度(q)
|
||||
可以用 1-2 个占位符 * 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) * eg: * (new
|
||||
Date()).pattern("yyyy-MM-dd hh:mm:ss.S")==> 2006-07-02 08:09:04.423
|
||||
* (new Date()).pattern("yyyy-MM-dd E HH:mm:ss") ==> 2009-03-10 二 20:09:04
|
||||
* (new Date()).pattern("yyyy-MM-dd EE hh:mm:ss") ==> 2009-03-10 周二 08:09:04
|
||||
* (new Date()).pattern("yyyy-MM-dd EEE hh:mm:ss") ==> 2009-03-10 星期二 08:09:04
|
||||
* (new Date()).pattern("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
|
||||
*/
|
||||
if (!Date.prototype.format) {
|
||||
Date.prototype.format = function (fmt) {
|
||||
let o = {
|
||||
'M+': this.getMonth() + 1, //月份
|
||||
'd+': this.getDate(), //日
|
||||
'h+': this.getHours() % 12 === 0 ? 12 : this.getHours() % 12, //小时
|
||||
'H+': this.getHours(), //小时
|
||||
'm+': this.getMinutes(), //分
|
||||
's+': this.getSeconds(), //秒
|
||||
'q+': Math.floor((this.getMonth() + 3) / 3), //季度
|
||||
'S': this.getMilliseconds() //毫秒
|
||||
}
|
||||
let week = {
|
||||
'0': '/u65e5',
|
||||
'1': '/u4e00',
|
||||
'2': '/u4e8c',
|
||||
'3': '/u4e09',
|
||||
'4': '/u56db',
|
||||
'5': '/u4e94',
|
||||
'6': '/u516d'
|
||||
}
|
||||
if (/(y+)/.test(fmt)) {
|
||||
fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length))
|
||||
}
|
||||
if (/(E+)/.test(fmt)) {
|
||||
fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? '/u661f/u671f' : '/u5468') : '') + week[this.getDay() + ''])
|
||||
}
|
||||
for (let k in o) {
|
||||
if (new RegExp('(' + k + ')').test(fmt)) {
|
||||
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
|
||||
}
|
||||
}
|
||||
return fmt
|
||||
}
|
||||
}
|
||||
|
||||
if (!Date.prototype.setISO8601) {
|
||||
Date.prototype.setISO8601 = function (string) {
|
||||
let regexp = '([0-9]{4})(-([0-9]{2})(-([0-9]{2})' +
|
||||
'(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?' +
|
||||
'(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?'
|
||||
if (string) {
|
||||
let d = string.match(new RegExp(regexp))
|
||||
let offset = 0
|
||||
let date = new Date(d[1], 0, 1)
|
||||
|
||||
if (d[3]) {
|
||||
date.setMonth(d[3] - 1)
|
||||
}
|
||||
if (d[5]) {
|
||||
date.setDate(d[5])
|
||||
}
|
||||
if (d[7]) {
|
||||
date.setHours(d[7])
|
||||
}
|
||||
if (d[8]) {
|
||||
date.setMinutes(d[8])
|
||||
}
|
||||
if (d[10]) {
|
||||
date.setSeconds(d[10])
|
||||
}
|
||||
if (d[12]) {
|
||||
date.setMilliseconds(Number('0.' + d[12]) * 1000)
|
||||
}
|
||||
if (d[14]) {
|
||||
offset = (Number(d[16]) * 60) + Number(d[17])
|
||||
offset *= ((d[15] === '-') ? 1 : -1)
|
||||
}
|
||||
offset -= date.getTimezoneOffset()
|
||||
let time = (Number(date) + (offset * 60 * 1000))
|
||||
this.setTime(Number(time))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//将js的时间对象,转换成yyyy-MM-dd格式的字符串
|
||||
export function simpleDate (d, fallback = null) {
|
||||
if (d instanceof Date) {
|
||||
return d.format('yyyy-MM-dd')
|
||||
} else if (d === null) {
|
||||
return fallback
|
||||
} else {
|
||||
return 'Invalid Date:' + d
|
||||
}
|
||||
}
|
||||
|
||||
//将js的时间对象,转换成MM-dd格式的字符串
|
||||
export function simpleMiniDate (d, fallback = null) {
|
||||
if (d instanceof Date) {
|
||||
return d.format('MM-dd')
|
||||
} else if (d === null) {
|
||||
return fallback
|
||||
} else {
|
||||
return 'Invalid Date:' + d
|
||||
}
|
||||
}
|
||||
|
||||
//将js的时间对象,转换成yyyy-MM-dd HH:mm:ss格式的字符串
|
||||
export function simpleDateTime (d, fallback = null) {
|
||||
if (d instanceof Date) {
|
||||
return d.format('yyyy-MM-dd HH:mm:ss')
|
||||
} else if (d === null) {
|
||||
return fallback
|
||||
} else {
|
||||
console.error('Time format error:' + d)
|
||||
return 'Invalid Date:' + d
|
||||
}
|
||||
}
|
||||
|
||||
//将js的时间对象,转换成yyyy-MM-dd HH:mm格式的字符串
|
||||
export function simpleDateHourMinute (d, fallback = null) {
|
||||
if (d instanceof Date) {
|
||||
return d.format('yyyy-MM-dd HH:mm')
|
||||
} else if (d === null) {
|
||||
return fallback
|
||||
} else {
|
||||
console.error('Time format error:' + d)
|
||||
return 'Invalid Date:' + d
|
||||
}
|
||||
}
|
||||
|
||||
//将js的时间对象,转换成HH:mm:ss格式的字符串
|
||||
export function simpleTime (d, fallback = null) {
|
||||
|
||||
if (d instanceof Date) {
|
||||
return d.format('HH:mm:ss')
|
||||
} else if (d === null) {
|
||||
return fallback
|
||||
} else {
|
||||
return 'Invalid Date:' + d
|
||||
}
|
||||
}
|
||||
|
||||
//将js的时间对象,转换成HH:mm格式的字符串
|
||||
export function simpleMinute (d, fallback = null) {
|
||||
|
||||
if (d instanceof Date) {
|
||||
return d.format('HH:mm')
|
||||
} else if (d === null) {
|
||||
return fallback
|
||||
} else {
|
||||
return 'Invalid Date:' + d
|
||||
}
|
||||
}
|
||||
|
||||
//将js的时间对象,转换成dd格式的字符串
|
||||
export function simpleDay (d, fallback = null) {
|
||||
|
||||
if (d instanceof Date) {
|
||||
return d.format('dd')
|
||||
} else if (d === null) {
|
||||
return fallback
|
||||
} else {
|
||||
return 'Invalid Date:' + d
|
||||
}
|
||||
}
|
||||
|
||||
//将js的时间对象,转换成yyyy-MM格式的字符串
|
||||
export function simpleYearAndMonth (d, fallback = null) {
|
||||
|
||||
if (d instanceof Date) {
|
||||
return d.format('yyyy-MM')
|
||||
} else if (d === null) {
|
||||
return fallback
|
||||
} else {
|
||||
return 'Invalid Date:' + d
|
||||
}
|
||||
}
|
||||
|
||||
//将js的时间对象,转换成人性化的时间。当天:15:34 2017-04-03
|
||||
export function humanTime (d, fallback = null) {
|
||||
|
||||
let now = new Date()
|
||||
if (d instanceof Date) {
|
||||
|
||||
if (now.toDateString() === d.toDateString()) {
|
||||
return d.format('HH:mm')
|
||||
} else {
|
||||
return d.format('yyyy-MM-dd')
|
||||
}
|
||||
} else if (d === null) {
|
||||
return fallback
|
||||
} else {
|
||||
return 'Invalid Date:' + d
|
||||
}
|
||||
}
|
||||
|
||||
//将时间戳转换成易读的格式
|
||||
export function unixTimeStamp2simpleDate (timestamp) {
|
||||
|
||||
if ((typeof timestamp) === 'number') {
|
||||
let unixTimestamp = new Date(timestamp)
|
||||
|
||||
return unixTimestamp.format('yyyy-MM-dd')
|
||||
|
||||
} else {
|
||||
|
||||
return 'Invalid timestamp'
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//将时间戳转换成易读的格式
|
||||
export function unixTimeStamp2simpleDateTime (timestamp) {
|
||||
|
||||
if ((typeof timestamp) === 'number') {
|
||||
|
||||
let unixTimestamp = new Date(timestamp)
|
||||
|
||||
return unixTimestamp.format('yyyy-MM-dd HH:mm')
|
||||
|
||||
} else {
|
||||
|
||||
return 'Invalid timestamp'
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//将java时间字符串转换成易读的格式
|
||||
export function str2simpleDate (str) {
|
||||
if (!str) {
|
||||
return 'Invalid time'
|
||||
}
|
||||
|
||||
let d = new Date()
|
||||
d.setISO8601(str)
|
||||
|
||||
return d.format('yyyy-MM-dd')
|
||||
|
||||
}
|
||||
|
||||
//将java时间字符串转换成易读的格式
|
||||
export function str2simpleDateTime (str) {
|
||||
|
||||
if (!str) {
|
||||
return 'Invalid time'
|
||||
}
|
||||
|
||||
let d = new Date()
|
||||
d.setISO8601(str)
|
||||
return d.format('yyyy-MM-dd HH:mm')
|
||||
|
||||
}
|
||||
|
||||
//将java时间字符串转换成易读的格式
|
||||
export function str2DateTime (str) {
|
||||
|
||||
if (!str) {
|
||||
return 'Invalid time'
|
||||
}
|
||||
|
||||
let d = new Date()
|
||||
d.setISO8601(str)
|
||||
return d.format('yyyy-MM-dd HH:mm:ss')
|
||||
|
||||
}
|
||||
|
||||
//将java时间字符串转化成js date
|
||||
export function str2Date (str) {
|
||||
if (!str) {
|
||||
return null
|
||||
}
|
||||
|
||||
if (str instanceof Date) {
|
||||
return str
|
||||
}
|
||||
|
||||
//尝试转换时间戳
|
||||
if (typeof str === 'number') {
|
||||
return new Date(str)
|
||||
}
|
||||
//尝试转换yyyy-MM-dd HH:mm:ss 这种格式
|
||||
if (str.length === 19) {
|
||||
return new Date(Date.parse(str.replace(/-/g, '/')))
|
||||
}
|
||||
|
||||
//尝试转换yyyy-MM-dd这种格式
|
||||
if (str.length === 10) {
|
||||
return new Date(str)
|
||||
}
|
||||
|
||||
let d = new Date()
|
||||
try {
|
||||
d.setISO8601(str)
|
||||
return d
|
||||
} catch (e) {
|
||||
console.error('error date format:' + str)
|
||||
return null
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//将时间戳转换成易读的格式
|
||||
export function str2simpleTime (str) {
|
||||
|
||||
if (!str) {
|
||||
return 'Invalid time'
|
||||
}
|
||||
let d = new Date()
|
||||
d.setISO8601(str)
|
||||
return d.format('HH:mm')
|
||||
}
|
||||
|
||||
//将时间戳转换成毫秒形式
|
||||
export function str2timeStamp (str) {
|
||||
|
||||
if (!str) {
|
||||
return 'Invalid time'
|
||||
}
|
||||
let d = new Date()
|
||||
d.setISO8601(str)
|
||||
return d.getTime()
|
||||
}
|
||||
|
||||
//将日期转换成相对于今天的星期几。昨天,明天,今天
|
||||
export function date2Weekday (date) {
|
||||
let today = new Date()
|
||||
let dateYear = date.getFullYear()
|
||||
let dateMonth = date.getMonth()
|
||||
let dateDate = date.getDate()
|
||||
let todayYear = today.getFullYear()
|
||||
let todayMonth = today.getMonth()
|
||||
let todayDate = today.getDate()
|
||||
if (dateYear === todayYear && dateMonth === todayMonth && Math.abs(dateDate - todayDate) <= 1) {
|
||||
if (dateDate === todayDate) {
|
||||
return '今天'
|
||||
} else if (dateDate === (todayDate + 1)) {
|
||||
return '明天'
|
||||
} else if (dateDate === (todayDate - 1)) {
|
||||
return '昨天'
|
||||
}
|
||||
} else {
|
||||
if (date.getDay() === 0) {
|
||||
return '星期日'
|
||||
} else if (date.getDay() === 1) {
|
||||
return '星期一'
|
||||
} else if (date.getDay() === 2) {
|
||||
return '星期二'
|
||||
} else if (date.getDay() === 3) {
|
||||
return '星期三'
|
||||
} else if (date.getDay() === 4) {
|
||||
return '星期四'
|
||||
} else if (date.getDay() === 5) {
|
||||
return '星期五'
|
||||
} else if (date.getDay() === 6) {
|
||||
return '星期六'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//返回前一天的日期
|
||||
export function preDay (date) {
|
||||
return new Date(date.getTime() - 24 * 60 * 60 * 1000)
|
||||
}
|
||||
|
||||
//返回后一天的日期
|
||||
export function nextDay (date) {
|
||||
return new Date(date.getTime() + 24 * 60 * 60 * 1000)
|
||||
}
|
||||
|
||||
//这个是为了兼容pdf预览时pebble的过滤器。
|
||||
export function date (d, format) {
|
||||
|
||||
if (d instanceof Date) {
|
||||
return d.format(format)
|
||||
} else {
|
||||
return ''
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,59 +0,0 @@
|
||||
/* iCheck plugin Minimal skin, blue
|
||||
----------------------------------- */
|
||||
.icheckbox_minimal-blue,
|
||||
.iradio_minimal-blue {
|
||||
display: inline-block;
|
||||
*display: inline;
|
||||
vertical-align: middle;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
background: url(blue.png) no-repeat;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.icheckbox_minimal-blue {
|
||||
background-position: 0 0;
|
||||
}
|
||||
.icheckbox_minimal-blue.hover {
|
||||
background-position: -20px 0;
|
||||
}
|
||||
.icheckbox_minimal-blue.checked {
|
||||
background-position: -40px 0;
|
||||
}
|
||||
.icheckbox_minimal-blue.disabled {
|
||||
background-position: -60px 0;
|
||||
cursor: default;
|
||||
}
|
||||
.icheckbox_minimal-blue.checked.disabled {
|
||||
background-position: -80px 0;
|
||||
}
|
||||
|
||||
.iradio_minimal-blue {
|
||||
background-position: -100px 0;
|
||||
}
|
||||
.iradio_minimal-blue.hover {
|
||||
background-position: -120px 0;
|
||||
}
|
||||
.iradio_minimal-blue.checked {
|
||||
background-position: -140px 0;
|
||||
}
|
||||
.iradio_minimal-blue.disabled {
|
||||
background-position: -160px 0;
|
||||
cursor: default;
|
||||
}
|
||||
.iradio_minimal-blue.checked.disabled {
|
||||
background-position: -180px 0;
|
||||
}
|
||||
|
||||
/* HiDPI support */
|
||||
@media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) {
|
||||
.icheckbox_minimal-blue,
|
||||
.iradio_minimal-blue {
|
||||
background-image: url(blue@2x.png);
|
||||
-webkit-background-size: 200px 20px;
|
||||
background-size: 200px 20px;
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 6.4 KiB |
@@ -1,510 +0,0 @@
|
||||
/*!
|
||||
* iCheck v1.0.2, http://git.io/arlzeA
|
||||
* ===================================
|
||||
* Powerful jQuery and Zepto plugin for checkboxes and radio buttons customization
|
||||
*
|
||||
* (c) 2013 Damir Sultanov, http://fronteed.com
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
export default function iCheck($) {
|
||||
|
||||
// Cached vars
|
||||
var _iCheck = 'iCheck',
|
||||
_iCheckHelper = _iCheck + '-helper',
|
||||
_checkbox = 'checkbox',
|
||||
_radio = 'radio',
|
||||
_checked = 'checked',
|
||||
_unchecked = 'un' + _checked,
|
||||
_disabled = 'disabled',
|
||||
_determinate = 'determinate',
|
||||
_indeterminate = 'in' + _determinate,
|
||||
_update = 'update',
|
||||
_type = 'type',
|
||||
_click = 'click',
|
||||
_touch = 'touchbegin.i touchend.i',
|
||||
_add = 'addClass',
|
||||
_remove = 'removeClass',
|
||||
_callback = 'trigger',
|
||||
_label = 'label',
|
||||
_cursor = 'cursor',
|
||||
_mobile = /ipad|iphone|ipod|android|blackberry|windows phone|opera mini|silk/i.test(navigator.userAgent);
|
||||
|
||||
// Plugin init
|
||||
$.fn[_iCheck] = function (options, fire) {
|
||||
|
||||
// Walker
|
||||
var handle = 'input[type="' + _checkbox + '"], input[type="' + _radio + '"]',
|
||||
stack = $(),
|
||||
walker = function (object) {
|
||||
object.each(function () {
|
||||
var self = $(this);
|
||||
|
||||
if (self.is(handle)) {
|
||||
stack = stack.add(self);
|
||||
} else {
|
||||
stack = stack.add(self.find(handle));
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// Check if we should operate with some method
|
||||
if (/^(check|uncheck|toggle|indeterminate|determinate|disable|enable|update|destroy)$/i.test(options)) {
|
||||
|
||||
// Normalize method's name
|
||||
options = options.toLowerCase();
|
||||
|
||||
// Find checkboxes and radio buttons
|
||||
walker(this);
|
||||
|
||||
return stack.each(function () {
|
||||
var self = $(this);
|
||||
|
||||
if (options == 'destroy') {
|
||||
tidy(self, 'ifDestroyed');
|
||||
} else {
|
||||
operate(self, true, options);
|
||||
}
|
||||
|
||||
// Fire method's callback
|
||||
if ($.isFunction(fire)) {
|
||||
fire();
|
||||
}
|
||||
});
|
||||
|
||||
// Customization
|
||||
} else if (typeof options == 'object' || !options) {
|
||||
|
||||
// Check if any options were passed
|
||||
var settings = $.extend({
|
||||
checkedClass: _checked,
|
||||
disabledClass: _disabled,
|
||||
indeterminateClass: _indeterminate,
|
||||
labelHover: true
|
||||
}, options),
|
||||
|
||||
selector = settings.handle,
|
||||
hoverClass = settings.hoverClass || 'hover',
|
||||
focusClass = settings.focusClass || 'focus',
|
||||
activeClass = settings.activeClass || 'active',
|
||||
labelHover = !!settings.labelHover,
|
||||
labelHoverClass = settings.labelHoverClass || 'hover',
|
||||
|
||||
// Setup clickable area
|
||||
area = ('' + settings.increaseArea).replace('%', '') | 0;
|
||||
|
||||
// Selector limit
|
||||
if (selector == _checkbox || selector == _radio) {
|
||||
handle = 'input[type="' + selector + '"]';
|
||||
}
|
||||
|
||||
// Clickable area limit
|
||||
if (area < -50) {
|
||||
area = -50;
|
||||
}
|
||||
|
||||
// Walk around the selector
|
||||
walker(this);
|
||||
|
||||
return stack.each(function () {
|
||||
var self = $(this);
|
||||
|
||||
// If already customized
|
||||
tidy(self);
|
||||
|
||||
var node = this,
|
||||
id = node.id,
|
||||
|
||||
// Layer styles
|
||||
offset = -area + '%',
|
||||
size = 100 + (area * 2) + '%',
|
||||
layer = {
|
||||
position: 'absolute',
|
||||
top: offset,
|
||||
left: offset,
|
||||
display: 'block',
|
||||
width: size,
|
||||
height: size,
|
||||
margin: 0,
|
||||
padding: 0,
|
||||
background: '#fff',
|
||||
border: 0,
|
||||
opacity: 0
|
||||
},
|
||||
|
||||
// Choose how to hide input
|
||||
hide = _mobile ? {
|
||||
position: 'absolute',
|
||||
visibility: 'hidden'
|
||||
} : area ? layer : {
|
||||
position: 'absolute',
|
||||
opacity: 0
|
||||
},
|
||||
|
||||
// Get proper class
|
||||
className = node[_type] == _checkbox ? settings.checkboxClass || 'i' + _checkbox : settings.radioClass || 'i' + _radio,
|
||||
|
||||
// Find assigned labels
|
||||
label = $(_label + '[for="' + id + '"]').add(self.closest(_label)),
|
||||
|
||||
// Check ARIA option
|
||||
aria = !!settings.aria,
|
||||
|
||||
// Set ARIA placeholder
|
||||
ariaID = _iCheck + '-' + Math.random().toString(36).substr(2, 6),
|
||||
|
||||
// Parent & helper
|
||||
parent = '<div class="' + className + '" ' + (aria ? 'role="' + node[_type] + '" ' : ''),
|
||||
helper;
|
||||
|
||||
// Set ARIA "labelledby"
|
||||
if (aria) {
|
||||
label.each(function () {
|
||||
parent += 'aria-labelledby="';
|
||||
|
||||
if (this.id) {
|
||||
parent += this.id;
|
||||
} else {
|
||||
this.id = ariaID;
|
||||
parent += ariaID;
|
||||
}
|
||||
|
||||
parent += '"';
|
||||
});
|
||||
}
|
||||
|
||||
// Wrap input
|
||||
parent = self.wrap(parent + '/>')[_callback]('ifCreated').parent().append(settings.insert);
|
||||
|
||||
// Layer addition
|
||||
helper = $('<ins class="' + _iCheckHelper + '"/>').css(layer).appendTo(parent);
|
||||
|
||||
// Finalize customization
|
||||
self.data(_iCheck, {o: settings, s: self.attr('style')}).css(hide);
|
||||
!!settings.inheritClass && parent[_add](node.className || '');
|
||||
!!settings.inheritID && id && parent.attr('id', _iCheck + '-' + id);
|
||||
parent.css('position') == 'static' && parent.css('position', 'relative');
|
||||
operate(self, true, _update);
|
||||
|
||||
// Label events
|
||||
if (label.length) {
|
||||
label.on(_click + '.i mouseover.i mouseout.i ' + _touch, function (event) {
|
||||
var type = event[_type],
|
||||
item = $(this);
|
||||
|
||||
// Do nothing if input is disabled
|
||||
if (!node[_disabled]) {
|
||||
|
||||
// Click
|
||||
if (type == _click) {
|
||||
if ($(event.target).is('a')) {
|
||||
return;
|
||||
}
|
||||
operate(self, false, true);
|
||||
|
||||
// Hover state
|
||||
} else if (labelHover) {
|
||||
|
||||
// mouseout|touchend
|
||||
if (/ut|nd/.test(type)) {
|
||||
parent[_remove](hoverClass);
|
||||
item[_remove](labelHoverClass);
|
||||
} else {
|
||||
parent[_add](hoverClass);
|
||||
item[_add](labelHoverClass);
|
||||
}
|
||||
}
|
||||
|
||||
if (_mobile) {
|
||||
event.stopPropagation();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Input events
|
||||
self.on(_click + '.i focus.i blur.i keyup.i keydown.i keypress.i', function (event) {
|
||||
var type = event[_type],
|
||||
key = event.keyCode;
|
||||
|
||||
// Click
|
||||
if (type == _click) {
|
||||
return false;
|
||||
|
||||
// Keydown
|
||||
} else if (type == 'keydown' && key == 32) {
|
||||
if (!(node[_type] == _radio && node[_checked])) {
|
||||
if (node[_checked]) {
|
||||
off(self, _checked);
|
||||
} else {
|
||||
on(self, _checked);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
// Keyup
|
||||
} else if (type == 'keyup' && node[_type] == _radio) {
|
||||
!node[_checked] && on(self, _checked);
|
||||
|
||||
// Focus/blur
|
||||
} else if (/us|ur/.test(type)) {
|
||||
parent[type == 'blur' ? _remove : _add](focusClass);
|
||||
}
|
||||
});
|
||||
|
||||
// Helper events
|
||||
helper.on(_click + ' mousedown mouseup mouseover mouseout ' + _touch, function (event) {
|
||||
var type = event[_type],
|
||||
|
||||
// mousedown|mouseup
|
||||
toggle = /wn|up/.test(type) ? activeClass : hoverClass;
|
||||
|
||||
// Do nothing if input is disabled
|
||||
if (!node[_disabled]) {
|
||||
|
||||
// Click
|
||||
if (type == _click) {
|
||||
operate(self, false, true);
|
||||
|
||||
// Active and hover states
|
||||
} else {
|
||||
|
||||
// State is on
|
||||
if (/wn|er|in/.test(type)) {
|
||||
|
||||
// mousedown|mouseover|touchbegin
|
||||
parent[_add](toggle);
|
||||
|
||||
// State is off
|
||||
} else {
|
||||
parent[_remove](toggle + ' ' + activeClass);
|
||||
}
|
||||
|
||||
// Label hover
|
||||
if (label.length && labelHover && toggle == hoverClass) {
|
||||
|
||||
// mouseout|touchend
|
||||
label[/ut|nd/.test(type) ? _remove : _add](labelHoverClass);
|
||||
}
|
||||
}
|
||||
|
||||
if (_mobile) {
|
||||
event.stopPropagation();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
} else {
|
||||
return this;
|
||||
}
|
||||
};
|
||||
|
||||
// Do something with inputs
|
||||
function operate(input, direct, method) {
|
||||
var node = input[0],
|
||||
state = /er/.test(method) ? _indeterminate : /bl/.test(method) ? _disabled : _checked,
|
||||
active = method == _update ? {
|
||||
checked: node[_checked],
|
||||
disabled: node[_disabled],
|
||||
indeterminate: input.attr(_indeterminate) == 'true' || input.attr(_determinate) == 'false'
|
||||
} : node[state];
|
||||
|
||||
// Check, disable or indeterminate
|
||||
if (/^(ch|di|in)/.test(method) && !active) {
|
||||
on(input, state);
|
||||
|
||||
// Uncheck, enable or determinate
|
||||
} else if (/^(un|en|de)/.test(method) && active) {
|
||||
off(input, state);
|
||||
|
||||
// Update
|
||||
} else if (method == _update) {
|
||||
|
||||
// Handle states
|
||||
for (var each in active) {
|
||||
if (active[each]) {
|
||||
on(input, each, true);
|
||||
} else {
|
||||
off(input, each, true);
|
||||
}
|
||||
}
|
||||
|
||||
} else if (!direct || method == 'toggle') {
|
||||
|
||||
// Helper or label was clicked
|
||||
if (!direct) {
|
||||
input[_callback]('ifClicked');
|
||||
}
|
||||
|
||||
// Toggle checked state
|
||||
if (active) {
|
||||
if (node[_type] !== _radio) {
|
||||
off(input, state);
|
||||
}
|
||||
} else {
|
||||
on(input, state);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Add checked, disabled or indeterminate state
|
||||
function on(input, state, keep) {
|
||||
var node = input[0],
|
||||
parent = input.parent(),
|
||||
checked = state == _checked,
|
||||
indeterminate = state == _indeterminate,
|
||||
disabled = state == _disabled,
|
||||
callback = indeterminate ? _determinate : checked ? _unchecked : 'enabled',
|
||||
regular = option(input, callback + capitalize(node[_type])),
|
||||
specific = option(input, state + capitalize(node[_type]));
|
||||
|
||||
// Prevent unnecessary actions
|
||||
if (node[state] !== true) {
|
||||
|
||||
// Toggle assigned radio buttons
|
||||
if (!keep && state == _checked && node[_type] == _radio && node.name) {
|
||||
var form = input.closest('form'),
|
||||
inputs = 'input[name="' + node.name + '"]';
|
||||
|
||||
inputs = form.length ? form.find(inputs) : $(inputs);
|
||||
|
||||
inputs.each(function () {
|
||||
if (this !== node && $(this).data(_iCheck)) {
|
||||
off($(this), state);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Indeterminate state
|
||||
if (indeterminate) {
|
||||
|
||||
// Add indeterminate state
|
||||
node[state] = true;
|
||||
|
||||
// Remove checked state
|
||||
if (node[_checked]) {
|
||||
off(input, _checked, 'force');
|
||||
}
|
||||
|
||||
// Checked or disabled state
|
||||
} else {
|
||||
|
||||
// Add checked or disabled state
|
||||
if (!keep) {
|
||||
node[state] = true;
|
||||
}
|
||||
|
||||
// Remove indeterminate state
|
||||
if (checked && node[_indeterminate]) {
|
||||
off(input, _indeterminate, false);
|
||||
}
|
||||
}
|
||||
|
||||
// Trigger callbacks
|
||||
callbacks(input, checked, state, keep);
|
||||
}
|
||||
|
||||
// Add proper cursor
|
||||
if (node[_disabled] && !!option(input, _cursor, true)) {
|
||||
parent.find('.' + _iCheckHelper).css(_cursor, 'default');
|
||||
}
|
||||
|
||||
// Add state class
|
||||
parent[_add](specific || option(input, state) || '');
|
||||
|
||||
// Set ARIA attribute
|
||||
if (!!parent.attr('role') && !indeterminate) {
|
||||
parent.attr('aria-' + (disabled ? _disabled : _checked), 'true');
|
||||
}
|
||||
|
||||
// Remove regular state class
|
||||
parent[_remove](regular || option(input, callback) || '');
|
||||
}
|
||||
|
||||
// Remove checked, disabled or indeterminate state
|
||||
function off(input, state, keep) {
|
||||
var node = input[0],
|
||||
parent = input.parent(),
|
||||
checked = state == _checked,
|
||||
indeterminate = state == _indeterminate,
|
||||
disabled = state == _disabled,
|
||||
callback = indeterminate ? _determinate : checked ? _unchecked : 'enabled',
|
||||
regular = option(input, callback + capitalize(node[_type])),
|
||||
specific = option(input, state + capitalize(node[_type]));
|
||||
|
||||
// Prevent unnecessary actions
|
||||
if (node[state] !== false) {
|
||||
|
||||
// Toggle state
|
||||
if (indeterminate || !keep || keep == 'force') {
|
||||
node[state] = false;
|
||||
}
|
||||
|
||||
// Trigger callbacks
|
||||
callbacks(input, checked, callback, keep);
|
||||
}
|
||||
|
||||
// Add proper cursor
|
||||
if (!node[_disabled] && !!option(input, _cursor, true)) {
|
||||
parent.find('.' + _iCheckHelper).css(_cursor, 'pointer');
|
||||
}
|
||||
|
||||
// Remove state class
|
||||
parent[_remove](specific || option(input, state) || '');
|
||||
|
||||
// Set ARIA attribute
|
||||
if (!!parent.attr('role') && !indeterminate) {
|
||||
parent.attr('aria-' + (disabled ? _disabled : _checked), 'false');
|
||||
}
|
||||
|
||||
// Add regular state class
|
||||
parent[_add](regular || option(input, callback) || '');
|
||||
}
|
||||
|
||||
// Remove all traces
|
||||
function tidy(input, callback) {
|
||||
if (input.data(_iCheck)) {
|
||||
|
||||
// Remove everything except input
|
||||
input.parent().html(input.attr('style', input.data(_iCheck).s || ''));
|
||||
|
||||
// Callback
|
||||
if (callback) {
|
||||
input[_callback](callback);
|
||||
}
|
||||
|
||||
// Unbind events
|
||||
input.off('.i').unwrap();
|
||||
$(_label + '[for="' + input[0].id + '"]').add(input.closest(_label)).off('.i');
|
||||
}
|
||||
}
|
||||
|
||||
// Get some option
|
||||
function option(input, state, regular) {
|
||||
if (input.data(_iCheck)) {
|
||||
return input.data(_iCheck).o[state + (regular ? '' : 'Class')];
|
||||
}
|
||||
}
|
||||
|
||||
// Capitalize some string
|
||||
function capitalize(string) {
|
||||
return string.charAt(0).toUpperCase() + string.slice(1);
|
||||
}
|
||||
|
||||
// Executable handlers
|
||||
function callbacks(input, checked, callback, keep) {
|
||||
if (!keep) {
|
||||
if (checked) {
|
||||
input[_callback]('ifToggled');
|
||||
}
|
||||
|
||||
input[_callback]('ifChanged')[_callback]('if' + capitalize(callback));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,567 +0,0 @@
|
||||
// 准备翻译的语言环境信息
|
||||
let i18nMessage = {
|
||||
en: {
|
||||
eyeblueTank: "EyeblueTank",
|
||||
dashboard: {
|
||||
totalInvokeNum: 'Total PV',
|
||||
weekRate: 'Week',
|
||||
dayRate: 'Day',
|
||||
yesterdayInvoke: 'Yesterday PV',
|
||||
totalUV: 'Total UV',
|
||||
yesterdayUV: 'Yesterday UV',
|
||||
totalMatterNum: 'Total file num',
|
||||
yesterdayMatterNum: 'Yesterday File Num',
|
||||
totalFileSize: 'Total File Size',
|
||||
yesterdayMatterSize: 'Yesterday File Size',
|
||||
recentDayInvokeUV: 'Recent {0} days PV/UV',
|
||||
downloadMatterTop10: 'File download TOP10',
|
||||
activeIpTop10: 'Active IP TOP10',
|
||||
loading: 'loading...',
|
||||
date: 'Date',
|
||||
num: 'Num'
|
||||
},
|
||||
install: {
|
||||
configMysql: "Config MySQL",
|
||||
port: "Port",
|
||||
schema: "Schema",
|
||||
mysqlConnectionPass: "Connect MySQL Ok",
|
||||
testMysqlConnection: "Tes MySQL Connection",
|
||||
notice: "Notice",
|
||||
mysqlNotice1: "If Mysql and EyeblueTank installed on the same server, Host is 127.0.0.1",
|
||||
mysqlNotice2: "Your mysql account must have access to create table, or the second step will fail.",
|
||||
validateMysqlFirst: "Please test the mysql connection firstly.",
|
||||
preStep: "Pre Step",
|
||||
nextStep: "Next Step",
|
||||
createTable: "Craete Tables",
|
||||
installed: "Installed",
|
||||
installedButMissing: "Installed, but missing fields",
|
||||
toBeInstalled: "To be installed",
|
||||
allFields: "All fields",
|
||||
missingFields: "Missing fields",
|
||||
tableNotice: "'Create Tables' will trigger the following actions:",
|
||||
tableNotice1: "If a table not exist, create it.",
|
||||
tableNotice2: "If a table exist and no fields missing, nothing will do on this table.",
|
||||
tableNotice3: "If a table exist but some fields is missing, it will add the missing fields.",
|
||||
tableNotice4: "If a table exist and some fields not necessary, nothing will do on this table.",
|
||||
oneKeyCreate: "Create Tables",
|
||||
createFinish: "Finish Creating Tables",
|
||||
createTableSuccess: "Create tables successfully",
|
||||
crateTableFirst: "Please click 'Create Tables'",
|
||||
setAdministrator: "Config Administrator",
|
||||
detectAdministrator: "Detect the following administrators:",
|
||||
useOrCreateAdministrator: "You can validate one of them, or you can create a new one.",
|
||||
validateAdministrator: "Validate administrator",
|
||||
createAdministrator: "Create administrator",
|
||||
administratorUsername: "username",
|
||||
administratorPassword: "password",
|
||||
administratorRePassword: "Enter administrator password again",
|
||||
usernameRule: "EyeblueTank will use username as directory name, so only lowercase letter and number and _ is permitted.",
|
||||
congratulationInstall: "Congratulations, install successfully!",
|
||||
configAdminFirst: "Please config administrator first.",
|
||||
createAdminSuccess: "Create administrator successfully!",
|
||||
validateAdminSuccess: "Validate administrator successfully!",
|
||||
enterHome: "Click to enter home",
|
||||
charset: "Charset",
|
||||
},
|
||||
layout: {
|
||||
allFiles: "Files",
|
||||
myShare: "My Share",
|
||||
setting: "Setting",
|
||||
dashboard: "Dashboard",
|
||||
users: "Users",
|
||||
logout: "Logout",
|
||||
about: "About",
|
||||
install: "Install",
|
||||
dragMouseUp: "Put file here~"
|
||||
},
|
||||
matter: {
|
||||
file: "File",
|
||||
directory: "Directory",
|
||||
rename: "Rename",
|
||||
download: "Download",
|
||||
delete: "Delete",
|
||||
more: "More",
|
||||
share: "Share",
|
||||
close: "Close",
|
||||
size: "Size",
|
||||
preview: "Preview",
|
||||
move: "Move",
|
||||
upload: "Upload",
|
||||
create: "Create",
|
||||
createTime: "Create Time",
|
||||
updateTime: "Update Time",
|
||||
root: "Root",
|
||||
fillInPicLink: "Fill in Picture Link",
|
||||
rePick: "Re Choose",
|
||||
chooseImage: "Choose Image",
|
||||
uploadMode: "Upload Mode",
|
||||
fillMode: "Fill Mode",
|
||||
sizeExceedLimit: "File size exceed limit {0}>{1}",
|
||||
setPublic: "Set as public",
|
||||
setPrivate: "Set as private",
|
||||
copyLink: "Copy Link",
|
||||
enterName: "Please enter name",
|
||||
publicFileEveryoneCanVisit: "Public file, anyone can access",
|
||||
fileDetail: "File info",
|
||||
expire: "Expire",
|
||||
copyLinkAndCode: "Copy link and code",
|
||||
uploaded: "Uploaded",
|
||||
speed: "Speed",
|
||||
fileInfo: "File basic info",
|
||||
fileName: "Filename",
|
||||
path: "Path",
|
||||
copyPath: "Copy path",
|
||||
publicOrPrivate: "Public or private",
|
||||
privateInfo: "Private file, only self or auth user can download",
|
||||
publicInfo: "Public file, anyone can download",
|
||||
downloadTimes: "Download times",
|
||||
operations: "Operation",
|
||||
oneTimeLink: "One time link",
|
||||
oneTimeLinkInfo: "One time link will expire after downloading, click to copy",
|
||||
imageCache: "Image cache",
|
||||
searchFile: "Search file",
|
||||
noContentYet: "No content under this directory yet",
|
||||
allFiles: "All Files",
|
||||
newDirectory: "New directory",
|
||||
notChoose: "Not choose any file",
|
||||
exceed1000: "Exceed file limit 1000"
|
||||
},
|
||||
router: {
|
||||
allFiles: "All Files",
|
||||
fileDetail: "File Detail",
|
||||
login: "Login",
|
||||
autoLogin: "Auto Login",
|
||||
register: "Register",
|
||||
users: "Users",
|
||||
userDetail: "User Detail",
|
||||
changePassword: "Change password",
|
||||
editUser: "Edit User",
|
||||
createUser: "Create User",
|
||||
shareDetail: "Share Detail",
|
||||
myShare: "My Share",
|
||||
dashboard: "Dashboard",
|
||||
install: "Install",
|
||||
setting: "Setting"
|
||||
},
|
||||
preference: {
|
||||
websiteName: "Website Name",
|
||||
logo: "Logo",
|
||||
logoSquare: "Logo will be cropped to square size",
|
||||
onlyAllowIco: "Only .ico allowed",
|
||||
copyright: "Copyright (support html)",
|
||||
extraInfo: "Extra info (support html)",
|
||||
zipMaxNumLimit: "Zip download max num limit",
|
||||
zipMaxSizeLimit: "Zip download max size limit(B)",
|
||||
current: "Current",
|
||||
noLimit: "No limit",
|
||||
userDefaultSizeLimit: "User default size limit(B) ",
|
||||
docLink: "Document Link",
|
||||
tankDocLink: "https://tank-doc.eyeblue.cn",
|
||||
allowRegister: "Allow register",
|
||||
systemCleanup: "System Cleanup",
|
||||
systemCleanupDescription: "This operation will cleanup everything except administrators' data",
|
||||
systemCleanupPrompt: "This operation will cleanup everything except administrators' account data, please input login password.",
|
||||
officeUrl: "Office Preview Url",
|
||||
},
|
||||
share: {
|
||||
shareDetail: "Share Detail",
|
||||
shareTime: "Share Time",
|
||||
expireTime: "Expire Time",
|
||||
noExpire: "Never Expire",
|
||||
expired: "Expired",
|
||||
copyLinkAndCode: "Copy Link And Code",
|
||||
shareSuccess: "Share Successfully",
|
||||
sharer: "Share Person",
|
||||
link: "Link",
|
||||
copyLink: "Copy Link",
|
||||
code: "Code",
|
||||
copyCode: "Copy Code",
|
||||
copySuccess: "Copy Successfully",
|
||||
more: "More",
|
||||
cancelShare: "Cancel Share",
|
||||
getLink: "Get Link",
|
||||
allFiles: "All Files",
|
||||
noContent: "No content in this directory",
|
||||
enterCode: "Please enter code",
|
||||
getFiles: "Get Files",
|
||||
codeError: "Code Error",
|
||||
cancelPrompt: "This operation will cancel sharing forever, continue?",
|
||||
hour: "1 Hour",
|
||||
day: "1 Day",
|
||||
week: "1 Week",
|
||||
month: "1 Month",
|
||||
year: "1 Year",
|
||||
infinity: "Forever",
|
||||
},
|
||||
user: {
|
||||
redirecting: "Redirecting...",
|
||||
oldPassword: "Old Password",
|
||||
newPassword: "New Password",
|
||||
confirmNewPassword: "Confirm New Password",
|
||||
cannotBeNull: "Cannot be null!",
|
||||
passwordNotSame: "Old and new password not same!",
|
||||
role: "Role",
|
||||
singleFileSizeLimit: "Single File Limit",
|
||||
totalFileSizeLimit: "Total Space Limit",
|
||||
current: "Current",
|
||||
noLimit: "No Limit",
|
||||
totalFileSize: "Used Space",
|
||||
status: "Status",
|
||||
lastLoginIp: "Last Login Ip",
|
||||
lastLoginTime: "Last Login Time",
|
||||
resetPassword: "Reset Password",
|
||||
transfiguration: "Transfiguration",
|
||||
changePassword: "Edit Password",
|
||||
enterPassword: "Enter Password",
|
||||
profile: "Profile",
|
||||
avatar: "Avatar",
|
||||
username: "Username",
|
||||
password: "Password",
|
||||
confirmPassword: "Confirm Password",
|
||||
disabled: "Disabled",
|
||||
disableUser: "Disable this user",
|
||||
activeUser: "Active this user",
|
||||
welcomeLogin: "Welcome Login",
|
||||
logining: "Login...",
|
||||
login: "Login",
|
||||
toToRegister: "Go To Register",
|
||||
welcomeRegister: "Welcome Register",
|
||||
registering: "Login...",
|
||||
register: "Register",
|
||||
goToLogin: "Go To Login",
|
||||
roleGuest: "Guest",
|
||||
roleUser: "User",
|
||||
roleAdministrator: "Administrator",
|
||||
statusActive: "Ok",
|
||||
statusDisabled: "Disabled",
|
||||
webdavLink: "WebDAV Link",
|
||||
docLink: "Document Link",
|
||||
},
|
||||
model: {
|
||||
usernameRule: "only lowercase letter and number and _ is permitted.",
|
||||
passwordRule: "Password must have more than 6 chars",
|
||||
linkCodeText: "Link:{0} Code:{1}",
|
||||
copyLinkCodeSuccess: "Copy Link and Code successfully",
|
||||
transfigurationPromptText: "Transfiguration Prompt",
|
||||
transfigurationPrompt: "You will login as this user.Please visit this link in other browser, if in current browser, you will logout.{0}",
|
||||
},
|
||||
plugin: {
|
||||
cannotPreview: "Cannot Preview",
|
||||
emptyHintDefault: "No Items",
|
||||
everyPage: "Every Page",
|
||||
items: "Items",
|
||||
total: "Total",
|
||||
clickRefresh: "Click To Refresh",
|
||||
},
|
||||
selectAll: "All",
|
||||
edit: "Edit",
|
||||
createTime: "Create Time",
|
||||
download: "Download",
|
||||
close: "Close",
|
||||
required: "Required",
|
||||
cancel: "Cancel",
|
||||
delete: "Delete",
|
||||
actionCanNotRevertConfirm: "This action cannot be reverted, confirm?",
|
||||
prompt: "Prompt",
|
||||
confirm: "Confirm",
|
||||
copy: "Copy",
|
||||
showMore: "Show More",
|
||||
username: "Username",
|
||||
password: "Password",
|
||||
submit: "Submit",
|
||||
save: "Save",
|
||||
create: "Create",
|
||||
finish: "Finish",
|
||||
operationSuccess: "Operation success",
|
||||
notFound: "404 Not Found",
|
||||
login: "Login",
|
||||
logout: "Logout",
|
||||
yes: "Yes",
|
||||
no: "No",
|
||||
all: "All",
|
||||
refresh: "refresh",
|
||||
},
|
||||
zh: {
|
||||
eyeblueTank: "蓝眼云盘",
|
||||
dashboard: {
|
||||
totalInvokeNum: '总PV',
|
||||
weekRate: '周环比',
|
||||
dayRate: '日环比',
|
||||
yesterdayInvoke: '昨日PV',
|
||||
totalUV: '总UV',
|
||||
yesterdayUV: '昨日UV',
|
||||
totalMatterNum: '总文件数',
|
||||
yesterdayMatterNum: '昨日文件数',
|
||||
totalFileSize: '文件总大小',
|
||||
yesterdayMatterSize: '昨日文件大小',
|
||||
recentDayInvokeUV: '最近{0}日PV/UV',
|
||||
downloadMatterTop10: '文件下载量TOP10',
|
||||
activeIpTop10: '活跃IP TOP10',
|
||||
loading: '加载中…',
|
||||
date: '日期',
|
||||
num: '数量'
|
||||
},
|
||||
install: {
|
||||
configMysql: "配置MySQL",
|
||||
port: "端口",
|
||||
schema: "库名",
|
||||
mysqlConnectionPass: "MySQL连接测试通过",
|
||||
testMysqlConnection: "测试MySQL连接",
|
||||
notice: "注意",
|
||||
mysqlNotice1: "如果数据库和蓝眼云盘安装在同一台服务器,Host可以直接填写 127.0.0.1。",
|
||||
mysqlNotice2: "数据库账户的权限要求要能够创建表,否则第二步\"创建表\"操作会出错",
|
||||
validateMysqlFirst: "请首先验证数据库连接",
|
||||
preStep: "上一步",
|
||||
nextStep: "下一步",
|
||||
createTable: "创建表",
|
||||
installed: "已安装",
|
||||
installedButMissing: "已安装,字段缺失",
|
||||
toBeInstalled: "待安装",
|
||||
allFields: "所有字段",
|
||||
missingFields: "缺失字段",
|
||||
tableNotice: "点击\"一键建表\"后会按照以下逻辑执行操作:",
|
||||
tableNotice1: "如果某表不存在,则直接创建表。",
|
||||
tableNotice2: "如果某表存在并且字段齐全,那么不会对该表做任何操作。",
|
||||
tableNotice3: "如果某表存在但是部分字段缺失,那么会在该表中增加缺失字段。",
|
||||
tableNotice4: "如果表中有多余的字段(多余字段即不是蓝眼云盘需要的字段),不会做删除处理,而会维持原样。",
|
||||
oneKeyCreate: "一键建表",
|
||||
createFinish: "建表完成",
|
||||
createTableSuccess: "建表成功",
|
||||
crateTableFirst: "请首先点击'一键建表'",
|
||||
setAdministrator: "设置管理员",
|
||||
detectAdministrator: "检测到系统中已经存在有以下管理员:",
|
||||
useOrCreateAdministrator: "你可以使用其中一位管理员的用户名和密码进行验证,或者创建一位新的管理员账户",
|
||||
validateAdministrator: "验证管理员账户",
|
||||
createAdministrator: "创建管理员账户",
|
||||
administratorUsername: "创建管理员账户",
|
||||
administratorPassword: "管理员密码",
|
||||
administratorRePassword: "再次输入密码",
|
||||
usernameRule: "由于用户名将作为文件上传的目录,因此只允许字母数字以及\"_\"。",
|
||||
congratulationInstall: "恭喜,安装成功!",
|
||||
configAdminFirst: "请首先配置管理员信息!",
|
||||
createAdminSuccess: "创建管理员成功!",
|
||||
validateAdminSuccess: "验证管理员成功!",
|
||||
enterHome: "点击进入首页",
|
||||
charset: "编码",
|
||||
},
|
||||
layout: {
|
||||
allFiles: "所有文件",
|
||||
myShare: "我的分享",
|
||||
setting: "网站设置",
|
||||
dashboard: "监控统计",
|
||||
users: "用户列表",
|
||||
logout: "退出登录",
|
||||
about: "关于",
|
||||
install: "安装网站",
|
||||
dragMouseUp: "可以松手啦~"
|
||||
},
|
||||
matter: {
|
||||
file: "文件",
|
||||
directory: "文件夹",
|
||||
rename: "重命名",
|
||||
download: "下载",
|
||||
delete: "删除",
|
||||
more: "更多",
|
||||
share: "分享",
|
||||
close: "关闭",
|
||||
size: "大小",
|
||||
preview: "预览",
|
||||
move: "移动",
|
||||
upload: "上传",
|
||||
create: "新建",
|
||||
createTime: "创建日期",
|
||||
updateTime: "修改日期",
|
||||
root: "根目录",
|
||||
fillInPicLink: "请填写图片链接",
|
||||
rePick: "重新选择",
|
||||
chooseImage: "选择图片",
|
||||
uploadMode: "上传模式",
|
||||
fillMode: "填写模式",
|
||||
sizeExceedLimit: "文件大小超过了限制{0}>{1}",
|
||||
setPublic: "设置为公有文件",
|
||||
setPrivate: "设置为私有文件",
|
||||
copyLink: "复制下载链接",
|
||||
enterName: "请输入名称",
|
||||
publicFileEveryoneCanVisit: "公有文件,任何人可以访问",
|
||||
fileDetail: "文件详情",
|
||||
expire: "有效期",
|
||||
copyLinkAndCode: "复制链接+提取码",
|
||||
uploaded: "已上传",
|
||||
speed: "速度",
|
||||
fileInfo: "文件基本信息",
|
||||
fileName: "文件名",
|
||||
path: "路径",
|
||||
copyPath: "复制路径",
|
||||
publicOrPrivate: "文件公开性",
|
||||
privateInfo: "私有文件,只有自己或者授权的用户可以下载",
|
||||
publicInfo: "公有文件,任何人可以通过链接下载",
|
||||
downloadTimes: "下载次数",
|
||||
operations: "操作",
|
||||
oneTimeLink: "一次性链接",
|
||||
oneTimeLinkInfo: "使用一次性链接下载后链接立即失效,可以分享这个链接给朋友,点击复制",
|
||||
imageCache: "图片缓存",
|
||||
searchFile: "搜索文件",
|
||||
noContentYet: "该目录下暂无任何内容",
|
||||
allFiles: "全部文件",
|
||||
newDirectory: "新建文件夹",
|
||||
notChoose: "没有选择文件",
|
||||
exceed1000: "最多只能同时选取1000个文件"
|
||||
},
|
||||
router: {
|
||||
allFiles: "全部文件",
|
||||
fileDetail: "文件详情",
|
||||
login: "登录",
|
||||
autoLogin: "自动登录",
|
||||
register: "注册",
|
||||
users: "用户列表",
|
||||
userDetail: "用户详情",
|
||||
changePassword: "修改密码",
|
||||
editUser: "编辑用户",
|
||||
createUser: "创建用户",
|
||||
shareDetail: "分享详情",
|
||||
myShare: "我的分享",
|
||||
dashboard: "监控统计",
|
||||
install: "安装网站",
|
||||
setting: "网站设置"
|
||||
},
|
||||
preference: {
|
||||
websiteName: "网站名称",
|
||||
logo: "Logo",
|
||||
logoSquare: "logo请使用正方形图片,否则在显示时会裁剪成正方形",
|
||||
onlyAllowIco: "只允许上传.ico图标",
|
||||
copyright: "版权信息(支持html)",
|
||||
extraInfo: "备案信息(支持html)",
|
||||
zipMaxNumLimit: "zip下载数量限制",
|
||||
zipMaxSizeLimit: "zip下载大小限制(B)",
|
||||
current: "当前值",
|
||||
noLimit: "无限制",
|
||||
userDefaultSizeLimit: "用户默认总大小限制(B) ",
|
||||
docLink: "文档链接",
|
||||
tankDocLink: "https://tank-doc.eyeblue.cn/zh",
|
||||
allowRegister: "允许自主注册",
|
||||
systemCleanup: "重置系统",
|
||||
systemCleanupDescription: "重置系统将清空除管理员账号外所有数据",
|
||||
systemCleanupPrompt: "重置系统将清空除管理员账号外所有数据,事关重大,请输入登录密码",
|
||||
officeUrl: "Office预览链接",
|
||||
},
|
||||
share: {
|
||||
shareDetail: "分享详情",
|
||||
shareTime: "分享时间",
|
||||
expireTime: "失效时间",
|
||||
noExpire: "永久有效",
|
||||
expired: "已过期",
|
||||
copyLinkAndCode: "复制链接+提取码",
|
||||
shareSuccess: "分享成功",
|
||||
sharer: "分享者",
|
||||
link: "链接",
|
||||
copyLink: "复制链接",
|
||||
code: "提取码",
|
||||
copyCode: "复制提取码",
|
||||
copySuccess: "复制成功",
|
||||
more: "更多",
|
||||
cancelShare: "取消分享",
|
||||
getLink: "获取链接",
|
||||
allFiles: "全部文件",
|
||||
noContent: "该目录下暂无任何内容",
|
||||
enterCode: "请输入提取码",
|
||||
getFiles: "提取文件",
|
||||
codeError: "提取码错误",
|
||||
cancelPrompt: "此操作将永久取消该分享, 是否继续?",
|
||||
hour: "1小时",
|
||||
day: "1天",
|
||||
week: "1周",
|
||||
month: "1个月",
|
||||
year: "1年",
|
||||
infinity: "永远有效",
|
||||
},
|
||||
user: {
|
||||
redirecting: "正在转跳...",
|
||||
oldPassword: "旧密码",
|
||||
newPassword: "新密码",
|
||||
confirmNewPassword: "确认新密码",
|
||||
cannotBeNull: "不能为空!",
|
||||
passwordNotSame: "两次输入不一致!",
|
||||
role: "角色",
|
||||
singleFileSizeLimit: "单文件限制",
|
||||
totalFileSizeLimit: "总空间限制",
|
||||
current: "当前值",
|
||||
noLimit: "无限制",
|
||||
totalFileSize: "已使用空间",
|
||||
status: "状态",
|
||||
lastLoginIp: "上次登录IP",
|
||||
lastLoginTime: "上次登录时间",
|
||||
resetPassword: "重置密码",
|
||||
transfiguration: "变身",
|
||||
changePassword: "修改密码",
|
||||
enterPassword: "输入新密码",
|
||||
profile: "个人详情",
|
||||
avatar: "头像",
|
||||
username: "用户名",
|
||||
password: "密码",
|
||||
confirmPassword: "确认密码",
|
||||
disabled: "已禁用",
|
||||
disableUser: "禁用该用户",
|
||||
activeUser: "激活该用户",
|
||||
welcomeLogin: "欢迎登录",
|
||||
logining: "正在登录...",
|
||||
login: "登录",
|
||||
toToRegister: "立即注册",
|
||||
welcomeRegister: "欢迎注册",
|
||||
registering: "正在登录...",
|
||||
register: "登录",
|
||||
goToLogin: "前往登录",
|
||||
roleGuest: "游客",
|
||||
roleUser: "注册用户",
|
||||
roleAdministrator: "管理员",
|
||||
statusActive: "正常",
|
||||
statusDisabled: "禁用",
|
||||
webdavLink: "WebDAV 地址",
|
||||
docLink: "文档链接",
|
||||
},
|
||||
model: {
|
||||
usernameRule: "用户名只能包含字母,数字和\"_\"",
|
||||
passwordRule: "密码长度至少为6位",
|
||||
linkCodeText: "链接:{0} 提取码:{1}",
|
||||
copyLinkCodeSuccess: "复制链接提取码成功",
|
||||
transfigurationPromptText: "变身提示",
|
||||
transfigurationPrompt: "您将使用该用户的身份登录。请复制以下链接到其他浏览器访问,在当前浏览器访问会导致当前用户登录信息失效。{0}",
|
||||
},
|
||||
plugin: {
|
||||
cannotPreview: "无法预览",
|
||||
emptyHintDefault: "没有符合条件的项目",
|
||||
everyPage: "每页",
|
||||
items: "条",
|
||||
total: "共",
|
||||
clickRefresh: "点击刷新",
|
||||
},
|
||||
selectAll: "全选",
|
||||
edit: "修改",
|
||||
createTime: "创建时间",
|
||||
download: "下载",
|
||||
close: "关闭",
|
||||
required: "必填",
|
||||
cancel: "取消",
|
||||
delete: "删除",
|
||||
actionCanNotRevertConfirm: "此操作不可撤回, 是否继续?",
|
||||
prompt: "提示",
|
||||
confirm: "确定",
|
||||
copy: "复制",
|
||||
showMore: "显示更多",
|
||||
username: "用户名",
|
||||
password: "密码",
|
||||
submit: "提交",
|
||||
save: "保存",
|
||||
create: "创建",
|
||||
finish: "完成",
|
||||
operationSuccess: "操作成功",
|
||||
notFound: "404 页面找不到",
|
||||
login: "登录",
|
||||
logout: "退出",
|
||||
yes: "是",
|
||||
no: "否",
|
||||
all: "所有",
|
||||
refresh: "刷新",
|
||||
|
||||
}
|
||||
}
|
||||
export default i18nMessage
|
||||
@@ -1,14 +0,0 @@
|
||||
export default class BrowserUtil {
|
||||
|
||||
//只支持zh和en
|
||||
static browserLang() {
|
||||
let lang = navigator.language || navigator.userLanguage;//常规浏览器语言和IE浏览器
|
||||
lang = lang.substr(0, 2);//截取lang前2位字符
|
||||
if (lang === "zh") {
|
||||
return "zh"
|
||||
} else {
|
||||
return "en"
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,88 +0,0 @@
|
||||
import {getMimeType} from "./MimeUtil";
|
||||
import {endWith, getExtension, startWith} from "../filter/str";
|
||||
|
||||
export default class FileUtil {
|
||||
|
||||
|
||||
static isImage(name) {
|
||||
let mimeType = getMimeType(name)
|
||||
return startWith(mimeType, 'image');
|
||||
}
|
||||
|
||||
static isPdf(name) {
|
||||
let mimeType = getMimeType(name)
|
||||
return startWith(mimeType, 'application/pdf');
|
||||
}
|
||||
|
||||
static isText(name) {
|
||||
let mimeType = getMimeType(name)
|
||||
return startWith(mimeType, 'text');
|
||||
}
|
||||
|
||||
static isDoc(name) {
|
||||
let mimeType = getMimeType(name)
|
||||
return startWith(mimeType, 'application/msword') || startWith(mimeType, 'application/vnd.openxmlformats-officedocument.wordprocessingml.document');
|
||||
}
|
||||
|
||||
static isPpt(name) {
|
||||
let mimeType = getMimeType(name)
|
||||
return startWith(mimeType, 'application/vnd.ms-powerpoint') || startWith(mimeType, 'application/vnd.openxmlformats-officedocument.presentationml.presentation');
|
||||
}
|
||||
|
||||
static isXls(name) {
|
||||
let mimeType = getMimeType(name)
|
||||
return startWith(mimeType, 'application/vnd.ms-excel') || startWith(mimeType, 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
|
||||
}
|
||||
|
||||
static isAudio(name) {
|
||||
let mimeType = getMimeType(name)
|
||||
return startWith(mimeType, 'audio');
|
||||
}
|
||||
|
||||
static isVideo(name) {
|
||||
let mimeType = getMimeType(name)
|
||||
return startWith(mimeType, 'video');
|
||||
}
|
||||
|
||||
static isPsd(name) {
|
||||
let extension = getExtension(name)
|
||||
return extension === '.psd';
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据名字获取对应的图标。imageIcon传值了,那么图片格式采用imageIcon
|
||||
* @param name
|
||||
* @param idDir
|
||||
*/
|
||||
static getIcon(name, idDir = false) {
|
||||
|
||||
if (idDir) {
|
||||
return require("../../assets/img/file/folder.svg")
|
||||
}
|
||||
|
||||
if (FileUtil.isPdf(name)) {
|
||||
return require("../../assets/img/file/pdf.svg")
|
||||
} else if (FileUtil.isDoc(name)) {
|
||||
return require("../../assets/img/file/doc.svg")
|
||||
} else if (FileUtil.isPpt(name)) {
|
||||
return require("../../assets/img/file/ppt.svg")
|
||||
} else if (FileUtil.isXls(name)) {
|
||||
return require("../../assets/img/file/xls.svg")
|
||||
} else if (FileUtil.isAudio(name)) {
|
||||
return require("../../assets/img/file/audio.svg")
|
||||
} else if (FileUtil.isVideo(name) || getExtension(name) === ".mkv") {
|
||||
return require("../../assets/img/file/video.svg")
|
||||
} else if (FileUtil.isText(name)) {
|
||||
return require("../../assets/img/file/text.svg")
|
||||
} else if (FileUtil.isPsd(name)) {
|
||||
return require("../../assets/img/file/psd.svg")
|
||||
} else if (FileUtil.isImage(name)) {
|
||||
return require("../../assets/img/file/image.svg")
|
||||
} else if (endWith(name, 'zip') || endWith(name, 'rar') || endWith(name, '7z') || endWith(name, 'tar') || endWith(name, 'tar') || endWith(name, 'gz')) {
|
||||
return require("../../assets/img/file/archive.svg")
|
||||
} else {
|
||||
return require("../../assets/img/file/file.svg")
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
//应用的占位图片,到处都要用到。 生成网址:http://png-pixel.com/
|
||||
//rgb(240,240,240)
|
||||
import NumberUtil from "./NumberUtil";
|
||||
import {getExtension} from "./MimeUtil";
|
||||
|
||||
export var IMAGE_PLACEHOLDER_10_10 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAQAAAAnOwc2AAAAEUlEQVR42mP88J8BAzAOZUEAoc4TYb5Mv7IAAAAASUVORK5CYII=";
|
||||
|
||||
export var IMAGE_PLACEHOLDER_20_7 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAQAAACiwqWzAAAAEklEQVR42mP88J+BKMA4IhUCAJ1VDZFobOQaAAAAAElFTkSuQmCC";
|
||||
|
||||
export var IMAGE_PLACEHOLDER_4_3 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAQAAAAe/WZNAAAAEElEQVR42mP88J8BDBgxGABf8QXRk11CBwAAAABJRU5ErkJggg==";
|
||||
|
||||
export var IMAGE_PLACEHOLDER_16_9 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAJCAQAAACRI2S5AAAAEklEQVR42mP88J8BL2AcVQAGACSgEXHKPyH/AAAAAElFTkSuQmCC";
|
||||
|
||||
export var IMAGE_PLACEHOLDER_2_1 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAQAAAAeXLZtAAAAE0lEQVR42mP88J+BKMA4qpC+CgH2ThNhpeSxLAAAAABJRU5ErkJggg==";
|
||||
|
||||
|
||||
/**
|
||||
* 统一处理图片url。
|
||||
* @param url 原图片路径
|
||||
* @param origin 是否使用原图,一般在查看图片详情的时候使用
|
||||
* @param width 如果origin=false 裁剪的宽度
|
||||
* @param height 如果origin=false 裁剪的高度
|
||||
* @returns
|
||||
*/
|
||||
export function handleImageUrl(url = null, origin = false, width = 200, height = 200) {
|
||||
if (url) {
|
||||
if (origin) {
|
||||
return url;
|
||||
} else {
|
||||
//目前支持这几种格式的处理。 jpg jpeg png tif tiff bmp gif
|
||||
let supportExtensions = [".jpg", ".jpeg", ".png", ".tif", ".tiff", ".bmp", ".gif"];
|
||||
let extension = getExtension(url);
|
||||
if (supportExtensions.indexOf(extension) === -1) {
|
||||
return url;
|
||||
} else {
|
||||
return url + "?ir=fill_" + width + "_" + height
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (NumberUtil.fractionEqual(1, 1, width, height)) {
|
||||
return IMAGE_PLACEHOLDER_10_10;
|
||||
} else if (NumberUtil.fractionEqual(20, 7, width, height)) {
|
||||
return IMAGE_PLACEHOLDER_20_7;
|
||||
} else if (NumberUtil.fractionEqual(4, 3, width, height)) {
|
||||
return IMAGE_PLACEHOLDER_4_3;
|
||||
} else if (NumberUtil.fractionEqual(16, 9, width, height)) {
|
||||
return IMAGE_PLACEHOLDER_16_9;
|
||||
} else if (NumberUtil.fractionEqual(2, 1, width, height)) {
|
||||
return IMAGE_PLACEHOLDER_2_1;
|
||||
} else {
|
||||
return IMAGE_PLACEHOLDER_10_10;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
//将一个json字符串转换成 json 数组
|
||||
export function parseList(str) {
|
||||
if (!str) {
|
||||
return []
|
||||
}
|
||||
if (str instanceof Array) {
|
||||
return str;
|
||||
}
|
||||
try {
|
||||
let list = JSON.parse(str);
|
||||
if (list instanceof Array) {
|
||||
return list;
|
||||
} else {
|
||||
console.error("不能将" + str + "转换成数组");
|
||||
return [];
|
||||
}
|
||||
} catch (e) {
|
||||
console.error("不能将" + str + "转换成JSON");
|
||||
return [];
|
||||
}
|
||||
}
|
||||
@@ -1,639 +0,0 @@
|
||||
let MimeUtil = {
|
||||
'.323': 'text/h323',
|
||||
'.3g2': 'video/3gpp2',
|
||||
'.3gp': 'video/3gpp',
|
||||
'.3gp2': 'video/3gpp2',
|
||||
'.3gpp': 'video/3gpp',
|
||||
'.7z': 'application/x-7z-compressed',
|
||||
'.aa': 'audio/audible',
|
||||
'.AAC': 'audio/aac',
|
||||
'.aaf': 'application/octet-stream',
|
||||
'.aax': 'audio/vnd.audible.aax',
|
||||
'.ac3': 'audio/ac3',
|
||||
'.aca': 'application/octet-stream',
|
||||
'.accda': 'application/msaccess.addin',
|
||||
'.accdb': 'application/msaccess',
|
||||
'.accdc': 'application/msaccess.cab',
|
||||
'.accde': 'application/msaccess',
|
||||
'.accdr': 'application/msaccess.runtime',
|
||||
'.accdt': 'application/msaccess',
|
||||
'.accdw': 'application/msaccess.webapplication',
|
||||
'.accft': 'application/msaccess.ftemplate',
|
||||
'.acx': 'application/internet-property-stream',
|
||||
'.AddIn': 'text/xml',
|
||||
'.ade': 'application/msaccess',
|
||||
'.adobebridge': 'application/x-bridge-url',
|
||||
'.adp': 'application/msaccess',
|
||||
'.ADT': 'audio/vnd.dlna.adts',
|
||||
'.ADTS': 'audio/aac',
|
||||
'.afm': 'application/octet-stream',
|
||||
'.ai': 'application/postscript',
|
||||
'.aif': 'audio/aiff',
|
||||
'.aifc': 'audio/aiff',
|
||||
'.aiff': 'audio/aiff',
|
||||
'.air': 'application/vnd.adobe.air-application-installer-package+zip',
|
||||
'.amc': 'application/mpeg',
|
||||
'.anx': 'application/annodex',
|
||||
'.apk': 'application/vnd.android.package-archive',
|
||||
'.application': 'application/x-ms-application',
|
||||
'.art': 'image/x-jg',
|
||||
'.asa': 'application/xml',
|
||||
'.asax': 'application/xml',
|
||||
'.ascx': 'application/xml',
|
||||
'.asd': 'application/octet-stream',
|
||||
'.asf': 'video/x-ms-asf',
|
||||
'.ashx': 'application/xml',
|
||||
'.asi': 'application/octet-stream',
|
||||
'.asm': 'text/plain',
|
||||
'.asmx': 'application/xml',
|
||||
'.aspx': 'application/xml',
|
||||
'.asr': 'video/x-ms-asf',
|
||||
'.asx': 'video/x-ms-asf',
|
||||
'.atom': 'application/atom+xml',
|
||||
'.au': 'audio/basic',
|
||||
'.avi': 'video/x-msvideo',
|
||||
'.axa': 'audio/annodex',
|
||||
'.axs': 'application/olescript',
|
||||
'.axv': 'video/annodex',
|
||||
'.bas': 'text/plain',
|
||||
'.bat': 'text/plain',
|
||||
'.bcpio': 'application/x-bcpio',
|
||||
'.bin': 'application/octet-stream',
|
||||
'.bmp': 'image/bmp',
|
||||
'.c': 'text/plain',
|
||||
'.cab': 'application/octet-stream',
|
||||
'.caf': 'audio/x-caf',
|
||||
'.calx': 'application/vnd.ms-office.calx',
|
||||
'.cat': 'application/vnd.ms-pki.seccat',
|
||||
'.cc': 'text/plain',
|
||||
'.cd': 'text/plain',
|
||||
'.cdda': 'audio/aiff',
|
||||
'.cdf': 'application/x-cdf',
|
||||
'.cer': 'application/x-x509-ca-cert',
|
||||
'.cfg': 'text/plain',
|
||||
'.chm': 'application/octet-stream',
|
||||
'.class': 'application/x-java-applet',
|
||||
'.clp': 'application/x-msclip',
|
||||
'.cmd': 'text/plain',
|
||||
'.cmx': 'image/x-cmx',
|
||||
'.cnf': 'text/plain',
|
||||
'.cod': 'image/cis-cod',
|
||||
'.config': 'application/xml',
|
||||
'.contact': 'text/x-ms-contact',
|
||||
'.coverage': 'application/xml',
|
||||
'.cpio': 'application/x-cpio',
|
||||
'.cpp': 'text/plain',
|
||||
'.crd': 'application/x-mscardfile',
|
||||
'.crl': 'application/pkix-crl',
|
||||
'.crt': 'application/x-x509-ca-cert',
|
||||
'.cs': 'text/plain',
|
||||
'.csdproj': 'text/plain',
|
||||
'.csh': 'application/x-csh',
|
||||
'.csproj': 'text/plain',
|
||||
'.css': 'text/css',
|
||||
'.csv': 'application/csv',
|
||||
'.cur': 'application/octet-stream',
|
||||
'.cxx': 'text/plain',
|
||||
'.dat': 'application/octet-stream',
|
||||
'.datasource': 'application/xml',
|
||||
'.dbproj': 'text/plain',
|
||||
'.dcr': 'application/x-director',
|
||||
'.def': 'text/plain',
|
||||
'.deploy': 'application/octet-stream',
|
||||
'.der': 'application/x-x509-ca-cert',
|
||||
'.dgml': 'application/xml',
|
||||
'.dib': 'image/bmp',
|
||||
'.dif': 'video/x-dv',
|
||||
'.dir': 'application/x-director',
|
||||
'.disco': 'text/xml',
|
||||
'.divx': 'video/divx',
|
||||
'.dll': 'application/x-msdownload',
|
||||
'.dll.config': 'text/xml',
|
||||
'.dlm': 'text/dlm',
|
||||
'.doc': 'application/msword',
|
||||
'.docm': 'application/vnd.ms-word.document.macroEnabled.12',
|
||||
'.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
||||
'.dot': 'application/msword',
|
||||
'.dotm': 'application/vnd.ms-word.template.macroEnabled.12',
|
||||
'.dotx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
|
||||
'.dsp': 'application/octet-stream',
|
||||
'.dsw': 'text/plain',
|
||||
'.dtd': 'text/xml',
|
||||
'.dtsConfig': 'text/xml',
|
||||
'.dv': 'video/x-dv',
|
||||
'.dvi': 'application/x-dvi',
|
||||
'.dwf': 'drawing/x-dwf',
|
||||
'.dwg': 'application/acad',
|
||||
'.dwp': 'application/octet-stream',
|
||||
'.dxf': 'application/x-dxf',
|
||||
'.dxr': 'application/x-director',
|
||||
'.eml': 'message/rfc822',
|
||||
'.emz': 'application/octet-stream',
|
||||
'.eot': 'application/vnd.ms-fontobject',
|
||||
'.eps': 'application/postscript',
|
||||
'.etl': 'application/etl',
|
||||
'.etx': 'text/x-setext',
|
||||
'.evy': 'application/envoy',
|
||||
'.exe': 'application/octet-stream',
|
||||
'.exe.config': 'text/xml',
|
||||
'.fdf': 'application/vnd.fdf',
|
||||
'.fif': 'application/fractals',
|
||||
'.filters': 'application/xml',
|
||||
'.fla': 'application/octet-stream',
|
||||
'.flac': 'audio/flac',
|
||||
'.flr': 'x-world/x-vrml',
|
||||
'.flv': 'video/x-flv',
|
||||
'.fsscript': 'application/fsharp-script',
|
||||
'.fsx': 'application/fsharp-script',
|
||||
'.generictest': 'application/xml',
|
||||
'.gif': 'image/gif',
|
||||
'.gpx': 'application/gpx+xml',
|
||||
'.group': 'text/x-ms-group',
|
||||
'.gradle': 'text/plain',
|
||||
'.gsm': 'audio/x-gsm',
|
||||
'.gtar': 'application/x-gtar',
|
||||
'.gz': 'application/x-gzip',
|
||||
'.h': 'text/plain',
|
||||
'.hdf': 'application/x-hdf',
|
||||
'.hdml': 'text/x-hdml',
|
||||
'.hhc': 'application/x-oleobject',
|
||||
'.hhk': 'application/octet-stream',
|
||||
'.hhp': 'application/octet-stream',
|
||||
'.hlp': 'application/winhlp',
|
||||
'.hpp': 'text/plain',
|
||||
'.hqx': 'application/mac-binhex40',
|
||||
'.hta': 'application/hta',
|
||||
'.htc': 'text/x-component',
|
||||
'.htm': 'text/html',
|
||||
'.html': 'text/html',
|
||||
'.htt': 'text/webviewhtml',
|
||||
'.hxa': 'application/xml',
|
||||
'.hxc': 'application/xml',
|
||||
'.hxd': 'application/octet-stream',
|
||||
'.hxe': 'application/xml',
|
||||
'.hxf': 'application/xml',
|
||||
'.hxh': 'application/octet-stream',
|
||||
'.hxi': 'application/octet-stream',
|
||||
'.hxk': 'application/xml',
|
||||
'.hxq': 'application/octet-stream',
|
||||
'.hxr': 'application/octet-stream',
|
||||
'.hxs': 'application/octet-stream',
|
||||
'.hxt': 'text/html',
|
||||
'.hxv': 'application/xml',
|
||||
'.hxw': 'application/octet-stream',
|
||||
'.hxx': 'text/plain',
|
||||
'.i': 'text/plain',
|
||||
'.ico': 'image/x-icon',
|
||||
'.ics': 'application/octet-stream',
|
||||
'.idl': 'text/plain',
|
||||
'.ief': 'image/ief',
|
||||
'.iii': 'application/x-iphone',
|
||||
'.inc': 'text/plain',
|
||||
'.inf': 'application/octet-stream',
|
||||
'.ini': 'text/plain',
|
||||
'.inl': 'text/plain',
|
||||
'.ins': 'application/x-internet-signup',
|
||||
'.ipa': 'application/x-itunes-ipa',
|
||||
'.ipg': 'application/x-itunes-ipg',
|
||||
'.ipproj': 'text/plain',
|
||||
'.ipsw': 'application/x-itunes-ipsw',
|
||||
'.iqy': 'text/x-ms-iqy',
|
||||
'.isp': 'application/x-internet-signup',
|
||||
'.ite': 'application/x-itunes-ite',
|
||||
'.itlp': 'application/x-itunes-itlp',
|
||||
'.itms': 'application/x-itunes-itms',
|
||||
'.itpc': 'application/x-itunes-itpc',
|
||||
'.IVF': 'video/x-ivf',
|
||||
'.jar': 'application/java-archive',
|
||||
'.java': 'text/plain',
|
||||
'.jck': 'application/liquidmotion',
|
||||
'.jcz': 'application/liquidmotion',
|
||||
'.jfif': 'image/pjpeg',
|
||||
'.jnlp': 'application/x-java-jnlp-file',
|
||||
'.jpb': 'application/octet-stream',
|
||||
'.jpe': 'image/jpeg',
|
||||
'.jpeg': 'image/jpeg',
|
||||
'.jpg': 'image/jpeg',
|
||||
'.js': 'text/plain',
|
||||
'.json': 'application/json',
|
||||
'.jsx': 'text/jscript',
|
||||
'.jsxbin': 'text/plain',
|
||||
'.latex': 'application/x-latex',
|
||||
'.less': 'text/plain',
|
||||
'.library-ms': 'application/windows-library+xml',
|
||||
'.lit': 'application/x-ms-reader',
|
||||
'.loadtest': 'application/xml',
|
||||
'.lpk': 'application/octet-stream',
|
||||
'.lsf': 'video/x-la-asf',
|
||||
'.lst': 'text/plain',
|
||||
'.lsx': 'video/x-la-asf',
|
||||
'.lzh': 'application/octet-stream',
|
||||
'.m13': 'application/x-msmediaview',
|
||||
'.m14': 'application/x-msmediaview',
|
||||
'.m1v': 'video/mpeg',
|
||||
'.m2t': 'video/vnd.dlna.mpeg-tts',
|
||||
'.m2ts': 'video/vnd.dlna.mpeg-tts',
|
||||
'.m2v': 'video/mpeg',
|
||||
'.m3u': 'audio/x-mpegurl',
|
||||
'.m3u8': 'audio/x-mpegurl',
|
||||
'.m4a': 'audio/m4a',
|
||||
'.m4b': 'audio/m4b',
|
||||
'.m4p': 'audio/m4p',
|
||||
'.m4r': 'audio/x-m4r',
|
||||
'.m4v': 'video/x-m4v',
|
||||
'.mac': 'image/x-macpaint',
|
||||
'.mak': 'text/plain',
|
||||
'.man': 'application/x-troff-man',
|
||||
'.manifest': 'application/x-ms-manifest',
|
||||
'.map': 'text/plain',
|
||||
'.master': 'application/xml',
|
||||
'.mbox': 'application/mbox',
|
||||
'.md': 'text/plain',
|
||||
'.mda': 'application/msaccess',
|
||||
'.mdb': 'application/x-msaccess',
|
||||
'.mde': 'application/msaccess',
|
||||
'.mdp': 'application/octet-stream',
|
||||
'.me': 'application/x-troff-me',
|
||||
'.mfp': 'application/x-shockwave-flash',
|
||||
'.mht': 'message/rfc822',
|
||||
'.mhtml': 'message/rfc822',
|
||||
'.mid': 'audio/mid',
|
||||
'.midi': 'audio/mid',
|
||||
'.mix': 'application/octet-stream',
|
||||
'.mk': 'text/plain',
|
||||
'.mmf': 'application/x-smaf',
|
||||
'.mno': 'text/xml',
|
||||
'.mny': 'application/x-msmoney',
|
||||
'.mod': 'video/mpeg',
|
||||
'.mov': 'video/quicktime',
|
||||
'.movie': 'video/x-sgi-movie',
|
||||
'.mp2': 'video/mpeg',
|
||||
'.mp2v': 'video/mpeg',
|
||||
'.mp3': 'audio/mpeg',
|
||||
'.mp4': 'video/mp4',
|
||||
'.mp4v': 'video/mp4',
|
||||
'.mpa': 'video/mpeg',
|
||||
'.mpe': 'video/mpeg',
|
||||
'.mpeg': 'video/mpeg',
|
||||
'.mpf': 'application/vnd.ms-mediapackage',
|
||||
'.mpg': 'video/mpeg',
|
||||
'.mpp': 'application/vnd.ms-project',
|
||||
'.mpv2': 'video/mpeg',
|
||||
'.mqv': 'video/quicktime',
|
||||
'.ms': 'application/x-troff-ms',
|
||||
'.msg': 'application/vnd.ms-outlook',
|
||||
'.msi': 'application/octet-stream',
|
||||
'.mso': 'application/octet-stream',
|
||||
'.mts': 'video/vnd.dlna.mpeg-tts',
|
||||
'.mtx': 'application/xml',
|
||||
'.mvb': 'application/x-msmediaview',
|
||||
'.mvc': 'application/x-miva-compiled',
|
||||
'.mxp': 'application/x-mmxp',
|
||||
'.nc': 'application/x-netcdf',
|
||||
'.nsc': 'video/x-ms-asf',
|
||||
'.nws': 'message/rfc822',
|
||||
'.ocx': 'application/octet-stream',
|
||||
'.oda': 'application/oda',
|
||||
'.odb': 'application/vnd.oasis.opendocument.database',
|
||||
'.odc': 'application/vnd.oasis.opendocument.chart',
|
||||
'.odf': 'application/vnd.oasis.opendocument.formula',
|
||||
'.odg': 'application/vnd.oasis.opendocument.graphics',
|
||||
'.odh': 'text/plain',
|
||||
'.odi': 'application/vnd.oasis.opendocument.image',
|
||||
'.odl': 'text/plain',
|
||||
'.odm': 'application/vnd.oasis.opendocument.text-master',
|
||||
'.odp': 'application/vnd.oasis.opendocument.presentation',
|
||||
'.ods': 'application/vnd.oasis.opendocument.spreadsheet',
|
||||
'.odt': 'application/vnd.oasis.opendocument.text',
|
||||
'.oga': 'audio/ogg',
|
||||
'.ogg': 'audio/ogg',
|
||||
'.ogv': 'video/ogg',
|
||||
'.ogx': 'application/ogg',
|
||||
'.one': 'application/onenote',
|
||||
'.onea': 'application/onenote',
|
||||
'.onepkg': 'application/onenote',
|
||||
'.onetmp': 'application/onenote',
|
||||
'.onetoc': 'application/onenote',
|
||||
'.onetoc2': 'application/onenote',
|
||||
'.opus': 'audio/ogg',
|
||||
'.orderedtest': 'application/xml',
|
||||
'.osdx': 'application/opensearchdescription+xml',
|
||||
'.otf': 'application/font-sfnt',
|
||||
'.otg': 'application/vnd.oasis.opendocument.graphics-template',
|
||||
'.oth': 'application/vnd.oasis.opendocument.text-web',
|
||||
'.otp': 'application/vnd.oasis.opendocument.presentation-template',
|
||||
'.ots': 'application/vnd.oasis.opendocument.spreadsheet-template',
|
||||
'.ott': 'application/vnd.oasis.opendocument.text-template',
|
||||
'.oxt': 'application/vnd.openofficeorg.extension',
|
||||
'.p10': 'application/pkcs10',
|
||||
'.p12': 'application/x-pkcs12',
|
||||
'.p7b': 'application/x-pkcs7-certificates',
|
||||
'.p7c': 'application/pkcs7-mime',
|
||||
'.p7m': 'application/pkcs7-mime',
|
||||
'.p7r': 'application/x-pkcs7-certreqresp',
|
||||
'.p7s': 'application/pkcs7-signature',
|
||||
'.pbm': 'image/x-portable-bitmap',
|
||||
'.pcast': 'application/x-podcast',
|
||||
'.pct': 'image/pict',
|
||||
'.pcx': 'application/octet-stream',
|
||||
'.pcz': 'application/octet-stream',
|
||||
'.pdf': 'application/pdf',
|
||||
'.pfb': 'application/octet-stream',
|
||||
'.pfm': 'application/octet-stream',
|
||||
'.pfx': 'application/x-pkcs12',
|
||||
'.pgm': 'image/x-portable-graymap',
|
||||
'.pic': 'image/pict',
|
||||
'.pict': 'image/pict',
|
||||
'.pkgdef': 'text/plain',
|
||||
'.pkgundef': 'text/plain',
|
||||
'.pko': 'application/vnd.ms-pki.pko',
|
||||
'.pls': 'audio/scpls',
|
||||
'.pma': 'application/x-perfmon',
|
||||
'.pmc': 'application/x-perfmon',
|
||||
'.pml': 'application/x-perfmon',
|
||||
'.pmr': 'application/x-perfmon',
|
||||
'.pmw': 'application/x-perfmon',
|
||||
'.png': 'image/png',
|
||||
'.pnm': 'image/x-portable-anymap',
|
||||
'.pnt': 'image/x-macpaint',
|
||||
'.pntg': 'image/x-macpaint',
|
||||
'.pnz': 'image/png',
|
||||
'.pot': 'application/vnd.ms-powerpoint',
|
||||
'.potm': 'application/vnd.ms-powerpoint.template.macroEnabled.12',
|
||||
'.potx': 'application/vnd.openxmlformats-officedocument.presentationml.template',
|
||||
'.ppa': 'application/vnd.ms-powerpoint',
|
||||
'.ppam': 'application/vnd.ms-powerpoint.addin.macroEnabled.12',
|
||||
'.ppm': 'image/x-portable-pixmap',
|
||||
'.pps': 'application/vnd.ms-powerpoint',
|
||||
'.ppsm': 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',
|
||||
'.ppsx': 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
|
||||
'.ppt': 'application/vnd.ms-powerpoint',
|
||||
'.pptm': 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',
|
||||
'.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
|
||||
'.prf': 'application/pics-rules',
|
||||
'.prm': 'application/octet-stream',
|
||||
'.prx': 'application/octet-stream',
|
||||
'.ps': 'application/postscript',
|
||||
'.psc1': 'application/PowerShell',
|
||||
'.psd': 'application/octet-stream',
|
||||
'.psess': 'application/xml',
|
||||
'.psm': 'application/octet-stream',
|
||||
'.psp': 'application/octet-stream',
|
||||
'.pst': 'application/vnd.ms-outlook',
|
||||
'.pub': 'application/x-mspublisher',
|
||||
'.py': 'text/plain',
|
||||
'.pwz': 'application/vnd.ms-powerpoint',
|
||||
'.qht': 'text/x-html-insertion',
|
||||
'.qhtm': 'text/x-html-insertion',
|
||||
'.qt': 'video/quicktime',
|
||||
'.qti': 'image/x-quicktime',
|
||||
'.qtif': 'image/x-quicktime',
|
||||
'.qtl': 'application/x-quicktimeplayer',
|
||||
'.qxd': 'application/octet-stream',
|
||||
'.ra': 'audio/x-pn-realaudio',
|
||||
'.ram': 'audio/x-pn-realaudio',
|
||||
'.rar': 'application/x-rar-compressed',
|
||||
'.ras': 'image/x-cmu-raster',
|
||||
'.rat': 'application/rat-file',
|
||||
'.rc': 'text/plain',
|
||||
'.rc2': 'text/plain',
|
||||
'.rct': 'text/plain',
|
||||
'.rdlc': 'application/xml',
|
||||
'.reg': 'text/plain',
|
||||
'.resx': 'application/xml',
|
||||
'.rf': 'image/vnd.rn-realflash',
|
||||
'.rgb': 'image/x-rgb',
|
||||
'.rgs': 'text/plain',
|
||||
'.rm': 'application/vnd.rn-realmedia',
|
||||
'.rmi': 'audio/mid',
|
||||
'.rmp': 'application/vnd.rn-rn_music_package',
|
||||
'.roff': 'application/x-troff',
|
||||
'.rpm': 'audio/x-pn-realaudio-plugin',
|
||||
'.rqy': 'text/x-ms-rqy',
|
||||
'.rtf': 'application/rtf',
|
||||
'.rtx': 'text/richtext',
|
||||
'.rvt': 'application/octet-stream',
|
||||
'.ruleset': 'application/xml',
|
||||
'.s': 'text/plain',
|
||||
'.safariextz': 'application/x-safari-safariextz',
|
||||
'.scd': 'application/x-msschedule',
|
||||
'.scr': 'text/plain',
|
||||
'.sct': 'text/scriptlet',
|
||||
'.sd2': 'audio/x-sd2',
|
||||
'.sdp': 'application/sdp',
|
||||
'.sea': 'application/octet-stream',
|
||||
'.searchConnector-ms': 'application/windows-search-connector+xml',
|
||||
'.setpay': 'application/set-payment-initiation',
|
||||
'.setreg': 'application/set-registration-initiation',
|
||||
'.settings': 'application/xml',
|
||||
'.sgimb': 'application/x-sgimb',
|
||||
'.sgml': 'text/sgml',
|
||||
'.sh': 'text/plain',
|
||||
'.shar': 'application/x-shar',
|
||||
'.shtml': 'text/html',
|
||||
'.sit': 'application/x-stuffit',
|
||||
'.sitemap': 'application/xml',
|
||||
'.skin': 'application/xml',
|
||||
'.skp': 'application/x-koan',
|
||||
'.sldm': 'application/vnd.ms-powerpoint.slide.macroEnabled.12',
|
||||
'.sldx': 'application/vnd.openxmlformats-officedocument.presentationml.slide',
|
||||
'.slk': 'application/vnd.ms-excel',
|
||||
'.sln': 'text/plain',
|
||||
'.slupkg-ms': 'application/x-ms-license',
|
||||
'.smd': 'audio/x-smd',
|
||||
'.smi': 'application/octet-stream',
|
||||
'.smx': 'audio/x-smd',
|
||||
'.smz': 'audio/x-smd',
|
||||
'.snd': 'audio/basic',
|
||||
'.snippet': 'application/xml',
|
||||
'.snp': 'application/octet-stream',
|
||||
'.sol': 'text/plain',
|
||||
'.sor': 'text/plain',
|
||||
'.spc': 'application/x-pkcs7-certificates',
|
||||
'.spl': 'application/futuresplash',
|
||||
'.spx': 'audio/ogg',
|
||||
'.sql': 'text/plain',
|
||||
'.src': 'application/x-wais-source',
|
||||
'.srf': 'text/plain',
|
||||
'.SSISDeploymentManifest': 'text/xml',
|
||||
'.ssm': 'application/streamingmedia',
|
||||
'.sst': 'application/vnd.ms-pki.certstore',
|
||||
'.stl': 'application/vnd.ms-pki.stl',
|
||||
'.sv4cpio': 'application/x-sv4cpio',
|
||||
'.sv4crc': 'application/x-sv4crc',
|
||||
'.svc': 'application/xml',
|
||||
'.svg': 'image/svg+xml',
|
||||
'.swf': 'application/x-shockwave-flash',
|
||||
'.step': 'application/step',
|
||||
'.stp': 'application/step',
|
||||
'.t': 'application/x-troff',
|
||||
'.tar': 'application/x-tar',
|
||||
'.tcl': 'application/x-tcl',
|
||||
'.testrunconfig': 'application/xml',
|
||||
'.testsettings': 'application/xml',
|
||||
'.tex': 'application/x-tex',
|
||||
'.texi': 'application/x-texinfo',
|
||||
'.texinfo': 'application/x-texinfo',
|
||||
'.tgz': 'application/x-compressed',
|
||||
'.thmx': 'application/vnd.ms-officetheme',
|
||||
'.thn': 'application/octet-stream',
|
||||
'.tif': 'image/tiff',
|
||||
'.tiff': 'image/tiff',
|
||||
'.tlh': 'text/plain',
|
||||
'.tli': 'text/plain',
|
||||
'.toc': 'application/octet-stream',
|
||||
'.tr': 'application/x-troff',
|
||||
'.trm': 'application/x-msterminal',
|
||||
'.trx': 'application/xml',
|
||||
'.ts': 'video/vnd.dlna.mpeg-tts',
|
||||
'.tsv': 'text/tab-separated-values',
|
||||
'.ttf': 'application/font-sfnt',
|
||||
'.tts': 'video/vnd.dlna.mpeg-tts',
|
||||
'.txt': 'text/plain',
|
||||
'.u32': 'application/octet-stream',
|
||||
'.uls': 'text/iuls',
|
||||
'.user': 'text/plain',
|
||||
'.ustar': 'application/x-ustar',
|
||||
'.vb': 'text/plain',
|
||||
'.vbdproj': 'text/plain',
|
||||
'.vbk': 'video/mpeg',
|
||||
'.vbproj': 'text/plain',
|
||||
'.vbs': 'text/vbscript',
|
||||
'.vcf': 'text/x-vcard',
|
||||
'.vcproj': 'application/xml',
|
||||
'.vcs': 'text/plain',
|
||||
'.vcxproj': 'application/xml',
|
||||
'.vddproj': 'text/plain',
|
||||
'.vdp': 'text/plain',
|
||||
'.vdproj': 'text/plain',
|
||||
'.vdx': 'application/vnd.ms-visio.viewer',
|
||||
'.vml': 'text/xml',
|
||||
'.vscontent': 'application/xml',
|
||||
'.vsct': 'text/xml',
|
||||
'.vsd': 'application/vnd.visio',
|
||||
'.vsi': 'application/ms-vsi',
|
||||
'.vsix': 'application/vsix',
|
||||
'.vsixlangpack': 'text/xml',
|
||||
'.vsixmanifest': 'text/xml',
|
||||
'.vsmdi': 'application/xml',
|
||||
'.vspscc': 'text/plain',
|
||||
'.vss': 'application/vnd.visio',
|
||||
'.vsscc': 'text/plain',
|
||||
'.vssettings': 'text/xml',
|
||||
'.vssscc': 'text/plain',
|
||||
'.vst': 'application/vnd.visio',
|
||||
'.vstemplate': 'text/xml',
|
||||
'.vsto': 'application/x-ms-vsto',
|
||||
'.vsw': 'application/vnd.visio',
|
||||
'.vsx': 'application/vnd.visio',
|
||||
'.vtx': 'application/vnd.visio',
|
||||
'.wav': 'audio/wav',
|
||||
'.wave': 'audio/wav',
|
||||
'.wax': 'audio/x-ms-wax',
|
||||
'.wbk': 'application/msword',
|
||||
'.wbmp': 'image/vnd.wap.wbmp',
|
||||
'.wcm': 'application/vnd.ms-works',
|
||||
'.wdb': 'application/vnd.ms-works',
|
||||
'.wdp': 'image/vnd.ms-photo',
|
||||
'.webarchive': 'application/x-safari-webarchive',
|
||||
'.webm': 'video/webm',
|
||||
'.webp': 'image/webp', /* https"://en.wikipedia.org/wiki/WebP */
|
||||
'.webtest': 'application/xml',
|
||||
'.wiq': 'application/xml',
|
||||
'.wiz': 'application/msword',
|
||||
'.wks': 'application/vnd.ms-works',
|
||||
'.WLMP': 'application/wlmoviemaker',
|
||||
'.wlpginstall': 'application/x-wlpg-detect',
|
||||
'.wlpginstall3': 'application/x-wlpg3-detect',
|
||||
'.wm': 'video/x-ms-wm',
|
||||
'.wma': 'audio/x-ms-wma',
|
||||
'.wmd': 'application/x-ms-wmd',
|
||||
'.wmf': 'application/x-msmetafile',
|
||||
'.wml': 'text/vnd.wap.wml',
|
||||
'.wmlc': 'application/vnd.wap.wmlc',
|
||||
'.wmls': 'text/vnd.wap.wmlscript',
|
||||
'.wmlsc': 'application/vnd.wap.wmlscriptc',
|
||||
'.wmp': 'video/x-ms-wmp',
|
||||
'.wmv': 'video/x-ms-wmv',
|
||||
'.wmx': 'video/x-ms-wmx',
|
||||
'.wmz': 'application/x-ms-wmz',
|
||||
'.woff': 'application/font-woff',
|
||||
'.wpl': 'application/vnd.ms-wpl',
|
||||
'.wps': 'application/vnd.ms-works',
|
||||
'.wri': 'application/x-mswrite',
|
||||
'.wrl': 'x-world/x-vrml',
|
||||
'.wrz': 'x-world/x-vrml',
|
||||
'.wsc': 'text/scriptlet',
|
||||
'.wsdl': 'text/xml',
|
||||
'.wvx': 'video/x-ms-wvx',
|
||||
'.x': 'application/directx',
|
||||
'.xaf': 'x-world/x-vrml',
|
||||
'.xaml': 'application/xaml+xml',
|
||||
'.xap': 'application/x-silverlight-app',
|
||||
'.xbap': 'application/x-ms-xbap',
|
||||
'.xbm': 'image/x-xbitmap',
|
||||
'.xdr': 'text/plain',
|
||||
'.xht': 'application/xhtml+xml',
|
||||
'.xhtml': 'application/xhtml+xml',
|
||||
'.xla': 'application/vnd.ms-excel',
|
||||
'.xlam': 'application/vnd.ms-excel.addin.macroEnabled.12',
|
||||
'.xlc': 'application/vnd.ms-excel',
|
||||
'.xld': 'application/vnd.ms-excel',
|
||||
'.xlk': 'application/vnd.ms-excel',
|
||||
'.xll': 'application/vnd.ms-excel',
|
||||
'.xlm': 'application/vnd.ms-excel',
|
||||
'.xls': 'application/vnd.ms-excel',
|
||||
'.xlsb': 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',
|
||||
'.xlsm': 'application/vnd.ms-excel.sheet.macroEnabled.12',
|
||||
'.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
||||
'.xlt': 'application/vnd.ms-excel',
|
||||
'.xltm': 'application/vnd.ms-excel.template.macroEnabled.12',
|
||||
'.xltx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
|
||||
'.xlw': 'application/vnd.ms-excel',
|
||||
'.xml': 'text/xml',
|
||||
'.xmp': 'application/octet-stream',
|
||||
'.xmta': 'application/xml',
|
||||
'.xof': 'x-world/x-vrml',
|
||||
'.XOML': 'text/plain',
|
||||
'.xpm': 'image/x-xpixmap',
|
||||
'.xps': 'application/vnd.ms-xpsdocument',
|
||||
'.xrm-ms': 'text/xml',
|
||||
'.xsc': 'application/xml',
|
||||
'.xsd': 'text/xml',
|
||||
'.xsf': 'text/xml',
|
||||
'.xsl': 'text/xml',
|
||||
'.xslt': 'text/xml',
|
||||
'.xsn': 'application/octet-stream',
|
||||
'.xss': 'application/xml',
|
||||
'.xspf': 'application/xspf+xml',
|
||||
'.xtp': 'application/octet-stream',
|
||||
'.xwd': 'image/x-xwindowdump',
|
||||
'.z': 'application/x-compress',
|
||||
'.zip': 'application/zip'
|
||||
}
|
||||
|
||||
//根据一个文件名,获取其后缀名(一律使用小写),如果没有后缀名,那么返回""
|
||||
export function getExtension(filename) {
|
||||
|
||||
if (filename == null) {
|
||||
return "";
|
||||
}
|
||||
let dotIndex = filename.lastIndexOf(".");
|
||||
if (dotIndex === -1) {
|
||||
return "";
|
||||
} else {
|
||||
return filename.substring(dotIndex).toLowerCase();
|
||||
}
|
||||
}
|
||||
|
||||
//根据一个文件名(带后缀的),获取对应的文件类型。
|
||||
export function getMimeType(filename) {
|
||||
let extension = getExtension(filename);
|
||||
if (MimeUtil[extension]) {
|
||||
return MimeUtil[extension];
|
||||
} else {
|
||||
return "application/octet-stream";
|
||||
}
|
||||
}
|
||||
|
||||
export {MimeUtil}
|
||||
@@ -1,23 +0,0 @@
|
||||
export default class NumberUtil {
|
||||
|
||||
//求最大公约数
|
||||
static gcd(a, b) {
|
||||
return b ? NumberUtil.gcd(b, a % b) : a;
|
||||
};
|
||||
|
||||
//约分 numerator:分子 denominator:分母
|
||||
static reduce(numerator, denominator) {
|
||||
|
||||
let maxFactor = NumberUtil.gcd(numerator, denominator);
|
||||
return [numerator / maxFactor, denominator / maxFactor];
|
||||
}
|
||||
|
||||
//比较两个分数是否相等
|
||||
static fractionEqual(numerator1, denominator1, numerator2, denominator2) {
|
||||
let fraction1 = NumberUtil.reduce(numerator1, denominator1);
|
||||
let fraction2 = NumberUtil.reduce(numerator2, denominator2);
|
||||
|
||||
return fraction1[0] === fraction2[0] && fraction1[1] === fraction2[1];
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,207 +0,0 @@
|
||||
//check whether an obj is number.
|
||||
import {startWith} from "../filter/str";
|
||||
|
||||
export function isInteger(obj) {
|
||||
return typeof obj === 'number' && obj % 1 === 0
|
||||
}
|
||||
|
||||
export function isAndroid() {
|
||||
let u = navigator.memberAgent;
|
||||
|
||||
|
||||
//android终端
|
||||
return u.indexOf('Android') > -1 || u.indexOf('Adr') > -1;
|
||||
|
||||
}
|
||||
|
||||
export function isIOS() {
|
||||
let u = navigator.memberAgent;
|
||||
|
||||
//ios终端
|
||||
return !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
|
||||
}
|
||||
|
||||
|
||||
//判断当前是否是微信浏览器
|
||||
export function isWeixinBrowser() {
|
||||
let ua = navigator.userAgent.toLowerCase();
|
||||
if (ua) {
|
||||
if (ua.toLowerCase().indexOf("micromessenger") !== -1) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//判断当前是否是往测试数据库写内容
|
||||
export function isProductionEnv() {
|
||||
let host = window.location.host;
|
||||
return startWith(host, "erhua.howimetmrright.com");
|
||||
}
|
||||
|
||||
//check whether an obj is empty
|
||||
export function isEmptyObject(obj) {
|
||||
|
||||
for (let key in obj) {
|
||||
return false;
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
//两个id是否相等
|
||||
export function isIdEqual(id1, id2) {
|
||||
|
||||
return (id1 + "") === (id2 + "");
|
||||
|
||||
|
||||
}
|
||||
|
||||
export function isLocalStorageNameSupported() {
|
||||
let testKey = 'test';
|
||||
let storage = window.localStorage;
|
||||
try {
|
||||
storage.setItem(testKey, '1');
|
||||
storage.removeItem(testKey);
|
||||
return true;
|
||||
} catch (error) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export function readLocalStorage(key) {
|
||||
if (isLocalStorageNameSupported()) {
|
||||
return window.localStorage[key];
|
||||
} else {
|
||||
console.error("not support localStorage.");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
export function saveToLocalStorage(key, content) {
|
||||
if (isLocalStorageNameSupported()) {
|
||||
window.localStorage[key] = content;
|
||||
} else {
|
||||
console.error("not support localStorage.");
|
||||
}
|
||||
}
|
||||
|
||||
export function removeLocalStorage(key) {
|
||||
if (isLocalStorageNameSupported()) {
|
||||
window.localStorage.removeItem(key);
|
||||
} else {
|
||||
console.error("not support localStorage.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//获取一个function的名字
|
||||
export function functionName(func) {
|
||||
// Match:
|
||||
// - ^ the beginning of the string
|
||||
// - function the word 'function'
|
||||
// - \s+ at least some white space
|
||||
// - ([\w\$]+) capture one or more valid JavaScript identifier characters
|
||||
// - \s* optionally followed by white space (in theory there won't be any here,
|
||||
// so if performance is an issue this can be omitted[1]
|
||||
// - \( followed by an opening brace
|
||||
//
|
||||
let result = /^function\s+([\w\$]+)\s*\(/.exec(func.toString())
|
||||
|
||||
return result ? result[1] : '' // for an anonymous function there won't be a match
|
||||
}
|
||||
|
||||
/*
|
||||
高亮部分文字
|
||||
|
||||
DEMO:
|
||||
document.getElementById("setSelection").onmousedown = function() {
|
||||
var input = document.getElementById("i");
|
||||
setInputSelection(input, 4, 7);
|
||||
return false;
|
||||
};
|
||||
|
||||
<input id="i" type="text" value="One two three">
|
||||
<input type="button" value="Set selection" id="setSelection">
|
||||
*/
|
||||
export function setInputSelection(input, startPos, endPos) {
|
||||
input.focus();
|
||||
if (typeof input.selectionStart !== "undefined") {
|
||||
input.selectionStart = startPos;
|
||||
input.selectionEnd = endPos;
|
||||
} else if (document.selection && document.selection.createRange) {
|
||||
// IE branch
|
||||
input.select();
|
||||
let range = document.selection.createRange();
|
||||
range.collapse(true);
|
||||
range.moveEnd("character", endPos);
|
||||
range.moveStart("character", startPos);
|
||||
range.select();
|
||||
}
|
||||
}
|
||||
|
||||
//在字符串a后面追加字符串b
|
||||
export function appendString(a, b, seperator = "") {
|
||||
|
||||
if (a === null || typeof a !== "string") {
|
||||
return b;
|
||||
} else {
|
||||
return a + seperator + b;
|
||||
}
|
||||
}
|
||||
|
||||
//获取当前的host
|
||||
export function currentHost() {
|
||||
return window.location.protocol + "//" + window.location.host;
|
||||
}
|
||||
|
||||
|
||||
//调用某个函数,安全的调用
|
||||
export function safeCallback(callback) {
|
||||
if (typeof callback === "function") {
|
||||
return callback
|
||||
} else {
|
||||
return function () {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//https://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser
|
||||
// Opera 8.0+
|
||||
export function isOpera() {
|
||||
return (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
|
||||
|
||||
}
|
||||
|
||||
// Firefox 1.0+
|
||||
export function isFirefox() {
|
||||
return typeof InstallTrigger !== 'undefined';
|
||||
}
|
||||
|
||||
// Safari 3.0+ "[object HTMLElementConstructor]"
|
||||
export function isSafari() {
|
||||
return /constructor/i.test(window.HTMLElement) || (function (p) {
|
||||
return p.toString() === "[object SafariRemoteNotification]";
|
||||
})(!window['safari'] || (typeof safari !== 'undefined' && safari.pushNotification));
|
||||
|
||||
}
|
||||
|
||||
// Internet Explorer 6-11
|
||||
export function isIE() {
|
||||
return /*@cc_on!@*/false || !!document.documentMode;
|
||||
}
|
||||
|
||||
// Edge 20+
|
||||
export function isEdge() {
|
||||
return !isIE() && !!window.StyleMedia;
|
||||
}
|
||||
|
||||
// Chrome 1+
|
||||
export function isChrome() {
|
||||
return !!window.chrome && !!window.chrome.webstore;
|
||||
}
|
||||
|
||||
// Blink engine detection
|
||||
export function isBlink() {
|
||||
return (isChrome() || isOpera()) && !!window.CSS;
|
||||
}
|
||||
@@ -1,68 +0,0 @@
|
||||
<template>
|
||||
<span>
|
||||
<button v-show="!entity.editMode" :class="createClass" @click="callback" :disabled="entity.loading">
|
||||
<i :class="createIcon" v-show="!entity.loading"></i>
|
||||
<i class="fa fa-spinner fa-spin" v-show="entity.loading"></i>
|
||||
{{$t('create')}}
|
||||
</button>
|
||||
<button v-show="entity.editMode" :class="saveClass" @click="callback"
|
||||
:disabled="entity.loading">
|
||||
<i :class="saveIcon" v-show="!entity.loading"></i>
|
||||
<i class="fa fa-spinner fa-spin" v-show="entity.loading"></i>
|
||||
{{$t('save')}}
|
||||
</button>
|
||||
</span>
|
||||
|
||||
</template>
|
||||
<script>
|
||||
|
||||
/**
|
||||
* 该控件是提供创建和保存时候的功能。当正在保存或者正在创建的时候呈现菊花。
|
||||
*/
|
||||
import Base from "../model/base/Base";
|
||||
|
||||
export default{
|
||||
data(){
|
||||
return {
|
||||
}
|
||||
},
|
||||
watch: {},
|
||||
props: {
|
||||
entity: {
|
||||
type: Base,
|
||||
required: true
|
||||
},
|
||||
callback: {
|
||||
type: Function,
|
||||
required: true
|
||||
},
|
||||
createClass:{
|
||||
type: String,
|
||||
required: false,
|
||||
"default":"pull-right btn btn-primary btn-sm"
|
||||
},
|
||||
saveClass:{
|
||||
type: String,
|
||||
required: false,
|
||||
"default":"pull-right btn btn-primary btn-sm"
|
||||
},
|
||||
createIcon:{
|
||||
type: String,
|
||||
required: false,
|
||||
"default":"fa fa-plus"
|
||||
},
|
||||
saveIcon:{
|
||||
type: String,
|
||||
required: false,
|
||||
"default":"fa fa-save"
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
||||
},
|
||||
components: {},
|
||||
mounted(){
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -1,39 +0,0 @@
|
||||
<template>
|
||||
|
||||
<div>
|
||||
|
||||
<div class="text-center" v-show="loading">
|
||||
<i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
|
||||
</div>
|
||||
<div v-show="!loading">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
<script>
|
||||
|
||||
/**
|
||||
* 该控件是提供用户的超链接的。
|
||||
*/
|
||||
|
||||
|
||||
export default{
|
||||
data(){
|
||||
return {}
|
||||
},
|
||||
watch: {},
|
||||
props: {
|
||||
loading: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
"default": false
|
||||
}
|
||||
},
|
||||
methods: {},
|
||||
components: {},
|
||||
mounted(){
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -1,113 +0,0 @@
|
||||
<template>
|
||||
<div ref="dropdown" class="btn-group nb-btn-dropdown" :class="{'open':open,'align-right':alignRight}"
|
||||
@mouseover="mouseOver" @mouseout="mouseOut" @click="toggle">
|
||||
<button :class="btnClass" @blur="loseFocus">
|
||||
{{name}}
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<slot></slot>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import $ from "jquery";
|
||||
|
||||
export default {
|
||||
data () {
|
||||
return {
|
||||
open: false,
|
||||
isInside: false
|
||||
}
|
||||
},
|
||||
props: {
|
||||
name: {
|
||||
type: String,
|
||||
required: false,
|
||||
"default"() {
|
||||
return ""
|
||||
}
|
||||
},
|
||||
size: {
|
||||
type: String,
|
||||
required: false,
|
||||
"default"() {
|
||||
return ""
|
||||
}
|
||||
},
|
||||
color: {
|
||||
type: String,
|
||||
required: false,
|
||||
"default"() {
|
||||
return "default"
|
||||
}
|
||||
},
|
||||
alignRight: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
"default"() {
|
||||
return false
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
btnClass(){
|
||||
let style = "dropdown-toggle btn";
|
||||
if (this.size === "sm" || this.size === "lg") {
|
||||
style += " btn-" + this.size;
|
||||
} else {
|
||||
style += " ";
|
||||
}
|
||||
|
||||
if (this.color === "info" || this.color === "success" || this.color === "primary" ||
|
||||
this.color === "warning" || this.color === "danger" || this.color === "white" || this.color === "default"
|
||||
) {
|
||||
style += " btn-" + this.color
|
||||
}
|
||||
|
||||
return style;
|
||||
|
||||
},
|
||||
$dropdown(){
|
||||
return $(this.$refs.dropdown);
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
toggle(){
|
||||
this.open = !this.open;
|
||||
},
|
||||
loseFocus(){
|
||||
if (!this.isInside) {
|
||||
this.open = false;
|
||||
}
|
||||
},
|
||||
mouseOver(){
|
||||
this.isInside = true;
|
||||
},
|
||||
mouseOut(){
|
||||
this.isInside = false;
|
||||
}
|
||||
},
|
||||
mounted(){
|
||||
|
||||
this.$dropdown.find("ul").addClass("dropdown-menu");
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" rel="stylesheet/less">
|
||||
|
||||
.nb-btn-dropdown {
|
||||
&.align-right {
|
||||
|
||||
.dropdown-menu {
|
||||
left: auto;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
@@ -1,118 +0,0 @@
|
||||
<template>
|
||||
<div class="nb-check-checkbox">
|
||||
<input ref="check" type="checkbox" :value="val">
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import $ from "jquery"
|
||||
import iCheck from "../common/fork/icheck/icheck-vue"
|
||||
//css
|
||||
//import "icheck/skins/square/green.css";
|
||||
//import "icheck/skins/flat/blue.css";
|
||||
import "../common/fork/icheck/blue.css";
|
||||
|
||||
|
||||
iCheck($);
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {}
|
||||
},
|
||||
props: {
|
||||
value: {
|
||||
type: [String, Number, Boolean, Array],
|
||||
required: false,
|
||||
"default": false
|
||||
},
|
||||
val: {
|
||||
type: [String, Number, Boolean],
|
||||
required: false,
|
||||
"default": null
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
$check() {
|
||||
return $(this.$refs.check);
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
"value"() {
|
||||
this.refresh();
|
||||
},
|
||||
"val"() {
|
||||
this.refresh();
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
refresh() {
|
||||
|
||||
let state = "check";
|
||||
if (this.value instanceof Array) {
|
||||
if (this.value.indexOf(this.val) === -1) {
|
||||
state = "uncheck";
|
||||
} else {
|
||||
state = "check";
|
||||
}
|
||||
} else {
|
||||
state = this.value ? "check" : "uncheck";
|
||||
}
|
||||
this.$check.iCheck(state);
|
||||
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
let that = this;
|
||||
this.$check.iCheck({
|
||||
checkboxClass: 'icheckbox_minimal-blue',
|
||||
radioClass: 'iradio_minimal-blue'
|
||||
});
|
||||
this.refresh();
|
||||
|
||||
this.$check.on('ifChecked', function (event) {
|
||||
|
||||
if (that.value instanceof Array) {
|
||||
if (that.value.indexOf(that.val) === -1) {
|
||||
that.value.push(that.val);
|
||||
that.$emit('input', that.value);
|
||||
}
|
||||
} else {
|
||||
that.$emit('input', true);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
this.$check.on('ifUnchecked', function (event) {
|
||||
if (that.value instanceof Array) {
|
||||
let index = that.value.indexOf(that.val);
|
||||
if (index !== -1) {
|
||||
that.value.splice(index, 1);
|
||||
}
|
||||
that.$emit('input', that.value);
|
||||
} else {
|
||||
that.$emit('input', false);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="less" rel="stylesheet/less">
|
||||
.nb-check-checkbox {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 18px;
|
||||
line-height: 18px;
|
||||
border: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
<template>
|
||||
<transition
|
||||
v-on:before-enter="beforeEnter"
|
||||
v-on:enter="enter"
|
||||
v-on:leave="leave"
|
||||
v-bind:css="false"
|
||||
>
|
||||
<slot></slot>
|
||||
</transition>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Velocity from "velocity-animate";
|
||||
export default {
|
||||
methods: {
|
||||
beforeEnter: function (el) {
|
||||
|
||||
},
|
||||
enter: function (el, done) {
|
||||
|
||||
Velocity(el, "slideDown", {duration: 377})
|
||||
|
||||
},
|
||||
leave: function (el, done) {
|
||||
|
||||
Velocity(el, "slideUp", {duration: 377})
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
<style lang="less" rel="stylesheet/less">
|
||||
|
||||
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
@@ -1,251 +0,0 @@
|
||||
<template>
|
||||
|
||||
<div>
|
||||
<div class="text-center" v-show="pager.loading">
|
||||
<i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
|
||||
</div>
|
||||
|
||||
<div v-show="!pager.loading && pager.isEmpty() && !pager.errorMessage">
|
||||
<div class="italic text-center">
|
||||
{{emptyHint?emptyHint:$t('plugin.emptyHintDefault')}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="cursor" v-show="pager.errorMessage" @click="refresh">
|
||||
|
||||
<div class="text-center">
|
||||
<div>
|
||||
<img class="img-md" src="../assets/img/error.png"/>
|
||||
</div>
|
||||
<div class="mt10">
|
||||
{{pager.errorMessage}}
|
||||
</div>
|
||||
<div>
|
||||
{{$t('plugin.clickRefresh')}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="showPagination" class="text-center">
|
||||
<nav>
|
||||
<ul class="pagination mt20 mb0">
|
||||
|
||||
<li v-show="!isFirstPage">
|
||||
<a href="javascript:void(0)" @click.stop.prevent="changePage(0)">«</a>
|
||||
</li>
|
||||
<li v-show="!isFirstPage">
|
||||
<a href="javascript:void(0)" @click.stop.prevent="changePage(pager.page-1)">‹</a>
|
||||
</li>
|
||||
|
||||
<li v-for="indicator in indicators" :class="{active: indicator === pager.page+1}">
|
||||
<a href="javascript:void(0)" @click.stop.prevent="changePage(indicator-1)">{{indicator}}</a>
|
||||
</li>
|
||||
|
||||
<li v-show="!isLastPage">
|
||||
<a href="javascript:void(0)" @click.stop.prevent="changePage(pager.page+1)">›</a>
|
||||
</li>
|
||||
<li v-show="!isLastPage">
|
||||
<a href="javascript:void(0)" @click.stop.prevent="changePage(totalPages-1)">»</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="text-center mt10" v-show="pager.totalItems > pager.pageSize">
|
||||
{{$t('plugin.everyPage')}}
|
||||
<select v-model="pageSize">
|
||||
<option v-for="size in pageSizeOptions" v-if="size !== pager.pageSize" :value="size">{{size}}</option>
|
||||
|
||||
<option :value="pager.pageSize" disabled>
|
||||
{{pager.pageSize}}
|
||||
</option>
|
||||
|
||||
</select>
|
||||
{{$t('plugin.items')}}
|
||||
|
||||
{{$t('plugin.total')}} {{pager.totalItems}} {{$t('plugin.items')}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import Pager from "../model/base/Pager";
|
||||
import Vue from "vue"
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
//引入内部的pageSize变量,防止enableHistory出现两次刷新。并且强制置为page=0. -1表示未初始化。
|
||||
pageSize: -1,
|
||||
pageSizeOptions: [5, 10, 15, 20, 30, 50]
|
||||
}
|
||||
},
|
||||
props: {
|
||||
pager: {
|
||||
type: Pager,
|
||||
required: true,
|
||||
validator: function (value) {
|
||||
|
||||
if (!value.offset) {
|
||||
value.offset = 3;
|
||||
}
|
||||
value.offset = parseInt(value.offset);
|
||||
|
||||
return true;
|
||||
}
|
||||
},
|
||||
callback: {
|
||||
type: Function,
|
||||
required: true
|
||||
},
|
||||
emptyHint: {
|
||||
type: String,
|
||||
required: false,
|
||||
"default": ""
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
showPagination() {
|
||||
return this.pager.totalItems > this.pager.pageSize;
|
||||
},
|
||||
isFirstPage() {
|
||||
return this.pager.page === 0;
|
||||
},
|
||||
totalPages() {
|
||||
return Math.ceil(this.pager.totalItems / this.pager.pageSize);
|
||||
},
|
||||
isLastPage() {
|
||||
return this.pager.page === this.totalPages - 1
|
||||
},
|
||||
colSize() {
|
||||
return this.pager.offset * 2 + 1;
|
||||
},
|
||||
indicators() {
|
||||
|
||||
let arr = [];
|
||||
//only one group. start from 1.
|
||||
if (this.totalPages <= this.colSize) {
|
||||
for (let i = 1; i < 1 + this.totalPages; i++) {
|
||||
arr.push(i);
|
||||
|
||||
}
|
||||
} else {
|
||||
|
||||
//many groups.
|
||||
//very close to beginning
|
||||
if ((this.pager.page + 1) * 2 < this.colSize) {
|
||||
for (let i = 1; i < 1 + this.colSize; i++) {
|
||||
arr.push(i)
|
||||
|
||||
}
|
||||
} else if (this.pager.page + 1 + this.pager.offset > this.totalPages) {
|
||||
|
||||
//very close to the end
|
||||
|
||||
for (let i = this.totalPages - this.colSize + 1; i < 1 + this.totalPages; i++) {
|
||||
arr.push(i)
|
||||
|
||||
}
|
||||
} else {
|
||||
|
||||
//at the middle
|
||||
for (let i = this.pager.page - this.pager.offset + 2; i < 2 + this.pager.page + this.pager.offset; i++) {
|
||||
arr.push(i)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return arr;
|
||||
}
|
||||
|
||||
},
|
||||
watch: {
|
||||
|
||||
//场外的改变,我们只做调整,但是不刷新。
|
||||
"pager.pageSize"(newVal, oldVal) {
|
||||
|
||||
if (newVal) {
|
||||
newVal = parseInt(newVal);
|
||||
} else {
|
||||
newVal = 10;
|
||||
}
|
||||
|
||||
if (oldVal) {
|
||||
oldVal = parseInt(oldVal);
|
||||
} else {
|
||||
oldVal = 10;
|
||||
}
|
||||
|
||||
this.pager.pageSize = newVal;
|
||||
|
||||
if (newVal !== oldVal) {
|
||||
this.pageSize = this.pager.pageSize;
|
||||
}
|
||||
},
|
||||
//场内主动改变,我们必须去刷新
|
||||
"pageSize"(newVal, oldVal) {
|
||||
|
||||
|
||||
if (oldVal === -1) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (newVal) {
|
||||
newVal = parseInt(newVal);
|
||||
} else {
|
||||
newVal = 10;
|
||||
}
|
||||
|
||||
if (oldVal) {
|
||||
oldVal = parseInt(oldVal);
|
||||
} else {
|
||||
oldVal = 10;
|
||||
}
|
||||
|
||||
if (newVal === oldVal) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.pageSize = newVal;
|
||||
|
||||
//保证是用户点击了select而改变的,而不是"pager.pageSize"改变了导致的。
|
||||
if (this.pager.pageSize !== this.pageSize) {
|
||||
this.pager.pageSize = this.pageSize;
|
||||
this.page = 0;
|
||||
this.refresh();
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
||||
changePage(page) {
|
||||
|
||||
if (this.pager.page !== page) {
|
||||
|
||||
this.pager.page = page;
|
||||
this.refresh();
|
||||
}
|
||||
|
||||
},
|
||||
refresh() {
|
||||
if (typeof this.callback === "function") {
|
||||
this.callback();
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.pageSize = this.pager.pageSize;
|
||||
|
||||
if (!this.pager.offset) {
|
||||
this.pager.offset = 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -1,91 +0,0 @@
|
||||
<template>
|
||||
<div class="nb-check-radio">
|
||||
<input ref="check" type="radio" :name="name" :value="val">
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
|
||||
|
||||
import $ from "jquery"
|
||||
import iCheck from "../common/fork/icheck/icheck-vue"
|
||||
|
||||
//css
|
||||
import "icheck/skins/square/green.css";
|
||||
|
||||
iCheck($);
|
||||
|
||||
export default {
|
||||
data(){
|
||||
return {}
|
||||
},
|
||||
props: {
|
||||
value: {
|
||||
type: [String, Number, Boolean],
|
||||
required: false,
|
||||
"default": null
|
||||
},
|
||||
val: {
|
||||
type: [String, Number, Boolean],
|
||||
required: true,
|
||||
"default": null
|
||||
},
|
||||
name: {
|
||||
type: String,
|
||||
required: true,
|
||||
"default": null
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
$check(){
|
||||
return $(this.$refs.check);
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
"value"(){
|
||||
this.refresh();
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
refresh(){
|
||||
let state = this.value === this.val ? "check" : "uncheck";
|
||||
this.$check.iCheck(state);
|
||||
}
|
||||
},
|
||||
mounted(){
|
||||
let that = this;
|
||||
this.$check.iCheck({
|
||||
checkboxClass: 'icheckbox_square-green',
|
||||
radioClass: 'iradio_square-green'
|
||||
});
|
||||
this.refresh();
|
||||
|
||||
this.$check.on('ifChecked', function (event) {
|
||||
|
||||
that.$emit('input', that.val);
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" rel="stylesheet/less">
|
||||
|
||||
|
||||
|
||||
.nb-check-radio{
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
border: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,91 +0,0 @@
|
||||
<template>
|
||||
<div class="panel" :class="'panel-'+type">
|
||||
<div class="panel-heading cursor" @click.stop.prevent="show = !show" :class="'font-color-'+colorType">
|
||||
<span v-if="title">{{title}}</span>
|
||||
<slot name="heading"></slot>
|
||||
<span class="pull-right">
|
||||
<slot name="actions"></slot>
|
||||
<span class="ml5">
|
||||
<i class="fa fa-angle-up" v-show="show"></i>
|
||||
<i class="fa fa-angle-down" v-show="!show"></i>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<NbExpanding>
|
||||
<div class="panel-body" v-show="show">
|
||||
<slot name="body"></slot>
|
||||
<slot></slot>
|
||||
</div>
|
||||
</NbExpanding>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import NbExpanding from './NbExpanding.vue'
|
||||
|
||||
export default {
|
||||
data () {
|
||||
return {
|
||||
show: true
|
||||
}
|
||||
},
|
||||
components: {
|
||||
NbExpanding
|
||||
},
|
||||
props: {
|
||||
title: {
|
||||
type: String,
|
||||
required: false
|
||||
},
|
||||
type: {
|
||||
type: String,
|
||||
required: false,
|
||||
'default' () {
|
||||
return 'default'
|
||||
}
|
||||
},
|
||||
colorType: {
|
||||
type: String,
|
||||
required: false,
|
||||
'default' () {
|
||||
return 'default'
|
||||
}
|
||||
},
|
||||
initShow: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
'default' () {
|
||||
return true
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {},
|
||||
mounted () {
|
||||
this.show = this.initShow
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
<style lang="less" rel="stylesheet/less">
|
||||
|
||||
@import "../assets/css/global/variables";
|
||||
|
||||
.font-color-primary {
|
||||
color: @brand-primary !important;
|
||||
}
|
||||
.font-color-info {
|
||||
color: @brand-info !important;
|
||||
}
|
||||
.font-color-danger {
|
||||
color: @brand-danger !important;
|
||||
}
|
||||
.font-color-warning {
|
||||
color: @brand-warning !important;
|
||||
}
|
||||
.font-color-success {
|
||||
color: @brand-success !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
@@ -1,268 +0,0 @@
|
||||
<template>
|
||||
<label class="nb-switch" :class="switcherClass">
|
||||
<input type="checkbox" :disabled="disabled" v-model="checked">
|
||||
<span class="slider" :class="type">
|
||||
<span class="small"></span>
|
||||
</span>
|
||||
</label>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default{
|
||||
//这个值代表的是开或者关的状态。
|
||||
model: {
|
||||
prop: 'toggle',
|
||||
event: 'toggle'
|
||||
},
|
||||
data(){
|
||||
return {
|
||||
checked: this.toggle
|
||||
}
|
||||
},
|
||||
|
||||
props: {
|
||||
toggle: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
"default": false
|
||||
},
|
||||
type: {
|
||||
type: String,
|
||||
required: false,
|
||||
"default": "primary"
|
||||
},
|
||||
size: {
|
||||
type: String,
|
||||
required: false,
|
||||
"default": "md"
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
"default": false
|
||||
},
|
||||
callback: {
|
||||
type: Function,
|
||||
required: false
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
switcherClass(){
|
||||
return "nb-switch-" + this.size + (this.disabled ? " disabled" : "");
|
||||
}
|
||||
},
|
||||
components: {},
|
||||
watch: {
|
||||
"checked"(newVal, oldVal){
|
||||
this.$emit('toggle', newVal);
|
||||
|
||||
if (typeof this.callback === "function") {
|
||||
this.callback(newVal);
|
||||
}
|
||||
},
|
||||
"toggle"(newVal, oldVal){
|
||||
if (newVal === this.checked) {
|
||||
//Event from inner.
|
||||
} else {
|
||||
//Event from outer
|
||||
this.checked = newVal;
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {},
|
||||
mounted(){
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="less" rel="stylesheet/less">
|
||||
|
||||
@import "../assets/css/global/variables.less";
|
||||
|
||||
.nb-switch {
|
||||
|
||||
@switch-default-color: @brand-gray;
|
||||
@switch-close-color: #fff;
|
||||
@switch-disable-color: #CECECE;
|
||||
@switch-width: 48;
|
||||
@switch-height: 28;
|
||||
@switch-padding: 0.5;
|
||||
@switch-slider-diameter: @switch-height - 2 * @switch-padding;
|
||||
@switch-width-px: unit(@switch-width, px);
|
||||
@switch-height-px: unit(@switch-height, px);
|
||||
@switch-padding-px: unit(@switch-padding, px);
|
||||
@switch-slider-diameter-px: unit(@switch-slider-diameter, px);
|
||||
@switch-slider-transform: @switch-width - 2 * @switch-padding - @switch-slider-diameter;
|
||||
@switch-slider-transform-px: unit(@switch-slider-transform, px);
|
||||
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
width: @switch-width-px;
|
||||
height: @switch-height-px;
|
||||
margin: 0;
|
||||
vertical-align: middle;
|
||||
opacity: 1;
|
||||
cursor: pointer;
|
||||
|
||||
&.disabled {
|
||||
opacity: 0.5;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
|
||||
input {
|
||||
display: none;
|
||||
}
|
||||
|
||||
input:checked {
|
||||
|
||||
& + .slider {
|
||||
|
||||
transition: border 0.4s, box-shadow 0.4s, background-color 1.2s;
|
||||
border-color: @switch-default-color;
|
||||
box-shadow: @switch-default-color 0 0 0 16px inset;
|
||||
background-color: @switch-default-color;
|
||||
|
||||
&.primary {
|
||||
border-color: @brand-primary;
|
||||
box-shadow: @brand-primary 0 0 0 16px inset;
|
||||
background-color: @brand-primary;
|
||||
}
|
||||
&.info {
|
||||
border-color: @brand-info;
|
||||
box-shadow: @brand-info 0 0 0 16px inset;
|
||||
background-color: @brand-info;
|
||||
}
|
||||
&.success {
|
||||
border-color: @brand-success;
|
||||
box-shadow: @brand-success 0 0 0 16px inset;
|
||||
background-color: @brand-success;
|
||||
}
|
||||
&.warning {
|
||||
border-color: @brand-warning;
|
||||
box-shadow: @brand-warning 0 0 0 16px inset;
|
||||
background-color: @brand-warning;
|
||||
}
|
||||
&.danger {
|
||||
border-color: @brand-danger;
|
||||
box-shadow: @brand-danger 0 0 0 16px inset;
|
||||
background-color: @brand-danger;
|
||||
}
|
||||
|
||||
& > .small {
|
||||
-webkit-transform: translateX(@switch-slider-transform-px);
|
||||
-ms-transform: translateX(@switch-slider-transform-px);
|
||||
transform: translateX(@switch-slider-transform-px);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* The slider */
|
||||
.slider {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
border-radius: @switch-height-px;
|
||||
|
||||
background-color: @switch-close-color;
|
||||
border: 1px solid rgb(223, 223, 223);
|
||||
box-sizing: content-box;
|
||||
box-shadow: rgb(223, 223, 223) 0 0 0 0 inset;
|
||||
transition: border 0.4s, box-shadow 0.4s;
|
||||
|
||||
.small {
|
||||
position: absolute;
|
||||
height: @switch-slider-diameter-px;
|
||||
width: @switch-slider-diameter-px;
|
||||
left: @switch-padding-px;
|
||||
bottom: @switch-padding-px;
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
|
||||
background-color: white;
|
||||
-webkit-transition: .4s;
|
||||
transition: .4s;
|
||||
border-radius: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
&.nb-switch-sm {
|
||||
@switch-width: 40;
|
||||
@switch-height: 22;
|
||||
@switch-padding: 0.5;
|
||||
@switch-slider-diameter: @switch-height - 2 * @switch-padding;
|
||||
@switch-width-px: unit(@switch-width, px);
|
||||
@switch-height-px: unit(@switch-height, px);
|
||||
@switch-padding-px: unit(@switch-padding, px);
|
||||
@switch-slider-diameter-px: unit(@switch-slider-diameter, px);
|
||||
@switch-slider-transform: @switch-width - 2 * @switch-padding - @switch-slider-diameter;
|
||||
@switch-slider-transform-px: unit(@switch-slider-transform, px);
|
||||
width: @switch-width-px;
|
||||
height: @switch-height-px;
|
||||
input:checked {
|
||||
& + .slider {
|
||||
& > .small {
|
||||
-webkit-transform: translateX(@switch-slider-transform-px);
|
||||
-ms-transform: translateX(@switch-slider-transform-px);
|
||||
transform: translateX(@switch-slider-transform-px);
|
||||
}
|
||||
}
|
||||
}
|
||||
/* The slider */
|
||||
.slider {
|
||||
border-radius: @switch-height-px;
|
||||
.small {
|
||||
height: @switch-slider-diameter-px;
|
||||
width: @switch-slider-diameter-px;
|
||||
left: @switch-padding-px;
|
||||
bottom: @switch-padding-px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
&.nb-switch-lg {
|
||||
@switch-width: 56;
|
||||
@switch-height: 32;
|
||||
@switch-padding: 0.5;
|
||||
@switch-slider-diameter: @switch-height - 2 * @switch-padding;
|
||||
@switch-width-px: unit(@switch-width, px);
|
||||
@switch-height-px: unit(@switch-height, px);
|
||||
@switch-padding-px: unit(@switch-padding, px);
|
||||
@switch-slider-diameter-px: unit(@switch-slider-diameter, px);
|
||||
@switch-slider-transform: @switch-width - 2 * @switch-padding - @switch-slider-diameter;
|
||||
@switch-slider-transform-px: unit(@switch-slider-transform, px);
|
||||
width: @switch-width-px;
|
||||
height: @switch-height-px;
|
||||
input:checked {
|
||||
& + .slider {
|
||||
& > .small {
|
||||
-webkit-transform: translateX(@switch-slider-transform-px);
|
||||
-ms-transform: translateX(@switch-slider-transform-px);
|
||||
transform: translateX(@switch-slider-transform-px);
|
||||
}
|
||||
}
|
||||
}
|
||||
/* The slider */
|
||||
.slider {
|
||||
border-radius: @switch-height-px;
|
||||
.small {
|
||||
height: @switch-slider-diameter-px;
|
||||
width: @switch-slider-diameter-px;
|
||||
left: @switch-padding-px;
|
||||
bottom: @switch-padding-px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
</style>
|
||||
@@ -1,61 +0,0 @@
|
||||
<template>
|
||||
<button ref="clipboardBtn"
|
||||
class="copy-plugin-clipboard-btn"
|
||||
data-clipboard-text="textToCopy"
|
||||
style="position: absolute;opacity:0;">
|
||||
{{textToCopy}}
|
||||
</button>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Clipboard from 'clipboard';
|
||||
import {safeCallback} from "../../common/util/Utils";
|
||||
|
||||
let nop = () => {
|
||||
};
|
||||
//这个组件主要用于提供dom元素。
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
textToCopy: "",
|
||||
clipboardBtn: null,
|
||||
successCallback: null,
|
||||
errorCallback: null
|
||||
}
|
||||
},
|
||||
computed: {},
|
||||
props: {},
|
||||
watch: {},
|
||||
methods: {
|
||||
copy(text, successCallback, errorCallback) {
|
||||
|
||||
let that = this;
|
||||
|
||||
this.successCallback = successCallback
|
||||
this.errorCallback = errorCallback
|
||||
|
||||
this.textToCopy = text;
|
||||
|
||||
//这里不用延迟设置,否则backyard会出错
|
||||
that.$refs.clipboardBtn.setAttribute("data-clipboard-text", text)
|
||||
that.$refs.clipboardBtn.click()
|
||||
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
let that = this;
|
||||
this.clipboardBtn = new Clipboard(this.$refs.clipboardBtn);
|
||||
|
||||
this.clipboardBtn.on('success', function (e) {
|
||||
console.info('clipboard success');
|
||||
safeCallback(that.successCallback)()
|
||||
});
|
||||
|
||||
this.clipboardBtn.on('error', function (e) {
|
||||
console.error('clipboard error:', e);
|
||||
safeCallback(that.errorCallback)()
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -1,32 +0,0 @@
|
||||
import CopyPlguinLayout from "./CopyPlguinLayout"
|
||||
|
||||
export default class CopyPlugin {
|
||||
|
||||
constructor() {
|
||||
this.$vm = null;
|
||||
}
|
||||
|
||||
install(Vue, options) {
|
||||
|
||||
const CopyPlguinComponent = Vue.extend(CopyPlguinLayout)
|
||||
if (!this.$vm) {
|
||||
this.$vm = new CopyPlguinComponent({
|
||||
el: document.createElement('div'),
|
||||
propsData: {}
|
||||
})
|
||||
document.body.appendChild(this.$vm.$el)
|
||||
}
|
||||
|
||||
Vue.$copyPlguin = this;
|
||||
|
||||
Vue.mixin({
|
||||
created: function () {
|
||||
this.$copyPlguin = Vue.$copyPlguin
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
copy(text, successCallback) {
|
||||
this.$vm.copy(text, successCallback);
|
||||
}
|
||||
}
|
||||
@@ -1,268 +0,0 @@
|
||||
<template>
|
||||
|
||||
<div class="clearfix">
|
||||
<div class="text-right mb10" v-if="showTrigger">
|
||||
<slot></slot>
|
||||
<button class="btn btn-sm btn-primary" @click="show=!show">
|
||||
<i class="fa fa-filter"></i>
|
||||
<span v-if="show">
|
||||
收起筛选
|
||||
</span>
|
||||
<span v-else>
|
||||
打开筛选
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
<NbExpanding>
|
||||
<div v-show="show" class="col-md-12 bg-aliceblue border-dash mb10">
|
||||
|
||||
<div class="form-horizontal pt10 pb10">
|
||||
|
||||
<div class="form-group" v-for="filter in filters" v-if="filter.type === FilterType.INPUT && filter.visible">
|
||||
<label class="col-md-2 control-label pt5">
|
||||
{{filter.name}}
|
||||
<span v-if="showOverwriteSwitcher">
|
||||
<NbSwitcher size="sm" v-model="filter.overwrite" :disabled="!editable || !overwrite"/>
|
||||
</span>
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<input type="text" :placeholder="filter.name" v-model="filter.value" class="form-control"
|
||||
@keyup.enter="search" :disabled="!editable">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" v-if="hasSortType">
|
||||
<label class="col-md-2 control-label pt5">排序</label>
|
||||
<div class="col-md-10">
|
||||
|
||||
<span v-for="filter in filters" v-if="filter.type === FilterType.SORT && filter.visible">
|
||||
<NbFilterSort :filter="filter" @change="search" :disabled="!editable"/>
|
||||
|
||||
<span class="mr30" v-if="showOverwriteSwitcher">
|
||||
<NbSwitcher size="sm" v-model="filter.overwrite" :disabled="!editable || !overwrite"/>
|
||||
</span>
|
||||
</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" v-if="hasCheckType">
|
||||
<label class="col-md-2 control-label pt5">勾选</label>
|
||||
<div class="col-md-10">
|
||||
|
||||
<span v-for="filter in filters" v-if="filter.type === FilterType.CHECK && filter.visible">
|
||||
<NbFilterCheck :filter="filter" @change="search"/>
|
||||
<span class="mr30" v-if="showOverwriteSwitcher">
|
||||
<NbSwitcher size="sm" v-model="filter.overwrite" :disabled="!editable || !overwrite"/>
|
||||
</span>
|
||||
</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" v-for="filter in filters"
|
||||
v-if="filter.type === FilterType.SELECTION && filter.visible">
|
||||
<label class="col-md-2 control-label pt5">
|
||||
{{filter.name}}
|
||||
<span v-if="showOverwriteSwitcher">
|
||||
<NbSwitcher size="sm" v-model="filter.overwrite" :disabled="!editable || !overwrite"/>
|
||||
</span>
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<NbFilterSelection :filter="filter" @change="search" :disabled="!editable"/>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" v-for="filter in filters"
|
||||
v-if="filter.type === FilterType.MULTI_SELECTION && filter.visible">
|
||||
<label class="col-md-2 control-label pt5">
|
||||
{{filter.name}}
|
||||
<span v-if="showOverwriteSwitcher">
|
||||
<NbSwitcher size="sm" v-model="filter.overwrite" :disabled="!editable || !overwrite"/>
|
||||
</span>
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<NbFilterMultiSelection :filter="filter" @change="search" :disabled="!editable"/>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" v-for="filter in filters"
|
||||
v-if="filter.type === FilterType.HTTP_SELECTION && filter.visible">
|
||||
<label class="col-md-2 control-label pt5">
|
||||
{{filter.name}}
|
||||
<span v-if="showOverwriteSwitcher">
|
||||
<NbSwitcher size="sm" v-model="filter.overwrite" :disabled="!editable || !overwrite"/>
|
||||
</span>
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<NbFilterHttpSelection :filter="filter" @change="search" :disabled="!editable"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="form-group" v-for="filter in filters"
|
||||
v-if="filter.type === FilterType.DATE_TIME_SELECTION && filter.visible">
|
||||
<label class="col-md-2 control-label pt5">
|
||||
{{filter.name}}
|
||||
<span v-if="showOverwriteSwitcher">
|
||||
<NbSwitcher size="sm" v-model="filter.overwrite" :disabled="!editable || !overwrite"/>
|
||||
</span>
|
||||
</label>
|
||||
<div class="col-md-10">
|
||||
<NbFilterDateTime :filter="filter" @change="search" :disabled="!editable"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" v-if="showOverwriteSwitcher">
|
||||
<div class="italic p20">提示:每个选项后面的开关表示是否允许用户通过传递参数来改变这项值。如排序的开关打开,表示用户可以自己指定该页面中列表的排序方式。</div>
|
||||
</div>
|
||||
|
||||
<div class="text-right" v-if="showSearchBtn">
|
||||
<button class="btn btn-sm btn-primary" @click.stop.prevent="search">
|
||||
<i class="fa fa-search"></i>
|
||||
搜索
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</NbExpanding>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import NbExpanding from '../NbExpanding'
|
||||
import NbSwitcher from '../NbSwitcher'
|
||||
import NbFilterSort from "./NbFilterSort";
|
||||
import NbFilterCheck from "./NbFilterCheck";
|
||||
import NbFilterDateTime from "./NbFilterDateTime.vue";
|
||||
import NbFilterSelection from "./NbFilterSelection";
|
||||
import NbFilterMultiSelection from "./NbFilterMultiSelection";
|
||||
import NbFilterHttpSelection from "./NbFilterHttpSelection";
|
||||
import {FilterType} from "../../model/base/FilterType";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
FilterType,
|
||||
show: false
|
||||
}
|
||||
},
|
||||
components: {
|
||||
NbExpanding,
|
||||
NbSwitcher,
|
||||
NbFilterSort,
|
||||
NbFilterCheck,
|
||||
NbFilterDateTime,
|
||||
NbFilterSelection,
|
||||
NbFilterMultiSelection,
|
||||
NbFilterHttpSelection
|
||||
},
|
||||
props: {
|
||||
//过滤器列表
|
||||
filters: {
|
||||
type: Array,
|
||||
required: true,
|
||||
validator: function (value) {
|
||||
return true;
|
||||
}
|
||||
},
|
||||
//是否直接将NbExpanding的内容展开
|
||||
showFilter: {
|
||||
type: Boolean,
|
||||
required: false
|
||||
},
|
||||
//是否显示“打开筛选/关闭筛选”的按钮(在配置专题页面搜索项时管用。)
|
||||
showTrigger: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
"default": true
|
||||
},
|
||||
//暴露给父组件来控制筛选框。
|
||||
showPanel: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
"default": false
|
||||
},
|
||||
//是否显示“搜索”按钮(在配置专题页面搜索项时管用。)
|
||||
showSearchBtn: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
"default": true
|
||||
},
|
||||
//是否显示可覆盖的开关(在配置专题页面搜索项时管用。)
|
||||
showOverwriteSwitcher: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
"default": false
|
||||
},
|
||||
//是否可编辑的状态(在配置专题页面时管用。)
|
||||
editable: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
"default": true
|
||||
},
|
||||
//是否可以自定义其中的overwrite属性
|
||||
overwrite: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
"default": true
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
||||
hasSortType() {
|
||||
for (let i = 0; i < this.filters.length; i++) {
|
||||
let filter = this.filters[i];
|
||||
if (filter.type === FilterType.SORT && filter.visible) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
},
|
||||
hasCheckType() {
|
||||
for (let i = 0; i < this.filters.length; i++) {
|
||||
let filter = this.filters[i];
|
||||
if (filter.type === FilterType.CHECK && filter.visible) {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
},
|
||||
watch: {
|
||||
"overwrite"(newVal, oldVal) {
|
||||
if (!newVal) {
|
||||
for (let i = 0; i < this.filters.length; i++) {
|
||||
let filter = this.filters[i];
|
||||
filter.overwrite = false
|
||||
}
|
||||
}
|
||||
},
|
||||
"showPanel"(newVal, oldVal) {
|
||||
this.show = newVal
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
search() {
|
||||
this.$emit("change")
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
if (this.showFilter) {
|
||||
this.show = true
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -1,61 +0,0 @@
|
||||
<template>
|
||||
|
||||
<div class="nb-filter-sort" v-show="filter.visible">
|
||||
|
||||
<select :title="filter.name" class="form-control" v-model="filter.value">
|
||||
<option :value="null">所有</option>
|
||||
<option :value="true">是</option>
|
||||
<option :value="false">否</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Filter from '../../model/base/Filter'
|
||||
import {FilterType} from "../../model/base/FilterType";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
}
|
||||
},
|
||||
props: {
|
||||
filter: {
|
||||
type: Filter,
|
||||
required: true,
|
||||
validator: function (value) {
|
||||
if (value.type !== FilterType.CHECK) {
|
||||
console.error('type must be `CHECK`.')
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
"filter.value"() {
|
||||
this.$emit("change");
|
||||
}
|
||||
},
|
||||
components: {
|
||||
|
||||
},
|
||||
computed: {},
|
||||
methods: {
|
||||
|
||||
},
|
||||
mounted() {
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="less" rel="stylesheet/less">
|
||||
|
||||
.nb-filter-sort {
|
||||
display: inline-block;
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
</style>
|
||||
@@ -1,100 +0,0 @@
|
||||
<template>
|
||||
<span class="nb-filter-datetime" v-show="filter.visible">
|
||||
<DatePicker
|
||||
v-model="date"
|
||||
type="date"
|
||||
placeholder="选择日期">
|
||||
</DatePicker>
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { DatePicker } from "element-ui";
|
||||
import Filter from "../../model/base/Filter";
|
||||
import {simpleDate, simpleDateTime, str2Date} from "../../common/filter/time";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
DatePicker
|
||||
},
|
||||
data(){
|
||||
return {
|
||||
//饿了么时间控件有重大bug,此处不能设置为null,只能是空字符串,否则出错。
|
||||
date: ""
|
||||
}
|
||||
},
|
||||
computed: {},
|
||||
props: {
|
||||
filter: {
|
||||
type: Filter,
|
||||
required: true,
|
||||
validator: function (value) {
|
||||
|
||||
if (!value["name"]) {
|
||||
console.error("name is required.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (value["value"]) {
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
},
|
||||
//TODO:不可选择时,需要良好的展现。
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
"default": false
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
"date"(newVal, oldVal){
|
||||
|
||||
if (newVal) {
|
||||
|
||||
//自己主动变化
|
||||
if (this.filter.value !== simpleDate(newVal)) {
|
||||
this.filter.value = simpleDate(newVal);
|
||||
|
||||
this.$emit("change");
|
||||
}
|
||||
} else {
|
||||
|
||||
//自己主动变化
|
||||
if (this.filter.value) {
|
||||
this.filter.value = null;
|
||||
this.$emit("change");
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
"filter.value"(newVal, oldVal){
|
||||
if (this.filter.value) {
|
||||
this.date = str2Date(this.filter.value);
|
||||
|
||||
} else {
|
||||
this.date = "";
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
clear(){
|
||||
this.filter.value = null;
|
||||
|
||||
|
||||
this.$emit("change");
|
||||
}
|
||||
},
|
||||
mounted(){
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" rel="stylesheet/less">
|
||||
|
||||
|
||||
</style>
|
||||
|
||||
@@ -1,99 +0,0 @@
|
||||
<template>
|
||||
<span class="nb-filter-datetime" v-show="filter.visible">
|
||||
<DatePicker
|
||||
v-model="date"
|
||||
type="datetime"
|
||||
placeholder="选择日期时间">
|
||||
</DatePicker>
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { DatePicker } from "element-ui";
|
||||
import Filter from "../../model/base/Filter";
|
||||
import {simpleDateTime, str2Date} from "../../common/filter/time";
|
||||
export default {
|
||||
components: {
|
||||
DatePicker
|
||||
},
|
||||
data(){
|
||||
return {
|
||||
//饿了么时间控件有重大bug,此处不能设置为null,只能是空字符串,否则出错。
|
||||
date: ""
|
||||
}
|
||||
},
|
||||
computed: {},
|
||||
props: {
|
||||
filter: {
|
||||
type: Filter,
|
||||
required: true,
|
||||
validator: function (value) {
|
||||
|
||||
if (!value["name"]) {
|
||||
console.error("name is required.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (value["value"]) {
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
},
|
||||
//TODO:不可选择时,需要良好的展现。
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
"default": false
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
"date"(newVal, oldVal){
|
||||
|
||||
if (newVal) {
|
||||
|
||||
//自己主动变化
|
||||
if (this.filter.value !== simpleDateTime(newVal)) {
|
||||
this.filter.value = simpleDateTime(newVal);
|
||||
|
||||
this.$emit("change");
|
||||
}
|
||||
} else {
|
||||
|
||||
//自己主动变化
|
||||
if (this.filter.value) {
|
||||
this.filter.value = null;
|
||||
this.$emit("change");
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
"filter.value"(newVal, oldVal){
|
||||
if (this.filter.value) {
|
||||
this.date = str2Date(this.filter.value);
|
||||
|
||||
} else {
|
||||
this.date = "";
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
clear(){
|
||||
this.filter.value = null;
|
||||
|
||||
|
||||
this.$emit("change");
|
||||
}
|
||||
},
|
||||
mounted(){
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" rel="stylesheet/less">
|
||||
|
||||
|
||||
</style>
|
||||
|
||||
@@ -1,82 +0,0 @@
|
||||
<template>
|
||||
<div class="nb-filter-http-input-selection" v-show="filter.visible">
|
||||
|
||||
<component v-bind:is="filter.component" :activeItem="activeItem"/>
|
||||
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Filter from '../../model/base/Filter'
|
||||
import Pager from '../../model/base/Pager'
|
||||
import NbExpanding from '../NbExpanding.vue'
|
||||
import NbPager from '../NbPager.vue'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
show: false,
|
||||
activeItem: new (this.filter.Clazz)()
|
||||
}
|
||||
},
|
||||
props: {
|
||||
filter: {
|
||||
type: Filter,
|
||||
required: true,
|
||||
validator: function (value) {
|
||||
|
||||
if (value['type'] !== 'HTTP_INPUT_SELECTION') {
|
||||
console.error('type must be `HTTP_INPUT_SELECTION`.')
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
},
|
||||
callback: {
|
||||
type: Function,
|
||||
required: false
|
||||
}
|
||||
},
|
||||
components: {
|
||||
NbExpanding,
|
||||
NbPager
|
||||
},
|
||||
watch: {
|
||||
'activeItem.uuid'(newVal, oldVal) {
|
||||
|
||||
if (newVal) {
|
||||
this.filter.value = this.activeItem.uuid
|
||||
|
||||
this.callback && this.callback()
|
||||
} else {
|
||||
this.filter.value = null
|
||||
|
||||
this.callback && this.callback()
|
||||
}
|
||||
},
|
||||
'filter.value'(newVal, oldVal) {
|
||||
|
||||
if (newVal && newVal === this.activeItem.uuid) {
|
||||
//inner change. ignore
|
||||
} else {
|
||||
//outer change.
|
||||
this.activeItem.uuid = newVal
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {},
|
||||
methods: {},
|
||||
mounted() {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" rel="stylesheet/less">
|
||||
|
||||
.nb-filter-http-input-selection {
|
||||
|
||||
}
|
||||
|
||||
</style>
|
||||
@@ -1,83 +0,0 @@
|
||||
<template>
|
||||
|
||||
<div class="nb-filter-http-selection" v-show="filter.visible">
|
||||
|
||||
<select :title="filter.name" class="form-control" v-model="filter.value">
|
||||
<option :value="null">所有</option>
|
||||
<option v-for="(item,index) in pager.data" :key="index" :value="item.uuid">
|
||||
{{item.getDisplayName()}}
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Filter from '../../model/base/Filter'
|
||||
import Pager from '../../model/base/Pager'
|
||||
import NbPager from '../NbPager.vue'
|
||||
import {FilterType} from "../../model/base/FilterType";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
pager: new Pager(this.filter.Clazz, Pager.MAX_PAGE_SIZE)
|
||||
}
|
||||
},
|
||||
props: {
|
||||
filter: {
|
||||
type: Filter,
|
||||
required: true,
|
||||
validator: function (value) {
|
||||
if (value.type !== FilterType.HTTP_SELECTION) {
|
||||
console.error('type must be `HTTP_SELECTION`.')
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
"filter.value"() {
|
||||
this.$emit("change");
|
||||
}
|
||||
},
|
||||
components: {
|
||||
NbPager
|
||||
},
|
||||
computed: {},
|
||||
methods: {
|
||||
search() {
|
||||
this.pager.page = 0
|
||||
this.refresh()
|
||||
},
|
||||
refresh() {
|
||||
|
||||
if (this.filter.initFilter) {
|
||||
|
||||
for (let key in this.filter.initFilter) {
|
||||
if (this.filter.initFilter.hasOwnProperty(key)) {
|
||||
this.pager.setFilterValue(key, this.filter.initFilter[key])
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
this.pager.httpFastPage()
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.refresh()
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="less" rel="stylesheet/less">
|
||||
|
||||
.nb-filter-http-selection {
|
||||
display: inline-block;
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
</style>
|
||||
@@ -1,65 +0,0 @@
|
||||
<template>
|
||||
|
||||
<span class="pt5" v-show="filter.visible">
|
||||
<span class="mr20 inline-block mb10" v-for="(option, index) in filter.options">
|
||||
<NbCheckbox :val="option.value" v-model="filter.value" :disabled="disabled"></NbCheckbox>
|
||||
<span :class="'label label-'+option.style">{{option.name}}</span>
|
||||
</span>
|
||||
</span>
|
||||
|
||||
</template>
|
||||
|
||||
|
||||
<script>
|
||||
import Filter from '../../model/base/Filter'
|
||||
import NbCheckbox from '../NbCheckbox.vue'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
courses: []
|
||||
}
|
||||
},
|
||||
|
||||
props: {
|
||||
filter: {
|
||||
type: Filter,
|
||||
required: true,
|
||||
validator: function (value) {
|
||||
|
||||
if (value['type'] !== 'MULTI_SELECTION') {
|
||||
console.error('type must be `MULTI_SELECTION`.')
|
||||
return false
|
||||
}
|
||||
|
||||
if (!value.value) {
|
||||
value.value = []
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
"default": false
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
"filter.value"() {
|
||||
this.$emit("change");
|
||||
}
|
||||
},
|
||||
computed: {},
|
||||
components: {
|
||||
NbCheckbox
|
||||
},
|
||||
methods: {}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
<style lang="less" rel="stylesheet/less">
|
||||
|
||||
</style>
|
||||
|
||||
@@ -1,86 +0,0 @@
|
||||
<template>
|
||||
|
||||
<NbBtnDropdown :name="$t(current.name)" size="sm" :color="currentStyle" v-show="filter.visible">
|
||||
<ul>
|
||||
<li>
|
||||
<a href="javascript:void(0)" @click="select(-1)">{{$t("all")}}</a>
|
||||
</li>
|
||||
<li v-for="(option, index) in filter.options">
|
||||
<a href="javascript:void(0)" @click="select(index)">{{$t(option.name)}}</a>
|
||||
</li>
|
||||
</ul>
|
||||
</NbBtnDropdown>
|
||||
|
||||
</template>
|
||||
|
||||
|
||||
<script>
|
||||
import Filter from "../../model/base/Filter";
|
||||
import NbBtnDropdown from "../NbBtnDropdown.vue";
|
||||
|
||||
export default {
|
||||
data () {
|
||||
return {
|
||||
all: {
|
||||
name: "all",
|
||||
value: null,
|
||||
style: "default"
|
||||
}
|
||||
}
|
||||
},
|
||||
props: {
|
||||
filter: {
|
||||
type: Filter,
|
||||
required: true,
|
||||
validator: function (value) {
|
||||
|
||||
if (value["type"] !== "SELECTION" && value["type"] !== "HTTP_SELECTION") {
|
||||
console.error("type must be `SELECTION` or `HTTP_SELECTION`.");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
},
|
||||
//TODO:完成禁用状态。
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
"default": false
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
current(){
|
||||
if (this.filter.active === -1) {
|
||||
return this.all;
|
||||
}
|
||||
return this.filter.options[this.filter.active];
|
||||
},
|
||||
currentStyle(){
|
||||
if (this.current.style) {
|
||||
return this.current.style;
|
||||
} else {
|
||||
return "default";
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
NbBtnDropdown
|
||||
},
|
||||
methods: {
|
||||
|
||||
select(index){
|
||||
this.filter.active = index;
|
||||
this.filter.value = this.current.value;
|
||||
this.$emit("change");
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
<style lang="less" rel="stylesheet/less">
|
||||
|
||||
</style>
|
||||
|
||||
@@ -1,106 +0,0 @@
|
||||
<template>
|
||||
<span class="nb-sort" v-show="filter.visible">
|
||||
|
||||
<span class="sort-main">
|
||||
<button class="btn" :class="{'btn-info':filter.value,'btn-default':!filter.value}" :disabled="disabled" @click="change">
|
||||
|
||||
<span>
|
||||
<i class="fa fa-arrow-up" v-show="filter.value==='ASC'"></i>
|
||||
<i class="fa fa-arrow-down" v-show="filter.value==='DESC'"></i>
|
||||
</span>
|
||||
{{filter.name}}
|
||||
</button>
|
||||
<i class="fa fa-times-circle-o sort-close" v-show="filter.value && !disabled" @click="clear"></i>
|
||||
</span>
|
||||
<span> </span>
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Filter from "../../model/base/Filter";
|
||||
export default {
|
||||
props: {
|
||||
filter: {
|
||||
type: Filter,
|
||||
required: true,
|
||||
validator: function (value) {
|
||||
|
||||
if (!value["name"]) {
|
||||
console.error("name is required.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (value["value"]) {
|
||||
|
||||
if (value["value"] !== "ASC" && value["value"] !== "DESC") {
|
||||
console.error("order can only be ASC or DESC.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
"default": false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
change(){
|
||||
if (this.filter.value) {
|
||||
if (this.filter.value === "ASC") {
|
||||
this.filter.value = "DESC";
|
||||
} else {
|
||||
this.filter.value = "ASC";
|
||||
}
|
||||
} else {
|
||||
this.filter.value = "ASC";
|
||||
}
|
||||
this.$emit("change");
|
||||
},
|
||||
clear(){
|
||||
this.filter.value = null;
|
||||
this.$emit("change");
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" rel="stylesheet/less">
|
||||
.nb-sort{
|
||||
|
||||
.sort-main{
|
||||
position:relative;
|
||||
|
||||
.sort-close {
|
||||
|
||||
opacity: 0.85;
|
||||
-webkit-transition: all 0.1s;
|
||||
-o-transition: all 0.1s;
|
||||
transition: all 0.1s;
|
||||
cursor:pointer;
|
||||
position:absolute;
|
||||
top:-13px;
|
||||
right:-2px;
|
||||
font-size: 18px;
|
||||
color: #555;
|
||||
|
||||
|
||||
&:hover{
|
||||
text-decoration: none;
|
||||
opacity: 1;
|
||||
-moz-transform: scale(1.2);
|
||||
-webkit-transform: scale(1.2);
|
||||
-o-transform: scale(1.2);
|
||||
-ms-transform: scale(1.2);
|
||||
transform: scale(1.2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
|
||||